CoinUtils-2.9.10/0000755000076600007660000000000012244605316012175 5ustar coincoinCoinUtils-2.9.10/config.sub0000755000076600007660000007772610651755432014210 0ustar coincoin#! /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: CoinUtils-2.9.10/AUTHORS0000644000076600007660000000040310740702760013242 0ustar coincoinFor the copyright information / authorship for files in this directory, please see the comments in the header of each file. For copyright information / authorship of the content in each of the subdirectories, please see the AUTHORS file in that subdirectory. CoinUtils-2.9.10/doxydoc/0000755000076600007660000000000012244605315013645 5ustar coincoinCoinUtils-2.9.10/doxydoc/doxygen.conf.in0000644000076600007660000017423711431335065016613 0ustar coincoin# 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@ # 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 = NO # 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 CoinUtils-2.9.10/INSTALL0000644000076600007660000000651410740302141013221 0ustar coincoinThese 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 CoinUtils 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 "CoinUtils", you type svn co https://projects.coin-or.org/svn/CoinUtils/trunk CoinUtils To download stable/2.1 you'd type: svn co https://projects.coin-or.org/svn/CoinUtils/stable/2.1 CoinUtils etc. 2. Download the tarball from http://www.coin-or.org/download/source/CoinUtils and extract it. For example, for the release 2.1.2 you type gunzip CoinUtils-2.1.2.tgz tar xvf CoinUtils-2.1.2.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., CoinUtils or CoinUtils-2.1.2). 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 CoinUtils Trac page https://projects.coin-or.org/CoinUtils for more information. If everything went fine, you will see at the end of the output "Main configuration of CoinUtils 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 CoinUtils/examples/ subdirectory, see also the information at https://projects.coin-or.org/BuildTools/wiki/user-examples CoinUtils-2.9.10/BuildTools/0000755000076600007660000000000012244605316014255 5ustar coincoinCoinUtils-2.9.10/BuildTools/config.sub0000755000076600007660000007772610637360060016261 0ustar coincoin#! /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: CoinUtils-2.9.10/BuildTools/commit_new_release0000755000076600007660000001673711510516042020052 0ustar coincoin#!/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 2070 2011-01-04 04:03:46Z lou $ # # 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 .` 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" CoinUtils-2.9.10/BuildTools/compile_f2c/0000755000076600007660000000000012244605315016436 5ustar coincoinCoinUtils-2.9.10/BuildTools/compile_f2c/INSTALL0000644000076600007660000000411411053565746017501 0ustar coincoinThe 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 CoinUtils-2.9.10/BuildTools/compile_f2c/compile_f2c0000755000076600007660000000530211504414745020551 0ustar coincoin#!/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 CoinUtils-2.9.10/BuildTools/compile_f2c/README0000644000076600007660000000132711504414745017324 0ustar coincoinThe 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. CoinUtils-2.9.10/BuildTools/run_autotools0000755000076600007660000003217611610272367017133 0ustar coincoin#!/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 2365 2011-07-16 11:24:39Z 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 CoinUtils-2.9.10/BuildTools/prepare_new_stable0000755000076600007660000005276512214547251020063 0ustar coincoin#!/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 <&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: CoinUtils-2.9.10/BuildTools/headers/0000755000076600007660000000000012244605316015670 5ustar coincoinCoinUtils-2.9.10/BuildTools/headers/configall_system.h0000644000076600007660000000072411063737131021405 0ustar coincoin/* * 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 CoinUtils-2.9.10/BuildTools/headers/configall_system_msc.h0000644000076600007660000001017311654311600022241 0ustar coincoin/* 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 CoinUtils-2.9.10/BuildTools/depcomp0000755000076600007660000003710010430173037015626 0ustar coincoin#! /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: CoinUtils-2.9.10/BuildTools/MSVisualStudio/0000755000076600007660000000000012244605316017150 5ustar coincoinCoinUtils-2.9.10/BuildTools/MSVisualStudio/v10/0000755000076600007660000000000012244605316017556 5ustar coincoinCoinUtils-2.9.10/BuildTools/MSVisualStudio/v10/Release.props0000755000076600007660000000061012052443620022216 0ustar coincoin true CoinUtils-2.9.10/BuildTools/MSVisualStudio/v10/Debug.props0000755000076600007660000000122012154626433021672 0ustar coincoin MultiThreadedDebugDLL true EnableFastChecks Disabled true CoinUtils-2.9.10/BuildTools/MSVisualStudio/v10/Common.props0000755000076600007660000000135412204424023022067 0ustar coincoin $(SolutionDir)$(Platform)-$(PlatformToolset)-$(Configuration)\ $(Platform)-$(PlatformToolset)-$(Configuration)\ Level3 true $(OutDir);%(AdditionalLibraryDirectories) CoinUtils-2.9.10/BuildTools/MSVisualStudio/v9/0000755000076600007660000000000012244605316017506 5ustar coincoinCoinUtils-2.9.10/BuildTools/MSVisualStudio/v9/BuildTools.vcproj0000644000076600007660000000534111572120430023006 0ustar coincoin CoinUtils-2.9.10/BuildTools/ltmain.sh0000755000076600007660000057753010430173037016114 0ustar coincoin# 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: CoinUtils-2.9.10/BuildTools/prepare_new_release0000755000076600007660000006217212214547251020222 0ustar coincoin#!/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 <, 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: CoinUtils-2.9.10/BuildTools/Makemain.inc0000644000076600007660000000434711530272210016470 0ustar coincoin# Copyright (C) 2006, 2007 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makemain.inc 2107 2011-02-20 20:07:36Z stefan $ # Author: Andreas Waechter IBM 2006-04-13 ######################################################################## # Documentation installation # ######################################################################## DocFiles = README AUTHORS LICENSE DocInstallDir = $(datadir)/coin/doc/$(PACKAGE_NAME) 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 CoinUtils-2.9.10/BuildTools/coin-functions0000644000076600007660000005012511610343073017134 0ustar coincoin # Utility function definitions for the various COIN scripts. # Copyright (c) 2010 Lou Hafer Simon Fraser 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$ # Functions to disassemble svn URLs and extract relevant bits, and utilities # to find the best (most recent) stable and release URLs, calculate libtool # version numbers, and compare URLs for compatibility based on major and minor # version. Complicated because we have to account for trunk/stable/release and # for the variant syntax of Data and ThirdParty URLs. For your normal project, # it's # https://projects.coin-or.org/svn/ProjName/trunk # https://projects.coin-or.org/svn/ProjName/stable/M.m # https://projects.coin-or.org/svn/ProjName/releases/M.m.r # with the proviso that sometimes it's # https://projects.coin-or.org/svn/ProjName/SubProj/trunk # etc. # For ThirdParty, it's just like a normal project, except the prefix string # is longer: # https://projects.coin-or.org/svn/BuildTools/ThirdParty/ProjName # Data is the real pain. Prior to 20101103 (1.0.x series), it had this form: # https://projects.coin-or.org/svn/Data/trunk/ProjName # https://projects.coin-or.org/svn/Data/stable/M.m/ProjName # https://projects.coin-or.org/svn/Data/releases/M.m.r/ProjName # After 20101103 (1.1 and subsequent), it uses the same layout as ThirdParty, # namely /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 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 } CoinUtils-2.9.10/BuildTools/set_externals0000755000076600007660000001173411504414745017073 0ustar coincoin#!/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 </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_MINGW_LD_FIX # ########################################################################### # This macro is included by any PROG_compiler macro, to set the LD # environment variable on MinGW to the correct value (link). If we're # building from cygwin with MSVC tools (cl/link), then we do want link and # you'd better have your PATH variable straight, else you'll be doing file # links instead of code links! AC_DEFUN([AC_COIN_MINGW_LD_FIX], [AC_REQUIRE([AC_COIN_ENABLE_MSVC]) case $build in *-mingw*) if test "${LD+set}" = set; then :; else LD=link fi ;; esac if test $enable_msvc = yes ; then if test "x${LD+set}" = xset; then :; else LD=link fi fi ]) ########################################################################### # 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="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* ) ;; 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" case $build in *-darwin*) ;; *) coin_warn_cxxflags="-pedantic-errors $coin_warn_cxxflags" ;; esac 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 mingw build with MS or intel compiler case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) AC_COIN_MINGW_LD_FIX ;; 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_MINGW_LD_FIX]) 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 ;; *-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" case $build in *-darwin*) ;; *) coin_warn_cflags="-pedantic-errors $coin_warn_cflags" ;; esac 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*) AC_COIN_MINGW_LD_FIX ;; 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_MINGW_LD_FIX]) 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 "$F77" in ifort* | */ifort* | IFORT* | */IFORT*) AC_COIN_MINGW_LD_FIX ;; 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 gfortran g95 g77" 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 # On Cygwin and AIX, building DLLs doesn't work case $build in *-cygwin* | *-mingw*) coin_disable_shared=yes if test x"$enable_shared" = xyes; then case "$CXX" in clang* ) AC_MSG_WARN([DLL building not supported. I'm disabling your choice.]) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) AC_MSG_NOTICE([DLL building not supported, but will build with -MD(d) instead of -MT(d).]) ;; *) AC_MSG_WARN([DLL building not supported. I'm disabling your choice.]) ;; esac fi ;; *-aix*) coin_disable_shared=yes platform=AIX if test x"$enable_shared" = xyes; then AC_MSG_WARN([Shared objects are not supported. I'm disabling your choice.]) 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],[], [dependency_linking="$enableval"], [dependency_linking=no]) # ToDo # For now, don't use the -no-undefined flag, since the Makefiles are # not yet set up that way. But we need to fix this, when we want # to comile DLLs under Windows. 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 mydos2unix= ;; 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. # This also defines the automake conditional COIN_ENABLE_GNU_PACKAGES 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]) # 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]) # 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 for chkProj in $coin_subdirs ; do if test "$chkProj" = "$proj" ; then # 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 eval doxydir="`pwd`/${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 fi done # 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) != skipping; 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)= m4_toupper($1_DATA)= 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 AC_MSG_CHECKING([whether user supplied BLASLIB=\"$use_blas\" works]) coin_need_flibs=no coin_save_LIBS="$LIBS" LIBS="$use_blas $LIBS" 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])]) 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" AC_MSG_CHECKING([for BLAS in MKL (32bit)]) LIBS="mkl_intel_c.lib mkl_sequential.lib mkl_core.lib $LIBS" 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])]) LIBS="$coin_save_LIBS" if test "x$use_blas" = x ; then AC_MSG_CHECKING([for BLAS in MKL (64bit)]) LIBS="mkl_intel_lp64.lib mkl_sequential.lib mkl_core.lib $LIBS" 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])]) LIBS="$coin_save_LIBS" fi ;; esac ;; *-darwin*) AC_MSG_CHECKING([for BLAS in Veclib]) coin_need_flibs=no coin_save_LIBS="$LIBS" LIBS="-framework vecLib $LIBS" AC_COIN_TRY_FLINK([daxpy], [use_blas='-framework vecLib' 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 AC_MSG_CHECKING([whether user supplied LAPACKLIB=\"$use_lapack\" works]) coin_need_flibs=no use_lapack="$use_lapack $BLAS_LIBS" coin_save_LIBS="$LIBS" LIBS="$use_lapack $LIBS" 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])]) 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 AC_MSG_CHECKING([whether LAPACK is already available with BLAS library]) coin_save_LIBS="$LIBS" coin_need_flibs=no LIBS="$BLAS_LIBS $LIBS" 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])]) 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 CoinUtils-2.9.10/BuildTools/share/0000755000076600007660000000000012244605316015357 5ustar coincoinCoinUtils-2.9.10/BuildTools/share/config.site0000644000076600007660000002747311527752304017532 0ustar coincoin# This file contains site-specific settings for the configure scripts. # It can be used to specify options that are otherwise given to the # configure script as command line arguments or environment variables. # # This file must be located either in $prefix/share or $prefix/etc, where # prefix is the installation location. For the COIN packages, this is # by default the directory where the configure of the main package is run, # unless the --prefix option was given to the configure script. # Alternatively, one can set the environment variable CONFIG_SITE to the full # path to this file. # # This template file also serves as documentation for many available # configure options for COIN-OR projects. Please be aware of the following # conventions that translate the command line format into the one for the # config.site file: # # Command line version config.site version # # --with-NAME1-NAME2 with_NAME1_NAME2=yes # --with-NAME1-NAME2="VALUE" with_NAME1_NAME2="VALUE" # --without-NAME1-NAME2 with_NAME1_NAME2=no # --enable-NAME1-NAME2 enable_NAME1_NAME2=yes # --enable-NAME1-NAME2="VALUE" enable_NAME1_NAME2="VALUE" # --disable-NAME1-NAME2 enable_NAME1_NAME2=no # # Here, "NAME1-NAME2" is some string corresponding to a particular option; # note that dashes (-) are converted into underscores(_). VALUE is the # string that is the actual argument to an option. # Other variables that are directly assigned in the configure command line, # such as CXX=g++, are also written in this way in the config.site file. # # Note: This is a /bin/sh script, setting variables. There must be no # space between "=" and the value, and if required, a quotation must be # used. # # In the following we show some arguments for configure that can be used # for the COIN configure scripts. ########################################################################## # C++ compiler choice and options # ########################################################################## # C++ compiler name #CXX=g++ # C++ compiler options, overwriting configure's default choice #CXXFLAGS='-O3 -pipe' # Additional C++ compiler options that are added to configure's default # choice #ADD_CXXFLAGS='-pg' # Additional preprocessor definitions for the C++ compiler #CXXDEFS='-DZEROFAULT' # Sometimes it is desirable to compile some projects in debug mode, # and some in default optimized mode (see also enable_debug_compile # below). In those cases, you can set the separate C++ compiler # options for optimized and debug compilation using the following # variables: #OPT_CXXFLAGS='-O3 -pipe' #DBG_CXXFLAGS='-g -pipe' # If you are using MPI, it is best to specify the underlying C++ # compiler for the configure script in CXX (so that it can figure out # the default compiler options and test them), but then to tell the # configure script the actual MPI compiler (wrapper) using the # following variable #MPICXX='mpiCC' # If a project's library is generated from C++, but the compilers used # for linking is a C or Fortran compiler, one has to provide this # compilers with the C++ runtime libraries. This is done with the # following variable: #CXXLIBS='-lstdc++ -lm' ########################################################################## # C compiler choice and options # ########################################################################## # C compiler name #CC=gcc # C compiler options, overwriting configure's default choice #CFLAGS='-O3 -pipe' # Additional C compiler options that are added to configure's default choice #ADD_CFLAGS='-pg' # Additional preprocessor definitions for the C compiler #CDEFS='-DZEROFAULT' # Sometimes it is desirable to compile some projects in debug mode, # and some in default optimized mode (see also enable_debug_compile # below). In those cases, you can set the separate C compiler # options for optimized and debug compilation using the following # variables: #OPT_CFLAGS='-O3 -pipe' #DBG_CFLAGS='-g -pipe' # If you are using MPI, it is best to specify the underlying C # compiler for the configure script in CC (so that it can figure out # the default compiler options and test them), but then to tell the # configure script the actual MPI compiler (wrapper) using the # following variable #MPICC='mpicc' ########################################################################## # Fortran compiler choice and options # ########################################################################## # Fortran compiler name #F77=gfortran # Fortran compiler options, overwriting configure's default choice #FFLAGS='-O3 -pipe' # Additional Fortran compiler options that are added to configure's default # choice #ADD_FFLAGS='-pg' # Sometimes it is desirable to compile some projects in debug mode, # and some in default optimized mode (see also enable_debug_compile # below). In those cases, you can set the separate Fortran compiler # options for optimized and debug compilation using the following # variables: #OPT_FFLAGS='-O3 -pipe' #DBG_FFLAGS='-g -pipe' # If you are using MPI, it is best to specify the underlying Fortran # compiler for the configure script in F77 (so that it can figure out # the default compiler options and test them), but then to tell the # configure script the actual MPI compiler (wrapper) using the # following variable #MPIF77='mpif77' ########################################################################## # Utility programs and their options # ########################################################################## # Program for creating and extracting archives #AR=ar # Program for listing symbols in a binary #NM=nm ########################################################################## # Flags for setting compilation and configuration modes # ########################################################################## ##### INSTALLATION LOCATION # This --prefix flag determines where the binaries etc. are going to # be installed. By default, this is equal to the directory where # 'configure' is run, so that the 'bin/', 'lib/' etc. directories are # created as subdirectories there. One could also choose other # destinations, but keep in mind that some COIN packages use the same # COIN "sub-projects", but possibly different and conflicting # versions. #prefix=$HOME/MyCOIN ##### COMPILATION MODE UNDER CYGWIN # This options can only be used under Cygwin, and it has the following # possible choices: # - mingw (default): Use the GNU compilers to compile binaries that # can be run independently of Cygwin (particularly without # Cygwin1.dll) # - msvc: Use the "native" Windows compilers, such as cl, ifort # - no: Use GNU compilers to generate Cygwin-specific binaries. #enable_doscompile=msvc ##### SKIPPING CONFIGURATION AND COMPILATION OF SUBPROJECTS # It is possible to skip the configuration and compilation of COIN # projects in a package, even when the source code for the subproject # is there. For this, list the directory names that are supposed to # be skipped in the variable #COIN_SKIP_PROJECTS="Bcp Couenne" ##### DEBUG COMPILATION # Switch on debug compilation for all projects. (Note that this will also # switch to the usage of static instead of shared libraries, see # enable_shared below) #enable_debug=yes # Switch on debug compilation only for a specific project is done with # the command line flag enable-debug-project, where "project" is the string # with the project name (say, Clp, for the example). #enable_debug_clp=yes # Similarly, if the global enable-debug is set, we can switch it off for a # particular project, using #enable_debug_clp=no # Each project can make use of a project-specific "checklevel". It # depends on the project manager, if and how this is used. The level # checklevel is specified with the --with-PROJECT-checklevel, where # PROJECT is the lower-case string of the project name. For Ipopt, # this looks like #with_ipopt_checklevel=1 # Each project can make use of a project-specific "verbosity" level. # It depends on the project manager, if and how this is used. The # level checklevel is specified with the --with-PROJECT-verbosity, # where PROJECT is the lower-case string of the project name. For # Ipopt, this looks like #with_ipopt_verbosity=1 ##### CREATING SHARED VS. STATIC LIBRARIES # By default, projects that are compiled in optimized mode, produce # shared libraries (if supported), and those compiled in debug mode, # produce static libraries. This behavior can be changed using the # following options: # disable shared mode: compile every library as static #enable_shared=no # disable static mode: compile every library as shared #enable_static=no # enable shared mode: compile always a shared library (possibly in # addition to a static one) #enable_shared=yes # enable shared mode: compile always a static library (possibly in # addition to a shared one) #enable_static=yes ##### MAINTAINER MODE # Project developers might want to make changes to the autotools files. # Using --enable-maintainer-mode enables a number of automatic updates, # including: # - regeneration of Makefiles if Makefile.am is changes, # - regeneration and rerunning of configure script if required # - updating the svn externals if the Externals file has changed #enable_maintainer_mode ########################################################################## # Third-Party Codes and Packages # ########################################################################## ##### GENERIC FLAGS # Use the following if we want to have configure check for GNU packages # (such as zlib, bzlib, and readline) #enable_gnu_packages=yes # To use some third-party libraries, such as LP solvers, one needs to # specify both the directory with all header files as well as the # linker flags for linking with the library. This is done with the # --with-LIB-incdir and --with-LIB-lib configure flags, where "LIB" is # replaced by the lower-case short-form of the library. A possibly # incomplete list of choices for LIB in the current COIN-OR projects is: # cplex, gurobi, mosek, soplex, xpress. # For Cplex, one might set the following: #with_cplex_incdir='/usr/ilog/cplex90/include/ilcplex' #with_cplex_lib='-L/usr/ilog/cplex90/lib/static_pic -lcplex -lpthread' ##### FLAGS FOR SPECIFIC LIBRARIES IN THIRDPARTY # For some third-party dependencies, COIN supports automatic build # procedures, for which the user can download the external source code # into appropriate subdirectories in a "ThirdParty" subdirectory. But # the user might want to specify locations of already precompiled versions # of those dependencies. Those flags are discussed next. ### BLAS # Flag indicating where to find Blas. If --with-blas is not used, # the configure script will try a few default locations of Blas, and # if it doesn't find Blas, it will test if the Blas source files are # in ThirdParty/Blas. If so, those will be compiled, otherwise we # assume that Blas is not available. # # Specify precompiled Blas libraries via linker flags: #with_blas="-lf77blas -latlas /usr/lib64/libg2c.so" # Specify that Blas should be compiled within the #with_blas=BUILD # Specify that Blas should not be used #with_blas=no ### LAPACK # Flag indicating where to find Lapack. If --with-lapack is not used, # the configure script will try a few default locations of Lapack, and # if it doesn't find Lapack, it will test if the Lapack source files are # in ThirdParty/Lapack. If so, those will be compiled, otherwise we # assume that Lapack is not available. # # Specify precompiled Lapack libraries via linker flags: #with_lapack="-L$HOME/lib -lmylapack" # Specify that Lapack should be compiled within the #with_lapack=BUILD # Specify that Lapack should not be used #with_lapack=no CoinUtils-2.9.10/BuildTools/config.guess0000755000076600007660000012706310637360060016604 0ustar coincoin#! /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: CoinUtils-2.9.10/BuildTools/commit_new_stable0000755000076600007660000001635711510516042017702 0ustar coincoin#!/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$ # # Adapted from commit_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. 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_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 .` 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" CoinUtils-2.9.10/install-sh0000755000076600007660000002202110430261150014163 0ustar coincoin#!/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: CoinUtils-2.9.10/LICENSE0000644000076600007660000000033110740702760013177 0ustar coincoinFor licensing information for files in this directory, please see the comments in the header of each file. For licensing of the content in each of the subdirectories, please see the LICENSE file in that subdirectory. CoinUtils-2.9.10/Makefile.am0000644000076600007660000000447411510502126014230 0ustar coincoin# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 1377 2011-01-04 02:22:14Z 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: cd CoinUtils; $(MAKE) test unitTest: test tests: for dir in $(subdirs); do \ if test -r $$dir/test/Makefile; then \ (cd $$dir; $(MAKE) test) \ fi; \ done unitTests: tests # Generate doxygen doc'n in subdirectories (except @PACKAGE_NAME@) if a doxydoc # directory is present, then do the base, if present. 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 # install-data-local: install-doxydoc uninstall-local: uninstall-doxydoc .PHONY: test unitTest tests unitTests doxydoc ######################################################################## # Maintainer Stuff # ######################################################################## # Files that are generated and should be cleaned with make distclean DISTCLEANFILES = coin_subdirs.txt include BuildTools/Makemain.inc CoinUtils-2.9.10/Dependencies0000644000076600007660000000021212101340610014462 0ustar coincoinBuildTools https://projects.coin-or.org/svn/BuildTools/stable/0.7/ Data/Sample https://projects.coin-or.org/svn/Data/Sample/stable/1.2/ CoinUtils-2.9.10/configure.ac0000644000076600007660000000520712244556771014501 0ustar coincoin# Copyright (C) 2006, 2009 International Business Machines. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: configure.ac 1667 2013-11-25 05:19:53Z tkr $ # Author: Andreas Waechter IBM 2006-04-13 ############################################################################# # Names and other basic things # ############################################################################# AC_PREREQ(2.59) AC_INIT([CoinUtils],[2.9.10],[coinutils@lists.coin-or.org]) AC_COPYRIGHT([ Copyright 2006, 2009 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`]) ############################################################################# # Do the tests necessary to configure compilers and initialise autotools # ############################################################################# AC_COIN_CREATE_LIBTOOL ############################################################################# # Check which subprojects might need to be configured # ############################################################################# AC_COIN_MAIN_PACKAGEDIR(Glpk,ThirdParty,[glpk/src/glplpx01.c]) AC_COIN_MAIN_PACKAGEDIR(Blas,ThirdParty,[daxpy.f]) AC_COIN_MAIN_PACKAGEDIR(Lapack,ThirdParty,[LAPACK/SRC/dlarf.f]) AC_COIN_MAIN_PACKAGEDIR(Sample,Data) AC_COIN_MAIN_PACKAGEDIR(Netlib,Data) AC_COIN_MAIN_PACKAGEDIR(CoinUtils) ############################################################################# # Check for doxygen # ############################################################################# AC_COIN_DOXYGEN() ############################################################################## # 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]) AC_CONFIG_FILES([doxydoc/doxygen.conf]) # Finally, we let configure write all the output... AC_COIN_FINALIZE CoinUtils-2.9.10/Data/0000755000076600007660000000000012244605316013046 5ustar coincoinCoinUtils-2.9.10/Data/Sample/0000755000076600007660000000000012244605317014270 5ustar coincoinCoinUtils-2.9.10/Data/Sample/app0110R.time0000755000076600007660000000030011015552002016333 0ustar coincoinNAME MYSMPS PERIODS LP C0000001 R0000001 STG00001 C0000029 R0000010 STG00002 C0000037 R0000014 STG00003 ENDATA CoinUtils-2.9.10/Data/Sample/bug.time0000755000076600007660000000021311015552002015707 0ustar coincoinTIME BUG PERIODS LP x01 C0 STG01 x04 C1 STG02 ENDATA CoinUtils-2.9.10/Data/Sample/galenetbnds.mps0000644000076600007660000000501711431323442017273 0ustar coincoin* 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 CoinUtils-2.9.10/Data/Sample/retail3.block0000644000076600007660000000266012136243266016654 0ustar coincoin0 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 CoinUtils-2.9.10/Data/Sample/app0110.stoch0000755000076600007660000001170711015552002016410 0ustar coincoinNAME 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 CoinUtils-2.9.10/Data/Sample/config.sub0000755000076600007660000007772611405216230016264 0ustar coincoin#! /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: CoinUtils-2.9.10/Data/Sample/atm_5_10_1.mps0000644000076600007660000032537212136243266016553 0ustar coincoinNAME 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 CoinUtils-2.9.10/Data/Sample/p0201.mps0000644000076600007660000023142210430174061015547 0ustar coincoin*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 CoinUtils-2.9.10/Data/Sample/bug.stoch0000755000076600007660000000060511015552002016076 0ustar coincoinNAME 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 CoinUtils-2.9.10/Data/Sample/lseu.mps0000644000076600007660000004211612223473003015755 0ustar coincoin*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 CoinUtils-2.9.10/Data/Sample/share2qp.mps0000644000076600007660000006223110430174061016532 0ustar coincoinNAME 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 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 CoinUtils-2.9.10/Data/Sample/app0110R.stoch0000755000076600007660000001062311015552002016526 0ustar coincoinNAME 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 CoinUtils-2.9.10/Data/Sample/exmip1.lp0000755000076600007660000000077012167773507016052 0ustar coincoin\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 CoinUtils-2.9.10/Data/Sample/finnis.mps0000644000076600007660000030727410662211140016301 0ustar coincoinNAME 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 CoinUtils-2.9.10/Data/Sample/pack1.mps0000644000076600007660000000312110430174061015775 0ustar coincoin************************************************************************ * * 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 CoinUtils-2.9.10/Data/Sample/install-sh0000755000076600007660000002202111405216230016257 0ustar coincoin#!/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: CoinUtils-2.9.10/Data/Sample/p0548.mps0000644000076600007660000027063410430174061015575 0ustar coincoin*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 CoinUtils-2.9.10/Data/Sample/coindatasample-uninstalled.pc.in0000644000076600007660000000023211507632611022520 0ustar coincoindatadir=@ABSBUILDDIR@ Name: Sample Description: Sample models URL: https://projects.coin-or.org/svn/Data/Sample Version: @PACKAGE_VERSION@ Libs: Cflags: CoinUtils-2.9.10/Data/Sample/p0033.mps0000644000076600007660000001463310430174061015555 0ustar coincoin*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 CoinUtils-2.9.10/Data/Sample/exmip1.mps0000644000076600007660000001304610430174061016210 0ustar coincoin************************************************************************ * * 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 CoinUtils-2.9.10/Data/Sample/afiro.mps0000644000076600007660000000637710662211140016113 0ustar coincoinNAME 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 CoinUtils-2.9.10/Data/Sample/Makefile.am0000644000076600007660000000144212053222044016313 0ustar coincoin# 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." CoinUtils-2.9.10/Data/Sample/scOneInt.mps0000644000076600007660000000210710430174061016523 0ustar coincoinNAME 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 CoinUtils-2.9.10/Data/Sample/conic.mps0000644000076600007660000000334312223473003016077 0ustar coincoinNAME 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 CoinUtils-2.9.10/Data/Sample/exmip1.5.mps0000644000076600007660000001373510430174061016360 0ustar coincoin************************************************************************ * * 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 CoinUtils-2.9.10/Data/Sample/configure.ac0000644000076600007660000000460312240224340016546 0ustar coincoin# Copyright (C) 2006 International Business Machines. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: configure.ac 402 2013-11-11 18:58:40Z stefan $ # Author: Andreas Waechter IBM 2006-04-13 ############################################################################# # Names and other basic things # ############################################################################# AC_PREREQ(2.59) AC_INIT([DataSample],[1.2.9],[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:9: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([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 CoinUtils-2.9.10/Data/Sample/coindatasample.pc.in0000644000076600007660000000026711507632611020210 0ustar coincoinprefix=@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: CoinUtils-2.9.10/Data/Sample/hello.mps0000644000076600007660000003024210662211140016102 0ustar coincoinNAME 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 CoinUtils-2.9.10/Data/Sample/retail3.mps0000644000076600007660000037277212136243266016377 0ustar coincoinNAME 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 CoinUtils-2.9.10/Data/Sample/e226.mps0000644000076600007660000026741310662211140015471 0ustar coincoinNAME 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 CoinUtils-2.9.10/Data/Sample/wedding_16.block0000644000076600007660000000672512136243266017246 0ustar coincoin0 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 CoinUtils-2.9.10/Data/Sample/depcomp0000755000076600007660000003710011405216230015634 0ustar coincoin#! /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: CoinUtils-2.9.10/Data/Sample/wedding_16.mps0000644000076600007660000073331512136243266016755 0ustar coincoin* 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 CoinUtils-2.9.10/Data/Sample/Makefile.in0000644000076600007660000004471512053222044016336 0ustar coincoin# 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) 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 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: CoinUtils-2.9.10/Data/Sample/app0110.time0000755000076600007660000000075411015552002016226 0ustar coincoinTIME APP PERIODS LP X00101 K01 ROOT I00102 D00102 STAGE-2 I00103 D00103 STAGE-3 ENDATA CoinUtils-2.9.10/Data/Sample/ltmain.sh0000755000076600007660000057753011405216230016122 0ustar coincoin# 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: CoinUtils-2.9.10/Data/Sample/app0110R.cor0000755000076600007660000001462611015552002016200 0ustar coincoinNAME 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 CoinUtils-2.9.10/Data/Sample/missing0000755000076600007660000002540611405216230015664 0ustar coincoin#! /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: CoinUtils-2.9.10/Data/Sample/tp3.mps0000644000076600007660000000162510430174061015513 0ustar coincoin* * 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 CoinUtils-2.9.10/Data/Sample/tp4.mps0000644000076600007660000000232710430174061015514 0ustar coincoin* * 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 CoinUtils-2.9.10/Data/Sample/bug.cor0000755000076600007660000000103511015552002015537 0ustar coincoinNAME 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 ENDATACoinUtils-2.9.10/Data/Sample/spec_sections.mps0000644000076600007660000000405712235603020017645 0ustar coincoin*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 CoinUtils-2.9.10/Data/Sample/brandy.mps0000644000076600007660000021631410662211140016264 0ustar coincoinNAME 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 CoinUtils-2.9.10/Data/Sample/atm_5_10_1.block0000644000076600007660000000172412136243266017036 0ustar coincoin0 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 CoinUtils-2.9.10/Data/Sample/configure0000755000076600007660000034315212240224340016174 0ustar coincoin#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.59 for DataSample 1.2.9. # # 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.9' PACKAGE_STRING='DataSample 1.2.9' 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.9 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.9:";; 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.9 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.9, 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:9: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.9' 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 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.9, 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.9 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 CoinUtils-2.9.10/Data/Sample/app0110.cor0000755000076600007660000001210611015552002016045 0ustar coincoinNAME 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 CoinUtils-2.9.10/Data/Sample/input.1300000644000076600007660000207141510430174061015656 0ustar coincoinBEGIN 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 CoinUtils-2.9.10/Data/Sample/config.guess0000755000076600007660000012706311405216230016607 0ustar coincoin#! /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: CoinUtils-2.9.10/Data/Sample/tp5.mps0000644000076600007660000000233210430174061015511 0ustar coincoin* * 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 CoinUtils-2.9.10/Data/Sample/galenet.mps0000644000076600007660000000211611431323442016421 0ustar coincoinNAME 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 CoinUtils-2.9.10/Data/Sample/nw460.mps0000644000076600007660000000324710430174061015665 0ustar coincoin* * 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 CoinUtils-2.9.10/depcomp0000755000076600007660000003710010430261150013540 0ustar coincoin#! /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: CoinUtils-2.9.10/Makefile.in0000644000076600007660000006171312240310440014235 0ustar coincoin# 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_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@ 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) 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: cd CoinUtils; $(MAKE) test unitTest: test tests: for dir in $(subdirs); do \ if test -r $$dir/test/Makefile; then \ (cd $$dir; $(MAKE) test) \ fi; \ done unitTests: tests # Generate doxygen doc'n in subdirectories (except @PACKAGE_NAME@) if a doxydoc # directory is present, then do the base, if present. 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 # install-data-local: install-doxydoc uninstall-local: uninstall-doxydoc .PHONY: test unitTest tests unitTests doxydoc 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: CoinUtils-2.9.10/ltmain.sh0000755000076600007660000057753010430261150014026 0ustar coincoin# 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: CoinUtils-2.9.10/missing0000755000076600007660000002540610430261150013570 0ustar coincoin#! /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: CoinUtils-2.9.10/README0000644000076600007660000000042010740702760013051 0ustar coincoinTo install this package, please look at the INSTALL file. This package contains several subdirectories corresponding to COIN-OR projects (www.coin-or.org). The AUTHORS, LICENSE and README files in each of the subdirectories give more information about these projects. CoinUtils-2.9.10/CoinUtils/0000755000076600007660000000000012244605315014105 5ustar coincoinCoinUtils-2.9.10/CoinUtils/config.sub0000755000076600007660000007772611405215457016115 0ustar coincoin#! /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: CoinUtils-2.9.10/CoinUtils/AUTHORS0000644000076600007660000000022111111534643015145 0ustar coincoinThis file is last updated on 11/21/2008 Fasano, J.P. Forrest, John J. Hafer, Lou Ladanyi, Laszlo Margot, Francois Tomlin, John Waechter, Andreas CoinUtils-2.9.10/CoinUtils/doxydoc/0000755000076600007660000000000012244605315015556 5ustar coincoinCoinUtils-2.9.10/CoinUtils/doxydoc/doxygen.conf.in0000644000076600007660000017377411431335065020531 0ustar coincoin# 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 = NO # 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 = NO # 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 = 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 = NO # 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 CoinUtils-2.9.10/CoinUtils/INSTALL0000644000076600007660000000031010740302141015116 0ustar coincoinThis is the CoinUtils project. For information on how to install the package this project was downloaded with see the INSTALL file in the root of the package (the parent directory of this directory). CoinUtils-2.9.10/CoinUtils/install-sh0000755000076600007660000002202111405215457016110 0ustar coincoin#!/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: CoinUtils-2.9.10/CoinUtils/LICENSE0000644000076600007660000002622711507200411015110 0ustar coincoinEclipse 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. CoinUtils-2.9.10/CoinUtils/Makefile.am0000644000076600007660000000556212167771551016163 0ustar coincoin# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 1602 2013-07-12 12:15:37Z tkr $ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign ######################################################################## # Subdirectories # ######################################################################## SUBDIRS = src # 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 = ######################################################################## # 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 and .pc file # ######################################################################## pkgconfiglibdir = $(libdir)/pkgconfig pkgconfiglib_DATA = coinutils.pc addlibsdir = $(DESTDIR)$(datadir)/coin/doc/CoinUtils install-data-hook: @$(mkdir_p) "$(addlibsdir)" if COIN_HAS_PKGCONFIG PKG_CONFIG_PATH="@COIN_PKG_CONFIG_PATH@" \ "$(PKG_CONFIG)" --libs coinutils > $(addlibsdir)/coinutils_addlibs.txt else if COIN_CXX_IS_CL echo "-libpath:`$(CYGPATH_W) @abs_lib_dir@` libCoinUtils.lib @COINUTILSLIB_LIBS_INSTALLED@" > $(addlibsdir)/coinutils_addlibs.txt else echo -L@abs_lib_dir@ -lCoinUtils @COINUTILSLIB_LIBS_INSTALLED@ > $(addlibsdir)/coinutils_addlibs.txt endif endif uninstall-hook: rm -f $(addlibsdir)/coinutils_addlibs.txt ######################################################################## # Maintainer Stuff # ######################################################################## CLEANFILES = # Files that are generated and should be cleaned with make distclean DISTCLEANFILES = include BuildTools/Makemain.inc CoinUtils-2.9.10/CoinUtils/configure.ac0000644000076600007660000002371412244556771016415 0ustar coincoin# Copyright (C) 2006,2009 International Business Machines. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: configure.ac 1667 2013-11-25 05:19:53Z tkr $ # Author: Andreas Waechter IBM 2006-04-13 ############################################################################# # Names and other basic things # ############################################################################# AC_PREREQ(2.59) AC_INIT([CoinUtils],[2.9.10],[http://projects.coin-or.org/CoinUtils]) 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/CoinError.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(CoinUtils,12:10:9) # Check if user wants to produce debugging code AC_COIN_DEBUG_COMPILE(CoinUtils) # 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 # Find out how to call Fortran from C and determine Fortran runtime libraries if test "x$F77" != xunavailable then AC_COIN_F77_WRAPPERS fi # Initialize automake and libtool AC_COIN_INIT_AUTO_TOOLS ############################################################################ # Stuff that we need for finite and isnan # ############################################################################ AC_COIN_CHECK_ISFINITE AC_COIN_CHECK_ISNAN ############################################################################# # Thread configuration # ############################################################################# # Define new options: # --enable-coinutils-threads # --enable-coinutils-mempool-override-new # --enable-coinutils-mempool-maxpooled AC_LANG_PUSH(C++) AC_ARG_ENABLE([coinutils-threads], [AC_HELP_STRING([--enable-coinutils-threads], [enables compilation of thread aware CoinUtils (mempool so far)])]) if test "$enable_coinutils_threads" = yes; then # Define the preprocessor macro AC_DEFINE([COINUTILS_PTHREADS],[1],[Define to 1 if the thread aware version of CoinUtils should be compiled]) AC_CHECK_LIB([rt],[clock_gettime], [COINUTILSLIB_LIBS="-lrt $COINUTILSLIB_LIBS" COINUTILSLIB_PCLIBS="-lrt $COINUTILSLIB_PCLIBS"], [AC_MSG_ERROR([--enable-coinutils-threads selected, but -lrt unavailable])]) AC_CHECK_LIB([pthread],[pthread_create], [COINUTILSLIB_LIBS="-lpthread $COINUTILSLIB_LIBS" COINUTILSLIB_PCLIBS="-lpthread $COINUTILSLIB_PCLIBS"], [AC_MSG_ERROR([--enable-coinutils-threads selected, but -lpthreads unavailable])]) fi AC_ARG_ENABLE([coinutils-mempool-override-new], [AC_HELP_STRING([--enable-coinutils-mempool-override-new], [enables the CoinUtils mempool to override global new/delete])]) if test "$enable_coinutils_mempool_override_new" = yes; then AC_DEFINE([COINUTILS_MEMPOOL_OVERRIDE_NEW],[1],[Define to 1 CoinUtils should override global new/delete]) fi AC_ARG_ENABLE([coinutils-mempool-maxpooled], [AC_HELP_STRING([--enable-coinutils-mempool-maxpooled], [Specify the default maximum memory allocation size that is served by the memory pool. If negative (or 'no') then the memory pool is disabled completely. Otherwise its value can be overridden at runtime using the COINUTILS_MEMPOOL_MAXPOOLED environment variable.])]) if test "$enable_coinutils_mempool_maxpooled" = yes; then AC_DEFINE([COINUTILS_MEMPOOL_MAXPOOLED],[4096],[Default maximum pooled allocation size]) elif test "$enable_coinutils_mempool_maxpooled" = no; then AC_DEFINE([COINUTILS_MEMPOOL_MAXPOOLED],[-1],[Disable CoinUtils memory pool]) elif test x"$enable_coinutils_mempool_maxpooled" = x; then AC_DEFINE([COINUTILS_MEMPOOL_MAXPOOLED],[-1],[Disable CoinUtils memory pool]) else AC_DEFINE_UNQUOTED([COINUTILS_MEMPOOL_MAXPOOLED],${enable_coinutils_mempool_maxpooled},[Default maximum pooled allocation size]) fi ############################################################################# # Finding certain integer types # ############################################################################# AC_COIN_CHECK_CXX_CHEADER(inttypes) AC_COIN_CHECK_CXX_CHEADER(stdint) ##### 64bit Integer types # The problem here is that you can't extend `int64_t' to `unsigned int64_t'. # So we need distinct CoinInt64 and CoinUInt64. It should be safe to assume # uint64_t, given int64_t. CoinInt64= CoinUInt64= # try int64_t AC_CHECK_TYPE([int64_t],[CoinInt64=int64_t ; CoinUInt64=uint64_t],[],[ #ifdef HAVE_CINTTYPES # include #else # ifdef HAVE_INTTYPES_H # include # endif #endif ]) # We need to use the C compiler in the AC_CHECK_SIZEOF since otherwise the # MSCV compiler complains about redefinition of "exit". ac_cv_sizeof_ # sometimes adds `^M' to the number, hence the check for `8?'. AC_LANG_PUSH(C) # try long long if test x"$CoinInt64" = x; then AC_CHECK_SIZEOF([long long]) case $ac_cv_sizeof_long_long in 8 | 8?) CoinInt64="long long" CoinUInt64="unsigned long long" ;; esac fi #try long if test x"$CoinInt64" = x; then AC_CHECK_SIZEOF([long]) case $ac_cv_sizeof_long in 8 | 8?) CoinInt64="long" CoinUInt64="unsigned long" ;; esac fi #try int if test x"$CoinInt64" = x; then AC_CHECK_SIZEOF([int]) case $ac_cv_sizeof_int in 8 | 8?) CoinInt64="int" CoinUInt64="unsigned int" ;; esac fi AC_LANG_POP(C) if test x"$CoinInt64" = x; then AC_MSG_ERROR([Cannot find integer type with 64 bits]) fi AC_DEFINE_UNQUOTED([COIN_INT64_T],[$CoinInt64],[Define to 64bit integer type]) AC_DEFINE_UNQUOTED([COIN_UINT64_T],[$CoinInt64], [Define to 64bit unsigned integer type]) ##### Integer type for Pointer CoinIntPtr= # try intptr_t AC_CHECK_TYPE([intptr_t],[CoinIntPtr=intptr_t],[],[ #ifdef HAVE_CINTTYPES # include #else # ifdef HAVE_INTTYPES_H # include # endif #endif ]) AC_LANG_PUSH(C) # try long long if test x"$CoinIntPtr" = x; then AC_CHECK_SIZEOF([int *]) AC_CHECK_SIZEOF([long long]) if test "$ac_cv_sizeof_long_long" = "$ac_cv_sizeof_int_p"; then CoinIntPtr="long long" fi fi # try long if test x"$CoinIntPtr" = x; then AC_CHECK_SIZEOF([long]) if test "$ac_cv_sizeof_long" = "$ac_cv_sizeof_int_p"; then CoinIntPtr="long" fi fi # try int if test x"$CoinIntPtr" = x; then AC_CHECK_SIZEOF([int]) if test "$ac_cv_sizeof_int" = "$ac_cv_sizeof_int_p"; then CoinIntPtr="int" fi fi AC_LANG_POP(C) if test x"$CoinIntPtr" = x; then AC_MSG_ERROR([Cannot find integer type capturing pointer]) fi AC_DEFINE_UNQUOTED([COIN_INTPTR_T],[$CoinIntPtr],[Define to integer type capturing pointer]) if test "x$ac_cv_header_stdint_h" = xyes ; then AC_DEFINE([COINUTILS_HAS_STDINT_H], [1], [Define to 1 if stdint.h is available for CoinUtils]) fi ############################################################################# # Check whether we have windows.h # ############################################################################# AC_CHECK_HEADERS([windows.h]) ############################################################################# # Check whether we have endian.h # ############################################################################# AC_CHECK_HEADERS([endian.h]) ############################################################################# # COIN-OR components # ############################################################################# AC_COIN_CHECK_LIBM(CoinUtilsLib) AC_COIN_CHECK_PACKAGE_BLAS(CoinUtilsLib) AC_COIN_CHECK_PACKAGE_LAPACK(CoinUtilsLib) AC_COIN_CHECK_PACKAGE(Glpk, [coinglpk], [CoinUtilsLib]) AC_COIN_CHECK_PACKAGE(Sample, [coindatasample]) AC_COIN_CHECK_PACKAGE(Netlib, [coindatanetlib]) AC_COIN_CHECK_GNU_ZLIB(CoinUtilsLib) AC_COIN_CHECK_GNU_BZLIB(CoinUtilsLib) AC_COIN_CHECK_GNU_READLINE(CoinUtilsLib) AC_COIN_VPATH_LINK(test/plan.mod) ############################################################################# # Check for doxygen # ############################################################################# AC_COIN_DOXYGEN() ############################################################################## # 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 src/Makefile test/Makefile coinutils.pc coinutils-uninstalled.pc]) AC_CONFIG_FILES([doxydoc/doxygen.conf]) # Here put the location and name of the configuration header file AC_CONFIG_HEADER([src/config.h src/config_coinutils.h]) # Finally, we let configure write all the output... AC_COIN_FINALIZE CoinUtils-2.9.10/CoinUtils/src/0000755000076600007660000000000012244605315014674 5ustar coincoinCoinUtils-2.9.10/CoinUtils/src/CoinPresolveImpliedFree.hpp0000644000076600007660000000342312054013177022123 0ustar coincoin/* $Id: CoinPresolveImpliedFree.hpp 1562 2012-11-24 00:36:15Z lou $ */ // 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). #ifndef CoinPresolveImpliedFree_H #define CoinPresolveInpliedFree_H /*! \file */ #define IMPLIED_FREE 9 /*! \class implied_free_action \brief Detect and process implied free variables Consider a singleton variable x (i.e., a variable involved in only one constraint). Suppose that the bounds on that constraint, combined with the bounds on the other variables involved in the constraint, are such that even the worst case values of the other variables still imply bounds for x which are tighter than the variable's original bounds. Since x can never reach its upper or lower bounds, it is an implied free variable. Both x and the constraint can be deleted from the problem. A similar transform for the case where the variable is not a natural column singleton is handled by #subst_constraint_action. */ class implied_free_action : public CoinPresolveAction { struct action { int row, col; double clo, cup; double rlo, rup; const double *rowels; const double *costs; int ninrow; }; const int nactions_; const action *const actions_; implied_free_action(int nactions, const action *actions, const CoinPresolveAction *next) : CoinPresolveAction(next), nactions_(nactions), actions_(actions) {} public: const char *name() const; static const CoinPresolveAction *presolve(CoinPresolveMatrix * prob, const CoinPresolveAction *next, int & fillLevel); void postsolve(CoinPostsolveMatrix *prob) const; virtual ~implied_free_action(); }; #endif CoinUtils-2.9.10/CoinUtils/src/CoinPresolveSubst.cpp0000644000076600007660000010604512130014662021030 0ustar coincoin/* $Id: CoinPresolveSubst.cpp 1581 2013-04-06 12:48:50Z stefan $ */ // 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). #include #include #include "CoinPresolveMatrix.hpp" #include "CoinPresolveEmpty.hpp" // for DROP_COL/DROP_ROW #include "CoinPresolvePsdebug.hpp" #include "CoinPresolveFixed.hpp" #include "CoinPresolveZeros.hpp" #include "CoinPresolveSubst.hpp" #include "CoinMessage.hpp" #include "CoinHelperFunctions.hpp" #include "CoinSort.hpp" #include "CoinError.hpp" #include "CoinFinite.hpp" #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #include "CoinPresolvePsdebug.hpp" #endif namespace { // begin unnamed file-local namespace #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 /* Special-purpose debug utility to look for coefficient a(i,j) in column j. Intended to be inserted as needed and removed when debugging is complete. */ void dbg_find_elem (const CoinPostsolveMatrix *postMtx, int i, int j) { const CoinBigIndex kcs = postMtx->mcstrt_[j] ; const CoinBigIndex lenj = postMtx->hincol_[j] ; CoinBigIndex krow = presolve_find_row3(i,kcs,lenj,postMtx->hrow_,postMtx->link_) ; if (krow >= 0) { std::cout << " row " << i << " present in column " << j << ", a(" << i << "," << j << ") = " << postMtx->colels_[krow] << std::endl ; } else { std::cout << " row " << i << " not present in column " << j << std::endl ; } } #endif /* Add coeff_factor*rowy to rowx, for coefficients and row bounds. In the terminology used in ::presolve, rowy is the target row, and rowx is an entangled row (entangled with the target column). If a coefficient is < kill_ratio * coeff_factor then kill it Column indices in irowx and iroy must be sorted in increasing order. Normally one might do that here, but this routine is only called from subst_constraint_action::presolve and rowy will be the same over several calls. More efficient to sort in sca::presolve. Given we're called from sca::presolve, rowx will be an equality, with finite rlo[rowx] = rup[rowx] = rhsy. Fill-in in rowx has the potential to trigger compaction of the row-major bulk store. *All* indices into the bulk store are *not* constant if this happens. Returns false if the addition completes without error, true if there's a problem. */ bool add_row (CoinBigIndex *mrstrt, double *rlo, double *acts, double *rup, double *rowels, int *hcol, int *hinrow, presolvehlink *rlink, int nrows, double coeff_factor, double kill_ratio, int irowx, int irowy, int *x_to_y) { CoinBigIndex krsy = mrstrt[irowy] ; CoinBigIndex krey = krsy+hinrow[irowy] ; CoinBigIndex krsx = mrstrt[irowx] ; CoinBigIndex krex = krsx+hinrow[irowx] ; # if PRESOLVE_DEBUG > 3 std::cout << " ADD_ROW: adding (" << coeff_factor << ")*(row " << irowy << ") to row " << irowx << "; len y = " << hinrow[irowy] << ", len x = " << hinrow[irowx] << "." << std::endl ; # endif /* Do the simple part first: adjust the row lower and upper bounds, but only if they're finite. */ const double rhsy = rlo[irowy] ; const double rhscorr = rhsy*coeff_factor ; const double tolerance = kill_ratio*coeff_factor; if (-PRESOLVE_INF < rlo[irowx]) { const double newrlo = rlo[irowx]+rhscorr ; # if PRESOLVE_DEBUG > 3 if (rhscorr) std::cout << " rlo(" << irowx << ") " << rlo[irowx] << " -> " << newrlo << "." << std::endl ; # endif rlo[irowx] = newrlo ; } if (rup[irowx] < PRESOLVE_INF) { const double newrup = rup[irowx]+rhscorr ; # if PRESOLVE_DEBUG > 3 if (rhscorr) std::cout << " rup(" << irowx << ") " << rup[irowx] << " -> " << newrup << "." << std::endl ; # endif rup[irowx] = newrup ; } if (acts) { acts[irowx] += rhscorr ; } /* On to the main show. Open a loop to walk row y. krowx is keeping track of where we're at in row x. To find column j in row x, start from the current position and search forward, but no further than the last original coefficient of row x (fill will be added after this element). */ CoinBigIndex krowx = krsx ; CoinBigIndex krex0 = krex ; int x_to_y_i = 0 ; # if PRESOLVE_DEBUG > 3 std::cout << " ycols:" ; # endif for (CoinBigIndex krowy = krsy ; krowy < krey ; krowy++) { int j = hcol[krowy] ; PRESOLVEASSERT(krex == krsx+hinrow[irowx]) ; while (krowx < krex0 && hcol[krowx] < j) krowx++ ; # if PRESOLVE_DEBUG > 3 std::cout << " a(" << irowx << "," << j << ") " ; # endif /* The easy case: coeff a(xj) already exists and all we need to is modify it. */ if (krowx < krex0 && hcol[krowx] == j) { double newcoeff = rowels[krowx]+rowels[krowy]*coeff_factor ; # if PRESOLVE_DEBUG > 3 std::cout << rowels[krowx] << " -> " << newcoeff << ";" ; # endif // kill small if (fabs(newcoeff) 3 std::cout << rowels[krex-1] << ";" ; # endif } } # if PRESOLVE_DEBUG > 3 std::cout << std::endl ; # endif return (false) ; } } // end unnamed file-local namespace const char *subst_constraint_action::name() const { return ("subst_constraint_action"); } /* This transform is called only from implied_free_action. See the comments at the head of CoinPresolveImpledFree.cpp for background. In addition to natural implied free singletons, implied_free_action will identify implied free variables that are not (yet) column singletons. This transform will process them. Suppose we have a variable x(t) and an equality r which satisfy the implied free condition (i.e., r imposes bounds on x(t) which are equal or better than the original column bounds). Then we can solve r for x(t) to get a substitution formula for x(t). We can use the substitution formula to eliminate x(t) from all other constraints where it is entangled. x(t) is now an implied free column singleton with equality r and we can remove x(t) and equality r from the constraint system. The paired parameter vectors implied_free and whichFree specify the indices for equality r and variable t, respectively. NOTE that these vectors are held in the first two blocks of usefulColumnInt_. Don't reuse them! Fill-in can cause a major vector to be moved to free space at the end of the bulk store. If there's not enough free space, this can trigger compaction of the entire bulk store. The upshot is that *all* major vector starts and ends are *not* constant over calls that could expand a major vector. Deletion, on the other hand, will never move a major vector (but it will move the end element into the hole left by the deleted element). */ const CoinPresolveAction *subst_constraint_action::presolve ( CoinPresolveMatrix *prob, const int *implied_free, const int *whichFree, int numberFree, const CoinPresolveAction *next, int maxLook) { # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 # if PRESOLVE_DEBUG > 0 std::cout << "Entering subst_constraint_action::presolve, fill level " << maxLook << ", " << numberFree << " candidates." << std::endl ; # endif presolve_consistent(prob) ; presolve_links_ok(prob) ; presolve_check_sol(prob) ; presolve_check_nbasic(prob) ; # endif # if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 int startEmptyRows = 0 ; int startEmptyColumns = 0 ; startEmptyRows = prob->countEmptyRows() ; startEmptyColumns = prob->countEmptyCols() ; # if COIN_PRESOLVE_TUNING > 0 double startTime = 0.0 ; if (prob->tuning_) startTime = CoinCpuTime() ; # endif # endif /* Unpack the row- and column-major representations. */ const int ncols = prob->ncols_ ; const int nrows = prob->nrows_ ; CoinBigIndex *rowStarts = prob->mrstrt_ ; int *rowLengths = prob->hinrow_ ; double *rowCoeffs = prob->rowels_ ; int *colIndices = prob->hcol_ ; presolvehlink *rlink = prob->rlink_ ; CoinBigIndex *colStarts = prob->mcstrt_ ; int *colLengths = prob->hincol_ ; double *colCoeffs = prob->colels_ ; int *rowIndices = prob->hrow_ ; presolvehlink *clink = prob->clink_ ; /* Row bounds and activity, objective. */ double *rlo = prob->rlo_ ; double *rup = prob->rup_ ; double *acts = prob->acts_ ; double *cost = prob->cost_ ; const double tol = prob->feasibilityTolerance_ ; action *actions = new action [ncols] ; # ifdef ZEROFAULT CoinZeroN(reinterpret_cast(actions),ncols*sizeof(action)) ; # endif int nactions = 0 ; /* This array is used to hold the indices of columns involved in substitutions, where we have the potential for cancellation. At the end they'll be checked to eliminate any actual zeros that may result. At the end of processing of each target row, the column indices of the target row are copied into zerocols. NOTE that usefulColumnInt_ is already in use for parameters implied_free and whichFree when this routine is called from implied_free. */ int *zerocols = new int[ncols] ; int nzerocols = 0 ; int *x_to_y = new int[ncols] ; int *rowsUsed = &prob->usefulRowInt_[0] ; int nRowsUsed = 0 ; /* Open a loop to process the (equality r, implied free variable t) pairs in whichFree and implied_free. It can happen that removal of (row, natural singleton) pairs back in implied_free will reduce the length of column t. It can also happen that previous processing here has resulted in fillin or cancellation. So check again for column length and exclude natural singletons and overly dense columns. */ for (int iLook = 0 ; iLook < numberFree ; iLook++) { const int tgtcol = whichFree[iLook] ; const int tgtcol_len = colLengths[tgtcol] ; const int tgtrow = implied_free[iLook] ; const int tgtrow_len = rowLengths[tgtrow] ; assert(fabs(rlo[tgtrow]-rup[tgtrow]) < tol) ; if (colLengths[tgtcol] < 2 || colLengths[tgtcol] > maxLook) { # if PRESOLVE_DEBUG > 3 std::cout << " skipping eqn " << tgtrow << " x(" << tgtcol << "); length now " << colLengths[tgtcol] << "." << std::endl ; # endif continue ; } CoinBigIndex tgtcs = colStarts[tgtcol] ; CoinBigIndex tgtce = tgtcs+colLengths[tgtcol] ; /* A few checks to make sure that the candidate pair is still suitable. Processing candidates earlier in the list can eliminate coefficients. * Don't use this pair if any involved row i has become a row singleton or empty. * Don't use this pair if any involved row has been modified as part of the processing for a previous candidate pair on this call. * Don't use this pair if a(i,tgtcol) has become zero. The checks on a(i,tgtcol) seem superfluous but it's possible that implied_free identified two candidate pairs to eliminate the same column. If we've already processed one of them, we could be in trouble. */ double tgtcoeff = 0.0 ; bool dealBreaker = false ; for (CoinBigIndex kcol = tgtcs ; kcol < tgtce ; ++kcol) { const int i = rowIndices[kcol] ; if (rowLengths[i] < 2 || prob->rowUsed(i)) { dealBreaker = true ; break ; } const double aij = colCoeffs[kcol] ; if (fabs(aij) <= ZTOLDP2) { dealBreaker = true ; break ; } if (i == tgtrow) tgtcoeff = aij ; } if (dealBreaker == true) { # if PRESOLVE_DEBUG > 3 std::cout << " skipping eqn " << tgtrow << " x(" << tgtcol << "); deal breaker (1)." << std::endl ; # endif continue ; } /* Check for numerical stability.A large coeff_factor will inflate the coefficients in the substitution formula. */ dealBreaker = false ; for (CoinBigIndex kcol = tgtcs ; kcol < tgtce ; ++kcol) { const double coeff_factor = fabs(colCoeffs[kcol]/tgtcoeff) ; if (coeff_factor > 10.0) dealBreaker = true ; } /* Given enough target rows with sufficient overlap, there's an outside chance we could overflow zerocols. Unlikely to ever happen. */ if (!dealBreaker && nzerocols+rowLengths[tgtrow] >= ncols) dealBreaker = true ; if (dealBreaker == true) { # if PRESOLVE_DEBUG > 3 std::cout << " skipping eqn " << tgtrow << " x(" << tgtcol << "); deal breaker (2)." << std::endl ; # endif continue ; } /* If c(t) != 0, we will need to modify the objective coefficients and remember the original objective. */ const bool nonzero_cost = (fabs(cost[tgtcol]) > tol) ; double *costsx = (nonzero_cost?new double[rowLengths[tgtrow]]:0) ; # if PRESOLVE_DEBUG > 1 std::cout << " Eliminating row " << tgtrow << ", col " << tgtcol ; if (nonzero_cost) std::cout << ", cost " << cost[tgtcol] ; std::cout << "." << std::endl ; # endif /* Count up the total number of coefficients in entangled rows and mark them as contaminated. */ int ntotels = 0 ; for (CoinBigIndex kcol = tgtcs ; kcol < tgtce ; ++kcol) { const int i = rowIndices[kcol] ; ntotels += rowLengths[i] ; PRESOLVEASSERT(!prob->rowUsed(i)) ; prob->setRowUsed(i) ; rowsUsed[nRowsUsed++] = i ; } /* Create the postsolve object. Copy in all the affected rows. Take the opportunity to mark the entangled rows as changed and put them on the list of rows to process in the next round. coeffxs in particular holds the coefficients of the target column. */ action *ap = &actions[nactions++] ; ap->col = tgtcol ; ap->rowy = tgtrow ; PRESOLVE_DETAIL_PRINT(printf("pre_subst %dC %dR E\n",tgtcol,tgtrow)) ; ap->nincol = tgtcol_len ; ap->rows = new int[tgtcol_len] ; ap->rlos = new double[tgtcol_len] ; ap->rups = new double[tgtcol_len] ; ap->costsx = costsx ; ap->coeffxs = new double[tgtcol_len] ; ap->ninrowxs = new int[tgtcol_len] ; ap->rowcolsxs = new int[ntotels] ; ap->rowelsxs = new double[ntotels] ; ntotels = 0 ; for (CoinBigIndex kcol = tgtcs ; kcol < tgtce ; ++kcol) { const int ndx = kcol-tgtcs ; const int i = rowIndices[kcol] ; const CoinBigIndex krs = rowStarts[i] ; prob->addRow(i) ; ap->rows[ndx] = i ; ap->ninrowxs[ndx] = rowLengths[i] ; ap->rlos[ndx] = rlo[i] ; ap->rups[ndx] = rup[i] ; ap->coeffxs[ndx] = colCoeffs[kcol] ; CoinMemcpyN(&colIndices[krs],rowLengths[i],&ap->rowcolsxs[ntotels]) ; CoinMemcpyN(&rowCoeffs[krs],rowLengths[i],&ap->rowelsxs[ntotels]) ; ntotels += rowLengths[i] ; } CoinBigIndex tgtrs = rowStarts[tgtrow] ; CoinBigIndex tgtre = tgtrs+rowLengths[tgtrow] ; /* Adjust the objective coefficients based on the substitution formula c'(j) = c(j) - a(rj)c(t)/a(rt) */ if (nonzero_cost) { const double tgtcost = cost[tgtcol] ; for (CoinBigIndex krow = tgtrs ; krow < tgtre ; krow ++) { const int j = colIndices[krow] ; prob->addCol(j) ; costsx[krow-tgtrs] = cost[j] ; double coeff = rowCoeffs[krow] ; cost[j] -= (tgtcost*coeff)/tgtcoeff ; } prob->change_bias(tgtcost*rlo[tgtrow]/tgtcoeff) ; cost[tgtcol] = 0.0 ; } # if PRESOLVE_DEBUG > 1 std::cout << " tgt (" << tgtrow << ") (" << tgtrow_len << "): " ; for (CoinBigIndex krow = tgtrs ; krow < tgtre ; ++krow) { const int j = colIndices[krow] ; const double arj = rowCoeffs[krow] ; std::cout << "x(" << j << ") = " << arj << " (" << colLengths[j] << ") " ; } std::cout << std::endl ; # endif /* Sort the target row for efficiency when doing elimination. */ CoinSort_2(colIndices+tgtrs,colIndices+tgtre,rowCoeffs+tgtrs) ; /* Get down to the business of substituting for tgtcol in the entangled rows. Open a loop to walk the target column. We walk the saved column because the bulk store can change as we work. We don't want to repeat or miss a row. */ for (int colndx = 0 ; colndx < tgtcol_len ; ++colndx) { int i = ap->rows[colndx] ; if (i == tgtrow) continue ; double ait = ap->coeffxs[colndx] ; double coeff_factor = -ait/tgtcoeff ; CoinBigIndex krs = rowStarts[i] ; CoinBigIndex kre = krs+rowLengths[i] ; # if PRESOLVE_DEBUG > 1 std::cout << " subst pre (" << i << ") (" << rowLengths[i] << "): " ; for (CoinBigIndex krow = krs ; krow < kre ; ++krow) { const int j = colIndices[krow] ; const double aij = rowCoeffs[krow] ; std::cout << "x(" << j << ") = " << aij << " (" << colLengths[j] << ") " ; } std::cout << std::endl ; # endif /* Sort the row for efficiency and call add_row to do the actual business of changing coefficients due to substitution. This has the potential to trigger compaction of the row-major bulk store, so update bulk store indices. */ CoinSort_2(colIndices+krs,colIndices+kre,rowCoeffs+krs) ; // kill small if wanted double tolerance = ((prob->presolveOptions()&0x20000)!=0) ? 1.0e-9*coeff_factor : 1.0e-12*coeff_factor; bool outOfSpace = add_row(rowStarts,rlo,acts,rup,rowCoeffs,colIndices, rowLengths,rlink,nrows,coeff_factor,tolerance,i,tgtrow, x_to_y) ; if (outOfSpace) throwCoinError("out of memory","CoinImpliedFree::presolve") ; krs = rowStarts[i] ; kre = krs+rowLengths[i] ; tgtrs = rowStarts[tgtrow] ; tgtre = tgtrs+rowLengths[tgtrow] ; # if PRESOLVE_DEBUG > 1 std::cout << " subst aft (" << i << ") (" << rowLengths[i] << "): " ; for (CoinBigIndex krow = krs ; krow < kre ; ++krow) { const int j = colIndices[krow] ; const double aij = rowCoeffs[krow] ; std::cout << "x(" << j << ") = " << aij << " (" << colLengths[j] << ") " ; } std::cout << std::endl ; # endif /* Now update the column-major representation from the row-major representation. This is easy if the coefficient already exists, but painful if there's fillin. presolve_find_row1 will return the index of the row in the column vector, or one past the end if it's missing. If the coefficient is fill, presolve_expand_col will make sure that there's room in the column for one more coefficient. This may require that the column be moved in the bulk store, so we need to update kcs and kce. Once we're done, a(it) = 0 (i.e., we've eliminated x(t) from row i). Physically remove the explicit zero from the row-major representation with presolve_delete_from_row. */ for (CoinBigIndex rowndx = 0 ; rowndx < tgtrow_len ; ++rowndx) { const CoinBigIndex ktgt = tgtrs+rowndx ; const int j = colIndices[ktgt] ; CoinBigIndex kcs = colStarts[j] ; CoinBigIndex kce = kcs+colLengths[j] ; assert(colIndices[krs+x_to_y[rowndx]] == j) ; const double coeff = rowCoeffs[krs+x_to_y[rowndx]] ; CoinBigIndex kcol = presolve_find_row1(i,kcs,kce,rowIndices) ; if (kcol < kce) { colCoeffs[kcol] = coeff ; } else { outOfSpace = presolve_expand_col(colStarts,colCoeffs,rowIndices, colLengths,clink,ncols,j) ; if (outOfSpace) throwCoinError("out of memory","CoinImpliedFree::presolve") ; kcs = colStarts[j] ; kce = kcs+colLengths[j] ; rowIndices[kce] = i ; colCoeffs[kce] = coeff ; colLengths[j]++ ; } } presolve_delete_from_row(i,tgtcol, rowStarts,rowLengths,colIndices,rowCoeffs) ; # if PRESOLVE_DEBUG > 1 kre-- ; std::cout << " subst fin (" << i << ") (" << rowLengths[i] << "): " ; for (CoinBigIndex krow = krs ; krow < kre ; ++krow) { const int j = colIndices[krow] ; const double aij = rowCoeffs[krow] ; std::cout << "x(" << j << ") = " << aij << " (" << colLengths[j] << ") " ; } std::cout << std::endl ; # endif } /* End of the substitution loop. Record the column indices of the target row so we can groom these columns later to remove possible explicit zeros. */ CoinMemcpyN(&colIndices[rowStarts[tgtrow]],rowLengths[tgtrow], &zerocols[nzerocols]) ; nzerocols += rowLengths[tgtrow] ; /* Remove the target equality from the column- and row-major representations Somewhat painful in the colum-major representation. We have to walk the target row in the row-major representation and look up each coefficient in the column-major representation. */ for (CoinBigIndex krow = tgtrs ; krow < tgtre ; ++krow) { const int j = colIndices[krow] ; # if PRESOLVE_DEBUG > 1 std::cout << " removing row " << tgtrow << " from col " << j << std::endl ; # endif presolve_delete_from_col(tgtrow,j, colStarts,colLengths,rowIndices,colCoeffs) ; if (colLengths[j] == 0) { PRESOLVE_REMOVE_LINK(clink,j) ; } } /* Finally, physically remove the column from the column-major representation and the row from the row-major representation. */ PRESOLVE_REMOVE_LINK(clink, tgtcol) ; colLengths[tgtcol] = 0 ; PRESOLVE_REMOVE_LINK(rlink, tgtrow) ; rowLengths[tgtrow] = 0 ; rlo[tgtrow] = 0.0 ; rup[tgtrow] = 0.0 ; # if PRESOLVE_CONSISTENCY > 0 presolve_links_ok(prob) ; presolve_consistent(prob) ; # endif } /* That's it, we've processed all the candidate pairs. Clear the row used flags. */ for (int i = 0 ; i < nRowsUsed ; i++) prob->unsetRowUsed(rowsUsed[i]) ; /* Trim the array of substitution transforms and queue up objects for postsolve. Also groom the problem representation to remove explicit zeros. */ if (nactions) { # if PRESOLVE_SUMMARY > 0 std::cout << "NSUBSTS: " << nactions << std::endl ; # endif next = new subst_constraint_action(nactions, CoinCopyOfArray(actions,nactions),next) ; next = drop_zero_coefficients_action::presolve(prob,zerocols, nzerocols, next) ; # if PRESOLVE_CONSISTENCY > 0 presolve_links_ok(prob) ; presolve_consistent(prob) ; # endif } deleteAction(actions,action*) ; delete [] x_to_y ; delete [] zerocols ; # if COIN_PRESOLVE_TUNING > 0 if (prob->tuning_) double thisTime = CoinCpuTime() ; # endif # if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 presolve_check_sol(prob) ; # endif # if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 int droppedRows = prob->countEmptyRows()-startEmptyRows ; int droppedColumns = prob->countEmptyCols()-startEmptyColumns ; std::cout << "Leaving subst_constraint_action::presolve, " << droppedRows << " rows, " << droppedColumns << " columns dropped" ; # if COIN_PRESOLVE_TUNING > 0 std::cout << " in " << thisTime-startTime << "s" ; # endif std::cout << "." << std::endl ; # endif return (next) ; } /* Undo the substitutions from presolve and reintroduce the target constraint and column. */ void subst_constraint_action::postsolve(CoinPostsolveMatrix *prob) const { # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 # if PRESOLVE_DEBUG > 0 std::cout << "Entering subst_constraint_action::postsolve, " << nactions_ << " constraints to process." << std::endl ; # endif int ncols = prob->ncols_ ; char *cdone = prob->cdone_ ; char *rdone = prob->rdone_ ; const double ztolzb = prob->ztolzb_ ; presolve_check_threads(prob) ; presolve_check_free_list(prob) ; presolve_check_reduced_costs(prob) ; presolve_check_duals(prob) ; presolve_check_sol(prob,2,2,2) ; presolve_check_nbasic(prob) ; # endif /* Unpack the column-major representation. */ CoinBigIndex *colStarts = prob->mcstrt_ ; int *colLengths = prob->hincol_ ; int *rowIndices = prob->hrow_ ; double *colCoeffs = prob->colels_ ; /* Rim vectors, solution, reduced costs, duals, row activity. */ double *rlo = prob->rlo_ ; double *rup = prob->rup_ ; double *cost = prob->cost_ ; double *sol = prob->sol_ ; double *rcosts = prob->rcosts_ ; double *acts = prob->acts_ ; double *rowduals = prob->rowduals_ ; CoinBigIndex *link = prob->link_ ; CoinBigIndex &free_list = prob->free_list_ ; const double maxmin = prob->maxmin_ ; const action *const actions = actions_ ; const int nactions = nactions_ ; /* Open the main loop to step through the postsolve objects. First activity is to unpack the postsolve object. We have the target column and row indices, the full target column, and complete copies of all entangled rows (column indices, coefficients, lower and upper bounds). There may be a vector of objective coefficients which we'll get to later. */ for (const action *f = &actions[nactions-1] ; actions <= f ; f--) { const int tgtcol = f->col ; const int tgtrow = f->rowy ; const int tgtcol_len = f->nincol ; const double *tgtcol_coeffs = f->coeffxs ; const int *entngld_rows = f->rows ; const int *entngld_lens = f->ninrowxs ; const int *entngld_colndxs = f->rowcolsxs ; const double *entngld_colcoeffs = f->rowelsxs ; const double *entngld_rlos = f->rlos ; const double *entngld_rups = f->rups ; const double *costs = f->costsx ; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 # if PRESOLVE_DEBUG > 1 std::cout << " reintroducing column x(" << tgtcol << ") and row " << tgtrow ; if (costs) std::cout << ", nonzero costs" ; std::cout << "." << std::endl ; # endif /* We're about to reintroduce the target row and column; empty stubs should be present. All other rows should already be present. */ PRESOLVEASSERT(cdone[tgtcol] == DROP_COL) ; PRESOLVEASSERT(colLengths[tgtcol] == 0) ; PRESOLVEASSERT(rdone[tgtrow] == DROP_ROW) ; for (int cndx = 0 ; cndx < tgtcol_len ; ++cndx) { if (entngld_rows[cndx] != tgtrow) PRESOLVEASSERT(rdone[entngld_rows[cndx]]) ; } /* In a postsolve matrix, we can't just check that the length of the row is zero. We need to look at all columns and confirm its absence. */ for (int j = 0 ; j < ncols ; ++j) { if (colLengths[j] > 0 && cdone[j]) { const CoinBigIndex kcs = colStarts[j] ; const int lenj = colLengths[j] ; CoinBigIndex krow = presolve_find_row3(tgtrow,kcs,lenj,rowIndices,link) ; if (krow >= 0) { std::cout << " BAD COEFF! row " << tgtrow << " present in column " << j << " before reintroduction; a(" << tgtrow << "," << j << ") = " << colCoeffs[krow] << "; x(" << j << ") = " << sol[j] << "; cdone " << static_cast(cdone[j]) << "." << std::endl ; } } } # endif /* Find the copy of the target row. Restore the upper and lower bounds of entangled rows while we're looking. Recall that the target row is an equality. */ int tgtrow_len = -1 ; const int *tgtrow_colndxs = NULL ; const double *tgtrow_coeffs = NULL ; double tgtcoeff = 0.0 ; double tgtrhs = 1.0e50 ; int nel = 0 ; for (int cndx = 0 ; cndx < tgtcol_len ; ++cndx) { int i = entngld_rows[cndx] ; rlo[i] = entngld_rlos[cndx] ; rup[i] = entngld_rups[cndx] ; if (i == tgtrow) { tgtrow_len = entngld_lens[cndx] ; tgtrow_colndxs = &entngld_colndxs[nel] ; tgtrow_coeffs = &entngld_colcoeffs[nel] ; tgtcoeff = tgtcol_coeffs[cndx] ; tgtrhs = rlo[i] ; } nel += entngld_lens[cndx] ; } /* Solve the target equality to find the solution for the eliminated col. tgtcol is present in tgtrow_colndxs, so initialise sol[tgtcol] to zero to make sure it doesn't contribute. If we're debugging, check that the result is within bounds. */ double tgtexp = tgtrhs ; sol[tgtcol] = 0.0 ; for (int ndx = 0 ; ndx < tgtrow_len ; ++ndx) { int j = tgtrow_colndxs[ndx] ; double coeffj = tgtrow_coeffs[ndx] ; tgtexp -= coeffj*sol[j] ; } sol[tgtcol] = tgtexp/tgtcoeff ; # if PRESOLVE_DEBUG > 0 double *clo = prob->clo_ ; double *cup = prob->cup_ ; if (!(sol[tgtcol] > (clo[tgtcol]-ztolzb) && (cup[tgtcol]+ztolzb) > sol[tgtcol])) { std::cout << "BAD SOL: x(" << tgtcol << ") " << sol[tgtcol] << "; lb " << clo[tgtcol] << "; ub " << cup[tgtcol] << "." << std::endl ; } # endif /* Now restore the original entangled rows. We first delete any columns present in tgtrow. This will remove any fillin, but may also remove columns that were originally present in both the entangled row and the target row. Note that even cancellations (explicit zeros) are present at this point --- in presolve, they were removed after the substition transform completed, hence they're already restored. What isn't present is the target column, which is deleted as part of the transform. */ { # if PRESOLVE_DEBUG > 2 std::cout << " removing coefficients:" ; # endif for (int rndx = 0 ; rndx < tgtrow_len ; ++rndx) { int j = tgtrow_colndxs[rndx] ; if (j != tgtcol) for (int cndx = 0 ; cndx < tgtcol_len ; ++cndx) { if (entngld_rows[cndx] != tgtrow) { # if PRESOLVE_DEBUG > 2 std::cout << " a(" << entngld_rows[cndx] << "," << j << ")" ; # endif presolve_delete_from_col2(entngld_rows[cndx],j,colStarts, colLengths,rowIndices,link,&free_list) ; } } } # if PRESOLVE_DEBUG > 2 std::cout << std::endl ; # endif # if PRESOLVE_CONSISTENCY > 0 presolve_check_threads(prob) ; presolve_check_free_list(prob) ; # endif /* Next we restore the original coefficients. The outer loop walks tgtcol; cols_i and coeffs_i are advanced as we go to point to each entangled row. The inner loop walks the entangled row and restores the row's coefficients. Tgtcol is handled as any other column. Skip tgtrow, we'll do it below. Since we don't have a row-major representation, we have to look for a(i,j) from entangled row i in the existing column j. If we find a(i,j), simply update it (and a(tgtrow,j) should not exist). If we don't find a(i,j), introduce it (and a(tgtrow,j) should exist). Recalculate the row activity while we're at it. */ # if PRESOLVE_DEBUG > 2 std::cout << " restoring coefficients:" ; # endif colLengths[tgtcol] = 0 ; const int *cols_i = entngld_colndxs ; const double *coeffs_i = entngld_colcoeffs ; for (int cndx = 0 ; cndx < tgtcol_len ; ++cndx) { const int leni = entngld_lens[cndx] ; const int i = entngld_rows[cndx] ; if (i != tgtrow) { double acti = 0.0 ; for (int rndx = 0 ; rndx < leni ; ++rndx) { const int j = cols_i[rndx] ; CoinBigIndex kcoli = presolve_find_row3(i,colStarts[j], colLengths[j],rowIndices,link) ; if (kcoli != -1) { # if PRESOLVE_DEBUG > 2 std::cout << " u a(" << i << "," << j << ")" ; PRESOLVEASSERT(presolve_find_col1(j,0,tgtrow_len, tgtrow_colndxs) == tgtrow_len) ; # endif colCoeffs[kcoli] = coeffs_i[rndx] ; } else { # if PRESOLVE_DEBUG > 2 std::cout << " f a(" << i << "," << j << ")" ; PRESOLVEASSERT(presolve_find_col1(j,0,tgtrow_len, tgtrow_colndxs) < tgtrow_len) ; # endif CoinBigIndex kk = free_list ; assert(kk >= 0 && kk < prob->bulk0_) ; free_list = link[free_list] ; link[kk] = colStarts[j] ; colStarts[j] = kk ; colCoeffs[kk] = coeffs_i[rndx] ; rowIndices[kk] = i ; ++colLengths[j] ; } acti += coeffs_i[rndx]*sol[j] ; } acts[i] = acti ; } cols_i += leni ; coeffs_i += leni ; } # if PRESOLVE_DEBUG > 2 std::cout << std::endl ; # endif # if PRESOLVE_CONSISTENCY > 0 presolve_check_threads(prob) ; presolve_check_free_list(prob) ; # endif /* Restore tgtrow. Arguably we could to this in the previous loop, but we'd do a lot of unnecessary work. By construction, the target row is tight. */ # if PRESOLVE_DEBUG > 2 std::cout << " restoring row " << tgtrow << ":" ; # endif for (int rndx = 0 ; rndx < tgtrow_len ; ++rndx) { int j = tgtrow_colndxs[rndx] ; # if PRESOLVE_DEBUG > 2 std::cout << " a(" << tgtrow << "," << j << ")" ; # endif CoinBigIndex kk = free_list ; assert(kk >= 0 && kk < prob->bulk0_) ; free_list = link[free_list] ; link[kk] = colStarts[j] ; colStarts[j] = kk ; colCoeffs[kk] = tgtrow_coeffs[rndx] ; rowIndices[kk] = tgtrow ; ++colLengths[j] ; } acts[tgtrow] = tgtrhs ; # if PRESOLVE_DEBUG > 2 std::cout << std::endl ; # endif # if PRESOLVE_CONSISTENCY > 0 presolve_check_threads(prob) ; presolve_check_free_list(prob) ; # endif } /* Restore original cost coefficients, if necessary. */ if (costs) { for (int ndx = 0 ; ndx < tgtrow_len ; ++ndx) { cost[tgtrow_colndxs[ndx]] = costs[ndx] ; } } /* Calculate the reduced cost for the column absent any contribution from tgtrow, then set the dual for tgtrow so that the reduced cost of tgtcol is zero. */ double dj = maxmin*cost[tgtcol] ; rowduals[tgtrow] = 0.0 ; for (int cndx = 0 ; cndx < tgtcol_len ; ++cndx) { int i = entngld_rows[cndx] ; double coeff = tgtcol_coeffs[cndx] ; dj -= rowduals[i]*coeff ; } rowduals[tgtrow] = dj/tgtcoeff ; rcosts[tgtcol] = 0.0 ; if (rowduals[tgtrow] > 0) prob->setRowStatus(tgtrow,CoinPrePostsolveMatrix::atUpperBound) ; else prob->setRowStatus(tgtrow,CoinPrePostsolveMatrix::atLowerBound) ; prob->setColumnStatus(tgtcol,CoinPrePostsolveMatrix::basic) ; # if PRESOLVE_DEBUG > 2 std::cout << " row " << tgtrow << " " << prob->rowStatusString(prob->getRowStatus(tgtrow)) << " dual " << rowduals[tgtrow] << std::endl ; std::cout << " col " << tgtcol << " " << prob->columnStatusString(prob->getColumnStatus(tgtcol)) << " dj " << dj << std::endl ; # endif # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 cdone[tgtcol] = SUBST_ROW ; rdone[tgtrow] = SUBST_ROW ; # endif } # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 presolve_check_threads(prob) ; presolve_check_free_list(prob) ; presolve_check_reduced_costs(prob) ; presolve_check_duals(prob) ; presolve_check_sol(prob,2,2,2) ; presolve_check_nbasic(prob) ; # if PRESOLVE_DEBUG > 0 std::cout << "Leaving subst_constraint_action::postsolve." << std::endl ; # endif # endif return ; } /* Next time someone builds this code on Windows, check to see if deleteAction is still necessary. -- lh, 121114 -- */ subst_constraint_action::~subst_constraint_action() { const action *actions = actions_ ; for (int i = 0 ; i < nactions_ ; ++i) { delete [] actions[i].rows ; delete [] actions[i].rlos ; delete [] actions[i].rups ; delete [] actions[i].coeffxs ; delete [] actions[i].ninrowxs ; delete [] actions[i].rowcolsxs ; delete [] actions[i].rowelsxs ; //delete [](double*)actions[i].costsx ; deleteAction(actions[i].costsx,double*) ; } // Must add cast to placate MS compiler //delete [] (subst_constraint_action::action*)actions_ ; deleteAction(actions_,subst_constraint_action::action*) ; } CoinUtils-2.9.10/CoinUtils/src/CoinPostsolveMatrix.cpp0000644000076600007660000001327311510461170021374 0ustar coincoin/* $Id: CoinPostsolveMatrix.cpp 1373 2011-01-03 23:57:44Z lou $ */ // 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). #include #include #include #include "CoinHelperFunctions.hpp" #include "CoinPresolveMatrix.hpp" #if PRESOLVE_DEBUG || PRESOLVE_CONSISTENCY #include "CoinPresolvePsdebug.hpp" #endif /*! \file This file contains methods for CoinPostsolveMatrix, the object used during postsolve transformations. */ /* Constructor and destructor for CoinPostsolveMatrix. */ /* Default constructor Postpone allocation of space until we actually load the object. */ CoinPostsolveMatrix::CoinPostsolveMatrix (int ncols_alloc, int nrows_alloc, CoinBigIndex nelems_alloc) : CoinPrePostsolveMatrix(ncols_alloc,nrows_alloc,nelems_alloc), free_list_(0), maxlink_(nelems_alloc), link_(0), cdone_(0), rdone_(0) { /* nothing to do here */ return ; } /* Destructor */ CoinPostsolveMatrix::~CoinPostsolveMatrix() { delete[] link_ ; delete[] cdone_ ; delete[] rdone_ ; return ; } /* This routine loads a CoinPostsolveMatrix object from a CoinPresolveMatrix object. The CoinPresolveMatrix object will be stripped, its components transferred to the CoinPostsolveMatrix object, and the empty shell of the CoinPresolveObject will be destroyed. The routine expects an empty CoinPostsolveMatrix object, and will leak any memory already allocated. */ void CoinPostsolveMatrix::assignPresolveToPostsolve (CoinPresolveMatrix *&preObj) { /* Start with simple data --- allocated and current size. */ ncols0_ = preObj->ncols0_ ; nrows0_ = preObj->nrows0_ ; nelems0_ = preObj->nelems0_ ; bulk0_ = preObj->bulk0_ ; ncols_ = preObj->ncols_ ; nrows_ = preObj->nrows_ ; nelems_ = preObj->nelems_ ; /* Now bring over the column-major matrix and other problem data. */ mcstrt_ = preObj->mcstrt_ ; preObj->mcstrt_ = 0 ; hincol_ = preObj->hincol_ ; preObj->hincol_ = 0 ; hrow_ = preObj->hrow_ ; preObj->hrow_ = 0 ; colels_ = preObj->colels_ ; preObj->colels_ = 0 ; cost_ = preObj->cost_ ; preObj->cost_ = 0 ; originalOffset_ = preObj->originalOffset_ ; clo_ = preObj->clo_ ; preObj->clo_ = 0 ; cup_ = preObj->cup_ ; preObj->cup_ = 0 ; rlo_ = preObj->rlo_ ; preObj->rlo_ = 0 ; rup_ = preObj->rup_ ; preObj->rup_ = 0 ; originalColumn_ = preObj->originalColumn_ ; preObj->originalColumn_ = 0 ; originalRow_ = preObj->originalRow_ ; preObj->originalRow_ = 0 ; ztolzb_ = preObj->ztolzb_ ; ztoldj_ = preObj->ztoldj_ ; maxmin_ = preObj->maxmin_ ; /* Now the problem solution. Often this will be empty, but that's not a problem. */ sol_ = preObj->sol_ ; preObj->sol_ = 0 ; rowduals_ = preObj->rowduals_ ; preObj->rowduals_ = 0 ; acts_ = preObj->acts_ ; preObj->acts_ = 0 ; rcosts_ = preObj->rcosts_ ; preObj->rcosts_ = 0 ; colstat_ = preObj->colstat_ ; preObj->colstat_ = 0 ; rowstat_ = preObj->rowstat_ ; preObj->rowstat_ = 0 ; /* The CoinPostsolveMatrix comes with messages and a handler, but replace them with the versions from the CoinPresolveObject, in case they've been customized. Let preObj believe it's no longer responsible for the handler. */ if (defaultHandler_ == true) delete handler_ ; handler_ = preObj->handler_ ; preObj->defaultHandler_ = false ; messages_ = preObj->messages_ ; /* Initialise the postsolve portions of this object. Which amounts to setting up the thread links to match the column-major matrix representation. This would be trivial except that the presolve matrix is loosely packed. We can either compress the matrix, or record the existing free space pattern. Bet that the latter is more efficient. Remember that mcstrt_[ncols_] actually points to the end of the bulk storage area, so when we process the last column in the bulk storage area, we'll add the free space block at the end of bulk storage to the free list. We need to allow for a 0x0 matrix here --- a pathological case, but it slips in when (for example) confirming a solution in an ILP code. */ free_list_ = NO_LINK ; maxlink_ = bulk0_ ; link_ = new CoinBigIndex [maxlink_] ; if (ncols_ > 0) { CoinBigIndex minkcs = -1 ; for (int j = 0 ; j < ncols_ ; j++) { CoinBigIndex kcs = mcstrt_[j] ; int lenj = hincol_[j] ; assert(lenj > 0) ; CoinBigIndex kce = kcs+lenj-1 ; CoinBigIndex k ; for (k = kcs ; k < kce ; k++) { link_[k] = k+1 ; } link_[k++] = NO_LINK ; if (preObj->clink_[j].pre == NO_LINK) { minkcs = kcs ; } int nxtj = preObj->clink_[j].suc ; assert(nxtj >= 0 && nxtj <= ncols_) ; CoinBigIndex nxtcs = mcstrt_[nxtj] ; for ( ; k < nxtcs ; k++) { link_[k] = free_list_ ; free_list_ = k ; } } assert(minkcs >= 0) ; if (minkcs > 0) { for (CoinBigIndex k = 0 ; k < minkcs ; k++) { link_[k] = free_list_ ; free_list_ = k ; } } } else { for (CoinBigIndex k = 0 ; k < maxlink_ ; k++) { link_[k] = free_list_ ; free_list_ = k ; } } /* That's it, preObj can die now. */ delete preObj ; preObj = 0 ; # if PRESOLVE_DEBUG || PRESOLVE_CONSISTENCY /* These are used to track the action of postsolve transforms during debugging. */ cdone_ = new char [ncols0_] ; CoinFillN(cdone_,ncols_,PRESENT_IN_REDUCED) ; CoinZeroN(cdone_+ncols_,ncols0_-ncols_) ; rdone_ = new char [nrows0_] ; CoinFillN(rdone_,nrows_,PRESENT_IN_REDUCED) ; CoinZeroN(rdone_+nrows_,nrows0_-nrows_) ; # else cdone_ = 0 ; rdone_ = 0 ; # endif # if PRESOLVE_CONSISTENCY presolve_check_free_list(this,true) ; presolve_check_threads(this) ; # endif return ; } CoinUtils-2.9.10/CoinUtils/src/CoinPackedVector.hpp0000644000076600007660000005126411667146070020606 0ustar coincoin/* $Id: CoinPackedVector.hpp 1509 2011-12-05 13:50:48Z forrest $ */ // 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 CoinPackedVector_H #define CoinPackedVector_H #include #include "CoinPragma.hpp" #include "CoinPackedVectorBase.hpp" #include "CoinSort.hpp" #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 /** Sparse Vector Stores vector of indices and associated element values. Supports sorting of vector while maintaining the original indices. Here is a sample usage: @verbatim const int ne = 4; int inx[ne] = { 1, 4, 0, 2 } double el[ne] = { 10., 40., 1., 50. } // Create vector and set its value CoinPackedVector r(ne,inx,el); // access each index and element assert( r.indices ()[0]== 1 ); assert( r.elements()[0]==10. ); assert( r.indices ()[1]== 4 ); assert( r.elements()[1]==40. ); assert( r.indices ()[2]== 0 ); assert( r.elements()[2]== 1. ); assert( r.indices ()[3]== 2 ); assert( r.elements()[3]==50. ); // access original position of index assert( r.originalPosition()[0]==0 ); assert( r.originalPosition()[1]==1 ); assert( r.originalPosition()[2]==2 ); assert( r.originalPosition()[3]==3 ); // access as a full storage vector assert( r[ 0]==1. ); assert( r[ 1]==10.); assert( r[ 2]==50.); assert( r[ 3]==0. ); assert( r[ 4]==40.); // sort Elements in increasing order r.sortIncrElement(); // access each index and element assert( r.indices ()[0]== 0 ); assert( r.elements()[0]== 1. ); assert( r.indices ()[1]== 1 ); assert( r.elements()[1]==10. ); assert( r.indices ()[2]== 4 ); assert( r.elements()[2]==40. ); assert( r.indices ()[3]== 2 ); assert( r.elements()[3]==50. ); // access original position of index assert( r.originalPosition()[0]==2 ); assert( r.originalPosition()[1]==0 ); assert( r.originalPosition()[2]==1 ); assert( r.originalPosition()[3]==3 ); // access as a full storage vector assert( r[ 0]==1. ); assert( r[ 1]==10.); assert( r[ 2]==50.); assert( r[ 3]==0. ); assert( r[ 4]==40.); // Restore orignal sort order r.sortOriginalOrder(); assert( r.indices ()[0]== 1 ); assert( r.elements()[0]==10. ); assert( r.indices ()[1]== 4 ); assert( r.elements()[1]==40. ); assert( r.indices ()[2]== 0 ); assert( r.elements()[2]== 1. ); assert( r.indices ()[3]== 2 ); assert( r.elements()[3]==50. ); // Tests for equality and equivalence CoinPackedVector r1; r1=r; assert( r==r1 ); assert( r.equivalent(r1) ); r.sortIncrElement(); assert( r!=r1 ); assert( r.equivalent(r1) ); // Add packed vectors. // Similarly for subtraction, multiplication, // and division. CoinPackedVector add = r + r1; assert( add[0] == 1.+ 1. ); assert( add[1] == 10.+10. ); assert( add[2] == 50.+50. ); assert( add[3] == 0.+ 0. ); assert( add[4] == 40.+40. ); assert( r.sum() == 10.+40.+1.+50. ); @endverbatim */ class CoinPackedVector : public CoinPackedVectorBase { friend void CoinPackedVectorUnitTest(); public: /**@name Get methods. */ //@{ /// Get the size virtual int getNumElements() const { return nElements_; } /// Get indices of elements virtual const int * getIndices() const { return indices_; } /// Get element values virtual const double * getElements() const { return elements_; } /// Get indices of elements int * getIndices() { return indices_; } /// Get the size inline int getVectorNumElements() const { return nElements_; } /// Get indices of elements inline const int * getVectorIndices() const { return indices_; } /// Get element values inline const double * getVectorElements() const { return elements_; } /// Get element values double * getElements() { return elements_; } /** Get pointer to int * vector of original postions. If the packed vector has not been sorted then this function returns the vector: 0, 1, 2, ..., size()-1. */ const int * getOriginalPosition() const { return origIndices_; } //@} //------------------------------------------------------------------- // Set indices and elements //------------------------------------------------------------------- /**@name Set methods */ //@{ /// Reset the vector (as if were just created an empty vector) void clear(); /** Assignment operator.
NOTE: This operator keeps the current testForDuplicateIndex setting, and affter copying the data it acts accordingly. */ CoinPackedVector & operator=(const CoinPackedVector &); /** Assignment operator from a CoinPackedVectorBase.
NOTE: This operator keeps the current testForDuplicateIndex setting, and affter copying the data it acts accordingly. */ CoinPackedVector & operator=(const CoinPackedVectorBase & rhs); /** Assign the ownership of the arguments to this vector. Size is the length of both the indices and elements vectors. The indices and elements vectors are copied into this class instance's member data. The last argument indicates whether this vector will have to be tested for duplicate indices. */ void assignVector(int size, int*& inds, double*& elems, bool testForDuplicateIndex = COIN_DEFAULT_VALUE_FOR_DUPLICATE); /** Set vector size, indices, and elements. Size is the length of both the indices and elements vectors. The indices and elements vectors are copied into this class instance's member data. The last argument specifies whether this vector will have to be checked for duplicate indices whenever that can happen. */ void setVector(int size, const int * inds, const double * elems, bool testForDuplicateIndex = COIN_DEFAULT_VALUE_FOR_DUPLICATE); /** Elements set to have the same scalar value */ void setConstant(int size, const int * inds, double elems, bool testForDuplicateIndex = COIN_DEFAULT_VALUE_FOR_DUPLICATE); /** Indices are not specified and are taken to be 0,1,...,size-1 */ void setFull(int size, const double * elems, bool testForDuplicateIndex = COIN_DEFAULT_VALUE_FOR_DUPLICATE); /** Indices are not specified and are taken to be 0,1,...,size-1, but only where non zero*/ void setFullNonZero(int size, const double * elems, bool testForDuplicateIndex = COIN_DEFAULT_VALUE_FOR_DUPLICATE); /** Set an existing element in the packed vector The first argument is the "index" into the elements() array */ void setElement(int index, double element); /// Insert an element into the vector void insert(int index, double element); /// Append a CoinPackedVector to the end void append(const CoinPackedVectorBase & caboose); /// Swap values in positions i and j of indices and elements void swap(int i, int j); /** Resize the packed vector to be the first newSize elements. Problem with truncate: what happens with origIndices_ ??? */ void truncate(int newSize); //@} /**@name Arithmetic operators. */ //@{ /// add value to every entry void operator+=(double value); /// subtract value from every entry void operator-=(double value); /// multiply every entry by value void operator*=(double value); /// divide every entry by value void operator/=(double value); //@} /**@name Sorting */ //@{ /** Sort the packed storage vector. Typcical usages:
 
       packedVector.sort(CoinIncrIndexOrdered());   //increasing indices
       packedVector.sort(CoinIncrElementOrdered()); // increasing elements
       
*/ template void sort(const CoinCompare3 & tc) { CoinSort_3(indices_, indices_ + nElements_, origIndices_, elements_, tc); } void sortIncrIndex() { CoinSort_3(indices_, indices_ + nElements_, origIndices_, elements_, CoinFirstLess_3()); } void sortDecrIndex() { CoinSort_3(indices_, indices_ + nElements_, origIndices_, elements_, CoinFirstGreater_3()); } void sortIncrElement() { CoinSort_3(elements_, elements_ + nElements_, origIndices_, indices_, CoinFirstLess_3()); } void sortDecrElement() { CoinSort_3(elements_, elements_ + nElements_, origIndices_, indices_, CoinFirstGreater_3()); } /** Sort in original order. If the vector has been sorted, then this method restores to its orignal sort order. */ void sortOriginalOrder(); //@} /**@name Memory usage */ //@{ /** Reserve space. If one knows the eventual size of the packed vector, then it may be more efficient to reserve the space. */ void reserve(int n); /** capacity returns the size which could be accomodated without having to reallocate storage. */ int capacity() const { return capacity_; } //@} /**@name Constructors and destructors */ //@{ /** Default constructor */ CoinPackedVector(bool testForDuplicateIndex = COIN_DEFAULT_VALUE_FOR_DUPLICATE); /** \brief Alternate Constructors - set elements to vector of doubles This constructor copies the vectors provided as parameters. */ CoinPackedVector(int size, const int * inds, const double * elems, bool testForDuplicateIndex = COIN_DEFAULT_VALUE_FOR_DUPLICATE); /** \brief Alternate Constructors - set elements to vector of doubles This constructor takes ownership of the vectors passed as parameters. \p inds and \p elems will be NULL on return. */ CoinPackedVector(int capacity, int size, int *&inds, double *&elems, bool testForDuplicateIndex = COIN_DEFAULT_VALUE_FOR_DUPLICATE); /** Alternate Constructors - set elements to same scalar value */ CoinPackedVector(int size, const int * inds, double element, bool testForDuplicateIndex = COIN_DEFAULT_VALUE_FOR_DUPLICATE); /** Alternate Constructors - construct full storage with indices 0 through size-1. */ CoinPackedVector(int size, const double * elements, bool testForDuplicateIndex = COIN_DEFAULT_VALUE_FOR_DUPLICATE); /** Copy constructor. */ CoinPackedVector(const CoinPackedVector &); /** Copy constructor from a PackedVectorBase. */ CoinPackedVector(const CoinPackedVectorBase & rhs); /** Destructor */ virtual ~CoinPackedVector (); //@} private: /**@name Private methods */ //@{ /// Copy internal date void gutsOfSetVector(int size, const int * inds, const double * elems, bool testForDuplicateIndex, const char * method); /// void gutsOfSetConstant(int size, const int * inds, double value, bool testForDuplicateIndex, const char * method); //@} private: /**@name Private member data */ //@{ /// Vector indices int * indices_; ///Vector elements double * elements_; /// Size of indices and elements vectors int nElements_; /// original unsorted indices int * origIndices_; /// Amount of memory allocated for indices_, origIndices_, and elements_. int capacity_; //@} }; //############################################################################# /**@name Arithmetic operators on packed vectors. NOTE: These methods operate on those positions where at least one of the arguments has a value listed. At those positions the appropriate operation is executed, Otherwise the result of the operation is considered 0.
NOTE 2: There are two kind of operators here. One is used like "c = binaryOp(a, b)", the other is used like "binaryOp(c, a, b)", but they are really the same. The first is much more natural to use, but it involves the creation of a temporary object (the function *must* return an object), while the second form puts the result directly into the argument "c". Therefore, depending on the circumstances, the second form can be significantly faster. */ //@{ template void binaryOp(CoinPackedVector& retVal, const CoinPackedVectorBase& op1, double value, BinaryFunction bf) { retVal.clear(); const int s = op1.getNumElements(); if (s > 0) { retVal.reserve(s); const int * inds = op1.getIndices(); const double * elems = op1.getElements(); for (int i=0; i inline void binaryOp(CoinPackedVector& retVal, double value, const CoinPackedVectorBase& op2, BinaryFunction bf) { binaryOp(retVal, op2, value, bf); } template void binaryOp(CoinPackedVector& retVal, const CoinPackedVectorBase& op1, const CoinPackedVectorBase& op2, BinaryFunction bf) { retVal.clear(); const int s1 = op1.getNumElements(); const int s2 = op2.getNumElements(); /* Replaced || with &&, in response to complaint from Sven deVries, who rightly points out || is not appropriate for additive operations. && should be ok as long as binaryOp is understood not to create something from nothing. -- lh, 04.06.11 */ if (s1 == 0 && s2 == 0) return; retVal.reserve(s1+s2); const int * inds1 = op1.getIndices(); const double * elems1 = op1.getElements(); const int * inds2 = op2.getIndices(); const double * elems2 = op2.getElements(); int i; // loop once for each element in op1 for ( i=0; i CoinPackedVector binaryOp(const CoinPackedVectorBase& op1, double value, BinaryFunction bf) { CoinPackedVector retVal; retVal.setTestForDuplicateIndex(true); binaryOp(retVal, op1, value, bf); return retVal; } template CoinPackedVector binaryOp(double value, const CoinPackedVectorBase& op2, BinaryFunction bf) { CoinPackedVector retVal; retVal.setTestForDuplicateIndex(true); binaryOp(retVal, op2, value, bf); return retVal; } template CoinPackedVector binaryOp(const CoinPackedVectorBase& op1, const CoinPackedVectorBase& op2, BinaryFunction bf) { CoinPackedVector retVal; retVal.setTestForDuplicateIndex(true); binaryOp(retVal, op1, op2, bf); return retVal; } //----------------------------------------------------------------------------- /// Return the sum of two packed vectors inline CoinPackedVector operator+(const CoinPackedVectorBase& op1, const CoinPackedVectorBase& op2) { CoinPackedVector retVal; retVal.setTestForDuplicateIndex(true); binaryOp(retVal, op1, op2, std::plus()); return retVal; } /// Return the difference of two packed vectors inline CoinPackedVector operator-(const CoinPackedVectorBase& op1, const CoinPackedVectorBase& op2) { CoinPackedVector retVal; retVal.setTestForDuplicateIndex(true); binaryOp(retVal, op1, op2, std::minus()); return retVal; } /// Return the element-wise product of two packed vectors inline CoinPackedVector operator*(const CoinPackedVectorBase& op1, const CoinPackedVectorBase& op2) { CoinPackedVector retVal; retVal.setTestForDuplicateIndex(true); binaryOp(retVal, op1, op2, std::multiplies()); return retVal; } /// Return the element-wise ratio of two packed vectors inline CoinPackedVector operator/(const CoinPackedVectorBase& op1, const CoinPackedVectorBase& op2) { CoinPackedVector retVal; retVal.setTestForDuplicateIndex(true); binaryOp(retVal, op1, op2, std::divides()); return retVal; } //@} /// Returns the dot product of two CoinPackedVector objects whose elements are /// doubles. Use this version if the vectors are *not* guaranteed to be sorted. inline double sparseDotProduct(const CoinPackedVectorBase& op1, const CoinPackedVectorBase& op2){ int len, i; double acc = 0.0; CoinPackedVector retVal; CoinPackedVector retval = op1*op2; len = retval.getNumElements(); double * CParray = retval.getElements(); for(i = 0; i < len; i++){ acc += CParray[i]; } return acc; } /// Returns the dot product of two sorted CoinPackedVector objects. /// The vectors should be sorted in ascending order of indices. inline double sortedSparseDotProduct(const CoinPackedVectorBase& op1, const CoinPackedVectorBase& op2){ int i, j, len1, len2; double acc = 0.0; const double* v1val = op1.getElements(); const double* v2val = op2.getElements(); const int* v1ind = op1.getIndices(); const int* v2ind = op2.getIndices(); len1 = op1.getNumElements(); len2 = op2.getNumElements(); i = 0; j = 0; while(i < len1 && j < len2){ if(v1ind[i] == v2ind[j]){ acc += v1val[i] * v2val[j]; i++; j++; } else if(v2ind[j] < v1ind[i]){ j++; } else{ i++; } // end if-else-elseif } // end while return acc; } //----------------------------------------------------------------------------- /**@name Arithmetic operators on packed vector and a constant.
These functions create a packed vector as a result. That packed vector will have the same indices as op1 and the specified operation is done entry-wise with the given value. */ //@{ /// Return the sum of a packed vector and a constant inline CoinPackedVector operator+(const CoinPackedVectorBase& op1, double value) { CoinPackedVector retVal(op1); retVal += value; return retVal; } /// Return the difference of a packed vector and a constant inline CoinPackedVector operator-(const CoinPackedVectorBase& op1, double value) { CoinPackedVector retVal(op1); retVal -= value; return retVal; } /// Return the element-wise product of a packed vector and a constant inline CoinPackedVector operator*(const CoinPackedVectorBase& op1, double value) { CoinPackedVector retVal(op1); retVal *= value; return retVal; } /// Return the element-wise ratio of a packed vector and a constant inline CoinPackedVector operator/(const CoinPackedVectorBase& op1, double value) { CoinPackedVector retVal(op1); retVal /= value; return retVal; } //----------------------------------------------------------------------------- /// Return the sum of a constant and a packed vector inline CoinPackedVector operator+(double value, const CoinPackedVectorBase& op1) { CoinPackedVector retVal(op1); retVal += value; return retVal; } /// Return the difference of a constant and a packed vector inline CoinPackedVector operator-(double value, const CoinPackedVectorBase& op1) { CoinPackedVector retVal(op1); const int size = retVal.getNumElements(); double* elems = retVal.getElements(); for (int i = 0; i < size; ++i) { elems[i] = value - elems[i]; } return retVal; } /// Return the element-wise product of a constant and a packed vector inline CoinPackedVector operator*(double value, const CoinPackedVectorBase& op1) { CoinPackedVector retVal(op1); retVal *= value; return retVal; } /// Return the element-wise ratio of a a constant and packed vector inline CoinPackedVector operator/(double value, const CoinPackedVectorBase& op1) { CoinPackedVector retVal(op1); const int size = retVal.getNumElements(); double* elems = retVal.getElements(); for (int i = 0; i < size; ++i) { elems[i] = value / elems[i]; } return retVal; } //@} //############################################################################# /** A function that tests the methods in the CoinPackedVector class. The only reason for it not to be a member method is that this way it doesn't have to be compiled into the library. And that's a gain, because the library should be compiled with optimization on, but this method should be compiled with debugging. */ void CoinPackedVectorUnitTest(); #endif CoinUtils-2.9.10/CoinUtils/src/CoinPackedVector.cpp0000644000076600007660000003425211667146070020577 0ustar coincoin/* $Id: CoinPackedVector.cpp 1509 2011-12-05 13:50:48Z forrest $ */ // 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 "CoinHelperFunctions.hpp" #include "CoinPackedVector.hpp" //############################################################################# void CoinPackedVector::clear() { nElements_ = 0; clearBase(); } //############################################################################# CoinPackedVector & CoinPackedVector::operator=(const CoinPackedVector & rhs) { if (this != &rhs) { clear(); gutsOfSetVector(rhs.getVectorNumElements(), rhs.getVectorIndices(), rhs.getVectorElements(), CoinPackedVectorBase::testForDuplicateIndex(), "operator="); } return *this; } //############################################################################# CoinPackedVector & CoinPackedVector::operator=(const CoinPackedVectorBase & rhs) { if (this != &rhs) { clear(); gutsOfSetVector(rhs.getNumElements(), rhs.getIndices(), rhs.getElements(), CoinPackedVectorBase::testForDuplicateIndex(), "operator= from base"); } return *this; } //############################################################################# #if 0 void CoinPackedVector::assignVector(int size, int*& inds, double*& elems, bool testForDuplicateIndex) { clear(); // Allocate storage if ( size != 0 ) { reserve(size); nElements_ = size; indices_ = inds; inds = NULL; elements_ = elems; elems = NULL; CoinIotaN(origIndices_, size, 0); } try { CoinPackedVectorBase::setTestForDuplicateIndex(testForDuplicateIndex); } catch (CoinError& e) { throw CoinError("duplicate index", "assignVector", "CoinPackedVector"); } } #else void CoinPackedVector::assignVector(int size, int*& inds, double*& elems, bool testForDuplicateIndex) { clear(); // Allocate storage if ( size != 0 ) { //reserve(size); //This is a BUG!!! nElements_ = size; if (indices_ != NULL) delete[] indices_; indices_ = inds; inds = NULL; if (elements_ != NULL) delete[] elements_; elements_ = elems; elems = NULL; if (origIndices_ != NULL) delete[] origIndices_; origIndices_ = new int[size]; CoinIotaN(origIndices_, size, 0); capacity_ = size; } if (testForDuplicateIndex) { try { CoinPackedVectorBase::setTestForDuplicateIndex(testForDuplicateIndex); } catch (CoinError& e) { throw CoinError("duplicate index", "assignVector", "CoinPackedVector"); } } else { setTestsOff(); } } #endif //############################################################################# void CoinPackedVector::setVector(int size, const int * inds, const double * elems, bool testForDuplicateIndex) { clear(); gutsOfSetVector(size, inds, elems, testForDuplicateIndex, "setVector"); } //############################################################################# void CoinPackedVector::setConstant(int size, const int * inds, double value, bool testForDuplicateIndex) { clear(); gutsOfSetConstant(size, inds, value, testForDuplicateIndex, "setConstant"); } //############################################################################# void CoinPackedVector::setFull(int size, const double * elems, bool testForDuplicateIndex) { // Clear out any values presently stored clear(); // Allocate storage if ( size!=0 ) { reserve(size); nElements_ = size; CoinIotaN(origIndices_, size, 0); CoinIotaN(indices_, size, 0); CoinDisjointCopyN(elems, size, elements_); } // Full array can not have duplicates CoinPackedVectorBase::setTestForDuplicateIndexWhenTrue(testForDuplicateIndex); } //############################################################################# /* Indices are not specified and are taken to be 0,1,...,size-1, but only where non zero*/ void CoinPackedVector::setFullNonZero(int size, const double * elems, bool testForDuplicateIndex) { // Clear out any values presently stored clear(); // For now waste space // Allocate storage if ( size!=0 ) { reserve(size); nElements_ = 0; int i; for (i=0;i= nElements_ ) throw CoinError("index >= size()", "setElement", "CoinPackedVector"); if ( index < 0 ) throw CoinError("index < 0" , "setElement", "CoinPackedVector"); #endif elements_[index] = element; } //############################################################################# void CoinPackedVector::insert( int index, double element ) { const int s = nElements_; if (testForDuplicateIndex()) { std::set& is = *indexSet("insert", "CoinPackedVector"); if (! is.insert(index).second) throw CoinError("Index already exists", "insert", "CoinPackedVector"); } if( capacity_ <= s ) { reserve( CoinMax(5, 2*capacity_) ); assert( capacity_ > s ); } indices_[s] = index; elements_[s] = element; origIndices_[s] = s; ++nElements_; } //############################################################################# void CoinPackedVector::append(const CoinPackedVectorBase & caboose) { const int cs = caboose.getNumElements(); if (cs == 0) { return; } if (testForDuplicateIndex()) { // Just to initialize the index heap indexSet("append (1st call)", "CoinPackedVector"); } const int s = nElements_; // Make sure there is enough room for the caboose if ( capacity_ < s + cs) reserve(CoinMax(s + cs, 2 * capacity_)); const int * cind = caboose.getIndices(); const double * celem = caboose.getElements(); CoinDisjointCopyN(cind, cs, indices_ + s); CoinDisjointCopyN(celem, cs, elements_ + s); CoinIotaN(origIndices_ + s, cs, s); nElements_ += cs; if (testForDuplicateIndex()) { std::set& is = *indexSet("append (2nd call)", "CoinPackedVector"); for (int i = 0; i < cs; ++i) { if (!is.insert(cind[i]).second) throw CoinError("duplicate index", "append", "CoinPackedVector"); } } } //############################################################################# void CoinPackedVector::swap(int i, int j) { if ( i >= nElements_ ) throw CoinError("index i >= size()","swap","CoinPackedVector"); if ( i < 0 ) throw CoinError("index i < 0" ,"swap","CoinPackedVector"); if ( i >= nElements_ ) throw CoinError("index j >= size()","swap","CoinPackedVector"); if ( i < 0 ) throw CoinError("index j < 0" ,"swap","CoinPackedVector"); // Swap positions i and j of the // indices and elements arrays std::swap(indices_[i], indices_[j]); std::swap(elements_[i], elements_[j]); } //############################################################################# void CoinPackedVector::truncate( int n ) { if ( n > nElements_ ) throw CoinError("n > size()","truncate","CoinPackedVector"); if ( n < 0 ) throw CoinError("n < 0","truncate","CoinPackedVector"); nElements_ = n; clearBase(); } //############################################################################# void CoinPackedVector::operator+=(double value) { std::transform(elements_, elements_ + nElements_, elements_, std::bind2nd(std::plus(), value) ); } //----------------------------------------------------------------------------- void CoinPackedVector::operator-=(double value) { std::transform(elements_, elements_ + nElements_, elements_, std::bind2nd(std::minus(), value) ); } //----------------------------------------------------------------------------- void CoinPackedVector::operator*=(double value) { std::transform(elements_, elements_ + nElements_, elements_, std::bind2nd(std::multiplies(), value) ); } //----------------------------------------------------------------------------- void CoinPackedVector::operator/=(double value) { std::transform(elements_, elements_ + nElements_, elements_, std::bind2nd(std::divides(), value) ); } //############################################################################# void CoinPackedVector::sortOriginalOrder() { CoinSort_3(origIndices_, origIndices_ + nElements_, indices_, elements_); } //############################################################################# void CoinPackedVector::reserve(int n) { // don't make allocated space smaller if ( n <= capacity_ ) return; capacity_ = n; // save pointers to existing data int * tempIndices = indices_; int * tempOrigIndices = origIndices_; double * tempElements = elements_; // allocate new space indices_ = new int [capacity_]; origIndices_ = new int [capacity_]; elements_ = new double [capacity_]; // copy data to new space if (nElements_ > 0) { CoinDisjointCopyN(tempIndices, nElements_, indices_); CoinDisjointCopyN(tempOrigIndices, nElements_, origIndices_); CoinDisjointCopyN(tempElements, nElements_, elements_); } // free old data delete [] tempElements; delete [] tempOrigIndices; delete [] tempIndices; } //############################################################################# CoinPackedVector::CoinPackedVector (bool testForDuplicateIndex) : CoinPackedVectorBase(), indices_(NULL), elements_(NULL), nElements_(0), origIndices_(NULL), capacity_(0) { // This won't fail, the packed vector is empty. There can't be duplicate // indices. CoinPackedVectorBase::setTestForDuplicateIndex(testForDuplicateIndex); } //----------------------------------------------------------------------------- CoinPackedVector::CoinPackedVector(int size, const int * inds, const double * elems, bool testForDuplicateIndex) : CoinPackedVectorBase(), indices_(NULL), elements_(NULL), nElements_(0), origIndices_(NULL), capacity_(0) { gutsOfSetVector(size, inds, elems, testForDuplicateIndex, "constructor for array value"); } //----------------------------------------------------------------------------- CoinPackedVector::CoinPackedVector(int size, const int * inds, double value, bool testForDuplicateIndex) : CoinPackedVectorBase(), indices_(NULL), elements_(NULL), nElements_(0), origIndices_(NULL), capacity_(0) { gutsOfSetConstant(size, inds, value, testForDuplicateIndex, "constructor for constant value"); } //----------------------------------------------------------------------------- CoinPackedVector::CoinPackedVector(int capacity, int size, int *&inds, double *&elems, bool /*testForDuplicateIndex*/) : CoinPackedVectorBase(), indices_(inds), elements_(elems), nElements_(size), origIndices_(NULL), capacity_(capacity) { assert( size <= capacity ); inds = NULL; elems = NULL; origIndices_ = new int[capacity_]; CoinIotaN(origIndices_, size, 0); } //----------------------------------------------------------------------------- CoinPackedVector::CoinPackedVector(int size, const double * element, bool testForDuplicateIndex) : CoinPackedVectorBase(), indices_(NULL), elements_(NULL), nElements_(0), origIndices_(NULL), capacity_(0) { setFull(size, element, testForDuplicateIndex); } //----------------------------------------------------------------------------- CoinPackedVector::CoinPackedVector(const CoinPackedVectorBase & rhs) : CoinPackedVectorBase(), indices_(NULL), elements_(NULL), nElements_(0), origIndices_(NULL), capacity_(0) { gutsOfSetVector(rhs.getNumElements(), rhs.getIndices(), rhs.getElements(), rhs.testForDuplicateIndex(), "copy constructor from base"); } //----------------------------------------------------------------------------- CoinPackedVector::CoinPackedVector(const CoinPackedVector & rhs) : CoinPackedVectorBase(), indices_(NULL), elements_(NULL), nElements_(0), origIndices_(NULL), capacity_(0) { gutsOfSetVector(rhs.getVectorNumElements(), rhs.getVectorIndices(), rhs.getVectorElements(), rhs.testForDuplicateIndex(), "copy constructor"); } //----------------------------------------------------------------------------- CoinPackedVector::~CoinPackedVector () { delete [] indices_; delete [] origIndices_; delete [] elements_; } //############################################################################# void CoinPackedVector::gutsOfSetVector(int size, const int * inds, const double * elems, bool testForDuplicateIndex, const char * method) { if ( size != 0 ) { reserve(size); nElements_ = size; CoinDisjointCopyN(inds, size, indices_); CoinDisjointCopyN(elems, size, elements_); CoinIotaN(origIndices_, size, 0); } if (testForDuplicateIndex) { try { CoinPackedVectorBase::setTestForDuplicateIndex(testForDuplicateIndex); } catch (CoinError& e) { throw CoinError("duplicate index", method, "CoinPackedVector"); } } else { setTestsOff(); } } //----------------------------------------------------------------------------- void CoinPackedVector::gutsOfSetConstant(int size, const int * inds, double value, bool testForDuplicateIndex, const char * method) { if ( size != 0 ) { reserve(size); nElements_ = size; CoinDisjointCopyN(inds, size, indices_); CoinFillN(elements_, size, value); CoinIotaN(origIndices_, size, 0); } try { CoinPackedVectorBase::setTestForDuplicateIndex(testForDuplicateIndex); } catch (CoinError& e) { throw CoinError("duplicate index", method, "CoinPackedVector"); } } //############################################################################# CoinUtils-2.9.10/CoinUtils/src/config_default.h0000644000076600007660000000177512101104050020006 0ustar coincoin /* include the COIN-OR-wide system specific configure header */ #include "configall_system.h" /* include the public project specific macros */ #include "config_coinutils_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_COINUTILS_CHECKLEVEL 0 /* Define to the debug verbosity level (0 is no output) */ #define COIN_COINUTILS_VERBOSITY 0 /* Define to 1 if bzlib is available */ /* #define COIN_HAS_BZLIB */ /* Define to 1 if zlib is available */ /* #define COIN_HAS_ZLIB */ #ifdef _MSC_VER /* Define to be the name of C-function for Inf check */ #define COIN_C_FINITE _finite /* Define to be the name of C-function for NaN check */ #define COIN_C_ISNAN _isnan #endif CoinUtils-2.9.10/CoinUtils/src/CoinPresolveEmpty.cpp0000644000076600007660000004200112171205751021023 0ustar coincoin/* $Id: CoinPresolveEmpty.cpp 1607 2013-07-16 09:01:29Z stefan $ */ // 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). #include #include #include "CoinFinite.hpp" #include "CoinHelperFunctions.hpp" #include "CoinPresolveMatrix.hpp" #include "CoinPresolveEmpty.hpp" #include "CoinMessage.hpp" #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #include "CoinPresolvePsdebug.hpp" #endif /* \file Routines to remove/reinsert empty columns and rows. */ /* Physically remove empty columns, compressing mcstrt and hincol. The major side effect is that columns are renumbered, thus clink_ is no longer valid and must be rebuilt. And we're totally inconsistent with the row-major representation. It's necessary to rebuild clink_ in order to do direct conversion of a CoinPresolveMatrix to a CoinPostsolveMatrix by transferring the data arrays. Without clink_, it's impractical to build link_ to match the transferred bulk storage. */ const CoinPresolveAction *drop_empty_cols_action::presolve (CoinPresolveMatrix *prob, const int *ecols, int necols, const CoinPresolveAction *next) { # if PRESOLVE_CONSISTENCY > 0 presolve_links_ok(prob) ; presolve_consistent(prob) ; # endif const int n_orig = prob->ncols_ ; CoinBigIndex *mcstrt = prob->mcstrt_ ; int *hincol = prob->hincol_ ; presolvehlink *clink = prob->clink_ ; double *clo = prob->clo_ ; double *cup = prob->cup_ ; double *cost = prob->cost_ ; const double ztoldj = prob->ztoldj_ ; unsigned char *integerType = prob->integerType_ ; int *originalColumn = prob->originalColumn_ ; const double maxmin = prob->maxmin_ ; double *sol = prob->sol_ ; unsigned char *colstat = prob->colstat_ ; action *actions = new action[necols] ; int *colmapping = new int [n_orig+1] ; CoinZeroN(colmapping,n_orig) ; // More like `ignore infeasibility' bool fixInfeasibility = ((prob->presolveOptions_&0x4000) != 0) ; /* Open a loop to walk the list of empty columns. Mark them as empty in colmapping. */ for (int ndx = necols-1 ; ndx >= 0 ; ndx--) { const int j = ecols[ndx] ; colmapping[j] = -1 ; /* Groom bounds on integral variables. Check for previously undetected infeasibility unless the user wants to ignore it. If we find it, quit. */ double &lj = clo[j] ; double &uj = cup[j] ; if (integerType[j]) { lj = ceil(lj-1.0e-9) ; uj = floor(uj+1.0e-9) ; if (lj > uj && !fixInfeasibility) { prob->status_ |= 1 ; prob->messageHandler()->message(COIN_PRESOLVE_COLINFEAS, prob->messages()) << j << lj << uj << CoinMessageEol ; break ; } } /* Load up the postsolve action with the index and rim vector components. */ action &e = actions[ndx] ; e.jcol = j ; e.clo = lj ; e.cup = uj ; e.cost = cost[j] ; /* There are no more constraints on this variable so we had better be able to compute the answer now. Try to make it nonbasic at bound. If we're unbounded, say so and quit. */ if (fabs(cost[j]) < ztoldj) cost[j] = 0.0 ; if (cost[j] == 0.0) { if (-PRESOLVE_INF < lj) e.sol = lj ; else if (uj < PRESOLVE_INF) e.sol = uj ; else e.sol = 0.0 ; } else if (cost[j]*maxmin > 0.0) { if (-PRESOLVE_INF < lj) e.sol = lj ; else { prob->messageHandler()->message(COIN_PRESOLVE_COLUMNBOUNDB, prob->messages()) << j << CoinMessageEol ; prob->status_ |= 2 ; break ; } } else { if (uj < PRESOLVE_INF) e.sol = uj ; else { prob->messageHandler()->message(COIN_PRESOLVE_COLUMNBOUNDA, prob->messages()) << j << CoinMessageEol ; prob->status_ |= 2 ; break ; } } # if PRESOLVE_DEBUG > 2 if (e.sol*cost[j]) { std::cout << " non-zero cost " << cost[j] << " for empty col " << j << "." << std::endl ; } # endif prob->change_bias(e.sol*cost[j]) ; } /* No sense doing the actual work of compression unless we're still feasible and bounded. If we are, start out by compressing out the entries associated with empty columns. Empty columns are nonzero in colmapping. */ if (prob->status_ == 0) { int n_compressed = 0 ; for (int ndx = 0 ; ndx < n_orig ; ndx++) { if (!colmapping[ndx]) { mcstrt[n_compressed] = mcstrt[ndx] ; hincol[n_compressed] = hincol[ndx] ; clo[n_compressed] = clo[ndx] ; cup[n_compressed] = cup[ndx] ; cost[n_compressed] = cost[ndx] ; if (sol) { sol[n_compressed] = sol[ndx] ; colstat[n_compressed] = colstat[ndx] ; } integerType[n_compressed] = integerType[ndx] ; originalColumn[n_compressed] = originalColumn[ndx] ; colmapping[ndx] = n_compressed++ ; } } mcstrt[n_compressed] = mcstrt[n_orig] ; colmapping[n_orig] = n_compressed ; /* Rebuild clink_. At this point, all empty columns are linked out, so the only columns left are columns that are to be saved, hence available in colmapping. All we need to do is walk clink_ and write the new entries into a new array. */ presolvehlink *newclink = new presolvehlink [n_compressed+1] ; for (int oldj = n_orig ; oldj >= 0 ; oldj = clink[oldj].pre) { presolvehlink &oldlnk = clink[oldj] ; int newj = colmapping[oldj] ; assert(newj >= 0 && newj <= n_compressed) ; presolvehlink &newlnk = newclink[newj] ; if (oldlnk.suc >= 0) { newlnk.suc = colmapping[oldlnk.suc] ; } else { newlnk.suc = NO_LINK ; } if (oldlnk.pre >= 0) { newlnk.pre = colmapping[oldlnk.pre] ; } else { newlnk.pre = NO_LINK ; } } delete [] clink ; prob->clink_ = newclink ; prob->ncols_ = n_compressed ; } delete [] colmapping ; # if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 presolve_links_ok(prob,true,false) ; presolve_check_sol(prob) ; presolve_check_nbasic(prob) ; # endif return (new drop_empty_cols_action(necols,actions,next)) ; } /* The top-level method scans the matrix for empty columns and calls a worker routine to do the heavy lifting. NOTE: At the end of this routine, the column- and row-major representations are not consistent. Empty columns have been compressed out, effectively renumbering the columns. */ const CoinPresolveAction *drop_empty_cols_action::presolve (CoinPresolveMatrix *prob, const CoinPresolveAction *next) { # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 # if PRESOLVE_DEBUG > 0 std::cout << "Entering drop_empty_cols_action::presolve." << std::endl ; # endif presolve_consistent(prob) ; presolve_links_ok(prob) ; presolve_check_sol(prob) ; presolve_check_nbasic(prob) ; # endif const int *hincol = prob->hincol_ ; int ncols = prob->ncols_ ; int nempty = 0 ; int *empty = new int [ncols] ; CoinBigIndex nelems2 = 0 ; // count empty cols for (int i = 0 ; i < ncols ; i++) { nelems2 += hincol[i] ; if (hincol[i] == 0&&!prob->colProhibited2(i)) { # if PRESOLVE_DEBUG > 1 if (nempty == 0) std::cout << "UNUSED COLS:" ; else if (i < 100 && nempty%25 == 0) std::cout << std::endl ; else if (i >= 100 && i < 1000 && nempty%19 == 0) std::cout << std::endl ; else if (i >= 1000 && nempty%15 == 0) std::cout << std::endl ; std::cout << " " << i ; # endif empty[nempty++] = i; } } prob->nelems_ = nelems2 ; if (nempty) next = drop_empty_cols_action::presolve(prob,empty,nempty,next) ; delete [] empty ; # if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 std::cout << "Leaving drop_empty_cols_action::presolve" ; if (nempty) std::cout << ", dropped " << nempty << " columns" ; std::cout << "." << std::endl ; # endif return (next); } /* Reintroduce empty columns dropped at the end of presolve. */ void drop_empty_cols_action::postsolve(CoinPostsolveMatrix *prob) const { const int nactions = nactions_ ; const action *const actions = actions_ ; int ncols = prob->ncols_ ; # if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 # if PRESOLVE_DEBUG > 0 std::cout << "Entering drop_empty_cols_action::postsolve, initial system " << prob->nrows_ << "x" << ncols << ", " << nactions << " columns to restore." << std::endl ; # endif char *cdone = prob->cdone_ ; presolve_check_sol(prob,2,2,2) ; presolve_check_nbasic(prob) ; # endif CoinBigIndex *colStarts = prob->mcstrt_ ; int *colLengths = prob->hincol_ ; double *clo = prob->clo_ ; double *cup = prob->cup_ ; double *sol = prob->sol_ ; double *cost = prob->cost_ ; double *rcosts = prob->rcosts_ ; unsigned char *colstat = prob->colstat_ ; const double maxmin = prob->maxmin_ ; /* Set up a mapping vector, coded 0 for existing columns, -1 for columns we're about to reintroduce. */ int ncols2 = ncols+nactions ; int *colmapping = new int [ncols2] ; CoinZeroN(colmapping,ncols2) ; for (int ndx = 0 ; ndx < nactions ; ndx++) { const action *e = &actions[ndx] ; int j = e->jcol ; colmapping[j] = -1 ; } /* Working back from the highest index, expand the existing ncols columns over the full range ncols2, leaving holes for the columns we want to reintroduce. */ for (int j = ncols2-1 ; j >= 0 ; j--) { if (!colmapping[j]) { ncols-- ; colStarts[j] = colStarts[ncols] ; colLengths[j] = colLengths[ncols] ; clo[j] = clo[ncols] ; cup[j] = cup[ncols] ; cost[j] = cost[ncols] ; if (sol) sol[j] = sol[ncols] ; if (rcosts) rcosts[j] = rcosts[ncols] ; if (colstat) colstat[j] = colstat[ncols] ; # if PRESOLVE_DEBUG > 0 cdone[j] = cdone[ncols] ; # endif } } assert (!ncols) ; delete [] colmapping ; /* Reintroduce the dropped columns. */ for (int ndx = 0 ; ndx < nactions ; ndx++) { const action *e = &actions[ndx] ; int j = e->jcol ; colLengths[j] = 0 ; colStarts[j] = NO_LINK ; clo[j] = e->clo ; cup[j] = e->cup ; cost[j] = e->cost ; if (sol) sol[j] = e->sol ; if (rcosts) rcosts[j] = maxmin*cost[j] ; if (colstat) prob->setColumnStatusUsingValue(j) ; # if PRESOLVE_DEBUG > 0 cdone[j] = DROP_COL ; # if PRESOLVE_DEBUG > 1 std::cout << " restoring col " << j << ", lb = " << clo[j] << ", ub = " << cup[j] << std::endl ; # endif # endif } prob->ncols_ += nactions ; # if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 presolve_check_threads(prob) ; presolve_check_sol(prob,2,2,2) ; presolve_check_nbasic(prob) ; # if PRESOLVE_DEBUG > 0 std::cout << "Leaving drop_empty_cols_action::postsolve, system " << prob->nrows_ << "x" << prob->ncols_ << "." << std::endl ; # endif # endif } const CoinPresolveAction *drop_empty_rows_action::presolve (CoinPresolveMatrix *prob, const CoinPresolveAction *next) { # if PRESOLVE_DEBUG > 0 std::cout << "Entering drop_empty_rows_action::presolve." << std::endl ; # endif int ncols = prob->ncols_; CoinBigIndex *mcstrt = prob->mcstrt_; int *hincol = prob->hincol_; int *hrow = prob->hrow_; int nrows = prob->nrows_; // This is done after row copy needed //int *mrstrt = prob->mrstrt_; int *hinrow = prob->hinrow_; //int *hcol = prob->hcol_; double *rlo = prob->rlo_; double *rup = prob->rup_; unsigned char *rowstat = prob->rowstat_; double *acts = prob->acts_; int * originalRow = prob->originalRow_; //presolvehlink *rlink = prob->rlink_; bool fixInfeasibility = ((prob->presolveOptions_&0x4000) != 0) ; // Relax tolerance double tolerance = 10.0*prob->feasibilityTolerance_; int i; int nactions = 0; for (i=0; i 0 std::cout << "Leaving drop_empty_rows_action::presolve." << std::endl ; # endif return (next) ; } /* Work to do. */ action *actions = new action[nactions]; int * rowmapping = new int [nrows]; nactions = 0; int nrows2=0; for (i=0; i 1 if (nactions == 0) std::cout << "UNUSED ROWS:" ; else if (i < 100 && nactions%25 == 0) std::cout << std::endl ; else if (i >= 100 && i < 1000 && nactions%19 == 0) std::cout << std::endl ; else if (i >= 1000 && nactions%15 == 0) std::cout << std::endl ; std::cout << " " << i ; # endif nactions++; if (rlo[i] > 0.0 || rup[i] < 0.0) { if ((rlo[i]<=tolerance && rup[i]>=-tolerance)||fixInfeasibility) { rlo[i]=0.0; rup[i]=0.0; } else { prob->status_|= 1; prob->messageHandler()->message(COIN_PRESOLVE_ROWINFEAS, prob->messages()) < 1 std::cout << std::endl ; # endif // remap matrix for (i=0;inrows_ = nrows2; next = new drop_empty_rows_action(nactions,actions,next) ; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 presolve_check_nbasic(prob) ; # if PRESOLVE_DEBUG > 0 std::cout << "Leaving drop_empty_rows_action::presolve" ; if (nactions) std::cout << ", dropped " << nactions << " rows" ; std::cout << "." << std::endl ; # endif # endif return (next) ; } void drop_empty_rows_action::postsolve(CoinPostsolveMatrix *prob) const { const int nactions = nactions_ ; const action *const actions = actions_ ; int ncols = prob->ncols_ ; int nrows0 = prob->nrows0_ ; int nrows = prob->nrows_ ; CoinBigIndex *mcstrt = prob->mcstrt_ ; int *hincol = prob->hincol_ ; int *hrow = prob->hrow_ ; double *rlo = prob->rlo_ ; double *rup = prob->rup_ ; unsigned char *rowstat = prob->rowstat_ ; double *rowduals = prob->rowduals_ ; double *acts = prob->acts_ ; # if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 # if PRESOLVE_DEBUG > 0 std::cout << "Entering drop_empty_rows_action::postsolve, initial system " << nrows << "x" << ncols << ", " << nactions << " rows to restore." << std::endl ; # endif char *rdone = prob->rdone_ ; presolve_check_sol(prob,2,2,2) ; presolve_check_nbasic(prob) ; # endif /* Process the array of actions and mark rowmapping[i] if constraint i was eliminated in presolve. */ int *rowmapping = new int [nrows0] ; CoinZeroN(rowmapping,nrows0) ; for (int k = 0 ; k < nactions ; k++) { const action *e = &actions[k] ; int i = e->row ; rowmapping[i] = -1 ; } /* Now walk the vectors for row bounds, activity, duals, and status. Expand the existing entries in 0..(nrows-1) to occupy 0..(nrows0-1), leaving holes for the rows we're about to reintroduce. */ for (int i = nrows0-1 ; i >= 0 ; i--) { if (!rowmapping[i]) { nrows-- ; rlo[i] = rlo[nrows] ; rup[i] = rup[nrows] ; acts[i] = acts[nrows] ; rowduals[i] = rowduals[nrows] ; if (rowstat) rowstat[i] = rowstat[nrows] ; # if PRESOLVE_DEBUG > 0 rdone[i] = rdone[nrows] ; # endif } } assert (!nrows) ; /* Rewrite rowmapping so that it maps presolved row indices to row indices in the restored matrix. */ for (int i = 0 ; i < nrows0 ; i++) { if (!rowmapping[i]) rowmapping[nrows++] = i ; } /* Now walk the row index array for each column, rewriting the row indices so they are correct for the restored matrix. */ for (int j = 0 ; j < ncols ; j++) { const CoinBigIndex &start = mcstrt[j] ; const CoinBigIndex &end = start+hincol[j] ; for (CoinBigIndex k = start ; k < end ; k++) { hrow[k] = rowmapping[hrow[k]] ; } } delete [] rowmapping; /* And reintroduce the (still empty) rows that were removed in presolve. The assumption is that an empty row cannot be tight, hence the logical is basic and the dual is zero. */ for (int k = 0 ; k < nactions ; k++) { const action *e = &actions[k] ; int i = e->row ; rlo[i] = e->rlo ; rup[i] = e->rup ; acts[i] = 0.0 ; if (rowstat) prob->setRowStatus(i,CoinPrePostsolveMatrix::basic) ; rowduals[i] = 0.0 ; # if PRESOLVE_DEBUG > 0 rdone[i] = DROP_ROW; # if PRESOLVE_DEBUG > 1 std::cout << " restoring row " << i << ", LB = " << rlo[i] << ", UB = " << rup[i] << std::endl ; # endif # endif } prob->nrows_ += nactions ; assert(prob->nrows_ == prob->nrows0_) ; # if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 presolve_check_threads(prob) ; presolve_check_sol(prob,2,2,2) ; presolve_check_nbasic(prob) ; # if PRESOLVE_DEBUG > 0 std::cout << "Leaving drop_empty_rows_action::postsolve, system " << prob->nrows_ << "x" << prob->ncols_ << "." << std::endl ; # endif # endif } CoinUtils-2.9.10/CoinUtils/src/CoinDistance.hpp0000644000076600007660000000224711510456064017755 0ustar coincoin/* $Id: CoinDistance.hpp 1372 2011-01-03 23:31:00Z 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). #ifndef CoinDistance_H #define CoinDistance_H #include //------------------------------------------------------------------- // // Attempt to provide an std::distance function // that will work on multiple platforms // //------------------------------------------------------------------- /** CoinDistance This is the Coin implementation of the std::function that is designed to work on multiple platforms. */ template void coinDistance(ForwardIterator first, ForwardIterator last, Distance& n) { #if defined(__SUNPRO_CC) n = 0; std::distance(first,last,n); #else n = std::distance(first,last); #endif } template size_t coinDistance(ForwardIterator first, ForwardIterator last) { size_t retVal; #if defined(__SUNPRO_CC) retVal = 0; std::distance(first,last,retVal); #else retVal = std::distance(first,last); #endif return retVal; } #endif CoinUtils-2.9.10/CoinUtils/src/CoinModelUseful2.cpp0000644000076600007660000012217111533145550020523 0ustar coincoin/* $Id: CoinModelUseful2.cpp 1395 2011-03-01 10:33:12Z forrest $ */ // Copyright (C) 2005, International Business Machines // Corporation and others. All Rights Reserved. /* A Bison parser, made by GNU Bison 1.875c. */ // License sounds scary but see special exception so has no problems /* Skeleton parser for Yacc-like parsing with Bison, Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* As a special exception, when this file is copied by Bison into a Bison output file, you may use that output file without restriction. This special exception was added by the Free Software Foundation in version 1.24 of Bison. */ /* Written by Richard Stallman by simplifying the original so called ``semantic'' parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 0 /* Using locations. */ #define YYLSP_NEEDED 0 /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { NUM = 258, VAR = 259, FNCT = 260, NEG = 261 }; #endif #define NUM 258 #define VAR 259 #define FNCT 260 #define NEG 261 #include #include "CoinModel.hpp" #include "CoinHelperFunctions.hpp" /* Copy the first part of user declarations. */ #include /* For math functions, cos(), sin(), etc. */ #include #include #include #include static void yyerror (char const *); /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 0 #endif #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) typedef union YYSTYPE { double val; /* For returning numbers. */ symrec *tptr; /* For returning symbol-table pointers. */ } YYSTYPE; /* Line 191 of yacc.c. */ # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif /* Copy the second part of user declarations. */ /* Line 214 of yacc.c. */ #if ! defined (yyoverflow) || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # define YYSTACK_ALLOC alloca # endif # else # if defined (alloca) || defined (_ALLOCA_H) # define YYSTACK_ALLOC alloca # else # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) # else # if defined (__STDC__) || defined (__cplusplus) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # endif # define YYSTACK_ALLOC malloc # define YYSTACK_FREE free # endif #endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */ #if (! defined (yyoverflow) \ && (! defined (__cplusplus) \ || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { short yyss; YYSTYPE yyvs; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (short) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ # ifndef YYCOPY # if defined (__GNUC__) && 1 < __GNUC__ # define YYCOPY(To, From, Count) \ __builtin_memcpy (To, From, (Count) * sizeof (*(From))) # else # define YYCOPY(To, From, Count) \ do \ { \ register YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (To)[yyi] = (From)[yyi]; \ } \ while (0) # endif # endif /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack, Stack, yysize); \ Stack = &yyptr->Stack; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (0) #endif #if defined (__STDC__) || defined (__cplusplus) typedef signed char yysigned_char; #else typedef short yysigned_char; #endif /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 64 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 16 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 4 /* YYNRULES -- Number of rules. */ #define YYNRULES 17 /* YYNRULES -- Number of states. */ #define YYNSTATES 32 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 261 #define YYTRANSLATE(YYX) \ (static_cast ((YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const unsigned char yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 13, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 14, 15, 9, 8, 2, 7, 2, 10, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 11 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const unsigned char yyprhs[] = { 0, 0, 3, 4, 7, 9, 12, 15, 17, 19, 23, 28, 32, 36, 40, 44, 47, 51 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yysigned_char yyrhs[] = { 17, 0, -1, -1, 17, 18, -1, 13, -1, 19, 13, -1, 1, 13, -1, 3, -1, 4, -1, 4, 6, 19, -1, 5, 14, 19, 15, -1, 19, 8, 19, -1, 19, 7, 19, -1, 19, 9, 19, -1, 19, 10, 19, -1, 7, 19, -1, 19, 12, 19, -1, 14, 19, 15, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const unsigned char yyrline[] = { 0, 23, 23, 24, 28, 29, 30, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43 }; #endif #if YYDEBUG || YYERROR_VERBOSE /* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "NUM", "VAR", "FNCT", "'='", "'-'", "'+'", "'*'", "'/'", "NEG", "'^'", "'\\n'", "'('", "')'", "$accept", "input", "line", "exp", 0 }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const unsigned short yytoknum[] = { 0, 256, 257, 258, 259, 260, 61, 45, 43, 42, 47, 261, 94, 10, 40, 41 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const unsigned char yyr1[] = { 0, 16, 17, 17, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const unsigned char yyr2[] = { 0, 2, 0, 2, 1, 2, 2, 1, 1, 3, 4, 3, 3, 3, 3, 2, 3, 3 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state STATE-NUM when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const unsigned char yydefact[] = { 2, 0, 1, 0, 7, 8, 0, 0, 4, 0, 3, 0, 6, 0, 0, 15, 0, 0, 0, 0, 0, 0, 5, 9, 0, 17, 12, 11, 13, 14, 16, 10 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yysigned_char yydefgoto[] = { -1, 1, 10, 11 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -13 static const yysigned_char yypact[] = { -13, 15, -13, -12, -13, -3, -10, 20, -13, 20, -13, 41, -13, 20, 20, -4, 23, 20, 20, 20, 20, 20, -13, 48, 32, -13, 52, 52, -4, -4, -4, -13 }; /* YYPGOTO[NTERM-NUM]. */ static const yysigned_char yypgoto[] = { -13, -13, -13, -7 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -1 static const unsigned char yytable[] = { 15, 12, 16, 13, 14, 0, 23, 24, 21, 0, 26, 27, 28, 29, 30, 2, 3, 0, 4, 5, 6, 0, 7, 4, 5, 6, 0, 7, 8, 9, 17, 18, 19, 20, 9, 21, 0, 0, 25, 17, 18, 19, 20, 0, 21, 0, 0, 31, 17, 18, 19, 20, 0, 21, 22, 17, 18, 19, 20, 0, 21, 19, 20, 0, 21 }; static const yysigned_char yycheck[] = { 7, 13, 9, 6, 14, -1, 13, 14, 12, -1, 17, 18, 19, 20, 21, 0, 1, -1, 3, 4, 5, -1, 7, 3, 4, 5, -1, 7, 13, 14, 7, 8, 9, 10, 14, 12, -1, -1, 15, 7, 8, 9, 10, -1, 12, -1, -1, 15, 7, 8, 9, 10, -1, 12, 13, 7, 8, 9, 10, -1, 12, 9, 10, -1, 12 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const unsigned char yystos[] = { 0, 17, 0, 1, 3, 4, 5, 7, 13, 14, 18, 19, 13, 6, 14, 19, 19, 7, 8, 9, 10, 12, 13, 19, 19, 15, 19, 19, 19, 19, 19, 15 }; #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) # define YYSIZE_T size_t #endif #if ! defined (YYSIZE_T) && defined (size_t) # define YYSIZE_T size_t #endif #if ! defined (YYSIZE_T) # if defined (__STDC__) || defined (__cplusplus) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # endif #endif #if ! defined (YYSIZE_T) # define YYSIZE_T unsigned int #endif #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ #define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ { \ yychar = (Token); \ yylval = (Value); \ yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK; \ goto yybackup; \ } \ else \ { \ yyerror ("syntax error: cannot back up",error);\ YYERROR; \ } \ while (0) #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Compute the default location (before the actions are run). */ #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ ((Current).first_line = (Rhs)[1].first_line, \ (Current).first_column = (Rhs)[1].first_column, \ (Current).last_line = (Rhs)[N].last_line, \ (Current).last_column = (Rhs)[N].last_column) #endif /* YYLEX -- calling `yylex' with the right arguments. */ /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (0) # define YYDSYMPRINT(Args) \ do { \ if (yydebug) \ yysymprint Args; \ } while (0) # define YYDSYMPRINTF(Title, Token, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yysymprint (stderr, \ Token, Value); \ YYFPRINTF (stderr, "\n"); \ } \ } while (0) /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if defined (__STDC__) || defined (__cplusplus) static void yy_stack_print (short *bottom, short *top) #else static void yy_stack_print (bottom, top) short *bottom; short *top; #endif { YYFPRINTF (stderr, "Stack now"); for (/* Nothing. */; bottom <= top; ++bottom) YYFPRINTF (stderr, " %d", *bottom); YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (0) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if defined (__STDC__) || defined (__cplusplus) static void yy_reduce_print (int yyrule) #else static void yy_reduce_print (yyrule) int yyrule; #endif { int yyi; unsigned int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ", yyrule - 1, yylno); /* Print the symbols being reduced, and their result. */ for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]); YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]); } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (Rule); \ } while (0) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ static int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YYDSYMPRINT(Args) # define YYDSYMPRINTF(Title, Token, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #if defined (YYMAXDEPTH) && YYMAXDEPTH == 0 # undef YYMAXDEPTH #endif #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined (__GLIBC__) && defined (_STRING_H) # define yystrlen strlen # else /* Return the length of YYSTR. */ static YYSIZE_T # if defined (__STDC__) || defined (__cplusplus) yystrlen (const char *yystr) # else yystrlen (yystr) const char *yystr; # endif { register const char *yys = yystr; while (*yys++ != '\0') continue; return yys - yystr - 1; } # endif # endif # ifndef yystpcpy # if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE) # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ static char * # if defined (__STDC__) || defined (__cplusplus) yystpcpy (char *yydest, const char *yysrc) # else yystpcpy (yydest, yysrc) char *yydest; const char *yysrc; # endif { register char *yyd = yydest; register const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif #endif /* !YYERROR_VERBOSE */ #if YYDEBUG /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if defined (__STDC__) || defined (__cplusplus) static void yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep) #else static void yysymprint (yyoutput, yytype, yyvaluep) FILE *yyoutput; int yytype; YYSTYPE *yyvaluep; #endif { /* Pacify ``unused variable'' warnings. */ (void) yyvaluep; if (yytype < YYNTOKENS) { YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); # ifdef YYPRINT YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # endif } else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); switch (yytype) { default: break; } YYFPRINTF (yyoutput, ")"); } #endif /* ! YYDEBUG */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ #if defined (__STDC__) || defined (__cplusplus) static void yydestruct (int yytype, YYSTYPE *yyvaluep) #else static void yydestruct (yytype, yyvaluep) int yytype; YYSTYPE *yyvaluep; #endif { /* Pacify ``unused variable'' warnings. */ (void) yyvaluep; switch (yytype) { default: break; } } static symrec * putsym ( symrec * & symtable, char const *sym_name, int sym_type) { symrec *ptr; ptr = reinterpret_cast (malloc (sizeof (symrec))); ptr->name = reinterpret_cast (malloc (strlen (sym_name) + 1)); strcpy (ptr->name,sym_name); ptr->type = sym_type; ptr->value.var = 0; /* Set value to 0 even if fctn. */ ptr->next = reinterpret_cast(symtable); symtable = ptr; return ptr; } static symrec * getsym ( symrec *symtable,char const *sym_name) { symrec *ptr; for (ptr = symtable; ptr != NULL; ptr = reinterpret_cast(ptr->next)) if (strcmp (ptr->name,sym_name) == 0) return ptr; return 0; } static void freesym ( symrec *symtable) { symrec *ptr; for (ptr = symtable; ptr != NULL;) { free (ptr->name); symrec * ptrNext = reinterpret_cast (ptr->next) ; free (ptr); ptr=ptrNext; } } /* Called by yyparse on error. */ static void yyerror (char const * /*s*/) { // Put back if needed //printf ("%s\n", s); } struct init { char const *fname; double (*fnct) (double); }; inline double sin_wrapper (double x) { return sin(x) ; } inline double cos_wrapper (double x) { return cos(x) ; } inline double atan_wrapper (double x) { return atan(x) ; } inline double log_wrapper (double x) { return log(x) ; } inline double exp_wrapper (double x) { return exp(x) ; } inline double sqrt_wrapper (double x) { return sqrt(x) ; } inline double fabs_wrapper (double x) { return fabs(x) ; } struct init const arith_fncts[] = { {"sin", sin_wrapper}, {"cos", cos_wrapper}, {"atan", atan_wrapper}, {"ln", log_wrapper}, {"exp", exp_wrapper}, {"sqrt", sqrt_wrapper}, {"fabs", fabs_wrapper}, {"abs", fabs_wrapper}, {NULL, 0} }; /* The symbol table: a chain of `struct symrec'. */ /* Put arithmetic functions in table. */ static void init_table ( symrec * &symtable) { int i; symrec *ptr; for (i = 0; arith_fncts[i].fname != NULL; i++) { ptr = putsym ( symtable,arith_fncts[i].fname, FNCT); ptr->value.fnctptr = arith_fncts[i].fnct; } } static int yylex ( symrec *&symtable, const char * line, int * position, char * & symbuf, int & length, const double * associated, const CoinModelHash & string, int & error, double unsetValue, YYSTYPE &yylval) { int c; int ipos=*position; /* Ignore white space, get first nonwhite character. */ while ((c = line[ipos]) == ' ' || c == '\t') ipos++; if (c == EOF) return 0; /* Char starts a number => parse the number. */ if (c == '.' || isdigit (c)) { sscanf (line+ipos,"%lf", &yylval.val); /* Get first white or other character. */ int nE=0; int nDot=0; if (c=='.') nDot=1; ipos++; // skip possible sign while (true) { c=line[ipos]; if (isdigit(c)) { } else if (!nDot&&c=='.') { nDot=1; } else if (c=='e'&&!nE) { nE=1; if (line[ipos+1]=='+'||line[ipos+1]=='-') ipos++; } else { break; } ipos++; } *position = ipos; return NUM; } /* Char starts an identifier => read the name. */ if (isalpha (c)) { symrec *s; int i; /* Initially make the buffer long enough for a 40-character symbol name. */ if (length == 0) length = 40, symbuf = reinterpret_cast(malloc (length + 1)); i = 0; do { /* If buffer is full, make it bigger. */ if (i == length) { length *= 2; symbuf = reinterpret_cast (realloc (symbuf, length + 1)); } /* Add this character to the buffer. */ symbuf[i++] = static_cast(c); /* Get another character. */ ipos++; c = line[ipos]; } while (isalnum (c)); symbuf[i] = '\0'; s = getsym ( symtable, symbuf); if (s == 0) { // Find in strings int find = string.hash(symbuf); double value; if (find>=0) { value = associated[find]; //printf("symbol %s found with value of %g\n",symbuf,value); if (value==unsetValue) error=CoinMax(error,1); } else { //printf("unknown symbol %s\n",symbuf); value=unsetValue; error=3; } s = putsym (symtable, symbuf, VAR); s->value.var=value; } yylval.tptr = s; *position = ipos; return s->type; } /* Any other character is a token by itself. */ if (c) { *position = ipos+1; return c; } else { *position = ipos; return 10; } } /*----------. | yyparse. | `----------*/ static double yyparse ( symrec *& symtable, const char * line, char * & symbuf, int & length, const double * associated, const CoinModelHash & string, int & error, double unsetValue, int & yychar, YYSTYPE &yylval, int & yynerrs) { int position=0; int nEof=0; // Number of time send of string register int yystate; register int yyn; int yyresult; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* Lookahead token as an internal (translated) token number. */ int yytoken = 0; /* Three stacks and their tools: `yyss': related to states, `yyvs': related to semantic values, `yyls': related to locations. Refer to the stacks thru separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ short yyssa[YYINITDEPTH]; short *yyss = yyssa; register short *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs = yyvsa; register YYSTYPE *yyvsp; #define YYPOPSTACK (yyvsp--, yyssp--) YYSIZE_T yystacksize = YYINITDEPTH; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; /* When reducing, the number of symbols on the RHS of the reduced rule. */ int yylen; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss; yyvsp = yyvs; goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. so pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = static_cast(yystate); if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; short *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow ("parser stack overflow", &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyoverflowlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyoverflowlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { short *yyss1 = yyss; union yyalloc *yyptr = reinterpret_cast (YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize))); if (! yyptr) goto yyoverflowlab; YYSTACK_RELOCATE (yyss); YYSTACK_RELOCATE (yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. */ /* Read a lookahead token if we need one and don't already have one. */ /* yyresume: */ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = yylex( symtable, line,&position,symbuf,length, associated,string,error,unsetValue,yylval); if (yychar==10) { if (nEof) yychar=0; nEof++; } } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = static_cast(YYTRANSLATE (yychar)); YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yyn == 0 || yyn == YYTABLE_NINF) goto yyerrlab; yyn = -yyn; goto yyreduce; } if (yyn == YYFINAL) YYACCEPT; /* Shift the lookahead token. */ YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken])); /* Discard the token being shifted unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; *++yyvsp = yylval; /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; yystate = yyn; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 5: { //printf ("\t%.10g\n", yyvsp[-1].val); return yyvsp[-1].val;} break; case 6: { yyerrok; ;} break; case 7: { yyval.val = yyvsp[0].val; ;} break; case 8: { yyval.val = yyvsp[0].tptr->value.var; ;} break; case 9: { yyval.val = yyvsp[0].val; yyvsp[-2].tptr->value.var = yyvsp[0].val; ;} break; case 10: { yyval.val = (*(yyvsp[-3].tptr->value.fnctptr))(yyvsp[-1].val); ;} break; case 11: { yyval.val = yyvsp[-2].val + yyvsp[0].val; ;} break; case 12: { yyval.val = yyvsp[-2].val - yyvsp[0].val; ;} break; case 13: { yyval.val = yyvsp[-2].val * yyvsp[0].val; ;} break; case 14: { yyval.val = yyvsp[-2].val / yyvsp[0].val; ;} break; case 15: { yyval.val = -yyvsp[0].val; ;} break; case 16: { yyval.val = pow (yyvsp[-2].val, yyvsp[0].val); ;} break; case 17: { yyval.val = yyvsp[-1].val; ;} break; } /* Line 993 of yacc.c. */ yyvsp -= yylen; yyssp -= yylen; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*------------------------------------. | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { error = CoinMax(error,2); ++yynerrs; #if YYERROR_VERBOSE yyn = yypact[yystate]; if (YYPACT_NINF < yyn && yyn < YYLAST) { YYSIZE_T yysize = 0; int yytype = YYTRANSLATE (yychar); const char* yyprefix; char *yymsg; int yyx; /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yycount = 0; yyprefix = ", expecting "; for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]); yycount += 1; if (yycount == 5) { yysize = 0; break; } } yysize += (sizeof ("syntax error, unexpected ") + yystrlen (yytname[yytype])); yymsg = (char *) YYSTACK_ALLOC (yysize); if (yymsg != 0) { char *yyp = yystpcpy (yymsg, "syntax error, unexpected "); yyp = yystpcpy (yyp, yytname[yytype]); if (yycount < 5) { yyprefix = ", expecting "; for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { yyp = yystpcpy (yyp, yyprefix); yyp = yystpcpy (yyp, yytname[yyx]); yyprefix = " or "; } } yyerror (yymsg); YYSTACK_FREE (yymsg); } else yyerror ("syntax error; also virtual memory exhausted"); } else #endif /* YYERROR_VERBOSE */ yyerror ("syntax error"); } if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) { /* If at end of input, pop the error token, then the rest of the stack, then return failure. */ if (yychar == YYEOF) for (;;) { YYPOPSTACK; if (yyssp == yyss) YYABORT; YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); yydestruct (yystos[*yyssp], yyvsp); } } else { YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc); yydestruct (yytoken, &yylval); yychar = YYEMPTY; } } /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: #ifdef __GNUC__ /* Pacify GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (0) goto yyerrorlab; #endif yyvsp -= yylen; yyssp -= yylen; yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (yyn != YYPACT_NINF) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); yydestruct (yystos[yystate], yyvsp); YYPOPSTACK; yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } if (yyn == YYFINAL) YYACCEPT; YYDPRINTF ((stderr, "Shifting error token, ")); *++yyvsp = yylval; yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #ifndef yyoverflow /*----------------------------------------------. | yyoverflowlab -- parser overflow comes here. | `----------------------------------------------*/ yyoverflowlab: yyerror ("parser stack overflow"); yyresult = 2; /* Fall through. */ #endif yyreturn: #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif return yyresult; } double CoinModel::getDoubleFromString(CoinYacc & info,const char * string) { if (!info.length) { info.symtable=NULL; info.symbuf=NULL; init_table ( info.symtable); info.unsetValue=unsetValue(); } int error=0; // Here to make thread safe /* The lookahead symbol. */ int yychar; /* The semantic value of the lookahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; double value = yyparse ( info.symtable, string,info.symbuf,info.length, associated_,string_,error,info.unsetValue, yychar, yylval, yynerrs); if (error){ // 1 means strings found but unset value // 2 syntax error // 3 string not found if (logLevel_>=1) printf("string %s returns value %g and error-code %d\n", string,value,error); value = info.unsetValue; } else if (logLevel_>=2) { printf("%s computes as %g\n",string,value); } return value; } // Frees value memory void CoinModel::freeStringMemory(CoinYacc & info) { freesym( info.symtable); free(info.symbuf); info.length=0; } // Adds one string, returns index static int addString(CoinModelHash & stringX, const char * string) { int position = stringX.hash(string); if (position<0) { position = stringX.numberItems(); stringX.addHash(position,string); } return position; } double getFunctionValueFromString(const char * string, const char * x, double xValue) { CoinYacc info; double unset = -1.23456787654321e-97; info.length=0; info.symtable=NULL; info.symbuf=NULL; init_table ( info.symtable); info.unsetValue=unset; int error=0; double associated[2]; associated[0]=xValue; associated[1]=unset; CoinModelHash stringX; addString(stringX,x); addString(stringX,string); // Here to make thread safe /* The lookahead symbol. */ int yychar; /* The semantic value of the lookahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; double value = yyparse ( info.symtable, string,info.symbuf,info.length, associated,stringX,error,info.unsetValue, yychar, yylval, yynerrs); int logLevel_=2; if (error){ // 1 means strings found but unset value // 2 syntax error // 3 string not found if (logLevel_>=1) printf("string %s returns value %g and error-code %d\n", string,value,error); value = unset; } else if (logLevel_>=2) { printf("%s computes as %g\n",string,value); } freesym( info.symtable); free(info.symbuf); return value; } CoinUtils-2.9.10/CoinUtils/src/CoinFileIO.hpp0000644000076600007660000001400511575435531017334 0ustar coincoin/* $Id: CoinFileIO.hpp 1439 2011-06-13 16:31:21Z stefan $ */ // Copyright (C) 2005, COIN-OR. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinFileIO_H #define CoinFileIO_H #include /// Base class for FileIO classes. class CoinFileIOBase { public: /// Constructor. /// @param fileName The name of the file used by this object. CoinFileIOBase (const std::string &fileName); /// Destructor. ~CoinFileIOBase (); /// Return the name of the file used by this object. const char *getFileName () const; /// Return the method of reading being used inline std::string getReadType () const { return readType_.c_str();} protected: std::string readType_; private: CoinFileIOBase (); CoinFileIOBase (const CoinFileIOBase &); std::string fileName_; }; /// Abstract base class for file input classes. class CoinFileInput: public CoinFileIOBase { public: /// indicates whether CoinFileInput supports gzip'ed files static bool haveGzipSupport(); /// indicates whether CoinFileInput supports bzip2'ed files static bool haveBzip2Support(); /// Factory method, that creates a CoinFileInput (more precisely /// a subclass of it) for the file specified. This method reads the /// first few bytes of the file and determines if this is a compressed /// or a plain file and returns the correct subclass to handle it. /// If the file does not exist or uses a compression not compiled in /// an exception is thrown. /// @param fileName The file that should be read. static CoinFileInput *create (const std::string &fileName); /// Constructor (don't use this, use the create method instead). /// @param fileName The name of the file used by this object. CoinFileInput (const std::string &fileName); /// Destructor. virtual ~CoinFileInput (); /// Read a block of data from the file, similar to fread. /// @param buffer Address of a buffer to store the data into. /// @param size Number of bytes to read (buffer should be large enough). /// @return Number of bytes read. virtual int read (void *buffer, int size) = 0; /// Reads up to (size-1) characters an stores them into the buffer, /// similar to fgets. /// Reading ends, when EOF or a newline occurs or (size-1) characters have /// been read. The resulting string is terminated with '\0'. If reading /// ends due to an encoutered newline, the '\n' is put into the buffer, /// before the '\0' is appended. /// @param buffer The buffer to put the string into. /// @param size The size of the buffer in characters. /// @return buffer on success, or 0 if no characters have been read. virtual char *gets (char *buffer, int size) = 0; }; /// Abstract base class for file output classes. class CoinFileOutput: public CoinFileIOBase { public: /// The compression method. enum Compression { COMPRESS_NONE = 0, ///< No compression. COMPRESS_GZIP = 1, ///< gzip compression. COMPRESS_BZIP2 = 2 ///< bzip2 compression. }; /// Returns whether the specified compression method is supported /// (i.e. was compiled into COIN). static bool compressionSupported (Compression compression); /// Factory method, that creates a CoinFileOutput (more precisely /// a subclass of it) for the file specified. If the compression method /// is not supported an exception is thrown (so use compressionSupported /// first, if this is a problem). The reason for not providing direct /// access to the subclasses (and using such a method instead) is that /// depending on the build configuration some of the classes are not /// available (or functional). This way we can handle all required ifdefs /// here instead of polluting other files. /// @param fileName The file that should be read. /// @param compression Compression method used. static CoinFileOutput *create (const std::string &fileName, Compression compression); /// Constructor (don't use this, use the create method instead). /// @param fileName The name of the file used by this object. CoinFileOutput (const std::string &fileName); /// Destructor. virtual ~CoinFileOutput (); /// Write a block of data to the file, similar to fwrite. /// @param buffer Address of a buffer containing the data to be written. /// @param size Number of bytes to write. /// @return Number of bytes written. virtual int write (const void * buffer, int size) = 0; /// Write a string to the file (like fputs). /// Just as with fputs no trailing newline is inserted! /// The terminating '\0' is not written to the file. /// The default implementation determines the length of the string /// and calls write on it. /// @param s The zero terminated string to be written. /// @return true on success, false on error. virtual bool puts (const char *s); /// Convenience method: just a 'puts(s.c_str())'. inline bool puts (const std::string &s) { return puts (s.c_str ()); } }; /*! \relates CoinFileInput \brief Test if the given string looks like an absolute file path The criteria are: - unix: string begins with `/' - windows: string begins with `\' or with `drv:' (drive specifier) */ bool fileAbsPath (const std::string &path) ; /*! \relates CoinFileInput \brief Test if the file is readable, using likely versions of the file name, and return the name that worked. The file name is constructed from \p name using the following rules:
  • An absolute path is not modified.
  • If the name begins with `~', an attempt is made to replace `~' with the value of the environment variable HOME.
  • If a default prefix (\p dfltPrefix) is provided, it is prepended to the name.
If the constructed file name cannot be opened, and CoinUtils was built with support for compressed files, fileCoinReadable will try any standard extensions for supported compressed files. The value returned in \p name is the file name that actually worked. */ bool fileCoinReadable(std::string &name, const std::string &dfltPrefix = std::string("")); #endif CoinUtils-2.9.10/CoinUtils/src/CoinPresolveSubst.hpp0000644000076600007660000000603212054013177021035 0ustar coincoin/* $Id: CoinPresolveSubst.hpp 1562 2012-11-24 00:36:15Z lou $ */ // 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). #ifndef CoinPresolveSubst_H #define CoinPresolveSubst_H /*! \file */ #define SUBST_ROW 21 #include "CoinPresolveMatrix.hpp" /*! \class subst_constraint_action \brief Detect and process implied free variables Consider a variable x. Suppose that we can find an equality such that the bound on the equality, combined with the bounds on the other variables involved in the equality, are such that even the worst case values of the other variables still imply bounds for x which are tighter than the variable's original bounds. Since x can never reach its upper or lower bounds, it is an implied free variable. By solving the equality for x and substituting for x in every other constraint entangled with x, we can make x into a column singleton. Now x is an implied free column singleton and both x and the equality can be removed. A similar transform for the case where the variable is a natural column singleton is handled by #implied_free_action. In the current presolve architecture, #implied_free_action is responsible for detecting implied free variables that are natural column singletons or can be reduced to column singletons. #implied_free_action calls subst_constraint_action to process variables that must be reduced to column singletons. */ class subst_constraint_action : public CoinPresolveAction { private: subst_constraint_action(); subst_constraint_action(const subst_constraint_action& rhs); subst_constraint_action& operator=(const subst_constraint_action& rhs); struct action { double *rlos; double *rups; double *coeffxs; int *rows; int *ninrowxs; int *rowcolsxs; double *rowelsxs; const double *costsx; int col; int rowy; int nincol; }; const int nactions_; // actions_ is owned by the class and must be deleted at destruction const action *const actions_; subst_constraint_action(int nactions, action *actions, const CoinPresolveAction *next) : CoinPresolveAction(next), nactions_(nactions), actions_(actions) {} public: const char *name() const; static const CoinPresolveAction *presolve(CoinPresolveMatrix * prob, const int *implied_free, const int * which, int numberFree, const CoinPresolveAction *next, int fill_level); static const CoinPresolveAction *presolveX(CoinPresolveMatrix * prob, const CoinPresolveAction *next, int fillLevel); void postsolve(CoinPostsolveMatrix *prob) const; virtual ~subst_constraint_action(); }; /*static*/ void implied_bounds(const double *els, const double *clo, const double *cup, const int *hcol, CoinBigIndex krs, CoinBigIndex kre, double *maxupp, double *maxdownp, int jcol, double rlo, double rup, double *iclb, double *icub); #endif CoinUtils-2.9.10/CoinUtils/src/CoinFactorization1.cpp0000644000076600007660000021547512130014662021115 0ustar coincoin/* $Id: CoinFactorization1.cpp 1581 2013-04-06 12:48:50Z stefan $ */ // 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). #if defined(_MSC_VER) // Turn off compiler warning about long names # pragma warning(disable:4786) #endif #include "CoinUtilsConfig.h" #include #include "CoinFactorization.hpp" #include "CoinIndexedVector.hpp" #include "CoinHelperFunctions.hpp" #include "CoinPackedMatrix.hpp" #include "CoinFinite.hpp" #include //:class CoinFactorization. Deals with Factorization and Updates // CoinFactorization. Constructor CoinFactorization::CoinFactorization ( ) { persistenceFlag_=0; gutsOfInitialize(7); } /// Copy constructor CoinFactorization::CoinFactorization ( const CoinFactorization &other) { persistenceFlag_=0; gutsOfInitialize(3); persistenceFlag_=other.persistenceFlag_; gutsOfCopy(other); } /// The real work of constructors etc /// Really really delete if type 2 void CoinFactorization::gutsOfDestructor(int type) { delete [] denseArea_; delete [] densePermute_; if (type==2) { elementU_.switchOff(); startRowU_.switchOff(); convertRowToColumnU_.switchOff(); indexRowU_.switchOff(); indexColumnU_.switchOff(); startColumnU_.switchOff(); elementL_.switchOff(); indexRowL_.switchOff(); startColumnL_.switchOff(); startColumnR_.switchOff(); numberInRow_.switchOff(); numberInColumn_.switchOff(); numberInColumnPlus_.switchOff(); pivotColumn_.switchOff(); pivotColumnBack_.switchOff(); firstCount_.switchOff(); nextCount_.switchOff(); lastCount_.switchOff(); permute_.switchOff(); permuteBack_.switchOff(); nextColumn_.switchOff(); lastColumn_.switchOff(); nextRow_.switchOff(); lastRow_.switchOff(); saveColumn_.switchOff(); markRow_.switchOff(); pivotRowL_.switchOff(); pivotRegion_.switchOff(); elementByRowL_.switchOff(); startRowL_.switchOff(); indexColumnL_.switchOff(); sparse_.switchOff(); workArea_.switchOff(); workArea2_.switchOff(); } elementU_.conditionalDelete(); startRowU_.conditionalDelete(); convertRowToColumnU_.conditionalDelete(); indexRowU_.conditionalDelete(); indexColumnU_.conditionalDelete(); startColumnU_.conditionalDelete(); elementL_.conditionalDelete(); indexRowL_.conditionalDelete(); startColumnL_.conditionalDelete(); startColumnR_.conditionalDelete(); numberInRow_.conditionalDelete(); numberInColumn_.conditionalDelete(); numberInColumnPlus_.conditionalDelete(); pivotColumn_.conditionalDelete(); pivotColumnBack_.conditionalDelete(); firstCount_.conditionalDelete(); nextCount_.conditionalDelete(); lastCount_.conditionalDelete(); permute_.conditionalDelete(); permuteBack_.conditionalDelete(); nextColumn_.conditionalDelete(); lastColumn_.conditionalDelete(); nextRow_.conditionalDelete(); lastRow_.conditionalDelete(); saveColumn_.conditionalDelete(); markRow_.conditionalDelete(); pivotRowL_.conditionalDelete(); pivotRegion_.conditionalDelete(); elementByRowL_.conditionalDelete(); startRowL_.conditionalDelete(); indexColumnL_.conditionalDelete(); sparse_.conditionalDelete(); workArea_.conditionalDelete(); workArea2_.conditionalDelete(); numberCompressions_ = 0; biggerDimension_ = 0; numberRows_ = 0; numberRowsExtra_ = 0; maximumRowsExtra_ = 0; numberColumns_ = 0; numberColumnsExtra_ = 0; maximumColumnsExtra_ = 0; numberGoodU_ = 0; numberGoodL_ = 0; totalElements_ = 0; factorElements_ = 0; status_ = -1; numberSlacks_ = 0; numberU_ = 0; maximumU_=0; lengthU_ = 0; lengthAreaU_ = 0; numberL_ = 0; baseL_ = 0; lengthL_ = 0; lengthAreaL_ = 0; numberR_ = 0; lengthR_ = 0; lengthAreaR_ = 0; denseArea_=NULL; densePermute_=NULL; // next two offsets but this makes cleaner elementR_=NULL; indexRowR_=NULL; numberDense_=0; //persistenceFlag_=0; ////denseThreshold_=0; } // type - 1 bit tolerances etc, 2 rest void CoinFactorization::gutsOfInitialize(int type) { if ((type&2)!=0) { numberCompressions_ = 0; biggerDimension_ = 0; numberRows_ = 0; numberRowsExtra_ = 0; maximumRowsExtra_ = 0; numberColumns_ = 0; numberColumnsExtra_ = 0; maximumColumnsExtra_ = 0; numberGoodU_ = 0; numberGoodL_ = 0; totalElements_ = 0; factorElements_ = 0; status_ = -1; numberPivots_ = 0; numberSlacks_ = 0; numberU_ = 0; maximumU_=0; lengthU_ = 0; lengthAreaU_ = 0; numberL_ = 0; baseL_ = 0; lengthL_ = 0; lengthAreaL_ = 0; numberR_ = 0; lengthR_ = 0; lengthAreaR_ = 0; elementR_ = NULL; indexRowR_ = NULL; // always switch off sparse sparseThreshold_=0; sparseThreshold2_= 0; denseArea_ = NULL; densePermute_=NULL; numberDense_=0; if (!persistenceFlag_) { workArea_=CoinFactorizationDoubleArrayWithLength(); workArea2_=CoinUnsignedIntArrayWithLength(); pivotColumn_=CoinIntArrayWithLength(); } } // after 2 because of persistenceFlag_ if ((type&1)!=0) { areaFactor_ = 0.0; pivotTolerance_ = 1.0e-1; zeroTolerance_ = 1.0e-13; #ifndef COIN_FAST_CODE slackValue_ = -1.0; #endif messageLevel_=0; maximumPivots_=200; numberTrials_ = 4; relaxCheck_=1.0; #if DENSE_CODE==1 denseThreshold_=31; denseThreshold_=71; #else denseThreshold_=0; #endif biasLU_=2; doForrestTomlin_=true; persistenceFlag_=0; } if ((type&4)!=0) { // we need to get 1 element arrays for any with length n+1 !! startColumnL_.conditionalNew (1); startColumnR_.conditionalNew( 1 ); startRowU_.conditionalNew(1); numberInRow_.conditionalNew(1); nextRow_.conditionalNew(1); lastRow_.conditionalNew( 1 ); pivotRegion_.conditionalNew(1); permuteBack_.conditionalNew(1); permute_.conditionalNew(1); pivotColumnBack_.conditionalNew(1); startColumnU_.conditionalNew( 1 ); numberInColumn_.conditionalNew(1); numberInColumnPlus_.conditionalNew(1); pivotColumn_.conditionalNew(1); nextColumn_.conditionalNew(1); lastColumn_.conditionalNew(1); collectStatistics_=false; // Below are all to collect ftranCountInput_=0.0; ftranCountAfterL_=0.0; ftranCountAfterR_=0.0; ftranCountAfterU_=0.0; btranCountInput_=0.0; btranCountAfterU_=0.0; btranCountAfterR_=0.0; btranCountAfterL_=0.0; // We can roll over factorizations numberFtranCounts_=0; numberBtranCounts_=0; // While these are averages collected over last ftranAverageAfterL_=0; ftranAverageAfterR_=0; ftranAverageAfterU_=0; btranAverageAfterU_=0; btranAverageAfterR_=0; btranAverageAfterL_=0; #ifdef ZEROFAULT startColumnL_.array()[0] = 0; startColumnR_.array()[0] = 0; startRowU_.array()[0] = 0; numberInRow_.array()[0] = 0; nextRow_.array()[0] = 0; lastRow_.array()[0] = 0; pivotRegion_.array()[0] = 0.0; permuteBack_.array()[0] = 0; permute_.array()[0] = 0; pivotColumnBack_.array()[0] = 0; startColumnU_.array()[0] = 0; numberInColumn_.array()[0] = 0; numberInColumnPlus_.array()[0] = 0; pivotColumn_.array()[0] = 0; nextColumn_.array()[0] = 0; lastColumn_.array()[0] = 0; #endif } } //Part of LP int CoinFactorization::factorize ( const CoinPackedMatrix & matrix, int rowIsBasic[], int columnIsBasic[], double areaFactor ) { // maybe for speed will be better to leave as many regions as possible gutsOfDestructor(); gutsOfInitialize(2); // ? is this correct //if (biasLU_==2) //biasLU_=3; if (areaFactor) areaFactor_ = areaFactor; const int * row = matrix.getIndices(); const CoinBigIndex * columnStart = matrix.getVectorStarts(); const int * columnLength = matrix.getVectorLengths(); const double * element = matrix.getElements(); int numberRows=matrix.getNumRows(); int numberColumns=matrix.getNumCols(); int numberBasic = 0; CoinBigIndex numberElements=0; int numberRowBasic=0; // compute how much in basis int i; for (i=0;i=0) numberRowBasic++; } numberBasic = numberRowBasic; for (i=0;i=0) { numberBasic++; numberElements += columnLength[i]; } } if ( numberBasic > numberRows ) { return -2; // say too many in basis } numberElements = 3 * numberBasic + 3 * numberElements + 20000; getAreas ( numberRows, numberBasic, numberElements, 2 * numberElements ); //fill //copy numberBasic=0; numberElements=0; int * indexColumnU = indexColumnU_.array(); int * indexRowU = indexRowU_.array(); CoinFactorizationDouble * elementU = elementU_.array(); for (i=0;i=0) { indexRowU[numberElements]=i; indexColumnU[numberElements]=numberBasic; elementU[numberElements++]=slackValue_; numberBasic++; } } for (i=0;i=0) { CoinBigIndex j; for (j=columnStart[i];j=0) { rowIsBasic[i]=permuteBack[back[numberBasic++]]; } } for (i=0;i=0) { columnIsBasic[i]=permuteBack[back[numberBasic++]]; } } // Set up permutation vector // these arrays start off as copies of permute // (and we could use permute_ instead of pivotColumn (not back though)) CoinMemcpyN ( permute_.array(), numberRows_ , pivotColumn_.array() ); CoinMemcpyN ( permuteBack_.array(), numberRows_ , pivotColumnBack() ); } else if (status_ == -1) { const int * pivotColumn = pivotColumn_.array(); // mark as basic or non basic for (i=0;i=0) { if (pivotColumn[numberBasic]>=0) rowIsBasic[i]=pivotColumn[numberBasic]; else rowIsBasic[i]=-1; numberBasic++; } } for (i=0;i=0) { if (pivotColumn[numberBasic]>=0) columnIsBasic[i]=pivotColumn[numberBasic]; else columnIsBasic[i]=-1; numberBasic++; } } } return status_; } //Given as triplets int CoinFactorization::factorize ( int numberOfRows, int numberOfColumns, CoinBigIndex numberOfElements, CoinBigIndex maximumL, CoinBigIndex maximumU, const int indicesRow[], const int indicesColumn[], const double elements[] , int permutation[], double areaFactor) { gutsOfDestructor(); gutsOfInitialize(2); if (areaFactor) areaFactor_ = areaFactor; getAreas ( numberOfRows, numberOfColumns, maximumL, maximumU ); //copy CoinMemcpyN ( indicesRow, numberOfElements, indexRowU_.array() ); CoinMemcpyN ( indicesColumn, numberOfElements, indexColumnU_.array() ); int i; CoinFactorizationDouble * elementU = elementU_.array(); for (i=0;i=0) { permutation[i]=pivotColumn[i]; } else { permutation[i]=-1; } } } return status_; } /* Two part version for flexibility This part creates arrays for user to fill. maximumL is guessed maximum size of L part of final factorization, maximumU of U part. These are multiplied by areaFactor which can be computed by user or internally. returns 0 -okay, -99 memory */ int CoinFactorization::factorizePart1 ( int numberOfRows, int , CoinBigIndex numberOfElements, int * indicesRow[], int * indicesColumn[], CoinFactorizationDouble * elements[], double areaFactor) { // maybe for speed will be better to leave as many regions as possible gutsOfDestructor(); gutsOfInitialize(2); if (areaFactor) areaFactor_ = areaFactor; CoinBigIndex numberElements = 3 * numberOfRows + 3 * numberOfElements + 20000; getAreas ( numberOfRows, numberOfRows, numberElements, 2 * numberElements ); // need to trap memory for -99 code *indicesRow = indexRowU_.array() ; *indicesColumn = indexColumnU_.array() ; *elements = elementU_.array() ; lengthU_ = numberOfElements; maximumU_ = numberElements; return 0; } /* This is part two of factorization Arrays belong to factorization and were returned by part 1 If status okay, permutation has pivot rows. If status is singular, then basic variables have +1 and ones thrown out have -COIN_INT_MAX to say thrown out. returns 0 -okay, -1 singular, -99 memory */ int CoinFactorization::factorizePart2 (int permutation[],int exactNumberElements) { lengthU_ = exactNumberElements; preProcess ( 0 ); factor ( ); //say which column is pivoting on which row int i; int * permuteBack = permuteBack_.array(); int * back = pivotColumnBack(); // permute so slacks on own rows etc for (i=0;i=0) { permutation[i]=pivotColumn[i]; } else { permutation[i]=-1; } } } return status_; } // ~CoinFactorization. Destructor CoinFactorization::~CoinFactorization ( ) { gutsOfDestructor(2); } // show_self. Debug show object void CoinFactorization::show_self ( ) const { int i; const int * pivotColumn = pivotColumn_.array(); for ( i = 0; i < numberRows_; i++ ) { std::cout << "r " << i << " " << pivotColumn[i]; if (pivotColumnBack()) std::cout<< " " << pivotColumnBack()[i]; std::cout<< " " << permute_.array()[i]; if (permuteBack_.array()) std::cout<< " " << permuteBack_.array()[i]; std::cout<< " " << pivotRegion_.array()[i]; std::cout << std::endl; } for ( i = 0; i < numberRows_; i++ ) { std::cout << "u " << i << " " << numberInColumn_.array()[i] << std::endl; int j; CoinSort_2(indexRowU_.array()+startColumnU_.array()[i], indexRowU_.array()+startColumnU_.array()[i]+numberInColumn_.array()[i], elementU_.array()+startColumnU_.array()[i]); for ( j = startColumnU_.array()[i]; j < startColumnU_.array()[i] + numberInColumn_.array()[i]; j++ ) { assert (indexRowU_.array()[j]>=0&&indexRowU_.array()[j]-1.0e50&&elementU_.array()[j]<1.0e50); std::cout << indexRowU_.array()[j] << " " << elementU_.array()[j] << std::endl; } } for ( i = 0; i < numberRows_; i++ ) { std::cout << "l " << i << " " << startColumnL_.array()[i + 1] - startColumnL_.array()[i] << std::endl; CoinSort_2(indexRowL_.array()+startColumnL_.array()[i], indexRowL_.array()+startColumnL_.array()[i+1], elementL_.array()+startColumnL_.array()[i]); int j; for ( j = startColumnL_.array()[i]; j < startColumnL_.array()[i + 1]; j++ ) { std::cout << indexRowL_.array()[j] << " " << elementL_.array()[j] << std::endl; } } } // sort so can compare void CoinFactorization::sort ( ) const { int i; for ( i = 0; i < numberRows_; i++ ) { CoinSort_2(indexRowU_.array()+startColumnU_.array()[i], indexRowU_.array()+startColumnU_.array()[i]+numberInColumn_.array()[i], elementU_.array()+startColumnU_.array()[i]); } for ( i = 0; i < numberRows_; i++ ) { CoinSort_2(indexRowL_.array()+startColumnL_.array()[i], indexRowL_.array()+startColumnL_.array()[i+1], elementL_.array()+startColumnL_.array()[i]); } } // getAreas. Gets space for a factorization //called by constructors void CoinFactorization::getAreas ( int numberOfRows, int numberOfColumns, CoinBigIndex maximumL, CoinBigIndex maximumU ) { numberRows_ = numberOfRows; numberColumns_ = numberOfColumns; maximumRowsExtra_ = numberRows_ + maximumPivots_; numberRowsExtra_ = numberRows_; maximumColumnsExtra_ = numberColumns_ + maximumPivots_; numberColumnsExtra_ = numberColumns_; lengthAreaU_ = maximumU; lengthAreaL_ = maximumL; if ( !areaFactor_ ) { areaFactor_ = 1.0; } if ( areaFactor_ != 1.0 ) { if ((messageLevel_&16)!=0) printf("Increasing factorization areas by %g\n",areaFactor_); lengthAreaU_ = static_cast (areaFactor_*lengthAreaU_); lengthAreaL_ = static_cast (areaFactor_*lengthAreaL_); } elementU_.conditionalNew( lengthAreaU_ ); indexRowU_.conditionalNew( lengthAreaU_ ); indexColumnU_.conditionalNew( lengthAreaU_ ); elementL_.conditionalNew( lengthAreaL_ ); indexRowL_.conditionalNew( lengthAreaL_ ); if (persistenceFlag_) { // But we can use all we have if bigger int length; length = CoinMin(elementU_.getSize(),indexRowU_.getSize()); if (length>lengthAreaU_) { lengthAreaU_=length; assert (indexColumnU_.getSize()==indexRowU_.getSize()); } length = CoinMin(elementL_.getSize(),indexRowL_.getSize()); if (length>lengthAreaL_) { lengthAreaL_=length; } } startColumnL_.conditionalNew( numberRows_ + 1 ); startColumnL_.array()[0] = 0; startRowU_.conditionalNew( maximumRowsExtra_ + 1); // make sure this is valid startRowU_.array()[maximumRowsExtra_]=0; numberInRow_.conditionalNew( maximumRowsExtra_ + 1 ); markRow_.conditionalNew( numberRows_ ); pivotRowL_.conditionalNew( numberRows_ + 1 ); nextRow_.conditionalNew( maximumRowsExtra_ + 1 ); lastRow_.conditionalNew( maximumRowsExtra_ + 1 ); permute_.conditionalNew( maximumRowsExtra_ + 1 ); pivotRegion_.conditionalNew( maximumRowsExtra_ + 1 ); #ifdef ZEROFAULT memset(elementU_.array(),'a',lengthAreaU_*sizeof(CoinFactorizationDouble)); memset(indexRowU_.array(),'b',lengthAreaU_*sizeof(int)); memset(indexColumnU_.array(),'c',lengthAreaU_*sizeof(int)); memset(elementL_.array(),'d',lengthAreaL_*sizeof(CoinFactorizationDouble)); memset(indexRowL_.array(),'e',lengthAreaL_*sizeof(int)); memset(startColumnL_.array()+1,'f',numberRows_*sizeof(CoinBigIndex)); memset(startRowU_.array(),'g',maximumRowsExtra_*sizeof(CoinBigIndex)); memset(numberInRow_.array(),'h',(maximumRowsExtra_+1)*sizeof(int)); memset(markRow_.array(),'i',numberRows_*sizeof(int)); memset(pivotRowL_.array(),'j',(numberRows_+1)*sizeof(int)); memset(nextRow_.array(),'k',(maximumRowsExtra_+1)*sizeof(int)); memset(lastRow_.array(),'l',(maximumRowsExtra_+1)*sizeof(int)); memset(permute_.array(),'l',(maximumRowsExtra_+1)*sizeof(int)); memset(pivotRegion_.array(),'m',(maximumRowsExtra_+1)*sizeof(CoinFactorizationDouble)); #endif startColumnU_.conditionalNew( maximumColumnsExtra_ + 1 ); numberInColumn_.conditionalNew( maximumColumnsExtra_ + 1 ); numberInColumnPlus_.conditionalNew( maximumColumnsExtra_ + 1 ); pivotColumn_.conditionalNew( maximumColumnsExtra_ + 1 ); nextColumn_.conditionalNew( maximumColumnsExtra_ + 1 ); lastColumn_.conditionalNew( maximumColumnsExtra_ + 1 ); saveColumn_.conditionalNew( numberColumns_); #ifdef ZEROFAULT memset(startColumnU_.array(),'a',(maximumColumnsExtra_+1)*sizeof(CoinBigIndex)); memset(numberInColumn_.array(),'b',(maximumColumnsExtra_+1)*sizeof(int)); memset(numberInColumnPlus_.array(),'c',(maximumColumnsExtra_+1)*sizeof(int)); memset(pivotColumn_.array(),'d',(maximumColumnsExtra_+1)*sizeof(int)); memset(nextColumn_.array(),'e',(maximumColumnsExtra_+1)*sizeof(int)); memset(lastColumn_.array(),'f',(maximumColumnsExtra_+1)*sizeof(int)); #endif if ( numberRows_ + numberColumns_ ) { if ( numberRows_ > numberColumns_ ) { biggerDimension_ = numberRows_; } else { biggerDimension_ = numberColumns_; } firstCount_.conditionalNew( CoinMax(biggerDimension_ + 2, maximumRowsExtra_+1) ); nextCount_.conditionalNew( numberRows_ + numberColumns_ ); lastCount_.conditionalNew( numberRows_ + numberColumns_ ); #ifdef ZEROFAULT memset(firstCount_.array(),'g',(biggerDimension_ + 2 )*sizeof(int)); memset(nextCount_.array(),'h',(numberRows_+numberColumns_)*sizeof(int)); memset(lastCount_.array(),'i',(numberRows_+numberColumns_)*sizeof(int)); #endif } else { firstCount_.conditionalNew( 2 ); nextCount_.conditionalNew( 0 ); lastCount_.conditionalNew( 0 ); #ifdef ZEROFAULT memset(firstCount_.array(),'g', 2 *sizeof(int)); #endif biggerDimension_ = 0; } } // preProcess. PreProcesses raw triplet data //state is 0 - triplets, 1 - some counts etc , 2 - .. void CoinFactorization::preProcess ( int state, int ) { int *indexRow = indexRowU_.array(); int *indexColumn = indexColumnU_.array(); CoinFactorizationDouble *element = elementU_.array(); CoinBigIndex numberElements = lengthU_; int *numberInRow = numberInRow_.array(); int *numberInColumn = numberInColumn_.array(); int *numberInColumnPlus = numberInColumnPlus_.array(); CoinBigIndex *startRow = startRowU_.array(); CoinBigIndex *startColumn = startColumnU_.array(); int numberRows = numberRows_; int numberColumns = numberColumns_; if (state<4) totalElements_ = numberElements; //state falls through to next state switch ( state ) { case 0: //counts { CoinZeroN ( numberInRow, numberRows + 1 ); CoinZeroN ( numberInColumn, maximumColumnsExtra_ + 1 ); CoinBigIndex i; for ( i = 0; i < numberElements; i++ ) { int iRow = indexRow[i]; int iColumn = indexColumn[i]; numberInRow[iRow]++; numberInColumn[iColumn]++; } } case -1: //sort case 1: //sort { CoinBigIndex i, k; i = 0; int iColumn; for ( iColumn = 0; iColumn < numberColumns; iColumn++ ) { //position after end of Column i += numberInColumn[iColumn]; startColumn[iColumn] = i; } for ( k = numberElements - 1; k >= 0; k-- ) { int iColumn = indexColumn[k]; if ( iColumn >= 0 ) { CoinFactorizationDouble value = element[k]; int iRow = indexRow[k]; indexColumn[k] = -1; while ( true ) { CoinBigIndex iLook = startColumn[iColumn] - 1; startColumn[iColumn] = iLook; CoinFactorizationDouble valueSave = element[iLook]; int iColumnSave = indexColumn[iLook]; int iRowSave = indexRow[iLook]; element[iLook] = value; indexRow[iLook] = iRow; indexColumn[iLook] = -1; if ( iColumnSave >= 0 ) { iColumn = iColumnSave; value = valueSave; iRow = iRowSave; } else { break; } } /* endwhile */ } } } case 2: //move largest in column to beginning //and do row part { CoinBigIndex i, k; i = 0; int iRow; for ( iRow = 0; iRow < numberRows; iRow++ ) { startRow[iRow] = i; i += numberInRow[iRow]; } CoinZeroN ( numberInRow, numberRows ); int iColumn; for ( iColumn = 0; iColumn < numberColumns; iColumn++ ) { int number = numberInColumn[iColumn]; if ( number ) { CoinBigIndex first = startColumn[iColumn]; CoinBigIndex largest = first; int iRowSave = indexRow[first]; CoinFactorizationDouble valueSave = element[first]; double valueLargest = fabs ( valueSave ); int iLook = numberInRow[iRowSave]; numberInRow[iRowSave] = iLook + 1; indexColumn[startRow[iRowSave] + iLook] = iColumn; for ( k = first + 1; k < first + number; k++ ) { int iRow = indexRow[k]; int iLook = numberInRow[iRow]; numberInRow[iRow] = iLook + 1; indexColumn[startRow[iRow] + iLook] = iColumn; CoinFactorizationDouble value = element[k]; double valueAbs = fabs ( value ); if ( valueAbs > valueLargest ) { valueLargest = valueAbs; largest = k; } } indexRow[first] = indexRow[largest]; element[first] = element[largest]; indexRow[largest] = iRowSave; element[largest] = valueSave; } } } case 3: //links and initialize pivots { int *lastRow = lastRow_.array(); int *nextRow = nextRow_.array(); int *lastColumn = lastColumn_.array(); int *nextColumn = nextColumn_.array(); CoinFillN ( firstCount_.array(), biggerDimension_ + 2, -1 ); CoinFillN ( pivotColumn_.array(), numberColumns_, -1 ); CoinZeroN ( numberInColumnPlus, maximumColumnsExtra_ + 1 ); int iRow; for ( iRow = 0; iRow < numberRows; iRow++ ) { lastRow[iRow] = iRow - 1; nextRow[iRow] = iRow + 1; int number = numberInRow[iRow]; addLink ( iRow, number ); } lastRow[maximumRowsExtra_] = numberRows - 1; nextRow[maximumRowsExtra_] = 0; lastRow[0] = maximumRowsExtra_; nextRow[numberRows - 1] = maximumRowsExtra_; startRow[maximumRowsExtra_] = numberElements; int iColumn; for ( iColumn = 0; iColumn < numberColumns; iColumn++ ) { lastColumn[iColumn] = iColumn - 1; nextColumn[iColumn] = iColumn + 1; int number = numberInColumn[iColumn]; addLink ( iColumn + numberRows, number ); } lastColumn[maximumColumnsExtra_] = numberColumns - 1; nextColumn[maximumColumnsExtra_] = 0; lastColumn[0] = maximumColumnsExtra_; if (numberColumns) nextColumn[numberColumns - 1] = maximumColumnsExtra_; startColumn[maximumColumnsExtra_] = numberElements; } break; case 4: //move largest in column to beginning { CoinBigIndex i, k; CoinFactorizationDouble * pivotRegion = pivotRegion_.array(); int iColumn; int iRow; for ( iRow = 0; iRow < numberRows; iRow++ ) { if( numberInRow[iRow]>=0) { // zero count numberInRow[iRow]=0; } else { // empty //numberInRow[iRow]=-1; already that } } //CoinZeroN ( numberInColumnPlus, maximumColumnsExtra_ + 1 ); for ( iColumn = 0; iColumn < numberColumns; iColumn++ ) { int number = numberInColumn[iColumn]; if ( number ) { // use pivotRegion and startRow for remaining elements CoinBigIndex first = startColumn[iColumn]; CoinBigIndex largest = -1; double valueLargest = -1.0; int nOther=0; k = first; CoinBigIndex end = first+number; for ( ; k < end; k++ ) { int iRow = indexRow[k]; assert (iRow=0) { numberInRow[iRow]++; double valueAbs = fabs ( value ); if ( valueAbs > valueLargest ) { valueLargest = valueAbs; largest = nOther; } startRow[nOther]=iRow; pivotRegion[nOther++]=value; } else { indexRow[first] = iRow; element[first++] = value; } } numberInColumnPlus[iColumn]=first-startColumn[iColumn]; startColumn[iColumn]=first; //largest if (largest>=0) { indexRow[first] = startRow[largest]; element[first++] = pivotRegion[largest]; } for (k=0;k0) { numberInRow[iRow]=0; i += n; } } for ( iColumn = 0; iColumn < numberColumns; iColumn++ ) { int number = numberInColumn[iColumn]; if ( number ) { CoinBigIndex first = startColumn[iColumn]; for ( k = first; k < first + number; k++ ) { int iRow = indexRow[k]; int iLook = numberInRow[iRow]; numberInRow[iRow] = iLook + 1; indexColumn[startRow[iRow] + iLook] = iColumn; } } } } // modified 3 { //set markRow so no rows updated //CoinFillN ( markRow_.array(), numberRows_, -1 ); int *lastColumn = lastColumn_.array(); int *nextColumn = nextColumn_.array(); CoinFactorizationDouble * pivotRegion = pivotRegion_.array(); int iRow; int numberGood=0; startColumnL_.array()[0] = 0; //for luck for ( iRow = 0; iRow < numberRows; iRow++ ) { int number = numberInRow[iRow]; if (number<0) { numberInRow[iRow]=0; pivotRegion[numberGood++]=slackValue_; } } int iColumn; for ( iColumn = 0 ; iColumn < numberColumns_; iColumn++ ) { lastColumn[iColumn] = iColumn - 1; nextColumn[iColumn] = iColumn + 1; int number = numberInColumn[iColumn]; deleteLink(iColumn+numberRows); addLink ( iColumn + numberRows, number ); } lastColumn[maximumColumnsExtra_] = numberColumns - 1; nextColumn[maximumColumnsExtra_] = 0; lastColumn[0] = maximumColumnsExtra_; if (numberColumns) nextColumn[numberColumns - 1] = maximumColumnsExtra_; startColumn[maximumColumnsExtra_] = numberElements; } } /* endswitch */ } //Does most of factorization int CoinFactorization::factor ( ) { int * lastColumn = lastColumn_.array(); int * lastRow = lastRow_.array(); //sparse status_ = factorSparse ( ); switch ( status_ ) { case 0: //finished totalElements_ = 0; { int * pivotColumn = pivotColumn_.array(); if ( numberGoodU_ < numberRows_ ) { int i, k; // Clean out unset nextRow int * nextRow = nextRow_.array(); //int nSing =0; k=nextRow[maximumRowsExtra_]; while (k!=maximumRowsExtra_ && k>=0) { int iRow = k; k=nextRow[k]; //nSing++; nextRow[iRow]=-1; } //assert (nSing); //printf("%d singularities - good %d rows %d\n",nSing, // numberGoodU_,numberRows_); // Now nextRow has -1 or sequence into numberGoodU_; int * permuteA = permute_.array(); for ( i = 0; i < numberRows_; i++ ) { int iGood= nextRow[i]; if (iGood>=0) permuteA[iGood]=i; } // swap arrays permute_.swap(nextRow_); int * permute = permute_.array(); for ( i = 0; i < numberRows_; i++ ) { lastRow[i] = -1; } for ( i = 0; i < numberColumns_; i++ ) { lastColumn[i] = -1; } for ( i = 0; i < numberGoodU_; i++ ) { int goodRow = permuteA[i]; //valid pivot row int goodColumn = pivotColumn[i]; lastRow[goodRow] = goodColumn; //will now have -1 or column sequence lastColumn[goodColumn] = goodRow; //will now have -1 or row sequence } nextRow_.conditionalDelete(); k = 0; //copy back and count for ( i = 0; i < numberRows_; i++ ) { permute[i] = lastRow[i]; if ( permute[i] < 0 ) { //std::cout << i << " " < 10 ) { areaFactor_ *= 1.1; } numberCompressions_=0; cleanup ( ); } return status_; } // pivotRowSingleton. Does one pivot on Row Singleton in factorization bool CoinFactorization::pivotRowSingleton ( int pivotRow, int pivotColumn ) { //store pivot columns (so can easily compress) CoinBigIndex * startColumnU = startColumnU_.array(); CoinBigIndex startColumn = startColumnU[pivotColumn]; int * numberInRow = numberInRow_.array(); int * numberInColumn = numberInColumn_.array(); int numberDoColumn = numberInColumn[pivotColumn] - 1; CoinBigIndex endColumn = startColumn + numberDoColumn + 1; CoinBigIndex pivotRowPosition = startColumn; int * indexRowU = indexRowU_.array(); int iRow = indexRowU[pivotRowPosition]; CoinBigIndex * startRowU = startRowU_.array(); int * nextRow = nextRow_.array(); int * lastRow = lastRow_.array(); while ( iRow != pivotRow ) { pivotRowPosition++; iRow = indexRowU[pivotRowPosition]; } /* endwhile */ assert ( pivotRowPosition < endColumn ); //store column in L, compress in U and take column out CoinBigIndex l = lengthL_; if ( l + numberDoColumn > lengthAreaL_ ) { //need more memory if ((messageLevel_&4)!=0) std::cout << "more memory needed in middle of invert" << std::endl; return false; } CoinBigIndex * startColumnL = startColumnL_.array(); CoinFactorizationDouble * elementL = elementL_.array(); int * indexRowL = indexRowL_.array(); startColumnL[numberGoodL_] = l; //for luck and first time numberGoodL_++; startColumnL[numberGoodL_] = l + numberDoColumn; lengthL_ += numberDoColumn; CoinFactorizationDouble *elementU = elementU_.array(); CoinFactorizationDouble pivotElement = elementU[pivotRowPosition]; CoinFactorizationDouble pivotMultiplier = 1.0 / pivotElement; pivotRegion_.array()[numberGoodU_] = pivotMultiplier; CoinBigIndex i; int * indexColumnU = indexColumnU_.array(); for ( i = startColumn; i < pivotRowPosition; i++ ) { int iRow = indexRowU[i]; indexRowL[l] = iRow; elementL[l] = elementU[i] * pivotMultiplier; l++; //take out of row list CoinBigIndex start = startRowU[iRow]; int iNumberInRow = numberInRow[iRow]; CoinBigIndex end = start + iNumberInRow; CoinBigIndex where = start; while ( indexColumnU[where] != pivotColumn ) { where++; } /* endwhile */ assert ( where < end ); indexColumnU[where] = indexColumnU[end - 1]; iNumberInRow--; numberInRow[iRow] = iNumberInRow; deleteLink ( iRow ); addLink ( iRow, iNumberInRow ); } for ( i = pivotRowPosition + 1; i < endColumn; i++ ) { int iRow = indexRowU[i]; indexRowL[l] = iRow; elementL[l] = elementU[i] * pivotMultiplier; l++; //take out of row list CoinBigIndex start = startRowU[iRow]; int iNumberInRow = numberInRow[iRow]; CoinBigIndex end = start + iNumberInRow; CoinBigIndex where = start; while ( indexColumnU[where] != pivotColumn ) { where++; } /* endwhile */ assert ( where < end ); indexColumnU[where] = indexColumnU[end - 1]; iNumberInRow--; numberInRow[iRow] = iNumberInRow; deleteLink ( iRow ); addLink ( iRow, iNumberInRow ); } numberInColumn[pivotColumn] = 0; //modify linked list for pivots numberInRow[pivotRow] = 0; deleteLink ( pivotRow ); deleteLink ( pivotColumn + numberRows_ ); //take out this bit of indexColumnU int next = nextRow[pivotRow]; int last = lastRow[pivotRow]; nextRow[last] = next; lastRow[next] = last; lastRow[pivotRow] =-2; nextRow[pivotRow] = numberGoodU_; //use for permute return true; } // pivotColumnSingleton. Does one pivot on Column Singleton in factorization bool CoinFactorization::pivotColumnSingleton ( int pivotRow, int pivotColumn ) { int * numberInRow = numberInRow_.array(); int * numberInColumn = numberInColumn_.array(); int * numberInColumnPlus = numberInColumnPlus_.array(); //store pivot columns (so can easily compress) int numberDoRow = numberInRow[pivotRow] - 1; CoinBigIndex * startColumnU = startColumnU_.array(); CoinBigIndex startColumn = startColumnU[pivotColumn]; int put = 0; CoinBigIndex * startRowU = startRowU_.array(); CoinBigIndex startRow = startRowU[pivotRow]; CoinBigIndex endRow = startRow + numberDoRow + 1; int * indexColumnU = indexColumnU_.array(); int * indexRowU = indexRowU_.array(); int * saveColumn = saveColumn_.array(); CoinBigIndex i; for ( i = startRow; i < endRow; i++ ) { int iColumn = indexColumnU[i]; if ( iColumn != pivotColumn ) { saveColumn[put++] = iColumn; } } int * nextRow = nextRow_.array(); int * lastRow = lastRow_.array(); //take out this bit of indexColumnU int next = nextRow[pivotRow]; int last = lastRow[pivotRow]; nextRow[last] = next; lastRow[next] = last; nextRow[pivotRow] = numberGoodU_; //use for permute lastRow[pivotRow] =-2; //mark //clean up counts CoinFactorizationDouble *elementU = elementU_.array(); CoinFactorizationDouble pivotElement = elementU[startColumn]; pivotRegion_.array()[numberGoodU_] = 1.0 / pivotElement; numberInColumn[pivotColumn] = 0; //totalElements_ --; //numberInColumnPlus[pivotColumn]++; //move pivot row in other columns to safe zone for ( i = 0; i < numberDoRow; i++ ) { int iColumn = saveColumn[i]; if ( numberInColumn[iColumn] ) { int number = numberInColumn[iColumn] - 1; //modify linked list deleteLink ( iColumn + numberRows_ ); addLink ( iColumn + numberRows_, number ); //move pivot row element if ( number ) { CoinBigIndex start = startColumnU[iColumn]; CoinBigIndex pivot = start; int iRow = indexRowU[pivot]; while ( iRow != pivotRow ) { pivot++; iRow = indexRowU[pivot]; } assert (pivot < startColumnU[iColumn] + numberInColumn[iColumn]); if ( pivot != start ) { //move largest one up CoinFactorizationDouble value = elementU[start]; iRow = indexRowU[start]; elementU[start] = elementU[pivot]; indexRowU[start] = indexRowU[pivot]; elementU[pivot] = elementU[start + 1]; indexRowU[pivot] = indexRowU[start + 1]; elementU[start + 1] = value; indexRowU[start + 1] = iRow; } else { //find new largest element int iRowSave = indexRowU[start + 1]; CoinFactorizationDouble valueSave = elementU[start + 1]; double valueLargest = fabs ( valueSave ); CoinBigIndex end = start + numberInColumn[iColumn]; CoinBigIndex largest = start + 1; CoinBigIndex k; for ( k = start + 2; k < end; k++ ) { CoinFactorizationDouble value = elementU[k]; double valueAbs = fabs ( value ); if ( valueAbs > valueLargest ) { valueLargest = valueAbs; largest = k; } } indexRowU[start + 1] = indexRowU[largest]; elementU[start + 1] = elementU[largest]; indexRowU[largest] = iRowSave; elementU[largest] = valueSave; } } //clean up counts numberInColumn[iColumn]--; numberInColumnPlus[iColumn]++; startColumnU[iColumn]++; //totalElements_--; } } //modify linked list for pivots deleteLink ( pivotRow ); deleteLink ( pivotColumn + numberRows_ ); numberInRow[pivotRow] = 0; //put in dummy pivot in L CoinBigIndex l = lengthL_; CoinBigIndex * startColumnL = startColumnL_.array(); startColumnL[numberGoodL_] = l; //for luck and first time numberGoodL_++; startColumnL[numberGoodL_] = l; return true; } // getColumnSpace. Gets space for one Column with given length //may have to do compression (returns true) //also moves existing vector bool CoinFactorization::getColumnSpace ( int iColumn, int extraNeeded ) { int * numberInColumn = numberInColumn_.array(); int * numberInColumnPlus = numberInColumnPlus_.array(); int * nextColumn = nextColumn_.array(); int * lastColumn = lastColumn_.array(); int number = numberInColumnPlus[iColumn] + numberInColumn[iColumn]; CoinBigIndex * startColumnU = startColumnU_.array(); CoinBigIndex space = lengthAreaU_ - startColumnU[maximumColumnsExtra_]; CoinFactorizationDouble *elementU = elementU_.array(); int * indexRowU = indexRowU_.array(); if ( space < extraNeeded + number + 4 ) { //compression int iColumn = nextColumn[maximumColumnsExtra_]; CoinBigIndex put = 0; while ( iColumn != maximumColumnsExtra_ ) { //move CoinBigIndex get; CoinBigIndex getEnd; if ( startColumnU[iColumn] >= 0 ) { get = startColumnU[iColumn] - numberInColumnPlus[iColumn]; getEnd = startColumnU[iColumn] + numberInColumn[iColumn]; startColumnU[iColumn] = put + numberInColumnPlus[iColumn]; } else { get = -startColumnU[iColumn]; getEnd = get + numberInColumn[iColumn]; startColumnU[iColumn] = -put; } CoinBigIndex i; for ( i = get; i < getEnd; i++ ) { indexRowU[put] = indexRowU[i]; elementU[put] = elementU[i]; put++; } iColumn = nextColumn[iColumn]; } /* endwhile */ numberCompressions_++; startColumnU[maximumColumnsExtra_] = put; space = lengthAreaU_ - put; if ( extraNeeded == COIN_INT_MAX >> 1 ) { return true; } if ( space < extraNeeded + number + 2 ) { //need more space //if we can allocate bigger then do so and copy //if not then return so code can start again status_ = -99; return false; } } CoinBigIndex put = startColumnU[maximumColumnsExtra_]; int next = nextColumn[iColumn]; int last = lastColumn[iColumn]; if ( extraNeeded || next != maximumColumnsExtra_ ) { //out nextColumn[last] = next; lastColumn[next] = last; //in at end last = lastColumn[maximumColumnsExtra_]; nextColumn[last] = iColumn; lastColumn[maximumColumnsExtra_] = iColumn; lastColumn[iColumn] = last; nextColumn[iColumn] = maximumColumnsExtra_; //move CoinBigIndex get = startColumnU[iColumn] - numberInColumnPlus[iColumn]; startColumnU[iColumn] = put + numberInColumnPlus[iColumn]; if ( number < 50 ) { int *indexRow = indexRowU; CoinFactorizationDouble *element = elementU; int i = 0; if ( ( number & 1 ) != 0 ) { element[put] = element[get]; indexRow[put] = indexRow[get]; i = 1; } for ( ; i < number; i += 2 ) { CoinFactorizationDouble value0 = element[get + i]; CoinFactorizationDouble value1 = element[get + i + 1]; int index0 = indexRow[get + i]; int index1 = indexRow[get + i + 1]; element[put + i] = value0; element[put + i + 1] = value1; indexRow[put + i] = index0; indexRow[put + i + 1] = index1; } } else { CoinMemcpyN ( &indexRowU[get], number, &indexRowU[put] ); CoinMemcpyN ( &elementU[get], number, &elementU[put] ); } put += number; get += number; //add 2 for luck startColumnU[maximumColumnsExtra_] = put + extraNeeded + 2; if (startColumnU[maximumColumnsExtra_]>lengthAreaU_) { // get more memory #ifdef CLP_DEVELOP printf("put %d, needed %d, start %d, length %d\n", put,extraNeeded,startColumnU[maximumColumnsExtra_], lengthAreaU_); #endif return false; } } else { //take off space startColumnU[maximumColumnsExtra_] = startColumnU[last] + numberInColumn[last]; } return true; } // getRowSpace. Gets space for one Row with given length //may have to do compression (returns true) //also moves existing vector bool CoinFactorization::getRowSpace ( int iRow, int extraNeeded ) { int * numberInRow = numberInRow_.array(); int number = numberInRow[iRow]; CoinBigIndex * startRowU = startRowU_.array(); CoinBigIndex space = lengthAreaU_ - startRowU[maximumRowsExtra_]; int * nextRow = nextRow_.array(); int * lastRow = lastRow_.array(); int * indexColumnU = indexColumnU_.array(); if ( space < extraNeeded + number + 2 ) { //compression int iRow = nextRow[maximumRowsExtra_]; CoinBigIndex put = 0; while ( iRow != maximumRowsExtra_ ) { //move CoinBigIndex get = startRowU[iRow]; CoinBigIndex getEnd = startRowU[iRow] + numberInRow[iRow]; startRowU[iRow] = put; CoinBigIndex i; for ( i = get; i < getEnd; i++ ) { indexColumnU[put] = indexColumnU[i]; put++; } iRow = nextRow[iRow]; } /* endwhile */ numberCompressions_++; startRowU[maximumRowsExtra_] = put; space = lengthAreaU_ - put; if ( space < extraNeeded + number + 2 ) { //need more space //if we can allocate bigger then do so and copy //if not then return so code can start again status_ = -99; return false;; } } CoinBigIndex put = startRowU[maximumRowsExtra_]; int next = nextRow[iRow]; int last = lastRow[iRow]; //out nextRow[last] = next; lastRow[next] = last; //in at end last = lastRow[maximumRowsExtra_]; nextRow[last] = iRow; lastRow[maximumRowsExtra_] = iRow; lastRow[iRow] = last; nextRow[iRow] = maximumRowsExtra_; //move CoinBigIndex get = startRowU[iRow]; startRowU[iRow] = put; while ( number ) { number--; indexColumnU[put] = indexColumnU[get]; put++; get++; } /* endwhile */ //add 4 for luck startRowU[maximumRowsExtra_] = put + extraNeeded + 4; return true; } #if COIN_ONE_ETA_COPY /* Reorders U so contiguous and in order (if there is space) Returns true if it could */ bool CoinFactorization::reorderU() { #if 1 return false; #else if (numberRows_!=numberColumns_) return false; CoinBigIndex * startColumnU = startColumnU_.array(); int * numberInColumn = numberInColumn_.array(); int * numberInColumnPlus = numberInColumnPlus_.array(); int iColumn; CoinBigIndex put = 0; for (iColumn =0;iColumn> 1 ); //compress // swap arrays numberInColumn_.swap(numberInColumnPlus_); } #else getColumnSpace ( 0, COIN_INT_MAX >> 1 ); //compress // swap arrays numberInColumn_.swap(numberInColumnPlus_); #endif CoinBigIndex * startColumnU = startColumnU_.array(); CoinBigIndex lastU = startColumnU[maximumColumnsExtra_]; //free some memory here saveColumn_.conditionalDelete(); markRow_.conditionalDelete() ; //firstCount_.conditionalDelete() ; nextCount_.conditionalDelete() ; lastCount_.conditionalDelete() ; int * numberInRow = numberInRow_.array(); int * numberInColumn = numberInColumn_.array(); int * numberInColumnPlus = numberInColumnPlus_.array(); //make column starts OK //for best cache behavior get in order (last pivot at bottom of space) //that will need thinking about //use nextRow for permutation (as that is what it is) int i; #ifndef NDEBUG { if (numberGoodU_=numberRows_) printf("Bad a %d %d\n",i,k); assert(k>=0&&k=0&&permute[i]=0&&permuteBack[i]= 0 ) { //wanted if ( numberU != iColumn ) { numberInColumnPlus[iColumn] = numberU; } else { numberInColumnPlus[iColumn] = -1; //already in correct place } numberU++; } } for ( i = 0; i < numberColumns_; i++ ) { int number = numberInColumn[i]; //always 0? int where = numberInColumnPlus[i]; numberInColumnPlus[i] = -1; CoinBigIndex start = startColumnU[i]; while ( where >= 0 ) { //put where it should be int numberNext = numberInColumn[where]; //always 0? int whereNext = numberInColumnPlus[where]; CoinBigIndex startNext = startColumnU[where]; numberInColumn[where] = number; numberInColumnPlus[where] = -1; startColumnU[where] = start; number = numberNext; where = whereNext; start = startNext; } /* endwhile */ } //sort - using indexColumn CoinFillN ( indexColumnU_.array(), lastU, -1 ); CoinBigIndex k = 0; for ( i = numberSlacks_; i < numberRows_; i++ ) { CoinBigIndex start = startColumn[i]; CoinBigIndex end = start + numberInColumn[i]; CoinBigIndex j; for ( j = start; j < end; j++ ) { indexColumnU[j] = k++; } } for ( i = numberSlacks_; i < numberRows_; i++ ) { CoinBigIndex start = startColumn[i]; CoinBigIndex end = start + numberInColumn[i]; CoinBigIndex j; for ( j = start; j < end; j++ ) { CoinBigIndex k = indexColumnU[j]; int iRow = indexRowU[j]; CoinFactorizationDouble element = elementU[j]; while ( k != -1 ) { CoinBigIndex kNext = indexColumnU[k]; int iRowNext = indexRowU[k]; CoinFactorizationDouble elementNext = elementU[k]; indexColumnU[k] = -1; indexRowU[k] = iRow; elementU[k] = element; k = kNext; iRow = iRowNext; element = elementNext; } /* endwhile */ } } CoinZeroN ( startColumnU, numberSlacks_ ); k = 0; for ( i = numberSlacks_; i < numberRows_; i++ ) { startColumnU[i] = k; k += numberInColumn[i]; } maximumU_=k; #if COIN_ONE_ETA_COPY } else { // U already OK for ( i = 0; i < numberColumns_; i++ ) { int iColumn = pivotColumn[i]; pivotColumnB[iColumn] = i; } maximumU_=startColumnU[numberRows_-1]+ numberInColumn[numberRows_-1]; numberU=numberRows_; } #endif if ( (messageLevel_ & 8)) { std::cout<<" length of U "<10*numberRows_||numberRows_<200) { // NO numberInColumnPlus_.conditionalDelete() ; } else { for ( i = 0; i < numberColumns_; i++ ) { lastColumn[i] = i - 1; nextColumn[i] = i + 1; numberInColumnPlus[i]=0; } nextColumn[numberColumns_ - 1] = maximumColumnsExtra_; lastColumn[maximumColumnsExtra_] = numberColumns_ - 1; nextColumn[maximumColumnsExtra_] = 0; lastColumn[0] = maximumColumnsExtra_; } numberU_ = numberU; numberGoodU_ = numberU; numberL_ = numberGoodL_; #if COIN_DEBUG for ( i = 0; i < numberRows_; i++ ) { if ( permute[i] < 0 ) { std::cout << i << std::endl; abort ( ); } } #endif CoinFactorizationDouble * pivotRegion = pivotRegion_.array(); for ( i = numberSlacks_; i < numberU; i++ ) { CoinBigIndex start = startColumnU[i]; CoinBigIndex end = start + numberInColumn[i]; totalElements_ += numberInColumn[i]; CoinBigIndex j; for ( j = start; j < end; j++ ) { int iRow = indexRowU[j]; iRow = permute[iRow]; indexRowU[j] = iRow; numberInRow[iRow]++; } } #if COIN_ONE_ETA_COPY if (numberRows_>=COIN_ONE_ETA_COPY) { #endif //space for cross reference convertRowToColumnU_.conditionalNew( lengthAreaU_ ); CoinBigIndex *convertRowToColumn = convertRowToColumnU_.array(); CoinBigIndex j = 0; CoinBigIndex *startRow = startRowU_.array(); int iRow; for ( iRow = 0; iRow < numberRows_; iRow++ ) { startRow[iRow] = j; j += numberInRow[iRow]; } CoinBigIndex numberInU = j; CoinZeroN ( numberInRow_.array(), numberRows_ ); for ( i = numberSlacks_; i < numberRows_; i++ ) { CoinBigIndex start = startColumnU[i]; CoinBigIndex end = start + numberInColumn[i]; CoinFactorizationDouble pivotValue = pivotRegion[i]; CoinBigIndex j; for ( j = start; j < end; j++ ) { int iRow = indexRowU[j]; int iLook = numberInRow[iRow]; numberInRow[iRow] = iLook + 1; CoinBigIndex k = startRow[iRow] + iLook; indexColumnU[k] = i; convertRowToColumn[k] = j; //multiply by pivot elementU[j] *= pivotValue; } } int * nextRow = nextRow_.array(); int * lastRow = lastRow_.array(); for ( j = 0; j < numberRows_; j++ ) { lastRow[j] = j - 1; nextRow[j] = j + 1; } nextRow[numberRows_ - 1] = maximumRowsExtra_; lastRow[maximumRowsExtra_] = numberRows_ - 1; nextRow[maximumRowsExtra_] = 0; lastRow[0] = maximumRowsExtra_; startRow[maximumRowsExtra_] = numberInU; #if COIN_ONE_ETA_COPY } else { // no row copy for ( i = numberSlacks_; i < numberU; i++ ) { CoinBigIndex start = startColumnU[i]; CoinBigIndex end = start + numberInColumn[i]; CoinBigIndex j; CoinFactorizationDouble pivotValue = pivotRegion[i]; for ( j = start; j < end; j++ ) { //multiply by pivot elementU[j] *= pivotValue; } } } #endif int firstReal = numberRows_; CoinBigIndex * startColumnL = startColumnL_.array(); int * indexRowL = indexRowL_.array(); for ( i = numberRows_ - 1; i >= 0; i-- ) { CoinBigIndex start = startColumnL[i]; CoinBigIndex end = startColumnL[i + 1]; totalElements_ += end - start; if ( end > start ) { firstReal = i; CoinBigIndex j; for ( j = start; j < end; j++ ) { int iRow = indexRowL[j]; iRow = permute[iRow]; assert (iRow>firstReal); indexRowL[j] = iRow; } } } baseL_ = firstReal; numberL_ -= firstReal; factorElements_ = totalElements_; //can delete pivotRowL_ as not used pivotRowL_.conditionalDelete() ; //use L for R if room CoinBigIndex space = lengthAreaL_ - lengthL_; CoinBigIndex spaceUsed = lengthL_ + lengthU_; int needed = ( spaceUsed + numberRows_ - 1 ) / numberRows_; needed = needed * 2 * maximumPivots_; if ( needed < 2 * numberRows_ ) { needed = 2 * numberRows_; } if (numberInColumnPlus_.array()) { // Need double the space for R space = space/2; startColumnR_.conditionalNew( maximumPivots_ + 1 + maximumColumnsExtra_ + 1 ); CoinBigIndex * startR = startColumnR_.array() + maximumPivots_+1; CoinZeroN (startR,(maximumColumnsExtra_+1)); } else { startColumnR_.conditionalNew(maximumPivots_ + 1 ); } #ifdef ZEROFAULT memset(startColumnR_.array(),'z',(maximumPivots_ + 1)*sizeof(CoinBigIndex)); #endif if ( space >= needed ) { lengthR_ = 0; lengthAreaR_ = space; elementR_ = elementL_.array() + lengthL_; indexRowR_ = indexRowL_.array() + lengthL_; } else { lengthR_ = 0; lengthAreaR_ = space; elementR_ = elementL_.array() + lengthL_; indexRowR_ = indexRowL_.array() + lengthL_; if ((messageLevel_&4)) std::cout<<"Factorization may need some increasing area space" <1.0) { double dense = numberDense_; dense *= dense; double withoutDense = totalElements_ - dense +1.0; factor *= 1.0 +dense/withoutDense; } return factor; } // checkConsistency. Checks that row and column copies look OK void CoinFactorization::checkConsistency ( ) { bool bad = false; int iRow; CoinBigIndex * startRowU = startRowU_.array(); int * numberInRow = numberInRow_.array(); int * numberInColumn = numberInColumn_.array(); int * indexColumnU = indexColumnU_.array(); int * indexRowU = indexRowU_.array(); CoinBigIndex * startColumnU = startColumnU_.array(); for ( iRow = 0; iRow < numberRows_; iRow++ ) { if ( numberInRow[iRow] ) { CoinBigIndex startRow = startRowU[iRow]; CoinBigIndex endRow = startRow + numberInRow[iRow]; CoinBigIndex j; for ( j = startRow; j < endRow; j++ ) { int iColumn = indexColumnU[j]; CoinBigIndex startColumn = startColumnU[iColumn]; CoinBigIndex endColumn = startColumn + numberInColumn[iColumn]; bool found = false; CoinBigIndex k; for ( k = startColumn; k < endColumn; k++ ) { if ( indexRowU[k] == iRow ) { found = true; break; } } if ( !found ) { bad = true; std::cout << "row " << iRow << " column " << iColumn << " Rows" << std::endl; } } } } int iColumn; for ( iColumn = 0; iColumn < numberColumns_; iColumn++ ) { if ( numberInColumn[iColumn] ) { CoinBigIndex startColumn = startColumnU[iColumn]; CoinBigIndex endColumn = startColumn + numberInColumn[iColumn]; CoinBigIndex j; for ( j = startColumn; j < endColumn; j++ ) { int iRow = indexRowU[j]; CoinBigIndex startRow = startRowU[iRow]; CoinBigIndex endRow = startRow + numberInRow[iRow]; bool found = false; CoinBigIndex k; for ( k = startRow; k < endRow; k++ ) { if ( indexColumnU[k] == iColumn ) { found = true; break; } } if ( !found ) { bad = true; std::cout << "row " << iRow << " column " << iColumn << " Columns" << std::endl; } } } } if ( bad ) { abort ( ); } } // pivotOneOtherRow. When just one other row so faster bool CoinFactorization::pivotOneOtherRow ( int pivotRow, int pivotColumn ) { int * numberInRow = numberInRow_.array(); int * numberInColumn = numberInColumn_.array(); int * numberInColumnPlus = numberInColumnPlus_.array(); int numberInPivotRow = numberInRow[pivotRow] - 1; CoinBigIndex * startRowU = startRowU_.array(); CoinBigIndex * startColumnU = startColumnU_.array(); CoinBigIndex startColumn = startColumnU[pivotColumn]; CoinBigIndex startRow = startRowU[pivotRow]; CoinBigIndex endRow = startRow + numberInPivotRow + 1; //take out this bit of indexColumnU int * nextRow = nextRow_.array(); int * lastRow = lastRow_.array(); int next = nextRow[pivotRow]; int last = lastRow[pivotRow]; nextRow[last] = next; lastRow[next] = last; nextRow[pivotRow] = numberGoodU_; //use for permute lastRow[pivotRow] = -2; numberInRow[pivotRow] = 0; //store column in L, compress in U and take column out CoinBigIndex l = lengthL_; if ( l + 1 > lengthAreaL_ ) { //need more memory if ((messageLevel_&4)!=0) std::cout << "more memory needed in middle of invert" << std::endl; return false; } //l+=currentAreaL_->elementByColumn-elementL_; //CoinBigIndex lSave=l; CoinBigIndex * startColumnL = startColumnL_.array(); CoinFactorizationDouble * elementL = elementL_.array(); int * indexRowL = indexRowL_.array(); startColumnL[numberGoodL_] = l; //for luck and first time numberGoodL_++; startColumnL[numberGoodL_] = l + 1; lengthL_++; CoinFactorizationDouble pivotElement; CoinFactorizationDouble otherMultiplier; int otherRow; int * saveColumn = saveColumn_.array(); CoinFactorizationDouble *elementU = elementU_.array(); int * indexRowU = indexRowU_.array(); if ( indexRowU[startColumn] == pivotRow ) { pivotElement = elementU[startColumn]; otherMultiplier = elementU[startColumn + 1]; otherRow = indexRowU[startColumn + 1]; } else { pivotElement = elementU[startColumn + 1]; otherMultiplier = elementU[startColumn]; otherRow = indexRowU[startColumn]; } int numberSave = numberInRow[otherRow]; CoinFactorizationDouble pivotMultiplier = 1.0 / pivotElement; CoinFactorizationDouble * pivotRegion = pivotRegion_.array(); pivotRegion[numberGoodU_] = pivotMultiplier; numberInColumn[pivotColumn] = 0; otherMultiplier = otherMultiplier * pivotMultiplier; indexRowL[l] = otherRow; elementL[l] = otherMultiplier; //take out of row list CoinBigIndex start = startRowU[otherRow]; CoinBigIndex end = start + numberSave; CoinBigIndex where = start; int * indexColumnU = indexColumnU_.array(); while ( indexColumnU[where] != pivotColumn ) { where++; } /* endwhile */ assert ( where < end ); end--; indexColumnU[where] = indexColumnU[end]; int numberAdded = 0; int numberDeleted = 0; //pack down and move to work int j; const int * nextCount = nextCount_.array(); int * nextColumn = nextColumn_.array(); for ( j = startRow; j < endRow; j++ ) { int iColumn = indexColumnU[j]; if ( iColumn != pivotColumn ) { CoinBigIndex startColumn = startColumnU[iColumn]; CoinBigIndex endColumn = startColumn + numberInColumn[iColumn]; int iRow = indexRowU[startColumn]; CoinFactorizationDouble value = elementU[startColumn]; double largest; bool foundOther = false; //leave room for pivot CoinBigIndex put = startColumn + 1; CoinBigIndex positionLargest = -1; CoinFactorizationDouble thisPivotValue = 0.0; CoinFactorizationDouble otherElement = 0.0; CoinFactorizationDouble nextValue = elementU[put];; int nextIRow = indexRowU[put]; //compress column and find largest not updated if ( iRow != pivotRow ) { if ( iRow != otherRow ) { largest = fabs ( value ); elementU[put] = value; indexRowU[put] = iRow; positionLargest = put; put++; CoinBigIndex i; for ( i = startColumn + 1; i < endColumn; i++ ) { iRow = nextIRow; value = nextValue; #ifdef ZEROFAULT // doesn't matter reading uninitialized but annoys checking if ( i + 1 < endColumn ) { #endif nextIRow = indexRowU[i + 1]; nextValue = elementU[i + 1]; #ifdef ZEROFAULT } #endif if ( iRow != pivotRow ) { if ( iRow != otherRow ) { //keep indexRowU[put] = iRow; elementU[put] = value;; put++; } else { otherElement = value; foundOther = true; } } else { thisPivotValue = value; } } } else { otherElement = value; foundOther = true; //need to find largest largest = 0.0; CoinBigIndex i; for ( i = startColumn + 1; i < endColumn; i++ ) { iRow = nextIRow; value = nextValue; #ifdef ZEROFAULT // doesn't matter reading uninitialized but annoys checking if ( i + 1 < endColumn ) { #endif nextIRow = indexRowU[i + 1]; nextValue = elementU[i + 1]; #ifdef ZEROFAULT } #endif if ( iRow != pivotRow ) { //keep indexRowU[put] = iRow; elementU[put] = value;; double absValue = fabs ( value ); if ( absValue > largest ) { largest = absValue; positionLargest = put; } put++; } else { thisPivotValue = value; } } } } else { //need to find largest largest = 0.0; thisPivotValue = value; CoinBigIndex i; for ( i = startColumn + 1; i < endColumn; i++ ) { iRow = nextIRow; value = nextValue; #ifdef ZEROFAULT // doesn't matter reading uninitialized but annoys checking if ( i + 1 < endColumn ) { #endif nextIRow = indexRowU[i + 1]; nextValue = elementU[i + 1]; #ifdef ZEROFAULT } #endif if ( iRow != otherRow ) { //keep indexRowU[put] = iRow; elementU[put] = value;; double absValue = fabs ( value ); if ( absValue > largest ) { largest = absValue; positionLargest = put; } put++; } else { otherElement = value; foundOther = true; } } } //slot in pivot elementU[startColumn] = thisPivotValue; indexRowU[startColumn] = pivotRow; //clean up counts startColumn++; numberInColumn[iColumn] = put - startColumn; numberInColumnPlus[iColumn]++; startColumnU[iColumn]++; otherElement = otherElement - thisPivotValue * otherMultiplier; double absValue = fabs ( otherElement ); if ( absValue > zeroTolerance_ ) { if ( !foundOther ) { //have we space saveColumn[numberAdded++] = iColumn; int next = nextColumn[iColumn]; CoinBigIndex space; space = startColumnU[next] - put - numberInColumnPlus[next]; if ( space <= 0 ) { //getColumnSpace also moves fixed part int number = numberInColumn[iColumn]; if ( !getColumnSpace ( iColumn, number + 1 ) ) { return false; } //redo starts positionLargest = positionLargest + startColumnU[iColumn] - startColumn; startColumn = startColumnU[iColumn]; put = startColumn + number; } } elementU[put] = otherElement; indexRowU[put] = otherRow; if ( absValue > largest ) { largest = absValue; positionLargest = put; } put++; } else { if ( foundOther ) { numberDeleted++; //take out of row list CoinBigIndex where = start; while ( indexColumnU[where] != iColumn ) { where++; } /* endwhile */ assert ( where < end ); end--; indexColumnU[where] = indexColumnU[end]; } } numberInColumn[iColumn] = put - startColumn; //move largest if ( positionLargest >= 0 ) { value = elementU[positionLargest]; iRow = indexRowU[positionLargest]; elementU[positionLargest] = elementU[startColumn]; indexRowU[positionLargest] = indexRowU[startColumn]; elementU[startColumn] = value; indexRowU[startColumn] = iRow; } //linked list for column if ( nextCount[iColumn + numberRows_] != -2 ) { //modify linked list deleteLink ( iColumn + numberRows_ ); addLink ( iColumn + numberRows_, numberInColumn[iColumn] ); } } } //get space for row list next = nextRow[otherRow]; CoinBigIndex space; space = startRowU[next] - end; totalElements_ += numberAdded - numberDeleted; int number = numberAdded + ( end - start ); if ( space < numberAdded ) { numberInRow[otherRow] = end - start; if ( !getRowSpace ( otherRow, number ) ) { return false; } end = startRowU[otherRow] + end - start; } // do linked lists and update counts numberInRow[otherRow] = number; if ( number != numberSave ) { deleteLink ( otherRow ); addLink ( otherRow, number ); } for ( j = 0; j < numberAdded; j++ ) { indexColumnU[end++] = saveColumn[j]; } //modify linked list for pivots deleteLink ( pivotRow ); deleteLink ( pivotColumn + numberRows_ ); return true; } void CoinFactorization::setPersistenceFlag(int flag) { persistenceFlag_=flag; workArea_.setPersistence(flag,maximumRowsExtra_+1); workArea2_.setPersistence(flag,maximumRowsExtra_+1); pivotColumn_.setPersistence(flag,maximumColumnsExtra_+1); permute_.setPersistence(flag,maximumRowsExtra_+1); pivotColumnBack_.setPersistence(flag,maximumRowsExtra_+1); permuteBack_.setPersistence(flag,maximumRowsExtra_+1); nextRow_.setPersistence(flag,maximumRowsExtra_+1); startRowU_.setPersistence(flag,maximumRowsExtra_+1); numberInRow_.setPersistence(flag,maximumRowsExtra_+1); numberInColumn_.setPersistence(flag,maximumColumnsExtra_+1); numberInColumnPlus_.setPersistence(flag,maximumColumnsExtra_+1); firstCount_.setPersistence(flag,CoinMax(biggerDimension_+2,maximumRowsExtra_+1)); nextCount_.setPersistence(flag,numberRows_+numberColumns_); lastCount_.setPersistence(flag,numberRows_+numberColumns_); nextColumn_.setPersistence(flag,maximumColumnsExtra_+1); lastColumn_.setPersistence(flag,maximumColumnsExtra_+1); lastRow_.setPersistence(flag,maximumRowsExtra_+1); markRow_.setPersistence(flag,numberRows_); saveColumn_.setPersistence(flag,numberColumns_); indexColumnU_.setPersistence(flag,lengthAreaU_); pivotRowL_.setPersistence(flag,numberRows_+1); pivotRegion_.setPersistence(flag,maximumRowsExtra_+1); elementU_.setPersistence(flag,lengthAreaU_); indexRowU_.setPersistence(flag,lengthAreaU_); startColumnU_.setPersistence(flag,maximumColumnsExtra_+1); convertRowToColumnU_.setPersistence( flag, lengthAreaU_ ); elementL_.setPersistence( flag, lengthAreaL_ ); indexRowL_.setPersistence( flag, lengthAreaL_ ); startColumnL_.setPersistence( flag, numberRows_ + 1 ); startColumnR_.setPersistence( flag, maximumPivots_ + 1 + maximumColumnsExtra_ + 1 ); startRowL_.setPersistence( flag,0 ); indexColumnL_.setPersistence( flag, 0 ); elementByRowL_.setPersistence( flag, 0 ); sparse_.setPersistence( flag, 0 ); } // Delete all stuff void CoinFactorization::almostDestructor() { gutsOfDestructor(2); } CoinUtils-2.9.10/CoinUtils/src/CoinBuild.cpp0000644000076600007660000002737112017155726017266 0ustar coincoin/* $Id: CoinBuild.cpp 1550 2012-08-28 14:55:18Z forrest $ */ // 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 #include #include #include #include #include #include "CoinBuild.hpp" #include "CoinPragma.hpp" #include "CoinHelperFunctions.hpp" /* Format of each item is a bit sleazy. First we have pointer to next item Then we have two ints giving item number and number of elements Then we have three double for objective lower and upper Then we have elements Then indices */ struct buildFormat { buildFormat * next; int itemNumber; int numberElements; double objective; double lower; double upper; double restDouble[1]; int restInt[1]; // just to make correct size } ; //############################################################################# // Constructors / Destructor / Assignment //############################################################################# //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- CoinBuild::CoinBuild () : numberItems_(0), numberOther_(0), numberElements_(0), currentItem_(NULL), firstItem_(NULL), lastItem_(NULL), type_(-1) { } //------------------------------------------------------------------- // Constructor with type //------------------------------------------------------------------- CoinBuild::CoinBuild (int type) : numberItems_(0), numberOther_(0), numberElements_(0), currentItem_(NULL), firstItem_(NULL), lastItem_(NULL), type_(type) { if (type<0||type>1) type_=-1; // unset } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- CoinBuild::CoinBuild (const CoinBuild & rhs) : numberItems_(rhs.numberItems_), numberOther_(rhs.numberOther_), numberElements_(rhs.numberElements_), type_(rhs.type_) { if (numberItems_) { firstItem_=NULL; buildFormat * lastItem = NULL; buildFormat * currentItem = reinterpret_cast ( rhs.firstItem_); for (int iItem=0;iItemnumberElements; int length = ( CoinSizeofAsInt(buildFormat) + (numberElements-1) * (CoinSizeofAsInt(double)+CoinSizeofAsInt(int)) ); int doubles = (length + CoinSizeofAsInt(double)-1)/CoinSizeofAsInt(double); double * copyOfItem = new double [doubles]; memcpy(copyOfItem,item,length); if (!firstItem_) { firstItem_ = copyOfItem; } else { // update pointer lastItem->next = reinterpret_cast ( copyOfItem); } currentItem = currentItem->next; // on to next lastItem = reinterpret_cast ( copyOfItem); } currentItem_=firstItem_; lastItem_=reinterpret_cast ( lastItem); } else { currentItem_=NULL; firstItem_=NULL; lastItem_=NULL; } } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- CoinBuild::~CoinBuild () { buildFormat * item = reinterpret_cast ( firstItem_); for (int iItem=0;iItem ( item); item = item->next; delete [] array; } } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- CoinBuild & CoinBuild::operator=(const CoinBuild& rhs) { if (this != &rhs) { buildFormat * item = reinterpret_cast ( firstItem_); for (int iItem=0;iItem ( item); item = item->next; delete [] array; } numberItems_=rhs.numberItems_; numberOther_=rhs.numberOther_; numberElements_=rhs.numberElements_; type_=rhs.type_; if (numberItems_) { firstItem_=NULL; buildFormat * lastItem = NULL; buildFormat * currentItem = reinterpret_cast ( rhs.firstItem_); for (int iItem=0;iItemnumberElements; int length = CoinSizeofAsInt(buildFormat)+(numberElements-1)*(CoinSizeofAsInt(double)+CoinSizeofAsInt(int)); int doubles = (length + CoinSizeofAsInt(double)-1)/CoinSizeofAsInt(double); double * copyOfItem = new double [doubles]; memcpy(copyOfItem,item,length); if (!firstItem_) { firstItem_ = copyOfItem; } else { // update pointer lastItem->next = reinterpret_cast ( copyOfItem); } currentItem = currentItem->next; // on to next lastItem = reinterpret_cast ( copyOfItem); } currentItem_=firstItem_; lastItem_=reinterpret_cast ( lastItem); } else { currentItem_=NULL; firstItem_=NULL; lastItem_=NULL; } } return *this; } // add a row void CoinBuild::addRow(int numberInRow, const int * columns, const double * elements, double rowLower, double rowUpper) { if (type_<0) { type_=0; } else if (type_==1) { printf("CoinBuild:: unable to add a row in column mode\n"); abort(); } if (numberInRow<0) printf("bad number %d\n",numberInRow); // to stop compiler error addItem(numberInRow, columns, elements, rowLower,rowUpper,0.0); if (numberInRow<0) printf("bad number %d\n",numberInRow); // to stop compiler error } /* Returns number of elements in a row and information in row */ int CoinBuild::row(int whichRow, double & rowLower, double & rowUpper, const int * & indices, const double * & elements) const { assert (type_==0); setMutableCurrent(whichRow); double dummyObjective; return currentItem(rowLower,rowUpper,dummyObjective,indices,elements); } /* Returns number of elements in current row and information in row Used as rows may be stored in a chain */ int CoinBuild::currentRow(double & rowLower, double & rowUpper, const int * & indices, const double * & elements) const { assert (type_==0); double dummyObjective; return currentItem(rowLower,rowUpper,dummyObjective,indices,elements); } // Set current row void CoinBuild::setCurrentRow(int whichRow) { assert (type_==0); setMutableCurrent(whichRow); } // Returns current row number int CoinBuild::currentRow() const { assert (type_==0); return currentItem(); } // add a column void CoinBuild::addColumn(int numberInColumn, const int * rows, const double * elements, double columnLower, double columnUpper, double objectiveValue) { if (type_<0) { type_=1; } else if (type_==0) { printf("CoinBuild:: unable to add a column in row mode\n"); abort(); } addItem(numberInColumn, rows, elements, columnLower,columnUpper, objectiveValue); } /* Returns number of elements in a column and information in column */ int CoinBuild::column(int whichColumn, double & columnLower, double & columnUpper, double & objectiveValue, const int * & indices, const double * & elements) const { assert (type_==1); setMutableCurrent(whichColumn); return currentItem(columnLower,columnUpper,objectiveValue,indices,elements); } /* Returns number of elements in current column and information in column Used as columns may be stored in a chain */ int CoinBuild::currentColumn( double & columnLower, double & columnUpper, double & objectiveValue, const int * & indices, const double * & elements) const { assert (type_==1); return currentItem(columnLower,columnUpper,objectiveValue,indices,elements); } // Set current column void CoinBuild::setCurrentColumn(int whichColumn) { assert (type_==1); setMutableCurrent(whichColumn); } // Returns current column number int CoinBuild::currentColumn() const { assert (type_==1); return currentItem(); } // add a item void CoinBuild::addItem(int numberInItem, const int * indices, const double * elements, double itemLower, double itemUpper, double objectiveValue) { buildFormat * lastItem = reinterpret_cast ( lastItem_); int length = CoinSizeofAsInt(buildFormat)+(numberInItem-1)*(CoinSizeofAsInt(double)+CoinSizeofAsInt(int)); int doubles = (length + CoinSizeofAsInt(double)-1)/CoinSizeofAsInt(double); double * newItem = new double [doubles]; if (!firstItem_) { firstItem_ = newItem; } else { // update pointer lastItem->next = reinterpret_cast ( newItem); } lastItem_=newItem; currentItem_=newItem; // now fill in buildFormat * item = reinterpret_cast ( newItem); double * els = &item->restDouble[0]; int * cols = reinterpret_cast (els+numberInItem); item->next=NULL; item->itemNumber=numberItems_; numberItems_++; item->numberElements=numberInItem; numberElements_ += numberInItem; item->objective=objectiveValue; item->lower=itemLower; item->upper=itemUpper; for (int k=0;k=0); if (iColumn<0) { printf("bad col %d\n",iColumn); // to stop compiler error abort(); } if (iColumn>=numberOther_) numberOther_ = iColumn+1; els[k]=elements[k]; cols[k]=iColumn; } return; } /* Returns number of elements in a item and information in item */ int CoinBuild::item(int whichItem, double & itemLower, double & itemUpper, double & objectiveValue, const int * & indices, const double * & elements) const { setMutableCurrent(whichItem); return currentItem(itemLower,itemUpper,objectiveValue,indices,elements); } /* Returns number of elements in current item and information in item Used as items may be stored in a chain */ int CoinBuild::currentItem(double & itemLower, double & itemUpper, double & objectiveValue, const int * & indices, const double * & elements) const { buildFormat * item = reinterpret_cast ( currentItem_); if (item) { int numberElements = item->numberElements; elements = &item->restDouble[0]; indices = reinterpret_cast (elements+numberElements); objectiveValue=item->objective; itemLower = item->lower; itemUpper=item->upper; return numberElements; } else { return -1; } } // Set current item void CoinBuild::setCurrentItem(int whichItem) { setMutableCurrent(whichItem); } // Set current item void CoinBuild::setMutableCurrent(int whichItem) const { if (whichItem>=0&&whichItem ( firstItem_); // if further on then we can start from where we are buildFormat * current = reinterpret_cast ( currentItem_); if (current->itemNumber<=whichItem) { item=current; nSkip = whichItem-current->itemNumber; } for (int iItem=0;iItemnext; } assert (whichItem==item->itemNumber); currentItem_ = reinterpret_cast ( item); } } // Returns current item number int CoinBuild::currentItem() const { buildFormat * item = reinterpret_cast ( currentItem_); if (item) return item->itemNumber; else return -1; } CoinUtils-2.9.10/CoinUtils/src/CoinAlloc.hpp0000644000076600007660000001175611574206564017272 0ustar coincoin/* $Id: CoinAlloc.hpp 1438 2011-06-09 18:14:12Z stefan $ */ // Copyright (C) 2007, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinAlloc_hpp #define CoinAlloc_hpp #include "CoinUtilsConfig.h" #include #if !defined(COINUTILS_MEMPOOL_MAXPOOLED) # define COINUTILS_MEMPOOL_MAXPOOLED -1 #endif #if (COINUTILS_MEMPOOL_MAXPOOLED >= 0) #ifndef COINUTILS_MEMPOOL_ALIGNMENT #define COINUTILS_MEMPOOL_ALIGNMENT 16 #endif /* Note: This memory pool implementation assumes that sizeof(size_t) and sizeof(void*) are both <= COINUTILS_MEMPOOL_ALIGNMENT. Choosing an alignment of 4 will cause segfault on 64-bit platforms and may lead to bad performance on 32-bit platforms. So 8 is a mnimum recommended alignment. Probably 16 does not waste too much space either and may be even better for performance. One must play with it. */ //############################################################################# #if (COINUTILS_MEMPOOL_ALIGNMENT == 16) static const std::size_t CoinAllocPtrShift = 4; static const std::size_t CoinAllocRoundMask = ~((std::size_t)15); #elif (COINUTILS_MEMPOOL_ALIGNMENT == 8) static const std::size_t CoinAllocPtrShift = 3; static const std::size_t CoinAllocRoundMask = ~((std::size_t)7); #else #error "COINUTILS_MEMPOOL_ALIGNMENT must be defined as 8 or 16 (or this code needs to be changed :-)" #endif //############################################################################# #ifndef COIN_MEMPOOL_SAVE_BLOCKHEADS # define COIN_MEMPOOL_SAVE_BLOCKHEADS 0 #endif //############################################################################# class CoinMempool { private: #if (COIN_MEMPOOL_SAVE_BLOCKHEADS == 1) char** block_heads; std::size_t block_num; std::size_t max_block_num; #endif #if defined(COINUTILS_PTHREADS) && (COINUTILS_PTHREAD == 1) pthread_mutex_t mutex_; #endif int last_block_size_; char* first_free_; const std::size_t entry_size_; private: CoinMempool(const CoinMempool&); CoinMempool& operator=(const CoinMempool&); private: char* allocate_new_block(); inline void lock_mutex() { #if defined(COINUTILS_PTHREADS) && (COINUTILS_PTHREAD == 1) pthread_mutex_lock(&mutex_); #endif } inline void unlock_mutex() { #if defined(COINUTILS_PTHREADS) && (COINUTILS_PTHREAD == 1) pthread_mutex_unlock(&mutex_); #endif } public: CoinMempool(std::size_t size = 0); ~CoinMempool(); char* alloc(); inline void dealloc(char *p) { char** pp = (char**)p; lock_mutex(); *pp = first_free_; first_free_ = p; unlock_mutex(); } }; //############################################################################# /** A memory pool allocator. If a request arrives for allocating \c n bytes then it is first rounded up to the nearest multiple of \c sizeof(void*) (this is \c n_roundup), then one more \c sizeof(void*) is added to this number. If the result is no more than maxpooled_ then the appropriate pool is used to get a chunk of memory, if not, then malloc is used. In either case, the size of the allocated chunk is written into the first \c sizeof(void*) bytes and a pointer pointing afterwards is returned. */ class CoinAlloc { private: CoinMempool* pool_; int maxpooled_; public: CoinAlloc(); ~CoinAlloc() {} inline void* alloc(const std::size_t n) { if (maxpooled_ <= 0) { return std::malloc(n); } char *p = NULL; const std::size_t to_alloc = ((n+COINUTILS_MEMPOOL_ALIGNMENT-1) & CoinAllocRoundMask) + COINUTILS_MEMPOOL_ALIGNMENT; CoinMempool* pool = NULL; if (maxpooled_ > 0 && to_alloc >= (size_t)maxpooled_) { p = static_cast(std::malloc(to_alloc)); if (p == NULL) throw std::bad_alloc(); } else { pool = pool_ + (to_alloc >> CoinAllocPtrShift); p = pool->alloc(); } *((CoinMempool**)p) = pool; return static_cast(p+COINUTILS_MEMPOOL_ALIGNMENT); } inline void dealloc(void* p) { if (maxpooled_ <= 0) { std::free(p); return; } if (p) { char* base = static_cast(p)-COINUTILS_MEMPOOL_ALIGNMENT; CoinMempool* pool = *((CoinMempool**)base); if (!pool) { std::free(base); } else { pool->dealloc(base); } } } }; extern CoinAlloc CoinAllocator; //############################################################################# #if defined(COINUTILS_MEMPOOL_OVERRIDE_NEW) && (COINUTILS_MEMPOOL_OVERRIDE_NEW == 1) void* operator new(std::size_t size) throw (std::bad_alloc); void* operator new[](std::size_t) throw (std::bad_alloc); void operator delete(void*) throw(); void operator delete[](void*) throw(); void* operator new(std::size_t, const std::nothrow_t&) throw(); void* operator new[](std::size_t, const std::nothrow_t&) throw(); void operator delete(void*, const std::nothrow_t&) throw(); void operator delete[](void*, const std::nothrow_t&) throw(); #endif #endif /*(COINUTILS_MEMPOOL_MAXPOOLED >= 0)*/ #endif CoinUtils-2.9.10/CoinUtils/src/CoinPackedVectorBase.hpp0000644000076600007660000002247011552534611021371 0ustar coincoin/* $Id: CoinPackedVectorBase.hpp 1416 2011-04-17 09:57:29Z stefan $ */ // 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 CoinPackedVectorBase_H #define CoinPackedVectorBase_H #include #include #include "CoinPragma.hpp" #include "CoinError.hpp" class CoinPackedVector; /** Abstract base class for various sparse vectors. Since this class is abstract, no object of this type can be created. The sole purpose of this class is to provide access to a constant packed vector. All members of this class are const methods, they can't change the object. */ class CoinPackedVectorBase { public: /**@name Virtual methods that the derived classes must provide */ //@{ /// Get length of indices and elements vectors virtual int getNumElements() const = 0; /// Get indices of elements virtual const int * getIndices() const = 0; /// Get element values virtual const double * getElements() const = 0; //@} /**@name Methods related to whether duplicate-index checking is performed. If the checking for duplicate indices is turned off, then some CoinPackedVector methods may not work correctly if there are duplicate indices. Turning off the checking for duplicate indices may result in better run time performance. */ //@{ /** \brief Set to the argument value whether to test for duplicate indices in the vector whenever they can occur. Calling this method with \p test set to true will trigger an immediate check for duplicate indices. */ void setTestForDuplicateIndex(bool test) const; /** \brief Set to the argument value whether to test for duplicate indices in the vector whenever they can occur BUT we know that right now the vector has no duplicate indices. Calling this method with \p test set to true will not trigger an immediate check for duplicate indices; instead, it's assumed that the result of the test will be true. */ void setTestForDuplicateIndexWhenTrue(bool test) const; /** Returns true if the vector should be tested for duplicate indices when they can occur. */ bool testForDuplicateIndex() const { return testForDuplicateIndex_; } /// Just sets test stuff false without a try etc inline void setTestsOff() const { testForDuplicateIndex_=false; testedDuplicateIndex_=false;} //@} /**@name Methods for getting info on the packed vector as a full vector */ //@{ /** Get the vector as a dense vector. The argument specifies how long this dense vector is.
NOTE: The user needs to delete[] this pointer after it's not needed anymore. */ double * denseVector(int denseSize) const; /** Access the i'th element of the full storage vector. If the i'th is not stored, then zero is returned. The initial use of this method has some computational and storage overhead associated with it.
NOTE: This is very expensive. It is probably much better to use denseVector(). */ double operator[](int i) const; //@} /**@name Index methods */ //@{ /// Get value of maximum index int getMaxIndex() const; /// Get value of minimum index int getMinIndex() const; /// Throw an exception if there are duplicate indices void duplicateIndex(const char* methodName = NULL, const char * className = NULL) const; /** Return true if the i'th element of the full storage vector exists in the packed storage vector.*/ bool isExistingIndex(int i) const; /** Return the position of the i'th element of the full storage vector. If index does not exist then -1 is returned */ int findIndex(int i) const; //@} /**@name Comparison operators on two packed vectors */ //@{ /** Equal. Returns true if vectors have same length and corresponding element of each vector is equal. */ bool operator==(const CoinPackedVectorBase & rhs) const; /// Not equal bool operator!=(const CoinPackedVectorBase & rhs) const; #if 0 // LL: This should be implemented eventually. It is useful to have. /** Lexicographic comparisons of two packed vectors. Returns negative/0/positive depending on whether \c this is smaller/equal.greater than \c rhs */ int lexCompare(const CoinPackedVectorBase& rhs); #endif /** This method establishes an ordering on packed vectors. It is complete ordering, but not the same as lexicographic ordering. However, it is quick and dirty to compute and thus it is useful to keep packed vectors in a heap when all we care is to quickly check whether a particular vector is already in the heap or not. Returns negative/0/positive depending on whether \c this is smaller/equal.greater than \c rhs. */ int compare(const CoinPackedVectorBase& rhs) const; /** equivalent - If shallow packed vector A & B are equivalent, then they are still equivalent no matter how they are sorted. In this method the FloatEqual function operator can be specified. The default equivalence test is that the entries are relatively equal.
NOTE: This is a relatively expensive method as it sorts the two shallow packed vectors. */ template bool isEquivalent(const CoinPackedVectorBase& rhs, const FloatEqual& eq) const { if (getNumElements() != rhs.getNumElements()) return false; duplicateIndex("equivalent", "CoinPackedVector"); rhs.duplicateIndex("equivalent", "CoinPackedVector"); std::map mv; const int * inds = getIndices(); const double * elems = getElements(); int i; for ( i = getNumElements() - 1; i >= 0; --i) { mv.insert(std::make_pair(inds[i], elems[i])); } std::map mvRhs; inds = rhs.getIndices(); elems = rhs.getElements(); for ( i = getNumElements() - 1; i >= 0; --i) { mvRhs.insert(std::make_pair(inds[i], elems[i])); } std::map::const_iterator mvI = mv.begin(); std::map::const_iterator mvIlast = mv.end(); std::map::const_iterator mvIrhs = mvRhs.begin(); while (mvI != mvIlast) { if (mvI->first != mvIrhs->first || ! eq(mvI->second, mvIrhs->second)) return false; ++mvI; ++mvIrhs; } return true; } bool isEquivalent(const CoinPackedVectorBase& rhs) const; //@} /**@name Arithmetic operators. */ //@{ /// Create the dot product with a full vector double dotProduct(const double* dense) const; /// Return the 1-norm of the vector double oneNorm() const; /// Return the square of the 2-norm of the vector double normSquare() const; /// Return the 2-norm of the vector double twoNorm() const; /// Return the infinity-norm of the vector double infNorm() const; /// Sum elements of vector. double sum() const; //@} protected: /**@name Constructors, destructor NOTE: All constructors are protected. There's no need to expose them, after all, this is an abstract class. */ //@{ /** Default constructor. */ CoinPackedVectorBase(); public: /** Destructor */ virtual ~CoinPackedVectorBase(); //@} private: /**@name Disabled methods */ //@{ /** The copy constructor.
This must be at least protected, but we make it private. The reason is that when, say, a shallow packed vector is created, first the underlying class, it this one is constructed. However, at that point we don't know how much of the data members of this class we need to copy over. Therefore the copy constructor is not used. */ CoinPackedVectorBase(const CoinPackedVectorBase&); /** This class provides const access to packed vectors, so there's no need to provide an assignment operator. */ CoinPackedVectorBase& operator=(const CoinPackedVectorBase&); //@} protected: /**@name Protected methods */ //@{ /// Find Maximum and Minimum Indices void findMaxMinIndices() const; /// Return indexSetPtr_ (create it if necessary). std::set * indexSet(const char* methodName = NULL, const char * className = NULL) const; /// Delete the indexSet void clearIndexSet() const; void clearBase() const; void copyMaxMinIndex(const CoinPackedVectorBase & x) const { maxIndex_ = x.maxIndex_; minIndex_ = x.minIndex_; } //@} private: /**@name Protected member data */ //@{ /// Contains max index value or -infinity mutable int maxIndex_; /// Contains minimum index value or infinity mutable int minIndex_; /** Store the indices in a set. This set is only created if it is needed. Its primary use is testing for duplicate indices. */ mutable std::set * indexSetPtr_; /** True if the vector should be tested for duplicate indices when they can occur. */ mutable bool testForDuplicateIndex_; /** True if the vector has already been tested for duplicate indices. Most of the operations in CoinPackedVector preserves this flag. */ mutable bool testedDuplicateIndex_; //@} }; #endif CoinUtils-2.9.10/CoinUtils/src/CoinOslFactorization.hpp0000644000076600007660000002036011552534611021512 0ustar coincoin/* $Id: CoinOslFactorization.hpp 1416 2011-04-17 09:57:29Z stefan $ */ // Copyright (C) 1987, 2009, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). /* Authors John Forrest */ #ifndef CoinOslFactorization_H #define CoinOslFactorization_H #include #include #include #include "CoinTypes.hpp" #include "CoinIndexedVector.hpp" #include "CoinDenseFactorization.hpp" class CoinPackedMatrix; /** This deals with Factorization and Updates This is ripped off from OSL!!!!!!!!! I am assuming that 32 bits is enough for number of rows or columns, but CoinBigIndex may be redefined to get 64 bits. */ typedef struct {int suc, pre;} EKKHlink; typedef struct _EKKfactinfo { double drtpiv; double demark; double zpivlu; double zeroTolerance; double areaFactor; int *xrsadr; int *xcsadr; int *xrnadr; int *xcnadr; int *krpadr; int *kcpadr; int *mpermu; int *bitArray; int * back; char * nonzero; double * trueStart; mutable double *kadrpm; int *R_etas_index; int *R_etas_start; double *R_etas_element; int *xecadr; int *xeradr; double *xeeadr; double *xe2adr; EKKHlink * kp1adr; EKKHlink * kp2adr; double * kw1adr; double * kw2adr; double * kw3adr; int * hpivcoR; int nrow; int nrowmx; int firstDoRow; int firstLRow; int maxinv; int nnetas; int iterin; int iter0; int invok; int nbfinv; int num_resets; int nnentl; int nnentu; #ifdef CLP_REUSE_ETAS int save_nnentu; #endif int ndenuc; int npivots; /* use as xpivsq in factorization */ int kmxeta; int xnetal; int first_dense; int last_dense; int iterno; int numberSlacks; int lastSlack; int firstNonSlack; int xnetalval; int lstart; int if_sparse_update; mutable int packedMode; int switch_off_sparse_update; int nuspike; bool rows_ok; /* replaces test using mrstrt[1] */ #ifdef CLP_REUSE_ETAS mutable int reintro; #endif int nR_etas; int sortedEta; /* if vector for F-T is sorted */ int lastEtaCount; int ifvsol; int eta_size; int last_eta_size; int maxNNetas; } EKKfactinfo; class CoinOslFactorization : public CoinOtherFactorization { friend void CoinOslFactorizationUnitTest( const std::string & mpsDir ); public: /**@name Constructors and destructor and copy */ //@{ /// Default constructor CoinOslFactorization ( ); /// Copy constructor CoinOslFactorization ( const CoinOslFactorization &other); /// Destructor virtual ~CoinOslFactorization ( ); /// = copy CoinOslFactorization & operator = ( const CoinOslFactorization & other ); /// Clone virtual CoinOtherFactorization * clone() const ; //@} /**@name Do factorization - public */ //@{ /// Gets space for a factorization virtual void getAreas ( int numberRows, int numberColumns, CoinBigIndex maximumL, CoinBigIndex maximumU ); /// PreProcesses column ordered copy of basis virtual void preProcess ( ); /** Does most of factorization returning status 0 - OK -99 - needs more memory -1 - singular - use numberGoodColumns and redo */ virtual int factor ( ); /// Does post processing on valid factorization - putting variables on correct rows virtual void postProcess(const int * sequence, int * pivotVariable); /// Makes a non-singular basis by replacing variables virtual void makeNonSingular(int * sequence, int numberColumns); /** When part of LP - given by basic variables. Actually does factorization. Arrays passed in have non negative value to say basic. If status is okay, basic variables have pivot row - this is only needed If status is singular, then basic variables have pivot row and ones thrown out have -1 returns 0 -okay, -1 singular, -2 too many in basis, -99 memory */ int factorize ( const CoinPackedMatrix & matrix, int rowIsBasic[], int columnIsBasic[] , double areaFactor = 0.0 ); //@} /**@name general stuff such as number of elements */ //@{ /// Total number of elements in factorization virtual inline int numberElements ( ) const { return numberRows_*(numberColumns_+numberPivots_); } /// Returns array to put basis elements in virtual CoinFactorizationDouble * elements() const; /// Returns pivot row virtual int * pivotRow() const; /// Returns work area virtual CoinFactorizationDouble * workArea() const; /// Returns int work area virtual int * intWorkArea() const; /// Number of entries in each row virtual int * numberInRow() const; /// Number of entries in each column virtual int * numberInColumn() const; /// Returns array to put basis starts in virtual CoinBigIndex * starts() const; /// Returns permute back virtual int * permuteBack() const; /// Returns true if wants tableauColumn in replaceColumn virtual bool wantsTableauColumn() const; /** Useful information for factorization 0 - iteration number whereFrom is 0 for factorize and 1 for replaceColumn */ virtual void setUsefulInformation(const int * info,int whereFrom); /// Set maximum pivots virtual void maximumPivots ( int value ); /// Returns maximum absolute value in factorization double maximumCoefficient() const; /// Condition number - product of pivots after factorization double conditionNumber() const; /// Get rid of all memory virtual void clearArrays(); //@} /**@name rank one updates which do exist */ //@{ /** Replaces one Column to basis, returns 0=OK, 1=Probably OK, 2=singular, 3=no room If checkBeforeModifying is true will do all accuracy checks before modifying factorization. Whether to set this depends on speed considerations. You could just do this on first iteration after factorization and thereafter re-factorize partial update already in U */ virtual int replaceColumn ( CoinIndexedVector * regionSparse, int pivotRow, double pivotCheck , bool checkBeforeModifying=false, double acceptablePivot=1.0e-8); //@} /**@name various uses of factorization (return code number elements) which user may want to know about */ //@{ /** Updates one column (FTRAN) from regionSparse2 Tries to do FT update number returned is negative if no room regionSparse starts as zero and is zero at end. Note - if regionSparse2 packed on input - will be packed on output */ virtual int updateColumnFT ( CoinIndexedVector * regionSparse, CoinIndexedVector * regionSparse2, bool noPermute=false); /** This version has same effect as above with FTUpdate==false so number returned is always >=0 */ virtual int updateColumn ( CoinIndexedVector * regionSparse, CoinIndexedVector * regionSparse2, bool noPermute=false) const; /// does FTRAN on two columns virtual int updateTwoColumnsFT(CoinIndexedVector * regionSparse1, CoinIndexedVector * regionSparse2, CoinIndexedVector * regionSparse3, bool noPermute=false); /** Updates one column (BTRAN) from regionSparse2 regionSparse starts as zero and is zero at end Note - if regionSparse2 packed on input - will be packed on output */ virtual int updateColumnTranspose ( CoinIndexedVector * regionSparse, CoinIndexedVector * regionSparse2) const; //@} /// *** Below this user may not want to know about /**@name various uses of factorization which user may not want to know about (left over from my LP code) */ //@{ /// Get rid of all memory //inline void clearArrays() //{ gutsOfDestructor();} /// Returns array to put basis indices in virtual int * indices() const; /// Returns permute in virtual inline int * permute() const { return NULL;/*pivotRow_*/;} //@} /// The real work of desstructor void gutsOfDestructor(bool clearFact=true); /// The real work of constructor void gutsOfInitialize(bool zapFact=true); /// The real work of copy void gutsOfCopy(const CoinOslFactorization &other); //@} protected: /** Returns accuracy status of replaceColumn returns 0=OK, 1=Probably OK, 2=singular */ int checkPivot(double saveFromU, double oldPivot) const; ////////////////// data ////////////////// protected: /**@name data */ //@{ /// Osl factorization data EKKfactinfo factInfo_; //@} }; #endif CoinUtils-2.9.10/CoinUtils/src/Coin_C_defines.h0000644000076600007660000000622011556573673017714 0ustar coincoin/* $Id: Coin_C_defines.h 1419 2011-04-29 17:39:07Z stefan $ */ /* Copyright (C) 2002, 2003 International Business Machines Corporation and others. All Rights Reserved. This code is licensed under the terms of the Eclipse Public License (EPL). */ #ifndef CoinCDefine_H #define CoinCDefine_H /** This has #defines etc for the "C" interface to Coin. If COIN_EXTERN_C defined then an extra extern C */ #if defined (CLP_EXTERN_C) #define COIN_EXTERN_C #define COIN_NO_SBB #define COIN_NO_CBC #endif #if defined (SBB_EXTERN_C) #define COIN_EXTERN_C #define COIN_NO_CLP #endif #if defined (CBC_EXTERN_C) #define COIN_EXTERN_C #define COIN_NO_CLP #endif /* We need to allow for Microsoft */ #ifndef COINLIBAPI #if defined(CBCCINTERFACEDLL_EXPORTS) || defined(CLPMSDLL) #if defined (COIN_EXTERN_C) # define COINLIBAPI __declspec(dllexport) #else # define COINLIBAPI __declspec(dllexport) #endif # define COINLINKAGE __stdcall # define COINLINKAGE_CB __cdecl #else #if defined (COIN_EXTERN_C) # define COINLIBAPI extern "C" #else # define COINLIBAPI #endif # define COINLINKAGE # define COINLINKAGE_CB #endif #endif /** User does not need to see structure of model but C++ code does */ #if defined (CLP_EXTERN_C) /* Real typedef for structure */ class CMessageHandler; typedef struct { ClpSimplex * model_; CMessageHandler * handler_; } Clp_Simplex; #else typedef void Clp_Simplex; #endif #ifndef COIN_NO_CLP /** typedef for user call back. The cvec are constructed so don't need to be const*/ typedef void (COINLINKAGE_CB *clp_callback) (Clp_Simplex * model,int msgno, int ndouble, const double * dvec, int nint, const int * ivec, int nchar, char ** cvec); #endif /** User does not need to see structure of model but C++ code does */ #if defined (SBB_EXTERN_C) /* Real typedef for structure */ class Sbb_MessageHandler; typedef struct { OsiClpSolverInterface * solver_; SbbModel * model_; Sbb_MessageHandler * handler_; char * information_; } Sbb_Model; #else typedef void Sbb_Model; #endif #if defined (CBC_EXTERN_C) /* Real typedef for structure */ class Cbc_MessageHandler; typedef struct { OsiClpSolverInterface * solver_; CbcModel * model_; Cbc_MessageHandler * handler_; char * information_; } Cbc_Model; #else typedef void Cbc_Model; #endif #ifndef COIN_NO_SBB /** typedef for user call back. The cvec are constructed so don't need to be const*/ typedef void (COINLINKAGE_CB *sbb_callback) (Sbb_Model * model,int msgno, int ndouble, const double * dvec, int nint, const int * ivec, int nchar, char ** cvec); typedef void (COINLINKAGE_CB *cbc_callback) (Cbc_Model * model,int msgno, int ndouble, const double * dvec, int nint, const int * ivec, int nchar, char ** cvec); #endif #if COIN_BIG_INDEX==0 typedef int CoinBigIndex; #elif COIN_BIG_INDEX==1 typedef long CoinBigIndex; #else typedef long long CoinBigIndex; #endif /* just in case used somewhere */ #undef COIN_NO_CLP #undef COIN_NO_SBB #undef COIN_NO_CBC #endif CoinUtils-2.9.10/CoinUtils/src/CoinWarmStartBasis.cpp0000644000076600007660000005713311670766534021145 0ustar coincoin/* $Id: CoinWarmStartBasis.cpp 1515 2011-12-10 23:38:04Z 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). #if defined(_MSC_VER) // Turn off compiler warning about long names # pragma warning(disable:4786) #endif #include "CoinUtilsConfig.h" #include #include "CoinWarmStartBasis.hpp" #include "CoinHelperFunctions.hpp" #include #include //############################################################################# void CoinWarmStartBasis::setSize(int ns, int na) { // Round all so arrays multiple of 4 int nintS = (ns+15) >> 4; int nintA = (na+15) >> 4; int size = nintS+nintA; if (size) { if (size>maxSize_) { delete[] structuralStatus_; maxSize_ = size+10; structuralStatus_ = new char[4*maxSize_]; } memset (structuralStatus_, 0, (4*nintS) * sizeof(char)); artificialStatus_ = structuralStatus_+4*nintS; memset (artificialStatus_, 0, (4*nintA) * sizeof(char)); } else { artificialStatus_ = NULL; } numArtificial_ = na; numStructural_ = ns; } void CoinWarmStartBasis::assignBasisStatus(int ns, int na, char*& sStat, char*& aStat) { // Round all so arrays multiple of 4 int nintS = (ns+15) >> 4; int nintA = (na+15) >> 4; int size = nintS+nintA; if (size) { if (size>maxSize_) { delete[] structuralStatus_; maxSize_ = size+10; structuralStatus_ = new char[4*maxSize_]; } CoinMemcpyN( sStat,(4*nintS), structuralStatus_); artificialStatus_ = structuralStatus_+4*nintS; CoinMemcpyN( aStat,(4*nintA), artificialStatus_); } else { artificialStatus_ = NULL; } numStructural_ = ns; numArtificial_ = na; delete [] sStat; delete [] aStat; sStat = NULL; aStat = NULL; } CoinWarmStartBasis::CoinWarmStartBasis(int ns, int na, const char* sStat, const char* aStat) : numStructural_(ns), numArtificial_(na), structuralStatus_(NULL), artificialStatus_(NULL) { // Round all so arrays multiple of 4 int nintS = ((ns+15) >> 4); int nintA = ((na+15) >> 4); maxSize_ = nintS+nintA; if (maxSize_ > 0) { structuralStatus_ = new char[4*maxSize_]; if (nintS>0) { structuralStatus_[4*nintS-3]=0; structuralStatus_[4*nintS-2]=0; structuralStatus_[4*nintS-1]=0; CoinMemcpyN( sStat,((ns+3)/4), structuralStatus_); } artificialStatus_ = structuralStatus_+4*nintS; if (nintA > 0) { artificialStatus_[4*nintA-3]=0; artificialStatus_[4*nintA-2]=0; artificialStatus_[4*nintA-1]=0; CoinMemcpyN( aStat,((na+3)/4), artificialStatus_); } } } CoinWarmStartBasis::CoinWarmStartBasis(const CoinWarmStartBasis& ws) : numStructural_(ws.numStructural_), numArtificial_(ws.numArtificial_), structuralStatus_(NULL), artificialStatus_(NULL) { // Round all so arrays multiple of 4 int nintS = (numStructural_+15) >> 4; int nintA = (numArtificial_+15) >> 4; maxSize_ = nintS+nintA; if (maxSize_ > 0) { structuralStatus_ = new char[4*maxSize_]; CoinMemcpyN( ws.structuralStatus_, (4*nintS), structuralStatus_); artificialStatus_ = structuralStatus_+4*nintS; CoinMemcpyN( ws.artificialStatus_, (4*nintA), artificialStatus_); } } CoinWarmStartBasis& CoinWarmStartBasis::operator=(const CoinWarmStartBasis& rhs) { if (this != &rhs) { numStructural_=rhs.numStructural_; numArtificial_=rhs.numArtificial_; // Round all so arrays multiple of 4 int nintS = (numStructural_+15) >> 4; int nintA = (numArtificial_+15) >> 4; int size = nintS+nintA; if (size>maxSize_) { delete[] structuralStatus_; maxSize_ = size+10; structuralStatus_ = new char[4*maxSize_]; } if (size > 0) { CoinMemcpyN( rhs.structuralStatus_, (4*nintS), structuralStatus_); artificialStatus_ = structuralStatus_+4*nintS; CoinMemcpyN( rhs.artificialStatus_, (4*nintA), artificialStatus_); } else { artificialStatus_ = NULL; } } return *this; } // Resizes void CoinWarmStartBasis::resize (int newNumberRows, int newNumberColumns) { int i , nCharNewS, nCharOldS, nCharNewA, nCharOldA; if (newNumberRows!=numArtificial_||newNumberColumns!=numStructural_) { nCharOldS = 4*((numStructural_+15)>>4); int nIntS = (newNumberColumns+15)>>4; nCharNewS = 4*nIntS; nCharOldA = 4*((numArtificial_+15)>>4); int nIntA = (newNumberRows+15)>>4; nCharNewA = 4*nIntA; int size = nIntS+nIntA; // Do slowly if number of columns increases or need new array if (newNumberColumns>numStructural_|| size>maxSize_) { if (size>maxSize_) maxSize_ = size+10; char * array = new char[4*maxSize_]; // zap all for clarity and zerofault etc memset(array,0,4*maxSize_*sizeof(char)); CoinMemcpyN(structuralStatus_,(nCharOldS>nCharNewS)?nCharNewS:nCharOldS,array); CoinMemcpyN(artificialStatus_, (nCharOldA>nCharNewA)?nCharNewA:nCharOldA, array+nCharNewS); delete [] structuralStatus_; structuralStatus_ = array; artificialStatus_ = array+nCharNewS; for (i=numStructural_;inCharNewA)?nCharNewA:nCharOldA); artificialStatus_ = structuralStatus_+4*nIntS; } for (i=numArtificial_;i= 0 && tgts[t] >= numArtificial_ ; t--) ; // temporary trap to make sure that scan from top is correct choice. // if ((t+1) < tgtCnt/2) // { printf("CWSB: tgtCnt %d, t %d; BAD CASE",tgtCnt,t+1) ; } if (t < 0) return ; tgtCnt = t+1 ; Status stati ; # ifdef COIN_DEBUG /* If we're debugging, scan to see if we're deleting nonbasic artificials. (In other words, are we deleting tight constraints?) Easiest to just do this up front as opposed to integrating it with the loops below. */ int nbCnt = 0 ; for (t = 0 ; t < tgtCnt ; t++) { i = tgts[t] ; stati = getStatus(artificialStatus_,i) ; if (stati != CoinWarmStartBasis::basic) { nbCnt++ ; } } if (nbCnt > 0) { std::cout << nbCnt << " nonbasic artificials deleted." << std::endl ; } # endif /* Preserve all entries before the first target. Skip across consecutive target indices to establish the start of the first block to be retained. */ keep = tgts[0] ; for (t = 0 ; t < tgtCnt-1 && tgts[t]+1 == tgts[t+1] ; t++) ; blkStart = tgts[t]+1 ; /* Outer loop works through the indices to be deleted. Inner loop copies runs of indices to keep. */ while (t < tgtCnt-1) { blkEnd = tgts[t+1]-1 ; for (i = blkStart ; i <= blkEnd ; i++) { stati = getStatus(artificialStatus_,i) ; setStatus(artificialStatus_,keep++,stati) ; } for (t++ ; t < tgtCnt-1 && tgts[t]+1 == tgts[t+1] ; t++) ; blkStart = tgts[t]+1 ; } /* Finish off by copying from last deleted index to end of status array. */ for (i = blkStart ; i < numArtificial_ ; i++) { stati = getStatus(artificialStatus_,i) ; setStatus(artificialStatus_,keep++,stati) ; } numArtificial_ -= tgtCnt ; return ; } /* deleteRows takes an unordered list of target indices with duplicates and removes them from the basis. The strategy is to preprocesses the list into an ascending list without duplicates, suitable for compressRows. */ void CoinWarmStartBasis::deleteRows (int rawTgtCnt, const int *rawTgts) { if (rawTgtCnt <= 0) return ; int i; int last=-1; bool ordered=true; for (i=0;ilast) { last=iRow; } else { ordered=false; break; } } if (ordered) { compressRows(rawTgtCnt,rawTgts) ; } else { int * tgts = new int[rawTgtCnt] ; CoinMemcpyN(rawTgts,rawTgtCnt,tgts); int *first = &tgts[0] ; int *last = &tgts[rawTgtCnt] ; int *endUnique ; std::sort(first,last) ; endUnique = std::unique(first,last) ; int tgtCnt = static_cast(endUnique-first) ; compressRows(tgtCnt,tgts) ; delete [] tgts ; } return ; } // Deletes columns void CoinWarmStartBasis::deleteColumns(int number, const int * which) { int i ; char * deleted = new char[numStructural_]; int numberDeleted=0; memset(deleted,0,numStructural_*sizeof(char)); for (i=0;i=0&&j>4); int nCharNewA = 4*((numArtificial_+15)>>4); char * array = new char[4*maxSize_]; # ifdef ZEROFAULT memset(array,0,(4*maxSize_*sizeof(char))) ; # endif CoinMemcpyN(artificialStatus_,nCharNewA,array+nCharNewS); int put=0; # ifdef COIN_DEBUG int numberBasic=0; # endif for (i=0;igetNumStructural() ; int srcRows = src->getNumArtificial() ; /* Merge the structural variable status. */ if (srcCols > 0 && xferCols != NULL) { XferVec::const_iterator xferSpec = xferCols->begin() ; XferVec::const_iterator xferEnd = xferCols->end() ; for ( ; xferSpec != xferEnd ; xferSpec++) { int srcNdx = (*xferSpec).first ; int tgtNdx = (*xferSpec).second ; int runLen = (*xferSpec).third ; assert(srcNdx >= 0 && srcNdx+runLen <= srcCols) ; assert(tgtNdx >= 0 && tgtNdx+runLen <= getNumStructural()) ; for (int i = 0 ; i < runLen ; i++) { CoinWarmStartBasis::Status stat = src->getStructStatus(srcNdx+i) ; setStructStatus(tgtNdx+i,stat) ; } } } /* Merge the row (artificial variable) status. */ if (srcRows > 0 && xferRows != NULL) { XferVec::const_iterator xferSpec = xferRows->begin() ; XferVec::const_iterator xferEnd = xferRows->end() ; for ( ; xferSpec != xferEnd ; xferSpec++) { int srcNdx = (*xferSpec).first ; int tgtNdx = (*xferSpec).second ; int runLen = (*xferSpec).third ; assert(srcNdx >= 0 && srcNdx+runLen <= srcRows) ; assert(tgtNdx >= 0 && tgtNdx+runLen <= getNumArtificial()) ; for (int i = 0 ; i < runLen ; i++) { CoinWarmStartBasis::Status stat = src->getArtifStatus(srcNdx+i) ; setArtifStatus(tgtNdx+i,stat) ; } } } return ; } // Prints in readable format (for debug) void CoinWarmStartBasis::print() const { int i ; int numberBasic=0; for (i=0;inumArtificial_) { for (i=0;i(oldCWS) ; #ifndef NDEBUG if (!oldBasis) { throw CoinError("Old basis not derived from CoinWarmStartBasis.", "generateDiff","CoinWarmStartBasis") ; } #endif const CoinWarmStartBasis *newBasis = this ; /* Make sure newBasis is equal or bigger than oldBasis. Calculate the worst case number of diffs and allocate vectors to hold them. */ const int oldArtifCnt = oldBasis->getNumArtificial() ; const int oldStructCnt = oldBasis->getNumStructural() ; const int newArtifCnt = newBasis->getNumArtificial() ; const int newStructCnt = newBasis->getNumStructural() ; assert(newArtifCnt >= oldArtifCnt) ; assert(newStructCnt >= oldStructCnt) ; int sizeOldArtif = (oldArtifCnt+15)>>4 ; int sizeNewArtif = (newArtifCnt+15)>>4 ; int sizeOldStruct = (oldStructCnt+15)>>4 ; int sizeNewStruct = (newStructCnt+15)>>4 ; int maxBasisLength = sizeNewArtif+sizeNewStruct ; unsigned int *diffNdx = new unsigned int [2*maxBasisLength]; unsigned int *diffVal = diffNdx + maxBasisLength; /* Ok, setup's over. Now scan the logicals (aka artificials, standing in for constraints). For the portion of the status arrays which overlap, create diffs. Then add any additional status from newBasis. I removed the following bit of code & comment: if (sizeNew == sizeOld) sizeOld--; // make sure all taken I assume this is meant to trap cases where oldBasis does not occupy all of the final int, but I can't see where it's necessary. */ const unsigned int *oldStatus = reinterpret_cast(oldBasis->getArtificialStatus()) ; const unsigned int *newStatus = reinterpret_cast(newBasis->getArtificialStatus()) ; int numberChanged = 0 ; int i ; for (i = 0 ; i < sizeOldArtif ; i++) { if (oldStatus[i] != newStatus[i]) { diffNdx[numberChanged] = i|0x80000000 ; diffVal[numberChanged++] = newStatus[i] ; } } for ( ; i < sizeNewArtif ; i++) { diffNdx[numberChanged] = i|0x80000000 ; diffVal[numberChanged++] = newStatus[i] ; } /* Repeat for structural variables. */ oldStatus = reinterpret_cast(oldBasis->getStructuralStatus()) ; newStatus = reinterpret_cast(newBasis->getStructuralStatus()) ; for (i = 0 ; i < sizeOldStruct ; i++) { if (oldStatus[i] != newStatus[i]) { diffNdx[numberChanged] = i ; diffVal[numberChanged++] = newStatus[i] ; } } for ( ; i < sizeNewStruct ; i++) { diffNdx[numberChanged] = i ; diffVal[numberChanged++] = newStatus[i] ; } /* Create the object of our desire. */ CoinWarmStartBasisDiff *diff; if ((numberChanged*2(diff)) ; } /* Apply a diff to the basis pointed to by this. It's assumed that the allocated capacity of the basis is sufficiently large. */ void CoinWarmStartBasis::applyDiff (const CoinWarmStartDiff *const cwsdDiff) { /* Make sure we have a CoinWarmStartBasisDiff */ const CoinWarmStartBasisDiff *diff = dynamic_cast(cwsdDiff) ; #ifndef NDEBUG if (!diff) { throw CoinError("Diff not derived from CoinWarmStartBasisDiff.", "applyDiff","CoinWarmStartBasis") ; } #endif /* Application is by straighforward replacement of words in the status arrays. Index entries for logicals (aka artificials) are tagged with 0x80000000. */ const int numberChanges = diff->sze_ ; unsigned int *structStatus = reinterpret_cast(this->getStructuralStatus()) ; unsigned int *artifStatus = reinterpret_cast(this->getArtificialStatus()) ; if (numberChanges>=0) { const unsigned int *diffNdxs = diff->difference_ ; const unsigned int *diffVals = diffNdxs+numberChanges ; for (int i = 0 ; i < numberChanges ; i++) { unsigned int diffNdx = diffNdxs[i] ; unsigned int diffVal = diffVals[i] ; if ((diffNdx&0x80000000) == 0) { structStatus[diffNdx] = diffVal ; } else { artifStatus[diffNdx&0x7fffffff] = diffVal ; } } } else { // just replace const unsigned int * diffA = diff->difference_ -1; const int artifCnt = static_cast (diffA[0]); const int structCnt = -numberChanges; int sizeArtif = (artifCnt+15)>>4 ; int sizeStruct = (structCnt+15)>>4 ; CoinMemcpyN(diffA+1,sizeStruct,structStatus); CoinMemcpyN(diffA+1+sizeStruct,sizeArtif,artifStatus); } return ; } const char *statusName (CoinWarmStartBasis::Status status) { switch (status) { case CoinWarmStartBasis::isFree: { return ("NBFR") ; } case CoinWarmStartBasis::basic: { return ("B") ; } case CoinWarmStartBasis::atUpperBound: { return ("NBUB") ; } case CoinWarmStartBasis::atLowerBound: { return ("NBLB") ; } default: { return ("INVALID!") ; } } } /* Routines for CoinWarmStartBasisDiff */ /* Constructor given diff data. */ CoinWarmStartBasisDiff::CoinWarmStartBasisDiff (int sze, const unsigned int *const diffNdxs, const unsigned int *const diffVals) : sze_(sze), difference_(NULL) { if (sze > 0) { difference_ = new unsigned int[2*sze] ; CoinMemcpyN(diffNdxs,sze,difference_); CoinMemcpyN(diffVals,sze,difference_+sze_); } return ; } /* Constructor when full is smaller than diff! */ CoinWarmStartBasisDiff::CoinWarmStartBasisDiff (const CoinWarmStartBasis * rhs) : sze_(0), difference_(0) { const int artifCnt = rhs->getNumArtificial() ; const int structCnt = rhs->getNumStructural() ; int sizeArtif = (artifCnt+15)>>4 ; int sizeStruct = (structCnt+15)>>4 ; int maxBasisLength = sizeArtif+sizeStruct ; assert (maxBasisLength&&structCnt); sze_ = - structCnt; difference_ = new unsigned int [maxBasisLength+1]; difference_[0]=artifCnt; difference_++; CoinMemcpyN(reinterpret_cast (rhs->getStructuralStatus()),sizeStruct, difference_); CoinMemcpyN(reinterpret_cast (rhs->getArtificialStatus()),sizeArtif, difference_+sizeStruct); } /* Copy constructor. */ CoinWarmStartBasisDiff::CoinWarmStartBasisDiff (const CoinWarmStartBasisDiff &rhs) : sze_(rhs.sze_), difference_(0) { if (sze_ >0) { difference_ = CoinCopyOfArray(rhs.difference_,2*sze_); } else if (sze_<0) { const unsigned int * diff = rhs.difference_ -1; const int artifCnt = static_cast (diff[0]); const int structCnt = -sze_; int sizeArtif = (artifCnt+15)>>4 ; int sizeStruct = (structCnt+15)>>4 ; int maxBasisLength = sizeArtif+sizeStruct ; difference_ = CoinCopyOfArray(diff,maxBasisLength+1); difference_++; } return ; } /* Assignment --- for convenience when assigning objects containing CoinWarmStartBasisDiff objects. */ CoinWarmStartBasisDiff& CoinWarmStartBasisDiff::operator= (const CoinWarmStartBasisDiff &rhs) { if (this != &rhs) { if (sze_>0 ) { delete[] difference_ ; } else if (sze_<0) { unsigned int * diff = difference_ -1; delete [] diff; } sze_ = rhs.sze_ ; if (sze_ > 0) { difference_ = CoinCopyOfArray(rhs.difference_,2*sze_); } else if (sze_<0) { const unsigned int * diff = rhs.difference_ -1; const int artifCnt = static_cast (diff[0]); const int structCnt = -sze_; int sizeArtif = (artifCnt+15)>>4 ; int sizeStruct = (structCnt+15)>>4 ; int maxBasisLength = sizeArtif+sizeStruct ; difference_ = CoinCopyOfArray(diff,maxBasisLength+1); difference_++; } else { difference_ = 0 ; } } return (*this) ; } /*brief Destructor */ CoinWarmStartBasisDiff::~CoinWarmStartBasisDiff() { if (sze_>0 ) { delete[] difference_ ; } else if (sze_<0) { unsigned int * diff = difference_ -1; delete [] diff; } } CoinUtils-2.9.10/CoinUtils/src/CoinPackedMatrix.cpp0000644000076600007660000033232312130014662020564 0ustar coincoin/* $Id: CoinPackedMatrix.cpp 1581 2013-04-06 12:48:50Z stefan $ */ // 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 "CoinUtilsConfig.h" #include #include #include #include #include #include #include "CoinPragma.hpp" #include "CoinSort.hpp" #include "CoinHelperFunctions.hpp" #ifndef CLP_NO_VECTOR #include "CoinPackedVectorBase.hpp" #endif #include "CoinFloatEqual.hpp" #include "CoinPackedMatrix.hpp" #if !defined(COIN_COINUTILS_CHECKLEVEL) #define COIN_COINUTILS_CHECKLEVEL 0 #endif //############################################################################# // T must be an integral type (int, CoinBigIndex, etc.) template static inline T CoinLengthWithExtra(T len, double extraGap) { return static_cast(ceil(len * (1 + extraGap))); } //############################################################################# static inline void CoinTestSortedIndexSet(const int num, const int * sorted, const int maxEntry, const char * testingMethod) { if (sorted[0] < 0 || sorted[num-1] >= maxEntry) throw CoinError("bad index", testingMethod, "CoinPackedMatrix"); if (std::adjacent_find(sorted, sorted + num) != sorted + num) throw CoinError("duplicate index", testingMethod, "CoinPackedMatrix"); } //----------------------------------------------------------------------------- static inline int * CoinTestIndexSet(const int numDel, const int * indDel, const int maxEntry, const char * testingMethod) { if (! CoinIsSorted(indDel, indDel + numDel)) { // if not sorted then sort it, test for consistency and return a pointer // to the sorted array int * sorted = new int[numDel]; CoinMemcpyN(indDel, numDel, sorted); std::sort(sorted, sorted + numDel); CoinTestSortedIndexSet(numDel, sorted, maxEntry, testingMethod); return sorted; } // Otherwise it's already sorted, so just test for consistency and return a // 0 pointer. CoinTestSortedIndexSet(numDel, indDel, maxEntry, testingMethod); return 0; } //############################################################################# void CoinPackedMatrix::reserve(const int newMaxMajorDim, const CoinBigIndex newMaxSize, bool create) { if (newMaxMajorDim > maxMajorDim_) { maxMajorDim_ = newMaxMajorDim; int * oldlength = length_; CoinBigIndex * oldstart = start_; length_ = new int[newMaxMajorDim]; start_ = new CoinBigIndex[newMaxMajorDim+1]; start_[0]=0; if (majorDim_ > 0) { CoinMemcpyN(oldlength, majorDim_, length_); CoinMemcpyN(oldstart, majorDim_ + 1, start_); } if (create) { // create empty vectors CoinFillN(length_+majorDim_,maxMajorDim_-majorDim_,0); CoinFillN(start_+majorDim_+1,maxMajorDim_-majorDim_,0); majorDim_=maxMajorDim_; } delete[] oldlength; delete[] oldstart; } if (newMaxSize > maxSize_) { maxSize_ = newMaxSize; int * oldind = index_; double * oldelem = element_; index_ = new int[newMaxSize]; element_ = new double[newMaxSize]; for (int i = majorDim_ - 1; i >= 0; --i) { CoinMemcpyN(oldind+start_[i], length_[i], index_+start_[i]); CoinMemcpyN(oldelem+start_[i], length_[i], element_+start_[i]); } delete[] oldind; delete[] oldelem; } } //----------------------------------------------------------------------------- void CoinPackedMatrix::clear() { majorDim_ = 0; minorDim_ = 0; size_ = 0; } //############################################################################# //############################################################################# void CoinPackedMatrix::setDimensions(int newnumrows, int newnumcols) { const int numrows = getNumRows(); if (newnumrows < 0) newnumrows = numrows; if (newnumrows < numrows) throw CoinError("Bad new rownum (less than current)", "setDimensions", "CoinPackedMatrix"); const int numcols = getNumCols(); if (newnumcols < 0) newnumcols = numcols; if (newnumcols < numcols) throw CoinError("Bad new colnum (less than current)", "setDimensions", "CoinPackedMatrix"); int numplus = 0; if (isColOrdered()) { minorDim_ = newnumrows; numplus = newnumcols - numcols; } else { minorDim_ = newnumcols; numplus = newnumrows - numrows; } if (numplus > 0) { int* lengths = new int[numplus]; CoinZeroN(lengths, numplus); resizeForAddingMajorVectors(numplus, lengths); delete[] lengths; majorDim_ += numplus; //forgot to change majorDim_ } } //----------------------------------------------------------------------------- void CoinPackedMatrix::setExtraGap(const double newGap) { if (newGap < 0) throw CoinError("negative new extra gap", "setExtraGap", "CoinPackedMatrix"); extraGap_ = newGap; } //----------------------------------------------------------------------------- void CoinPackedMatrix::setExtraMajor(const double newMajor) { if (newMajor < 0) throw CoinError("negative new extra major", "setExtraMajor", "CoinPackedMatrix"); extraMajor_ = newMajor; } //############################################################################# #ifndef CLP_NO_VECTOR void CoinPackedMatrix::appendCol(const CoinPackedVectorBase& vec) { if (colOrdered_) appendMajorVector(vec); else appendMinorVector(vec); } #endif //----------------------------------------------------------------------------- void CoinPackedMatrix::appendCol(const int vecsize, const int *vecind, const double *vecelem) { if (colOrdered_) appendMajorVector(vecsize, vecind, vecelem); else appendMinorVector(vecsize, vecind, vecelem); } //----------------------------------------------------------------------------- #ifndef CLP_NO_VECTOR void CoinPackedMatrix::appendCols(const int numcols, const CoinPackedVectorBase * const * cols) { if (colOrdered_) appendMajorVectors(numcols, cols); else appendMinorVectors(numcols, cols); } #endif //----------------------------------------------------------------------------- int CoinPackedMatrix::appendCols(const int numcols, const CoinBigIndex * columnStarts, const int * row, const double * element, int numberRows) { int numberErrors; if (colOrdered_) { numberErrors=appendMajor(numcols, columnStarts, row, element, numberRows); } else { numberErrors=appendMinor(numcols, columnStarts, row, element, numberRows); } return numberErrors; } //----------------------------------------------------------------------------- #ifndef CLP_NO_VECTOR void CoinPackedMatrix::appendRow(const CoinPackedVectorBase& vec) { if (colOrdered_) appendMinorVector(vec); else appendMajorVector(vec); } #endif //----------------------------------------------------------------------------- void CoinPackedMatrix::appendRow(const int vecsize, const int *vecind, const double *vecelem) { if (colOrdered_) appendMinorVector(vecsize, vecind, vecelem); else appendMajorVector(vecsize, vecind, vecelem); } //----------------------------------------------------------------------------- #ifndef CLP_NO_VECTOR void CoinPackedMatrix::appendRows(const int numrows, const CoinPackedVectorBase * const * rows) { if (colOrdered_) { // make sure enough columns if (numrows == 0) return; int i; int maxDim=-1; for (i = numrows - 1; i >= 0; --i) { const int vecsize = rows[i]->getNumElements(); const int* vecind = rows[i]->getIndices(); for (int j = vecsize - 1; j >= 0; --j) maxDim = CoinMax(maxDim,vecind[j]); } maxDim++; if (maxDim>majorDim_) { setDimensions(minorDim_,maxDim); //int nAdd=maxDim-majorDim_; //int * length = new int[nAdd]; //memset(length,0,nAdd*sizeof(int)); //resizeForAddingMajorVectors(nAdd,length); //delete [] length; } appendMinorVectors(numrows, rows); } else { appendMajorVectors(numrows, rows); } } #endif //----------------------------------------------------------------------------- int CoinPackedMatrix::appendRows(const int numrows, const CoinBigIndex * rowStarts, const int * column, const double * element, int numberColumns) { int numberErrors; if (colOrdered_) { numberErrors=appendMinor(numrows, rowStarts, column, element, numberColumns); } else { numberErrors=appendMajor(numrows, rowStarts, column, element, numberColumns); } return numberErrors; } //############################################################################# void CoinPackedMatrix::rightAppendPackedMatrix(const CoinPackedMatrix& matrix) { if (colOrdered_) { if (matrix.colOrdered_) { majorAppendSameOrdered(matrix); } else { majorAppendOrthoOrdered(matrix); } } else { if (matrix.colOrdered_) { minorAppendOrthoOrdered(matrix); } else { minorAppendSameOrdered(matrix); } } } //----------------------------------------------------------------------------- void CoinPackedMatrix::bottomAppendPackedMatrix(const CoinPackedMatrix& matrix) { if (colOrdered_) { if (matrix.colOrdered_) { minorAppendSameOrdered(matrix); } else { minorAppendOrthoOrdered(matrix); } } else { if (matrix.colOrdered_) { majorAppendOrthoOrdered(matrix); } else { majorAppendSameOrdered(matrix); } } } //############################################################################# void CoinPackedMatrix::deleteCols(const int numDel, const int * indDel) { if (numDel) { if (colOrdered_) deleteMajorVectors(numDel, indDel); else deleteMinorVectors(numDel, indDel); } } //----------------------------------------------------------------------------- void CoinPackedMatrix::deleteRows(const int numDel, const int * indDel) { if (numDel) { if (colOrdered_) deleteMinorVectors(numDel, indDel); else deleteMajorVectors(numDel, indDel); } } //############################################################################# /* Replace the elements of a vector. The indices remain the same. At most the number specified will be replaced. The index is between 0 and major dimension of matrix */ void CoinPackedMatrix::replaceVector(const int index, const int numReplace, const double * newElements) { if (index >= 0 && index < majorDim_) { int length = (length_[index] < numReplace) ? length_[index] : numReplace; CoinMemcpyN(newElements, length, element_ + start_[index]); } else { #ifdef COIN_DEBUG throw CoinError("bad index", "replaceVector", "CoinPackedMatrix"); #endif } } /* Modify one element of packed matrix. An element may be added. If the new element is zero it will be deleted unless keepZero true */ void CoinPackedMatrix::modifyCoefficient(int row, int column, double newElement, bool keepZero) { int minorIndex,majorIndex; if (colOrdered_) { majorIndex=column; minorIndex=row; } else { minorIndex=column; majorIndex=row; } if (majorIndex >= 0 && majorIndex < majorDim_) { if (minorIndex >= 0 && minorIndex < minorDim_) { CoinBigIndex j; CoinBigIndex end=start_[majorIndex]+length_[majorIndex];; for (j=start_[majorIndex];j=start_[majorIndex+1]) { int * addedEntries = new int[majorDim_]; memset(addedEntries, 0, majorDim_ * sizeof(int)); addedEntries[majorIndex] = 1; resizeForAddingMinorVectors(addedEntries); delete[] addedEntries; } // So where to insert? We're just going to assume that the entries // in the major vector are in increasing order, so we'll insert the // new entry to the last place we can const CoinBigIndex start = start_[majorIndex]; end = start_[majorIndex]+length_[majorIndex]; // recalculate end for (j = end - 1; j >= start; --j) { if (index_[j] < minorIndex) break; index_[j+1] = index_[j]; element_[j+1] = element_[j]; } ++j; index_[j] = minorIndex; element_[j] = newElement; size_++; length_[majorIndex]++; } } else { #ifdef COIN_DEBUG throw CoinError("bad minor index", "modifyCoefficient", "CoinPackedMatrix"); #endif } } else { #ifdef COIN_DEBUG throw CoinError("bad major index", "modifyCoefficient", "CoinPackedMatrix"); #endif } } /* Return one element of packed matrix. This works for either ordering If it is not present will return 0.0 */ double CoinPackedMatrix::getCoefficient(int row, int column) const { int minorIndex,majorIndex; if (colOrdered_) { majorIndex=column; minorIndex=row; } else { minorIndex=column; majorIndex=row; } double value=0.0; if (majorIndex >= 0 && majorIndex < majorDim_) { if (minorIndex >= 0 && minorIndex < minorDim_) { CoinBigIndex j; CoinBigIndex end=start_[majorIndex]+length_[majorIndex];; for (j=start_[majorIndex];j=threshold) { element_[k]=element_[j]; index_[k++]=index_[j]; } else { eliminatedElement[kbad]=element_[j]; eliminatedIndex[kbad++]=index_[j]; } } if (kbad) { numberEliminated += kbad; length_[i] = k-start_[i]; memcpy(index_+k,eliminatedIndex,kbad*sizeof(int)); memcpy(element_+k,eliminatedElement,kbad*sizeof(double)); } } size_ -= numberEliminated; delete [] eliminatedIndex; delete [] eliminatedElement; return numberEliminated; } //############################################################################# /* Eliminate all elements in matrix whose absolute value is less than threshold.ALSO removes duplicates The column starts are not affected. Returns number of elements eliminated. */ int CoinPackedMatrix::eliminateDuplicates(double threshold) { CoinBigIndex numberEliminated =0; // space for eliminated int * mark = new int [minorDim_]; int i; for (i=0;i=threshold) { element_[k]=element_[j]; index_[k++]=index_[j]; } } numberEliminated += end-k; length_[i] = k-start_[i]; } size_ -= numberEliminated; delete [] mark; return numberEliminated; } //############################################################################# void CoinPackedMatrix::removeGaps(double removeValue) { if (removeValue<0.0) { if (size_size) break; } for (; i < majorDim_; ++i) { const CoinBigIndex si = start_[i]; const int li = length_[i]; start_[i] = size; for (CoinBigIndex j=si;jremoveValue) { index_[put]=index_[j]; element_[put++]=value; } } length_[i]=put-start_[i]; start_[i+1] = put; } size_ = put; } } //############################################################################# /* Really clean up matrix. a) eliminate all duplicate AND small elements in matrix b) remove all gaps and set extraGap_ and extraMajor_ to 0.0 c) reallocate arrays and make max lengths equal to lengths d) orders elements returns number of elements eliminated */ int CoinPackedMatrix::cleanMatrix(double threshold) { if (!majorDim_) { extraGap_=0.0; extraMajor_=0.0; return 0; } CoinBigIndex numberEliminated =0; // space for eliminated int * mark = new int [minorDim_]; int i; for (i=0;i=threshold) { element_[n]=element_[j]; index_[n++]=index_[j]; k++; } } numberEliminated += end-k; length_[i] = n-start_[i]; // sort CoinSort_2(index_+start_[i],index_+n,element_+start_[i]); } start_[majorDim_]=n; size_ -= numberEliminated; assert (n==size_); delete [] mark; extraGap_=0.0; extraMajor_=0.0; maxMajorDim_=majorDim_; maxSize_=size_; // Now reallocate - do smallest ones first int * temp = CoinCopyOfArray(length_,majorDim_); delete [] length_; length_ = temp; CoinBigIndex * temp2 = CoinCopyOfArray(start_,majorDim_+1); delete [] start_; start_ = temp2; temp = CoinCopyOfArray(index_,size_); delete [] index_; index_ = temp; double * temp3 = CoinCopyOfArray(element_,size_); delete [] element_; element_ = temp3; return numberEliminated; } //############################################################################# void CoinPackedMatrix::submatrixOf(const CoinPackedMatrix& matrix, const int numMajor, const int * indMajor) { int i; int* sortedIndPtr = CoinTestIndexSet(numMajor, indMajor, matrix.majorDim_, "submatrixOf"); const int * sortedInd = sortedIndPtr == 0 ? indMajor : sortedIndPtr; gutsOfDestructor(); // Count how many nonzeros there'll be CoinBigIndex nzcnt = 0; const int* length = matrix.getVectorLengths(); for (i = 0; i < numMajor; ++i) { nzcnt += length[sortedInd[i]]; } colOrdered_ = matrix.colOrdered_; maxMajorDim_ = int(numMajor * (1+extraMajor_) + 1); maxSize_ = static_cast (nzcnt * (1+extraMajor_) * (1+extraGap_) + 100); length_ = new int[maxMajorDim_]; start_ = new CoinBigIndex[maxMajorDim_+1]; start_[0]=0; index_ = new int[maxSize_]; element_ = new double[maxSize_]; majorDim_ = 0; minorDim_ = matrix.minorDim_; size_ = 0; #ifdef CLP_NO_VECTOR for (i = 0; i < numMajor; ++i) { int j = sortedInd[i]; CoinBigIndex start = matrix.start_[j]; appendMajorVector(matrix.length_[j],matrix.index_+start,matrix.element_+start); } #else for (i = 0; i < numMajor; ++i) { const CoinShallowPackedVector reqdBySunCC = matrix.getVector(sortedInd[i]) ; appendMajorVector(reqdBySunCC); } #endif delete[] sortedIndPtr; } //############################################################################# void CoinPackedMatrix::submatrixOfWithDuplicates(const CoinPackedMatrix& matrix, const int numMajor, const int * indMajor) { int i; // we allow duplicates - can be useful #ifndef NDEBUG for (i=0; i=matrix.majorDim_) throw CoinError("bad index", "submatrixOfWithDuplicates", "CoinPackedMatrix"); } #endif gutsOfDestructor(); // Get rid of gaps extraMajor_ = 0; extraGap_ = 0; colOrdered_ = matrix.colOrdered_; maxMajorDim_ = numMajor ; const int* length = matrix.getVectorLengths(); length_ = new int[maxMajorDim_]; start_ = new CoinBigIndex[maxMajorDim_+1]; // Count how many nonzeros there'll be CoinBigIndex nzcnt = 0; for (i = 0; i < maxMajorDim_; ++i) { start_[i]=nzcnt; int thisLength = length[indMajor[i]]; nzcnt += thisLength; length_[i]=thisLength; } start_[maxMajorDim_]=nzcnt; maxSize_ = nzcnt ; index_ = new int[maxSize_]; element_ = new double[maxSize_]; majorDim_ = maxMajorDim_; minorDim_ = matrix.minorDim_; size_ = 0; const CoinBigIndex * startOld = matrix.start_; const double * elementOld = matrix.element_; const int * indexOld = matrix.index_; for (i = 0; i < maxMajorDim_; ++i) { int j = indMajor[i]; CoinBigIndex start = startOld[j]; int thisLength = length_[i]; const double * element = elementOld+start; const int * index = indexOld+start; for (int j=0;j=rhs.majorDim_&&maxSize_>=rhs.size_) { majorDim_ = rhs.majorDim_; minorDim_ = rhs.minorDim_; size_ = rhs.size_; extraGap_ = rhs.extraGap_; extraMajor_ = rhs.extraMajor_; CoinMemcpyN(rhs.length_, majorDim_,length_); CoinMemcpyN(rhs.start_, majorDim_+1,start_); if (size_==start_[majorDim_]) { CoinMemcpyN(rhs.index_ , size_, index_); CoinMemcpyN(rhs.element_ , size_, element_); } else { // we can't just simply memcpy these content over, because that can // upset memory debuggers like purify if there were gaps and those gaps // were uninitialized memory blocks for (int i = majorDim_ - 1; i >= 0; --i) { CoinMemcpyN(rhs.index_ + start_[i], length_[i], index_ + start_[i]); CoinMemcpyN(rhs.element_ + start_[i], length_[i], element_ + start_[i]); } } } else { copyOf(rhs); } } //############################################################################# // This method is essentially the same as minorAppendOrthoOrdered(). However, // since we start from an empty matrix, lots of fluff can be avoided. void CoinPackedMatrix::reverseOrderedCopyOf(const CoinPackedMatrix& rhs) { if (this == &rhs) { reverseOrdering(); return; } int i; colOrdered_ = !rhs.colOrdered_; majorDim_ = rhs.minorDim_; minorDim_ = rhs.majorDim_; size_ = rhs.size_; if (size_ == 0) { // we still need to allocate starts and lengths maxMajorDim_=majorDim_; delete[] start_; delete[] length_; delete[] index_; delete[] element_; start_ = new CoinBigIndex[maxMajorDim_ + 1]; length_ = new int[maxMajorDim_]; for (i = 0; i < majorDim_; ++i) { start_[i] = 0; length_[i]=0; } start_[majorDim_]=0; index_ = new int[maxSize_]; element_ = new double[maxSize_]; return; } // Allocate sufficient space (resizeForAddingMinorVectors()) const int newMaxMajorDim_ = CoinMax(maxMajorDim_, CoinLengthWithExtra(majorDim_, extraMajor_)); if (newMaxMajorDim_ > maxMajorDim_) { maxMajorDim_ = newMaxMajorDim_; delete[] start_; delete[] length_; start_ = new CoinBigIndex[maxMajorDim_ + 1]; length_ = new int[maxMajorDim_]; } // first compute how long each major-dimension vector will be int * COIN_RESTRICT orthoLength = length_; rhs.countOrthoLength(orthoLength); start_[0] = 0; if (extraGap_ == 0) { for (i = 0; i < majorDim_; ++i) start_[i+1] = start_[i] + orthoLength[i]; } else { const double eg = extraGap_; for (i = 0; i < majorDim_; ++i) start_[i+1] = start_[i] + CoinLengthWithExtra(orthoLength[i], eg); } const CoinBigIndex newMaxSize = CoinMax(maxSize_, CoinLengthWithExtra(getLastStart(), extraMajor_)); if (newMaxSize > maxSize_) { maxSize_ = newMaxSize; delete[] index_; delete[] element_; index_ = new int[maxSize_]; element_ = new double[maxSize_]; # ifdef ZEROFAULT memset(index_,0,(maxSize_*sizeof(int))) ; memset(element_,0,(maxSize_*sizeof(double))) ; # endif } // now insert the entries of matrix minorDim_ = rhs.majorDim_; const CoinBigIndex * COIN_RESTRICT start = rhs.start_; const int * COIN_RESTRICT index = rhs.index_; const int * COIN_RESTRICT length = rhs.length_; const double * COIN_RESTRICT element = rhs.element_; assert (start[0]==0); CoinBigIndex first = 0; for (i = 0; i < minorDim_; ++i) { CoinBigIndex last = first + length[i]; CoinBigIndex j = first; first = start[i+1]; #if 0 if (((last-j)&1)!=0) { const int ind = index[j]; CoinBigIndex put = start_[ind]; start_[ind] = put +1; element_[put] = element[j]; index_[put] = i; j++; } for (; j != last; j+=2) { const int ind0 = index[j]; CoinBigIndex put0 = start_[ind0]; double value0=element[j]; const int ind1 = index[j+1]; CoinBigIndex put1 = start_[ind1]; double value1=element[j+1]; start_[ind0] = put0 +1; start_[ind1] = put1 +1; element_[put0] = value0; index_[put0] = i; element_[put1] = value1; index_[put1] = i; } #else for (; j != last; ++j) { const int ind = index[j]; CoinBigIndex put = start_[ind]; start_[ind] = put +1; element_[put] = element[j]; index_[put] = i; } #endif } // and re-adjust start_ for (i = 0; i < majorDim_; ++i) { start_[i] -= length_[i]; } } //############################################################################# void CoinPackedMatrix::assignMatrix(const bool colordered, const int minor, const int major, const CoinBigIndex numels, double *& elem, int *& ind, CoinBigIndex *& start, int *& len, const int maxmajor, const CoinBigIndex maxsize) { gutsOfDestructor(); colOrdered_ = colordered; element_ = elem; index_ = ind; start_ = start; majorDim_ = major; minorDim_ = minor; size_ = numels; maxMajorDim_ = maxmajor != -1 ? maxmajor : major; maxSize_ = maxsize != -1 ? maxsize : numels; if (len == NULL) { delete [] length_; length_ = new int[maxMajorDim_]; std::adjacent_difference(start + 1, start + (major + 1), length_); length_[0] -= start[0]; } else { length_ = len; } elem = NULL; ind = NULL; start = NULL; len = NULL; } //############################################################################# CoinPackedMatrix & CoinPackedMatrix::operator=(const CoinPackedMatrix& rhs) { if (this != &rhs) { gutsOfDestructor(); extraGap_=rhs.extraGap_; extraMajor_=rhs.extraMajor_; gutsOfOpEqual(rhs.colOrdered_, rhs.minorDim_, rhs.majorDim_, rhs.size_, rhs.element_, rhs.index_, rhs.start_, rhs.length_); } return *this; } //############################################################################# void CoinPackedMatrix::reverseOrdering() { CoinPackedMatrix m; m.extraGap_ = extraMajor_; m.extraMajor_ = extraGap_; m.reverseOrderedCopyOf(*this); swap(m); } //----------------------------------------------------------------------------- void CoinPackedMatrix::transpose() { colOrdered_ = ! colOrdered_; } //----------------------------------------------------------------------------- void CoinPackedMatrix::swap(CoinPackedMatrix& m) { std::swap(colOrdered_, m.colOrdered_); std::swap(extraGap_, m.extraGap_); std::swap(extraMajor_, m.extraMajor_); std::swap(element_, m.element_); std::swap(index_, m.index_); std::swap(start_, m.start_); std::swap(length_, m.length_); std::swap(majorDim_, m.majorDim_); std::swap(minorDim_, m.minorDim_); std::swap(size_, m.size_); std::swap(maxMajorDim_, m.maxMajorDim_); std::swap(maxSize_, m.maxSize_); } //############################################################################# //############################################################################# void CoinPackedMatrix::times(const double * x, double * y) const { if (colOrdered_) timesMajor(x, y); else timesMinor(x, y); } //----------------------------------------------------------------------------- #ifndef CLP_NO_VECTOR void CoinPackedMatrix::times(const CoinPackedVectorBase& x, double * y) const { if (colOrdered_) timesMajor(x, y); else timesMinor(x, y); } #endif //----------------------------------------------------------------------------- void CoinPackedMatrix::transposeTimes(const double * x, double * y) const { if (colOrdered_) timesMinor(x, y); else timesMajor(x, y); } //----------------------------------------------------------------------------- #ifndef CLP_NO_VECTOR void CoinPackedMatrix::transposeTimes(const CoinPackedVectorBase& x, double * y) const { if (colOrdered_) timesMinor(x, y); else timesMajor(x, y); } #endif //############################################################################# //############################################################################# /* Count the number of entries in every minor-dimension vector and fill in an array containing these lengths. */ void CoinPackedMatrix::countOrthoLength(int * orthoLength) const { CoinZeroN(orthoLength, minorDim_); if (size_!=start_[majorDim_]) { // has gaps for (int i = 0; i =0); ++orthoLength[index_[j]]; } } } else { // no gaps const CoinBigIndex last = start_[majorDim_]; for (CoinBigIndex j = 0; j < last; ++j) { assert( index_[j] < minorDim_ && index_[j]>=0); ++orthoLength[index_[j]]; } } } int * CoinPackedMatrix::countOrthoLength() const { int * orthoLength = new int[minorDim_]; countOrthoLength(orthoLength); return orthoLength; } //############################################################################# /* Returns an array containing major indices. The array is getNumElements long and if getVectorStarts() is 0,2,5 then the array would start 0,0,1,1,1,2... This method is provided to go back from a packed format to a triple format. The returned array is allocated with new int[], free it with delete[]. */ int * CoinPackedMatrix::getMajorIndices() const { // Check valid if (!majorDim_||start_[majorDim_]!=size_) return NULL; int * array = new int [size_]; for (int i=0;i(), bind2nd(less(), 0), bind2nd(greater_equal(), minorDim_))) != vecind + vecsize) throw CoinError("out of range index", "appendMajorVector", "CoinPackedMatrix"); #endif #endif if (majorDim_ == maxMajorDim_ || vecsize > maxSize_ - getLastStart()) { resizeForAddingMajorVectors(1, &vecsize); } // got to get this again since it might change! const CoinBigIndex last = getLastStart(); // OK, now just append the major-dimension vector to the end length_[majorDim_] = vecsize; CoinMemcpyN(vecind, vecsize, index_ + last); CoinMemcpyN(vecelem, vecsize, element_ + last); if (majorDim_ == 0) start_[0] = 0; start_[majorDim_ + 1] = CoinMin(last + CoinLengthWithExtra(vecsize, extraGap_), maxSize_ ); // LL: Do we want to allow appending a vector that has more entries than // the current size? if (vecsize > 0) { minorDim_ = CoinMax(minorDim_, (*std::max_element(vecind, vecind+vecsize)) + 1); } ++majorDim_; size_ += vecsize; } //----------------------------------------------------------------------------- #ifndef CLP_NO_VECTOR void CoinPackedMatrix::appendMajorVector(const CoinPackedVectorBase& vec) { appendMajorVector(vec.getNumElements(), vec.getIndices(), vec.getElements()); } //----------------------------------------------------------------------------- void CoinPackedMatrix::appendMajorVectors(const int numvecs, const CoinPackedVectorBase * const * vecs) { int i; CoinBigIndex nz = 0; for (i = 0; i < numvecs; ++i) nz += CoinLengthWithExtra(vecs[i]->getNumElements(), extraGap_); reserve(majorDim_ + numvecs, getLastStart() + nz); for (i = 0; i < numvecs; ++i) appendMajorVector(*vecs[i]); } #endif //############################################################################# void CoinPackedMatrix::appendMinorVector(const int vecsize, const int *vecind, const double *vecelem) { if (vecsize == 0) { ++minorDim_; // empty row/column - still need to increase return; } int i; #if COIN_COINUTILS_CHECKLEVEL > 3 // Test if any of the indices are out of range for (i = 0; i < vecsize; ++i) { if (vecind[i] < 0 || vecind[i] >= majorDim_) throw CoinError("out of range index", "appendMinorVector", "CoinPackedMatrix"); } // Test if there are duplicate indices int* sortedind = CoinCopyOfArray(vecind, vecsize); std::sort(sortedind, sortedind+vecsize); if (std::adjacent_find(sortedind, sortedind+vecsize) != sortedind+vecsize) { throw CoinError("identical indices", "appendMinorVector", "CoinPackedMatrix"); } #endif // test that there's a gap at the end of every major-dimension vector where // we want to add a new entry for (i = vecsize - 1; i >= 0; --i) { const int j = vecind[i]; if (start_[j] + length_[j] == start_[j+1]) break; } if (i >= 0) { int * addedEntries = new int[majorDim_]; memset(addedEntries, 0, majorDim_ * sizeof(int)); for (i = vecsize - 1; i >= 0; --i) addedEntries[vecind[i]] = 1; resizeForAddingMinorVectors(addedEntries); delete[] addedEntries; } // OK, now insert the entries of the minor-dimension vector for (i = vecsize - 1; i >= 0; --i) { const int j = vecind[i]; const CoinBigIndex posj = start_[j] + (length_[j]++); index_[posj] = minorDim_; element_[posj] = vecelem[i]; } ++minorDim_; size_ += vecsize; } //----------------------------------------------------------------------------- #ifndef CLP_NO_VECTOR void CoinPackedMatrix::appendMinorVector(const CoinPackedVectorBase& vec) { appendMinorVector(vec.getNumElements(), vec.getIndices(), vec.getElements()); } //----------------------------------------------------------------------------- void CoinPackedMatrix::appendMinorVectors(const int numvecs, const CoinPackedVectorBase * const * vecs) { if (numvecs == 0) return; int i; int * addedEntries = new int[majorDim_]; CoinZeroN(addedEntries, majorDim_); for (i = numvecs - 1; i >= 0; --i) { const int vecsize = vecs[i]->getNumElements(); const int* vecind = vecs[i]->getIndices(); for (int j = vecsize - 1; j >= 0; --j) { #ifdef COIN_DEBUG if (vecind[j] < 0 || vecind[j] >= majorDim_) throw CoinError("out of range index", "appendMinorVectors", "CoinPackedMatrix"); #endif ++addedEntries[vecind[j]]; } } for (i = majorDim_ - 1; i >= 0; --i) { if (start_[i] + length_[i] + addedEntries[i] > start_[i+1]) break; } if (i >= 0) resizeForAddingMinorVectors(addedEntries); delete[] addedEntries; // now insert the entries of the vectors for (i = 0; i < numvecs; ++i) { const int vecsize = vecs[i]->getNumElements(); const int* vecind = vecs[i]->getIndices(); const double* vecelem = vecs[i]->getElements(); for (int j = vecsize - 1; j >= 0; --j) { const int ind = vecind[j]; element_[start_[ind] + length_[ind]] = vecelem[j]; index_[start_[ind] + (length_[ind]++)] = minorDim_; } ++minorDim_; size_ += vecsize; } } #endif //############################################################################# //############################################################################# void CoinPackedMatrix::majorAppendSameOrdered(const CoinPackedMatrix& matrix) { if (minorDim_ != matrix.minorDim_) { throw CoinError("dimension mismatch", "rightAppendSameOrdered", "CoinPackedMatrix"); } if (matrix.majorDim_ == 0) return; int i; if (majorDim_ + matrix.majorDim_ > maxMajorDim_ || getLastStart() + matrix.getLastStart() > maxSize_) { // we got to resize before we add. note that the resizing method // properly fills out start_ and length_ for the major-dimension // vectors to be added! resizeForAddingMajorVectors(matrix.majorDim_, matrix.length_); start_ += majorDim_; for (i = 0; i < matrix.majorDim_; ++i) { const int l = matrix.length_[i]; CoinMemcpyN(matrix.index_ + matrix.start_[i], l, index_ + start_[i]); CoinMemcpyN(matrix.element_ + matrix.start_[i], l, element_ + start_[i]); } start_ -= majorDim_; } else { start_ += majorDim_; length_ += majorDim_; for (i = 0; i < matrix.majorDim_; ++i) { const int l = matrix.length_[i]; CoinMemcpyN(matrix.index_ + matrix.start_[i], l, index_ + start_[i]); CoinMemcpyN(matrix.element_ + matrix.start_[i], l, element_ + start_[i]); start_[i+1] = start_[i] + matrix.start_[i+1] - matrix.start_[i]; length_[i] = l; } start_ -= majorDim_; length_ -= majorDim_; } majorDim_ += matrix.majorDim_; size_ += matrix.size_; } //----------------------------------------------------------------------------- void CoinPackedMatrix::minorAppendSameOrdered(const CoinPackedMatrix& matrix) { if (majorDim_ != matrix.majorDim_) { throw CoinError("dimension mismatch", "bottomAppendSameOrdered", "CoinPackedMatrix"); } if (matrix.minorDim_ == 0) return; int i; for (i = majorDim_ - 1; i >= 0; --i) { if (start_[i] + length_[i] + matrix.length_[i] > start_[i+1]) break; } if (i >= 0) resizeForAddingMinorVectors(matrix.length_); // now insert the entries of matrix for (i = majorDim_ - 1; i >= 0; --i) { const int l = matrix.length_[i]; std::transform(matrix.index_ + matrix.start_[i], matrix.index_ + (matrix.start_[i] + l), index_ + (start_[i] + length_[i]), std::bind2nd(std::plus(), minorDim_)); CoinMemcpyN(matrix.element_ + matrix.start_[i], l, element_ + (start_[i] + length_[i])); length_[i] += l; } minorDim_ += matrix.minorDim_; size_ += matrix.size_; } //----------------------------------------------------------------------------- void CoinPackedMatrix::majorAppendOrthoOrdered(const CoinPackedMatrix& matrix) { if (minorDim_ != matrix.majorDim_) { throw CoinError("dimension mismatch", "majorAppendOrthoOrdered", "CoinPackedMatrix"); } if (matrix.majorDim_ == 0) return; int i; CoinBigIndex j; // this trickery is needed because MSVC++ is not willing to delete[] a // 'const int *' int * orthoLengthPtr = matrix.countOrthoLength(); const int * orthoLength = orthoLengthPtr; if (majorDim_ + matrix.minorDim_ > maxMajorDim_) { resizeForAddingMajorVectors(matrix.minorDim_, orthoLength); } else { const double extra_gap = extraGap_; start_ += majorDim_; for (i = 0; i < matrix.minorDim_ ; ++i) { start_[i+1] = start_[i] + CoinLengthWithExtra(orthoLength[i], extra_gap); } start_ -= majorDim_; if (start_[majorDim_ + matrix.minorDim_] > maxSize_) { resizeForAddingMajorVectors(matrix.minorDim_, orthoLength); } } // At this point everything is big enough to accommodate the new entries. // Also, start_ is set to the correct starting points for all the new // major-dimension vectors. The length of the new major-dimension vectors // may or may not be correctly set. Hence we just zero them out and they'll // be set when the entries are actually added below. start_ += majorDim_; length_ += majorDim_; CoinZeroN(length_, matrix.minorDim_); for (i = 0; i < matrix.majorDim_; ++i) { const CoinBigIndex last = matrix.getVectorLast(i); for (j = matrix.getVectorFirst(i); j < last; ++j) { const int ind = matrix.index_[j]; element_[start_[ind] + length_[ind]] = matrix.element_[j]; index_[start_[ind] + (length_[ind]++)] = i; } } length_ -= majorDim_; start_ -= majorDim_; // We need to update majorDim_ and size_. We can just add in from matrix majorDim_ += matrix.minorDim_; size_ += matrix.size_; delete[] orthoLengthPtr; } //----------------------------------------------------------------------------- void CoinPackedMatrix::minorAppendOrthoOrdered(const CoinPackedMatrix& matrix) { if (majorDim_ != matrix.minorDim_) { throw CoinError("dimension mismatch", "bottomAppendOrthoOrdered", "CoinPackedMatrix"); } if (matrix.majorDim_ == 0) return; int i; // first compute how many entries will be added to each major-dimension // vector, and if needed, resize the matrix to accommodate all // this trickery is needed because MSVC++ is not willing to delete[] a // 'const int *' int * addedEntriesPtr = matrix.countOrthoLength(); const int * addedEntries = addedEntriesPtr; for (i = majorDim_ - 1; i >= 0; --i) { if (start_[i] + length_[i] + addedEntries[i] > start_[i+1]) break; } if (i >= 0) resizeForAddingMinorVectors(addedEntries); delete[] addedEntriesPtr; // now insert the entries of matrix for (i = 0; i < matrix.majorDim_; ++i) { const CoinBigIndex last = matrix.getVectorLast(i); for (CoinBigIndex j = matrix.getVectorFirst(i); j != last; ++j) { const int ind = matrix.index_[j]; element_[start_[ind] + length_[ind]] = matrix.element_[j]; index_[start_[ind] + (length_[ind]++)] = minorDim_; } ++minorDim_; } size_ += matrix.size_; } //############################################################################# //############################################################################# void CoinPackedMatrix::deleteMajorVectors(const int numDel, const int * indDel) { if (numDel == majorDim_) { // everything is deleted majorDim_ = 0; minorDim_ = 0; size_ = 0; // Get rid of memory as well maxMajorDim_ = 0; delete [] length_; length_ = NULL; delete [] start_; start_ = new CoinBigIndex[1]; start_[0]=0;; delete [] element_; element_=NULL; delete [] index_; index_=NULL; maxSize_ = 0; return; } if (!extraGap_&&!extraMajor_) { // See if this is faster char * keep = new char[majorDim_]; memset(keep,1,majorDim_); for (int i=0;i=0&&k 1) { CoinCopy(start_ + (ind + 1), start_ + ind1, start_ + (ind - i)); CoinCopy(length_ + (ind + 1), length_ + ind1, length_ + (ind - i)); } } // copy the last block of length_ and start_ const int ind = sortedDel[last]; deleted += length_[ind]; if (sortedDel[last] != majorDim_ - 1) { const int ind1 = majorDim_; CoinCopy(start_ + (ind + 1), start_ + ind1, start_ + (ind - last)); CoinCopy(length_ + (ind + 1), length_ + ind1, length_ + (ind - last)); } majorDim_ -= numDel; const int lastlength = CoinLengthWithExtra(length_[majorDim_-1], extraGap_); start_[majorDim_] = CoinMin(start_[majorDim_-1] + lastlength, maxSize_); size_ -= deleted; // if the very first major vector was deleted then copy the new first major // vector to the beginning to make certain that start_[0] is 0. This may // not be necessary, but better safe than sorry... if (sortedDel[0] == 0) { CoinCopyN(index_ + start_[0], length_[0], index_); CoinCopyN(element_ + start_[0], length_[0], element_); start_[0] = 0; } delete[] sortedDelPtr; } } //############################################################################# void CoinPackedMatrix::deleteMinorVectors(const int numDel, const int * indDel) { if (numDel == minorDim_) { // everything is deleted minorDim_ = 0; size_ = 0; // Get rid of as much memory as possible memset(length_,0,majorDim_*sizeof(int)); memset(start_,0,(majorDim_+1)*sizeof(CoinBigIndex )); delete [] element_; element_=NULL; delete [] index_; index_=NULL; maxSize_ = 0; return; } int i, j, k; // first compute the new index of every row int* newindexPtr = new int[minorDim_]; CoinZeroN(newindexPtr, minorDim_); for (j = 0; j < numDel; ++j) { const int ind = indDel[j]; #ifdef COIN_DEBUG if (ind < 0 || ind >= minorDim_) throw CoinError("out of range index", "deleteMinorVectors", "CoinPackedMatrix"); if (newindexPtr[ind] == -1) throw CoinError("duplicate index", "deleteMinorVectors", "CoinPackedMatrix"); #endif newindexPtr[ind] = -1; } for (i = 0, k = 0; i < minorDim_; ++i) { if (newindexPtr[i] != -1) { newindexPtr[i] = k++; } } // Now crawl through the matrix const int * newindex = newindexPtr; #ifdef TAKEOUT int mcount[400]; memset(mcount,0,400*sizeof(int)); for (i = 0; i < majorDim_; ++i) { int * index = index_ + start_[i]; double * elem = element_ + start_[i]; const int length_i = length_[i]; for (j = 0, k = 0; j < length_i; ++j) { mcount[index[j]]++; } } for (i=0;i=0) printf("Keeping original row %d (new %d) with count of %d\n", i,newindex[i],mcount[i]); else printf("deleting row %d with count of %d\n", i,mcount[i]); } } #endif if (!extraGap_) { // pack down size_=0; for (i = 0; i < majorDim_; ++i) { int * index = index_ + start_[i]; double * elem = element_ + start_[i]; start_[i]=size_; const int length_i = length_[i]; for (j = 0; j < length_i; ++j) { const int ind = newindex[index[j]]; if (ind >= 0) { index_[size_] = ind; element_[size_++] = elem[j]; } } length_[i] = size_-start_[i]; } start_[majorDim_]=size_; } else { int deleted = 0; for (i = 0; i < majorDim_; ++i) { int * index = index_ + start_[i]; double * elem = element_ + start_[i]; const int length_i = length_[i]; for (j = 0, k = 0; j < length_i; ++j) { const int ind = newindex[index[j]]; if (ind != -1) { index[k] = ind; elem[k++] = elem[j]; } } deleted += length_i - k; length_[i] = k; } size_ -= deleted; } delete[] newindexPtr; minorDim_ -= numDel; } //############################################################################# //############################################################################# void CoinPackedMatrix::timesMajor(const double * x, double * y) const { memset(y, 0, minorDim_ * sizeof(double)); for (int i = majorDim_ - 1; i >= 0; --i) { const double x_i = x[i]; if (x_i != 0.0) { const CoinBigIndex last = getVectorLast(i); for (CoinBigIndex j = getVectorFirst(i); j < last; ++j) y[index_[j]] += x_i * element_[j]; } } } //----------------------------------------------------------------------------- #ifndef CLP_NO_VECTOR void CoinPackedMatrix::timesMajor(const CoinPackedVectorBase& x, double * y) const { memset(y, 0, minorDim_ * sizeof(double)); for (CoinBigIndex i = x.getNumElements() - 1; i >= 0; --i) { const double x_i = x.getElements()[i]; if (x_i != 0.0) { const int ind = x.getIndices()[i]; const CoinBigIndex last = getVectorLast(ind); for (CoinBigIndex j = getVectorFirst(ind); j < last; ++j) y[index_[j]] += x_i * element_[j]; } } } #endif //----------------------------------------------------------------------------- void CoinPackedMatrix::timesMinor(const double * x, double * y) const { memset(y, 0, majorDim_ * sizeof(double)); for (int i = majorDim_ - 1; i >= 0; --i) { double y_i = 0; const CoinBigIndex last = getVectorLast(i); for (CoinBigIndex j = getVectorFirst(i); j < last; ++j) y_i += x[index_[j]] * element_[j]; y[i] = y_i; } } //----------------------------------------------------------------------------- #ifndef CLP_NO_VECTOR void CoinPackedMatrix::timesMinor(const CoinPackedVectorBase& x, double * y) const { memset(y, 0, majorDim_ * sizeof(double)); for (int i = majorDim_ - 1; i >= 0; --i) { double y_i = 0; const CoinBigIndex last = getVectorLast(i); for (CoinBigIndex j = getVectorFirst(i); j < last; ++j) y_i += x[index_[j]] * element_[j]; y[i] = y_i; } } #endif //############################################################################# //############################################################################# CoinPackedMatrix::CoinPackedMatrix() : colOrdered_(true), extraGap_(0.0), extraMajor_(0.0), element_(0), index_(0), length_(0), majorDim_(0), minorDim_(0), size_(0), maxMajorDim_(0), maxSize_(0) { start_ = new CoinBigIndex[1]; start_[0] = 0; } //----------------------------------------------------------------------------- CoinPackedMatrix::CoinPackedMatrix(const bool colordered, const double extraMajor, const double extraGap) : colOrdered_(colordered), extraGap_(extraGap), extraMajor_(extraMajor), element_(0), index_(0), length_(0), majorDim_(0), minorDim_(0), size_(0), maxMajorDim_(0), maxSize_(0) { start_ = new CoinBigIndex[1]; start_[0] = 0; } //----------------------------------------------------------------------------- CoinPackedMatrix::CoinPackedMatrix(const bool colordered, const int minor, const int major, const CoinBigIndex numels, const double * elem, const int * ind, const CoinBigIndex * start, const int * len, const double extraMajor, const double extraGap) : colOrdered_(colordered), extraGap_(extraGap), extraMajor_(extraMajor), element_(NULL), index_(NULL), start_(NULL), length_(NULL), majorDim_(0), minorDim_(0), size_(0), maxMajorDim_(0), maxSize_(0) { gutsOfOpEqual(colordered, minor, major, numels, elem, ind, start, len); } //----------------------------------------------------------------------------- CoinPackedMatrix::CoinPackedMatrix(const bool colordered, const int minor, const int major, const CoinBigIndex numels, const double * elem, const int * ind, const CoinBigIndex * start, const int * len) : colOrdered_(colordered), extraGap_(0.0), extraMajor_(0.0), element_(NULL), index_(NULL), start_(NULL), length_(NULL), majorDim_(0), minorDim_(0), size_(0), maxMajorDim_(0), maxSize_(0) { gutsOfOpEqual(colordered, minor, major, numels, elem, ind, start, len); } //----------------------------------------------------------------------------- // makes column ordered from triplets and takes out duplicates // will be sorted // // This is an interesting in-place sorting algorithm; // We have triples, and want to sort them so that triples with the same column // are adjacent. // We begin by computing how many entries there are for each column (columnCount) // and using that to compute where each set of column entries will *end* (startColumn). // As we drop entries into place, startColumn is decremented until it contains // the position where the column entries *start*. // The invalid column index -2 means there's a "hole" in that position; // the invalid column index -1 means the entry in that spot is "where it wants to go". // Initially, no one is where they want to go. // Going back to front, // if that entry is where it wants to go // then leave it there // otherwise pick it up (which leaves a hole), and // for as long as you have an entry in your right hand, // - pick up the entry (with your left hand) in the position where the one in // your right hand wants to go; // - pass the entry in your left hand to your right hand; // - was that entry really just the "hole"? If so, stop. // It could be that all the entries get shuffled in the first loop iteration // and all the rest just confirm that everyone is happy where they are. // We never move an entry that is where it wants to go, so entries are moved at // most once. They may not change position if they happen to initially be // where they want to go when the for loop gets to them. // It depends on how many subpermutations the triples initially defined. // Each while loop takes care of one permutation. // The while loop has to stop, because each time around we mark one entry as happy. // We can't run into a happy entry, because we are decrementing the startColumn // all the time, so we must be running into new entries. // Once we've processed all the slots for a column, it cannot be the case that // there are any others that want to go there. // This all means that we eventually must run into the hole. CoinPackedMatrix::CoinPackedMatrix( const bool colordered, const int * indexRow , const int * indexColumn, const double * element, CoinBigIndex numberElements ) : colOrdered_(colordered), extraGap_(0.0), extraMajor_(0.0), element_(NULL), index_(NULL), start_(NULL), length_(NULL), majorDim_(0), minorDim_(0), size_(0), maxMajorDim_(0), maxSize_(0) { CoinAbsFltEq eq; int * colIndices = new int[numberElements]; int * rowIndices = new int[numberElements]; double * elements = new double[numberElements]; CoinCopyN(element,numberElements,elements); if ( colordered ) { CoinCopyN(indexColumn,numberElements,colIndices); CoinCopyN(indexRow,numberElements,rowIndices); } else { CoinCopyN(indexColumn,numberElements,rowIndices); CoinCopyN(indexRow,numberElements,colIndices); } int numberRows; int numberColumns; if (numberElements ) { numberRows = *std::max_element(rowIndices,rowIndices+numberElements)+1; numberColumns = *std::max_element(colIndices,colIndices+numberElements)+1; } else { numberRows = 0; numberColumns = 0; } int * rowCount = new int[numberRows]; int * columnCount = new int[numberColumns]; CoinBigIndex * startColumn = new CoinBigIndex[numberColumns+1]; int * lengths = new int[numberColumns+1]; int iColumn,i; CoinBigIndex k; for (i=0;i=0;k--) { iColumn=colIndices[k]; if (iColumn>=0) { /* pick up the entry with your right hand */ double value = elements[k]; int iRow=rowIndices[k]; colIndices[k]=-2; /* the hole */ while (1) { /* pick this up with your left */ CoinBigIndex iLook=startColumn[iColumn]-1; double valueSave=elements[iLook]; int iColumnSave=colIndices[iLook]; int iRowSave=rowIndices[iLook]; /* put the right-hand entry where it wanted to go */ startColumn[iColumn]=iLook; elements[iLook]=value; rowIndices[iLook]=iRow; colIndices[iLook]=-1; /* mark it as being where it wants to be */ /* there was something there */ if (iColumnSave>=0) { iColumn=iColumnSave; value=valueSave; iRow=iRowSave; } else if (iColumnSave == -2) { /* that was the hole */ break; } else { assert(1==0); /* should never happen */ } /* endif */ } /* endwhile */ } /* endif */ } /* endfor */ /* now pack the elements and combine entries with the same row and column */ /* also, drop entries with "small" coefficients */ numberElements=0; for (iColumn=0;iColumnstart) { int lastRow; double lastValue; // sorts on indices dragging elements with CoinSort_2(rowIndices+start,rowIndices+end,elements+start,CoinFirstLess_2()); lastRow=rowIndices[start]; lastValue=elements[start]; for (i=start+1;ilastRow) { //if(fabs(lastValue)>tolerance) { if(!eq(lastValue,0.0)) { rowIndices[numberElements]=lastRow; elements[numberElements]=lastValue; numberElements++; lengths[iColumn]++; } lastRow=iRow; lastValue=value; } else { lastValue+=value; } /* endif */ } /* endfor */ //if(fabs(lastValue)>tolerance) { if(!eq(lastValue,0.0)) { rowIndices[numberElements]=lastRow; elements[numberElements]=lastValue; numberElements++; lengths[iColumn]++; } } } /* endfor */ startColumn[numberColumns]=numberElements; #if 0 gutsOfOpEqual(colordered,numberRows,numberColumns,numberElements,elements,rowIndices,startColumn,lengths); delete [] rowCount; delete [] columnCount; delete [] startColumn; delete [] lengths; delete [] colIndices; delete [] rowIndices; delete [] elements; #else assignMatrix(colordered,numberRows,numberColumns,numberElements, elements,rowIndices,startColumn,lengths); delete [] rowCount; delete [] columnCount; delete [] lengths; delete [] colIndices; #endif } //----------------------------------------------------------------------------- CoinPackedMatrix::CoinPackedMatrix (const CoinPackedMatrix & rhs) : colOrdered_(true), extraGap_(0.0), extraMajor_(0.0), element_(0), index_(0), start_(0), length_(0), majorDim_(0), minorDim_(0), size_(0), maxMajorDim_(0), maxSize_(0) { bool hasGaps = rhs.size_=0) { maxMajorDim_ = majorDim_+ extraForMajor; maxSize_ = size_ + extraElements; assert (maxMajorDim_>0); assert (maxSize_>0); length_ = new int[maxMajorDim_]; CoinMemcpyN(rhs.length_, majorDim_, length_); start_ = new CoinBigIndex[maxMajorDim_+1]; element_ = new double[maxSize_]; index_ = new int[maxSize_]; bool hasGaps = rhs.size_0) { length_ = new int[maxMajorDim_]; start_ = new CoinBigIndex[maxMajorDim_+1]; if (maxSize_>0) { element_ = new double[maxSize_]; index_ = new int[maxSize_]; } CoinBigIndex size=0; const double * oldElement = rhs.element_; const CoinBigIndex * oldStart = rhs.start_; const int * oldIndex = rhs.index_; const int * oldLength = rhs.length_; CoinBigIndex tooSmallCount=0; for (int i = 0 ; i < majorDim_ ; i++) { start_[i]=size; for (CoinBigIndex j=oldStart[i]; j1.0e-21) { element_[size]=value; index_[size++]=oldIndex[j]; } else { tooSmallCount++; } } length_[i]=size-start_[i]; } start_[majorDim_]=size; assert (size_==size+tooSmallCount); size_ = size; } else { start_ = new CoinBigIndex[1]; start_[0]=0; } } } else { // more complicated colOrdered_ = ! colOrdered_; minorDim_ = rhs.majorDim_; majorDim_ = rhs.minorDim_; maxMajorDim_ = majorDim_ + extraForMajor; maxSize_ = CoinMax(size_ + extraElements,1); assert (maxMajorDim_>0); length_ = new int[maxMajorDim_]; start_ = new CoinBigIndex[maxMajorDim_+1]; element_ = new double[maxSize_]; index_ = new int[maxSize_]; bool hasGaps = rhs.size_=0); ++length_[rhs.index_[j]]; } } } else { // no gaps const CoinBigIndex last = rhs.start_[rhs.majorDim_]; for (CoinBigIndex j = 0; j < last; ++j) { assert( rhs.index_[j] < rhs.minorDim_ && rhs.index_[j]>=0); ++length_[rhs.index_[j]]; } } // Now do starts CoinBigIndex size=0; for (i = 0; i =0 && kRow < rhs.minorDim_) { if (newRow[kRow]<0) { // first time newRow[kRow]=iRow; } else { // duplicate numberDuplicate++; int lastRow = newRow[kRow]; newRow[kRow]=iRow; duplicateRow[iRow] = lastRow; } } else { // bad row numberBad++; } } if (numberBad) throw CoinError("bad minor entries", "subset constructor", "CoinPackedMatrix"); // now get size and check columns size_ = 0; int iColumn; numberBad=0; if (!numberDuplicate) { // No duplicates so can do faster // If not much smaller then use original size if (3*majorDim_>2*rhs.majorDim_&& 3*minorDim_>2*rhs.minorDim_) { // now create arrays maxSize_=CoinMax(static_cast (1),rhs.size_); start_ = new CoinBigIndex [numberColumns+1]; length_ = new int [numberColumns]; index_ = new int[maxSize_]; element_ = new double [maxSize_]; // and fill them size_ = 0; start_[0]=0; for (iColumn=0;iColumn=0 && kColumn =0) { index_[size_] = kRow; element_[size_++] = value; } } } else { // bad column numberBad++; } start_[iColumn+1] = size_; length_[iColumn] = size_ - start_[iColumn]; } if (numberBad) throw CoinError("bad major entries", "subset constructor", "CoinPackedMatrix"); } else { for (iColumn=0;iColumn=0 && kColumn =0) size_++; } } else { // bad column numberBad++; } } if (numberBad) throw CoinError("bad major entries", "subset constructor", "CoinPackedMatrix"); // now create arrays maxSize_=CoinMax(static_cast (1),size_); start_ = new CoinBigIndex [numberColumns+1]; length_ = new int [numberColumns]; index_ = new int[maxSize_]; element_ = new double [maxSize_]; // and fill them size_ = 0; start_[0]=0; for (iColumn=0;iColumn=0) { index_[size_] = kRow; element_[size_++] = value; } } start_[iColumn+1] = size_; length_[iColumn] = size_ - start_[iColumn]; } } } else { for (iColumn=0;iColumn=0 && kColumn =0) { size_++; kRow = duplicateRow[kRow]; } } } else { // bad column numberBad++; } } if (numberBad) throw CoinError("bad major entries", "subset constructor", "CoinPackedMatrix"); // now create arrays maxSize_=CoinMax(static_cast (1),size_); start_ = new CoinBigIndex [numberColumns+1]; length_ = new int [numberColumns]; index_ = new int[maxSize_]; element_ = new double [maxSize_]; // and fill them size_ = 0; start_[0]=0; for (iColumn=0;iColumn=0) { index_[size_] = kRow; element_[size_++] = value; kRow = duplicateRow[kRow]; } } start_[iColumn+1] = size_; length_[iColumn] = size_ - start_[iColumn]; } } delete [] newRow; delete [] duplicateRow; } } //----------------------------------------------------------------------------- CoinPackedMatrix::~CoinPackedMatrix () { gutsOfDestructor(); } //############################################################################# //############################################################################# //############################################################################# void CoinPackedMatrix::gutsOfDestructor() { delete[] length_; delete[] start_; delete[] index_; delete[] element_; length_ = 0; start_ = 0; index_ = 0; element_ = 0; } //############################################################################# void CoinPackedMatrix::gutsOfCopyOf(const bool colordered, const int minor, const int major, const CoinBigIndex numels, const double * elem, const int * ind, const CoinBigIndex * start, const int * len, const double extraMajor, const double extraGap) { colOrdered_ = colordered; majorDim_ = major; minorDim_ = minor; size_ = numels; extraGap_ = extraGap; extraMajor_ = extraMajor; maxMajorDim_ = CoinLengthWithExtra(majorDim_, extraMajor_); if (maxMajorDim_ > 0) { delete [] length_; length_ = new int[maxMajorDim_]; if (len == 0) { std::adjacent_difference(start + 1, start + (major + 1), length_); length_[0] -= start[0]; } else { CoinMemcpyN(len, major, length_); } delete [] start_; start_ = new CoinBigIndex[maxMajorDim_+1]; start_[0]=0; CoinMemcpyN(start, major+1, start_); } else { // empty but be safe delete [] length_; length_ = NULL; delete [] start_; start_ = new CoinBigIndex[1]; start_[0]=0; } maxSize_ = maxMajorDim_ > 0 ? start_[major] : 0; maxSize_ = CoinLengthWithExtra(maxSize_, extraMajor_); if (maxSize_ > 0) { delete [] element_; delete []index_; element_ = new double[maxSize_]; index_ = new int[maxSize_]; // we can't just simply memcpy these content over, because that can // upset memory debuggers like purify if there were gaps and those gaps // were uninitialized memory blocks for (int i = majorDim_ - 1; i >= 0; --i) { CoinMemcpyN(ind + start[i], length_[i], index_ + start_[i]); CoinMemcpyN(elem + start[i], length_[i], element_ + start_[i]); } } } //############################################################################# void CoinPackedMatrix::gutsOfCopyOfNoGaps(const bool colordered, const int minor, const int major, const double * elem, const int * ind, const CoinBigIndex * start) { colOrdered_ = colordered; majorDim_ = major; minorDim_ = minor; size_ = start[majorDim_]; extraGap_ = 0; extraMajor_ = 0; maxMajorDim_ = majorDim_; // delete all arrays delete [] length_; delete [] start_; delete [] element_; delete [] index_; if (maxMajorDim_ > 0) { length_ = new int[maxMajorDim_]; assert (!start[0]); start_ = new CoinBigIndex[maxMajorDim_+1]; start_[0]=0; CoinBigIndex last = 0; for (int i=0;i 0) { element_ = new double[maxSize_]; index_ = new int[maxSize_]; CoinMemcpyN(ind , maxSize_, index_); CoinMemcpyN(elem , maxSize_, element_); } else { element_ = NULL; index_ = NULL; } } //############################################################################# void CoinPackedMatrix::gutsOfOpEqual(const bool colordered, const int minor, const int major, const CoinBigIndex numels, const double * elem, const int * ind, const CoinBigIndex * start, const int * len) { colOrdered_ = colordered; majorDim_ = major; minorDim_ = minor; size_ = numels; if (!len && numels > 0 && numels==start[major] && start[0]==0) { // No gaps - do faster if (major>maxMajorDim_||!start_) { maxMajorDim_ = major; delete [] length_; length_ = new int[maxMajorDim_]; delete [] start_; start_ = new CoinBigIndex[maxMajorDim_+1]; } CoinMemcpyN(start,major+1,start_); std::adjacent_difference(start + 1, start + (major + 1), length_); if (numels>maxSize_||!element_) { maxSize_=numels; delete [] element_; delete [] index_; element_ = new double[maxSize_]; index_ = new int[maxSize_]; } CoinMemcpyN(ind,numels,index_); CoinMemcpyN(elem,numels,element_); } else { maxMajorDim_ = CoinLengthWithExtra(majorDim_, extraMajor_); int i; if (maxMajorDim_ > 0) { delete [] length_; length_ = new int[maxMajorDim_]; if (len == 0) { std::adjacent_difference(start + 1, start + (major + 1), length_); length_[0] -= start[0]; } else { CoinMemcpyN(len, major, length_); } delete [] start_; start_ = new CoinBigIndex[maxMajorDim_+1]; start_[0] = 0; if (extraGap_ == 0) { for (i = 0; i < major; ++i) start_[i+1] = start_[i] + length_[i]; } else { const double extra_gap = extraGap_; for (i = 0; i < major; ++i) start_[i+1] = start_[i] + CoinLengthWithExtra(length_[i], extra_gap); } } else { // empty matrix delete [] start_; start_ = new CoinBigIndex[1]; start_[0] = 0; } maxSize_ = maxMajorDim_ > 0 ? start_[major] : 0; maxSize_ = CoinLengthWithExtra(maxSize_, extraMajor_); if (maxSize_ > 0) { delete [] element_; delete [] index_; element_ = new double[maxSize_]; index_ = new int[maxSize_]; assert (maxSize_>=start_[majorDim_-1]+length_[majorDim_-1]); // we can't just simply memcpy these content over, because that can // upset memory debuggers like purify if there were gaps and those gaps // were uninitialized memory blocks for (i = majorDim_ - 1; i >= 0; --i) { CoinMemcpyN(ind + start[i], length_[i], index_ + start_[i]); CoinMemcpyN(elem + start[i], length_[i], element_ + start_[i]); } } } #ifndef NDEBUG for (int i = majorDim_ - 1; i >= 0; --i) { const CoinBigIndex last = getVectorLast(i); for (CoinBigIndex j = getVectorFirst(i); j < last; ++j) { int index = index_[j]; assert (index>=0&&index= 0; --i) { CoinMemcpyN(index_ + start_[i], length_[i], newIndex + newStart[i]); CoinMemcpyN(element_ + start_[i], length_[i], newElem + newStart[i]); } gutsOfDestructor(); start_ = newStart; length_ = newLength; index_ = newIndex; element_ = newElem; } //############################################################################# void CoinPackedMatrix::resizeForAddingMinorVectors(const int * addedEntries) { int i; maxMajorDim_ = CoinMax(CoinLengthWithExtra(majorDim_, extraMajor_), maxMajorDim_); CoinBigIndex * newStart = new CoinBigIndex[maxMajorDim_ + 1]; int * newLength = new int[maxMajorDim_]; // increase the lengths temporarily so that the correct new start positions // can be easily computed (it's faster to modify the lengths and reset them // than do a test for every entry when the start positions are computed. for (i = majorDim_ - 1; i >= 0; --i) newLength[i] = length_[i] + addedEntries[i]; newStart[0] = 0; if (extraGap_ == 0) { for (i = 0; i < majorDim_; ++i) newStart[i+1] = newStart[i] + newLength[i]; } else { const double eg = extraGap_; for (i = 0; i < majorDim_; ++i) newStart[i+1] = newStart[i] + CoinLengthWithExtra(newLength[i], eg); } // reset the lengths for (i = majorDim_ - 1; i >= 0; --i) newLength[i] -= addedEntries[i]; maxSize_ = CoinMax(maxSize_, CoinLengthWithExtra(newStart[majorDim_], extraMajor_)); int * newIndex = new int[maxSize_]; double * newElem = new double[maxSize_]; for (i = majorDim_ - 1; i >= 0; --i) { CoinMemcpyN(index_ + start_[i], length_[i], newIndex + newStart[i]); CoinMemcpyN(element_ + start_[i], length_[i], newElem + newStart[i]); } gutsOfDestructor(); start_ = newStart; length_ = newLength; index_ = newIndex; element_ = newElem; } //############################################################################# //############################################################################# void CoinPackedMatrix::dumpMatrix(const char* fname) const { if (! fname) { printf("Dumping matrix...\n\n"); printf("colordered: %i\n", isColOrdered() ? 1 : 0); const int major = getMajorDim(); const int minor = getMinorDim(); printf("major: %i minor: %i\n", major, minor); for (int i = 0; i < major; ++i) { printf("vec %i has length %i with entries:\n", i, length_[i]); for (CoinBigIndex j = start_[i]; j < start_[i] + length_[i]; ++j) { printf(" %15i %40.25f\n", index_[j], element_[j]); } } printf("\nFinished dumping matrix\n"); } else { FILE* out = fopen(fname, "w"); fprintf(out, "Dumping matrix...\n\n"); fprintf(out, "colordered: %i\n", isColOrdered() ? 1 : 0); const int major = getMajorDim(); const int minor = getMinorDim(); fprintf(out, "major: %i minor: %i\n", major, minor); for (int i = 0; i < major; ++i) { fprintf(out, "vec %i has length %i with entries:\n", i, length_[i]); for (CoinBigIndex j = start_[i]; j < start_[i] + length_[i]; ++j) { fprintf(out, " %15i %40.25f\n", index_[j], element_[j]); } } fprintf(out, "\nFinished dumping matrix\n"); fclose(out); } } void CoinPackedMatrix::printMatrixElement (const int row_val, const int col_val) const { int major_index, minor_index; if (isColOrdered()) { major_index = col_val; minor_index = row_val; } else { major_index = row_val; minor_index = col_val; } if (major_index < 0 || major_index > getMajorDim()-1) { std::cout << "Major index " << major_index << " not in range 0.." << getMajorDim()-1 << std::endl ; } else if (minor_index < 0 || minor_index > getMinorDim()-1) { std::cout << "Minor index " << minor_index << " not in range 0.." << getMinorDim()-1 << std::endl ; } else { CoinBigIndex curr_point = start_[major_index]; const CoinBigIndex stop_point = curr_point+length_[major_index]; double aij = 0.0 ; for ( ; curr_point < stop_point ; curr_point++) { if (index_[curr_point] == minor_index) { aij = element_[curr_point]; break; } } std::cout << aij ; } } #ifndef CLP_NO_VECTOR bool CoinPackedMatrix::isEquivalent2(const CoinPackedMatrix& rhs) const { CoinRelFltEq eq; // Both must be column order or both row ordered and must be of same size if (isColOrdered() ^ rhs.isColOrdered()) { std::cerr<<"Ordering "<= 0; --i) { CoinShallowPackedVector pv = getVector(i); CoinShallowPackedVector rhsPv = rhs.getVector(i); if ( !pv.isEquivalent(rhsPv,eq) ) { std::cerr<<"vector # "< (elems+j); printf("%x %x",xx[0],xx[1]); xx = reinterpret_cast (elems2+j); printf(" %x %x\n",xx[0],xx[1]); } } //return false; } } return true; } #else /* Equivalence. Two matrices are equivalent if they are both by rows or both by columns, they have the same dimensions, and each vector is equivalent. In this method the FloatEqual function operator can be specified. */ bool CoinPackedMatrix::isEquivalent(const CoinPackedMatrix& rhs, const CoinRelFltEq& eq) const { // Both must be column order or both row ordered and must be of same size if ((isColOrdered() ^ rhs.isColOrdered()) || (getNumCols() != rhs.getNumCols()) || (getNumRows() != rhs.getNumRows()) || (getNumElements() != rhs.getNumElements())) return false; const int major = getMajorDim(); const int minor = getMinorDim(); double * values = new double[minor]; memset(values,0,minor*sizeof(double)); bool same=true; for (int i = 0; i < major; ++i) { int length = length_[i]; if (length!=rhs.length_[i]) { same=false; break; } else { CoinBigIndex j; for ( j = start_[i]; j < start_[i] + length; ++j) { int index = index_[j]; values[index]=element_[j]; } for ( j = rhs.start_[i]; j < rhs.start_[i] + length; ++j) { int index = index_[j]; double oldValue = values[index]; values[index]=0.0; if (!eq(oldValue,rhs.element_[j])) { same=false; break; } } if (!same) break; } } delete [] values; return same; } #endif bool CoinPackedMatrix::isEquivalent(const CoinPackedMatrix& rhs) const { return isEquivalent(rhs,CoinRelFltEq()); } /* Sort all columns so indices are increasing.in each column */ void CoinPackedMatrix::orderMatrix() { for (int i=0;i0) or duplicates This version is easy one i.e. adding columns to column ordered */ int CoinPackedMatrix::appendMajor(const int number, const CoinBigIndex * starts, const int * index, const double * element, int numberOther) { int i; int numberErrors=0; CoinBigIndex numberElements = starts[number]; if (majorDim_ + number > maxMajorDim_ || getLastStart() + numberElements > maxSize_) { // we got to resize before we add. note that the resizing method // properly fills out start_ and length_ for the major-dimension // vectors to be added! if (!extraGap_&&!extraMajor_&&numberOther<=0&&!hasGaps()) { // can do faster if (majorDim_+number>maxMajorDim_) { maxMajorDim_ = majorDim_+number; int * newLength = new int[maxMajorDim_]; CoinMemcpyN(length_, majorDim_, newLength); delete [] length_; length_ = newLength; CoinBigIndex * newStart = new CoinBigIndex[maxMajorDim_ + 1]; CoinMemcpyN(start_, majorDim_+1, newStart); delete [] start_; start_ = newStart; } if (size_+numberElements>maxSize_) { maxSize_ = size_+numberElements; double * newElem = new double[maxSize_]; CoinMemcpyN(element_,size_,newElem); delete [] element_; element_ = newElem; int * newIndex = new int[maxSize_]; CoinMemcpyN(index_,size_,newIndex); delete [] index_; index_ = newIndex; } CoinMemcpyN(index,numberElements,index_+size_); // Do minor dimension int lastMinor=-1; for (CoinBigIndex j=0;j0) { char * which = new char[numberOther]; memset(which,0,numberOther); for (i = 0; i < number; i++) { CoinBigIndex put = start_[majorDim_+i]; CoinBigIndex j; for ( j=starts[i];j=0&&iIndex=0&&iIndex0) { char * which = new char[numberOther]; memset(which,0,numberOther); for (i = 0; i < number; i++) { CoinBigIndex put = start_[majorDim_+i]; CoinBigIndex j; for ( j=starts[i];j=0&&iIndex=0&&iIndex0) or duplicates This version is harder one i.e. adding columns to row ordered */ int CoinPackedMatrix::appendMinor(const int number, const CoinBigIndex * starts, const int * index, const double * element, int numberOther) { int i; int numberErrors=0; // first compute how many entries will be added to each major-dimension // vector, and if needed, resize the matrix to accommodate all int * addedEntries = NULL; if (numberOther>0) { addedEntries = new int[majorDim_]; CoinZeroN(addedEntries,majorDim_); numberOther=majorDim_; char * which = new char[numberOther]; memset(which,0,numberOther); for (i = 0; i < number; i++) { CoinBigIndex j; for ( j=starts[i];j=0&&iIndex=0&&iIndexmajorDim_) { if (isColOrdered()) setDimensions(-1,largest+1); else setDimensions(largest+1,-1); } addedEntries = new int[majorDim_]; CoinZeroN(addedEntries,majorDim_); // no checking for (i = 0; i < number; i++) { CoinBigIndex j; for ( j=starts[i];j= 0; i--) { if (start_[i] + length_[i] + addedEntries[i] > start_[i+1]) break; } if (i >= 0) resizeForAddingMinorVectors(addedEntries); delete[] addedEntries; // now insert the entries of matrix for (i = 0; i < number; i++) { CoinBigIndex j; for ( j=starts[i];j= 0; i--) { CoinBigIndex start = start_[i]; if (start + length_[i] + newStart[i] <= nextStart) { nextStart=start; } else { packType=-1; #ifdef ADD_ROW_ANALYZE nBad++; #else break; #endif } } } else { // Need more space packType=1; } #ifdef ADD_ROW_ANALYZE if (!hasGaps()) xxxxxx[9]++; if (packType==-1&&nBad<6) packType=nBad+1; xxxxxx[packType+2]++; if ((xxxxxx[0]%100)==0) { printf("Append "); for (int i=0;i<10;i++) printf("%d ",xxxxxx[i]); printf("\n"); } #endif if (hasGaps()&&packType) packType=1; CoinBigIndex n = 0; if (packType) { double slack = (static_cast (maxSize_-size_-numberAdded))/ static_cast (majorDim_); slack = CoinMax(0.0,slack-0.01); if (!slack) { for (int i = 0; i < majorDim_; ++i) { int thisCount = newStart[i]; newStart[i]=n; n += length_[i] + thisCount; } } else { double added=0.0; for (int i = 0; i < majorDim_; ++i) { int thisCount = newStart[i]; newStart[i]=n; added += slack; double extra=0; if (added>=1.0) { extra = floor(added); added -= extra; } n += length_[i] + thisCount+ static_cast (extra); } } newStart[majorDim_]=n; } if (packType) { maxSize_ = CoinMax(maxSize_, n); int * newIndex = new int[maxSize_]; double * newElem = new double[maxSize_]; for (int i = majorDim_ - 1; i >= 0; --i) { CoinBigIndex start = start_[i]; #ifdef USE_MEMCPY int length = length_[i]; CoinBigIndex put = newStart[i]; CoinMemcpyN(index_+start,length,newIndex+put); CoinMemcpyN(element_+start,length,newElem+put); #else CoinBigIndex end = start+length_[i]; CoinBigIndex put = newStart[i]; for (CoinBigIndex j=start;j= n); for (int i = majorDim_ - 1; i >= 0; --i) { CoinBigIndex start = start_[i]; int length = length_[i]; CoinBigIndex end = start+length; CoinBigIndex put = newStart[i]; //if (put==start) //break; put += length; for (CoinBigIndex j=end-1;j>=start;j--) { index_[--put]=index_[j]; element_[put]=element_[j]; } } delete [] start_; start_ = newStart; } else { delete[] newStart; } // now insert the entries of matrix for (int i = 0; i < number; i++) { CoinBigIndex j; for ( j=starts[i];j= 3) { std::cout << " Matrix is " << ((colOrdered_)?"column":"row") << "-major, " << m << " rows X " << n << " cols; " << size_ << " coeffs." << std::endl ; std::cout << " Bulk store " << maxSize_ << " coeffs, last coeff at " << start_[majDim]-1 << ", ex maj " << extraMajor_ << ", ex gap " << extraGap_ ; if (gaps) std::cout << "; matrix has gaps" ; std::cout << "." << std::endl ; } const CoinBigIndex *const majStarts = start_ ; const int *const majLens = length_ ; const int *const minInds = index_ ; const double *const coeffs = element_ ; /* Set up arrays to track use of bulk store entries. */ int errs = 0 ; int zeroes = 0 ; int *refCnt = new int[maxSize_] ; CoinZeroN(refCnt,maxSize_) ; bool *inGap = new bool[maxSize_] ; CoinZeroN(inGap,maxSize_) ; for (int majndx = 0 ; majndx < majDim ; majndx++) { /* Check that the range of indices for the major vector falls within the bulk store. If any of these checks fail, it's pointless (and possibly unsafe) to do more with this vector. Subtle point: Normally, majStarts[majDim] = maxIndex+1 (one past the end of the bulk store), and majStarts[k], k < majDim, should be a valid index. But ... if the last major vector (k = majDim-1) has length 0, then majStarts[k] = maxIndex. This will propagate back through multiple major vectors of length 0. Hence the check for length = 0. */ CoinBigIndex majStart = majStarts[majndx] ; int majLen = majLens[majndx] ; if (majStart < 0 || (majStart == (maxIndex+1) && majLen != 0) || majStart > maxIndex+1) { if (verbosity >= 1) { std::cout << " " << majName << " " << majndx << ": start " << majStart << " should be between 0 and " << maxIndex << "." << std::endl ; } errs++ ; if (majStart >= maxSize_) { std::cout << " " << "index exceeds bulk store limit " << maxSize_ << "!" << std::endl ; } continue ; } if (majLen < 0 || majLen > minDim) { if (verbosity >= 1) { std::cout << " " << majName << " " << majndx << ": vector length " << majLen << " should be between 0 and " << minDim << std::endl ; } errs++ ; continue ; } CoinBigIndex majEnd = majStart+majLen ; if (majEnd < 0 || majEnd > maxIndex+1) { if (verbosity >= 1) { std::cout << " " << majName << " " << majndx << ": end " << majEnd << " should be between 0 and " << maxIndex << "." << std::endl ; } errs++ ; if (majEnd >= maxSize_) { std::cout << " " << "index exceeds bulk store limit " << maxSize_ << "!" << std::endl ; } continue ; } /* Check that the major vector length is consistent with the distance between majStart[majndx] and majStart[majndx+1]. If the matrix is gap-free, they should be equal. We've already confirmed that majStart+majLen is within the bulk store, so we can continue even if these checks fail. Recall that the final entry in the major vector start array is one past the end of the bulk store. The previous tests will check more carefully if majndx+1 is not the final entry. */ CoinBigIndex majStartp1 = majStarts[majndx+1] ; CoinBigIndex startDist = majStartp1-majStart ; if (majStartp1 < 0 || majStartp1 > maxIndex+1) { if (verbosity >= 1) { std::cout << " " << majName << " " << majndx << ": start of next " << majName << " " << majStartp1 << " should be between 0 and " << maxIndex+1 << "." << std::endl ; } errs++ ; if (majStartp1 >= maxSize_) { std::cout << " " << "index exceeds bulk store limit " << maxSize_ << "!" << std::endl ; } } else if ((startDist < 0) || ((startDist > minDim) && !gaps)) { if (verbosity >= 1) { std::cout << " " << majName << " " << majndx << ": distance between " << majName << " starts " << startDist << " should be between 0 and " << minDim << "." << std::endl ; } errs++ ; } else if (majLen > startDist) { if (verbosity >= 1) { std::cout << " " << majName << " " << majndx << ": vector length " << majLen << " should not be greater than distance between " << majName << " starts " << startDist << std::endl ; } errs++ ; } else if (majLen != startDist && !gaps) { if (verbosity >= 1) { std::cout << " " << majName << " " << majndx << ": " << majName << " length " << majLen << " should equal distance " << startDist << " between " << majName << " starts in gap-free matrix." << std::endl ; } errs++ ; } /* Scan the major dimension vector, checking for obviously bogus minor indices and coefficients. Generate reference counts for each bulk store entry. */ for (CoinBigIndex ii = majStart ; ii < majEnd ; ii++) { refCnt[ii]++ ; int minndx = minInds[ii] ; if (minndx < 0 || minndx >= minDim) { if (verbosity >= 1) { std::cout << " " << majName << " " << majndx << ": " << minName << " index " << ii << " is " << minndx << ", should be between 0 and " << minDim-1 << "." << std::endl ; } errs++ ; } double aij = coeffs[ii] ; if (CoinIsnan(aij) || CoinAbs(aij) > largeCoeff) { if (verbosity >= 1) { std::cout << " (" << ii << ") a<" << majndx << "," << minndx << "> = " << aij << " appears bogus." << std::endl ; } errs++ ; } if (CoinAbs(aij) < smallCoeff) { if (verbosity >= 4 || zeroesAreError) { std::cout << " (" << ii << ") a<" << majndx << "," << minndx << "> = " << aij << " appears bogus." << std::endl ; } zeroes++ ; } } /* And mark the gaps, if any. */ if (gaps) { for (CoinBigIndex ii = majEnd ; ii < majStartp1 ; ii++) inGap[ii] = true ; } } /* Check the reference counts. They should all be 1 unless the entry is in a gap, in which case it should be zero. Anything else is a problem. Allow that the matrix may not use the full size of the bulk store. */ for (CoinBigIndex ii = 0 ; ii <= maxIndex ; ii++) { if (!((refCnt[ii] == 1 && inGap[ii] == false) || (refCnt[ii] == 0 && inGap[ii] == true))) { if (verbosity >= 1) { std::cout << " Bulk store entry " << ii << " has reference count " << refCnt[ii] << "; should be " << ((inGap[ii])?0:1) << "." << std::endl ; } errs++ ; } } delete[] refCnt ; /* Report the result. */ if (zeroesAreError) errs += zeroes ; if (errs > 0) { if (verbosity >= 1) { std::cout << " Detected " << errs << " errors in matrix" ; if (zeroes) std::cout << " (includes " << zeroes << " zeroes)" ; std::cout << "." << std::endl ; } } else { if (verbosity >= 2) { std::cout << " Matrix verified" ; if (zeroes) std::cout << " (" << zeroes << " zeroes)" ; std::cout << "." << std::endl ; } } return (errs) ; } CoinUtils-2.9.10/CoinUtils/src/CoinFinite.hpp0000644000076600007660000000234211556760714017447 0ustar coincoin/* $Id: CoinFinite.hpp 1423 2011-04-30 10:17:48Z stefan $ */ // 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). /* Defines COIN_DBL_MAX and relatives and provides CoinFinite and CoinIsnan. */ #ifndef CoinFinite_H #define CoinFinite_H #include //============================================================================= // Smallest positive double value and Plus infinity (double and int) #if 1 const double COIN_DBL_MIN = std::numeric_limits::min(); const double COIN_DBL_MAX = std::numeric_limits::max(); const int COIN_INT_MAX = std::numeric_limits::max(); const double COIN_INT_MAX_AS_DOUBLE = std::numeric_limits::max(); #else #define COIN_DBL_MIN (std::numeric_limits::min()) #define COIN_DBL_MAX (std::numeric_limits::max()) #define COIN_INT_MAX (std::numeric_limits::max()) #define COIN_INT_MAX_AS_DOUBLE (std::numeric_limits::max()) #endif /** checks if a double value is finite (not infinity and not NaN) */ extern bool CoinFinite(double val); /** checks if a double value is not a number */ extern bool CoinIsnan(double val); #endif CoinUtils-2.9.10/CoinUtils/src/CoinParamUtils.cpp0000644000076600007660000005432511630460621020300 0ustar coincoin/* $Id: CoinParamUtils.cpp 1468 2011-09-03 17:19:13Z stefan $ */ // Copyright (C) 2007, 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 "CoinUtilsConfig.h" #include "CoinParam.hpp" #include #include #include #ifdef COIN_HAS_READLINE #include #include #endif /* Unnamed local namespace */ namespace { /* cmdField: The index of the current command line field. Forced to -1 when accepting commands from stdin (interactive) or a command file. readSrc: Current input source. pendingVal: When the form param=value is encountered, both keyword and value form one command line field. We need to return `param' as the field and somehow keep the value around for the upcoming call that'll request it. That's the purpose of pendingVal. */ int cmdField = 1 ; FILE *readSrc = stdin ; std::string pendingVal = "" ; /* Get next command or field in command. When in interactive mode, prompt the user and read the resulting line of input. */ std::string nextField (const char *prompt) { static char line[1000] ; static char *where = NULL ; std::string field ; const char *dflt_prompt = "Eh? " ; if (prompt == 0) { prompt = dflt_prompt ; } /* Do we have a line at the moment? If not, acquire one. When we're done, line holds the input line and where points to the start of the line. If we're using the readline library, add non-empty lines to the history list. */ if (!where) { #ifdef COIN_HAS_READLINE if (readSrc == stdin) { where = readline(prompt) ; if (where) { if (*where) add_history (where) ; strcpy(line,where) ; free(where) ; where = line ; } } else { where = fgets(line,1000,readSrc) ; } #else if (readSrc == stdin) { fprintf(stdout,"%s",prompt) ; fflush(stdout) ; } where = fgets(line,1000,readSrc) ; #endif /* If where is NULL, we have EOF. Return a null string. */ if (!where) return field ; /* Clean the image. Trailing junk first. The line will be cut off at the last non-whitespace character, but we need to scan until we find the end of the string or some other non-printing character to make sure we don't miss a printing character after whitespace. */ char *lastNonBlank = line-1 ; for (where = line ; *where != '\0' ; where++) { if (*where != '\t' && *where < ' ') { break ; } if (*where != '\t' && *where != ' ') { lastNonBlank = where ; } } *(lastNonBlank+1) = '\0' ; where = line ; } /* Munch through leading white space. */ while (*where == ' ' || *where == '\t') where++ ; /* See if we can separate a field; if so, copy it over into field for return. If we're out of line, return the string "EOL". */ char *saveWhere = where ; while (*where != ' ' && *where != '\t' && *where!='\0') where++ ; if (where != saveWhere) { char save = *where ; *where = '\0' ; field = saveWhere ; *where = save ; } else { where = NULL ; field = "EOL" ; } return (field) ; } } /* Visible functions */ namespace CoinParamUtils { /* As mentioned above, cmdField set to -1 is the indication that we're reading from stdin or a file. */ void setInputSrc (FILE *src) { if (src != 0) { cmdField = -1 ; readSrc = src ; } } /* A utility to allow clients to determine if we're processing parameters from the comand line or otherwise. */ bool isCommandLine () { assert(cmdField != 0) ; if (cmdField > 0) { return (true) ; } else { return (false) ; } } /* A utility to allow clients to determine if we're accepting parameters interactively. */ bool isInteractive () { assert(cmdField != 0) ; if (cmdField < 0 && readSrc == stdin) { return (true) ; } else { return (false) ; } } /* Utility functions for acquiring input. */ /* Return the next field (word) from the current command line. Generally, this is expected to be of the form `-param' or `--param', with special cases as set out below. If we're in interactive mode (cmdField == -1), nextField does all the work to prompt the user and return the next field from the resulting input. It is assumed that the user knows not to use `-' or `--' prefixes in interactive mode. If we're in command line mode (cmdField > 0), cmdField indicates the current command line word. The order of processing goes like this: * A stand-alone `-' is converted to `stdin' * A stand-alone '--' is returned as a word; interpretation is up to the client. * A prefix of '-' or '--' is stripped from the field. If the result is `stdin', it's assumed we're switching to interactive mode and the user is prompted for another command. Whatever results from the above sequence is returned to the client as the next field. An empty string indicates end of input. Prompt will be used by nextField if it's necessary to prompt the user for a command (only when reading from stdin). If provided, pfx is set to the prefix ("-", "--", or "") stripped from the field. Lack of prefix is not necessarily an error because of the following scenario: To read a file, the verbose command might be "foo -import myfile". But we might want to allow a short form, "foo myfile". And we'd like "foo import" to be interpreted as "foo -import import" (i.e., import the file named `import'). */ std::string getCommand (int argc, const char *argv[], const std::string prompt, std::string *pfx) { std::string field = "EOL" ; pendingVal = "" ; int pfxlen ; if (pfx != 0) { (*pfx) = "" ; } /* Acquire the next field, and convert as outlined above if we're processing command line parameters. */ while (field == "EOL") { pfxlen = 0 ; if (cmdField > 0) { if (cmdField < argc) { field = argv[cmdField++] ; if (field == "-") { field = "stdin" ; } else if (field == "--") { /* Prevent `--' from being eaten by next case. */ } else { if (field[0] == '-') { pfxlen = 1 ; if (field[1] == '-') pfxlen = 2 ; if (pfx != 0) (*pfx) = field.substr(0,pfxlen) ; field = field.substr(pfxlen) ; } } } else { field = "" ; } } else { field = nextField(prompt.c_str()) ; } if (field == "stdin") { std::cout << "Switching to line mode" << std::endl ; cmdField = -1 ; field = nextField(prompt.c_str()) ; } } /* Are we left with something of the form param=value? If so, separate the pieces, returning `param' and saving `value' for later use as per comments at the head of the file. */ std::string::size_type found = field.find('='); if (found != std::string::npos) { pendingVal = field.substr(found+1) ; field = field.substr(0,found) ; } return (field) ; } /* Function to look up a parameter keyword (name) in the parameter vector and deal with the result. The keyword may end in one or more `?' characters; this is a query for information about matching parameters. If we have a single match satisfying the minimal match requirements, and there's no query, we simply return the index of the matching parameter in the parameter vector. If there are no matches, and no query, the return value will be -3. No matches on a query returns -1. A single short match, or a single match of any length with a query, will result in a short help message If present, these values are set as follows: * matchCntp is set to the number of parameters that matched. * shortCntp is set to the number of matches that failed to meet the minimum match requirement. * queryCntp is set to the number of trailing `?' characters at the end of name. Return values: >0: index of the single unique match for the name -1: query present -2: no query, one or more short matches -3: no query, no match -4: multiple full matches (indicates configuration error) The final three parameters (matchCnt, shortCnt, queryCnt) are optional and default to null. Use them if you want more detail on the match. */ int lookupParam (std::string name, CoinParamVec ¶mVec, int *matchCntp, int *shortCntp, int *queryCntp) { int retval = -3 ; if (matchCntp != 0) { *matchCntp = 0 ; } if (shortCntp != 0) { *shortCntp = 0 ; } if (queryCntp != 0) { *queryCntp = 0 ; } /* Is there anything here at all? */ if (name.length() == 0) { return (retval) ; } /* Scan the parameter name to see if it ends in one or more `?' characters. If so, take it as a request to return a list of parameters that match name up to the first `?'. The strings '?' and '???' are considered to be valid parameter names (short and long help, respectively) and are handled as special cases: If the whole string is `?'s, one and three are commands as is, while 2 and 4 or more are queries about `?' or `???'. */ int numQuery = 0 ; { int length = static_cast(name.length()) ; int i ; for (i = length-1 ; i >= 0 && name[i] == '?' ; i--) { numQuery++ ; } if (numQuery == length) { switch (length) { case 1: case 3: { numQuery = 0 ; break ; } case 2: { numQuery -= 1 ; break ; } default: { numQuery -= 3 ; break ; } } } name = name.substr(0,length-numQuery) ; if (queryCntp != 0) { *queryCntp = numQuery ; } } /* See if we can match the parameter name. On return, matchNdx is set to the last match satisfying the minimal match criteria, or -1 if there's no match. matchCnt is the number of matches satisfying the minimum match length, and shortCnt is possible matches that were short of the minimum match length, */ int matchNdx = -1 ; int shortCnt = 0 ; int matchCnt = CoinParamUtils::matchParam(paramVec,name,matchNdx,shortCnt) ; /* Set up return values before we get into further processing. */ if (matchCntp != 0) { *matchCntp = matchCnt ; } if (shortCntp != 0) { *shortCntp = shortCnt ; } if (numQuery > 0) { retval = -1 ; } else { if (matchCnt+shortCnt == 0) { retval = -3 ; } else if (matchCnt > 1) { retval = -4 ; } else { retval = -2 ; } } /* No matches? Nothing more to be done here. */ if (matchCnt+shortCnt == 0) { return (retval) ; } /* A unique match and no `?' in the name says we have our parameter. Return the result. */ if (matchCnt == 1 && shortCnt == 0 && numQuery == 0) { assert (matchNdx >= 0 && matchNdx < static_cast(paramVec.size())) ; return (matchNdx) ; } /* A single match? There are two possibilities: * The string specified is shorter than the match length requested by the parameter. (Useful for avoiding inadvertent execution of commands that the client might regret.) * The string specified contained a `?', in which case we print the help. The match may or may not be short. */ if (matchCnt+shortCnt == 1) { CoinParamUtils::shortOrHelpOne(paramVec,matchNdx,name,numQuery) ; return (retval) ; } /* The final case: multiple matches. Most commonly this will be multiple short matches. If we have multiple matches satisfying the minimal length criteria, we have a configuration problem. The other question is whether the user wanted help information. Two question marks gets short help. */ if (matchCnt > 1) { std::cout << "Configuration error! `" << name <<"' was fully matched " << matchCnt << " times!" << std::endl ; } std::cout << "Multiple matches for `" << name << "'; possible completions:" << std::endl ; CoinParamUtils::shortOrHelpMany(paramVec,name,numQuery) ; return (retval) ; } /* Utility functions to acquire parameter values from the command line. For all of these, a pendingVal is consumed if it exists. */ /* Read a string and return a pointer to the string. Set valid to indicate the result of parsing: 0: okay, 1: , 2: not present. */ std::string getStringField (int argc, const char *argv[], int *valid) { std::string field ; if (pendingVal != "") { field = pendingVal ; pendingVal = "" ; } else { field = "EOL" ; if (cmdField > 0) { if (cmdField < argc) { field = argv[cmdField++] ; } } else { field = nextField(0) ; } } if (valid != 0) { if (field != "EOL") { *valid = 0 ; } else { *valid = 2 ; } } return (field) ; } /* Read an int and return the value. Set valid to indicate the result of parsing: 0: okay, 1: parse error, 2: not present. */ int getIntField (int argc, const char *argv[], int *valid) { std::string field ; if (pendingVal != "") { field = pendingVal ; pendingVal = "" ; } else { field = "EOL" ; if (cmdField > 0) { if (cmdField < argc) { field = argv[cmdField++] ; } } else { field = nextField(0) ; } } /* The only way to check for parse error here is to set the system variable errno to 0 and then see if it's nonzero after we try to convert the string to integer. */ int value = 0 ; errno = 0 ; if (field != "EOL") { value = atoi(field.c_str()) ; } if (valid != 0) { if (field != "EOL") { if (errno == 0) { *valid = 0 ; } else { *valid = 1 ; } } else { *valid = 2 ; } } return (value) ; } /* Read a double and return the value. Set valid to indicate the result of parsing: 0: okay, 1: bad parse, 2: not present. But we'll never return valid == 1 because atof gives us no way to tell.) */ double getDoubleField (int argc, const char *argv[], int *valid) { std::string field ; if (pendingVal != "") { field = pendingVal ; pendingVal = "" ; } else { field = "EOL" ; if (cmdField > 0) { if (cmdField < argc) { field = argv[cmdField++] ; } } else { field = nextField(0) ; } } /* The only way to check for parse error here is to set the system variable errno to 0 and then see if it's nonzero after we try to convert the string to integer. */ double value = 0.0 ; errno = 0 ; if (field != "EOL") { value = atof(field.c_str()) ; } if (valid != 0) { if (field != "EOL") { if (errno == 0) { *valid = 0 ; } else { *valid = 1 ; } } else { *valid = 2 ; } } return (value) ; } /* Utility function to scan a parameter vector for matches. Sets matchNdx to the index of the last parameter that meets the minimal match criteria (but note there should be at most one such parameter if the parameter vector is properly configured). Sets shortCnt to the number of short matches (should be zero in a properly configured vector if a minimal match is found). Returns the number of matches satisfying the minimal match requirement (should be 0 or 1 in a properly configured vector). The routine allows for the possibility of null entries in the parameter vector. In order to handle `?' and `???', there's nothing to it but to force a unique match if we match `?' exactly. (This is another quirk of clp/cbc parameter parsing, which we need to match for historical reasons.) */ int matchParam (const CoinParamVec ¶mVec, std::string name, int &matchNdx, int &shortCnt) { int vecLen = static_cast(paramVec.size()) ; int matchCnt = 0 ; matchNdx = -1 ; shortCnt = 0 ; for (int i = 0 ; i < vecLen ; i++) { CoinParam *param = paramVec[i] ; if (param == 0) continue ; int match = paramVec[i]->matches(name) ; if (match == 1) { matchNdx = i ; matchCnt++ ; if (name == "?") { matchCnt = 1 ; break ; } } else { shortCnt += match>>1 ; } } return (matchCnt) ; } /* Now a bunch of routines that are useful in the context of generating help messages. */ /* Simple formatting routine for long messages. Used to print long help for parameters. Lines are broken at the first white space after 65 characters, or when an explicit return (`\n') character is scanned. Leading spaces are suppressed. */ void printIt (const char *msg) { int length = static_cast(strlen(msg)) ; char temp[101] ; int i ; int n = 0 ; for (i = 0 ; i < length ; i++) { if (msg[i] == '\n' || (n >= 65 && (msg[i] == ' ' || msg[i] == '\t'))) { temp[n] = '\0' ; std::cout << temp << std::endl ; n = 0 ; } else if (n || msg[i] != ' ') { temp[n++] = msg[i] ; } } if (n > 0) { temp[n] = '\0' ; std::cout << temp << std::endl ; } return ; } /* Utility function for the case where a name matches a single parameter, but either it's short, or the user wanted help, or both. The routine allows for the possibility that there are null entries in the parameter vector, but matchNdx should point to a valid entry if it's >= 0. */ void shortOrHelpOne (CoinParamVec ¶mVec, int matchNdx, std::string name, int numQuery) { int i ; int numParams = static_cast(paramVec.size()) ; int lclNdx = -1 ; /* For a short match, we need to look up the parameter again. This should find a short match, given the conditions where this routine is called. But be prepared to find a full match. If matchNdx >= 0, just use the index we're handed. */ if (matchNdx < 0) { int match = 0 ; for (i = 0 ; i < numParams ; i++) { CoinParam *param = paramVec[i] ; if (param == 0) continue ; int match = param->matches(name) ; if (match != 0) { lclNdx = i ; break ; } } assert (lclNdx >= 0) ; if (match == 1) { std::cout << "Match for '" << name << "': " << paramVec[matchNdx]->matchName() << "." ; } else { std::cout << "Short match for '" << name << "'; possible completion: " << paramVec[lclNdx]->matchName() << "." ; } } else { assert(matchNdx >= 0 && matchNdx < static_cast(paramVec.size())) ; std::cout << "Match for `" << name << "': " << paramVec[matchNdx]->matchName() ; lclNdx = matchNdx ; } /* Print some help, if there was a `?' in the name. `??' gets the long help. */ if (numQuery > 0) { std::cout << std::endl ; if (numQuery == 1) { std::cout << paramVec[lclNdx]->shortHelp() ; } else { paramVec[lclNdx]->printLongHelp() ; } } std::cout << std::endl ; return ; } /* Utility function for the case where a name matches multiple parameters. Zero or one `?' gets just the matching names, while `??' gets short help with each match. The routine allows for the possibility that there are null entries in the parameter vector. */ void shortOrHelpMany (CoinParamVec ¶mVec, std::string name, int numQuery) { int numParams = static_cast(paramVec.size()) ; /* Scan the parameter list. For each match, print just the name, or the name and short help. */ int lineLen = 0 ; bool printed = false ; for (int i = 0 ; i < numParams ; i++) { CoinParam *param = paramVec[i] ; if (param == 0) continue ; int match = param->matches(name) ; if (match > 0) { std::string nme = param->matchName() ; int len = static_cast(nme.length()) ; if (numQuery >= 2) { std::cout << nme << " : " << param->shortHelp() ; std::cout << std::endl ; } else { lineLen += 2+len ; if (lineLen > 80) { std::cout << std::endl ; lineLen = 2+len ; } std::cout << " " << nme ; printed = true ; } } } if (printed) { std::cout << std::endl ; } return ; } /* A generic help message that explains the basic operation of parameter parsing. */ void printGenericHelp () { std::cout << std::endl ; std::cout << "For command line arguments, keywords have a leading `-' or '--'; " << std::endl ; std::cout << "-stdin or just - switches to stdin with a prompt." << std::endl ; std::cout << "When prompted, one command per line, without the leading `-'." << std::endl ; std::cout << "abcd value sets abcd to value." << std::endl ; std::cout << "abcd without a value (where one is expected) gives the current value." << std::endl ; std::cout << "abcd? gives a list of possible matches; if there's only one, a short" << std::endl ; std::cout << "help message is printed." << std::endl ; std::cout << "abcd?? prints the short help for all matches; if there's only one" << std::endl ; std::cout << "match, a longer help message and current value are printed." << std::endl ; return ; } /* Utility function for various levels of `help' command. The entries between paramVec[firstParam] and paramVec[lastParam], inclusive, will be printed. If shortHelp is true, the short help message will be printed for each parameter. If longHelp is true, the long help message will be printed for each parameter. If hidden is true, even parameters with display = false will be printed. Each line is prefaced with the specified prefix. The routine allows for the possibility that there are null entries in the parameter vector. */ void printHelp (CoinParamVec ¶mVec, int firstParam, int lastParam, std::string prefix, bool shortHelp, bool longHelp, bool hidden) { bool noHelp = !(shortHelp || longHelp) ; int i ; int pfxLen = static_cast(prefix.length()) ; bool printed = false ; if (noHelp) { int lineLen = 0 ; for (i = firstParam ; i <= lastParam ; i++) { CoinParam *param = paramVec[i] ; if (param == 0) continue ; if (param->display() || hidden) { std::string nme = param->matchName() ; int len = static_cast(nme.length()) ; if (!printed) { std::cout << std::endl << prefix ; lineLen += pfxLen ; printed = true ; } lineLen += 2+len ; if (lineLen > 80) { std::cout << std::endl << prefix ; lineLen = pfxLen+2+len ; } std::cout << " " << nme ; } } if (printed) { std::cout << std::endl ; } } else if (shortHelp) { for (i = firstParam ; i <= lastParam ; i++) { CoinParam *param = paramVec[i] ; if (param == 0) continue ; if (param->display() || hidden) { std::cout << std::endl << prefix ; std::cout << param->matchName() ; std::cout << ": " ; std::cout << param->shortHelp() ; } } std::cout << std::endl ; } else if (longHelp) { for (i = firstParam ; i <= lastParam ; i++) { CoinParam *param = paramVec[i] ; if (param == 0) continue ; if (param->display() || hidden) { std::cout << std::endl << prefix ; std::cout << "Command: " << param->matchName() ; std::cout << std::endl << prefix ; std::cout << "---- description" << std::endl ; printIt(param->longHelp().c_str()) ; std::cout << prefix << "----" << std::endl ; } } } std::cout << std::endl ; return ; } } // end namespace CoinParamUtils CoinUtils-2.9.10/CoinUtils/src/config_coinutils.h.in0000644000076600007660000000122012215120127020772 0ustar coincoin/* inc/config_coinutils.h.in. */ #ifndef __CONFIG_COINUTILS_H__ #define __CONFIG_COINUTILS_H__ /* Define to 1 if stdint.h is available for CoinUtils */ #undef COINUTILS_HAS_STDINT_H /* Version number of project */ #undef COINUTILS_VERSION /* Major Version number of project */ #undef COINUTILS_VERSION_MAJOR /* Minor Version number of project */ #undef COINUTILS_VERSION_MINOR /* Release Version number of project */ #undef COINUTILS_VERSION_RELEASE /* Define to 64bit integer type */ #undef COIN_INT64_T /* Define to integer type capturing pointer */ #undef COIN_INTPTR_T /* Define to 64bit unsigned integer type */ #undef COIN_UINT64_T #endif CoinUtils-2.9.10/CoinUtils/src/CoinPresolveTripleton.cpp0000644000076600007660000007451412130104232021706 0ustar coincoin/* $Id: CoinPresolveTripleton.cpp 1585 2013-04-06 20:42:02Z stefan $ */ // 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). #include #include #include "CoinFinite.hpp" #include "CoinHelperFunctions.hpp" #include "CoinPresolveMatrix.hpp" #include "CoinPresolveEmpty.hpp" // for DROP_COL/DROP_ROW #include "CoinPresolveZeros.hpp" #include "CoinPresolveFixed.hpp" #include "CoinPresolveTripleton.hpp" #include "CoinPresolvePsdebug.hpp" #include "CoinMessage.hpp" #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #include "CoinPresolvePsdebug.hpp" #endif /* * Substituting y away: * * y = (c - a x - d z) / b * * so adjust bounds by: c/b * and x by: -a/b * and z by: -d/b * * This affects both the row and col representations. * * mcstrt only modified if the column must be moved. * * for every row in icoly * if icolx is also has an entry for row * modify the icolx entry for row * drop the icoly entry from row and modify the icolx entry * else * add a new entry to icolx column * create a new icolx entry * (this may require moving the column in memory) * replace icoly entry from row and replace with icolx entry * * same for icolz * The row and column reps are inconsistent during the routine, * because icolx in the column rep is updated, and the entries corresponding * to icolx in the row rep are updated, but nothing concerning icoly * in the col rep is changed. icoly entries in the row rep are deleted, * and icolx entries in both reps are consistent. * At the end, we set the length of icoly to be zero, so the reps would * be consistent if the row were deleted from the row rep. * Both the row and icoly must be removed from both reps. * In the col rep, icoly will be eliminated entirely, at the end of the routine; * irow occurs in just two columns, one of which (icoly) is eliminated * entirely, the other is icolx, which is not deleted here. * In the row rep, irow will be eliminated entirely, but not here; * icoly is removed from the rows it occurs in. */ static bool elim_tripleton(const char * #if PRESOLVE_DEBUG > 1 msg #endif , CoinBigIndex *mcstrt, double *rlo, double * acts, double *rup, double *colels, int *hrow, int *hcol, int *hinrow, int *hincol, presolvehlink *clink, int ncols, presolvehlink *rlink, int nrows, CoinBigIndex *mrstrt, double *rowels, //double a, double b, double c, double coeff_factorx,double coeff_factorz, double bounds_factor, int row0, int icolx, int icoly, int icolz) { CoinBigIndex kcs = mcstrt[icoly]; CoinBigIndex kce = kcs + hincol[icoly]; CoinBigIndex kcsx = mcstrt[icolx]; CoinBigIndex kcex = kcsx + hincol[icolx]; CoinBigIndex kcsz = mcstrt[icolz]; CoinBigIndex kcez = kcsz + hincol[icolz]; # if PRESOLVE_DEBUG > 1 printf("%s %d x=%d y=%d z=%d cfx=%g cfz=%g nx=%d yrows=(", msg, row0,icolx,icoly,icolz,coeff_factorx,coeff_factorz,hincol[icolx]) ; # endif for (CoinBigIndex kcoly=kcs; kcoly 0*/) { if (bounds_factor != 0.0) { // (1) if (-PRESOLVE_INF < rlo[row]) rlo[row] -= colels[kcoly] * bounds_factor; // (2) if (rup[row] < PRESOLVE_INF) rup[row] -= colels[kcoly] * bounds_factor; // and solution if (acts) { acts[row] -= colels[kcoly] * bounds_factor; } } // see if row appears in colx CoinBigIndex kcolx = presolve_find_row1(row, kcsx, kcex, hrow); # if PRESOLVE_DEBUG > 1 printf("%d%s ",row,(kcolx 1 printf("%d%s ",row,(kcolz=kcex&&kcolz 1 printf(")\n") ; # endif // delete the whole column hincol[icoly] = 0; return (false); } /* * * The col rep and row rep must be consistent. */ const CoinPresolveAction *tripleton_action::presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next) { double *colels = prob->colels_; int *hrow = prob->hrow_; CoinBigIndex *mcstrt = prob->mcstrt_; int *hincol = prob->hincol_; int ncols = prob->ncols_; double *clo = prob->clo_; double *cup = prob->cup_; double *rowels = prob->rowels_; int *hcol = prob->hcol_; CoinBigIndex *mrstrt = prob->mrstrt_; int *hinrow = prob->hinrow_; int nrows = prob->nrows_; double *rlo = prob->rlo_; double *rup = prob->rup_; presolvehlink *clink = prob->clink_; presolvehlink *rlink = prob->rlink_; const unsigned char *integerType = prob->integerType_; double *cost = prob->cost_; int numberLook = prob->numberRowsToDo_; int iLook; int * look = prob->rowsToDo_; const double ztolzb = prob->ztolzb_; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 # if PRESOLVE_DEBUG > 0 std::cout << "Entering tripleton_action::presolve; considering " << numberLook << " rows." << std::endl ; # endif presolve_consistent(prob) ; presolve_links_ok(prob) ; presolve_check_sol(prob) ; presolve_check_nbasic(prob) ; # endif # if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 int startEmptyRows = 0 ; int startEmptyColumns = 0 ; startEmptyRows = prob->countEmptyRows() ; startEmptyColumns = prob->countEmptyCols() ; # if COIN_PRESOLVE_TUNING > 0 double startTime = 0.0; if (prob->tuning_) startTime = CoinCpuTime() ; # endif # endif action * actions = new action [nrows]; # ifdef ZEROFAULT // initialise alignment padding bytes memset(actions,0,nrows*sizeof(action)) ; # endif int nactions = 0; int *zeros = prob->usefulColumnInt_; //new int[ncols]; char * mark = reinterpret_cast(zeros+ncols); memset(mark,0,ncols); int nzeros = 0; // If rowstat exists then all do unsigned char *rowstat = prob->rowstat_; double *acts = prob->acts_; // unsigned char * colstat = prob->colstat_; # if PRESOLVE_CONSISTENCY > 0 presolve_links_ok(prob) ; # endif // wasfor (int irow=0; irow 0) { break; } } PRESOLVEASSERT(k 0) { break; } } PRESOLVEASSERT(k 0) { break; } } PRESOLVEASSERT(k0.0) { if(coeffx*coeffy>0.0) continue; } else if (coeffx*coeffy>0.0) { int iTemp = icoly; icoly=icolz; icolz=iTemp; double dTemp = coeffy; coeffy=coeffz; coeffz=dTemp; } else { int iTemp = icoly; icoly=icolx; icolx=iTemp; double dTemp = coeffy; coeffy=coeffx; coeffx=dTemp; } // Not all same sign and y is odd one out // don't bother with fixed variables if (!(fabs(cup[icolx] - clo[icolx]) < ZTOLDP) && !(fabs(cup[icoly] - clo[icolx]) < ZTOLDP) && !(fabs(cup[icolz] - clo[icoly]) < ZTOLDP)) { assert (coeffx*coeffz>0.0&&coeffx*coeffy<0.0); // Only do if does not give implicit bounds on x and z double cx = - coeffx/coeffy; double cz = - coeffz/coeffy; /* don't do if y integer for now */ if (integerType[icoly]) { #define PRESOLVE_DANGEROUS #ifndef PRESOLVE_DANGEROUS continue; #else if (!integerType[icolx]||!integerType[icolz]) continue; if (cx!=floor(cx+0.5)||cz!=floor(cz+0.5)) continue; #endif } double rhsRatio = rhs/coeffy; if (clo[icoly]>-1.0e30) { if (clo[icolx]<-1.0e30||clo[icolz]<-1.0e30) continue; if (cx*clo[icolx]+cz*clo[icolz]+rhsRatio1.0e30||cup[icolz]>1.0e30) continue; if (cx*cup[icolx]+cz*cup[icolz]+rhsRatio>cup[icoly]+ztolzb) continue; } /* find this row in each of the columns and do counts */ bool singleton=false; for (k=mcstrt[icoly]; ksetRowUsed(jrow); } int nDuplicate=0; for (k=mcstrt[icolx]; krowUsed(jrow)) nDuplicate++;; } for (k=mcstrt[icolz]; krowUsed(jrow)) nDuplicate++;; } int nAdded=hincol[icoly]-3-nDuplicate; for (k=mcstrt[icoly]; kunsetRowUsed(jrow); } // let singleton rows be taken care of first if (singleton) continue; //if (nAdded<=1) //printf("%d elements added, hincol %d , dups %d\n",nAdded,hincol[icoly],nDuplicate); if (nAdded>2) continue; // it is possible that both x/z and y are singleton columns // that can cause problems if ((hincol[icolx] == 1 ||hincol[icolz] == 1) && hincol[icoly] == 1) continue; // common equations are of the form ax + by = 0, or x + y >= lo { action *s = &actions[nactions]; nactions++; PRESOLVE_DETAIL_PRINT(printf("pre_tripleton %dR %dC %dC %dC E\n", irow,icoly,icolx,icolz)); s->row = irow; s->icolx = icolx; s->icolz = icolz; s->icoly = icoly; s->cloy = clo[icoly]; s->cupy = cup[icoly]; s->costy = cost[icoly]; s->rlo = rlo[irow]; s->rup = rup[irow]; s->coeffx = coeffx; s->coeffy = coeffy; s->coeffz = coeffz; s->ncoly = hincol[icoly]; s->colel = presolve_dupmajor(colels, hrow, hincol[icoly], mcstrt[icoly]); } // costs // the effect of maxmin cancels out cost[icolx] += cost[icoly] * cx; cost[icolz] += cost[icoly] * cz; prob->change_bias(cost[icoly] * rhs / coeffy); //if (cost[icoly]*rhs) //printf("change %g col %d cost %g rhs %g coeff %g\n",cost[icoly]*rhs/coeffy, // icoly,cost[icoly],rhs,coeffy); if (rowstat) { // update solution and basis int numberBasic=0; if (prob->columnIsBasic(icoly)) numberBasic++; if (prob->rowIsBasic(irow)) numberBasic++; if (numberBasic>1) { if (!prob->columnIsBasic(icolx)) prob->setColumnStatus(icolx,CoinPrePostsolveMatrix::basic); else prob->setColumnStatus(icolz,CoinPrePostsolveMatrix::basic); } } // Update next set of actions { prob->addCol(icolx); int i,kcs,kce; kcs = mcstrt[icoly]; kce = kcs + hincol[icoly]; for (i=kcs;iaddRow(row); } kcs = mcstrt[icolx]; kce = kcs + hincol[icolx]; for (i=kcs;iaddRow(row); } prob->addCol(icolz); kcs = mcstrt[icolz]; kce = kcs + hincol[icolz]; for (i=kcs;iaddRow(row); } } /* transfer the colx factors to coly */ bool no_mem = elim_tripleton("ELIMT", mcstrt, rlo, acts, rup, colels, hrow, hcol, hinrow, hincol, clink, ncols, rlink, nrows, mrstrt, rowels, cx, cz, rhs / coeffy, irow, icolx, icoly,icolz); if (no_mem) throwCoinError("out of memory", "tripleton_action::presolve"); // now remove irow from icolx and icolz in the col rep // better if this were first. presolve_delete_from_col(irow,icolx,mcstrt,hincol,hrow,colels) ; presolve_delete_from_col(irow,icolz,mcstrt,hincol,hrow,colels) ; // eliminate irow entirely from the row rep hinrow[irow] = 0; // eliminate irow entirely from the row rep PRESOLVE_REMOVE_LINK(rlink, irow); // eliminate coly entirely from the col rep PRESOLVE_REMOVE_LINK(clink, icoly); cost[icoly] = 0.0; rlo[irow] = 0.0; rup[irow] = 0.0; if (!mark[icolx]) { mark[icolx]=1; zeros[nzeros++]=icolx; } if (!mark[icolz]) { mark[icolz]=1; zeros[nzeros++]=icolz; } } # if PRESOLVE_CONSISTENCY > 0 presolve_links_ok(prob) ; presolve_consistent(prob); # endif } } if (nactions) { # if PRESOLVE_SUMMARY > 0 printf("NTRIPLETONS: %d\n", nactions); # endif action *actions1 = new action[nactions]; CoinMemcpyN(actions, nactions, actions1); next = new tripleton_action(nactions, actions1, next); if (nzeros) { next = drop_zero_coefficients_action::presolve(prob, zeros, nzeros, next); } } //delete[]zeros; deleteAction(actions,action*); # if COIN_PRESOLVE_TUNING > 0 if (prob->tuning_) double thisTime = CoinCpuTime() ; # endif # if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 presolve_check_sol(prob) ; # endif # if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 int droppedRows = prob->countEmptyRows()-startEmptyRows ; int droppedColumns = prob->countEmptyCols()-startEmptyColumns ; std::cout << "Leaving tripleton_action::presolve, " << droppedRows << " rows, " << droppedColumns << " columns dropped" ; # if COIN_PRESOLVE_TUNING > 0 std::cout << " in " << thisTime-startTime << "s" ; # endif std::cout << "." << std::endl ; # endif return (next); } void tripleton_action::postsolve(CoinPostsolveMatrix *prob) const { const action *const actions = actions_; const int nactions = nactions_; double *colels = prob->colels_; int *hrow = prob->hrow_; CoinBigIndex *mcstrt = prob->mcstrt_; int *hincol = prob->hincol_; int *link = prob->link_; double *clo = prob->clo_; double *cup = prob->cup_; double *rlo = prob->rlo_; double *rup = prob->rup_; double *dcost = prob->cost_; double *sol = prob->sol_; double *rcosts = prob->rcosts_; double *acts = prob->acts_; double *rowduals = prob->rowduals_; unsigned char *colstat = prob->colstat_; unsigned char *rowstat = prob->rowstat_; const double maxmin = prob->maxmin_; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 char *cdone = prob->cdone_; char *rdone = prob->rdone_; presolve_check_threads(prob) ; presolve_check_sol(prob,2,2,2) ; presolve_check_nbasic(prob) ; # if PRESOLVE_DEBUG > 0 std::cout << "Entering tripleton_action::postsolve." << std::endl ; # endif # endif CoinBigIndex &free_list = prob->free_list_; const double ztolzb = prob->ztolzb_; const double ztoldj = prob->ztoldj_; // Space for accumulating two columns int nrows = prob->nrows_; int * index1 = new int[nrows]; double * element1 = new double[nrows]; memset(element1,0,nrows*sizeof(double)); int * index2 = new int[nrows]; double * element2 = new double[nrows]; memset(element2,0,nrows*sizeof(double)); for (const action *f = &actions[nactions-1]; actions<=f; f--) { int irow = f->row; // probably don't need this double ylo0 = f->cloy; double yup0 = f->cupy; double coeffx = f->coeffx; double coeffy = f->coeffy; double coeffz = f->coeffz; int jcolx = f->icolx; int jcoly = f->icoly; int jcolz = f->icolz; // needed? double rhs = f->rlo; /* the column was in the reduced problem */ PRESOLVEASSERT(cdone[jcolx] && rdone[irow]==DROP_ROW&&cdone[jcolz]); PRESOLVEASSERT(cdone[jcoly]==DROP_COL); // probably don't need this rlo[irow] = f->rlo; rup[irow] = f->rup; // probably don't need this clo[jcoly] = ylo0; cup[jcoly] = yup0; dcost[jcoly] = f->costy; dcost[jcolx] += f->costy*coeffx/coeffy; dcost[jcolz] += f->costy*coeffz/coeffy; // this is why we want coeffx < coeffy (55) sol[jcoly] = (rhs - coeffx * sol[jcolx] - coeffz * sol[jcolz]) / coeffy; // since this row is fixed acts[irow] = rhs; // acts[irow] always ok, since slack is fixed if (rowstat) prob->setRowStatus(irow,CoinPrePostsolveMatrix::atLowerBound); // CLAIM: // if the new pi value is chosen to keep the reduced cost // of col x at its prior value, then the reduced cost of // col y will be 0. // also have to update row activities and bounds for rows affected by jcoly // // sol[jcolx] was found for coeffx that // was += colels[kcoly] * coeff_factor; // where coeff_factor == -coeffx / coeffy // // its contribution to activity was // (colels[kcolx] + colels[kcoly] * coeff_factor) * sol[jcolx] (1) // // After adjustment, the two columns contribute: // colels[kcoly] * sol[jcoly] + colels[kcolx] * sol[jcolx] // == colels[kcoly] * ((rhs - coeffx * sol[jcolx]) / coeffy) + colels[kcolx] * sol[jcolx] // == colels[kcoly] * rhs/coeffy + colels[kcoly] * coeff_factor * sol[jcolx] + colels[kcolx] * sol[jcolx] // colels[kcoly] * rhs/coeffy + the expression (1) // // therefore, we must increase the row bounds by colels[kcoly] * rhs/coeffy, // which is similar to the bias double djy = maxmin * dcost[jcoly]; double djx = maxmin * dcost[jcolx]; double djz = maxmin * dcost[jcolz]; double bounds_factor = rhs/coeffy; // need to reconstruct x and z double multiplier1 = coeffx/coeffy; double multiplier2 = coeffz/coeffy; int * indy = reinterpret_cast(f->colel+f->ncoly); int ystart = NO_LINK; int nX=0,nZ=0; int i,iRow; for (i=0; incoly; ++i) { int iRow = indy[i]; double yValue = f->colel[i]; CoinBigIndex k = free_list; assert(k >= 0 && k < prob->bulk0_) ; free_list = link[free_list]; if (iRow != irow) { // are these tests always true??? // undo elim_tripleton(1) if (-PRESOLVE_INF < rlo[iRow]) rlo[iRow] += yValue * bounds_factor; // undo elim_tripleton(2) if (rup[iRow] < PRESOLVE_INF) rup[iRow] += yValue * bounds_factor; acts[iRow] += yValue * bounds_factor; djy -= rowduals[iRow] * yValue; } hrow[k] = iRow; PRESOLVEASSERT(rdone[hrow[k]] || hrow[k] == irow); colels[k] = yValue; link[k] = ystart; ystart = k; element1[iRow]=yValue*multiplier1; index1[nX++]=iRow; element2[iRow]=yValue*multiplier2; index2[nZ++]=iRow; } # if PRESOLVE_CONSISTENCY > 0 presolve_check_free_list(prob) ; # endif mcstrt[jcoly] = ystart; hincol[jcoly] = f->ncoly; // find the tail CoinBigIndex k=mcstrt[jcolx]; CoinBigIndex last = NO_LINK; int numberInColumn = hincol[jcolx]; int numberToDo=numberInColumn; for (i=0; i=0&&iRow=1.0e-15) { colels[k]=value; last=k; k = link[k]; if (iRow != irow) djx -= rowduals[iRow] * value; } else { numberInColumn--; // add to free list int nextk = link[k]; link[k]=free_list; free_list=k; assert (k>=0); k=nextk; if (last!=NO_LINK) link[last]=k; else mcstrt[jcolx]=k; } } for (i=0;i=1.0e-15) { if (iRow != irow) djx -= rowduals[iRow] * xValue; numberInColumn++; CoinBigIndex k = free_list; assert(k >= 0 && k < prob->bulk0_) ; free_list = link[free_list]; hrow[k] = iRow; PRESOLVEASSERT(rdone[hrow[k]] || hrow[k] == irow); colels[k] = xValue; if (last!=NO_LINK) link[last]=k; else mcstrt[jcolx]=k; last = k; } } # if PRESOLVE_CONSISTENCY > 0 presolve_check_free_list(prob) ; # endif link[last]=NO_LINK; assert(numberInColumn); hincol[jcolx] = numberInColumn; // find the tail k=mcstrt[jcolz]; last = NO_LINK; numberInColumn = hincol[jcolz]; numberToDo=numberInColumn; for (i=0; i=0&&iRow=1.0e-15) { colels[k]=value; last=k; k = link[k]; if (iRow != irow) djz -= rowduals[iRow] * value; } else { numberInColumn--; // add to free list int nextk = link[k]; assert(free_list>=0); link[k]=free_list; free_list=k; assert (k>=0); k=nextk; if (last!=NO_LINK) link[last]=k; else mcstrt[jcolz]=k; } } for (i=0;i=1.0e-15) { if (iRow != irow) djz -= rowduals[iRow] * zValue; numberInColumn++; CoinBigIndex k = free_list; assert(k >= 0 && k < prob->bulk0_) ; free_list = link[free_list]; hrow[k] = iRow; PRESOLVEASSERT(rdone[hrow[k]] || hrow[k] == irow); colels[k] = zValue; if (last!=NO_LINK) link[last]=k; else mcstrt[jcolz]=k; last = k; } } # if PRESOLVE_CONSISTENCY > 0 presolve_check_free_list(prob) ; # endif link[last]=NO_LINK; assert(numberInColumn); hincol[jcolz] = numberInColumn; // The only problem with keeping the reduced costs the way they were // was that the variable's bound may have moved, requiring it // to become basic. //printf("djs x - %g (%g), y - %g (%g)\n",djx,coeffx,djy,coeffy); if (colstat) { if (prob->columnIsBasic(jcolx) || (fabs(clo[jcolx] - sol[jcolx]) < ztolzb && rcosts[jcolx] >= -ztoldj) || (fabs(cup[jcolx] - sol[jcolx]) < ztolzb && rcosts[jcolx] <= ztoldj) || (prob->getColumnStatus(jcolx) ==CoinPrePostsolveMatrix::isFree&& fabs(rcosts[jcolx]) <= ztoldj)) { // colx or y is fine as it is - make coly basic prob->setColumnStatus(jcoly,CoinPrePostsolveMatrix::basic); // this is the coefficient we need to force col y's reduced cost to 0.0; // for example, this is obviously true if y is a singleton column rowduals[irow] = djy / coeffy; rcosts[jcolx] = djx - rowduals[irow] * coeffx; # if PRESOLVE_DEBUG > 0 if (prob->columnIsBasic(jcolx)&&fabs(rcosts[jcolx])>1.0e-5) printf("bad dj %d %g\n",jcolx,rcosts[jcolx]); # endif rcosts[jcolz] = djz - rowduals[irow] * coeffz; //if (prob->columnIsBasic(jcolz)) //assert (fabs(rcosts[jcolz])<1.0e-5); rcosts[jcoly] = 0.0; } else { prob->setColumnStatus(jcolx,CoinPrePostsolveMatrix::basic); prob->setColumnStatusUsingValue(jcoly); // change rowduals[jcolx] enough to cancel out rcosts[jcolx] rowduals[irow] = djx / coeffx; rcosts[jcolx] = 0.0; // change rowduals[jcolx] enough to cancel out rcosts[jcolx] //rowduals[irow] = djz / coeffz; //rcosts[jcolz] = 0.0; rcosts[jcolz] = djz - rowduals[irow] * coeffz; rcosts[jcoly] = djy - rowduals[irow] * coeffy; } } else { // No status array // this is the coefficient we need to force col y's reduced cost to 0.0; // for example, this is obviously true if y is a singleton column rowduals[irow] = djy / coeffy; rcosts[jcoly] = 0.0; } // DEBUG CHECK # if PRESOLVE_DEBUG > 0 { CoinBigIndex k = mcstrt[jcolx]; int nx = hincol[jcolx]; double dj = maxmin * dcost[jcolx]; for (int i=0; i 0 || PRESOLVE_CONSISTENCY > 0 cdone[jcoly] = TRIPLETON; rdone[irow] = TRIPLETON; # endif } delete [] index1; delete [] element1; delete [] index2; delete [] element2; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 presolve_check_threads(prob) ; presolve_check_sol(prob,2,2,2) ; presolve_check_nbasic(prob) ; # if PRESOLVE_DEBUG > 0 std::cout << "Leaving tripleton_action::postsolve." << std::endl ; # endif # endif } tripleton_action::~tripleton_action() { for (int i=nactions_-1; i>=0; i--) { delete[]actions_[i].colel; } deleteAction(actions_,action*); } static double *tripleton_mult; static int *tripleton_id; void check_tripletons(const CoinPresolveAction * paction) { const CoinPresolveAction * paction0 = paction; if (paction) { check_tripletons(paction->next); if (strcmp(paction0->name(), "tripleton_action") == 0) { const tripleton_action *daction = reinterpret_cast(paction0); for (int i=daction->nactions_-1; i>=0; --i) { int icolx = daction->actions_[i].icolx; int icoly = daction->actions_[i].icoly; double coeffx = daction->actions_[i].coeffx; double coeffy = daction->actions_[i].coeffy; tripleton_mult[icoly] = -coeffx/coeffy; tripleton_id[icoly] = icolx; } } } } CoinUtils-2.9.10/CoinUtils/src/CoinSmartPtr.hpp0000644000076600007660000005050411711113063017766 0ustar coincoin// Copyright (C) 2004, 2006 International Business Machines and others. // All Rights Reserved. // This code is published under the Eclipse Public License. // // $Id: CoinSmartPtr.hpp 1520 2012-01-29 00:43:31Z tkr $ // // Authors: Carl Laird, Andreas Waechter IBM 2004-08-13 // Removed lots of debugging stuff and reformatted: Laszlo Ladanyi, IBM #ifndef CoinSmartPtr_hpp #define CoinSmartPtr_hpp #include #include #include #include namespace Coin { //######################################################################### /** ReferencedObject class. * This is part of the implementation of an intrusive smart pointer * design. This class stores the reference count of all the smart * pointers that currently reference it. See the documentation for * the SmartPtr class for more details. * * A SmartPtr behaves much like a raw pointer, but manages the lifetime * of an object, deleting the object automatically. This class implements * a reference-counting, intrusive smart pointer design, where all * objects pointed to must inherit off of ReferencedObject, which * stores the reference count. Although this is intrusive (native types * and externally authored classes require wrappers to be referenced * by smart pointers), it is a safer design. A more detailed discussion of * these issues follows after the usage information. * * Usage Example: * Note: to use the SmartPtr, all objects to which you point MUST * inherit off of ReferencedObject. * * \verbatim * * In MyClass.hpp... * * #include "CoinSmartPtr.hpp" * * class MyClass : public Coin::ReferencedObject // must derive from ReferencedObject * { * ... * } * * In my_usage.cpp... * * #include "CoinSmartPtr.hpp" * #include "MyClass.hpp" * * void func(AnyObject& obj) * { * Coin::SmartPtr ptr_to_myclass = new MyClass(...); * // ptr_to_myclass now points to a new MyClass, * // and the reference count is 1 * * ... * * obj.SetMyClass(ptr_to_myclass); * // Here, let's assume that AnyObject uses a * // SmartPtr internally here. * // Now, both ptr_to_myclass and the internal * // SmartPtr in obj point to the same MyClass object * // and its reference count is 2. * * ... * * // No need to delete ptr_to_myclass, this * // will be done automatically when the * // reference count drops to zero. * * } * * \endverbatim * * Other Notes: * The SmartPtr implements both dereference operators -> & *. * The SmartPtr does NOT implement a conversion operator to * the raw pointer. Use the GetRawPtr() method when this * is necessary. Make sure that the raw pointer is NOT * deleted. * The SmartPtr implements the comparison operators == & != * for a variety of types. Use these instead of * \verbatim * if (GetRawPtr(smrt_ptr) == ptr) // Don't use this * \endverbatim * SmartPtr's, as currently implemented, do NOT handle circular references. * For example: consider a higher level object using SmartPtrs to point * to A and B, but A and B also point to each other (i.e. A has a * SmartPtr to B and B has a SmartPtr to A). In this scenario, when the * higher level object is finished with A and B, their reference counts * will never drop to zero (since they reference each other) and they * will not be deleted. This can be detected by memory leak tools like * valgrind. If the circular reference is necessary, the problem can be * overcome by a number of techniques: * * 1) A and B can have a method that "releases" each other, that is * they set their internal SmartPtrs to NULL. * \verbatim * void AClass::ReleaseCircularReferences() * { * smart_ptr_to_B = NULL; * } * \endverbatim * Then, the higher level class can call these methods before * it is done using A & B. * * 2) Raw pointers can be used in A and B to reference each other. * Here, an implicit assumption is made that the lifetime is * controlled by the higher level object and that A and B will * both exist in a controlled manner. Although this seems * dangerous, in many situations, this type of referencing * is very controlled and this is reasonably safe. * * 3) This SmartPtr class could be redesigned with the Weak/Strong * design concept. Here, the SmartPtr is identified as being * Strong (controls lifetime of the object) or Weak (merely * referencing the object). The Strong SmartPtr increments * (and decrements) the reference count in ReferencedObject * but the Weak SmartPtr does not. In the example above, * the higher level object would have Strong SmartPtrs to * A and B, but A and B would have Weak SmartPtrs to each * other. Then, when the higher level object was done with * A and B, they would be deleted. The Weak SmartPtrs in A * and B would not decrement the reference count and would, * of course, not delete the object. This idea is very similar * to item (2), where it is implied that the sequence of events * is controlled such that A and B will not call anything using * their pointers following the higher level delete (i.e. in * their destructors!). This is somehow safer, however, because * code can be written (however expensive) to perform run-time * detection of this situation. For example, the ReferencedObject * could store pointers to all Weak SmartPtrs that are referencing * it and, in its destructor, tell these pointers that it is * dying. They could then set themselves to NULL, or set an * internal flag to detect usage past this point. * * Comments on Non-Intrusive Design: * In a non-intrusive design, the reference count is stored somewhere other * than the object being referenced. This means, unless the reference * counting pointer is the first referencer, it must get a pointer to the * referenced object from another smart pointer (so it has access to the * reference count location). In this non-intrusive design, if we are * pointing to an object with a smart pointer (or a number of smart * pointers), and we then give another smart pointer the address through * a RAW pointer, we will have two independent, AND INCORRECT, reference * counts. To avoid this pitfall, we use an intrusive reference counting * technique where the reference count is stored in the object being * referenced. */ class ReferencedObject { public: ReferencedObject() : reference_count_(0) {} virtual ~ReferencedObject() { assert(reference_count_ == 0); } inline int ReferenceCount() const { return reference_count_; } inline void AddRef() const { ++reference_count_; } inline void ReleaseRef() const { --reference_count_; } private: mutable int reference_count_; }; //######################################################################### //#define IP_DEBUG_SMARTPTR #if COIN_IPOPT_CHECKLEVEL > 2 # define IP_DEBUG_SMARTPTR #endif #ifdef IP_DEBUG_SMARTPTR # include "IpDebug.hpp" #endif /** Template class for Smart Pointers. * A SmartPtr behaves much like a raw pointer, but manages the lifetime * of an object, deleting the object automatically. This class implements * a reference-counting, intrusive smart pointer design, where all * objects pointed to must inherit off of ReferencedObject, which * stores the reference count. Although this is intrusive (native types * and externally authored classes require wrappers to be referenced * by smart pointers), it is a safer design. A more detailed discussion of * these issues follows after the usage information. * * Usage Example: * Note: to use the SmartPtr, all objects to which you point MUST * inherit off of ReferencedObject. * * \verbatim * * In MyClass.hpp... * * #include "CoinSmartPtr.hpp" * * class MyClass : public Coin::ReferencedObject // must derive from ReferencedObject * { * ... * } * * In my_usage.cpp... * * #include "CoinSmartPtr.hpp" * #include "MyClass.hpp" * * void func(AnyObject& obj) * { * SmartPtr ptr_to_myclass = new MyClass(...); * // ptr_to_myclass now points to a new MyClass, * // and the reference count is 1 * * ... * * obj.SetMyClass(ptr_to_myclass); * // Here, let's assume that AnyObject uses a * // SmartPtr internally here. * // Now, both ptr_to_myclass and the internal * // SmartPtr in obj point to the same MyClass object * // and its reference count is 2. * * ... * * // No need to delete ptr_to_myclass, this * // will be done automatically when the * // reference count drops to zero. * * } * * \endverbatim * * It is not necessary to use SmartPtr's in all cases where an * object is used that has been allocated "into" a SmartPtr. It is * possible to just pass objects by reference or regular pointers, * even if lower down in the stack a SmartPtr is to be held on to. * Everything should work fine as long as a pointer created by "new" * is immediately passed into a SmartPtr, and if SmartPtr's are used * to hold on to objects. * * Other Notes: * The SmartPtr implements both dereference operators -> & *. * The SmartPtr does NOT implement a conversion operator to * the raw pointer. Use the GetRawPtr() method when this * is necessary. Make sure that the raw pointer is NOT * deleted. * The SmartPtr implements the comparison operators == & != * for a variety of types. Use these instead of * \verbatim * if (GetRawPtr(smrt_ptr) == ptr) // Don't use this * \endverbatim * SmartPtr's, as currently implemented, do NOT handle circular references. * For example: consider a higher level object using SmartPtrs to point to * A and B, but A and B also point to each other (i.e. A has a SmartPtr * to B and B has a SmartPtr to A). In this scenario, when the higher * level object is finished with A and B, their reference counts will * never drop to zero (since they reference each other) and they * will not be deleted. This can be detected by memory leak tools like * valgrind. If the circular reference is necessary, the problem can be * overcome by a number of techniques: * * 1) A and B can have a method that "releases" each other, that is * they set their internal SmartPtrs to NULL. * \verbatim * void AClass::ReleaseCircularReferences() * { * smart_ptr_to_B = NULL; * } * \endverbatim * Then, the higher level class can call these methods before * it is done using A & B. * * 2) Raw pointers can be used in A and B to reference each other. * Here, an implicit assumption is made that the lifetime is * controlled by the higher level object and that A and B will * both exist in a controlled manner. Although this seems * dangerous, in many situations, this type of referencing * is very controlled and this is reasonably safe. * * 3) This SmartPtr class could be redesigned with the Weak/Strong * design concept. Here, the SmartPtr is identified as being * Strong (controls lifetime of the object) or Weak (merely * referencing the object). The Strong SmartPtr increments * (and decrements) the reference count in ReferencedObject * but the Weak SmartPtr does not. In the example above, * the higher level object would have Strong SmartPtrs to * A and B, but A and B would have Weak SmartPtrs to each * other. Then, when the higher level object was done with * A and B, they would be deleted. The Weak SmartPtrs in A * and B would not decrement the reference count and would, * of course, not delete the object. This idea is very similar * to item (2), where it is implied that the sequence of events * is controlled such that A and B will not call anything using * their pointers following the higher level delete (i.e. in * their destructors!). This is somehow safer, however, because * code can be written (however expensive) to perform run-time * detection of this situation. For example, the ReferencedObject * could store pointers to all Weak SmartPtrs that are referencing * it and, in its destructor, tell these pointers that it is * dying. They could then set themselves to NULL, or set an * internal flag to detect usage past this point. * * Comments on Non-Intrusive Design: * In a non-intrusive design, the reference count is stored somewhere other * than the object being referenced. This means, unless the reference * counting pointer is the first referencer, it must get a pointer to the * referenced object from another smart pointer (so it has access to the * reference count location). In this non-intrusive design, if we are * pointing to an object with a smart pointer (or a number of smart * pointers), and we then give another smart pointer the address through * a RAW pointer, we will have two independent, AND INCORRECT, reference * counts. To avoid this pitfall, we use an intrusive reference counting * technique where the reference count is stored in the object being * referenced. */ template class SmartPtr { public: /** Returns the raw pointer contained. Use to get the value of the * raw ptr (i.e. to pass to other methods/functions, etc.) Note: This * method does NOT copy, therefore, modifications using this value * modify the underlying object contained by the SmartPtr, NEVER * delete this returned value. */ T* GetRawPtr() const { return ptr_; } /** Returns true if the SmartPtr is NOT NULL. * Use this to check if the SmartPtr is not null * This is preferred to if(GetRawPtr(sp) != NULL) */ bool IsValid() const { return ptr_ != NULL; } /** Returns true if the SmartPtr is NULL. * Use this to check if the SmartPtr IsNull. * This is preferred to if(GetRawPtr(sp) == NULL) */ bool IsNull() const { return ptr_ == NULL; } private: /**@name Private Data/Methods */ //@{ /** Actual raw pointer to the object. */ T* ptr_; /** Release the currently referenced object. */ void ReleasePointer_() { if (ptr_) { ptr_->ReleaseRef(); if (ptr_->ReferenceCount() == 0) { delete ptr_; } ptr_ = NULL; } } /** Set the value of the internal raw pointer from another raw * pointer, releasing the previously referenced object if necessary. */ SmartPtr& SetFromRawPtr_(T* rhs){ ReleasePointer_(); // Release any old pointer if (rhs != NULL) { rhs->AddRef(); ptr_ = rhs; } return *this; } /** Set the value of the internal raw pointer from a SmartPtr, * releasing the previously referenced object if necessary. */ inline SmartPtr& SetFromSmartPtr_(const SmartPtr& rhs) { SetFromRawPtr_(rhs.GetRawPtr()); return (*this); } //@} public: #define dbg_smartptr_verbosity 0 /**@name Constructors/Destructors */ //@{ /** Default constructor, initialized to NULL */ SmartPtr() : ptr_(NULL) {} /** Copy constructor, initialized from copy */ SmartPtr(const SmartPtr& copy) : ptr_(NULL) { (void) SetFromSmartPtr_(copy); } /** Constructor, initialized from T* ptr */ SmartPtr(T* ptr) : ptr_(NULL) { (void) SetFromRawPtr_(ptr); } /** Destructor, automatically decrements the reference count, deletes * the object if necessary.*/ ~SmartPtr() { ReleasePointer_(); } //@} /**@name Overloaded operators. */ //@{ /** Overloaded arrow operator, allows the user to call * methods using the contained pointer. */ T* operator->() const { #if COIN_COINUTILS_CHECKLEVEL > 0 assert(ptr_); #endif return ptr_; } /** Overloaded dereference operator, allows the user * to dereference the contained pointer. */ T& operator*() const { #if COIN_IPOPT_CHECKLEVEL > 0 assert(ptr_); #endif return *ptr_; } /** Overloaded equals operator, allows the user to * set the value of the SmartPtr from a raw pointer */ SmartPtr& operator=(T* rhs) { return SetFromRawPtr_(rhs); } /** Overloaded equals operator, allows the user to * set the value of the SmartPtr from another * SmartPtr */ SmartPtr& operator=(const SmartPtr& rhs) { return SetFromSmartPtr_(rhs); } /** Overloaded equality comparison operator, allows the * user to compare the value of two SmartPtrs */ template friend bool operator==(const SmartPtr& lhs, const SmartPtr& rhs); /** Overloaded equality comparison operator, allows the * user to compare the value of a SmartPtr with a raw pointer. */ template friend bool operator==(const SmartPtr& lhs, U2* raw_rhs); /** Overloaded equality comparison operator, allows the * user to compare the value of a raw pointer with a SmartPtr. */ template friend bool operator==(U1* lhs, const SmartPtr& raw_rhs); /** Overloaded in-equality comparison operator, allows the * user to compare the value of two SmartPtrs */ template friend bool operator!=(const SmartPtr& lhs, const SmartPtr& rhs); /** Overloaded in-equality comparison operator, allows the * user to compare the value of a SmartPtr with a raw pointer. */ template friend bool operator!=(const SmartPtr& lhs, U2* raw_rhs); /** Overloaded in-equality comparison operator, allows the * user to compare the value of a SmartPtr with a raw pointer. */ template friend bool operator!=(U1* lhs, const SmartPtr& raw_rhs); //@} }; template bool ComparePointers(const U1* lhs, const U2* rhs) { if (lhs == rhs) { return true; } // If lhs and rhs point to the same object with different interfaces // U1 and U2, we cannot guarantee that the value of the pointers will // be equivalent. We can guarantee this if we convert to void*. return static_cast(lhs) == static_cast(rhs); } } // namespace Coin //############################################################################# /**@name SmartPtr friends that are overloaded operators, so they are not in the Coin namespace. */ //@{ template bool operator==(const Coin::SmartPtr& lhs, const Coin::SmartPtr& rhs) { return Coin::ComparePointers(lhs.GetRawPtr(), rhs.GetRawPtr()); } template bool operator==(const Coin::SmartPtr& lhs, U2* raw_rhs) { return Coin::ComparePointers(lhs.GetRawPtr(), raw_rhs); } template bool operator==(U1* raw_lhs, const Coin::SmartPtr& rhs) { return Coin::ComparePointers(raw_lhs, rhs.GetRawPtr()); } template bool operator!=(const Coin::SmartPtr& lhs, const Coin::SmartPtr& rhs) { return ! operator==(lhs, rhs); } template bool operator!=(const Coin::SmartPtr& lhs, U2* raw_rhs) { return ! operator==(lhs, raw_rhs); } template bool operator!=(U1* raw_lhs, const Coin::SmartPtr& rhs) { return ! operator==(raw_lhs, rhs); } //@} #define CoinReferencedObject Coin::ReferencedObject #define CoinSmartPtr Coin::SmartPtr #define CoinComparePointers Coin::ComparePointers #endif CoinUtils-2.9.10/CoinUtils/src/CoinPresolveDual.hpp0000644000076600007660000000543611670247221020633 0ustar coincoin/* $Id: CoinPresolveDual.hpp 1510 2011-12-08 23:56:01Z lou $ */ // 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). #ifndef CoinPresolveDual_H #define CoinPresolveDual_H /*! \class remove_dual_action \brief Attempt to fix variables by bounding reduced costs The reduced cost of x_j is d_j = c_j - y*a_j (1). Assume minimization, so that at optimality d_j >= 0 for x_j nonbasic at lower bound, and d_j <= 0 for x_j nonbasic at upper bound. For a slack variable s_i, c_(n+i) = 0 and a_(n+i) is a unit vector, hence d_(n+i) = -y_i. If s_i has a finite lower bound and no upper bound, we must have y_i <= 0 at optimality. Similarly, if s_i has no lower bound and a finite upper bound, we must have y_i >= 0. For a singleton variable x_j, d_j = c_j - y_i*a_ij. Given x_j with a single finite bound, we can bound d_j greater or less than 0 at optimality, and that allows us to calculate an upper or lower bound on y_i (depending on the bound on d_j and the sign of a_ij). Now we have bounds on some subset of the y_i, and we can use these to calculate upper and lower bounds on the d_j, using bound propagation on (1). If we can manage to bound some d_j as strictly positive or strictly negative, then at optimality the corresponding variable must be nonbasic at its lower or upper bound, respectively. If the required bound is lacking, the problem is unbounded. */ class remove_dual_action : public CoinPresolveAction { public: /// Destructor ~remove_dual_action () ; /// Name inline const char *name () const { return ("remove_dual_action") ; } /*! \brief Attempt to fix variables by bounding reduced costs Always scans all variables. Propagates bounds on reduced costs until there's no change or until some set of variables can be fixed. */ static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next) ; /*! \brief Postsolve In addition to fixing variables (handled by make_fixed_action), we may need use our own postsolve to restore constraint bounds. */ void postsolve (CoinPostsolveMatrix *prob) const ; private: /// Postsolve (bound restore) instruction struct action { double rlo_ ; ///< restored row lower bound double rup_ ; ///< restored row upper bound int ndx_ ; ///< row index } ; /// Constructor with postsolve actions. remove_dual_action(int nactions, const action *actions, const CoinPresolveAction *next) : CoinPresolveAction(next), nactions_(nactions), actions_(actions) {} /// Count of bound restore entries const int nactions_ ; /// Bound restore entries const action *actions_ ; } ; #endif CoinUtils-2.9.10/CoinUtils/src/CoinPresolveTighten.hpp0000644000076600007660000000263711654260357021357 0ustar coincoin/* $Id: CoinPresolveTighten.hpp 1498 2011-11-02 15:25:35Z mjs $ */ // 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). #ifndef CoinPresolveTighten_H #define CoinPresolveTighten_H #include "CoinPresolveMatrix.hpp" // This action has no separate class; // instead, it decides which columns can be made fixed // and calls make_fixed_action::presolve. const CoinPresolveAction *tighten_zero_cost(CoinPresolveMatrix *prob, const CoinPresolveAction *next); #define DO_TIGHTEN 30 class do_tighten_action : public CoinPresolveAction { do_tighten_action(); do_tighten_action(const do_tighten_action& rhs); do_tighten_action& operator=(const do_tighten_action& rhs); struct action { int *rows; double *lbound; double *ubound; int col; int nrows; int direction; // just for assertions }; const int nactions_; const action *const actions_; do_tighten_action(int nactions, const action *actions, const CoinPresolveAction *next) : CoinPresolveAction(next), nactions_(nactions), actions_(actions) {} public: const char *name() const; static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next); void postsolve(CoinPostsolveMatrix *prob) const; virtual ~do_tighten_action(); }; #endif CoinUtils-2.9.10/CoinUtils/src/CoinWarmStartVector.cpp0000644000076600007660000000053311510461170021313 0ustar coincoin/* $Id: CoinWarmStartVector.cpp 1373 2011-01-03 23:57:44Z lou $ */ // Copyright (C) 2003, International Business Machines // Corporation and others. All Rights Reserved. // This lack of code is licensed under the terms of the Eclipse Public License // (EPL). /* Code crammed into CoinWarmStartVector.hpp at r923, 080110. -- lh, 110103 -- */ CoinUtils-2.9.10/CoinUtils/src/CoinUtilsConfig.h0000644000076600007660000000262511573155175020121 0ustar coincoin/* Copyright (C) 2011 * All Rights Reserved. * This code is published under the Eclipse Public License. * * $Id: CoinUtilsConfig.h 1434 2011-06-06 13:47:41Z stefan $ * * Include file for the configuration of CoinUtils. * * 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, and * undefines macros that might configure with other Config.h files. * * 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 __COINUTILSCONFIG_H__ #define __COINUTILSCONFIG_H__ #ifdef HAVE_CONFIG_H #ifdef COINUTILS_BUILD #include "config.h" #else #include "config_coinutils.h" #endif #else /* HAVE_CONFIG_H */ #ifdef COINUTILS_BUILD #include "config_default.h" #else #include "config_coinutils_default.h" #endif #endif /* HAVE_CONFIG_H */ #endif /*__COINUTILSCONFIG_H__*/ CoinUtils-2.9.10/CoinUtils/src/CoinPackedMatrix.hpp0000644000076600007660000011515212054012315020566 0ustar coincoin/* $Id: CoinPackedMatrix.hpp 1560 2012-11-24 00:29:01Z 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). #ifndef CoinPackedMatrix_H #define CoinPackedMatrix_H #include "CoinError.hpp" #include "CoinTypes.hpp" #ifndef CLP_NO_VECTOR #include "CoinPackedVectorBase.hpp" #include "CoinShallowPackedVector.hpp" #else class CoinRelFltEq; #endif /** Sparse Matrix Base Class This class is intended to represent sparse matrices using row-major or column-major ordering. The representation is very efficient for adding, deleting, or retrieving major-dimension vectors. Adding a minor-dimension vector is less efficient, but can be helped by providing "extra" space as described in the next paragraph. Deleting a minor-dimension vector requires inspecting all coefficients in the matrix. Retrieving a minor-dimension vector would incur the same cost and is not supported (except in the sense that you can write a loop to retrieve all coefficients one at a time). Consider physically transposing the matrix, or keeping a second copy with the other major-vector ordering. The sparse represention can be completely compact or it can have "extra" space available at the end of each major vector. Incorporating extra space into the sparse matrix representation can improve performance in cases where new data needs to be inserted into the packed matrix against the major-vector orientation (e.g, inserting a row into a matrix stored in column-major order). For example if the matrix: @verbatim 3 1 0 -2 -1 0 0 -1 0 2 1.1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 2.8 0 0 -1.2 0 5.6 0 0 0 1 0 0 1.9 was stored by rows (with no extra space) in CoinPackedMatrix r then: r.getElements() returns a vector containing: 3 1 -2 -1 -1 2 1.1 1 1 2.8 -1.2 5.6 1 1.9 r.getIndices() returns a vector containing: 0 1 3 4 7 1 2 2 5 3 6 0 4 7 r.getVectorStarts() returns a vector containing: 0 5 7 9 11 14 r.getNumElements() returns 14. r.getMajorDim() returns 5. r.getVectorSize(0) returns 5. r.getVectorSize(1) returns 2. r.getVectorSize(2) returns 2. r.getVectorSize(3) returns 2. r.getVectorSize(4) returns 3. If stored by columns (with no extra space) then: c.getElements() returns a vector containing: 3 5.6 1 2 1.1 1 -2 2.8 -1 1 1 -1.2 -1 1.9 c.getIndices() returns a vector containing: 0 4 0 1 1 2 0 3 0 4 2 3 0 4 c.getVectorStarts() returns a vector containing: 0 2 4 6 8 10 11 12 14 c.getNumElements() returns 14. c.getMajorDim() returns 8. @endverbatim Compiling this class with CLP_NO_VECTOR defined will excise all methods which use CoinPackedVectorBase, CoinPackedVector, or CoinShallowPackedVector as parameters or return types. Compiling this class with COIN_FAST_CODE defined removes index range checks. */ class CoinPackedMatrix { friend void CoinPackedMatrixUnitTest(); public: //--------------------------------------------------------------------------- /**@name Query members */ //@{ /** Return the current setting of the extra gap. */ inline double getExtraGap() const { return extraGap_; } /** Return the current setting of the extra major. */ inline double getExtraMajor() const { return extraMajor_; } /** Reserve sufficient space for appending major-ordered vectors. If create is true, empty columns are created (for column generation) */ void reserve(const int newMaxMajorDim, const CoinBigIndex newMaxSize, bool create=false); /** Clear the data, but do not free any arrays */ void clear(); /** Whether the packed matrix is column major ordered or not. */ inline bool isColOrdered() const { return colOrdered_; } /** Whether the packed matrix has gaps or not. */ inline bool hasGaps() const { return (size_vectorStarts array See #start_. */ inline int getSizeVectorStarts() const { return ((majorDim_ > 0)?(majorDim_+1):(0)) ; } /*! \brief The size of the vectorLengths array See #length_. */ inline int getSizeVectorLengths() const { return majorDim_; } /*! \brief The positions where the major-dimension vectors start in elements and indices. See #start_. */ inline const CoinBigIndex * getVectorStarts() const { return start_; } /*! \brief The lengths of the major-dimension vectors. See #length_. */ inline const int * getVectorLengths() const { return length_; } /** The position of the first element in the i'th major-dimension vector. */ CoinBigIndex getVectorFirst(const int i) const { #ifndef COIN_FAST_CODE if (i < 0 || i >= majorDim_) throw CoinError("bad index", "vectorFirst", "CoinPackedMatrix"); #endif return start_[i]; } /** The position of the last element (well, one entry past the last) in the i'th major-dimension vector. */ CoinBigIndex getVectorLast(const int i) const { #ifndef COIN_FAST_CODE if (i < 0 || i >= majorDim_) throw CoinError("bad index", "vectorLast", "CoinPackedMatrix"); #endif return start_[i] + length_[i]; } /** The length of i'th vector. */ inline int getVectorSize(const int i) const { #ifndef COIN_FAST_CODE if (i < 0 || i >= majorDim_) throw CoinError("bad index", "vectorSize", "CoinPackedMatrix"); #endif return length_[i]; } #ifndef CLP_NO_VECTOR /** Return the i'th vector in matrix. */ const CoinShallowPackedVector getVector(int i) const { #ifndef COIN_FAST_CODE if (i < 0 || i >= majorDim_) throw CoinError("bad index", "vector", "CoinPackedMatrix"); #endif return CoinShallowPackedVector(length_[i], index_ + start_[i], element_ + start_[i], false); } #endif /** Returns an array containing major indices. The array is getNumElements long and if getVectorStarts() is 0,2,5 then the array would start 0,0,1,1,1,2... This method is provided to go back from a packed format to a triple format. It returns NULL if there are gaps in matrix so user should use removeGaps() if there are any gaps. It does this as this array has to match getElements() and getIndices() and because it makes no sense otherwise. The returned array is allocated with new int[], free it with delete[]. */ int * getMajorIndices() const; //@} //--------------------------------------------------------------------------- /**@name Modifying members */ //@{ /*! \brief Set the dimensions of the matrix. The method name is deceptive; the effect is to append empty columns and/or rows to the matrix to reach the specified dimensions. A negative number for either dimension means that that dimension doesn't change. An exception will be thrown if the specified dimensions are smaller than the current dimensions. */ void setDimensions(int numrows, int numcols); /** Set the extra gap to be allocated to the specified value. */ void setExtraGap(const double newGap); /** Set the extra major to be allocated to the specified value. */ void setExtraMajor(const double newMajor); #ifndef CLP_NO_VECTOR /*! Append a column to the end of the matrix. When compiled with COIN_DEBUG defined this method throws an exception if the column vector specifies a nonexistent row index. Otherwise the method assumes that every index fits into the matrix. */ void appendCol(const CoinPackedVectorBase& vec); #endif /*! Append a column to the end of the matrix. When compiled with COIN_DEBUG defined this method throws an exception if the column vector specifies a nonexistent row index. Otherwise the method assumes that every index fits into the matrix. */ void appendCol(const int vecsize, const int *vecind, const double *vecelem); #ifndef CLP_NO_VECTOR /*! Append a set of columns to the end of the matrix. When compiled with COIN_DEBUG defined this method throws an exception if any of the column vectors specify a nonexistent row index. Otherwise the method assumes that every index fits into the matrix. */ void appendCols(const int numcols, const CoinPackedVectorBase * const * cols); #endif /*! Append a set of columns to the end of the matrix. Returns the number of errors (nonexistent or duplicate row index). No error checking is performed if \p numberRows < 0. */ int appendCols(const int numcols, const CoinBigIndex * columnStarts, const int * row, const double * element, int numberRows=-1); #ifndef CLP_NO_VECTOR /*! Append a row to the end of the matrix. When compiled with COIN_DEBUG defined this method throws an exception if the row vector specifies a nonexistent column index. Otherwise the method assumes that every index fits into the matrix. */ void appendRow(const CoinPackedVectorBase& vec); #endif /*! Append a row to the end of the matrix. When compiled with COIN_DEBUG defined this method throws an exception if the row vector specifies a nonexistent column index. Otherwise the method assumes that every index fits into the matrix. */ void appendRow(const int vecsize, const int *vecind, const double *vecelem); #ifndef CLP_NO_VECTOR /*! Append a set of rows to the end of the matrix. When compiled with COIN_DEBUG defined this method throws an exception if any of the row vectors specify a nonexistent column index. Otherwise the method assumes that every index fits into the matrix. */ void appendRows(const int numrows, const CoinPackedVectorBase * const * rows); #endif /*! Append a set of rows to the end of the matrix. Returns the number of errors (nonexistent or duplicate column index). No error checking is performed if \p numberColumns < 0. */ int appendRows(const int numrows, const CoinBigIndex * rowStarts, const int * column, const double * element, int numberColumns=-1); /** Append the argument to the "right" of the current matrix. Imagine this as adding new columns (don't worry about how the matrices are ordered, that is taken care of). An exception is thrown if the number of rows is different in the matrices. */ void rightAppendPackedMatrix(const CoinPackedMatrix& matrix); /** Append the argument to the "bottom" of the current matrix. Imagine this as adding new rows (don't worry about how the matrices are ordered, that is taken care of). An exception is thrown if the number of columns is different in the matrices. */ void bottomAppendPackedMatrix(const CoinPackedMatrix& matrix); /** Delete the columns whose indices are listed in indDel. */ void deleteCols(const int numDel, const int * indDel); /** Delete the rows whose indices are listed in indDel. */ void deleteRows(const int numDel, const int * indDel); /** Replace the elements of a vector. The indices remain the same. At most the number specified will be replaced. The index is between 0 and major dimension of matrix */ void replaceVector(const int index, const int numReplace, const double * newElements); /** Modify one element of packed matrix. An element may be added. This works for either ordering If the new element is zero it will be deleted unless keepZero true */ void modifyCoefficient(int row, int column, double newElement, bool keepZero=false); /** Return one element of packed matrix. This works for either ordering If it is not present will return 0.0 */ double getCoefficient(int row, int column) const; /** Eliminate all elements in matrix whose absolute value is less than threshold. The column starts are not affected. Returns number of elements eliminated. Elements eliminated are at end of each vector */ int compress(double threshold); /** Eliminate all duplicate AND small elements in matrix The column starts are not affected. Returns number of elements eliminated. */ int eliminateDuplicates(double threshold); /** Sort all columns so indices are increasing.in each column */ void orderMatrix(); /** Really clean up matrix. a) eliminate all duplicate AND small elements in matrix b) remove all gaps and set extraGap_ and extraMajor_ to 0.0 c) reallocate arrays and make max lengths equal to lengths d) orders elements returns number of elements eliminated */ int cleanMatrix(double threshold=1.0e-20); //@} //--------------------------------------------------------------------------- /**@name Methods that reorganize the whole matrix */ //@{ /** Remove the gaps from the matrix if there were any Can also remove small elements fabs() <= removeValue*/ void removeGaps(double removeValue=-1.0); /** Extract a submatrix from matrix. Those major-dimension vectors of the matrix comprise the submatrix whose indices are given in the arguments. Does not allow duplicates. */ void submatrixOf(const CoinPackedMatrix& matrix, const int numMajor, const int * indMajor); /** Extract a submatrix from matrix. Those major-dimension vectors of the matrix comprise the submatrix whose indices are given in the arguments. Allows duplicates and keeps order. */ void submatrixOfWithDuplicates(const CoinPackedMatrix& matrix, const int numMajor, const int * indMajor); #if 0 /** Extract a submatrix from matrix. Those major/minor-dimension vectors of the matrix comprise the submatrix whose indices are given in the arguments. */ void submatrixOf(const CoinPackedMatrix& matrix, const int numMajor, const int * indMajor, const int numMinor, const int * indMinor); #endif /** Copy method. This method makes an exact replica of the argument, including the extra space parameters. */ void copyOf(const CoinPackedMatrix& rhs); /** Copy the arguments to the matrix. If len is a NULL pointer then the matrix is assumed to have no gaps in it and len will be created accordingly. */ void copyOf(const bool colordered, const int minor, const int major, const CoinBigIndex numels, const double * elem, const int * ind, const CoinBigIndex * start, const int * len, const double extraMajor=0.0, const double extraGap=0.0); /** Copy method. This method makes an exact replica of the argument, including the extra space parameters. If there is room it will re-use arrays */ void copyReuseArrays(const CoinPackedMatrix& rhs); /*! \brief Make a reverse-ordered copy. This method makes an exact replica of the argument with the major vector orientation changed from row (column) to column (row). The extra space parameters are also copied and reversed. (Cf. #reverseOrdering, which does the same thing in place.) */ void reverseOrderedCopyOf(const CoinPackedMatrix& rhs); /** Assign the arguments to the matrix. If len is a NULL pointer then the matrix is assumed to have no gaps in it and len will be created accordingly.
NOTE 1: After this method returns the pointers passed to the method will be NULL pointers!
NOTE 2: When the matrix is eventually destructed the arrays will be deleted by delete[]. Hence one should use this method ONLY if all array swere allocated by new[]! */ void assignMatrix(const bool colordered, const int minor, const int major, const CoinBigIndex numels, double *& elem, int *& ind, CoinBigIndex *& start, int *& len, const int maxmajor = -1, const CoinBigIndex maxsize = -1); /** Assignment operator. This copies out the data, but uses the current matrix's extra space parameters. */ CoinPackedMatrix & operator=(const CoinPackedMatrix& rhs); /*! \brief Reverse the ordering of the packed matrix. Change the major vector orientation of the matrix data structures from row (column) to column (row). (Cf. #reverseOrderedCopyOf, which does the same thing but produces a new matrix.) */ void reverseOrdering(); /*! \brief Transpose the matrix. \note If you start with a column-ordered matrix and invoke transpose, you will have a row-ordered transposed matrix. To change the major vector orientation (e.g., to transform a column-ordered matrix to a column-ordered transposed matrix), invoke transpose() followed by #reverseOrdering(). */ void transpose(); /*! \brief Swap the content of two packed matrices. */ void swap(CoinPackedMatrix& matrix); //@} //--------------------------------------------------------------------------- /**@name Matrix times vector methods */ //@{ /** Return A * x in y. @pre x must be of size numColumns() @pre y must be of size numRows() */ void times(const double * x, double * y) const; #ifndef CLP_NO_VECTOR /** Return A * x in y. Same as the previous method, just x is given in the form of a packed vector. */ void times(const CoinPackedVectorBase& x, double * y) const; #endif /** Return x * A in y. @pre x must be of size numRows() @pre y must be of size numColumns() */ void transposeTimes(const double * x, double * y) const; #ifndef CLP_NO_VECTOR /** Return x * A in y. Same as the previous method, just x is given in the form of a packed vector. */ void transposeTimes(const CoinPackedVectorBase& x, double * y) const; #endif //@} //--------------------------------------------------------------------------- /**@name Helper functions used internally, but maybe useful externally. These methods do not worry about testing whether the packed matrix is row or column major ordered; they operate under the assumption that the correct version is invoked. In fact, a number of other methods simply just call one of these after testing the ordering of the matrix. */ //@{ //------------------------------------------------------------------------- /**@name Queries */ //@{ /** Count the number of entries in every minor-dimension vector and return an array containing these lengths. The returned array is allocated with new int[], free it with delete[]. */ int * countOrthoLength() const; /** Count the number of entries in every minor-dimension vector and fill in an array containing these lengths. */ void countOrthoLength(int * counts) const; /** Major dimension. For row ordered matrix this would be the number of rows. */ inline int getMajorDim() const { return majorDim_; } /** Set major dimension. For row ordered matrix this would be the number of rows. Use with great care.*/ inline void setMajorDim(int value) { majorDim_ = value; } /** Minor dimension. For row ordered matrix this would be the number of columns. */ inline int getMinorDim() const { return minorDim_; } /** Set minor dimension. For row ordered matrix this would be the number of columns. Use with great care.*/ inline void setMinorDim(int value) { minorDim_ = value; } /** Current maximum for major dimension. For row ordered matrix this many rows can be added without reallocating the vector related to the major dimension (start_ and length_). */ inline int getMaxMajorDim() const { return maxMajorDim_; } /** Dump the matrix on stdout. When in dire straits this method can help. */ void dumpMatrix(const char* fname = NULL) const; /// Print a single matrix element. void printMatrixElement(const int row_val, const int col_val) const; //@} //------------------------------------------------------------------------- /*! @name Append vectors \details When compiled with COIN_DEBUG defined these methods throw an exception if the major (minor) vector contains an index that's invalid for the minor (major) dimension. Otherwise the methods assume that every index fits into the matrix. */ //@{ #ifndef CLP_NO_VECTOR /** Append a major-dimension vector to the end of the matrix. */ void appendMajorVector(const CoinPackedVectorBase& vec); #endif /** Append a major-dimension vector to the end of the matrix. */ void appendMajorVector(const int vecsize, const int *vecind, const double *vecelem); #ifndef CLP_NO_VECTOR /** Append several major-dimensonvectors to the end of the matrix */ void appendMajorVectors(const int numvecs, const CoinPackedVectorBase * const * vecs); /** Append a minor-dimension vector to the end of the matrix. */ void appendMinorVector(const CoinPackedVectorBase& vec); #endif /** Append a minor-dimension vector to the end of the matrix. */ void appendMinorVector(const int vecsize, const int *vecind, const double *vecelem); #ifndef CLP_NO_VECTOR /** Append several minor-dimension vectors to the end of the matrix */ void appendMinorVectors(const int numvecs, const CoinPackedVectorBase * const * vecs); #endif /*! \brief Append a set of rows (columns) to the end of a column (row) ordered matrix. This case is when we know there are no gaps and majorDim_ will not change. \todo This method really belongs in the group of protected methods with #appendMinor; there are no safeties here even with COIN_DEBUG. Apparently this method was needed in ClpPackedMatrix and giving it proper visibility was too much trouble. Should be moved. */ void appendMinorFast(const int number, const CoinBigIndex * starts, const int * index, const double * element); //@} //------------------------------------------------------------------------- /*! \name Append matrices \details We'll document these methods assuming that the current matrix is column major ordered (Hence in the ...SameOrdered() methods the argument is column ordered, in the OrthoOrdered() methods the argument is row ordered.) */ //@{ /** Append the columns of the argument to the right end of this matrix. @pre minorDim_ == matrix.minorDim_
This method throws an exception if the minor dimensions are not the same. */ void majorAppendSameOrdered(const CoinPackedMatrix& matrix); /** Append the columns of the argument to the bottom end of this matrix. @pre majorDim_ == matrix.majorDim_
This method throws an exception if the major dimensions are not the same. */ void minorAppendSameOrdered(const CoinPackedMatrix& matrix); /** Append the rows of the argument to the right end of this matrix. @pre minorDim_ == matrix.majorDim_
This method throws an exception if the minor dimension of the current matrix is not the same as the major dimension of the argument matrix. */ void majorAppendOrthoOrdered(const CoinPackedMatrix& matrix); /** Append the rows of the argument to the bottom end of this matrix. @pre majorDim_ == matrix.minorDim_
This method throws an exception if the major dimension of the current matrix is not the same as the minor dimension of the argument matrix. */ void minorAppendOrthoOrdered(const CoinPackedMatrix& matrix); //@} //----------------------------------------------------------------------- /**@name Delete vectors */ //@{ /** Delete the major-dimension vectors whose indices are listed in indDel. */ void deleteMajorVectors(const int numDel, const int * indDel); /** Delete the minor-dimension vectors whose indices are listed in indDel. */ void deleteMinorVectors(const int numDel, const int * indDel); //@} //----------------------------------------------------------------------- /**@name Various dot products. */ //@{ /** Return A * x (multiplied from the "right" direction) in y. @pre x must be of size majorDim() @pre y must be of size minorDim() */ void timesMajor(const double * x, double * y) const; #ifndef CLP_NO_VECTOR /** Return A * x (multiplied from the "right" direction) in y. Same as the previous method, just x is given in the form of a packed vector. */ void timesMajor(const CoinPackedVectorBase& x, double * y) const; #endif /** Return A * x (multiplied from the "right" direction) in y. @pre x must be of size minorDim() @pre y must be of size majorDim() */ void timesMinor(const double * x, double * y) const; #ifndef CLP_NO_VECTOR /** Return A * x (multiplied from the "right" direction) in y. Same as the previous method, just x is given in the form of a packed vector. */ void timesMinor(const CoinPackedVectorBase& x, double * y) const; #endif //@} //@} //-------------------------------------------------------------------------- /**@name Logical Operations. */ //@{ #ifndef CLP_NO_VECTOR /*! \brief Test for equivalence. Two matrices are equivalent if they are both row- or column-ordered, they have the same dimensions, and each (major) vector is equivalent. The operator used to test for equality can be specified using the \p FloatEqual template parameter. */ template bool isEquivalent(const CoinPackedMatrix& rhs, const FloatEqual& eq) const { // Both must be column order or both row ordered and must be of same size if ((isColOrdered() ^ rhs.isColOrdered()) || (getNumCols() != rhs.getNumCols()) || (getNumRows() != rhs.getNumRows()) || (getNumElements() != rhs.getNumElements())) return false; for (int i=getMajorDim()-1; i >= 0; --i) { CoinShallowPackedVector pv = getVector(i); CoinShallowPackedVector rhsPv = rhs.getVector(i); if ( !pv.isEquivalent(rhsPv,eq) ) return false; } return true; } /*! \brief Test for equivalence and report differences Equivalence is defined as for #isEquivalent. In addition, this method will print differences to std::cerr. Intended for use in unit tests and for debugging. */ bool isEquivalent2(const CoinPackedMatrix& rhs) const; #else /*! \brief Test for equivalence. Two matrices are equivalent if they are both row- or column-ordered, they have the same dimensions, and each (major) vector is equivalent. This method is optimised for speed. CoinPackedVector#isEquivalent is replaced with more efficient code for repeated comparison of equal-length vectors. The CoinRelFltEq operator is used. */ bool isEquivalent(const CoinPackedMatrix& rhs, const CoinRelFltEq & eq) const; #endif /*! \brief Test for equivalence. The test for element equality is the default CoinRelFltEq operator. */ bool isEquivalent(const CoinPackedMatrix& rhs) const; //@} //-------------------------------------------------------------------------- /*! \name Non-const methods These are to be used with great care when doing column generation, etc. */ //@{ /** A vector containing the elements in the packed matrix. Note that there might be gaps in this list, entries that do not belong to any major-dimension vector. To get the actual elements one should look at this vector together with #start_ and #length_. */ inline double * getMutableElements() const { return element_; } /** A vector containing the minor indices of the elements in the packed matrix. Note that there might be gaps in this list, entries that do not belong to any major-dimension vector. To get the actual elements one should look at this vector together with #start_ and #length_. */ inline int * getMutableIndices() const { return index_; } /** The positions where the major-dimension vectors start in #element_ and #index_. */ inline CoinBigIndex * getMutableVectorStarts() const { return start_; } /** The lengths of the major-dimension vectors. */ inline int * getMutableVectorLengths() const { return length_; } /// Change the size of the bulk store after modifying - be careful inline void setNumElements(CoinBigIndex value) { size_ = value;} /*! NULLify element array Used when space is very tight. Does not free the space! */ inline void nullElementArray() {element_=NULL;} /*! NULLify start array Used when space is very tight. Does not free the space! */ inline void nullStartArray() {start_=NULL;} /*! NULLify length array Used when space is very tight. Does not free the space! */ inline void nullLengthArray() {length_=NULL;} /*! NULLify index array Used when space is very tight. Does not free the space! */ inline void nullIndexArray() {index_=NULL;} //@} //-------------------------------------------------------------------------- /*! \name Constructors and destructors */ //@{ /// Default Constructor creates an empty column ordered packed matrix CoinPackedMatrix(); /// A constructor where the ordering and the gaps are specified CoinPackedMatrix(const bool colordered, const double extraMajor, const double extraGap); CoinPackedMatrix(const bool colordered, const int minor, const int major, const CoinBigIndex numels, const double * elem, const int * ind, const CoinBigIndex * start, const int * len, const double extraMajor, const double extraGap); CoinPackedMatrix(const bool colordered, const int minor, const int major, const CoinBigIndex numels, const double * elem, const int * ind, const CoinBigIndex * start, const int * len); /** Create packed matrix from triples. If colordered is true then the created matrix will be column ordered. Duplicate matrix elements are allowed. The created matrix will have the sum of the duplicates.
For example if:
rowIndices[0]=2; colIndices[0]=5; elements[0]=2.0
rowIndices[1]=2; colIndices[1]=5; elements[1]=0.5
then the created matrix will contain a value of 2.5 in row 2 and column 5.
The matrix is created without gaps. */ CoinPackedMatrix(const bool colordered, const int * rowIndices, const int * colIndices, const double * elements, CoinBigIndex numels ); /// Copy constructor CoinPackedMatrix(const CoinPackedMatrix& m); /*! \brief Copy constructor with fine tuning This constructor allows for the specification of an exact amount of extra space and/or reverse ordering. \p extraForMajor is the exact number of spare major vector slots after any possible reverse ordering. If \p extraForMajor < 0, all gaps and small elements will be removed from the copy, otherwise gaps and small elements are preserved. \p extraElements is the exact number of spare element entries. The usual multipliers, #extraMajor_ and #extraGap_, are set to zero. */ CoinPackedMatrix(const CoinPackedMatrix &m, int extraForMajor, int extraElements, bool reverseOrdering = false) ; /** Subset constructor (without gaps). Duplicates are allowed and order is as given */ CoinPackedMatrix (const CoinPackedMatrix & wholeModel, int numberRows, const int * whichRows, int numberColumns, const int * whichColumns); /// Destructor virtual ~CoinPackedMatrix(); //@} /*! \name Debug Utilities */ //@{ /*! \brief Scan the matrix for anomalies. Returns the number of anomalies. Scans the structure for gaps, obviously bogus indices and coefficients, and inconsistencies. Gaps are not an error unless #hasGaps() says the matrix should be gap-free. Zeroes are not an error unless \p zeroesAreError is set to true. Values for verbosity are: - 0: No messages, just the return value - 1: Messages about errors - 2: If there are no errors, a message indicating the matrix was checked is printed (positive confirmation). - 3: Adds a bit more information about the matrix. - 4: Prints warnings about zeroes even if they're not considered errors. Obviously bogus coefficients are coefficients that are NaN or have absolute value greater than 1e50. Zeros have absolute value less than 1e-50. */ int verifyMtx(int verbosity = 1, bool zeroesAreError = false) const ; //@} //-------------------------------------------------------------------------- protected: void gutsOfDestructor(); void gutsOfCopyOf(const bool colordered, const int minor, const int major, const CoinBigIndex numels, const double * elem, const int * ind, const CoinBigIndex * start, const int * len, const double extraMajor=0.0, const double extraGap=0.0); /// When no gaps we can do faster void gutsOfCopyOfNoGaps(const bool colordered, const int minor, const int major, const double * elem, const int * ind, const CoinBigIndex * start); void gutsOfOpEqual(const bool colordered, const int minor, const int major, const CoinBigIndex numels, const double * elem, const int * ind, const CoinBigIndex * start, const int * len); void resizeForAddingMajorVectors(const int numVec, const int * lengthVec); void resizeForAddingMinorVectors(const int * addedEntries); /*! \brief Append a set of rows (columns) to the end of a row (colum) ordered matrix. If \p numberOther > 0 the method will check if any of the new rows (columns) contain duplicate indices or invalid indices and return the number of errors. A valid minor index must satisfy \code 0 <= k < numberOther \endcode If \p numberOther < 0 no checking is performed. */ int appendMajor(const int number, const CoinBigIndex * starts, const int * index, const double * element, int numberOther=-1); /*! \brief Append a set of rows (columns) to the end of a column (row) ordered matrix. If \p numberOther > 0 the method will check if any of the new rows (columns) contain duplicate indices or indices outside the current range for the major dimension and return the number of violations. If \p numberOther <= 0 the major dimension will be expanded as necessary and there are no checks for duplicate indices. */ int appendMinor(const int number, const CoinBigIndex * starts, const int * index, const double * element, int numberOther=-1); private: inline CoinBigIndex getLastStart() const { return majorDim_ == 0 ? 0 : start_[majorDim_]; } //-------------------------------------------------------------------------- protected: /**@name Data members The data members are protected to allow access for derived classes. */ //@{ /** A flag indicating whether the matrix is column or row major ordered. */ bool colOrdered_; /** This much times more space should be allocated for each major-dimension vector (with respect to the number of entries in the vector) when the matrix is resized. The purpose of these gaps is to allow fast insertion of new minor-dimension vectors. */ double extraGap_; /** his much times more space should be allocated for major-dimension vectors when the matrix is resized. The purpose of these gaps is to allow fast addition of new major-dimension vectors. */ double extraMajor_; /** List of nonzero element values. The entries in the gaps between major-dimension vectors are undefined. */ double *element_; /** List of nonzero element minor-dimension indices. The entries in the gaps between major-dimension vectors are undefined. */ int *index_; /** Starting positions of major-dimension vectors. */ CoinBigIndex *start_; /** Lengths of major-dimension vectors. */ int *length_; /// number of vectors in matrix int majorDim_; /// size of other dimension int minorDim_; /// the number of nonzero entries CoinBigIndex size_; /// max space allocated for major-dimension int maxMajorDim_; /// max space allocated for entries CoinBigIndex maxSize_; //@} }; //############################################################################# /*! \brief Test the methods in the CoinPackedMatrix class. The only reason for it not to be a member method is that this way it doesn't have to be compiled into the library. And that's a gain, because the library should be compiled with optimization on, but this method should be compiled with debugging. */ void CoinPackedMatrixUnitTest(); #endif CoinUtils-2.9.10/CoinUtils/src/CoinDenseVector.hpp0000644000076600007660000002704511510456064020447 0ustar coincoin/* $Id: CoinDenseVector.hpp 1372 2011-01-03 23:31:00Z lou $ */ // 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 CoinDenseVector_H #define CoinDenseVector_H #if defined(_MSC_VER) // Turn off compiler warning about long names # pragma warning(disable:4786) #endif #include #include #include #include "CoinHelperFunctions.hpp" //############################################################################# /** A function that tests the methods in the CoinDenseVector class. The only reason for it not to be a member method is that this way it doesn't have to be compiled into the library. And that's a gain, because the library should be compiled with optimization on, but this method should be compiled with debugging. */ template void CoinDenseVectorUnitTest(T dummy); //############################################################################# /** Dense Vector Stores a dense (or expanded) vector of floating point values. Type of vector elements is controlled by templating. (Some working quantities such as accumulated sums are explicitly declared of type double). This allows the components of the vector integer, single or double precision. Here is a sample usage: @verbatim const int ne = 4; double el[ne] = { 10., 40., 1., 50. } // Create vector and set its value CoinDenseVector r(ne,el); // access each element assert( r.getElements()[0]==10. ); assert( r.getElements()[1]==40. ); assert( r.getElements()[2]== 1. ); assert( r.getElements()[3]==50. ); // Test for equality CoinDenseVector r1; r1=r; // Add dense vectors. // Similarly for subtraction, multiplication, // and division. CoinDenseVector add = r + r1; assert( add[0] == 10.+10. ); assert( add[1] == 40.+40. ); assert( add[2] == 1.+ 1. ); assert( add[3] == 50.+50. ); assert( r.sum() == 10.+40.+1.+50. ); @endverbatim */ template class CoinDenseVector { private: /**@name Private member data */ //@{ /// Size of element vector int nElements_; ///Vector elements T * elements_; //@} public: /**@name Get methods. */ //@{ /// Get the size inline int getNumElements() const { return nElements_; } inline int size() const { return nElements_; } /// Get element values inline const T * getElements() const { return elements_; } /// Get element values inline T * getElements() { return elements_; } //@} //------------------------------------------------------------------- // Set indices and elements //------------------------------------------------------------------- /**@name Set methods */ //@{ /// Reset the vector (i.e. set all elemenets to zero) void clear(); /** Assignment operator */ CoinDenseVector & operator=(const CoinDenseVector &); /** Member of array operator */ T & operator[](int index) const; /** Set vector size, and elements. Size is the length of the elements vector. The element vector is copied into this class instance's member data. */ void setVector(int size, const T * elems); /** Elements set to have the same scalar value */ void setConstant(int size, T elems); /** Set an existing element in the dense vector The first argument is the "index" into the elements() array */ void setElement(int index, T element); /** Resize the dense vector to be the first newSize elements. If length is decreased, vector is truncated. If increased new entries, set to new default element */ void resize(int newSize, T fill=T()); /** Append a dense vector to this dense vector */ void append(const CoinDenseVector &); //@} /**@name norms, sum and scale */ //@{ /// 1-norm of vector inline T oneNorm() const { T norm = 0; for (int i=0; ivalue to every entry void operator+=(T value); /// subtract value from every entry void operator-=(T value); /// multiply every entry by value void operator*=(T value); /// divide every entry by value void operator/=(T value); //@} /**@name Constructors and destructors */ //@{ /** Default constructor */ CoinDenseVector(); /** Alternate Constructors - set elements to vector of Ts */ CoinDenseVector(int size, const T * elems); /** Alternate Constructors - set elements to same scalar value */ CoinDenseVector(int size, T element=T()); /** Copy constructors */ CoinDenseVector(const CoinDenseVector &); /** Destructor */ ~CoinDenseVector (); //@} private: /**@name Private methods */ //@{ /// Copy internal data void gutsOfSetVector(int size, const T * elems); /// Set all elements to a given value void gutsOfSetConstant(int size, T value); //@} }; //############################################################################# /**@name Arithmetic operators on dense vectors. NOTE: Because these methods return an object (they can't return a reference, though they could return a pointer...) they are very inefficient... */ //@{ /// Return the sum of two dense vectors template inline CoinDenseVector operator+(const CoinDenseVector& op1, const CoinDenseVector& op2){ assert(op1.size() == op2.size()); int size = op1.size(); CoinDenseVector op3(size); const T *elements1 = op1.getElements(); const T *elements2 = op2.getElements(); T *elements3 = op3.getElements(); for(int i=0; i inline CoinDenseVector operator-(const CoinDenseVector& op1, const CoinDenseVector& op2){ assert(op1.size() == op2.size()); int size = op1.size(); CoinDenseVector op3(size); const T *elements1 = op1.getElements(); const T *elements2 = op2.getElements(); T *elements3 = op3.getElements(); for(int i=0; i inline CoinDenseVector operator*(const CoinDenseVector& op1, const CoinDenseVector& op2){ assert(op1.size() == op2.size()); int size = op1.size(); CoinDenseVector op3(size); const T *elements1 = op1.getElements(); const T *elements2 = op2.getElements(); T *elements3 = op3.getElements(); for(int i=0; i inline CoinDenseVector operator/(const CoinDenseVector& op1, const CoinDenseVector& op2){ assert(op1.size() == op2.size()); int size = op1.size(); CoinDenseVector op3(size); const T *elements1 = op1.getElements(); const T *elements2 = op2.getElements(); T *elements3 = op3.getElements(); for(int i=0; iop1 and the specified operation is done entry-wise with the given value. */ //@{ /// Return the sum of a dense vector and a constant template inline CoinDenseVector operator+(const CoinDenseVector& op1, T value){ int size = op1.size(); CoinDenseVector op3(size); const T *elements1 = op1.getElements(); T *elements3 = op3.getElements(); double dvalue = value; for(int i=0; i inline CoinDenseVector operator-(const CoinDenseVector& op1, T value){ int size = op1.size(); CoinDenseVector op3(size); const T *elements1 = op1.getElements(); T *elements3 = op3.getElements(); double dvalue = value; for(int i=0; i inline CoinDenseVector operator*(const CoinDenseVector& op1, T value){ int size = op1.size(); CoinDenseVector op3(size); const T *elements1 = op1.getElements(); T *elements3 = op3.getElements(); double dvalue = value; for(int i=0; i inline CoinDenseVector operator/(const CoinDenseVector& op1, T value){ int size = op1.size(); CoinDenseVector op3(size); const T *elements1 = op1.getElements(); T *elements3 = op3.getElements(); double dvalue = value; for(int i=0; i inline CoinDenseVector operator+(T value, const CoinDenseVector& op1){ int size = op1.size(); CoinDenseVector op3(size); const T *elements1 = op1.getElements(); T *elements3 = op3.getElements(); double dvalue = value; for(int i=0; i inline CoinDenseVector operator-(T value, const CoinDenseVector& op1){ int size = op1.size(); CoinDenseVector op3(size); const T *elements1 = op1.getElements(); T *elements3 = op3.getElements(); double dvalue = value; for(int i=0; i inline CoinDenseVector operator*(T value, const CoinDenseVector& op1){ int size = op1.size(); CoinDenseVector op3(size); const T *elements1 = op1.getElements(); T *elements3 = op3.getElements(); double dvalue = value; for(int i=0; i inline CoinDenseVector operator/(T value, const CoinDenseVector& op1){ int size = op1.size(); CoinDenseVector op3(size); const T *elements1 = op1.getElements(); T *elements3 = op3.getElements(); double dvalue = value; for(int i=0; i #include #include "CoinFinite.hpp" /*! \file CoinFloatEqual.hpp \brief Function objects for testing equality of real numbers. Two objects are provided; one tests for equality to an absolute tolerance, one to a scaled tolerance. The tests will handle IEEE floating point, but note that infinity == infinity. Mathematicians are rolling in their graves, but this matches the behaviour for the common practice of using DBL_MAX (numeric_limits::max(), or similar large finite number) as infinity.

Example usage: @verbatim double d1 = 3.14159 ; double d2 = d1 ; double d3 = d1+.0001 ; CoinAbsFltEq eq1 ; CoinAbsFltEq eq2(.001) ; assert( eq1(d1,d2) ) ; assert( !eq1(d1,d3) ) ; assert( eq2(d1,d3) ) ; @endverbatim CoinRelFltEq follows the same pattern. */ /*! \brief Equality to an absolute tolerance Operands are considered equal if their difference is within an epsilon ; the test does not consider the relative magnitude of the operands. */ class CoinAbsFltEq { public: //! Compare function inline bool operator() (const double f1, const double f2) const { if (CoinIsnan(f1) || CoinIsnan(f2)) return false ; if (f1 == f2) return true ; return (fabs(f1-f2) < epsilon_) ; } /*! \name Constructors and destructors */ //@{ /*! \brief Default constructor Default tolerance is 1.0e-10. */ CoinAbsFltEq () : epsilon_(1.e-10) {} //! Alternate constructor with epsilon as a parameter CoinAbsFltEq (const double epsilon) : epsilon_(epsilon) {} //! Destructor virtual ~CoinAbsFltEq () {} //! Copy constructor CoinAbsFltEq (const CoinAbsFltEq& src) : epsilon_(src.epsilon_) {} //! Assignment CoinAbsFltEq& operator= (const CoinAbsFltEq& rhs) { if (this != &rhs) epsilon_ = rhs.epsilon_ ; return (*this) ; } //@} private: /*! \name Private member data */ //@{ //! Equality tolerance. double epsilon_ ; //@} } ; /*! \brief Equality to a scaled tolerance Operands are considered equal if their difference is within a scaled epsilon calculated as epsilon_*(1+CoinMax(|f1|,|f2|)). */ class CoinRelFltEq { public: //! Compare function inline bool operator() (const double f1, const double f2) const { if (CoinIsnan(f1) || CoinIsnan(f2)) return false ; if (f1 == f2) return true ; if (!CoinFinite(f1) || !CoinFinite(f2)) return false ; double tol = (fabs(f1)>fabs(f2))?fabs(f1):fabs(f2) ; return (fabs(f1-f2) <= epsilon_*(1+tol)) ; } /*! \name Constructors and destructors */ //@{ #ifndef COIN_FLOAT /*! Default constructor Default tolerance is 1.0e-10. */ CoinRelFltEq () : epsilon_(1.e-10) {} #else /*! Default constructor Default tolerance is 1.0e-6. */ CoinRelFltEq () : epsilon_(1.e-6) {} ; // as float #endif //! Alternate constructor with epsilon as a parameter CoinRelFltEq (const double epsilon) : epsilon_(epsilon) {} //! Destructor virtual ~CoinRelFltEq () {} //! Copy constructor CoinRelFltEq (const CoinRelFltEq & src) : epsilon_(src.epsilon_) {} //! Assignment CoinRelFltEq& operator= (const CoinRelFltEq& rhs) { if (this != &rhs) epsilon_ = rhs.epsilon_ ; return (*this) ; } //@} private: /*! \name Private member data */ //@{ //! Base equality tolerance double epsilon_ ; //@} } ; #endif CoinUtils-2.9.10/CoinUtils/src/CoinFactorization.hpp0000644000076600007660000016320612131313741021034 0ustar coincoin/* $Id: CoinFactorization.hpp 1590 2013-04-10 16:48:33Z stefan $ */ // 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). /* Authors John Forrest */ #ifndef CoinFactorization_H #define CoinFactorization_H //#define COIN_ONE_ETA_COPY 100 #include #include #include #include #include #include "CoinTypes.hpp" #include "CoinIndexedVector.hpp" class CoinPackedMatrix; /** This deals with Factorization and Updates This class started with a parallel simplex code I was writing in the mid 90's. The need for parallelism led to many complications and I have simplified as much as I could to get back to this. I was aiming at problems where I might get speed-up so I was looking at dense problems or ones with structure. This led to permuting input and output vectors and to increasing the number of rows each rank-one update. This is still in as a minor overhead. I have also put in handling for hyper-sparsity. I have taken out all outer loop unrolling, dense matrix handling and most of the book-keeping for slacks. Also I always use FTRAN approach to updating even if factorization fairly dense. All these could improve performance. I blame some of the coding peculiarities on the history of the code but mostly it is just because I can't do elegant code (or useful comments). I am assuming that 32 bits is enough for number of rows or columns, but CoinBigIndex may be redefined to get 64 bits. */ class CoinFactorization { friend void CoinFactorizationUnitTest( const std::string & mpsDir ); public: /**@name Constructors and destructor and copy */ //@{ /// Default constructor CoinFactorization ( ); /// Copy constructor CoinFactorization ( const CoinFactorization &other); /// Destructor ~CoinFactorization ( ); /// Delete all stuff (leaves as after CoinFactorization()) void almostDestructor(); /// Debug show object (shows one representation) void show_self ( ) const; /// Debug - save on file - 0 if no error int saveFactorization (const char * file ) const; /** Debug - restore from file - 0 if no error on file. If factor true then factorizes as if called from ClpFactorization */ int restoreFactorization (const char * file , bool factor=false) ; /// Debug - sort so can compare void sort ( ) const; /// = copy CoinFactorization & operator = ( const CoinFactorization & other ); //@} /**@name Do factorization */ //@{ /** When part of LP - given by basic variables. Actually does factorization. Arrays passed in have non negative value to say basic. If status is okay, basic variables have pivot row - this is only needed If status is singular, then basic variables have pivot row and ones thrown out have -1 returns 0 -okay, -1 singular, -2 too many in basis, -99 memory */ int factorize ( const CoinPackedMatrix & matrix, int rowIsBasic[], int columnIsBasic[] , double areaFactor = 0.0 ); /** When given as triplets. Actually does factorization. maximumL is guessed maximum size of L part of final factorization, maximumU of U part. These are multiplied by areaFactor which can be computed by user or internally. Arrays are copied in. I could add flag to delete arrays to save a bit of memory. If status okay, permutation has pivot rows - this is only needed If status is singular, then basic variables have pivot row and ones thrown out have -1 returns 0 -okay, -1 singular, -99 memory */ int factorize ( int numberRows, int numberColumns, CoinBigIndex numberElements, CoinBigIndex maximumL, CoinBigIndex maximumU, const int indicesRow[], const int indicesColumn[], const double elements[] , int permutation[], double areaFactor = 0.0); /** Two part version for maximum flexibility This part creates arrays for user to fill. estimateNumberElements is safe estimate of number returns 0 -okay, -99 memory */ int factorizePart1 ( int numberRows, int numberColumns, CoinBigIndex estimateNumberElements, int * indicesRow[], int * indicesColumn[], CoinFactorizationDouble * elements[], double areaFactor = 0.0); /** This is part two of factorization Arrays belong to factorization and were returned by part 1 If status okay, permutation has pivot rows - this is only needed If status is singular, then basic variables have pivot row and ones thrown out have -1 returns 0 -okay, -1 singular, -99 memory */ int factorizePart2 (int permutation[],int exactNumberElements); /// Condition number - product of pivots after factorization double conditionNumber() const; //@} /**@name general stuff such as permutation or status */ //@{ /// Returns status inline int status ( ) const { return status_; } /// Sets status inline void setStatus ( int value) { status_=value; } /// Returns number of pivots since factorization inline int pivots ( ) const { return numberPivots_; } /// Sets number of pivots since factorization inline void setPivots ( int value ) { numberPivots_=value; } /// Returns address of permute region inline int *permute ( ) const { return permute_.array(); } /// Returns address of pivotColumn region (also used for permuting) inline int *pivotColumn ( ) const { return pivotColumn_.array(); } /// Returns address of pivot region inline CoinFactorizationDouble *pivotRegion ( ) const { return pivotRegion_.array(); } /// Returns address of permuteBack region inline int *permuteBack ( ) const { return permuteBack_.array(); } /** Returns address of pivotColumnBack region (also used for permuting) Now uses firstCount to save memory allocation */ inline int *pivotColumnBack ( ) const { //return firstCount_.array(); return pivotColumnBack_.array(); } /// Start of each row in L inline CoinBigIndex * startRowL() const { return startRowL_.array();} /// Start of each column in L inline CoinBigIndex * startColumnL() const { return startColumnL_.array();} /// Index of column in row for L inline int * indexColumnL() const { return indexColumnL_.array();} /// Row indices of L inline int * indexRowL() const { return indexRowL_.array();} /// Elements in L (row copy) inline CoinFactorizationDouble * elementByRowL() const { return elementByRowL_.array();} /// Number of Rows after iterating inline int numberRowsExtra ( ) const { return numberRowsExtra_; } /// Set number of Rows after factorization inline void setNumberRows(int value) { numberRows_ = value; } /// Number of Rows after factorization inline int numberRows ( ) const { return numberRows_; } /// Number in L inline CoinBigIndex numberL() const { return numberL_;} /// Base of L inline CoinBigIndex baseL() const { return baseL_;} /// Maximum of Rows after iterating inline int maximumRowsExtra ( ) const { return maximumRowsExtra_; } /// Total number of columns in factorization inline int numberColumns ( ) const { return numberColumns_; } /// Total number of elements in factorization inline int numberElements ( ) const { return totalElements_; } /// Length of FT vector inline int numberForrestTomlin ( ) const { return numberInColumn_.array()[numberColumnsExtra_]; } /// Number of good columns in factorization inline int numberGoodColumns ( ) const { return numberGoodU_; } /// Whether larger areas needed inline double areaFactor ( ) const { return areaFactor_; } inline void areaFactor ( double value ) { areaFactor_=value; } /// Returns areaFactor but adjusted for dense double adjustedAreaFactor() const; /// Allows change of pivot accuracy check 1.0 == none >1.0 relaxed inline void relaxAccuracyCheck(double value) { relaxCheck_ = value;} inline double getAccuracyCheck() const { return relaxCheck_;} /// Level of detail of messages inline int messageLevel ( ) const { return messageLevel_ ; } void messageLevel ( int value ); /// Maximum number of pivots between factorizations inline int maximumPivots ( ) const { return maximumPivots_ ; } void maximumPivots ( int value ); /// Gets dense threshold inline int denseThreshold() const { return denseThreshold_;} /// Sets dense threshold inline void setDenseThreshold(int value) { denseThreshold_ = value;} /// Pivot tolerance inline double pivotTolerance ( ) const { return pivotTolerance_ ; } void pivotTolerance ( double value ); /// Zero tolerance inline double zeroTolerance ( ) const { return zeroTolerance_ ; } void zeroTolerance ( double value ); #ifndef COIN_FAST_CODE /// Whether slack value is +1 or -1 inline double slackValue ( ) const { return slackValue_ ; } void slackValue ( double value ); #endif /// Returns maximum absolute value in factorization double maximumCoefficient() const; /// true if Forrest Tomlin update, false if PFI inline bool forrestTomlin() const { return doForrestTomlin_;} inline void setForrestTomlin(bool value) { doForrestTomlin_=value;} /// True if FT update and space inline bool spaceForForrestTomlin() const { CoinBigIndex start = startColumnU_.array()[maximumColumnsExtra_]; CoinBigIndex space = lengthAreaU_ - ( start + numberRowsExtra_ ); return (space>=0)&&doForrestTomlin_; } //@} /**@name some simple stuff */ //@{ /// Returns number of dense rows inline int numberDense() const { return numberDense_;} /// Returns number in U area inline CoinBigIndex numberElementsU ( ) const { return lengthU_; } /// Setss number in U area inline void setNumberElementsU(CoinBigIndex value) { lengthU_ = value; } /// Returns length of U area inline CoinBigIndex lengthAreaU ( ) const { return lengthAreaU_; } /// Returns number in L area inline CoinBigIndex numberElementsL ( ) const { return lengthL_; } /// Returns length of L area inline CoinBigIndex lengthAreaL ( ) const { return lengthAreaL_; } /// Returns number in R area inline CoinBigIndex numberElementsR ( ) const { return lengthR_; } /// Number of compressions done inline CoinBigIndex numberCompressions() const { return numberCompressions_;} /// Number of entries in each row inline int * numberInRow() const { return numberInRow_.array();} /// Number of entries in each column inline int * numberInColumn() const { return numberInColumn_.array();} /// Elements of U inline CoinFactorizationDouble * elementU() const { return elementU_.array();} /// Row indices of U inline int * indexRowU() const { return indexRowU_.array();} /// Start of each column in U inline CoinBigIndex * startColumnU() const { return startColumnU_.array();} /// Maximum number of Columns after iterating inline int maximumColumnsExtra() { return maximumColumnsExtra_;} /** L to U bias 0 - U bias, 1 - some U bias, 2 some L bias, 3 L bias */ inline int biasLU() const { return biasLU_;} inline void setBiasLU(int value) { biasLU_=value;} /** Array persistence flag If 0 then as now (delete/new) 1 then only do arrays if bigger needed 2 as 1 but give a bit extra if bigger needed */ inline int persistenceFlag() const { return persistenceFlag_;} void setPersistenceFlag(int value); //@} /**@name rank one updates which do exist */ //@{ /** Replaces one Column to basis, returns 0=OK, 1=Probably OK, 2=singular, 3=no room If checkBeforeModifying is true will do all accuracy checks before modifying factorization. Whether to set this depends on speed considerations. You could just do this on first iteration after factorization and thereafter re-factorize partial update already in U */ int replaceColumn ( CoinIndexedVector * regionSparse, int pivotRow, double pivotCheck , bool checkBeforeModifying=false, double acceptablePivot=1.0e-8); /** Combines BtranU and delete elements If deleted is NULL then delete elements otherwise store where elements are */ void replaceColumnU ( CoinIndexedVector * regionSparse, CoinBigIndex * deleted, int internalPivotRow); //@} /**@name various uses of factorization (return code number elements) which user may want to know about */ //@{ /** Updates one column (FTRAN) from regionSparse2 Tries to do FT update number returned is negative if no room regionSparse starts as zero and is zero at end. Note - if regionSparse2 packed on input - will be packed on output */ int updateColumnFT ( CoinIndexedVector * regionSparse, CoinIndexedVector * regionSparse2); /** This version has same effect as above with FTUpdate==false so number returned is always >=0 */ int updateColumn ( CoinIndexedVector * regionSparse, CoinIndexedVector * regionSparse2, bool noPermute=false) const; /** Updates one column (FTRAN) from region2 Tries to do FT update number returned is negative if no room. Also updates region3 region1 starts as zero and is zero at end */ int updateTwoColumnsFT ( CoinIndexedVector * regionSparse1, CoinIndexedVector * regionSparse2, CoinIndexedVector * regionSparse3, bool noPermuteRegion3=false) ; /** Updates one column (BTRAN) from regionSparse2 regionSparse starts as zero and is zero at end Note - if regionSparse2 packed on input - will be packed on output */ int updateColumnTranspose ( CoinIndexedVector * regionSparse, CoinIndexedVector * regionSparse2) const; /** makes a row copy of L for speed and to allow very sparse problems */ void goSparse(); /** get sparse threshold */ inline int sparseThreshold ( ) const { return sparseThreshold_;} /** set sparse threshold */ void sparseThreshold ( int value ); //@} /// *** Below this user may not want to know about /**@name various uses of factorization (return code number elements) which user may not want to know about (left over from my LP code) */ //@{ /// Get rid of all memory inline void clearArrays() { gutsOfDestructor();} //@} /**@name various updates - none of which have been written! */ //@{ /** Adds given elements to Basis and updates factorization, can increase size of basis. Returns rank */ int add ( CoinBigIndex numberElements, int indicesRow[], int indicesColumn[], double elements[] ); /** Adds one Column to basis, can increase size of basis. Returns rank */ int addColumn ( CoinBigIndex numberElements, int indicesRow[], double elements[] ); /** Adds one Row to basis, can increase size of basis. Returns rank */ int addRow ( CoinBigIndex numberElements, int indicesColumn[], double elements[] ); /// Deletes one Column from basis, returns rank int deleteColumn ( int Row ); /// Deletes one Row from basis, returns rank int deleteRow ( int Row ); /** Replaces one Row in basis, At present assumes just a singleton on row is in basis returns 0=OK, 1=Probably OK, 2=singular, 3 no space */ int replaceRow ( int whichRow, int numberElements, const int indicesColumn[], const double elements[] ); /// Takes out all entries for given rows void emptyRows(int numberToEmpty, const int which[]); //@} /**@name used by ClpFactorization */ /// See if worth going sparse void checkSparse(); /// For statistics inline bool collectStatistics() const { return collectStatistics_;} /// For statistics inline void setCollectStatistics(bool onOff) const { collectStatistics_ = onOff;} /// The real work of constructors etc 0 just scalars, 1 bit normal void gutsOfDestructor(int type=1); /// 1 bit - tolerances etc, 2 more, 4 dummy arrays void gutsOfInitialize(int type); void gutsOfCopy(const CoinFactorization &other); /// Reset all sparsity etc statistics void resetStatistics(); //@} /**@name used by factorization */ /// Gets space for a factorization, called by constructors void getAreas ( int numberRows, int numberColumns, CoinBigIndex maximumL, CoinBigIndex maximumU ); /** PreProcesses raw triplet data. state is 0 - triplets, 1 - some counts etc , 2 - .. */ void preProcess ( int state, int possibleDuplicates = -1 ); /// Does most of factorization int factor ( ); protected: /** Does sparse phase of factorization return code is <0 error, 0= finished */ int factorSparse ( ); /** Does sparse phase of factorization (for smaller problems) return code is <0 error, 0= finished */ int factorSparseSmall ( ); /** Does sparse phase of factorization (for larger problems) return code is <0 error, 0= finished */ int factorSparseLarge ( ); /** Does dense phase of factorization return code is <0 error, 0= finished */ int factorDense ( ); /// Pivots when just one other row so faster? bool pivotOneOtherRow ( int pivotRow, int pivotColumn ); /// Does one pivot on Row Singleton in factorization bool pivotRowSingleton ( int pivotRow, int pivotColumn ); /// Does one pivot on Column Singleton in factorization bool pivotColumnSingleton ( int pivotRow, int pivotColumn ); /** Gets space for one Column with given length, may have to do compression (returns True if successful), also moves existing vector, extraNeeded is over and above present */ bool getColumnSpace ( int iColumn, int extraNeeded ); /** Reorders U so contiguous and in order (if there is space) Returns true if it could */ bool reorderU(); /** getColumnSpaceIterateR. Gets space for one extra R element in Column may have to do compression (returns true) also moves existing vector */ bool getColumnSpaceIterateR ( int iColumn, double value, int iRow); /** getColumnSpaceIterate. Gets space for one extra U element in Column may have to do compression (returns true) also moves existing vector. Returns -1 if no memory or where element was put Used by replaceRow (turns off R version) */ CoinBigIndex getColumnSpaceIterate ( int iColumn, double value, int iRow); /** Gets space for one Row with given length, may have to do compression (returns True if successful), also moves existing vector */ bool getRowSpace ( int iRow, int extraNeeded ); /** Gets space for one Row with given length while iterating, may have to do compression (returns True if successful), also moves existing vector */ bool getRowSpaceIterate ( int iRow, int extraNeeded ); /// Checks that row and column copies look OK void checkConsistency ( ); /// Adds a link in chain of equal counts inline void addLink ( int index, int count ) { int *nextCount = nextCount_.array(); int *firstCount = firstCount_.array(); int *lastCount = lastCount_.array(); int next = firstCount[count]; lastCount[index] = -2 - count; if ( next < 0 ) { //first with that count firstCount[count] = index; nextCount[index] = -1; } else { firstCount[count] = index; nextCount[index] = next; lastCount[next] = index; }} /// Deletes a link in chain of equal counts inline void deleteLink ( int index ) { int *nextCount = nextCount_.array(); int *firstCount = firstCount_.array(); int *lastCount = lastCount_.array(); int next = nextCount[index]; int last = lastCount[index]; if ( last >= 0 ) { nextCount[last] = next; } else { int count = -last - 2; firstCount[count] = next; } if ( next >= 0 ) { lastCount[next] = last; } nextCount[index] = -2; lastCount[index] = -2; return; } /// Separate out links with same row/column count void separateLinks(int count,bool rowsFirst); /// Cleans up at end of factorization void cleanup ( ); /// Updates part of column (FTRANL) void updateColumnL ( CoinIndexedVector * region, int * indexIn ) const; /// Updates part of column (FTRANL) when densish void updateColumnLDensish ( CoinIndexedVector * region, int * indexIn ) const; /// Updates part of column (FTRANL) when sparse void updateColumnLSparse ( CoinIndexedVector * region, int * indexIn ) const; /// Updates part of column (FTRANL) when sparsish void updateColumnLSparsish ( CoinIndexedVector * region, int * indexIn ) const; /// Updates part of column (FTRANR) without FT update void updateColumnR ( CoinIndexedVector * region ) const; /** Updates part of column (FTRANR) with FT update. Also stores update after L and R */ void updateColumnRFT ( CoinIndexedVector * region, int * indexIn ); /// Updates part of column (FTRANU) void updateColumnU ( CoinIndexedVector * region, int * indexIn) const; /// Updates part of column (FTRANU) when sparse void updateColumnUSparse ( CoinIndexedVector * regionSparse, int * indexIn) const; /// Updates part of column (FTRANU) when sparsish void updateColumnUSparsish ( CoinIndexedVector * regionSparse, int * indexIn) const; /// Updates part of column (FTRANU) int updateColumnUDensish ( double * COIN_RESTRICT region, int * COIN_RESTRICT regionIndex) const; /// Updates part of 2 columns (FTRANU) real work void updateTwoColumnsUDensish ( int & numberNonZero1, double * COIN_RESTRICT region1, int * COIN_RESTRICT index1, int & numberNonZero2, double * COIN_RESTRICT region2, int * COIN_RESTRICT index2) const; /// Updates part of column PFI (FTRAN) (after rest) void updateColumnPFI ( CoinIndexedVector * regionSparse) const; /// Permutes back at end of updateColumn void permuteBack ( CoinIndexedVector * regionSparse, CoinIndexedVector * outVector) const; /// Updates part of column transpose PFI (BTRAN) (before rest) void updateColumnTransposePFI ( CoinIndexedVector * region) const; /** Updates part of column transpose (BTRANU), assumes index is sorted i.e. region is correct */ void updateColumnTransposeU ( CoinIndexedVector * region, int smallestIndex) const; /** Updates part of column transpose (BTRANU) when sparsish, assumes index is sorted i.e. region is correct */ void updateColumnTransposeUSparsish ( CoinIndexedVector * region, int smallestIndex) const; /** Updates part of column transpose (BTRANU) when densish, assumes index is sorted i.e. region is correct */ void updateColumnTransposeUDensish ( CoinIndexedVector * region, int smallestIndex) const; /** Updates part of column transpose (BTRANU) when sparse, assumes index is sorted i.e. region is correct */ void updateColumnTransposeUSparse ( CoinIndexedVector * region) const; /** Updates part of column transpose (BTRANU) by column assumes index is sorted i.e. region is correct */ void updateColumnTransposeUByColumn ( CoinIndexedVector * region, int smallestIndex) const; /// Updates part of column transpose (BTRANR) void updateColumnTransposeR ( CoinIndexedVector * region ) const; /// Updates part of column transpose (BTRANR) when dense void updateColumnTransposeRDensish ( CoinIndexedVector * region ) const; /// Updates part of column transpose (BTRANR) when sparse void updateColumnTransposeRSparse ( CoinIndexedVector * region ) const; /// Updates part of column transpose (BTRANL) void updateColumnTransposeL ( CoinIndexedVector * region ) const; /// Updates part of column transpose (BTRANL) when densish by column void updateColumnTransposeLDensish ( CoinIndexedVector * region ) const; /// Updates part of column transpose (BTRANL) when densish by row void updateColumnTransposeLByRow ( CoinIndexedVector * region ) const; /// Updates part of column transpose (BTRANL) when sparsish by row void updateColumnTransposeLSparsish ( CoinIndexedVector * region ) const; /// Updates part of column transpose (BTRANL) when sparse (by Row) void updateColumnTransposeLSparse ( CoinIndexedVector * region ) const; public: /** Replaces one Column to basis for PFI returns 0=OK, 1=Probably OK, 2=singular, 3=no room. In this case region is not empty - it is incoming variable (updated) */ int replaceColumnPFI ( CoinIndexedVector * regionSparse, int pivotRow, double alpha); protected: /** Returns accuracy status of replaceColumn returns 0=OK, 1=Probably OK, 2=singular */ int checkPivot(double saveFromU, double oldPivot) const; /********************************* START LARGE TEMPLATE ********/ #ifdef INT_IS_8 #define COINFACTORIZATION_BITS_PER_INT 64 #define COINFACTORIZATION_SHIFT_PER_INT 6 #define COINFACTORIZATION_MASK_PER_INT 0x3f #else #define COINFACTORIZATION_BITS_PER_INT 32 #define COINFACTORIZATION_SHIFT_PER_INT 5 #define COINFACTORIZATION_MASK_PER_INT 0x1f #endif template inline bool pivot ( int pivotRow, int pivotColumn, CoinBigIndex pivotRowPosition, CoinBigIndex pivotColumnPosition, CoinFactorizationDouble work[], unsigned int workArea2[], int increment2, T markRow[] , int largeInteger) { int *indexColumnU = indexColumnU_.array(); CoinBigIndex *startColumnU = startColumnU_.array(); int *numberInColumn = numberInColumn_.array(); CoinFactorizationDouble *elementU = elementU_.array(); int *indexRowU = indexRowU_.array(); CoinBigIndex *startRowU = startRowU_.array(); int *numberInRow = numberInRow_.array(); CoinFactorizationDouble *elementL = elementL_.array(); int *indexRowL = indexRowL_.array(); int *saveColumn = saveColumn_.array(); int *nextRow = nextRow_.array(); int *lastRow = lastRow_.array() ; //store pivot columns (so can easily compress) int numberInPivotRow = numberInRow[pivotRow] - 1; CoinBigIndex startColumn = startColumnU[pivotColumn]; int numberInPivotColumn = numberInColumn[pivotColumn] - 1; CoinBigIndex endColumn = startColumn + numberInPivotColumn + 1; int put = 0; CoinBigIndex startRow = startRowU[pivotRow]; CoinBigIndex endRow = startRow + numberInPivotRow + 1; if ( pivotColumnPosition < 0 ) { for ( pivotColumnPosition = startRow; pivotColumnPosition < endRow; pivotColumnPosition++ ) { int iColumn = indexColumnU[pivotColumnPosition]; if ( iColumn != pivotColumn ) { saveColumn[put++] = iColumn; } else { break; } } } else { for (CoinBigIndex i = startRow ; i < pivotColumnPosition ; i++ ) { saveColumn[put++] = indexColumnU[i]; } } assert (pivotColumnPosition lengthAreaL_ ) { //need more memory if ((messageLevel_&4)!=0) printf("more memory needed in middle of invert\n"); return false; } //l+=currentAreaL_->elementByColumn-elementL; CoinBigIndex lSave = l; CoinBigIndex * startColumnL = startColumnL_.array(); startColumnL[numberGoodL_] = l; //for luck and first time numberGoodL_++; startColumnL[numberGoodL_] = l + numberInPivotColumn; lengthL_ += numberInPivotColumn; if ( pivotRowPosition < 0 ) { for ( pivotRowPosition = startColumn; pivotRowPosition < endColumn; pivotRowPosition++ ) { int iRow = indexRowU[pivotRowPosition]; if ( iRow != pivotRow ) { indexRowL[l] = iRow; elementL[l] = elementU[pivotRowPosition]; markRow[iRow] = static_cast(l - lSave); l++; //take out of row list CoinBigIndex start = startRowU[iRow]; CoinBigIndex end = start + numberInRow[iRow]; CoinBigIndex where = start; while ( indexColumnU[where] != pivotColumn ) { where++; } /* endwhile */ #if DEBUG_COIN if ( where >= end ) { abort ( ); } #endif indexColumnU[where] = indexColumnU[end - 1]; numberInRow[iRow]--; } else { break; } } } else { CoinBigIndex i; for ( i = startColumn; i < pivotRowPosition; i++ ) { int iRow = indexRowU[i]; markRow[iRow] = static_cast(l - lSave); indexRowL[l] = iRow; elementL[l] = elementU[i]; l++; //take out of row list CoinBigIndex start = startRowU[iRow]; CoinBigIndex end = start + numberInRow[iRow]; CoinBigIndex where = start; while ( indexColumnU[where] != pivotColumn ) { where++; } /* endwhile */ #if DEBUG_COIN if ( where >= end ) { abort ( ); } #endif indexColumnU[where] = indexColumnU[end - 1]; numberInRow[iRow]--; assert (numberInRow[iRow]>=0); } } assert (pivotRowPosition(l - lSave); indexRowL[l] = iRow; elementL[l] = elementU[pivotRowPosition]; l++; //take out of row list CoinBigIndex start = startRowU[iRow]; CoinBigIndex end = start + numberInRow[iRow]; CoinBigIndex where = start; while ( indexColumnU[where] != pivotColumn ) { where++; } /* endwhile */ #if DEBUG_COIN if ( where >= end ) { abort ( ); } #endif indexColumnU[where] = indexColumnU[end - 1]; numberInRow[iRow]--; assert (numberInRow[iRow]>=0); } markRow[pivotRow] = static_cast(largeInteger); //compress pivot column (move pivot to front including saved) numberInColumn[pivotColumn] = 0; //use end of L for temporary space int *indexL = &indexRowL[lSave]; CoinFactorizationDouble *multipliersL = &elementL[lSave]; //adjust int j; for ( j = 0; j < numberInPivotColumn; j++ ) { multipliersL[j] *= pivotMultiplier; } //zero out fill CoinBigIndex iErase; for ( iErase = 0; iErase < increment2 * numberInPivotRow; iErase++ ) { workArea2[iErase] = 0; } CoinBigIndex added = numberInPivotRow * numberInPivotColumn; unsigned int *temp2 = workArea2; int * nextColumn = nextColumn_.array(); //pack down and move to work int jColumn; for ( jColumn = 0; jColumn < numberInPivotRow; jColumn++ ) { int iColumn = saveColumn[jColumn]; CoinBigIndex startColumn = startColumnU[iColumn]; CoinBigIndex endColumn = startColumn + numberInColumn[iColumn]; int iRow = indexRowU[startColumn]; CoinFactorizationDouble value = elementU[startColumn]; double largest; CoinBigIndex put = startColumn; CoinBigIndex positionLargest = -1; CoinFactorizationDouble thisPivotValue = 0.0; //compress column and find largest not updated bool checkLargest; int mark = markRow[iRow]; if ( mark == largeInteger+1 ) { largest = fabs ( value ); positionLargest = put; put++; checkLargest = false; } else { //need to find largest largest = 0.0; checkLargest = true; if ( mark != largeInteger ) { //will be updated work[mark] = value; int word = mark >> COINFACTORIZATION_SHIFT_PER_INT; int bit = mark & COINFACTORIZATION_MASK_PER_INT; temp2[word] = temp2[word] | ( 1 << bit ); //say already in counts added--; } else { thisPivotValue = value; } } CoinBigIndex i; for ( i = startColumn + 1; i < endColumn; i++ ) { iRow = indexRowU[i]; value = elementU[i]; int mark = markRow[iRow]; if ( mark == largeInteger+1 ) { //keep indexRowU[put] = iRow; elementU[put] = value; if ( checkLargest ) { double absValue = fabs ( value ); if ( absValue > largest ) { largest = absValue; positionLargest = put; } } put++; } else if ( mark != largeInteger ) { //will be updated work[mark] = value; int word = mark >> COINFACTORIZATION_SHIFT_PER_INT; int bit = mark & COINFACTORIZATION_MASK_PER_INT; temp2[word] = temp2[word] | ( 1 << bit ); //say already in counts added--; } else { thisPivotValue = value; } } //slot in pivot elementU[put] = elementU[startColumn]; indexRowU[put] = indexRowU[startColumn]; if ( positionLargest == startColumn ) { positionLargest = put; //follow if was largest } put++; elementU[startColumn] = thisPivotValue; indexRowU[startColumn] = pivotRow; //clean up counts startColumn++; numberInColumn[iColumn] = put - startColumn; int * numberInColumnPlus = numberInColumnPlus_.array(); numberInColumnPlus[iColumn]++; startColumnU[iColumn]++; //how much space have we got int next = nextColumn[iColumn]; CoinBigIndex space; space = startColumnU[next] - put - numberInColumnPlus[next]; //assume no zero elements if ( numberInPivotColumn > space ) { //getColumnSpace also moves fixed part if ( !getColumnSpace ( iColumn, numberInPivotColumn ) ) { return false; } //redo starts if (positionLargest >= 0) positionLargest = positionLargest + startColumnU[iColumn] - startColumn; startColumn = startColumnU[iColumn]; put = startColumn + numberInColumn[iColumn]; } double tolerance = zeroTolerance_; int *nextCount = nextCount_.array(); for ( j = 0; j < numberInPivotColumn; j++ ) { value = work[j] - thisPivotValue * multipliersL[j]; double absValue = fabs ( value ); if ( absValue > tolerance ) { work[j] = 0.0; assert (put largest ) { largest = absValue; positionLargest = put; } put++; } else { work[j] = 0.0; added--; int word = j >> COINFACTORIZATION_SHIFT_PER_INT; int bit = j & COINFACTORIZATION_MASK_PER_INT; if ( temp2[word] & ( 1 << bit ) ) { //take out of row list iRow = indexL[j]; CoinBigIndex start = startRowU[iRow]; CoinBigIndex end = start + numberInRow[iRow]; CoinBigIndex where = start; while ( indexColumnU[where] != iColumn ) { where++; } /* endwhile */ #if DEBUG_COIN if ( where >= end ) { abort ( ); } #endif indexColumnU[where] = indexColumnU[end - 1]; numberInRow[iRow]--; } else { //make sure won't be added int word = j >> COINFACTORIZATION_SHIFT_PER_INT; int bit = j & COINFACTORIZATION_MASK_PER_INT; temp2[word] = temp2[word] | ( 1 << bit ); //say already in counts } } } numberInColumn[iColumn] = put - startColumn; //move largest if ( positionLargest >= 0 ) { value = elementU[positionLargest]; iRow = indexRowU[positionLargest]; elementU[positionLargest] = elementU[startColumn]; indexRowU[positionLargest] = indexRowU[startColumn]; elementU[startColumn] = value; indexRowU[startColumn] = iRow; } //linked list for column if ( nextCount[iColumn + numberRows_] != -2 ) { //modify linked list deleteLink ( iColumn + numberRows_ ); addLink ( iColumn + numberRows_, numberInColumn[iColumn] ); } temp2 += increment2; } //get space for row list unsigned int *putBase = workArea2; int bigLoops = numberInPivotColumn >> COINFACTORIZATION_SHIFT_PER_INT; int i = 0; // do linked lists and update counts while ( bigLoops ) { bigLoops--; int bit; for ( bit = 0; bit < COINFACTORIZATION_BITS_PER_INT; i++, bit++ ) { unsigned int *putThis = putBase; int iRow = indexL[i]; //get space int number = 0; int jColumn; for ( jColumn = 0; jColumn < numberInPivotRow; jColumn++ ) { unsigned int test = *putThis; putThis += increment2; test = 1 - ( ( test >> bit ) & 1 ); number += test; } int next = nextRow[iRow]; CoinBigIndex space; space = startRowU[next] - startRowU[iRow]; number += numberInRow[iRow]; if ( space < number ) { if ( !getRowSpace ( iRow, number ) ) { return false; } } // now do putThis = putBase; next = nextRow[iRow]; number = numberInRow[iRow]; CoinBigIndex end = startRowU[iRow] + number; int saveIndex = indexColumnU[startRowU[next]]; //add in for ( jColumn = 0; jColumn < numberInPivotRow; jColumn++ ) { unsigned int test = *putThis; putThis += increment2; test = 1 - ( ( test >> bit ) & 1 ); indexColumnU[end] = saveColumn[jColumn]; end += test; } //put back next one in case zapped indexColumnU[startRowU[next]] = saveIndex; markRow[iRow] = static_cast(largeInteger+1); number = end - startRowU[iRow]; numberInRow[iRow] = number; deleteLink ( iRow ); addLink ( iRow, number ); } putBase++; } /* endwhile */ int bit; for ( bit = 0; i < numberInPivotColumn; i++, bit++ ) { unsigned int *putThis = putBase; int iRow = indexL[i]; //get space int number = 0; int jColumn; for ( jColumn = 0; jColumn < numberInPivotRow; jColumn++ ) { unsigned int test = *putThis; putThis += increment2; test = 1 - ( ( test >> bit ) & 1 ); number += test; } int next = nextRow[iRow]; CoinBigIndex space; space = startRowU[next] - startRowU[iRow]; number += numberInRow[iRow]; if ( space < number ) { if ( !getRowSpace ( iRow, number ) ) { return false; } } // now do putThis = putBase; next = nextRow[iRow]; number = numberInRow[iRow]; CoinBigIndex end = startRowU[iRow] + number; int saveIndex; saveIndex = indexColumnU[startRowU[next]]; //add in for ( jColumn = 0; jColumn < numberInPivotRow; jColumn++ ) { unsigned int test = *putThis; putThis += increment2; test = 1 - ( ( test >> bit ) & 1 ); indexColumnU[end] = saveColumn[jColumn]; end += test; } indexColumnU[startRowU[next]] = saveIndex; markRow[iRow] = static_cast(largeInteger+1); number = end - startRowU[iRow]; numberInRow[iRow] = number; deleteLink ( iRow ); addLink ( iRow, number ); } markRow[pivotRow] = static_cast(largeInteger+1); //modify linked list for pivots deleteLink ( pivotRow ); deleteLink ( pivotColumn + numberRows_ ); totalElements_ += added; return true; } /********************************* END LARGE TEMPLATE ********/ //@} ////////////////// data ////////////////// protected: /**@name data */ //@{ /// Pivot tolerance double pivotTolerance_; /// Zero tolerance double zeroTolerance_; #ifndef COIN_FAST_CODE /// Whether slack value is +1 or -1 double slackValue_; #else #ifndef slackValue_ #define slackValue_ -1.0 #endif #endif /// How much to multiply areas by double areaFactor_; /// Relax check on accuracy in replaceColumn double relaxCheck_; /// Number of Rows in factorization int numberRows_; /// Number of Rows after iterating int numberRowsExtra_; /// Maximum number of Rows after iterating int maximumRowsExtra_; /// Number of Columns in factorization int numberColumns_; /// Number of Columns after iterating int numberColumnsExtra_; /// Maximum number of Columns after iterating int maximumColumnsExtra_; /// Number factorized in U (not row singletons) int numberGoodU_; /// Number factorized in L int numberGoodL_; /// Maximum number of pivots before factorization int maximumPivots_; /// Number pivots since last factorization int numberPivots_; /// Number of elements in U (to go) /// or while iterating total overall CoinBigIndex totalElements_; /// Number of elements after factorization CoinBigIndex factorElements_; /// Pivot order for each Column CoinIntArrayWithLength pivotColumn_; /// Permutation vector for pivot row order CoinIntArrayWithLength permute_; /// DePermutation vector for pivot row order CoinIntArrayWithLength permuteBack_; /// Inverse Pivot order for each Column CoinIntArrayWithLength pivotColumnBack_; /// Status of factorization int status_; /** 0 - no increasing rows - no permutations, 1 - no increasing rows but permutations 2 - increasing rows - taken out as always 2 */ //int increasingRows_; /// Number of trials before rejection int numberTrials_; /// Start of each Row as pointer CoinBigIndexArrayWithLength startRowU_; /// Number in each Row CoinIntArrayWithLength numberInRow_; /// Number in each Column CoinIntArrayWithLength numberInColumn_; /// Number in each Column including pivoted CoinIntArrayWithLength numberInColumnPlus_; /** First Row/Column with count of k, can tell which by offset - Rows then Columns */ CoinIntArrayWithLength firstCount_; /// Next Row/Column with count CoinIntArrayWithLength nextCount_; /// Previous Row/Column with count CoinIntArrayWithLength lastCount_; /// Next Column in memory order CoinIntArrayWithLength nextColumn_; /// Previous Column in memory order CoinIntArrayWithLength lastColumn_; /// Next Row in memory order CoinIntArrayWithLength nextRow_; /// Previous Row in memory order CoinIntArrayWithLength lastRow_; /// Columns left to do in a single pivot CoinIntArrayWithLength saveColumn_; /// Marks rows to be updated CoinIntArrayWithLength markRow_; /// Detail in messages int messageLevel_; /// Larger of row and column size int biggerDimension_; /// Base address for U (may change) CoinIntArrayWithLength indexColumnU_; /// Pivots for L CoinIntArrayWithLength pivotRowL_; /// Inverses of pivot values CoinFactorizationDoubleArrayWithLength pivotRegion_; /// Number of slacks at beginning of U int numberSlacks_; /// Number in U int numberU_; /// Maximum space used in U CoinBigIndex maximumU_; /// Base of U is always 0 //int baseU_; /// Length of U CoinBigIndex lengthU_; /// Length of area reserved for U CoinBigIndex lengthAreaU_; /// Elements of U CoinFactorizationDoubleArrayWithLength elementU_; /// Row indices of U CoinIntArrayWithLength indexRowU_; /// Start of each column in U CoinBigIndexArrayWithLength startColumnU_; /// Converts rows to columns in U CoinBigIndexArrayWithLength convertRowToColumnU_; /// Number in L CoinBigIndex numberL_; /// Base of L CoinBigIndex baseL_; /// Length of L CoinBigIndex lengthL_; /// Length of area reserved for L CoinBigIndex lengthAreaL_; /// Elements of L CoinFactorizationDoubleArrayWithLength elementL_; /// Row indices of L CoinIntArrayWithLength indexRowL_; /// Start of each column in L CoinBigIndexArrayWithLength startColumnL_; /// true if Forrest Tomlin update, false if PFI bool doForrestTomlin_; /// Number in R int numberR_; /// Length of R stuff CoinBigIndex lengthR_; /// length of area reserved for R CoinBigIndex lengthAreaR_; /// Elements of R CoinFactorizationDouble *elementR_; /// Row indices for R int *indexRowR_; /// Start of columns for R CoinBigIndexArrayWithLength startColumnR_; /// Dense area double * denseArea_; /// Dense permutation int * densePermute_; /// Number of dense rows int numberDense_; /// Dense threshold int denseThreshold_; /// First work area CoinFactorizationDoubleArrayWithLength workArea_; /// Second work area CoinUnsignedIntArrayWithLength workArea2_; /// Number of compressions done CoinBigIndex numberCompressions_; /// Below are all to collect mutable double ftranCountInput_; mutable double ftranCountAfterL_; mutable double ftranCountAfterR_; mutable double ftranCountAfterU_; mutable double btranCountInput_; mutable double btranCountAfterU_; mutable double btranCountAfterR_; mutable double btranCountAfterL_; /// We can roll over factorizations mutable int numberFtranCounts_; mutable int numberBtranCounts_; /// While these are average ratios collected over last period double ftranAverageAfterL_; double ftranAverageAfterR_; double ftranAverageAfterU_; double btranAverageAfterU_; double btranAverageAfterR_; double btranAverageAfterL_; /// For statistics mutable bool collectStatistics_; /// Below this use sparse technology - if 0 then no L row copy int sparseThreshold_; /// And one for "sparsish" int sparseThreshold2_; /// Start of each row in L CoinBigIndexArrayWithLength startRowL_; /// Index of column in row for L CoinIntArrayWithLength indexColumnL_; /// Elements in L (row copy) CoinFactorizationDoubleArrayWithLength elementByRowL_; /// Sparse regions mutable CoinIntArrayWithLength sparse_; /** L to U bias 0 - U bias, 1 - some U bias, 2 some L bias, 3 L bias */ int biasLU_; /** Array persistence flag If 0 then as now (delete/new) 1 then only do arrays if bigger needed 2 as 1 but give a bit extra if bigger needed */ int persistenceFlag_; //@} }; // Dense coding #ifdef COIN_HAS_LAPACK #define DENSE_CODE 1 /* Type of Fortran integer translated into C */ #ifndef ipfint //typedef ipfint FORTRAN_INTEGER_TYPE ; typedef int ipfint; typedef const int cipfint; #endif #endif #endif // Extra for ugly include #ifdef UGLY_COIN_FACTOR_CODING #define FAC_UNSET (FAC_SET+1) { goodPivot=false; //store pivot columns (so can easily compress) CoinBigIndex startColumnThis = startColumn[iPivotColumn]; CoinBigIndex endColumn = startColumnThis + numberDoColumn + 1; int put = 0; CoinBigIndex startRowThis = startRow[iPivotRow]; CoinBigIndex endRow = startRowThis + numberDoRow + 1; if ( pivotColumnPosition < 0 ) { for ( pivotColumnPosition = startRowThis; pivotColumnPosition < endRow; pivotColumnPosition++ ) { int iColumn = indexColumn[pivotColumnPosition]; if ( iColumn != iPivotColumn ) { saveColumn[put++] = iColumn; } else { break; } } } else { for (CoinBigIndex i = startRowThis ; i < pivotColumnPosition ; i++ ) { saveColumn[put++] = indexColumn[i]; } } assert (pivotColumnPosition lengthAreaL_ ) { //need more memory if ((messageLevel_&4)!=0) printf("more memory needed in middle of invert\n"); goto BAD_PIVOT; } //l+=currentAreaL_->elementByColumn-elementL; CoinBigIndex lSave = l; CoinBigIndex * startColumnL = startColumnL_.array(); startColumnL[numberGoodL_] = l; //for luck and first time numberGoodL_++; startColumnL[numberGoodL_] = l + numberDoColumn; lengthL_ += numberDoColumn; if ( pivotRowPosition < 0 ) { for ( pivotRowPosition = startColumnThis; pivotRowPosition < endColumn; pivotRowPosition++ ) { int iRow = indexRow[pivotRowPosition]; if ( iRow != iPivotRow ) { indexRowL[l] = iRow; elementL[l] = element[pivotRowPosition]; markRow[iRow] = l - lSave; l++; //take out of row list CoinBigIndex start = startRow[iRow]; CoinBigIndex end = start + numberInRow[iRow]; CoinBigIndex where = start; while ( indexColumn[where] != iPivotColumn ) { where++; } /* endwhile */ #if DEBUG_COIN if ( where >= end ) { abort ( ); } #endif indexColumn[where] = indexColumn[end - 1]; numberInRow[iRow]--; } else { break; } } } else { CoinBigIndex i; for ( i = startColumnThis; i < pivotRowPosition; i++ ) { int iRow = indexRow[i]; markRow[iRow] = l - lSave; indexRowL[l] = iRow; elementL[l] = element[i]; l++; //take out of row list CoinBigIndex start = startRow[iRow]; CoinBigIndex end = start + numberInRow[iRow]; CoinBigIndex where = start; while ( indexColumn[where] != iPivotColumn ) { where++; } /* endwhile */ #if DEBUG_COIN if ( where >= end ) { abort ( ); } #endif indexColumn[where] = indexColumn[end - 1]; numberInRow[iRow]--; assert (numberInRow[iRow]>=0); } } assert (pivotRowPosition= end ) { abort ( ); } #endif indexColumn[where] = indexColumn[end - 1]; numberInRow[iRow]--; assert (numberInRow[iRow]>=0); } markRow[iPivotRow] = FAC_SET; //compress pivot column (move pivot to front including saved) numberInColumn[iPivotColumn] = 0; //use end of L for temporary space int *indexL = &indexRowL[lSave]; CoinFactorizationDouble *multipliersL = &elementL[lSave]; //adjust int j; for ( j = 0; j < numberDoColumn; j++ ) { multipliersL[j] *= pivotMultiplier; } //zero out fill CoinBigIndex iErase; for ( iErase = 0; iErase < increment2 * numberDoRow; iErase++ ) { workArea2[iErase] = 0; } CoinBigIndex added = numberDoRow * numberDoColumn; unsigned int *temp2 = workArea2; int * nextColumn = nextColumn_.array(); //pack down and move to work int jColumn; for ( jColumn = 0; jColumn < numberDoRow; jColumn++ ) { int iColumn = saveColumn[jColumn]; CoinBigIndex startColumnThis = startColumn[iColumn]; CoinBigIndex endColumn = startColumnThis + numberInColumn[iColumn]; int iRow = indexRow[startColumnThis]; CoinFactorizationDouble value = element[startColumnThis]; double largest; CoinBigIndex put = startColumnThis; CoinBigIndex positionLargest = -1; CoinFactorizationDouble thisPivotValue = 0.0; //compress column and find largest not updated bool checkLargest; int mark = markRow[iRow]; if ( mark == FAC_UNSET ) { largest = fabs ( value ); positionLargest = put; put++; checkLargest = false; } else { //need to find largest largest = 0.0; checkLargest = true; if ( mark != FAC_SET ) { //will be updated workArea[mark] = value; int word = mark >> COINFACTORIZATION_SHIFT_PER_INT; int bit = mark & COINFACTORIZATION_MASK_PER_INT; temp2[word] = temp2[word] | ( 1 << bit ); //say already in counts added--; } else { thisPivotValue = value; } } CoinBigIndex i; for ( i = startColumnThis + 1; i < endColumn; i++ ) { iRow = indexRow[i]; value = element[i]; int mark = markRow[iRow]; if ( mark == FAC_UNSET ) { //keep indexRow[put] = iRow; element[put] = value; if ( checkLargest ) { double absValue = fabs ( value ); if ( absValue > largest ) { largest = absValue; positionLargest = put; } } put++; } else if ( mark != FAC_SET ) { //will be updated workArea[mark] = value; int word = mark >> COINFACTORIZATION_SHIFT_PER_INT; int bit = mark & COINFACTORIZATION_MASK_PER_INT; temp2[word] = temp2[word] | ( 1 << bit ); //say already in counts added--; } else { thisPivotValue = value; } } //slot in pivot element[put] = element[startColumnThis]; indexRow[put] = indexRow[startColumnThis]; if ( positionLargest == startColumnThis ) { positionLargest = put; //follow if was largest } put++; element[startColumnThis] = thisPivotValue; indexRow[startColumnThis] = iPivotRow; //clean up counts startColumnThis++; numberInColumn[iColumn] = put - startColumnThis; int * numberInColumnPlus = numberInColumnPlus_.array(); numberInColumnPlus[iColumn]++; startColumn[iColumn]++; //how much space have we got int next = nextColumn[iColumn]; CoinBigIndex space; space = startColumn[next] - put - numberInColumnPlus[next]; //assume no zero elements if ( numberDoColumn > space ) { //getColumnSpace also moves fixed part if ( !getColumnSpace ( iColumn, numberDoColumn ) ) { goto BAD_PIVOT; } //redo starts positionLargest = positionLargest + startColumn[iColumn] - startColumnThis; startColumnThis = startColumn[iColumn]; put = startColumnThis + numberInColumn[iColumn]; } double tolerance = zeroTolerance_; int *nextCount = nextCount_.array(); for ( j = 0; j < numberDoColumn; j++ ) { value = workArea[j] - thisPivotValue * multipliersL[j]; double absValue = fabs ( value ); if ( absValue > tolerance ) { workArea[j] = 0.0; element[put] = value; indexRow[put] = indexL[j]; if ( absValue > largest ) { largest = absValue; positionLargest = put; } put++; } else { workArea[j] = 0.0; added--; int word = j >> COINFACTORIZATION_SHIFT_PER_INT; int bit = j & COINFACTORIZATION_MASK_PER_INT; if ( temp2[word] & ( 1 << bit ) ) { //take out of row list iRow = indexL[j]; CoinBigIndex start = startRow[iRow]; CoinBigIndex end = start + numberInRow[iRow]; CoinBigIndex where = start; while ( indexColumn[where] != iColumn ) { where++; } /* endwhile */ #if DEBUG_COIN if ( where >= end ) { abort ( ); } #endif indexColumn[where] = indexColumn[end - 1]; numberInRow[iRow]--; } else { //make sure won't be added int word = j >> COINFACTORIZATION_SHIFT_PER_INT; int bit = j & COINFACTORIZATION_MASK_PER_INT; temp2[word] = temp2[word] | ( 1 << bit ); //say already in counts } } } numberInColumn[iColumn] = put - startColumnThis; //move largest if ( positionLargest >= 0 ) { value = element[positionLargest]; iRow = indexRow[positionLargest]; element[positionLargest] = element[startColumnThis]; indexRow[positionLargest] = indexRow[startColumnThis]; element[startColumnThis] = value; indexRow[startColumnThis] = iRow; } //linked list for column if ( nextCount[iColumn + numberRows_] != -2 ) { //modify linked list deleteLink ( iColumn + numberRows_ ); addLink ( iColumn + numberRows_, numberInColumn[iColumn] ); } temp2 += increment2; } //get space for row list unsigned int *putBase = workArea2; int bigLoops = numberDoColumn >> COINFACTORIZATION_SHIFT_PER_INT; int i = 0; // do linked lists and update counts while ( bigLoops ) { bigLoops--; int bit; for ( bit = 0; bit < COINFACTORIZATION_BITS_PER_INT; i++, bit++ ) { unsigned int *putThis = putBase; int iRow = indexL[i]; //get space int number = 0; int jColumn; for ( jColumn = 0; jColumn < numberDoRow; jColumn++ ) { unsigned int test = *putThis; putThis += increment2; test = 1 - ( ( test >> bit ) & 1 ); number += test; } int next = nextRow[iRow]; CoinBigIndex space; space = startRow[next] - startRow[iRow]; number += numberInRow[iRow]; if ( space < number ) { if ( !getRowSpace ( iRow, number ) ) { goto BAD_PIVOT; } } // now do putThis = putBase; next = nextRow[iRow]; number = numberInRow[iRow]; CoinBigIndex end = startRow[iRow] + number; int saveIndex = indexColumn[startRow[next]]; //add in for ( jColumn = 0; jColumn < numberDoRow; jColumn++ ) { unsigned int test = *putThis; putThis += increment2; test = 1 - ( ( test >> bit ) & 1 ); indexColumn[end] = saveColumn[jColumn]; end += test; } //put back next one in case zapped indexColumn[startRow[next]] = saveIndex; markRow[iRow] = FAC_UNSET; number = end - startRow[iRow]; numberInRow[iRow] = number; deleteLink ( iRow ); addLink ( iRow, number ); } putBase++; } /* endwhile */ int bit; for ( bit = 0; i < numberDoColumn; i++, bit++ ) { unsigned int *putThis = putBase; int iRow = indexL[i]; //get space int number = 0; int jColumn; for ( jColumn = 0; jColumn < numberDoRow; jColumn++ ) { unsigned int test = *putThis; putThis += increment2; test = 1 - ( ( test >> bit ) & 1 ); number += test; } int next = nextRow[iRow]; CoinBigIndex space; space = startRow[next] - startRow[iRow]; number += numberInRow[iRow]; if ( space < number ) { if ( !getRowSpace ( iRow, number ) ) { goto BAD_PIVOT; } } // now do putThis = putBase; next = nextRow[iRow]; number = numberInRow[iRow]; CoinBigIndex end = startRow[iRow] + number; int saveIndex; saveIndex = indexColumn[startRow[next]]; //add in for ( jColumn = 0; jColumn < numberDoRow; jColumn++ ) { unsigned int test = *putThis; putThis += increment2; test = 1 - ( ( test >> bit ) & 1 ); indexColumn[end] = saveColumn[jColumn]; end += test; } indexColumn[startRow[next]] = saveIndex; markRow[iRow] = FAC_UNSET; number = end - startRow[iRow]; numberInRow[iRow] = number; deleteLink ( iRow ); addLink ( iRow, number ); } markRow[iPivotRow] = FAC_UNSET; //modify linked list for pivots deleteLink ( iPivotRow ); deleteLink ( iPivotColumn + numberRows_ ); totalElements_ += added; goodPivot= true; // **** UGLY UGLY UGLY } BAD_PIVOT: ; } #undef FAC_UNSET #endif CoinUtils-2.9.10/CoinUtils/src/CoinPresolveZeros.hpp0000644000076600007660000000310311654260357021044 0ustar coincoin/* $Id: CoinPresolveZeros.hpp 1498 2011-11-02 15:25:35Z mjs $ */ // 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). #ifndef CoinPresolveZeros_H #define CoinPresolveZeros_H /*! \file Drop/reintroduce explicit zeros. */ #define DROP_ZERO 8 /*! \brief Tracking information for an explicit zero coefficient \todo Why isn't this a nested class in drop_zero_coefficients_action? That would match the structure of other presolve classes. */ struct dropped_zero { int row; int col; }; /*! \brief Removal of explicit zeros The presolve action for this class removes explicit zeros from the constraint matrix. The postsolve action puts them back. */ class drop_zero_coefficients_action : public CoinPresolveAction { const int nzeros_; const dropped_zero *const zeros_; drop_zero_coefficients_action(int nzeros, const dropped_zero *zeros, const CoinPresolveAction *next) : CoinPresolveAction(next), nzeros_(nzeros), zeros_(zeros) {} public: const char *name() const { return ("drop_zero_coefficients_action"); } static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob, int *checkcols, int ncheckcols, const CoinPresolveAction *next); void postsolve(CoinPostsolveMatrix *prob) const; virtual ~drop_zero_coefficients_action() { deleteAction(zeros_,dropped_zero*); } }; const CoinPresolveAction *drop_zero_coefficients(CoinPresolveMatrix *prob, const CoinPresolveAction *next); #endif CoinUtils-2.9.10/CoinUtils/src/CoinWarmStart.hpp0000644000076600007660000000306611510456064020147 0ustar coincoin/* $Id: CoinWarmStart.hpp 1372 2011-01-03 23:31:00Z 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). #ifndef CoinWarmStart_H #define CoinWarmStart_H //############################################################################# class CoinWarmStartDiff; /** Abstract base class for warm start information. Really nothing can be generalized for warm start information --- all we know is that it exists. Hence the abstract base class contains only a virtual destructor and a virtual clone function (a virtual constructor), so that derived classes can provide these functions. */ class CoinWarmStart { public: /// Abstract destructor virtual ~CoinWarmStart() {} /// `Virtual constructor' virtual CoinWarmStart *clone() const = 0 ; virtual CoinWarmStartDiff* generateDiff (const CoinWarmStart *const ) const { return 0; } virtual void applyDiff (const CoinWarmStartDiff *const ) {} }; /*! \class CoinWarmStartDiff \brief Abstract base class for warm start `diff' objects For those types of warm start objects where the notion of a `diff' makes sense, this virtual base class is provided. As with CoinWarmStart, its sole reason for existence is to make it possible to write solver-independent code. */ class CoinWarmStartDiff { public: /// Abstract destructor virtual ~CoinWarmStartDiff() {} /// `Virtual constructor' virtual CoinWarmStartDiff *clone() const = 0 ; }; #endif CoinUtils-2.9.10/CoinUtils/src/CoinWarmStartVector.hpp0000644000076600007660000003157211654260357021344 0ustar coincoin/* $Id: CoinWarmStartVector.hpp 1498 2011-11-02 15:25:35Z mjs $ */ // 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 CoinWarmStartVector_H #define CoinWarmStartVector_H #if defined(_MSC_VER) // Turn off compiler warning about long names # pragma warning(disable:4786) #endif #include #include #include "CoinHelperFunctions.hpp" #include "CoinWarmStart.hpp" //############################################################################# /** WarmStart information that is only a vector */ template class CoinWarmStartVector : public virtual CoinWarmStart { protected: inline void gutsOfDestructor() { delete[] values_; } inline void gutsOfCopy(const CoinWarmStartVector& rhs) { size_ = rhs.size_; values_ = new T[size_]; CoinDisjointCopyN(rhs.values_, size_, values_); } public: /// return the size of the vector int size() const { return size_; } /// return a pointer to the array of vectors const T* values() const { return values_; } /** Assign the vector to be the warmstart information. In this method the object assumes ownership of the pointer and upon return #vector will be a NULL pointer. If copying is desirable use the constructor. */ void assignVector(int size, T*& vec) { size_ = size; delete[] values_; values_ = vec; vec = NULL; } CoinWarmStartVector() : size_(0), values_(NULL) {} CoinWarmStartVector(int size, const T* vec) : size_(size), values_(new T[size]) { CoinDisjointCopyN(vec, size, values_); } CoinWarmStartVector(const CoinWarmStartVector& rhs) { gutsOfCopy(rhs); } CoinWarmStartVector& operator=(const CoinWarmStartVector& rhs) { if (this != &rhs) { gutsOfDestructor(); gutsOfCopy(rhs); } return *this; } inline void swap(CoinWarmStartVector& rhs) { if (this != &rhs) { std::swap(size_, rhs.size_); std::swap(values_, rhs.values_); } } /** `Virtual constructor' */ virtual CoinWarmStart *clone() const { return new CoinWarmStartVector(*this); } virtual ~CoinWarmStartVector() { gutsOfDestructor(); } /*! \brief Clear the data Make it appear as if the warmstart was just created using the default constructor. */ inline void clear() { size_ = 0; delete[] values_; values_ = NULL; } /*! \name Vector warm start `diff' methods */ //@{ /*! \brief Generate a `diff' that can convert the warm start passed as a parameter to the warm start specified by \c this. The capabilities are limited: the basis passed as a parameter can be no larger than the basis pointed to by \c this. */ virtual CoinWarmStartDiff* generateDiff (const CoinWarmStart *const oldCWS) const ; /*! \brief Apply \p diff to this warm start. Update this warm start by applying \p diff. It's assumed that the allocated capacity of the warm start is sufficiently large. */ virtual void applyDiff (const CoinWarmStartDiff *const cwsdDiff) ; //@} private: ///@name Private data members //@{ /// the size of the vector int size_; /// the vector itself T* values_; //@} }; //============================================================================= /*! \class CoinWarmStartVectorDiff \brief A `diff' between two CoinWarmStartVector objects This class exists in order to hide from the world the details of calculating and representing a `diff' between two CoinWarmStartVector objects. For convenience, assignment, cloning, and deletion are visible to the world, and default and copy constructors are made available to derived classes. Knowledge of the rest of this structure, and of generating and applying diffs, is restricted to the friend functions CoinWarmStartVector::generateDiff() and CoinWarmStartVector::applyDiff(). The actual data structure is a pair of vectors, #diffNdxs_ and #diffVals_. */ template class CoinWarmStartVectorDiff : public virtual CoinWarmStartDiff { friend CoinWarmStartDiff* CoinWarmStartVector::generateDiff(const CoinWarmStart *const oldCWS) const; friend void CoinWarmStartVector::applyDiff(const CoinWarmStartDiff *const diff) ; public: /*! \brief `Virtual constructor' */ virtual CoinWarmStartDiff * clone() const { return new CoinWarmStartVectorDiff(*this) ; } /*! \brief Assignment */ virtual CoinWarmStartVectorDiff & operator= (const CoinWarmStartVectorDiff& rhs) ; /*! \brief Destructor */ virtual ~CoinWarmStartVectorDiff() { delete[] diffNdxs_ ; delete[] diffVals_ ; } inline void swap(CoinWarmStartVectorDiff& rhs) { if (this != &rhs) { std::swap(sze_, rhs.sze_); std::swap(diffNdxs_, rhs.diffNdxs_); std::swap(diffVals_, rhs.diffVals_); } } /*! \brief Default constructor */ CoinWarmStartVectorDiff () : sze_(0), diffNdxs_(0), diffVals_(NULL) {} /*! \brief Copy constructor For convenience when copying objects containing CoinWarmStartVectorDiff objects. But consider whether you should be using #clone() to retain polymorphism. */ CoinWarmStartVectorDiff(const CoinWarmStartVectorDiff& rhs) ; /*! \brief Standard constructor */ CoinWarmStartVectorDiff(int sze, const unsigned int* const diffNdxs, const T* const diffVals) ; /*! \brief Clear the data Make it appear as if the diff was just created using the default constructor. */ inline void clear() { sze_ = 0; delete[] diffNdxs_; diffNdxs_ = NULL; delete[] diffVals_; diffVals_ = NULL; } private: /*! \brief Number of entries (and allocated capacity), in units of \c T. */ int sze_ ; /*! \brief Array of diff indices */ unsigned int* diffNdxs_ ; /*! \brief Array of diff values */ T* diffVals_ ; }; //############################################################################## template class CoinWarmStartVectorPair : public virtual CoinWarmStart { private: CoinWarmStartVector t_; CoinWarmStartVector u_; public: inline int size0() const { return t_.size(); } inline int size1() const { return u_.size(); } inline const T* values0() const { return t_.values(); } inline const U* values1() const { return u_.values(); } inline void assignVector0(int size, T*& vec) { t_.assignVector(size, vec); } inline void assignVector1(int size, U*& vec) { u_.assignVector(size, vec); } CoinWarmStartVectorPair() {} CoinWarmStartVectorPair(int s0, const T* v0, int s1, const U* v1) : t_(s0, v0), u_(s1, v1) {} CoinWarmStartVectorPair(const CoinWarmStartVectorPair& rhs) : t_(rhs.t_), u_(rhs.u_) {} CoinWarmStartVectorPair& operator=(const CoinWarmStartVectorPair& rhs) { if (this != &rhs) { t_ = rhs.t_; u_ = rhs.u_; } return *this; } inline void swap(CoinWarmStartVectorPair& rhs) { t_.swap(rhs.t_); u_.swap(rhs.u_); } virtual CoinWarmStart *clone() const { return new CoinWarmStartVectorPair(*this); } virtual ~CoinWarmStartVectorPair() {} inline void clear() { t_.clear(); u_.clear(); } virtual CoinWarmStartDiff* generateDiff (const CoinWarmStart *const oldCWS) const ; virtual void applyDiff (const CoinWarmStartDiff *const cwsdDiff) ; }; //============================================================================= template class CoinWarmStartVectorPairDiff : public virtual CoinWarmStartDiff { friend CoinWarmStartDiff* CoinWarmStartVectorPair::generateDiff(const CoinWarmStart *const oldCWS) const; friend void CoinWarmStartVectorPair::applyDiff(const CoinWarmStartDiff *const diff) ; private: CoinWarmStartVectorDiff tdiff_; CoinWarmStartVectorDiff udiff_; public: CoinWarmStartVectorPairDiff() {} CoinWarmStartVectorPairDiff(const CoinWarmStartVectorPairDiff& rhs) : tdiff_(rhs.tdiff_), udiff_(rhs.udiff_) {} virtual ~CoinWarmStartVectorPairDiff() {} virtual CoinWarmStartVectorPairDiff& operator=(const CoinWarmStartVectorPairDiff& rhs) { if (this != &rhs) { tdiff_ = rhs.tdiff_; udiff_ = rhs.udiff_; } return *this; } virtual CoinWarmStartDiff * clone() const { return new CoinWarmStartVectorPairDiff(*this) ; } inline void swap(CoinWarmStartVectorPairDiff& rhs) { tdiff_.swap(rhs.tdiff_); udiff_.swap(rhs.udiff_); } inline void clear() { tdiff_.clear(); udiff_.clear(); } }; //############################################################################## //############################################################################# /* Generate a `diff' that can convert the warm start passed as a parameter to the warm start specified by this. The capabilities are limited: the basis passed as a parameter can be no larger than the basis pointed to by this. */ template CoinWarmStartDiff* CoinWarmStartVector::generateDiff(const CoinWarmStart *const oldCWS) const { /* Make sure the parameter is CoinWarmStartVector or derived class. */ const CoinWarmStartVector* oldVector = dynamic_cast*>(oldCWS); if (!oldVector) { throw CoinError("Old warm start not derived from CoinWarmStartVector.", "generateDiff","CoinWarmStartVector") ; } const CoinWarmStartVector* newVector = this ; /* Make sure newVector is equal or bigger than oldVector. Calculate the worst case number of diffs and allocate vectors to hold them. */ const int oldCnt = oldVector->size() ; const int newCnt = newVector->size() ; assert(newCnt >= oldCnt) ; unsigned int *diffNdx = new unsigned int [newCnt]; T* diffVal = new T[newCnt]; /* Scan the vector vectors. For the portion of the vectors which overlap, create diffs. Then add any additional entries from newVector. */ const T*oldVal = oldVector->values() ; const T*newVal = newVector->values() ; int numberChanged = 0 ; int i ; for (i = 0 ; i < oldCnt ; i++) { if (oldVal[i] != newVal[i]) { diffNdx[numberChanged] = i ; diffVal[numberChanged++] = newVal[i] ; } } for ( ; i < newCnt ; i++) { diffNdx[numberChanged] = i ; diffVal[numberChanged++] = newVal[i] ; } /* Create the object of our desire. */ CoinWarmStartVectorDiff *diff = new CoinWarmStartVectorDiff(numberChanged,diffNdx,diffVal) ; /* Clean up and return. */ delete[] diffNdx ; delete[] diffVal ; return diff; // return (dynamic_cast*>(diff)) ; } /* Apply diff to this warm start. Update this warm start by applying diff. It's assumed that the allocated capacity of the warm start is sufficiently large. */ template void CoinWarmStartVector::applyDiff (const CoinWarmStartDiff *const cwsdDiff) { /* Make sure we have a CoinWarmStartVectorDiff */ const CoinWarmStartVectorDiff* diff = dynamic_cast*>(cwsdDiff) ; if (!diff) { throw CoinError("Diff not derived from CoinWarmStartVectorDiff.", "applyDiff","CoinWarmStartVector") ; } /* Application is by straighforward replacement of words in the vector vector. */ const int numberChanges = diff->sze_ ; const unsigned int *diffNdxs = diff->diffNdxs_ ; const T* diffVals = diff->diffVals_ ; T* vals = this->values_ ; for (int i = 0 ; i < numberChanges ; i++) { unsigned int diffNdx = diffNdxs[i] ; T diffVal = diffVals[i] ; vals[diffNdx] = diffVal ; } } //############################################################################# // Assignment template CoinWarmStartVectorDiff& CoinWarmStartVectorDiff::operator=(const CoinWarmStartVectorDiff &rhs) { if (this != &rhs) { if (sze_ > 0) { delete[] diffNdxs_ ; delete[] diffVals_ ; } sze_ = rhs.sze_ ; if (sze_ > 0) { diffNdxs_ = new unsigned int[sze_] ; memcpy(diffNdxs_,rhs.diffNdxs_,sze_*sizeof(unsigned int)) ; diffVals_ = new T[sze_] ; memcpy(diffVals_,rhs.diffVals_,sze_*sizeof(T)) ; } else { diffNdxs_ = 0 ; diffVals_ = 0 ; } } return (*this) ; } // Copy constructor template CoinWarmStartVectorDiff::CoinWarmStartVectorDiff(const CoinWarmStartVectorDiff &rhs) : sze_(rhs.sze_), diffNdxs_(0), diffVals_(0) { if (sze_ > 0) { diffNdxs_ = new unsigned int[sze_] ; memcpy(diffNdxs_,rhs.diffNdxs_,sze_*sizeof(unsigned int)) ; diffVals_ = new T[sze_] ; memcpy(diffVals_,rhs.diffVals_,sze_*sizeof(T)) ; } } /// Standard constructor template CoinWarmStartVectorDiff::CoinWarmStartVectorDiff (int sze, const unsigned int *const diffNdxs, const T *const diffVals) : sze_(sze), diffNdxs_(0), diffVals_(0) { if (sze > 0) { diffNdxs_ = new unsigned int[sze] ; memcpy(diffNdxs_,diffNdxs,sze*sizeof(unsigned int)) ; diffVals_ = new T[sze] ; memcpy(diffVals_,diffVals,sze*sizeof(T)) ; } } #endif CoinUtils-2.9.10/CoinUtils/src/CoinFactorization3.cpp0000644000076600007660000017613011510461170021112 0ustar coincoin/* $Id: CoinFactorization3.cpp 1373 2011-01-03 23:57:44Z lou $ */ // 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). #if defined(_MSC_VER) // Turn off compiler warning about long names # pragma warning(disable:4786) #endif #include "CoinUtilsConfig.h" #include #include #include "CoinFactorization.hpp" #include "CoinIndexedVector.hpp" #include "CoinHelperFunctions.hpp" #include #include #if DENSE_CODE==1 // using simple lapack interface extern "C" { /** LAPACK Fortran subroutine DGETRS. */ void F77_FUNC(dgetrs,DGETRS)(char *trans, cipfint *n, cipfint *nrhs, const double *A, cipfint *ldA, cipfint * ipiv, double *B, cipfint *ldB, ipfint *info, int trans_len); } #endif // For semi-sparse #define BITS_PER_CHECK 8 #define CHECK_SHIFT 3 typedef unsigned char CoinCheckZero; //:class CoinFactorization. Deals with Factorization and Updates /* Updates one column (FTRAN) from region2 and permutes. region1 starts as zero Note - if regionSparse2 packed on input - will be packed on output - returns un-permuted result in region2 and region1 is zero */ int CoinFactorization::updateColumn ( CoinIndexedVector * regionSparse, CoinIndexedVector * regionSparse2, bool noPermute) const { //permute and move indices into index array int * COIN_RESTRICT regionIndex = regionSparse->getIndices ( ); int numberNonZero; const int *permute = permute_.array(); double * COIN_RESTRICT region = regionSparse->denseVector(); #ifndef CLP_FACTORIZATION if (!noPermute) { #endif numberNonZero = regionSparse2->getNumElements(); int * COIN_RESTRICT index = regionSparse2->getIndices(); double * COIN_RESTRICT array = regionSparse2->denseVector(); #ifndef CLP_FACTORIZATION bool packed = regionSparse2->packedMode(); if (packed) { for (int j = 0; j < numberNonZero; j ++ ) { int iRow = index[j]; double value = array[j]; array[j]=0.0; iRow = permute[iRow]; region[iRow] = value; regionIndex[j] = iRow; } } else { #else assert (!regionSparse2->packedMode()); #endif for (int j = 0; j < numberNonZero; j ++ ) { int iRow = index[j]; double value = array[iRow]; array[iRow]=0.0; iRow = permute[iRow]; region[iRow] = value; regionIndex[j] = iRow; } #ifndef CLP_FACTORIZATION } #endif regionSparse->setNumElements ( numberNonZero ); #ifndef CLP_FACTORIZATION } else { numberNonZero = regionSparse->getNumElements(); } #endif if (collectStatistics_) { numberFtranCounts_++; ftranCountInput_ += numberNonZero; } // ******* L updateColumnL ( regionSparse, regionIndex ); if (collectStatistics_) ftranCountAfterL_ += regionSparse->getNumElements(); //permute extra //row bits here updateColumnR ( regionSparse ); if (collectStatistics_) ftranCountAfterR_ += regionSparse->getNumElements(); //update counts // ******* U updateColumnU ( regionSparse, regionIndex); if (!doForrestTomlin_) { // Do PFI after everything else updateColumnPFI(regionSparse); } if (!noPermute) { permuteBack(regionSparse,regionSparse2); return regionSparse2->getNumElements ( ); } else { return regionSparse->getNumElements ( ); } } // Permutes back at end of updateColumn void CoinFactorization::permuteBack ( CoinIndexedVector * regionSparse, CoinIndexedVector * outVector) const { // permute back int oldNumber = regionSparse->getNumElements(); const int * COIN_RESTRICT regionIndex = regionSparse->getIndices ( ); double * COIN_RESTRICT region = regionSparse->denseVector(); int * COIN_RESTRICT outIndex = outVector->getIndices ( ); double * COIN_RESTRICT out = outVector->denseVector(); const int * COIN_RESTRICT permuteBack = pivotColumnBack(); int number=0; if (outVector->packedMode()) { for (int j = 0; j < oldNumber; j ++ ) { int iRow = regionIndex[j]; double value = region[iRow]; region[iRow]=0.0; if (fabs(value)>zeroTolerance_) { iRow = permuteBack[iRow]; outIndex[number]=iRow; out[number++] = value; } } } else { for (int j = 0; j < oldNumber; j ++ ) { int iRow = regionIndex[j]; double value = region[iRow]; region[iRow]=0.0; if (fabs(value)>zeroTolerance_) { iRow = permuteBack[iRow]; outIndex[number++]=iRow; out[iRow] = value; } } } outVector->setNumElements(number); regionSparse->setNumElements(0); } // updateColumnL. Updates part of column (FTRANL) void CoinFactorization::updateColumnL ( CoinIndexedVector * regionSparse, int * COIN_RESTRICT regionIndex) const { if (numberL_) { int number = regionSparse->getNumElements ( ); int goSparse; // Guess at number at end if (sparseThreshold_>0) { if (ftranAverageAfterL_) { int newNumber = static_cast (number*ftranAverageAfterL_); if (newNumber< sparseThreshold_&&(numberL_<<2)>newNumber) goSparse = 2; else if (newNumber< sparseThreshold2_&&(numberL_<<1)>newNumber) goSparse = 1; else goSparse = 0; } else { if (numbernumber) goSparse = 2; else goSparse = 0; } } else { goSparse=0; } switch (goSparse) { case 0: // densish updateColumnLDensish(regionSparse,regionIndex); break; case 1: // middling updateColumnLSparsish(regionSparse,regionIndex); break; case 2: // sparse updateColumnLSparse(regionSparse,regionIndex); break; } } #ifdef DENSE_CODE if (numberDense_) { //take off list int lastSparse = numberRows_-numberDense_; int number = regionSparse->getNumElements(); double * COIN_RESTRICT region = regionSparse->denseVector ( ); int i=0; bool doDense=false; while (i=lastSparse) { doDense=true; regionIndex[i] = regionIndex[--number]; } else { i++; } } if (doDense) { char trans = 'N'; int ione=1; int info; F77_FUNC(dgetrs,DGETRS)(&trans,&numberDense_,&ione,denseArea_,&numberDense_, densePermute_,region+lastSparse,&numberDense_,&info,1); for (int i=lastSparse;i=1.0e-15) regionIndex[number++] = i; else region[i]=0.0; } } regionSparse->setNumElements(number); } } #endif } // Updates part of column (FTRANL) when densish void CoinFactorization::updateColumnLDensish ( CoinIndexedVector * regionSparse , int * COIN_RESTRICT regionIndex) const { double * COIN_RESTRICT region = regionSparse->denseVector ( ); int number = regionSparse->getNumElements ( ); int numberNonZero; double tolerance = zeroTolerance_; numberNonZero = 0; const CoinBigIndex * COIN_RESTRICT startColumn = startColumnL_.array(); const int * COIN_RESTRICT indexRow = indexRowL_.array(); const CoinFactorizationDouble * COIN_RESTRICT element = elementL_.array(); int last = numberRows_; assert ( last == baseL_ + numberL_); #if DENSE_CODE==1 //can take out last bit of sparse L as empty last -= numberDense_; #endif int smallestIndex = numberRowsExtra_; // do easy ones for (int k=0;k=baseL_) smallestIndex = CoinMin(iPivot,smallestIndex); else regionIndex[numberNonZero++]=iPivot; } // now others for (int i = smallestIndex; i < last; i++ ) { CoinFactorizationDouble pivotValue = region[i]; if ( fabs(pivotValue) > tolerance ) { CoinBigIndex start = startColumn[i]; CoinBigIndex end = startColumn[i + 1]; for (CoinBigIndex j = start; j < end; j ++ ) { int iRow = indexRow[j]; CoinFactorizationDouble result = region[iRow]; CoinFactorizationDouble value = element[j]; region[iRow] = result - value * pivotValue; } regionIndex[numberNonZero++] = i; } else { region[i] = 0.0; } } // and dense for (int i=last ; i < numberRows_; i++ ) { CoinFactorizationDouble pivotValue = region[i]; if ( fabs(pivotValue) > tolerance ) { regionIndex[numberNonZero++] = i; } else { region[i] = 0.0; } } regionSparse->setNumElements ( numberNonZero ); } // Updates part of column (FTRANL) when sparsish void CoinFactorization::updateColumnLSparsish ( CoinIndexedVector * regionSparse, int * COIN_RESTRICT regionIndex) const { double * COIN_RESTRICT region = regionSparse->denseVector ( ); int number = regionSparse->getNumElements ( ); int numberNonZero; double tolerance = zeroTolerance_; numberNonZero = 0; const CoinBigIndex *startColumn = startColumnL_.array(); const int *indexRow = indexRowL_.array(); const CoinFactorizationDouble *element = elementL_.array(); int last = numberRows_; assert ( last == baseL_ + numberL_); #if DENSE_CODE==1 //can take out last bit of sparse L as empty last -= numberDense_; #endif // mark known to be zero int nInBig = sizeof(CoinBigIndex)/sizeof(int); CoinCheckZero * COIN_RESTRICT mark = reinterpret_cast (sparse_.array()+(2+nInBig)*maximumRowsExtra_); int smallestIndex = numberRowsExtra_; // do easy ones for (int k=0;k>CHECK_SHIFT; int iBit = iPivot-(iWord<(mark[iWord] | (1<(1<>CHECK_SHIFT; jLast = CoinMin((jLast< tolerance ) { for (CoinBigIndex j = start; j < end; j ++ ) { int iRow = indexRow[j]; CoinFactorizationDouble result = region[iRow]; CoinFactorizationDouble value = element[j]; region[iRow] = result - value * pivotValue; int iWord = iRow>>CHECK_SHIFT; int iBit = iRow-(iWord<(mark[iWord] | (1<(1<>CHECK_SHIFT; if (jLast>CHECK_SHIFT);k tolerance ) { CoinBigIndex j; for ( j = start; j < end; j ++ ) { int iRow = indexRow[j]; CoinFactorizationDouble result = region[iRow]; CoinFactorizationDouble value = element[j]; region[iRow] = result - value * pivotValue; int iWord = iRow>>CHECK_SHIFT; int iBit = iRow-(iWord<(mark[iWord] | (1<(1< tolerance ) { for (CoinBigIndex j = start; j < end; j ++ ) { int iRow = indexRow[j]; CoinFactorizationDouble result = region[iRow]; CoinFactorizationDouble value = element[j]; region[iRow] = result - value * pivotValue; } regionIndex[numberNonZero++] = i; } else { region[i] = 0.0; } } // Now dense part for ( ; i < numberRows_; i++ ) { double pivotValue = region[i]; if ( fabs(pivotValue) > tolerance ) { regionIndex[numberNonZero++] = i; } else { region[i] = 0.0; } } // zero out ones that might have been skipped mark[smallestIndex>>CHECK_SHIFT]=0; int kkLast = (numberRows_+BITS_PER_CHECK-1)>>CHECK_SHIFT; CoinZeroN(mark+kLast,kkLast-kLast); regionSparse->setNumElements ( numberNonZero ); } // Updates part of column (FTRANL) when sparse void CoinFactorization::updateColumnLSparse ( CoinIndexedVector * regionSparse , int * COIN_RESTRICT regionIndex) const { double * COIN_RESTRICT region = regionSparse->denseVector ( ); int number = regionSparse->getNumElements ( ); int numberNonZero; double tolerance = zeroTolerance_; numberNonZero = 0; const CoinBigIndex *startColumn = startColumnL_.array(); const int *indexRow = indexRowL_.array(); const CoinFactorizationDouble *element = elementL_.array(); // use sparse_ as temporary area // mark known to be zero int * COIN_RESTRICT stack = sparse_.array(); /* pivot */ int * COIN_RESTRICT list = stack + maximumRowsExtra_; /* final list */ CoinBigIndex * COIN_RESTRICT next = reinterpret_cast (list + maximumRowsExtra_); /* jnext */ char * COIN_RESTRICT mark = reinterpret_cast (next + maximumRowsExtra_); int nList; #ifdef COIN_DEBUG for (int i=0;i=baseL_) { assert (kPivot=numberRowsExtra_) abort(); if(!mark[kPivot]) { stack[0]=kPivot; CoinBigIndex j=startColumn[kPivot+1]-1; int nStack=0; while (nStack>=0) { /* take off stack */ if (j>=startColumn[kPivot]) { int jPivot=indexRow[j--]; assert (jPivot>=baseL_&&jPivot=numberRowsExtra_) abort(); /* put back on stack */ next[nStack] =j; if (!mark[jPivot]) { /* and new one */ kPivot=jPivot; j = startColumn[kPivot+1]-1; stack[++nStack]=kPivot; assert (kPivot=numberRowsExtra_) abort(); mark[kPivot]=1; next[nStack]=j; } } else { /* finished so mark */ list[nList++]=kPivot; mark[kPivot]=1; --nStack; if (nStack>=0) { kPivot=stack[nStack]; assert (kPivot=0;i--) { int iPivot = list[i]; mark[iPivot]=0; CoinFactorizationDouble pivotValue = region[iPivot]; if ( fabs ( pivotValue ) > tolerance ) { regionIndex[numberNonZero++]=iPivot; for (CoinBigIndex j = startColumn[iPivot]; j < startColumn[iPivot+1]; j ++ ) { int iRow = indexRow[j]; CoinFactorizationDouble value = element[j]; region[iRow] -= value * pivotValue; } } else { region[iPivot]=0.0; } } regionSparse->setNumElements ( numberNonZero ); } /* Updates one column (FTRAN) from region2 Tries to do FT update number returned is negative if no room. Also updates region3 region1 starts as zero and is zero at end */ int CoinFactorization::updateTwoColumnsFT ( CoinIndexedVector * regionSparse1, CoinIndexedVector * regionSparse2, CoinIndexedVector * regionSparse3, bool noPermuteRegion3) { #if 1 //#ifdef NDEBUG //#undef NDEBUG //#endif //#define COIN_DEBUG #ifdef COIN_DEBUG regionSparse1->checkClean(); CoinIndexedVector save2(*regionSparse2); CoinIndexedVector save3(*regionSparse3); #endif CoinIndexedVector * regionFT ; CoinIndexedVector * regionUpdate ; int * COIN_RESTRICT regionIndex ; int numberNonZero ; const int *permute = permute_.array(); int * COIN_RESTRICT index ; double * COIN_RESTRICT region ; if (!noPermuteRegion3) { regionFT = regionSparse3; regionUpdate = regionSparse1; //permute and move indices into index array regionIndex = regionUpdate->getIndices ( ); //int numberNonZero; region = regionUpdate->denseVector(); numberNonZero = regionSparse3->getNumElements(); int * COIN_RESTRICT index = regionSparse3->getIndices(); double * COIN_RESTRICT array = regionSparse3->denseVector(); assert (!regionSparse3->packedMode()); for (int j = 0; j < numberNonZero; j ++ ) { int iRow = index[j]; double value = array[iRow]; array[iRow]=0.0; iRow = permute[iRow]; region[iRow] = value; regionIndex[j] = iRow; } regionUpdate->setNumElements ( numberNonZero ); } else { regionFT = regionSparse1; regionUpdate = regionSparse3; } //permute and move indices into index array (in U) regionIndex = regionFT->getIndices ( ); numberNonZero = regionSparse2->getNumElements(); index = regionSparse2->getIndices(); region = regionFT->denseVector(); double * COIN_RESTRICT array = regionSparse2->denseVector(); CoinBigIndex * COIN_RESTRICT startColumnU = startColumnU_.array(); CoinBigIndex start = startColumnU[maximumColumnsExtra_]; startColumnU[numberColumnsExtra_] = start; regionIndex = indexRowU_.array() + start; assert(regionSparse2->packedMode()); for (int j = 0; j < numberNonZero; j ++ ) { int iRow = index[j]; double value = array[j]; array[j]=0.0; iRow = permute[iRow]; region[iRow] = value; regionIndex[j] = iRow; } regionFT->setNumElements ( numberNonZero ); if (collectStatistics_) { numberFtranCounts_+=2; ftranCountInput_ += regionFT->getNumElements()+ regionUpdate->getNumElements(); } // ******* L updateColumnL ( regionFT, regionIndex ); updateColumnL ( regionUpdate, regionUpdate->getIndices() ); if (collectStatistics_) ftranCountAfterL_ += regionFT->getNumElements()+ regionUpdate->getNumElements(); //permute extra //row bits here updateColumnRFT ( regionFT, regionIndex ); updateColumnR ( regionUpdate ); if (collectStatistics_) ftranCountAfterR_ += regionFT->getNumElements()+ regionUpdate->getNumElements(); // ******* U - see if densish // Guess at number at end int goSparse=0; if (sparseThreshold_>0) { int numberNonZero = (regionUpdate->getNumElements ( )+ regionFT->getNumElements())>>1; if (ftranAverageAfterR_) { int newNumber = static_cast (numberNonZero*ftranAverageAfterU_); if (newNumber< sparseThreshold_) goSparse = 2; else if (newNumber< sparseThreshold2_) goSparse = 1; } else { if (numberNonZerodenseVector ( ); int * COIN_RESTRICT indexFT = regionFT->getIndices(); int numberNonZeroFT; double * COIN_RESTRICT arrayUpdate = regionUpdate->denseVector ( ); int * COIN_RESTRICT indexUpdate = regionUpdate->getIndices(); int numberNonZeroUpdate; updateTwoColumnsUDensish(numberNonZeroFT,arrayFT,indexFT, numberNonZeroUpdate,arrayUpdate,indexUpdate); regionFT->setNumElements ( numberNonZeroFT ); regionUpdate->setNumElements ( numberNonZeroUpdate ); } else { // sparse updateColumnU ( regionFT, regionIndex); updateColumnU ( regionUpdate, regionUpdate->getIndices()); } permuteBack(regionFT,regionSparse2); if (!noPermuteRegion3) { permuteBack(regionUpdate,regionSparse3); } #ifdef COIN_DEBUG int n2=regionSparse2->getNumElements(); regionSparse1->checkClean(); int n2a= updateColumnFT(regionSparse1,&save2); assert(n2==n2a); { int j; double * regionA = save2.denseVector(); int * indexA = save2.getIndices(); double * regionB = regionSparse2->denseVector(); int * indexB = regionSparse2->getIndices(); for (j=0;jgetNumElements(); assert (n3==save3.getNumElements()); { int j; double * regionA = save3.denseVector(); int * indexA = save3.getIndices(); double * regionB = regionSparse3->denseVector(); int * indexB = regionSparse3->getIndices(); for (j=0;jgetNumElements()); regionSparse2->print(); printf("REGION3 %d els\n",regionSparse3->getNumElements()); regionSparse3->print(); #endif return regionSparse2->getNumElements(); #else int returnCode= updateColumnFT(regionSparse1, regionSparse2); assert (noPermuteRegion3); updateColumn(regionSparse3, regionSparse3, noPermuteRegion3); //printf("REGION2 %d els\n",regionSparse2->getNumElements()); //regionSparse2->print(); //printf("REGION3 %d els\n",regionSparse3->getNumElements()); //regionSparse3->print(); return returnCode; #endif } // Updates part of 2 columns (FTRANU) real work void CoinFactorization::updateTwoColumnsUDensish ( int & numberNonZero1, double * COIN_RESTRICT region1, int * COIN_RESTRICT index1, int & numberNonZero2, double * COIN_RESTRICT region2, int * COIN_RESTRICT index2) const { double tolerance = zeroTolerance_; const CoinBigIndex * COIN_RESTRICT startColumn = startColumnU_.array(); const int * COIN_RESTRICT indexRow = indexRowU_.array(); const CoinFactorizationDouble * COIN_RESTRICT element = elementU_.array(); int numberNonZeroA = 0; int numberNonZeroB = 0; const int *numberInColumn = numberInColumn_.array(); const CoinFactorizationDouble *pivotRegion = pivotRegion_.array(); for (int i = numberU_-1 ; i >= numberSlacks_; i-- ) { CoinFactorizationDouble pivotValue2 = region2[i]; region2[i] = 0.0; CoinFactorizationDouble pivotValue1 = region1[i]; region1[i] = 0.0; if ( fabs ( pivotValue2 ) > tolerance ) { CoinBigIndex start = startColumn[i]; const CoinFactorizationDouble * COIN_RESTRICT thisElement = element+start; const int * COIN_RESTRICT thisIndex = indexRow+start; if ( fabs ( pivotValue1 ) <= tolerance ) { // just region 2 for (CoinBigIndex j=numberInColumn[i]-1 ; j >=0; j-- ) { int iRow = thisIndex[j]; CoinFactorizationDouble value = thisElement[j]; #ifdef NO_LOAD region2[iRow] -= value * pivotValue2; #else CoinFactorizationDouble regionValue2 = region2[iRow]; region2[iRow] = regionValue2 - value * pivotValue2; #endif } pivotValue2 *= pivotRegion[i]; region2[i]=pivotValue2; index2[numberNonZeroB++]=i; } else { // both for (CoinBigIndex j=numberInColumn[i]-1 ; j >=0; j-- ) { int iRow = thisIndex[j]; CoinFactorizationDouble value = thisElement[j]; #ifdef NO_LOAD region1[iRow] -= value * pivotValue1; region2[iRow] -= value * pivotValue2; #else CoinFactorizationDouble regionValue1 = region1[iRow]; CoinFactorizationDouble regionValue2 = region2[iRow]; region1[iRow] = regionValue1 - value * pivotValue1; region2[iRow] = regionValue2 - value * pivotValue2; #endif } pivotValue1 *= pivotRegion[i]; pivotValue2 *= pivotRegion[i]; region1[i]=pivotValue1; index1[numberNonZeroA++]=i; region2[i]=pivotValue2; index2[numberNonZeroB++]=i; } } else if ( fabs ( pivotValue1 ) > tolerance ) { CoinBigIndex start = startColumn[i]; const CoinFactorizationDouble * COIN_RESTRICT thisElement = element+start; const int * COIN_RESTRICT thisIndex = indexRow+start; // just region 1 for (CoinBigIndex j=numberInColumn[i]-1 ; j >=0; j-- ) { int iRow = thisIndex[j]; CoinFactorizationDouble value = thisElement[j]; #ifdef NO_LOAD region1[iRow] -= value * pivotValue1; #else CoinFactorizationDouble regionValue1 = region1[iRow]; region1[iRow] = regionValue1 - value * pivotValue1; #endif } pivotValue1 *= pivotRegion[i]; region1[i]=pivotValue1; index1[numberNonZeroA++]=i; } } // Slacks for (int i = numberSlacks_-1; i>=0;i--) { double value2 = region2[i]; double value1 = region1[i]; bool value1NonZero = (value1!=0.0); if ( fabs(value2) > tolerance ) { region2[i]=-value2; index2[numberNonZeroB++]=i; } else { region2[i]=0.0; } if ( value1NonZero ) { index1[numberNonZeroA]=i; if ( fabs(value1) > tolerance ) { region1[i]=-value1; numberNonZeroA++; } else { region1[i]=0.0; } } } numberNonZero1=numberNonZeroA; numberNonZero2=numberNonZeroB; } // updateColumnU. Updates part of column (FTRANU) void CoinFactorization::updateColumnU ( CoinIndexedVector * regionSparse, int * indexIn) const { int numberNonZero = regionSparse->getNumElements ( ); int goSparse; // Guess at number at end if (sparseThreshold_>0) { if (ftranAverageAfterR_) { int newNumber = static_cast (numberNonZero*ftranAverageAfterU_); if (newNumber< sparseThreshold_) goSparse = 2; else if (newNumber< sparseThreshold2_) goSparse = 1; else goSparse = 0; } else { if (numberNonZerodenseVector ( ); int * regionIndex = regionSparse->getIndices(); int numberNonZero=updateColumnUDensish(region,regionIndex); regionSparse->setNumElements ( numberNonZero ); } break; case 1: // middling updateColumnUSparsish(regionSparse,indexIn); break; case 2: // sparse updateColumnUSparse(regionSparse,indexIn); break; } if (collectStatistics_) ftranCountAfterU_ += regionSparse->getNumElements ( ); } #ifdef COIN_DEVELOP double ncall_DZ=0.0; double nrow_DZ=0.0; double nslack_DZ=0.0; double nU_DZ=0.0; double nnz_DZ=0.0; double nDone_DZ=0.0; #endif // Updates part of column (FTRANU) real work int CoinFactorization::updateColumnUDensish ( double * COIN_RESTRICT region, int * COIN_RESTRICT regionIndex) const { double tolerance = zeroTolerance_; const CoinBigIndex *startColumn = startColumnU_.array(); const int *indexRow = indexRowU_.array(); const CoinFactorizationDouble *element = elementU_.array(); int numberNonZero = 0; const int *numberInColumn = numberInColumn_.array(); const CoinFactorizationDouble *pivotRegion = pivotRegion_.array(); #ifdef COIN_DEVELOP ncall_DZ++; nrow_DZ += numberRows_; nslack_DZ += numberSlacks_; nU_DZ += numberU_; #endif for (int i = numberU_-1 ; i >= numberSlacks_; i-- ) { CoinFactorizationDouble pivotValue = region[i]; if (pivotValue) { #ifdef COIN_DEVELOP nnz_DZ++; #endif region[i] = 0.0; if ( fabs ( pivotValue ) > tolerance ) { CoinBigIndex start = startColumn[i]; const CoinFactorizationDouble * thisElement = element+start; const int * thisIndex = indexRow+start; #ifdef COIN_DEVELOP nDone_DZ += numberInColumn[i]; #endif for (CoinBigIndex j=numberInColumn[i]-1 ; j >=0; j-- ) { int iRow = thisIndex[j]; CoinFactorizationDouble regionValue = region[iRow]; CoinFactorizationDouble value = thisElement[j]; region[iRow] = regionValue - value * pivotValue; } pivotValue *= pivotRegion[i]; region[i]=pivotValue; regionIndex[numberNonZero++]=i; } } } // now do slacks #ifndef COIN_FAST_CODE if (slackValue_==-1.0) { #endif #if 0 // Could skew loop to pick up next one earlier // might improve pipelining for (int i = numberSlacks_-1; i>2;i-=2) { double value0 = region[i]; double absValue0 = fabs ( value0 ); double value1 = region[i-1]; double absValue1 = fabs ( value1 ); if ( value0 ) { if ( absValue0 > tolerance ) { region[i]=-value0; regionIndex[numberNonZero++]=i; } else { region[i]=0.0; } } if ( value1 ) { if ( absValue1 > tolerance ) { region[i-1]=-value1; regionIndex[numberNonZero++]=i-1; } else { region[i-1]=0.0; } } } for ( ; i>=0;i--) { double value = region[i]; double absValue = fabs ( value ); if ( value ) { if ( absValue > tolerance ) { region[i]=-value; regionIndex[numberNonZero++]=i; } else { region[i]=0.0; } } } #else for (int i = numberSlacks_-1; i>=0;i--) { double value = region[i]; if ( value ) { region[i]=-value; regionIndex[numberNonZero]=i; if ( fabs(value) > tolerance ) numberNonZero++; else region[i]=0.0; } } #endif #ifndef COIN_FAST_CODE } else { assert (slackValue_==1.0); for (int i = numberSlacks_-1; i>=0;i--) { double value = region[i]; double absValue = fabs ( value ); if ( value ) { region[i]=0.0; if ( absValue > tolerance ) { region[i]=value; regionIndex[numberNonZero++]=i; } } } } #endif return numberNonZero; } // updateColumnU. Updates part of column (FTRANU) /* Since everything is in order I should be able to do a better job of marking stuff - think. Also as L is static maybe I can do something better there (I know I could if I marked the depth of every element but that would lead to other inefficiencies. */ void CoinFactorization::updateColumnUSparse ( CoinIndexedVector * regionSparse, int * COIN_RESTRICT indexIn) const { int numberNonZero = regionSparse->getNumElements ( ); int * COIN_RESTRICT regionIndex = regionSparse->getIndices ( ); double * COIN_RESTRICT region = regionSparse->denseVector ( ); double tolerance = zeroTolerance_; const CoinBigIndex *startColumn = startColumnU_.array(); const int *indexRow = indexRowU_.array(); const CoinFactorizationDouble *element = elementU_.array(); const CoinFactorizationDouble *pivotRegion = pivotRegion_.array(); // use sparse_ as temporary area // mark known to be zero int * COIN_RESTRICT stack = sparse_.array(); /* pivot */ int * COIN_RESTRICT list = stack + maximumRowsExtra_; /* final list */ CoinBigIndex * COIN_RESTRICT next = reinterpret_cast (list + maximumRowsExtra_); /* jnext */ char * COIN_RESTRICT mark = reinterpret_cast (next + maximumRowsExtra_); #ifdef COIN_DEBUG for (int i=0;i=startColumn[kPivot]) { kPivot=indexRow[j--]; /* put back on stack */ next[nStack++] =j; if (!mark[kPivot]) { /* and new one */ int numberIn = numberInColumn[kPivot]; if (numberIn) { j = startColumn[kPivot]+numberIn-1; stack[nStack]=kPivot; mark[kPivot]=2; next[nStack++]=j; } else { // can do immediately /* finished so mark */ mark[kPivot]=1; if (kPivot>=numberSlacks_) { list[nList++]=kPivot; } else { // slack - put at end --put; *put=kPivot; } } } } else { /* finished so mark */ mark[kPivot]=1; if (kPivot>=numberSlacks_) { list[nList++]=kPivot; } else { // slack - put at end assert (!numberInColumn[kPivot]); --put; *put=kPivot; } } } } } #if 0 { std::sort(list,list+nList); int i; int last; last =-1; for (i=0;ilast); last=k; } std::sort(put,putLast); int n = putLast-put; last =-1; for (i=0;ilast); last=k; } } #endif numberNonZero=0; for (int i=nList-1;i>=0;i--) { int iPivot = list[i]; mark[iPivot]=0; CoinFactorizationDouble pivotValue = region[iPivot]; region[iPivot]=0.0; if ( fabs ( pivotValue ) > tolerance ) { CoinBigIndex start = startColumn[iPivot]; int number = numberInColumn[iPivot]; CoinBigIndex j; for ( j = start; j < start+number; j++ ) { CoinFactorizationDouble value = element[j]; int iRow = indexRow[j]; region[iRow] -= value * pivotValue; } pivotValue *= pivotRegion[iPivot]; region[iPivot]=pivotValue; regionIndex[numberNonZero++]=iPivot; } } // slacks #ifndef COIN_FAST_CODE if (slackValue_==1.0) { for (;put tolerance ) { region[iPivot]=pivotValue; regionIndex[numberNonZero++]=iPivot; } } } else { #endif for (;put tolerance ) { region[iPivot]=-pivotValue; regionIndex[numberNonZero++]=iPivot; } } #ifndef COIN_FAST_CODE } #endif regionSparse->setNumElements ( numberNonZero ); } // updateColumnU. Updates part of column (FTRANU) /* Since everything is in order I should be able to do a better job of marking stuff - think. Also as L is static maybe I can do something better there (I know I could if I marked the depth of every element but that would lead to other inefficiencies. */ #ifdef COIN_DEVELOP double ncall_SZ=0.0; double nrow_SZ=0.0; double nslack_SZ=0.0; double nU_SZ=0.0; double nnz_SZ=0.0; double nDone_SZ=0.0; #endif void CoinFactorization::updateColumnUSparsish ( CoinIndexedVector * regionSparse, int * COIN_RESTRICT indexIn) const { int * COIN_RESTRICT regionIndex = regionSparse->getIndices ( ); // mark known to be zero int * COIN_RESTRICT stack = sparse_.array(); /* pivot */ int * COIN_RESTRICT list = stack + maximumRowsExtra_; /* final list */ CoinBigIndex * COIN_RESTRICT next = reinterpret_cast (list + maximumRowsExtra_); /* jnext */ CoinCheckZero * COIN_RESTRICT mark = reinterpret_cast (next + maximumRowsExtra_); const int *numberInColumn = numberInColumn_.array(); #ifdef COIN_DEBUG for (int i=0;igetNumElements ( ); double * COIN_RESTRICT region = regionSparse->denseVector ( ); double tolerance = zeroTolerance_; const CoinBigIndex *startColumn = startColumnU_.array(); const int *indexRow = indexRowU_.array(); const CoinFactorizationDouble *element = elementU_.array(); const CoinFactorizationDouble *pivotRegion = pivotRegion_.array(); #ifdef COIN_DEVELOP ncall_SZ++; nrow_SZ += numberRows_; nslack_SZ += numberSlacks_; nU_SZ += numberU_; #endif for (int ii=0;ii>CHECK_SHIFT; int iBit = iPivot-(iWord<(mark[iWord] | (1<(1<>CHECK_SHIFT; jLast = CoinMax((jLast< (numberSlacks_)); int i; for ( i = numberU_-1 ; i >= jLast; i-- ) { CoinFactorizationDouble pivotValue = region[i]; region[i] = 0.0; if ( fabs ( pivotValue ) > tolerance ) { #ifdef COIN_DEVELOP nnz_SZ ++; #endif CoinBigIndex start = startColumn[i]; const CoinFactorizationDouble * thisElement = element+start; const int * thisIndex = indexRow+start; #ifdef COIN_DEVELOP nDone_SZ += numberInColumn[i]; #endif for (int j=numberInColumn[i]-1 ; j >=0; j-- ) { int iRow0 = thisIndex[j]; CoinFactorizationDouble regionValue0 = region[iRow0]; CoinFactorizationDouble value0 = thisElement[j]; int iWord = iRow0>>CHECK_SHIFT; int iBit = iRow0-(iWord<(mark[iWord] | (1<(1<>CHECK_SHIFT; if (jLast>numberSlacks_) { // now do in chunks for (int k=(jLast>>CHECK_SHIFT)-1;k>=kLast;k--) { unsigned int iMark = mark[k]; if (iMark) { // something in chunk - do all (as imark may change) int iLast = k<= iLast; i-- ) { CoinFactorizationDouble pivotValue = region[i]; if (pivotValue) { #ifdef COIN_DEVELOP nnz_SZ ++; #endif region[i] = 0.0; if ( fabs ( pivotValue ) > tolerance ) { CoinBigIndex start = startColumn[i]; const CoinFactorizationDouble * thisElement = element+start; const int * thisIndex = indexRow+start; #ifdef COIN_DEVELOP nDone_SZ += numberInColumn[i]; #endif for (int j=numberInColumn[i]-1 ; j >=0; j-- ) { int iRow0 = thisIndex[j]; CoinFactorizationDouble regionValue0 = region[iRow0]; CoinFactorizationDouble value0 = thisElement[j]; int iWord = iRow0>>CHECK_SHIFT; int iBit = iRow0-(iWord<(mark[iWord] | (1<(1<= numberSlacks_; i-- ) { CoinFactorizationDouble pivotValue = region[i]; region[i] = 0.0; if ( fabs ( pivotValue ) > tolerance ) { #ifdef COIN_DEVELOP nnz_SZ ++; #endif CoinBigIndex start = startColumn[i]; const CoinFactorizationDouble * thisElement = element+start; const int * thisIndex = indexRow+start; #ifdef COIN_DEVELOP nDone_SZ += numberInColumn[i]; #endif for (int j=numberInColumn[i]-1 ; j >=0; j-- ) { int iRow0 = thisIndex[j]; CoinFactorizationDouble regionValue0 = region[iRow0]; CoinFactorizationDouble value0 = thisElement[j]; int iWord = iRow0>>CHECK_SHIFT; int iBit = iRow0-(iWord<(mark[iWord] | (1<(1<>CHECK_SHIFT; jLast = jLast<=jLast;i--) { double value = region[i]; double absValue = fabs ( value ); if ( value ) { region[i]=0.0; if ( absValue > tolerance ) { region[i]=value; regionIndex[numberNonZero++]=i; } } } mark[jLast]=0; // now do in chunks for (int k=(jLast>>CHECK_SHIFT)-1;k>=0;k--) { unsigned int iMark = mark[k]; if (iMark) { // something in chunk - do all (as imark may change) int iLast = k<= iLast; i-- ) { double value = region[i]; double absValue = fabs ( value ); if ( value ) { region[i]=0.0; if ( absValue > tolerance ) { region[i]=value; regionIndex[numberNonZero++]=i; } } } mark[k]=0; } } } else { assert (factor==-1.0); #endif // First do down to convenient power of 2 CoinBigIndex jLast = (numberSlacks_-1)>>CHECK_SHIFT; jLast = jLast<=jLast;i--) { double value = region[i]; double absValue = fabs ( value ); if ( value ) { region[i]=0.0; if ( absValue > tolerance ) { region[i]=-value; regionIndex[numberNonZero++]=i; } } } mark[jLast]=0; // now do in chunks for (int k=(jLast>>CHECK_SHIFT)-1;k>=0;k--) { unsigned int iMark = mark[k]; if (iMark) { // something in chunk - do all (as imark may change) int iLast = k<= iLast; i-- ) { double value = region[i]; double absValue = fabs ( value ); if ( value ) { region[i]=0.0; if ( absValue > tolerance ) { region[i]=-value; regionIndex[numberNonZero++]=i; } } } mark[k]=0; } } #ifndef COIN_FAST_CODE } #endif } regionSparse->setNumElements ( numberNonZero ); mark[(numberU_-1)>>CHECK_SHIFT]=0; mark[numberSlacks_>>CHECK_SHIFT]=0; if (numberSlacks_) mark[(numberSlacks_-1)>>CHECK_SHIFT]=0; #ifdef COIN_DEBUG for (i=0;idenseVector ( ); int * COIN_RESTRICT regionIndex = regionSparse->getIndices ( ); int numberNonZero = regionSparse->getNumElements ( ); if ( !numberR_ ) return; //return if nothing to do double tolerance = zeroTolerance_; const CoinBigIndex * startColumn = startColumnR_.array()-numberRows_; const int * indexRow = indexRowR_; const CoinFactorizationDouble * element = elementR_; const int * permute = permute_.array(); // Work out very dubious idea of what would be fastest int method=-1; // Size of R double sizeR=startColumnR_.array()[numberR_]; // Average double averageR = sizeR/(static_cast (numberRowsExtra_)); // weights (relative to actual work) double setMark = 0.1; // setting mark double test1= 1.0; // starting ftran (without testPivot) double testPivot = 2.0; // Seeing if zero etc double startDot=2.0; // For starting dot product version // For final scan double final = numberNonZero*1.0; double methodTime[3]; // For second type methodTime[1] = numberPivots_ * (testPivot + ((static_cast (numberNonZero))/(static_cast (numberRows_)) * averageR)); methodTime[1] += numberNonZero *(test1 + averageR); // For first type methodTime[0] = methodTime[1] + (numberNonZero+numberPivots_)*setMark; methodTime[1] += numberNonZero*final; // third methodTime[2] = sizeR + numberPivots_*startDot + numberNonZero*final; // switch off if necessary if (!numberInColumnPlus_.array()) { methodTime[0]=1.0e100; methodTime[1]=1.0e100; } else if (!sparse_.array()) { methodTime[0]=1.0e100; } double best=1.0e100; for (int i=0;i<3;i++) { if (methodTime[i]=0); const int * numberInColumnPlus = numberInColumnPlus_.array(); //if (method==1) //printf(" methods %g %g %g - chosen %d\n",methodTime[0],methodTime[1],methodTime[2],method); switch (method) { case 0: #ifdef STACK { // use sparse_ as temporary area // mark known to be zero int * COIN_RESTRICT stack = sparse_.array(); /* pivot */ int * COIN_RESTRICT list = stack + maximumRowsExtra_; /* final list */ CoinBigIndex * COIN_RESTRICT next = (CoinBigIndex *) (list + maximumRowsExtra_); /* jnext */ char * COIN_RESTRICT mark = (char *) (next + maximumRowsExtra_); // we have another copy of R in R const CoinFactorizationDouble * elementR = elementR_ + lengthAreaR_; const int * indexRowR = indexRowR_ + lengthAreaR_; const CoinBigIndex * startR = startColumnR_.array()+maximumPivots_+1; int nList=0; const int * permuteBack = permuteBack_.array(); for (int k=0;k=0) { /* take off stack */ if (j>=startR[kPivot]) { int jPivot=indexRowR[j--]; /* put back on stack */ next[nStack] =j; if (!mark[jPivot]) { /* and new one */ kPivot=jPivot; j=-10; stack[++nStack]=kPivot; mark[kPivot]=1; next[nStack]=j; } } else if (j==-10) { // before first - see if followon int jPivot = permuteBack[kPivot]; if (jPivot=0) { kPivot=stack[nStack]; j=next[nStack]; } } } } } numberNonZero=0; for (int i=nList-1;i>=0;i--) { int iPivot = list[i]; mark[iPivot]=0; CoinFactorizationDouble pivotValue; if (iPivot tolerance ) { region[iPivot] = pivotValue; CoinBigIndex start = startR[iPivot]; int number = numberInColumnPlus[iPivot]; CoinBigIndex end = start + number; CoinBigIndex j; for (j=start ; j < end; j ++ ) { int iRow = indexRowR[j]; CoinFactorizationDouble value = elementR[j]; region[iRow] -= value * pivotValue; } regionIndex[numberNonZero++] = iPivot; } else { region[iPivot] = 0.0; } } } #else { // use sparse_ as temporary area // mark known to be zero int * COIN_RESTRICT stack = sparse_.array(); /* pivot */ int * COIN_RESTRICT list = stack + maximumRowsExtra_; /* final list */ CoinBigIndex * COIN_RESTRICT next = reinterpret_cast (list + maximumRowsExtra_); /* jnext */ char * COIN_RESTRICT mark = reinterpret_cast (next + maximumRowsExtra_); // mark all rows which will be permuted for (int i = numberRows_; i < numberRowsExtra_; i++ ) { int iRow = permute[i]; mark[iRow]=1; } // we have another copy of R in R const CoinFactorizationDouble * elementR = elementR_ + lengthAreaR_; const int * indexRowR = indexRowR_ + lengthAreaR_; const CoinBigIndex * startR = startColumnR_.array()+maximumPivots_+1; // For current list order does not matter as // only affects end int newNumber=0; for (int i = 0; i < numberNonZero; i++ ) { int iRow = regionIndex[i]; assert (region[iRow]); if (!mark[iRow]) regionIndex[newNumber++]=iRow; int number = numberInColumnPlus[iRow]; if (number) { CoinFactorizationDouble pivotValue = region[iRow]; CoinBigIndex start=startR[iRow]; CoinBigIndex end = start+number; for (CoinBigIndex j = start; j < end; j ++ ) { CoinFactorizationDouble value = elementR[j]; int jRow = indexRowR[j]; region[jRow] -= pivotValue*value; } } } numberNonZero = newNumber; for (int i = numberRows_; i < numberRowsExtra_; i++ ) { //move using permute_ (stored in inverse fashion) int iRow = permute[i]; CoinFactorizationDouble pivotValue = region[iRow]+region[i]; //zero out pre-permuted region[iRow] = 0.0; if ( fabs ( pivotValue ) > tolerance ) { region[i] = pivotValue; if (!mark[i]) regionIndex[numberNonZero++] = i; int number = numberInColumnPlus[i]; CoinBigIndex start=startR[i]; CoinBigIndex end = start+number; for (CoinBigIndex j = start; j < end; j ++ ) { CoinFactorizationDouble value = elementR[j]; int jRow = indexRowR[j]; region[jRow] -= pivotValue*value; } } else { region[i] = 0.0; } mark[iRow]=0; } } #endif break; case 1: { // no sparse region // we have another copy of R in R const CoinFactorizationDouble * elementR = elementR_ + lengthAreaR_; const int * indexRowR = indexRowR_ + lengthAreaR_; const CoinBigIndex * startR = startColumnR_.array()+maximumPivots_+1; // For current list order does not matter as // only affects end for (int i = 0; i < numberNonZero; i++ ) { int iRow = regionIndex[i]; assert (region[iRow]); int number = numberInColumnPlus[iRow]; if (number) { CoinFactorizationDouble pivotValue = region[iRow]; CoinBigIndex start=startR[iRow]; CoinBigIndex end = start+number; for (CoinBigIndex j = start; j < end; j ++ ) { CoinFactorizationDouble value = elementR[j]; int jRow = indexRowR[j]; region[jRow] -= pivotValue*value; } } } for (int i = numberRows_; i < numberRowsExtra_; i++ ) { //move using permute_ (stored in inverse fashion) int iRow = permute[i]; CoinFactorizationDouble pivotValue = region[iRow]+region[i]; //zero out pre-permuted region[iRow] = 0.0; if ( fabs ( pivotValue ) > tolerance ) { region[i] = pivotValue; regionIndex[numberNonZero++] = i; int number = numberInColumnPlus[i]; CoinBigIndex start=startR[i]; CoinBigIndex end = start+number; for (CoinBigIndex j = start; j < end; j ++ ) { CoinFactorizationDouble value = elementR[j]; int jRow = indexRowR[j]; region[jRow] -= pivotValue*value; } } else { region[i] = 0.0; } } } break; case 2: { CoinBigIndex start = startColumn[numberRows_]; for (int i = numberRows_; i < numberRowsExtra_; i++ ) { //move using permute_ (stored in inverse fashion) CoinBigIndex end = startColumn[i+1]; int iRow = permute[i]; CoinFactorizationDouble pivotValue = region[iRow]; //zero out pre-permuted region[iRow] = 0.0; for (CoinBigIndex j = start; j < end; j ++ ) { CoinFactorizationDouble value = element[j]; int jRow = indexRow[j]; value *= region[jRow]; pivotValue -= value; } start=end; if ( fabs ( pivotValue ) > tolerance ) { region[i] = pivotValue; regionIndex[numberNonZero++] = i; } else { region[i] = 0.0; } } } break; } if (method) { // pack down int n=numberNonZero; numberNonZero=0; for (int i=0;isetNumElements ( numberNonZero ); } // updateColumnR. Updates part of column (FTRANR) void CoinFactorization::updateColumnRFT ( CoinIndexedVector * regionSparse, int * COIN_RESTRICT regionIndex) { double * COIN_RESTRICT region = regionSparse->denseVector ( ); //int *regionIndex = regionSparse->getIndices ( ); CoinBigIndex * COIN_RESTRICT startColumnU = startColumnU_.array(); int numberNonZero = regionSparse->getNumElements ( ); if ( numberR_ ) { double tolerance = zeroTolerance_; const CoinBigIndex * startColumn = startColumnR_.array()-numberRows_; const int * indexRow = indexRowR_; const CoinFactorizationDouble * element = elementR_; const int * permute = permute_.array(); // Work out very dubious idea of what would be fastest int method=-1; // Size of R double sizeR=startColumnR_.array()[numberR_]; // Average double averageR = sizeR/(static_cast (numberRowsExtra_)); // weights (relative to actual work) double setMark = 0.1; // setting mark double test1= 1.0; // starting ftran (without testPivot) double testPivot = 2.0; // Seeing if zero etc double startDot=2.0; // For starting dot product version // For final scan double final = numberNonZero*1.0; double methodTime[3]; // For second type methodTime[1] = numberPivots_ * (testPivot + ((static_cast (numberNonZero))/(static_cast (numberRows_)) * averageR)); methodTime[1] += numberNonZero *(test1 + averageR); // For first type methodTime[0] = methodTime[1] + (numberNonZero+numberPivots_)*setMark; methodTime[1] += numberNonZero*final; // third methodTime[2] = sizeR + numberPivots_*startDot + numberNonZero*final; // switch off if necessary if (!numberInColumnPlus_.array()) { methodTime[0]=1.0e100; methodTime[1]=1.0e100; } else if (!sparse_.array()) { methodTime[0]=1.0e100; } const int * numberInColumnPlus = numberInColumnPlus_.array(); int * numberInColumn = numberInColumn_.array(); // adjust for final scan methodTime[1] += final; double best=1.0e100; for (int i=0;i<3;i++) { if (methodTime[i]=0); switch (method) { case 0: { // use sparse_ as temporary area // mark known to be zero int * COIN_RESTRICT stack = sparse_.array(); /* pivot */ int * COIN_RESTRICT list = stack + maximumRowsExtra_; /* final list */ CoinBigIndex * COIN_RESTRICT next = reinterpret_cast (list + maximumRowsExtra_); /* jnext */ char * COIN_RESTRICT mark = reinterpret_cast (next + maximumRowsExtra_); // mark all rows which will be permuted for (int i = numberRows_; i < numberRowsExtra_; i++ ) { int iRow = permute[i]; mark[iRow]=1; } // we have another copy of R in R const CoinFactorizationDouble * elementR = elementR_ + lengthAreaR_; const int * indexRowR = indexRowR_ + lengthAreaR_; const CoinBigIndex * startR = startColumnR_.array()+maximumPivots_+1; //save in U //in at end int iColumn = numberColumnsExtra_; startColumnU[iColumn] = startColumnU[maximumColumnsExtra_]; CoinBigIndex start = startColumnU[iColumn]; //int * putIndex = indexRowU_ + start; CoinFactorizationDouble * COIN_RESTRICT putElement = elementU_.array() + start; // For current list order does not matter as // only affects end int newNumber=0; for (int i = 0; i < numberNonZero; i++ ) { int iRow = regionIndex[i]; CoinFactorizationDouble pivotValue = region[iRow]; assert (region[iRow]); if (!mark[iRow]) { //putIndex[newNumber]=iRow; putElement[newNumber]=pivotValue;; regionIndex[newNumber++]=iRow; } int number = numberInColumnPlus[iRow]; if (number) { CoinBigIndex start=startR[iRow]; CoinBigIndex end = start+number; for (CoinBigIndex j = start; j < end; j ++ ) { CoinFactorizationDouble value = elementR[j]; int jRow = indexRowR[j]; region[jRow] -= pivotValue*value; } } } numberNonZero = newNumber; for (int i = numberRows_; i < numberRowsExtra_; i++ ) { //move using permute_ (stored in inverse fashion) int iRow = permute[i]; CoinFactorizationDouble pivotValue = region[iRow]+region[i]; //zero out pre-permuted region[iRow] = 0.0; if ( fabs ( pivotValue ) > tolerance ) { region[i] = pivotValue; if (!mark[i]) { //putIndex[numberNonZero]=i; putElement[numberNonZero]=pivotValue;; regionIndex[numberNonZero++]=i; } int number = numberInColumnPlus[i]; CoinBigIndex start=startR[i]; CoinBigIndex end = start+number; for (CoinBigIndex j = start; j < end; j ++ ) { CoinFactorizationDouble value = elementR[j]; int jRow = indexRowR[j]; region[jRow] -= pivotValue*value; } } else { region[i] = 0.0; } mark[iRow]=0; } numberInColumn[iColumn] = numberNonZero; startColumnU[maximumColumnsExtra_] = start + numberNonZero; } break; case 1: { // no sparse region // we have another copy of R in R const CoinFactorizationDouble * elementR = elementR_ + lengthAreaR_; const int * indexRowR = indexRowR_ + lengthAreaR_; const CoinBigIndex * startR = startColumnR_.array()+maximumPivots_+1; // For current list order does not matter as // only affects end for (int i = 0; i < numberNonZero; i++ ) { int iRow = regionIndex[i]; assert (region[iRow]); int number = numberInColumnPlus[iRow]; if (number) { CoinFactorizationDouble pivotValue = region[iRow]; CoinBigIndex start=startR[iRow]; CoinBigIndex end = start+number; for (CoinBigIndex j = start; j < end; j ++ ) { CoinFactorizationDouble value = elementR[j]; int jRow = indexRowR[j]; region[jRow] -= pivotValue*value; } } } for (int i = numberRows_; i < numberRowsExtra_; i++ ) { //move using permute_ (stored in inverse fashion) int iRow = permute[i]; CoinFactorizationDouble pivotValue = region[iRow]+region[i]; //zero out pre-permuted region[iRow] = 0.0; if ( fabs ( pivotValue ) > tolerance ) { region[i] = pivotValue; regionIndex[numberNonZero++] = i; int number = numberInColumnPlus[i]; CoinBigIndex start=startR[i]; CoinBigIndex end = start+number; for (CoinBigIndex j = start; j < end; j ++ ) { CoinFactorizationDouble value = elementR[j]; int jRow = indexRowR[j]; region[jRow] -= pivotValue*value; } } else { region[i] = 0.0; } } } break; case 2: { CoinBigIndex start = startColumn[numberRows_]; for (int i = numberRows_; i < numberRowsExtra_; i++ ) { //move using permute_ (stored in inverse fashion) CoinBigIndex end = startColumn[i+1]; int iRow = permute[i]; CoinFactorizationDouble pivotValue = region[iRow]; //zero out pre-permuted region[iRow] = 0.0; for (CoinBigIndex j = start; j < end; j ++ ) { CoinFactorizationDouble value = element[j]; int jRow = indexRow[j]; value *= region[jRow]; pivotValue -= value; } start=end; if ( fabs ( pivotValue ) > tolerance ) { region[i] = pivotValue; regionIndex[numberNonZero++] = i; } else { region[i] = 0.0; } } } break; } if (method) { // pack down int n=numberNonZero; numberNonZero=0; //save in U //in at end int iColumn = numberColumnsExtra_; assert(startColumnU[iColumn] == startColumnU[maximumColumnsExtra_]); CoinBigIndex start = startColumnU[iColumn]; int * COIN_RESTRICT putIndex = indexRowU_.array() + start; CoinFactorizationDouble * COIN_RESTRICT putElement = elementU_.array() + start; for (int i=0;isetNumElements ( numberNonZero ); } else { // No R but we still need to save column //save in U //in at end int * COIN_RESTRICT numberInColumn = numberInColumn_.array(); numberNonZero = regionSparse->getNumElements ( ); int iColumn = numberColumnsExtra_; assert(startColumnU[iColumn] == startColumnU[maximumColumnsExtra_]); CoinBigIndex start = startColumnU[iColumn]; numberInColumn[iColumn] = numberNonZero; startColumnU[maximumColumnsExtra_] = start + numberNonZero; int * COIN_RESTRICT putIndex = indexRowU_.array() + start; CoinFactorizationDouble * COIN_RESTRICT putElement = elementU_.array() + start; for (int i=0;igetIndices ( ); int numberNonZero = regionSparse2->getNumElements(); const int *permute = permute_.array(); int * COIN_RESTRICT index = regionSparse2->getIndices(); double * COIN_RESTRICT region = regionSparse->denseVector(); double * COIN_RESTRICT array = regionSparse2->denseVector(); CoinBigIndex * COIN_RESTRICT startColumnU = startColumnU_.array(); bool doFT=doForrestTomlin_; // see if room if (doFT) { int iColumn = numberColumnsExtra_; startColumnU[iColumn] = startColumnU[maximumColumnsExtra_]; CoinBigIndex start = startColumnU[iColumn]; CoinBigIndex space = lengthAreaU_ - ( start + numberRowsExtra_ ); doFT = space>=0; if (doFT) { regionIndex = indexRowU_.array() + start; } else { startColumnU[maximumColumnsExtra_] = lengthAreaU_+1; } } #ifndef CLP_FACTORIZATION bool packed = regionSparse2->packedMode(); if (packed) { #else assert (regionSparse2->packedMode()); #endif for (int j = 0; j < numberNonZero; j ++ ) { int iRow = index[j]; double value = array[j]; array[j]=0.0; iRow = permute[iRow]; region[iRow] = value; regionIndex[j] = iRow; } #ifndef CLP_FACTORIZATION } else { for (int j = 0; j < numberNonZero; j ++ ) { int iRow = index[j]; double value = array[iRow]; array[iRow]=0.0; iRow = permute[iRow]; region[iRow] = value; regionIndex[j] = iRow; } } #endif regionSparse->setNumElements ( numberNonZero ); if (collectStatistics_) { numberFtranCounts_++; ftranCountInput_ += numberNonZero; } // ******* L #if 0 { double *region = regionSparse->denseVector ( ); //int *regionIndex = regionSparse->getIndices ( ); int numberNonZero = regionSparse->getNumElements ( ); for (int i=0;idenseVector ( ); //int *regionIndex = regionSparse->getIndices ( ); int numberNonZero = regionSparse->getNumElements ( ); for (int i=0;igetNumElements(); //permute extra //row bits here if ( doFT ) updateColumnRFT ( regionSparse, regionIndex ); else updateColumnR ( regionSparse ); if (collectStatistics_) ftranCountAfterR_ += regionSparse->getNumElements(); // ******* U updateColumnU ( regionSparse, regionIndex); if (!doForrestTomlin_) { // Do PFI after everything else updateColumnPFI(regionSparse); } permuteBack(regionSparse,regionSparse2); // will be negative if no room if ( doFT ) return regionSparse2->getNumElements(); else return -regionSparse2->getNumElements(); } CoinUtils-2.9.10/CoinUtils/src/CoinPresolveTripleton.hpp0000644000076600007660000000270711654260357021733 0ustar coincoin/* $Id: CoinPresolveTripleton.hpp 1498 2011-11-02 15:25:35Z mjs $ */ // 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 CoinPresolveTripleton_H #define CoinPresolveTripleton_H #define TRIPLETON 11 /** We are only going to do this if it does not increase number of elements?. It could be generalized to more than three but it seems unlikely it would help. As it is adapted from doubleton icoly is one dropped. */ class tripleton_action : public CoinPresolveAction { public: struct action { int icolx; int icolz; int row; int icoly; double cloy; double cupy; double costy; double clox; double cupx; double costx; double rlo; double rup; double coeffx; double coeffy; double coeffz; double *colel; int ncolx; int ncoly; }; const int nactions_; const action *const actions_; private: tripleton_action(int nactions, const action *actions, const CoinPresolveAction *next) : CoinPresolveAction(next), nactions_(nactions), actions_(actions) {} public: const char *name() const { return ("tripleton_action"); } static const CoinPresolveAction *presolve(CoinPresolveMatrix *, const CoinPresolveAction *next); void postsolve(CoinPostsolveMatrix *prob) const; virtual ~tripleton_action(); }; #endif CoinUtils-2.9.10/CoinUtils/src/CoinDenseVector.cpp0000644000076600007660000001272711510461170020435 0ustar coincoin/* $Id: CoinDenseVector.cpp 1373 2011-01-03 23:57:44Z lou $ */ // Copyright (C) 2003, International Business Machines // Corporation and others. All Rights Resized. // 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 "CoinDenseVector.hpp" #include "CoinHelperFunctions.hpp" //############################################################################# template void CoinDenseVector::clear() { memset(elements_, 0, nElements_*sizeof(T)); } //############################################################################# template CoinDenseVector & CoinDenseVector::operator=(const CoinDenseVector & rhs) { if (this != &rhs) { setVector(rhs.getNumElements(), rhs.getElements()); } return *this; } //############################################################################# template void CoinDenseVector::setVector(int size, const T * elems) { resize(size); CoinMemcpyN( elems,size,elements_); } //############################################################################# template void CoinDenseVector::setConstant(int size, T value) { resize(size); for(int i=0; i void CoinDenseVector::resize(int newsize, T value) { if (newsize != nElements_){ assert(newsize > 0); T *newarray = new T[newsize]; int cpysize = CoinMin(newsize, nElements_); CoinMemcpyN( elements_,cpysize,newarray); delete[] elements_; elements_ = newarray; nElements_ = newsize; for(int i=cpysize; i void CoinDenseVector::setElement(int index, T element) { assert(index >= 0 && index < nElements_); elements_[index] = element; } //############################################################################# template void CoinDenseVector::append(const CoinDenseVector & caboose) { const int s = nElements_; const int cs = caboose.getNumElements(); int newsize = s + cs; resize(newsize); const T * celem = caboose.getElements(); CoinDisjointCopyN(celem, cs, elements_ + s); } //############################################################################# template void CoinDenseVector::operator+=(T value) { for(int i=0; i void CoinDenseVector::operator-=(T value) { for(int i=0; i void CoinDenseVector::operator*=(T value) { for(int i=0; i void CoinDenseVector::operator/=(T value) { for(int i=0; i CoinDenseVector::CoinDenseVector(): nElements_(0), elements_(NULL) {} //############################################################################# template CoinDenseVector::CoinDenseVector(int size, const T * elems): nElements_(0), elements_(NULL) { gutsOfSetVector(size, elems); } //----------------------------------------------------------------------------- template CoinDenseVector::CoinDenseVector(int size, T value): nElements_(0), elements_(NULL) { gutsOfSetConstant(size, value); } //----------------------------------------------------------------------------- template CoinDenseVector::CoinDenseVector(const CoinDenseVector & rhs): nElements_(0), elements_(NULL) { setVector(rhs.getNumElements(), rhs.getElements()); } //----------------------------------------------------------------------------- template CoinDenseVector::~CoinDenseVector () { delete [] elements_; } //############################################################################# template void CoinDenseVector::gutsOfSetVector(int size, const T * elems) { if ( size != 0 ) { resize(size); nElements_ = size; CoinDisjointCopyN(elems, size, elements_); } } //----------------------------------------------------------------------------- template void CoinDenseVector::gutsOfSetConstant(int size, T value) { if ( size != 0 ) { resize(size); nElements_ = size; CoinFillN(elements_, size, value); } } //############################################################################# /** Access the i'th element of the dense vector. */ template T & CoinDenseVector::operator[](int index) const { assert(index >= 0 && index < nElements_); T *where = elements_ + index; return *where; } //############################################################################# // template class CoinDenseVector; This works but causes warning messages template class CoinDenseVector; template class CoinDenseVector; CoinUtils-2.9.10/CoinUtils/src/CoinPresolveForcing.hpp0000644000076600007660000000330411654260357021334 0ustar coincoin/* $Id: CoinPresolveForcing.hpp 1498 2011-11-02 15:25:35Z mjs $ */ // 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). #ifndef CoinPresolveForcing_H #define CoinPresolveForcing_H #include "CoinPresolveMatrix.hpp" /*! \file */ #define IMPLIED_BOUND 7 /*! \class forcing_constraint_action \brief Detect and process forcing constraints and useless constraints A constraint is useless if the bounds on the variables prevent the constraint from ever being violated. A constraint is a forcing constraint if the bounds on the constraint force the value of an involved variable to one of its bounds. A constraint can force more than one variable. */ class forcing_constraint_action : public CoinPresolveAction { forcing_constraint_action(); forcing_constraint_action(const forcing_constraint_action& rhs); forcing_constraint_action& operator=(const forcing_constraint_action& rhs); public: struct action { const int *rowcols; const double *bounds; int row; int nlo; int nup; }; private: const int nactions_; // actions_ is owned by the class and must be deleted at destruction const action *const actions_; public: forcing_constraint_action(int nactions, const action *actions, const CoinPresolveAction *next) : CoinPresolveAction(next), nactions_(nactions), actions_(actions) {} const char *name() const; static const CoinPresolveAction *presolve(CoinPresolveMatrix * prob, const CoinPresolveAction *next); void postsolve(CoinPostsolveMatrix *prob) const; virtual ~forcing_constraint_action(); }; #endif CoinUtils-2.9.10/CoinUtils/src/CoinSimpFactorization.hpp0000644000076600007660000003254611552534611021676 0ustar coincoin/* $Id: CoinSimpFactorization.hpp 1416 2011-04-17 09:57:29Z stefan $ */ // Copyright (C) 2008, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). /* This is a simple factorization of the LP Basis */ #ifndef CoinSimpFactorization_H #define CoinSimpFactorization_H #include #include #include #include "CoinTypes.hpp" #include "CoinIndexedVector.hpp" #include "CoinDenseFactorization.hpp" class CoinPackedMatrix; /// pointers used during factorization class FactorPointers{ public: double *rowMax; int *firstRowKnonzeros; int *prevRow; int *nextRow; int *firstColKnonzeros; int *prevColumn; int *nextColumn; int *newCols; //constructor FactorPointers( int numRows, int numCols, int *UrowLengths_, int *UcolLengths_ ); // destructor ~ FactorPointers(); }; class CoinSimpFactorization : public CoinOtherFactorization { friend void CoinSimpFactorizationUnitTest( const std::string & mpsDir ); public: /**@name Constructors and destructor and copy */ //@{ /// Default constructor CoinSimpFactorization ( ); /// Copy constructor CoinSimpFactorization ( const CoinSimpFactorization &other); /// Destructor virtual ~CoinSimpFactorization ( ); /// = copy CoinSimpFactorization & operator = ( const CoinSimpFactorization & other ); /// Clone virtual CoinOtherFactorization * clone() const ; //@} /**@name Do factorization - public */ //@{ /// Gets space for a factorization virtual void getAreas ( int numberRows, int numberColumns, CoinBigIndex maximumL, CoinBigIndex maximumU ); /// PreProcesses column ordered copy of basis virtual void preProcess ( ); /** Does most of factorization returning status 0 - OK -99 - needs more memory -1 - singular - use numberGoodColumns and redo */ virtual int factor ( ); /// Does post processing on valid factorization - putting variables on correct rows virtual void postProcess(const int * sequence, int * pivotVariable); /// Makes a non-singular basis by replacing variables virtual void makeNonSingular(int * sequence, int numberColumns); //@} /**@name general stuff such as status */ //@{ /// Total number of elements in factorization virtual inline int numberElements ( ) const { return numberRows_*(numberColumns_+numberPivots_); } /// Returns maximum absolute value in factorization double maximumCoefficient() const; //@} /**@name rank one updates which do exist */ //@{ /** Replaces one Column to basis, returns 0=OK, 1=Probably OK, 2=singular, 3=no room If checkBeforeModifying is true will do all accuracy checks before modifying factorization. Whether to set this depends on speed considerations. You could just do this on first iteration after factorization and thereafter re-factorize partial update already in U */ virtual int replaceColumn ( CoinIndexedVector * regionSparse, int pivotRow, double pivotCheck , bool checkBeforeModifying=false, double acceptablePivot=1.0e-8); //@} /**@name various uses of factorization (return code number elements) which user may want to know about */ //@{ /** Updates one column (FTRAN) from regionSparse2 Tries to do FT update number returned is negative if no room regionSparse starts as zero and is zero at end. Note - if regionSparse2 packed on input - will be packed on output */ virtual int updateColumnFT ( CoinIndexedVector * regionSparse, CoinIndexedVector * regionSparse2, bool noPermute=false); /** This version has same effect as above with FTUpdate==false so number returned is always >=0 */ virtual int updateColumn ( CoinIndexedVector * regionSparse, CoinIndexedVector * regionSparse2, bool noPermute=false) const; /// does FTRAN on two columns virtual int updateTwoColumnsFT(CoinIndexedVector * regionSparse1, CoinIndexedVector * regionSparse2, CoinIndexedVector * regionSparse3, bool noPermute=false); /// does updatecolumn if save==true keeps column for replace column int upColumn ( CoinIndexedVector * regionSparse, CoinIndexedVector * regionSparse2, bool noPermute=false, bool save=false) const; /** Updates one column (BTRAN) from regionSparse2 regionSparse starts as zero and is zero at end Note - if regionSparse2 packed on input - will be packed on output */ virtual int updateColumnTranspose ( CoinIndexedVector * regionSparse, CoinIndexedVector * regionSparse2) const; /// does updateColumnTranspose, the other is a wrapper int upColumnTranspose ( CoinIndexedVector * regionSparse, CoinIndexedVector * regionSparse2) const; //@} /// *** Below this user may not want to know about /**@name various uses of factorization which user may not want to know about (left over from my LP code) */ //@{ /// Get rid of all memory inline void clearArrays() { gutsOfDestructor();} /// Returns array to put basis indices in inline int * indices() const { return reinterpret_cast (elements_+numberRows_*numberRows_);} /// Returns permute in virtual inline int * permute() const { return pivotRow_;} //@} /// The real work of destructor void gutsOfDestructor(); /// The real work of constructor void gutsOfInitialize(); /// The real work of copy void gutsOfCopy(const CoinSimpFactorization &other); /// calls factorization void factorize(int numberOfRows, int numberOfColumns, const int colStarts[], const int indicesRow[], const double elements[]); /// main loop of factorization int mainLoopFactor (FactorPointers &pointers ); /// copies L by rows void copyLbyRows(); /// copies U by columns void copyUbyColumns(); /// finds a pivot element using Markowitz count int findPivot(FactorPointers &pointers, int &r, int &s, bool &ifSlack); /// finds a pivot in a shortest column int findPivotShCol(FactorPointers &pointers, int &r, int &s); /// finds a pivot in the first column available int findPivotSimp(FactorPointers &pointers, int &r, int &s); /// does Gauss elimination void GaussEliminate(FactorPointers &pointers, int &r, int &s); /// finds short row that intersects a given column int findShortRow(const int column, const int length, int &minRow, int &minRowLength, FactorPointers &pointers); /// finds short column that intersects a given row int findShortColumn(const int row, const int length, int &minCol, int &minColLength, FactorPointers &pointers); /// finds maximum absolute value in a row double findMaxInRrow(const int row, FactorPointers &pointers); /// does pivoting void pivoting(const int pivotRow, const int pivotColumn, const double invPivot, FactorPointers &pointers); /// part of pivoting void updateCurrentRow(const int pivotRow, const int row, const double multiplier, FactorPointers &pointers, int &newNonZeros); /// allocates more space for L void increaseLsize(); /// allocates more space for a row of U void increaseRowSize(const int row, const int newSize); /// allocates more space for a column of U void increaseColSize(const int column, const int newSize, const bool b); /// allocates more space for rows of U void enlargeUrow(const int numNewElements); /// allocates more space for columns of U void enlargeUcol(const int numNewElements, const bool b); /// finds a given row in a column int findInRow(const int row, const int column); /// finds a given column in a row int findInColumn(const int column, const int row); /// declares a row inactive void removeRowFromActSet(const int row, FactorPointers &pointers); /// declares a column inactive void removeColumnFromActSet(const int column, FactorPointers &pointers); /// allocates space for U void allocateSpaceForU(); /// allocates several working arrays void allocateSomeArrays(); /// initializes some numbers void initialSomeNumbers(); /// solves L x = b void Lxeqb(double *b) const; /// same as above but with two rhs void Lxeqb2(double *b1, double *b2) const; /// solves U x = b void Uxeqb(double *b, double *sol) const; /// same as above but with two rhs void Uxeqb2(double *b1, double *sol1, double *sol2, double *b2) const; /// solves x L = b void xLeqb(double *b) const; /// solves x U = b void xUeqb(double *b, double *sol) const; /// updates factorization after a Simplex iteration int LUupdate(int newBasicCol); /// creates a new eta vector void newEta(int row, int numNewElements); /// makes a copy of row permutations void copyRowPermutations(); /// solves H x = b, where H is a product of eta matrices void Hxeqb(double *b) const; /// same as above but with two rhs void Hxeqb2(double *b1, double *b2) const; /// solves x H = b void xHeqb(double *b) const; /// does FTRAN void ftran(double *b, double *sol, bool save) const; /// same as above but with two columns void ftran2(double *b1, double *sol1, double *b2, double *sol2) const; /// does BTRAN void btran(double *b, double *sol) const; ///--------------------------------------- //@} protected: /** Returns accuracy status of replaceColumn returns 0=OK, 1=Probably OK, 2=singular */ int checkPivot(double saveFromU, double oldPivot) const; ////////////////// data ////////////////// protected: /**@name data */ //@{ /// work array (should be initialized to zero) double *denseVector_; /// work array double *workArea2_; /// work array double *workArea3_; /// array of labels (should be initialized to zero) int *vecLabels_; /// array of indices int *indVector_; /// auxiliary vector double *auxVector_; /// auxiliary vector int *auxInd_; /// vector to keep for LUupdate double *vecKeep_; /// indices of this vector int *indKeep_; /// number of nonzeros mutable int keepSize_; /// Starts of the rows of L int *LrowStarts_; /// Lengths of the rows of L int *LrowLengths_; /// L by rows double *Lrows_; /// indices in the rows of L int *LrowInd_; /// Size of Lrows_; int LrowSize_; /// Capacity of Lrows_ int LrowCap_; /// Starts of the columns of L int *LcolStarts_; /// Lengths of the columns of L int *LcolLengths_; /// L by columns double *Lcolumns_; /// indices in the columns of L int *LcolInd_; /// numbers of elements in L int LcolSize_; /// maximum capacity of L int LcolCap_; /// Starts of the rows of U int *UrowStarts_; /// Lengths of the rows of U int *UrowLengths_; #ifdef COIN_SIMP_CAPACITY /// Capacities of the rows of U int *UrowCapacities_; #endif /// U by rows double *Urows_; /// Indices in the rows of U int *UrowInd_; /// maximum capacity of Urows int UrowMaxCap_; /// number of used places in Urows int UrowEnd_; /// first row in U int firstRowInU_; /// last row in U int lastRowInU_; /// previous row in U int *prevRowInU_; /// next row in U int *nextRowInU_; /// Starts of the columns of U int *UcolStarts_; /// Lengths of the columns of U int *UcolLengths_; #ifdef COIN_SIMP_CAPACITY /// Capacities of the columns of U int *UcolCapacities_; #endif /// U by columns double *Ucolumns_; /// Indices in the columns of U int *UcolInd_; /// previous column in U int *prevColInU_; /// next column in U int *nextColInU_; /// first column in U int firstColInU_; /// last column in U int lastColInU_; /// maximum capacity of Ucolumns_ int UcolMaxCap_; /// last used position in Ucolumns_ int UcolEnd_; /// indicator of slack variables int *colSlack_; /// inverse values of the elements of diagonal of U double *invOfPivots_; /// permutation of columns int *colOfU_; /// position of column after permutation int *colPosition_; /// permutations of rows int *rowOfU_; /// position of row after permutation int *rowPosition_; /// permutations of rows during LUupdate int *secRowOfU_; /// position of row after permutation during LUupdate int *secRowPosition_; /// position of Eta vector int *EtaPosition_; /// Starts of eta vectors int *EtaStarts_; /// Lengths of eta vectors int *EtaLengths_; /// columns of eta vectors int *EtaInd_; /// elements of eta vectors double *Eta_; /// number of elements in Eta_ int EtaSize_; /// last eta row int lastEtaRow_; /// maximum number of eta vectors int maxEtaRows_; /// Capacity of Eta_ int EtaMaxCap_; /// minimum storage increase int minIncrease_; /// maximum size for the diagonal of U after update double updateTol_; /// do Shul heuristic bool doSuhlHeuristic_; /// maximum of U double maxU_; /// bound on the growth rate double maxGrowth_; /// maximum of A double maxA_; /// maximum number of candidates for pivot int pivotCandLimit_; /// number of slacks in basis int numberSlacks_; /// number of slacks in irst basis int firstNumberSlacks_; //@} }; #endif CoinUtils-2.9.10/CoinUtils/src/CoinMpsIO.hpp0000644000076600007660000007644712227405531017226 0ustar coincoin/* $Id: CoinMpsIO.hpp 1643 2013-10-16 03:43:21Z 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 CoinMpsIO_H #define CoinMpsIO_H #if defined(_MSC_VER) // Turn off compiler warning about long names # pragma warning(disable:4786) #endif #include #include #include "CoinUtilsConfig.h" #include "CoinPackedMatrix.hpp" #include "CoinMessageHandler.hpp" #include "CoinFileIO.hpp" class CoinModel; /// The following lengths are in decreasing order (for 64 bit etc) /// Large enough to contain element index /// This is already defined as CoinBigIndex /// Large enough to contain column index typedef int COINColumnIndex; /// Large enough to contain row index (or basis) typedef int COINRowIndex; // We are allowing free format - but there is a limit! // User can override by using CXXFLAGS += -DCOIN_MAX_FIELD_LENGTH=nnn #ifndef COIN_MAX_FIELD_LENGTH #define COIN_MAX_FIELD_LENGTH 160 #endif #define MAX_CARD_LENGTH 5*COIN_MAX_FIELD_LENGTH+80 enum COINSectionType { COIN_NO_SECTION, COIN_NAME_SECTION, COIN_ROW_SECTION, COIN_COLUMN_SECTION, COIN_RHS_SECTION, COIN_RANGES_SECTION, COIN_BOUNDS_SECTION, COIN_ENDATA_SECTION, COIN_EOF_SECTION, COIN_QUADRATIC_SECTION, COIN_CONIC_SECTION,COIN_QUAD_SECTION,COIN_SOS_SECTION, COIN_BASIS_SECTION,COIN_UNKNOWN_SECTION }; enum COINMpsType { COIN_N_ROW, COIN_E_ROW, COIN_L_ROW, COIN_G_ROW, COIN_BLANK_COLUMN, COIN_S1_COLUMN, COIN_S2_COLUMN, COIN_S3_COLUMN, COIN_INTORG, COIN_INTEND, COIN_SOSEND, COIN_UNSET_BOUND, COIN_UP_BOUND, COIN_FX_BOUND, COIN_LO_BOUND, COIN_FR_BOUND, COIN_MI_BOUND, COIN_PL_BOUND, COIN_BV_BOUND, COIN_UI_BOUND, COIN_LI_BOUND, COIN_BOTH_BOUNDS_SET, COIN_SC_BOUND, COIN_S1_BOUND, COIN_S2_BOUND, COIN_BS_BASIS, COIN_XL_BASIS, COIN_XU_BASIS, COIN_LL_BASIS, COIN_UL_BASIS, COIN_UNKNOWN_MPS_TYPE }; class CoinMpsIO; /// Very simple code for reading MPS data class CoinMpsCardReader { public: /**@name Constructor and destructor */ //@{ /// Constructor expects file to be open /// This one takes gzFile if fp null CoinMpsCardReader ( CoinFileInput *input, CoinMpsIO * reader ); /// Destructor ~CoinMpsCardReader ( ); //@} /**@name card stuff */ //@{ /// Read to next section COINSectionType readToNextSection ( ); /// Gets next field and returns section type e.g. COIN_COLUMN_SECTION COINSectionType nextField ( ); /** Gets next field for .gms file and returns type. -1 - EOF 0 - what we expected (and processed so pointer moves past) 1 - not what we expected leading blanks always ignored input types 0 - anything - stops on non blank card 1 - name (in columnname) 2 - value 3 - value name pair 4 - equation type 5 - ; */ int nextGmsField ( int expectedType ); /// Returns current section type inline COINSectionType whichSection ( ) const { return section_; } /// Sets current section type inline void setWhichSection(COINSectionType section ) { section_=section; } /// Sees if free format. inline bool freeFormat() const { return freeFormat_;} /// Sets whether free format. Mainly for blank RHS etc inline void setFreeFormat(bool yesNo) { freeFormat_=yesNo;} /// Only for first field on card otherwise BLANK_COLUMN /// e.g. COIN_E_ROW inline COINMpsType mpsType ( ) const { return mpsType_; } /// Reads and cleans card - taking out trailing blanks - return 1 if EOF int cleanCard(); /// Returns row name of current field inline const char *rowName ( ) const { return rowName_; } /// Returns column name of current field inline const char *columnName ( ) const { return columnName_; } /// Returns value in current field inline double value ( ) const { return value_; } /// Returns value as string in current field inline const char *valueString ( ) const { return valueString_; } /// Whole card (for printing) inline const char *card ( ) const { return card_; } /// Whole card - so we look at it (not const so nextBlankOr will work for gms reader) inline char *mutableCard ( ) { return card_; } /// set position (again so gms reader will work) inline void setPosition(char * position) { position_=position;} /// get position (again so gms reader will work) inline char * getPosition() const { return position_;} /// Returns card number inline CoinBigIndex cardNumber ( ) const { return cardNumber_; } /// Returns file input inline CoinFileInput * fileInput ( ) const { return input_; } /// Sets whether strings allowed inline void setStringsAllowed() { stringsAllowed_=true;} //@} ////////////////// data ////////////////// protected: /**@name data */ //@{ /// Current value double value_; /// Current card image char card_[MAX_CARD_LENGTH]; /// Current position within card image char *position_; /// End of card char *eol_; /// Current COINMpsType COINMpsType mpsType_; /// Current row name char rowName_[COIN_MAX_FIELD_LENGTH]; /// Current column name char columnName_[COIN_MAX_FIELD_LENGTH]; /// File input CoinFileInput *input_; /// Which section we think we are in COINSectionType section_; /// Card number CoinBigIndex cardNumber_; /// Whether free format. Just for blank RHS etc bool freeFormat_; /// Whether IEEE - 0 no, 1 INTEL, 2 not INTEL int ieeeFormat_; /// If all names <= 8 characters then allow embedded blanks bool eightChar_; /// MpsIO CoinMpsIO * reader_; /// Message handler CoinMessageHandler * handler_; /// Messages CoinMessages messages_; /// Current element as characters (only if strings allowed) char valueString_[COIN_MAX_FIELD_LENGTH]; /// Whether strings allowed bool stringsAllowed_; //@} public: /**@name methods */ //@{ /// type - 0 normal, 1 INTEL IEEE, 2 other IEEE double osi_strtod(char * ptr, char ** output, int type); /// remove blanks static void strcpyAndCompress ( char *to, const char *from ); /// static char * nextBlankOr ( char *image ); /// For strings double osi_strtod(char * ptr, char ** output); //@} }; //############################################################################# #ifdef USE_SBB class SbbObject; class SbbModel; #endif /// Very simple class for containing data on set class CoinSet { public: /**@name Constructor and destructor */ //@{ /// Default constructor CoinSet ( ); /// Constructor CoinSet ( int numberEntries, const int * which); /// Copy constructor CoinSet (const CoinSet &); /// Assignment operator CoinSet & operator=(const CoinSet& rhs); /// Destructor virtual ~CoinSet ( ); //@} /**@name gets */ //@{ /// Returns number of entries inline int numberEntries ( ) const { return numberEntries_; } /// Returns type of set - 1 =SOS1, 2 =SOS2 inline int setType ( ) const { return setType_; } /// Returns list of variables inline const int * which ( ) const { return which_; } /// Returns weights inline const double * weights ( ) const { return weights_; } //@} #ifdef USE_SBB /**@name Use in sbb */ //@{ /// returns an object of type SbbObject virtual SbbObject * sbbObject(SbbModel * model) const { return NULL;} //@} #endif ////////////////// data ////////////////// protected: /**@name data */ //@{ /// Number of entries int numberEntries_; /// type of set int setType_; /// Which variables are in set int * which_; /// Weights double * weights_; //@} }; //############################################################################# /// Very simple class for containing SOS set class CoinSosSet : public CoinSet{ public: /**@name Constructor and destructor */ //@{ /// Constructor CoinSosSet ( int numberEntries, const int * which, const double * weights, int type); /// Destructor virtual ~CoinSosSet ( ); //@} #ifdef USE_SBB /**@name Use in sbb */ //@{ /// returns an object of type SbbObject virtual SbbObject * sbbObject(SbbModel * model) const ; //@} #endif ////////////////// data ////////////////// protected: /**@name data */ //@{ //@} }; //############################################################################# /** MPS IO Interface This class can be used to read in mps files without a solver. After reading the file, the CoinMpsIO object contains all relevant data, which may be more than a particular OsiSolverInterface allows for. Items may be deleted to allow for flexibility of data storage. The implementation makes the CoinMpsIO object look very like a dummy solver, as the same conventions are used. */ class CoinMpsIO { friend void CoinMpsIOUnitTest(const std::string & mpsDir); public: /** @name Methods to retrieve problem information These methods return information about the problem held by the CoinMpsIO object. Querying an object 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 always valid */ //@{ /// Get number of columns int getNumCols() const; /// Get number of rows int getNumRows() const; /// Get number of nonzero elements int getNumElements() const; /// Get pointer to array[getNumCols()] of column lower bounds const double * getColLower() const; /// Get pointer to array[getNumCols()] of column upper bounds const double * getColUpper() const; /** Get pointer to array[getNumRows()] of constraint senses.

  • 'L': <= constraint
  • 'E': = constraint
  • 'G': >= constraint
  • 'R': ranged constraint
  • 'N': free constraint
*/ const char * getRowSense() const; /** Get pointer to array[getNumRows()] of constraint right-hand sides. Given constraints with upper (rowupper) and/or lower (rowlower) bounds, the constraint right-hand side (rhs) is set as
  • 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
*/ const double * getRightHandSide() const; /** Get pointer to array[getNumRows()] of row ranges. Given constraints with upper (rowupper) and/or lower (rowlower) bounds, the constraint range (rowrange) is set as
  • if rowsense()[i] == 'R' then rowrange()[i] == rowupper()[i] - rowlower()[i]
  • if rowsense()[i] != 'R' then rowrange()[i] is 0.0
Put another way, only range constraints have a nontrivial value for rowrange. */ const double * getRowRange() const; /// Get pointer to array[getNumRows()] of row lower bounds const double * getRowLower() const; /// Get pointer to array[getNumRows()] of row upper bounds const double * getRowUpper() const; /// Get pointer to array[getNumCols()] of objective function coefficients const double * getObjCoefficients() const; /// Get pointer to row-wise copy of the coefficient matrix const CoinPackedMatrix * getMatrixByRow() const; /// Get pointer to column-wise copy of the coefficient matrix const CoinPackedMatrix * getMatrixByCol() const; /// Return true if column is a continuous variable bool isContinuous(int colNumber) const; /** Return true if a column is an integer variable Note: This function returns true if the the column is a binary or general integer variable. */ bool isInteger(int columnNumber) const; /** Returns array[getNumCols()] specifying if a variable is integer. At present, simply coded as zero (continuous) and non-zero (integer) May be extended at a later date. */ const char * integerColumns() const; /** Returns the row name for the specified index. Returns 0 if the index is out of range. */ const char * rowName(int index) const; /** Returns the column name for the specified index. Returns 0 if the index is out of range. */ const char * columnName(int index) const; /** Returns the index for the specified row name Returns -1 if the name is not found. Returns numberRows for the objective row and > numberRows for dropped free rows. */ int rowIndex(const char * name) const; /** Returns the index for the specified column name Returns -1 if the name is not found. */ int columnIndex(const char * name) const; /** Returns the (constant) objective offset This is the RHS entry for the objective row */ double objectiveOffset() const; /// Set objective offset inline void setObjectiveOffset(double value) { objectiveOffset_=value;} /// Return the problem name const char * getProblemName() const; /// Return the objective name const char * getObjectiveName() const; /// Return the RHS vector name const char * getRhsName() const; /// Return the range vector name const char * getRangeName() const; /// Return the bound vector name const char * getBoundName() const; /// Number of string elements inline int numberStringElements() const { return numberStringElements_;} /// String element inline const char * stringElement(int i) const { return stringElements_[i];} //@} /** @name Methods to set problem information Methods to load a problem into the CoinMpsIO object. */ //@{ /// Set the problem data void setMpsData(const CoinPackedMatrix& m, const double infinity, const double* collb, const double* colub, const double* obj, const char* integrality, const double* rowlb, const double* rowub, char const * const * const colnames, char const * const * const rownames); void setMpsData(const CoinPackedMatrix& m, const double infinity, const double* collb, const double* colub, const double* obj, const char* integrality, const double* rowlb, const double* rowub, const std::vector & colnames, const std::vector & rownames); void setMpsData(const CoinPackedMatrix& m, const double infinity, const double* collb, const double* colub, const double* obj, const char* integrality, const char* rowsen, const double* rowrhs, const double* rowrng, char const * const * const colnames, char const * const * const rownames); void setMpsData(const CoinPackedMatrix& m, const double infinity, const double* collb, const double* colub, const double* obj, const char* integrality, const char* rowsen, const double* rowrhs, const double* rowrng, const std::vector & colnames, const std::vector & rownames); /** Pass in an array[getNumCols()] specifying if a variable is integer. At present, simply coded as zero (continuous) and non-zero (integer) May be extended at a later date. */ void copyInIntegerInformation(const char * integerInformation); /// Set problem name void setProblemName(const char *name) ; /// Set objective name void setObjectiveName(const char *name) ; //@} /** @name Parameter set/get methods Methods to set and retrieve MPS IO parameters. */ //@{ /// Set infinity void setInfinity(double value); /// Get infinity double getInfinity() const; /// Set default upper bound for integer variables void setDefaultBound(int value); /// Get default upper bound for integer variables int getDefaultBound() const; /// Whether to allow string elements inline int allowStringElements() const { return allowStringElements_;} /// Whether to allow string elements (0 no, 1 yes, 2 yes and try flip) inline void setAllowStringElements(int yesNo) { allowStringElements_ = yesNo;} /** Small element value - elements less than this set to zero on input default is 1.0e-14 */ inline double getSmallElementValue() const { return smallElement_;} inline void setSmallElementValue(double value) { smallElement_=value;} //@} /** @name Methods for problem input and output Methods to read and write MPS format problem files. The read and write methods return the number of errors that occurred during the IO operation, or -1 if no file is opened. \note If the CoinMpsIO class was compiled with support for libz then readMps will automatically try to append .gz to the file name and open it as a compressed file if the specified file name cannot be opened. (Automatic append of the .bz2 suffix when libbz is used is on the TODO list.) \todo Allow for file pointers and positioning */ //@{ /// Set the current file name for the CoinMpsIO object void setFileName(const char * name); /// Get the current file name for the CoinMpsIO object const char * getFileName() const; /** Read a problem in MPS format from the given filename. Use "stdin" or "-" to read from stdin. */ int readMps(const char *filename, const char *extension = "mps"); /** Read a problem in MPS format from the given filename. Use "stdin" or "-" to read from stdin. But do sets as well */ int readMps(const char *filename, const char *extension , int & numberSets, CoinSet **& sets); /** Read a problem in MPS format from a previously opened file More precisely, read a problem using a CoinMpsCardReader object already associated with this CoinMpsIO object. \todo Provide an interface that will allow a client to associate a CoinMpsCardReader object with a CoinMpsIO object by setting the cardReader_ field. */ int readMps(); /// and int readMps(int & numberSets, CoinSet **& sets); /** Read a basis in MPS format from the given filename. If VALUES on NAME card and solution not NULL fills in solution status values as for CoinWarmStartBasis (but one per char) -1 file error, 0 normal, 1 has solution values Use "stdin" or "-" to read from stdin. If sizes of names incorrect - read without names */ int readBasis(const char *filename, const char *extension , double * solution, unsigned char *rowStatus, unsigned char *columnStatus, const std::vector & colnames,int numberColumns, const std::vector & rownames, int numberRows); /** Read a problem in GAMS format from the given filename. Use "stdin" or "-" to read from stdin. if convertObjective then massages objective column */ int readGms(const char *filename, const char *extension = "gms",bool convertObjective=false); /** Read a problem in GAMS format from the given filename. Use "stdin" or "-" to read from stdin. But do sets as well */ int readGms(const char *filename, const char *extension , int & numberSets, CoinSet **& sets); /** Read a problem in GAMS format from a previously opened file More precisely, read a problem using a CoinMpsCardReader object already associated with this CoinMpsIO object. */ // Not for now int readGms(); /// and int readGms(int & numberSets, CoinSet **& sets); /** Read a problem in GMPL (subset of AMPL) format from the given filenames. */ int readGMPL(const char *modelName, const char * dataName=NULL, bool keepNames=false); /** Write the problem in MPS format to a file with the given filename. \param compression can be set to three values to indicate what kind of file should be written
  • 0: plain text (default)
  • 1: gzip compressed (.gz is appended to \c filename)
  • 2: bzip2 compressed (.bz2 is appended to \c filename) (TODO)
If the library was not compiled with the requested compression then writeMps falls back to writing a plain text file. \param formatType specifies the precision to used for values in the MPS file
  • 0: normal precision (default)
  • 1: extra accuracy
  • 2: IEEE hex
\param numberAcross specifies whether 1 or 2 (default) values should be specified on every data line in the MPS file. \param quadratic specifies quadratic objective to be output */ int writeMps(const char *filename, int compression = 0, int formatType = 0, int numberAcross = 2, CoinPackedMatrix * quadratic = NULL, int numberSOS=0,const CoinSet * setInfo=NULL) const; /// Return card reader object so can see what last card was e.g. QUADOBJ inline const CoinMpsCardReader * reader() const { return cardReader_;} /** Read in a quadratic objective from the given filename. If filename is NULL (or the same as the currently open file) then reading continues from the current file. If not, the file is closed and the specified file is opened. Code should be added to general MPS reader to read this if QSECTION Data is assumed to be Q and objective is c + 1/2 xT Q x No assumption is made for symmetry, positive definite, etc. No check is made for duplicates or non-triangular if checkSymmetry==0. If 1 checks lower triangular (so off diagonal should be 2*Q) if 2 makes lower triangular and assumes full Q (but adds off diagonals) Arrays should be deleted by delete [] Returns number of errors:
  • -1: bad file
  • -2: no Quadratic section
  • -3: an empty section
  • +n: then matching errors etc (symmetry forced)
  • -4: no matching errors but fails triangular test (triangularity forced)
columnStart is numberColumns+1 long, others numberNonZeros */ int readQuadraticMps(const char * filename, int * &columnStart, int * &column, double * &elements, int checkSymmetry); /** Read in a list of cones from the given filename. If filename is NULL (or the same as the currently open file) then reading continues from the current file. If not, the file is closed and the specified file is opened. Code should be added to general MPS reader to read this if CSECTION No checking is done that in unique cone Arrays should be deleted by delete [] Returns number of errors, -1 bad file, -2 no conic section, -3 empty section columnStart is numberCones+1 long, other number of columns in matrix coneType is 1 for QUAD, 2 for RQUAD (numberCones long) */ int readConicMps(const char * filename, int * &columnStart, int * &column, int * &coneType, int & numberCones); /// Set whether to move objective from matrix inline void setConvertObjective(bool trueFalse) { convertObjective_=trueFalse;} /// copies in strings from a CoinModel - returns number int copyStringElements(const CoinModel * model); //@} /** @name Constructors and destructors */ //@{ /// Default Constructor CoinMpsIO(); /// Copy constructor CoinMpsIO (const CoinMpsIO &); /// Assignment operator CoinMpsIO & operator=(const CoinMpsIO& rhs); /// Destructor ~CoinMpsIO (); //@} /**@name Message handling */ //@{ /** Pass in Message handler Supply a custom message handler. It will not be destroyed when the CoinMpsIO object is destroyed. */ void passInMessageHandler(CoinMessageHandler * handler); /// Set the language for messages. void newLanguage(CoinMessages::Language language); /// Set the language for messages. inline void setLanguage(CoinMessages::Language language) {newLanguage(language);} /// Return the message handler inline CoinMessageHandler * messageHandler() const {return handler_;} /// Return the messages inline CoinMessages messages() {return messages_;} /// Return the messages pointer inline CoinMessages * messagesPointer() {return & messages_;} //@} /**@name Methods to release storage These methods allow the client to reduce the storage used by the CoinMpsIO object be selectively releasing unneeded problem information. */ //@{ /** Release all information which can be re-calculated. E.g., row sense, copies of rows, hash tables for names. */ void releaseRedundantInformation(); /// Release all row information (lower, upper) void releaseRowInformation(); /// Release all column information (lower, upper, objective) void releaseColumnInformation(); /// Release integer information void releaseIntegerInformation(); /// Release row names void releaseRowNames(); /// Release column names void releaseColumnNames(); /// Release matrix information void releaseMatrixInformation(); //@} protected: /**@name Miscellaneous helper functions */ //@{ /// Utility method used several times to implement public methods void setMpsDataWithoutRowAndColNames( const CoinPackedMatrix& m, const double infinity, const double* collb, const double* colub, const double* obj, const char* integrality, const double* rowlb, const double* rowub); void setMpsDataColAndRowNames( const std::vector & colnames, const std::vector & rownames); void setMpsDataColAndRowNames( char const * const * const colnames, char const * const * const rownames); /// Does the heavy lifting for destruct and assignment. void gutsOfDestructor(); /// Does the heavy lifting for copy and assignment. void gutsOfCopy(const CoinMpsIO &); /// Clears problem data from the CoinMpsIO object. void freeAll(); /** A quick inlined function to convert from lb/ub style constraint definition to 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 sense/rhs/range stryle constraint definition to lb/ub style */ inline void convertSenseToBound(const char sense, const double right, const double range, double& lower, double& upper) const; /** Deal with a filename As the name says. Returns +1 if the file name is new, 0 if it's the same as before (i.e., matches fileName_), and -1 if there's an error and the file can't be opened. Handles automatic append of .gz suffix when compiled with libz. \todo Add automatic append of .bz2 suffix when compiled with libbz. */ int dealWithFileName(const char * filename, const char * extension, CoinFileInput * &input); /** Add string to list iRow==numberRows is objective, nr+1 is lo, nr+2 is up iColumn==nc is rhs (can't cope with ranges at present) */ void addString(int iRow,int iColumn, const char * value); /// Decode string void decodeString(int iString, int & iRow, int & iColumn, const char * & value) const; //@} // for hashing typedef struct { int index, next; } CoinHashLink; /**@name Hash table methods */ //@{ /// Creates hash list for names (section = 0 for rows, 1 columns) void startHash ( char **names, const int number , int section ); /// This one does it when names are already in void startHash ( int section ) const; /// Deletes hash storage void stopHash ( int section ); /// Finds match using hash, -1 not found int findHash ( const char *name , int section ) const; //@} /**@name Cached problem information */ //@{ /// Problem name char * problemName_; /// Objective row name char * objectiveName_; /// Right-hand side vector name char * rhsName_; /// Range vector name char * rangeName_; /// Bounds vector name char * boundName_; /// Number of rows int numberRows_; /// Number of columns int numberColumns_; /// Number of coefficients CoinBigIndex numberElements_; /// 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 variable upper bounds for range constraints (undefined for non-range rows) */ mutable double *rowrange_; /// Pointer to row-wise copy of problem matrix coefficients. mutable CoinPackedMatrix *matrixByRow_; /// Pointer to column-wise copy of problem matrix coefficients. CoinPackedMatrix *matrixByColumn_; /// Pointer to dense vector of row lower bounds double * rowlower_; /// Pointer to dense vector of row upper bounds double * rowupper_; /// Pointer to dense vector of column lower bounds double * collower_; /// Pointer to dense vector of column upper bounds double * colupper_; /// Pointer to dense vector of objective coefficients double * objective_; /// Constant offset for objective value (i.e., RHS value for OBJ row) double objectiveOffset_; /** Pointer to dense vector specifying if a variable is continuous (0) or integer (1). */ char * integerType_; /** Row and column names Linked to hash table sections (0 - row names, 1 column names) */ char **names_[2]; //@} /** @name Hash tables */ //@{ /// Current file name char * fileName_; /// Number of entries in a hash table section int numberHash_[2]; /// Hash tables (two sections, 0 - row names, 1 - column names) mutable CoinHashLink *hash_[2]; //@} /** @name CoinMpsIO object parameters */ //@{ /// Upper bound when no bounds for integers int defaultBound_; /// Value to use for infinity double infinity_; /// Small element value double smallElement_; /// Message handler CoinMessageHandler * handler_; /** Flag to say if the message handler is the default handler. If true, the handler will be destroyed when the CoinMpsIO object is destroyed; if false, it will not be destroyed. */ bool defaultHandler_; /// Messages CoinMessages messages_; /// Card reader CoinMpsCardReader * cardReader_; /// If .gms file should it be massaged to move objective bool convertObjective_; /// Whether to allow string elements int allowStringElements_; /// Maximum number of string elements int maximumStringElements_; /// Number of string elements int numberStringElements_; /// String elements char ** stringElements_; //@} }; //############################################################################# /** A function that tests the methods in the CoinMpsIO class. The only reason for it not to be a member method is that this way it doesn't have to be compiled into the library. And that's a gain, because the library should be compiled with optimization on, but this method should be compiled with debugging. Also, if this method is compiled with optimization, the compilation takes 10-15 minutes and the machine pages (has 256M core memory!)... */ void CoinMpsIOUnitTest(const std::string & mpsDir); // Function to return number in most efficient way // section is 0 for columns, 1 for rhs,ranges and 2 for bounds /* formatType is 0 - normal and 8 character names 1 - extra accuracy 2 - IEEE hex - INTEL 3 - IEEE hex - not INTEL */ void CoinConvertDouble(int section, int formatType, double value, char outputValue[24]); #endif CoinUtils-2.9.10/CoinUtils/src/CoinSearchTree.hpp0000644000076600007660000003354512131313741020247 0ustar coincoin/* $Id: CoinSearchTree.hpp 1590 2013-04-10 16:48:33Z stefan $ */ // 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 CoinSearchTree_H #define CoinSearchTree_H #include #include #include #include #include "CoinFinite.hpp" #include "CoinHelperFunctions.hpp" // #define DEBUG_PRINT //############################################################################# class BitVector128 { friend bool operator<(const BitVector128& b0, const BitVector128& b1); private: unsigned int bits_[4]; public: BitVector128(); BitVector128(unsigned int bits[4]); ~BitVector128() {} void set(unsigned int bits[4]); void setBit(int i); void clearBit(int i); std::string str() const; }; bool operator<(const BitVector128& b0, const BitVector128& b1); //############################################################################# /** A class from which the real tree nodes should be derived from. Some of the data that undoubtedly exist in the real tree node is replicated here for fast access. This class is used in the various comparison functions. */ class CoinTreeNode { protected: CoinTreeNode() : depth_(-1), fractionality_(-1), quality_(-COIN_DBL_MAX), true_lower_bound_(-COIN_DBL_MAX), preferred_() {} CoinTreeNode(int d, int f = -1, double q = -COIN_DBL_MAX, double tlb = -COIN_DBL_MAX, BitVector128 p = BitVector128()) : depth_(d), fractionality_(f), quality_(q), true_lower_bound_(tlb), preferred_(p) {} CoinTreeNode(const CoinTreeNode& x) : depth_(x.depth_), fractionality_(x.fractionality_), quality_(x.quality_), true_lower_bound_(x.true_lower_bound_), preferred_(x.preferred_) {} CoinTreeNode& operator=(const CoinTreeNode& x) { if (this != &x) { depth_ = x.depth_; fractionality_ = x.fractionality_; quality_ = x.quality_; true_lower_bound_ = x.true_lower_bound_; preferred_ = x.preferred_; } return *this; } private: /// The depth of the node in the tree int depth_; /** A measure of fractionality, e.g., the number of unsatisfied integrality requirements */ int fractionality_; /** Some quality for the node. For normal branch-and-cut problems the LP relaxation value will do just fine. It is probably an OK approximation even if column generation is done. */ double quality_; /** A true lower bound on the node. May be -infinity. For normal branch-and-cut problems the LP relaxation value is OK. It is different when column generation is done. */ double true_lower_bound_; /** */ BitVector128 preferred_; public: virtual ~CoinTreeNode() {} inline int getDepth() const { return depth_; } inline int getFractionality() const { return fractionality_; } inline double getQuality() const { return quality_; } inline double getTrueLB() const { return true_lower_bound_; } inline BitVector128 getPreferred() const { return preferred_; } inline void setDepth(int d) { depth_ = d; } inline void setFractionality(int f) { fractionality_ = f; } inline void setQuality(double q) { quality_ = q; } inline void setTrueLB(double tlb) { true_lower_bound_ = tlb; } inline void setPreferred(BitVector128 p) { preferred_ = p; } }; //============================================================================== class CoinTreeSiblings { private: CoinTreeSiblings(); CoinTreeSiblings& operator=(const CoinTreeSiblings&); private: int current_; int numSiblings_; CoinTreeNode** siblings_; public: CoinTreeSiblings(const int n, CoinTreeNode** nodes) : current_(0), numSiblings_(n), siblings_(new CoinTreeNode*[n]) { CoinDisjointCopyN(nodes, n, siblings_); } CoinTreeSiblings(const CoinTreeSiblings& s) : current_(s.current_), numSiblings_(s.numSiblings_), siblings_(new CoinTreeNode*[s.numSiblings_]) { CoinDisjointCopyN(s.siblings_, s.numSiblings_, siblings_); } ~CoinTreeSiblings() { delete[] siblings_; } inline CoinTreeNode* currentNode() const { return siblings_[current_]; } /** returns false if cannot be advanced */ inline bool advanceNode() { return ++current_ != numSiblings_; } inline int toProcess() const { return numSiblings_ - current_; } inline int size() const { return numSiblings_; } inline void printPref() const { for (int i = 0; i < numSiblings_; ++i) { std::string pref = siblings_[i]->getPreferred().str(); printf("prefs of sibligs: sibling[%i]: %s\n", i, pref.c_str()); } } }; //############################################################################# /** Function objects to compare search tree nodes. The comparison function must return true if the first argument is "better" than the second one, i.e., it should be processed first. */ /*@{*/ /** Depth First Search. */ struct CoinSearchTreeComparePreferred { static inline const char* name() { return "CoinSearchTreeComparePreferred"; } inline bool operator()(const CoinTreeSiblings* x, const CoinTreeSiblings* y) const { register const CoinTreeNode* xNode = x->currentNode(); register const CoinTreeNode* yNode = y->currentNode(); const BitVector128 xPref = xNode->getPreferred(); const BitVector128 yPref = yNode->getPreferred(); bool retval = true; if (xPref < yPref) { retval = true; } else if (yPref < xPref) { retval = false; } else { retval = xNode->getQuality() < yNode->getQuality(); } #ifdef DEBUG_PRINT printf("Comparing xpref (%s) and ypref (%s) : %s\n", xpref.str().c_str(), ypref.str().c_str(), retval ? "T" : "F"); #endif return retval; } }; //----------------------------------------------------------------------------- /** Depth First Search. */ struct CoinSearchTreeCompareDepth { static inline const char* name() { return "CoinSearchTreeCompareDepth"; } inline bool operator()(const CoinTreeSiblings* x, const CoinTreeSiblings* y) const { #if 1 return x->currentNode()->getDepth() >= y->currentNode()->getDepth(); #else if(x->currentNode()->getDepth() > y->currentNode()->getDepth()) return 1; if(x->currentNode()->getDepth() == y->currentNode()->getDepth() && x->currentNode()->getQuality() <= y->currentNode()->getQuality()) return 1; return 0; #endif } }; //----------------------------------------------------------------------------- /* Breadth First Search */ struct CoinSearchTreeCompareBreadth { static inline const char* name() { return "CoinSearchTreeCompareBreadth"; } inline bool operator()(const CoinTreeSiblings* x, const CoinTreeSiblings* y) const { return x->currentNode()->getDepth() < y->currentNode()->getDepth(); } }; //----------------------------------------------------------------------------- /** Best first search */ struct CoinSearchTreeCompareBest { static inline const char* name() { return "CoinSearchTreeCompareBest"; } inline bool operator()(const CoinTreeSiblings* x, const CoinTreeSiblings* y) const { return x->currentNode()->getQuality() < y->currentNode()->getQuality(); } }; //############################################################################# class CoinSearchTreeBase { private: CoinSearchTreeBase(const CoinSearchTreeBase&); CoinSearchTreeBase& operator=(const CoinSearchTreeBase&); protected: std::vector candidateList_; int numInserted_; int size_; protected: CoinSearchTreeBase() : candidateList_(), numInserted_(0), size_(0) {} virtual void realpop() = 0; virtual void realpush(CoinTreeSiblings* s) = 0; virtual void fixTop() = 0; public: virtual ~CoinSearchTreeBase() {} virtual const char* compName() const = 0; inline const std::vector& getCandidates() const { return candidateList_; } inline bool empty() const { return candidateList_.empty(); } inline int size() const { return size_; } inline int numInserted() const { return numInserted_; } inline CoinTreeNode* top() const { if (size_ == 0) return NULL; #ifdef DEBUG_PRINT char output[44]; output[43] = 0; candidateList_.front()->currentNode()->getPreferred().print(output); printf("top's pref: %s\n", output); #endif return candidateList_.front()->currentNode(); } /** pop will advance the \c next pointer among the siblings on the top and then moves the top to its correct position. #realpop is the method that actually removes the element from the heap */ inline void pop() { CoinTreeSiblings* s = candidateList_.front(); if (!s->advanceNode()) { realpop(); delete s; } else { fixTop(); } --size_; } inline void push(int numNodes, CoinTreeNode** nodes, const bool incrInserted = true) { CoinTreeSiblings* s = new CoinTreeSiblings(numNodes, nodes); realpush(s); if (incrInserted) { numInserted_ += numNodes; } size_ += numNodes; } inline void push(const CoinTreeSiblings& sib, const bool incrInserted = true) { CoinTreeSiblings* s = new CoinTreeSiblings(sib); #ifdef DEBUG_PRINT s->printPref(); #endif realpush(s); if (incrInserted) { numInserted_ += sib.toProcess(); } size_ += sib.size(); } }; //############################################################################# // #define CAN_TRUST_STL_HEAP #ifdef CAN_TRUST_STL_HEAP template class CoinSearchTree : public CoinSearchTreeBase { private: Comp comp_; protected: virtual void realpop() { candidateList_.pop_back(); } virtual void fixTop() { CoinTreeSiblings* s = top(); realpop(); push(s, false); } virtual void realpush(CoinTreeSiblings* s) { nodes_.push_back(s); std::push_heap(candidateList_.begin(), candidateList_.end(), comp_); } public: CoinSearchTree() : CoinSearchTreeBase(), comp_() {} CoinSearchTree(const CoinSearchTreeBase& t) : CoinSearchTreeBase(), comp_() { candidateList_ = t.getCandidates(); std::make_heap(candidateList_.begin(), candidateList_.end(), comp_); numInserted_ = t.numInserted_; size_ = t.size_; } ~CoinSearchTree() {} const char* compName() const { return Comp::name(); } }; #else template class CoinSearchTree : public CoinSearchTreeBase { private: Comp comp_; protected: virtual void realpop() { candidateList_[0] = candidateList_.back(); candidateList_.pop_back(); fixTop(); } /** After changing data in the top node, fix the heap */ virtual void fixTop() { const size_t size = candidateList_.size(); if (size > 1) { CoinTreeSiblings** candidates = &candidateList_[0]; CoinTreeSiblings* s = candidates[0]; --candidates; size_t pos = 1; size_t ch; for (ch = 2; ch < size; pos = ch, ch *= 2) { if (comp_(candidates[ch+1], candidates[ch])) ++ch; if (comp_(s, candidates[ch])) break; candidates[pos] = candidates[ch]; } if (ch == size) { if (comp_(candidates[ch], s)) { candidates[pos] = candidates[ch]; pos = ch; } } candidates[pos] = s; } } virtual void realpush(CoinTreeSiblings* s) { candidateList_.push_back(s); CoinTreeSiblings** candidates = &candidateList_[0]; --candidates; size_t pos = candidateList_.size(); size_t ch; for (ch = pos/2; ch != 0; pos = ch, ch /= 2) { if (comp_(candidates[ch], s)) break; candidates[pos] = candidates[ch]; } candidates[pos] = s; } public: CoinSearchTree() : CoinSearchTreeBase(), comp_() {} CoinSearchTree(const CoinSearchTreeBase& t) : CoinSearchTreeBase(), comp_() { candidateList_ = t.getCandidates(); std::sort(candidateList_.begin(), candidateList_.end(), comp_); numInserted_ = t.numInserted(); size_ = t.size(); } virtual ~CoinSearchTree() {} const char* compName() const { return Comp::name(); } }; #endif //############################################################################# enum CoinNodeAction { CoinAddNodeToCandidates, CoinTestNodeForDiving, CoinDiveIntoNode }; class CoinSearchTreeManager { private: CoinSearchTreeManager(const CoinSearchTreeManager&); CoinSearchTreeManager& operator=(const CoinSearchTreeManager&); private: CoinSearchTreeBase* candidates_; int numSolution; /** Whether there is an upper bound or not. The upper bound may have come as input, not necessarily from a solution */ bool hasUB_; /** variable used to test whether we need to reevaluate search strategy */ bool recentlyReevaluatedSearchStrategy_; public: CoinSearchTreeManager() : candidates_(NULL), numSolution(0), recentlyReevaluatedSearchStrategy_(true) {} virtual ~CoinSearchTreeManager() { delete candidates_; } inline void setTree(CoinSearchTreeBase* t) { delete candidates_; candidates_ = t; } inline CoinSearchTreeBase* getTree() const { return candidates_; } inline bool empty() const { return candidates_->empty(); } inline size_t size() const { return candidates_->size(); } inline size_t numInserted() const { return candidates_->numInserted(); } inline CoinTreeNode* top() const { return candidates_->top(); } inline void pop() { candidates_->pop(); } inline void push(CoinTreeNode* node, const bool incrInserted = true) { candidates_->push(1, &node, incrInserted); } inline void push(const CoinTreeSiblings& s, const bool incrInserted=true) { candidates_->push(s, incrInserted); } inline void push(const int n, CoinTreeNode** nodes, const bool incrInserted = true) { candidates_->push(n, nodes, incrInserted); } inline CoinTreeNode* bestQualityCandidate() const { return candidates_->top(); } inline double bestQuality() const { return candidates_->top()->getQuality(); } void newSolution(double solValue); void reevaluateSearchStrategy(); }; //############################################################################# #endif CoinUtils-2.9.10/CoinUtils/src/CoinWarmStartBasis.hpp0000644000076600007660000003532711670766534021153 0ustar coincoin/* $Id: CoinWarmStartBasis.hpp 1515 2011-12-10 23:38:04Z lou $ */ /*! \legal Copyright (C) 2000 -- 2003, International Business Machines Corporation and others. All Rights Reserved. This code is licensed under the terms of the Eclipse Public License (EPL). */ /*! \file CoinWarmStart.hpp \brief Declaration of the generic simplex (basis-oriented) warm start class. Also contains a basis diff class. */ #ifndef CoinWarmStartBasis_H #define CoinWarmStartBasis_H #include #include "CoinSort.hpp" #include "CoinHelperFunctions.hpp" #include "CoinWarmStart.hpp" //############################################################################# /*! \class CoinWarmStartBasis \brief The default COIN simplex (basis-oriented) warm start class CoinWarmStartBasis provides for a warm start object which contains the status of each variable (structural and artificial). \todo Modify this class so that the number of status entries per byte and bytes per status vector allocation unit are not hardcoded. At the least, collect this into a couple of macros. \todo Consider separate fields for allocated capacity and actual basis size. We could avoid some reallocation, at the price of retaining more space than we need. Perhaps more important, we could do much better sanity checks. */ class CoinWarmStartBasis : public virtual CoinWarmStart { public: /*! \brief Enum for status of variables Matches CoinPrePostsolveMatrix::Status, without superBasic. Most code that converts between CoinPrePostsolveMatrix::Status and CoinWarmStartBasis::Status will break if this correspondence is broken. The status vectors are currently packed using two bits per status code, four codes per byte. The location of the status information for variable \c i is in byte i>>2 and occupies bits 0:1 if i\%4 == 0, bits 2:3 if i\%4 == 1, etc. The non-member functions getStatus(const char*,int) and setStatus(char*,int,CoinWarmStartBasis::Status) are provided to hide details of the packing. */ enum Status { isFree = 0x00, ///< Nonbasic free variable basic = 0x01, ///< Basic variable atUpperBound = 0x02, ///< Nonbasic at upper bound atLowerBound = 0x03 ///< Nonbasic at lower bound }; /** \brief Transfer vector entry for mergeBasis(const CoinWarmStartBasis*,const XferVec*,const XferVec*) */ typedef CoinTriple XferEntry ; /** \brief Transfer vector for mergeBasis(const CoinWarmStartBasis*,const XferVec*,const XferVec*) */ typedef std::vector XferVec ; public: /*! \name Methods to get and set basis information. The status of variables is kept in a pair of arrays, one for structural variables, and one for artificials (aka logicals and slacks). The status is coded using the values of the Status enum. \sa CoinWarmStartBasis::Status for a description of the packing used in the status arrays. */ //@{ /// Return the number of structural variables inline int getNumStructural() const { return numStructural_; } /// Return the number of artificial variables inline int getNumArtificial() const { return numArtificial_; } /** Return the number of basic structurals A fast test for an all-slack basis. */ int numberBasicStructurals() const ; /// Return the status of the specified structural variable. inline Status getStructStatus(int i) const { const int st = (structuralStatus_[i>>2] >> ((i&3)<<1)) & 3; return static_cast(st); } /// Set the status of the specified structural variable. inline void setStructStatus(int i, Status st) { char& st_byte = structuralStatus_[i>>2]; st_byte = static_cast(st_byte & ~(3 << ((i&3)<<1))) ; st_byte = static_cast(st_byte | (st << ((i&3)<<1))) ; } /** Return the status array for the structural variables The status information is stored using the codes defined in the Status enum, 2 bits per variable, packed 4 variables per byte. */ inline char * getStructuralStatus() { return structuralStatus_; } /** \c const overload for \link CoinWarmStartBasis::getStructuralStatus() getStructuralStatus() \endlink */ inline const char * getStructuralStatus() const { return structuralStatus_; } /** As for \link getStructuralStatus() getStructuralStatus \endlink, but returns the status array for the artificial variables. */ inline char * getArtificialStatus() { return artificialStatus_; } /// Return the status of the specified artificial variable. inline Status getArtifStatus(int i) const { const int st = (artificialStatus_[i>>2] >> ((i&3)<<1)) & 3; return static_cast(st); } /// Set the status of the specified artificial variable. inline void setArtifStatus(int i, Status st) { char& st_byte = artificialStatus_[i>>2]; st_byte = static_cast(st_byte & ~(3 << ((i&3)<<1))) ; st_byte = static_cast(st_byte | (st << ((i&3)<<1))) ; } /** \c const overload for \link CoinWarmStartBasis::getArtificialStatus() getArtificialStatus() \endlink */ inline const char * getArtificialStatus() const { return artificialStatus_; } //@} /*! \name Basis `diff' methods */ //@{ /*! \brief Generate a `diff' that can convert the warm start basis passed as a parameter to the warm start basis specified by \c this. The capabilities are limited: the basis passed as a parameter can be no larger than the basis pointed to by \c this. */ virtual CoinWarmStartDiff* generateDiff (const CoinWarmStart *const oldCWS) const ; /*! \brief Apply \p diff to this basis Update this basis by applying \p diff. It's assumed that the allocated capacity of the basis is sufficiently large. */ virtual void applyDiff (const CoinWarmStartDiff *const cwsdDiff) ; //@} /*! \name Methods to modify the warm start object */ //@{ /*! \brief Set basis capacity; existing basis is discarded. After execution of this routine, the warm start object does not describe a valid basis: all structural and artificial variables have status isFree. */ virtual void setSize(int ns, int na) ; /*! \brief Set basis capacity; existing basis is maintained. After execution of this routine, the warm start object describes a valid basis: the status of new structural variables (added columns) is set to nonbasic at lower bound, and the status of new artificial variables (added rows) is set to basic. (The basis can be invalid if new structural variables do not have a finite lower bound.) */ virtual void resize (int newNumberRows, int newNumberColumns); /** \brief Delete a set of rows from the basis \warning This routine assumes that the set of indices to be deleted is sorted in ascending order and contains no duplicates. Use deleteRows() if this is not the case. \warning The resulting basis is guaranteed valid only if all deleted constraints are slack (hence the associated logicals are basic). Removal of a tight constraint with a nonbasic logical implies that some basic variable must be made nonbasic. This correction is left to the client. */ virtual void compressRows (int tgtCnt, const int *tgts) ; /** \brief Delete a set of rows from the basis \warning The resulting basis is guaranteed valid only if all deleted constraints are slack (hence the associated logicals are basic). Removal of a tight constraint with a nonbasic logical implies that some basic variable must be made nonbasic. This correction is left to the client. */ virtual void deleteRows(int rawTgtCnt, const int *rawTgts) ; /** \brief Delete a set of columns from the basis \warning The resulting basis is guaranteed valid only if all deleted variables are nonbasic. Removal of a basic variable implies that some nonbasic variable must be made basic. This correction is left to the client. */ virtual void deleteColumns(int number, const int * which); /** \brief Merge entries from a source basis into this basis. \warning It's the client's responsibility to ensure validity of the merged basis, if that's important to the application. The vector xferCols (xferRows) specifies runs of entries to be taken from the source basis and placed in this basis. Each entry is a CoinTriple, with first specifying the starting source index of a run, second specifying the starting destination index, and third specifying the run length. */ virtual void mergeBasis(const CoinWarmStartBasis *src, const XferVec *xferRows, const XferVec *xferCols) ; //@} /*! \name Constructors, destructors, and related functions */ //@{ /** Default constructor Creates a warm start object representing an empty basis (0 rows, 0 columns). */ CoinWarmStartBasis(); /** Constructs a warm start object with the specified status vectors. The parameters are copied. Consider assignBasisStatus(int,int,char*&,char*&) if the object should assume ownership. \sa CoinWarmStartBasis::Status for a description of the packing used in the status arrays. */ CoinWarmStartBasis(int ns, int na, const char* sStat, const char* aStat) ; /** Copy constructor */ CoinWarmStartBasis(const CoinWarmStartBasis& ws) ; /** `Virtual constructor' */ virtual CoinWarmStart *clone() const { return new CoinWarmStartBasis(*this); } /** Destructor */ virtual ~CoinWarmStartBasis(); /** Assignment */ virtual CoinWarmStartBasis& operator=(const CoinWarmStartBasis& rhs) ; /** Assign the status vectors to be the warm start information. In this method the CoinWarmStartBasis object assumes ownership of the pointers and upon return the argument pointers will be NULL. If copying is desirable, use the \link CoinWarmStartBasis(int,int,const char*,const char*) array constructor \endlink or the \link operator=(const CoinWarmStartBasis&) assignment operator \endlink. \note The pointers passed to this method will be freed using delete[], so they must be created using new[]. */ virtual void assignBasisStatus(int ns, int na, char*& sStat, char*& aStat) ; //@} /*! \name Miscellaneous methods */ //@{ /// Prints in readable format (for debug) virtual void print() const; /// Returns true if full basis (for debug) bool fullBasis() const; /// Returns true if full basis and fixes up (for debug) bool fixFullBasis(); //@} protected: /** \name Protected data members \sa CoinWarmStartBasis::Status for a description of the packing used in the status arrays. */ //@{ /// The number of structural variables int numStructural_; /// The number of artificial variables int numArtificial_; /// The maximum sise (in ints - actually 4*char) (so resize does not need to do new) int maxSize_; /** The status of the structural variables. */ char * structuralStatus_; /** The status of the artificial variables. */ char * artificialStatus_; //@} }; /*! \relates CoinWarmStartBasis \brief Get the status of the specified variable in the given status array. */ inline CoinWarmStartBasis::Status getStatus(const char *array, int i) { const int st = (array[i>>2] >> ((i&3)<<1)) & 3; return static_cast(st); } /*! \relates CoinWarmStartBasis \brief Set the status of the specified variable in the given status array. */ inline void setStatus(char * array, int i, CoinWarmStartBasis::Status st) { char& st_byte = array[i>>2]; st_byte = static_cast(st_byte & ~(3 << ((i&3)<<1))) ; st_byte = static_cast(st_byte | (st << ((i&3)<<1))) ; } /*! \relates CoinWarmStartBasis \brief Generate a print string for a status code */ const char *statusName(CoinWarmStartBasis::Status status) ; /*! \class CoinWarmStartBasisDiff \brief A `diff' between two CoinWarmStartBasis objects This class exists in order to hide from the world the details of calculating and representing a `diff' between two CoinWarmStartBasis objects. For convenience, assignment, cloning, and deletion are visible to the world, and default and copy constructors are made available to derived classes. Knowledge of the rest of this structure, and of generating and applying diffs, is restricted to the friend functions CoinWarmStartBasis::generateDiff() and CoinWarmStartBasis::applyDiff(). The actual data structure is an unsigned int vector, #difference_ which starts with indices of changed and then has values starting after #sze_ \todo This is a pretty generic structure, and vector diff is a pretty generic activity. We should be able to convert this to a template. \todo Using unsigned int as the data type for the diff vectors might help to contain the damage when this code is inevitably compiled for 64 bit architectures. But the notion of int as 4 bytes is hardwired into CoinWarmStartBasis, so changes are definitely required. */ class CoinWarmStartBasisDiff : public virtual CoinWarmStartDiff { public: /*! \brief `Virtual constructor' */ virtual CoinWarmStartDiff *clone() const { CoinWarmStartBasisDiff *cwsbd = new CoinWarmStartBasisDiff(*this) ; return (dynamic_cast(cwsbd)) ; } /*! \brief Assignment */ virtual CoinWarmStartBasisDiff &operator= (const CoinWarmStartBasisDiff &rhs) ; /*! \brief Destructor */ virtual ~CoinWarmStartBasisDiff(); protected: /*! \brief Default constructor This is protected (rather than private) so that derived classes can see it when they make their default constructor protected or private. */ CoinWarmStartBasisDiff () : sze_(0), difference_(0) { } /*! \brief Copy constructor For convenience when copying objects containing CoinWarmStartBasisDiff objects. But consider whether you should be using #clone() to retain polymorphism. This is protected (rather than private) so that derived classes can see it when they make their copy constructor protected or private. */ CoinWarmStartBasisDiff (const CoinWarmStartBasisDiff &cwsbd) ; /*! \brief Standard constructor */ CoinWarmStartBasisDiff (int sze, const unsigned int *const diffNdxs, const unsigned int *const diffVals) ; /*! \brief Constructor when full is smaller than diff!*/ CoinWarmStartBasisDiff (const CoinWarmStartBasis * rhs); private: friend CoinWarmStartDiff* CoinWarmStartBasis::generateDiff(const CoinWarmStart *const oldCWS) const ; friend void CoinWarmStartBasis::applyDiff(const CoinWarmStartDiff *const diff) ; /*! \brief Number of entries (and allocated capacity), in units of \c int. */ int sze_ ; /*! \brief Array of diff indices and diff values */ unsigned int *difference_ ; } ; #endif CoinUtils-2.9.10/CoinUtils/src/CoinLpIO.hpp0000644000076600007660000006467012230207371017031 0ustar coincoin/* $Id: CoinLpIO.hpp 1652 2013-10-18 10:35:37Z stefan $ */ // Last edit: 11/5/08 // // Name: CoinLpIO.hpp; Support for Lp files // Author: Francois Margot // Tepper School of Business // Carnegie Mellon University, Pittsburgh, PA 15213 // email: fmargot@andrew.cmu.edu // Date: 12/28/03 //----------------------------------------------------------------------------- // Copyright (C) 2003, Francois Margot, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinLpIO_H #define CoinLpIO_H #include #include "CoinPackedMatrix.hpp" #include "CoinMessage.hpp" typedef int COINColumnIndex; /** Class to read and write Lp files Lp file format: / this is a comment
\ this too
Min
obj: x0 + x1 + 3 x2 - 4.5 xyr + 1
s.t.
cons1: x0 - x2 - 2.3 x4 <= 4.2 / this is another comment
c2: x1 + x2 >= 1
cc: x1 + x2 + xyr = 2
Bounds
0 <= x1 <= 3
1 >= x2
x3 = 1
-2 <= x4 <= Inf
xyr free
Integers
x0
Generals
x1 xyr
Binaries
x2
End Notes:
  • Keywords are: Min, Max, Minimize, Maximize, s.t., Subject To, Bounds, Integers, Generals, Binaries, End, Free, Inf.
  • Keywords are not case sensitive and may be in plural or singular form. They should not be used as objective, row or column names.
  • Bounds, Integers, Generals, Binaries sections are optional.
  • Generals and Integers are synonymous.
  • Bounds section (if any) must come before Integers, Generals, and Binaries sections.
  • Row names must be followed by ':' without blank space. Row names are optional. If row names are present, they must be distinct (if the k-th constraint has no given name, its name is set automatically to "consk" for k=0,...,). For valid row names, see the method is_invalid_name().
  • Column names must be followed by a blank space. They must be distinct. For valid column names, see the method is_invalid_name().
  • The objective function name must be followed by ':' without blank space. Objective function name is optional (if no objective function name is given, it is set to "obj" by default). For valid objective function names, see the method is_invalid_name().
  • Ranged constraints are written as two constraints. If a name is given for a ranged constraint, the upper bound constraint has that name and the lower bound constraint has that name with "_low" as suffix. This should be kept in mind when assigning names to ranged constraint, as the resulting name must be distinct from all the other names and be considered valid by the method is_invalid_name().
  • At most one term related to any single variable may appear in the objective function; if more than one term are present, only the last one is taken into account. At most one constant term may appear in the objective function; if present, it must appear last.
  • Default bounds are 0 for lower bound and +infinity for upper bound.
  • Free variables get default lower bound -infinity and default upper bound +infinity. Writing "x0 Free" in an LP file means "set lower bound on x0 to -infinity".
  • If more than one upper (resp. lower) bound on a variable appears in the Bounds section, the last one is the one taken into account. The bounds for a binary variable are set to 0/1 only if this bound is stronger than the bound obtained from the Bounds section.
  • Numbers larger than DBL_MAX (or larger than 1e+400) in the input file might crash the code.
  • A comment must start with '\' or '/'. That symbol must either be the first character of a line or be preceded by a blank space. The comment ends at the end of the line. Comments are skipped while reading an Lp file and they may be inserted anywhere.
*/ class CoinLpIO { friend void CoinLpIOUnitTest(const std::string & lpDir); public: /**@name Constructor and Destructor */ //@{ /// Default Constructor CoinLpIO(); /// Does the heavy lifting for destruct and assignment. void gutsOfDestructor(); /// Does the heavy lifting for copy and assignment void gutsOfCopy(const CoinLpIO &); /// assignment operator CoinLpIO & operator = (const CoinLpIO& rhs) ; /// Copy constructor CoinLpIO (const CoinLpIO &); /// Destructor ~CoinLpIO(); /** Free the vector previous_names_[section] and set card_previous_names_[section] to 0. section = 0 for row names, section = 1 for column names. */ void freePreviousNames(const int section); /// Free all memory (except memory related to hash tables and objName_). void freeAll(); //@} /** A quick inlined function to convert from lb/ub style constraint definition to sense/rhs/range style */ inline void convertBoundToSense(const double lower, const double upper, char& sense, double& right, double& range) const; /**@name Queries */ //@{ /// Get the problem name const char * getProblemName() const; /// Set problem name void setProblemName(const char *name); /// Get number of columns int getNumCols() const; /// Get number of rows int getNumRows() const; /// Get number of nonzero elements int getNumElements() const; /// Get pointer to array[getNumCols()] of column lower bounds const double * getColLower() const; /// Get pointer to array[getNumCols()] of column upper bounds const double * getColUpper() const; /// Get pointer to array[getNumRows()] of row lower bounds const double * getRowLower() const; /// Get pointer to array[getNumRows()] of row upper bounds const double * getRowUpper() const; /** Get pointer to array[getNumRows()] of constraint senses.
  • 'L': <= constraint
  • 'E': = constraint
  • 'G': >= constraint
  • 'R': ranged constraint
  • 'N': free constraint
*/ const char * getRowSense() const; /** Get pointer to array[getNumRows()] of constraint right-hand sides. Given constraints with upper (rowupper) and/or lower (rowlower) bounds, the constraint right-hand side (rhs) is set as
  • 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
*/ const double * getRightHandSide() const; /** Get pointer to array[getNumRows()] of row ranges. Given constraints with upper (rowupper) and/or lower (rowlower) bounds, the constraint range (rowrange) is set as
  • if rowsense()[i] == 'R' then rowrange()[i] == rowupper()[i] - rowlower()[i]
  • if rowsense()[i] != 'R' then rowrange()[i] is 0.0
Put another way, only ranged constraints have a nontrivial value for rowrange. */ const double * getRowRange() const; /// Get pointer to array[getNumCols()] of objective function coefficients const double * getObjCoefficients() const; /// Get pointer to row-wise copy of the coefficient matrix const CoinPackedMatrix * getMatrixByRow() const; /// Get pointer to column-wise copy of the coefficient matrix const CoinPackedMatrix * getMatrixByCol() const; /// Get objective function name const char * getObjName() const; /// Get pointer to array[*card_prev] of previous row names. /// The value of *card_prev might be different than getNumRows()+1 if /// non distinct /// row names were present or if no previous names were saved or if /// the object was holding a different problem before. void getPreviousRowNames(char const * const * prev, int *card_prev) const; /// Get pointer to array[*card_prev] of previous column names. /// The value of *card_prev might be different than getNumCols() if non /// distinct column names were present of if no previous names were saved, /// or if the object was holding a different problem before. void getPreviousColNames(char const * const * prev, int *card_prev) const; /// Get pointer to array[getNumRows()+1] of row names, including /// objective function name as last entry. char const * const * getRowNames() const; /// Get pointer to array[getNumCols()] of column names char const * const *getColNames() const; /// Return the row name for the specified index. /// Return the objective function name if index = getNumRows(). /// Return 0 if the index is out of range or if row names are not defined. const char * rowName(int index) const; /// Return the column name for the specified index. /// Return 0 if the index is out of range or if column names are not /// defined. const char * columnName(int index) const; /// Return the index for the specified row name. /// Return getNumRows() for the objective function name. /// Return -1 if the name is not found. int rowIndex(const char * name) const; /// Return the index for the specified column name. /// Return -1 if the name is not found. int columnIndex(const char * name) const; ///Returns the (constant) objective offset double objectiveOffset() const; /// Set objective offset inline void setObjectiveOffset(double value) { objectiveOffset_ = value;} /// Return true if a column is an integer (binary or general /// integer) variable bool isInteger(int columnNumber) const; /// Get characteristic vector of integer variables const char * integerColumns() const; //@} /**@name Parameters */ //@{ /// Get infinity double getInfinity() const; /// Set infinity. Any number larger is considered infinity. /// Default: DBL_MAX void setInfinity(const double); /// Get epsilon double getEpsilon() const; /// Set epsilon. /// Default: 1e-5. void setEpsilon(const double); /// Get numberAcross, the number of monomials to be printed per line int getNumberAcross() const; /// Set numberAcross. /// Default: 10. void setNumberAcross(const int); /// Get decimals, the number of digits to write after the decimal point int getDecimals() const; /// Set decimals. /// Default: 5 void setDecimals(const int); //@} /**@name Public methods */ //@{ /** Set the data of the object. Set it from the coefficient matrix m, the lower bounds collb, the upper bounds colub, objective function obj_coeff, integrality vector integrality, lower/upper bounds on the constraints. The sense of optimization of the objective function is assumed to be a minimization. Numbers larger than DBL_MAX (or larger than 1e+400) might crash the code. */ void setLpDataWithoutRowAndColNames( const CoinPackedMatrix& m, const double* collb, const double* colub, const double* obj_coeff, const char* integrality, const double* rowlb, const double* rowub); /** Return 0 if buff is a valid name for a row, a column or objective function, return a positive number otherwise. If parameter ranged = true, the name is intended for a ranged constraint.
Return 1 if the name has more than 100 characters (96 characters for a ranged constraint name, as "_low" will be added to the name).
Return 2 if the name starts with a number.
Return 3 if the name is not built with the letters a to z, A to Z, the numbers 0 to 9 or the characters " ! # $ % & ( ) . ; ? @ _ ' ` { } ~
Return 4 if the name is a keyword.
Return 5 if the name is empty or NULL. */ int is_invalid_name(const char *buff, const bool ranged) const; /** Return 0 if each of the card_vnames entries of vnames is a valid name, return a positive number otherwise. The return value, if not 0, is the return value of is_invalid_name() for the last invalid name in vnames. If check_ranged = true, the names are row names and names for ranged constaints must be checked for additional restrictions since "_low" will be added to the name if an Lp file is written. When check_ranged = true, card_vnames must have getNumRows()+1 entries, with entry vnames[getNumRows()] being the name of the objective function. For a description of valid names and return values, see the method is_invalid_name(). This method must not be called with check_ranged = true before setLpDataWithoutRowAndColNames() has been called, since access to the indices of all the ranged constraints is required. */ int are_invalid_names(char const * const *vnames, const int card_vnames, const bool check_ranged) const; /// Set objective function name to the default "obj" and row /// names to the default "cons0", "cons1", ... void setDefaultRowNames(); /// Set column names to the default "x0", "x1", ... void setDefaultColNames(); /** Set the row and column names. The array rownames must either be NULL or have exactly getNumRows()+1 distinct entries, each of them being a valid name (see is_invalid_name()) and the last entry being the intended name for the objective function. If rownames is NULL, existing row names and objective function name are not changed. If rownames is deemed invalid, default row names and objective function name are used (see setDefaultRowNames()). The memory location of array rownames (or its entries) should not be related to the memory location of the array (or entries) obtained from getRowNames() or getPreviousRowNames(), as the call to setLpDataRowAndColNames() modifies the corresponding arrays. Unpredictable results are obtained if this requirement is ignored. Similar remarks apply to the array colnames, which must either be NULL or have exactly getNumCols() entries. */ void setLpDataRowAndColNames(char const * const * const rownames, char const * const * const colnames); /** Write the data in Lp format in the file with name filename. 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. Write objective function name and row names if useRowNames = true. Ranged constraints are written as two constraints. If row names are used, the upper bound constraint has the name of the original ranged constraint and the lower bound constraint has for name the original name with "_low" as suffix. If doing so creates two identical row names, default row names are used (see setDefaultRowNames()). */ int writeLp(const char *filename, const double epsilon, const int numberAcross, const int decimals, const bool useRowNames = true); /** Write the data in Lp format in the file pointed to by the paramater fp. 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. Write objective function name and row names if useRowNames = true. Ranged constraints are written as two constraints. If row names are used, the upper bound constraint has the name of the original ranged constraint and the lower bound constraint has for name the original name with "_low" as suffix. If doing so creates two identical row names, default row names are used (see setDefaultRowNames()). */ int writeLp(FILE *fp, const double epsilon, const int numberAcross, const int decimals, const bool useRowNames = true); /// Write the data in Lp format in the file with name filename. /// Write objective function name and row names if useRowNames = true. int writeLp(const char *filename, const bool useRowNames = true); /// Write the data in Lp format in the file pointed to by the parameter fp. /// Write objective function name and row names if useRowNames = true. int writeLp(FILE *fp, const bool useRowNames = true); /// Read the data in Lp format from the file with name filename, using /// the given value for epsilon. If the original problem is /// a maximization problem, the objective function is immediadtly /// flipped to get a minimization problem. void readLp(const char *filename, const double epsilon); /// Read the data in Lp format from the file with name filename. /// If the original problem is /// a maximization problem, the objective function is immediadtly /// flipped to get a minimization problem. void readLp(const char *filename); /// Read the data in Lp format from the file stream, using /// the given value for epsilon. /// If the original problem is /// a maximization problem, the objective function is immediadtly /// flipped to get a minimization problem. void readLp(FILE *fp, const double epsilon); /// Read the data in Lp format from the file stream. /// If the original problem is /// a maximization problem, the objective function is immediadtly /// flipped to get a minimization problem. void readLp(FILE *fp); /// Dump the data. Low level method for debugging. void print() const; //@} /**@name Message handling */ //@{ /** Pass in Message handler Supply a custom message handler. It will not be destroyed when the CoinMpsIO object is destroyed. */ void passInMessageHandler(CoinMessageHandler * handler); /// Set the language for messages. void newLanguage(CoinMessages::Language language); /// Set the language for messages. inline void setLanguage(CoinMessages::Language language) {newLanguage(language);} /// Return the message handler inline CoinMessageHandler * messageHandler() const {return handler_;} /// Return the messages inline CoinMessages messages() {return messages_;} /// Return the messages pointer inline CoinMessages * messagesPointer() {return & messages_;} //@} protected: /// Problem name char * problemName_; /// Message handler CoinMessageHandler * handler_; /** Flag to say if the message handler is the default handler. If true, the handler will be destroyed when the CoinMpsIO object is destroyed; if false, it will not be destroyed. */ bool defaultHandler_; /// Messages CoinMessages messages_; /// Number of rows int numberRows_; /// Number of columns int numberColumns_; /// Number of elements int numberElements_; /// Pointer to column-wise copy of problem matrix coefficients. mutable CoinPackedMatrix *matrixByColumn_; /// Pointer to row-wise copy of problem matrix coefficients. CoinPackedMatrix *matrixByRow_; /// Pointer to dense vector of row lower bounds double * rowlower_; /// Pointer to dense vector of row upper bounds double * rowupper_; /// Pointer to dense vector of column lower bounds double * collower_; /// Pointer to dense vector of column upper bounds double * colupper_; /// Pointer to dense vector of row rhs mutable double * rhs_; /** Pointer to dense vector of slack variable upper bounds for ranged constraints (undefined for non-ranged constraints) */ mutable double *rowrange_; /// Pointer to dense vector of row senses mutable char * rowsense_; /// Pointer to dense vector of objective coefficients double * objective_; /// Constant offset for objective value double objectiveOffset_; /// Pointer to dense vector specifying if a variable is continuous /// (0) or integer (1). char * integerType_; /// Current file name char * fileName_; /// Value to use for infinity double infinity_; /// Value to use for epsilon double epsilon_; /// Number of monomials printed in a row int numberAcross_; /// Number of decimals printed for coefficients int decimals_; /// Objective function name char *objName_; /** Row names (including objective function name) and column names when stopHash() for the corresponding section was last called or for initial names (deemed invalid) read from a file.
section = 0 for row names, section = 1 for column names. */ char **previous_names_[2]; /// card_previous_names_[section] holds the number of entries in the vector /// previous_names_[section]. /// section = 0 for row names, /// section = 1 for column names. int card_previous_names_[2]; /// Row names (including objective function name) /// and column names (linked to Hash tables). /// section = 0 for row names, /// section = 1 for column names. char **names_[2]; typedef struct { int index, next; } CoinHashLink; /// Maximum number of entries in a hash table section. /// section = 0 for row names, /// section = 1 for column names. int maxHash_[2]; /// Number of entries in a hash table section. /// section = 0 for row names, /// section = 1 for column names. int numberHash_[2]; /// Hash tables with two sections. /// section = 0 for row names (including objective function name), /// section = 1 for column names. mutable CoinHashLink *hash_[2]; /// Build the hash table for the given names. The parameter number is /// the cardinality of parameter names. Remove duplicate names. /// /// section = 0 for row names, /// section = 1 for column names. void startHash(char const * const * const names, const COINColumnIndex number, int section); /// Delete hash storage. If section = 0, it also frees objName_. /// section = 0 for row names, /// section = 1 for column names. void stopHash(int section); /// Return the index of the given name, return -1 if the name is not found. /// Return getNumRows() for the objective function name. /// section = 0 for row names (including objective function name), /// section = 1 for column names. COINColumnIndex findHash(const char *name, int section) const; /// Insert thisName in the hash table if not present yet; does nothing /// if the name is already in. /// section = 0 for row names, /// section = 1 for column names. void insertHash(const char *thisName, int section); /// Write a coefficient. /// print_1 = 0 : do not print the value 1. void out_coeff(FILE *fp, double v, int print_1) const; /// Locate the objective function. /// Return 1 if found the keyword "Minimize" or one of its variants, /// -1 if found keyword "Maximize" or one of its variants. int find_obj(FILE *fp) const; /// Return an integer indicating if the keyword "subject to" or one /// of its variants has been read. /// Return 1 if buff is the keyword "s.t" or one of its variants. /// Return 2 if buff is the keyword "subject" or one of its variants. /// Return 0 otherwise. int is_subject_to(const char *buff) const; /// Return 1 if the first character of buff is a number. /// Return 0 otherwise. int first_is_number(const char *buff) const; /// Return 1 if the first character of buff is '/' or '\'. /// Return 0 otherwise. int is_comment(const char *buff) const; /// Read the file fp until buff contains an end of line void skip_comment(char *buff, FILE *fp) const; /// Put in buff the next string that is not part of a comment void scan_next(char *buff, FILE *fp) const; /// Return 1 if buff is the keyword "free" or one of its variants. /// Return 0 otherwise. int is_free(const char *buff) const; /// Return 1 if buff is the keyword "inf" or one of its variants. /// Return 0 otherwise. int is_inf(const char *buff) const; /// Return an integer indicating the inequality sense read. /// Return 0 if buff is '<='. /// Return 1 if buff is '='. /// Return 2 if buff is '>='. /// Return -1 otherwise. int is_sense(const char *buff) const; /// Return an integer indicating if one of the keywords "Bounds", "Integers", /// "Generals", "Binaries", "End", or one /// of their variants has been read. /// Return 1 if buff is the keyword "Bounds" or one of its variants. /// Return 2 if buff is the keyword "Integers" or "Generals" or one of their /// variants. /// Return 3 if buff is the keyword "Binaries" or one of its variants. /// Return 4 if buff is the keyword "End" or one of its variants. /// Return 0 otherwise. int is_keyword(const char *buff) const; /// Read a monomial of the objective function. /// Return 1 if "subject to" or one of its variants has been read. int read_monom_obj(FILE *fp, double *coeff, char **name, int *cnt, char **obj_name); /// Read a monomial of a constraint. /// Return a positive number if the sense of the inequality has been /// read (see method is_sense() for the return code). /// Return -1 otherwise. int read_monom_row(FILE *fp, char *start_str, double *coeff, char **name, int cnt_coeff) const; /// Reallocate vectors related to number of coefficients. void realloc_coeff(double **coeff, char ***colNames, int *maxcoeff) const; /// Reallocate vectors related to rows. void realloc_row(char ***rowNames, int **start, double **rhs, double **rowlow, double **rowup, int *maxrow) const; /// Reallocate vectors related to columns. void realloc_col(double **collow, double **colup, char **is_int, int *maxcol) const; /// Read a constraint. void read_row(FILE *fp, char *buff, double **pcoeff, char ***pcolNames, int *cnt_coeff, int *maxcoeff, double *rhs, double *rowlow, double *rowup, int *cnt_row, double inf) const; /** Check that current objective name and all row names are distinct including row names obtained by adding "_low" for ranged constraints. If there is a conflict in the names, they are replaced by default row names (see setDefaultRowNames()). This method must not be called before setLpDataWithoutRowAndColNames() has been called, since access to the indices of all the ranged constraints is required. This method must not be called before setLpDataRowAndColNames() has been called, since access to all the row names is required. */ void checkRowNames(); /** Check that current column names are distinct. If not, they are replaced by default column names (see setDefaultColNames()). This method must not be called before setLpDataRowAndColNames() has been called, since access to all the column names is required. */ void checkColNames(); }; void CoinLpIOUnitTest(const std::string& lpDir); #endif CoinUtils-2.9.10/CoinUtils/src/CoinWarmStartDual.hpp0000644000076600007660000001152411510456064020753 0ustar coincoin/* $Id: CoinWarmStartDual.hpp 1372 2011-01-03 23:31:00Z 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). #ifndef CoinWarmStartDual_H #define CoinWarmStartDual_H #include "CoinHelperFunctions.hpp" #include "CoinWarmStart.hpp" #include "CoinWarmStartVector.hpp" //############################################################################# /** WarmStart information that is only a dual vector */ class CoinWarmStartDual : public virtual CoinWarmStart { public: /// return the size of the dual vector inline int size() const { return dual_.size(); } /// return a pointer to the array of duals inline const double * dual() const { return dual_.values(); } /** Assign the dual vector to be the warmstart information. In this method the object assumes ownership of the pointer and upon return "dual" will be a NULL pointer. If copying is desirable use the constructor. */ inline void assignDual(int size, double *& dual) { dual_.assignVector(size, dual); } CoinWarmStartDual() {} CoinWarmStartDual(int size, const double * dual) : dual_(size, dual) {} CoinWarmStartDual(const CoinWarmStartDual& rhs) : dual_(rhs.dual_) {} CoinWarmStartDual& operator=(const CoinWarmStartDual& rhs) { if (this != &rhs) { dual_ = rhs.dual_; } return *this; } /** `Virtual constructor' */ virtual CoinWarmStart *clone() const { return new CoinWarmStartDual(*this); } virtual ~CoinWarmStartDual() {} /*! \name Dual warm start `diff' methods */ //@{ /*! \brief Generate a `diff' that can convert the warm start passed as a parameter to the warm start specified by \c this. The capabilities are limited: the basis passed as a parameter can be no larger than the basis pointed to by \c this. */ virtual CoinWarmStartDiff* generateDiff (const CoinWarmStart *const oldCWS) const ; /*! \brief Apply \p diff to this warm start. Update this warm start by applying \p diff. It's assumed that the allocated capacity of the warm start is sufficiently large. */ virtual void applyDiff (const CoinWarmStartDiff *const cwsdDiff) ; #if 0 protected: inline const CoinWarmStartVector& warmStartVector() const { return dual_; } #endif //@} private: ///@name Private data members CoinWarmStartVector dual_; }; //############################################################################# /*! \class CoinWarmStartDualDiff \brief A `diff' between two CoinWarmStartDual objects This class exists in order to hide from the world the details of calculating and representing a `diff' between two CoinWarmStartDual objects. For convenience, assignment, cloning, and deletion are visible to the world, and default and copy constructors are made available to derived classes. Knowledge of the rest of this structure, and of generating and applying diffs, is restricted to the friend functions CoinWarmStartDual::generateDiff() and CoinWarmStartDual::applyDiff(). The actual data structure is a pair of vectors, #diffNdxs_ and #diffVals_. */ class CoinWarmStartDualDiff : public virtual CoinWarmStartDiff { public: /*! \brief `Virtual constructor' */ virtual CoinWarmStartDiff *clone() const { return new CoinWarmStartDualDiff(*this) ; } /*! \brief Assignment */ virtual CoinWarmStartDualDiff &operator= (const CoinWarmStartDualDiff &rhs) { if (this != &rhs) { diff_ = rhs.diff_; } return *this; } /*! \brief Destructor */ virtual ~CoinWarmStartDualDiff() {} protected: /*! \brief Default constructor This is protected (rather than private) so that derived classes can see it when they make their default constructor protected or private. */ CoinWarmStartDualDiff () : diff_() {} /*! \brief Copy constructor For convenience when copying objects containing CoinWarmStartDualDiff objects. But consider whether you should be using #clone() to retain polymorphism. This is protected (rather than private) so that derived classes can see it when the make their copy constructor protected or private. */ CoinWarmStartDualDiff (const CoinWarmStartDualDiff &rhs) : diff_(rhs.diff_) {} private: friend CoinWarmStartDiff* CoinWarmStartDual::generateDiff(const CoinWarmStart *const oldCWS) const ; friend void CoinWarmStartDual::applyDiff(const CoinWarmStartDiff *const diff) ; /*! \brief Standard constructor */ CoinWarmStartDualDiff (int sze, const unsigned int *const diffNdxs, const double *const diffVals) : diff_(sze, diffNdxs, diffVals) {} /*! \brief The difference in the dual vector is simply the difference in a vector. */ CoinWarmStartVectorDiff diff_; }; #endif CoinUtils-2.9.10/CoinUtils/src/CoinWarmStartDual.cpp0000644000076600007660000000374411510461170020745 0ustar coincoin/* $Id: CoinWarmStartDual.cpp 1373 2011-01-03 23:57:44Z lou $ */ // 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). #if defined(_MSC_VER) // Turn off compiler warning about long names # pragma warning(disable:4786) #endif #include #include "CoinWarmStartDual.hpp" #include //############################################################################# /* Generate a `diff' that can convert the warm start passed as a parameter to the warm start specified by this. The capabilities are limited: the basis passed as a parameter can be no larger than the basis pointed to by this. */ CoinWarmStartDiff* CoinWarmStartDual::generateDiff (const CoinWarmStart *const oldCWS) const { /* Make sure the parameter is CoinWarmStartDual or derived class. */ const CoinWarmStartDual *oldDual = dynamic_cast(oldCWS) ; if (!oldDual) { throw CoinError("Old warm start not derived from CoinWarmStartDual.", "generateDiff","CoinWarmStartDual") ; } CoinWarmStartDualDiff* diff = new CoinWarmStartDualDiff; CoinWarmStartDiff* vecdiff = dual_.generateDiff(&oldDual->dual_); diff->diff_.swap(*dynamic_cast*>(vecdiff)); delete vecdiff; return diff; } //============================================================================= /* Apply diff to this warm start. Update this warm start by applying diff. It's assumed that the allocated capacity of the warm start is sufficiently large. */ void CoinWarmStartDual::applyDiff (const CoinWarmStartDiff *const cwsdDiff) { /* Make sure we have a CoinWarmStartDualDiff */ const CoinWarmStartDualDiff *diff = dynamic_cast(cwsdDiff) ; if (!diff) { throw CoinError("Diff not derived from CoinWarmStartDualDiff.", "applyDiff","CoinWarmStartDual") ; } dual_.applyDiff(&diff->diff_); } CoinUtils-2.9.10/CoinUtils/src/CoinPresolveDupcol.cpp0000644000076600007660000015600712130104232021152 0ustar coincoin/* $Id: CoinPresolveDupcol.cpp 1585 2013-04-06 20:42:02Z stefan $ */ // 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). #include #include //#define PRESOLVE_DEBUG 1 // Debugging macros/functions //#define PRESOLVE_DETAIL 1 #include "CoinPresolveMatrix.hpp" #include "CoinPresolveFixed.hpp" #include "CoinPresolveDupcol.hpp" #include "CoinSort.hpp" #include "CoinFinite.hpp" #include "CoinHelperFunctions.hpp" #include "CoinPresolveUseless.hpp" #include "CoinMessage.hpp" #if PRESOLVE_DEBUG || PRESOLVE_CONSISTENCY #include "CoinPresolvePsdebug.hpp" #endif #define DSEED2 2147483647.0 // Can be used from anywhere void coin_init_random_vec(double *work, int n) { double deseed = 12345678.0; for (int i = 0; i < n; ++i) { deseed *= 16807.; int jseed = static_cast (deseed / DSEED2); deseed -= static_cast (jseed) * DSEED2; double random = deseed / DSEED2; work[i]=random; } } namespace { // begin unnamed file-local namespace /* For each candidate major-dimension vector in majcands, calculate the sum over the vector, with each minor dimension weighted by a random amount. (E.g., calculate column sums with each row weighted by a random amount.) The sums are returned in the corresponding entries of majsums. */ void compute_sums (int /*n*/, const int *majlens, const CoinBigIndex *majstrts, int *minndxs, double *elems, const double *minmuls, int *majcands, double *majsums, int nlook) { for (int cndx = 0 ; cndx < nlook ; ++cndx) { int i = majcands[cndx] ; PRESOLVEASSERT(majlens[i] > 0) ; CoinBigIndex kcs = majstrts[i] ; CoinBigIndex kce = kcs + majlens[i] ; double value = 0.0 ; for (CoinBigIndex k = kcs ; k < kce ; k++) { int irow = minndxs[k] ; value += minmuls[irow]*elems[k] ; } majsums[cndx] = value ; } return ; } void create_col (int col, int n, double *els, CoinBigIndex *mcstrt, double *colels, int *hrow, int *link, CoinBigIndex *free_listp) { int *rows = reinterpret_cast(els+n) ; CoinBigIndex free_list = *free_listp; int xstart = NO_LINK; for (int i=0; i= 0) ; free_list = link[free_list]; hrow[k] = rows[i]; colels[k] = els[i]; link[k] = xstart; xstart = k; } mcstrt[col] = xstart; *free_listp = free_list; } } // end unnamed file-local namespace const char *dupcol_action::name () const { return ("dupcol_action"); } /* Original comment: This is just ekkredc5, adapted into the new framework. The datasets scorpion.mps and allgrade.mps have duplicate columns. In case you don't have your OSL manual handy, a somewhat more informative explanation: We're looking for an easy-to-detect special case of linearly dependent columns, where the coefficients of the duplicate columns are exactly equal. The idea for locating such columns is to generate pseudo- random weights for each row and then calculate the weighted sum of coefficients of each column. Columns with equal sums are checked more thoroughly. Analysis of the situation says there are two major cases: * If the columns have equal objective coefficients, we can combine them. * If the columns have unequal objective coefficients, we may be able to fix one at bound. If the required bound doesn't exist, we have dual infeasibility (hence one of primal infeasibility or unboundedness). In the comments below are a few fragments of code from the original routine. I don't think they make sense, but I've left them for the nonce in case someone else recognises the purpose. -- lh, 040909 -- */ const CoinPresolveAction *dupcol_action::presolve (CoinPresolveMatrix *prob, const CoinPresolveAction *next) { # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 # if PRESOLVE_DEBUG > 0 std::cout << "Entering dupcol_action::presolve." << std::endl ; # endif presolve_consistent(prob) ; presolve_links_ok(prob) ; presolve_check_sol(prob) ; presolve_check_nbasic(prob) ; # endif # if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 int startEmptyRows = 0 ; int startEmptyColumns = 0 ; startEmptyRows = prob->countEmptyRows() ; startEmptyColumns = prob->countEmptyCols() ; # if COIN_PRESOLVE_TUNING > 0 double startTime = 0.0; if (prob->tuning_) startTime = CoinCpuTime() ; # endif # endif double maxmin = prob->maxmin_ ; double *colels = prob->colels_ ; int *hrow = prob->hrow_ ; CoinBigIndex *mcstrt = prob->mcstrt_ ; int *hincol = prob->hincol_ ; int ncols = prob->ncols_ ; int nrows = prob->nrows_ ; double *clo = prob->clo_ ; double *cup = prob->cup_ ; double *sol = prob->sol_ ; double *rlo = prob->rlo_ ; double *rup = prob->rup_ ; // If all coefficients positive do more simply bool allPositive=true; double * rhs = prob->usefulRowDouble_; //new double[nrows]; CoinMemcpyN(rup,nrows,rhs); /* Scan the columns for candidates, and write the indices into sort. We're not interested in columns that are empty, prohibited, or integral. Question: Should we exclude singletons, which are useful in other transforms? Question: Why are we excluding integral columns? */ // allow integral columns if asked for bool allowIntegers = ((prob->presolveOptions_&0x01) != 0) ; int *sort = prob->usefulColumnInt_; //new int[ncols] ; int nlook = 0 ; for (int j = 0 ; j < ncols ; j++) { if (hincol[j] == 0) continue ; // sort CoinSort_2(hrow+mcstrt[j],hrow+mcstrt[j]+hincol[j], colels+mcstrt[j]); // check all positive and adjust rhs if (allPositive) { double lower = clo[j]; if (lowercolProhibited2(j)) continue ; //#define PRESOLVE_INTEGER_DUPCOL #ifndef PRESOLVE_INTEGER_DUPCOL if (prob->isInteger(j)&&!allowIntegers) continue ; #endif sort[nlook++] = j ; } if (nlook == 0) { //delete[] sort ; //delete [] rhs; return (next) ; } /* Prep: add the coefficients of each candidate column. To reduce false positives, multiply each row by a `random' multiplier when forming the sums. On return from compute_sums, sort and colsum are loaded with the indices and column sums, respectively, of candidate columns. The pair of arrays are then sorted by sum so that equal sums are adjacent. */ double *colsum = prob->usefulColumnDouble_; //new double[ncols] ; double *rowmul; if (!prob->randomNumber_) { rowmul = new double[nrows] ; coin_init_random_vec(rowmul,nrows) ; } else { rowmul = prob->randomNumber_; } compute_sums(ncols,hincol,mcstrt,hrow,colels,rowmul,sort,colsum,nlook) ; CoinSort_2(colsum,colsum+nlook,sort) ; /* General prep --- unpack the various vectors we'll need, and allocate arrays to record the results. */ presolvehlink *clink = prob->clink_ ; double *rowels = prob->rowels_ ; int *hcol = prob->hcol_ ; const CoinBigIndex *mrstrt = prob->mrstrt_ ; int *hinrow = prob->hinrow_ ; double *dcost = prob->cost_ ; action *actions = new action [nlook] ; int nactions = 0 ; # ifdef ZEROFAULT memset(actions,0,nlook*sizeof(action)) ; # endif int *fixed_down = new int[nlook] ; int nfixed_down = 0 ; int *fixed_up = new int[nlook] ; int nfixed_up = 0 ; #if 0 // Excluded in the original routine. I'm guessing it's excluded because // it's just not cost effective to worry about this. -- lh, 040908 -- // It may be the case that several columns are duplicate. // If not all have the same cost, then we have to make sure // that we set the most expensive one to its minimum // now sort in each class by cost { double dval = colsum[0] ; int first = 0 ; for (int jj = 1; jj < nlook; jj++) { while (colsum[jj]==dval) jj++ ; if (first + 1 < jj) { double buf[jj - first] ; for (int i=first; i 1 && isorted < j1) { CoinSort_2(hrow+mcstrt[j1],hrow+mcstrt[j1]+len1, colels+mcstrt[j1]) ; isorted = j1 ; } if (len2 > 1 && isorted < j2) { CoinSort_2(hrow+kcs,hrow+kcs+len2,colels+kcs) ; isorted = j2 ; } CoinBigIndex k ; for (k = kcs ; k < kce ; k++) { if (hrow[k] != hrow[k+ishift] || colels[k] != colels[k+ishift]) { break ; } } if (k != kce) { tgt = jj ; continue ; } /* These really are duplicate columns. Grab values for convenient reference. Convert the objective coefficients for minimization. */ double clo1 = clo[j1] ; double cup1 = cup[j1] ; double clo2 = clo[j2] ; double cup2 = cup[j2] ; double c1 = dcost[j1]*maxmin ; double c2 = dcost[j2]*maxmin ; PRESOLVEASSERT(!(clo1 == cup1 || clo2 == cup2)) ; // Get reasonable bounds on sum of two variables double lowerBound=-COIN_DBL_MAX; double upperBound=COIN_DBL_MAX; // For now only if lower bounds are zero if (!clo1&&!clo2) { // Only need bounds if c1 != c2 if (c1!=c2) { if (!allPositive) { #if 0 for (k=kcs;k 0.0) { if (PRESOLVE_INF <= ub) { posinf = true; if (neginf) break; // pointless } else { maxup += ub * coeff; } if (lb <= -PRESOLVE_INF) { neginf = true; if (posinf) break; // pointless } else { maxdown += lb * coeff; } } else { if (PRESOLVE_INF <= ub) { neginf = true; if (posinf) break; // pointless } else { maxdown += ub * coeff; } if (lb <= -PRESOLVE_INF) { posinf = true; if (neginf) break; // pointless } else { maxup += lb * coeff; } } } if (kk==kre) { assert (value1); if (value1>1.0e-5) { if (!neginf&&rup[iRow]<1.0e10) if (upperBound*value1>rup[iRow]-maxdown) upperBound = (rup[iRow]-maxdown)/value1; if (!posinf&&rlo[iRow]>-1.0e10) if (lowerBound*value1rup[iRow]-maxdown) { #ifndef NDEBUG double x=lowerBound; #endif lowerBound = (rup[iRow]-maxdown)/value1; assert (lowerBound == CoinMax(x,(rup[iRow]-maxdown)/value1)); } if (!posinf&&rlo[iRow]>-1.0e10) if (upperBound*value1recomputeSums(-1); // get min max gotStuff=true; } int positiveInf=0; int negativeInf=0; double lo=0; double up=0.0; if (clo1<-PRESOLVE_INF) negativeInf++; else lo+=clo1; if (clo2<-PRESOLVE_INF) negativeInf++; else lo+=clo2; if (cup1>PRESOLVE_INF) positiveInf++; else up+=cup1; if (cup2>PRESOLVE_INF) positiveInf++; else up+=cup2; for (k=kcs;k0.0) ? positiveInf : negativeInf; int nInf = (value>0.0) ? negativeInf : positiveInf; int posinf = prob->infiniteUp_[iRow]-pInf; int neginf = prob->infiniteDown_[iRow]-nInf; if (posinf>0&&neginf>0) continue; // this row can't bound double maxup = prob->sumUp_[iRow]; double maxdown = prob->sumDown_[iRow]; if (value>0.0) { maxdown -= value*lo; maxup -= value*up; } else { maxdown -= value*up; maxup -= value*lo; } if (value>1.0e-5) { if (!neginf&&rup[iRow]<1.0e10) if (upperBound*value>rup[iRow]-maxdown) upperBound = (rup[iRow]-maxdown)/value; if (!posinf&&rlo[iRow]>-1.0e10) if (lowerBound*valuerup[iRow]-maxdown) { lowerBound = (rup[iRow]-maxdown)/value; } if (!posinf&&rlo[iRow]>-1.0e10) if (upperBound*valuerhs[iRow]) upperBound = rhs[iRow]/value; } } } // relax a bit upperBound -= 1.0e-9; } else { // Not sure what to do so give up continue; } /* There are two main cases: The objective coefficients are equal or unequal. For equal objective coefficients c1 == c2, we can combine the columns by making the substitution x = x' - x. This will eliminate column sort[jj] = j2 and leave the new variable x' in column sort[tgt] = j1. tgt doesn't move. */ if (c1 == c2) { #ifdef PRESOLVE_INTEGER_DUPCOL if (!allowIntegers) { if (prob->isInteger(j1)) { if (!prob->isInteger(j2)) { if (cup2 < upperBound) //if (!prob->colInfinite(j2)) continue; else cup2 = COIN_DBL_MAX; } } else if (prob->isInteger(j2)) { if (cup1 < upperBound) //if (!prob->colInfinite(j1)) continue; else cup1 = COIN_DBL_MAX; } //printf("TakingINTeq\n"); } #endif /* As far as the presolved lp, there's no difference between columns. But we need this relation to hold in order to guarantee that we can split the value of the combined column during postsolve without damaging the basis. (The relevant case is when the combined column is basic --- we need to be able to retain column j1 in the basis and make column j2 nonbasic.) */ if (!(clo2+cup1 <= clo1+cup2)) { CoinSwap(j1,j2) ; CoinSwap(clo1,clo2) ; CoinSwap(cup1,cup2) ; tgt = jj ; } /* Create the postsolve action before we start to modify the columns. */ # if PRESOLVE_DEBUG > 1 PRESOLVE_STMT(printf("DUPCOL: (%d,%d) %d += %d\n",j1,j2,j1,j2)) ; PRESOLVE_DETAIL_PRINT(printf("pre_dupcol %dC %dC E\n",j2,j1)); # endif action *s = &actions[nactions++] ; s->thislo = clo[j2] ; s->thisup = cup[j2] ; s->lastlo = clo[j1] ; s->lastup = cup[j1] ; s->ithis = j2 ; s->ilast = j1 ; s->nincol = hincol[j2] ; s->colels = presolve_dupmajor(colels,hrow,hincol[j2],mcstrt[j2]) ; /* Combine the columns into column j1. Upper and lower bounds and solution simply add, and the coefficients are unchanged. I'm skeptical of pushing a bound to infinity like this, but leave it for now. -- lh, 040908 -- */ clo1 += clo2 ; if (clo1 < -1.0e20) { clo1 = -PRESOLVE_INF ; } clo[j1] = clo1 ; cup1 += cup2 ; if (cup1 > 1.0e20) { cup1 = PRESOLVE_INF ; } cup[j1] = cup1 ; if (sol) { sol[j1] += sol[j2] ; } if (prob->colstat_) { if (prob->getColumnStatus(j1) == CoinPrePostsolveMatrix::basic || prob->getColumnStatus(j2) == CoinPrePostsolveMatrix::basic) { prob->setColumnStatus(j1,CoinPrePostsolveMatrix::basic); } } /* Empty column j2. */ dcost[j2] = 0.0 ; if (sol) { sol[j2] = clo2 ; } CoinBigIndex k2cs = mcstrt[j2] ; CoinBigIndex k2ce = k2cs + hincol[j2] ; for (CoinBigIndex k = k2cs ; k < k2ce ; ++k) { presolve_delete_from_row(hrow[k],j2,mrstrt,hinrow,hcol,rowels) ; } hincol[j2] = 0 ; PRESOLVE_REMOVE_LINK(clink,j2) ; continue ; } /* Unequal reduced costs. In this case, we may be able to fix one of the columns or prove dual infeasibility. Given column a_k, duals y, objective coefficient c_k, the reduced cost cbar_k = c_k - dot(y,a_k). Given a_1 = a_2, substitute for dot(y,a_1) in the relation for cbar_2 to get cbar_2 = (c_2 - c_1) + cbar_1 Independent elements here are variable bounds l_k, u_k, and difference (c_2 - c_1). Infinite bounds for l_k, u_k will constrain the sign of cbar_k. Assume minimization. If you do the case analysis, you find these cases of interest: l_1 u_1 l_2 u_2 cbar_1 c_2-c_1 cbar_2 result A any finite -inf any <= 0 > 0 <= 0 x_1 -> NBUB B -inf any any finite <= 0 < 0 < 0 x_2 -> NBUB C finite any any +inf >= 0 < 0 >= 0 x_1 -> NBLB D any +inf finite any >= 0 > 0 >= 0 x_2 -> NBLB E -inf any any +inf <= 0 < 0 >= 0 dual infeas F any inf -inf any >= 0 > 0 <= 0 dual infeas G any finite finite any > 0 no inference H finite any any finite < 0 no inference The cases labelled dual infeasible are primal unbounded. To keep the code compact, we'll always aim to take x_2 to bound. In the cases where x_1 should go to bound, we'll swap. The implementation is boolean algebra. Define bits for infinite bounds and (c_2 > c_1), then look for the correct patterns. */ else { int minterm = 0 ; #ifdef PRESOLVE_INTEGER_DUPCOL if (!allowIntegers) { if (c2 > c1) { if (cup1 < upperBound/*!prob->colInfinite(j1)*/ && (prob->isInteger(j1)||prob->isInteger(j2))) continue ; } else { if (cup2 < upperBound/*!prob->colInfinite(j2)*/ && (prob->isInteger(j1)||prob->isInteger(j2))) continue ; } //printf("TakingINTne\n"); } #endif bool swapped = false ; #if PRESOLVE_DEBUG > 1 printf("bounds %g %g\n",lowerBound,upperBound); #endif if (c2 > c1) minterm |= 1<<0 ; if (cup2 >= PRESOLVE_INF/*prob->colInfinite(j2)*/) minterm |= 1<<1 ; if (clo2 <= -PRESOLVE_INF) minterm |= 1<<2 ; if (cup1 >= PRESOLVE_INF/*prob->colInfinite(j1)*/) minterm |= 1<<3 ; if (clo1 <= -PRESOLVE_INF) minterm |= 1<<4 ; // for now be careful - just one special case if (!clo1&&!clo2) { if (c2 > c1 && cup1 >= upperBound) minterm |= 1<<3; else if (c2 < c1 && cup2 >= upperBound) minterm |= 1<<1; } /* The most common case in a well-formed system should be no inference. We're looking for x00x1 (case G) and 0xx00 (case H). This is where we have the potential to miss inferences: If there are three or more columns with the same sum, sort[tgt] == j1 will only be compared to the second in the group. */ if ((minterm&0x0d) == 0x1 || (minterm&0x13) == 0) { tgt = jj ; continue ; } /* Next remove the unbounded cases, 1xx10 and x11x1. */ if ((minterm&0x13) == 0x12 || (minterm&0x0d) == 0x0d) { prob->setStatus(2) ; # if PRESOLVE_DEBUG > 1 PRESOLVE_STMT(printf("DUPCOL: (%d,%d) Unbounded\n",j1,j2)) ; # endif break ; } /* With the no inference and unbounded cases removed, all that's left are the cases where we can push a variable to bound. Swap if necessary (x01x1 or 0xx10) so that we're always fixing index j2. This means that column sort[tgt] = j1 will be fixed. Unswapped, we fix column sort[jj] = j2. */ if ((minterm&0x0d) == 0x05 || (minterm&0x13) == 0x02) { CoinSwap(j1, j2) ; CoinSwap(clo1, clo2) ; CoinSwap(cup1, cup2) ; CoinSwap(c1, c2) ; int tmp1 = minterm&0x18 ; int tmp2 = minterm&0x06 ; int tmp3 = minterm&0x01 ; minterm = (tmp1>>2)|(tmp2<<2)|(tmp3^0x01) ; swapped = true ; } /* Force x_2 to upper bound? (Case B, boolean 1X100, where X == don't care.) */ if ((minterm&0x13) == 0x10) { fixed_up[nfixed_up++] = j2 ; # if PRESOLVE_DEBUG > 1 PRESOLVE_STMT(printf("DUPCOL: (%d,%d) %d -> NBUB\n",j1,j2,j2)) ; # endif if (prob->colstat_) { if (prob->getColumnStatus(j1) == CoinPrePostsolveMatrix::basic || prob->getColumnStatus(j2) == CoinPrePostsolveMatrix::basic) { prob->setColumnStatus(j1,CoinPrePostsolveMatrix::basic) ; } prob->setColumnStatus(j2,CoinPrePostsolveMatrix::atUpperBound) ; } if (sol) { double delta2 = cup2-sol[j2] ; sol[j2] = cup2 ; sol[j1] -= delta2 ; } if (swapped) { tgt = jj ; } continue ; } /* Force x_2 to lower bound? (Case C, boolean X1011.) */ if ((minterm&0x0d) == 0x09) { fixed_down[nfixed_down++] = j2 ; # if PRESOLVE_DEBUG > 1 PRESOLVE_STMT(printf("DUPCOL: (%d,%d) %d -> NBLB\n",j1,j2,j2)) ; # endif if (prob->colstat_) { if (prob->getColumnStatus(j1) == CoinPrePostsolveMatrix::basic || prob->getColumnStatus(j2) == CoinPrePostsolveMatrix::basic) { prob->setColumnStatus(j1,CoinPrePostsolveMatrix::basic) ; } prob->setColumnStatus(j2,CoinPrePostsolveMatrix::atLowerBound) ; } if (sol) { double delta2 = clo2-sol[j2] ; sol[j2] = clo2 ; sol[j1] -= delta2 ; } if (swapped) { tgt = jj ; } continue ; } } /* We should never reach this point in the loop --- all cases force a new iteration or loop termination. If we get here, something happened that we didn't anticipate. */ PRESOLVE_STMT(printf("DUPCOL: (%d,%d) UNEXPECTED!\n",j1,j2)) ; } /* What's left? Deallocate vectors, and call make_fixed_action to handle any variables that were fixed to bound. */ if (rowmul != prob->randomNumber_) delete[] rowmul ; //delete[] colsum ; //delete[] sort ; //delete [] rhs; # if PRESOLVE_SUMMARY || PRESOLVE_DEBUG if (nactions+nfixed_down+nfixed_up > 0) { printf("DUPLICATE COLS: %d combined, %d lb, %d ub\n", nactions,nfixed_down,nfixed_up) ; } # endif if (nactions) { next = new dupcol_action(nactions,CoinCopyOfArray(actions,nactions),next) ; // we can't go round again in integer prob->presolveOptions_ |= 0x80000000; } deleteAction(actions,action*) ; if (nfixed_down) { next = make_fixed_action::presolve(prob,fixed_down,nfixed_down,true,next) ; } delete[]fixed_down ; if (nfixed_up) { next = make_fixed_action::presolve(prob,fixed_up,nfixed_up,false,next) ; } delete[]fixed_up ; # if COIN_PRESOLVE_TUNING > 0 if (prob->tuning_) double thisTime = CoinCpuTime() ; # endif # if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 presolve_check_sol(prob) ; # endif # if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 int droppedRows = prob->countEmptyRows()-startEmptyRows ; int droppedColumns = prob->countEmptyCols()-startEmptyColumns ; std::cout << "Leaving dupcol_action::presolve, " << droppedRows << " rows, " << droppedColumns << " columns dropped" ; # if COIN_PRESOLVE_TUNING > 0 std::cout << " in " << thisTime-startTime << "s" ; # endif std::cout << "." << std::endl ; # endif return (next) ; } void dupcol_action::postsolve(CoinPostsolveMatrix *prob) const { const action *const actions = actions_; const int nactions = nactions_; double *clo = prob->clo_; double *cup = prob->cup_; double *sol = prob->sol_; double *dcost = prob->cost_; double *colels = prob->colels_; int *hrow = prob->hrow_; CoinBigIndex *mcstrt = prob->mcstrt_; int *hincol = prob->hincol_; int *link = prob->link_; double *rcosts = prob->rcosts_; double tolerance = prob->ztolzb_; for (const action *f = &actions[nactions-1]; actions<=f; f--) { int icol = f->ithis; // was fixed int icol2 = f->ilast; // was kept dcost[icol] = dcost[icol2]; clo[icol] = f->thislo; cup[icol] = f->thisup; clo[icol2] = f->lastlo; cup[icol2] = f->lastup; create_col(icol,f->nincol,f->colels,mcstrt,colels,hrow,link, &prob->free_list_) ; # if PRESOLVE_CONSISTENCY presolve_check_free_list(prob) ; # endif // hincol[icol] = hincol[icol2]; // right? - no - has to match number in create_col hincol[icol] = f->nincol; double l_j = f->thislo; double u_j = f->thisup; double l_k = f->lastlo; double u_k = f->lastup; double x_k_sol = sol[icol2]; PRESOLVE_DETAIL_PRINT(printf("post icol %d %g %g %g icol2 %d %g %g %g\n", icol,clo[icol],sol[icol],cup[icol], icol2,clo[icol2],sol[icol2],cup[icol2])); if (l_j>-PRESOLVE_INF&& x_k_sol-l_j>=l_k-tolerance&&x_k_sol-l_j<=u_k+tolerance) { // j at lb, leave k prob->setColumnStatus(icol,CoinPrePostsolveMatrix::atLowerBound); sol[icol] = l_j; sol[icol2] = x_k_sol - sol[icol]; } else if (u_j=l_k-tolerance&&x_k_sol-u_j<=u_k+tolerance) { // j at ub, leave k prob->setColumnStatus(icol,CoinPrePostsolveMatrix::atUpperBound); sol[icol] = u_j; sol[icol2] = x_k_sol - sol[icol]; } else if (l_k>-PRESOLVE_INF&& x_k_sol-l_k>=l_j-tolerance&&x_k_sol-l_k<=u_j+tolerance) { // k at lb make j basic prob->setColumnStatus(icol,prob->getColumnStatus(icol2)); sol[icol2] = l_k; sol[icol] = x_k_sol - l_k; prob->setColumnStatus(icol2,CoinPrePostsolveMatrix::atLowerBound); } else if (u_k=l_j-tolerance&&x_k_sol-u_k<=u_j+tolerance) { // k at ub make j basic prob->setColumnStatus(icol,prob->getColumnStatus(icol2)); sol[icol2] = u_k; sol[icol] = x_k_sol - u_k; prob->setColumnStatus(icol2,CoinPrePostsolveMatrix::atUpperBound); } else { // both free! superbasic time sol[icol] = 0.0; // doesn't matter prob->setColumnStatus(icol,CoinPrePostsolveMatrix::isFree); } PRESOLVE_DETAIL_PRINT(printf("post2 icol %d %g icol2 %d %g\n", icol,sol[icol], icol2,sol[icol2])); // row activity doesn't change // dj of both variables is the same rcosts[icol] = rcosts[icol2]; // leave until destructor // deleteAction(f->colels,double *); # if PRESOLVE_DEBUG > 0 const double ztolzb = prob->ztolzb_; if (! (clo[icol] - ztolzb <= sol[icol] && sol[icol] <= cup[icol] + ztolzb)) printf("BAD DUPCOL BOUNDS: %g %g %g\n", clo[icol], sol[icol], cup[icol]); if (! (clo[icol2] - ztolzb <= sol[icol2] && sol[icol2] <= cup[icol2] + ztolzb)) printf("BAD DUPCOL BOUNDS: %g %g %g\n", clo[icol2], sol[icol2], cup[icol2]); # endif } // leave until desctructor // deleteAction(actions_,action *); } dupcol_action::~dupcol_action() { for (int i = nactions_-1; i >= 0; --i) { deleteAction(actions_[i].colels, double *); } deleteAction(actions_, action*); } /* Routines for duplicate rows. This is definitely unfinished --- there's no postsolve action. */ const char *duprow_action::name () const { return ("duprow_action"); } // This is just ekkredc4, adapted into the new framework. /* I've made minimal changes for compatibility with dupcol: An initial scan to accumulate rows of interest in sort. -- lh, 040909 -- */ const CoinPresolveAction *duprow_action::presolve (CoinPresolveMatrix *prob, const CoinPresolveAction *next) { double startTime = 0.0; int startEmptyRows=0; int startEmptyColumns = 0; if (prob->tuning_) { startTime = CoinCpuTime(); startEmptyRows = prob->countEmptyRows(); startEmptyColumns = prob->countEmptyCols(); } double *rowels = prob->rowels_; int *hcol = prob->hcol_; CoinBigIndex *mrstrt = prob->mrstrt_; int *hinrow = prob->hinrow_; int ncols = prob->ncols_; int nrows = prob->nrows_; /* Scan the rows for candidates, and write the indices into sort. We're not interested in rows that are empty or prohibited. Question: Should we exclude singletons, which are useful in other transforms? Question: Why are we excluding integral columns? */ int *sort = new int[nrows] ; int nlook = 0 ; for (int i = 0 ; i < nrows ; i++) { if (hinrow[i] == 0) continue ; if (prob->rowProhibited2(i)) continue ; // sort CoinSort_2(hcol+mrstrt[i],hcol+mrstrt[i]+hinrow[i], rowels+mrstrt[i]); sort[nlook++] = i ; } if (nlook == 0) { delete[] sort ; return (next) ; } double * workrow = new double[nrows+1]; double * workcol; if (!prob->randomNumber_) { workcol = new double[ncols+1]; coin_init_random_vec(workcol, ncols); } else { workcol = prob->randomNumber_; } compute_sums(nrows,hinrow,mrstrt,hcol,rowels,workcol,sort,workrow,nlook); CoinSort_2(workrow,workrow+nlook,sort); double *rlo = prob->rlo_; double *rup = prob->rup_; int nuseless_rows = 0; bool fixInfeasibility = ((prob->presolveOptions_&0x4000) != 0) ; bool allowIntersection = ((prob->presolveOptions_&0x10) != 0) ; double tolerance = prob->feasibilityTolerance_; double dval = workrow[0]; for (int jj = 1; jj < nlook; jj++) { if (workrow[jj]==dval) { int ithis=sort[jj]; int ilast=sort[jj-1]; CoinBigIndex krs = mrstrt[ithis]; CoinBigIndex kre = krs + hinrow[ithis]; if (hinrow[ithis] == hinrow[ilast]) { int ishift = mrstrt[ilast] - krs; CoinBigIndex k; for (k=krs;kstatus_|= 1; // wrong message - correct if works prob->messageHandler()->message(COIN_PRESOLVE_ROWINFEAS, prob->messages()) <rlo2 if (rup1<=rup2) { /* last is strictly tighter than this */ idelete=ithis; PRESOLVE_DETAIL_PRINT(printf("pre_duprow %dR %dR E\n",ithis,ilast)); // swap so can carry on deleting sort[jj-1]=ithis; sort[jj]=ilast; } else { /* overlapping - could merge */ // rlo1>rlo2 // rup1>rup2 if (rup2status_|= 1; // wrong message - correct if works prob->messageHandler()->message(COIN_PRESOLVE_ROWINFEAS, prob->messages()) <=0) sort[nuseless_rows++]=idelete; } } } dval=workrow[jj]; } delete[]workrow; if(workcol != prob->randomNumber_) delete[]workcol; if (nuseless_rows) { # if PRESOLVE_SUMMARY printf("DUPLICATE ROWS: %d\n", nuseless_rows); # endif next = useless_constraint_action::presolve(prob, sort, nuseless_rows, next); } delete[]sort; if (prob->tuning_) { double thisTime=CoinCpuTime(); int droppedRows = prob->countEmptyRows() - startEmptyRows ; int droppedColumns = prob->countEmptyCols() - startEmptyColumns; printf("CoinPresolveDuprow(256) - %d rows, %d columns dropped in time %g, total %g\n", droppedRows,droppedColumns,thisTime-startTime,thisTime-prob->startTime_); } return (next); } void duprow_action::postsolve(CoinPostsolveMatrix *) const { printf("STILL NO POSTSOLVE FOR DUPROW!\n"); abort(); } /* Routines for gub rows. This is definitely unfinished --- there's no postsolve action. This is potentially called from ClpPresolve and OsiPresolve. Unclear that it can be backed out --- there's no postsolve. */ const char *gubrow_action::name () const { return ("gubrow_action"); } const CoinPresolveAction *gubrow_action::presolve (CoinPresolveMatrix *prob, const CoinPresolveAction *next) { double startTime = 0.0; int droppedElements=0; int affectedRows=0; if (prob->tuning_) { startTime = CoinCpuTime(); } double *rowels = prob->rowels_; int *hcol = prob->hcol_; CoinBigIndex *mrstrt = prob->mrstrt_; int *hinrow = prob->hinrow_; double *colels = prob->colels_ ; int *hrow = prob->hrow_ ; CoinBigIndex *mcstrt = prob->mcstrt_ ; int *hincol = prob->hincol_ ; int ncols = prob->ncols_; int nrows = prob->nrows_; double *rlo = prob->rlo_; double *rup = prob->rup_; /* Scan the rows. We're not interested in rows that are empty or prohibited. */ int *which = prob->usefulRowInt_; int * number = which + nrows; double * els = prob->usefulRowDouble_; char * markCol = reinterpret_cast (prob->usefulColumnInt_); memset(markCol,0,ncols); CoinZeroN(els,nrows); for (int i = 0 ; i < nrows ; i++) { int nInRow = hinrow[i]; if (nInRow>1 &&!prob->rowProhibited2(i)&&rlo[i]==rup[i]) { CoinBigIndex rStart = mrstrt[i]; CoinBigIndex k = rStart; CoinBigIndex rEnd = rStart+nInRow; double value1=rowels[k]; k++; for (;krlink_,iRow) ; double value =(rlo[i]/value1)*els[iRow]; // correct rhs if (rlo[iRow]>-1.0e20) rlo[iRow] -= value; if (rup[iRow]<1.0e20) rup[iRow] -= value; } els[iRow]=0.0; } for (k=rStart;ktuning_) { double thisTime=CoinCpuTime(); printf("CoinPresolveGubrow(1024) - %d elements dropped (%d rows) in time %g, total %g\n", droppedElements,affectedRows,thisTime-startTime,thisTime-prob->startTime_); } else if (droppedElements) { #ifdef CLP_INVESTIGATE printf("CoinPresolveGubrow(1024) - %d elements dropped (%d rows)\n", droppedElements,affectedRows); #endif } return (next); } void gubrow_action::postsolve(CoinPostsolveMatrix *) const { printf("STILL NO POSTSOLVE FOR GUBROW!\n"); abort(); } /* Routines for two by two blocks. This is definitely unfinished --- there's no postsolve action. */ const char *twoxtwo_action::name () const { return ("twoxtwo_action"); } const CoinPresolveAction *twoxtwo_action::presolve (CoinPresolveMatrix *prob, const CoinPresolveAction *next) { double startTime = 0.0; int startEmptyRows=0; int startEmptyColumns = 0; if (prob->tuning_) { startTime = CoinCpuTime(); startEmptyRows = prob->countEmptyRows(); startEmptyColumns = prob->countEmptyCols(); } // maximum number of records action * boundRecords = new action[(prob->nrows_+1)>>1]; int nactions=0; // column-major representation const int ncols = prob->ncols_ ; const CoinBigIndex *const mcstrt = prob->mcstrt_ ; const int *const hincol = prob->hincol_ ; const int *const hrow = prob->hrow_ ; const double * colels = prob->colels_ ; double * cost = prob->cost_ ; // column type, bounds, solution, and status const unsigned char *const integerType = prob->integerType_ ; double * clo = prob->clo_ ; double * cup = prob->cup_ ; // row-major representation //const int nrows = prob->nrows_ ; const CoinBigIndex *const mrstrt = prob->mrstrt_ ; const int *const hinrow = prob->hinrow_ ; const int *const hcol = prob->hcol_ ; const double * rowels = prob->rowels_ ; // row bounds double * rlo = prob->rlo_ ; double * rup = prob->rup_ ; // tolerances //const double ekkinf2 = PRESOLVE_SMALL_INF ; //const double ekkinf = ekkinf2*1.0e8 ; //const double ztolcbarj = prob->ztoldj_ ; //const CoinRelFltEq relEq(prob->ztolzb_) ; double bound[2]; double alpha[2]={0.0,0.0}; double offset=0.0; for (int icol=0;icol-1.0e30) { if (rup[row0]>1.0e30) { swapSigns0=true; rowUpper0=-rlo[row0]; element0=-element0; } else { // range or equality continue; } } else if (rup[row0]>1.0e30) { // free continue; } #if 0 // skip here for speed // skip if no cost (should be able to get rid of) if (!cost[icol]) { PRESOLVE_DETAIL_PRINT(printf("should be able to get rid of %d with no cost\n",icol)); continue; } // skip if negative cost for now if (cost[icol]<0.0) { PRESOLVE_DETAIL_PRINT(printf("code for negative cost\n")); continue; } #endif double element1 = colels[start+1]; double rowUpper1=rup[row1]; bool swapSigns1=false; if (rlo[row1]>-1.0e30) { if (rup[row1]>1.0e30) { swapSigns1=true; rowUpper1=-rlo[row1]; element1=-element1; } else { // range or equality continue; } } else if (rup[row1]>1.0e30) { // free continue; } double lowerX=clo[icol]; double upperX=cup[icol]; int otherCol=-1; CoinBigIndex startRow=mrstrt[row0]; for (CoinBigIndex j=startRow;j0.0) { if (value<0.0) infLow0 =true; } else if (alpha[0]<0.0) { if (value>0.0) infLow0 =true; } if (alpha[1]>0.0) { if (value<0.0) infLow1 =true; } else if (alpha[1]<0.0) { if (value>0.0) infLow1 =true; } } /* Got sums */ double thisLowest0=-COIN_DBL_MAX; double thisHighest0=COIN_DBL_MAX; if (element0>0.0) { // upper bound unless inf&2 !=0 if (!infLow0) thisHighest0 = (rowUpper0-sum0)/element0; } else { // lower bound unless inf&2 !=0 if (!infLow0) thisLowest0 = (rowUpper0-sum0)/element0; } double thisLowest1=-COIN_DBL_MAX; double thisHighest1=COIN_DBL_MAX; if (element1>0.0) { // upper bound unless inf&2 !=0 if (!infLow1) thisHighest1 = (rowUpper1-sum1)/element1; } else { // lower bound unless inf&2 !=0 if (!infLow1) thisLowest1 = (rowUpper1-sum1)/element1; } if (thisLowest0>thisLowest1+1.0e-12) { if (thisLowest0>lowerX+1.0e-12) binding0|= 1<thisLowest0+1.0e-12) { if (thisLowest1>lowerX+1.0e-12) binding1|= 1<=0.0) { if (highestLowest=lowerX&&highestHighest<1.0e30) { highestHighest=CoinMin(highestHighest,highestLowest); } } if (cost[icol]<=0.0) { if (lowestHighest>lowerX&&lowestHighest<=upperX&&lowestHighest>-1.0e30) { lowestLowest=CoinMax(lowestLowest,lowestHighest); } } #if 1 if (lowestLowest>lowerX+1.0e-8) { PRESOLVE_DETAIL_PRINT(printf("Can increase lower bound on %d from %g to %g\n", icol,lowerX,lowestLowest)); lowerX=lowestLowest; } if (highestHighest0 so will be at lower //double yValueAtBound0=newLower; newUpper=CoinMax(newUpper,CoinMax(yValue0,yValue1)); xValue=bound[1]; yValue0=(rowUpper0-xValue*alpha[0])/element0; yValue1=(rowUpper1-xValue*alpha[1])/element1; PRESOLVE_DETAIL_PRINT(printf("value of %d is %g, value of %d is max(%g,%g) - %g\n", otherCol,xValue,icol,yValue0,yValue1,CoinMax(yValue0,yValue1))); newLower=CoinMin(newLower,CoinMax(yValue0,yValue1)); // cost>0 so will be at lower //double yValueAtBound1=newLower; newUpper=CoinMax(newUpper,CoinMax(yValue0,yValue1)); lowerX=CoinMax(lowerX,newLower-1.0e-12*fabs(newLower)); upperX=CoinMin(upperX,newUpper+1.0e-12*fabs(newUpper)); // Now make duplicate row // keep row 0 so need to adjust costs so same PRESOLVE_DETAIL_PRINT(printf("Costs for x %g,%g,%g are %g,%g,%g\n", xValueEqual-1.0,xValueEqual,xValueEqual+1.0, costEqual-slope[0],costEqual,costEqual+slope[1])); double costOther=cost[otherCol]+slope[1]; double costThis=cost[icol]+slope[1]*(element0/alpha[0]); xValue=xValueEqual; yValue0=CoinMax((rowUpper0-xValue*alpha[0])/element0,lowerX); double thisOffset=costEqual-(costOther*xValue+costThis*yValue0); offset += thisOffset; PRESOLVE_DETAIL_PRINT(printf("new cost at equal %g\n",costOther*xValue+costThis*yValue0+thisOffset)); xValue=xValueEqual-1.0; yValue0=CoinMax((rowUpper0-xValue*alpha[0])/element0,lowerX); PRESOLVE_DETAIL_PRINT(printf("new cost at -1 %g\n",costOther*xValue+costThis*yValue0+thisOffset)); assert(fabs((costOther*xValue+costThis*yValue0+thisOffset)-(costEqual-slope[0]))<1.0e-5); xValue=xValueEqual+1.0; yValue0=CoinMax((rowUpper0-xValue*alpha[0])/element0,lowerX); PRESOLVE_DETAIL_PRINT(printf("new cost at +1 %g\n",costOther*xValue+costThis*yValue0+thisOffset)); assert(fabs((costOther*xValue+costThis*yValue0+thisOffset)-(costEqual+slope[1]))<1.0e-5); action & boundRecord = boundRecords[nactions++] ; boundRecord.row=row1; boundRecord.col=icol; boundRecord.othercol=otherCol; boundRecord.lbound_row=rlo[row1]; boundRecord.ubound_row=rup[row1]; boundRecord.lbound_col=clo[icol]; boundRecord.ubound_col=cup[icol]; boundRecord.cost_col=cost[icol]; boundRecord.cost_othercol=cost[otherCol]; cost[otherCol] = costOther; cost[icol] = costThis; clo[icol]=lowerX; cup[icol]=upperX; // make row useless rlo[row1]=-COIN_DBL_MAX; rup[row1]=COIN_DBL_MAX; } } } } if (nactions) { # if PRESOLVE_SUMMARY printf("Cost offset %g - from %d blocks\n",offset,nactions); printf("TWO by TWO blocks: %d - offset %g\n", nactions,offset); # endif action * actions = new action[nactions]; memcpy(actions,boundRecords,nactions*sizeof(action)); next = new twoxtwo_action(nactions,actions,next); int *sort = prob->usefulColumnInt_; for (int i=0;ichange_bias(offset); } delete [] boundRecords; if (prob->tuning_) { double thisTime=CoinCpuTime(); int droppedRows = prob->countEmptyRows() - startEmptyRows ; int droppedColumns = prob->countEmptyCols() - startEmptyColumns; printf("CoinPresolveTwoxtwo(2048) - %d rows, %d columns dropped in time %g, total %g\n", droppedRows,droppedColumns,thisTime-startTime,thisTime-prob->startTime_); } return (next); } void twoxtwo_action::postsolve(CoinPostsolveMatrix * prob) const { const CoinBigIndex *const mcstrt = prob->mcstrt_ ; const int *const hincol = prob->hincol_ ; const int *const hrow = prob->hrow_ ; const double * colels = prob->colels_ ; int *link = prob->link_; double * cost = prob->cost_ ; // column type, bounds, solution, and status //const unsigned char *const integerType = prob->integerType_ ; double * clo = prob->clo_ ; double * cup = prob->cup_ ; // row bounds double * rlo = prob->rlo_ ; double * rup = prob->rup_ ; double *sol = prob->sol_; double *rcosts = prob->rcosts_; double * rowacts = prob->acts_; double * dual = prob->rowduals_; double tolerance = prob->ztolzb_; const double maxmin = prob->maxmin_; for (int iAction=0;iActionsetRowStatus(row1,CoinPrePostsolveMatrix::basic); // put stuff back rlo[row1]=boundRecord.lbound_row; rup[row1]=boundRecord.ubound_row; clo[icol]=boundRecord.lbound_col; cup[icol]=boundRecord.ubound_col; double oldCost=cost[icol]; //double oldOtherCost=cost[otherCol]; cost[icol]=boundRecord.cost_col; cost[otherCol]=boundRecord.cost_othercol; double els0real[2]; double els1real[2]; els0real[0]=els0[0]; els0real[1]=els0[1]; els1real[0]=els1[0]; els1real[1]=els1[1]; // make <= rows double rowUpper0=rup[row0]; if (rlo[row0]>-1.0e30) { rowUpper0=-rlo[row0]; els0[0]=-els0[0]; els0[1]=-els0[1]; } double rowUpper1=rup[row1]; bool swapSigns1=false; if (rlo[row1]>-1.0e30) { swapSigns1=true; rowUpper1=-rlo[row1]; els1[0]=-els1[0]; els1[1]=-els1[1]; } // compute feasible value for icol double valueOther=sol[otherCol]; double value; // first see if at bound is OK bool lowerBoundPossible = clo[icol]>-1.0e30; value=clo[icol]; if (lowerBoundPossible) { double value0 = els0[0]*valueOther + els0[1]*value; if (value0>rowUpper0+tolerance) lowerBoundPossible=false; double value1 = els1[0]*valueOther + els1[1]*value; if (value1>rowUpper1+tolerance) lowerBoundPossible=false; } bool upperBoundPossible = cup[icol]<1.0e30; value=cup[icol]; if (upperBoundPossible) { double value0 = els0[0]*valueOther + els0[1]*value; if (value0>rowUpper0+tolerance) upperBoundPossible=false; double value1 = els1[0]*valueOther + els1[1]*value; if (value1>rowUpper1+tolerance) upperBoundPossible=false; } if (lowerBoundPossible&&cost[icol]>=0.0) { // set to lower bound prob->setColumnStatus(icol,CoinPrePostsolveMatrix::atLowerBound); sol[icol]=clo[icol]; rcosts[icol]=maxmin*cost[icol]-dual[row0]*els0real[1]; } else if (upperBoundPossible&&cost[icol]<=0.0) { // set to upper bound prob->setColumnStatus(icol,CoinPrePostsolveMatrix::atUpperBound); sol[icol]=cup[icol]; rcosts[icol]=maxmin*cost[icol]-dual[row0]*els0real[1]; } else { // need to make basic // we shouldn't get here (at present) if zero cost assert (cost[icol]); double value0 = (rowUpper0-els0[0]*valueOther)/els0[1]; double value1 = (rowUpper1-els1[0]*valueOther)/els1[1]; //bool binding0=true; double value; if (cost[icol]>0) { if (value0>value1) { value=value0; } else { value=value1; //binding0=false; } } else { if (value0getRowStatus(row0), row1,prob->getRowStatus(row1), otherCol,prob->getColumnStatus(otherCol), icol,prob->getColumnStatus(icol),binding0 ? 'T' : 'F'); #endif if (prob->getColumnStatus(icol)==CoinPrePostsolveMatrix::basic) { //printf("col %d above was basic\n",icol); if (prob->getRowStatus(row0)!=CoinPrePostsolveMatrix::basic) { // adjust dual dual[row0]=maxmin*((cost[icol]-oldCost)/els0real[1]); } continue; } //if (binding0) //printf("Says row0 %d binding?\n",row0); prob->setColumnStatus(icol,CoinPrePostsolveMatrix::basic); rcosts[icol]=0.0; //printf("row1 %d taken out of basis\n",row1); if (!swapSigns1) { prob->setRowStatus(row1,CoinPrePostsolveMatrix::atUpperBound); rowacts[row1]=rup[row1]; } else { prob->setRowStatus(row1,CoinPrePostsolveMatrix::atLowerBound); rowacts[row1]=rlo[row1]; } dual[row1]=maxmin*((cost[icol]-oldCost)/els1real[1]); if (iAction==-1) abort(); } } } CoinUtils-2.9.10/CoinUtils/src/CoinTime.hpp0000644000076600007660000002141211510456064017114 0ustar coincoin/* $Id: CoinTime.hpp 1372 2011-01-03 23:31:00Z lou $ */ // 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). #ifndef _CoinTime_hpp #define _CoinTime_hpp // Uncomment the next three lines for thorough memory initialisation. // #ifndef ZEROFAULT // # define ZEROFAULT // #endif //############################################################################# #include #if defined(_MSC_VER) // Turn off compiler warning about long names # pragma warning(disable:4786) #else // MacOS-X and FreeBSD needs sys/time.h #if defined(__MACH__) || defined (__FreeBSD__) #include #endif #if !defined(__MSVCRT__) #include #endif #endif //############################################################################# #if defined(_MSC_VER) #if 0 // change this to 1 if want to use the win32 API #include #ifdef small /* for some unfathomable reason (to me) rpcndr.h (pulled in by windows.h) does a '#define small char' */ #undef small #endif #define TWO_TO_THE_THIRTYTWO 4294967296.0 #define DELTA_EPOCH_IN_SECS 11644473600.0 inline double CoinGetTimeOfDay() { FILETIME ft; GetSystemTimeAsFileTime(&ft); double t = ft.dwHighDateTime * TWO_TO_THE_THIRTYTWO + ft.dwLowDateTime; t = t/10000000.0 - DELTA_EPOCH_IN_SECS; return t; } #else #include #include inline double CoinGetTimeOfDay() { struct _timeb timebuffer; #pragma warning(disable:4996) _ftime( &timebuffer ); // C4996 #pragma warning(default:4996) return timebuffer.time + timebuffer.millitm/1000.0; } #endif #else #include inline double CoinGetTimeOfDay() { struct timeval tv; gettimeofday(&tv, NULL); return static_cast(tv.tv_sec) + static_cast(tv.tv_usec)/1000000.0; } #endif // _MSC_VER /** Query the elapsed wallclock time since the first call to this function. If a positive argument is passed to the function then the time of the first call is set to that value (this kind of argument is allowed only at the first call!). If a negative argument is passed to the function then it returns the time when it was set. */ inline double CoinWallclockTime(double callType = 0) { double callTime = CoinGetTimeOfDay(); static const double firstCall = callType > 0 ? callType : callTime; return callType < 0 ? firstCall : callTime - firstCall; } //############################################################################# //#define HAVE_SDK // if SDK under Win32 is installed, for CPU instead of elapsed time under Win #ifdef HAVE_SDK #include #ifdef small /* for some unfathomable reason (to me) rpcndr.h (pulled in by windows.h) does a '#define small char' */ #undef small #endif #define TWO_TO_THE_THIRTYTWO 4294967296.0 #endif static inline double CoinCpuTime() { double cpu_temp; #if defined(_MSC_VER) || defined(__MSVCRT__) #ifdef HAVE_SDK FILETIME creation; FILETIME exit; FILETIME kernel; FILETIME user; GetProcessTimes(GetCurrentProcess(), &creation, &exit, &kernel, &user); double t = user.dwHighDateTime * TWO_TO_THE_THIRTYTWO + user.dwLowDateTime; return t/10000000.0; #else unsigned int ticksnow; /* clock_t is same as int */ ticksnow = (unsigned int)clock(); cpu_temp = (double)((double)ticksnow/CLOCKS_PER_SEC); #endif #else struct rusage usage; # ifdef ZEROFAULT usage.ru_utime.tv_sec = 0 ; usage.ru_utime.tv_usec = 0 ; # endif getrusage(RUSAGE_SELF,&usage); cpu_temp = static_cast(usage.ru_utime.tv_sec); cpu_temp += 1.0e-6*(static_cast (usage.ru_utime.tv_usec)); #endif return cpu_temp; } //############################################################################# static inline double CoinSysTime() { double sys_temp; #if defined(_MSC_VER) || defined(__MSVCRT__) sys_temp = 0.0; #else struct rusage usage; # ifdef ZEROFAULT usage.ru_utime.tv_sec = 0 ; usage.ru_utime.tv_usec = 0 ; # endif getrusage(RUSAGE_SELF,&usage); sys_temp = static_cast(usage.ru_stime.tv_sec); sys_temp += 1.0e-6*(static_cast (usage.ru_stime.tv_usec)); #endif return sys_temp; } //############################################################################# // On most systems SELF seems to include children threads, This is for when it doesn't static inline double CoinCpuTimeJustChildren() { double cpu_temp; #if defined(_MSC_VER) || defined(__MSVCRT__) cpu_temp = 0.0; #else struct rusage usage; # ifdef ZEROFAULT usage.ru_utime.tv_sec = 0 ; usage.ru_utime.tv_usec = 0 ; # endif getrusage(RUSAGE_CHILDREN,&usage); cpu_temp = static_cast(usage.ru_utime.tv_sec); cpu_temp += 1.0e-6*(static_cast (usage.ru_utime.tv_usec)); #endif return cpu_temp; } //############################################################################# #include /** This class implements a timer that also implements a tracing functionality. The timer stores the start time of the timer, for how much time it was set to and when does it expire (start + limit = end). Queries can be made that tell whether the timer is expired, is past an absolute time, is past a percentage of the length of the timer. All times are given in seconds, but as double numbers, so there can be fractional values. The timer can also be initialized with a stream and a specification whether to write to or read from the stream. In the former case the result of every query is written into the stream, in the latter case timing is not tested at all, rather the supposed result is read out from the stream. This makes it possible to exactly retrace time sensitive program execution. */ class CoinTimer { private: /// When the timer was initialized/reset/restarted double start; /// double limit; double end; #ifdef COIN_COMPILE_WITH_TRACING std::fstream* stream; bool write_stream; #endif private: #ifdef COIN_COMPILE_WITH_TRACING inline bool evaluate(bool b_tmp) const { int i_tmp = b_tmp; if (stream) { if (write_stream) (*stream) << i_tmp << "\n"; else (*stream) >> i_tmp; } return i_tmp; } inline double evaluate(double d_tmp) const { if (stream) { if (write_stream) (*stream) << d_tmp << "\n"; else (*stream) >> d_tmp; } return d_tmp; } #else inline bool evaluate(const bool b_tmp) const { return b_tmp; } inline double evaluate(const double d_tmp) const { return d_tmp; } #endif public: /// Default constructor creates a timer with no time limit and no tracing CoinTimer() : start(0), limit(1e100), end(1e100) #ifdef COIN_COMPILE_WITH_TRACING , stream(0), write_stream(true) #endif {} /// Create a timer with the given time limit and with no tracing CoinTimer(double lim) : start(CoinCpuTime()), limit(lim), end(start+lim) #ifdef COIN_COMPILE_WITH_TRACING , stream(0), write_stream(true) #endif {} #ifdef COIN_COMPILE_WITH_TRACING /** Create a timer with no time limit and with writing/reading the trace to/from the given stream, depending on the argument \c write. */ CoinTimer(std::fstream* s, bool write) : start(0), limit(1e100), end(1e100), stream(s), write_stream(write) {} /** Create a timer with the given time limit and with writing/reading the trace to/from the given stream, depending on the argument \c write. */ CoinTimer(double lim, std::fstream* s, bool w) : start(CoinCpuTime()), limit(lim), end(start+lim), stream(s), write_stream(w) {} #endif /// Restart the timer (keeping the same time limit) inline void restart() { start=CoinCpuTime(); end=start+limit; } /// An alternate name for \c restart() inline void reset() { restart(); } /// Reset (and restart) the timer and change its time limit inline void reset(double lim) { limit=lim; restart(); } /** Return whether the given percentage of the time limit has elapsed since the timer was started */ inline bool isPastPercent(double pct) const { return evaluate(start + limit * pct < CoinCpuTime()); } /** Return whether the given amount of time has elapsed since the timer was started */ inline bool isPast(double lim) const { return evaluate(start + lim < CoinCpuTime()); } /** Return whether the originally specified time limit has passed since the timer was started */ inline bool isExpired() const { return evaluate(end < CoinCpuTime()); } /** Return how much time is left on the timer */ inline double timeLeft() const { return evaluate(end - CoinCpuTime()); } /** Return how much time has elapsed */ inline double timeElapsed() const { return evaluate(CoinCpuTime() - start); } inline void setLimit(double l) { limit = l; return; } }; #endif CoinUtils-2.9.10/CoinUtils/src/CoinPresolveSingleton.hpp0000644000076600007660000000547711654260357021724 0ustar coincoin/* $Id: CoinPresolveSingleton.hpp 1498 2011-11-02 15:25:35Z mjs $ */ // 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). #ifndef CoinPresolveSingleton_H #define CoinPresolveSingleton_H #define SLACK_DOUBLETON 2 #define SLACK_SINGLETON 8 /*! \file */ //const int MAX_SLACK_DOUBLETONS = 1000; /*! \class slack_doubleton_action \brief Convert an explicit bound constraint to a column bound This transform looks for explicit bound constraints for a variable and transfers the bound to the appropriate column bound array. The constraint is removed from the constraint system. */ class slack_doubleton_action : public CoinPresolveAction { struct action { double clo; double cup; double rlo; double rup; double coeff; int col; int row; }; const int nactions_; const action *const actions_; slack_doubleton_action(int nactions, const action *actions, const CoinPresolveAction *next) : CoinPresolveAction(next), nactions_(nactions), actions_(actions) {} public: const char *name() const { return ("slack_doubleton_action"); } /*! \brief Convert explicit bound constraints to column bounds. Not now There is a hard limit (#MAX_SLACK_DOUBLETONS) on the number of constraints processed in a given call. \p notFinished is set to true if candidates remain. */ static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next, bool ¬Finished); void postsolve(CoinPostsolveMatrix *prob) const; virtual ~slack_doubleton_action() { deleteAction(actions_,action*); } }; /*! \class slack_singleton_action \brief For variables with one entry If we have a variable with one entry and no cost then we can transform the row from E to G etc. If there is a row objective region then we may be able to do this even with a cost. */ class slack_singleton_action : public CoinPresolveAction { struct action { double clo; double cup; double rlo; double rup; double coeff; int col; int row; }; const int nactions_; const action *const actions_; slack_singleton_action(int nactions, const action *actions, const CoinPresolveAction *next) : CoinPresolveAction(next), nactions_(nactions), actions_(actions) {} public: const char *name() const { return ("slack_singleton_action"); } static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next, double * rowObjective); void postsolve(CoinPostsolveMatrix *prob) const; virtual ~slack_singleton_action() { deleteAction(actions_,action*); } }; #endif CoinUtils-2.9.10/CoinUtils/src/CoinSearchTree.cpp0000644000076600007660000000472412131313741020237 0ustar coincoin/* $Id: CoinSearchTree.cpp 1590 2013-04-10 16:48:33Z stefan $ */ // 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 "CoinSearchTree.hpp" BitVector128::BitVector128() { bits_[0] = 0; bits_[1] = 0; bits_[2] = 0; bits_[3] = 0; } BitVector128::BitVector128(unsigned int bits[4]) { set(bits); } void BitVector128::set(unsigned int bits[4]) { bits_[0] = bits[0]; bits_[1] = bits[1]; bits_[2] = bits[2]; bits_[3] = bits[3]; } void BitVector128::setBit(int i) { int byte = i >> 5; int bit = i & 31; bits_[byte] |= (1 << bit); } void BitVector128::clearBit(int i) { int byte = i >> 5; int bit = i & 31; bits_[byte] &= ~(1 << bit); } std::string BitVector128::str() const { char output[33]; output[32] = 0; sprintf(output, "%08X%08X%08X%08X", bits_[3], bits_[2], bits_[1], bits_[0]); return output; } bool operator<(const BitVector128& b0, const BitVector128& b1) { if (b0.bits_[3] < b1.bits_[3]) return true; if (b0.bits_[3] > b1.bits_[3]) return false; if (b0.bits_[2] < b1.bits_[2]) return true; if (b0.bits_[2] > b1.bits_[2]) return false; if (b0.bits_[1] < b1.bits_[1]) return true; if (b0.bits_[1] > b1.bits_[1]) return false; return (b0.bits_[0] < b1.bits_[0]); } void CoinSearchTreeManager::newSolution(double solValue) { ++numSolution; hasUB_ = true; CoinTreeNode* top = candidates_->top(); const double q = top ? top->getQuality() : solValue; const bool switchToDFS = fabs(q) < 1e-3 ? (fabs(solValue) < 0.005) : ((solValue-q)/fabs(q) < 0.005); if (switchToDFS && dynamic_cast*>(candidates_) == NULL) { CoinSearchTree* cands = new CoinSearchTree(*candidates_); delete candidates_; candidates_ = cands; } } void CoinSearchTreeManager::reevaluateSearchStrategy() { const int n = candidates_->numInserted() % 1000; /* the tests below ensure that even if this method is not invoked after every push(), the search strategy will be reevaluated when n is ~500 */ if (recentlyReevaluatedSearchStrategy_) { if (n > 250 && n <= 500) { recentlyReevaluatedSearchStrategy_ = false; } } else { if (n > 500) { recentlyReevaluatedSearchStrategy_ = true; /* we can reevaluate things... */ } } } CoinUtils-2.9.10/CoinUtils/src/CoinModel.hpp0000644000076600007660000012157612130014662017263 0ustar coincoin/* $Id: CoinModel.hpp 1581 2013-04-06 12:48:50Z 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). #ifndef CoinModel_H #define CoinModel_H #include "CoinModelUseful.hpp" #include "CoinPackedMatrix.hpp" #include "CoinFinite.hpp" class CoinBaseModel { public: /**@name Constructors, destructor */ //@{ /// Default Constructor CoinBaseModel (); /// Copy constructor CoinBaseModel ( const CoinBaseModel &rhs); /// Assignment operator CoinBaseModel & operator=( const CoinBaseModel& rhs); /// Clone virtual CoinBaseModel * clone() const=0; /// Destructor virtual ~CoinBaseModel () ; //@} /**@name For getting information */ //@{ /// Return number of rows inline int numberRows() const { return numberRows_;} /// Return number of columns inline int numberColumns() const { return numberColumns_;} /// Return number of elements virtual CoinBigIndex numberElements() const = 0; /** Returns the (constant) objective offset This is the RHS entry for the objective row */ inline double objectiveOffset() const { return objectiveOffset_;} /// Set objective offset inline void setObjectiveOffset(double value) { objectiveOffset_=value;} /// Direction of optimization (1 - minimize, -1 - maximize, 0 - ignore inline double optimizationDirection() const { return optimizationDirection_; } /// Set direction of optimization (1 - minimize, -1 - maximize, 0 - ignore inline void setOptimizationDirection(double value) { optimizationDirection_=value;} /// Get print level 0 - off, 1 - errors, 2 - more inline int logLevel() const { return logLevel_;} /// Set print level 0 - off, 1 - errors, 2 - more void setLogLevel(int value); /// Return the problem name inline const char * getProblemName() const { return problemName_.c_str();} /// Set problem name void setProblemName(const char *name) ; /// Set problem name void setProblemName(const std::string &name) ; /// Return the row block name inline const std::string & getRowBlock() const { return rowBlockName_;} /// Set row block name inline void setRowBlock(const std::string &name) { rowBlockName_ = name;} /// Return the column block name inline const std::string & getColumnBlock() const { return columnBlockName_;} /// Set column block name inline void setColumnBlock(const std::string &name) { columnBlockName_ = name;} //@} protected: /**@name Data members */ //@{ /// Current number of rows int numberRows_; /// Current number of columns int numberColumns_; /// Direction of optimization (1 - minimize, -1 - maximize, 0 - ignore double optimizationDirection_; /// Objective offset to be passed on double objectiveOffset_; /// Problem name std::string problemName_; /// Rowblock name std::string rowBlockName_; /// Columnblock name std::string columnBlockName_; /** Print level. I could have gone for full message handling but this should normally be silent and lightweight. I can always change. 0 - no output 1 - on errors 2 - more detailed */ int logLevel_; //@} /// data }; /** This is a simple minded model which is stored in a format which makes it easier to construct and modify but not efficient for algorithms. It has to be passed across to ClpModel or OsiSolverInterface by addRows, addCol(umn)s or loadProblem. It may have up to four parts - 1) A matrix of doubles (or strings - see note A) 2) Column information including integer information and names 3) Row information including names 4) Quadratic objective (not implemented - but see A) This class is meant to make it more efficient to build a model. It is at its most efficient when all additions are done as addRow or as addCol but not mixed. If only 1 and 2 exist then solver.addColumns may be used to pass to solver, if only 1 and 3 exist then solver.addRows may be used. Otherwise solver.loadProblem must be used. If addRows and addColumns are mixed or if individual elements are set then the speed will drop to some extent and more memory will be used. It is also possible to iterate over existing elements and to access columns and rows by name. Again each of these use memory and cpu time. However memory is unlikely to be critical as most algorithms will use much more. Notes: A) Although this could be used to pass nonlinear information around the only use at present is to have named values e.g. value1 which can then be set to a value after model is created. I have no idea whether that could be useful but I thought it might be fun. Quadratic terms are allowed in strings! A solver could try and use this if so - the convention is that 0.5* quadratic is stored B) This class could be useful for modeling. */ class CoinModel : public CoinBaseModel { public: /**@name Useful methods for building model */ //@{ /** add a row - numberInRow may be zero */ void addRow(int numberInRow, const int * columns, const double * elements, double rowLower=-COIN_DBL_MAX, double rowUpper=COIN_DBL_MAX, const char * name=NULL); /// add a column - numberInColumn may be zero */ void addColumn(int numberInColumn, const int * rows, const double * elements, double columnLower=0.0, double columnUpper=COIN_DBL_MAX, double objectiveValue=0.0, const char * name=NULL, bool isInteger=false); /// add a column - numberInColumn may be zero */ inline void addCol(int numberInColumn, const int * rows, const double * elements, double columnLower=0.0, double columnUpper=COIN_DBL_MAX, double objectiveValue=0.0, const char * name=NULL, bool isInteger=false) { addColumn(numberInColumn, rows, elements, columnLower, columnUpper, objectiveValue, name,isInteger);} /// Sets value for row i and column j inline void operator() (int i,int j,double value) { setElement(i,j,value);} /// Sets value for row i and column j void setElement(int i,int j,double value) ; /** Gets sorted row - user must provide enough space (easiest is allocate number of columns). If column or element NULL then just returns number Returns number of elements */ int getRow(int whichRow, int * column, double * element); /** Gets sorted column - user must provide enough space (easiest is allocate number of rows). If row or element NULL then just returns number Returns number of elements */ int getColumn(int whichColumn, int * column, double * element); /// Sets quadratic value for column i and j void setQuadraticElement(int i,int j,double value) ; /// Sets value for row i and column j as string inline void operator() (int i,int j,const char * value) { setElement(i,j,value);} /// Sets value for row i and column j as string void setElement(int i,int j,const char * value) ; /// Associates a string with a value. Returns string id (or -1 if does not exist) int associateElement(const char * stringValue, double value); /** Sets rowLower (if row does not exist then all rows up to this are defined with default values and no elements) */ void setRowLower(int whichRow,double rowLower); /** Sets rowUpper (if row does not exist then all rows up to this are defined with default values and no elements) */ void setRowUpper(int whichRow,double rowUpper); /** Sets rowLower and rowUpper (if row does not exist then all rows up to this are defined with default values and no elements) */ void setRowBounds(int whichRow,double rowLower,double rowUpper); /** Sets name (if row does not exist then all rows up to this are defined with default values and no elements) */ void setRowName(int whichRow,const char * rowName); /** Sets columnLower (if column does not exist then all columns up to this are defined with default values and no elements) */ void setColumnLower(int whichColumn,double columnLower); /** Sets columnUpper (if column does not exist then all columns up to this are defined with default values and no elements) */ void setColumnUpper(int whichColumn,double columnUpper); /** Sets columnLower and columnUpper (if column does not exist then all columns up to this are defined with default values and no elements) */ void setColumnBounds(int whichColumn,double columnLower,double columnUpper); /** Sets columnObjective (if column does not exist then all columns up to this are defined with default values and no elements) */ void setColumnObjective(int whichColumn,double columnObjective); /** Sets name (if column does not exist then all columns up to this are defined with default values and no elements) */ void setColumnName(int whichColumn,const char * columnName); /** Sets integer state (if column does not exist then all columns up to this are defined with default values and no elements) */ void setColumnIsInteger(int whichColumn,bool columnIsInteger); /** Sets columnObjective (if column does not exist then all columns up to this are defined with default values and no elements) */ inline void setObjective(int whichColumn,double columnObjective) { setColumnObjective( whichColumn, columnObjective);} /** Sets integer state (if column does not exist then all columns up to this are defined with default values and no elements) */ inline void setIsInteger(int whichColumn,bool columnIsInteger) { setColumnIsInteger( whichColumn, columnIsInteger);} /** Sets integer (if column does not exist then all columns up to this are defined with default values and no elements) */ inline void setInteger(int whichColumn) { setColumnIsInteger( whichColumn, true);} /** Sets continuous (if column does not exist then all columns up to this are defined with default values and no elements) */ inline void setContinuous(int whichColumn) { setColumnIsInteger( whichColumn, false);} /** Sets columnLower (if column does not exist then all columns up to this are defined with default values and no elements) */ inline void setColLower(int whichColumn,double columnLower) { setColumnLower( whichColumn, columnLower);} /** Sets columnUpper (if column does not exist then all columns up to this are defined with default values and no elements) */ inline void setColUpper(int whichColumn,double columnUpper) { setColumnUpper( whichColumn, columnUpper);} /** Sets columnLower and columnUpper (if column does not exist then all columns up to this are defined with default values and no elements) */ inline void setColBounds(int whichColumn,double columnLower,double columnUpper) { setColumnBounds( whichColumn, columnLower, columnUpper);} /** Sets columnObjective (if column does not exist then all columns up to this are defined with default values and no elements) */ inline void setColObjective(int whichColumn,double columnObjective) { setColumnObjective( whichColumn, columnObjective);} /** Sets name (if column does not exist then all columns up to this are defined with default values and no elements) */ inline void setColName(int whichColumn,const char * columnName) { setColumnName( whichColumn, columnName);} /** Sets integer (if column does not exist then all columns up to this are defined with default values and no elements) */ inline void setColIsInteger(int whichColumn,bool columnIsInteger) { setColumnIsInteger( whichColumn, columnIsInteger);} /** Sets rowLower (if row does not exist then all rows up to this are defined with default values and no elements) */ void setRowLower(int whichRow,const char * rowLower); /** Sets rowUpper (if row does not exist then all rows up to this are defined with default values and no elements) */ void setRowUpper(int whichRow,const char * rowUpper); /** Sets columnLower (if column does not exist then all columns up to this are defined with default values and no elements) */ void setColumnLower(int whichColumn,const char * columnLower); /** Sets columnUpper (if column does not exist then all columns up to this are defined with default values and no elements) */ void setColumnUpper(int whichColumn,const char * columnUpper); /** Sets columnObjective (if column does not exist then all columns up to this are defined with default values and no elements) */ void setColumnObjective(int whichColumn,const char * columnObjective); /** Sets integer (if column does not exist then all columns up to this are defined with default values and no elements) */ void setColumnIsInteger(int whichColumn,const char * columnIsInteger); /** Sets columnObjective (if column does not exist then all columns up to this are defined with default values and no elements) */ inline void setObjective(int whichColumn,const char * columnObjective) { setColumnObjective( whichColumn, columnObjective);} /** Sets integer (if column does not exist then all columns up to this are defined with default values and no elements) */ inline void setIsInteger(int whichColumn,const char * columnIsInteger) { setColumnIsInteger( whichColumn, columnIsInteger);} /** Deletes all entries in row and bounds. Will be ignored by writeMps etc and will be packed down if asked for. */ void deleteRow(int whichRow); /** Deletes all entries in column and bounds and objective. Will be ignored by writeMps etc and will be packed down if asked for. */ void deleteColumn(int whichColumn); /** Deletes all entries in column and bounds. If last column the number of columns will be decremented and true returned. */ inline void deleteCol(int whichColumn) { deleteColumn(whichColumn);} /// Takes element out of matrix - returning position (<0 if not there); int deleteElement(int row, int column); /// Takes element out of matrix when position known void deleteThisElement(int row, int column,int position); /** Packs down all rows i.e. removes empty rows permanently. Empty rows have no elements and feasible bounds. returns number of rows deleted. */ int packRows(); /** Packs down all columns i.e. removes empty columns permanently. Empty columns have no elements and no objective. returns number of columns deleted. */ int packColumns(); /** Packs down all columns i.e. removes empty columns permanently. Empty columns have no elements and no objective. returns number of columns deleted. */ inline int packCols() { return packColumns();} /** Packs down all rows and columns. i.e. removes empty rows and columns permanently. Empty rows have no elements and feasible bounds. Empty columns have no elements and no objective. returns number of rows+columns deleted. */ int pack(); /** Sets columnObjective array */ void setObjective(int numberColumns,const double * objective) ; /** Sets columnLower array */ void setColumnLower(int numberColumns,const double * columnLower); /** Sets columnLower array */ inline void setColLower(int numberColumns,const double * columnLower) { setColumnLower( numberColumns, columnLower);} /** Sets columnUpper array */ void setColumnUpper(int numberColumns,const double * columnUpper); /** Sets columnUpper array */ inline void setColUpper(int numberColumns,const double * columnUpper) { setColumnUpper( numberColumns, columnUpper);} /** Sets rowLower array */ void setRowLower(int numberRows,const double * rowLower); /** Sets rowUpper array */ void setRowUpper(int numberRows,const double * rowUpper); /** Write the problem in MPS format to a file with the given filename. \param compression can be set to three values to indicate what kind of file should be written
  • 0: plain text (default)
  • 1: gzip compressed (.gz is appended to \c filename)
  • 2: bzip2 compressed (.bz2 is appended to \c filename) (TODO)
If the library was not compiled with the requested compression then writeMps falls back to writing a plain text file. \param formatType specifies the precision to used for values in the MPS file
  • 0: normal precision (default)
  • 1: extra accuracy
  • 2: IEEE hex
\param numberAcross specifies whether 1 or 2 (default) values should be specified on every data line in the MPS file. not const as may change model e.g. fill in default bounds */ int writeMps(const char *filename, int compression = 0, int formatType = 0, int numberAcross = 2, bool keepStrings=false) ; /** Check two models against each other. Return nonzero if different. Ignore names if that set. May modify both models by cleaning up */ int differentModel(CoinModel & other, bool ignoreNames); //@} /**@name For structured models */ //@{ /// Pass in CoinPackedMatrix (and switch off element updates) void passInMatrix(const CoinPackedMatrix & matrix); /** Convert elements to CoinPackedMatrix (and switch off element updates). Returns number of errors */ int convertMatrix(); /// Return a pointer to CoinPackedMatrix (or NULL) inline const CoinPackedMatrix * packedMatrix() const { return packedMatrix_;} /// Return pointers to original rows (for decomposition) inline const int * originalRows() const { return rowType_;} /// Return pointers to original columns (for decomposition) inline const int * originalColumns() const { return columnType_;} //@} /**@name For getting information */ //@{ /// Return number of elements inline CoinBigIndex numberElements() const { return numberElements_;} /// Return elements as triples inline const CoinModelTriple * elements() const { return elements_;} /// Returns value for row i and column j inline double operator() (int i,int j) const { return getElement(i,j);} /// Returns value for row i and column j double getElement(int i,int j) const; /// Returns value for row rowName and column columnName inline double operator() (const char * rowName,const char * columnName) const { return getElement(rowName,columnName);} /// Returns value for row rowName and column columnName double getElement(const char * rowName,const char * columnName) const; /// Returns quadratic value for columns i and j double getQuadraticElement(int i,int j) const; /** Returns value for row i and column j as string. Returns NULL if does not exist. Returns "Numeric" if not a string */ const char * getElementAsString(int i,int j) const; /** Returns pointer to element for row i column j. Only valid until next modification. NULL if element does not exist */ double * pointer (int i,int j) const; /** Returns position in elements for row i column j. Only valid until next modification. -1 if element does not exist */ int position (int i,int j) const; /** Returns first element in given row - index is -1 if none. Index is given by .index and value by .value */ CoinModelLink firstInRow(int whichRow) const ; /** Returns last element in given row - index is -1 if none. Index is given by .index and value by .value */ CoinModelLink lastInRow(int whichRow) const ; /** Returns first element in given column - index is -1 if none. Index is given by .index and value by .value */ CoinModelLink firstInColumn(int whichColumn) const ; /** Returns last element in given column - index is -1 if none. Index is given by .index and value by .value */ CoinModelLink lastInColumn(int whichColumn) const ; /** Returns next element in current row or column - index is -1 if none. Index is given by .index and value by .value. User could also tell because input.next would be NULL */ CoinModelLink next(CoinModelLink & current) const ; /** Returns previous element in current row or column - index is -1 if none. Index is given by .index and value by .value. User could also tell because input.previous would be NULL May not be correct if matrix updated. */ CoinModelLink previous(CoinModelLink & current) const ; /** Returns first element in given quadratic column - index is -1 if none. Index is given by .index and value by .value May not be correct if matrix updated. */ CoinModelLink firstInQuadraticColumn(int whichColumn) const ; /** Returns last element in given quadratic column - index is -1 if none. Index is given by .index and value by .value */ CoinModelLink lastInQuadraticColumn(int whichColumn) const ; /** Gets rowLower (if row does not exist then -COIN_DBL_MAX) */ double getRowLower(int whichRow) const ; /** Gets rowUpper (if row does not exist then +COIN_DBL_MAX) */ double getRowUpper(int whichRow) const ; /** Gets name (if row does not exist then NULL) */ const char * getRowName(int whichRow) const ; inline double rowLower(int whichRow) const { return getRowLower(whichRow);} /** Gets rowUpper (if row does not exist then COIN_DBL_MAX) */ inline double rowUpper(int whichRow) const { return getRowUpper(whichRow) ;} /** Gets name (if row does not exist then NULL) */ inline const char * rowName(int whichRow) const { return getRowName(whichRow);} /** Gets columnLower (if column does not exist then 0.0) */ double getColumnLower(int whichColumn) const ; /** Gets columnUpper (if column does not exist then COIN_DBL_MAX) */ double getColumnUpper(int whichColumn) const ; /** Gets columnObjective (if column does not exist then 0.0) */ double getColumnObjective(int whichColumn) const ; /** Gets name (if column does not exist then NULL) */ const char * getColumnName(int whichColumn) const ; /** Gets if integer (if column does not exist then false) */ bool getColumnIsInteger(int whichColumn) const ; /** Gets columnLower (if column does not exist then 0.0) */ inline double columnLower(int whichColumn) const { return getColumnLower(whichColumn);} /** Gets columnUpper (if column does not exist then COIN_DBL_MAX) */ inline double columnUpper(int whichColumn) const { return getColumnUpper(whichColumn) ;} /** Gets columnObjective (if column does not exist then 0.0) */ inline double columnObjective(int whichColumn) const { return getColumnObjective(whichColumn);} /** Gets columnObjective (if column does not exist then 0.0) */ inline double objective(int whichColumn) const { return getColumnObjective(whichColumn);} /** Gets name (if column does not exist then NULL) */ inline const char * columnName(int whichColumn) const { return getColumnName(whichColumn);} /** Gets if integer (if column does not exist then false) */ inline bool columnIsInteger(int whichColumn) const { return getColumnIsInteger(whichColumn);} /** Gets if integer (if column does not exist then false) */ inline bool isInteger(int whichColumn) const { return getColumnIsInteger(whichColumn);} /** Gets columnLower (if column does not exist then 0.0) */ inline double getColLower(int whichColumn) const { return getColumnLower(whichColumn);} /** Gets columnUpper (if column does not exist then COIN_DBL_MAX) */ inline double getColUpper(int whichColumn) const { return getColumnUpper(whichColumn) ;} /** Gets columnObjective (if column does not exist then 0.0) */ inline double getColObjective(int whichColumn) const { return getColumnObjective(whichColumn);} /** Gets name (if column does not exist then NULL) */ inline const char * getColName(int whichColumn) const { return getColumnName(whichColumn);} /** Gets if integer (if column does not exist then false) */ inline bool getColIsInteger(int whichColumn) const { return getColumnIsInteger(whichColumn);} /** Gets rowLower (if row does not exist then -COIN_DBL_MAX) */ const char * getRowLowerAsString(int whichRow) const ; /** Gets rowUpper (if row does not exist then +COIN_DBL_MAX) */ const char * getRowUpperAsString(int whichRow) const ; inline const char * rowLowerAsString(int whichRow) const { return getRowLowerAsString(whichRow);} /** Gets rowUpper (if row does not exist then COIN_DBL_MAX) */ inline const char * rowUpperAsString(int whichRow) const { return getRowUpperAsString(whichRow) ;} /** Gets columnLower (if column does not exist then 0.0) */ const char * getColumnLowerAsString(int whichColumn) const ; /** Gets columnUpper (if column does not exist then COIN_DBL_MAX) */ const char * getColumnUpperAsString(int whichColumn) const ; /** Gets columnObjective (if column does not exist then 0.0) */ const char * getColumnObjectiveAsString(int whichColumn) const ; /** Gets if integer (if column does not exist then false) */ const char * getColumnIsIntegerAsString(int whichColumn) const ; /** Gets columnLower (if column does not exist then 0.0) */ inline const char * columnLowerAsString(int whichColumn) const { return getColumnLowerAsString(whichColumn);} /** Gets columnUpper (if column does not exist then COIN_DBL_MAX) */ inline const char * columnUpperAsString(int whichColumn) const { return getColumnUpperAsString(whichColumn) ;} /** Gets columnObjective (if column does not exist then 0.0) */ inline const char * columnObjectiveAsString(int whichColumn) const { return getColumnObjectiveAsString(whichColumn);} /** Gets columnObjective (if column does not exist then 0.0) */ inline const char * objectiveAsString(int whichColumn) const { return getColumnObjectiveAsString(whichColumn);} /** Gets if integer (if column does not exist then false) */ inline const char * columnIsIntegerAsString(int whichColumn) const { return getColumnIsIntegerAsString(whichColumn);} /** Gets if integer (if column does not exist then false) */ inline const char * isIntegerAsString(int whichColumn) const { return getColumnIsIntegerAsString(whichColumn);} /// Row index from row name (-1 if no names or no match) int row(const char * rowName) const; /// Column index from column name (-1 if no names or no match) int column(const char * columnName) const; /// Returns type inline int type() const { return type_;} /// returns unset value inline double unsetValue() const { return -1.23456787654321e-97;} /// Creates a packed matrix - return number of errors int createPackedMatrix(CoinPackedMatrix & matrix, const double * associated); /** Fills in startPositive and startNegative with counts for +-1 matrix. If not +-1 then startPositive[0]==-1 otherwise counts and startPositive[numberColumns]== size - return number of errors */ int countPlusMinusOne(CoinBigIndex * startPositive, CoinBigIndex * startNegative, const double * associated); /** Creates +-1 matrix given startPositive and startNegative counts for +-1 matrix. */ void createPlusMinusOne(CoinBigIndex * startPositive, CoinBigIndex * startNegative, int * indices, const double * associated); /// Creates copies of various arrays - return number of errors int createArrays(double * & rowLower, double * & rowUpper, double * & columnLower, double * & columnUpper, double * & objective, int * & integerType, double * & associated); /// Says if strings exist inline bool stringsExist() const { return string_.numberItems()!=0;} /// Return string array inline const CoinModelHash * stringArray() const { return &string_;} /// Returns associated array inline double * associatedArray() const { return associated_;} /// Return rowLower array inline double * rowLowerArray() const { return rowLower_;} /// Return rowUpper array inline double * rowUpperArray() const { return rowUpper_;} /// Return columnLower array inline double * columnLowerArray() const { return columnLower_;} /// Return columnUpper array inline double * columnUpperArray() const { return columnUpper_;} /// Return objective array inline double * objectiveArray() const { return objective_;} /// Return integerType array inline int * integerTypeArray() const { return integerType_;} /// Return row names array inline const CoinModelHash * rowNames() const { return &rowName_;} /// Return column names array inline const CoinModelHash * columnNames() const { return &columnName_;} /// Reset row names inline void zapRowNames() { rowName_=CoinModelHash();} /// Reset column names inline void zapColumnNames() { columnName_=CoinModelHash();} /// Returns array of 0 or nonzero if can be a cut (or returns NULL) inline const int * cutMarker() const { return cut_;} /// Direction of optimization (1 - minimize, -1 - maximize, 0 - ignore inline double optimizationDirection() const { return optimizationDirection_; } /// Set direction of optimization (1 - minimize, -1 - maximize, 0 - ignore inline void setOptimizationDirection(double value) { optimizationDirection_=value;} /// Return pointer to more information inline void * moreInfo() const { return moreInfo_;} /// Set pointer to more information inline void setMoreInfo(void * info) { moreInfo_ = info;} /** Returns which parts of model are set 1 - matrix 2 - rhs 4 - row names 8 - column bounds and/or objective 16 - column names 32 - integer types */ int whatIsSet() const; //@} /**@name for block models - matrix will be CoinPackedMatrix */ //@{ /*! \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. */ void loadBlock (const CoinPackedMatrix& matrix, const double* collb, const double* colub, const double* obj, const double* rowlb, const double* rowub) ; /*! \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. */ void loadBlock (const CoinPackedMatrix& matrix, const double* collb, const double* colub, const double* obj, const char* rowsen, const double* rowrhs, const double* rowrng) ; /*! \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 loadBlock method using rowlb and rowub for default argument values. */ void loadBlock (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) ; /*! \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 loadBlock method using sense/rhs/range for default argument values. */ void loadBlock (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) ; //@} /**@name Constructors, destructor */ //@{ /** Default constructor. */ CoinModel(); /** Constructor with sizes. */ CoinModel(int firstRows, int firstColumns, int firstElements,bool noNames=false); /** Read a problem in MPS or GAMS format from the given filename. */ CoinModel(const char *fileName, int allowStrings=0); /** Read a problem from AMPL nl file NOTE - as I can't work out configure etc the source code is in Cbc_ampl.cpp! */ CoinModel( int nonLinear, const char * fileName,const void * info); /// From arrays CoinModel(int numberRows, int numberColumns, const CoinPackedMatrix * matrix, const double * rowLower, const double * rowUpper, const double * columnLower, const double * columnUpper, const double * objective); /// Clone virtual CoinBaseModel * clone() const; /** Destructor */ virtual ~CoinModel(); //@} /**@name Copy method */ //@{ /** The copy constructor. */ CoinModel(const CoinModel&); /// = CoinModel& operator=(const CoinModel&); //@} /**@name For debug */ //@{ /// Checks that links are consistent void validateLinks() const; //@} private: /// Resize void resize(int maximumRows, int maximumColumns, int maximumElements); /// Fill in default row information void fillRows(int which,bool forceCreation,bool fromAddRow=false); /// Fill in default column information void fillColumns(int which,bool forceCreation,bool fromAddColumn=false); /** Fill in default linked list information (1= row, 2 = column) Marked as const as list is mutable */ void fillList(int which, CoinModelLinkedList & list,int type) const ; /** Create a linked list and synchronize free type 1 for row 2 for column Marked as const as list is mutable */ void createList(int type) const; /// Adds one string, returns index int addString(const char * string); /** Gets a double from a string possibly containing named strings, returns unset if not found */ double getDoubleFromString(CoinYacc & info, const char * string); /// Frees value memory void freeStringMemory(CoinYacc & info); public: /// Fills in all associated - returning number of errors int computeAssociated(double * associated); /** Gets correct form for a quadratic row - user to delete If row is not quadratic then returns which other variables are involved with tiny (1.0e-100) elements and count of total number of variables which could not be put in quadratic form */ CoinPackedMatrix * quadraticRow(int rowNumber,double * linear, int & numberBad) const; /// Replaces a quadratic row void replaceQuadraticRow(int rowNumber,const double * linear, const CoinPackedMatrix * quadraticPart); /** If possible return a model where if all variables marked nonzero are fixed the problem will be linear. At present may only work if quadratic. Returns NULL if not possible */ CoinModel * reorder(const char * mark) const; /** Expands out all possible combinations for a knapsack If buildObj NULL then just computes space needed - returns number elements On entry numberOutput is maximum allowed, on exit it is number needed or -1 (as will be number elements) if maximum exceeded. numberOutput will have at least space to return values which reconstruct input. Rows returned will be original rows but no entries will be returned for any rows all of whose entries are in knapsack. So up to user to allow for this. If reConstruct >=0 then returns number of entrie which make up item "reConstruct" in expanded knapsack. Values in buildRow and buildElement; */ int expandKnapsack(int knapsackRow, int & numberOutput,double * buildObj, CoinBigIndex * buildStart, int * buildRow, double * buildElement,int reConstruct=-1) const; /// Sets cut marker array void setCutMarker(int size,const int * marker); /// Sets priority array void setPriorities(int size,const int * priorities); /// priorities (given for all columns (-1 if not integer) inline const int * priorities() const { return priority_;} /// For decomposition set original row and column indices void setOriginalIndices(const int * row, const int * column); private: /** Read a problem from AMPL nl file so not constructor so gdb will work */ void gdb( int nonLinear, const char * fileName, const void * info); /// returns jColumn (-2 if linear term, -1 if unknown) and coefficient int decodeBit(char * phrase, char * & nextPhrase, double & coefficient, bool ifFirst) const; /// Aborts with message about packedMatrix void badType() const; /**@name Data members */ //@{ /// Maximum number of rows int maximumRows_; /// Maximum number of columns int maximumColumns_; /// Current number of elements int numberElements_; /// Maximum number of elements int maximumElements_; /// Current number of quadratic elements int numberQuadraticElements_; /// Maximum number of quadratic elements int maximumQuadraticElements_; /// Row lower double * rowLower_; /// Row upper double * rowUpper_; /// Row names CoinModelHash rowName_; /** Row types. Has information - at present bit 0 - rowLower is a string bit 1 - rowUpper is a string NOTE - if converted to CoinPackedMatrix - may be indices of original rows (i.e. when decomposed) */ int * rowType_; /// Objective double * objective_; /// Column Lower double * columnLower_; /// Column Upper double * columnUpper_; /// Column names CoinModelHash columnName_; /// Integer information int * integerType_; /// Strings CoinModelHash string_; /** Column types. Has information - at present bit 0 - columnLower is a string bit 1 - columnUpper is a string bit 2 - objective is a string bit 3 - integer setting is a string NOTE - if converted to CoinPackedMatrix - may be indices of original columns (i.e. when decomposed) */ int * columnType_; /// If simple then start of each row/column int * start_; /// Actual elements CoinModelTriple * elements_; /// Actual elements as CoinPackedMatrix CoinPackedMatrix * packedMatrix_; /// Hash for elements mutable CoinModelHash2 hashElements_; /// Linked list for rows mutable CoinModelLinkedList rowList_; /// Linked list for columns mutable CoinModelLinkedList columnList_; /// Actual quadratic elements (always linked lists) CoinModelTriple * quadraticElements_; /// Hash for quadratic elements mutable CoinModelHash2 hashQuadraticElements_; /// Array for sorting indices int * sortIndices_; /// Array for sorting elements double * sortElements_; /// Size of sort arrays int sortSize_; /// Linked list for quadratic rows mutable CoinModelLinkedList quadraticRowList_; /// Linked list for quadratic columns mutable CoinModelLinkedList quadraticColumnList_; /// Size of associated values int sizeAssociated_; /// Associated values double * associated_; /// Number of SOS - all these are done in one go e.g. from ampl int numberSOS_; /// SOS starts int * startSOS_; /// SOS members int * memberSOS_; /// SOS type int * typeSOS_; /// SOS priority int * prioritySOS_; /// SOS reference double * referenceSOS_; /// priorities (given for all columns (-1 if not integer) int * priority_; /// Nonzero if row is cut - done in one go e.g. from ampl int * cut_; /// Pointer to more information void * moreInfo_; /** Type of build - -1 unset, 0 for row, 1 for column, 2 linked. 3 matrix is CoinPackedMatrix (and at present can't be modified); */ mutable int type_; /// True if no names EVER being used (for users who know what they are doing) bool noNames_; /** Links present (could be tested by sizes of objects) 0 - none, 1 - row links, 2 - column links, 3 - both */ mutable int links_; //@} }; /// Just function of single variable x double getFunctionValueFromString(const char * string, const char * x, double xValue); /// faster version double getDoubleFromString(CoinYacc & info, const char * string, const char * x, double xValue); #endif CoinUtils-2.9.10/CoinUtils/src/CoinPresolveUseless.hpp0000644000076600007660000000353112055734244021367 0ustar coincoin/* $Id: CoinPresolveUseless.hpp 1566 2012-11-29 19:33:56Z lou $ */ // 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). #ifndef CoinPresolveUseless_H #define CoinPresolveUseless_H #define USELESS 20 class useless_constraint_action : public CoinPresolveAction { struct action { double rlo; double rup; const int *rowcols; const double *rowels; int row; int ninrow; }; const int nactions_; const action *const actions_; useless_constraint_action(int nactions, const action *actions, const CoinPresolveAction *next); public: const char *name() const; // These rows are asserted to be useless, // that is, given a solution the row activity // must be in range. static const CoinPresolveAction *presolve(CoinPresolveMatrix * prob, const int *useless_rows, int nuseless_rows, const CoinPresolveAction *next); void postsolve(CoinPostsolveMatrix *prob) const; virtual ~useless_constraint_action(); }; /*! \relates useless_constraint_action \brief Scan constraints looking for useless constraints A front end to identify useless constraints and hand them to useless_constraint_action::presolve() for processing. In a bit more detail, the routine implements a greedy algorithm that identifies a set of necessary constraints. A constraint is necessary if it implies a tighter bound on a variable than the original column bound. These tighter column bounds are then used to calculate row activity and identify constraints that are useless given the presence of the necessary constraints. */ const CoinPresolveAction *testRedundant(CoinPresolveMatrix *prob, const CoinPresolveAction *next) ; #endif CoinUtils-2.9.10/CoinUtils/src/Makefile.am0000644000076600007660000001345211670247221016735 0ustar coincoin# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 1510 2011-12-08 23:56:01Z lou $ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign ######################################################################## # libCoinUtils # ######################################################################## # Name of the library compiled in this directory. # We want it to be installed in the $libdir directory lib_LTLIBRARIES = libCoinUtils.la # List all source files for this library, including headers libCoinUtils_la_SOURCES = \ config_coinutils.h \ CoinUtilsConfig.h \ Coin_C_defines.h \ CoinAlloc.cpp CoinAlloc.hpp \ CoinBuild.cpp CoinBuild.hpp \ CoinDenseVector.cpp CoinDenseVector.hpp \ CoinDistance.hpp \ CoinError.cpp CoinError.hpp \ CoinFactorization.hpp \ CoinFactorization1.cpp \ CoinFactorization2.cpp \ CoinFactorization3.cpp \ CoinFactorization4.cpp \ CoinSimpFactorization.hpp \ CoinSimpFactorization.cpp \ CoinDenseFactorization.hpp \ CoinDenseFactorization.cpp \ CoinOslFactorization.hpp \ CoinOslFactorization.cpp \ CoinOslFactorization2.cpp \ CoinOslFactorization3.cpp \ CoinOslC.h \ CoinFileIO.cpp CoinFileIO.hpp \ CoinFinite.cpp CoinFinite.hpp \ CoinFloatEqual.hpp \ CoinHelperFunctions.hpp \ CoinIndexedVector.cpp CoinIndexedVector.hpp \ CoinLpIO.cpp CoinLpIO.hpp \ CoinMessage.cpp CoinMessage.hpp \ CoinMessageHandler.cpp CoinMessageHandler.hpp \ CoinModel.cpp CoinModel.hpp \ CoinStructuredModel.cpp CoinStructuredModel.hpp \ CoinModelUseful.cpp CoinModelUseful.hpp \ CoinModelUseful2.cpp \ CoinMpsIO.cpp CoinMpsIO.hpp \ CoinPackedMatrix.cpp CoinPackedMatrix.hpp \ CoinPackedVector.cpp CoinPackedVector.hpp \ CoinPackedVectorBase.cpp CoinPackedVectorBase.hpp \ CoinParam.cpp CoinParamUtils.cpp CoinParam.hpp \ CoinPostsolveMatrix.cpp \ CoinPragma.hpp \ CoinPrePostsolveMatrix.cpp \ CoinPresolveDoubleton.cpp CoinPresolveDoubleton.hpp \ CoinPresolveDual.cpp CoinPresolveDual.hpp \ CoinPresolveDupcol.cpp CoinPresolveDupcol.hpp \ CoinPresolveEmpty.cpp CoinPresolveEmpty.hpp \ CoinPresolveFixed.cpp CoinPresolveFixed.hpp \ CoinPresolveForcing.cpp CoinPresolveForcing.hpp \ CoinPresolveHelperFunctions.cpp \ CoinPresolveImpliedFree.cpp CoinPresolveImpliedFree.hpp \ CoinPresolveIsolated.cpp CoinPresolveIsolated.hpp \ CoinPresolveMatrix.cpp CoinPresolveMatrix.hpp \ CoinPresolvePsdebug.cpp CoinPresolvePsdebug.hpp \ CoinPresolveMonitor.cpp CoinPresolveMonitor.hpp \ CoinPresolveSingleton.cpp CoinPresolveSingleton.hpp \ CoinPresolveSubst.cpp CoinPresolveSubst.hpp \ CoinPresolveTighten.cpp CoinPresolveTighten.hpp \ CoinPresolveTripleton.cpp CoinPresolveTripleton.hpp \ CoinPresolveUseless.cpp CoinPresolveUseless.hpp \ CoinPresolveZeros.cpp CoinPresolveZeros.hpp \ CoinSearchTree.cpp CoinSearchTree.hpp \ CoinShallowPackedVector.cpp CoinShallowPackedVector.hpp \ CoinSignal.hpp \ CoinSmartPtr.hpp \ CoinSnapshot.cpp CoinSnapshot.hpp \ CoinSort.hpp \ CoinTime.hpp \ CoinTypes.hpp \ CoinUtility.hpp \ CoinWarmStart.hpp \ CoinWarmStartBasis.cpp CoinWarmStartBasis.hpp \ CoinWarmStartVector.cpp CoinWarmStartVector.hpp \ CoinWarmStartDual.cpp CoinWarmStartDual.hpp \ CoinWarmStartPrimalDual.cpp CoinWarmStartPrimalDual.hpp # This is for libtool libCoinUtils_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 = $(GLPK_CFLAGS) # This line is necessary to allow VPATH compilation 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 'install/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = \ Coin_C_defines.h \ CoinAlloc.hpp \ CoinBuild.hpp \ CoinDenseVector.hpp \ CoinDistance.hpp \ CoinError.hpp \ CoinFactorization.hpp \ CoinSimpFactorization.hpp \ CoinDenseFactorization.hpp \ CoinOslFactorization.hpp \ CoinFileIO.hpp \ CoinFinite.hpp \ CoinFloatEqual.hpp \ CoinHelperFunctions.hpp \ CoinIndexedVector.hpp \ CoinLpIO.hpp \ CoinMessage.hpp \ CoinMessageHandler.hpp \ CoinModel.hpp \ CoinStructuredModel.hpp \ CoinModelUseful.hpp \ CoinMpsIO.hpp \ CoinPackedMatrix.hpp \ CoinPackedVector.hpp \ CoinPackedVectorBase.hpp \ CoinParam.hpp \ CoinPragma.hpp \ CoinPresolveDoubleton.hpp \ CoinPresolveDual.hpp \ CoinPresolveDupcol.hpp \ CoinPresolveEmpty.hpp \ CoinPresolveFixed.hpp \ CoinPresolveForcing.hpp \ CoinPresolveImpliedFree.hpp \ CoinPresolveIsolated.hpp \ CoinPresolveMatrix.hpp \ CoinPresolveMonitor.hpp \ CoinPresolvePsdebug.hpp \ CoinPresolveSingleton.hpp \ CoinPresolveSubst.hpp \ CoinPresolveTighten.hpp \ CoinPresolveTripleton.hpp \ CoinPresolveUseless.hpp \ CoinPresolveZeros.hpp \ CoinSearchTree.hpp \ CoinShallowPackedVector.hpp \ CoinSignal.hpp \ CoinSmartPtr.hpp \ CoinSnapshot.hpp \ CoinSort.hpp \ CoinTime.hpp \ CoinTypes.hpp \ CoinUtility.hpp \ CoinWarmStart.hpp \ CoinWarmStartBasis.hpp \ CoinWarmStartVector.hpp \ CoinWarmStartDual.hpp \ CoinWarmStartPrimalDual.hpp ####################################################################### # Create the Config.h file that has all public defines and install it # ####################################################################### install-exec-local: $(install_sh_DATA) config_coinutils.h $(DESTDIR)$(includecoindir)/CoinUtilsConfig.h uninstall-local: rm -f $(DESTDIR)$(includecoindir)/CoinUtilsConfig.h CoinUtils-2.9.10/CoinUtils/src/CoinDenseFactorization.hpp0000644000076600007660000003236311552534611022021 0ustar coincoin/* $Id: CoinDenseFactorization.hpp 1416 2011-04-17 09:57:29Z stefan $ */ // Copyright (C) 2008, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). /* Authors John Forrest */ #ifndef CoinDenseFactorization_H #define CoinDenseFactorization_H #include #include #include #include "CoinTypes.hpp" #include "CoinIndexedVector.hpp" #include "CoinFactorization.hpp" class CoinPackedMatrix; /// Abstract base class which also has some scalars so can be used from Dense or Simp class CoinOtherFactorization { public: /**@name Constructors and destructor and copy */ //@{ /// Default constructor CoinOtherFactorization ( ); /// Copy constructor CoinOtherFactorization ( const CoinOtherFactorization &other); /// Destructor virtual ~CoinOtherFactorization ( ); /// = copy CoinOtherFactorization & operator = ( const CoinOtherFactorization & other ); /// Clone virtual CoinOtherFactorization * clone() const = 0; //@} /**@name general stuff such as status */ //@{ /// Returns status inline int status ( ) const { return status_; } /// Sets status inline void setStatus ( int value) { status_=value; } /// Returns number of pivots since factorization inline int pivots ( ) const { return numberPivots_; } /// Sets number of pivots since factorization inline void setPivots ( int value ) { numberPivots_=value; } /// Set number of Rows after factorization inline void setNumberRows(int value) { numberRows_ = value; } /// Number of Rows after factorization inline int numberRows ( ) const { return numberRows_; } /// Total number of columns in factorization inline int numberColumns ( ) const { return numberColumns_; } /// Number of good columns in factorization inline int numberGoodColumns ( ) const { return numberGoodU_; } /// Allows change of pivot accuracy check 1.0 == none >1.0 relaxed inline void relaxAccuracyCheck(double value) { relaxCheck_ = value;} inline double getAccuracyCheck() const { return relaxCheck_;} /// Maximum number of pivots between factorizations inline int maximumPivots ( ) const { return maximumPivots_ ; } /// Set maximum pivots virtual void maximumPivots ( int value ); /// Pivot tolerance inline double pivotTolerance ( ) const { return pivotTolerance_ ; } void pivotTolerance ( double value ); /// Zero tolerance inline double zeroTolerance ( ) const { return zeroTolerance_ ; } void zeroTolerance ( double value ); #ifndef COIN_FAST_CODE /// Whether slack value is +1 or -1 inline double slackValue ( ) const { return slackValue_ ; } void slackValue ( double value ); #endif /// Returns array to put basis elements in virtual CoinFactorizationDouble * elements() const; /// Returns pivot row virtual int * pivotRow() const; /// Returns work area virtual CoinFactorizationDouble * workArea() const; /// Returns int work area virtual int * intWorkArea() const; /// Number of entries in each row virtual int * numberInRow() const; /// Number of entries in each column virtual int * numberInColumn() const; /// Returns array to put basis starts in virtual CoinBigIndex * starts() const; /// Returns permute back virtual int * permuteBack() const; /** Get solve mode e.g. 0 C++ code, 1 Lapack, 2 choose If 4 set then values pass if 8 set then has iterated */ inline int solveMode() const { return solveMode_ ;} /** Set solve mode e.g. 0 C++ code, 1 Lapack, 2 choose If 4 set then values pass if 8 set then has iterated */ inline void setSolveMode(int value) { solveMode_ = value;} /// Returns true if wants tableauColumn in replaceColumn virtual bool wantsTableauColumn() const; /** Useful information for factorization 0 - iteration number whereFrom is 0 for factorize and 1 for replaceColumn */ virtual void setUsefulInformation(const int * info,int whereFrom); /// Get rid of all memory virtual void clearArrays() {} //@} /**@name virtual general stuff such as permutation */ //@{ /// Returns array to put basis indices in virtual int * indices() const = 0; /// Returns permute in virtual int * permute() const = 0; /// Total number of elements in factorization virtual int numberElements ( ) const = 0; //@} /**@name Do factorization - public */ //@{ /// Gets space for a factorization virtual void getAreas ( int numberRows, int numberColumns, CoinBigIndex maximumL, CoinBigIndex maximumU ) = 0; /// PreProcesses column ordered copy of basis virtual void preProcess ( ) = 0; /** Does most of factorization returning status 0 - OK -99 - needs more memory -1 - singular - use numberGoodColumns and redo */ virtual int factor ( ) = 0; /// Does post processing on valid factorization - putting variables on correct rows virtual void postProcess(const int * sequence, int * pivotVariable) = 0; /// Makes a non-singular basis by replacing variables virtual void makeNonSingular(int * sequence, int numberColumns) = 0; //@} /**@name rank one updates which do exist */ //@{ /** Replaces one Column to basis, returns 0=OK, 1=Probably OK, 2=singular, 3=no room If checkBeforeModifying is true will do all accuracy checks before modifying factorization. Whether to set this depends on speed considerations. You could just do this on first iteration after factorization and thereafter re-factorize partial update already in U */ virtual int replaceColumn ( CoinIndexedVector * regionSparse, int pivotRow, double pivotCheck , bool checkBeforeModifying=false, double acceptablePivot=1.0e-8)=0; //@} /**@name various uses of factorization (return code number elements) which user may want to know about */ //@{ /** Updates one column (FTRAN) from regionSparse2 Tries to do FT update number returned is negative if no room regionSparse starts as zero and is zero at end. Note - if regionSparse2 packed on input - will be packed on output */ virtual int updateColumnFT ( CoinIndexedVector * regionSparse, CoinIndexedVector * regionSparse2, bool noPermute=false) = 0; /** This version has same effect as above with FTUpdate==false so number returned is always >=0 */ virtual int updateColumn ( CoinIndexedVector * regionSparse, CoinIndexedVector * regionSparse2, bool noPermute=false) const = 0; /// does FTRAN on two columns virtual int updateTwoColumnsFT(CoinIndexedVector * regionSparse1, CoinIndexedVector * regionSparse2, CoinIndexedVector * regionSparse3, bool noPermute=false) = 0; /** Updates one column (BTRAN) from regionSparse2 regionSparse starts as zero and is zero at end Note - if regionSparse2 packed on input - will be packed on output */ virtual int updateColumnTranspose ( CoinIndexedVector * regionSparse, CoinIndexedVector * regionSparse2) const = 0; //@} ////////////////// data ////////////////// protected: /**@name data */ //@{ /// Pivot tolerance double pivotTolerance_; /// Zero tolerance double zeroTolerance_; #ifndef COIN_FAST_CODE /// Whether slack value is +1 or -1 double slackValue_; #else #ifndef slackValue_ #define slackValue_ -1.0 #endif #endif /// Relax check on accuracy in replaceColumn double relaxCheck_; /// Number of elements after factorization CoinBigIndex factorElements_; /// Number of Rows in factorization int numberRows_; /// Number of Columns in factorization int numberColumns_; /// Number factorized in U (not row singletons) int numberGoodU_; /// Maximum number of pivots before factorization int maximumPivots_; /// Number pivots since last factorization int numberPivots_; /// Status of factorization int status_; /// Maximum rows ever (i.e. use to copy arrays etc) int maximumRows_; /// Maximum length of iterating area CoinBigIndex maximumSpace_; /// Pivot row int * pivotRow_; /** Elements of factorization and updates length is maxR*maxR+maxSpace will always be long enough so can have nR*nR ints in maxSpace */ CoinFactorizationDouble * elements_; /// Work area of numberRows_ CoinFactorizationDouble * workArea_; /** Solve mode e.g. 0 C++ code, 1 Lapack, 2 choose If 4 set then values pass if 8 set then has iterated */ int solveMode_; //@} }; /** This deals with Factorization and Updates This is a simple dense version so other people can write a better one I am assuming that 32 bits is enough for number of rows or columns, but CoinBigIndex may be redefined to get 64 bits. */ class CoinDenseFactorization : public CoinOtherFactorization { friend void CoinDenseFactorizationUnitTest( const std::string & mpsDir ); public: /**@name Constructors and destructor and copy */ //@{ /// Default constructor CoinDenseFactorization ( ); /// Copy constructor CoinDenseFactorization ( const CoinDenseFactorization &other); /// Destructor virtual ~CoinDenseFactorization ( ); /// = copy CoinDenseFactorization & operator = ( const CoinDenseFactorization & other ); /// Clone virtual CoinOtherFactorization * clone() const ; //@} /**@name Do factorization - public */ //@{ /// Gets space for a factorization virtual void getAreas ( int numberRows, int numberColumns, CoinBigIndex maximumL, CoinBigIndex maximumU ); /// PreProcesses column ordered copy of basis virtual void preProcess ( ); /** Does most of factorization returning status 0 - OK -99 - needs more memory -1 - singular - use numberGoodColumns and redo */ virtual int factor ( ); /// Does post processing on valid factorization - putting variables on correct rows virtual void postProcess(const int * sequence, int * pivotVariable); /// Makes a non-singular basis by replacing variables virtual void makeNonSingular(int * sequence, int numberColumns); //@} /**@name general stuff such as number of elements */ //@{ /// Total number of elements in factorization virtual inline int numberElements ( ) const { return numberRows_*(numberColumns_+numberPivots_); } /// Returns maximum absolute value in factorization double maximumCoefficient() const; //@} /**@name rank one updates which do exist */ //@{ /** Replaces one Column to basis, returns 0=OK, 1=Probably OK, 2=singular, 3=no room If checkBeforeModifying is true will do all accuracy checks before modifying factorization. Whether to set this depends on speed considerations. You could just do this on first iteration after factorization and thereafter re-factorize partial update already in U */ virtual int replaceColumn ( CoinIndexedVector * regionSparse, int pivotRow, double pivotCheck , bool checkBeforeModifying=false, double acceptablePivot=1.0e-8); //@} /**@name various uses of factorization (return code number elements) which user may want to know about */ //@{ /** Updates one column (FTRAN) from regionSparse2 Tries to do FT update number returned is negative if no room regionSparse starts as zero and is zero at end. Note - if regionSparse2 packed on input - will be packed on output */ virtual inline int updateColumnFT ( CoinIndexedVector * regionSparse, CoinIndexedVector * regionSparse2, bool = false) { return updateColumn(regionSparse,regionSparse2);} /** This version has same effect as above with FTUpdate==false so number returned is always >=0 */ virtual int updateColumn ( CoinIndexedVector * regionSparse, CoinIndexedVector * regionSparse2, bool noPermute=false) const; /// does FTRAN on two columns virtual int updateTwoColumnsFT(CoinIndexedVector * regionSparse1, CoinIndexedVector * regionSparse2, CoinIndexedVector * regionSparse3, bool noPermute=false); /** Updates one column (BTRAN) from regionSparse2 regionSparse starts as zero and is zero at end Note - if regionSparse2 packed on input - will be packed on output */ virtual int updateColumnTranspose ( CoinIndexedVector * regionSparse, CoinIndexedVector * regionSparse2) const; //@} /// *** Below this user may not want to know about /**@name various uses of factorization which user may not want to know about (left over from my LP code) */ //@{ /// Get rid of all memory inline void clearArrays() { gutsOfDestructor();} /// Returns array to put basis indices in virtual inline int * indices() const { return reinterpret_cast (elements_+numberRows_*numberRows_);} /// Returns permute in virtual inline int * permute() const { return NULL;/*pivotRow_*/;} //@} /// The real work of desstructor void gutsOfDestructor(); /// The real work of constructor void gutsOfInitialize(); /// The real work of copy void gutsOfCopy(const CoinDenseFactorization &other); //@} protected: /** Returns accuracy status of replaceColumn returns 0=OK, 1=Probably OK, 2=singular */ int checkPivot(double saveFromU, double oldPivot) const; ////////////////// data ////////////////// protected: /**@name data */ //@{ //@} }; #endif CoinUtils-2.9.10/CoinUtils/src/CoinPresolveDoubleton.hpp0000644000076600007660000000311211654260357021675 0ustar coincoin/* $Id: CoinPresolveDoubleton.hpp 1498 2011-11-02 15:25:35Z mjs $ */ // 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). #ifndef CoinPresolveDoubleton_H #define CoinPresolveDoubleton_H #define DOUBLETON 5 /*! \class doubleton_action \brief Solve ax+by=c for y and substitute y out of the problem. This moves the bounds information for y onto x, making y free and allowing us to substitute it away. \verbatim a x + b y = c l1 <= x <= u1 l2 <= y <= u2 ==> l2 <= (c - a x) / b <= u2 b/-a > 0 ==> (b l2 - c) / -a <= x <= (b u2 - c) / -a b/-a < 0 ==> (b u2 - c) / -a <= x <= (b l2 - c) / -a \endverbatim */ class doubleton_action : public CoinPresolveAction { public: struct action { double clox; double cupx; double costx; double costy; double rlo; double coeffx; double coeffy; double *colel; int icolx; int icoly; int row; int ncolx; int ncoly; }; const int nactions_; const action *const actions_; private: doubleton_action(int nactions, const action *actions, const CoinPresolveAction *next) : CoinPresolveAction(next), nactions_(nactions), actions_(actions) {} public: const char *name() const { return ("doubleton_action"); } static const CoinPresolveAction *presolve(CoinPresolveMatrix *, const CoinPresolveAction *next); void postsolve(CoinPostsolveMatrix *prob) const; virtual ~doubleton_action(); }; #endif CoinUtils-2.9.10/CoinUtils/src/CoinWarmStartPrimalDual.hpp0000644000076600007660000001433611510456064022124 0ustar coincoin/* $Id: CoinWarmStartPrimalDual.hpp 1372 2011-01-03 23:31:00Z 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). #ifndef CoinWarmStartPrimalDual_H #define CoinWarmStartPrimalDual_H #include "CoinHelperFunctions.hpp" #include "CoinWarmStart.hpp" #include "CoinWarmStartVector.hpp" //############################################################################# /** WarmStart information that is only a dual vector */ class CoinWarmStartPrimalDual : public virtual CoinWarmStart { public: /// return the size of the dual vector inline int dualSize() const { return dual_.size(); } /// return a pointer to the array of duals inline const double * dual() const { return dual_.values(); } /// return the size of the primal vector inline int primalSize() const { return primal_.size(); } /// return a pointer to the array of primals inline const double * primal() const { return primal_.values(); } /** Assign the primal/dual vectors to be the warmstart information. In this method the object assumes ownership of the pointers and upon return \c primal and \c dual will be a NULL pointers. If copying is desirable use the constructor. NOTE: \c primal and \c dual must have been allocated by new double[], because they will be freed by delete[] upon the desructtion of this object... */ void assign(int primalSize, int dualSize, double*& primal, double *& dual) { primal_.assignVector(primalSize, primal); dual_.assignVector(dualSize, dual); } CoinWarmStartPrimalDual() : primal_(), dual_() {} CoinWarmStartPrimalDual(int primalSize, int dualSize, const double* primal, const double * dual) : primal_(primalSize, primal), dual_(dualSize, dual) {} CoinWarmStartPrimalDual(const CoinWarmStartPrimalDual& rhs) : primal_(rhs.primal_), dual_(rhs.dual_) {} CoinWarmStartPrimalDual& operator=(const CoinWarmStartPrimalDual& rhs) { if (this != &rhs) { primal_ = rhs.primal_; dual_ = rhs.dual_; } return *this; } /*! \brief Clear the data Make it appear as if the warmstart was just created using the default constructor. */ inline void clear() { primal_.clear(); dual_.clear(); } inline void swap(CoinWarmStartPrimalDual& rhs) { if (this != &rhs) { primal_.swap(rhs.primal_); dual_.swap(rhs.dual_); } } /** `Virtual constructor' */ virtual CoinWarmStart *clone() const { return new CoinWarmStartPrimalDual(*this); } virtual ~CoinWarmStartPrimalDual() {} /*! \name PrimalDual warm start `diff' methods */ //@{ /*! \brief Generate a `diff' that can convert the warm start passed as a parameter to the warm start specified by \c this. The capabilities are limited: the basis passed as a parameter can be no larger than the basis pointed to by \c this. */ virtual CoinWarmStartDiff* generateDiff (const CoinWarmStart *const oldCWS) const ; /*! \brief Apply \p diff to this warm start. Update this warm start by applying \p diff. It's assumed that the allocated capacity of the warm start is sufficiently large. */ virtual void applyDiff (const CoinWarmStartDiff *const cwsdDiff) ; //@} #if 0 protected: inline const CoinWarmStartVector& primalWarmStartVector() const { return primal_; } inline const CoinWarmStartVector& dualWarmStartVector() const { return dual_; } #endif private: ///@name Private data members //@{ CoinWarmStartVector primal_; CoinWarmStartVector dual_; //@} }; //############################################################################# /*! \class CoinWarmStartPrimalDualDiff \brief A `diff' between two CoinWarmStartPrimalDual objects This class exists in order to hide from the world the details of calculating and representing a `diff' between two CoinWarmStartPrimalDual objects. For convenience, assignment, cloning, and deletion are visible to the world, and default and copy constructors are made available to derived classes. Knowledge of the rest of this structure, and of generating and applying diffs, is restricted to the friend functions CoinWarmStartPrimalDual::generateDiff() and CoinWarmStartPrimalDual::applyDiff(). The actual data structure is a pair of vectors, #diffNdxs_ and #diffVals_. */ class CoinWarmStartPrimalDualDiff : public virtual CoinWarmStartDiff { friend CoinWarmStartDiff* CoinWarmStartPrimalDual::generateDiff(const CoinWarmStart *const oldCWS) const; friend void CoinWarmStartPrimalDual::applyDiff(const CoinWarmStartDiff *const diff) ; public: /*! \brief `Virtual constructor'. To be used when retaining polymorphism is important */ virtual CoinWarmStartDiff *clone() const { return new CoinWarmStartPrimalDualDiff(*this); } /*! \brief Destructor */ virtual ~CoinWarmStartPrimalDualDiff() {} protected: /*! \brief Default constructor This is protected (rather than private) so that derived classes can see it when they make their default constructor protected or private. */ CoinWarmStartPrimalDualDiff () : primalDiff_(), dualDiff_() {} /*! \brief Copy constructor For convenience when copying objects containing CoinWarmStartPrimalDualDiff objects. But consider whether you should be using #clone() to retain polymorphism. This is protected (rather than private) so that derived classes can see it when the make their copy constructor protected or private. */ CoinWarmStartPrimalDualDiff (const CoinWarmStartPrimalDualDiff &rhs) : primalDiff_(rhs.primalDiff_), dualDiff_(rhs.dualDiff_) {} /*! \brief Clear the data Make it appear as if the diff was just created using the default constructor. */ inline void clear() { primalDiff_.clear(); dualDiff_.clear(); } inline void swap(CoinWarmStartPrimalDualDiff& rhs) { if (this != &rhs) { primalDiff_.swap(rhs.primalDiff_); dualDiff_.swap(rhs.dualDiff_); } } private: /*! \brief These two differences describe the differences in the primal and in the dual vector. */ CoinWarmStartVectorDiff primalDiff_; CoinWarmStartVectorDiff dualDiff_; } ; #endif CoinUtils-2.9.10/CoinUtils/src/CoinHelperFunctions.hpp0000644000076600007660000007353212244555111021336 0ustar coincoin/* $Id: CoinHelperFunctions.hpp 1666 2013-11-25 05:04:09Z 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 CoinHelperFunctions_H #define CoinHelperFunctions_H #include "CoinUtilsConfig.h" #if defined(_MSC_VER) # include # include # define getcwd _getcwd #else # include #endif //#define USE_MEMCPY #include #include #include #include "CoinTypes.hpp" #include "CoinError.hpp" // Compilers can produce better code if they know about __restrict #ifndef COIN_RESTRICT #ifdef COIN_USE_RESTRICT #define COIN_RESTRICT __restrict #else #define COIN_RESTRICT #endif #endif //############################################################################# /** This helper function copies an array to another location using Duff's device (for a speedup of ~2). The arrays are given by pointers to their first entries and by the size of the source array. Overlapping arrays are handled correctly. */ template inline void CoinCopyN(register const T* from, const int size, register T* to) { if (size == 0 || from == to) return; #ifndef NDEBUG if (size < 0) throw CoinError("trying to copy negative number of entries", "CoinCopyN", ""); #endif register int n = (size + 7) / 8; if (to > from) { register const T* downfrom = from + size; register T* downto = to + size; // Use Duff's device to copy switch (size % 8) { case 0: do{ *--downto = *--downfrom; case 7: *--downto = *--downfrom; case 6: *--downto = *--downfrom; case 5: *--downto = *--downfrom; case 4: *--downto = *--downfrom; case 3: *--downto = *--downfrom; case 2: *--downto = *--downfrom; case 1: *--downto = *--downfrom; }while(--n>0); } } else { // Use Duff's device to copy --from; --to; switch (size % 8) { case 0: do{ *++to = *++from; case 7: *++to = *++from; case 6: *++to = *++from; case 5: *++to = *++from; case 4: *++to = *++from; case 3: *++to = *++from; case 2: *++to = *++from; case 1: *++to = *++from; }while(--n>0); } } } //----------------------------------------------------------------------------- /** This helper function copies an array to another location using Duff's device (for a speedup of ~2). The source array is given by its first and "after last" entry; the target array is given by its first entry. Overlapping arrays are handled correctly. All of the various CoinCopyN variants use an int for size. On 64-bit architectures, the address diff last-first will be a 64-bit quantity. Given that everything else uses an int, I'm going to choose to kick the difference down to int. -- lh, 100823 -- */ template inline void CoinCopy(register const T* first, register const T* last, register T* to) { CoinCopyN(first, static_cast(last-first), to); } //----------------------------------------------------------------------------- /** This helper function copies an array to another location. The two arrays must not overlap (otherwise an exception is thrown). For speed 8 entries are copied at a time. The arrays are given by pointers to their first entries and by the size of the source array. Note JJF - the speed claim seems to be false on IA32 so I have added CoinMemcpyN which can be used for atomic data */ template inline void CoinDisjointCopyN(register const T* from, const int size, register T* to) { #ifndef _MSC_VER if (size == 0 || from == to) return; #ifndef NDEBUG if (size < 0) throw CoinError("trying to copy negative number of entries", "CoinDisjointCopyN", ""); #endif #if 0 /* There is no point to do this test. If to and from are from different blocks then dist is undefined, so this can crash correct code. It's better to trust the user that the arrays are really disjoint. */ const long dist = to - from; if (-size < dist && dist < size) throw CoinError("overlapping arrays", "CoinDisjointCopyN", ""); #endif for (register int n = size / 8; n > 0; --n, from += 8, to += 8) { to[0] = from[0]; to[1] = from[1]; to[2] = from[2]; to[3] = from[3]; to[4] = from[4]; to[5] = from[5]; to[6] = from[6]; to[7] = from[7]; } switch (size % 8) { case 7: to[6] = from[6]; case 6: to[5] = from[5]; case 5: to[4] = from[4]; case 4: to[3] = from[3]; case 3: to[2] = from[2]; case 2: to[1] = from[1]; case 1: to[0] = from[0]; case 0: break; } #else CoinCopyN(from, size, to); #endif } //----------------------------------------------------------------------------- /** This helper function copies an array to another location. The two arrays must not overlap (otherwise an exception is thrown). For speed 8 entries are copied at a time. The source array is given by its first and "after last" entry; the target array is given by its first entry. */ template inline void CoinDisjointCopy(register const T* first, register const T* last, register T* to) { CoinDisjointCopyN(first, static_cast(last - first), to); } //----------------------------------------------------------------------------- /*! \brief Return an array of length \p size filled with input from \p array, or null if \p array is null. */ template inline T* CoinCopyOfArray( const T * array, const int size) { if (array) { T * arrayNew = new T[size]; std::memcpy(arrayNew,array,size*sizeof(T)); return arrayNew; } else { return NULL; } } /*! \brief Return an array of length \p size filled with first copySize from \p array, or null if \p array is null. */ template inline T* CoinCopyOfArrayPartial( const T * array, const int size,const int copySize) { if (array||size) { T * arrayNew = new T[size]; assert (copySize<=size); std::memcpy(arrayNew,array,copySize*sizeof(T)); return arrayNew; } else { return NULL; } } /*! \brief Return an array of length \p size filled with input from \p array, or filled with (scalar) \p value if \p array is null */ template inline T* CoinCopyOfArray( const T * array, const int size, T value) { T * arrayNew = new T[size]; if (array) { std::memcpy(arrayNew,array,size*sizeof(T)); } else { int i; for (i=0;i inline T* CoinCopyOfArrayOrZero( const T * array , const int size) { T * arrayNew = new T[size]; if (array) { std::memcpy(arrayNew,array,size*sizeof(T)); } else { std::memset(arrayNew,0,size*sizeof(T)); } return arrayNew; } //----------------------------------------------------------------------------- /** This helper function copies an array to another location. The two arrays must not overlap (otherwise an exception is thrown). For speed 8 entries are copied at a time. The arrays are given by pointers to their first entries and by the size of the source array. Note JJF - the speed claim seems to be false on IA32 so I have added alternative coding if USE_MEMCPY defined*/ #ifndef COIN_USE_RESTRICT template inline void CoinMemcpyN(register const T* from, const int size, register T* to) { #ifndef _MSC_VER #ifdef USE_MEMCPY // Use memcpy - seems a lot faster on Intel with gcc #ifndef NDEBUG // Some debug so check if (size < 0) throw CoinError("trying to copy negative number of entries", "CoinMemcpyN", ""); #if 0 /* There is no point to do this test. If to and from are from different blocks then dist is undefined, so this can crash correct code. It's better to trust the user that the arrays are really disjoint. */ const long dist = to - from; if (-size < dist && dist < size) throw CoinError("overlapping arrays", "CoinMemcpyN", ""); #endif #endif std::memcpy(to,from,size*sizeof(T)); #else if (size == 0 || from == to) return; #ifndef NDEBUG if (size < 0) throw CoinError("trying to copy negative number of entries", "CoinMemcpyN", ""); #endif #if 0 /* There is no point to do this test. If to and from are from different blocks then dist is undefined, so this can crash correct code. It's better to trust the user that the arrays are really disjoint. */ const long dist = to - from; if (-size < dist && dist < size) throw CoinError("overlapping arrays", "CoinMemcpyN", ""); #endif for (register int n = size / 8; n > 0; --n, from += 8, to += 8) { to[0] = from[0]; to[1] = from[1]; to[2] = from[2]; to[3] = from[3]; to[4] = from[4]; to[5] = from[5]; to[6] = from[6]; to[7] = from[7]; } switch (size % 8) { case 7: to[6] = from[6]; case 6: to[5] = from[5]; case 5: to[4] = from[4]; case 4: to[3] = from[3]; case 3: to[2] = from[2]; case 2: to[1] = from[1]; case 1: to[0] = from[0]; case 0: break; } #endif #else CoinCopyN(from, size, to); #endif } #else template inline void CoinMemcpyN(const T * COIN_RESTRICT from, int size, T* COIN_RESTRICT to) { #ifdef USE_MEMCPY std::memcpy(to,from,size*sizeof(T)); #else T * COIN_RESTRICT put = to; const T * COIN_RESTRICT get = from; for ( ; 0 inline void CoinMemcpy(register const T* first, register const T* last, register T* to) { CoinMemcpyN(first, static_cast(last - first), to); } //############################################################################# /** This helper function fills an array with a given value. For speed 8 entries are filled at a time. The array is given by a pointer to its first entry and its size. Note JJF - the speed claim seems to be false on IA32 so I have added CoinZero to allow for memset. */ template inline void CoinFillN(register T* to, const int size, register const T value) { if (size == 0) return; #ifndef NDEBUG if (size < 0) throw CoinError("trying to fill negative number of entries", "CoinFillN", ""); #endif #if 1 for (register int n = size / 8; n > 0; --n, to += 8) { to[0] = value; to[1] = value; to[2] = value; to[3] = value; to[4] = value; to[5] = value; to[6] = value; to[7] = value; } switch (size % 8) { case 7: to[6] = value; case 6: to[5] = value; case 5: to[4] = value; case 4: to[3] = value; case 3: to[2] = value; case 2: to[1] = value; case 1: to[0] = value; case 0: break; } #else // Use Duff's device to fill register int n = (size + 7) / 8; --to; switch (size % 8) { case 0: do{ *++to = value; case 7: *++to = value; case 6: *++to = value; case 5: *++to = value; case 4: *++to = value; case 3: *++to = value; case 2: *++to = value; case 1: *++to = value; }while(--n>0); } #endif } //----------------------------------------------------------------------------- /** This helper function fills an array with a given value. For speed 8 entries are filled at a time. The array is given by its first and "after last" entry. */ template inline void CoinFill(register T* first, register T* last, const T value) { CoinFillN(first, last - first, value); } //############################################################################# /** This helper function fills an array with zero. For speed 8 entries are filled at a time. The array is given by a pointer to its first entry and its size. Note JJF - the speed claim seems to be false on IA32 so I have allowed for memset as an alternative */ template inline void CoinZeroN(register T* to, const int size) { #ifdef USE_MEMCPY // Use memset - seems faster on Intel with gcc #ifndef NDEBUG // Some debug so check if (size < 0) throw CoinError("trying to fill negative number of entries", "CoinZeroN", ""); #endif memset(to,0,size*sizeof(T)); #else if (size == 0) return; #ifndef NDEBUG if (size < 0) throw CoinError("trying to fill negative number of entries", "CoinZeroN", ""); #endif #if 1 for (register int n = size / 8; n > 0; --n, to += 8) { to[0] = 0; to[1] = 0; to[2] = 0; to[3] = 0; to[4] = 0; to[5] = 0; to[6] = 0; to[7] = 0; } switch (size % 8) { case 7: to[6] = 0; case 6: to[5] = 0; case 5: to[4] = 0; case 4: to[3] = 0; case 3: to[2] = 0; case 2: to[1] = 0; case 1: to[0] = 0; case 0: break; } #else // Use Duff's device to fill register int n = (size + 7) / 8; --to; switch (size % 8) { case 0: do{ *++to = 0; case 7: *++to = 0; case 6: *++to = 0; case 5: *++to = 0; case 4: *++to = 0; case 3: *++to = 0; case 2: *++to = 0; case 1: *++to = 0; }while(--n>0); } #endif #endif } /// This Debug helper function checks an array is all zero inline void CoinCheckDoubleZero(double * to, const int size) { int n=0; for (int j=0;j inline void CoinZero(register T* first, register T* last) { CoinZeroN(first, last - first); } //############################################################################# /** Returns strdup or NULL if original NULL */ inline char * CoinStrdup(const char * name) { char* dup = NULL; if (name) { const int len = static_cast(strlen(name)); dup = static_cast(malloc(len+1)); CoinMemcpyN(name, len, dup); dup[len] = 0; } return dup; } //############################################################################# /** Return the larger (according to operator<() of the arguments. This function was introduced because for some reason compiler tend to handle the max() function differently. */ template inline T CoinMax(register const T x1, register const T x2) { return (x1 > x2) ? x1 : x2; } //----------------------------------------------------------------------------- /** Return the smaller (according to operator<() of the arguments. This function was introduced because for some reason compiler tend to handle the min() function differently. */ template inline T CoinMin(register const T x1, register const T x2) { return (x1 < x2) ? x1 : x2; } //----------------------------------------------------------------------------- /** Return the absolute value of the argument. This function was introduced because for some reason compiler tend to handle the abs() function differently. */ template inline T CoinAbs(const T value) { return value<0 ? -value : value; } //############################################################################# /** This helper function tests whether the entries of an array are sorted according to operator<. The array is given by a pointer to its first entry and by its size. */ template inline bool CoinIsSorted(register const T* first, const int size) { if (size == 0) return true; #ifndef NDEBUG if (size < 0) throw CoinError("negative number of entries", "CoinIsSorted", ""); #endif #if 1 // size1 is the number of comparisons to be made const int size1 = size - 1; for (register int n = size1 / 8; n > 0; --n, first += 8) { if (first[8] < first[7]) return false; if (first[7] < first[6]) return false; if (first[6] < first[5]) return false; if (first[5] < first[4]) return false; if (first[4] < first[3]) return false; if (first[3] < first[2]) return false; if (first[2] < first[1]) return false; if (first[1] < first[0]) return false; } switch (size1 % 8) { case 7: if (first[7] < first[6]) return false; case 6: if (first[6] < first[5]) return false; case 5: if (first[5] < first[4]) return false; case 4: if (first[4] < first[3]) return false; case 3: if (first[3] < first[2]) return false; case 2: if (first[2] < first[1]) return false; case 1: if (first[1] < first[0]) return false; case 0: break; } #else register const T* next = first; register const T* last = first + size; for (++next; next != last; first = next, ++next) if (*next < *first) return false; #endif return true; } //----------------------------------------------------------------------------- /** This helper function tests whether the entries of an array are sorted according to operator<. The array is given by its first and "after last" entry. */ template inline bool CoinIsSorted(register const T* first, register const T* last) { return CoinIsSorted(first, static_cast(last - first)); } //############################################################################# /** This helper function fills an array with the values init, init+1, init+2, etc. For speed 8 entries are filled at a time. The array is given by a pointer to its first entry and its size. */ template inline void CoinIotaN(register T* first, const int size, register T init) { if (size == 0) return; #ifndef NDEBUG if (size < 0) throw CoinError("negative number of entries", "CoinIotaN", ""); #endif #if 1 for (register int n = size / 8; n > 0; --n, first += 8, init += 8) { first[0] = init; first[1] = init + 1; first[2] = init + 2; first[3] = init + 3; first[4] = init + 4; first[5] = init + 5; first[6] = init + 6; first[7] = init + 7; } switch (size % 8) { case 7: first[6] = init + 6; case 6: first[5] = init + 5; case 5: first[4] = init + 4; case 4: first[3] = init + 3; case 3: first[2] = init + 2; case 2: first[1] = init + 1; case 1: first[0] = init; case 0: break; } #else // Use Duff's device to fill register int n = (size + 7) / 8; --first; --init; switch (size % 8) { case 0: do{ *++first = ++init; case 7: *++first = ++init; case 6: *++first = ++init; case 5: *++first = ++init; case 4: *++first = ++init; case 3: *++first = ++init; case 2: *++first = ++init; case 1: *++first = ++init; }while(--n>0); } #endif } //----------------------------------------------------------------------------- /** This helper function fills an array with the values init, init+1, init+2, etc. For speed 8 entries are filled at a time. The array is given by its first and "after last" entry. */ template inline void CoinIota(T* first, const T* last, T init) { CoinIotaN(first, last-first, init); } //############################################################################# /** This helper function deletes certain entries from an array. The array is given by pointers to its first and "after last" entry (first two arguments). The positions of the entries to be deleted are given in the integer array specified by the last two arguments (again, first and "after last" entry). */ template inline T * CoinDeleteEntriesFromArray(register T * arrayFirst, register T * arrayLast, const int * firstDelPos, const int * lastDelPos) { int delNum = static_cast(lastDelPos - firstDelPos); if (delNum == 0) return arrayLast; if (delNum < 0) throw CoinError("trying to delete negative number of entries", "CoinDeleteEntriesFromArray", ""); int * delSortedPos = NULL; if (! (CoinIsSorted(firstDelPos, lastDelPos) && std::adjacent_find(firstDelPos, lastDelPos) == lastDelPos)) { // the positions of the to be deleted is either not sorted or not unique delSortedPos = new int[delNum]; CoinDisjointCopy(firstDelPos, lastDelPos, delSortedPos); std::sort(delSortedPos, delSortedPos + delNum); delNum = static_cast(std::unique(delSortedPos, delSortedPos+delNum) - delSortedPos); } const int * delSorted = delSortedPos ? delSortedPos : firstDelPos; const int last = delNum - 1; int size = delSorted[0]; for (int i = 0; i < last; ++i) { const int copyFirst = delSorted[i] + 1; const int copyLast = delSorted[i+1]; CoinCopy(arrayFirst + copyFirst, arrayFirst + copyLast, arrayFirst + size); size += copyLast - copyFirst; } const int copyFirst = delSorted[last] + 1; const int copyLast = static_cast(arrayLast - arrayFirst); CoinCopy(arrayFirst + copyFirst, arrayFirst + copyLast, arrayFirst + size); size += copyLast - copyFirst; if (delSortedPos) delete[] delSortedPos; return arrayFirst + size; } //############################################################################# #define COIN_OWN_RANDOM_32 #if defined COIN_OWN_RANDOM_32 /* Thanks to Stefano Gliozzi for providing an operating system independent random number generator. */ /*! \brief Return a random number between 0 and 1 A platform-independent linear congruential generator. For a given seed, the generated sequence is always the same regardless of the (32-bit) architecture. This allows to build & test in different environments, getting in most cases the same optimization path. Set \p isSeed to true and supply an integer seed to set the seed (vid. #CoinSeedRandom) \todo Anyone want to volunteer an upgrade for 64-bit architectures? */ inline double CoinDrand48 (bool isSeed = false, unsigned int seed = 1) { static unsigned int last = 123456; if (isSeed) { last = seed; } else { last = 1664525*last+1013904223; return ((static_cast (last))/4294967296.0); } return (0.0); } /// Set the seed for the random number generator inline void CoinSeedRandom(int iseed) { CoinDrand48(true, iseed); } #else // COIN_OWN_RANDOM_32 #if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN32__) /// Return a random number between 0 and 1 inline double CoinDrand48() { return rand() / (double) RAND_MAX; } /// Set the seed for the random number generator inline void CoinSeedRandom(int iseed) { srand(iseed + 69822); } #else /// Return a random number between 0 and 1 inline double CoinDrand48() { return drand48(); } /// Set the seed for the random number generator inline void CoinSeedRandom(int iseed) { srand48(iseed + 69822); } #endif #endif // COIN_OWN_RANDOM_32 //############################################################################# /** This function figures out whether file names should contain slashes or backslashes as directory separator */ inline char CoinFindDirSeparator() { int size = 1000; char* buf = 0; while (true) { buf = new char[size]; if (getcwd(buf, size)) break; delete[] buf; buf = 0; size = 2*size; } // if first char is '/' then it's unix and the dirsep is '/'. otherwise we // assume it's dos and the dirsep is '\' char dirsep = buf[0] == '/' ? '/' : '\\'; delete[] buf; return dirsep; } //############################################################################# inline int CoinStrNCaseCmp(const char* s0, const char* s1, const size_t len) { for (size_t i = 0; i < len; ++i) { if (s0[i] == 0) { return s1[i] == 0 ? 0 : -1; } if (s1[i] == 0) { return 1; } const int c0 = std::tolower(s0[i]); const int c1 = std::tolower(s1[i]); if (c0 < c1) return -1; if (c0 > c1) return 1; } return 0; } //############################################################################# /// Swap the arguments. template inline void CoinSwap (T &x, T &y) { T t = x; x = y; y = t; } //############################################################################# /** This helper function copies an array to file Returns 0 if OK, 1 if bad write. */ template inline int CoinToFile( const T* array, CoinBigIndex size, FILE * fp) { CoinBigIndex numberWritten; if (array&&size) { numberWritten = static_cast(fwrite(&size,sizeof(int),1,fp)); if (numberWritten!=1) return 1; numberWritten = static_cast(fwrite(array,sizeof(T),size_t(size),fp)); if (numberWritten!=size) return 1; } else { size = 0; numberWritten = static_cast(fwrite(&size,sizeof(int),1,fp)); if (numberWritten!=1) return 1; } return 0; } //############################################################################# /** This helper function copies an array from file and creates with new. Passed in array is ignored i.e. not deleted. But if NULL and size does not match and newSize 0 then leaves as NULL and 0 Returns 0 if OK, 1 if bad read, 2 if size did not match. */ template inline int CoinFromFile( T* &array, CoinBigIndex size, FILE * fp, CoinBigIndex & newSize) { CoinBigIndex numberRead; numberRead = static_cast(fread(&newSize,sizeof(int),1,fp)); if (numberRead!=1) return 1; int returnCode=0; if (size!=newSize&&(newSize||array)) returnCode=2; if (newSize) { array = new T [newSize]; numberRead = static_cast(fread(array,sizeof(T),newSize,fp)); if (numberRead!=newSize) returnCode=1; } else { array = NULL; } return returnCode; } //############################################################################# /// Cube Root #if 0 inline double CoinCbrt(double x) { #if defined(_MSC_VER) return pow(x,(1./3.)); #else return cbrt(x); #endif } #endif //----------------------------------------------------------------------------- /// This helper returns "sizeof" as an int #define CoinSizeofAsInt(type) (static_cast(sizeof(type))) /// This helper returns "strlen" as an int inline int CoinStrlenAsInt(const char * string) { return static_cast(strlen(string)); } /** Class for thread specific random numbers */ #if defined COIN_OWN_RANDOM_32 class CoinThreadRandom { public: /**@name Constructors, destructor */ //@{ /** Default constructor. */ CoinThreadRandom() { seed_=12345678;} /** Constructor wih seed. */ CoinThreadRandom(int seed) { seed_ = seed; } /** Destructor */ ~CoinThreadRandom() {} // Copy CoinThreadRandom(const CoinThreadRandom & rhs) { seed_ = rhs.seed_;} // Assignment CoinThreadRandom& operator=(const CoinThreadRandom & rhs) { if (this != &rhs) { seed_ = rhs.seed_; } return *this; } //@} /**@name Sets/gets */ //@{ /** Set seed. */ inline void setSeed(int seed) { seed_ = seed; } /** Get seed. */ inline unsigned int getSeed() const { return seed_; } /// return a random number inline double randomDouble() const { double retVal; seed_ = 1664525*(seed_)+1013904223; retVal = ((static_cast (seed_))/4294967296.0); return retVal; } /// make more random (i.e. for startup) inline void randomize(int n=0) { if (!n) n=seed_ & 255; for (int i=0;i #include #include "CoinPresolveMatrix.hpp" #include "CoinPresolveUseless.hpp" #include "CoinPresolveFixed.hpp" #include "CoinHelperFunctions.hpp" #include "CoinFinite.hpp" #if PRESOLVE_DEBUG || PRESOLVE_CONSISTENCY #include "CoinPresolvePsdebug.hpp" #endif /* This routine implements a greedy algorithm to find a set of necessary constraints which imply tighter bounds for some subset of the variables. It then uses the tighter column bounds to identify constraints that are useless as long as the necessary set is present. The algorithm is as follows: * Initially mark all constraints as in play. * For each in play constraint, calculate row activity bounds L(i) and U(i). Use these bounds in an attempt to tighten column bounds for all variables entangled with the row. * If some column bound is tightened, the row is necessary. Mark it as such, taking it out of play. Eventually the rows are divided into two sets, necessary and unnecessary. Go through the unnecessary rows and check L(i) and U(i) using the tightened column bounds. Remove any useless rows where row activity cannot exceed the row bounds. For efficiency, rows are marked as processed when L(i) and U(i) are first calculated and these values are not recalculated unless a column bound changes. */ const CoinPresolveAction *testRedundant (CoinPresolveMatrix *prob, const CoinPresolveAction *next) { # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 # if PRESOLVE_DEBUG > 0 std::cout << "Entering testRedundant, considering " << prob->nrows_ << " rows." << std::endl ; # endif presolve_consistent(prob) ; presolve_links_ok(prob) ; presolve_check_sol(prob) ; presolve_check_nbasic(prob) ; # endif # if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 const int startEmptyRows = prob->countEmptyRows() ; # if COIN_PRESOLVE_TUNING > 0 double startTime = 0.0 ; if (prob->tuning_) startTime = CoinCpuTime() ; # endif # endif const int m = prob->nrows_ ; const int n = prob->ncols_ ; /* Unpack the row- and column-major representations. */ const CoinBigIndex *rowStarts = prob->mrstrt_ ; const int *rowLengths = prob->hinrow_ ; const double *rowCoeffs = prob->rowels_ ; const int *colIndices = prob->hcol_ ; const CoinBigIndex *colStarts = prob->mcstrt_ ; const int *rowIndices = prob->hrow_ ; const int *colLengths = prob->hincol_ ; /* Rim vectors. We need copies of the column bounds to modify as we do bound propagation. */ const double *rlo = prob->rlo_ ; const double *rup = prob->rup_ ; double *columnLower = new double[n] ; double *columnUpper = new double[n] ; CoinMemcpyN(prob->clo_,n,columnLower) ; CoinMemcpyN(prob->cup_,n,columnUpper) ; /* And we'll need somewhere to record the unnecessary rows. */ int *useless_rows = prob->usefulRowInt_+m ; int nuseless_rows = 0 ; /* The usual finite infinity. */ # define USE_SMALL_LARGE # ifdef USE_SMALL_LARGE const double large = 1.0e15 ; # else const double large = 1.0e20 ; # endif # ifndef NDEBUG const double large2 = 1.0e10*large ; # endif double feasTol = prob->feasibilityTolerance_ ; double relaxedTol = 100.0*feasTol ; /* More like `ignore infeasibility.' */ bool fixInfeasibility = ((prob->presolveOptions_&0x4000) != 0) ; /* Scan the rows and do an initial classification. MarkIgnore is used for constraints that are not in play in bound propagation for whatever reason, either because they're not interesting, or, later, because they're necessary. Interesting rows are nonempty with at least one finite row bound. The rest we can ignore during propagation. Nonempty rows with no finite row bounds are useless; record them for later. */ const char markIgnore = 1 ; const char markInPlay = -1 ; const char markActOK = -2 ; char *markRow = reinterpret_cast(prob->usefulRowInt_) ; for (int i = 0 ; i < m ; i++) { if ((rlo[i] > -large || rup[i] < large) && rowLengths[i] > 0) { markRow[i] = markInPlay ; } else { markRow[i] = markIgnore ; if (rowLengths[i] > 0) { useless_rows[nuseless_rows++] = i ; prob->addRow(i) ; } } } /* Open the main loop. We'll keep trying to tighten bounds until we get to diminishing returns. numberCheck is set at the end of the loop based on how well we did in the first pass. numberChanged tracks how well we do on the current pass. */ int numberInfeasible = 0 ; int numberChanged = 0 ; int totalTightened = 0 ; int numberCheck = -1 ; const int MAXPASS = 10 ; int iPass = -1 ; while (iPass < MAXPASS && numberChanged > numberCheck) { iPass++ ; numberChanged = 0 ; /* Open a loop to work through the rows computing upper and lower bounds on row activity. Each bound is calculated as a finite component and an infinite component. The state transitions for a row i go like this: * Row i starts out marked with markInPlay. * When row i is processed by the loop, L(i) and U(i) are calculated and we try to tighten the column bounds of entangled columns. If nothing happens, row i is marked with markActOK. It's still in play but won't be processed again unless the mark changes back to markInPlay. * If a column bound is tightened when we process row i, it's necessary. Mark row i with markIgnore and do not process it again. Other rows k entangled with the column and marked with markActOK are remarked to markInPlay and L(k) and U(k) will be recalculated on the next major pass. If the row is not marked as markInPlay, either we're ignoring the row or L(i) and U(i) have not changed since the last time the row was processed. There's nothing to gain by processing it again. */ for (int i = 0 ; i < m ; i++) { if (markRow[i] != markInPlay) continue ; int infUpi = 0 ; int infLoi = 0 ; double finUpi = 0.0 ; double finDowni = 0.0 ; const CoinBigIndex krs = rowStarts[i] ; const CoinBigIndex kre = krs+rowLengths[i] ; /* Open a loop to walk the row and calculate upper (U) and lower (L) bounds on row activity. Expand the finite component just a wee bit to make sure the bounds are conservative, then add in a whopping big value to account for the infinite component. */ for (CoinBigIndex kcol = krs ; kcol < kre ; ++kcol) { const double value = rowCoeffs[kcol] ; const int j = colIndices[kcol] ; if (value > 0.0) { if (columnUpper[j] < large) finUpi += columnUpper[j]*value ; else ++infUpi ; if (columnLower[j] > -large) finDowni += columnLower[j]*value ; else ++infLoi ; } else if (value<0.0) { if (columnUpper[j] < large) finDowni += columnUpper[j]*value ; else ++infLoi ; if (columnLower[j] > -large) finUpi += columnLower[j]*value ; else ++infUpi ; } } markRow[i] = markActOK ; finUpi += 1.0e-8*fabs(finUpi) ; finDowni -= 1.0e-8*fabs(finDowni) ; const double maxUpi = finUpi+infUpi*1.0e31 ; const double maxDowni = finDowni-infLoi*1.0e31 ; /* If LB(i) > rup(i) or UB(i) < rlo(i), we're infeasible. Break for the exit, unless the user has been so foolish as to tell us to ignore infeasibility, in which case just move on to the next row. */ if (maxUpi < rlo[i]-relaxedTol || maxDowni > rup[i]+relaxedTol) { if (!fixInfeasibility) { numberInfeasible++ ; prob->messageHandler()->message(COIN_PRESOLVE_ROWINFEAS, prob->messages()) << i << rlo[i] << rup[i] << CoinMessageEol ; break ; } else { continue ; } } /* Remember why we're here --- this is presolve. If the constraint satisfies this condition, it already qualifies as useless and it's highly unlikely to produce tightened column bounds. But don't record it as useless just yet; leave that for phase 2. LOU: Well, why not mark it as useless? A possible optimisation. */ if (maxUpi <= rup[i]+feasTol && maxDowni >= rlo[i]-feasTol) continue ; /* We're not infeasible and one of U(i) or L(i) is not inside the row bounds. If we have something that looks like a forcing constraint but is just over the line, force the bound to exact equality to ensure conservative column bounds. */ const double rloi = rlo[i] ; const double rupi = rup[i] ; if (finUpi < rloi && finUpi > rloi-relaxedTol) finUpi = rloi ; if (finDowni > rupi && finDowni < rupi+relaxedTol) finDowni = rupi ; /* Open a loop to walk the row and try to tighten column bounds. */ for (CoinBigIndex kcol = krs ; kcol < kre ; ++kcol) { const double ait = rowCoeffs[kcol] ; const int t = colIndices[kcol] ; double lt = columnLower[t] ; double ut = columnUpper[t] ; double newlt = COIN_DBL_MAX ; double newut = -COIN_DBL_MAX ; /* For a target variable x(t) with a(it) > 0, we have new l(t) = (rlo(i)-(U(i)-a(it)u(t)))/a(it) = u(t) + (rlo(i)-U(i))/a(it) new u(t) = (rup(i)-(L(i)-a(it)l(t)))/a(it) = l(t) + (rup(i)-L(i))/a(it) Notice that if there's a single infinite contribution to L(i) or U(i) and it comes from x(t), then the finite portion finDowni or finUpi is correct and finite. Start by calculating new l(t) against rlo(i) and U(i). If the change is large, put some slack in the bound. */ if (ait > 0.0) { if (rloi > -large) { if (!infUpi) { assert(ut < large2) ; newlt = ut+(rloi-finUpi)/ait ; if (fabs(finUpi) > 1.0e8) newlt -= 1.0e-12*fabs(finUpi) ; } else if (infUpi == 1 && ut >= large) { newlt = (rloi-finUpi)/ ait ; if (fabs(finUpi) > 1.0e8) newlt -= 1.0e-12*fabs(finUpi) ; } else { newlt = -COIN_DBL_MAX ; } /* Did we improve the bound? If we're infeasible, head for the exit. If we're still feasible, walk the column and reset the marks on the entangled rows so that the activity bounds will be recalculated. Mark this constraint so we don't use it again, and correct L(i). */ if (newlt > lt+1.0e-12 && newlt > -large) { if (ut-newlt < -relaxedTol) { numberInfeasible++ ; break ; } columnLower[t] = newlt ; markRow[i] = markIgnore ; numberChanged++ ; const CoinBigIndex kcs = colStarts[t] ; const CoinBigIndex kce = kcs+colLengths[t] ; for (CoinBigIndex kcol = kcs ; kcol < kce ; ++kcol) { const int k = rowIndices[kcol] ; if (markRow[k] == markActOK) { markRow[k] = markInPlay ; } } if (lt <= -large) { finDowni += newlt*ait ; infLoi-- ; } else { finDowni += (newlt-lt)*ait ; } lt = newlt ; } } /* Perform the same actions, for new u(t) against rup(i) and L(i). */ if (rupi < large) { if (!infLoi) { assert(lt >- large2) ; newut = lt+(rupi-finDowni)/ait ; if (fabs(finDowni) > 1.0e8) newut += 1.0e-12*fabs(finDowni) ; } else if (infLoi == 1 && lt <= -large) { newut = (rupi-finDowni)/ait ; if (fabs(finDowni) > 1.0e8) newut += 1.0e-12*fabs(finDowni) ; } else { newut = COIN_DBL_MAX ; } if (newut < ut-1.0e-12 && newut < large) { columnUpper[t] = newut ; if (newut-lt < -relaxedTol) { numberInfeasible++ ; break ; } markRow[i] = markIgnore ; numberChanged++ ; const CoinBigIndex kcs = colStarts[t] ; const CoinBigIndex kce = kcs+colLengths[t] ; for (CoinBigIndex kcol = kcs ; kcol < kce ; ++kcol) { const int k = rowIndices[kcol] ; if (markRow[k] == markActOK) { markRow[k] = markInPlay ; } } if (ut >= large) { finUpi += newut*ait ; infUpi-- ; } else { finUpi += (newut-ut)*ait ; } ut = newut ; } } } else { /* And repeat both sets with the appropriate flips for a(it) < 0. */ if (rloi > -large) { if (!infUpi) { assert(lt < large2) ; newut = lt+(rloi-finUpi)/ait ; if (fabs(finUpi) > 1.0e8) newut += 1.0e-12*fabs(finUpi) ; } else if (infUpi == 1 && lt <= -large) { newut = (rloi-finUpi)/ait ; if (fabs(finUpi) > 1.0e8) newut += 1.0e-12*fabs(finUpi) ; } else { newut = COIN_DBL_MAX ; } if (newut < ut-1.0e-12 && newut < large) { columnUpper[t] = newut ; if (newut-lt < -relaxedTol) { numberInfeasible++ ; break ; } markRow[i] = markIgnore ; numberChanged++ ; const CoinBigIndex kcs = colStarts[t] ; const CoinBigIndex kce = kcs+colLengths[t] ; for (CoinBigIndex kcol = kcs ; kcol < kce ; ++kcol) { const int k = rowIndices[kcol] ; if (markRow[k] == markActOK) { markRow[k] = markInPlay ; } } if (ut >= large) { finDowni += newut*ait ; infLoi-- ; } else { finDowni += (newut-ut)*ait ; } ut = newut ; } } if (rupi < large) { if (!infLoi) { assert(ut < large2) ; newlt = ut+(rupi-finDowni)/ait ; if (fabs(finDowni) > 1.0e8) newlt -= 1.0e-12*fabs(finDowni) ; } else if (infLoi == 1 && ut >= large) { newlt = (rupi-finDowni)/ait ; if (fabs(finDowni) > 1.0e8) newlt -= 1.0e-12*fabs(finDowni) ; } else { newlt = -COIN_DBL_MAX ; } if (newlt > lt+1.0e-12 && newlt > -large) { columnLower[t] = newlt ; if (ut-newlt < -relaxedTol) { numberInfeasible++ ; break ; } markRow[i] = markIgnore ; numberChanged++ ; const CoinBigIndex kcs = colStarts[t] ; const CoinBigIndex kce = kcs+colLengths[t] ; for (CoinBigIndex kcol = kcs ; kcol < kce ; ++kcol) { const int k = rowIndices[kcol] ; if (markRow[k] == markActOK) { markRow[k] = markInPlay ; } } if (lt <= -large) { finUpi += newlt*ait ; infUpi-- ; } else { finUpi += (newlt-lt)*ait ; } lt = newlt ; } } } } } totalTightened += numberChanged ; if (iPass == 1) numberCheck = CoinMax(10,numberChanged>>5) ; if (numberInfeasible) { prob->status_ = 1 ; break ; } } /* At this point, we have rows marked with markIgnore, markInPlay, and markActOK. Rows marked with markIgnore may have been used to tighten the column bound on some variable, hence they are necessary. (Or they may have been marked in the initial scan, in which case they're already on the useless list or empty.) Rows marked with markInPlay or markActOK are candidates for forcing or useless constraints. */ if (!numberInfeasible) { /* Open a loop to scan the rows again looking for useless constraints. */ for (int i = 0 ; i < m ; i++) { if (markRow[i] == markIgnore) continue ; /* Recalculate L(i) and U(i). LOU: Arguably this would not be necessary if we saved L(i) and U(i). */ int infUpi = 0 ; int infLoi = 0 ; double finUpi = 0.0 ; double finDowni = 0.0 ; const CoinBigIndex krs = rowStarts[i] ; const CoinBigIndex kre = krs+rowLengths[i] ; for (CoinBigIndex krow = krs; krow < kre; ++krow) { const double value = rowCoeffs[krow] ; const int j = colIndices[krow] ; if (value > 0.0) { if (columnUpper[j] < large) finUpi += columnUpper[j] * value ; else ++infUpi ; if (columnLower[j] > -large) finDowni += columnLower[j] * value ; else ++infLoi ; } else if (value<0.0) { if (columnUpper[j] < large) finDowni += columnUpper[j] * value ; else ++infLoi ; if (columnLower[j] > -large) finUpi += columnLower[j] * value ; else ++infUpi ; } } finUpi += 1.0e-8*fabs(finUpi) ; finDowni -= 1.0e-8*fabs(finDowni) ; const double maxUpi = finUpi+infUpi*1.0e31 ; const double maxDowni = finDowni-infLoi*1.0e31 ; /* If we have L(i) and U(i) at or inside the row bounds, we have a useless constraint. You would think we could detect forcing constraints here but that's a bit of a problem, because the tightened column bounds we're working with will not escape this routine. */ if (maxUpi <= rup[i]+feasTol && maxDowni >= rlo[i]-feasTol) { useless_rows[nuseless_rows++] = i ; } } if (nuseless_rows) { next = useless_constraint_action::presolve(prob, useless_rows,nuseless_rows, next) ; } /* See if we can transfer tightened bounds from the work above. This is problematic. When we loosen these bounds in postsolve it's entirely possible that the variable will end up superbasic. Original comment: may not unroll */ if (prob->presolveOptions_&0x10) { const unsigned char *integerType = prob->integerType_ ; double *csol = prob->sol_ ; double *clo = prob->clo_ ; double *cup = prob->cup_ ; int *fixed = prob->usefulColumnInt_ ; int nFixed = 0 ; int nChanged = 0 ; for (int j = 0 ; j < n ; j++) { if (clo[j] == cup[j]) continue ; double lower = columnLower[j] ; double upper = columnUpper[j] ; if (integerType[j]) { upper = floor(upper+1.0e-4) ; lower = ceil(lower-1.0e-4) ; } if (upper-lower < 1.0e-8) { if (upper-lower < -feasTol) numberInfeasible++ ; if (CoinMin(fabs(upper),fabs(lower)) <= 1.0e-7) upper = 0.0 ; fixed[nFixed++] = j ; prob->addCol(j) ; cup[j] = upper ; clo[j] = upper ; if (csol != 0) csol[j] = upper ; } else { if (integerType[j]) { if (upper < cup[j]) { cup[j] = upper ; nChanged++ ; prob->addCol(j) ; } if (lower > clo[j]) { clo[j] = lower ; nChanged++ ; prob->addCol(j) ; } } } } # ifdef CLP_INVESTIGATE if (nFixed||nChanged) printf("%d fixed in impliedfree, %d changed\n",nFixed,nChanged) ; # endif if (nFixed) next = remove_fixed_action::presolve(prob,fixed,nFixed,next) ; } } delete [] columnLower ; delete [] columnUpper ; # if COIN_PRESOLVE_TUNING > 0 double thisTime ; if (prob->tuning_) thisTime = CoinCpuTime() ; # endif # if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 presolve_consistent(prob) ; presolve_links_ok(prob) ; presolve_check_sol(prob) ; presolve_check_nbasic(prob) ; # endif # if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 int droppedRows = prob->countEmptyRows()-startEmptyRows ; std::cout << "Leaving testRedundant, " << droppedRows << " rows dropped" ; # if COIN_PRESOLVE_TUNING > 0 std::cout << " in " << thisTime-startTime << "s" ; # endif std::cout << "." << std::endl ; # endif return (next) ; } // WHAT HAPPENS IF COLS ARE DROPPED AS A RESULT?? // should be like do_tighten. // not really - one could fix costed variables to appropriate bound. // ok, don't bother about it. If it is costed, it will be checked // when it is eliminated as an empty col; if it is costed in the // wrong direction, the problem is unbounded, otherwise it is pegged // at its bound. no special action need be taken here. const CoinPresolveAction *useless_constraint_action::presolve(CoinPresolveMatrix * prob, const int *useless_rows, int nuseless_rows, const CoinPresolveAction *next) { # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 # if PRESOLVE_DEBUG > 0 std::cout << "Entering useless_constraint_action::presolve, " << nuseless_rows << " rows." << std::endl ; # endif presolve_check_sol(prob) ; presolve_check_nbasic(prob) ; # endif // may be modified by useless constraint double *colels = prob->colels_; // may be modified by useless constraint int *hrow = prob->hrow_; const CoinBigIndex *mcstrt = prob->mcstrt_; // may be modified by useless constraint int *hincol = prob->hincol_; // double *clo = prob->clo_; // double *cup = prob->cup_; const double *rowels = prob->rowels_; const int *hcol = prob->hcol_; const CoinBigIndex *mrstrt = prob->mrstrt_; // may be written by useless constraint int *hinrow = prob->hinrow_; // const int nrows = prob->nrows_; double *rlo = prob->rlo_; double *rup = prob->rup_; action *actions = new action [nuseless_rows]; for (int i=0; i 2 std::cout << " removing row " << irow << std::endl ; # endif CoinBigIndex krs = mrstrt[irow]; CoinBigIndex kre = krs + hinrow[irow]; PRESOLVE_DETAIL_PRINT(printf("pre_useless %dR E\n",irow)); action *f = &actions[i]; f->row = irow; f->ninrow = hinrow[irow]; f->rlo = rlo[irow]; f->rup = rup[irow]; f->rowcols = CoinCopyOfArray(&hcol[krs], hinrow[irow]); f->rowels = CoinCopyOfArray(&rowels[krs], hinrow[irow]); for (CoinBigIndex k=krs; kclink_,hcol[k]) ; } } hinrow[irow] = 0; PRESOLVE_REMOVE_LINK(prob->rlink_,irow) ; // just to make things squeeky rlo[irow] = 0.0; rup[irow] = 0.0; } next = new useless_constraint_action(nuseless_rows,actions,next) ; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 presolve_check_sol(prob) ; presolve_check_nbasic(prob) ; # if PRESOLVE_DEBUG > 0 std::cout << "Leaving useless_constraint_action::presolve." << std::endl ; # endif # endif return (next) ; } // Put constructors here useless_constraint_action::useless_constraint_action(int nactions, const action *actions, const CoinPresolveAction *next) : CoinPresolveAction(next), nactions_(nactions), actions_(actions) {} useless_constraint_action::~useless_constraint_action() { for (int i=0;i 0 || PRESOLVE_CONSISTENCY > 0 # if PRESOLVE_DEBUG > 0 std::cout << "Entering useless_constraint_action::postsolve, " << nactions << " rows." << std::endl ; # endif presolve_check_sol(prob) ; presolve_check_nbasic(prob) ; # endif double *colels = prob->colels_; int *hrow = prob->hrow_; CoinBigIndex *mcstrt = prob->mcstrt_; int *link = prob->link_; int *hincol = prob->hincol_; // double *rowduals = prob->rowduals_; double *rowacts = prob->acts_; const double *sol = prob->sol_; CoinBigIndex &free_list = prob->free_list_; double *rlo = prob->rlo_; double *rup = prob->rup_; for (const action *f = &actions[nactions-1]; actions<=f; f--) { int irow = f->row; int ninrow = f->ninrow; const int *rowcols = f->rowcols; const double *rowels = f->rowels; double rowact = 0.0; rup[irow] = f->rup; rlo[irow] = f->rlo; for (CoinBigIndex k=0; k= 0 && kk < prob->bulk0_) ; free_list = link[free_list]; hrow[kk] = irow; colels[kk] = rowels[k]; link[kk] = mcstrt[jcol]; mcstrt[jcol] = kk; } rowact += rowels[k] * sol[jcol]; hincol[jcol]++; } # if PRESOLVE_CONSISTENCY presolve_check_free_list(prob) ; # endif // I don't know if this is always true PRESOLVEASSERT(prob->getRowStatus(irow)==CoinPrePostsolveMatrix::basic); // rcosts are unaffected since rowdual is 0 rowacts[irow] = rowact; // leave until desctructor //deleteAction(rowcols,int *); //deleteAction(rowels,double *); } //deleteAction(actions_,action *); # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 presolve_check_threads(prob) ; presolve_check_sol(prob) ; presolve_check_nbasic(prob) ; # if PRESOLVE_DEBUG > 0 std::cout << "Leaving useless_constraint_action::postsolve." << std::endl ; # endif # endif } CoinUtils-2.9.10/CoinUtils/src/CoinBuild.hpp0000644000076600007660000001202211552534611017253 0ustar coincoin/* $Id: CoinBuild.hpp 1416 2011-04-17 09:57:29Z 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). #ifndef CoinBuild_H #define CoinBuild_H #include "CoinPragma.hpp" #include "CoinTypes.hpp" #include "CoinFinite.hpp" /** In many cases it is natural to build a model by adding one row at a time. In Coin this is inefficient so this class gives some help. An instance of CoinBuild can be built up more efficiently and then added to the Clp/OsiModel in one go. It may be more efficient to have fewer arrays and re-allocate them but this should give a large gain over addRow. I have now extended it to columns. */ class CoinBuild { public: /**@name Useful methods */ //@{ /// add a row void addRow(int numberInRow, const int * columns, const double * elements, double rowLower=-COIN_DBL_MAX, double rowUpper=COIN_DBL_MAX); /// add a column void addColumn(int numberInColumn, const int * rows, const double * elements, double columnLower=0.0, double columnUpper=COIN_DBL_MAX, double objectiveValue=0.0); /// add a column inline void addCol(int numberInColumn, const int * rows, const double * elements, double columnLower=0.0, double columnUpper=COIN_DBL_MAX, double objectiveValue=0.0) { addColumn(numberInColumn, rows, elements, columnLower, columnUpper, objectiveValue);} /// Return number of rows or maximum found so far inline int numberRows() const { return (type_==0) ? numberItems_ : numberOther_;} /// Return number of columns or maximum found so far inline int numberColumns() const { return (type_==1) ? numberItems_ : numberOther_;} /// Return number of elements inline CoinBigIndex numberElements() const { return numberElements_;} /** Returns number of elements in a row and information in row */ int row(int whichRow, double & rowLower, double & rowUpper, const int * & indices, const double * & elements) const; /** Returns number of elements in current row and information in row Used as rows may be stored in a chain */ int currentRow(double & rowLower, double & rowUpper, const int * & indices, const double * & elements) const; /// Set current row void setCurrentRow(int whichRow); /// Returns current row number int currentRow() const; /** Returns number of elements in a column and information in column */ int column(int whichColumn, double & columnLower, double & columnUpper,double & objectiveValue, const int * & indices, const double * & elements) const; /** Returns number of elements in current column and information in column Used as columns may be stored in a chain */ int currentColumn( double & columnLower, double & columnUpper,double & objectiveValue, const int * & indices, const double * & elements) const; /// Set current column void setCurrentColumn(int whichColumn); /// Returns current column number int currentColumn() const; /// Returns type inline int type() const { return type_;} //@} /**@name Constructors, destructor */ //@{ /** Default constructor. */ CoinBuild(); /** Constructor with type 0==for addRow, 1== for addColumn. */ CoinBuild(int type); /** Destructor */ ~CoinBuild(); //@} /**@name Copy method */ //@{ /** The copy constructor. */ CoinBuild(const CoinBuild&); /// = CoinBuild& operator=(const CoinBuild&); //@} private: /// Set current void setMutableCurrent(int which) const; /// add a item void addItem(int numberInItem, const int * indices, const double * elements, double itemLower, double itemUpper, double objectiveValue); /** Returns number of elements in a item and information in item */ int item(int whichItem, double & itemLower, double & itemUpper,double & objectiveValue, const int * & indices, const double * & elements) const; /** Returns number of elements in current item and information in item Used as items may be stored in a chain */ int currentItem( double & itemLower, double & itemUpper,double & objectiveValue, const int * & indices, const double * & elements) const; /// Set current item void setCurrentItem(int whichItem); /// Returns current item number int currentItem() const; private: /**@name Data members */ //@{ /// Current number of items int numberItems_; /// Current number of other dimension i.e. Columns if addRow (i.e. max) int numberOther_; /// Current number of elements CoinBigIndex numberElements_; /// Current item pointer mutable double * currentItem_; /// First item pointer double * firstItem_; /// Last item pointer double * lastItem_; /// Type of build - 0 for row, 1 for column, -1 unset int type_; //@} }; #endif CoinUtils-2.9.10/CoinUtils/src/CoinPrePostsolveMatrix.cpp0000644000076600007660000003146311670766767022077 0ustar coincoin/* $Id: CoinPrePostsolveMatrix.cpp 1516 2011-12-10 23:40:39Z lou $ */ // 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). #include #include #include #include "CoinHelperFunctions.hpp" #include "CoinPresolveMatrix.hpp" #ifndef SLIM_CLP #include "CoinWarmStartBasis.hpp" #endif /*! \file This file contains methods for CoinPrePostsolveMatrix, the foundation class for CoinPresolveMatrix and CoinPostsolveMatrix. */ /* Constructor and destructor for CoinPrePostsolveMatrix. */ /* CoinPrePostsolveMatrix constructor This constructor does next to nothing, because there's no sensible middle ground between next to nothing and a constructor with twenty parameters that all need to be extracted from the constraint system held by an OSI. The alternative, creating a constructor which takes some flavour of OSI as a parameter, seems to me (lh) to be wrong. That knowledge does not belong in the generic COIN support library. The philosophy here is to create an empty CoinPrePostsolveMatrix object and then load in the constraint matrix, vectors, and miscellaneous parameters. Some of this will be done from CoinPresolveMatrix or CoinPostsolveMatrix constructors, but in the end most of it should be pushed back to an OSI-specific method. Then the knowledge of how to access the required data in an OSI is pushed back to the individual OSI classes where it belongs. Thus, all vector allocation is postponed until load time. */ CoinPrePostsolveMatrix::CoinPrePostsolveMatrix (int ncols_alloc, int nrows_alloc, CoinBigIndex nelems_alloc) : ncols_(0), nrows_(0), nelems_(0), ncols0_(ncols_alloc), nrows0_(nrows_alloc), nelems0_(nelems_alloc), bulkRatio_(2.0), mcstrt_(0), hincol_(0), hrow_(0), colels_(0), cost_(0), originalOffset_(0), clo_(0), cup_(0), rlo_(0), rup_(0), originalColumn_(0), originalRow_(0), ztolzb_(0.0), ztoldj_(0.0), maxmin_(0), sol_(0), rowduals_(0), acts_(0), rcosts_(0), colstat_(0), rowstat_(0), handler_(0), defaultHandler_(false), messages_() { handler_ = new CoinMessageHandler() ; defaultHandler_ = true ; bulk0_ = static_cast (bulkRatio_*nelems_alloc); return ; } /* CoinPrePostsolveMatrix destructor */ CoinPrePostsolveMatrix::~CoinPrePostsolveMatrix() { delete[] sol_ ; delete[] rowduals_ ; delete[] acts_ ; delete[] rcosts_ ; /* Note that we do NOT delete rowstat_. This is to maintain compatibility with ClpPresolve and OsiPresolve, which allocate a single vector and split it between column and row status. */ delete[] colstat_ ; delete[] cost_ ; delete[] clo_ ; delete[] cup_ ; delete[] rlo_ ; delete[] rup_ ; delete[] mcstrt_ ; delete[] hrow_ ; delete[] colels_ ; delete[] hincol_ ; delete[] originalColumn_ ; delete[] originalRow_ ; if (defaultHandler_ == true) delete handler_ ; } #ifndef SLIM_CLP /* Methods to set the miscellaneous parameters: max/min, objective offset, and tolerances. */ void CoinPrePostsolveMatrix::setObjOffset (double offset) { originalOffset_ = offset ; } void CoinPrePostsolveMatrix::setObjSense (double objSense) { maxmin_ = objSense ; } void CoinPrePostsolveMatrix::setPrimalTolerance (double primTol) { ztolzb_ = primTol ; } void CoinPrePostsolveMatrix::setDualTolerance (double dualTol) { ztoldj_ = dualTol ; } /* Methods to set the various vectors. For all methods, lenParam can be omitted and will default to -1. In that case, the default action is to copy ncols_ or nrows_ entries, as appropriate. It is *not* considered an error to specify lenParam = 0! This allows for allocation of vectors in an intially empty system. Note that ncols_ and nrows_ will be 0 before a constraint system is loaded. Be careful what you ask for. The vector allocated in the CoinPrePostsolveMatrix will be of size ncols0_ or nrows0_, as appropriate. */ void CoinPrePostsolveMatrix::setColLower (const double *colLower, int lenParam) { int len ; if (lenParam < 0) { len = ncols_ ; } else if (lenParam > ncols0_) { throw CoinError("length exceeds allocated size", "setColLower","CoinPrePostsolveMatrix") ; } else { len = lenParam ; } if (clo_ == 0) clo_ = new double[ncols0_] ; CoinMemcpyN(colLower,len,clo_) ; return ; } void CoinPrePostsolveMatrix::setColUpper (const double *colUpper, int lenParam) { int len ; if (lenParam < 0) { len = ncols_ ; } else if (lenParam > ncols0_) { throw CoinError("length exceeds allocated size", "setColUpper","CoinPrePostsolveMatrix") ; } else { len = lenParam ; } if (cup_ == 0) cup_ = new double[ncols0_] ; CoinMemcpyN(colUpper,len,cup_) ; return ; } void CoinPrePostsolveMatrix::setColSolution (const double *colSol, int lenParam) { int len ; if (lenParam < 0) { len = ncols_ ; } else if (lenParam > ncols0_) { throw CoinError("length exceeds allocated size", "setColSolution","CoinPrePostsolveMatrix") ; } else { len = lenParam ; } if (sol_ == 0) sol_ = new double[ncols0_] ; CoinMemcpyN(colSol,len,sol_) ; return ; } void CoinPrePostsolveMatrix::setCost (const double *cost, int lenParam) { int len ; if (lenParam < 0) { len = ncols_ ; } else if (lenParam > ncols0_) { throw CoinError("length exceeds allocated size", "setCost","CoinPrePostsolveMatrix") ; } else { len = lenParam ; } if (cost_ == 0) cost_ = new double[ncols0_] ; CoinMemcpyN(cost,len,cost_) ; return ; } void CoinPrePostsolveMatrix::setReducedCost (const double *redCost, int lenParam) { int len ; if (lenParam < 0) { len = ncols_ ; } else if (lenParam > ncols0_) { throw CoinError("length exceeds allocated size", "setReducedCost","CoinPrePostsolveMatrix") ; } else { len = lenParam ; } if (rcosts_ == 0) rcosts_ = new double[ncols0_] ; CoinMemcpyN(redCost,len,rcosts_) ; return ; } void CoinPrePostsolveMatrix::setRowLower (const double *rowLower, int lenParam) { int len ; if (lenParam < 0) { len = nrows_ ; } else if (lenParam > nrows0_) { throw CoinError("length exceeds allocated size", "setRowLower","CoinPrePostsolveMatrix") ; } else { len = lenParam ; } if (rlo_ == 0) rlo_ = new double[nrows0_] ; CoinMemcpyN(rowLower,len,rlo_) ; return ; } void CoinPrePostsolveMatrix::setRowUpper (const double *rowUpper, int lenParam) { int len ; if (lenParam < 0) { len = nrows_ ; } else if (lenParam > nrows0_) { throw CoinError("length exceeds allocated size", "setRowUpper","CoinPrePostsolveMatrix") ; } else { len = lenParam ; } if (rup_ == 0) rup_ = new double[nrows0_] ; CoinMemcpyN(rowUpper,len,rup_) ; return ; } void CoinPrePostsolveMatrix::setRowPrice (const double *rowSol, int lenParam) { int len ; if (lenParam < 0) { len = nrows_ ; } else if (lenParam > nrows0_) { throw CoinError("length exceeds allocated size", "setRowPrice","CoinPrePostsolveMatrix") ; } else { len = lenParam ; } if (rowduals_ == 0) rowduals_ = new double[nrows0_] ; CoinMemcpyN(rowSol,len,rowduals_) ; return ; } void CoinPrePostsolveMatrix::setRowActivity (const double *rowAct, int lenParam) { int len ; if (lenParam < 0) { len = nrows_ ; } else if (lenParam > nrows0_) { throw CoinError("length exceeds allocated size", "setRowActivity","CoinPrePostsolveMatrix") ; } else { len = lenParam ; } if (acts_ == 0) acts_ = new double[nrows0_] ; CoinMemcpyN(rowAct,len,acts_) ; return ; } /* Methods to set the status vectors for a basis. Note that we need to allocate colstat_ and rowstat_ as a single vector, to maintain compatibility with OsiPresolve and ClpPresolve. The `using ::getStatus' declaration is required to get the compiler to consider the getStatus helper function defined in CoinWarmStartBasis.hpp. */ void CoinPrePostsolveMatrix::setStructuralStatus (const char *strucStatus, int lenParam) { int len ; using ::getStatus ; if (lenParam < 0) { len = ncols_ ; } else if (lenParam > ncols0_) { throw CoinError("length exceeds allocated size", "setStructuralStatus","CoinPrePostsolveMatrix") ; } else { len = lenParam ; } if (colstat_ == 0) { colstat_ = new unsigned char[ncols0_+nrows0_] ; # ifdef ZEROFAULT CoinZeroN(colstat_,ncols0_+nrows0_) ; # endif rowstat_ = colstat_+ncols0_ ; } for (int j = 0 ; j < len ; j++) { Status statj = Status(getStatus(strucStatus,j)) ; setColumnStatus(j,statj) ; } return ; } void CoinPrePostsolveMatrix::setArtificialStatus (const char *artifStatus, int lenParam) { int len ; using ::getStatus ; if (lenParam < 0) { len = nrows_ ; } else if (lenParam > nrows0_) { throw CoinError("length exceeds allocated size", "setArtificialStatus","CoinPrePostsolveMatrix") ; } else { len = lenParam ; } if (colstat_ == 0) { colstat_ = new unsigned char[ncols0_+nrows0_] ; # ifdef ZEROFAULT CoinZeroN(colstat_,ncols0_+nrows0_) ; # endif rowstat_ = colstat_+ncols0_ ; } for (int i = 0 ; i < len ; i++) { Status stati = Status(getStatus(artifStatus,i)) ; setRowStatus(i,stati) ; } return ; } /* This routine initialises structural and artificial status given a CoinWarmStartBasis as the parameter. */ void CoinPrePostsolveMatrix::setStatus (const CoinWarmStartBasis *basis) { setStructuralStatus(basis->getStructuralStatus(), basis->getNumStructural()) ; setArtificialStatus(basis->getArtificialStatus(), basis->getNumArtificial()) ; return ; } /* This routine returns structural and artificial status in the form of a CoinWarmStartBasis object. What to do when CoinPrePostsolveMatrix::Status == superBasic? There's no analog in CoinWarmStartBasis::Status. */ CoinWarmStartBasis *CoinPrePostsolveMatrix::getStatus () { int n = ncols_ ; int m = nrows_ ; CoinWarmStartBasis *wsb = new CoinWarmStartBasis() ; wsb->setSize(n,m) ; for (int j = 0 ; j < n ; j++) { CoinWarmStartBasis::Status statj = CoinWarmStartBasis::Status(getColumnStatus(j)) ; wsb->setStructStatus(j,statj) ; } for (int i = 0 ; i < m ; i++) { CoinWarmStartBasis::Status stati = CoinWarmStartBasis::Status(getRowStatus(i)) ; wsb->setArtifStatus(i,stati) ; } return (wsb) ; } #endif /* Set the status of a non-basic artificial variable based on the variable's value and bounds. */ void CoinPrePostsolveMatrix::setRowStatusUsingValue (int iRow) { double value = acts_[iRow] ; double lower = rlo_[iRow] ; double upper = rup_[iRow] ; if (lower < -1.0e20 && upper > 1.0e20) { setRowStatus(iRow,isFree) ; } else if (fabs(lower-value) <= ztolzb_) { setRowStatus(iRow,atUpperBound) ; } else if (fabs(upper-value) <= ztolzb_) { setRowStatus(iRow,atLowerBound) ; } else { setRowStatus(iRow,superBasic) ; } } /* Set the status of a non-basic structural variable based on the variable's value and bounds. */ void CoinPrePostsolveMatrix::setColumnStatusUsingValue(int iColumn) { double value = sol_[iColumn]; double lower = clo_[iColumn]; double upper = cup_[iColumn]; if (lower<-1.0e20&&upper>1.0e20) { setColumnStatus(iColumn,isFree); } else if (fabs(lower-value)<=ztolzb_) { setColumnStatus(iColumn,atLowerBound); } else if (fabs(upper-value)<=ztolzb_) { setColumnStatus(iColumn,atUpperBound); } else { setColumnStatus(iColumn,superBasic); } } #ifndef SLIM_CLP /* Simple routines to return a constant character string for the status value. Separate row and column routines for convenience, and one that just takes the status code. */ const char *CoinPrePostsolveMatrix::columnStatusString (int j) const { Status statj = getColumnStatus(j) ; switch (statj) { case isFree: { return ("NBFR") ; } case basic: { return ("B") ; } case atUpperBound: { return ("NBUB") ; } case atLowerBound: { return ("NBLB") ; } case superBasic: { return ("SB") ; } default: { return ("INVALID!") ; } } } const char *CoinPrePostsolveMatrix::rowStatusString (int j) const { Status statj = getRowStatus(j) ; switch (statj) { case isFree: { return ("NBFR") ; } case basic: { return ("B") ; } case atUpperBound: { return ("NBUB") ; } case atLowerBound: { return ("NBLB") ; } case superBasic: { return ("SB") ; } default: { return ("INVALID!") ; } } } const char *statusName (CoinPrePostsolveMatrix::Status status) { switch (status) { case CoinPrePostsolveMatrix::isFree: { return ("NBFR") ; } case CoinPrePostsolveMatrix::basic: { return ("B") ; } case CoinPrePostsolveMatrix::atUpperBound: { return ("NBUB") ; } case CoinPrePostsolveMatrix::atLowerBound: { return ("NBLB") ; } case CoinPrePostsolveMatrix::superBasic: { return ("SB") ; } default: { return ("INVALID!") ; } } } #endif CoinUtils-2.9.10/CoinUtils/src/CoinUtility.hpp0000644000076600007660000000112211510456064017655 0ustar coincoin/* $Id: CoinUtility.hpp 1372 2011-01-03 23:31:00Z lou $ */ // Copyright (C) 2004, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinUtility_h_ #define CoinUtility_h_ #include "CoinSort.hpp" template CoinPair CoinMakePair(const S& s, const T& t) { return CoinPair(s, t); } template CoinTriple CoinMakeTriple(const S& s, const T& t, const U& u) { return CoinTriple(s, t, u); } #endif CoinUtils-2.9.10/CoinUtils/src/CoinDenseFactorization.cpp0000644000076600007660000006650111552600725022015 0ustar coincoin/* $Id: CoinDenseFactorization.cpp 1417 2011-04-17 15:05:57Z forrest $ */ // Copyright (C) 2008, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include "CoinUtilsConfig.h" #include "CoinPragma.hpp" #include #include #include "CoinDenseFactorization.hpp" #include "CoinIndexedVector.hpp" #include "CoinHelperFunctions.hpp" #include "CoinPackedMatrix.hpp" #include "CoinFinite.hpp" #if COIN_BIG_DOUBLE==1 #undef DENSE_CODE #endif #ifdef DENSE_CODE // using simple lapack interface extern "C" { /** LAPACK Fortran subroutine DGETRF. */ void F77_FUNC(dgetrf,DGETRF)(ipfint * m, ipfint *n, double *A, ipfint *ldA, ipfint * ipiv, ipfint *info); /** LAPACK Fortran subroutine DGETRS. */ void F77_FUNC(dgetrs,DGETRS)(char *trans, cipfint *n, cipfint *nrhs, const double *A, cipfint *ldA, cipfint * ipiv, double *B, cipfint *ldB, ipfint *info, int trans_len); } #endif //:class CoinDenseFactorization. Deals with Factorization and Updates // CoinDenseFactorization. Constructor CoinDenseFactorization::CoinDenseFactorization ( ) : CoinOtherFactorization() { gutsOfInitialize(); } /// Copy constructor CoinDenseFactorization::CoinDenseFactorization ( const CoinDenseFactorization &other) : CoinOtherFactorization(other) { gutsOfInitialize(); gutsOfCopy(other); } // Clone CoinOtherFactorization * CoinDenseFactorization::clone() const { return new CoinDenseFactorization(*this); } /// The real work of constructors etc void CoinDenseFactorization::gutsOfDestructor() { delete [] elements_; delete [] pivotRow_; delete [] workArea_; elements_ = NULL; pivotRow_ = NULL; workArea_ = NULL; numberRows_ = 0; numberColumns_ = 0; numberGoodU_ = 0; status_ = -1; maximumRows_=0; maximumSpace_=0; solveMode_=0; } void CoinDenseFactorization::gutsOfInitialize() { pivotTolerance_ = 1.0e-1; zeroTolerance_ = 1.0e-13; #ifndef COIN_FAST_CODE slackValue_ = -1.0; #endif maximumPivots_=200; relaxCheck_=1.0; numberRows_ = 0; numberColumns_ = 0; numberGoodU_ = 0; status_ = -1; numberPivots_ = 0; maximumRows_=0; maximumSpace_=0; elements_ = NULL; pivotRow_ = NULL; workArea_ = NULL; solveMode_=0; } // ~CoinDenseFactorization. Destructor CoinDenseFactorization::~CoinDenseFactorization ( ) { gutsOfDestructor(); } // = CoinDenseFactorization & CoinDenseFactorization::operator = ( const CoinDenseFactorization & other ) { if (this != &other) { gutsOfDestructor(); gutsOfInitialize(); gutsOfCopy(other); } return *this; } #ifdef DENSE_CODE #define WORK_MULT 2 #else #define WORK_MULT 2 #endif void CoinDenseFactorization::gutsOfCopy(const CoinDenseFactorization &other) { pivotTolerance_ = other.pivotTolerance_; zeroTolerance_ = other.zeroTolerance_; #ifndef COIN_FAST_CODE slackValue_ = other.slackValue_; #endif relaxCheck_ = other.relaxCheck_; numberRows_ = other.numberRows_; numberColumns_ = other.numberColumns_; maximumRows_ = other.maximumRows_; maximumSpace_ = other.maximumSpace_; solveMode_ = other.solveMode_; numberGoodU_ = other.numberGoodU_; maximumPivots_ = other.maximumPivots_; numberPivots_ = other.numberPivots_; factorElements_ = other.factorElements_; status_ = other.status_; if (other.pivotRow_) { pivotRow_ = new int [2*maximumRows_+maximumPivots_]; CoinMemcpyN(other.pivotRow_,(2*maximumRows_+numberPivots_),pivotRow_); elements_ = new CoinFactorizationDouble [maximumSpace_]; CoinMemcpyN(other.elements_,(maximumRows_+numberPivots_)*maximumRows_,elements_); workArea_ = new CoinFactorizationDouble [maximumRows_*WORK_MULT]; CoinZeroN(workArea_,maximumRows_*WORK_MULT); } else { elements_ = NULL; pivotRow_ = NULL; workArea_ = NULL; } } // getAreas. Gets space for a factorization //called by constructors void CoinDenseFactorization::getAreas ( int numberOfRows, int numberOfColumns, CoinBigIndex , CoinBigIndex ) { numberRows_ = numberOfRows; numberColumns_ = numberOfColumns; CoinBigIndex size = numberRows_*(numberRows_+CoinMax(maximumPivots_,(numberRows_+1)>>1)); if (size>maximumSpace_) { delete [] elements_; elements_ = new CoinFactorizationDouble [size]; maximumSpace_ = size; } if (numberRows_>maximumRows_) { maximumRows_ = numberRows_; delete [] pivotRow_; delete [] workArea_; pivotRow_ = new int [2*maximumRows_+maximumPivots_]; workArea_ = new CoinFactorizationDouble [maximumRows_*WORK_MULT]; } } // preProcess. void CoinDenseFactorization::preProcess () { // could do better than this but this only a demo CoinBigIndex put = numberRows_*numberRows_; int *indexRow = reinterpret_cast (elements_+put); CoinBigIndex * starts = reinterpret_cast (pivotRow_); put = numberRows_*numberColumns_; for (int i=numberColumns_-1;i>=0;i--) { put -= numberRows_; memset(workArea_,0,numberRows_*sizeof(CoinFactorizationDouble)); assert (starts[i]<=put); for (CoinBigIndex j=starts[i];jlargest) { largest=value; iRow=j; } } if (iRow>=0) { if (iRow!=i) { // swap assert (iRow>i); CoinFactorizationDouble * elementsA = elements_; for (int k=0;k<=i;k++) { // swap CoinFactorizationDouble value = elementsA[i]; elementsA[i]=elementsA[iRow]; elementsA[iRow]=value; elementsA += numberRows_; } int iPivot = pivotRow_[i+numberRows_]; pivotRow_[i+numberRows_]=pivotRow_[iRow+numberRows_]; pivotRow_[iRow+numberRows_]=iPivot; } CoinFactorizationDouble pivotValue = 1.0/elements[i]; elements[i]=pivotValue; for (int j=i+1;j (workArea_); int i; for ( i=0;i=0); for ( i=numberGoodU_;idenseVector ( ); int *regionIndex = regionSparse->getIndices ( ); int numberNonZero = regionSparse->getNumElements ( ); int i; memset(elements,0,numberRows_*sizeof(CoinFactorizationDouble)); CoinFactorizationDouble pivotValue = pivotCheck; if (fabs(pivotValue)packedMode()) { for (i=0;ipackedMode()) { for (i=0;i=0 */ int CoinDenseFactorization::updateColumn ( CoinIndexedVector * regionSparse, CoinIndexedVector * regionSparse2, bool noPermute) const { assert (numberRows_==numberColumns_); double *region2 = regionSparse2->denseVector ( ); int *regionIndex = regionSparse2->getIndices ( ); int numberNonZero = regionSparse2->getNumElements ( ); double *region = regionSparse->denseVector ( ); #ifdef DENSE_CODE if ((solveMode_%10)==0) { #endif if (!regionSparse2->packedMode()) { if (!noPermute) { for (int j=0;jdenseVector ( ); } } else { // packed mode assert (!noPermute); for (int j=0;jpackedMode()) { if (!noPermute) { for (int j=0;jdenseVector ( ); } } else { // packed mode assert (!noPermute); for (int j=0;j=0;i--) { elements -= numberRows_; CoinFactorizationDouble value = region[i]*elements[i]; region[i] = value; for (int j=0;jpackedMode()) { for (int j=0;jzeroTolerance_) { region2[j] = value; regionIndex[numberNonZero++]=j; } } } else { // packed mode for (int j=0;jzeroTolerance_) { region2[numberNonZero] = value; regionIndex[numberNonZero++]=j; } } } } else { for (int j=0;jzeroTolerance_) { regionIndex[numberNonZero++]=j; } else { region[j]=0.0; } } } #ifdef DENSE_CODE } else { // lapack if (!noPermute) { if (!regionSparse2->packedMode()) { for (int j=0;jzeroTolerance_) { region2[j] = value; regionIndex[numberNonZero++]=j; } } } else { // packed mode for (int j=0;jzeroTolerance_) { region2[numberNonZero] = value; regionIndex[numberNonZero++]=j; } } } } else { for (int j=0;jzeroTolerance_) { regionIndex[numberNonZero++]=j; } else { region[j]=0.0; } } } } #endif regionSparse2->setNumElements(numberNonZero); return 0; } int CoinDenseFactorization::updateTwoColumnsFT(CoinIndexedVector * regionSparse1, CoinIndexedVector * regionSparse2, CoinIndexedVector * regionSparse3, bool /*noPermute*/) { #ifdef DENSE_CODE #if 0 CoinIndexedVector s2(*regionSparse2); CoinIndexedVector s3(*regionSparse3); updateColumn(regionSparse1,&s2); updateColumn(regionSparse1,&s3); #endif if ((solveMode_%10)==0) { #endif updateColumn(regionSparse1,regionSparse2); updateColumn(regionSparse1,regionSparse3); #ifdef DENSE_CODE } else { // lapack assert (numberRows_==numberColumns_); double *region2 = regionSparse2->denseVector ( ); int *regionIndex2 = regionSparse2->getIndices ( ); int numberNonZero2 = regionSparse2->getNumElements ( ); CoinFactorizationDouble * regionW2 = workArea_; if (!regionSparse2->packedMode()) { for (int j=0;jdenseVector ( ); int *regionIndex3 = regionSparse3->getIndices ( ); int numberNonZero3 = regionSparse3->getNumElements ( ); CoinFactorizationDouble *regionW3 = workArea_+numberRows_; if (!regionSparse3->packedMode()) { for (int j=0;jpackedMode()) { for (int j=0;jzeroTolerance_) { region2[j] = value; regionIndex2[numberNonZero2++]=j; } } } else { // packed mode for (int j=0;jzeroTolerance_) { region2[numberNonZero2] = value; regionIndex2[numberNonZero2++]=j; } } } regionSparse2->setNumElements(numberNonZero2); numberNonZero3=0; if (!regionSparse3->packedMode()) { for (int j=0;jzeroTolerance_) { region3[j] = value; regionIndex3[numberNonZero3++]=j; } } } else { // packed mode for (int j=0;jzeroTolerance_) { region3[numberNonZero3] = value; regionIndex3[numberNonZero3++]=j; } } } regionSparse3->setNumElements(numberNonZero3); #if 0 printf("Good2==\n"); s2.print(); printf("Bad2==\n"); regionSparse2->print(); printf("======\n"); printf("Good3==\n"); s3.print(); printf("Bad3==\n"); regionSparse3->print(); printf("======\n"); #endif } #endif return 0; } /* Updates one column (BTRAN) from regionSparse2 regionSparse starts as zero and is zero at end Note - if regionSparse2 packed on input - will be packed on output */ int CoinDenseFactorization::updateColumnTranspose ( CoinIndexedVector * regionSparse, CoinIndexedVector * regionSparse2) const { assert (numberRows_==numberColumns_); double *region2 = regionSparse2->denseVector ( ); int *regionIndex = regionSparse2->getIndices ( ); int numberNonZero = regionSparse2->getNumElements ( ); double *region = regionSparse->denseVector ( ); #ifdef DENSE_CODE if ((solveMode_%10)==0) { #endif if (!regionSparse2->packedMode()) { for (int j=0;jpackedMode()) { for (int j=0;j=0;i--) { elements -= numberRows_; int iPivot = pivotRow_[i+2*numberRows_]; CoinFactorizationDouble value = region[iPivot]; //*elements[iPivot]; for (int j=0;j=0;i--) { elements -= numberRows_; CoinFactorizationDouble value = region[i]; for (int j=i+1;jpackedMode()) { for (int j=0;jzeroTolerance_) { region2[iRow] = value; regionIndex[numberNonZero++]=iRow; } } } else { for (int j=0;jzeroTolerance_) { region2[numberNonZero] = value; regionIndex[numberNonZero++]=iRow; } } } #ifdef DENSE_CODE } else { // lapack if (!regionSparse2->packedMode()) { for (int j=0;jzeroTolerance_) { region2[j] = value; regionIndex[numberNonZero++]=j; } } } else { for (int j=0;jzeroTolerance_) { region2[numberNonZero] = value; regionIndex[numberNonZero++]=j; } } } } #endif regionSparse2->setNumElements(numberNonZero); return 0; } // Default constructor CoinOtherFactorization::CoinOtherFactorization ( ) : pivotTolerance_(1.0e-1), zeroTolerance_(1.0e-13), #ifndef COIN_FAST_CODE slackValue_(-1.0), #endif relaxCheck_(1.0), factorElements_(0), numberRows_(0), numberColumns_(0), numberGoodU_(0), maximumPivots_(200), numberPivots_(0), status_(-1), solveMode_(0) { } // Copy constructor CoinOtherFactorization::CoinOtherFactorization ( const CoinOtherFactorization &other) : pivotTolerance_(other.pivotTolerance_), zeroTolerance_(other.zeroTolerance_), #ifndef COIN_FAST_CODE slackValue_(other.slackValue_), #endif relaxCheck_(other.relaxCheck_), factorElements_(other.factorElements_), numberRows_(other.numberRows_), numberColumns_(other.numberColumns_), numberGoodU_(other.numberGoodU_), maximumPivots_(other.maximumPivots_), numberPivots_(other.numberPivots_), status_(other.status_), solveMode_(other.solveMode_) { } // Destructor CoinOtherFactorization::~CoinOtherFactorization ( ) { } // = copy CoinOtherFactorization & CoinOtherFactorization::operator = ( const CoinOtherFactorization & other ) { if (this != &other) { pivotTolerance_ = other.pivotTolerance_; zeroTolerance_ = other.zeroTolerance_; #ifndef COIN_FAST_CODE slackValue_ = other.slackValue_; #endif relaxCheck_ = other.relaxCheck_; factorElements_ = other.factorElements_; numberRows_ = other.numberRows_; numberColumns_ = other.numberColumns_; numberGoodU_ = other.numberGoodU_; maximumPivots_ = other.maximumPivots_; numberPivots_ = other.numberPivots_; status_ = other.status_; solveMode_ = other.solveMode_; } return *this; } void CoinOtherFactorization::pivotTolerance ( double value ) { if (value>0.0&&value<=1.0) { pivotTolerance_=value; } } void CoinOtherFactorization::zeroTolerance ( double value ) { if (value>0.0&&value<1.0) { zeroTolerance_=value; } } #ifndef COIN_FAST_CODE void CoinOtherFactorization::slackValue ( double value ) { if (value>=0.0) { slackValue_=1.0; } else { slackValue_=-1.0; } } #endif void CoinOtherFactorization::maximumPivots ( int value ) { if (value>maximumPivots_) { delete [] pivotRow_; pivotRow_ = new int[2*maximumRows_+value]; } maximumPivots_ = value; } // Number of entries in each row int * CoinOtherFactorization::numberInRow() const { return reinterpret_cast (workArea_);} // Number of entries in each column int * CoinOtherFactorization::numberInColumn() const { return (reinterpret_cast (workArea_))+numberRows_;} // Returns array to put basis starts in CoinBigIndex * CoinOtherFactorization::starts() const { return reinterpret_cast (pivotRow_);} // Returns array to put basis elements in CoinFactorizationDouble * CoinOtherFactorization::elements() const { return elements_;} // Returns pivot row int * CoinOtherFactorization::pivotRow() const { return pivotRow_;} // Returns work area CoinFactorizationDouble * CoinOtherFactorization::workArea() const { return workArea_;} // Returns int work area int * CoinOtherFactorization::intWorkArea() const { return reinterpret_cast (workArea_);} // Returns permute back int * CoinOtherFactorization::permuteBack() const { return pivotRow_+numberRows_;} // Returns true if wants tableauColumn in replaceColumn bool CoinOtherFactorization::wantsTableauColumn() const { return true;} /* Useful information for factorization 0 - iteration number whereFrom is 0 for factorize and 1 for replaceColumn */ void CoinOtherFactorization::setUsefulInformation(const int * ,int ) { } CoinUtils-2.9.10/CoinUtils/src/CoinPresolveFixed.hpp0000644000076600007660000001356611670247221021010 0ustar coincoin/* $Id: CoinPresolveFixed.hpp 1510 2011-12-08 23:56:01Z lou $ */ // 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). #ifndef CoinPresolveFixed_H #define CoinPresolveFixed_H #define FIXED_VARIABLE 1 /*! \class remove_fixed_action \brief Excise fixed variables from the model. Implements the action of virtually removing one or more fixed variables x_j from the model by substituting the value sol_j in each constraint. Specifically, for each constraint i where a_ij != 0, rlo_i and rup_i are adjusted by -a_ij*sol_j and a_ij is set to 0. There is an implicit assumption that the variable already has the correct value. If this isn't true, corrections to row activity may be incorrect. If you want to guard against this possibility, consider make_fixed_action. Actual removal of the empty column from the matrix is handled by drop_empty_cols_action. Correction of the objective function is done there. */ class remove_fixed_action : public CoinPresolveAction { public: /*! \brief Structure to hold information necessary to reintroduce a column into the problem representation. */ struct action { int col; ///< column index of variable int start; ///< start of coefficients in #colels_ and #colrows_ double sol; ///< value of variable }; /// Array of row indices for coefficients of excised columns int *colrows_; /// Array of coefficients of excised columns double *colels_; /// Number of entries in #actions_ int nactions_; /// Vector specifying variable(s) affected by this object action *actions_; private: /*! \brief Constructor */ remove_fixed_action(int nactions, action *actions, double * colels, int * colrows, const CoinPresolveAction *next); public: /// Returns string "remove_fixed_action". const char *name() const; /*! \brief Excise the specified columns. Remove the specified columns (\p nfcols, \p fcols) from the problem representation (\p prob), leaving the appropriate postsolve object linked as the head of the list of postsolve objects (currently headed by \p next). */ static const remove_fixed_action *presolve(CoinPresolveMatrix *prob, int *fcols, int nfcols, const CoinPresolveAction *next); void postsolve(CoinPostsolveMatrix *prob) const; /// Destructor virtual ~remove_fixed_action(); }; /*! \relates remove_fixed_action \brief Scan the problem for fixed columns and remove them. A front end to collect a list of columns with equal bounds and hand them to remove_fixed_action::presolve() for processing. */ const CoinPresolveAction *remove_fixed(CoinPresolveMatrix *prob, const CoinPresolveAction *next); /*! \class make_fixed_action \brief Fix a variable at a specified bound. Implements the action of fixing a variable by forcing both bounds to the same value and forcing the value of the variable to match. If the bounds are already equal, and the value of the variable is already correct, consider remove_fixed_action. */ class make_fixed_action : public CoinPresolveAction { /// Structure to preserve the bound overwritten when fixing a variable struct action { double bound; ///< Value of bound overwritten to fix variable. int col ; ///< column index of variable }; /// Number of preserved bounds int nactions_; /// Vector of preserved bounds, one for each variable fixed in this object const action *actions_; /*! \brief True to fix at lower bound, false to fix at upper bound. Note that this applies to all variables fixed in this object. */ const bool fix_to_lower_; /*! \brief The postsolve object with the information required to repopulate the fixed columns. */ const remove_fixed_action *faction_; /*! \brief Constructor */ make_fixed_action(int nactions, const action *actions, bool fix_to_lower, const remove_fixed_action *faction, const CoinPresolveAction *next) : CoinPresolveAction(next), nactions_(nactions), actions_(actions), fix_to_lower_(fix_to_lower), faction_(faction) {} public: /// Returns string "make_fixed_action". const char *name() const; /*! \brief Perform actions to fix variables and return postsolve object For each specified variable (\p nfcols, \p fcols), fix the variable to the specified bound (\p fix_to_lower) by setting the variable's bounds to be equal in \p prob. Create a postsolve object, link it at the head of the list of postsolve objects (\p next), and return the object. */ static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob, int *fcols, int nfcols, bool fix_to_lower, const CoinPresolveAction *next); /*! \brief Postsolve (unfix variables) Back out the variables fixed by the presolve side of this object. */ void postsolve(CoinPostsolveMatrix *prob) const; /// Destructor virtual ~make_fixed_action() { deleteAction(actions_,action*); delete faction_; } }; /*! \relates make_fixed_action \brief Scan variables and fix any with equal bounds A front end to collect a list of columns with equal bounds and hand them to make_fixed_action::presolve() for processing. */ const CoinPresolveAction *make_fixed(CoinPresolveMatrix *prob, const CoinPresolveAction *next) ; /*! \brief Transfer costs from singleton variables \relates make_fixed_action Transfers costs from singleton variables in equalities onto the other variables. Will also transfer costs from one integer variable to other integer variables with zero cost if there's a net gain in integer variables with non-zero cost. The relation to make_fixed_action is tenuous, but this transform should be attempted before the initial round of variable fixing. */ void transferCosts(CoinPresolveMatrix * prob); #endif CoinUtils-2.9.10/CoinUtils/src/CoinPresolveEmpty.hpp0000644000076600007660000000645712054012620021036 0ustar coincoin/* $Id: CoinPresolveEmpty.hpp 1561 2012-11-24 00:32:16Z lou $ */ // 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). #ifndef CoinPresolveEmpty_H #define CoinPresolveEmpty_H /*! \file Drop/reinsert empty rows/columns. */ const int DROP_ROW = 3; const int DROP_COL = 4; /*! \class drop_empty_cols_action \brief Physically removes empty columns in presolve, and reinserts empty columns in postsolve. Physical removal of rows and columns should be the last activities performed during presolve. Do them exactly once. The row-major matrix is not maintained by this transform. To physically drop the columns, CoinPrePostsolveMatrix::mcstrt_ and CoinPrePostsolveMatrix::hincol_ are compressed, along with column bounds, objective, and (if present) the column portions of the solution. This renumbers the columns. drop_empty_cols_action::presolve will reconstruct CoinPresolveMatrix::clink_. \todo Confirm correct behaviour with solution in presolve. */ class drop_empty_cols_action : public CoinPresolveAction { private: const int nactions_; struct action { double clo; double cup; double cost; double sol; int jcol; }; const action *const actions_; drop_empty_cols_action(int nactions, const action *const actions, const CoinPresolveAction *next) : CoinPresolveAction(next), nactions_(nactions), actions_(actions) {} public: const char *name() const { return ("drop_empty_cols_action"); } static const CoinPresolveAction *presolve(CoinPresolveMatrix *, const int *ecols, int necols, const CoinPresolveAction*); static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next); void postsolve(CoinPostsolveMatrix *prob) const; virtual ~drop_empty_cols_action() { deleteAction(actions_,action*); } }; /*! \class drop_empty_rows_action \brief Physically removes empty rows in presolve, and reinserts empty rows in postsolve. Physical removal of rows and columns should be the last activities performed during presolve. Do them exactly once. The row-major matrix is not maintained by this transform. To physically drop the rows, the rows are renumbered, excluding empty rows. This involves rewriting CoinPrePostsolveMatrix::hrow_ and compressing the row bounds and (if present) the row portions of the solution. \todo Confirm behaviour when a solution is present in presolve. */ class drop_empty_rows_action : public CoinPresolveAction { private: struct action { double rlo; double rup; int row; int fill_row; // which row was moved into position row to fill it }; const int nactions_; const action *const actions_; drop_empty_rows_action(int nactions, const action *actions, const CoinPresolveAction *next) : CoinPresolveAction(next), nactions_(nactions), actions_(actions) {} public: const char *name() const { return ("drop_empty_rows_action"); } static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next); void postsolve(CoinPostsolveMatrix *prob) const; virtual ~drop_empty_rows_action() { deleteAction(actions_,action*); } }; #endif CoinUtils-2.9.10/CoinUtils/src/CoinMessageHandler.hpp0000644000076600007660000005371211670766273021125 0ustar coincoin/* $Id: CoinMessageHandler.hpp 1514 2011-12-10 23:35:23Z lou $ */ // 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). #ifndef CoinMessageHandler_H #define CoinMessageHandler_H #include "CoinUtilsConfig.h" #include "CoinPragma.hpp" #include #include #include #include /** \file CoinMessageHandler.hpp \brief This is a first attempt at a message handler. The COIN Project is in favo(u)r of multi-language support. This implementation of a message handler tries to make it as lightweight as possible in the sense that only a subset of messages need to be defined --- the rest default to US English. The default handler at present just prints to stdout or to a FILE pointer \todo This needs to be worked over for correct operation with ISO character codes. */ /* I (jjf) am strongly in favo(u)r of language support for an open source project, but I have tried to make it as lightweight as possible in the sense that only a subset of messages need to be defined - the rest default to US English. There will be different sets of messages for each component - so at present there is a Clp component and a Coin component. Because messages are only used in a controlled environment and have no impact on code and are tested by other tests I have included tests such as language and derivation in other unit tests. */ /* Where there are derived classes I (jjf) have started message numbers at 1001. */ /** \brief Class for one massaged message. A message consists of a text string with formatting codes (#message_), an integer identifier (#externalNumber_) which also determines the severity level (#severity_) of the message, and a detail (logging) level (#detail_). CoinOneMessage is just a container to hold this information. The interpretation is set by CoinMessageHandler, which see. */ class CoinOneMessage { public: /**@name Constructors etc */ //@{ /** Default constructor. */ CoinOneMessage(); /** Normal constructor */ CoinOneMessage(int externalNumber, char detail, const char * message); /** Destructor */ ~CoinOneMessage(); /** The copy constructor */ CoinOneMessage(const CoinOneMessage&); /** assignment operator. */ CoinOneMessage& operator=(const CoinOneMessage&); //@} /**@name Useful stuff */ //@{ /// Replace message text (e.g., text in a different language) void replaceMessage(const char * message); //@} /**@name Get and set methods */ //@{ /** Get message ID number */ inline int externalNumber() const {return externalNumber_;} /** \brief Set message ID number In the default CoinMessageHandler, this number is printed in the message prefix and is used to determine the message severity level. */ inline void setExternalNumber(int number) {externalNumber_=number;} /// Severity inline char severity() const {return severity_;} /// Set detail level inline void setDetail(int level) {detail_=static_cast (level);} /// Get detail level inline int detail() const {return detail_;} /// Return the message text inline char * message() const {return message_;} //@} /**@name member data */ //@{ /// number to print out (also determines severity) int externalNumber_; /// Will only print if detail matches char detail_; /// Severity char severity_; /// Messages (in correct language) (not all 400 may exist) mutable char message_[400]; //@} }; /** \brief Class to hold and manipulate an array of massaged messages. Note that the message index used to reference a message in the array of messages is completely distinct from the external ID number stored with the message. */ class CoinMessages { public: /** \brief Supported languages These are the languages that are supported. At present only us_en is serious and the rest are for testing. */ enum Language { us_en = 0, uk_en, it }; /**@name Constructors etc */ //@{ /** Constructor with number of messages. */ CoinMessages(int numberMessages=0); /** Destructor */ ~CoinMessages(); /** The copy constructor */ CoinMessages(const CoinMessages&); /** assignment operator. */ CoinMessages& operator=(const CoinMessages&); //@} /**@name Useful stuff */ //@{ /*! \brief Installs a new message in the specified index position Any existing message is replaced, and a copy of the specified message is installed. */ void addMessage(int messageNumber, const CoinOneMessage & message); /*! \brief Replaces the text of the specified message Any existing text is deleted and the specified text is copied into the specified message. */ void replaceMessage(int messageNumber, const char * message); /** Language. Need to think about iso codes */ inline Language language() const {return language_;} /** Set language */ void setLanguage(Language newlanguage) {language_ = newlanguage;} /// Change detail level for one message void setDetailMessage(int newLevel, int messageNumber); /** \brief Change detail level for several messages messageNumbers is expected to contain the indices of the messages to be changed. If numberMessages >= 10000 or messageNumbers is NULL, the detail level is changed on all messages. */ void setDetailMessages(int newLevel, int numberMessages, int * messageNumbers); /** Change detail level for all messages with low <= ID number < high */ void setDetailMessages(int newLevel, int low, int high); /// Returns class inline int getClass() const { return class_;} /// Moves to compact format void toCompact(); /// Moves from compact format void fromCompact(); //@} /**@name member data */ //@{ /// Number of messages int numberMessages_; /// Language Language language_; /// Source (null-terminated string, maximum 4 characters). char source_[5]; /// Class - see later on before CoinMessageHandler int class_; /** Length of fake CoinOneMessage array. First you get numberMessages_ pointers which point to stuff */ int lengthMessages_; /// Messages CoinOneMessage ** message_; //@} }; // for convenience eol enum CoinMessageMarker { CoinMessageEol = 0, CoinMessageNewline = 1 }; /** Base class for message handling The default behavior is described here: messages are printed, and (if the severity is sufficiently high) execution will be aborted. Inherit and redefine the methods #print and #checkSeverity to augment the behaviour. Messages can be printed with or without a prefix; the prefix will consist of a source string, the external ID number, and a letter code, e.g., Clp6024W. A prefix makes the messages look less nimble but is very useful for "grep" etc.

Usage

The general approach to using the COIN messaging facility is as follows:
  • Define your messages. For each message, you must supply an external ID number, a log (detail) level, and a format string. Typically, you define a convenience structure for this, something that's easy to use to create an array of initialised message definitions at compile time.
  • Create a CoinMessages object, sized to accommodate the number of messages you've defined. (Incremental growth will happen if necessary as messages are loaded, but it's inefficient.)
  • Load the messages into the CoinMessages object. Typically this entails creating a CoinOneMessage object for each message and passing it as a parameter to CoinMessages::addMessage(). You specify the message's internal ID as the other parameter to addMessage.
  • Create and use a CoinMessageHandler object to print messages.
See, for example, CoinMessage.hpp and CoinMessage.cpp for an example of the first three steps. `Format codes' below has a simple example of printing a message.

External ID numbers and severity

CoinMessageHandler assumes the following relationship between the external ID number of a message and the severity of the message: \li <3000 are informational ('I') \li <6000 warnings ('W') \li <9000 non-fatal errors ('E') \li >=9000 aborts the program (after printing the message) ('S')

Log (detail) levels

The default behaviour is that a message will print if its detail level is less than or equal to the handler's log level. If all you want to do is set a single log level for the handler, use #setLogLevel(int). If you want to get fancy, here's how it really works: There's an array, #logLevels_, which you can manipulate with #setLogLevel(int,int). Each entry logLevels_[i] specifies the log level for messages of class i (see CoinMessages::class_). If logLevels_[0] is set to the magic number -1000 you get the simple behaviour described above, whatever the class of the messages. If logLevels_[0] is set to a valid log level (>= 0), then logLevels_[i] really is the log level for messages of class i.

Format codes

CoinMessageHandler can print integers (normal, long, and long long), doubles, characters, and strings. See the descriptions of the various << operators. When processing a standard message with a format string, the formatting codes specified in the format string will be passed to the sprintf function, along with the argument. When generating a message with no format string, each << operator uses a simple format code appropriate for its argument. Consult the documentation for the standard printf facility for further information on format codes. The special format code `%?' provides a hook to enable or disable printing. For each `%?' code, there must be a corresponding call to printing(bool). This provides a way to define optional parts in messages, delineated by the code `%?' in the format string. Printing can be suppressed for these optional parts, but any operands must still be supplied. For example, given the message string \verbatim "A message with%? an optional integer %d and%? a double %g." \endverbatim installed in CoinMessages \c exampleMsgs with index 5, and \c CoinMessageHandler \c hdl, the code \code hdl.message(5,exampleMsgs) ; hdl.printing(true) << 42 ; hdl.printing(true) << 53.5 << CoinMessageEol ; \endcode will print \verbatim A message with an optional integer 42 and a double 53.5. \endverbatim while \code hdl.message(5,exampleMsgs) ; hdl.printing(false) << 42 ; hdl.printing(true) << 53.5 << CoinMessageEol ; \endcode will print \verbatim A message with a double 53.5. \endverbatim For additional examples of usage, see CoinMessageHandlerUnitTest in CoinMessageHandlerTest.cpp. */ class CoinMessageHandler { friend bool CoinMessageHandlerUnitTest () ; public: /**@name Virtual methods that the derived classes may provide */ //@{ /** Print message, return 0 normally. */ virtual int print() ; /** Check message severity - if too bad then abort */ virtual void checkSeverity() ; //@} /**@name Constructors etc */ //@{ /// Constructor CoinMessageHandler(); /// Constructor to put to file pointer (won't be closed) CoinMessageHandler(FILE *fp); /** Destructor */ virtual ~CoinMessageHandler(); /** The copy constructor */ CoinMessageHandler(const CoinMessageHandler&); /** Assignment operator. */ CoinMessageHandler& operator=(const CoinMessageHandler&); /// Clone virtual CoinMessageHandler * clone() const; //@} /**@name Get and set methods */ //@{ /// Get detail level of a message. inline int detail(int messageNumber, const CoinMessages &normalMessage) const { return normalMessage.message_[messageNumber]->detail();} /** Get current log (detail) level. */ inline int logLevel() const { return logLevel_;} /** \brief Set current log (detail) level. If the log level is equal or greater than the detail level of a message, the message will be printed. A rough convention for the amount of output expected is - 0 - none - 1 - minimal - 2 - normal low - 3 - normal high - 4 - verbose Please assign log levels to messages accordingly. Log levels of 8 and above (8,16,32, etc.) are intended for selective debugging. The logical AND of the log level specified in the message and the current log level is used to determine if the message is printed. (In other words, you're using individual bits to determine which messages are printed.) */ void setLogLevel(int value); /** Get alternative log level. */ inline int logLevel(int which) const { return logLevels_[which];} /*! \brief Set alternative log level value. Can be used to store alternative log level information within the handler. */ void setLogLevel(int which, int value); /// Set the number of significant digits for printing floating point numbers void setPrecision(unsigned int new_precision); /// Current number of significant digits for printing floating point numbers inline int precision() { return (g_precision_) ; } /// Switch message prefix on or off. void setPrefix(bool yesNo); /// Current setting for printing message prefix. bool prefix() const; /*! \brief Values of double fields already processed. As the parameter for a double field is processed, the value is saved and can be retrieved using this function. */ inline double doubleValue(int position) const { return doubleValue_[position];} /*! \brief Number of double fields already processed. Incremented each time a field of type double is processed. */ inline int numberDoubleFields() const {return static_cast(doubleValue_.size());} /*! \brief Values of integer fields already processed. As the parameter for a integer field is processed, the value is saved and can be retrieved using this function. */ inline int intValue(int position) const { return longValue_[position];} /*! \brief Number of integer fields already processed. Incremented each time a field of type integer is processed. */ inline int numberIntFields() const {return static_cast(longValue_.size());} /*! \brief Values of char fields already processed. As the parameter for a char field is processed, the value is saved and can be retrieved using this function. */ inline char charValue(int position) const { return charValue_[position];} /*! \brief Number of char fields already processed. Incremented each time a field of type char is processed. */ inline int numberCharFields() const {return static_cast(charValue_.size());} /*! \brief Values of string fields already processed. As the parameter for a string field is processed, the value is saved and can be retrieved using this function. */ inline std::string stringValue(int position) const { return stringValue_[position];} /*! \brief Number of string fields already processed. Incremented each time a field of type string is processed. */ inline int numberStringFields() const {return static_cast(stringValue_.size());} /// Current message inline CoinOneMessage currentMessage() const {return currentMessage_;} /// Source of current message inline std::string currentSource() const {return source_;} /// Output buffer inline const char * messageBuffer() const {return messageBuffer_;} /// Highest message number (indicates any errors) inline int highestNumber() const {return highestNumber_;} /// Get current file pointer inline FILE * filePointer() const { return fp_;} /// Set new file pointer inline void setFilePointer(FILE * fp) { fp_ = fp;} //@} /**@name Actions to create a message */ //@{ /*! \brief Start a message Look up the specified message. A prefix will be generated if enabled. The message will be printed if the current log level is equal or greater than the log level of the message. */ CoinMessageHandler &message(int messageNumber, const CoinMessages &messages) ; /*! \brief Start or continue a message With detail = -1 (default), does nothing except return a reference to the handler. (I.e., msghandler.message() << "foo" is precisely equivalent to msghandler << "foo".) If \p msgDetail is >= 0, is will be used as the detail level to determine whether the message should print (assuming class 0). This can be used with any of the << operators. One use is to start a message which will be constructed entirely from scratch. Another use is continuation of a message after code that interrupts the usual sequence of << operators. */ CoinMessageHandler & message(int detail = -1) ; /*! \brief Print a complete message Generate a standard prefix and append \c msg `as is'. This is intended as a transition mechanism. The standard prefix is generated (if enabled), and \c msg is appended. The message must be ended with a CoinMessageEol marker. Attempts to add content with << will have no effect. The default value of \p detail will not change printing status. If \p detail is >= 0, it will be used as the detail level to determine whether the message should print (assuming class 0). */ CoinMessageHandler &message(int externalNumber, const char *source, const char *msg, char severity, int detail = -1) ; /*! \brief Process an integer parameter value. The default format code is `%d'. */ CoinMessageHandler & operator<< (int intvalue); #if COIN_BIG_INDEX==1 /*! \brief Process a long integer parameter value. The default format code is `%ld'. */ CoinMessageHandler & operator<< (long longvalue); #endif #if COIN_BIG_INDEX==2 /*! \brief Process a long long integer parameter value. The default format code is `%ld'. */ CoinMessageHandler & operator<< (long long longvalue); #endif /*! \brief Process a double parameter value. The default format code is `%d'. */ CoinMessageHandler & operator<< (double doublevalue); /*! \brief Process a STL string parameter value. The default format code is `%g'. */ CoinMessageHandler & operator<< (const std::string& stringvalue); /*! \brief Process a char parameter value. The default format code is `%s'. */ CoinMessageHandler & operator<< (char charvalue); /*! \brief Process a C-style string parameter value. The default format code is `%c'. */ CoinMessageHandler & operator<< (const char *stringvalue); /*! \brief Process a marker. The default format code is `%s'. */ CoinMessageHandler & operator<< (CoinMessageMarker); /** Finish (and print) the message. Equivalent to using the CoinMessageEol marker. */ int finish(); /*! \brief Enable or disable printing of an optional portion of a message. Optional portions of a message are delimited by `%?' markers, and printing processes one %? marker. If \c onOff is true, the subsequent portion of the message (to the next %? marker or the end of the format string) will be printed. If \c onOff is false, printing is suppressed. Parameters must still be supplied, whether printing is suppressed or not. See the class documentation for an example. */ CoinMessageHandler & printing(bool onOff); //@} /** Log levels will be by type and will then use type given in CoinMessage::class_ - 0 - Branch and bound code or similar - 1 - Solver - 2 - Stuff in Coin directory - 3 - Cut generators */ #define COIN_NUM_LOG 4 /// Maximum length of constructed message (characters) #define COIN_MESSAGE_HANDLER_MAX_BUFFER_SIZE 1000 protected: /**@name Protected member data */ //@{ /// values in message std::vector doubleValue_; std::vector longValue_; std::vector charValue_; std::vector stringValue_; /// Log level int logLevel_; /// Log levels int logLevels_[COIN_NUM_LOG]; /// Whether we want prefix (may get more subtle so is int) int prefix_; /// Current message CoinOneMessage currentMessage_; /// Internal number for use with enums int internalNumber_; /// Format string for message (remainder) char * format_; /// Output buffer char messageBuffer_[COIN_MESSAGE_HANDLER_MAX_BUFFER_SIZE]; /// Position in output buffer char * messageOut_; /// Current source of message std::string source_; /** 0 - Normal. 1 - Put in values, move along format, but don't print. 2 - A complete message was provided; nothing more to do but print when CoinMessageEol is processed. Any << operators are treated as noops. 3 - do nothing except look for CoinMessageEol (i.e., the message detail level was not sufficient to cause it to print). */ int printStatus_; /// Highest message number (indicates any errors) int highestNumber_; /// File pointer FILE * fp_; /// Current format for floating point numbers char g_format_[8]; /// Current number of significant digits for floating point numbers int g_precision_ ; //@} private: /** The body of the copy constructor and the assignment operator */ void gutsOfCopy(const CoinMessageHandler &rhs) ; /*! \brief Internal function to locate next format code. Intended for internal use. Side effects modify the format string. */ char *nextPerCent(char *start, const bool initial = false) ; /*! \brief Internal printing function. Makes it easier to split up print into clean, print and check severity */ int internalPrint() ; /// Decide if this message should print. void calcPrintStatus(int msglvl, int msgclass) ; }; //############################################################################# /** A function that tests the methods in the CoinMessageHandler class. The only reason for it not to be a member method is that this way it doesn't have to be compiled into the library. And that's a gain, because the library should be compiled with optimization on, but this method should be compiled with debugging. */ bool CoinMessageHandlerUnitTest(); #endif CoinUtils-2.9.10/CoinUtils/src/CoinShallowPackedVector.hpp0000644000076600007660000001150311654260357022131 0ustar coincoin/* $Id: CoinShallowPackedVector.hpp 1498 2011-11-02 15:25:35Z mjs $ */ // 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 CoinShallowPackedVector_H #define CoinShallowPackedVector_H #if defined(_MSC_VER) // Turn off compiler warning about long names # pragma warning(disable:4786) #endif #include "CoinError.hpp" #include "CoinPackedVectorBase.hpp" /** Shallow Sparse Vector This class is for sparse vectors where the indices and elements are stored elsewhere. This class only maintains pointers to the indices and elements. Since this class does not own the index and element data it provides read only access to to the data. An CoinSparsePackedVector must be used when the sparse vector's data will be altered. This class stores pointers to the vectors. It does not actually contain the vectors. Here is a sample usage: @verbatim const int ne = 4; int inx[ne] = { 1, 4, 0, 2 }; double el[ne] = { 10., 40., 1., 50. }; // Create vector and set its value CoinShallowPackedVector r(ne,inx,el); // access each index and element assert( r.indices ()[0]== 1 ); assert( r.elements()[0]==10. ); assert( r.indices ()[1]== 4 ); assert( r.elements()[1]==40. ); assert( r.indices ()[2]== 0 ); assert( r.elements()[2]== 1. ); assert( r.indices ()[3]== 2 ); assert( r.elements()[3]==50. ); // access as a full storage vector assert( r[ 0]==1. ); assert( r[ 1]==10.); assert( r[ 2]==50.); assert( r[ 3]==0. ); assert( r[ 4]==40.); // Tests for equality and equivalence CoinShallowPackedVector r1; r1=r; assert( r==r1 ); r.sort(CoinIncrElementOrdered()); assert( r!=r1 ); // Add packed vectors. // Similarly for subtraction, multiplication, // and division. CoinPackedVector add = r + r1; assert( add[0] == 1.+ 1. ); assert( add[1] == 10.+10. ); assert( add[2] == 50.+50. ); assert( add[3] == 0.+ 0. ); assert( add[4] == 40.+40. ); assert( r.sum() == 10.+40.+1.+50. ); @endverbatim */ class CoinShallowPackedVector : public CoinPackedVectorBase { friend void CoinShallowPackedVectorUnitTest(); public: /**@name Get methods */ //@{ /// Get length of indices and elements vectors virtual int getNumElements() const { return nElements_; } /// Get indices of elements virtual const int * getIndices() const { return indices_; } /// Get element values virtual const double * getElements() const { return elements_; } //@} /**@name Set methods */ //@{ /// Reset the vector (as if were just created an empty vector) void clear(); /** Assignment operator. */ CoinShallowPackedVector& operator=(const CoinShallowPackedVector & x); /** Assignment operator from a CoinPackedVectorBase. */ CoinShallowPackedVector& operator=(const CoinPackedVectorBase & x); /** just like the explicit constructor */ void setVector(int size, const int * indices, const double * elements, bool testForDuplicateIndex = true); //@} /**@name Methods to create, set and destroy */ //@{ /** Default constructor. */ CoinShallowPackedVector(bool testForDuplicateIndex = true); /** Explicit Constructor. Set vector size, indices, and elements. Size is the length of both the indices and elements vectors. The indices and elements vectors are not copied into this class instance. The ShallowPackedVector only maintains the pointers to the indices and elements vectors.
The last argument specifies whether the creator of the object knows in advance that there are no duplicate indices. */ CoinShallowPackedVector(int size, const int * indices, const double * elements, bool testForDuplicateIndex = true); /** Copy constructor from the base class. */ CoinShallowPackedVector(const CoinPackedVectorBase &); /** Copy constructor. */ CoinShallowPackedVector(const CoinShallowPackedVector &); /** Destructor. */ virtual ~CoinShallowPackedVector() {} /// Print vector information. void print(); //@} private: /**@name Private member data */ //@{ /// Vector indices const int * indices_; ///Vector elements const double * elements_; /// Size of indices and elements vectors int nElements_; //@} }; //############################################################################# /** A function that tests the methods in the CoinShallowPackedVector class. The only reason for it not to be a member method is that this way it doesn't have to be compiled into the library. And that's a gain, because the library should be compiled with optimization on, but this method should be compiled with debugging. */ void CoinShallowPackedVectorUnitTest(); #endif CoinUtils-2.9.10/CoinUtils/src/CoinSort.hpp0000644000076600007660000004721412136236705017160 0ustar coincoin/* $Id: CoinSort.hpp 1596 2013-04-25 14:29:25Z stefan $ */ // 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 CoinSort_H #define CoinSort_H #include #include #include #include "CoinDistance.hpp" // Uncomment the next three lines to get thorough initialisation of memory. // #ifndef ZEROFAULT // #define ZEROFAULT // #endif #ifdef COIN_FAST_CODE #ifndef COIN_USE_EKK_SORT #define COIN_USE_EKK_SORT #endif #endif //############################################################################# /** An ordered pair. It's the same as std::pair, just this way it'll have the same look as the triple sorting. */ template struct CoinPair { public: /// First member of pair S first; /// Second member of pair T second; public: /// Construct from ordered pair CoinPair(const S& s, const T& t) : first(s), second(t) {} }; //############################################################################# /**@name Comparisons on first element of two ordered pairs */ //@{ /** Function operator. Returns true if t1.first < t2.first (i.e., increasing). */ template < class S, class T> class CoinFirstLess_2 { public: /// Compare function inline bool operator()(const CoinPair& t1, const CoinPair& t2) const { return t1.first < t2.first; } }; //----------------------------------------------------------------------------- /** Function operator. Returns true if t1.first > t2.first (i.e, decreasing). */ template < class S, class T> class CoinFirstGreater_2 { public: /// Compare function inline bool operator()(const CoinPair& t1, const CoinPair& t2) const { return t1.first > t2.first; } }; //----------------------------------------------------------------------------- /** Function operator. Returns true if abs(t1.first) < abs(t2.first) (i.e., increasing). */ template < class S, class T> class CoinFirstAbsLess_2 { public: /// Compare function inline bool operator()(const CoinPair& t1, const CoinPair& t2) const { const T t1Abs = t1.first < static_cast(0) ? -t1.first : t1.first; const T t2Abs = t2.first < static_cast(0) ? -t2.first : t2.first; return t1Abs < t2Abs; } }; //----------------------------------------------------------------------------- /** Function operator. Returns true if abs(t1.first) > abs(t2.first) (i.e., decreasing). */ template < class S, class T> class CoinFirstAbsGreater_2 { public: /// Compare function inline bool operator()(CoinPair t1, CoinPair t2) const { const T t1Abs = t1.first < static_cast(0) ? -t1.first : t1.first; const T t2Abs = t2.first < static_cast(0) ? -t2.first : t2.first; return t1Abs > t2Abs; } }; //----------------------------------------------------------------------------- /** Function operator. Compare based on the entries of an external vector, i.e., returns true if vec[t1.first < vec[t2.first] (i.e., increasing wrt. vec). Note that to use this comparison operator .first must be a data type automatically convertible to int. */ template < class S, class T, class V> class CoinExternalVectorFirstLess_2 { private: CoinExternalVectorFirstLess_2(); private: const V* vec_; public: inline bool operator()(const CoinPair& t1, const CoinPair& t2) const { return vec_[t1.first] < vec_[t2.first]; } CoinExternalVectorFirstLess_2(const V* v) : vec_(v) {} }; //----------------------------------------------------------------------------- /** Function operator. Compare based on the entries of an external vector, i.e., returns true if vec[t1.first > vec[t2.first] (i.e., decreasing wrt. vec). Note that to use this comparison operator .first must be a data type automatically convertible to int. */ template < class S, class T, class V> class CoinExternalVectorFirstGreater_2 { private: CoinExternalVectorFirstGreater_2(); private: const V* vec_; public: inline bool operator()(const CoinPair& t1, const CoinPair& t2) const { return vec_[t1.first] > vec_[t2.first]; } CoinExternalVectorFirstGreater_2(const V* v) : vec_(v) {} }; //@} //############################################################################# /** Sort a pair of containers.
Iter_S - iterator for first container
Iter_T - iterator for 2nd container
CoinCompare2 - class comparing CoinPairs
*/ #ifdef COIN_SORT_ARBITRARY_CONTAINERS template void CoinSort_2(Iter_S sfirst, Iter_S slast, Iter_T tfirst, const CoinCompare2& pc) { typedef typename std::iterator_traits::value_type S; typedef typename std::iterator_traits::value_type T; const size_t len = coinDistance(sfirst, slast); if (len <= 1) return; typedef CoinPair ST_pair; ST_pair* x = static_cast(::operator new(len * sizeof(ST_pair))); # ifdef ZEROFAULT memset(x,0,(len*sizeof(ST_pair))) ; # endif int i = 0; Iter_S scurrent = sfirst; Iter_T tcurrent = tfirst; while (scurrent != slast) { new (x+i++) ST_pair(*scurrent++, *tcurrent++); } std::sort(x.begin(), x.end(), pc); scurrent = sfirst; tcurrent = tfirst; for (i = 0; i < len; ++i) { *scurrent++ = x[i].first; *tcurrent++ = x[i].second; } ::operator delete(x); } //----------------------------------------------------------------------------- template void CoinSort_2(Iter_S sfirst, Iter_S slast, Iter_T tfirst) { typedef typename std::iterator_traits::value_type S; typedef typename std::iterator_traits::value_type T; CoinSort_2(sfirst, slast, tfirst, CoinFirstLess_2()); } #else //======================================================================= template void CoinSort_2(S* sfirst, S* slast, T* tfirst, const CoinCompare2& pc) { const size_t len = coinDistance(sfirst, slast); if (len <= 1) return; typedef CoinPair ST_pair; ST_pair* x = static_cast(::operator new(len * sizeof(ST_pair))); # ifdef ZEROFAULT // Can show RUI errors on some systems due to copy of ST_pair with gaps. // E.g., has 4 byte alignment gap on Solaris/SUNWspro. memset(x,0,(len*sizeof(ST_pair))) ; # endif size_t i = 0; S* scurrent = sfirst; T* tcurrent = tfirst; while (scurrent != slast) { new (x+i++) ST_pair(*scurrent++, *tcurrent++); } std::sort(x, x + len, pc); scurrent = sfirst; tcurrent = tfirst; for (i = 0; i < len; ++i) { *scurrent++ = x[i].first; *tcurrent++ = x[i].second; } ::operator delete(x); } template void // This Always uses std::sort CoinSort_2Std(S* sfirst, S* slast, T* tfirst) { CoinSort_2(sfirst, slast, tfirst, CoinFirstLess_2()); } #ifndef COIN_USE_EKK_SORT //----------------------------------------------------------------------------- template void CoinSort_2(S* sfirst, S* slast, T* tfirst) { CoinSort_2(sfirst, slast, tfirst, CoinFirstLess_2()); } #else //----------------------------------------------------------------------------- extern int boundary_sort; extern int boundary_sort2; extern int boundary_sort3; /// Sort without new and delete template void CoinSort_2(S* key, S* lastKey, T* array2) { const size_t number = coinDistance(key, lastKey); if (number <= 1) { return; } else if (number>10000) { CoinSort_2Std(key, lastKey, array2); return; } #if 0 if (number==boundary_sort3) { printf("before sort %d entries\n",number); for (int j=0;j(number); int sp; S *v = key; S *m, t; S * ls[32] , * rs[32]; S *l , *r , c; T it; int j; /*check already sorted */ S last=key[0]; for (j=1;j=last) { last=key[j]; } else { break; } /* endif */ } /* endfor */ if (j==n) { return; } /* endif */ sp = 0 ; ls[sp] = v ; rs[sp] = v + (n-1) ; while( sp >= 0 ) { if ( rs[sp] - ls[sp] > minsize ) { l = ls[sp] ; r = rs[sp] ; m = l + (r-l)/2 ; if ( *l > *m ) { t = *l ; *l = *m ; *m = t ; it = array2[l-v] ; array2[l-v] = array2[m-v] ; array2[m-v] = it ; } if ( *m > *r ) { t = *m ; *m = *r ; *r = t ; it = array2[m-v] ; array2[m-v] = array2[r-v] ; array2[r-v] = it ; if ( *l > *m ) { t = *l ; *l = *m ; *m = t ; it = array2[l-v] ; array2[l-v] = array2[m-v] ; array2[m-v] = it ; } } c = *m ; while ( r - l > 1 ) { while ( *(++l) < c ) ; while ( *(--r) > c ) ; t = *l ; *l = *r ; *r = t ; it = array2[l-v] ; array2[l-v] = array2[r-v] ; array2[r-v] = it ; } l = r - 1 ; if ( l < m ) { ls[sp+1] = ls[sp] ; rs[sp+1] = l ; ls[sp ] = r ; } else { ls[sp+1] = r ; rs[sp+1] = rs[sp] ; rs[sp ] = l ; } sp++ ; } else sp-- ; } for ( l = v , m = v + (n-1) ; l < m ; l++ ) { if ( *l > *(l+1) ) { c = *(l+1) ; it = array2[(l-v)+1] ; for ( r = l ; r >= v && *r > c ; r-- ) { *(r+1) = *r ; array2[(r-v)+1] = array2[(r-v)] ; } *(r+1) = c ; array2[(r-v)+1] = it ; } } #if 0 if (number==boundary_sort3) { printf("after sort %d entries\n",number); for (int j=0;j void CoinShortSort_2(S* key, S* lastKey, T* array2) { const size_t number = coinDistance(key, lastKey); if (number <= 2) { if (number == 2 && key[0] > key[1]) { S tempS = key[0]; T tempT = array2[0]; key[0] = key[1]; array2[0] = array2[1]; key[1] = tempS; array2[1] = tempT; } return; } else if (number>10000) { CoinSort_2Std(key, lastKey, array2); return; } int minsize=10; size_t n = number; int sp; S *v = key; S *m, t; S * ls[32] , * rs[32]; S *l , *r , c; T it; size_t j; /*check already sorted */ S last=key[0]; for (j=1;j=last) { last=key[j]; } else { break; } /* endif */ } /* endfor */ if (j==n) { return; } /* endif */ sp = 0 ; ls[sp] = v ; rs[sp] = v + (n-1) ; while( sp >= 0 ) { if ( rs[sp] - ls[sp] > minsize ) { l = ls[sp] ; r = rs[sp] ; m = l + (r-l)/2 ; if ( *l > *m ) { t = *l ; *l = *m ; *m = t ; it = array2[l-v] ; array2[l-v] = array2[m-v] ; array2[m-v] = it ; } if ( *m > *r ) { t = *m ; *m = *r ; *r = t ; it = array2[m-v] ; array2[m-v] = array2[r-v] ; array2[r-v] = it ; if ( *l > *m ) { t = *l ; *l = *m ; *m = t ; it = array2[l-v] ; array2[l-v] = array2[m-v] ; array2[m-v] = it ; } } c = *m ; while ( r - l > 1 ) { while ( *(++l) < c ) ; while ( *(--r) > c ) ; t = *l ; *l = *r ; *r = t ; it = array2[l-v] ; array2[l-v] = array2[r-v] ; array2[r-v] = it ; } l = r - 1 ; if ( l < m ) { ls[sp+1] = ls[sp] ; rs[sp+1] = l ; ls[sp ] = r ; } else { ls[sp+1] = r ; rs[sp+1] = rs[sp] ; rs[sp ] = l ; } sp++ ; } else sp-- ; } for ( l = v , m = v + (n-1) ; l < m ; l++ ) { if ( *l > *(l+1) ) { c = *(l+1) ; it = array2[(l-v)+1] ; for ( r = l ; r >= v && *r > c ; r-- ) { *(r+1) = *r ; array2[(r-v)+1] = array2[(r-v)] ; } *(r+1) = c ; array2[(r-v)+1] = it ; } } } //############################################################################# //############################################################################# /**@name Ordered Triple Struct */ template class CoinTriple { public: /// First member of triple S first; /// Second member of triple T second; /// Third member of triple U third; public: /// Construct from ordered triple CoinTriple(const S& s, const T& t, const U& u):first(s),second(t),third(u) {} }; //############################################################################# /**@name Comparisons on first element of two ordered triples */ //@{ /** Function operator. Returns true if t1.first < t2.first (i.e., increasing). */ template < class S, class T, class U > class CoinFirstLess_3 { public: /// Compare function inline bool operator()(const CoinTriple& t1, const CoinTriple& t2) const { return t1.first < t2.first; } }; //----------------------------------------------------------------------------- /** Function operator. Returns true if t1.first > t2.first (i.e, decreasing). */ template < class S, class T, class U > class CoinFirstGreater_3 { public: /// Compare function inline bool operator()(const CoinTriple& t1, const CoinTriple& t2) const { return t1.first>t2.first; } }; //----------------------------------------------------------------------------- /** Function operator. Returns true if abs(t1.first) < abs(t2.first) (i.e., increasing). */ template < class S, class T, class U > class CoinFirstAbsLess_3 { public: /// Compare function inline bool operator()(const CoinTriple& t1, const CoinTriple& t2) const { const T t1Abs = t1.first < static_cast(0) ? -t1.first : t1.first; const T t2Abs = t2.first < static_cast(0) ? -t2.first : t2.first; return t1Abs < t2Abs; } }; //----------------------------------------------------------------------------- /** Function operator. Returns true if abs(t1.first) > abs(t2.first) (i.e., decreasing). */ template < class S, class T, class U > class CoinFirstAbsGreater_3 { public: /// Compare function inline bool operator()(const CoinTriple& t1, const CoinTriple& t2) const { const T t1Abs = t1.first < static_cast(0) ? -t1.first : t1.first; const T t2Abs = t2.first < static_cast(0) ? -t2.first : t2.first; return t1Abs > t2Abs; } }; //----------------------------------------------------------------------------- /** Function operator. Compare based on the entries of an external vector, i.e., returns true if vec[t1.first < vec[t2.first] (i.e., increasing wrt. vec). Note that to use this comparison operator .first must be a data type automatically convertible to int. */ template < class S, class T, class U, class V> class CoinExternalVectorFirstLess_3 { private: CoinExternalVectorFirstLess_3(); private: const V* vec_; public: inline bool operator()(const CoinTriple& t1, const CoinTriple& t2) const { return vec_[t1.first] < vec_[t2.first]; } CoinExternalVectorFirstLess_3(const V* v) : vec_(v) {} }; //----------------------------------------------------------------------------- /** Function operator. Compare based on the entries of an external vector, i.e., returns true if vec[t1.first > vec[t2.first] (i.e., decreasing wrt. vec). Note that to use this comparison operator .first must be a data type automatically convertible to int. */ template < class S, class T, class U, class V> class CoinExternalVectorFirstGreater_3 { private: CoinExternalVectorFirstGreater_3(); private: const V* vec_; public: inline bool operator()(const CoinTriple& t1, const CoinTriple& t2) const { return vec_[t1.first] > vec_[t2.first]; } CoinExternalVectorFirstGreater_3(const V* v) : vec_(v) {} }; //@} //############################################################################# /**@name Typedefs for sorting the entries of a packed vector based on an external vector. */ //@{ /// Sort packed vector in increasing order of the external vector typedef CoinExternalVectorFirstLess_3 CoinIncrSolutionOrdered; /// Sort packed vector in decreasing order of the external vector typedef CoinExternalVectorFirstGreater_3 CoinDecrSolutionOrdered; //@} //############################################################################# /** Sort a triple of containers.
Iter_S - iterator for first container
Iter_T - iterator for 2nd container
Iter_U - iterator for 3rd container
CoinCompare3 - class comparing CoinTriples
*/ #ifdef COIN_SORT_ARBITRARY_CONTAINERS template void CoinSort_3(Iter_S sfirst, Iter_S slast, Iter_T tfirst, Iter_U, ufirst, const CoinCompare3& tc) { typedef typename std::iterator_traits::value_type S; typedef typename std::iterator_traits::value_type T; typedef typename std::iterator_traits::value_type U; const size_t len = coinDistance(sfirst, slast); if (len <= 1) return; typedef CoinTriple STU_triple; STU_triple* x = static_cast(::operator new(len * sizeof(STU_triple))); int i = 0; Iter_S scurrent = sfirst; Iter_T tcurrent = tfirst; Iter_U ucurrent = ufirst; while (scurrent != slast) { new (x+i++) STU_triple(*scurrent++, *tcurrent++, *ucurrent++); } std::sort(x, x+len, tc); scurrent = sfirst; tcurrent = tfirst; ucurrent = ufirst; for (i = 0; i < len; ++i) { *scurrent++ = x[i].first; *tcurrent++ = x[i].second; *ucurrent++ = x[i].third; } ::operator delete(x); } //----------------------------------------------------------------------------- template void CoinSort_3(Iter_S sfirst, Iter_S slast, Iter_T tfirst, Iter_U, ufirst) { typedef typename std::iterator_traits::value_type S; typedef typename std::iterator_traits::value_type T; typedef typename std::iterator_traits::value_type U; CoinSort_3(sfirts, slast, tfirst, ufirst, CoinFirstLess_3()); } #else //======================================================================= template void CoinSort_3(S* sfirst, S* slast, T* tfirst, U* ufirst, const CoinCompare3& tc) { const size_t len = coinDistance(sfirst,slast); if (len <= 1) return; typedef CoinTriple STU_triple; STU_triple* x = static_cast(::operator new(len * sizeof(STU_triple))); size_t i = 0; S* scurrent = sfirst; T* tcurrent = tfirst; U* ucurrent = ufirst; while (scurrent != slast) { new (x+i++) STU_triple(*scurrent++, *tcurrent++, *ucurrent++); } std::sort(x, x+len, tc); scurrent = sfirst; tcurrent = tfirst; ucurrent = ufirst; for (i = 0; i < len; ++i) { *scurrent++ = x[i].first; *tcurrent++ = x[i].second; *ucurrent++ = x[i].third; } ::operator delete(x); } //----------------------------------------------------------------------------- template void CoinSort_3(S* sfirst, S* slast, T* tfirst, U* ufirst) { CoinSort_3(sfirst, slast, tfirst, ufirst, CoinFirstLess_3()); } #endif //############################################################################# #endif CoinUtils-2.9.10/CoinUtils/src/CoinParam.hpp0000644000076600007660000005275011654022247017270 0ustar coincoin/* $Id: CoinParam.hpp 1493 2011-11-01 16:56:07Z tkr $ */ #ifndef CoinParam_H #define CoinParam_H /* 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). */ /*! \file CoinParam.hpp \brief Declaration of a class for command line parameters. */ #include #include #include /*! \class CoinParam \brief A base class for `keyword value' command line parameters. The underlying paradigm is that a parameter specifies an action to be performed on a target object. The base class provides two function pointers, a `push' function and a `pull' function. By convention, a push function will set some value in the target object or perform some action using the target object. A `pull' function will retrieve some value from the target object. This is only a convention, however; CoinParam and associated utilities make no use of these functions and have no hardcoded notion of how they should be used. The action to be performed, and the target object, will be specific to a particular application. It is expected that users will derive application-specific parameter classes from this base class. A derived class will typically add fields and methods to set/get a code for the action to be performed (often, an enum class) and the target object (often, a pointer or reference). Facilities provided by the base class and associated utility routines include:
  • Support for common parameter types with numeric, string, or keyword values.
  • Support for short and long help messages.
  • Pointers to `push' and `pull' functions as described above.
  • Command line parsing and keyword matching.
All utility routines are declared in the #CoinParamUtils namespace. The base class recognises five types of parameters: actions (which require no value); numeric parameters with integer or real (double) values; keyword parameters, where the value is one of a defined set of value-keywords; and string parameters (where the value is a string). The base class supports the definition of a valid range, a default value, and short and long help messages for a parameter. As defined by the #CoinParamFunc typedef, push and pull functions should take a single parameter, a pointer to a CoinParam. Typically this object will actually be a derived class as described above, and the implementation function will have access to all capabilities of CoinParam and of the derived class. When specified as command line parameters, the expected syntax is `-keyword value' or `-keyword=value'. You can also use the Gnu double-dash style, `--keyword'. Spaces around the `=' will \e not work. The keyword (name) for a parameter can be defined with an `!' to mark the minimal match point. For example, allow!ableGap will be considered matched by the strings `allow', `allowa', `allowab', \e etc. Similarly, the value-keyword strings for keyword parameters can be defined with `!' to mark the minimal match point. Matching of keywords and value-keywords is \e not case sensitive. */ class CoinParam { public: /*! \name Subtypes */ //@{ /*! \brief Enumeration for the types of parameters supported by CoinParam CoinParam provides support for several types of parameters:
  • Action parameters, which require no value.
  • Integer and double numeric parameters, with upper and lower bounds.
  • String parameters that take an arbitrary string value.
  • Keyword parameters that take a defined set of string (value-keyword) values. Value-keywords are associated with integers in the order in which they are added, starting from zero.
*/ typedef enum { coinParamInvalid = 0, coinParamAct, coinParamInt, coinParamDbl, coinParamStr, coinParamKwd } CoinParamType ; /*! \brief Type declaration for push and pull functions. By convention, a return code of 0 indicates execution without error, >0 indicates nonfatal error, and <0 indicates fatal error. This is only convention, however; the base class makes no use of the push and pull functions and has no hardcoded interpretation of the return code. */ typedef int (*CoinParamFunc)(CoinParam *param) ; //@} /*! \name Constructors and Destructors Be careful how you specify parameters for the constructors! Some compilers are entirely too willing to convert almost anything to bool. */ //@{ /*! \brief Default constructor */ CoinParam() ; /*! \brief Constructor for a parameter with a double value The default value is 0.0. Be careful to clearly indicate that \p lower and \p upper are real (double) values to distinguish this constructor from the constructor for an integer parameter. */ CoinParam(std::string name, std::string help, double lower, double upper, double dflt = 0.0, bool display = true) ; /*! \brief Constructor for a parameter with an integer value The default value is 0. */ CoinParam(std::string name, std::string help, int lower, int upper, int dflt = 0, bool display = true) ; /*! \brief Constructor for a parameter with keyword values The string supplied as \p firstValue becomes the first value-keyword. Additional value-keywords can be added using appendKwd(). It's necessary to specify both the first value-keyword (\p firstValue) and the default value-keyword index (\p dflt) in order to distinguish this constructor from the constructors for string and action parameters. Value-keywords are associated with an integer, starting with zero and increasing as each keyword is added. The value-keyword given as \p firstValue will be associated with the integer zero. The integer supplied for \p dflt can be any value, as long as it will be valid once all value-keywords have been added. */ CoinParam(std::string name, std::string help, std::string firstValue, int dflt, bool display = true) ; /*! \brief Constructor for a string parameter For some compilers, the default value (\p dflt) must be specified explicitly with type std::string to distinguish the constructor for a string parameter from the constructor for an action parameter. For example, use std::string("default") instead of simply "default", or use a variable of type std::string. */ CoinParam(std::string name, std::string help, std::string dflt, bool display = true) ; /*! \brief Constructor for an action parameter */ CoinParam(std::string name, std::string help, bool display = true) ; /*! \brief Copy constructor */ CoinParam(const CoinParam &orig) ; /*! \brief Clone */ virtual CoinParam *clone() ; /*! \brief Assignment */ CoinParam &operator=(const CoinParam &rhs) ; /*! \brief Destructor */ virtual ~CoinParam() ; //@} /*! \name Methods to query and manipulate the value(s) of a parameter */ //@{ /*! \brief Add an additional value-keyword to a keyword parameter */ void appendKwd(std::string kwd) ; /*! \brief Return the integer associated with the specified value-keyword Returns -1 if no value-keywords match the specified string. */ int kwdIndex(std::string kwd) const ; /*! \brief Return the value-keyword that is the current value of the keyword parameter */ std::string kwdVal() const ; /*! \brief Set the value of the keyword parameter using the integer associated with a value-keyword. If \p printIt is true, the corresponding value-keyword string will be echoed to std::cout. */ void setKwdVal(int value, bool printIt = false) ; /*! \brief Set the value of the keyword parameter using a value-keyword string. The given string will be tested against the set of value-keywords for the parameter using the shortest match rules. */ void setKwdVal(const std::string value ) ; /*! \brief Prints the set of value-keywords defined for this keyword parameter */ void printKwds() const ; /*! \brief Set the value of a string parameter */ void setStrVal(std::string value) ; /*! \brief Get the value of a string parameter */ std::string strVal() const ; /*! \brief Set the value of a double parameter */ void setDblVal(double value) ; /*! \brief Get the value of a double parameter */ double dblVal() const ; /*! \brief Set the value of a integer parameter */ void setIntVal(int value) ; /*! \brief Get the value of a integer parameter */ int intVal() const ; /*! \brief Add a short help string to a parameter */ inline void setShortHelp(const std::string help) { shortHelp_ = help ; } /*! \brief Retrieve the short help string */ inline std::string shortHelp() const { return (shortHelp_) ; } /*! \brief Add a long help message to a parameter See printLongHelp() for a description of how messages are broken into lines. */ inline void setLongHelp(const std::string help) { longHelp_ = help ; } /*! \brief Retrieve the long help message */ inline std::string longHelp() const { return (longHelp_) ; } /*! \brief Print long help Prints the long help string, plus the valid range and/or keywords if appropriate. The routine makes a best effort to break the message into lines appropriate for an 80-character line. Explicit line breaks in the message will be observed. The short help string will be used if long help is not available. */ void printLongHelp() const ; //@} /*! \name Methods to query and manipulate a parameter object */ //@{ /*! \brief Return the type of the parameter */ inline CoinParamType type() const { return (type_) ; } /*! \brief Set the type of the parameter */ inline void setType(CoinParamType type) { type_ = type ; } /*! \brief Return the parameter keyword (name) string */ inline std::string name() const { return (name_) ; } /*! \brief Set the parameter keyword (name) string */ inline void setName(std::string name) { name_ = name ; processName() ; } /*! \brief Check if the specified string matches the parameter keyword (name) string Returns 1 if the string matches and meets the minimum match length, 2 if the string matches but doesn't meet the minimum match length, and 0 if the string doesn't match. Matches are \e not case-sensitive. */ int matches (std::string input) const ; /*! \brief Return the parameter keyword (name) string formatted to show the minimum match length For example, if the parameter name was defined as allow!ableGap, the string returned by matchName would be allow(ableGap). */ std::string matchName() const ; /*! \brief Set visibility of parameter Intended to control whether the parameter is shown when a list of parameters is processed. Used by CoinParamUtils::printHelp when printing help messages for a list of parameters. */ inline void setDisplay(bool display) { display_ = display ; } /*! \brief Get visibility of parameter */ inline bool display() const { return (display_) ; } /*! \brief Get push function */ inline CoinParamFunc pushFunc() { return (pushFunc_) ; } /*! \brief Set push function */ inline void setPushFunc(CoinParamFunc func) { pushFunc_ = func ; } /*! \brief Get pull function */ inline CoinParamFunc pullFunc() { return (pullFunc_) ; } /*! \brief Set pull function */ inline void setPullFunc(CoinParamFunc func) { pullFunc_ = func ; } //@} private: /*! \name Private methods */ //@{ /*! Process a name for efficient matching */ void processName() ; //@} /*! \name Private parameter data */ //@{ /// Parameter type (see #CoinParamType) CoinParamType type_ ; /// Parameter name std::string name_ ; /// Length of parameter name size_t lengthName_ ; /*! \brief Minimum length required to declare a match for the parameter name. */ size_t lengthMatch_ ; /// Lower bound on value for a double parameter double lowerDblValue_ ; /// Upper bound on value for a double parameter double upperDblValue_ ; /// Double parameter - current value double dblValue_ ; /// Lower bound on value for an integer parameter int lowerIntValue_ ; /// Upper bound on value for an integer parameter int upperIntValue_ ; /// Integer parameter - current value int intValue_ ; /// String parameter - current value std::string strValue_ ; /// Set of valid value-keywords for a keyword parameter std::vector definedKwds_ ; /*! \brief Current value for a keyword parameter (index into #definedKwds_) */ int currentKwd_ ; /// Push function CoinParamFunc pushFunc_ ; /// Pull function CoinParamFunc pullFunc_ ; /// Short help std::string shortHelp_ ; /// Long help std::string longHelp_ ; /// Display when processing lists of parameters? bool display_ ; //@} } ; /*! \relatesalso CoinParam \brief A type for a parameter vector. */ typedef std::vector CoinParamVec ; /*! \relatesalso CoinParam \brief A stream output function for a CoinParam object. */ std::ostream &operator<< (std::ostream &s, const CoinParam ¶m) ; /* Bring in the utility functions for parameter handling (CbcParamUtils). */ /*! \brief Utility functions for processing CoinParam parameters. The functions in CoinParamUtils support command line or interactive parameter processing and a help facility. Consult the `Related Functions' section of the CoinParam class documentation for individual function documentation. */ namespace CoinParamUtils { /*! \relatesalso CoinParam \brief Take command input from the file specified by src. Use stdin for \p src to specify interactive prompting for commands. */ void setInputSrc(FILE *src) ; /*! \relatesalso CoinParam \brief Returns true if command line parameters are being processed. */ bool isCommandLine() ; /*! \relatesalso CoinParam \brief Returns true if parameters are being obtained from stdin. */ bool isInteractive() ; /*! \relatesalso CoinParam \brief Attempt to read a string from the input. \p argc and \p argv are used only if isCommandLine() would return true. If \p valid is supplied, it will be set to 0 if a string is parsed without error, 2 if no field is present. */ std::string getStringField(int argc, const char *argv[], int *valid) ; /*! \relatesalso CoinParam \brief Attempt to read an integer from the input. \p argc and \p argv are used only if isCommandLine() would return true. If \p valid is supplied, it will be set to 0 if an integer is parsed without error, 1 if there's a parse error, and 2 if no field is present. */ int getIntField(int argc, const char *argv[], int *valid) ; /*! \relatesalso CoinParam \brief Attempt to read a real (double) from the input. \p argc and \p argv are used only if isCommandLine() would return true. If \p valid is supplied, it will be set to 0 if a real number is parsed without error, 1 if there's a parse error, and 2 if no field is present. */ double getDoubleField(int argc, const char *argv[], int *valid) ; /*! \relatesalso CoinParam \brief Scan a parameter vector for parameters whose keyword (name) string matches \p name using minimal match rules. \p matchNdx is set to the index of the last parameter that meets the minimal match criteria (but note there should be at most one matching parameter if the parameter vector is properly configured). \p shortCnt is set to the number of short matches (should be zero for a properly configured parameter vector if a minimal match is found). The return value is the number of matches satisfying the minimal match requirement (should be 0 or 1 in a properly configured vector). */ int matchParam(const CoinParamVec ¶mVec, std::string name, int &matchNdx, int &shortCnt) ; /*! \relatesalso CoinParam \brief Get the next command keyword (name) To be precise, return the next field from the current command input source, after a bit of processing. In command line mode (isCommandLine() returns true) the next field will normally be of the form `-keyword' or `--keyword' (\e i.e., a parameter keyword), and the string returned would be `keyword'. In interactive mode (isInteractive() returns true), the user will be prompted if necessary. It is assumed that the user knows not to use the `-' or `--' prefixes unless specifying parameters on the command line. There are a number of special cases if we're in command line mode. The order of processing of the raw string goes like this:
  • A stand-alone `-' is forced to `stdin'.
  • A stand-alone '--' is returned as a word; interpretation is up to the client.
  • A prefix of '-' or '--' is stripped from the string.
If the result is the string `stdin', command processing shifts to interactive mode and the user is immediately prompted for a new command. Whatever results from the above sequence is returned to the user as the return value of the function. An empty string indicates end of input. \p prompt will be used only if it's necessary to prompt the user in interactive mode. */ std::string getCommand(int argc, const char *argv[], const std::string prompt, std::string *pfx = 0) ; /*! \relatesalso CoinParam \brief Look up the command keyword (name) in the parameter vector. Print help if requested. In the most straightforward use, \p name is a string without `?', and the value returned is the index in \p paramVec of the single parameter that matched \p name. One or more '?' characters at the end of \p name is a query for information. The routine prints short (one '?') or long (more than one '?') help messages for a query. Help is also printed in the case where the name is ambiguous (some of the matches did not meet the minimal match length requirement). Note that multiple matches meeting the minimal match requirement is a configuration error. The mimimal match length for the parameters involved is too short. If provided as parameters, on return
  • \p matchCnt will be set to the number of matches meeting the minimal match requirement
  • \p shortCnt will be set to the number of matches that did not meet the miminal match requirement
  • \p queryCnt will be set to the number of '?' characters at the end of the name
The return values are:
  • >0: index in \p paramVec of the single unique match for \p name
  • -1: a query was detected (one or more '?' characters at the end of \p name
  • -2: one or more short matches, not a query
  • -3: no matches, not a query
  • -4: multiple matches meeting the minimal match requirement (configuration error)
*/ int lookupParam(std::string name, CoinParamVec ¶mVec, int *matchCnt = 0, int *shortCnt = 0, int *queryCnt = 0) ; /*! \relatesalso CoinParam \brief Utility to print a long message as filled lines of text The routine makes a best effort to break lines without exceeding the standard 80 character line length. Explicit newlines in \p msg will be obeyed. */ void printIt(const char *msg) ; /*! \relatesalso CoinParam \brief Utility routine to print help given a short match or explicit request for help. The two really are related, in that a query (a string that ends with one or more `?' characters) will often result in a short match. The routine expects that \p name matches a single parameter, and does not look for multiple matches. If called with \p matchNdx < 0, the routine will look up \p name in \p paramVec and print the full name from the parameter. If called with \p matchNdx > 0, it just prints the name from the specified parameter. If the name is a query, short (one '?') or long (more than one '?') help is printed. */ void shortOrHelpOne(CoinParamVec ¶mVec,int matchNdx, std::string name, int numQuery) ; /*! \relatesalso CoinParam \brief Utility routine to print help given multiple matches. If the name is not a query, or asks for short help (\e i.e., contains zero or one '?' characters), the list of matching names is printed. If the name asks for long help (contains two or more '?' characters), short help is printed for each matching name. */ void shortOrHelpMany(CoinParamVec ¶mVec, std::string name, int numQuery) ; /*! \relatesalso CoinParam \brief Print a generic `how to use the command interface' help message. The message is hard coded to match the behaviour of the parsing utilities. */ void printGenericHelp() ; /*! \relatesalso CoinParam \brief Utility routine to print help messages for one or more parameters. Intended as a utility to implement explicit `help' commands. Help will be printed for all parameters in \p paramVec from \p firstParam to \p lastParam, inclusive. If \p shortHelp is true, short help messages will be printed. If \p longHelp is true, long help messages are printed. \p shortHelp overrules \p longHelp. If neither is true, only command keywords are printed. \p prefix is printed before each line; it's an imperfect attempt at indentation. */ void printHelp(CoinParamVec ¶mVec, int firstParam, int lastParam, std::string prefix, bool shortHelp, bool longHelp, bool hidden) ; } #endif /* CoinParam_H */ CoinUtils-2.9.10/CoinUtils/src/CoinFactorization4.cpp0000644000076600007660000024470512044005247021121 0ustar coincoin/* $Id: CoinFactorization4.cpp 1553 2012-10-30 17:13:11Z forrest $ */ // 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). #if defined(_MSC_VER) // Turn off compiler warning about long names # pragma warning(disable:4786) #endif #include "CoinUtilsConfig.h" #include #include #include "CoinFactorization.hpp" #include "CoinIndexedVector.hpp" #include "CoinHelperFunctions.hpp" #include #include #if DENSE_CODE==1 // using simple lapack interface extern "C" { /** LAPACK Fortran subroutine DGETRS. */ void F77_FUNC(dgetrs,DGETRS)(char *trans, cipfint *n, cipfint *nrhs, const double *A, cipfint *ldA, cipfint * ipiv, double *B, cipfint *ldB, ipfint *info, int trans_len); } #endif // For semi-sparse #define BITS_PER_CHECK 8 #define CHECK_SHIFT 3 typedef unsigned char CoinCheckZero; //:class CoinFactorization. Deals with Factorization and Updates // getRowSpaceIterate. Gets space for one Row with given length //may have to do compression (returns true) //also moves existing vector bool CoinFactorization::getRowSpaceIterate ( int iRow, int extraNeeded ) { const int * numberInRow = numberInRow_.array(); int number = numberInRow[iRow]; CoinBigIndex * COIN_RESTRICT startRow = startRowU_.array(); int * COIN_RESTRICT indexColumn = indexColumnU_.array(); CoinBigIndex * COIN_RESTRICT convertRowToColumn = convertRowToColumnU_.array(); CoinBigIndex space = lengthAreaU_ - startRow[maximumRowsExtra_]; int * COIN_RESTRICT nextRow = nextRow_.array(); int * COIN_RESTRICT lastRow = lastRow_.array(); if ( space < extraNeeded + number + 2 ) { //compression int iRow = nextRow[maximumRowsExtra_]; CoinBigIndex put = 0; while ( iRow != maximumRowsExtra_ ) { //move CoinBigIndex get = startRow[iRow]; CoinBigIndex getEnd = startRow[iRow] + numberInRow[iRow]; startRow[iRow] = put; CoinBigIndex i; for ( i = get; i < getEnd; i++ ) { indexColumn[put] = indexColumn[i]; convertRowToColumn[put] = convertRowToColumn[i]; put++; } iRow = nextRow[iRow]; } /* endwhile */ numberCompressions_++; startRow[maximumRowsExtra_] = put; space = lengthAreaU_ - put; if ( space < extraNeeded + number + 2 ) { //need more space //if we can allocate bigger then do so and copy //if not then return so code can start again status_ = -99; return false; } } CoinBigIndex put = startRow[maximumRowsExtra_]; int next = nextRow[iRow]; int last = lastRow[iRow]; //out nextRow[last] = next; lastRow[next] = last; //in at end last = lastRow[maximumRowsExtra_]; nextRow[last] = iRow; lastRow[maximumRowsExtra_] = iRow; lastRow[iRow] = last; nextRow[iRow] = maximumRowsExtra_; //move CoinBigIndex get = startRow[iRow]; int * indexColumnU = indexColumnU_.array(); startRow[iRow] = put; while ( number ) { number--; indexColumnU[put] = indexColumnU[get]; convertRowToColumn[put] = convertRowToColumn[get]; put++; get++; } /* endwhile */ //add four for luck startRow[maximumRowsExtra_] = put + extraNeeded + 4; return true; } // getColumnSpaceIterateR. Gets space for one extra R element in Column //may have to do compression (returns true) //also moves existing vector bool CoinFactorization::getColumnSpaceIterateR ( int iColumn, double value, int iRow) { CoinFactorizationDouble * COIN_RESTRICT elementR = elementR_ + lengthAreaR_; int * COIN_RESTRICT indexRowR = indexRowR_ + lengthAreaR_; CoinBigIndex * COIN_RESTRICT startR = startColumnR_.array()+maximumPivots_+1; int * COIN_RESTRICT numberInColumnPlus = numberInColumnPlus_.array(); int number = numberInColumnPlus[iColumn]; //*** modify so sees if can go in //see if it can go in at end int * COIN_RESTRICT nextColumn = nextColumn_.array(); int * COIN_RESTRICT lastColumn = lastColumn_.array(); if (lengthAreaR_-startR[maximumColumnsExtra_] (put + 4) ,lengthAreaR_); return true; } int CoinFactorization::checkPivot(double saveFromU, double oldPivot) const { int status; if ( fabs ( saveFromU ) > 1.0e-8 ) { double checkTolerance; if ( numberRowsExtra_ < numberRows_ + 2 ) { checkTolerance = 1.0e-5; } else if ( numberRowsExtra_ < numberRows_ + 10 ) { checkTolerance = 1.0e-6; } else if ( numberRowsExtra_ < numberRows_ + 50 ) { checkTolerance = 1.0e-8; } else { checkTolerance = 1.0e-10; } checkTolerance *= relaxCheck_; if ( fabs ( 1.0 - fabs ( saveFromU / oldPivot ) ) < checkTolerance ) { status = 0; } else { #if COIN_DEBUG std::cout <<"inaccurate pivot "<< oldPivot << " " << saveFromU << std::endl; #endif if ( fabs ( fabs ( oldPivot ) - fabs ( saveFromU ) ) < 1.0e-12 || fabs ( 1.0 - fabs ( saveFromU / oldPivot ) ) < 1.0e-8 ) { status = 1; } else { status = 2; } } } else { //error status = 2; #if COIN_DEBUG std::cout <<"inaccurate pivot "<< saveFromU / oldPivot << " " << saveFromU << std::endl; #endif } return status; } // replaceColumn. Replaces one Column to basis // returns 0=OK, 1=Probably OK, 2=singular, 3=no room //partial update already in U int CoinFactorization::replaceColumn ( CoinIndexedVector * regionSparse, int pivotRow, double pivotCheck , bool checkBeforeModifying, double ) { assert (numberU_<=numberRowsExtra_); CoinBigIndex * COIN_RESTRICT startColumnU = startColumnU_.array(); CoinBigIndex * COIN_RESTRICT startColumn; int * COIN_RESTRICT indexRow; CoinFactorizationDouble * COIN_RESTRICT element; //return at once if too many iterations if ( numberColumnsExtra_ >= maximumColumnsExtra_ ) { return 5; } if ( lengthAreaU_ < startColumnU[maximumColumnsExtra_] ) { return 3; } int * COIN_RESTRICT numberInRow = numberInRow_.array(); int * COIN_RESTRICT numberInColumn = numberInColumn_.array(); int * COIN_RESTRICT numberInColumnPlus = numberInColumnPlus_.array(); int realPivotRow; realPivotRow = pivotColumn_.array()[pivotRow]; //zeroed out region double * COIN_RESTRICT region = regionSparse->denseVector ( ); element = elementU_.array(); //take out old pivot column // If we have done no pivots then always check before modification if (!numberPivots_) checkBeforeModifying=true; totalElements_ -= numberInColumn[realPivotRow]; CoinFactorizationDouble * COIN_RESTRICT pivotRegion = pivotRegion_.array(); CoinFactorizationDouble oldPivot = pivotRegion[realPivotRow]; // for accuracy check pivotCheck = pivotCheck / oldPivot; #if COIN_DEBUG>1 int checkNumber=1000000; //if (numberL_) checkNumber=-1; if (numberR_>=checkNumber) { printf("pivot row %d, check %g - alpha region:\n", realPivotRow,pivotCheck); /*int i; for (i=0;igetIndices ( ); CoinBigIndex * COIN_RESTRICT startRow = startRowU_.array(); CoinBigIndex start=0; CoinBigIndex end=0; #if COIN_DEBUG>1 if (numberR_>=checkNumber) printf("Before btranu\n"); #endif #if COIN_ONE_ETA_COPY if (convertRowToColumn) { #endif start = startRow[realPivotRow]; end = start + numberInRow[realPivotRow]; int smallestIndex=numberRowsExtra_; if (!checkBeforeModifying) { for (CoinBigIndex i = start; i < end ; i ++ ) { int iColumn = indexColumn[i]; assert (iColumn1 if (numberR_>=checkNumber) printf("%d %g\n",iColumn,region[iColumn]); #endif element[j] = 0.0; regionIndex[numberNonZero++] = iColumn; } } else { for (CoinBigIndex i = start; i < end ; i ++ ) { int iColumn = indexColumn[i]; smallestIndex = CoinMin(smallestIndex,iColumn); CoinBigIndex j = convertRowToColumn[i]; region[iColumn] = element[j]; #if COIN_DEBUG>1 if (numberR_>=checkNumber) printf("%d %g\n",iColumn,region[iColumn]); #endif regionIndex[numberNonZero++] = iColumn; } } //do BTRAN - finding first one to use regionSparse->setNumElements ( numberNonZero ); updateColumnTransposeU ( regionSparse, smallestIndex ); #if COIN_ONE_ETA_COPY } else { // use R to save where elements are CoinBigIndex * saveWhere = NULL; if (checkBeforeModifying) { if ( lengthR_ + maximumRowsExtra_ +1>= lengthAreaR_ ) { //not enough room return 3; } saveWhere = indexRowR_+lengthR_; } replaceColumnU(regionSparse,saveWhere, realPivotRow); } #endif numberNonZero = regionSparse->getNumElements ( ); CoinFactorizationDouble saveFromU = 0.0; CoinBigIndex startU = startColumnU[numberColumnsExtra_]; int * COIN_RESTRICT indexU = &indexRowU_.array()[startU]; CoinFactorizationDouble * COIN_RESTRICT elementU = &elementU_.array()[startU]; // Do accuracy test here if caller is paranoid if (checkBeforeModifying) { double tolerance = zeroTolerance_; int number = numberInColumn[numberColumnsExtra_]; for (CoinBigIndex i = 0; i < number; i++ ) { int iRow = indexU[i]; //if (numberCompressions_==99&&lengthU_==278) //printf("row %d saveFromU %g element %g region %g\n", // iRow,saveFromU,elementU[i],region[iRow]); if ( fabs ( elementU[i] ) > tolerance ) { if ( iRow != realPivotRow ) { saveFromU -= elementU[i] * region[iRow]; } else { saveFromU += elementU[i]; } } } //check accuracy int status = checkPivot(saveFromU,pivotCheck); if (status) { // restore some things pivotRegion[realPivotRow] = oldPivot; number = saveEnd-startColumnU[realPivotRow]; totalElements_ += number; numberInColumn[realPivotRow]=number; regionSparse->clear(); return status; #if COIN_ONE_ETA_COPY } else if (convertRowToColumn) { #else } else { #endif // do what we would have done by now for (CoinBigIndex i = start; i < end ; i ++ ) { CoinBigIndex j = convertRowToColumn[i]; element[j] = 0.0; } #if COIN_ONE_ETA_COPY } else { // delete elements // used R to save where elements are CoinBigIndex * saveWhere = indexRowR_+lengthR_; CoinFactorizationDouble *element = elementU_.array(); int n = saveWhere[0]; for (int i=0;i= lengthAreaR_ ) { //not enough room regionSparse->clear(); return 3; } #if COIN_DEBUG>1 if (numberR_>=checkNumber) printf("After btranu\n"); #endif for (CoinBigIndex i = 0; i < numberNonZero; i++ ) { int iRow = regionIndex[i]; #if COIN_DEBUG>1 if (numberR_>=checkNumber) printf("%d %g\n",iRow,region[iRow]); #endif indexRow[l] = iRow; element[l] = region[iRow]; l++; } int * nextRow; int * lastRow; int next; int last; #if COIN_ONE_ETA_COPY if (convertRowToColumn) { #endif //take out row nextRow = nextRow_.array(); lastRow = lastRow_.array(); next = nextRow[realPivotRow]; last = lastRow[realPivotRow]; nextRow[last] = next; lastRow[next] = last; numberInRow[realPivotRow]=0; #if COIN_DEBUG nextRow[realPivotRow] = 777777; lastRow[realPivotRow] = 777777; #endif #if COIN_ONE_ETA_COPY } #endif //do permute permute_.array()[numberRowsExtra_] = realPivotRow; // and other way permuteBack_.array()[realPivotRow] = numberRowsExtra_; permuteBack_.array()[numberRowsExtra_] = -1;; //and for safety permute_.array()[numberRowsExtra_ + 1] = 0; pivotColumn_.array()[pivotRow] = numberRowsExtra_; pivotColumnBack()[numberRowsExtra_] = pivotRow; startColumn = startColumnU; indexRow = indexRowU_.array(); element = elementU_.array(); numberU_++; number = numberInColumn[numberColumnsExtra_]; totalElements_ += number; lengthU_ += number; if ( lengthU_ >= lengthAreaU_ ) { //not enough room regionSparse->clear(); return 3; } saveFromU = 0.0; //put in pivot //add row counts #if COIN_DEBUG>1 if (numberR_>=checkNumber) printf("On U\n"); #endif #if COIN_ONE_ETA_COPY if (convertRowToColumn) { #endif for (CoinBigIndex i = 0; i < number; i++ ) { int iRow = indexU[i]; #if COIN_DEBUG>1 if (numberR_>=checkNumber) printf("%d %g\n",iRow,elementU[i]); #endif //assert ( fabs ( elementU[i] ) > zeroTolerance_ ); if ( iRow != realPivotRow ) { int next = nextRow[iRow]; int iNumberInRow = numberInRow[iRow]; CoinBigIndex space; CoinBigIndex put = startRow[iRow] + iNumberInRow; space = startRow[next] - put; if ( space <= 0 ) { getRowSpaceIterate ( iRow, iNumberInRow + 4 ); put = startRow[iRow] + iNumberInRow; } indexColumn[put] = numberColumnsExtra_; convertRowToColumn[put] = i + startU; numberInRow[iRow] = iNumberInRow + 1; saveFromU = saveFromU - elementU[i] * region[iRow]; } else { //zero out and save saveFromU += elementU[i]; elementU[i] = 0.0; } } //in at end last = lastRow[maximumRowsExtra_]; nextRow[last] = numberRowsExtra_; lastRow[maximumRowsExtra_] = numberRowsExtra_; lastRow[numberRowsExtra_] = last; nextRow[numberRowsExtra_] = maximumRowsExtra_; startRow[numberRowsExtra_] = startRow[maximumRowsExtra_]; numberInRow[numberRowsExtra_] = 0; #if COIN_ONE_ETA_COPY } else { //abort(); for (CoinBigIndex i = 0; i < number; i++ ) { int iRow = indexU[i]; #if COIN_DEBUG>1 if (numberR_>=checkNumber) printf("%d %g\n",iRow,elementU[i]); #endif if ( fabs ( elementU[i] ) > tolerance ) { if ( iRow != realPivotRow ) { saveFromU = saveFromU - elementU[i] * region[iRow]; } else { //zero out and save saveFromU += elementU[i]; elementU[i] = 0.0; } } else { elementU[i] = 0.0; } } } #endif //column in at beginning (as empty) int * COIN_RESTRICT nextColumn = nextColumn_.array(); int * COIN_RESTRICT lastColumn = lastColumn_.array(); next = nextColumn[maximumColumnsExtra_]; lastColumn[next] = numberColumnsExtra_; nextColumn[maximumColumnsExtra_] = numberColumnsExtra_; nextColumn[numberColumnsExtra_] = next; lastColumn[numberColumnsExtra_] = maximumColumnsExtra_; //check accuracy - but not if already checked (optimization problem) int status = (checkBeforeModifying) ? 0 : checkPivot(saveFromU,pivotCheck); if (status!=2) { CoinFactorizationDouble pivotValue = 1.0 / saveFromU; pivotRegion[numberRowsExtra_] = pivotValue; //modify by pivot for (CoinBigIndex i = 0; i < number; i++ ) { elementU[i] *= pivotValue; } maximumU_ = CoinMax(maximumU_,startU+number); numberRowsExtra_++; numberColumnsExtra_++; numberGoodU_++; numberPivots_++; } if ( numberRowsExtra_ > numberRows_ + 50 ) { CoinBigIndex extra = factorElements_ >> 1; if ( numberRowsExtra_ > numberRows_ + 100 + numberRows_ / 500 ) { if ( extra < 2 * numberRows_ ) { extra = 2 * numberRows_; } } else { if ( extra < 5 * numberRows_ ) { extra = 5 * numberRows_; } } CoinBigIndex added = totalElements_ - factorElements_; if ( added > extra && added > ( factorElements_ ) << 1 && !status && 3*totalElements_ > 2*(lengthAreaU_+lengthAreaL_)) { status = 3; if ( messageLevel_ & 4 ) { std::cout << "Factorization has "<< totalElements_ << ", basis had " << factorElements_ <iRow); next = nextColumn[iRow]; CoinBigIndex space; if (next!=maximumColumnsExtra_) space = startR[next]-startR[iRow]; else space = lengthAreaR_-startR[iRow]; int numberInR = numberInColumnPlus[iRow]; if (space>numberInR) { // there is space CoinBigIndex put=startR[iRow]+numberInR; numberInColumnPlus[iRow]=numberInR+1; indexRowR[put]=pivotRow; elementR[put]=region[iRow]; //add 4 for luck if (next==maximumColumnsExtra_) startR[maximumColumnsExtra_] = CoinMin(static_cast (put + 4) ,lengthAreaR_); } else { // no space - do we shuffle? if (!getColumnSpaceIterateR(iRow,region[iRow],pivotRow)) { // printf("Need more space for R\n"); numberInColumnPlus_.conditionalDelete(); regionSparse->clear(); break; } } region[iRow]=0.0; } regionSparse->setNumElements(0); } else { regionSparse->clear(); } return status; } // updateColumnTranspose. Updates one column transpose (BTRAN) int CoinFactorization::updateColumnTranspose ( CoinIndexedVector * regionSparse, CoinIndexedVector * regionSparse2 ) const { //zero region regionSparse->clear ( ); double * COIN_RESTRICT region = regionSparse->denseVector ( ); double * COIN_RESTRICT vector = regionSparse2->denseVector(); int * COIN_RESTRICT index = regionSparse2->getIndices(); int numberNonZero = regionSparse2->getNumElements(); const int * pivotColumn = pivotColumn_.array(); //move indices into index array int * COIN_RESTRICT regionIndex = regionSparse->getIndices ( ); bool packed = regionSparse2->packedMode(); if (packed) { for (int i = 0; i < numberNonZero; i ++ ) { int iRow = index[i]; double value = vector[i]; iRow=pivotColumn[iRow]; vector[i]=0.0; region[iRow] = value; regionIndex[i] = iRow; } } else { for (int i = 0; i < numberNonZero; i ++ ) { int iRow = index[i]; double value = vector[iRow]; vector[iRow]=0.0; iRow=pivotColumn[iRow]; region[iRow] = value; regionIndex[i] = iRow; } } regionSparse->setNumElements ( numberNonZero ); if (collectStatistics_) { numberBtranCounts_++; btranCountInput_ += static_cast (numberNonZero); } if (!doForrestTomlin_) { // Do PFI before everything else updateColumnTransposePFI(regionSparse); numberNonZero = regionSparse->getNumElements(); } // ******* U // Apply pivot region - could be combined for speed CoinFactorizationDouble * COIN_RESTRICT pivotRegion = pivotRegion_.array(); int smallestIndex=numberRowsExtra_; for (int j = 0; j < numberNonZero; j++ ) { int iRow = regionIndex[j]; smallestIndex = CoinMin(smallestIndex,iRow); region[iRow] *= pivotRegion[iRow]; } updateColumnTransposeU ( regionSparse,smallestIndex ); if (collectStatistics_) btranCountAfterU_ += static_cast (regionSparse->getNumElements()); //permute extra //row bits here updateColumnTransposeR ( regionSparse ); // ******* L updateColumnTransposeL ( regionSparse ); numberNonZero = regionSparse->getNumElements ( ); if (collectStatistics_) btranCountAfterL_ += static_cast (numberNonZero); const int * permuteBack = pivotColumnBack(); int number=0; if (packed) { for (int i=0;izeroTolerance_) { iRow=permuteBack[iRow]; vector[number]=value; index[number++]=iRow; //} } } else { for (int i=0;izeroTolerance_) { iRow=permuteBack[iRow]; vector[iRow]=value; index[number++]=iRow; //} } } regionSparse->setNumElements(0); regionSparse2->setNumElements(number); #ifdef COIN_DEBUG for (i=0;idenseVector ( ); int numberNonZero = regionSparse->getNumElements ( ); double tolerance = zeroTolerance_; int * COIN_RESTRICT regionIndex = regionSparse->getIndices ( ); const CoinBigIndex *startRow = startRowU_.array(); const CoinBigIndex *convertRowToColumn = convertRowToColumnU_.array(); const int *indexColumn = indexColumnU_.array(); const CoinFactorizationDouble * element = elementU_.array(); int last = numberU_; const int *numberInRow = numberInRow_.array(); numberNonZero = 0; for (int i=smallestIndex ; i < last; i++ ) { CoinFactorizationDouble pivotValue = region[i]; if ( fabs ( pivotValue ) > tolerance ) { CoinBigIndex start = startRow[i]; int numberIn = numberInRow[i]; CoinBigIndex end = start + numberIn; for (CoinBigIndex j = start ; j < end; j ++ ) { int iRow = indexColumn[j]; CoinBigIndex getElement = convertRowToColumn[j]; CoinFactorizationDouble value = element[getElement]; region[iRow] -= value * pivotValue; } regionIndex[numberNonZero++] = i; } else { region[i] = 0.0; } } //set counts regionSparse->setNumElements ( numberNonZero ); } /* Updates part of column transpose (BTRANU) when sparsish, assumes index is sorted i.e. region is correct */ void CoinFactorization::updateColumnTransposeUSparsish ( CoinIndexedVector * regionSparse, int smallestIndex) const { double * COIN_RESTRICT region = regionSparse->denseVector ( ); int numberNonZero = regionSparse->getNumElements ( ); double tolerance = zeroTolerance_; int * COIN_RESTRICT regionIndex = regionSparse->getIndices ( ); const CoinBigIndex *startRow = startRowU_.array(); const CoinBigIndex *convertRowToColumn = convertRowToColumnU_.array(); const int *indexColumn = indexColumnU_.array(); const CoinFactorizationDouble * element = elementU_.array(); int last = numberU_; const int *numberInRow = numberInRow_.array(); // mark known to be zero int nInBig = sizeof(CoinBigIndex)/sizeof(int); CoinCheckZero * COIN_RESTRICT mark = reinterpret_cast (sparse_.array()+(2+nInBig)*maximumRowsExtra_); for (int i=0;i>CHECK_SHIFT; int iBit = iPivot-(iWord<(mark[iWord] | (1<(1<> CHECK_SHIFT; int kLast = last>>CHECK_SHIFT; // do in chunks for (int k=smallestIndex;k tolerance ) { CoinBigIndex start = startRow[i]; int numberIn = numberInRow[i]; CoinBigIndex end = start + numberIn; for (CoinBigIndex j = start ; j < end; j ++ ) { int iRow = indexColumn[j]; CoinBigIndex getElement = convertRowToColumn[j]; CoinFactorizationDouble value = element[getElement]; int iWord = iRow>>CHECK_SHIFT; int iBit = iRow-(iWord<(mark[iWord] | (1<(1< tolerance ) { CoinBigIndex start = startRow[i]; int numberIn = numberInRow[i]; CoinBigIndex end = start + numberIn; for (CoinBigIndex j = start ; j < end; j ++ ) { int iRow = indexColumn[j]; CoinBigIndex getElement = convertRowToColumn[j]; CoinFactorizationDouble value = element[getElement]; region[iRow] -= value * pivotValue; } regionIndex[numberNonZero++] = i; } else { region[i] = 0.0; } } #ifdef COIN_DEBUG for (int i=0;isetNumElements ( numberNonZero ); } /* Updates part of column transpose (BTRANU) when sparse, assumes index is sorted i.e. region is correct */ void CoinFactorization::updateColumnTransposeUSparse ( CoinIndexedVector * regionSparse) const { double * COIN_RESTRICT region = regionSparse->denseVector ( ); int numberNonZero = regionSparse->getNumElements ( ); double tolerance = zeroTolerance_; int * COIN_RESTRICT regionIndex = regionSparse->getIndices ( ); const CoinBigIndex *startRow = startRowU_.array(); const CoinBigIndex *convertRowToColumn = convertRowToColumnU_.array(); const int *indexColumn = indexColumnU_.array(); const CoinFactorizationDouble * element = elementU_.array(); const int *numberInRow = numberInRow_.array(); // use sparse_ as temporary area // mark known to be zero int * COIN_RESTRICT stack = sparse_.array(); /* pivot */ int * COIN_RESTRICT list = stack + maximumRowsExtra_; /* final list */ CoinBigIndex * COIN_RESTRICT next = reinterpret_cast (list + maximumRowsExtra_); /* jnext */ char * COIN_RESTRICT mark = reinterpret_cast (next + maximumRowsExtra_); int nList; #ifdef COIN_DEBUG for (int i=0;ii); } } #endif nList=0; for (int k=0;k=startRow[kPivot]) { kPivot=indexColumn[j--]; /* put back on stack */ next[nStack++] =j; if (!mark[kPivot]) { /* and new one */ j=startRow[kPivot]+numberInRow[kPivot]-1; stack[nStack]=kPivot; mark[kPivot]=2; next[nStack++]=j; } } else { // finished list[nList++]=kPivot; mark[kPivot]=1; } } } } numberNonZero=0; for (int i=nList-1;i>=0;i--) { int iPivot = list[i]; mark[iPivot]=0; CoinFactorizationDouble pivotValue = region[iPivot]; if ( fabs ( pivotValue ) > tolerance ) { CoinBigIndex start = startRow[iPivot]; int numberIn = numberInRow[iPivot]; CoinBigIndex end = start + numberIn; for (CoinBigIndex j=start ; j < end; j ++ ) { int iRow = indexColumn[j]; CoinBigIndex getElement = convertRowToColumn[j]; CoinFactorizationDouble value = element[getElement]; region[iRow] -= value * pivotValue; } regionIndex[numberNonZero++] = iPivot; } else { region[iPivot] = 0.0; } } //set counts regionSparse->setNumElements ( numberNonZero ); } // updateColumnTransposeU. Updates part of column transpose (BTRANU) //assumes index is sorted i.e. region is correct //does not sort by sign void CoinFactorization::updateColumnTransposeU ( CoinIndexedVector * regionSparse, int smallestIndex) const { #if COIN_ONE_ETA_COPY CoinBigIndex *convertRowToColumn = convertRowToColumnU_.array(); if (!convertRowToColumn) { //abort(); updateColumnTransposeUByColumn(regionSparse,smallestIndex); return; } #endif int number = regionSparse->getNumElements ( ); int goSparse; // Guess at number at end if (sparseThreshold_>0) { if (btranAverageAfterU_) { int newNumber = static_cast (number*btranAverageAfterU_); if (newNumber< sparseThreshold_) goSparse = 2; else if (newNumber< sparseThreshold2_) goSparse = 1; else goSparse = 0; } else { if (numberdenseVector ( ); int * COIN_RESTRICT regionIndex = regionSparse->getIndices ( ); int numberNonZero; double tolerance = zeroTolerance_; int base; int first = -1; numberNonZero=0; //scan for (first=numberRows_-1;first>=0;first--) { if (region[first]) break; } if ( first >= 0 ) { base = baseL_; const CoinBigIndex * COIN_RESTRICT startColumn = startColumnL_.array(); const int * COIN_RESTRICT indexRow = indexRowL_.array(); const CoinFactorizationDouble * COIN_RESTRICT element = elementL_.array(); int last = baseL_ + numberL_; if ( first >= last ) { first = last - 1; } for (int i = first ; i >= base; i-- ) { CoinBigIndex j; CoinFactorizationDouble pivotValue = region[i]; for ( j= startColumn[i] ; j < startColumn[i+1]; j++ ) { int iRow = indexRow[j]; CoinFactorizationDouble value = element[j]; pivotValue -= value * region[iRow]; } if ( fabs ( pivotValue ) > tolerance ) { region[i] = pivotValue; regionIndex[numberNonZero++] = i; } else { region[i] = 0.0; } } //may have stopped early if ( first < base ) { base = first + 1; } if (base > 5) { int i=base-1; CoinFactorizationDouble pivotValue=region[i]; bool store = fabs(pivotValue) > tolerance; for (; i > 0; i-- ) { bool oldStore = store; CoinFactorizationDouble oldValue = pivotValue; pivotValue = region[i-1]; store = fabs ( pivotValue ) > tolerance ; if (!oldStore) { region[i] = 0.0; } else { region[i] = oldValue; regionIndex[numberNonZero++] = i; } } if (store) { region[0] = pivotValue; regionIndex[numberNonZero++] = 0; } else { region[0] = 0.0; } } else { for (int i = base -1 ; i >= 0; i-- ) { CoinFactorizationDouble pivotValue = region[i]; if ( fabs ( pivotValue ) > tolerance ) { region[i] = pivotValue; regionIndex[numberNonZero++] = i; } else { region[i] = 0.0; } } } } //set counts regionSparse->setNumElements ( numberNonZero ); } /* updateColumnTransposeLByRow. Updates part of column transpose (BTRANL) densish but by row */ void CoinFactorization::updateColumnTransposeLByRow ( CoinIndexedVector * regionSparse ) const { double * COIN_RESTRICT region = regionSparse->denseVector ( ); int * COIN_RESTRICT regionIndex = regionSparse->getIndices ( ); int numberNonZero; double tolerance = zeroTolerance_; int first = -1; // use row copy of L const CoinFactorizationDouble * element = elementByRowL_.array(); const CoinBigIndex * startRow = startRowL_.array(); const int * column = indexColumnL_.array(); for (first=numberRows_-1;first>=0;first--) { if (region[first]) break; } numberNonZero=0; for (int i=first;i>=0;i--) { CoinFactorizationDouble pivotValue = region[i]; if ( fabs ( pivotValue ) > tolerance ) { regionIndex[numberNonZero++] = i; CoinBigIndex j; for (j = startRow[i + 1]-1;j >= startRow[i]; j--) { int iRow = column[j]; CoinFactorizationDouble value = element[j]; region[iRow] -= pivotValue*value; } } else { region[i] = 0.0; } } //set counts regionSparse->setNumElements ( numberNonZero ); } // Updates part of column transpose (BTRANL) when sparsish by row void CoinFactorization::updateColumnTransposeLSparsish ( CoinIndexedVector * regionSparse ) const { double * COIN_RESTRICT region = regionSparse->denseVector ( ); int * COIN_RESTRICT regionIndex = regionSparse->getIndices ( ); int numberNonZero = regionSparse->getNumElements(); double tolerance = zeroTolerance_; // use row copy of L const CoinFactorizationDouble * element = elementByRowL_.array(); const CoinBigIndex * startRow = startRowL_.array(); const int * column = indexColumnL_.array(); // mark known to be zero int nInBig = sizeof(CoinBigIndex)/sizeof(int); CoinCheckZero * COIN_RESTRICT mark = reinterpret_cast (sparse_.array()+(2+nInBig)*maximumRowsExtra_); for (int i=0;i>CHECK_SHIFT; int iBit = iPivot-(iWord<(mark[iWord] | (1<(1<>CHECK_SHIFT; jLast = (jLast<=jLast;i--) { CoinFactorizationDouble pivotValue = region[i]; if ( fabs ( pivotValue ) > tolerance ) { regionIndex[numberNonZero++] = i; CoinBigIndex j; for (j = startRow[i + 1]-1;j >= startRow[i]; j--) { int iRow = column[j]; CoinFactorizationDouble value = element[j]; int iWord = iRow>>CHECK_SHIFT; int iBit = iRow-(iWord<(mark[iWord] | (1<(1<>CHECK_SHIFT; mark[jLast]=0; for (int k=jLast-1;k>=0;k--) { unsigned int iMark = mark[k]; if (iMark) { // something in chunk - do all (as imark may change) int iLast = k<= iLast; i-- ) { CoinFactorizationDouble pivotValue = region[i]; if ( fabs ( pivotValue ) > tolerance ) { regionIndex[numberNonZero++] = i; CoinBigIndex j; for (j = startRow[i + 1]-1;j >= startRow[i]; j--) { int iRow = column[j]; CoinFactorizationDouble value = element[j]; int iWord = iRow>>CHECK_SHIFT; int iBit = iRow-(iWord<(mark[iWord] | (1<(1<setNumElements ( numberNonZero ); } /* updateColumnTransposeLSparse. Updates part of column transpose (BTRANL) sparse */ void CoinFactorization::updateColumnTransposeLSparse ( CoinIndexedVector * regionSparse ) const { double * COIN_RESTRICT region = regionSparse->denseVector ( ); int * COIN_RESTRICT regionIndex = regionSparse->getIndices ( ); int numberNonZero = regionSparse->getNumElements ( ); double tolerance = zeroTolerance_; // use row copy of L const CoinFactorizationDouble * element = elementByRowL_.array(); const CoinBigIndex * startRow = startRowL_.array(); const int * column = indexColumnL_.array(); // use sparse_ as temporary area // mark known to be zero int * COIN_RESTRICT stack = sparse_.array(); /* pivot */ int * COIN_RESTRICT list = stack + maximumRowsExtra_; /* final list */ CoinBigIndex * COIN_RESTRICT next = reinterpret_cast (list + maximumRowsExtra_); /* jnext */ char * COIN_RESTRICT mark = reinterpret_cast (next + maximumRowsExtra_); int nList; int number = numberNonZero; #ifdef COIN_DEBUG for (i=0;i=0) { /* take off stack */ if (j>=startRow[kPivot]) { int jPivot=column[j--]; /* put back on stack */ next[nStack] =j; if (!mark[jPivot]) { /* and new one */ kPivot=jPivot; j = startRow[kPivot+1]-1; stack[++nStack]=kPivot; mark[kPivot]=1; next[nStack]=j; } } else { /* finished so mark */ list[nList++]=kPivot; mark[kPivot]=1; --nStack; if (nStack>=0) { kPivot=stack[nStack]; j=next[nStack]; } } } } } numberNonZero=0; for (int i=nList-1;i>=0;i--) { int iPivot = list[i]; mark[iPivot]=0; CoinFactorizationDouble pivotValue = region[iPivot]; if ( fabs ( pivotValue ) > tolerance ) { regionIndex[numberNonZero++] = iPivot; CoinBigIndex j; for ( j = startRow[iPivot]; j < startRow[iPivot+1]; j ++ ) { int iRow = column[j]; CoinFactorizationDouble value = element[j]; region[iRow] -= value * pivotValue; } } else { region[iPivot]=0.0; } } //set counts regionSparse->setNumElements ( numberNonZero ); } // updateColumnTransposeL. Updates part of column transpose (BTRANL) void CoinFactorization::updateColumnTransposeL ( CoinIndexedVector * regionSparse ) const { int number = regionSparse->getNumElements ( ); if (!numberL_&&!numberDense_) { if (sparse_.array()||number0) { if (btranAverageAfterL_) { int newNumber = static_cast (number*btranAverageAfterL_); if (newNumber< sparseThreshold_) goSparse = 2; else if (newNumber< sparseThreshold2_) goSparse = 1; else goSparse = 0; } else { if (numbergetNumElements(); double * COIN_RESTRICT region = regionSparse->denseVector ( ); int * COIN_RESTRICT regionIndex = regionSparse->getIndices ( ); int i=0; bool doDense=false; if (number<=numberRows_) { while (i=lastSparse) { doDense=true; regionIndex[i] = regionIndex[--number]; } else { i++; } } } else { for (i=numberRows_-1;i>=lastSparse;i--) { if (region[i]) { doDense=true; // numbers are all wrong - do a scan regionSparse->setNumElements(0); regionSparse->scan(0,lastSparse,zeroTolerance_); number=regionSparse->getNumElements(); break; } } if (sparseThreshold_) goSparse=0; else goSparse=-1; } if (doDense) { regionSparse->setNumElements(number); char trans = 'T'; int ione=1; int info; F77_FUNC(dgetrs,DGETRS)(&trans,&numberDense_,&ione,denseArea_,&numberDense_, densePermute_,region+lastSparse,&numberDense_,&info,1); //and scan again if (goSparse>0||!numberL_) regionSparse->scan(lastSparse,numberRows_,zeroTolerance_); } if (!numberL_) { // could be odd combination of sparse/dense if (number>numberRows_) { regionSparse->setNumElements(0); regionSparse->scan(0,numberRows_,zeroTolerance_); } return; } } #endif if (goSparse>0&®ionSparse->getNumElements()>numberRows_) goSparse=0; switch (goSparse) { case -1: // No row copy updateColumnTransposeLDensish(regionSparse); break; case 0: // densish but by row updateColumnTransposeLByRow(regionSparse); break; case 1: // middling(and by row) updateColumnTransposeLSparsish(regionSparse); break; case 2: // sparse updateColumnTransposeLSparse(regionSparse); break; } } #if COIN_ONE_ETA_COPY /* Combines BtranU and delete elements If deleted is NULL then delete elements otherwise store where elements are */ void CoinFactorization::replaceColumnU ( CoinIndexedVector * regionSparse, CoinBigIndex * deleted, int internalPivotRow) { double * COIN_RESTRICT region = regionSparse->denseVector(); int * COIN_RESTRICT regionIndex = regionSparse->getIndices(); double tolerance = zeroTolerance_; const CoinBigIndex *startColumn = startColumnU_.array(); const int *indexRow = indexRowU_.array(); CoinFactorizationDouble *element = elementU_.array(); int numberNonZero = 0; const int *numberInColumn = numberInColumn_.array(); //const CoinFactorizationDouble *pivotRegion = pivotRegion_.array(); bool deleteNow=true; if (deleted) { deleteNow = false; deleted ++; } int nPut=0; for (int i = CoinMax(numberSlacks_,internalPivotRow) ; i < numberU_; i++ ) { assert (!region[i]); CoinFactorizationDouble pivotValue = 0.0; //region[i]*pivotRegion[i]; //printf("Epv %g reg %g pr %g\n", // pivotValue,region[i],pivotRegion[i]); //pivotValue = region[i]; for (CoinBigIndex j= startColumn[i] ; j < startColumn[i]+numberInColumn[i]; j++ ) { int iRow = indexRow[j]; CoinFactorizationDouble value = element[j]; if (iRow!=internalPivotRow) { pivotValue -= value * region[iRow]; } else { assert (!region[iRow]); pivotValue += value; if (deleteNow) element[j]=0.0; else deleted[nPut++]=j; } } if ( fabs ( pivotValue ) > tolerance ) { regionIndex[numberNonZero++] = i; region[i] = pivotValue; } else { region[i] = 0; } } if (!deleteNow) { deleted--; deleted[0]=nPut; } regionSparse->setNumElements(numberNonZero); } /* Updates part of column transpose (BTRANU) by column assumes index is sorted i.e. region is correct */ void CoinFactorization::updateColumnTransposeUByColumn ( CoinIndexedVector * regionSparse, int smallestIndex) const { //CoinIndexedVector temp = *regionSparse; //updateColumnTransposeUDensish(&temp,smallestIndex); double * COIN_RESTRICT region = regionSparse->denseVector(); int * COIN_RESTRICT regionIndex = regionSparse->getIndices(); double tolerance = zeroTolerance_; const CoinBigIndex *startColumn = startColumnU_.array(); const int *indexRow = indexRowU_.array(); const CoinFactorizationDouble *element = elementU_.array(); int numberNonZero = 0; const int *numberInColumn = numberInColumn_.array(); const CoinFactorizationDouble *pivotRegion = pivotRegion_.array(); for (int i = smallestIndex;i tolerance ) numberNonZero++; else region[i]=0.0; } } for (int i = CoinMax(numberSlacks_,smallestIndex) ; i < numberU_; i++ ) { CoinFactorizationDouble pivotValue = region[i]*pivotRegion[i]; //printf("pv %g reg %g pr %g\n", // pivotValue,region[i],pivotRegion[i]); pivotValue = region[i]; for (CoinBigIndex j= startColumn[i] ; j < startColumn[i]+numberInColumn[i]; j++ ) { int iRow = indexRow[j]; CoinFactorizationDouble value = element[j]; pivotValue -= value * region[iRow]; } if ( fabs ( pivotValue ) > tolerance ) { regionIndex[numberNonZero++] = i; region[i] = pivotValue; } else { region[i] = 0; } } regionSparse->setNumElements(numberNonZero); //double * region2 = temp.denseVector(); //for (i=0;idenseVector ( ); #ifdef COIN_DEBUG regionSparse->checkClean(); #endif int last = numberRowsExtra_-1; const int *indexRow = indexRowR_; const CoinFactorizationDouble *element = elementR_; const CoinBigIndex * startColumn = startColumnR_.array()-numberRows_; //move using permute_ (stored in inverse fashion) const int * permute = permute_.array(); for (int i = last ; i >= numberRows_; i-- ) { int putRow = permute[i]; CoinFactorizationDouble pivotValue = region[i]; //zero out old permuted region[i] = 0.0; if ( pivotValue ) { for (CoinBigIndex j = startColumn[i]; j < startColumn[i+1]; j++ ) { CoinFactorizationDouble value = element[j]; int iRow = indexRow[j]; region[iRow] -= value * pivotValue; } region[putRow] = pivotValue; //putRow must have been zero before so put on list ?? //but can't catch up so will have to do L from end //unless we update lookBtran in replaceColumn - yes } } } // Updates part of column transpose (BTRANR) when sparse void CoinFactorization::updateColumnTransposeRSparse ( CoinIndexedVector * regionSparse ) const { double * COIN_RESTRICT region = regionSparse->denseVector ( ); int * COIN_RESTRICT regionIndex = regionSparse->getIndices ( ); int numberNonZero = regionSparse->getNumElements ( ); double tolerance = zeroTolerance_; #ifdef COIN_DEBUG regionSparse->checkClean(); #endif int last = numberRowsExtra_-1; const int *indexRow = indexRowR_; const CoinFactorizationDouble *element = elementR_; const CoinBigIndex * startColumn = startColumnR_.array()-numberRows_; //move using permute_ (stored in inverse fashion) const int * permute = permute_.array(); // we can use sparse_ as temporary array int * COIN_RESTRICT spare = sparse_.array(); for (int i=0;i= numberRows_; i-- ) { int putRow = permute[i]; assert (putRow<=i); CoinFactorizationDouble pivotValue = region[i]; //zero out old permuted region[i] = 0.0; if ( pivotValue ) { for (CoinBigIndex j = startColumn[i]; j < startColumn[i+1]; j++ ) { CoinFactorizationDouble value = element[j]; int iRow = indexRow[j]; CoinFactorizationDouble oldValue = region[iRow]; CoinFactorizationDouble newValue = oldValue - value * pivotValue; if (oldValue) { if (newValue) region[iRow]=newValue; else region[iRow]=COIN_INDEXED_REALLY_TINY_ELEMENT; } else if (fabs(newValue)>tolerance) { region[iRow] = newValue; spare[iRow]=numberNonZero; regionIndex[numberNonZero++]=iRow; } } region[putRow] = pivotValue; // modify list int position=spare[i]; regionIndex[position]=putRow; spare[putRow]=position; } } regionSparse->setNumElements(numberNonZero); } // updateColumnTransposeR. Updates part of column (FTRANR) void CoinFactorization::updateColumnTransposeR ( CoinIndexedVector * regionSparse ) const { if (numberRowsExtra_==numberRows_) return; int numberNonZero = regionSparse->getNumElements ( ); if (numberNonZero) { if (numberNonZero < (sparseThreshold_<<2)||(!numberL_&&sparse_.array())) { updateColumnTransposeRSparse ( regionSparse ); if (collectStatistics_) btranCountAfterR_ += regionSparse->getNumElements(); } else { updateColumnTransposeRDensish ( regionSparse ); // we have lost indices // make sure won't try and go sparse again if (collectStatistics_) btranCountAfterR_ += CoinMin((numberNonZero<<1),numberRows_); regionSparse->setNumElements (numberRows_+1); } } } // makes a row copy of L void CoinFactorization::goSparse ( ) { if (!sparseThreshold_) { if (numberRows_>300) { if (numberRows_<10000) { sparseThreshold_=CoinMin(numberRows_/6,500); //sparseThreshold2_=sparseThreshold_; } else { sparseThreshold_=1000; //sparseThreshold2_=sparseThreshold_; } sparseThreshold2_=numberRows_>>2; } else { sparseThreshold_=0; sparseThreshold2_=0; } } else { if (!sparseThreshold_&&numberRows_>400) { sparseThreshold_=CoinMin((numberRows_-300)/9,1000); } sparseThreshold2_=sparseThreshold_; } if (!sparseThreshold_) return; // allow for stack, list, next and char map of mark int nRowIndex = (maximumRowsExtra_+CoinSizeofAsInt(int)-1)/ CoinSizeofAsInt(char); int nInBig = static_cast(sizeof(CoinBigIndex)/sizeof(int)); assert (nInBig>=1); sparse_.conditionalNew( (2+nInBig)*maximumRowsExtra_ + nRowIndex ); // zero out mark memset(sparse_.array()+(2+nInBig)*maximumRowsExtra_, 0,maximumRowsExtra_*sizeof(char)); elementByRowL_.conditionalDelete(); indexColumnL_.conditionalDelete(); startRowL_.conditionalNew(numberRows_+1); if (lengthAreaL_) { elementByRowL_.conditionalNew(lengthAreaL_); indexColumnL_.conditionalNew(lengthAreaL_); } // counts CoinBigIndex * COIN_RESTRICT startRowL = startRowL_.array(); CoinZeroN(startRowL,numberRows_); const CoinBigIndex * startColumnL = startColumnL_.array(); CoinFactorizationDouble * COIN_RESTRICT elementL = elementL_.array(); const int * indexRowL = indexRowL_.array(); for (int i=baseL_;i=baseL_;i--) { for (CoinBigIndex j=startColumnL[i];j0&&sparseThreshold_) { sparseThreshold_=value; sparseThreshold2_= sparseThreshold_; } else if (!value&&sparseThreshold_) { // delete copy sparseThreshold_=0; sparseThreshold2_= 0; elementByRowL_.conditionalDelete(); startRowL_.conditionalDelete(); indexColumnL_.conditionalDelete(); sparse_.conditionalDelete(); } else if (value>0&&!sparseThreshold_) { if (value>1) sparseThreshold_=value; else sparseThreshold_=0; sparseThreshold2_= sparseThreshold_; goSparse(); } } void CoinFactorization::maximumPivots ( int value ) { if (value>0) { maximumPivots_=value; } } void CoinFactorization::messageLevel ( int value ) { if (value>0&&value<16) { messageLevel_=value; } } void CoinFactorization::pivotTolerance ( double value ) { if (value>0.0&&value<=1.0) { pivotTolerance_=value; } } void CoinFactorization::zeroTolerance ( double value ) { if (value>0.0&&value<1.0) { zeroTolerance_=value; } } #ifndef COIN_FAST_CODE void CoinFactorization::slackValue ( double value ) { if (value>=0.0) { slackValue_=1.0; } else { slackValue_=-1.0; } } #endif // Reset all sparsity etc statistics void CoinFactorization::resetStatistics() { collectStatistics_=false; /// Below are all to collect ftranCountInput_=0.0; ftranCountAfterL_=0.0; ftranCountAfterR_=0.0; ftranCountAfterU_=0.0; btranCountInput_=0.0; btranCountAfterU_=0.0; btranCountAfterR_=0.0; btranCountAfterL_=0.0; /// We can roll over factorizations numberFtranCounts_=0; numberBtranCounts_=0; /// While these are averages collected over last ftranAverageAfterL_=0.0; ftranAverageAfterR_=0.0; ftranAverageAfterU_=0.0; btranAverageAfterU_=0.0; btranAverageAfterR_=0.0; btranAverageAfterL_=0.0; } /* getColumnSpaceIterate. Gets space for one extra U element in Column may have to do compression (returns true) also moves existing vector. Returns -1 if no memory or where element was put Used by replaceRow (turns off R version) */ CoinBigIndex CoinFactorization::getColumnSpaceIterate ( int iColumn, double value, int iRow) { if (numberInColumnPlus_.array()) { numberInColumnPlus_.conditionalDelete(); } int * COIN_RESTRICT numberInRow = numberInRow_.array(); int * COIN_RESTRICT numberInColumn = numberInColumn_.array(); int * COIN_RESTRICT nextColumn = nextColumn_.array(); int * COIN_RESTRICT lastColumn = lastColumn_.array(); int number = numberInColumn[iColumn]; int iNext=nextColumn[iColumn]; CoinBigIndex * COIN_RESTRICT startColumnU = startColumnU_.array(); CoinBigIndex * COIN_RESTRICT startRowU = startRowU_.array(); CoinBigIndex space = startColumnU[iNext]-startColumnU[iColumn]; CoinBigIndex put; CoinBigIndex * COIN_RESTRICT convertRowToColumnU = convertRowToColumnU_.array(); int * COIN_RESTRICT indexColumnU = indexColumnU_.array(); CoinFactorizationDouble * COIN_RESTRICT elementU = elementU_.array(); int * COIN_RESTRICT indexRowU = indexRowU_.array(); if ( space < number + 1 ) { //see if it can go in at end if (lengthAreaU_-startColumnU[maximumColumnsExtra_]=number+1) { int next = nextColumn[iColumn]; int last = lastColumn[iColumn]; //out nextColumn[last] = next; lastColumn[next] = last; put = startColumnU[maximumColumnsExtra_]; //in at end last = lastColumn[maximumColumnsExtra_]; nextColumn[last] = iColumn; lastColumn[maximumColumnsExtra_] = iColumn; lastColumn[iColumn] = last; nextColumn[iColumn] = maximumColumnsExtra_; //move CoinBigIndex get = startColumnU[iColumn]; startColumnU[iColumn] = put; int i = 0; for (i=0 ; i < number; i ++ ) { CoinFactorizationDouble value = elementU[get]; int iRow=indexRowU[get++]; if (value) { elementU[put]= value; int n=numberInRow[iRow]; CoinBigIndex start = startRowU[iRow]; CoinBigIndex j; for (j=start;j (put + 4) ,lengthAreaU_); } else { // no room put=-1; } } else { // just slot in put=startColumnU[iColumn]+numberInColumn[iColumn]; int n=numberInRow[iRow]; CoinBigIndex start = startRowU[iRow]; CoinBigIndex j; for (j=start;j1.0e-3) printf("column %d, old value %g new %g (el %g, piv %g)\n",jColumn,oldValue, newValue,elements[i],pivotRegion[jColumn]); } } for (i=0;i=0) printf("current column %d not in new\n",ind[i]); } assert (numberNow==iNumberInRow); } assert (numberInColumn[whichRow]==0); assert (pivotRegion[whichRow]==1.0); CoinBigIndex space; int returnCode=0; space = startRowU[next] - (start+iNumberInRow); if ( space < 0 ) { if (!getRowSpaceIterate ( whichRow, iNumberInRow)) returnCode=3; } //return 0; if (!returnCode) { int * indexColumnU = indexColumnU_.array(); numberInRow[whichRow]=iNumberInRow; start = startRowU[whichRow]; int i; for (i=0;iwhichRow); CoinFactorizationDouble value = elements[i]*pivotRegion[iColumn]; #if 0 int k; bool found=false; for (k=startColumnU[iColumn];k=0) { convertRowToColumnU[start+i] = iWhere; } else { returnCode=3; break; } #if 0 } else { convertRowToColumnU[start+i] = k; } #endif } } return returnCode; } // Takes out all entries for given rows void CoinFactorization::emptyRows(int numberToEmpty, const int which[]) { int i; int * delRow = new int [maximumRowsExtra_]; int * indexRowU = indexRowU_.array(); #ifndef NDEBUG CoinFactorizationDouble * pivotRegion = pivotRegion_.array(); #endif for (i=0;idenseVector ( ); int * regionIndex = regionSparse->getIndices(); double tolerance = zeroTolerance_; const CoinBigIndex *startColumn = startColumnU_.array()+numberRows_; const int *indexRow = indexRowU_.array(); const CoinFactorizationDouble *element = elementU_.array(); int numberNonZero = regionSparse->getNumElements(); int i; #ifdef COIN_DEBUG for (i=0;i=0&&iRow tolerance ) { for (CoinBigIndex j= startColumn[i] ; j < startColumn[i+1]; j++ ) { int iRow = indexRow[j]; CoinFactorizationDouble oldValue = region[iRow]; CoinFactorizationDouble value = oldValue - pivotValue*element[j]; if (!oldValue) { if (fabs(value)>tolerance) { region[iRow]=value; regionIndex[numberNonZero++]=iRow; } } else { if (fabs(value)>tolerance) { region[iRow]=value; } else { region[iRow]=COIN_INDEXED_REALLY_TINY_ELEMENT; } } } pivotValue *= pivotRegion[i]; region[pivotRow]=pivotValue; } else if (pivotValue) { region[pivotRow]=COIN_INDEXED_REALLY_TINY_ELEMENT; } } } regionSparse->setNumElements ( numberNonZero ); } // Updates part of column transpose PFI (BTRAN), void CoinFactorization::updateColumnTransposePFI ( CoinIndexedVector * regionSparse) const { double *region = regionSparse->denseVector ( ); int numberNonZero = regionSparse->getNumElements(); int *index = regionSparse->getIndices ( ); int i; #ifdef COIN_DEBUG for (i=0;i=0&&iRow=0; i-- ) { int pivotRow = pivotColumn[i]; CoinFactorizationDouble pivotValue = region[pivotRow]*pivotRegion[i]; for (CoinBigIndex j= startColumn[i] ; j < startColumn[i+1]; j++ ) { int iRow = indexRow[j]; CoinFactorizationDouble value = element[j]; pivotValue -= value * region[iRow]; } //pivotValue *= pivotRegion[i]; if ( fabs ( pivotValue ) > tolerance ) { if (!region[pivotRow]) index[numberNonZero++] = pivotRow; region[pivotRow] = pivotValue; } else { if (region[pivotRow]) region[pivotRow] = COIN_INDEXED_REALLY_TINY_ELEMENT; } } //set counts regionSparse->setNumElements ( numberNonZero ); } /* Replaces one Column to basis for PFI returns 0=OK, 1=Probably OK, 2=singular, 3=no room Not sure what checkBeforeModifying means for PFI. */ int CoinFactorization::replaceColumnPFI ( CoinIndexedVector * regionSparse, int pivotRow, double alpha) { CoinBigIndex *startColumn=startColumnU_.array()+numberRows_; int *indexRow=indexRowU_.array(); CoinFactorizationDouble *element=elementU_.array(); CoinFactorizationDouble * pivotRegion = pivotRegion_.array()+numberRows_; // This has incoming column const double *region = regionSparse->denseVector ( ); const int * index = regionSparse->getIndices(); int numberNonZero = regionSparse->getNumElements(); int iColumn = numberPivots_; if (!iColumn) startColumn[0]=startColumn[maximumColumnsExtra_]; CoinBigIndex start = startColumn[iColumn]; //return at once if too many iterations if ( numberPivots_ >= maximumPivots_ ) { return 5; } if ( lengthAreaU_ - ( start + numberNonZero ) < 0) { return 3; } int i; if (numberPivots_) { if (fabs(alpha)<1.0e-5) { if (fabs(alpha)<1.0e-7) return 2; else return 1; } } else { if (fabs(alpha)<1.0e-8) return 2; } CoinFactorizationDouble pivotValue = 1.0/alpha; pivotRegion[iColumn]=pivotValue; double tolerance = zeroTolerance_; const int * pivotColumn = pivotColumn_.array(); // Operations done before permute back if (regionSparse->packedMode()) { for ( i = 0; i < numberNonZero; i++ ) { int iRow = index[i]; if (iRow!=pivotRow) { if ( fabs ( region[i] ) > tolerance ) { indexRow[start]=pivotColumn[iRow]; element[start++]=region[i]*pivotValue; } } } } else { for ( i = 0; i < numberNonZero; i++ ) { int iRow = index[i]; if (iRow!=pivotRow) { if ( fabs ( region[iRow] ) > tolerance ) { indexRow[start]=pivotColumn[iRow]; element[start++]=region[iRow]*pivotValue; } } } } numberPivots_++; numberNonZero=start-startColumn[iColumn]; startColumn[numberPivots_]=start; totalElements_ += numberNonZero; int * pivotColumn2 = pivotColumn_.array()+numberRows_; pivotColumn2[iColumn]=pivotColumn[pivotRow]; return 0; } // = CoinFactorization & CoinFactorization::operator = ( const CoinFactorization & other ) { if (this != &other) { gutsOfDestructor(2); gutsOfInitialize(3); persistenceFlag_=other.persistenceFlag_; gutsOfCopy(other); } return *this; } void CoinFactorization::gutsOfCopy(const CoinFactorization &other) { elementU_.allocate(other.elementU_, other.lengthAreaU_ *CoinSizeofAsInt(CoinFactorizationDouble)); indexRowU_.allocate(other.indexRowU_, other.lengthAreaU_*CoinSizeofAsInt(int) ); elementL_.allocate(other.elementL_, other.lengthAreaL_*CoinSizeofAsInt(CoinFactorizationDouble) ); indexRowL_.allocate(other.indexRowL_, other.lengthAreaL_*CoinSizeofAsInt(int) ); startColumnL_.allocate(other.startColumnL_,(other.numberRows_ + 1)*CoinSizeofAsInt(CoinBigIndex) ); int extraSpace; if (other.numberInColumnPlus_.array()) { extraSpace = other.maximumPivots_ + 1 + other.maximumColumnsExtra_ + 1; } else { extraSpace = other.maximumPivots_ + 1 ; } startColumnR_.allocate(other.startColumnR_,extraSpace*CoinSizeofAsInt(CoinBigIndex)); pivotRegion_.allocate(other.pivotRegion_, (other.maximumRowsExtra_ + 1 )*CoinSizeofAsInt(CoinFactorizationDouble)); permuteBack_.allocate(other.permuteBack_,(other.maximumRowsExtra_ + 1)*CoinSizeofAsInt(int)); permute_.allocate(other.permute_,(other.maximumRowsExtra_ + 1)*CoinSizeofAsInt(int)); pivotColumnBack_.allocate(other.pivotColumnBack_,(other.maximumRowsExtra_ + 1)*CoinSizeofAsInt(int)); firstCount_.allocate(other.firstCount_,(other.maximumRowsExtra_ + 1)*CoinSizeofAsInt(int)); startColumnU_.allocate(other.startColumnU_, (other.maximumColumnsExtra_ + 1 )*CoinSizeofAsInt(CoinBigIndex)); numberInColumn_.allocate(other.numberInColumn_, (other.maximumColumnsExtra_ + 1 )*CoinSizeofAsInt(int)); pivotColumn_.allocate(other.pivotColumn_,(other.maximumColumnsExtra_ + 1)*CoinSizeofAsInt(int)); nextColumn_.allocate(other.nextColumn_, (other.maximumColumnsExtra_ + 1 )*CoinSizeofAsInt(int)); lastColumn_.allocate(other.lastColumn_, (other.maximumColumnsExtra_ + 1 )*CoinSizeofAsInt(int)); indexColumnU_.allocate(other.indexColumnU_, other.lengthAreaU_*CoinSizeofAsInt(int) ); nextRow_.allocate(other.nextRow_,(other.maximumRowsExtra_ + 1)*CoinSizeofAsInt(int)); lastRow_.allocate( other.lastRow_,(other.maximumRowsExtra_ + 1 )*CoinSizeofAsInt(int)); const CoinBigIndex * convertUOther = other.convertRowToColumnU_.array(); #if COIN_ONE_ETA_COPY if (convertUOther) { #endif convertRowToColumnU_.allocate(other.convertRowToColumnU_, other.lengthAreaU_*CoinSizeofAsInt(CoinBigIndex) ); startRowU_.allocate(other.startRowU_,(other.maximumRowsExtra_ + 1)*CoinSizeofAsInt(CoinBigIndex)); numberInRow_.allocate(other.numberInRow_, (other.maximumRowsExtra_ + 1 )*CoinSizeofAsInt(int)); #if COIN_ONE_ETA_COPY } #endif if (other.sparseThreshold_) { elementByRowL_.allocate(other.elementByRowL_, other.lengthAreaL_ ); indexColumnL_.allocate(other.indexColumnL_, other.lengthAreaL_ ); startRowL_.allocate(other.startRowL_,other.numberRows_+1); } numberTrials_ = other.numberTrials_; biggerDimension_ = other.biggerDimension_; relaxCheck_ = other.relaxCheck_; numberSlacks_ = other.numberSlacks_; numberU_ = other.numberU_; maximumU_=other.maximumU_; lengthU_ = other.lengthU_; lengthAreaU_ = other.lengthAreaU_; numberL_ = other.numberL_; baseL_ = other.baseL_; lengthL_ = other.lengthL_; lengthAreaL_ = other.lengthAreaL_; numberR_ = other.numberR_; lengthR_ = other.lengthR_; lengthAreaR_ = other.lengthAreaR_; pivotTolerance_ = other.pivotTolerance_; zeroTolerance_ = other.zeroTolerance_; #ifndef COIN_FAST_CODE slackValue_ = other.slackValue_; #endif areaFactor_ = other.areaFactor_; numberRows_ = other.numberRows_; numberRowsExtra_ = other.numberRowsExtra_; maximumRowsExtra_ = other.maximumRowsExtra_; numberColumns_ = other.numberColumns_; numberColumnsExtra_ = other.numberColumnsExtra_; maximumColumnsExtra_ = other.maximumColumnsExtra_; maximumPivots_=other.maximumPivots_; numberGoodU_ = other.numberGoodU_; numberGoodL_ = other.numberGoodL_; numberPivots_ = other.numberPivots_; messageLevel_ = other.messageLevel_; totalElements_ = other.totalElements_; factorElements_ = other.factorElements_; status_ = other.status_; doForrestTomlin_ = other.doForrestTomlin_; collectStatistics_=other.collectStatistics_; ftranCountInput_=other.ftranCountInput_; ftranCountAfterL_=other.ftranCountAfterL_; ftranCountAfterR_=other.ftranCountAfterR_; ftranCountAfterU_=other.ftranCountAfterU_; btranCountInput_=other.btranCountInput_; btranCountAfterU_=other.btranCountAfterU_; btranCountAfterR_=other.btranCountAfterR_; btranCountAfterL_=other.btranCountAfterL_; numberFtranCounts_=other.numberFtranCounts_; numberBtranCounts_=other.numberBtranCounts_; ftranAverageAfterL_=other.ftranAverageAfterL_; ftranAverageAfterR_=other.ftranAverageAfterR_; ftranAverageAfterU_=other.ftranAverageAfterU_; btranAverageAfterU_=other.btranAverageAfterU_; btranAverageAfterR_=other.btranAverageAfterR_; btranAverageAfterL_=other.btranAverageAfterL_; biasLU_=other.biasLU_; sparseThreshold_=other.sparseThreshold_; sparseThreshold2_=other.sparseThreshold2_; CoinBigIndex space = lengthAreaL_ - lengthL_; numberDense_ = other.numberDense_; denseThreshold_=other.denseThreshold_; if (numberDense_) { denseArea_ = new double [numberDense_*numberDense_]; CoinMemcpyN(other.denseArea_, numberDense_*numberDense_,denseArea_); densePermute_ = new int [numberDense_]; CoinMemcpyN(other.densePermute_, numberDense_,densePermute_); } lengthAreaR_ = space; elementR_ = elementL_.array() + lengthL_; indexRowR_ = indexRowL_.array() + lengthL_; workArea_ = other.workArea_; workArea2_ = other.workArea2_; //now copy everything //assuming numberRowsExtra==numberColumnsExtra if (numberRowsExtra_) { if (convertUOther) { CoinMemcpyN ( other.startRowU_.array(), numberRowsExtra_ + 1, startRowU_.array() ); CoinMemcpyN ( other.numberInRow_.array(), numberRowsExtra_ + 1, numberInRow_.array() ); startRowU_.array()[maximumRowsExtra_] = other.startRowU_.array()[maximumRowsExtra_]; } CoinMemcpyN ( other.pivotRegion_.array(), numberRowsExtra_ , pivotRegion_.array() ); CoinMemcpyN ( other.permuteBack_.array(), numberRowsExtra_ + 1, permuteBack_.array() ); CoinMemcpyN ( other.permute_.array(), numberRowsExtra_ + 1, permute_.array() ); CoinMemcpyN ( other.pivotColumnBack_.array(), numberRowsExtra_ + 1, pivotColumnBack_.array() ); CoinMemcpyN ( other.firstCount_.array(), numberRowsExtra_ + 1, firstCount_.array() ); CoinMemcpyN ( other.startColumnU_.array(), numberRowsExtra_ + 1, startColumnU_.array() ); CoinMemcpyN ( other.numberInColumn_.array(), numberRowsExtra_ + 1, numberInColumn_.array() ); CoinMemcpyN ( other.pivotColumn_.array(), numberRowsExtra_ + 1, pivotColumn_.array() ); CoinMemcpyN ( other.nextColumn_.array(), numberRowsExtra_ + 1, nextColumn_.array() ); CoinMemcpyN ( other.lastColumn_.array(), numberRowsExtra_ + 1, lastColumn_.array() ); CoinMemcpyN ( other.startColumnR_.array() , numberRowsExtra_ - numberColumns_ + 1, startColumnR_.array() ); //extra one at end startColumnU_.array()[maximumColumnsExtra_] = other.startColumnU_.array()[maximumColumnsExtra_]; nextColumn_.array()[maximumColumnsExtra_] = other.nextColumn_.array()[maximumColumnsExtra_]; lastColumn_.array()[maximumColumnsExtra_] = other.lastColumn_.array()[maximumColumnsExtra_]; CoinMemcpyN ( other.nextRow_.array(), numberRowsExtra_ + 1, nextRow_.array() ); CoinMemcpyN ( other.lastRow_.array(), numberRowsExtra_ + 1, lastRow_.array() ); nextRow_.array()[maximumRowsExtra_] = other.nextRow_.array()[maximumRowsExtra_]; lastRow_.array()[maximumRowsExtra_] = other.lastRow_.array()[maximumRowsExtra_]; } CoinMemcpyN ( other.elementR_, lengthR_, elementR_ ); CoinMemcpyN ( other.indexRowR_, lengthR_, indexRowR_ ); //row and column copies of U /* as elements of U may have been zeroed but column counts zero copy all elements */ const CoinBigIndex * startColumnU = startColumnU_.array(); const int * numberInColumn = numberInColumn_.array(); #ifndef NDEBUG int maxU=0; for (int iRow = 0; iRow < numberRowsExtra_; iRow++ ) { CoinBigIndex start = startColumnU[iRow]; int numberIn = numberInColumn[iRow]; maxU = CoinMax(maxU,start+numberIn); } assert (maximumU_>=maxU); #endif CoinMemcpyN ( other.elementU_.array() , maximumU_, elementU_.array() ); #if COIN_ONE_ETA_COPY if (convertUOther) { #endif const int * indexColumnUOther = other.indexColumnU_.array(); CoinBigIndex * convertU = convertRowToColumnU_.array(); int * indexColumnU = indexColumnU_.array(); const CoinBigIndex * startRowU = startRowU_.array(); const int * numberInRow = numberInRow_.array(); for (int iRow = 0; iRow < numberRowsExtra_; iRow++ ) { //row CoinBigIndex start = startRowU[iRow]; int numberIn = numberInRow[iRow]; CoinMemcpyN ( indexColumnUOther + start, numberIn, indexColumnU + start ); CoinMemcpyN (convertUOther + start , numberIn, convertU + start ); } #if COIN_ONE_ETA_COPY } #endif const int * indexRowUOther = other.indexRowU_.array(); int * indexRowU = indexRowU_.array(); for (int iRow = 0; iRow < numberRowsExtra_; iRow++ ) { //column CoinBigIndex start = startColumnU[iRow]; int numberIn = numberInColumn[iRow]; CoinMemcpyN ( indexRowUOther + start, numberIn, indexRowU + start ); } // L is contiguous if (numberRows_) CoinMemcpyN ( other.startColumnL_.array(), numberRows_ + 1, startColumnL_.array() ); CoinMemcpyN ( other.elementL_.array(), lengthL_, elementL_.array() ); CoinMemcpyN ( other.indexRowL_.array(), lengthL_, indexRowL_.array() ); if (other.sparseThreshold_) { goSparse(); } } // See if worth going sparse void CoinFactorization::checkSparse() { // See if worth going sparse and when if (numberFtranCounts_>100) { ftranCountInput_= CoinMax(ftranCountInput_,1.0); ftranAverageAfterL_ = CoinMax(ftranCountAfterL_/ftranCountInput_,1.0); ftranAverageAfterR_ = CoinMax(ftranCountAfterR_/ftranCountAfterL_,1.0); ftranAverageAfterU_ = CoinMax(ftranCountAfterU_/ftranCountAfterR_,1.0); if (btranCountInput_&&btranCountAfterU_&&btranCountAfterR_) { btranAverageAfterU_ = CoinMax(btranCountAfterU_/btranCountInput_,1.0); btranAverageAfterR_ = CoinMax(btranCountAfterR_/btranCountAfterU_,1.0); btranAverageAfterL_ = CoinMax(btranCountAfterL_/btranCountAfterR_,1.0); } else { // we have not done any useful btrans (values pass?) btranAverageAfterU_ = 1.0; btranAverageAfterR_ = 1.0; btranAverageAfterL_ = 1.0; } } // scale back ftranCountInput_ *= 0.8; ftranCountAfterL_ *= 0.8; ftranCountAfterR_ *= 0.8; ftranCountAfterU_ *= 0.8; btranCountInput_ *= 0.8; btranCountAfterU_ *= 0.8; btranCountAfterR_ *= 0.8; btranCountAfterL_ *= 0.8; } // Condition number - product of pivots after factorization double CoinFactorization::conditionNumber() const { double condition = 1.0; const CoinFactorizationDouble * pivotRegion = pivotRegion_.array(); for (int i=0;i=0&&value<3) logLevel_=value; } void CoinBaseModel::setProblemName (const char *name) { if (name) problemName_ = name ; else problemName_ = ""; } //############################################################################# // Constructors / Destructor / Assignment //############################################################################# //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- CoinModel::CoinModel () : CoinBaseModel(), maximumRows_(0), maximumColumns_(0), numberElements_(0), maximumElements_(0), numberQuadraticElements_(0), maximumQuadraticElements_(0), rowLower_(NULL), rowUpper_(NULL), rowType_(NULL), objective_(NULL), columnLower_(NULL), columnUpper_(NULL), integerType_(NULL), columnType_(NULL), start_(NULL), elements_(NULL), packedMatrix_(NULL), quadraticElements_(NULL), sortIndices_(NULL), sortElements_(NULL), sortSize_(0), sizeAssociated_(0), associated_(NULL), numberSOS_(0), startSOS_(NULL), memberSOS_(NULL), typeSOS_(NULL), prioritySOS_(NULL), referenceSOS_(NULL), priority_(NULL), cut_(NULL), moreInfo_(NULL), type_(-1), noNames_(false), links_(0) { } /* Constructor with sizes. */ CoinModel::CoinModel(int firstRows, int firstColumns, int firstElements,bool noNames) : CoinBaseModel(), maximumRows_(0), maximumColumns_(0), numberElements_(0), maximumElements_(0), numberQuadraticElements_(0), maximumQuadraticElements_(0), rowLower_(NULL), rowUpper_(NULL), rowType_(NULL), objective_(NULL), columnLower_(NULL), columnUpper_(NULL), integerType_(NULL), columnType_(NULL), start_(NULL), elements_(NULL), packedMatrix_(NULL), quadraticElements_(NULL), sortIndices_(NULL), sortElements_(NULL), sortSize_(0), sizeAssociated_(0), associated_(NULL), numberSOS_(0), startSOS_(NULL), memberSOS_(NULL), typeSOS_(NULL), prioritySOS_(NULL), referenceSOS_(NULL), priority_(NULL), cut_(NULL), moreInfo_(NULL), type_(-1), noNames_(noNames), links_(0) { if (!firstRows) { if (firstColumns) { type_=1; resize(0,firstColumns,firstElements); } } else { type_=0; resize(firstRows,0,firstElements); if (firstColumns) { // mixed - do linked lists for columns //createList(2); } } } /* Read a problem in MPS or GAMS format from the given filename. */ CoinModel::CoinModel(const char *fileName, int allowStrings) : CoinBaseModel(), maximumRows_(0), maximumColumns_(0), numberElements_(0), maximumElements_(0), numberQuadraticElements_(0), maximumQuadraticElements_(0), rowLower_(NULL), rowUpper_(NULL), rowType_(NULL), objective_(NULL), columnLower_(NULL), columnUpper_(NULL), integerType_(NULL), columnType_(NULL), start_(NULL), elements_(NULL), packedMatrix_(NULL), quadraticElements_(NULL), sortIndices_(NULL), sortElements_(NULL), sortSize_(0), sizeAssociated_(0), associated_(NULL), numberSOS_(0), startSOS_(NULL), memberSOS_(NULL), typeSOS_(NULL), prioritySOS_(NULL), referenceSOS_(NULL), priority_(NULL), cut_(NULL), moreInfo_(NULL), type_(-1), noNames_(false), links_(0) { rowBlockName_ = "row_master"; columnBlockName_ = "column_master"; int status=0; if (!strcmp(fileName,"-")||!strcmp(fileName,"stdin")) { // stdin } else { std::string name=fileName; bool readable = fileCoinReadable(name); if (!readable) { std::cerr<<"Unable to open file " <whichSection ( ) == COIN_QUAD_SECTION ; // do names int iRow; for (iRow=0;iRow=0&&iRow<=numberRows_+2); assert (iColumn>=0&&iColumn<=numberColumns_); const char * pos = strchr(line,','); assert (pos); pos = strchr(pos+1,','); assert (pos); pos++; if (iRowwhichSection ( ) == COIN_QUAD_SECTION ) { int * start=NULL; int * column = NULL; double * element = NULL; status=m.readQuadraticMps(NULL,start,column,element,2); if (!status) { // If strings allowed 13 then just for Hans convert to constraint int objRow=-1; if (allowStrings==13) { int objColumn=numberColumns_; objRow=numberRows_; // leave linear part in objective addColumn(0,NULL,NULL,-COIN_DBL_MAX,COIN_DBL_MAX,1.0,"obj"); double minusOne=-1.0; addRow(1,&objColumn,&minusOne,-COIN_DBL_MAX,0.0,"objrow"); } if (!ifStrings&&!numberIntegers) { // no strings - add to quadratic (not done yet) for (int iColumn=0;iColumniColumn) { printf("above diag %d %d %g\n",iColumn,jColumn,value); } else if (jColumniColumn) { //printf("above diag %d %d %g\n",iColumn,jColumn,value); } else if (jColumngetNumElements()), maximumElements_(matrix->getNumElements()), numberQuadraticElements_(0), maximumQuadraticElements_(0), rowType_(NULL), integerType_(NULL), columnType_(NULL), start_(NULL), elements_(NULL), packedMatrix_(NULL), quadraticElements_(NULL), sortIndices_(NULL), sortElements_(NULL), sortSize_(0), sizeAssociated_(0), associated_(NULL), numberSOS_(0), startSOS_(NULL), memberSOS_(NULL), typeSOS_(NULL), prioritySOS_(NULL), referenceSOS_(NULL), priority_(NULL), cut_(NULL), moreInfo_(NULL), type_(-1), noNames_(false), links_(0) { numberRows_ = numberRows; numberColumns_ = numberColumns; assert (numberRows_>=matrix->getNumRows()); assert (numberColumns_>=matrix->getNumCols()); type_ = 3; packedMatrix_ = new CoinPackedMatrix(*matrix); rowLower_ = CoinCopyOfArray(rowLower,numberRows_); rowUpper_ = CoinCopyOfArray(rowUpper,numberRows_); objective_ = CoinCopyOfArray(objective,numberColumns_); columnLower_ = CoinCopyOfArray(columnLower,numberColumns_); columnUpper_ = CoinCopyOfArray(columnUpper,numberColumns_); } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- CoinModel::CoinModel (const CoinModel & rhs) : CoinBaseModel(rhs), maximumRows_(rhs.maximumRows_), maximumColumns_(rhs.maximumColumns_), numberElements_(rhs.numberElements_), maximumElements_(rhs.maximumElements_), numberQuadraticElements_(rhs.numberQuadraticElements_), maximumQuadraticElements_(rhs.maximumQuadraticElements_), rowName_(rhs.rowName_), columnName_(rhs.columnName_), string_(rhs.string_), hashElements_(rhs.hashElements_), rowList_(rhs.rowList_), columnList_(rhs.columnList_), hashQuadraticElements_(rhs.hashQuadraticElements_), sortSize_(rhs.sortSize_), quadraticRowList_(rhs.quadraticRowList_), quadraticColumnList_(rhs.quadraticColumnList_), sizeAssociated_(rhs.sizeAssociated_), numberSOS_(rhs.numberSOS_), type_(rhs.type_), noNames_(rhs.noNames_), links_(rhs.links_) { rowLower_ = CoinCopyOfArray(rhs.rowLower_,maximumRows_); rowUpper_ = CoinCopyOfArray(rhs.rowUpper_,maximumRows_); rowType_ = CoinCopyOfArray(rhs.rowType_,maximumRows_); objective_ = CoinCopyOfArray(rhs.objective_,maximumColumns_); columnLower_ = CoinCopyOfArray(rhs.columnLower_,maximumColumns_); columnUpper_ = CoinCopyOfArray(rhs.columnUpper_,maximumColumns_); integerType_ = CoinCopyOfArray(rhs.integerType_,maximumColumns_); columnType_ = CoinCopyOfArray(rhs.columnType_,maximumColumns_); sortIndices_ = CoinCopyOfArray(rhs.sortIndices_,sortSize_); sortElements_ = CoinCopyOfArray(rhs.sortElements_,sortSize_); associated_ = CoinCopyOfArray(rhs.associated_,sizeAssociated_); priority_ = CoinCopyOfArray(rhs.priority_,maximumColumns_); cut_ = CoinCopyOfArray(rhs.cut_,maximumRows_); moreInfo_ = rhs.moreInfo_; if (rhs.packedMatrix_) packedMatrix_ = new CoinPackedMatrix(*rhs.packedMatrix_); else packedMatrix_ = NULL; if (numberSOS_) { startSOS_ = CoinCopyOfArray(rhs.startSOS_,numberSOS_+1); int numberMembers = startSOS_[numberSOS_]; memberSOS_ = CoinCopyOfArray(rhs.memberSOS_,numberMembers); typeSOS_ = CoinCopyOfArray(rhs.typeSOS_,numberSOS_); prioritySOS_ = CoinCopyOfArray(rhs.prioritySOS_,numberSOS_); referenceSOS_ = CoinCopyOfArray(rhs.referenceSOS_,numberMembers); } else { startSOS_ = NULL; memberSOS_ = NULL; typeSOS_ = NULL; prioritySOS_ = NULL; referenceSOS_ = NULL; } if (type_==0) { start_ = CoinCopyOfArray(rhs.start_,maximumRows_+1); } else if (type_==1) { start_ = CoinCopyOfArray(rhs.start_,maximumColumns_+1); } else { start_=NULL; } elements_ = CoinCopyOfArray(rhs.elements_,maximumElements_); quadraticElements_ = CoinCopyOfArray(rhs.quadraticElements_,maximumQuadraticElements_); } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- CoinModel::~CoinModel () { delete [] rowLower_; delete [] rowUpper_; delete [] rowType_; delete [] objective_; delete [] columnLower_; delete [] columnUpper_; delete [] integerType_; delete [] columnType_; delete [] start_; delete [] elements_; delete [] quadraticElements_; delete [] sortIndices_; delete [] sortElements_; delete [] associated_; delete [] startSOS_; delete [] memberSOS_; delete [] typeSOS_; delete [] prioritySOS_; delete [] referenceSOS_; delete [] priority_; delete [] cut_; delete packedMatrix_; } // Clone CoinBaseModel * CoinModel::clone() const { return new CoinModel(*this); } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- CoinModel & CoinModel::operator=(const CoinModel& rhs) { if (this != &rhs) { CoinBaseModel::operator=(rhs); delete [] rowLower_; delete [] rowUpper_; delete [] rowType_; delete [] objective_; delete [] columnLower_; delete [] columnUpper_; delete [] integerType_; delete [] columnType_; delete [] start_; delete [] elements_; delete [] quadraticElements_; delete [] sortIndices_; delete [] sortElements_; delete [] associated_; delete [] startSOS_; delete [] memberSOS_; delete [] typeSOS_; delete [] prioritySOS_; delete [] referenceSOS_; delete [] priority_; delete [] cut_; delete packedMatrix_; maximumRows_ = rhs.maximumRows_; maximumColumns_ = rhs.maximumColumns_; numberElements_ = rhs.numberElements_; maximumElements_ = rhs.maximumElements_; numberQuadraticElements_ = rhs.numberQuadraticElements_; maximumQuadraticElements_ = rhs.maximumQuadraticElements_; sortSize_ = rhs.sortSize_; rowName_ = rhs.rowName_; columnName_ = rhs.columnName_; string_ = rhs.string_; hashElements_=rhs.hashElements_; hashQuadraticElements_=rhs.hashQuadraticElements_; rowList_ = rhs.rowList_; quadraticColumnList_ = rhs.quadraticColumnList_; quadraticRowList_ = rhs.quadraticRowList_; columnList_ = rhs.columnList_; sizeAssociated_= rhs.sizeAssociated_; numberSOS_ = rhs.numberSOS_; type_ = rhs.type_; noNames_ = rhs.noNames_; links_ = rhs.links_; rowLower_ = CoinCopyOfArray(rhs.rowLower_,maximumRows_); rowUpper_ = CoinCopyOfArray(rhs.rowUpper_,maximumRows_); rowType_ = CoinCopyOfArray(rhs.rowType_,maximumRows_); objective_ = CoinCopyOfArray(rhs.objective_,maximumColumns_); columnLower_ = CoinCopyOfArray(rhs.columnLower_,maximumColumns_); columnUpper_ = CoinCopyOfArray(rhs.columnUpper_,maximumColumns_); integerType_ = CoinCopyOfArray(rhs.integerType_,maximumColumns_); columnType_ = CoinCopyOfArray(rhs.columnType_,maximumColumns_); priority_ = CoinCopyOfArray(rhs.priority_,maximumColumns_); cut_ = CoinCopyOfArray(rhs.cut_,maximumRows_); moreInfo_ = rhs.moreInfo_; if (rhs.packedMatrix_) packedMatrix_ = new CoinPackedMatrix(*rhs.packedMatrix_); else packedMatrix_ = NULL; if (numberSOS_) { startSOS_ = CoinCopyOfArray(rhs.startSOS_,numberSOS_+1); int numberMembers = startSOS_[numberSOS_]; memberSOS_ = CoinCopyOfArray(rhs.memberSOS_,numberMembers); typeSOS_ = CoinCopyOfArray(rhs.typeSOS_,numberSOS_); prioritySOS_ = CoinCopyOfArray(rhs.prioritySOS_,numberSOS_); referenceSOS_ = CoinCopyOfArray(rhs.referenceSOS_,numberMembers); } else { startSOS_ = NULL; memberSOS_ = NULL; typeSOS_ = NULL; prioritySOS_ = NULL; referenceSOS_ = NULL; } if (type_==0) { start_ = CoinCopyOfArray(rhs.start_,maximumRows_+1); } else if (type_==1) { start_ = CoinCopyOfArray(rhs.start_,maximumColumns_+1); } else { start_=NULL; } elements_ = CoinCopyOfArray(rhs.elements_,maximumElements_); quadraticElements_ = CoinCopyOfArray(rhs.quadraticElements_,maximumQuadraticElements_); sortIndices_ = CoinCopyOfArray(rhs.sortIndices_,sortSize_); sortElements_ = CoinCopyOfArray(rhs.sortElements_,sortSize_); associated_ = CoinCopyOfArray(rhs.associated_,sizeAssociated_); } return *this; } /* add a row - numberInRow may be zero */ void CoinModel::addRow(int numberInRow, const int * columns, const double * elements, double rowLower, double rowUpper, const char * name) { if (type_==-1) { // initial type_=0; resize(100,0,1000); } else if (type_==1) { // mixed - do linked lists for rows createList(1); } else if (type_==3) { badType(); } int newColumn=-1; if (numberInRow>0) { // Move and sort if (numberInRow>sortSize_) { delete [] sortIndices_; delete [] sortElements_; sortSize_ = numberInRow+100; sortIndices_ = new int [sortSize_]; sortElements_ = new double [sortSize_]; } bool sorted = true; int last=-1; int i; for (i=0;imaximumElements_) { newElement = (3*(numberElements_+numberInRow)/2) + 1000; if (numberRows_*10>maximumRows_*9) newRow = (maximumRows_*3)/2+100; } if (numberRows_==maximumRows_) newRow = (maximumRows_*3)/2+100; if (newRow||newColumn>=maximumColumns_||newElement) { if (newColumn(numberRows_); //elements_[put].string=0; elements_[put].column=sortIndices_[i]; elements_[put].value=sortElements_[i]; if (doHash) hashElements_.addHash(put,numberRows_,sortIndices_[i],elements_); put++; } start_[numberRows_+1]=put; numberElements_+=numberInRow; } else { if (numberInRow) { // must update at least one link assert (links_); if (links_==1||links_==3) { int first = rowList_.addEasy(numberRows_,numberInRow,sortIndices_,sortElements_,elements_, hashElements_); if (links_==3) columnList_.addHard(first,elements_,rowList_.firstFree(),rowList_.lastFree(), rowList_.next()); numberElements_=CoinMax(numberElements_,rowList_.numberElements()); if (links_==3) assert (columnList_.numberElements()==rowList_.numberElements()); } else if (links_==2) { columnList_.addHard(numberRows_,numberInRow,sortIndices_,sortElements_,elements_, hashElements_); numberElements_=CoinMax(numberElements_,columnList_.numberElements()); } } numberElements_=CoinMax(numberElements_,hashElements_.numberItems()); } numberRows_++; } // add a column - numberInColumn may be zero */ void CoinModel::addColumn(int numberInColumn, const int * rows, const double * elements, double columnLower, double columnUpper, double objectiveValue, const char * name, bool isInteger) { if (type_==-1) { // initial type_=1; resize(0,100,1000); } else if (type_==0) { // mixed - do linked lists for columns createList(2); } else if (type_==3) { badType(); } int newRow=-1; if (numberInColumn>0) { // Move and sort if (numberInColumn>sortSize_) { delete [] sortIndices_; delete [] sortElements_; sortSize_ = numberInColumn+100; sortIndices_ = new int [sortSize_]; sortElements_ = new double [sortSize_]; } bool sorted = true; int last=-1; int i; for (i=0;imaximumElements_) { newElement = (3*(numberElements_+numberInColumn)/2) + 1000; if (numberColumns_*10>maximumColumns_*9) newColumn = (maximumColumns_*3)/2+100; } if (numberColumns_==maximumColumns_) newColumn = (maximumColumns_*3)/2+100; if (newColumn||newRow>=maximumRows_||newElement) { if (newRow(sortIndices_[i]); elements_[put].value=sortElements_[i]; if (doHash) hashElements_.addHash(put,sortIndices_[i],numberColumns_,elements_); put++; } start_[numberColumns_+1]=put; numberElements_+=numberInColumn; } else { if (numberInColumn) { // must update at least one link assert (links_); if (links_==2||links_==3) { int first = columnList_.addEasy(numberColumns_,numberInColumn,sortIndices_,sortElements_,elements_, hashElements_); if (links_==3) rowList_.addHard(first,elements_,columnList_.firstFree(),columnList_.lastFree(), columnList_.next()); numberElements_=CoinMax(numberElements_,columnList_.numberElements()); if (links_==3) assert (columnList_.numberElements()==rowList_.numberElements()); } else if (links_==1) { rowList_.addHard(numberColumns_,numberInColumn,sortIndices_,sortElements_,elements_, hashElements_); numberElements_=CoinMax(numberElements_,rowList_.numberElements()); } } } numberColumns_++; } // Sets value for row i and column j void CoinModel::setElement(int i,int j,double value) { if (type_==-1) { // initial type_=0; resize(100,100,1000); createList(2); } else if (type_==3) { badType(); } else if (!links_) { if (type_==0||type_==2) { createList(1); } else if(type_==1) { createList(2); } } if (!hashElements_.maximumItems()) { hashElements_.resize(maximumElements_,elements_); } int position = hashElements_.hash(i,j,elements_); if (position>=0) { elements_[position].value=value; setStringInTriple(elements_[position],false); } else { int newColumn=0; if (j>=maximumColumns_) { newColumn = j+1; } int newRow=0; if (i>=maximumRows_) { newRow = i+1; } int newElement=0; if (numberElements_==maximumElements_) { newElement = (3*numberElements_/2) + 1000; } if (newRow||newColumn||newElement) { if (newColumn) newColumn = (3*newColumn)/2+100; if (newRow) newRow = (3*newRow)/2+100; resize(newRow,newColumn,newElement); } // If columns extended - take care of that fillColumns(j,false); // If rows extended - take care of that fillRows(i,false); // treat as addRow unless only columnList_ exists if ((links_&1)!=0) { int first = rowList_.addEasy(i,1,&j,&value,elements_,hashElements_); if (links_==3) columnList_.addHard(first,elements_,rowList_.firstFree(),rowList_.lastFree(), rowList_.next()); numberElements_=CoinMax(numberElements_,rowList_.numberElements()); if (links_==3) assert (columnList_.numberElements()==rowList_.numberElements()); } else if (links_==2) { columnList_.addHard(i,1,&j,&value,elements_,hashElements_); numberElements_=CoinMax(numberElements_,columnList_.numberElements()); } numberRows_=CoinMax(numberRows_,i+1);; numberColumns_=CoinMax(numberColumns_,j+1);; } } // Sets quadratic value for column i and j void CoinModel::setQuadraticElement(int ,int ,double ) { printf("not written yet\n"); abort(); return; } // Sets value for row i and column j as string void CoinModel::setElement(int i,int j,const char * value) { double dummyValue=1.0; if (type_==-1) { // initial type_=0; resize(100,100,1000); createList(2); } else if (type_==3) { badType(); } else if (!links_) { if (type_==0||type_==2) { createList(1); } else if(type_==1) { createList(2); } } if (!hashElements_.maximumItems()) { // set up number of items hashElements_.setNumberItems(numberElements_); hashElements_.resize(maximumElements_,elements_); } int position = hashElements_.hash(i,j,elements_); if (position>=0) { int iValue = addString(value); elements_[position].value=iValue; setStringInTriple(elements_[position],true); } else { int newColumn=0; if (j>=maximumColumns_) { newColumn = j+1; } int newRow=0; if (i>=maximumRows_) { newRow = i+1; } int newElement=0; if (numberElements_==maximumElements_) { newElement = (3*numberElements_/2) + 1000; } if (newRow||newColumn||newElement) { if (newColumn) newColumn = (3*newColumn)/2+100; if (newRow) newRow = (3*newRow)/2+100; resize(newRow,newColumn,newElement); } // If columns extended - take care of that fillColumns(j,false); // If rows extended - take care of that fillRows(i,false); // treat as addRow unless only columnList_ exists if ((links_&1)!=0) { int first = rowList_.addEasy(i,1,&j,&dummyValue,elements_,hashElements_); if (links_==3) columnList_.addHard(first,elements_,rowList_.firstFree(),rowList_.lastFree(), rowList_.next()); numberElements_=CoinMax(numberElements_,rowList_.numberElements()); if (links_==3) assert (columnList_.numberElements()==rowList_.numberElements()); } else if (links_==2) { columnList_.addHard(i,1,&j,&dummyValue,elements_,hashElements_); numberElements_=CoinMax(numberElements_,columnList_.numberElements()); } numberRows_=CoinMax(numberRows_,i+1);; numberColumns_=CoinMax(numberColumns_,j+1);; int position = hashElements_.hash(i,j,elements_); assert (position>=0); int iValue = addString(value); elements_[position].value=iValue; setStringInTriple(elements_[position],true); } } // Associates a string with a value. Returns string id (or -1 if does not exist) int CoinModel::associateElement(const char * stringValue, double value) { int position = string_.hash(stringValue); if (position<0) { // not there -add position = addString(stringValue); assert (position==string_.numberItems()-1); } if (sizeAssociated_<=position) { int newSize = (3*position)/2+100; double * temp = new double[newSize]; CoinMemcpyN(associated_,sizeAssociated_,temp); CoinFillN(temp+sizeAssociated_,newSize-sizeAssociated_,unsetValue()); delete [] associated_; associated_ = temp; sizeAssociated_=newSize; } associated_[position]=value; return position; } /* Sets rowLower (if row does not exist then all rows up to this are defined with default values and no elements) */ void CoinModel::setRowLower(int whichRow,double rowLower) { assert (whichRow>=0); // make sure enough room and fill fillRows(whichRow,true); rowLower_[whichRow]=rowLower; rowType_[whichRow] &= ~1; } /* Sets rowUpper (if row does not exist then all rows up to this are defined with default values and no elements) */ void CoinModel::setRowUpper(int whichRow,double rowUpper) { assert (whichRow>=0); // make sure enough room and fill fillRows(whichRow,true); rowUpper_[whichRow]=rowUpper; rowType_[whichRow] &= ~2; } /* Sets rowLower and rowUpper (if row does not exist then all rows up to this are defined with default values and no elements) */ void CoinModel::setRowBounds(int whichRow,double rowLower,double rowUpper) { assert (whichRow>=0); // make sure enough room and fill fillRows(whichRow,true); rowLower_[whichRow]=rowLower; rowUpper_[whichRow]=rowUpper; rowType_[whichRow] &= ~3; } /* Sets name (if row does not exist then all rows up to this are defined with default values and no elements) */ void CoinModel::setRowName(int whichRow,const char * rowName) { assert (whichRow>=0); // make sure enough room and fill fillRows(whichRow,true); assert (!noNames_) ; const char * oldName = rowName_.name(whichRow); if (oldName) rowName_.deleteHash(whichRow); if (rowName) rowName_.addHash(whichRow,rowName); } /* Sets columnLower (if column does not exist then all columns up to this are defined with default values and no elements) */ void CoinModel::setColumnLower(int whichColumn,double columnLower) { assert (whichColumn>=0); // make sure enough room and fill fillColumns(whichColumn,true); columnLower_[whichColumn]=columnLower; columnType_[whichColumn] &= ~1; } /* Sets columnUpper (if column does not exist then all columns up to this are defined with default values and no elements) */ void CoinModel::setColumnUpper(int whichColumn,double columnUpper) { assert (whichColumn>=0); // make sure enough room and fill fillColumns(whichColumn,true); columnUpper_[whichColumn]=columnUpper; columnType_[whichColumn] &= ~2; } /* Sets columnLower and columnUpper (if column does not exist then all columns up to this are defined with default values and no elements) */ void CoinModel::setColumnBounds(int whichColumn,double columnLower,double columnUpper) { assert (whichColumn>=0); // make sure enough room and fill fillColumns(whichColumn,true); columnLower_[whichColumn]=columnLower; columnUpper_[whichColumn]=columnUpper; columnType_[whichColumn] &= ~3; } /* Sets columnObjective (if column does not exist then all columns up to this are defined with default values and no elements) */ void CoinModel::setColumnObjective(int whichColumn,double columnObjective) { assert (whichColumn>=0); // make sure enough room and fill fillColumns(whichColumn,true); objective_[whichColumn]=columnObjective; columnType_[whichColumn] &= ~4; } /* Sets name (if column does not exist then all columns up to this are defined with default values and no elements) */ void CoinModel::setColumnName(int whichColumn,const char * columnName) { assert (whichColumn>=0); // make sure enough room and fill fillColumns(whichColumn,true); const char * oldName = columnName_.name(whichColumn); assert (!noNames_) ; if (oldName) columnName_.deleteHash(whichColumn); if (columnName) columnName_.addHash(whichColumn,columnName); } /* Sets integer (if column does not exist then all columns up to this are defined with default values and no elements) */ void CoinModel::setColumnIsInteger(int whichColumn,bool columnIsInteger) { assert (whichColumn>=0); // make sure enough room and fill fillColumns(whichColumn,true); integerType_[whichColumn]=(columnIsInteger) ? 1 : 0; columnType_[whichColumn] &= ~8; } // Adds one string, returns index int CoinModel::addString(const char * string) { int position = string_.hash(string); if (position<0) { position = string_.numberItems(); string_.addHash(position,string); } return position; } /* Sets rowLower (if row does not exist then all rows up to this are defined with default values and no elements) */ void CoinModel::setRowLower(int whichRow,const char * rowLower) { assert (whichRow>=0); // make sure enough room and fill fillRows(whichRow,true); if (rowLower) { int value = addString(rowLower); rowLower_[whichRow]=value; rowType_[whichRow] |= 1; } else { rowLower_[whichRow]=-COIN_DBL_MAX; } } /* Sets rowUpper (if row does not exist then all rows up to this are defined with default values and no elements) */ void CoinModel::setRowUpper(int whichRow,const char * rowUpper) { assert (whichRow>=0); // make sure enough room and fill fillRows(whichRow,true); if (rowUpper) { int value = addString(rowUpper); rowUpper_[whichRow]=value; rowType_[whichRow] |= 2; } else { rowUpper_[whichRow]=COIN_DBL_MAX; } } /* Sets columnLower (if column does not exist then all columns up to this are defined with default values and no elements) */ void CoinModel::setColumnLower(int whichColumn,const char * columnLower) { assert (whichColumn>=0); // make sure enough room and fill fillColumns(whichColumn,true); if (columnLower) { int value = addString(columnLower); columnLower_[whichColumn]=value; columnType_[whichColumn] |= 1; } else { columnLower_[whichColumn]=0.0; } } /* Sets columnUpper (if column does not exist then all columns up to this are defined with default values and no elements) */ void CoinModel::setColumnUpper(int whichColumn,const char * columnUpper) { assert (whichColumn>=0); // make sure enough room and fill fillColumns(whichColumn,true); if (columnUpper) { int value = addString(columnUpper); columnUpper_[whichColumn]=value; columnType_[whichColumn] |= 2; } else { columnUpper_[whichColumn]=COIN_DBL_MAX; } } /* Sets columnObjective (if column does not exist then all columns up to this are defined with default values and no elements) */ void CoinModel::setColumnObjective(int whichColumn,const char * columnObjective) { assert (whichColumn>=0); // make sure enough room and fill fillColumns(whichColumn,true); if (columnObjective) { int value = addString(columnObjective); objective_[whichColumn]=value; columnType_[whichColumn] |= 4; } else { objective_[whichColumn]=0.0; } } /* Sets integer (if column does not exist then all columns up to this are defined with default values and no elements) */ void CoinModel::setColumnIsInteger(int whichColumn,const char * columnIsInteger) { assert (whichColumn>=0); // make sure enough room and fill fillColumns(whichColumn,true); if (columnIsInteger) { int value = addString(columnIsInteger); integerType_[whichColumn]=value; columnType_[whichColumn] |= 8; } else { integerType_[whichColumn]=0; } } //static const char * minusInfinity="-infinity"; //static const char * plusInfinity="+infinity"; //static const char * zero="0.0"; static const char * numeric="Numeric"; /* Gets rowLower (if row does not exist then -COIN_DBL_MAX) */ const char * CoinModel::getRowLowerAsString(int whichRow) const { assert (whichRow>=0); if (whichRow (rowLower_[whichRow]); return string_.name(position); } else { return numeric; } } else { return numeric; } } /* Gets rowUpper (if row does not exist then +COIN_DBL_MAX) */ const char * CoinModel::getRowUpperAsString(int whichRow) const { assert (whichRow>=0); if (whichRow (rowUpper_[whichRow]); return string_.name(position); } else { return numeric; } } else { return numeric; } } /* Gets columnLower (if column does not exist then 0.0) */ const char * CoinModel::getColumnLowerAsString(int whichColumn) const { assert (whichColumn>=0); if (whichColumn (columnLower_[whichColumn]); return string_.name(position); } else { return numeric; } } else { return numeric; } } /* Gets columnUpper (if column does not exist then COIN_DBL_MAX) */ const char * CoinModel::getColumnUpperAsString(int whichColumn) const { assert (whichColumn>=0); if (whichColumn (columnUpper_[whichColumn]); return string_.name(position); } else { return numeric; } } else { return numeric; } } /* Gets columnObjective (if column does not exist then 0.0) */ const char * CoinModel::getColumnObjectiveAsString(int whichColumn) const { assert (whichColumn>=0); if (whichColumn (objective_[whichColumn]); return string_.name(position); } else { return numeric; } } else { return numeric; } } /* Gets if integer (if column does not exist then false) */ const char * CoinModel::getColumnIsIntegerAsString(int whichColumn) const { assert (whichColumn>=0); if (whichColumn=0); if (whichRow=0); if (whichColumn=0) deleteThisElement(row,column,iPos); return iPos; } // Takes element out of matrix when position known void #ifndef NDEBUG CoinModel::deleteThisElement(int row, int column,int position) #else CoinModel::deleteThisElement(int , int ,int position) #endif { assert (row(elements_[position].column)); if ((links_&1)==0) { createList(1); } assert (links_); // row links guaranteed to exist rowList_.deleteRowOne(position,elements_,hashElements_); // Just need to set first and last and take out if (links_==3) columnList_.updateDeletedOne(position,elements_); elements_[position].column=-1; elements_[position].value=0.0; } /* Packs down all rows i.e. removes empty rows permanently. Empty rows have no elements and feasible bounds. returns number of rows deleted. */ int CoinModel::packRows() { if (type_==3) badType(); int * newRow = new int[numberRows_]; memset(newRow,0,numberRows_*sizeof(int)); int iRow; int n=0; for (iRow=0;iRow=0) { iRow = rowInTriple(elements_[i]); assert (iRow>=0&&iRow=0) { elements_[n]=elements_[i]; setRowInTriple(elements_[n],newRow[rowInTriple(elements_[i])]); n++; } } numberElements_=n; // now redo if (doRowNames) { rowName_.setNumberItems(numberRows_); rowName_.resize(rowName_.maximumItems(),true); } if (hashElements_.numberItems()) { hashElements_.setNumberItems(numberElements_); hashElements_.resize(hashElements_.maximumItems(),elements_,true); } if (start_) { int last=-1; if (type_==0) { for (i=0;i=last); if (now>last) { start_[last+1]=numberElements_; for (int j=last+1;j=last); if (now>last) { start_[last+1]=numberElements_; for (int j=last+1;j=0) { iColumn = static_cast (elements_[i].column); assert (iColumn>=0&&iColumn=0) { elements_[n]=elements_[i]; elements_[n].column = newColumn[elements_[i].column]; n++; } } numberElements_=n; // now redo if (doColumnNames) { columnName_.setNumberItems(numberColumns_); columnName_.resize(columnName_.maximumItems(),true); } if (hashElements_.numberItems()) { hashElements_.setNumberItems(numberElements_); hashElements_.resize(hashElements_.maximumItems(),elements_,true); } if (start_) { int last=-1; if (type_==0) { for (i=0;i=last); if (now>last) { start_[last+1]=numberElements_; for (int j=last+1;j=last); if (now>last) { start_[last+1]=numberElements_; for (int j=last+1;j=0) { length[column]++; numberElements++; } } int numberErrors=0; CoinBigIndex * start = new int[numberColumns_+1]; int * row = new int[numberElements]; double * element = new double[numberElements]; start[0]=0; for (i=0;i=0) { double value = elements_[i].value; if (stringInTriple(elements_[i])) { int position = static_cast (value); assert (position=0) { double value = elements_[i].value; if (stringInTriple(elements_[i])) { int position = static_cast (value); assert (position=0) startPositive[numberColumns_]=numberElements; return numberErrors; } /* Creates +-1 matrix given startPositive and startNegative counts for +-1 matrix. */ void CoinModel::createPlusMinusOne(CoinBigIndex * startPositive, CoinBigIndex * startNegative, int * indices, const double * associated) { if (type_==3) badType(); CoinBigIndex size=0; int iColumn; for (iColumn=0;iColumn=0) { double value = elements_[i].value; if (stringInTriple(elements_[i])) { int position = static_cast (value); assert (position=0;iColumn--) { startPositive[iColumn+1]=startNegative[iColumn]; startNegative[iColumn]=startPositive[iColumn]; } startPositive[0]=0; for (iColumn=0;iColumn (rowLower[iRow]); assert (position (rowUpper[iRow]); assert (position (columnLower[iColumn]); assert (position (columnUpper[iColumn]); assert (position (objective[iColumn]); assert (position (value); } } } return numberErrors; } /* Write the problem in MPS format to a file with the given filename. */ int CoinModel::writeMps(const char *filename, int compression, int formatType , int numberAcross , bool keepStrings) { int numberErrors = 0; // Set arrays for normal use double * rowLower = rowLower_; double * rowUpper = rowUpper_; double * columnLower = columnLower_; double * columnUpper = columnUpper_; double * objective = objective_; int * integerType = integerType_; double * associated = associated_; // If strings then do copies if (string_.numberItems()) { numberErrors = createArrays(rowLower, rowUpper, columnLower, columnUpper, objective, integerType,associated); } CoinPackedMatrix matrix; if (type_!=3) { createPackedMatrix(matrix,associated); } else { matrix = *packedMatrix_; } char* integrality = new char[numberColumns_]; bool hasInteger = false; for (int i = 0; i < numberColumns_; i++) { if (integerType[i]) { integrality[i] = 1; hasInteger = true; } else { integrality[i] = 0; } } CoinMpsIO writer; writer.setInfinity(COIN_DBL_MAX); const char *const * rowNames=NULL; if (rowName_.numberItems()) rowNames=rowName_.names(); const char * const * columnNames=NULL; if (columnName_.numberItems()) columnNames=columnName_.names(); writer.setMpsData(matrix, COIN_DBL_MAX, columnLower, columnUpper, objective, hasInteger ? integrality : 0, rowLower, rowUpper, columnNames,rowNames); delete[] integrality; if (rowLower!=rowLower_) { delete [] rowLower; delete [] rowUpper; delete [] columnLower; delete [] columnUpper; delete [] objective; delete [] integerType; delete [] associated; if (numberErrors&&logLevel_>0&&!keepStrings) printf("%d string elements had no values associated with them\n",numberErrors); } writer.setObjectiveOffset(objectiveOffset_); writer.setProblemName(problemName_.c_str()); if (keepStrings&&string_.numberItems()) { // load up strings - sorted by column and row writer.copyStringElements(this); } return writer.writeMps(filename, compression, formatType, numberAcross); } /* Check two models against each other. Return nonzero if different. Ignore names if that set. May modify both models by cleaning up */ int CoinModel::differentModel(CoinModel & other, bool ignoreNames) { int numberErrors = 0; int numberErrors2 = 0; int returnCode=0; if (numberRows_!=other.numberRows_||numberColumns_!=other.numberColumns_) { if (logLevel_>0) printf("** Mismatch on size, this has %d rows, %d columns - other has %d rows, %d columns\n", numberRows_,numberColumns_,other.numberRows_,other.numberColumns_); returnCode=1000; } // Set arrays for normal use double * rowLower = rowLower_; double * rowUpper = rowUpper_; double * columnLower = columnLower_; double * columnUpper = columnUpper_; double * objective = objective_; int * integerType = integerType_; double * associated = associated_; // If strings then do copies if (string_.numberItems()) { numberErrors += createArrays(rowLower, rowUpper, columnLower, columnUpper, objective, integerType,associated); } // Set arrays for normal use double * rowLower2 = other.rowLower_; double * rowUpper2 = other.rowUpper_; double * columnLower2 = other.columnLower_; double * columnUpper2 = other.columnUpper_; double * objective2 = other.objective_; int * integerType2 = other.integerType_; double * associated2 = other.associated_; // If strings then do copies if (other.string_.numberItems()) { numberErrors2 += other.createArrays(rowLower2, rowUpper2, columnLower2, columnUpper2, objective2, integerType2,associated2); } CoinPackedMatrix matrix; createPackedMatrix(matrix,associated); CoinPackedMatrix matrix2; other.createPackedMatrix(matrix2,associated2); if (numberErrors||numberErrors2) if (logLevel_>0) printf("** Errors when converting strings, %d on this, %d on other\n", numberErrors,numberErrors2); CoinRelFltEq tolerance; if (numberRows_==other.numberRows_) { bool checkNames = !ignoreNames; if (!rowName_.numberItems()|| !other.rowName_.numberItems()) checkNames=false; int numberDifferentL = 0; int numberDifferentU = 0; int numberDifferentN = 0; for (int i=0;i0) printf("Row differences , %d lower, %d upper and %d names\n", numberDifferentL,numberDifferentU,numberDifferentN); } if (numberColumns_==other.numberColumns_) { int numberDifferentL = 0; int numberDifferentU = 0; int numberDifferentN = 0; int numberDifferentO = 0; int numberDifferentI = 0; bool checkNames = !ignoreNames; if (!columnName_.numberItems()|| !other.columnName_.numberItems()) checkNames=false; for (int i=0;i0) printf("Column differences , %d lower, %d upper, %d objective, %d integer and %d names\n", numberDifferentL,numberDifferentU,numberDifferentO, numberDifferentI,numberDifferentN); } if (numberRows_==other.numberRows_&& numberColumns_==other.numberColumns_&& numberElements_==other.numberElements_) { if (!matrix.isEquivalent(matrix2,tolerance)) { returnCode+=100; if (returnCode&&logLevel_>0) printf("Two matrices are not same\n"); } } if (rowLower!=rowLower_) { delete [] rowLower; delete [] rowUpper; delete [] columnLower; delete [] columnUpper; delete [] objective; delete [] integerType; delete [] associated; } if (rowLower2!=other.rowLower_) { delete [] rowLower2; delete [] rowUpper2; delete [] columnLower2; delete [] columnUpper2; delete [] objective2; delete [] integerType2; delete [] associated2; } return returnCode; } // Returns value for row i and column j double CoinModel::getElement(int i,int j) const { if (!hashElements_.numberItems()) { hashElements_.setNumberItems(numberElements_); hashElements_.resize(maximumElements_,elements_); } int position = hashElements_.hash(i,j,elements_); if (position>=0) { return elements_[position].value; } else { return 0.0; } } // Returns value for row rowName and column columnName double CoinModel::getElement(const char * rowName,const char * columnName) const { if (!hashElements_.numberItems()) { hashElements_.setNumberItems(numberElements_); hashElements_.resize(maximumElements_,elements_); } assert (!noNames_); int i=rowName_.hash(rowName); int j=columnName_.hash(columnName); int position; if (i>=0&&j>=0) position = hashElements_.hash(i,j,elements_); else position=-1; if (position>=0) { return elements_[position].value; } else { return 0.0; } } // Returns quadratic value for columns i and j double CoinModel::getQuadraticElement(int ,int ) const { printf("not written yet\n"); abort(); return 0.0; } // Returns value for row i and column j as string const char * CoinModel::getElementAsString(int i,int j) const { if (!hashElements_.numberItems()) { hashElements_.setNumberItems(numberElements_); hashElements_.resize(maximumElements_,elements_); } int position = hashElements_.hash(i,j,elements_); if (position>=0) { if (stringInTriple(elements_[position])) { int iString = static_cast (elements_[position].value); assert (iString>=0&&iString=0) { return &(elements_[position].value); } else { return NULL; } } /* Returns first element in given row - index is -1 if none. Index is given by .index and value by .value */ CoinModelLink CoinModel::firstInRow(int whichRow) const { CoinModelLink link; if (whichRow>=0&&whichRow=0) { link.setRow(whichRow); link.setPosition(position); link.setColumn(elements_[position].column); assert (whichRow==rowInTriple(elements_[position])); link.setValue(elements_[position].value); } } } return link; } /* Returns last element in given row - index is -1 if none. Index is given by .index and value by .value */ CoinModelLink CoinModel::lastInRow(int whichRow) const { CoinModelLink link; if (whichRow>=0&&whichRow=start_[whichRow]) { link.setRow(whichRow); link.setPosition(position); link.setColumn(elements_[position].column); assert (whichRow==rowInTriple(elements_[position])); link.setValue(elements_[position].value); } } else { fillList(whichRow,rowList_,1); int position = rowList_.last(whichRow); if (position>=0) { link.setRow(whichRow); link.setPosition(position); link.setColumn(elements_[position].column); assert (whichRow==rowInTriple(elements_[position])); link.setValue(elements_[position].value); } } } return link; } /* Returns first element in given column - index is -1 if none. Index is given by .index and value by .value */ CoinModelLink CoinModel::firstInColumn(int whichColumn) const { CoinModelLink link; if (whichColumn>=0&&whichColumn (elements_[position].column)); link.setValue(elements_[position].value); } } else { fillList(whichColumn,columnList_,2); if ((links_&2)==0) { // Create list assert (!columnList_.numberMajor()); createList(2); } int position = columnList_.first(whichColumn); if (position>=0) { link.setColumn(whichColumn); link.setPosition(position); link.setRow(rowInTriple(elements_[position])); assert (whichColumn==static_cast (elements_[position].column)); link.setValue(elements_[position].value); } } } return link; } /* Returns last element in given column - index is -1 if none. Index is given by .index and value by .value */ CoinModelLink CoinModel::lastInColumn(int whichColumn) const { CoinModelLink link; if (whichColumn>=0&&whichColumn=start_[whichColumn]) { link.setColumn(whichColumn); link.setPosition(position); link.setRow(rowInTriple(elements_[position])); assert (whichColumn==static_cast (elements_[position].column)); link.setValue(elements_[position].value); } } else { fillList(whichColumn,columnList_,2); int position = columnList_.last(whichColumn); if (position>=0) { link.setColumn(whichColumn); link.setPosition(position); link.setRow(rowInTriple(elements_[position])); assert (whichColumn==static_cast (elements_[position].column)); link.setValue(elements_[position].value); } } } return link; } /* Returns next element in current row or column - index is -1 if none. Index is given by .index and value by .value. User could also tell because input.next would be NULL */ CoinModelLink CoinModel::next(CoinModelLink & current) const { CoinModelLink link=current; int position = current.position(); if (position>=0) { if (current.onRow()) { // Doing by row int whichRow = current.row(); if (type_==0) { assert (start_); position++; if (position=0) { link.setPosition(position); link.setColumn(elements_[position].column); assert (whichRow==rowInTriple(elements_[position])); link.setValue(elements_[position].value); } else { // signal end link.setPosition(-1); link.setColumn(-1); link.setRow(-1); link.setValue(0.0); } } } else { // Doing by column int whichColumn = current.column(); if (type_==1) { assert (start_); position++; if (position (elements_[position].column)); link.setValue(elements_[position].value); } else { // signal end link.setPosition(-1); link.setColumn(-1); link.setRow(-1); link.setValue(0.0); } } else { assert ((links_&2)!=0); position = columnList_.next()[position]; if (position>=0) { link.setPosition(position); link.setRow(rowInTriple(elements_[position])); assert (whichColumn==static_cast (elements_[position].column)); link.setValue(elements_[position].value); } else { // signal end link.setPosition(-1); link.setColumn(-1); link.setRow(-1); link.setValue(0.0); } } } } return link; } /* Returns previous element in current row or column - index is -1 if none. Index is given by .index and value by .value. User could also tell because input.previous would be NULL */ CoinModelLink CoinModel::previous(CoinModelLink & current) const { CoinModelLink link=current; int position = current.position(); if (position>=0) { if (current.onRow()) { // Doing by row int whichRow = current.row(); if (type_==0) { assert (start_); position--; if (position>=start_[whichRow]) { link.setPosition(position); link.setColumn(elements_[position].column); assert (whichRow==rowInTriple(elements_[position])); link.setValue(elements_[position].value); } else { // signal end link.setPosition(-1); link.setColumn(-1); link.setRow(-1); link.setValue(0.0); } } else { assert ((links_&1)!=0); position = rowList_.previous()[position]; if (position>=0) { link.setPosition(position); link.setColumn(elements_[position].column); assert (whichRow==rowInTriple(elements_[position])); link.setValue(elements_[position].value); } else { // signal end link.setPosition(-1); link.setColumn(-1); link.setRow(-1); link.setValue(0.0); } } } else { // Doing by column int whichColumn = current.column(); if (type_==1) { assert (start_); position--; if (position>=start_[whichColumn]) { link.setPosition(position); link.setRow(rowInTriple(elements_[position])); assert (whichColumn==static_cast (elements_[position].column)); link.setValue(elements_[position].value); } else { // signal end link.setPosition(-1); link.setColumn(-1); link.setRow(-1); link.setValue(0.0); } } else { assert ((links_&2)!=0); position = columnList_.previous()[position]; if (position>=0) { link.setPosition(position); link.setRow(rowInTriple(elements_[position])); assert (whichColumn==static_cast (elements_[position].column)); link.setValue(elements_[position].value); } else { // signal end link.setPosition(-1); link.setColumn(-1); link.setRow(-1); link.setValue(0.0); } } } } return link; } /* Returns first element in given quadratic column - index is -1 if none. Index is given by .index and value by .value */ CoinModelLink CoinModel::firstInQuadraticColumn(int ) const { printf("not written yet\n"); abort(); CoinModelLink x; return x; } /* Returns last element in given quadratic column - index is -1 if none. Index is given by .index and value by .value */ CoinModelLink CoinModel::lastInQuadraticColumn(int) const { printf("not written yet\n"); abort(); CoinModelLink x; return x; } /* Gets rowLower (if row does not exist then -COIN_DBL_MAX) */ double CoinModel::getRowLower(int whichRow) const { assert (whichRow>=0); if (whichRow=0); if (whichRow=0); if (whichRow=0); if (whichColumn=0); if (whichColumn=0); if (whichColumn=0); if (whichColumn=0); if (whichColumnmaximumRows_) { bool needFill = rowLower_==NULL; double * tempArray; tempArray = new double[maximumRows]; CoinMemcpyN(rowLower_,numberRows_,tempArray); # ifdef ZEROFAULT memset(tempArray+numberRows_,0,(maximumRows-numberRows_)*sizeof(double)) ; # endif delete [] rowLower_; rowLower_=tempArray; tempArray = new double[maximumRows]; CoinMemcpyN(rowUpper_,numberRows_,tempArray); # ifdef ZEROFAULT memset(tempArray+numberRows_,0,(maximumRows-numberRows_)*sizeof(double)) ; # endif delete [] rowUpper_; rowUpper_=tempArray; int * tempArray2; tempArray2 = new int[maximumRows]; CoinMemcpyN(rowType_,numberRows_,tempArray2); # ifdef ZEROFAULT memset(tempArray2+numberRows_,0,(maximumRows-numberRows_)*sizeof(int)) ; # endif delete [] rowType_; rowType_=tempArray2; // resize hash if (!noNames_) rowName_.resize(maximumRows); // If we have links we need to resize if ((links_&1)!=0) { rowList_.resize(maximumRows,maximumElements); } // If we have start then we need to resize that if (type_==0) { int * tempArray2; tempArray2 = new int[maximumRows+1]; # ifdef ZEROFAULT memset(tempArray2,0,(maximumRows+1)*sizeof(int)) ; # endif if (start_) { CoinMemcpyN(start_,(numberRows_+1),tempArray2); delete [] start_; } else { tempArray2[0]=0; } start_=tempArray2; } maximumRows_=maximumRows; // Fill if (needFill) { int save=numberRows_-1; numberRows_=0; fillRows(save,true); } } } else if (type_==3) { badType(); } if (type_==1||type_==2) { // need to redo column stuff maximumColumns = CoinMax(maximumColumns,numberColumns_); if (maximumColumns>maximumColumns_) { bool needFill = columnLower_==NULL; double * tempArray; tempArray = new double[maximumColumns]; CoinMemcpyN(columnLower_,numberColumns_,tempArray); # ifdef ZEROFAULT memset(tempArray+numberColumns_,0, (maximumColumns-numberColumns_)*sizeof(double)) ; # endif delete [] columnLower_; columnLower_=tempArray; tempArray = new double[maximumColumns]; CoinMemcpyN(columnUpper_,numberColumns_,tempArray); # ifdef ZEROFAULT memset(tempArray+numberColumns_,0, (maximumColumns-numberColumns_)*sizeof(double)) ; # endif delete [] columnUpper_; columnUpper_=tempArray; tempArray = new double[maximumColumns]; CoinMemcpyN(objective_,numberColumns_,tempArray); # ifdef ZEROFAULT memset(tempArray+numberColumns_,0, (maximumColumns-numberColumns_)*sizeof(double)) ; # endif delete [] objective_; objective_=tempArray; int * tempArray2; tempArray2 = new int[maximumColumns]; CoinMemcpyN(columnType_,numberColumns_,tempArray2); # ifdef ZEROFAULT memset(tempArray2+numberColumns_,0, (maximumColumns-numberColumns_)*sizeof(int)) ; # endif delete [] columnType_; columnType_=tempArray2; tempArray2 = new int[maximumColumns]; CoinMemcpyN(integerType_,numberColumns_,tempArray2); # ifdef ZEROFAULT memset(tempArray2+numberColumns_,0, (maximumColumns-numberColumns_)*sizeof(int)) ; # endif delete [] integerType_; integerType_=tempArray2; // resize hash if (!noNames_) columnName_.resize(maximumColumns); // If we have links we need to resize if ((links_&2)!=0) { columnList_.resize(maximumColumns,maximumElements); } // If we have start then we need to resize that if (type_==1) { int * tempArray2; tempArray2 = new int[maximumColumns+1]; # ifdef ZEROFAULT memset(tempArray2,0,(maximumColumns+1)*sizeof(int)) ; # endif if (start_) { CoinMemcpyN(start_,(numberColumns_+1),tempArray2); delete [] start_; } else { tempArray2[0]=0; } start_=tempArray2; } maximumColumns_=maximumColumns; // Fill if (needFill) { int save=numberColumns_-1; numberColumns_=0; fillColumns(save,true); } } } if (type_==3) badType(); if (maximumElements>maximumElements_) { CoinModelTriple * tempArray = new CoinModelTriple[maximumElements]; CoinMemcpyN(elements_,numberElements_,tempArray); # ifdef ZEROFAULT memset(tempArray+numberElements_,0, (maximumElements-numberElements_)*sizeof(CoinModelTriple)) ; # endif delete [] elements_; elements_=tempArray; if (hashElements_.numberItems()) hashElements_.resize(maximumElements,elements_); maximumElements_=maximumElements; // If we have links we need to resize if ((links_&1)!=0) { rowList_.resize(maximumRows_,maximumElements_); } if ((links_&2)!=0) { columnList_.resize(maximumColumns_,maximumElements_); } } } void CoinModel::fillRows(int whichRow, bool forceCreation,bool fromAddRow) { if (forceCreation||fromAddRow) { if (type_==-1) { // initial type_=0; resize(CoinMax(100,whichRow+1),0,1000); } else if (type_==1) { type_=2; } if (!rowLower_) { // need to set all whichRow = numberRows_-1; numberRows_=0; if (type_!=3) resize(CoinMax(100,whichRow+1),0,0); else resize(CoinMax(1,whichRow+1),0,0); } if (whichRow>=maximumRows_) { if (type_!=3) resize(CoinMax((3*maximumRows_)/2,whichRow+1),0,0); else resize(CoinMax(1,whichRow+1),0,0); } } if (whichRow>=numberRows_&&rowLower_) { // Need to fill int i; for ( i=numberRows_;i<=whichRow;i++) { rowLower_[i]=-COIN_DBL_MAX; rowUpper_[i]=COIN_DBL_MAX; rowType_[i]=0; } } if ( !fromAddRow) { numberRows_=CoinMax(whichRow+1,numberRows_); // If simple minded then delete start if (start_) { delete [] start_; start_ = NULL; assert (!links_); // mixed - do linked lists for rows createList(1); } } } void CoinModel::fillColumns(int whichColumn,bool forceCreation,bool fromAddColumn) { if (forceCreation||fromAddColumn) { if (type_==-1) { // initial type_=1; resize(0,CoinMax(100,whichColumn+1),1000); } else if (type_==0) { type_=2; } if (!objective_) { // need to set all whichColumn = numberColumns_-1; numberColumns_=0; if (type_!=3) resize(0,CoinMax(100,whichColumn+1),0); else resize(0,CoinMax(1,whichColumn+1),0); } if (whichColumn>=maximumColumns_) { if (type_!=3) resize(0,CoinMax((3*maximumColumns_)/2,whichColumn+1),0); else resize(0,CoinMax(1,whichColumn+1),0); } } if (whichColumn>=numberColumns_&&objective_) { // Need to fill int i; for ( i=numberColumns_;i<=whichColumn;i++) { columnLower_[i]=0.0; columnUpper_[i]=COIN_DBL_MAX; objective_[i]=0.0; integerType_[i]=0; columnType_[i]=0; } } if ( !fromAddColumn) { numberColumns_=CoinMax(whichColumn+1,numberColumns_); // If simple minded then delete start if (start_) { delete [] start_; start_ = NULL; assert (!links_); // mixed - do linked lists for columns createList(2); } } } // Fill in default linked list information void CoinModel::fillList(int which, CoinModelLinkedList & list, int type) const { if ((links_&type)==0) { // Create list assert (!list.numberMajor()); if (type==1) { list.create(maximumRows_,maximumElements_,numberRows_,numberColumns_,0, numberElements_,elements_); } else { list.create(maximumColumns_,maximumElements_,numberColumns_,numberRows_,1, numberElements_,elements_); } if (links_==1 && type== 2) { columnList_.synchronize(rowList_); } else if (links_==2 && type==1) { rowList_.synchronize(columnList_); } links_ |= type; } int number = list.numberMajor(); if (which>=number) { // may still need to extend list or fill it in if (which>=list.maximumMajor()) { list.resize((which*3)/2+100,list.maximumElements()); } list.fill(number,which+1); } } /* Gets sorted row - user must provide enough space (easiest is allocate number of columns). Returns number of elements */ int CoinModel::getRow(int whichRow, int * column, double * element) { if (!hashElements_.maximumItems()) { // set up number of items hashElements_.setNumberItems(numberElements_); hashElements_.resize(maximumElements_,elements_); } assert (whichRow>=0); int n=0; if (whichRow=0) { int iColumn = triple.column(); assert (whichRow==triple.row()); if (iColumn=0); int n=0; if (whichColumn=0) { int iRow = triple.row(); assert (whichColumn==triple.column()); if (iRow='0'&&x<='9')||x=='.'||x=='+'||x=='-'||x=='e'); } char saved = *pos2; *pos2='\0'; value = atof(pos); *pos2=saved; // and down to next pos2++; pos=pos2; while (*pos2) { if (*pos2=='-'||*pos2=='+') break; pos2++; } } char saved = *pos2; *pos2='\0'; // now name // might have + or - if (*pos=='+') { pos++; } else if (*pos=='-') { pos++; assert (value==1.0); value = - value; } int jColumn = column(pos); // must be column unless first when may be linear term if (jColumn<0) { if (ifFirst) { char * pos3 = pos; while (pos3!=pos2) { #ifndef NDEBUG char x = *pos3; #endif pos3++; assert ((x>='0'&&x<='9')||x=='.'||x=='+'||x=='-'||x=='e'); } assert(*pos2=='\0'); // keep possible - value = value * atof(pos); jColumn=-2; } else { // bad *pos2=saved; printf("bad nonlinear term %s\n",phrase); // maybe return -1 abort(); } } *pos2=saved; pos=pos2; coefficient=value; nextPhrase = pos; return jColumn; } /* Gets correct form for a quadratic row - user to delete If row is not quadratic then returns which other variables are involved with tiny elements and count of total number of variables which could not be put in quadratic form */ CoinPackedMatrix * CoinModel::quadraticRow(int rowNumber,double * linearRow, int & numberBad) const { numberBad=0; CoinZeroN(linearRow,numberColumns_); int numberElements=0; assert (rowNumber>=-1&&rowNumber=0) { int iColumn = triple.column(); const char * expr = getElementAsString(rowNumber,iColumn); if (strcmp(expr,"Numeric")) { // try and see which columns assert (strlen(expr)<20000); char temp[20000]; strcpy(temp,expr); char * pos = temp; bool ifFirst=true; while (*pos) { double value; int jColumn = decodeBit(pos, pos, value, ifFirst); // must be column unless first when may be linear term if (jColumn>=0) { numberElements++; } else if (jColumn==-2) { linearRow[iColumn]=value; } else if (jColumn==-1) { // nonlinear term - we will just be marking numberElements++; } else { printf("bad nonlinear term %s\n",temp); abort(); } ifFirst=false; } } else { linearRow[iColumn]=getElement(rowNumber,iColumn); } triple=next(triple); } if (!numberElements) { return NULL; } else { int * column = new int[numberElements]; int * column2 = new int[numberElements]; double * element = new double[numberElements]; numberElements=0; CoinModelLink triple=firstInRow(rowNumber); while (triple.column()>=0) { int iColumn = triple.column(); const char * expr = getElementAsString(rowNumber,iColumn); if (strcmp(expr,"Numeric")) { // try and see which columns assert (strlen(expr)<20000); char temp[20000]; strcpy(temp,expr); char * pos = temp; bool ifFirst=true; while (*pos) { double value; int jColumn = decodeBit(pos, pos, value, ifFirst); // must be column unless first when may be linear term if (jColumn>=0) { column[numberElements]=iColumn; column2[numberElements]=jColumn; element[numberElements++]=value; } else if (jColumn==-1) { // nonlinear term - we will just be marking assert (jColumn>=0); column[numberElements]=iColumn; column2[numberElements]=jColumn; element[numberElements++]=1.0e-100; numberBad++; } else if (jColumn!=-2) { printf("bad nonlinear term %s\n",temp); abort(); } ifFirst=false; } } triple=next(triple); } CoinPackedMatrix * newMatrix = new CoinPackedMatrix(true,column2,column,element,numberElements); delete [] column; delete [] column2; delete [] element; return newMatrix; } } else { // objective int iColumn; for (iColumn=0;iColumn=0) { numberElements++; } else if (jColumn==-2) { linearRow[iColumn]=value; } else if (jColumn==-1) { // nonlinear term - we will just be marking numberElements++; } else { printf("bad nonlinear term %s\n",temp); abort(); } ifFirst=false; } } else { linearRow[iColumn]=getElement(rowNumber,iColumn); } } if (!numberElements) { return NULL; } else { int * column = new int[numberElements]; int * column2 = new int[numberElements]; double * element = new double[numberElements]; numberElements=0; for (iColumn=0;iColumn=0) { column[numberElements]=iColumn; column2[numberElements]=jColumn; element[numberElements++]=value; } else if (jColumn==-1) { // nonlinear term - we will just be marking assert (jColumn>=0); column[numberElements]=iColumn; column2[numberElements]=jColumn; element[numberElements++]=1.0e-100; numberBad++; } else if (jColumn!=-2) { printf("bad nonlinear term %s\n",temp); abort(); } ifFirst=false; } } } return new CoinPackedMatrix(true,column2,column,element,numberElements); } } } // Replaces a quadratic row void CoinModel::replaceQuadraticRow(int rowNumber,const double * linearRow, const CoinPackedMatrix * quadraticPart) { assert (rowNumber>=-1&&rowNumber=0) { CoinModelLink triple=firstInRow(rowNumber); while (triple.column()>=0) { int iColumn = triple.column(); deleteElement(rowNumber,iColumn); // triple stale - so start over triple=firstInRow(rowNumber); } const double * element = quadraticPart->getElements(); const int * column = quadraticPart->getIndices(); const CoinBigIndex * columnStart = quadraticPart->getVectorStarts(); const int * columnLength = quadraticPart->getVectorLengths(); int numberLook = quadraticPart->getNumCols(); int i; for (i=0;i(strlen(temp)); } for (int j=columnStart[i];j(strlen(temp2)); assert (nextPut<10000); strcpy(temp+put,temp2); put = nextPut; } setElement(rowNumber,i,temp); } } // rest of linear for (;igetElements(); const int * column = quadraticPart->getIndices(); const CoinBigIndex * columnStart = quadraticPart->getVectorStarts(); const int * columnLength = quadraticPart->getVectorLengths(); int numberLook = quadraticPart->getNumCols(); int i; for (i=0;i(strlen(temp)); } for (int j=columnStart[i];j(strlen(temp2)); assert (nextPut<10000); strcpy(temp+put,temp2); put = nextPut; } setColumnObjective(i,temp); } } // rest of linear for (;igetElements(); const int * column = row->getIndices(); const CoinBigIndex * columnStart = row->getVectorStarts(); const int * columnLength = row->getVectorLengths(); int numberLook = row->getNumCols(); for (int i=0;igetElements(); const int * columnLow = row->getIndices(); const CoinBigIndex * columnHigh = row->getVectorStarts(); const int * columnLength = row->getVectorLengths(); int numberLook = row->getNumCols(); int canSwap=0; for (int i=0;i0) { // rewrite row /* get triples then swap ones needed then create packedmatrix then replace row */ int numberElements=columnHigh[numberLook]; int * columnHigh2 = new int [numberElements]; int * columnLow2 = new int [numberElements]; double * element2 = new double [numberElements]; for (int i=0;ireplaceQuadraticRow(iRow,linear,row); delete row; } else { delete row; delete newModel; newModel=NULL; printf("Unable to use priority - row %d\n",iRow); break; } } } } delete [] highPriority; delete [] linear; return newModel; } // Sets cut marker array void CoinModel::setCutMarker(int size,const int * marker) { delete [] cut_; cut_ = new int [maximumRows_]; CoinZeroN(cut_,maximumRows_); CoinMemcpyN(marker,size,cut_); } // Sets priority array void CoinModel::setPriorities(int size,const int * priorities) { delete [] priority_; priority_ = new int [maximumColumns_]; CoinZeroN(priority_,maximumColumns_); CoinMemcpyN(priorities,size,priority_); } /* Sets columnObjective array */ void CoinModel::setObjective(int numberColumns,const double * objective) { fillColumns(numberColumns,true,true); for (int i=0;i -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 function to convert from the sense/rhs/range style of constraint definition to the lb/ub style */ void convertSenseToBound(const char sense, const double right, const double range, double& lower, double& upper) { double inf=COIN_DBL_MAX; 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; } } void CoinModel::loadBlock(const CoinPackedMatrix& matrix, const double* collb, const double* colub, const double* obj, const double* rowlb, const double* rowub) { passInMatrix(matrix); int numberRows=matrix.getNumRows(); int numberColumns=matrix.getNumCols(); setObjective(numberColumns,obj); setRowLower(numberRows,rowlb); setRowUpper(numberRows,rowub); setColumnLower(numberColumns,collb); setColumnUpper(numberColumns,colub); } //----------------------------------------------------------------------------- void CoinModel::loadBlock(const CoinPackedMatrix& matrix, const double* collb, const double* colub, const double* obj, const char* rowsen, const double* rowrhs, const double* rowrng) { // If any of Rhs NULLs then create arrays int numrows = matrix.getNumRows(); const char * rowsenUse = rowsen; if (!rowsen) { char * rowsen = new char [numrows]; for (int i=0;i= 0; --i) { convertSenseToBound(rowsenUse[i],rowrhsUse[i],rowrngUse[i],rowlb[i],rowub[i]); } if (rowsen!=rowsenUse) delete [] rowsenUse; if (rowrhs!=rowrhsUse) delete [] rowrhsUse; if (rowrng!=rowrngUse) delete [] rowrngUse; loadBlock(matrix, collb, colub, obj, rowlb, rowub); delete [] rowlb; delete [] rowub; } //----------------------------------------------------------------------------- void CoinModel::loadBlock(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) { int numberElements = start[numcols]; int * length = new int [numcols]; for (int i=0;i= 0; --i) { convertSenseToBound(rowsenUse[i],rowrhsUse[i],rowrngUse[i],rowlb[i],rowub[i]); } if (rowsen!=rowsenUse) delete [] rowsenUse; if (rowrhs!=rowrhsUse) delete [] rowrhsUse; if (rowrng!=rowrngUse) delete [] rowrngUse; int numberElements = start[numcols]; int * length = new int [numcols]; for (int i=0;i #include #include #include /* Default constructor. */ CoinOneMessage::CoinOneMessage() { externalNumber_=-1; message_[0]='\0'; severity_='I'; detail_=0; } /* Destructor */ CoinOneMessage::~CoinOneMessage() { } /* The copy constructor */ CoinOneMessage::CoinOneMessage(const CoinOneMessage & rhs) { externalNumber_=rhs.externalNumber_; strcpy(message_,rhs.message_); severity_=rhs.severity_; detail_=rhs.detail_; } /* assignment operator. */ CoinOneMessage& CoinOneMessage::operator=(const CoinOneMessage & rhs) { if (this != &rhs) { externalNumber_=rhs.externalNumber_; strcpy(message_,rhs.message_); severity_=rhs.severity_; detail_=rhs.detail_; } return *this; } /* Normal constructor */ CoinOneMessage::CoinOneMessage(int externalNumber, char detail, const char * message) { externalNumber_=externalNumber; strcpy(message_,message); if (externalNumber<3000) severity_='I'; else if (externalNumber<6000) severity_='W'; else if (externalNumber<9000) severity_='E'; else severity_='S'; detail_=detail; } // Replaces messages (i.e. a different language) void CoinOneMessage::replaceMessage( const char * message) { strcpy(message_,message); } /* Constructor with number of messages. */ CoinMessages::CoinMessages(int numberMessages) { numberMessages_=numberMessages; language_=us_en; strcpy(source_,"Unk"); class_=1; lengthMessages_=-1; if (numberMessages_) { message_ = new CoinOneMessage * [numberMessages_]; int i; for (i=0;i (rhs.message_),lengthMessages_); message_ = reinterpret_cast (temp); std::ptrdiff_t offset = temp - reinterpret_cast (rhs.message_); int i; //printf("new address %x(%x), rhs %x - length %d\n",message_,temp,rhs.message_,lengthMessages_); for (i=0;i (message_[i])) + offset; assert (newAddress-temp (newAddress); //printf("message %d at %x is %s\n",i,message_[i],message_[i]->message()); //printf("message %d at %x wass %s\n",i,rhs.message_[i],rhs.message_[i]->message()); } } } } /* assignment operator. */ CoinMessages& CoinMessages::operator=(const CoinMessages & rhs) { if (this != &rhs) { language_=rhs.language_; strcpy(source_,rhs.source_); class_=rhs.class_; if (lengthMessages_<0) { int i; for (i=0;i (rhs.message_),lengthMessages_); message_ = reinterpret_cast (temp); std::ptrdiff_t offset = temp - reinterpret_cast (rhs.message_); int i; //printf("new address %x(%x), rhs %x - length %d\n",message_,temp,rhs.message_,lengthMessages_); for (i=0;i (message_[i])) + offset; assert (newAddress-temp (newAddress); //printf("message %d at %x is %s\n",i,message_[i],message_[i]->message()); //printf("message %d at %x wass %s\n",i,rhs.message_[i],rhs.message_[i]->message()); } } } } return *this; } // Puts message in correct place void CoinMessages::addMessage(int messageNumber, const CoinOneMessage & message) { if (messageNumber>=numberMessages_) { // should not happen but allow for it CoinOneMessage ** temp = new CoinOneMessage * [messageNumber+1]; int i; for (i=0;i=0) fromCompact(); delete message_[messageNumber]; message_[messageNumber]=new CoinOneMessage(message); } // Replaces messages (i.e. a different language) void CoinMessages::replaceMessage(int messageNumber, const char * message) { if (lengthMessages_>=0) fromCompact(); assert(messageNumberreplaceMessage(message); } // Changes detail level for one message void CoinMessages::setDetailMessage(int newLevel, int messageNumber) { int i; // Last message is null (corresponds to DUMMY) for (i=0;iexternalNumber()==messageNumber) { message_[i]->setDetail(newLevel); break; } } } // Changes detail level for several messages void CoinMessages::setDetailMessages(int newLevel, int numberMessages, int * messageNumbers) { int i; if (numberMessages<3&&messageNumbers) { // do one by one int j; for (j=0;jexternalNumber()==messageNumber) { message_[i]->setDetail(newLevel); break; } } } } else if (numberMessages<10000&&messageNumbers) { // do backward mapping int backward[10000]; for (i=0;i<10000;i++) backward[i]=-1; for (i=0;iexternalNumber()]=i; for (i=0;i=0) message_[iback]->setDetail(newLevel); } } else { // do all (except for dummy end) for (i=0;isetDetail(newLevel); } } } // Changes detail level for all messages >= low and < high void CoinMessages::setDetailMessages(int newLevel, int low, int high) { // do all (except for dummy end) if in range for (int i=0;iexternalNumber(); if (iNumber>=low&&iNumbersetDetail(newLevel); } } /* Moves to compact format Compact format is an initial array of CoinOneMessage pointers, followed by a bulk store that holds compressed CoinOneMessage objects, where the message_ array is truncated to be just as large as necessary. */ void CoinMessages::toCompact() { if (numberMessages_&&lengthMessages_<0) { lengthMessages_=numberMessages_*CoinSizeofAsInt(CoinOneMessage *); int i; for (i=0;i(strlen(message_[i]->message())); length = static_cast((message_[i]->message()+length+1)- reinterpret_cast (message_[i])); assert (length (temp); temp += numberMessages_*CoinSizeofAsInt(CoinOneMessage *); CoinOneMessage message; //printf("new address %x(%x) - length %d\n",newMessage,temp,lengthMessages_); lengthMessages_=numberMessages_*CoinSizeofAsInt(CoinOneMessage *); for (i=0;i(strlen(message.message())); length = static_cast((message.message()+length+1)- reinterpret_cast (&message)); assert (length (temp); //printf("message %d at %x is %s\n",i,newMessage[i],newMessage[i]->message()); if (leftOver) length += 8-leftOver; temp += length; lengthMessages_+=length; } else { // null message newMessage[i]=NULL; } } for (i=0;i=0) { CoinOneMessage ** temp = new CoinOneMessage * [numberMessages_]; int i; for (i=0;imessageBuffer_) { *messageOut_=0; //take off trailing spaces and commas messageOut_--; while (messageOut_>=messageBuffer_) { if (*messageOut_==' '||*messageOut_==',') { *messageOut_=0; messageOut_--; } else { break; } } // Now do print which can be overridden returnCode=print(); // See what to do on error checkSeverity(); } return returnCode; } // Print message, return 0 normally int CoinMessageHandler::print() { fprintf(fp_,"%s\n",messageBuffer_); return 0; } // Check severity void CoinMessageHandler::checkSeverity() { if (currentMessage_.severity_=='S') { fprintf(fp_,"Stopping due to previous errors.\n"); //Should do walkback abort(); } } /* Amount of print out: 0 - none 1 - minimal 2 - normal low 3 - normal high 4 - verbose above that 8,16,32 etc just for selective debug and are for printf messages in code */ void CoinMessageHandler::setLogLevel (int value) { if (value >= -1) logLevel_ = value ; } void CoinMessageHandler::setLogLevel (int which, int value) { if (which >= 0 && which < COIN_NUM_LOG) { if (value >= -1) logLevels_[which] = value ; } } void CoinMessageHandler::setPrecision(unsigned int new_precision) { char new_string[8] = {'%','.','8','f','\0','\0','\0','\0'}; //we assume that the precision is smaller than one thousand new_precision = std::min(999,new_precision); if (new_precision == 0) new_precision = 1; g_precision_ = new_precision ; int idx = 2; int base = 100; bool print = false; while (base > 0) { char c = static_cast(new_precision / base); new_precision = new_precision % base; if (c != 0) print = true; if (print) { new_string[idx] = static_cast(c + '0'); idx++; } base /= 10; } new_string[idx] = 'g'; strcpy(g_format_,new_string); } void CoinMessageHandler::setPrefix(bool value) { if (value) prefix_ = 255; else prefix_ =0; } bool CoinMessageHandler::prefix() const { return (prefix_!=0); } // Constructor CoinMessageHandler::CoinMessageHandler() : logLevel_(1), prefix_(255), currentMessage_(), internalNumber_(0), format_(NULL), printStatus_(0), highestNumber_(-1), fp_(stdout) { const char* g_default = "%.8g"; strcpy(g_format_,g_default); g_precision_ = 8 ; for (int i=0;i= 8 && logLevel_ >= 0) { if ((msglvl&logLevel_) == 0) printStatus_ = 3 ; } else if (logLevel_ < msglvl) { printStatus_ = 3 ; } } else if (logLevels_[msgclass] < msglvl) { printStatus_ = 3; } } /* Start a message using a standard CoinOneMessage. */ CoinMessageHandler & CoinMessageHandler::message (int messageNumber, const CoinMessages &normalMessages) { // Deal with the previous message, if there is one. if (messageOut_ != messageBuffer_) { internalPrint() ; } // Acquire the new message internalNumber_ = messageNumber ; currentMessage_ = *(normalMessages.message_[messageNumber]) ; source_ = normalMessages.source_ ; format_ = currentMessage_.message_ ; highestNumber_ = CoinMax(highestNumber_,currentMessage_.externalNumber_); // Initialise the message construction buffer messageBuffer_[0] = '\0' ; messageOut_ = messageBuffer_ ; // Decide whether or not to print (sets printStatus_) calcPrintStatus(currentMessage_.detail_,normalMessages.class_) ; // If we're printing, initialise the message if (!printStatus_) { if (prefix_) { sprintf(messageOut_,"%s%4.4d%c ",source_.c_str(), currentMessage_.externalNumber_, currentMessage_.severity_) ; messageOut_ += strlen(messageOut_) ; } format_ = nextPerCent(format_,true) ; } return (*this) ; } /* Start a message, providing the full message, information to generate a prefix, a severity code, and an optional log level. Intended as an aid to help existing codes interface. */ CoinMessageHandler & CoinMessageHandler::message (int externalNumber, const char *source, const char *msg, char severity, int loglvl) { // Deal with the previous message, if there is one. if (messageOut_ != messageBuffer_) { internalPrint() ; } // Set up a dummy message. internalNumber_ = externalNumber ; char detail = ((loglvl >= 0)?(static_cast(loglvl)):'\000') ; currentMessage_= CoinOneMessage(externalNumber,detail,msg) ; source_ = source ; highestNumber_ = CoinMax(highestNumber_,externalNumber); // Initialise the message construction buffer messageBuffer_[0] = '\0' ; messageOut_ = messageBuffer_ ; /* Decide whether or not to print. The normal value of printStatus_ here is 2 (complete message provided). loglvl defaults to -1 for backwards compatibility (previously there was no provision for a log level). */ if (loglvl >= 0) calcPrintStatus(loglvl,0) ; if (!printStatus_) { printStatus_ = 2 ; if (prefix_) { sprintf(messageOut_,"%s%4.4d%c ",source_.c_str(), externalNumber,severity) ; } strcat(messageBuffer_,msg) ; messageOut_ = messageBuffer_+strlen(messageBuffer_) ; } return (*this) ; } /* Decides whether or not to print and returns a reference to the handler. */ CoinMessageHandler & CoinMessageHandler::message(int loglvl) { // Adjust print status? if (loglvl >= 0) calcPrintStatus(loglvl,0) ; return (*this) ; } /* Allows for skipping printing of part of message, but putting in data */ CoinMessageHandler & CoinMessageHandler::printing(bool onOff) { // has no effect if skipping or whole message in if (printStatus_ < 2) { assert(format_[1]=='?'); *format_ = '%' ; if (onOff) printStatus_=0; else printStatus_=1; format_ = nextPerCent(format_+2,true); } return *this; } /* Stop (and print) Unless printing is currently suppressed. We need to do the finishing actions in any event. */ int CoinMessageHandler::finish() { // Deal with the collected message if (printStatus_ < 3 && messageOut_ != messageBuffer_) { internalPrint(); } // Clean up for the next message. internalNumber_ = -1 ; format_ = NULL ; messageBuffer_[0] = '\0' ; messageOut_ = messageBuffer_ ; printStatus_ = 0 ; doubleValue_.clear() ; longValue_.clear() ; charValue_.clear() ; stringValue_.clear() ; return (0) ; } /* Gets position of next field in format If we're scanning the initial portion of the string (prior to the first `%' code) the prefix will be copied to the output buffer. Normally, the text from the current position up to and including a % code is is processed by the relevant operator<< method. */ char * CoinMessageHandler::nextPerCent(char * start , const bool initial) { if (start) { bool foundNext=false; while (!foundNext) { char * nextPerCent = strchr(start,'%'); if (nextPerCent) { if (initial&&!printStatus_) { int numberToCopy=static_cast(nextPerCent-start); strncpy(messageOut_,start,numberToCopy); messageOut_+=numberToCopy; } // %? is skipped over as it is just a separator if (nextPerCent[1]!='?') { start=nextPerCent; if (start[1]!='%') { foundNext=true; if (!initial) *start='\0'; //zap } else { start+=2; if (initial) { *messageOut_='%'; messageOut_++; } } } else { foundNext=true; // skip to % and zap start=nextPerCent; *start='\0'; } } else { if (initial&&!printStatus_) { strcpy(messageOut_,start); messageOut_+=strlen(messageOut_); } start=0; foundNext=true; } } } return start; } // Adds into message CoinMessageHandler & CoinMessageHandler::operator<< (int intvalue) { if (printStatus_==3) return *this; // not doing this message longValue_.push_back(intvalue); if (printStatus_<2) { if (format_) { //format is at % (but may be changed to null) *format_='%'; char * next = nextPerCent(format_+1); // could check if (!printStatus_) { sprintf(messageOut_,format_,intvalue); messageOut_+=strlen(messageOut_); } format_=next; } else { sprintf(messageOut_," %d",intvalue); messageOut_+=strlen(messageOut_); } } return *this; } CoinMessageHandler & CoinMessageHandler::operator<< (double doublevalue) { if (printStatus_==3) return *this; // not doing this message doubleValue_.push_back(doublevalue); if (printStatus_<2) { if (format_) { //format is at \0 (but changed to %) *format_='%'; char * next = nextPerCent(format_+1); // could check if (!printStatus_) { if (format_[1] == '.' && format_[2] >= '0' && format_[2] <= '9') { // an explicitly specified precision currently overrides the // precision of the message handler sprintf(messageOut_,format_,doublevalue); } else { sprintf(messageOut_,g_format_,doublevalue); if (next != format_+2) { messageOut_+=strlen(messageOut_); sprintf(messageOut_,format_+2); } } messageOut_+=strlen(messageOut_); } format_=next; } else { sprintf(messageOut_," "); messageOut_ += 1; sprintf(messageOut_,g_format_,doublevalue); messageOut_+=strlen(messageOut_); } } return *this; } #if COIN_BIG_INDEX==1 CoinMessageHandler & CoinMessageHandler::operator<< (long longvalue) { if (printStatus_==3) return *this; // not doing this message longValue_.push_back(longvalue); if (printStatus_<2) { if (format_) { //format is at % (but may be changed to null) *format_='%'; char * next = nextPerCent(format_+1); // could check if (!printStatus_) { sprintf(messageOut_,format_,longvalue); messageOut_+=strlen(messageOut_); } format_=next; } else { sprintf(messageOut_," %ld",longvalue); messageOut_+=strlen(messageOut_); } } return *this; } #endif #if COIN_BIG_INDEX==2 CoinMessageHandler & CoinMessageHandler::operator<< (long long longvalue) { if (printStatus_==3) return *this; // not doing this message longValue_.push_back(longvalue); if (printStatus_<2) { if (format_) { //format is at % (but may be changed to null) *format_='%'; char * next = nextPerCent(format_+1); // could check if (!printStatus_) { sprintf(messageOut_,format_,longvalue); messageOut_+=strlen(messageOut_); } format_=next; } else { sprintf(messageOut_," %ld",longvalue); messageOut_+=strlen(messageOut_); } } return *this; } #endif CoinMessageHandler & CoinMessageHandler::operator<< (const std::string& stringvalue) { if (printStatus_==3) return *this; // not doing this message stringValue_.push_back(stringvalue); if (printStatus_<2) { if (format_) { //format is at % (but changed to 0) *format_='%'; char * next = nextPerCent(format_+1); // could check if (!printStatus_) { sprintf(messageOut_,format_,stringvalue.c_str()); messageOut_+=strlen(messageOut_); } format_=next; } else { sprintf(messageOut_," %s",stringvalue.c_str()); messageOut_+=strlen(messageOut_); } } return *this; } CoinMessageHandler & CoinMessageHandler::operator<< (char charvalue) { if (printStatus_==3) return *this; // not doing this message charValue_.push_back(charvalue); if (printStatus_<2) { if (format_) { //format is at % (but changed to 0) *format_='%'; char * next = nextPerCent(format_+1); // could check if (!printStatus_) { sprintf(messageOut_,format_,charvalue); messageOut_+=strlen(messageOut_); } format_=next; } else { sprintf(messageOut_," %c",charvalue); messageOut_+=strlen(messageOut_); } } return *this; } CoinMessageHandler & CoinMessageHandler::operator<< (const char *stringvalue) { if (printStatus_==3) return *this; // not doing this message stringValue_.push_back(stringvalue); if (printStatus_<2) { if (format_) { //format is at % (but changed to 0) *format_='%'; char * next = nextPerCent(format_+1); // could check if (!printStatus_) { sprintf(messageOut_,format_,stringvalue); messageOut_+=strlen(messageOut_); } format_=next; } else { sprintf(messageOut_," %s",stringvalue); messageOut_+=strlen(messageOut_); } } return *this; } /* Handle markers. Even when printing is suppressed (printStatus_ == 3) we need to execute finish() to reset for the next message. */ CoinMessageHandler & CoinMessageHandler::operator<< (CoinMessageMarker marker) { switch (marker) { case CoinMessageEol: { finish() ; break ; } case CoinMessageNewline: { if (printStatus_ != 3) { strcat(messageOut_,"\n") ; messageOut_++ ; } break ; } } return (*this) ; } CoinUtils-2.9.10/CoinUtils/src/CoinPresolveForcing.cpp0000644000076600007660000005544712130014662021330 0ustar coincoin/* $Id: CoinPresolveForcing.cpp 1581 2013-04-06 12:48:50Z stefan $ */ // 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). #include #include #include "CoinPresolveMatrix.hpp" #include "CoinPresolveEmpty.hpp" // for DROP_COL/DROP_ROW #include "CoinPresolveFixed.hpp" #include "CoinPresolveSubst.hpp" #include "CoinHelperFunctions.hpp" #include "CoinPresolveUseless.hpp" #include "CoinPresolveForcing.hpp" #include "CoinMessage.hpp" #include "CoinFinite.hpp" #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #include "CoinPresolvePsdebug.hpp" #endif namespace { /* Calculate the minimum and maximum row activity (also referred to as lhs bounds, from the common form ax <= b) for the row specified by the range krs, kre in els and hcol. Return the result in maxupp, maxdnp. */ void implied_row_bounds (const double *els, const double *clo, const double *cup, const int *hcol, CoinBigIndex krs, CoinBigIndex kre, double &maxupp, double &maxdnp) { bool posinf = false ; bool neginf = false ; double maxup = 0.0 ; double maxdown = 0.0 ; /* Walk the row and add up the upper and lower bounds on the variables. Once both maxup and maxdown have an infinity contribution the row cannot be shown to be useless or forcing, so break as soon as that's detected. */ for (CoinBigIndex kk = krs ; kk < kre ; kk++) { const int col = hcol[kk] ; const double coeff = els[kk] ; const double lb = clo[col] ; const double ub = cup[col] ; if (coeff > 0.0) { if (PRESOLVE_INF <= ub) { posinf = true ; if (neginf) break ; } else { maxup += ub*coeff ; } if (lb <= -PRESOLVE_INF) { neginf = true ; if (posinf) break ; } else { maxdown += lb*coeff ; } } else { if (PRESOLVE_INF <= ub) { neginf = true ; if (posinf) break ; } else { maxdown += ub*coeff ; } if (lb <= -PRESOLVE_INF) { posinf = true ; if (neginf) break ; } else { maxup += lb*coeff ; } } } maxupp = (posinf)?PRESOLVE_INF:maxup ; maxdnp = (neginf)?-PRESOLVE_INF:maxdown ; } } // end file-local namespace const char *forcing_constraint_action::name() const { return ("forcing_constraint_action") ; } /* It may be the case that the bounds on the variables in a constraint are such that no matter what feasible value the variables take, the constraint cannot be violated. In this case we can drop the constraint as useless. On the other hand, it may be that the only way to satisfy a constraint is to jam all the variables in the constraint to one of their bounds, fixing the variables. This is a forcing constraint, the primary target of this transform. Detection of both useless and forcing constraints requires calculation of bounds on the row activity (often referred to as lhs bounds, from the common form ax <= b). This routine will remember useless constraints as it finds them and invoke useless_constraint_action to deal with them. The transform applied here simply tightens the bounds on the variables. Other transforms will remove the fixed variables, leaving an empty row which is ultimately dropped. A reasonable question to ask is ``If a variable is already fixed, why do we need a record in the postsolve object?'' The answer is that in postsolve we'll be dealing with a column-major representation and we may need to scan the row (see postsolve comments). So it's useful to record all variables in the constraint. On the other hand, it's definitely harmful to ask remove_fixed_action to process a variable more than once (causes problems in remove_fixed_action::postsolve). Original comments: It looks like these checks could be performed in parallel, that is, the tests could be carried out for all rows in parallel, and then the rows deleted and columns tightened afterward. Obviously, this is true for useless rows. By doing it in parallel rather than sequentially, we may miss transformations due to variables that were fixed by forcing constraints, though. Note that both of these operations will cause problems if the variables in question really need to exceed their bounds in order to make the problem feasible. */ const CoinPresolveAction* forcing_constraint_action::presolve (CoinPresolveMatrix *prob, const CoinPresolveAction *next) { # if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING int startEmptyRows = 0 ; int startEmptyColumns = 0 ; startEmptyRows = prob->countEmptyRows() ; startEmptyColumns = prob->countEmptyCols() ; # endif # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 # if PRESOLVE_DEBUG > 0 std::cout << "Entering forcing_constraint_action::presolve, considering " << prob->numberRowsToDo_ << " rows." << std::endl ; # endif presolve_check_sol(prob) ; presolve_check_nbasic(prob) ; # endif # if COIN_PRESOLVE_TUNING double startTime = 0.0 ; if (prob->tuning_) { startTime = CoinCpuTime() ; } # endif // Column solution and bounds double *clo = prob->clo_ ; double *cup = prob->cup_ ; double *csol = prob->sol_ ; // Row-major representation const CoinBigIndex *mrstrt = prob->mrstrt_ ; const double *rowels = prob->rowels_ ; const int *hcol = prob->hcol_ ; const int *hinrow = prob->hinrow_ ; const int nrows = prob->nrows_ ; const double *rlo = prob->rlo_ ; const double *rup = prob->rup_ ; const double tol = ZTOLDP ; const double inftol = prob->feasibilityTolerance_ ; const int ncols = prob->ncols_ ; int *fixed_cols = new int[ncols] ; int nfixed_cols = 0 ; action *actions = new action [nrows] ; int nactions = 0 ; int *useless_rows = new int[nrows] ; int nuseless_rows = 0 ; const int numberLook = prob->numberRowsToDo_ ; int *look = prob->rowsToDo_ ; bool fixInfeasibility = ((prob->presolveOptions_&0x4000) != 0) ; /* Open a loop to scan the constraints of interest. There must be variables left in the row. */ for (int iLook = 0 ; iLook < numberLook ; iLook++) { int irow = look[iLook] ; if (hinrow[irow] <= 0) continue ; const CoinBigIndex krs = mrstrt[irow] ; const CoinBigIndex kre = krs+hinrow[irow] ; /* Calculate upper and lower bounds on the row activity based on upper and lower bounds on the variables. If these are finite and incompatible with the given row bounds, we have infeasibility. */ double maxup, maxdown ; implied_row_bounds(rowels,clo,cup,hcol,krs,kre,maxup,maxdown) ; # if PRESOLVE_DEBUG > 2 std::cout << " considering row " << irow << ", rlo " << rlo[irow] << " LB " << maxdown << " UB " << maxup << " rup " << rup[irow] ; # endif /* If the maximum lhs value is less than L(i) or the minimum lhs value is greater than U(i), we're infeasible. */ if (maxup < PRESOLVE_INF && maxup+inftol < rlo[irow] && !fixInfeasibility) { CoinMessageHandler *hdlr = prob->messageHandler() ; prob->status_|= 1 ; hdlr->message(COIN_PRESOLVE_ROWINFEAS,prob->messages()) << irow << rlo[irow] << rup[irow] << CoinMessageEol ; # if PRESOLVE_DEBUG > 2 std::cout << "; infeasible." << std::endl ; # endif break ; } if (-PRESOLVE_INF < maxdown && rup[irow] < maxdown-inftol && !fixInfeasibility) { CoinMessageHandler *hdlr = prob->messageHandler() ; prob->status_|= 1 ; hdlr->message(COIN_PRESOLVE_ROWINFEAS,prob->messages()) << irow << rlo[irow] << rup[irow] << CoinMessageEol ; # if PRESOLVE_DEBUG > 2 std::cout << "; infeasible." << std::endl ; # endif break ; } /* We've dealt with prima facie infeasibility. Now check if the constraint is trivially satisfied. If so, add it to the list of useless rows and move on. The reason we require maxdown and maxup to be finite if the row bound is finite is to guard against some subsequent transform changing a column bound from infinite to finite. Once finite, bounds continue to tighten, so we're safe. */ if (((rlo[irow] <= -PRESOLVE_INF) || (-PRESOLVE_INF < maxdown && rlo[irow] <= maxdown-inftol)) && ((rup[irow] >= PRESOLVE_INF) || (maxup < PRESOLVE_INF && rup[irow] >= maxup+inftol))) { // check none prohibited if (prob->anyProhibited_) { bool anyProhibited=false; for (int k=krs; kcolProhibited(jcol)) { anyProhibited=true; break; } } if (anyProhibited) continue; // skip row } useless_rows[nuseless_rows++] = irow ; # if PRESOLVE_DEBUG > 2 std::cout << "; useless." << std::endl ; # endif continue ; } /* Is it the case that we can just barely attain L(i) or U(i)? If so, we have a forcing constraint. As explained above, we need maxup and maxdown to be finite in order for the test to be valid. */ const bool tightAtLower = ((maxup < PRESOLVE_INF) && (fabs(rlo[irow]-maxup) < tol)) ; const bool tightAtUpper = ((-PRESOLVE_INF < maxdown) && (fabs(rup[irow]-maxdown) < tol)) ; # if PRESOLVE_DEBUG > 2 if (tightAtLower || tightAtUpper) std::cout << "; forcing." ; std::cout << std::endl ; # endif if (!(tightAtLower || tightAtUpper)) continue ; // check none prohibited if (prob->anyProhibited_) { bool anyProhibited=false; for (int k=krs; kcolProhibited(jcol)) { anyProhibited=true; break; } } if (anyProhibited) continue; // skip row } /* We have a forcing constraint. Get down to the business of fixing the variables at the appropriate bound. We need to remember the original value of the bound we're tightening. Allocate a pair of arrays the size of the row. Load variables fixed at l from the start, variables fixed at u from the end. Add the column to the list of columns to be processed further. */ double *bounds = new double[hinrow[irow]] ; int *rowcols = new int[hinrow[irow]] ; CoinBigIndex lk = krs ; CoinBigIndex uk = kre ; for (CoinBigIndex k = krs ; k < kre ; k++) { const int j = hcol[k] ; const double lj = clo[j] ; const double uj = cup[j] ; const double coeff = rowels[k] ; PRESOLVEASSERT(fabs(coeff) > ZTOLDP) ; /* If maxup is tight at L(i), then we want to force variables x to the bound that produced maxup: u if a > 0, l if a < 0. If maxdown is tight at U(i), it'll be just the opposite. */ if (tightAtLower == (coeff > 0.0)) { --uk ; bounds[uk-krs] = lj ; rowcols[uk-krs] = j ; if (csol != 0) { csol[j] = uj ; } clo[j] = uj ; } else { bounds[lk-krs] = uj ; rowcols[lk-krs] = j ; ++lk ; if (csol != 0) { csol[j] = lj ; } cup[j] = lj ; } /* Only add a column to the list of fixed columns the first time it's fixed. */ if (lj != uj) { fixed_cols[nfixed_cols++] = j ; prob->addCol(j) ; } } PRESOLVEASSERT(uk == lk) ; PRESOLVE_DETAIL_PRINT(printf("pre_forcing %dR E\n",irow)) ; # if PRESOLVE_DEBUG > 1 std::cout << "FORCING: row(" << irow << "), " << (kre-krs) << " variables." << std::endl ; # endif /* Done with this row. Remember the changes in a postsolve action. */ action *f = &actions[nactions] ; nactions++ ; f->row = irow ; f->nlo = lk-krs ; f->nup = kre-uk ; f->rowcols = rowcols ; f->bounds = bounds ; } /* Done processing the rows of interest. No sense doing any additional work unless we're feasible. */ if (prob->status_ == 0) { # if PRESOLVE_DEBUG > 0 std::cout << "FORCING: " << nactions << " forcing, " << nuseless_rows << " useless." << std::endl ; # endif /* Trim the actions array to size and create a postsolve object. */ if (nactions) { next = new forcing_constraint_action(nactions, CoinCopyOfArray(actions,nactions),next) ; } /* Hand off the job of dealing with the useless rows to a specialist. */ if (nuseless_rows) { next = useless_constraint_action::presolve(prob, useless_rows,nuseless_rows,next) ; } /* Hand off the job of dealing with the fixed columns to a specialist. Note that there *cannot* be duplicates in this list or we'll get in trouble `unfixing' a column multiple times. The code above now adds a variable to fixed_cols only if it's not already fixed. If that ever changes, the disabled code (sort, unique) will need to be reenabled. */ if (nfixed_cols) { if (false && nfixed_cols > 1) { std::sort(fixed_cols,fixed_cols+nfixed_cols) ; int *end = std::unique(fixed_cols,fixed_cols+nfixed_cols) ; nfixed_cols = static_cast(end-fixed_cols) ; } next = remove_fixed_action::presolve(prob,fixed_cols,nfixed_cols,next) ; } } deleteAction(actions,action*) ; delete [] useless_rows ; delete [] fixed_cols ; # if COIN_PRESOLVE_TUNING if (prob->tuning_) double thisTime = CoinCpuTime() ; # endif # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 presolve_check_sol(prob) ; presolve_check_nbasic(prob) ; # endif # if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING int droppedRows = prob->countEmptyRows()-startEmptyRows ; int droppedColumns = prob->countEmptyCols()-startEmptyColumns ; std::cout << "Leaving forcing_constraint_action::presolve: removed " << droppedRows << " rows, " << droppedColumns << " columns" ; # if COIN_PRESOLVE_TUNING > 0 if (prob->tuning_) std::cout << " in " << (thisTime-prob->startTime_) << "s" ; # endif std::cout << "." << std::endl ; # endif return (next) ; } /* We're here to undo the bound changes that were put in place for forcing constraints. This is a bit trickier than it appears. Assume we are working with constraint r. The situation on arrival is that constraint r exists and is fully populated with fixed variables, all of which are nonbasic. Even though the constraint is tight, the logical s(r) is basic and the dual y(r) is zero. We may need to change that if a bound is relaxed to infinity on some variable x(t), making x(t)'s current nonbasic status untenable. We'll need to make s(r) nonbasic so that y(r) can be nonzero. Then we can make x(t) basic and use y(r) to force cbar(t) to zero. The code below will choose the variable x(t) whose reduced cost cbar(t) is most wrong and adjust y(r) to drive cbar(t) to zero using cbar(t) = c(t) - SUM{i\r} y(i) a(it) - y(r)a(rt) cbar(t) = cbar(t\r) - y(r)a(rt) Setting cbar(t) to zero, y(r) = cbar(t\r)/a(rt) We will need to scan row r, correcting cbar(j) for all x(j) entangled with the row. We may need to change the nonbasic status of x(j) if the adjustment causes cbar(j) to change sign. */ void forcing_constraint_action::postsolve(CoinPostsolveMatrix *prob) const { const action *const actions = actions_ ; const int nactions = nactions_ ; const double *colels = prob->colels_ ; const int *hrow = prob->hrow_ ; const CoinBigIndex *mcstrt = prob->mcstrt_ ; const int *hincol = prob->hincol_ ; const int *link = prob->link_ ; double *clo = prob->clo_ ; double *cup = prob->cup_ ; double *rlo = prob->rlo_ ; double *rup = prob->rup_ ; double *rcosts = prob->rcosts_ ; double *acts = prob->acts_ ; double *rowduals = prob->rowduals_ ; const double ztoldj = prob->ztoldj_ ; const double ztolzb = prob->ztolzb_ ; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 const double *sol = prob->sol_ ; # if PRESOLVE_DEBUG > 0 std::cout << "Entering forcing_constraint_action::postsolve, " << nactions << " constraints to process." << std::endl ; # endif presolve_check_threads(prob) ; presolve_check_free_list(prob) ; presolve_check_sol(prob,2,2,2) ; presolve_check_nbasic(prob) ; # endif /* Open a loop to process the actions. One action per constraint. */ for (const action *f = &actions[nactions-1] ; actions <= f ; f--) { const int irow = f->row ; const int nlo = f->nlo ; const int nup = f->nup ; const int ninrow = nlo+nup ; const int *rowcols = f->rowcols ; const double *bounds = f->bounds ; # if PRESOLVE_DEBUG > 1 std::cout << " Restoring constraint " << irow << ", " << ninrow << " variables." << std::endl ; # endif PRESOLVEASSERT(prob->getRowStatus(irow) == CoinPrePostsolveMatrix::basic) ; PRESOLVEASSERT(rowduals[irow] == 0.0) ; /* Process variables where the upper bound is relaxed. * If the variable is basic, we should leave the status unchanged. Relaxing the bound cannot make nonbasic status feasible. * The bound change may be a noop, in which nothing needs to be done. * Otherwise, the status should be set to NBLB. */ bool dualfeas = true ; for (int k = 0 ; k < nlo ; k++) { const int jcol = rowcols[k] ; PRESOLVEASSERT(fabs(sol[jcol]-clo[jcol]) <= ztolzb) ; const double cbarj = rcosts[jcol] ; const double olduj = cup[jcol] ; const double newuj = bounds[k] ; const bool change = (fabs(newuj-olduj) > ztolzb) ; # if PRESOLVE_DEBUG > 2 std::cout << " x(" << jcol << ") " << prob->columnStatusString(jcol) << " cbar = " << cbarj << ", lb = " << clo[jcol] << ", ub = " << olduj << " -> " << newuj ; # endif if (change && prob->getColumnStatus(jcol) != CoinPrePostsolveMatrix::basic) { prob->setColumnStatus(jcol,CoinPrePostsolveMatrix::atLowerBound) ; if (cbarj < -ztoldj || clo[jcol] <= -COIN_DBL_MAX) dualfeas = false ; } cup[jcol] = bounds[k] ; # if PRESOLVE_DEBUG > 2 std::cout << " -> " << prob->columnStatusString(jcol) << "." << std::endl ; # endif } /* Process variables where the lower bound is relaxed. The comments above apply. */ for (int k = nlo ; k < ninrow ; k++) { const int jcol = rowcols[k] ; PRESOLVEASSERT(fabs(sol[jcol]-cup[jcol]) <= ztolzb) ; const double cbarj = rcosts[jcol] ; const double oldlj = clo[jcol] ; const double newlj = bounds[k] ; const bool change = (fabs(newlj-oldlj) > ztolzb) ; # if PRESOLVE_DEBUG > 2 std::cout << " x(" << jcol << ") " << prob->columnStatusString(jcol) << " cbar = " << cbarj << ", ub = " << cup[jcol] << ", lb = " << oldlj << " -> " << newlj ; # endif if (change && prob->getColumnStatus(jcol) != CoinPrePostsolveMatrix::basic) { prob->setColumnStatus(jcol,CoinPrePostsolveMatrix::atUpperBound) ; if (cbarj > ztoldj || cup[jcol] >= COIN_DBL_MAX) dualfeas = false ; } clo[jcol] = bounds[k] ; # if PRESOLVE_DEBUG > 2 std::cout << " -> " << prob->columnStatusString(jcol) << "." << std::endl ; # endif } /* The reduced costs and status for the columns may or may not be ok for the relaxed column bounds. If not, find the variable x most out-of-whack with respect to reduced cost and calculate the value of y required to reduce cbar to zero. */ if (dualfeas == false) { int joow = -1 ; double yi = 0.0 ; for (int k = 0 ; k < ninrow ; k++) { int jcol = rowcols[k] ; CoinBigIndex kk = presolve_find_row2(irow,mcstrt[jcol], hincol[jcol],hrow,link) ; const double &cbarj = rcosts[jcol] ; const CoinPrePostsolveMatrix::Status statj = prob->getColumnStatus(jcol) ; if ((cbarj < -ztoldj && statj != CoinPrePostsolveMatrix::atUpperBound) || (cbarj > ztoldj && statj != CoinPrePostsolveMatrix::atLowerBound)) { double yi_j = cbarj/colels[kk] ; if (fabs(yi_j) > fabs(yi)) { joow = jcol ; yi = yi_j ; } # if PRESOLVE_DEBUG > 3 std::cout << " oow: x(" << jcol << ") " << prob->columnStatusString(jcol) << " cbar " << cbarj << " aij " << colels[kk] << " corr " << yi_j << "." << std::endl ; # endif } } assert(joow != -1) ; /* Make x basic and set the row status according to whether we're tight at the lower or upper bound. Keep in mind the convention that a <= constraint has a slack 0 <= s <= infty, while a >= constraint has a surplus -infty <= s <= 0. */ # if PRESOLVE_DEBUG > 1 std::cout << " Adjusting row dual; x(" << joow << ") " << prob->columnStatusString(joow) << " -> " << statusName(CoinPrePostsolveMatrix::basic) << ", y = 0.0 -> " << yi << "." << std::endl ; # endif prob->setColumnStatus(joow,CoinPrePostsolveMatrix::basic) ; if (acts[irow]-rlo[irow] < rup[irow]-acts[irow]) prob->setRowStatus(irow,CoinPrePostsolveMatrix::atUpperBound) ; else prob->setRowStatus(irow,CoinPrePostsolveMatrix::atLowerBound) ; rowduals[irow] = yi ; # if PRESOLVE_DEBUG > 1 std::cout << " Row status " << prob->rowStatusString(irow) << ", lb = " << rlo[irow] << ", ax = " << acts[irow] << ", ub = " << rup[irow] << "." << std::endl ; # endif /* Now correct the reduced costs for other variables in the row. This may cause a reduced cost to change sign, in which case we need to change status. The code implicitly assumes that if it's necessary to change the status of a variable because the reduced cost has changed sign, then it will be possible to do it. I'm not sure I could prove that, however. -- lh, 121108 -- */ for (int k = 0 ; k < ninrow ; k++) { int jcol = rowcols[k] ; CoinBigIndex kk = presolve_find_row2(irow,mcstrt[jcol], hincol[jcol],hrow,link) ; const double old_cbarj = rcosts[jcol] ; rcosts[jcol] -= yi*colels[kk] ; const double new_cbarj = rcosts[jcol] ; if ((old_cbarj < 0) != (new_cbarj < 0)) { if (new_cbarj < -ztoldj && cup[jcol] < COIN_DBL_MAX) prob->setColumnStatus(jcol,CoinPrePostsolveMatrix::atUpperBound) ; else if (new_cbarj > ztoldj && clo[jcol] > -COIN_DBL_MAX) prob->setColumnStatus(jcol,CoinPrePostsolveMatrix::atLowerBound) ; } # if PRESOLVE_DEBUG > 3 const CoinPrePostsolveMatrix::Status statj = prob->getColumnStatus(jcol) ; std::cout << " corr: x(" << jcol << ") " << prob->columnStatusString(jcol) << " cbar " << new_cbarj ; if ((new_cbarj < -ztoldj && statj != CoinPrePostsolveMatrix::atUpperBound) || (new_cbarj > ztoldj && statj != CoinPrePostsolveMatrix::atLowerBound) || (statj == CoinPrePostsolveMatrix::basic && fabs(new_cbarj) > ztoldj)) std::cout << " error!" << std::endl ; else std::cout << "." << std::endl ; # endif } } # if PRESOLVE_DEBUG > 0 presolve_check_nbasic(prob) ; # endif } # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 presolve_check_threads(prob) ; presolve_check_sol(prob,2,2,2) ; presolve_check_nbasic(prob) ; # if PRESOLVE_DEBUG > 0 std::cout << "Leaving forcing_constraint_action::postsolve." << std::endl ; # endif # endif } forcing_constraint_action::~forcing_constraint_action() { int i ; for (i=0;i #include // ------ CoinFileIOBase ------- CoinFileIOBase::CoinFileIOBase (const std::string &fileName): fileName_ (fileName) {} CoinFileIOBase::~CoinFileIOBase () {} const char *CoinFileIOBase::getFileName () const { return fileName_.c_str (); } // ------------------------------------------------------ // next we implement some subclasses of CoinFileInput // for plain text and compressed files // ------------------------------------------------------ // ------ Input for plain text ------ #include // This reads plain text files class CoinPlainFileInput: public CoinFileInput { public: CoinPlainFileInput (const std::string &fileName): CoinFileInput (fileName), f_ (0) { readType_="plain"; if (fileName!="stdin") { f_ = fopen (fileName.c_str (), "r"); if (f_ == 0) throw CoinError ("Could not open file for reading!", "CoinPlainFileInput", "CoinPlainFileInput"); } else { f_ = stdin; } } virtual ~CoinPlainFileInput () { if (f_ != 0) fclose (f_); } virtual int read (void *buffer, int size) { return static_cast(fread (buffer, 1, size, f_)); } virtual char *gets (char *buffer, int size) { return fgets (buffer, size, f_); } private: FILE *f_; }; // ------ helper class supporting buffered gets ------- // This is a CoinFileInput class to handle cases, where the gets method // is not easy to implement (i.e. bzlib has no equivalent to gets, and // zlib's gzgets is extremely slow). It's subclasses only have to implement // the readRaw method, while the read and gets methods are handled by this // class using an internal buffer. class CoinGetslessFileInput: public CoinFileInput { public: CoinGetslessFileInput (const std::string &fileName): CoinFileInput (fileName), dataBuffer_ (8*1024), dataStart_ (&dataBuffer_[0]), dataEnd_ (&dataBuffer_[0]) {} virtual ~CoinGetslessFileInput () {} virtual int read (void *buffer, int size) { if (size <= 0) return 0; // return value int r = 0; // treat destination as char * char *dest = static_cast(buffer); // First consume data from buffer if available. if (dataStart_ < dataEnd_) { int amount = static_cast(dataEnd_ - dataStart_); if (amount > size) amount = size; CoinMemcpyN( dataStart_, amount, dest); dest += amount; size -= amount; dataStart_ += amount; r = amount; } // If we require more data, use readRaw. // We don't use the buffer here, as readRaw is ecpected to be efficient. if (size > 0) r += readRaw (dest, size); return r; } virtual char *gets (char *buffer, int size) { if (size <= 1) return 0; char *dest = buffer; char *destLast = dest + size - 2; // last position allowed to be written bool initiallyEmpty = (dataStart_ == dataEnd_); for (;;) { // refill dataBuffer if needed if (dataStart_ == dataEnd_) { dataStart_ = dataEnd_ = &dataBuffer_[0]; int count = readRaw (dataStart_, static_cast(dataBuffer_.size ())); // at EOF? if (count <= 0) { *dest = 0; // if it was initially empty we had nothing written and should // return 0, otherwise at least the buffer contents were // transfered and buffer has to be returned. return initiallyEmpty ? 0 : buffer; } dataEnd_ = dataStart_ + count; } // copy character from buffer *dest = *dataStart_++; // terminate, if character was \n or bufferEnd was reached if (*dest == '\n' || dest == destLast) { *++dest = 0; return buffer; } ++dest; } // we should never reach this place throw CoinError ("Reached unreachable code!", "gets", "CoinGetslessFileInput"); } protected: // This should be implemented by the subclasses. It essentially behaves // like fread: the location pointed to by buffer should be filled with // size bytes. Return value is the number of bytes written (0 indicates EOF). virtual int readRaw (void *buffer, int size) = 0; private: std::vector dataBuffer_; // memory used for buffering char *dataStart_; // pointer to currently buffered data char *dataEnd_; // pointer to "one behind last data element" }; // -------- input for gzip compressed files ------- #ifdef COIN_HAS_ZLIB #include // This class handles gzip'ed files using libz. // While zlib offers the gzread and gzgets functions which do all we want, // the gzgets is _very_ slow as it gets single bytes via the complex gzread. // So we use the CoinGetslessFileInput as base. class CoinGzipFileInput: public CoinGetslessFileInput { public: CoinGzipFileInput (const std::string &fileName): CoinGetslessFileInput (fileName), gzf_ (0) { readType_="zlib"; gzf_ = gzopen (fileName.c_str (), "r"); if (gzf_ == 0) throw CoinError ("Could not open file for reading!", "CoinGzipFileInput", "CoinGzipFileInput"); } virtual ~CoinGzipFileInput () { if (gzf_ != 0) gzclose (gzf_); } protected: virtual int readRaw (void *buffer, int size) { return gzread (gzf_, buffer, size); } private: gzFile gzf_; }; #endif // COIN_HAS_ZLIB // ------- input for bzip2 compressed files ------ #ifdef COIN_HAS_BZLIB #include // This class handles files compressed by bzip2 using libbz. // As bzlib has no builtin gets, we use the CoinGetslessFileInput. class CoinBzip2FileInput: public CoinGetslessFileInput { public: CoinBzip2FileInput (const std::string &fileName): CoinGetslessFileInput (fileName), f_ (0), bzf_ (0) { int bzError = BZ_OK; readType_="bzlib"; f_ = fopen (fileName.c_str (), "r"); if (f_ != 0) bzf_ = BZ2_bzReadOpen (&bzError, f_, 0, 0, 0, 0); if (f_ == 0 || bzError != BZ_OK || bzf_ == 0) throw CoinError ("Could not open file for reading!", "CoinBzip2FileInput", "CoinBzip2FileInput"); } virtual ~CoinBzip2FileInput () { int bzError = BZ_OK; if (bzf_ != 0) BZ2_bzReadClose (&bzError, bzf_); if (f_ != 0) fclose (f_); } protected: virtual int readRaw (void *buffer, int size) { int bzError = BZ_OK; int count = BZ2_bzRead (&bzError, bzf_, buffer, size); if (bzError == BZ_OK || bzError == BZ_STREAM_END) return count; // Error? return 0; } private: FILE *f_; BZFILE *bzf_; }; #endif // COIN_HAS_BZLIB // ----- implementation of CoinFileInput's methods /// indicates whether CoinFileInput supports gzip'ed files bool CoinFileInput::haveGzipSupport() { #ifdef COIN_HAS_ZLIB return true; #else return false; #endif } /// indicates whether CoinFileInput supports bzip2'ed files bool CoinFileInput::haveBzip2Support() { #ifdef COIN_HAS_BZLIB return true; #else return false; #endif } CoinFileInput *CoinFileInput::create (const std::string &fileName) { // first try to open file, and read first bytes unsigned char header[4]; size_t count ; // So stdin will be plain file if (fileName!="stdin") { FILE *f = fopen (fileName.c_str (), "r"); if (f == 0) throw CoinError ("Could not open file for reading!", "create", "CoinFileInput"); count = fread (header, 1, 4, f); fclose (f); } else { // Reading from stdin - for moment not compressed count=0 ; // So stdin will be plain file } // gzip files start with the magic numbers 0x1f 0x8b if (count >= 2 && header[0] == 0x1f && header[1] == 0x8b) { #ifdef COIN_HAS_ZLIB return new CoinGzipFileInput (fileName); #else throw CoinError ("Cannot read gzip'ed file because zlib was " "not compiled into COIN!", "create", "CoinFileInput"); #endif } // bzip2 files start with the string "BZh" if (count >= 3 && header[0] == 'B' && header[1] == 'Z' && header[2] == 'h') { #ifdef COIN_HAS_BZLIB return new CoinBzip2FileInput (fileName); #else throw CoinError ("Cannot read bzip2'ed file because bzlib was " "not compiled into COIN!", "create", "CoinFileInput"); #endif } // fallback: probably plain text file return new CoinPlainFileInput (fileName); } CoinFileInput::CoinFileInput (const std::string &fileName): CoinFileIOBase (fileName) {} CoinFileInput::~CoinFileInput () {} // ------------------------------------------------------ // Some subclasses of CoinFileOutput // for plain text and compressed files // ------------------------------------------------------ // -------- CoinPlainFileOutput --------- // Class to handle output to text files without compression. class CoinPlainFileOutput: public CoinFileOutput { public: CoinPlainFileOutput (const std::string &fileName): CoinFileOutput (fileName), f_ (0) { if (fileName == "-" || fileName == "stdout") { f_ = stdout; } else { f_ = fopen (fileName.c_str (), "w"); if (f_ == 0) throw CoinError ("Could not open file for writing!", "CoinPlainFileOutput", "CoinPlainFileOutput"); } } virtual ~CoinPlainFileOutput () { if (f_ != 0 && f_ != stdout) fclose (f_); } virtual int write (const void *buffer, int size) { return static_cast(fwrite (buffer, 1, size, f_)); } // we have something better than the default implementation virtual bool puts (const char *s) { return fputs (s, f_) >= 0; } private: FILE *f_; }; // ------- CoinGzipFileOutput --------- #ifdef COIN_HAS_ZLIB // no need to include the header, as this was done for the input class // Handle output with gzip compression class CoinGzipFileOutput: public CoinFileOutput { public: CoinGzipFileOutput (const std::string &fileName): CoinFileOutput (fileName), gzf_ (0) { gzf_ = gzopen (fileName.c_str (), "w"); if (gzf_ == 0) throw CoinError ("Could not open file for writing!", "CoinGzipFileOutput", "CoinGzipFileOutput"); } virtual ~CoinGzipFileOutput () { if (gzf_ != 0) gzclose (gzf_); } virtual int write (const void * buffer, int size) { return gzwrite (gzf_, const_cast (buffer), size); } // as zlib's gzputs is no more clever than our own, there's // no need to replace the default. private: gzFile gzf_; }; #endif // COIN_HAS_ZLIB // ------- CoinBzip2FileOutput ------- #ifdef COIN_HAS_BZLIB // no need to include the header, as this was done for the input class // Output to bzip2 compressed file class CoinBzip2FileOutput: public CoinFileOutput { public: CoinBzip2FileOutput (const std::string &fileName): CoinFileOutput (fileName), f_ (0), bzf_ (0) { int bzError = BZ_OK; f_ = fopen (fileName.c_str (), "w"); if (f_ != 0) bzf_ = BZ2_bzWriteOpen (&bzError, f_, 9, /* Number of 100k blocks used for compression. Must be between 1 and 9 inclusive. As 9 gives best compression and I guess we can spend some memory, we use it. */ 0, /* verbosity */ 30 /* suggested by bzlib manual */ ); if (f_ == 0 || bzError != BZ_OK || bzf_ == 0) throw CoinError ("Could not open file for writing!", "CoinBzip2FileOutput", "CoinBzip2FileOutput"); } virtual ~CoinBzip2FileOutput () { int bzError = BZ_OK; if (bzf_ != 0) BZ2_bzWriteClose (&bzError, bzf_, 0, 0, 0); if (f_ != 0) fclose (f_); } virtual int write (const void *buffer, int size) { int bzError = BZ_OK; BZ2_bzWrite (&bzError, bzf_, const_cast (buffer), size); return (bzError == BZ_OK) ? size : 0; } private: FILE *f_; BZFILE *bzf_; }; #endif // COIN_HAS_BZLIB // ------- implementation of CoinFileOutput's methods bool CoinFileOutput::compressionSupported (Compression compression) { switch (compression) { case COMPRESS_NONE: return true; case COMPRESS_GZIP: #ifdef COIN_HAS_ZLIB return true; #else return false; #endif case COMPRESS_BZIP2: #ifdef COIN_HAS_BZLIB return true; #else return false; #endif default: return false; } } CoinFileOutput *CoinFileOutput::create (const std::string &fileName, Compression compression) { switch (compression) { case COMPRESS_NONE: return new CoinPlainFileOutput (fileName); case COMPRESS_GZIP: #ifdef COIN_HAS_ZLIB return new CoinGzipFileOutput (fileName); #endif break; case COMPRESS_BZIP2: #ifdef COIN_HAS_BZLIB return new CoinBzip2FileOutput (fileName); #endif break; default: break; } throw CoinError ("Unsupported compression selected!", "create", "CoinFileOutput"); } CoinFileOutput::CoinFileOutput (const std::string &fileName): CoinFileIOBase (fileName) {} CoinFileOutput::~CoinFileOutput () {} bool CoinFileOutput::puts (const char *s) { int len = static_cast(strlen (s)); if (len == 0) return true; return write (s, len) == len; } /* Tests if the given string looks like an absolute path to a file. - unix: string begins with `/' - windows: string begins with `\' or `drv:', where drv is a drive designator. */ bool fileAbsPath (const std::string &path) { const char dirsep = CoinFindDirSeparator() ; // If the first two chars are drive designators then treat it as absolute // path (noone in their right mind would create a file named 'Z:' on unix, // right?...) const size_t len = path.length(); if (len >= 2 && path[1] == ':') { const char ch = path[0]; if (('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z')) { return true; } } return path[0] == dirsep; } /* Tests if file readable and may change name to add compression extension. Here to get ZLIB etc in one place stdin goes by unmolested by all the fussing with file names. We shouldn't close it, either. */ bool fileCoinReadable(std::string & fileName, const std::string &dfltPrefix) { if (fileName != "stdin") { const char dirsep = CoinFindDirSeparator(); std::string directory ; if (dfltPrefix == "") { directory = (dirsep == '/' ? "./" : ".\\") ; } else { directory = dfltPrefix ; if (directory[directory.length()-1] != dirsep) { directory += dirsep ; } } bool absolutePath = fileAbsPath(fileName) ; std::string field = fileName; if (absolutePath) { // nothing to do } else if (field[0]=='~') { char * home_dir = getenv("HOME"); if (home_dir) { std::string home(home_dir); field=field.erase(0,1); fileName = home+field; } else { fileName=field; } } else { fileName = directory+field; } } // I am opening it to make sure not odd FILE *fp; if (strcmp(fileName.c_str(),"stdin")) { fp = fopen ( fileName.c_str(), "r" ); } else { fp = stdin; } #ifdef COIN_HAS_ZLIB if (!fp) { std::string fname = fileName; fname += ".gz"; fp = fopen ( fname.c_str(), "r" ); if (fp) fileName=fname; } #endif #ifdef COIN_HAS_BZLIB if (!fp) { std::string fname = fileName; fname += ".bz2"; fp = fopen ( fname.c_str(), "r" ); if (fp) fileName=fname; } #endif if (!fp) { return false; } else { if (fp != stdin) { fclose(fp); } return true; } } CoinUtils-2.9.10/CoinUtils/src/CoinPresolveMonitor.hpp0000644000076600007660000000662312101104050021352 0ustar coincoin #ifndef CoinPresolveMonitor_H #define CoinPresolveMonitor_H /*! \brief Monitor a row or column for modification The purpose of this class is to monitor a row or column for modifications during presolve and postsolve. Each object can monitor one row or column. The initial copy of the row or column is loaded by the constructor. Each subsequent call to checkAndTell() compares the current state of the row or column with the stored state and reports any modifications. Internally the row or column is held as a CoinPackedVector so that it's possible to follow a row or column through presolve (CoinPresolveMatrix) and postsolve (CoinPostsolveMatrix). Do not underestimate the amount of work required here. Extracting a row from the CoinPostsolve matrix requires a scan of every element in the matrix. That's one scan by the constructor and one scan with every call to modify. But that's precisely why it's virtually impossible to debug presolve without aids. Parameter overloads for CoinPresolveMatrix and CoinPostsolveMatrix are a little clumsy, but not a problem in use. The alternative is to add methods to the CoinPresolveMatrix and CoinPostsolveMatrix classes that will only be used for debugging. That's not too attractive either. */ class CoinPresolveMonitor { public: /*! \brief Default constructor Creates an empty monitor. */ CoinPresolveMonitor() ; /*! \brief Initialise from a CoinPresolveMatrix Load the initial row or column from a CoinPresolveMatrix. Set \p isRow true for a row, false for a column. */ CoinPresolveMonitor(const CoinPresolveMatrix *mtx, bool isRow, int k) ; /*! \brief Initialise from a CoinPostsolveMatrix Load the initial row or column from a CoinPostsolveMatrix. Set \p isRow true for a row, false for a column. */ CoinPresolveMonitor(const CoinPostsolveMatrix *mtx, bool isRow, int k) ; /*! \brief Compare the present row or column against the stored copy and report differences. Load the current row or column from a CoinPresolveMatrix and compare. Differences are printed to std::cout. */ void checkAndTell(const CoinPresolveMatrix *mtx) ; /*! \brief Compare the present row or column against the stored copy and report differences. Load the current row or column from a CoinPostsolveMatrix and compare. Differences are printed to std::cout. */ void checkAndTell(const CoinPostsolveMatrix *mtx) ; private: /// Extract a row from a CoinPresolveMatrix CoinPackedVector *extractRow(int i, const CoinPresolveMatrix *mtx) const ; /// Extract a column from a CoinPresolveMatrix CoinPackedVector *extractCol(int j, const CoinPresolveMatrix *mtx) const ; /// Extract a row from a CoinPostsolveMatrix CoinPackedVector *extractRow(int i, const CoinPostsolveMatrix *mtx) const ; /// Extract a column from a CoinPostsolveMatrix CoinPackedVector *extractCol(int j, const CoinPostsolveMatrix *mtx) const ; /// Worker method underlying the public checkAndTell methods. void checkAndTell(CoinPackedVector *curVec, double lb, double ub) ; /// True to monitor a row, false to monitor a column bool isRow_ ; /// Row or column index int ndx_ ; /*! The original row or column Sorted in increasing order of indices. */ CoinPackedVector *origVec_ ; /// Original row or column lower bound double lb_ ; /// Original row or column upper bound double ub_ ; } ; #endif CoinUtils-2.9.10/CoinUtils/src/CoinAlloc.cpp0000644000076600007660000001065411510461170017243 0ustar coincoin/* $Id: CoinAlloc.cpp 1373 2011-01-03 23:57:44Z lou $ */ // Copyright (C) 2007, 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 "CoinAlloc.hpp" #if (COINUTILS_MEMPOOL_MAXPOOLED >= 0) //============================================================================= CoinMempool::CoinMempool(size_t entry) : #if (COIN_MEMPOOL_SAVE_BLOCKHEADS==1) block_heads_(NULL), block_num_(0), max_block_num_(0), #endif last_block_size_(0), first_free_(NULL), entry_size_(entry) { #if defined(COINUTILS_PTHREADS) && (COINUTILS_PTHREAD == 1) pthread_mutex_init(&mutex_, NULL); #endif assert((entry_size_/COINUTILS_MEMPOOL_ALIGNMENT)*COINUTILS_MEMPOOL_ALIGNMENT == entry_size_); } //============================================================================= CoinMempool::~CoinMempool() { #if (COIN_MEMPOOL_SAVE_BLOCKHEADS==1) for (size_t i = 0; i < block_num_; ++i) { free(block_heads_[i]); } #endif #if defined(COINUTILS_PTHREADS) && (COINUTILS_PTHREAD == 1) pthread_mutex_destroy(&mutex_); #endif } //============================================================================== char* CoinMempool::alloc() { lock_mutex(); if (first_free_ == NULL) { unlock_mutex(); char* block = allocate_new_block(); lock_mutex(); #if (COIN_MEMPOOL_SAVE_BLOCKHEADS==1) // see if we can record another block head. If not, then resize // block_heads if (max_block_num_ == block_num_) { max_block_num_ = 2 * block_num_ + 10; char** old_block_heads = block_heads_; block_heads_ = (char**)malloc(max_block_num_ * sizeof(char*)); CoinMemcpyN( old_block_heads,block_num_,block_heads_); free(old_block_heads); } // save the new block block_heads_[block_num_++] = block; #endif // link in the new block *(char**)(block+((last_block_size_-1)*entry_size_)) = first_free_; first_free_ = block; } char* p = first_free_; first_free_ = *(char**)p; unlock_mutex(); return p; } //============================================================================= char* CoinMempool::allocate_new_block() { last_block_size_ = static_cast(1.5 * last_block_size_ + 32); char* block = static_cast(std::malloc(last_block_size_*entry_size_)); // link the entries in the new block together for (int i = last_block_size_-2; i >= 0; --i) { *(char**)(block+(i*entry_size_)) = block+((i+1)*entry_size_); } // terminate the linked list with a null pointer *(char**)(block+((last_block_size_-1)*entry_size_)) = NULL; return block; } //############################################################################# CoinAlloc CoinAllocator; CoinAlloc::CoinAlloc() : pool_(NULL), maxpooled_(COINUTILS_MEMPOOL_MAXPOOLED) { const char* maxpooled = std::getenv("COINUTILS_MEMPOOL_MAXPOOLED"); if (maxpooled) { maxpooled_ = std::atoi(maxpooled); } const size_t poolnum = maxpooled_ / COINUTILS_MEMPOOL_ALIGNMENT; maxpooled_ = poolnum * COINUTILS_MEMPOOL_ALIGNMENT; if (maxpooled_ > 0) { pool_ = (CoinMempool*)malloc(sizeof(CoinMempool)*poolnum); for (int i = poolnum-1; i >= 0; --i) { new (&pool_[i]) CoinMempool(i*COINUTILS_MEMPOOL_ALIGNMENT); } } } //############################################################################# #if defined(COINUTILS_MEMPOOL_OVERRIDE_NEW) && (COINUTILS_MEMPOOL_OVERRIDE_NEW == 1) void* operator new(std::size_t sz) throw (std::bad_alloc) { return CoinAllocator.alloc(sz); } void* operator new[](std::size_t sz) throw (std::bad_alloc) { return CoinAllocator.alloc(sz); } void operator delete(void* p) throw() { CoinAllocator.dealloc(p); } void operator delete[](void* p) throw() { CoinAllocator.dealloc(p); } void* operator new(std::size_t sz, const std::nothrow_t&) throw() { void *p = NULL; try { p = CoinAllocator.alloc(sz); } catch (std::bad_alloc &ba) { return NULL; } return p; } void* operator new[](std::size_t sz, const std::nothrow_t&) throw() { void *p = NULL; try { p = CoinAllocator.alloc(sz); } catch (std::bad_alloc &ba) { return NULL; } return p; } void operator delete(void* p, const std::nothrow_t&) throw() { CoinAllocator.dealloc(p); } void operator delete[](void* p, const std::nothrow_t&) throw() { CoinAllocator.dealloc(p); } #endif #endif /*(COINUTILS_MEMPOOL_MAXPOOLED >= 0)*/ CoinUtils-2.9.10/CoinUtils/src/CoinMessage.hpp0000644000076600007660000000430511544613261017605 0ustar coincoin/* $Id: CoinMessage.hpp 1411 2011-03-30 11:40:33Z forrest $ */ // 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). #ifndef CoinMessage_H #define CoinMessage_H #if defined(_MSC_VER) // Turn off compiler warning about long names # pragma warning(disable:4786) #endif /*! \file This file contains the enum for the standard set of Coin messages and a class definition whose sole purpose is to supply a constructor. The text ot the messages is defined in CoinMessage.cpp, CoinMessageHandler.hpp contains the generic facilities for message handling. */ #include "CoinMessageHandler.hpp" /*! \brief Symbolic names for the standard set of COIN messages */ enum COIN_Message { COIN_MPS_LINE=0, COIN_MPS_STATS, COIN_MPS_ILLEGAL, COIN_MPS_BADIMAGE, COIN_MPS_DUPOBJ, COIN_MPS_DUPROW, COIN_MPS_NOMATCHROW, COIN_MPS_NOMATCHCOL, COIN_MPS_FILE, COIN_MPS_BADFILE1, COIN_MPS_BADFILE2, COIN_MPS_EOF, COIN_MPS_RETURNING, COIN_MPS_CHANGED, COIN_SOLVER_MPS, COIN_PRESOLVE_COLINFEAS, COIN_PRESOLVE_ROWINFEAS, COIN_PRESOLVE_COLUMNBOUNDA, COIN_PRESOLVE_COLUMNBOUNDB, COIN_PRESOLVE_NONOPTIMAL, COIN_PRESOLVE_STATS, COIN_PRESOLVE_INFEAS, COIN_PRESOLVE_UNBOUND, COIN_PRESOLVE_INFEASUNBOUND, COIN_PRESOLVE_INTEGERMODS, COIN_PRESOLVE_POSTSOLVE, COIN_PRESOLVE_NEEDS_CLEANING, COIN_PRESOLVE_PASS, # if PRESOLVE_DEBUG COIN_PRESOLDBG_FIRSTCHECK, COIN_PRESOLDBG_RCOSTACC, COIN_PRESOLDBG_RCOSTSTAT, COIN_PRESOLDBG_STATSB, COIN_PRESOLDBG_DUALSTAT, # endif COIN_GENERAL_INFO, COIN_GENERAL_WARNING, COIN_DUMMY_END }; /*! \class CoinMessage \brief The standard set of Coin messages This class provides convenient access to the standard set of Coin messages. In a nutshell, it's a CoinMessages object with a constructor that preloads the standard Coin messages. */ class CoinMessage : public CoinMessages { public: /**@name Constructors etc */ //@{ /*! \brief Constructor Build a CoinMessages object and load it with the standard set of Coin messages. */ CoinMessage(Language language=us_en); //@} }; #endif CoinUtils-2.9.10/CoinUtils/src/Makefile.in0000644000076600007660000007761412240310440016744 0ustar coincoin# 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 $(srcdir)/config.h.in \ $(srcdir)/config_coinutils.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_coinutils.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) libCoinUtils_la_LIBADD = am_libCoinUtils_la_OBJECTS = CoinAlloc.lo CoinBuild.lo \ CoinDenseVector.lo CoinError.lo CoinFactorization1.lo \ CoinFactorization2.lo CoinFactorization3.lo \ CoinFactorization4.lo CoinSimpFactorization.lo \ CoinDenseFactorization.lo CoinOslFactorization.lo \ CoinOslFactorization2.lo CoinOslFactorization3.lo \ CoinFileIO.lo CoinFinite.lo CoinIndexedVector.lo CoinLpIO.lo \ CoinMessage.lo CoinMessageHandler.lo CoinModel.lo \ CoinStructuredModel.lo CoinModelUseful.lo CoinModelUseful2.lo \ CoinMpsIO.lo CoinPackedMatrix.lo CoinPackedVector.lo \ CoinPackedVectorBase.lo CoinParam.lo CoinParamUtils.lo \ CoinPostsolveMatrix.lo CoinPrePostsolveMatrix.lo \ CoinPresolveDoubleton.lo CoinPresolveDual.lo \ CoinPresolveDupcol.lo CoinPresolveEmpty.lo \ CoinPresolveFixed.lo CoinPresolveForcing.lo \ CoinPresolveHelperFunctions.lo CoinPresolveImpliedFree.lo \ CoinPresolveIsolated.lo CoinPresolveMatrix.lo \ CoinPresolvePsdebug.lo CoinPresolveMonitor.lo \ CoinPresolveSingleton.lo CoinPresolveSubst.lo \ CoinPresolveTighten.lo CoinPresolveTripleton.lo \ CoinPresolveUseless.lo CoinPresolveZeros.lo CoinSearchTree.lo \ CoinShallowPackedVector.lo CoinSnapshot.lo \ CoinWarmStartBasis.lo CoinWarmStartVector.lo \ CoinWarmStartDual.lo CoinWarmStartPrimalDual.lo libCoinUtils_la_OBJECTS = $(am_libCoinUtils_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 = $(libCoinUtils_la_SOURCES) DIST_SOURCES = $(libCoinUtils_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@ ADD_FFLAGS = @ADD_FFLAGS@ 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@ BLAS_CFLAGS = @BLAS_CFLAGS@ BLAS_CFLAGS_INSTALLED = @BLAS_CFLAGS_INSTALLED@ BLAS_DATA = @BLAS_DATA@ BLAS_DATA_INSTALLED = @BLAS_DATA_INSTALLED@ BLAS_DEPENDENCIES = @BLAS_DEPENDENCIES@ BLAS_LIBS = @BLAS_LIBS@ BLAS_LIBS_INSTALLED = @BLAS_LIBS_INSTALLED@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILSLIB_CFLAGS = @COINUTILSLIB_CFLAGS@ COINUTILSLIB_CFLAGS_INSTALLED = @COINUTILSLIB_CFLAGS_INSTALLED@ COINUTILSLIB_DEPENDENCIES = @COINUTILSLIB_DEPENDENCIES@ COINUTILSLIB_LIBS = @COINUTILSLIB_LIBS@ COINUTILSLIB_LIBS_INSTALLED = @COINUTILSLIB_LIBS_INSTALLED@ COINUTILSLIB_PCLIBS = @COINUTILSLIB_PCLIBS@ COINUTILSLIB_PCREQUIRES = @COINUTILSLIB_PCREQUIRES@ COINUTILS_SVN_REV = @COINUTILS_SVN_REV@ 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_BLAS_FALSE = @COIN_HAS_BLAS_FALSE@ COIN_HAS_BLAS_TRUE = @COIN_HAS_BLAS_TRUE@ COIN_HAS_GLPK_FALSE = @COIN_HAS_GLPK_FALSE@ COIN_HAS_GLPK_TRUE = @COIN_HAS_GLPK_TRUE@ COIN_HAS_LAPACK_FALSE = @COIN_HAS_LAPACK_FALSE@ COIN_HAS_LAPACK_TRUE = @COIN_HAS_LAPACK_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_ZLIB_FALSE = @COIN_HAS_ZLIB_FALSE@ COIN_HAS_ZLIB_TRUE = @COIN_HAS_ZLIB_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@ 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@ FLIBS = @FLIBS@ 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@ 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@ LAPACK_CFLAGS = @LAPACK_CFLAGS@ LAPACK_CFLAGS_INSTALLED = @LAPACK_CFLAGS_INSTALLED@ LAPACK_DATA = @LAPACK_DATA@ LAPACK_DATA_INSTALLED = @LAPACK_DATA_INSTALLED@ LAPACK_DEPENDENCIES = @LAPACK_DEPENDENCIES@ LAPACK_LIBS = @LAPACK_LIBS@ LAPACK_LIBS_INSTALLED = @LAPACK_LIBS_INSTALLED@ 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@ 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@ 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@ 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@ 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@ 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 ######################################################################## # libCoinUtils # ######################################################################## # Name of the library compiled in this directory. # We want it to be installed in the $libdir directory lib_LTLIBRARIES = libCoinUtils.la # List all source files for this library, including headers libCoinUtils_la_SOURCES = \ config_coinutils.h \ CoinUtilsConfig.h \ Coin_C_defines.h \ CoinAlloc.cpp CoinAlloc.hpp \ CoinBuild.cpp CoinBuild.hpp \ CoinDenseVector.cpp CoinDenseVector.hpp \ CoinDistance.hpp \ CoinError.cpp CoinError.hpp \ CoinFactorization.hpp \ CoinFactorization1.cpp \ CoinFactorization2.cpp \ CoinFactorization3.cpp \ CoinFactorization4.cpp \ CoinSimpFactorization.hpp \ CoinSimpFactorization.cpp \ CoinDenseFactorization.hpp \ CoinDenseFactorization.cpp \ CoinOslFactorization.hpp \ CoinOslFactorization.cpp \ CoinOslFactorization2.cpp \ CoinOslFactorization3.cpp \ CoinOslC.h \ CoinFileIO.cpp CoinFileIO.hpp \ CoinFinite.cpp CoinFinite.hpp \ CoinFloatEqual.hpp \ CoinHelperFunctions.hpp \ CoinIndexedVector.cpp CoinIndexedVector.hpp \ CoinLpIO.cpp CoinLpIO.hpp \ CoinMessage.cpp CoinMessage.hpp \ CoinMessageHandler.cpp CoinMessageHandler.hpp \ CoinModel.cpp CoinModel.hpp \ CoinStructuredModel.cpp CoinStructuredModel.hpp \ CoinModelUseful.cpp CoinModelUseful.hpp \ CoinModelUseful2.cpp \ CoinMpsIO.cpp CoinMpsIO.hpp \ CoinPackedMatrix.cpp CoinPackedMatrix.hpp \ CoinPackedVector.cpp CoinPackedVector.hpp \ CoinPackedVectorBase.cpp CoinPackedVectorBase.hpp \ CoinParam.cpp CoinParamUtils.cpp CoinParam.hpp \ CoinPostsolveMatrix.cpp \ CoinPragma.hpp \ CoinPrePostsolveMatrix.cpp \ CoinPresolveDoubleton.cpp CoinPresolveDoubleton.hpp \ CoinPresolveDual.cpp CoinPresolveDual.hpp \ CoinPresolveDupcol.cpp CoinPresolveDupcol.hpp \ CoinPresolveEmpty.cpp CoinPresolveEmpty.hpp \ CoinPresolveFixed.cpp CoinPresolveFixed.hpp \ CoinPresolveForcing.cpp CoinPresolveForcing.hpp \ CoinPresolveHelperFunctions.cpp \ CoinPresolveImpliedFree.cpp CoinPresolveImpliedFree.hpp \ CoinPresolveIsolated.cpp CoinPresolveIsolated.hpp \ CoinPresolveMatrix.cpp CoinPresolveMatrix.hpp \ CoinPresolvePsdebug.cpp CoinPresolvePsdebug.hpp \ CoinPresolveMonitor.cpp CoinPresolveMonitor.hpp \ CoinPresolveSingleton.cpp CoinPresolveSingleton.hpp \ CoinPresolveSubst.cpp CoinPresolveSubst.hpp \ CoinPresolveTighten.cpp CoinPresolveTighten.hpp \ CoinPresolveTripleton.cpp CoinPresolveTripleton.hpp \ CoinPresolveUseless.cpp CoinPresolveUseless.hpp \ CoinPresolveZeros.cpp CoinPresolveZeros.hpp \ CoinSearchTree.cpp CoinSearchTree.hpp \ CoinShallowPackedVector.cpp CoinShallowPackedVector.hpp \ CoinSignal.hpp \ CoinSmartPtr.hpp \ CoinSnapshot.cpp CoinSnapshot.hpp \ CoinSort.hpp \ CoinTime.hpp \ CoinTypes.hpp \ CoinUtility.hpp \ CoinWarmStart.hpp \ CoinWarmStartBasis.cpp CoinWarmStartBasis.hpp \ CoinWarmStartVector.cpp CoinWarmStartVector.hpp \ CoinWarmStartDual.cpp CoinWarmStartDual.hpp \ CoinWarmStartPrimalDual.cpp CoinWarmStartPrimalDual.hpp # This is for libtool libCoinUtils_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 = $(GLPK_CFLAGS) # This line is necessary to allow VPATH compilation 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 'install/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = \ Coin_C_defines.h \ CoinAlloc.hpp \ CoinBuild.hpp \ CoinDenseVector.hpp \ CoinDistance.hpp \ CoinError.hpp \ CoinFactorization.hpp \ CoinSimpFactorization.hpp \ CoinDenseFactorization.hpp \ CoinOslFactorization.hpp \ CoinFileIO.hpp \ CoinFinite.hpp \ CoinFloatEqual.hpp \ CoinHelperFunctions.hpp \ CoinIndexedVector.hpp \ CoinLpIO.hpp \ CoinMessage.hpp \ CoinMessageHandler.hpp \ CoinModel.hpp \ CoinStructuredModel.hpp \ CoinModelUseful.hpp \ CoinMpsIO.hpp \ CoinPackedMatrix.hpp \ CoinPackedVector.hpp \ CoinPackedVectorBase.hpp \ CoinParam.hpp \ CoinPragma.hpp \ CoinPresolveDoubleton.hpp \ CoinPresolveDual.hpp \ CoinPresolveDupcol.hpp \ CoinPresolveEmpty.hpp \ CoinPresolveFixed.hpp \ CoinPresolveForcing.hpp \ CoinPresolveImpliedFree.hpp \ CoinPresolveIsolated.hpp \ CoinPresolveMatrix.hpp \ CoinPresolveMonitor.hpp \ CoinPresolvePsdebug.hpp \ CoinPresolveSingleton.hpp \ CoinPresolveSubst.hpp \ CoinPresolveTighten.hpp \ CoinPresolveTripleton.hpp \ CoinPresolveUseless.hpp \ CoinPresolveZeros.hpp \ CoinSearchTree.hpp \ CoinShallowPackedVector.hpp \ CoinSignal.hpp \ CoinSmartPtr.hpp \ CoinSnapshot.hpp \ CoinSort.hpp \ CoinTime.hpp \ CoinTypes.hpp \ CoinUtility.hpp \ CoinWarmStart.hpp \ CoinWarmStartBasis.hpp \ CoinWarmStartVector.hpp \ CoinWarmStartDual.hpp \ CoinWarmStartPrimalDual.hpp all: config.h config_coinutils.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/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 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/config.h $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_srcdir) && $(AUTOHEADER) rm -f stamp-h1 touch $@ config_coinutils.h: stamp-h2 @if test ! -f $@; then \ rm -f stamp-h2; \ $(MAKE) stamp-h2; \ else :; fi stamp-h2: $(srcdir)/config_coinutils.h.in $(top_builddir)/config.status @rm -f stamp-h2 cd $(top_builddir) && $(SHELL) ./config.status src/config_coinutils.h distclean-hdr: -rm -f config.h stamp-h1 config_coinutils.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 libCoinUtils.la: $(libCoinUtils_la_OBJECTS) $(libCoinUtils_la_DEPENDENCIES) $(CXXLINK) -rpath $(libdir) $(libCoinUtils_la_LDFLAGS) $(libCoinUtils_la_OBJECTS) $(libCoinUtils_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinAlloc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinBuild.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinDenseFactorization.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinDenseVector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinError.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinFactorization1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinFactorization2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinFactorization3.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinFactorization4.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinFileIO.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinFinite.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinIndexedVector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinLpIO.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinMessage.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinMessageHandler.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinModel.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinModelUseful.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinModelUseful2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinMpsIO.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinOslFactorization.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinOslFactorization2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinOslFactorization3.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPackedMatrix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPackedVector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPackedVectorBase.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinParam.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinParamUtils.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPostsolveMatrix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPrePostsolveMatrix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolveDoubleton.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolveDual.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolveDupcol.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolveEmpty.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolveFixed.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolveForcing.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolveHelperFunctions.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolveImpliedFree.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolveIsolated.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolveMatrix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolveMonitor.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolvePsdebug.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolveSingleton.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolveSubst.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolveTighten.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolveTripleton.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolveUseless.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolveZeros.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinSearchTree.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinShallowPackedVector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinSimpFactorization.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinSnapshot.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinStructuredModel.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinWarmStartBasis.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinWarmStartDual.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinWarmStartPrimalDual.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinWarmStartVector.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_coinutils.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in config_coinutils.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_coinutils.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in config_coinutils.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_coinutils.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 ####################################################################### # Create the Config.h file that has all public defines and install it # ####################################################################### install-exec-local: $(install_sh_DATA) config_coinutils.h $(DESTDIR)$(includecoindir)/CoinUtilsConfig.h uninstall-local: rm -f $(DESTDIR)$(includecoindir)/CoinUtilsConfig.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: CoinUtils-2.9.10/CoinUtils/src/CoinMessage.cpp0000644000076600007660000001051011773031174017574 0ustar coincoin/* $Id: CoinMessage.cpp 1540 2012-06-28 10:31:24Z forrest $ */ // 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). #if defined(_MSC_VER) // Turn off compiler warning about long names # pragma warning(disable:4786) #endif #include "CoinPragma.hpp" #include "CoinMessage.hpp" #include "CoinError.hpp" typedef struct { COIN_Message internalNumber; int externalNumber; // or continuation char detail; const char * message; } Coin_message; static Coin_message us_english[]= { {COIN_MPS_LINE,1,1,"At line %d %s"}, {COIN_MPS_STATS,2,1,"Problem %s has %d rows, %d columns and %d elements"}, {COIN_MPS_ILLEGAL,3001,0,"Illegal value for %s of %g"}, {COIN_MPS_BADIMAGE,3002,0,"Bad image at line %d < %s >"}, {COIN_MPS_DUPOBJ,3003,0,"Duplicate objective at line %d < %s >"}, {COIN_MPS_DUPROW,3004,0,"Duplicate row %s at line %d < %s >"}, {COIN_MPS_NOMATCHROW,3005,0,"No match for row %s at line %d < %s >"}, {COIN_MPS_NOMATCHCOL,3006,0,"No match for column %s at line %d < %s >"}, {COIN_MPS_FILE,6001,0,"Unable to open mps input file %s"}, {COIN_MPS_BADFILE1,6002,0,"Unknown image %s at line %d of file %s"}, {COIN_MPS_BADFILE2,6003,0,"Consider the possibility of a compressed file\ which %s is unable to read"}, {COIN_MPS_EOF,6004,0,"EOF on file %s"}, {COIN_MPS_RETURNING,6005,0,"Returning as too many errors"}, {COIN_MPS_CHANGED,3007,1,"Generated %s names had duplicates - %d changed"}, {COIN_SOLVER_MPS,8,1,"%s read with %d errors"}, {COIN_PRESOLVE_COLINFEAS,501,2,"Problem is infeasible due to column %d, %.16g %.16g"}, {COIN_PRESOLVE_ROWINFEAS,502,2,"Problem is infeasible due to row %d, %.16g %.16g"}, {COIN_PRESOLVE_COLUMNBOUNDA,503,2,"Problem looks unbounded above due to column %d, %g %g"}, {COIN_PRESOLVE_COLUMNBOUNDB,504,2,"Problem looks unbounded below due to column %d, %g %g"}, {COIN_PRESOLVE_NONOPTIMAL,505,1,"Presolved problem not optimal, resolve after postsolve"}, {COIN_PRESOLVE_STATS,506,1,"Presolve %d (%d) rows, %d (%d) columns and %d (%d) elements"}, {COIN_PRESOLVE_INFEAS,507,1,"Presolve determined that the problem was infeasible with tolerance of %g"}, {COIN_PRESOLVE_UNBOUND,508,1,"Presolve thinks problem is unbounded"}, {COIN_PRESOLVE_INFEASUNBOUND,509,1,"Presolve thinks problem is infeasible AND unbounded???"}, {COIN_PRESOLVE_INTEGERMODS,510,1,"Presolve is modifying %d integer bounds and re-presolving"}, {COIN_PRESOLVE_POSTSOLVE,511,1,"After Postsolve, objective %g, infeasibilities - dual %g (%d), primal %g (%d)"}, {COIN_PRESOLVE_NEEDS_CLEANING,512,1,"Presolved model was optimal, full model needs cleaning up"}, {COIN_PRESOLVE_PASS,513,3,"%d rows dropped after presolve pass %d"}, # if PRESOLVE_DEBUG { COIN_PRESOLDBG_FIRSTCHECK,514,3,"First occurrence of %s checks." }, { COIN_PRESOLDBG_RCOSTACC,515,3, "rcost[%d] = %g should be %g |diff| = %g." }, { COIN_PRESOLDBG_RCOSTSTAT,516,3, "rcost[%d] = %g inconsistent with status %s (%s)." }, { COIN_PRESOLDBG_STATSB,517,3, "status[%d] = %s rcost = %g lb = %g val = %g ub = %g." }, { COIN_PRESOLDBG_DUALSTAT,518,3, "dual[%d] = %g inconsistent with status %s (%s)." }, # endif {COIN_GENERAL_INFO,9,1,"%s"}, {COIN_GENERAL_WARNING,3007,1,"%s"}, {COIN_DUMMY_END,999999,0,""} }; // **** aiutami! static Coin_message italian[]= { {COIN_MPS_LINE,1,1,"al numero %d %s"}, {COIN_MPS_STATS,2,1,"matrice %s ha %d file, %d colonne and %d elementi (diverso da zero)"}, {COIN_DUMMY_END,999999,0,""} }; /* Constructor */ CoinMessage::CoinMessage(Language language) : CoinMessages(sizeof(us_english)/sizeof(Coin_message)) { language_=language; strcpy(source_,"Coin"); class_= 2; // Coin Coin_message * message = us_english; while (message->internalNumber!=COIN_DUMMY_END) { CoinOneMessage oneMessage(message->externalNumber,message->detail, message->message); addMessage(message->internalNumber,oneMessage); message ++; } // Put into compact form toCompact(); // now override any language ones switch (language) { case it: message = italian; break; default: message=NULL; break; } // replace if any found if (message) { while (message->internalNumber!=COIN_DUMMY_END) { replaceMessage(message->internalNumber,message->message); message ++; } } } CoinUtils-2.9.10/CoinUtils/src/CoinPresolveTighten.cpp0000644000076600007660000003426611670767350021360 0ustar coincoin/* $Id: CoinPresolveTighten.cpp 1518 2011-12-10 23:44:40Z lou $ */ // 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). #include #include #include "CoinPresolveMatrix.hpp" #include "CoinPresolveFixed.hpp" #include "CoinPresolveTighten.hpp" #include "CoinPresolveUseless.hpp" #include "CoinHelperFunctions.hpp" #include "CoinFinite.hpp" #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #include "CoinPresolvePsdebug.hpp" #endif const char *do_tighten_action::name() const { return ("do_tighten_action"); } /* This is ekkredc2. This fairly simple transformation is not mentioned in the paper. Say there is a costless variable x such that all the constraints it's entangled with (i.e., a != 0) would be satisfied as it approaches plus or minus infinity, because all its constraints have only one bound, and increasing/decreasing the variable makes the row activity grow away from the bound (in the right direction). If x is unbounded in that direction, it can always be made large enough to satisfy the constraints, so we can just drop the variable and the entangled constraints from the problem. If x *is* bounded in that direction, there is no reason not to set it to that bound. This effectively weakens the constraints, which in fact may be subsequently presolved away. Note that none of the constraints may be bounded both above and below, since then we don't know which way to move the variable in order to satisfy the constraint. To drop constraints, we just make them useless and let other transformations take care of the rest. Note that more than one such costless unbounded variable may be part of a given constraint. In that case, the first one processed will make the constraint useless, and the second will ignore it. In postsolve, the first will be responsible for satisfying the constraint. Note that if the constraints are dropped (as in the first case), then we just make them useless. It will subsequently be discovered the the variable does not appear in any constraints, and since it has no cost it is just set to some value (either zero or a bound) and removed (by remove_empty_cols). Oddly, pilots and baxter do *worse* when this transform is applied. It's informative to compare this transform to the very similar transform implemented in remove_dual_action. Surely they could be merged. */ const CoinPresolveAction *do_tighten_action::presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next) { double *colels = prob->colels_; int *hrow = prob->hrow_; CoinBigIndex *mcstrt = prob->mcstrt_; int *hincol = prob->hincol_; int ncols = prob->ncols_; double *clo = prob->clo_; double *cup = prob->cup_; double *rlo = prob->rlo_; double *rup = prob->rup_; double *dcost = prob->cost_; const unsigned char *integerType = prob->integerType_; int *fix_cols = prob->usefulColumnInt_; int nfixup_cols = 0; int nfixdown_cols = ncols; int *useless_rows = prob->usefulRowInt_; int nuseless_rows = 0; action *actions = new action [ncols]; int nactions = 0; int numberLook = prob->numberColsToDo_; int iLook; int * look = prob->colsToDo_; bool fixInfeasibility = ((prob->presolveOptions_&0x4000) != 0) ; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 # if PRESOLVE_DEBUG > 0 std::cout << "Entering do_tighten_action::presolve; considering " << numberLook << " rows." << std::endl ; # endif presolve_consistent(prob) ; presolve_links_ok(prob) ; presolve_check_sol(prob) ; presolve_check_nbasic(prob) ; # endif # if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 int startEmptyRows = 0 ; int startEmptyColumns = 0 ; startEmptyRows = prob->countEmptyRows() ; startEmptyColumns = prob->countEmptyCols() ; # if COIN_PRESOLVE_TUNING > 0 double startTime = 0.0; if (prob->tuning_) startTime = CoinCpuTime() ; # endif # endif // singleton columns are especially likely to be caught here for (iLook=0;iLookcup[j]&&!fixInfeasibility) { // infeasible prob->status_|= 1; prob->messageHandler()->message(COIN_PRESOLVE_COLINFEAS, prob->messages()) < ZTOLDP); // see what this particular row says // jflag == 1 ==> up is towards feasibility int jflag = (coeff > 0.0 ? (rub > 1.0e28 ? 1 : -1) : (rlb < -1.0e28 ? 1 : -1)); if (iflag) { // check that it agrees with iflag. if (iflag!=jflag) { iflag=0; break; } } else { // first row -- initialize iflag iflag=jflag; } } // done checking constraints if (!nonFree) iflag=0; // all free anyway if (iflag) { if (iflag==1 && cup[j]<1.0e10) { #if PRESOLVE_DEBUG > 1 printf("TIGHTEN UP: %d\n", j); #endif fix_cols[nfixup_cols++] = j; } else if (iflag==-1&&clo[j]>-1.0e10) { // symmetric case //mpre[j] = PRESOLVE_XUP; #if PRESOLVE_DEBUG > 1 printf("TIGHTEN DOWN: %d\n", j); #endif fix_cols[--nfixdown_cols] = j; } else { #if 0 static int limit; static int which = atoi(getenv("WZ")); if (which == -1) ; else if (limit != which) { limit++; continue; } else limit++; printf("TIGHTEN STATS %d %g %g %d: \n", j, clo[j], cup[j], integerType[j]); double *rowels = prob->rowels_; int *hcol = prob->hcol_; int *mrstrt = prob->mrstrt_; int *hinrow = prob->hinrow_; for (CoinBigIndex k=kcs; kcol = j; PRESOLVE_DETAIL_PRINT(printf("pre_tighten %dC E\n",j)); if (integerType[j]) { assert (iflag==-1||iflag==1); iflag *= 2; // say integer } s->direction = iflag; s->rows = new int[hincol[j]]; s->lbound = new double[hincol[j]]; s->ubound = new double[hincol[j]]; #if PRESOLVE_DEBUG > 1 printf("TIGHTEN FREE: %d ", j); #endif int nr = 0; prob->addCol(j); for (CoinBigIndex k=kcs; kaddRow(irow); s->rows [nr] = irow; s->lbound[nr] = rlo[irow]; s->ubound[nr] = rup[irow]; nr++; useless_rows[nuseless_rows++] = irow; rlo[irow] = -PRESOLVE_INF; rup[irow] = PRESOLVE_INF; #if PRESOLVE_DEBUG > 1 printf("%d ", irow); #endif } } s->nrows = nr; #if PRESOLVE_DEBUG > 1 printf("\n"); #endif } } } } } #if PRESOLVE_SUMMARY > 0 if (nfixdown_cols 0 if (prob->tuning_) double thisTime = CoinCpuTime() ; # endif # if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 presolve_check_sol(prob) ; # endif # if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 int droppedRows = prob->countEmptyRows()-startEmptyRows ; int droppedColumns = prob->countEmptyCols()-startEmptyColumns ; std::cout << "Leaving do_tighten_action::presolve, " << droppedRows << " rows, " << droppedColumns << " columns dropped" ; # if COIN_PRESOLVE_TUNING > 0 std::cout << " in " << thisTime-startTime << "s" ; # endif std::cout << "." << std::endl ; # endif return (next); } void do_tighten_action::postsolve(CoinPostsolveMatrix *prob) const { const action *const actions = actions_; const int nactions = nactions_; double *colels = prob->colels_; int *hrow = prob->hrow_; CoinBigIndex *mcstrt = prob->mcstrt_; int *hincol = prob->hincol_; int *link = prob->link_; double *clo = prob->clo_; double *cup = prob->cup_; double *rlo = prob->rlo_; double *rup = prob->rup_; double *sol = prob->sol_; double *acts = prob->acts_; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 char *cdone = prob->cdone_; char *rdone = prob->rdone_; presolve_check_threads(prob) ; presolve_check_sol(prob,2,2,2) ; presolve_check_nbasic(prob) ; # if PRESOLVE_DEBUG > 0 std::cout << "Entering do_tighten_action::postsolve." << std::endl ; # endif # endif for (const action *f = &actions[nactions-1]; actions<=f; f--) { int jcol = f->col; int iflag = f->direction; int nr = f->nrows; const int *rows = f->rows; const double *lbound = f->lbound; const double *ubound = f->ubound; PRESOLVEASSERT(prob->getColumnStatus(jcol)!=CoinPrePostsolveMatrix::basic); int i; for (i=0;igetRowStatus(irow)==CoinPrePostsolveMatrix::basic); } // We have just tightened the row bounds. // That means we'll have to compute a new value // for this variable that will satisfy everybody. // We are supposed to be in a position where this // is always possible. // Each constraint has exactly one bound. // The correction should only ever be forced to move in one direction. // double orig_sol = sol[jcol]; double correction = 0.0; int last_corrected = -1; CoinBigIndex k = mcstrt[jcol]; int nk = hincol[jcol]; for (i=0; i newrup) ); last_corrected = irow; // adjust to just meet newrlo (solve for correction) double new_correction = (newrlo - activity) / coeff; //adjust if integer if (iflag==-2||iflag==2) { new_correction += sol[jcol]; if (fabs(floor(new_correction+0.5)-new_correction)>1.0e-4) { new_correction = ceil(new_correction)-sol[jcol]; #ifdef COIN_DEVELOP printf("integer postsolve changing correction from %g to %g - flag %d\n", (newrlo-activity)/coeff,new_correction,iflag); #endif } } correction = new_correction; } else if (activity + correction * coeff > newrup) { last_corrected = irow; double new_correction = (newrup - activity) / coeff; //adjust if integer if (iflag==-2||iflag==2) { new_correction += sol[jcol]; if (fabs(floor(new_correction+0.5)-new_correction)>1.0e-4) { new_correction = ceil(new_correction)-sol[jcol]; #ifdef COIN_DEVELOP printf("integer postsolve changing correction from %g to %g - flag %d\n", (newrup-activity)/coeff,new_correction,iflag); #endif } } correction = new_correction; } } if (last_corrected>=0) { sol[jcol] += correction; // by construction, the last row corrected (if there was one) // must be at its bound, so it can be non-basic. // All other rows may not be at a bound (but may if the difference // is very small, causing a new correction by a tiny amount). // now adjust the activities k = mcstrt[jcol]; for (i=0; i ZTOLDP && fabs(sol[jcol]-cup[jcol]) > ZTOLDP) { prob->setColumnStatus(jcol,CoinPrePostsolveMatrix::basic); if (acts[last_corrected]-rlo[last_corrected] < rup[last_corrected]-acts[last_corrected]) prob->setRowStatus(last_corrected, CoinPrePostsolveMatrix::atUpperBound); else prob->setRowStatus(last_corrected, CoinPrePostsolveMatrix::atLowerBound); } } } # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 presolve_check_threads(prob) ; presolve_check_sol(prob,2,2,2) ; presolve_check_nbasic(prob) ; # if PRESOLVE_DEBUG > 0 std::cout << "Leaving do_tighten_action::postsolve." << std::endl ; # endif # endif } do_tighten_action::~do_tighten_action() { if (nactions_ > 0) { for (int i = nactions_ - 1; i >= 0; --i) { delete[] actions_[i].rows; delete[] actions_[i].lbound; delete[] actions_[i].ubound; } deleteAction(actions_, action*); } } CoinUtils-2.9.10/CoinUtils/src/CoinModelUseful.cpp0000644000076600007660000011402112130104232020416 0ustar coincoin/* $Id: CoinModelUseful.cpp 1585 2013-04-06 20:42:02Z 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 "CoinPragma.hpp" #include #include #include #include #include #include #include #include "CoinHelperFunctions.hpp" #include "CoinModelUseful.hpp" //############################################################################# // Constructors / Destructor / Assignment //############################################################################# //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- CoinModelLink::CoinModelLink () : row_(-1), column_(-1), value_(0.0), position_(-1), onRow_(true) { } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- CoinModelLink::CoinModelLink (const CoinModelLink & rhs) : row_(rhs.row_), column_(rhs.column_), value_(rhs.value_), position_(rhs.position_), onRow_(rhs.onRow_) { } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- CoinModelLink::~CoinModelLink () { } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- CoinModelLink & CoinModelLink::operator=(const CoinModelLink& rhs) { if (this != &rhs) { row_ = rhs.row_; column_ = rhs.column_; value_ = rhs.value_; position_ = rhs.position_; onRow_ = rhs.onRow_; } return *this; } namespace { const int mmult[] = { 262139, 259459, 256889, 254291, 251701, 249133, 246709, 244247, 241667, 239179, 236609, 233983, 231289, 228859, 226357, 223829, 221281, 218849, 216319, 213721, 211093, 208673, 206263, 203773, 201233, 198637, 196159, 193603, 191161, 188701, 186149, 183761, 181303, 178873, 176389, 173897, 171469, 169049, 166471, 163871, 161387, 158941, 156437, 153949, 151531, 149159, 146749, 144299, 141709, 139369, 136889, 134591, 132169, 129641, 127343, 124853, 122477, 120163, 117757, 115361, 112979, 110567, 108179, 105727, 103387, 101021, 98639, 96179, 93911, 91583, 89317, 86939, 84521, 82183, 79939, 77587, 75307, 72959, 70793, 68447, 66103 }; const int lengthMult = static_cast (sizeof(mmult) / sizeof(int)); } //############################################################################# // Constructors / Destructor / Assignment //############################################################################# //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- CoinModelHash::CoinModelHash () : names_(NULL), hash_(NULL), numberItems_(0), maximumItems_(0), lastSlot_(-1) { } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- CoinModelHash::CoinModelHash (const CoinModelHash & rhs) : names_(NULL), hash_(NULL), numberItems_(rhs.numberItems_), maximumItems_(rhs.maximumItems_), lastSlot_(rhs.lastSlot_) { if (maximumItems_) { names_ = new char * [maximumItems_]; for (int i=0;i=0&&number<=numberItems_); numberItems_=number; } // Resize hash (also re-hashs) void CoinModelHash::resize(int maxItems,bool forceReHash) { assert (numberItems_<=maximumItems_); if (maxItems<=maximumItems_&&!forceReHash) return; int n=maximumItems_; maximumItems_=maxItems; char ** names = new char * [maximumItems_]; int i; for ( i=0;i numberItems_ ) { printf ( "** too many names\n" ); abort(); break; } if ( hash_[lastSlot_].index == -1 ) { break; } } hash_[ipos].next = lastSlot_; hash_[lastSlot_].index = i; break; } else { ipos = k; /* nothing worked - try it again */ } } } } } } // validate void CoinModelHash::validateHash() const { for (int i = 0; i < numberItems_; ++i ) { if (names_[i]) { assert (hash( names_[i])>=0); } } } // Returns index or -1 int CoinModelHash::hash(const char * name) const { int found = -1; int ipos; /* default if we don't find anything */ if ( !numberItems_ ) return -1; ipos = hashValue ( name ); while ( true ) { int j1 = hash_[ipos].index; if ( j1 >= 0 ) { char *thisName2 = names_[j1]; if ( strcmp ( name, thisName2 ) != 0 ) { int k = hash_[ipos].next; if ( k != -1 ) ipos = k; else break; } else { found = j1; break; } } else { int k = hash_[ipos].next; if ( k != -1 ) ipos = k; else break; } } return found; } // Adds to hash void CoinModelHash::addHash(int index, const char * name) { // resize if necessary if (numberItems_>=maximumItems_) resize(1000+3*numberItems_/2); assert (!names_[index]); names_[index]=CoinStrdup(name); int ipos = hashValue ( name); numberItems_ = CoinMax(numberItems_,index+1); if ( hash_[ipos].index <0 ) { hash_[ipos].index = index; } else { while ( true ) { int j1 = hash_[ipos].index; if ( j1 == index ) break; // duplicate? else { if (j1>=0) { char *thisName2 = names_[j1]; if ( strcmp ( name, thisName2 ) == 0 ) { printf ( "** duplicate name %s\n", names_[index] ); abort(); break; } else { int k = hash_[ipos].next; if ( k == -1 ) { while ( true ) { ++lastSlot_; if ( lastSlot_ > numberItems_ ) { printf ( "** too many names\n" ); abort(); break; } if ( hash_[lastSlot_].index <0 && hash_[lastSlot_].next<0) { break; } } hash_[ipos].next = lastSlot_; hash_[lastSlot_].index = index; hash_[lastSlot_].next=-1; break; } else { ipos = k; } } } else { //slot available hash_[ipos].index = index; } } } } } // Deletes from hash void CoinModelHash::deleteHash(int index) { if (index=0 ) { int j1 = hash_[ipos].index; if ( j1!=index) { ipos = hash_[ipos].next; } else { hash_[ipos].index=-1; // available break; } } assert (ipos>=0); free(names_[index]); names_[index]=NULL; } } // Returns name at position (or NULL) const char * CoinModelHash::name(int which) const { if (which (strlen(name)); // may get better spread with unsigned const unsigned char * name2 = reinterpret_cast (name); while (length) { int length2 = CoinMin( length,lengthMult); for ( j = 0; j < length2; ++j ) { n += mmult[j] * name2[j]; } name+=length2; length-=length2; } int maxHash = 4 * maximumItems_; return ( abs ( n ) % maxHash ); /* integer abs */ } //############################################################################# // Constructors / Destructor / Assignment //############################################################################# //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- CoinModelHash2::CoinModelHash2 () : hash_(NULL), numberItems_(0), maximumItems_(0), lastSlot_(-1) { } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- CoinModelHash2::CoinModelHash2 (const CoinModelHash2 & rhs) : hash_(NULL), numberItems_(rhs.numberItems_), maximumItems_(rhs.maximumItems_), lastSlot_(rhs.lastSlot_) { if (maximumItems_) { hash_ = CoinCopyOfArray(rhs.hash_,4*maximumItems_); } } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- CoinModelHash2::~CoinModelHash2 () { delete [] hash_; } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- CoinModelHash2 & CoinModelHash2::operator=(const CoinModelHash2& rhs) { if (this != &rhs) { delete [] hash_; numberItems_ = rhs.numberItems_; maximumItems_ = rhs.maximumItems_; lastSlot_ = rhs.lastSlot_; if (maximumItems_) { hash_ = CoinCopyOfArray(rhs.hash_,4*maximumItems_); } else { hash_ = NULL; } } return *this; } // Set number of items void CoinModelHash2::setNumberItems(int number) { assert (number>=0&&(number<=numberItems_||!numberItems_)); numberItems_=number; } // Resize hash (also re-hashs) void CoinModelHash2::resize(int maxItems, const CoinModelTriple * triples,bool forceReHash) { assert (numberItems_<=maximumItems_||!maximumItems_); if (maxItems<=maximumItems_&&!forceReHash) return; if (maxItems>maximumItems_) { maximumItems_=maxItems; delete [] hash_; hash_ = new CoinModelHashLink [4*maximumItems_]; } int maxHash = 4 * maximumItems_; int ipos; int i; for ( i = 0; i < maxHash; i++ ) { hash_[i].index = -1; hash_[i].next = -1; } /* * Initialize the hash table. Only the index of the first name that * hashes to a value is entered in the table; subsequent names that * collide with it are not entered. */ for ( i = 0; i < numberItems_; ++i ) { int row = static_cast (rowInTriple(triples[i])); int column = triples[i].column; if (column>=0) { ipos = hashValue ( row, column); if ( hash_[ipos].index == -1 ) { hash_[ipos].index = i; } } } /* * Now take care of the entries that collided in the preceding loop, * by finding some other entry in the table for them. * Since there are as many entries in the table as there are entries, * there must be room for them. */ lastSlot_ = -1; for ( i = 0; i < numberItems_; ++i ) { int row = static_cast (rowInTriple(triples[i])); int column = triples[i].column; if (column>=0) { ipos = hashValue ( row, column); while ( true ) { int j1 = hash_[ipos].index; if ( j1 == i ) break; else { int row2 = static_cast (rowInTriple(triples[j1])); int column2 = triples[j1].column; if ( row==row2&&column==column2 ) { printf ( "** duplicate entry %d %d\n", row,column ); abort(); break; } else { int k = hash_[ipos].next; if ( k == -1 ) { while ( true ) { ++lastSlot_; if ( lastSlot_ > numberItems_ ) { printf ( "** too many entries\n" ); abort(); break; } if ( hash_[lastSlot_].index == -1 ) { break; } } hash_[ipos].next = lastSlot_; hash_[lastSlot_].index = i; break; } else { ipos = k; } } } } } } } // Returns index or -1 int CoinModelHash2::hash(int row, int column, const CoinModelTriple * triples) const { int found = -1; int ipos; /* default if we don't find anything */ if ( !numberItems_ ) return -1; ipos = hashValue ( row, column ); while ( true ) { int j1 = hash_[ipos].index; if ( j1 >= 0 ) { int row2 = static_cast (rowInTriple(triples[j1])); int column2 = triples[j1].column; if ( row!=row2||column!=column2 ) { int k = hash_[ipos].next; if ( k != -1 ) ipos = k; else break; } else { found = j1; break; } } else { int k = hash_[ipos].next; if ( k != -1 ) ipos = k; else break; } } return found; } // Adds to hash void CoinModelHash2::addHash(int index, int row, int column, const CoinModelTriple * triples) { // resize if necessary if (numberItems_>=maximumItems_||index+1>=maximumItems_) resize(CoinMax(1000+3*numberItems_/2,index+1), triples); int ipos = hashValue ( row, column); numberItems_ = CoinMax(numberItems_,index+1); assert (numberItems_<=maximumItems_); if ( hash_[ipos].index <0 ) { hash_[ipos].index = index; } else { while ( true ) { int j1 = hash_[ipos].index; if ( j1 == index ) { break; // duplicate?? } else { if (j1 >=0 ) { int row2 = static_cast (rowInTriple(triples[j1])); int column2 = triples[j1].column; if ( row==row2&&column==column2 ) { printf ( "** duplicate entry %d %d\n", row, column ); abort(); break; } else { int k = hash_[ipos].next; if ( k ==-1 ) { while ( true ) { ++lastSlot_; if ( lastSlot_ > numberItems_ ) { printf ( "** too many entrys\n" ); abort(); break; } if ( hash_[lastSlot_].index <0 ) { break; } } hash_[ipos].next = lastSlot_; hash_[lastSlot_].index = index; hash_[lastSlot_].next=-1; break; } else { ipos = k; } } } else { // slot available hash_[ipos].index = index; } } } } } // Deletes from hash void CoinModelHash2::deleteHash(int index,int row, int column) { if (index=0 ) { int j1 = hash_[ipos].index; if ( j1!=index) { ipos = hash_[ipos].next; } else { hash_[ipos].index=-1; // available break; } } } } namespace { const int mmult2[] = { 262139, 259459, 256889, 254291, 251701, 249133, 246709, 244247, 241667, 239179, 236609, 233983, 231289, 228859, 226357, 223829 }; } // Returns a hash value int CoinModelHash2::hashValue(int row, int column) const { // Optimizer should take out one side of if if (sizeof(int)==4*sizeof(char)) { unsigned char tempChar[4]; unsigned int n = 0; int * temp = reinterpret_cast (tempChar); *temp=row; n += mmult2[0] * tempChar[0]; n += mmult2[1] * tempChar[1]; n += mmult2[2] * tempChar[2]; n += mmult[3] * tempChar[3]; *temp=column; n += mmult2[0+8] * tempChar[0]; n += mmult2[1+8] * tempChar[1]; n += mmult2[2+8] * tempChar[2]; n += mmult2[3+8] * tempChar[3]; return n % (maximumItems_<<1); } else { // ints are 8 unsigned char tempChar[8]; int n = 0; unsigned int j; int * temp = reinterpret_cast (tempChar); *temp=row; for ( j = 0; j < sizeof(int); ++j ) { int itemp = tempChar[j]; n += mmult2[j] * itemp; } *temp=column; for ( j = 0; j < sizeof(int); ++j ) { int itemp = tempChar[j]; n += mmult2[j+8] * itemp; } int maxHash = 4 * maximumItems_; int absN = abs(n); int returnValue = absN % maxHash; return returnValue; } } //############################################################################# // Constructors / Destructor / Assignment //############################################################################# //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- CoinModelLinkedList::CoinModelLinkedList () : previous_(NULL), next_(NULL), first_(NULL), last_(NULL), numberMajor_(0), maximumMajor_(0), numberElements_(0), maximumElements_(0), type_(-1) { } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- CoinModelLinkedList::CoinModelLinkedList (const CoinModelLinkedList & rhs) : numberMajor_(rhs.numberMajor_), maximumMajor_(rhs.maximumMajor_), numberElements_(rhs.numberElements_), maximumElements_(rhs.maximumElements_), type_(rhs.type_) { if (maximumMajor_) { previous_ = CoinCopyOfArray(rhs.previous_,maximumElements_); next_ = CoinCopyOfArray(rhs.next_,maximumElements_); first_ = CoinCopyOfArray(rhs.first_,maximumMajor_+1); last_ = CoinCopyOfArray(rhs.last_,maximumMajor_+1); } else { previous_ = NULL; next_ = NULL; first_ = NULL; last_ = NULL; } } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- CoinModelLinkedList::~CoinModelLinkedList () { delete [] previous_; delete [] next_; delete [] first_; delete [] last_; } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- CoinModelLinkedList & CoinModelLinkedList::operator=(const CoinModelLinkedList& rhs) { if (this != &rhs) { delete [] previous_; delete [] next_; delete [] first_; delete [] last_; numberMajor_ = rhs.numberMajor_; maximumMajor_ = rhs.maximumMajor_; numberElements_ = rhs.numberElements_; maximumElements_ = rhs.maximumElements_; type_ = rhs.type_; if (maximumMajor_) { previous_ = CoinCopyOfArray(rhs.previous_,maximumElements_); next_ = CoinCopyOfArray(rhs.next_,maximumElements_); first_ = CoinCopyOfArray(rhs.first_,maximumMajor_+1); last_ = CoinCopyOfArray(rhs.last_,maximumMajor_+1); } else { previous_ = NULL; next_ = NULL; first_ = NULL; last_ = NULL; } } return *this; } // Resize list - for row list maxMajor is maximum rows void CoinModelLinkedList::resize(int maxMajor,int maxElements) { maxMajor=CoinMax(maxMajor,maximumMajor_); maxElements=CoinMax(maxElements,maximumElements_); if (maxMajor>maximumMajor_) { int * first = new int [maxMajor+1]; int free; if (maximumMajor_) { CoinMemcpyN(first_,maximumMajor_,first); # ifdef ZEROFAULT memset(first+maximumMajor_,0,(maxMajor-maximumMajor_)*sizeof(int)) ; # endif free = first_[maximumMajor_]; first[maximumMajor_]=-1; } else { free=-1; } first[maxMajor]=free; delete [] first_; first_=first; int * last = new int [maxMajor+1]; if (maximumMajor_) { CoinMemcpyN(last_,maximumMajor_,last); # ifdef ZEROFAULT memset(last+maximumMajor_,0,(maxMajor-maximumMajor_)*sizeof(int)) ; # endif free = last_[maximumMajor_]; last[maximumMajor_]=-1; } else { free=-1; } last[maxMajor]=free; delete [] last_; last_=last; maximumMajor_ = maxMajor; } if ( maxElements>maximumElements_) { int * previous = new int [maxElements]; CoinMemcpyN(previous_,numberElements_,previous); # ifdef ZEROFAULT memset(previous+numberElements_,0, (maxElements-numberElements_)*sizeof(int)) ; # endif delete [] previous_; previous_=previous; int * next = new int [maxElements]; CoinMemcpyN(next_,numberElements_,next); # ifdef ZEROFAULT memset(next+numberElements_,0,(maxElements-numberElements_)*sizeof(int)) ; # endif delete [] next_; next_=next; maximumElements_=maxElements; } } // Create list - for row list maxMajor is maximum rows void CoinModelLinkedList::create(int maxMajor,int maxElements, int numberMajor,int /*numberMinor*/, int type, int numberElements, const CoinModelTriple * triples) { maxMajor=CoinMax(maxMajor,maximumMajor_); maxMajor=CoinMax(maxMajor,numberMajor); maxElements=CoinMax(maxElements,maximumElements_); maxElements=CoinMax(maxElements,numberElements); type_=type; assert (!previous_); previous_ = new int [maxElements]; next_ = new int [maxElements]; maximumElements_=maxElements; assert (maxElements>=numberElements); assert (maxMajor>0&&!maximumMajor_); first_ = new int[maxMajor+1]; last_ = new int[maxMajor+1]; # ifdef ZEROFAULT memset(previous_,0,maxElements*sizeof(int)) ; memset(next_,0,maxElements*sizeof(int)) ; memset(first_,0,(maxMajor+1)*sizeof(int)) ; memset(last_,0,(maxMajor+1)*sizeof(int)) ; # endif assert (numberElements>=0); numberElements_=numberElements; maximumMajor_ = maxMajor; // do lists int i; for (i=0;i=0) { int iMajor; if (!type_) { // for rows iMajor=static_cast (rowInTriple(triples[i])); } else { iMajor=triples[i].column; } assert (iMajor=0) { // not first int j=last_[iMajor]; next_[j]=i; previous_[i]=j; } else { // first first_[iMajor]=i; previous_[i]=-1; } last_[iMajor]=i; } else { // on deleted list if (freeChain>=0) { next_[freeChain]=i; previous_[i]=freeChain; } else { first_[maximumMajor_]=i; previous_[i]=-1; } freeChain=i; } } // Now clean up if (freeChain>=0) { next_[freeChain]=-1; last_[maximumMajor_]=freeChain; } for (i=0;i=0) { next_[k]=-1; last_[i]=k; } } numberMajor_=numberMajor; } /* Adds to list - easy case i.e. add row to row list Returns where chain starts */ int CoinModelLinkedList::addEasy(int majorIndex, int numberOfElements, const int * indices, const double * elements, CoinModelTriple * triples, CoinModelHash2 & hash) { assert (majorIndexmaximumElements_) { resize(maximumMajor_,(3*(numberElements_+numberOfElements))/2+1000); } int first=-1; if (majorIndex>=numberMajor_) { for (int i=numberMajor_;i<=majorIndex;i++) { first_[i]=-1; last_[i]=-1; } } if (numberOfElements) { bool doHash = hash.maximumItems()!=0; int lastFree=last_[maximumMajor_]; int last=last_[majorIndex]; for (int i=0;i=0) { put=lastFree; lastFree=previous_[lastFree]; } else { put=numberElements_; assert (put (rowInTriple(triples[put])),triples[put].column,triples); if (last>=0) { next_[last]=put; } else { first_[majorIndex]=put; } previous_[put]=last; last=put; } next_[last]=-1; if (last_[majorIndex]<0) { // first in row first = first_[majorIndex]; } else { first = next_[last_[majorIndex]]; } last_[majorIndex]=last; if (lastFree>=0) { next_[lastFree]=-1; last_[maximumMajor_]=lastFree; } else { first_[maximumMajor_]=-1; last_[maximumMajor_]=-1; } } numberMajor_=CoinMax(numberMajor_,majorIndex+1); return first; } /* Adds to list - hard case i.e. add row to column list */ void CoinModelLinkedList::addHard(int minorIndex, int numberOfElements, const int * indices, const double * elements, CoinModelTriple * triples, CoinModelHash2 & hash) { int lastFree=last_[maximumMajor_]; bool doHash = hash.maximumItems()!=0; for (int i=0;i=0) { put=lastFree; lastFree=previous_[lastFree]; } else { put=numberElements_; assert (put (rowInTriple(triples[put])),triples[put].column,triples); if (other>=numberMajor_) { // Need to fill in null values fill(numberMajor_,other+1); numberMajor_=other+1; } int last=last_[other]; if (last>=0) { next_[last]=put; } else { first_[other]=put; } previous_[put]=last; next_[put]=-1; last_[other]=put; } if (lastFree>=0) { next_[lastFree]=-1; last_[maximumMajor_]=lastFree; } else { first_[maximumMajor_]=-1; last_[maximumMajor_]=-1; } } /* Adds to list - hard case i.e. add row to column list This is when elements have been added to other copy */ void CoinModelLinkedList::addHard(int first, const CoinModelTriple * triples, int firstFree, int lastFree,const int * next) { first_[maximumMajor_]=firstFree; last_[maximumMajor_]=lastFree; int put=first; int minorIndex=-1; while (put>=0) { assert (put=0) assert(triples[put].column==minorIndex); else minorIndex=triples[put].column; } else { // column other=triples[put].column; if (minorIndex>=0) assert(static_cast (rowInTriple(triples[put]))==minorIndex); else minorIndex=rowInTriple(triples[put]); } assert (other=numberMajor_) { // Need to fill in null values fill (numberMajor_,other+1); numberMajor_=other+1; } int last=last_[other]; if (last>=0) { next_[last]=put; } else { first_[other]=put; } previous_[put]=last; next_[put]=-1; last_[other]=put; put = next[put]; } } /* Deletes from list - same case i.e. delete row from row list */ void CoinModelLinkedList::deleteSame(int which, CoinModelTriple * triples, CoinModelHash2 & hash, bool zapTriples) { assert (which>=0); if (which=0) { if (hash.numberItems()) { // take out of hash hash.deleteHash(put, static_cast (rowInTriple(triples[put])),triples[put].column); } if (zapTriples) { triples[put].column=-1; triples[put].value=0.0; } if (lastFree>=0) { next_[lastFree]=put; } else { first_[maximumMajor_]=put; } previous_[put]=lastFree; lastFree=put; put=next_[put]; } if (lastFree>=0) { next_[lastFree]=-1; last_[maximumMajor_]=lastFree; } else { assert (last_[maximumMajor_]==-1); } last_[which]=-1; } } /* Deletes from list - other case i.e. delete row from column list This is when elements have been deleted from other copy */ void CoinModelLinkedList::updateDeleted(int /*which*/, CoinModelTriple * triples, CoinModelLinkedList & otherList) { int firstFree = otherList.firstFree(); int lastFree = otherList.lastFree(); const int * previousOther = otherList.previous(); assert (maximumMajor_); if (lastFree>=0) { // First free should be same if (first_[maximumMajor_]>=0) assert (firstFree==first_[maximumMajor_]); int last = last_[maximumMajor_]; first_[maximumMajor_]=firstFree; // Maybe nothing to do if (last_[maximumMajor_]==lastFree) return; last_[maximumMajor_]=lastFree; int iMajor; if (!type_) { // for rows iMajor=static_cast (rowInTriple(triples[lastFree])); } else { iMajor=triples[lastFree].column; } if (first_[iMajor]>=0) { // take out int previousThis = previous_[lastFree]; int nextThis = next_[lastFree]; if (previousThis>=0&&previousThis!=last) { next_[previousThis]=nextThis; #ifndef NDEBUG int iTest; if (!type_) { // for rows iTest=static_cast (rowInTriple(triples[previousThis])); } else { iTest=triples[previousThis].column; } assert (triples[previousThis].column>=0); assert (iTest==iMajor); #endif } else { first_[iMajor]=nextThis; } if (nextThis>=0) { previous_[nextThis]=previousThis; #ifndef NDEBUG int iTest; if (!type_) { // for rows iTest=static_cast (rowInTriple(triples[nextThis])); } else { iTest=triples[nextThis].column; } assert (triples[nextThis].column>=0); assert (iTest==iMajor); #endif } else { last_[iMajor]=previousThis; } } triples[lastFree].column=-1; triples[lastFree].value=0.0; // Do first (by which I mean last) next_[lastFree]=-1; int previous = previousOther[lastFree]; while (previous!=last) { if (previous>=0) { if (!type_) { // for rows iMajor=static_cast (rowInTriple(triples[previous])); } else { iMajor=triples[previous].column; } if (first_[iMajor]>=0) { // take out int previousThis = previous_[previous]; int nextThis = next_[previous]; if (previousThis>=0&&previousThis!=last) { next_[previousThis]=nextThis; #ifndef NDEBUG int iTest; if (!type_) { // for rows iTest=static_cast (rowInTriple(triples[previousThis])); } else { iTest=triples[previousThis].column; } assert (triples[previousThis].column>=0); assert (iTest==iMajor); #endif } else { first_[iMajor]=nextThis; } if (nextThis>=0) { previous_[nextThis]=previousThis; #ifndef NDEBUG int iTest; if (!type_) { // for rows iTest=static_cast (rowInTriple(triples[nextThis])); } else { iTest=triples[nextThis].column; } assert (triples[nextThis].column>=0); assert (iTest==iMajor); #endif } else { last_[iMajor]=previousThis; } } triples[previous].column=-1; triples[previous].value=0.0; next_[previous]=lastFree; } else { assert (lastFree==firstFree); } previous_[lastFree]=previous; lastFree=previous; previous = previousOther[lastFree]; } if (last>=0) { next_[previous]=lastFree; } else { assert (firstFree==lastFree); } previous_[lastFree]=previous; } } /* Deletes one element from Row list */ void CoinModelLinkedList::deleteRowOne(int position, CoinModelTriple * triples, CoinModelHash2 & hash) { int row=rowInTriple(triples[position]); assert (row (rowInTriple(triples[position])),triples[position].column); } int previous = previous_[position]; int next = next_[position]; // put on free list int lastFree=last_[maximumMajor_]; if (lastFree>=0) { next_[lastFree]=position; } else { first_[maximumMajor_]=position; assert (last_[maximumMajor_]==-1); } last_[maximumMajor_]=position; previous_[position]=lastFree; next_[position]=-1; // Now take out of row if (previous>=0) { next_[previous]=next; } else { first_[row]=next; } if (next>=0) { previous_[next]=previous; } else { last_[row]=previous; } } /* Update column list for one element when one element deleted from row copy */ void CoinModelLinkedList::updateDeletedOne(int position, const CoinModelTriple * triples) { assert (maximumMajor_); int column=triples[position].column; assert (column>=0&&column=0) { next_[lastFree]=position; } else { first_[maximumMajor_]=position; assert (last_[maximumMajor_]==-1); } last_[maximumMajor_]=position; previous_[position]=lastFree; next_[position]=-1; // Now take out of column if (previous>=0) { next_[previous]=next; } else { first_[column]=next; } if (next>=0) { previous_[next]=previous; } else { last_[column]=previous; } } // Fills first,last with -1 void CoinModelLinkedList::fill(int first,int last) { for (int i=first;i=0) { previous_[put]=other.previous_[put]; next_[put]=other.next_[put]; put = next_[put]; } } // Checks that links are consistent void CoinModelLinkedList::validateLinks(const CoinModelTriple * triples) const { char * mark = new char[maximumElements_]; memset(mark,0,maximumElements_); int lastElement=-1; int i; for ( i=0;i=0) { assert (position==first_[i] || next_[previous_[position]]==position); assert (type_ || i == static_cast (rowInTriple(triples[position]))); // i == iMajor for rows assert (!type_ || i == triples[position].column); // i == iMajor assert (triples[position].column>=0); mark[position]=1; lastElement = CoinMax(lastElement,position); #ifndef NDEBUG lastPosition=position; #endif position = next_[position]; } assert (lastPosition==last_[i]); } for (i=0;i<=lastElement;i++) { if (!mark[i]) assert(triples[i].column==-1); } delete [] mark; } CoinUtils-2.9.10/CoinUtils/src/CoinPresolveMonitor.cpp0000644000076600007660000002113212130104232021341 0ustar coincoin/* $Id: CoinPresolveMonitor.cpp 1585 2013-04-06 20:42:02Z stefan $ */ // Copyright (C) 2011 Lou Hafer // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include "CoinHelperFunctions.hpp" #include "CoinPackedVector.hpp" #include "CoinPresolveMatrix.hpp" #include "CoinPresolveMonitor.hpp" /*! \file This file contains methods for CoinPresolveMonitor, used to monitor changes to a row or column during presolve and postsolve */ /* Constructors */ /* Default constructor */ CoinPresolveMonitor::CoinPresolveMonitor () { } /* Constructor to initialise from a CoinPresolveMatrix (not threaded) */ CoinPresolveMonitor::CoinPresolveMonitor (const CoinPresolveMatrix *mtx, bool isRow, int k) { ndx_ = k ; isRow_ = isRow ; if (isRow) { origVec_ = extractRow(k,mtx) ; const double *blow = mtx->getRowLower() ; lb_ = blow[k] ; const double *b = mtx->getRowUpper() ; ub_ = b[k] ; } else { origVec_ = extractCol(k,mtx) ; const double *lb = mtx->getColLower() ; lb_ = lb[k] ; const double *ub = mtx->getColUpper() ; ub_ = ub[k] ; } origVec_->sortIncrIndex() ; } /* Constructor to initialise from a CoinPostsolveMatrix */ CoinPresolveMonitor::CoinPresolveMonitor (const CoinPostsolveMatrix *mtx, bool isRow, int k) { ndx_ = k ; isRow_ = isRow ; if (isRow) { origVec_ = extractRow(k,mtx) ; const double *blow = mtx->getRowLower() ; lb_ = blow[k] ; const double *b = mtx->getRowUpper() ; ub_ = b[k] ; } else { origVec_ = extractCol(k,mtx) ; const double *lb = mtx->getColLower() ; lb_ = lb[k] ; const double *ub = mtx->getColUpper() ; ub_ = ub[k] ; } origVec_->sortIncrIndex() ; } /* Extract a row from a CoinPresolveMatrix. Since a CoinPresolveMatrix contains both row-ordered and column-ordered copies, this is relatively efficient. */ CoinPackedVector *CoinPresolveMonitor::extractRow (int i, const CoinPresolveMatrix *mtx) const { const CoinBigIndex *rowStarts = mtx->getRowStarts() ; const int *colIndices = mtx->getColIndicesByRow() ; const double *coeffs = mtx->getElementsByRow() ; const int rowLen = mtx->hinrow_[i] ; const CoinBigIndex &ii = rowStarts[i] ; return (new CoinPackedVector(rowLen,&colIndices[ii],&coeffs[ii])) ; } /* Extract a column from a CoinPresolveMatrix. Since a CoinPresolveMatrix contains both row-ordered and column-ordered copies, this is relatively efficient. */ CoinPackedVector *CoinPresolveMonitor::extractCol (int j, const CoinPresolveMatrix *mtx) const { const CoinBigIndex *colStarts = mtx->getColStarts() ; const int *colLens = mtx->getColLengths() ; const int *rowIndices = mtx->getRowIndicesByCol() ; const double *coeffs = mtx->getElementsByCol() ; const CoinBigIndex &jj = colStarts[j] ; return (new CoinPackedVector(colLens[j],&rowIndices[jj],&coeffs[jj])) ; } /* Extract a row from a CoinPostsolveMatrix. This is very painful, because the matrix is threaded column-ordered only. We have to scan every entry in the matrix, looking for entries that match the requested row index. */ CoinPackedVector *CoinPresolveMonitor::extractRow (int i, const CoinPostsolveMatrix *mtx) const { const CoinBigIndex *colStarts = mtx->getColStarts() ; const int *colLens = mtx->getColLengths() ; const double *coeffs = mtx->getElementsByCol() ; const int *rowIndices = mtx->getRowIndicesByCol() ; const CoinBigIndex *colLinks = mtx->link_ ; int n = mtx->getNumCols() ; CoinPackedVector *pkvec = new CoinPackedVector() ; for (int j = 0 ; j < n ; j++) { const CoinBigIndex ii = presolve_find_row3(i,colStarts[j],colLens[j],rowIndices,colLinks) ; if (ii >= 0) pkvec->insert(j,coeffs[ii]) ; } return (pkvec) ; } /* Extract a column from a CoinPostsolveMatrix. At least here we only need to walk one threaded column. */ CoinPackedVector *CoinPresolveMonitor::extractCol (int j, const CoinPostsolveMatrix *mtx) const { const CoinBigIndex *colStarts = mtx->getColStarts() ; const int *colLens = mtx->getColLengths() ; const double *coeffs = mtx->getElementsByCol() ; const int *rowIndices = mtx->getRowIndicesByCol() ; const CoinBigIndex *colLinks = mtx->link_ ; CoinPackedVector *pkvec = new CoinPackedVector() ; CoinBigIndex jj = colStarts[j] ; const int &lenj = colLens[j] ; for (int k = 0 ; k < lenj ; k++) { pkvec->insert(rowIndices[jj],coeffs[jj]) ; jj = colLinks[jj] ; } return (pkvec) ; } /* Extract the current version of the row or column from the CoinPresolveMatrix into a CoinPackedVector, sort it, and compare it to the stored CoinPackedVector. Differences are reported to std::cout. */ void CoinPresolveMonitor::checkAndTell (const CoinPresolveMatrix *mtx) { CoinPackedVector *curVec = 0 ; const double *lbs = 0 ; const double *ubs = 0 ; if (isRow_) { lbs = mtx->getRowLower() ; ubs = mtx->getRowUpper() ; curVec = extractRow(ndx_,mtx) ; } else { curVec = extractCol(ndx_,mtx) ; lbs = mtx->getColLower() ; ubs = mtx->getColUpper() ; } checkAndTell(curVec,lbs[ndx_],ubs[ndx_]) ; } /* Extract the current version of the row or column from the CoinPostsolveMatrix into a CoinPackedVector, sort it, and compare it to the stored CoinPackedVector. Differences are reported to std::cout. */ void CoinPresolveMonitor::checkAndTell (const CoinPostsolveMatrix *mtx) { CoinPackedVector *curVec = 0 ; const double *lbs = 0 ; const double *ubs = 0 ; if (isRow_) { lbs = mtx->getRowLower() ; ubs = mtx->getRowUpper() ; curVec = extractRow(ndx_,mtx) ; } else { curVec = extractCol(ndx_,mtx) ; lbs = mtx->getColLower() ; ubs = mtx->getColUpper() ; } checkAndTell(curVec,lbs[ndx_],ubs[ndx_]) ; } /* And the worker method, which does the actual diff of the vectors and also checks the bounds. If the vector fails a quick check with ==, extract the indices, merge them, and then walk the indices checking for presence in each vector. Where both elements are present, check the coefficient. Report any differences. Not the most efficient implementation, but it leverages existing capabilities. */ void CoinPresolveMonitor::checkAndTell (CoinPackedVector *curVec, double lb, double ub) { curVec->sortIncrIndex() ; std::cout << "checking " << ((isRow_)?"row ":"column ") << ndx_ << " ..." ; int diffcnt = 0 ; if (lb_ != lb) { diffcnt++ ; std::cout << std::endl << " " << ((isRow_)?"blow":"lb") << " = " << lb_ << " in original, " << lb << " in current." ; } if (ub_ != ub) { diffcnt++ ; std::cout << std::endl << " " << ((isRow_)?"b":"ub") << " = " << ub_ << " in original, " << ub << " in current." ; } bool vecDiff = ((*origVec_) == (*curVec)) ; /* Dispense with the easy outcomes. */ if (diffcnt == 0 && !vecDiff) { std::cout << " equal." << std::endl ; return ; } else if (!vecDiff) { std::cout << std::endl << " coefficients equal." << std::endl ; return ; } /* We have to compare the coefficients. Merge the index sets. */ int origLen = origVec_->getNumElements() ; int curLen = curVec->getNumElements() ; int mergedLen = origLen+curLen ; int *mergedIndices = new int [mergedLen] ; CoinCopyN(origVec_->getIndices(),origLen,mergedIndices) ; CoinCopyN(curVec->getIndices(),curLen,mergedIndices+origLen) ; std::inplace_merge(mergedIndices,mergedIndices+origLen, mergedIndices+mergedLen) ; int *uniqEnd = std::unique(mergedIndices,mergedIndices+mergedLen) ; int uniqLen = static_cast(uniqEnd-mergedIndices) ; for (int k = 0 ; k < uniqLen ; k++) { int j = mergedIndices[k] ; double aij_orig = 0.0 ; double aij_cur = 0.0 ; bool inOrig = false ; bool inCur = false ; if (origVec_->findIndex(j) >= 0) { inOrig = true ; aij_orig = (*origVec_)[j] ; } if (curVec->findIndex(j) >= 0) { inCur = true ; aij_cur = (*curVec)[j] ; } if (inOrig == false || inCur == false || aij_orig != aij_cur) { diffcnt++ ; std::cout << std::endl << " " ; if (isRow_) std::cout << "coeff a(" << ndx_ << "," << j << ") " ; else std::cout << "coeff a(" << j << "," << ndx_ << ") " ; if (inOrig == false) std::cout << "= " << aij_cur << " not present in original." ; else if (inCur == false) std::cout << "= " << aij_orig << " not present in current." ; else std::cout << " = " << aij_orig << " in original, " << aij_cur << " in current." ; } } std::cout << std::endl << " " << diffcnt << " changes." << std::endl ; delete[] mergedIndices ; } CoinUtils-2.9.10/CoinUtils/src/CoinSnapshot.hpp0000644000076600007660000003603411552534611020024 0ustar coincoin/* $Id: CoinSnapshot.hpp 1416 2011-04-17 09:57:29Z stefan $ */ // 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 CoinSnapshot_H #define CoinSnapshot_H class CoinPackedMatrix; #include "CoinTypes.hpp" //############################################################################# /** NON Abstract Base Class for interfacing with cut generators or branching code or .. It is designed to be snapshot of a problem at a node in tree The class may or may not own the arrays - see owned_ 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 arrays. */ class CoinSnapshot { public: //--------------------------------------------------------------------------- /**@name Problem query methods The Matrix pointers may be NULL */ //@{ /// Get number of columns inline int getNumCols() const { return numCols_;} /// Get number of rows inline int getNumRows() const { return numRows_;} /// Get number of nonzero elements inline int getNumElements() const { return numElements_;} /// Get number of integer variables inline int getNumIntegers() const { return numIntegers_;} /// Get pointer to array[getNumCols()] of column lower bounds inline const double * getColLower() const { return colLower_;} /// Get pointer to array[getNumCols()] of column upper bounds inline const double * getColUpper() const { return colUpper_;} /// Get pointer to array[getNumRows()] of row lower bounds inline const double * getRowLower() const { return rowLower_;} /// Get pointer to array[getNumRows()] of row upper bounds inline const double * getRowUpper() const { return rowUpper_;} /** Get pointer to array[getNumRows()] of row right-hand sides This gives same results as OsiSolverInterface for useful cases If getRowUpper()[i] != infinity then getRightHandSide()[i] == getRowUpper()[i] else getRightHandSide()[i] == getRowLower()[i] */ inline const double * getRightHandSide() const { return rightHandSide_;} /// Get pointer to array[getNumCols()] of objective function coefficients inline const double * getObjCoefficients() const { return objCoefficients_;} /// Get objective function sense (1 for min (default), -1 for max) inline double getObjSense() const { return objSense_;} /// Return true if variable is continuous inline bool isContinuous(int colIndex) const { return colType_[colIndex]=='C';} /// Return true if variable is binary inline bool isBinary(int colIndex) const { return colType_[colIndex]=='B';} /// Return true if column is integer. inline bool isInteger(int colIndex) const { return colType_[colIndex]=='B'||colType_[colIndex]=='I';} /// Return true if variable is general integer inline bool isIntegerNonBinary(int colIndex) const { return colType_[colIndex]=='I';} /// Return true if variable is binary and not fixed at either bound inline bool isFreeBinary(int colIndex) const { return colType_[colIndex]=='B'&&colUpper_[colIndex]>colLower_[colIndex];} /// Get colType array ('B', 'I', or 'C' for Binary, Integer and Continuous) inline const char * getColType() const { return colType_;} /// Get pointer to row-wise copy of current matrix inline const CoinPackedMatrix * getMatrixByRow() const { return matrixByRow_;} /// Get pointer to column-wise copy of current matrix inline const CoinPackedMatrix * getMatrixByCol() const { return matrixByCol_;} /// Get pointer to row-wise copy of "original" matrix inline const CoinPackedMatrix * getOriginalMatrixByRow() const { return originalMatrixByRow_;} /// Get pointer to column-wise copy of "original" matrix inline const CoinPackedMatrix * getOriginalMatrixByCol() const { return originalMatrixByCol_;} //@} /**@name Solution query methods */ //@{ /// Get pointer to array[getNumCols()] of primal variable values inline const double * getColSolution() const { return colSolution_;} /// Get pointer to array[getNumRows()] of dual variable values inline const double * getRowPrice() const { return rowPrice_;} /// Get a pointer to array[getNumCols()] of reduced costs inline const double * getReducedCost() const { return reducedCost_;} /// Get pointer to array[getNumRows()] of row activity levels (constraint matrix times the solution vector). inline const double * getRowActivity() const { return rowActivity_;} /// Get pointer to array[getNumCols()] of primal variable values which should not be separated (for debug) inline const double * getDoNotSeparateThis() const { return doNotSeparateThis_;} //@} /**@name Other scalar get methods */ //@{ /// Get solver's value for infinity inline double getInfinity() const { return infinity_;} /** Get objective function value - includinbg any offset i.e. sum c sub j * x subj - objValue = objOffset */ inline double getObjValue() const { return objValue_;} /// Get objective offset i.e. sum c sub j * x subj -objValue = objOffset inline double getObjOffset() const { return objOffset_;} /// Get dual tolerance inline double getDualTolerance() const { return dualTolerance_;} /// Get primal tolerance inline double getPrimalTolerance() const { return primalTolerance_;} /// Get integer tolerance inline double getIntegerTolerance() const { return integerTolerance_;} /// Get integer upper bound i.e. best solution * getObjSense inline double getIntegerUpperBound() const { return integerUpperBound_;} /// Get integer lower bound i.e. best possible solution * getObjSense inline double getIntegerLowerBound() const { return integerLowerBound_;} //@} //--------------------------------------------------------------------------- /**@name Method 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 NULL 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
All solution type arrays will be deleted */ void loadProblem(const CoinPackedMatrix& matrix, const double* collb, const double* colub, const double* obj, const double* rowlb, const double* rowub, bool makeRowCopy=false); //@} //--------------------------------------------------------------------------- /**@name Methods to set data */ //@{ /// Set number of columns inline void setNumCols(int value) { numCols_ = value;} /// Set number of rows inline void setNumRows(int value) { numRows_ = value;} /// Set number of nonzero elements inline void setNumElements(int value) { numElements_ = value;} /// Set number of integer variables inline void setNumIntegers(int value) { numIntegers_ = value;} /// Set pointer to array[getNumCols()] of column lower bounds void setColLower(const double * array, bool copyIn=true); /// Set pointer to array[getNumCols()] of column upper bounds void setColUpper(const double * array, bool copyIn=true); /// Set pointer to array[getNumRows()] of row lower bounds void setRowLower(const double * array, bool copyIn=true); /// Set pointer to array[getNumRows()] of row upper bounds void setRowUpper(const double * array, bool copyIn=true); /** Set pointer to array[getNumRows()] of row right-hand sides This gives same results as OsiSolverInterface for useful cases If getRowUpper()[i] != infinity then getRightHandSide()[i] == getRowUpper()[i] else getRightHandSide()[i] == getRowLower()[i] */ void setRightHandSide(const double * array, bool copyIn=true); /** Create array[getNumRows()] of row right-hand sides using existing information This gives same results as OsiSolverInterface for useful cases If getRowUpper()[i] != infinity then getRightHandSide()[i] == getRowUpper()[i] else getRightHandSide()[i] == getRowLower()[i] */ void createRightHandSide(); /// Set pointer to array[getNumCols()] of objective function coefficients void setObjCoefficients(const double * array, bool copyIn=true); /// Set objective function sense (1 for min (default), -1 for max) inline void setObjSense(double value) { objSense_ = value;} /// Set colType array ('B', 'I', or 'C' for Binary, Integer and Continuous) void setColType(const char *array, bool copyIn=true); /// Set pointer to row-wise copy of current matrix void setMatrixByRow(const CoinPackedMatrix * matrix, bool copyIn=true); /// Create row-wise copy from MatrixByCol void createMatrixByRow(); /// Set pointer to column-wise copy of current matrix void setMatrixByCol(const CoinPackedMatrix * matrix, bool copyIn=true); /// Set pointer to row-wise copy of "original" matrix void setOriginalMatrixByRow(const CoinPackedMatrix * matrix, bool copyIn=true); /// Set pointer to column-wise copy of "original" matrix void setOriginalMatrixByCol(const CoinPackedMatrix * matrix, bool copyIn=true); /// Set pointer to array[getNumCols()] of primal variable values void setColSolution(const double * array, bool copyIn=true); /// Set pointer to array[getNumRows()] of dual variable values void setRowPrice(const double * array, bool copyIn=true); /// Set a pointer to array[getNumCols()] of reduced costs void setReducedCost(const double * array, bool copyIn=true); /// Set pointer to array[getNumRows()] of row activity levels (constraint matrix times the solution vector). void setRowActivity(const double * array, bool copyIn=true); /// Set pointer to array[getNumCols()] of primal variable values which should not be separated (for debug) void setDoNotSeparateThis(const double * array, bool copyIn=true); /// Set solver's value for infinity inline void setInfinity(double value) { infinity_ = value;} /// Set objective function value (including any rhs offset) inline void setObjValue(double value) { objValue_ = value;} /// Set objective offset i.e. sum c sub j * x subj -objValue = objOffset inline void setObjOffset(double value) { objOffset_ = value;} /// Set dual tolerance inline void setDualTolerance(double value) { dualTolerance_ = value;} /// Set primal tolerance inline void setPrimalTolerance(double value) { primalTolerance_ = value;} /// Set integer tolerance inline void setIntegerTolerance(double value) { integerTolerance_ = value;} /// Set integer upper bound i.e. best solution * getObjSense inline void setIntegerUpperBound(double value) { integerUpperBound_ = value;} /// Set integer lower bound i.e. best possible solution * getObjSense inline void setIntegerLowerBound(double value) { integerLowerBound_ = value;} //@} //--------------------------------------------------------------------------- ///@name Constructors and destructors //@{ /// Default Constructor CoinSnapshot(); /// Copy constructor CoinSnapshot(const CoinSnapshot &); /// Assignment operator CoinSnapshot & operator=(const CoinSnapshot& rhs); /// Destructor virtual ~CoinSnapshot (); //@} private: ///@name private functions //@{ /** Does main work of destructor - type (or'ed) 1 - NULLify pointers 2 - delete pointers 4 - initialize scalars (tolerances etc) 8 - initialize scalars (objValue etc0 */ void gutsOfDestructor(int type); /// Does main work of copy void gutsOfCopy(const CoinSnapshot & rhs); //@} ///@name Private member data /// objective function sense (1 for min (default), -1 for max) double objSense_; /// solver's value for infinity double infinity_; /// objective function value (including any rhs offset) double objValue_; /// objective offset i.e. sum c sub j * x subj -objValue = objOffset double objOffset_; /// dual tolerance double dualTolerance_; /// primal tolerance double primalTolerance_; /// integer tolerance double integerTolerance_; /// integer upper bound i.e. best solution * getObjSense double integerUpperBound_; /// integer lower bound i.e. best possible solution * getObjSense double integerLowerBound_; /// pointer to array[getNumCols()] of column lower bounds const double * colLower_; /// pointer to array[getNumCols()] of column upper bounds const double * colUpper_; /// pointer to array[getNumRows()] of row lower bounds const double * rowLower_; /// pointer to array[getNumRows()] of row upper bounds const double * rowUpper_; /// pointer to array[getNumRows()] of rhs side values const double * rightHandSide_; /// pointer to array[getNumCols()] of objective function coefficients const double * objCoefficients_; /// colType array ('B', 'I', or 'C' for Binary, Integer and Continuous) const char * colType_; /// pointer to row-wise copy of current matrix const CoinPackedMatrix * matrixByRow_; /// pointer to column-wise copy of current matrix const CoinPackedMatrix * matrixByCol_; /// pointer to row-wise copy of "original" matrix const CoinPackedMatrix * originalMatrixByRow_; /// pointer to column-wise copy of "original" matrix const CoinPackedMatrix * originalMatrixByCol_; /// pointer to array[getNumCols()] of primal variable values const double * colSolution_; /// pointer to array[getNumRows()] of dual variable values const double * rowPrice_; /// a pointer to array[getNumCols()] of reduced costs const double * reducedCost_; /// pointer to array[getNumRows()] of row activity levels (constraint matrix times the solution vector). const double * rowActivity_; /// pointer to array[getNumCols()] of primal variable values which should not be separated (for debug) const double * doNotSeparateThis_; /// number of columns int numCols_; /// number of rows int numRows_; /// number of nonzero elements int numElements_; /// number of integer variables int numIntegers_; /// To say whether arrays etc are owned by CoinSnapshot typedef struct { unsigned int colLower:1; unsigned int colUpper:1; unsigned int rowLower:1; unsigned int rowUpper:1; unsigned int rightHandSide:1; unsigned int objCoefficients:1; unsigned int colType:1; unsigned int matrixByRow:1; unsigned int matrixByCol:1; unsigned int originalMatrixByRow:1; unsigned int originalMatrixByCol:1; unsigned int colSolution:1; unsigned int rowPrice:1; unsigned int reducedCost:1; unsigned int rowActivity:1; unsigned int doNotSeparateThis:1; } coinOwned; coinOwned owned_; //@} }; #endif CoinUtils-2.9.10/CoinUtils/src/CoinPresolvePsdebug.hpp0000644000076600007660000001504712054012315021325 0ustar coincoin/* $Id: CoinPresolvePsdebug.hpp 1560 2012-11-24 00:29:01Z lou $ */ // 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). #ifndef CoinPresolvePsdebug_H #define CoinPresolvePsdebug_H /* The current idea of the relation between PRESOLVE_DEBUG and PRESOLVE_CONSISTENCY is that PRESOLVE_CONSISTENCY triggers the consistency checks and PRESOLVE_DEBUG triggers consistency checks and output. This isn't always true in the code, but that's the goal. Really, the whole compile-time scheme should be replaced with something more user-friendly (control variables that can be changed during the run). Also floating about are PRESOLVE_SUMMARY and COIN_PRESOLVE_TUNING. -- lh, 111208 -- */ /*! \defgroup PresolveDebugFunctions Presolve Debug Functions These functions implement consistency checks on data structures involved in presolve and postsolve and on the components of the lp solution. To use these functions, include CoinPresolvePsdebug.hpp in your file and define the compile-time constants PRESOLVE_SUMMARY, PRESOLVE_DEBUG, and PRESOLVE_CONSISTENCY. A value is needed (i.e., PRESOLVE_DEBUG=1). In a few places, higher values will get you a bit more output. ******** Define the symbols PRESOLVE_DEBUG and PRESOLVE_CONSISTENCY on the configure command line (use ADD_CXXFLAGS), in a Makefile, or similar and do a full rebuild (including any presolve driver code). If the symbols are not consistently nonzero across *all* presolve code, you'll get something between garbage and a core dump! Debugging adds messages to CoinMessage and allocates and maintains arrays that hold debug information. That said, given that you've configured and built with PRESOLVE_DEBUG and PRESOLVE_CONSISTENCY nonzero everywhere, it's safe to adjust PRESOLVE_DEBUG to values in the range 1..n in individual files to increase or decrease the amount of output. The suggested approach for PRESOLVE_DEBUG is to define it to 1 in the build and then increase it in individual presolve code files to get more detail. ******** */ //@{ /*! \relates CoinPresolveMatrix \brief Check column-major and/or row-major matrices for duplicate entries in the major vectors. By default, scans both the column- and row-major matrices. Set doCol (doRow) to false to suppress the column (row) scan. */ void presolve_no_dups(const CoinPresolveMatrix *preObj, bool doCol = true, bool doRow = true) ; /*! \relates CoinPresolveMatrix \brief Check the links which track storage order for major vectors in the bulk storage area. By default, scans both the column- and row-major matrix. Set doCol = false to suppress the column-major scan. Set doRow = false to suppres the row-major scan. */ void presolve_links_ok(const CoinPresolveMatrix *preObj, bool doCol = true, bool doRow = true) ; /*! \relates CoinPresolveMatrix \brief Check for explicit zeros in the column- and/or row-major matrices. By default, scans both the column- and row-major matrices. Set doCol (doRow) to false to suppress the column (row) scan. */ void presolve_no_zeros(const CoinPresolveMatrix *preObj, bool doCol = true, bool doRow = true) ; /*! \relates CoinPresolveMatrix \brief Checks for equivalence of the column- and row-major matrices. Normally the routine will test for coefficient presence and value. Set \p chkvals to false to suppress the check for equal value. */ void presolve_consistent(const CoinPresolveMatrix *preObj, bool chkvals = true) ; /*! \relates CoinPostsolveMatrix \brief Checks that column threads agree with column lengths */ void presolve_check_threads(const CoinPostsolveMatrix *obj) ; /*! \relates CoinPostsolveMatrix \brief Checks the free list Scans the thread of free locations in the bulk store and checks that all entries are reasonable (0 <= index < bulk0_). If chkElemCnt is true, it also checks that the total number of entries in the matrix plus the locations on the free list total to the size of the bulk store. Postsolve routines do not maintain an accurate element count, but this is useful for checking a newly constructed postsolve matrix. */ void presolve_check_free_list(const CoinPostsolveMatrix *obj, bool chkElemCnt = false) ; /*! \relates CoinPostsolveMatrix \brief Check stored reduced costs for accuracy and consistency with variable status. The routine will check the value of the reduced costs for architectural variables (CoinPrePostsolveMatrix::rcosts_). It performs an accuracy check by recalculating the reduced cost from scratch. It will also check the value for consistency with the status information in CoinPrePostsolveMatrix::colstat_. */ void presolve_check_reduced_costs(const CoinPostsolveMatrix *obj) ; /*! \relates CoinPostsolveMatrix \brief Check the dual variables for consistency with row activity. The routine checks that the value of the dual variable is consistent with the state of the constraint (loose, tight at lower bound, or tight at upper bound). */ void presolve_check_duals(const CoinPostsolveMatrix *postObj) ; /*! \relates CoinPresolveMatrix \brief Check primal solution and architectural variable status. The architectural variables can be checked for bogus values, feasibility, and valid status. The row activity is checked for bogus values, accuracy, and feasibility. By default, row activity is not checked (presolve is sloppy about maintaining it). See the definitions in CoinPresolvePsdebug.cpp for more information. */ void presolve_check_sol(const CoinPresolveMatrix *preObj, int chkColSol = 2, int chkRowAct = 1, int chkStatus = 1) ; /*! \relates CoinPostsolveMatrix \brief Check primal solution and architectural variable status. The architectural variables can be checked for bogus values, feasibility, and valid status. The row activity is checked for bogus values, accuracy, and feasibility. See the definitions in CoinPresolvePsdebug.cpp for more information. */ void presolve_check_sol(const CoinPostsolveMatrix *postObj, int chkColSol = 2, int chkRowAct = 2, int chkStatus = 1) ; /*! \relates CoinPresolveMatrix \brief Check for the proper number of basic variables. */ void presolve_check_nbasic(const CoinPresolveMatrix *preObj) ; /*! \relates CoinPostsolveMatrix \brief Check for the proper number of basic variables. */ void presolve_check_nbasic(const CoinPostsolveMatrix *postObj) ; //@} #endif CoinUtils-2.9.10/CoinUtils/src/CoinStructuredModel.hpp0000644000076600007660000002037111510456064021346 0ustar coincoin/* $Id: CoinStructuredModel.hpp 1372 2011-01-03 23:31:00Z lou $ */ // Copyright (C) 2008, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinStructuredModel_H #define CoinStructuredModel_H #include "CoinModel.hpp" #include /** This is a model which is made up of Coin(Structured)Model blocks. */ typedef struct CoinModelInfo2 { int rowBlock; // Which row block int columnBlock; // Which column block char matrix; // nonzero if matrix exists char rhs; // nonzero if non default rhs exists char rowName; // nonzero if row names exists char integer; // nonzero if integer information exists char bounds; // nonzero if non default bounds/objective exists char columnName; // nonzero if column names exists CoinModelInfo2() : rowBlock(0), columnBlock(0), matrix(0), rhs(0), rowName(0), integer(0), bounds(0), columnName(0) {} } CoinModelBlockInfo; class CoinStructuredModel : public CoinBaseModel { public: /**@name Useful methods for building model */ //@{ /** add a block from a CoinModel using names given as parameters returns number of errors (e.g. both have objectives but not same) */ int addBlock(const std::string & rowBlock, const std::string & columnBlock, const CoinBaseModel & block); /** add a block from a CoinModel with names in model returns number of errors (e.g. both have objectives but not same) */ int addBlock(const CoinBaseModel & block); /** add a block from a CoinModel using names given as parameters returns number of errors (e.g. both have objectives but not same) This passes in block - structured model takes ownership */ int addBlock(const std::string & rowBlock, const std::string & columnBlock, CoinBaseModel * block); /** add a block using names */ int addBlock(const std::string & rowBlock, const std::string & columnBlock, const CoinPackedMatrix & matrix, const double * rowLower, const double * rowUpper, const double * columnLower, const double * columnUpper, const double * objective); /** Write the problem in MPS format to a file with the given filename. \param compression can be set to three values to indicate what kind of file should be written
  • 0: plain text (default)
  • 1: gzip compressed (.gz is appended to \c filename)
  • 2: bzip2 compressed (.bz2 is appended to \c filename) (TODO)
If the library was not compiled with the requested compression then writeMps falls back to writing a plain text file. \param formatType specifies the precision to used for values in the MPS file
  • 0: normal precision (default)
  • 1: extra accuracy
  • 2: IEEE hex
\param numberAcross specifies whether 1 or 2 (default) values should be specified on every data line in the MPS file. not const as may change model e.g. fill in default bounds */ int writeMps(const char *filename, int compression = 0, int formatType = 0, int numberAcross = 2, bool keepStrings=false) ; /** Decompose a CoinModel 1 - try D-W 2 - try Benders 3 - try Staircase Returns number of blocks or zero if no structure */ int decompose(const CoinModel &model,int type, int maxBlocks=50); /** Decompose a model specified as arrays + CoinPackedMatrix 1 - try D-W 2 - try Benders 3 - try Staircase Returns number of blocks or zero if no structure */ int decompose(const CoinPackedMatrix & matrix, const double * rowLower, const double * rowUpper, const double * columnLower, const double * columnUpper, const double * objective, int type,int maxBlocks=50, double objectiveOffset=0.0); //@} /**@name For getting information */ //@{ /// Return number of row blocks inline int numberRowBlocks() const { return numberRowBlocks_;} /// Return number of column blocks inline int numberColumnBlocks() const { return numberColumnBlocks_;} /// Return number of elementBlocks inline CoinBigIndex numberElementBlocks() const { return numberElementBlocks_;} /// Return number of elements CoinBigIndex numberElements() const; /// Return the i'th row block name inline const std::string & getRowBlock(int i) const { return rowBlockNames_[i];} /// Set i'th row block name inline void setRowBlock(int i,const std::string &name) { rowBlockNames_[i] = name;} /// Add or check a row block name and number of rows int addRowBlock(int numberRows,const std::string &name) ; /// Return a row block index given a row block name int rowBlock(const std::string &name) const; /// Return i'th the column block name inline const std::string & getColumnBlock(int i) const { return columnBlockNames_[i];} /// Set i'th column block name inline void setColumnBlock(int i,const std::string &name) { columnBlockNames_[i] = name;} /// Add or check a column block name and number of columns int addColumnBlock(int numberColumns,const std::string &name) ; /// Return a column block index given a column block name int columnBlock(const std::string &name) const; /// Return i'th block type inline const CoinModelBlockInfo & blockType(int i) const { return blockType_[i];} /// Return i'th block inline CoinBaseModel * block(int i) const { return blocks_[i];} /// Return block corresponding to row and column const CoinBaseModel * block(int row,int column) const; /// Return i'th block as CoinModel (or NULL) CoinModel * coinBlock(int i) const; /// Return block corresponding to row and column as CoinModel const CoinBaseModel * coinBlock(int row,int column) const; /// Return block number corresponding to row and column int blockIndex(int row,int column) const; /** Return model as a CoinModel block and fill in info structure and update counts */ CoinModel * coinModelBlock(CoinModelBlockInfo & info) ; /// Sets given block into coinModelBlocks_ void setCoinModel(CoinModel * block, int iBlock); /// Refresh info in blockType_ void refresh(int iBlock); /** Fill pointers corresponding to row and column */ CoinModelBlockInfo block(int row,int column, const double * & rowLower, const double * & rowUpper, const double * & columnLower, const double * & columnUpper, const double * & objective) const; /// Direction of optimization (1 - minimize, -1 - maximize, 0 - ignore inline double optimizationDirection() const { return optimizationDirection_; } /// Set direction of optimization (1 - minimize, -1 - maximize, 0 - ignore inline void setOptimizationDirection(double value) { optimizationDirection_=value;} //@} /**@name Constructors, destructor */ //@{ /** Default constructor. */ CoinStructuredModel(); /** Read a problem in MPS format from the given filename. May try and decompose */ CoinStructuredModel(const char *fileName,int decompose=0, int maxBlocks=50); /** Destructor */ virtual ~CoinStructuredModel(); //@} /**@name Copy method */ //@{ /** The copy constructor. */ CoinStructuredModel(const CoinStructuredModel&); /// = CoinStructuredModel& operator=(const CoinStructuredModel&); /// Clone virtual CoinBaseModel * clone() const; //@} private: /** Fill in info structure and update counts Returns number of inconsistencies on border */ int fillInfo(CoinModelBlockInfo & info,const CoinModel * block); /** Fill in info structure and update counts */ void fillInfo(CoinModelBlockInfo & info,const CoinStructuredModel * block); /**@name Data members */ //@{ /// Current number of row blocks int numberRowBlocks_; /// Current number of column blocks int numberColumnBlocks_; /// Current number of element blocks int numberElementBlocks_; /// Maximum number of element blocks int maximumElementBlocks_; /// Rowblock name std::vector rowBlockNames_; /// Columnblock name std::vector columnBlockNames_; /// Blocks CoinBaseModel ** blocks_; /// CoinModel copies of blocks or NULL if original CoinModel CoinModel ** coinModelBlocks_; /// Which parts of model are set in block CoinModelBlockInfo * blockType_; //@} }; #endif CoinUtils-2.9.10/CoinUtils/src/CoinPresolveMatrix.cpp0000644000076600007660000004147611670247221021211 0ustar coincoin/* $Id: CoinPresolveMatrix.cpp 1510 2011-12-08 23:56:01Z lou $ */ // 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). #include #include #include #include "CoinHelperFunctions.hpp" #include "CoinPresolveMatrix.hpp" #include "CoinTime.hpp" /*! \file This file contains methods for CoinPresolveMatrix, the object used during presolve transformations. */ /* Constructor and destructor for CoinPresolveMatrix. */ /* CoinPresolveMatrix constructor The constructor does very little, for much the same reasons that the CoinPrePostsolveMatrix constructor does little. Might as well wait until we load a matrix. In general, for presolve the allocated size can be equal to the size of the constraint matrix before presolve transforms are applied. (Presolve transforms are assumed to reduce the size of the constraint system.) But we need to keep the *_alloc parameters for compatibility with CoinPrePostsolveMatrix. */ CoinPresolveMatrix::CoinPresolveMatrix (int ncols_alloc, int nrows_alloc, CoinBigIndex nelems_alloc) : CoinPrePostsolveMatrix(ncols_alloc,nrows_alloc,nelems_alloc), clink_(0), rlink_(0), dobias_(0.0), mrstrt_(0), hinrow_(0), rowels_(0), hcol_(0), integerType_(0), anyInteger_(false), tuning_(false), startTime_(0.0), feasibilityTolerance_(0.0), status_(-1), pass_(0), maxSubstLevel_(3), colChanged_(0), colsToDo_(0), numberColsToDo_(0), nextColsToDo_(0), numberNextColsToDo_(0), rowChanged_(0), rowsToDo_(0), numberRowsToDo_(0), nextRowsToDo_(0), numberNextRowsToDo_(0), presolveOptions_(0), anyProhibited_(false), usefulRowInt_(NULL), usefulRowDouble_(NULL), usefulColumnInt_(NULL), usefulColumnDouble_(NULL), randomNumber_(NULL), infiniteUp_(NULL), sumUp_(NULL), infiniteDown_(NULL), sumDown_(NULL) { /* nothing to do here */ return ; } /* CoinPresolveMatrix destructor. */ CoinPresolveMatrix::~CoinPresolveMatrix() { delete[] clink_ ; delete[] rlink_ ; delete[] mrstrt_ ; delete[] hinrow_ ; delete[] rowels_ ; delete[] hcol_ ; delete[] integerType_ ; delete[] rowChanged_ ; delete[] rowsToDo_ ; delete[] nextRowsToDo_ ; delete[] colChanged_ ; delete[] colsToDo_ ; delete[] nextColsToDo_ ; delete[] usefulRowInt_; delete[] usefulRowDouble_; delete[] usefulColumnInt_; delete[] usefulColumnDouble_; delete[] randomNumber_; delete[] infiniteUp_; delete[] sumUp_; delete[] infiniteDown_; delete[] sumDown_; return ; } /* This routine loads a CoinPackedMatrix and proceeds to do the bulk of the initialisation for the PrePostsolve and Presolve objects. In the CoinPrePostsolveMatrix portion of the object, it initialises the column-major packed matrix representation and the arrays that track the motion of original columns and rows. In the CoinPresolveMatrix portion of the object, it initialises the row-major packed matrix representation, the arrays that assist in matrix storage management, and the arrays that track the rows and columns to be processed. Arrays are allocated to the requested size (ncols0_, nrow0_, nelems0_). The source matrix must be column ordered; it does not need to be gap-free. Bulk storage in the column-major (hrow_, colels_) and row-major (hcol_, rowels_) matrices is allocated at twice the required size so that we can expand columns and rows as needed. This is almost certainly grossly oversize, but (1) it's efficient, and (2) the utility routines which compact the bulk storage areas have no provision to reallocate. */ void CoinPresolveMatrix::setMatrix (const CoinPackedMatrix *mtx) { /* Check to make sure the matrix will fit and is column ordered. */ if (mtx->isColOrdered() == false) { throw CoinError("source matrix must be column ordered", "setMatrix","CoinPrePostsolveMatrix") ; } int numCols = mtx->getNumCols() ; if (numCols > ncols0_) { throw CoinError("source matrix exceeds allocated capacity", "setMatrix","CoinPrePostsolveMatrix") ; } /* Acquire the actual size, but allocate the matrix storage to the requested capacity. The column-major rep is part of the PrePostsolve object, the row-major rep belongs to the Presolve object. */ ncols_ = numCols ; nrows_ = mtx->getNumRows() ; nelems_ = mtx->getNumElements() ; bulk0_ = static_cast (bulkRatio_*nelems0_) ; if (mcstrt_ == 0) mcstrt_ = new CoinBigIndex [ncols0_+1] ; if (hincol_ == 0) hincol_ = new int [ncols0_+1] ; if (hrow_ == 0) hrow_ = new int [bulk0_] ; if (colels_ == 0) colels_ = new double [bulk0_] ; if (mrstrt_ == 0) mrstrt_ = new CoinBigIndex [nrows0_+1] ; if (hinrow_ == 0) hinrow_ = new int [nrows0_+1] ; if (hcol_ == 0) hcol_ = new int [bulk0_] ; if (rowels_ == 0) rowels_ = new double [bulk0_] ; /* Grab the corresponding vectors from the source matrix. */ const CoinBigIndex *src_mcstrt = mtx->getVectorStarts() ; const int *src_hincol = mtx->getVectorLengths() ; const double *src_colels = mtx->getElements() ; const int *src_hrow = mtx->getIndices() ; /* Bulk copy the column starts and lengths. */ CoinMemcpyN(src_mcstrt,mtx->getSizeVectorStarts(),mcstrt_) ; CoinMemcpyN(src_hincol,mtx->getSizeVectorLengths(),hincol_) ; /* Copy the coefficients column by column in case there are gaps between the columns in the bulk storage area. The assert is just in case the gaps are *really* big. */ assert(src_mcstrt[ncols_] <= bulk0_) ; int j; for ( j = 0 ; j < numCols ; j++) { int lenj = src_hincol[j] ; CoinBigIndex offset = mcstrt_[j] ; CoinMemcpyN(src_colels+offset,lenj,colels_+offset) ; CoinMemcpyN(src_hrow+offset,lenj,hrow_+offset) ; } /* Now make a row-major copy. Start by counting the number of coefficients in each row; we can do this directly in hinrow. Given the number of coefficients in a row, we know how to lay out the bulk storage area. */ CoinZeroN(hinrow_,nrows0_+1) ; for ( j = 0 ; j < ncols_ ; j++) { int *rowIndices = hrow_+mcstrt_[j] ; int lenj = hincol_[j] ; for (int k = 0 ; k < lenj ; k++) { int i = rowIndices[k] ; hinrow_[i]++ ; } } /* Initialize mrstrt[i] to the start of row i+1. As we drop each coefficient and column index into the bulk storage arrays, we'll decrement and store. When we're done, mrstrt[i] will point to the start of row i, as it should. */ int totalCoeffs = 0 ; int i; for ( i = 0 ; i < nrows_ ; i++) { totalCoeffs += hinrow_[i] ; mrstrt_[i] = totalCoeffs ; } mrstrt_[nrows_] = totalCoeffs ; for ( j = ncols_-1 ; j >= 0 ; j--) { int lenj = hincol_[j] ; double *colCoeffs = colels_+mcstrt_[j] ; int *rowIndices = hrow_+mcstrt_[j] ; for (int k = 0 ; k < lenj ; k++) { int ri; ri = rowIndices[k] ; double aij = colCoeffs[k] ; CoinBigIndex l = --mrstrt_[ri] ; rowels_[l] = aij ; hcol_[l] = j ; } } /* Now the support structures. The entry for original column j should start out as j; similarly for row i. originalColumn_ and originalRow_ belong to the PrePostsolve object. */ if (originalColumn_ == 0) originalColumn_ = new int [ncols0_] ; if (originalRow_ == 0) originalRow_ = new int [nrows0_] ; for ( j = 0 ; j < ncols0_ ; j++) originalColumn_[j] = j ; for ( i = 0 ; i < nrows0_ ; i++) originalRow_[i] = i ; /* We have help to set up the clink_ and rlink_ vectors (aids for matrix bulk storage management). clink_ and rlink_ belong to the Presolve object. Once this is done, it's safe to set mrstrt_[nrows_] and mcstrt_[ncols_] to the full size of the bulk storage area. */ if (clink_ == 0) clink_ = new presolvehlink [ncols0_+1] ; if (rlink_ == 0) rlink_ = new presolvehlink [nrows0_+1] ; presolve_make_memlists(/*mcstrt_,*/hincol_,clink_,ncols_) ; presolve_make_memlists(/*mrstrt_,*/hinrow_,rlink_,nrows_) ; mcstrt_[ncols_] = bulk0_ ; mrstrt_[nrows_] = bulk0_ ; /* No rows or columns have been changed just yet. colChanged_ and rowChanged_ belong to the Presolve object. */ if (colChanged_ == 0) colChanged_ = new unsigned char [ncols0_] ; CoinZeroN(colChanged_,ncols0_) ; if (rowChanged_ == 0) rowChanged_ = new unsigned char [nrows0_] ; CoinZeroN(rowChanged_,nrows0_) ; /* Finally, allocate the various *ToDo arrays. These are used to track the rows and columns which should be processed in a given round of presolve transforms. These belong to the Presolve object. Setting number*ToDo to 0 is all the initialization that's required here. */ rowsToDo_ = new int [nrows0_] ; numberRowsToDo_ = 0 ; nextRowsToDo_ = new int [nrows0_] ; numberNextRowsToDo_ = 0 ; colsToDo_ = new int [ncols0_] ; numberColsToDo_ = 0 ; nextColsToDo_ = new int [ncols0_] ; numberNextColsToDo_ = 0 ; initializeStuff(); return ; } /* Recompute ups and downs for a row (nonzero if infeasible). If oneRow == -1 then do all rows. */ int CoinPresolveMatrix::recomputeSums (int oneRow) { const int &numberRows = nrows_ ; const int &numberColumns = ncols_ ; const double *const columnLower = clo_ ; const double *const columnUpper = cup_ ; double *const rowLower = rlo_ ; double *const rowUpper = rup_ ; const double *element = rowels_ ; const int *column = hcol_ ; const CoinBigIndex *rowStart = mrstrt_ ; const int *rowLength = hinrow_ ; const double large = PRESOLVE_SMALL_INF ; const double &tolerance = feasibilityTolerance_ ; const int iFirst = ((oneRow >= 0)?oneRow:0) ; const int iLast = ((oneRow >= 0)?oneRow:numberRows) ; /* Open a loop to process rows of interest. */ int infeasible = 0 ; for (int iRow = iFirst ; iRow < iLast ; iRow++) { infiniteUp_[iRow] = 0 ; sumUp_[iRow] = 0.0 ; infiniteDown_[iRow] = 0 ; sumDown_[iRow] = 0.0 ; /* Compute finite and infinite contributions to row lhs upper and lower bounds for nonempty rows with at least one reasonable bound. */ if ((rowLower[iRow] > -large || rowUpper[iRow] < large) && rowLength[iRow] > 0) { int infiniteUpper = 0 ; int infiniteLower = 0 ; double maximumUp = 0.0 ; double maximumDown = 0.0 ; const CoinBigIndex &rStart = rowStart[iRow] ; const CoinBigIndex rEnd = rStart+rowLength[iRow] ; for (CoinBigIndex j = rStart ; j < rEnd ; ++j) { const double &value = element[j] ; const int &iColumn = column[j] ; const double &lj = columnLower[iColumn] ; const double &uj = columnUpper[iColumn] ; if (value > 0.0) { if (uj < large) maximumUp += uj*value ; else ++infiniteUpper ; if (lj > -large) maximumDown += lj*value ; else ++infiniteLower ; } else if (value < 0.0) { if (uj < large) maximumDown += uj*value ; else ++infiniteLower ; if (lj > -large) maximumUp += lj*value ; else ++infiniteUpper ; } } infiniteUp_[iRow] = infiniteUpper ; sumUp_[iRow] = maximumUp ; infiniteDown_[iRow] = infiniteLower ; sumDown_[iRow] = maximumDown ; double maxUp = maximumUp+infiniteUpper*large ; double maxDown = maximumDown-infiniteLower*large ; /* Check for redundant or infeasible row. */ if (maxUp <= rowUpper[iRow]+tolerance && maxDown >= rowLower[iRow]-tolerance) { infiniteUp_[iRow] = numberColumns+1 ; infiniteDown_[iRow] = numberColumns+1 ; } else if (maxUp < rowLower[iRow]-tolerance) { infeasible++ ; } else if (maxDown > rowUpper[iRow]+tolerance) { infeasible++ ; } } else if (rowLength[iRow] > 0) { /* A row where both rhs bounds are very large. Mark as redundant. */ assert(rowLower[iRow] <= -large && rowUpper[iRow] >= large) ; infiniteUp_[iRow] = numberColumns+1 ; infiniteDown_[iRow] = numberColumns+1 ; } else { /* Row with length zero. Check the the rhs bounds include zero and force `near-to-zero' to exactly zero. */ assert(rowLength[iRow] == 0) ; if (rowLower[iRow] > 0.0 || rowUpper[iRow] < 0.0) { double tolerance2 = 10.0*tolerance ; if (rowLower[iRow] > 0.0 && rowLower[iRow] < tolerance2) rowLower[iRow] = 0.0 ; else infeasible++ ; if (rowUpper[iRow] < 0.0 && rowUpper[iRow] > -tolerance2) rowUpper[iRow] = 0.0 ; else infeasible++ ; } } } return (infeasible) ; } /* Preallocate scratch work arrays, arrays to hold row lhs bound information, and an array of random numbers. */ void CoinPresolveMatrix::initializeStuff () { usefulRowInt_ = new int [3*nrows_] ; usefulRowDouble_ = new double [2*nrows_] ; usefulColumnInt_ = new int [2*ncols_] ; usefulColumnDouble_ = new double[ncols_] ; int k = CoinMax(ncols_+1,nrows_+1) ; randomNumber_ = new double [k] ; coin_init_random_vec(randomNumber_,k) ; infiniteUp_ = new int [nrows_] ; sumUp_ = new double [nrows_] ; infiniteDown_ = new int [nrows_] ; sumDown_ = new double [nrows_] ; return ; } /* Free arrays allocated in initializeStuff. */ void CoinPresolveMatrix::deleteStuff() { delete[] usefulRowInt_; delete[] usefulRowDouble_; delete[] usefulColumnInt_; delete[] usefulColumnDouble_; delete[] randomNumber_; delete[] infiniteUp_; delete[] sumUp_; delete[] infiniteDown_; delete[] sumDown_; usefulRowInt_ = NULL; usefulRowDouble_ = NULL; usefulColumnInt_ = NULL; usefulColumnDouble_ = NULL; randomNumber_ = NULL; infiniteUp_ = NULL; sumUp_ = NULL; infiniteDown_ = NULL; sumDown_ = NULL; } /* These functions set integer type information. The first expects an array with an entry for each variable. The second sets all variables to integer or continuous type. */ void CoinPresolveMatrix::setVariableType (const unsigned char *variableType, int lenParam) { int len ; if (lenParam < 0) { len = ncols_ ; } else if (lenParam > ncols0_) { throw CoinError("length exceeds allocated size", "setIntegerType","CoinPresolveMatrix") ; } else { len = lenParam ; } if (integerType_ == 0) integerType_ = new unsigned char [ncols0_] ; CoinCopyN(variableType,len,integerType_) ; return ; } void CoinPresolveMatrix::setVariableType (bool allIntegers, int lenParam) { int len ; if (lenParam < 0) { len = ncols_ ; } else if (lenParam > ncols0_) { throw CoinError("length exceeds allocated size", "setIntegerType","CoinPresolveMatrix") ; } else { len = lenParam ; } if (integerType_ == 0) integerType_ = new unsigned char [ncols0_] ; const unsigned char value = 1 ; if (allIntegers == true) { CoinFillN(integerType_,len,value) ; } else { CoinZeroN(integerType_,len) ; } return ; } /* The next pair of routines initialises the [row,col]ToDo lists in preparation for a major pass. All except rows/columns marked as prohibited are added to the lists. */ void CoinPresolveMatrix::initColsToDo () /* Initialize the ToDo lists in preparation for a major iteration of preprocessing. First, cut back the ToDo and NextToDo lists to zero entries. Then place all columns not marked prohibited on the ToDo list. */ { int j ; numberNextColsToDo_ = 0 ; if (anyProhibited_ == false) { for (j = 0 ; j < ncols_ ; j++) { colsToDo_[j] = j ; } numberColsToDo_ = ncols_ ; } else { numberColsToDo_ = 0 ; for (j = 0 ; j < ncols_ ; j++) if (colProhibited(j) == false) { colsToDo_[numberColsToDo_++] = j ; } } return ; } void CoinPresolveMatrix::initRowsToDo () /* Initialize the ToDo lists in preparation for a major iteration of preprocessing. First, cut back the ToDo and NextToDo lists to zero entries. Then place all rows not marked prohibited on the ToDo list. */ { int i ; numberNextRowsToDo_ = 0 ; if (anyProhibited_ == false) { for (i = 0 ; i < nrows_ ; i++) { rowsToDo_[i] = i ; } numberRowsToDo_ = nrows_ ; } else { numberRowsToDo_ = 0 ; for (i = 0 ; i < nrows_ ; i++) if (rowProhibited(i) == false) { rowsToDo_[numberRowsToDo_++] = i ; } } return ; } int CoinPresolveMatrix::stepColsToDo () /* This routine transfers the contents of NextToDo to ToDo, simultaneously resetting the Changed indicator. It returns the number of columns transfered. */ { int k ; for (k = 0 ; k < numberNextColsToDo_ ; k++) { int j = nextColsToDo_[k] ; unsetColChanged(j) ; colsToDo_[k] = j ; } numberColsToDo_ = numberNextColsToDo_ ; numberNextColsToDo_ = 0 ; return (numberColsToDo_) ; } int CoinPresolveMatrix::stepRowsToDo () /* This routine transfers the contents of NextToDo to ToDo, simultaneously resetting the Changed indicator. It returns the number of columns transfered. */ { int k ; for (k = 0 ; k < numberNextRowsToDo_ ; k++) { int i = nextRowsToDo_[k] ; unsetRowChanged(i) ; rowsToDo_[k] = i ; } numberRowsToDo_ = numberNextRowsToDo_ ; numberNextRowsToDo_ = 0 ; return (numberRowsToDo_) ; } // Say we want statistics - also set time void CoinPresolveMatrix::statistics() { tuning_=true; startTime_ = CoinCpuTime(); } #ifdef PRESOLVE_DEBUG #include "CoinPresolvePsdebug.cpp" #endif CoinUtils-2.9.10/CoinUtils/src/CoinOslFactorization3.cpp0000644000076600007660000023703112130104232021556 0ustar coincoin/* $Id: CoinOslFactorization3.cpp 1585 2013-04-06 20:42:02Z stefan $ */ /* Copyright (C) 1987, 2009, International Business Machines Corporation and others. All Rights Reserved. This code is licensed under the terms of the Eclipse Public License (EPL). */ #include "CoinOslFactorization.hpp" #include "CoinOslC.h" #include "CoinFinite.hpp" #define GO_DENSE 70 #define GO_DENSE_RATIO 1.8 int c_ekkclco(const EKKfactinfo *fact,int *hcoli, int *mrstrt, int *hinrow, int xnewro); void c_ekkclcp(const int *hcol, const double *dels, const int * mrstrt, int *hrow, double *dels2, int *mcstrt, int *hincol, int itype, int nnrow, int nncol, int ninbas); int c_ekkcmfc(EKKfactinfo *fact, EKKHlink *rlink, EKKHlink *clink, EKKHlink *mwork, void *maction_void, int nnetas, int *nsingp, int *xrejctp, int *xnewrop, int xnewco, int *ncompactionsp); int c_ekkcmfy(EKKfactinfo *fact, EKKHlink *rlink, EKKHlink *clink, EKKHlink *mwork, void *maction_void, int nnetas, int *nsingp, int *xrejctp, int *xnewrop, int xnewco, int *ncompactionsp); int c_ekkcmfd(EKKfactinfo *fact, int *mcol, EKKHlink *rlink, EKKHlink *clink, int *maction, int nnetas, int *nnentlp, int *nnentup, int *nsingp); int c_ekkford(const EKKfactinfo *fact,const int *hinrow, const int *hincol, int *hpivro, int *hpivco, EKKHlink *rlink, EKKHlink *clink); void c_ekkrowq(int *hrow, int *hcol, double *dels, int *mrstrt, const int *hinrow, int nnrow, int ninbas); int c_ekkrwco(const EKKfactinfo *fact,double *dluval, int *hcoli, int * mrstrt, int *hinrow, int xnewro); int c_ekkrwcs(const EKKfactinfo *fact,double *dluval, int *hcoli, int *mrstrt, const int *hinrow, const EKKHlink *mwork, int nfirst); void c_ekkrwct(const EKKfactinfo *fact,double *dluval, int *hcoli, int *mrstrt, const int *hinrow, const EKKHlink *mwork, const EKKHlink *rlink, const short *msort, double *dsort, int nlast, int xnewro); int c_ekkshff(EKKfactinfo *fact, EKKHlink *clink, EKKHlink *rlink, int xnewro); void c_ekkshfv(EKKfactinfo *fact, EKKHlink *rlink, EKKHlink *clink, int xnewro); int c_ekktria(EKKfactinfo *fact, EKKHlink * rlink, EKKHlink * clink, int *nsingp, int *xnewcop, int *xnewrop, int *nlrowtp, const int ninbas); #if 0 static void c_ekkafpv(int *hentry, int *hcoli, double *dluval, int *mrstrt, int *hinrow, int nentry) { int j; int nel, krs; int koff; int irow; int ientry; int * index; for (ientry = 0; ientry < nentry; ++ientry) { #ifdef INTEL int * els_long,maxaij_long; #endif double * els; irow = UNSHIFT_INDEX(hentry[ientry]); nel = hinrow[irow]; krs = mrstrt[irow]; index=&hcoli[krs]; els=&dluval[krs]; #ifdef INTEL els_long=reinterpret_cast (els); maxaij_long=0; #else double maxaij = 0.f; #endif koff = 0; j=0; if ((nel&1)!=0) { #ifdef INTEL maxaij_long = els_long[1] & 0x7fffffff; #else maxaij=fabs(els[0]); #endif j=1; } while (jxecadr; double *dluval = fact->xeeadr; //double *dvalpv = fact->kw3adr; int *mrstrt = fact->xrsadr; int *hrowi = fact->xeradr; int *mcstrt = fact->xcsadr; int *hinrow = fact->xrnadr; int *hincol = fact->xcnadr; int *hpivro = fact->krpadr; int *hpivco = fact->kcpadr; #endif const int nrow = fact->nrow; const double drtpiv = fact->drtpiv; int j, k, kc, kce, kcs, nzj; double pivot; int kipis, kipie; int jpivot; #ifndef NDEBUG int kpivot=-1; #else int kpivot=-1; #endif bool small_pivot = false; /* next singleton column. * Note that when the pivot column itself was removed from the * list, the column in the list after it (if any) moves to the * head of the list. * Also, if any column from the pivot row was reduced to length 1, * then it will have been added to the list and now be in front. */ for (jpivot = hpivco[1]; jpivot > 0; jpivot = hpivco[1]) { const int ipivot = hrowi[mcstrt[jpivot]]; /* (2) */ assert(ipivot); /* The pivot row is being eliminated (3) */ C_EKK_REMOVE_LINK(hpivro, hinrow, rlink, ipivot); /* Loop over nonzeros in pivot row: */ kipis = mrstrt[ipivot]; kipie = kipis + hinrow[ipivot] - 1; for (k = kipis; k <= kipie; ++k) { j = hcoli[k]; /* * We're eliminating column jpivot, * so we're eliminating the row it occurs in, * so every column in this row is becoming one shorter. * * I don't know why we don't do the same for rejected columns. * * if xrejct is false, then no column has ever been rejected * and this test wouldn't have to be made. * However, that means this whole loop would have to be copied. */ if (! (clink[j].pre > nrow)) { C_EKK_REMOVE_LINK(hpivco, hincol, clink, j); /* (3) */ } --hincol[j]; kcs = mcstrt[j]; kce = kcs + hincol[j]; for (kc = kcs; kc <= kce; ++kc) { if (ipivot == hrowi[kc]) { break; } } /* ASSERT !(kc>kce) */ /* (2) */ hrowi[kc] = hrowi[kce]; hrowi[kce] = 0; if (j == jpivot) { /* remember the slot corresponding to the pivot column */ kpivot = k; } else { /* * We just reduced the length of the column. * If we haven't eliminated all of its elements completely, * then we have to put it back in its new length list. * * If the column was rejected, we only put it back in a length * list when it has been reduced to a singleton column, * because it would just be rejected again. */ nzj = hincol[j]; if (! (nzj <= 0) && ! (clink[j].pre > nrow && nzj != 1)) { C_EKK_ADD_LINK(hpivco, nzj, clink, j); /* (3) */ } } } assert (kpivot>0); /* store pivot sequence number */ ++fact->npivots; rlink[ipivot].pre = -fact->npivots; clink[jpivot].pre = -fact->npivots; /* compute how much room we'll need later */ fact->nuspike += hinrow[ipivot]; /* check the pivot */ pivot = dluval[kpivot]; if (fabs(pivot) < drtpiv) { /* pivot element too small */ small_pivot = true; rlink[ipivot].pre = -nrow - 1; clink[jpivot].pre = -nrow - 1; ++(*nsingp); } /* swap the pivoted column entry with the first entry in the row */ dluval[kpivot] = dluval[kipis]; dluval[kipis] = pivot; hcoli[kpivot] = hcoli[kipis]; hcoli[kipis] = jpivot; } return (small_pivot); } /* c_ekkcsin */ /* Uwe H. Suhl, March 1987 */ /* This routine processes row singletons during the computation of */ /* an LU-decomposition for the nucleus. */ /* Return codes (checked version 1.16): */ /* -5: not enough space in row file */ /* -6: not enough space in column file */ /* 7: pivot element too small */ /* -52: system error at label 220 (ipivot not found) */ /* -53: system error at label 400 (jpivot not found) */ int c_ekkrsin(EKKfactinfo *fact, EKKHlink *rlink, EKKHlink *clink, EKKHlink *mwork, int nfirst, int *nsingp, int *xnewcop, int *xnewrop, int *nnentup, int *kmxetap, int *ncompactionsp, int *nnentlp) { #if 1 int *hcoli = fact->xecadr; double *dluval = fact->xeeadr; //double *dvalpv = fact->kw3adr; int *mrstrt = fact->xrsadr; int *hrowi = fact->xeradr; int *mcstrt = fact->xcsadr; int *hinrow = fact->xrnadr; int *hincol = fact->xcnadr; int *hpivro = fact->krpadr; int *hpivco = fact->kcpadr; #endif const int nrow = fact->nrow; const double drtpiv = fact->drtpiv; int xnewro = *xnewrop; int xnewco = *xnewcop; int kmxeta = *kmxetap; int nnentu = *nnentup; int ncompactions = *ncompactionsp; int nnentl = *nnentlp; int i, j, k, kc, kr, npr, nzi; double pivot; int kjpis, kjpie, knprs, knpre; double elemnt, maxaij; int ipivot, epivco, lstart; #ifndef NDEBUG int kpivot=-1; #else int kpivot=-1; #endif int irtcod = 0; const int nnetas = fact->nnetas; lstart = nnetas - nnentl + 1; for (ipivot = hpivro[1]; ipivot > 0; ipivot = hpivro[1]) { const int jpivot = hcoli[mrstrt[ipivot]]; kjpis = mcstrt[jpivot]; kjpie = kjpis + hincol[jpivot] ; for (k = kjpis; k < kjpie; ++k) { i = hrowi[k]; /* * We're eliminating row ipivot, * so we're eliminating the column it occurs in, * so every row in this column is becoming one shorter. * * No exception is made for rejected rows. */ C_EKK_REMOVE_LINK(hpivro, hinrow, rlink, i); } /* The pivot column is being eliminated */ /* I don't know why there is an exception for rejected columns */ if (! (clink[jpivot].pre > nrow)) { C_EKK_REMOVE_LINK(hpivco, hincol, clink, jpivot); } epivco = hincol[jpivot] - 1; kjpie = kjpis + epivco; for (kc = kjpis; kc <= kjpie; ++kc) { if (ipivot == hrowi[kc]) { break; } } /* ASSERT !(kc>kjpie) */ /* move the last column entry into this deleted one to keep */ /* the entries compact */ hrowi[kc] = hrowi[kjpie]; hrowi[kjpie] = 0; /* store pivot sequence number */ ++fact->npivots; rlink[ipivot].pre = -fact->npivots; clink[jpivot].pre = -fact->npivots; /* Check if row or column files have to be compressed */ if (! (xnewro + epivco < lstart)) { if (! (nnentu + epivco < lstart)) { return (-5); } { int iput = c_ekkrwcs(fact,dluval, hcoli, mrstrt, hinrow, mwork, nfirst); kmxeta += xnewro - iput ; xnewro = iput - 1; ++ncompactions; } } if (! (xnewco + epivco < lstart)) { if (! (nnentu + epivco < lstart)) { return (-5); } xnewco = c_ekkclco(fact,hrowi, mcstrt, hincol, xnewco); ++ncompactions; } /* This column has no more entries in it */ hincol[jpivot] = 0; /* Perform numerical part of elimination. */ pivot = dluval[mrstrt[ipivot]]; if (fabs(pivot) < drtpiv) { irtcod = 7; rlink[ipivot].pre = -nrow - 1; clink[jpivot].pre = -nrow - 1; ++(*nsingp); } /* If epivco is 0, then we can treat this like a singleton column (?)*/ if (! (epivco <= 0)) { ++fact->xnetal; mcstrt[fact->xnetal] = lstart - 1; hpivco[fact->xnetal] = ipivot; /* Loop over nonzeros in pivot column. */ kjpis = mcstrt[jpivot]; kjpie = kjpis + epivco ; nnentl+=epivco; nnentu-=epivco; for (kc = kjpis; kc < kjpie; ++kc) { npr = hrowi[kc]; /* zero out the row entries as we go along */ hrowi[kc] = 0; /* each row in the column is getting shorter */ --hinrow[npr]; /* find the entry in this row for the pivot column */ knprs = mrstrt[npr]; knpre = knprs + hinrow[npr]; for (kr = knprs; kr <= knpre; ++kr) { if (jpivot == hcoli[kr]) break; } /* ASSERT !(kr>knpre) */ elemnt = dluval[kr]; /* move the last pivot column entry into this one */ /* to keep entries compact */ dluval[kr] = dluval[knpre]; hcoli[kr] = hcoli[knpre]; /* * c_ekkmltf put the largest entries in front, and * we want to maintain that property. * There is only a problem if we just pivoted out the first * entry, and there is more than one entry in the list. */ if (! (kr != knprs || hinrow[npr] <= 1)) { maxaij = 0.f; for (k = knprs; k <= knpre; ++k) { if (! (fabs(dluval[k]) <= maxaij)) { maxaij = fabs(dluval[k]); kpivot = k; } } assert (kpivot>0); maxaij = dluval[kpivot]; dluval[kpivot] = dluval[knprs]; dluval[knprs] = maxaij; j = hcoli[kpivot]; hcoli[kpivot] = hcoli[knprs]; hcoli[knprs] = j; } /* store elementary row transformation */ --lstart; dluval[lstart] = -elemnt / pivot; hrowi[lstart] = SHIFT_INDEX(npr); /* Only add the row back in a length list if it isn't empty */ nzi = hinrow[npr]; if (! (nzi <= 0)) { C_EKK_ADD_LINK(hpivro, nzi, rlink, npr); } } ++fact->nuspike; } } *xnewrop = xnewro; *xnewcop = xnewco; *kmxetap = kmxeta; *nnentup = nnentu; *ncompactionsp = ncompactions; *nnentlp = nnentl; return (irtcod); } /* c_ekkrsin */ int c_ekkfpvt(const EKKfactinfo *fact, EKKHlink *rlink, EKKHlink *clink, int *nsingp, int *xrejctp, int *xipivtp, int *xjpivtp) { double zpivlu = fact->zpivlu; #if 1 int *hcoli = fact->xecadr; double *dluval = fact->xeeadr; //double *dvalpv = fact->kw3adr; int *mrstrt = fact->xrsadr; int *hrowi = fact->xeradr; int *mcstrt = fact->xcsadr; int *hinrow = fact->xrnadr; int *hincol = fact->xcnadr; int *hpivro = fact->krpadr; int *hpivco = fact->kcpadr; #endif int i, j, k, ke, kk, ks, nz, nz1, kce, kcs, kre, krs; double minsze; int marcst, mincst, mincnt, trials, nentri; int jpivot=-1; bool rjectd; int ipivot; const int nrow = fact->nrow; int irtcod = 0; /* this used to be initialized in c_ekklfct */ const int xtrial = 1; trials = 0; ipivot = 0; mincst = COIN_INT_MAX; mincnt = COIN_INT_MAX; for (nz = 2; nz <= nrow; ++nz) { nz1 = nz - 1; if (mincnt <= nz) { goto L900; } /* Search rows for a pivot */ for (i = hpivro[nz]; ! (i <= 0); i = rlink[i].suc) { ks = mrstrt[i]; ke = ks + nz - 1; /* Determine magnitude of minimal acceptable element */ minsze = fabs(dluval[ks]) * zpivlu; for (k = ks; k <= ke; ++k) { /* Consider a column only if it passes the stability test */ if (! (fabs(dluval[k]) < minsze)) { j = hcoli[k]; marcst = nz1 * hincol[j]; if (! (marcst >= mincst)) { mincst = marcst; mincnt = hincol[j]; ipivot = i; jpivot = j; if (mincnt <= nz + 1) { goto L900; } } } } ++trials; if (trials >= xtrial) { goto L900; } } /* Search columns for a pivot */ j = hpivco[nz]; while (! (j <= 0)) { /* XSEARD = XSEARD + 1 */ rjectd = false; kcs = mcstrt[j]; kce = kcs + nz - 1; for (k = kcs; k <= kce; ++k) { i = hrowi[k]; nentri = hinrow[i]; marcst = nz1 * nentri; if (! (marcst >= mincst)) { /* Determine magnitude of minimal acceptable element */ minsze = fabs(dluval[mrstrt[i]]) * zpivlu; krs = mrstrt[i]; kre = krs + nentri - 1; for (kk = krs; kk <= kre; ++kk) { if (hcoli[kk] == j) break; } /* ASSERT (kk <= kre) */ /* perform stability test */ if (! (fabs(dluval[kk]) < minsze)) { mincst = marcst; mincnt = nentri; ipivot = i; jpivot = j; rjectd = false; if (mincnt <= nz) { goto L900; } } else { if (ipivot == 0) { rjectd = true; } } } } ++trials; if (trials >= xtrial && ipivot > 0) { goto L900; } if (rjectd) { int jsuc = clink[j].suc; ++(*xrejctp); C_EKK_REMOVE_LINK(hpivco, hincol, clink, j); clink[j].pre = nrow + 1; j = jsuc; } else { j = clink[j].suc; } } } /* FLAG REJECTED ROWS (should this be columns ?) */ for (j = 1; j <= nrow; ++j) { if (hinrow[j] == 0) { rlink[j].pre = -nrow - 1; ++(*nsingp); } } irtcod = 10; L900: *xipivtp = ipivot; *xjpivtp = jpivot; return (irtcod); } /* c_ekkfpvt */ void c_ekkprpv(EKKfactinfo *fact, EKKHlink *rlink, EKKHlink *clink, int xrejct, int ipivot, int jpivot) { #if 1 int *hcoli = fact->xecadr; double *dluval = fact->xeeadr; //double *dvalpv = fact->kw3adr; int *mrstrt = fact->xrsadr; int *hrowi = fact->xeradr; int *mcstrt = fact->xcsadr; int *hinrow = fact->xrnadr; int *hincol = fact->xcnadr; int *hpivro = fact->krpadr; int *hpivco = fact->kcpadr; #endif int i, k; int kc; double pivot; int kipis = mrstrt[ipivot]; int kipie = kipis + hinrow[ipivot] - 1; #ifndef NDEBUG int kpivot=-1; #else int kpivot=-1; #endif const int nrow = fact->nrow; /* Update data structures */ { int kjpis = mcstrt[jpivot]; int kjpie = kjpis + hincol[jpivot] ; for (k = kjpis; k < kjpie; ++k) { i = hrowi[k]; C_EKK_REMOVE_LINK(hpivro, hinrow, rlink, i); } } for (k = kipis; k <= kipie; ++k) { int j = hcoli[k]; if ((xrejct == 0) || ! (clink[j].pre > nrow)) { C_EKK_REMOVE_LINK(hpivco, hincol, clink, j); } --hincol[j]; int kcs = mcstrt[j]; int kce = kcs + hincol[j]; for (kc = kcs; kc < kce ; kc ++) { if (hrowi[kc] == ipivot) break; } assert (kc0); /* Store the pivot sequence number */ ++fact->npivots; rlink[ipivot].pre = -fact->npivots; clink[jpivot].pre = -fact->npivots; pivot = dluval[kpivot]; dluval[kpivot] = dluval[kipis]; dluval[kipis] = pivot; hcoli[kpivot] = hcoli[kipis]; hcoli[kipis] = jpivot; } /* c_ekkprpv */ /* * c_ekkclco is almost exactly like c_ekkrwco. */ int c_ekkclco(const EKKfactinfo *fact,int *hcoli, int *mrstrt, int *hinrow, int xnewro) { #if 0 int *hcoli = fact->xecadr; double *dluval = fact->xeeadr; double *dvalpv = fact->kw3adr; int *mrstrt = fact->xrsadr; int *hrowi = fact->xeradr; int *mcstrt = fact->xcsadr; int *hinrow = fact->xrnadr; int *hincol = fact->xcnadr; int *hpivro = fact->krpadr; int *hpivco = fact->kcpadr; #endif int i, k, nz, kold; int kstart; const int nrow = fact->nrow; for (i = 1; i <= nrow; ++i) { nz = hinrow[i]; if (0 < nz) { /* save the last column entry of row i in hinrow */ /* and replace that entry with -i */ k = mrstrt[i] + nz - 1; hinrow[i] = hcoli[k]; hcoli[k] = -i; } } kstart = 0; kold = 0; for (k = 1; k <= xnewro; ++k) { if (hcoli[k] != 0) { ++kstart; /* if this is the last entry for the row... */ if (hcoli[k] < 0) { /* restore the entry */ i = -hcoli[k]; hcoli[k] = hinrow[i]; /* update mrstart and hinrow */ mrstrt[i] = kold + 1; hinrow[i] = kstart - kold; kold = kstart; } hcoli[kstart] = hcoli[k]; } } /* INSERTED INCASE CALLED FROM YTRIAN JJHF */ mrstrt[nrow + 1] = kstart + 1; return (kstart); } /* c_ekkclco */ #undef MACTION_T #define COIN_OSL_CMFC #define MACTION_T short int int c_ekkcmfc(EKKfactinfo *fact, EKKHlink *rlink, EKKHlink *clink, EKKHlink *mwork, void *maction_void, int nnetas, int *nsingp, int *xrejctp, int *xnewrop, int xnewco, int *ncompactionsp) #include "CoinOslC.h" #undef COIN_OSL_CMFC #undef MACTION_T static int c_ekkidmx(int n, const double *dx) { int ret_val; int i; double dmax; --dx; /* Function Body */ if (n < 1) { return (0); } if (n == 1) { return (1); } ret_val = 1; dmax = fabs(dx[1]); for (i = 2; i <= n; ++i) { if (fabs(dx[i]) > dmax) { ret_val = i; dmax = fabs(dx[i]); } } return ret_val; } /* c_ekkidmx */ /* Return codes in IRTCOD/IRTCOD are */ /* 4: numerical problems */ /* 5: not enough space in row file */ /* 6: not enough space in column file */ int c_ekkcmfd(EKKfactinfo *fact, int *mcol, EKKHlink *rlink, EKKHlink *clink, int *maction, int nnetas, int *nnentlp, int *nnentup, int *nsingp) { int *hcoli = fact->xecadr; double *dluval = fact->xeeadr; int *mrstrt = fact->xrsadr; int *hrowi = fact->xeradr; int *mcstrt = fact->xcsadr; int *hinrow = fact->xrnadr; int *hincol = fact->xcnadr; int *hpivro = fact->krpadr; int *hpivco = fact->kcpadr; int nnentl = *nnentlp; int nnentu = *nnentup; int storeZero = fact->ndenuc; int mkrs[8]; double dpivyy[8]; /* Local variables */ int i, j; double d0, dx; int nz, ndo, krs; int kend, jcol; int irow, iput, jrow, krxs; int mjcol[8]; double pivot; int count; int ilast, isort; double dpivx, dsave; double dpivxx[8]; double multip; int lstart, ndense, krlast, kcount, idense, ipivot, jdense, kchunk, jpivot; const int nrow = fact->nrow; int irtcod = 0; lstart = nnetas - nnentl + 1; /* put list of columns in last HROWI */ /* fix row order once for all */ ndense = nrow - fact->npivots; iput = ndense + 1; for (i = 1; i <= nrow; ++i) { if (hpivro[i] > 0) { irow = hpivro[i]; for (j = 1; j <= nrow; ++j) { --iput; maction[iput] = irow; irow = rlink[irow].suc; if (irow == 0) { break; } } } } if (iput != 1) { ++(*nsingp); } else { /* Use HCOLI just for last row */ ilast = maction[1]; krlast = mrstrt[ilast]; /* put list of columns in last HCOLI */ iput = 0; for (i = 1; i <= nrow; ++i) { if (clink[i].pre >= 0) { hcoli[krlast + iput] = i; ++iput; } } if (iput != ndense) { ++(*nsingp); } else { ndo = ndense / 8; /* do most */ for (kcount = 1; kcount <= ndo; ++kcount) { idense = ndense; isort = 8; for (count = ndense; count >= ndense - 7; --count) { ipivot = maction[count]; krs = mrstrt[ipivot]; --isort; mkrs[isort] = krs; } isort = 8; for (count = ndense; count >= ndense - 7; --count) { /* Find a pivot element */ --isort; ipivot = maction[count]; krs = mkrs[isort]; jcol = c_ekkidmx(idense, &dluval[krs]) - 1; pivot = dluval[krs + jcol]; --idense; mcol[count] = jcol; mjcol[isort] = mcol[count]; dluval[krs + jcol] = dluval[krs + idense]; if (fabs(pivot) < fact->zeroTolerance) { pivot = 0.; dpivx = 0.; } else { dpivx = 1. / pivot; } dluval[krs + idense] = pivot; dpivxx[isort] = dpivx; for (j = isort - 1; j >= 0; --j) { krxs = mkrs[j]; multip = -dluval[krxs + jcol] * dpivx; dluval[krxs + jcol] = dluval[krxs + idense]; /* for moment skip if zero */ if (fabs(multip) > fact->zeroTolerance) { for (i = 0; i < idense; ++i) { dluval[krxs + i] += multip * dluval[krs + i]; } } else { multip = 0.; } dluval[krxs + idense] = multip; } } /* sort all U in rows already done */ for (i = 7; i >= 0; --i) { /* **** this is important bit */ krs = mkrs[i]; for (j = i - 1; j >= 0; --j) { jcol = mjcol[j]; dsave = dluval[krs + jcol]; dluval[krs + jcol] = dluval[krs + idense + j]; dluval[krs + idense + j] = dsave; } } /* leave IDENSE as it is */ if (ndense <= 400) { for (jrow = ndense - 8; jrow >= 1; --jrow) { irow = maction[jrow]; krxs = mrstrt[irow]; for (j = 7; j >= 0; --j) { jcol = mjcol[j]; dsave = dluval[krxs + jcol]; dluval[krxs + jcol] = dluval[krxs + idense + j]; dluval[krxs + idense + j] = dsave; } for (j = 7; j >= 0; --j) { krs = mkrs[j]; jdense = idense + j; dpivx = dpivxx[j]; multip = -dluval[krxs + jdense] * dpivx; if (fabs(multip) <= fact->zeroTolerance) { multip = 0.; } dpivyy[j] = multip; dluval[krxs + jdense] = multip; for (i = idense; i < jdense; ++i) { dluval[krxs + i] += multip * dluval[krs + i]; } } for (i = 0; i < idense; ++i) { dx = dluval[krxs + i]; d0 = dpivyy[0] * dluval[mkrs[0] + i]; dx += dpivyy[1] * dluval[mkrs[1] + i]; d0 += dpivyy[2] * dluval[mkrs[2] + i]; dx += dpivyy[3] * dluval[mkrs[3] + i]; d0 += dpivyy[4] * dluval[mkrs[4] + i]; dx += dpivyy[5] * dluval[mkrs[5] + i]; d0 += dpivyy[6] * dluval[mkrs[6] + i]; dx += dpivyy[7] * dluval[mkrs[7] + i]; dluval[krxs + i] = d0 + dx; } } } else { for (jrow = ndense - 8; jrow >= 1; --jrow) { irow = maction[jrow]; krxs = mrstrt[irow]; for (j = 7; j >= 0; --j) { jcol = mjcol[j]; dsave = dluval[krxs + jcol]; dluval[krxs + jcol] = dluval[krxs + idense + j]; dluval[krxs + idense + j] = dsave; } for (j = 7; j >= 0; --j) { krs = mkrs[j]; jdense = idense + j; dpivx = dpivxx[j]; multip = -dluval[krxs + jdense] * dpivx; if (fabs(multip) <= fact->zeroTolerance) { multip = 0.; } dluval[krxs + jdense] = multip; for (i = idense; i < jdense; ++i) { dluval[krxs + i] += multip * dluval[krs + i]; } } } for (kchunk = 0; kchunk < idense; kchunk += 400) { kend = CoinMin(idense - 1, kchunk + 399); for (jrow = ndense - 8; jrow >= 1; --jrow) { irow = maction[jrow]; krxs = mrstrt[irow]; for (j = 7; j >= 0; --j) { dpivyy[j] = dluval[krxs + idense + j]; } for (i = kchunk; i <= kend; ++i) { dx = dluval[krxs + i]; d0 = dpivyy[0] * dluval[mkrs[0] + i]; dx += dpivyy[1] * dluval[mkrs[1] + i]; d0 += dpivyy[2] * dluval[mkrs[2] + i]; dx += dpivyy[3] * dluval[mkrs[3] + i]; d0 += dpivyy[4] * dluval[mkrs[4] + i]; dx += dpivyy[5] * dluval[mkrs[5] + i]; d0 += dpivyy[6] * dluval[mkrs[6] + i]; dx += dpivyy[7] * dluval[mkrs[7] + i]; dluval[krxs + i] = d0 + dx; } } } } /* resort all U in rows already done */ for (i = 7; i >= 0; --i) { krs = mkrs[i]; for (j = 0; j < i; ++j) { jcol = mjcol[j]; dsave = dluval[krs + jcol]; dluval[krs + jcol] = dluval[krs + idense + j]; dluval[krs + idense + j] = dsave; } } ndense += -8; } idense = ndense; /* do remainder */ for (count = ndense; count >= 1; --count) { /* Find a pivot element */ ipivot = maction[count]; krs = mrstrt[ipivot]; jcol = c_ekkidmx(idense, &dluval[krs]) - 1; pivot = dluval[krs + jcol]; --idense; mcol[count] = jcol; dluval[krs + jcol] = dluval[krs + idense]; if (fabs(pivot) < fact->zeroTolerance) { dluval[krs + idense] = 0.; } else { dpivx = 1. / pivot; dluval[krs + idense] = pivot; for (jrow = idense; jrow >= 1; --jrow) { irow = maction[jrow]; krxs = mrstrt[irow]; multip = -dluval[krxs + jcol] * dpivx; dluval[krxs + jcol] = dluval[krxs + idense]; /* for moment skip if zero */ if (fabs(multip) > fact->zeroTolerance) { dluval[krxs + idense] = multip; for (i = 0; i < idense; ++i) { dluval[krxs + i] += multip * dluval[krs + i]; } } else { dluval[krxs + idense] = 0.; } } } } /* now create in form for OSL */ ndense = nrow - fact->npivots; idense = ndense; for (count = ndense; count >= 1; --count) { /* Find a pivot element */ ipivot = maction[count]; krs = mrstrt[ipivot]; --idense; jcol = mcol[count]; jpivot = hcoli[krlast + jcol]; ++fact->npivots; pivot = dluval[krs + idense]; if (pivot == 0.) { hinrow[ipivot] = 0; rlink[ipivot].pre = -nrow - 1; ++(*nsingp); irtcod = 10; } else { rlink[ipivot].pre = -fact->npivots; clink[jpivot].pre = -fact->npivots; hincol[jpivot] = 0; ++fact->xnetal; mcstrt[fact->xnetal] = lstart - 1; hpivco[fact->xnetal] = ipivot; for (jrow = idense; jrow >= 1; --jrow) { irow = maction[jrow]; krxs = mrstrt[irow]; multip = dluval[krxs + idense]; /* for moment skip if zero */ if (multip != 0.||storeZero) { /* Store elementary row transformation */ ++nnentl; --nnentu; --lstart; dluval[lstart] = multip; hrowi[lstart] = SHIFT_INDEX(irow); } } hcoli[krlast + jcol] = hcoli[krlast + idense]; /* update pivot row and last row HCOLI */ dluval[krs + idense] = dluval[krs]; hcoli[krlast + idense] = hcoli[krlast]; nz = 1; dluval[krs] = pivot; hcoli[krs] = jpivot; if (!storeZero) { for (i = 1; i <= idense; ++i) { if (fabs(dluval[krs + i]) > fact->zeroTolerance) { ++nz; hcoli[krs + nz - 1] = hcoli[krlast + i]; dluval[krs + nz - 1] = dluval[krs + i]; } } hinrow[ipivot] = nz; } else { for (i = 1; i <= idense; ++i) { ++nz; hcoli[krs + nz - 1] = hcoli[krlast + i]; dluval[krs + nz - 1] = dluval[krs + i]; } hinrow[ipivot] = nz; } } } } } *nnentlp = nnentl; *nnentup = nnentu; return (irtcod); } /* c_ekkcmfd */ /* ***C_EKKCMFC */ /* * Generate a variant of c_ekkcmfc that uses an maction array of type * int rather than short. */ #undef MACTION_T #define C_EKKCMFY #define COIN_OSL_CMFC #define MACTION_T int int c_ekkcmfy(EKKfactinfo *fact, EKKHlink *rlink, EKKHlink *clink, EKKHlink *mwork, void *maction_void, int nnetas, int *nsingp, int *xrejctp, int *xnewrop, int xnewco, int *ncompactionsp) #include "CoinOslC.h" #undef COIN_OSL_CMFC #undef C_EKKCMFY #undef MACTION_T int c_ekkford(const EKKfactinfo *fact,const int *hinrow, const int *hincol, int *hpivro, int *hpivco, EKKHlink *rlink, EKKHlink *clink) { int i, iri, nzi; const int nrow = fact->nrow; int nsing = 0; /* Uwe H. Suhl, August 1986 */ /* Builds linked lists of rows and cols of nucleus for efficient */ /* pivot searching. */ memset(hpivro+1,0,nrow*sizeof(int)); memset(hpivco+1,0,nrow*sizeof(int)); for (i = 1; i <= nrow; ++i) { //hpivro[i] = 0; //hpivco[i] = 0; assert(rlink[i].suc == 0); assert(clink[i].suc == 0); } /* Generate double linked list of rows having equal numbers of */ /* nonzeros in each row. Skip pivotal rows. */ for (i = 1; i <= nrow; ++i) { if (! (rlink[i].pre < 0)) { nzi = hinrow[i]; if (nzi <= 0) { ++nsing; rlink[i].pre = -nrow - 1; } else { iri = hpivro[nzi]; hpivro[nzi] = i; rlink[i].suc = iri; rlink[i].pre = 0; if (iri != 0) { rlink[iri].pre = i; } } } } /* Generate double linked list of cols having equal numbers of */ /* nonzeros in each col. Skip pivotal cols. */ for (i = 1; i <= nrow; ++i) { if (! (clink[i].pre < 0)) { nzi = hincol[i]; if (nzi <= 0) { ++nsing; clink[i].pre = -nrow - 1; } else { iri = hpivco[nzi]; hpivco[nzi] = i; clink[i].suc = iri; clink[i].pre = 0; if (iri != 0) { clink[iri].pre = i; } } } } return (nsing); } /* c_ekkford */ /* c version of OSL from 36100 */ /* Assumes that a basis exists in correct form */ /* Calls Uwe's routines (approximately) */ /* Then if OK shuffles U into column order */ /* Return codes: */ /* 0: everything ok */ /* 1: everything ok but performance would be better if more space */ /* would be make available */ /* 4: growth rate of element in U too big */ /* 5: not enough space in row file */ /* 6: not enough space in column file */ /* 7: pivot too small - col sing */ /* 8: pivot too small - row sing */ /* 10: matrix is singular */ /* I suspect c_ekklfct never returns 1 */ /* * layout of data * * dluval/hcoli: (L^-1)B - hole - L factors * * The L factors are written from high to low, starting from nnetas. * There are nnentl factors in L. lstart the next entry to use for the * L factors. Eventually, (L^-1)B turns into U. * The ninbas coefficients of matrix B are originally in the start of * dluval/hcoli. As L transforms it, rows may have to be expanded. * If there is room, they are copied to the start of the hole, * otherwise the first part of this area is compacted, and hopefully * there is then room. * There are nnentu coefficients in (L^-1)B. * nnentu + nnentl >= ninbas. * nnentu + nnentl == ninbas if there has been no fill-in. * nnentu is decreased when the pivot eliminates elements * (in which case there is a corresponding increase in nnentl), * and if pivoting happens to cancel out factors (in which case * there is no corresponding increase in L). * nnentu is increased if there is fill-in (no decrease in L). * If nnentu + nnentl >= nnetas, then we've run out of room. * It is not the case that the elements of (L^-1)B are all in the * first nnentu positions of dluval/hcoli, but that is of course * the lower bound on the number of positions needed to store it. * nuspik is roughly the sum of the row lengths of the rows that were pivoted * out. singleton rows in c_ekktria do not change nuspik, but * c_ekkrsin does increment it for each singleton row. * That is, there are nuspik elements that in the upper part of (L^-1)B, * and (nnentu - nuspik) elements left in B. */ /* * As part of factorization, we test candidate pivots for numerical * stability; if the largest element in a row/col is much larger than * the smallest, this generally causes problems. To easily determine * what the largest element is, we ensure that it is always in front. * This establishes this property; later on we take steps to preserve it. */ static void c_ekkmltf(const EKKfactinfo *fact,double *dluval, int *hcoli, const int *mrstrt, const int *hinrow, const EKKHlink *rlink) { #if 0 int *hcoli = fact->xecadr; double *dluval = fact->xeeadr; double *dvalpv = fact->kw3adr; int *mrstrt = fact->xrsadr; int *hrowi = fact->xeradr; int *mcstrt = fact->xcsadr; int *hinrow = fact->xrnadr; int *hincol = fact->xcnadr; int *hpivro = fact->krpadr; int *hpivco = fact->kcpadr; #endif int i, j, k; int koff=-1; const int nrow = fact->nrow; for (i = 1; i <= nrow; ++i) { /* ignore rows that have already been pivoted */ /* if it is a singleton row, the property trivially holds */ if (! (rlink[i].pre < 0 || hinrow[i] <= 1)) { const int krs = mrstrt[i]; const int kre = krs + hinrow[i] - 1; double maxaij = 0.f; /* this assumes that at least one of the dluvals is non-zero. */ for (k = krs; k <= kre; ++k) { if (! (fabs(dluval[k]) <= maxaij)) { maxaij = fabs(dluval[k]); koff = k; } } assert (koff>0); maxaij = dluval[koff]; j = hcoli[koff]; dluval[koff] = dluval[krs]; hcoli[koff] = hcoli[krs]; dluval[krs] = maxaij; hcoli[krs] = j; } } } /* c_ekkmltf */ int c_ekklfct( register EKKfactinfo *fact) { const int nrow = fact->nrow; int ninbas = fact->xcsadr[nrow+1]-1; int ifvsol = fact->ifvsol; int *hcoli = fact->xecadr; double *dluval = fact->xeeadr; int *mrstrt = fact->xrsadr; int *hrowi = fact->xeradr; int *mcstrt = fact->xcsadr; int *hinrow = fact->xrnadr; int *hincol = fact->xcnadr; int *hpivro = fact->krpadr; int *hpivco = fact->kcpadr; EKKHlink *rlink = fact->kp1adr; EKKHlink *clink = fact->kp2adr; EKKHlink *mwork = (reinterpret_cast(fact->kw1adr))-1; int nsing, kdnspt, xnewro, xnewco; int i; int xrejct; int irtcod; const int nnetas = fact->nnetas; int ncompactions; double save_drtpiv = fact->drtpiv; double save_zpivlu = fact->zpivlu; if (ifvsol > 0 && fact->invok < 0) { fact->zpivlu = CoinMin(0.9, fact->zpivlu * 10.); fact->drtpiv=1.0e-8; } rlink --; clink --; /* Function Body */ hcoli[nnetas] = 1; hrowi[nnetas] = 1; dluval[nnetas] = 0.0; /* set amount of work */ xrejct = 0; nsing = 0; kdnspt = nnetas + 1; fact->ndenuc = 0; /* Triangularize */ irtcod = c_ekktria(fact,rlink,clink, &nsing, &xnewco, &xnewro, &ncompactions, ninbas); fact->nnentl = ninbas - fact->nnentu; if (irtcod < 0) { /* no space or system error */ goto L8000; } if (irtcod != 0 && fact->invok >= 0) { goto L8500; /* 7 or 8 - pivot too small */ } #if 0 /* is this necessary ? */ lstart = nnetas - fact->nnentl + 1; for (i = lstart; i <= nnetas; ++i) { hrowi[i] = (hcoli[i] << 3); } #endif /* See if finished */ if (! (fact->npivots >= nrow)) { int nsing1; /* No - do nucleus */ nsing1 = c_ekkford(fact,hinrow, hincol, hpivro, hpivco, rlink, clink); nsing+= nsing1; if (nsing1 != 0 && fact->invok >= 0) { irtcod=7; goto L8500; } c_ekkmltf(fact,dluval, hcoli, mrstrt, hinrow, rlink); { bool callcmfy = false; if (nrow > 32767) { int count = 0; for (i = 1; i <= nrow; ++i) { count = CoinMax(count,hinrow[i]); } if (count + nrow - fact->npivots > 32767) { /* will have to use I*4 version of CMFC */ /* no changes to pointer params */ callcmfy = true; } } irtcod = (callcmfy ? c_ekkcmfy : c_ekkcmfc) (fact, rlink, clink, mwork, &mwork[nrow + 1], nnetas, &nsing, &xrejct, &xnewro, xnewco, &ncompactions); /* irtcod one of 0,-5,7,10 */ } if (irtcod < 0) { goto L8000; } kdnspt = nnetas - fact->nnentl; } /* return if error */ if (nsing > 0 || irtcod == 10) { irtcod = 99; } /* irtcod one of 0,7,99 */ if (irtcod != 0) { goto L8500; } ++fact->xnetal; mcstrt[fact->xnetal] = nnetas - fact->nnentl; /* give message if tight on memory */ if (ncompactions > 2 ) { if (1) { int etasize =CoinMax(4*fact->nnentu+(nnetas-fact->nnentl)+1000,fact->eta_size); fact->eta_size=CoinMin(static_cast(1.2*fact->eta_size),etasize); if (fact->maxNNetas>0&&fact->eta_size> fact->maxNNetas) { fact->eta_size=fact->maxNNetas; } } /* endif */ } /* Shuffle U and multiply L by 8 (if assembler) */ { int jrtcod = c_ekkshff(fact, clink, rlink, xnewro); /* nR_etas is the number of R transforms; * it is incremented only in c_ekketsj. */ fact->nR_etas = 0; /*fact->R_etas_start = mcstrt+nrow+fact->nnentl+3;*/ fact->R_etas_start[1] = /*kdnspt - 1*/0; /* magic */ fact->R_etas_index = &fact->xeradr[kdnspt - 1]; fact->R_etas_element = &fact->xeeadr[kdnspt - 1]; if (jrtcod != 0) { irtcod = jrtcod; /* irtcod == 2 */ } } goto L8500; /* Fatal error */ L8000: if (1) { if (fact->maxNNetas != fact->eta_size && nnetas) { /* return and get more space */ /* double eta_size, unless that exceeds max (if there is one) */ fact->eta_size = fact->eta_size<<1; if (fact->maxNNetas > 0 && fact->eta_size > fact->maxNNetas) { fact->eta_size = fact->maxNNetas; } return (5); } } /*c_ekkmesg_no_i1(121, -irtcod);*/ irtcod = 3; L8500: /* restore pivot tolerance */ fact->drtpiv=save_drtpiv; fact->zpivlu=save_zpivlu; #ifndef NDEBUG if (fact->rows_ok) { int * hinrow=fact->xrnadr; if (!fact->xe2adr) { for (int i=1;i<=fact->nrow;i++) { assert (hinrow[i]>=0&&hinrow[i]<=fact->nrow); } } } #endif return (irtcod); } /* c_ekklfct */ /* summary of return codes c_ekktria: 7 small pivot -5 no memory c_ekkcsin: returns true if small pivot c_ekkrsin: -5 no memory 7 small pivot c_ekkfpvt: 10: no pivots found (singular) c_ekkcmfd: 10: zero pivot (not just small) c_ekkcmfc: -5: no memory any non-zero code from c_ekkcsin, c_ekkrsin, c_ekkfpvt, c_ekkprpv, c_ekkcmfd c_ekkshff: 2: singular c_ekklfct: any positive code from c_ekktria, c_ekkcmfc, c_ekkshff (2,7,10) *except* 10, which is changed to 99. all negative return codes are changed to 5 or 3 (5 == ran out of memory but could get more, 3 == ran out of memory, no luck) so: 2,3,5,7,99 c_ekklfct1: 1: c_ekksmem_invert failed 2: c_ekkslcf/c_ekkslct ran out of room any return code from c_ekklfct, except 2 and 5 */ void c_ekkrowq(int *hrow, int *hcol, double *dels, int *mrstrt, const int *hinrow, int nnrow, int ninbas) { int i, k, iak, jak; double daik; int iloc; double dsave; int isave, jsave; /* Order matrix rowwise using MRSTRT, DELS, HCOL */ k = 1; /* POSITION AFTER END OF ROW */ for (i = 1; i <= nnrow; ++i) { k += hinrow[i]; mrstrt[i] = k; } for (k = ninbas; k >= 1; --k) { iak = hrow[k]; if (iak != 0) { daik = dels[k]; jak = hcol[k]; hrow[k] = 0; while (1) { --mrstrt[iak]; iloc = mrstrt[iak]; dsave = dels[iloc]; isave = hrow[iloc]; jsave = hcol[iloc]; dels[iloc] = daik; hrow[iloc] = 0; hcol[iloc] = jak; if (isave == 0) break; daik = dsave; iak = isave; jak = jsave; } } } } /* c_ekkrowq */ int c_ekkrwco(const EKKfactinfo *fact,double *dluval, int *hcoli, int *mrstrt, int *hinrow, int xnewro) { int i, k, nz, kold; int kstart; const int nrow = fact->nrow; for (i = 1; i <= nrow; ++i) { nz = hinrow[i]; if (0 < nz) { /* save the last column entry of row i in hinrow */ /* and replace that entry with -i */ k = mrstrt[i] + nz - 1; hinrow[i] = hcoli[k]; hcoli[k] = -i; } } kstart = 0; kold = 0; for (k = 1; k <= xnewro; ++k) { if (hcoli[k] != 0) { ++kstart; /* if this is the last entry for the row... */ if (hcoli[k] < 0) { /* restore the entry */ i = -hcoli[k]; hcoli[k] = hinrow[i]; /* update mrstart and hinrow */ /* ACTUALLY, hinrow should already be accurate */ mrstrt[i] = kold + 1; hinrow[i] = kstart - kold; kold = kstart; } /* move the entry */ dluval[kstart] = dluval[k]; hcoli[kstart] = hcoli[k]; } } return (kstart); } /* c_ekkrwco */ int c_ekkrwcs(const EKKfactinfo *fact,double *dluval, int *hcoli, int *mrstrt, const int *hinrow, const EKKHlink *mwork, int nfirst) { #if 0 int *hcoli = fact->xecadr; double *dluval = fact->xeeadr; double *dvalpv = fact->kw3adr; int *mrstrt = fact->xrsadr; int *hrowi = fact->xeradr; int *mcstrt = fact->xcsadr; int *hinrow = fact->xrnadr; int *hincol = fact->xcnadr; int *hpivro = fact->krpadr; int *hpivco = fact->kcpadr; #endif int i, k, k1, k2, nz; int irow, iput; const int nrow = fact->nrow; /* Compress row file */ iput = 1; irow = nfirst; for (i = 1; i <= nrow; ++i) { nz = hinrow[irow]; k1 = mrstrt[irow]; if (k1 != iput) { mrstrt[irow] = iput; k2 = k1 + nz - 1; for (k = k1; k <= k2; ++k) { dluval[iput] = dluval[k]; hcoli[iput] = hcoli[k]; ++iput; } } else { iput += nz; } irow = mwork[irow].suc; } return (iput); } /* c_ekkrwcs */ void c_ekkrwct(const EKKfactinfo *fact,double *dluval, int *hcoli, int *mrstrt, const int *hinrow, const EKKHlink *mwork, const EKKHlink *rlink, const short *msort, double *dsort, int nlast, int xnewro) { #if 0 int *hcoli = fact->xecadr; double *dluval = fact->xeeadr; double *dvalpv = fact->kw3adr; int *mrstrt = fact->xrsadr; int *hrowi = fact->xeradr; int *mcstrt = fact->xcsadr; int *hinrow = fact->xrnadr; int *hincol = fact->xcnadr; int *hpivro = fact->krpadr; int *hpivco = fact->kcpadr; #endif int i, k, k1, nz, icol; int kmax; int irow, iput; int ilook; const int nrow = fact->nrow; iput = xnewro; irow = nlast; kmax = nrow - fact->npivots; for (i = 1; i <= nrow; ++i) { nz = hinrow[irow]; k1 = mrstrt[irow] - 1; if (rlink[irow].pre < 0) { /* pivoted on already */ iput -= nz; if (k1 != iput) { mrstrt[irow] = iput + 1; for (k = nz; k >= 1; --k) { dluval[iput + k] = dluval[k1 + k]; hcoli[iput + k] = hcoli[k1 + k]; } } } else { /* not pivoted - going dense */ iput -= kmax; mrstrt[irow] = iput + 1; c_ekkdzero( kmax, &dsort[1]); for (k = 1; k <= nz; ++k) { icol = hcoli[k1 + k]; ilook = msort[icol]; dsort[ilook] = dluval[k1 + k]; } c_ekkdcpy(kmax, (dsort+1), (dluval+iput + 1)); } irow = mwork[irow].pre; } } /* c_ekkrwct */ /* takes Uwe's modern structures and puts them back 20 years */ int c_ekkshff(EKKfactinfo *fact, EKKHlink *clink, EKKHlink *rlink, int xnewro) { int *hpivro = fact->krpadr; int i, j; int nbas, icol; int ipiv; const int nrow = fact->nrow; int nsing; for (i = 1; i <= nrow; ++i) { j = -rlink[i].pre; rlink[i].pre = j; if (j > 0 && j <= nrow) { hpivro[j] = i; } j = -clink[i].pre; clink[i].pre = j; } /* hpivro[j] is now (hopefully) the row that was pivoted on step j */ /* rlink[i].pre is the step in which row i was pivoted */ nbas = 0; nsing = 0; /* Decide if permutation wanted */ fact->first_dense=nrow-fact->ndenuc+1+1; fact->last_dense=nrow; /* rlink[].suc is dead at this point */ /* * replace the the basis index * with the pivot (or permuted) index generated by factorization. * This eventually goes into mpermu. */ for (icol = 1; icol <= nrow; ++icol) { int ibasis = icol; ipiv = clink[ibasis].pre; if (0 < ipiv && ipiv <= nrow) { rlink[ibasis].suc = ipiv; ++nbas; } } nsing = nrow - nbas; if (nsing > 0) { abort(); } /* if we reach here, then rlink[1..nrow].suc == clink[1..nrow].pre */ /* switch off sparse update if any dense section */ { const int notMuchRoom = (fact->nnentu + xnewro + 10 > fact->nnetas - fact->nnentl); /* must be same as in c_ekkshfv */ if (fact->ndenuc || notMuchRoom||nrowif_sparse_update) { printf("**** Switching off sparse update - dense - c_ekkshff\n"); } #endif fact->if_sparse_update=0; } } /* hpivro[1..nrow] is not read by c_ekkshfv */ c_ekkshfv(fact, rlink, clink, xnewro); return (0); } /* c_ekkshff */ /* sorts on indices dragging elements with */ static void c_ekk_sort2(int * key , double * array2,int number) { int minsize=10; int n = number; int sp; int *v = key; int *m, t; int * ls[32] , * rs[32]; int *l , *r , c; double it; int j; /*check already sorted */ #ifndef LONG_MAX #define LONG_MAX 0x7fffffff; #endif int last=-LONG_MAX; for (j=0;j=last) { last=key[j]; } else { break; } /* endif */ } /* endfor */ if (j==number) { return; } /* endif */ sp = 0 ; ls[sp] = v ; rs[sp] = v + (n-1) ; while( sp >= 0 ) { if ( rs[sp] - ls[sp] > minsize ) { l = ls[sp] ; r = rs[sp] ; m = l + (r-l)/2 ; if ( *l > *m ) { t = *l ; *l = *m ; *m = t ; it = array2[l-v] ; array2[l-v] = array2[m-v] ; array2[m-v] = it ; } if ( *m > *r ) { t = *m ; *m = *r ; *r = t ; it = array2[m-v] ; array2[m-v] = array2[r-v] ; array2[r-v] = it ; if ( *l > *m ) { t = *l ; *l = *m ; *m = t ; it = array2[l-v] ; array2[l-v] = array2[m-v] ; array2[m-v] = it ; } } c = *m ; while ( r - l > 1 ) { while ( *(++l) < c ) ; while ( *(--r) > c ) ; t = *l ; *l = *r ; *r = t ; it = array2[l-v] ; array2[l-v] = array2[r-v] ; array2[r-v] = it ; } l = r - 1 ; if ( l < m ) { ls[sp+1] = ls[sp] ; rs[sp+1] = l ; ls[sp ] = r ; } else { ls[sp+1] = r ; rs[sp+1] = rs[sp] ; rs[sp ] = l ; } sp++ ; } else sp-- ; } for ( l = v , m = v + (n-1) ; l < m ; l++ ) { if ( *l > *(l+1) ) { c = *(l+1) ; it = array2[(l-v)+1] ; for ( r = l ; r >= v && *r > c ; r-- ) { *(r+1) = *r ; array2[(r-v)+1] = array2[(r-v)] ; } *(r+1) = c ; array2[(r-v)+1] = it ; } } } /* For each row compute reciprocal of pivot element and take out of */ /* Also use HLINK(1 to permute column numbers */ /* and HPIVRO to permute row numbers */ /* Sort into column order as was stored by row */ /* If Assembler then shift row numbers in L by 3 */ /* Put column numbers in U for L-U update */ /* and multiply U elements by - reciprocal of pivot element */ /* and set up backward pointers for pivot rows */ void c_ekkshfv(EKKfactinfo *fact, EKKHlink *rlink, EKKHlink *clink, int xnewro) { int *hcoli = fact->xecadr; double *dluval = fact->xeeadr; double *dvalpv = fact->kw3adr; int *mrstrt = fact->xrsadr; int *hrowi = fact->xeradr; int *mcstrt = fact->xcsadr; int *hinrow = fact->xrnadr; int *hincol = fact->xcnadr; int *hpivro = fact->krpadr; int *hpivco = fact->kcpadr; double *dpermu = fact->kadrpm; double * de2val = fact->xe2adr ? fact->xe2adr-1: 0; int nnentu = fact->nnentu; int xnetal = fact->xnetal; int numberSlacks; /* numberSlacks not read */ int i, j, k, kk, nel; int nroom; bool need_more_space; int ndenuc=fact->ndenuc; int if_sparse_update=fact->if_sparse_update; int nnentl = fact->nnentl; int nnetas = fact->nnetas; int *ihlink = (reinterpret_cast (clink))+1; /* can't use rlink for simple loop below */ const int nrow = fact->nrow; const int maxinv = fact->maxinv; /* this is not just a temporary - c_ekkbtrn etc use this */ int *mpermu = (reinterpret_cast (dpermu+nrow))+1; int * temp = ihlink+nrow; int * temp2 = temp+nrow; const int notMuchRoom = (nnentu + xnewro + 10 > nnetas - nnentl); /* compress hlink and make simpler */ for (i = 1; i <= nrow; ++i) { mpermu[i] = rlink[i].pre; ihlink[i] = rlink[i].suc; } /* mpermu[i] == the step in which row i was pivoted */ /* ihlink[i] == the step in which col i was pivoted */ /* must be same as in c_ekkshff */ if (fact->ndenuc||notMuchRoom||nroweta_size=static_cast(1.05*fact->eta_size); /* eta_size can be no larger than maxNNetas */ if (fact->maxNNetas > 0 && fact->eta_size > fact->maxNNetas) { fact->eta_size=fact->maxNNetas; } } /* endif */ /* For each row compute reciprocal of pivot element and take out of U */ /* Also use ihlink to permute column numbers */ /* the rows are not stored compactly or in order, * so we have to find out where the last one is stored */ ninbas=0; for (i = 1; i <= nrow; ++i) { int jpiv=mpermu[i]; int nin=hinrow[i]; int krs = mrstrt[i]; int kre = krs + nin; temp[jpiv]=krs; temp2[jpiv]=nin; ninbas = CoinMax(kre, ninbas); /* c_ekktria etc ensure that the first row entry is the pivot */ dvalpv[jpiv] = 1. / dluval[krs]; hcoli[krs] = 0; /* probably needed for c_ekkrowq */ /* room for the pivot has already been allocated, so hincol ok */ for (kk = krs + 1; kk < kre; ++kk) { int j = ihlink[hcoli[kk]]; hcoli[kk] = j; /* permute the col index */ hrowi[kk] = jpiv; /* permute the row index */ ++hincol[j]; } } /* temp [mpermu[i]] == mrstrt[i] */ /* temp2[mpermu[i]] == hinrow[i] */ ninbas--; /* ???? */ c_ekkscpy(nrow, &temp[1], &mrstrt[1]); c_ekkscpy(nrow, &temp2[1], &hinrow[1]); /* now mrstrt, hinrow, hcoli and hrowi have been permuted */ /* Sort into column order as was stored by row */ /* There will be an empty entry in front of each each column, * because we initialized hincol to 1s, and c_ekkrowq fills in * entries from the back */ c_ekkrowq(hcoli, hrowi, dluval, mcstrt, hincol, nrow, ninbas); /* The shuffle zeroed out column pointers */ /* Put them back for L-U update */ /* Also multiply U elements by - reciprocal of pivot element */ /* Also decrement mcstrt/hincol to give "real" sizes */ for (i = 1; i <= nrow; ++i) { int kx = --mcstrt[i]; nel = --hincol[i]; hrowi[kx] = nel; dluval[kx] = dvalpv[i]; #ifndef NO_SHIFT for (int j=kx+1;j<=kx+nel;j++) hrowi[j] = SHIFT_INDEX(hrowi[j]); #endif } /* sort dense part */ for (i=nrow-ndenuc+1; i<=nrow; i++) { int kx = mcstrt[i]+1; /* "real" entries start after pivot */ int nel = hincol[i]; c_ekk_sort2(&hrowi[kx],&dluval[kx],nel); } /* Recompute number in U */ nnentu = mcstrt[nrow] + hincol[nrow]; mcstrt[nrow + 4] = nnentu + 1; /* magic - AND DEAD */ /* as not much room switch off fast etas */ mrstrt[1] = 0; /* magic */ fact->rows_ok = false; i = nrow + maxinv + 5; /* DEAD */ } else { /* *************************************** */ /* enough memory to do a bit faster */ /* For each row compute reciprocal of pivot element and */ /* take out of U */ /* Also use HLINK(1 to permute column numbers */ int ninbas=0; int ilast; /* last available entry */ int spareSpace; double * dluval2; /*int * hlink2 = ihlink+nrow; int * mrstrt2 = hlink2+nrow;*/ /* mwork has order of row copy */ EKKHlink *mwork = (reinterpret_cast(fact->kw1adr))-1; fact->rows_ok = true; if (if_sparse_update) { ilast=nnetas-nnentl; } else { /* missing out nnentl stuff */ ilast=nnetas; } spareSpace=ilast-nnentu; need_more_space=false; /* save clean row copy if enough room */ nroom = (spareSpace) / nrow; if (nrow<10000) { if (nroom < 10) { need_more_space=true; } } else { if (nroom < 5&&!if_sparse_update) { need_more_space=true; } } if (nroom > CoinMin(50,maxinv)) { need_more_space=false; } if (need_more_space) { if (if_sparse_update) { int i1=fact->eta_size+10*nrow; fact->eta_size=static_cast(1.2*fact->eta_size); if (i1>fact->eta_size) { fact->eta_size=i1; } } else { fact->eta_size=static_cast(1.05*fact->eta_size); } } else { if (nroom<11) { if (if_sparse_update) { int i1=fact->eta_size+(11-nroom)*nrow; fact->eta_size=static_cast(1.2*fact->eta_size); if (i1>fact->eta_size) { fact->eta_size=i1; } } } } if (fact->maxNNetas>0&&fact->eta_size> fact->maxNNetas) { fact->eta_size=fact->maxNNetas; } { /* we can swap de2val and dluval to save copying */ int * eta_last=mpermu+nrow*2+3; int * eta_next=eta_last+nrow+2; int last=0; eta_last[0]=-1; if (nnentl) { /* went into c_ekkcmfc - if not then in order */ int next; /*next=mwork[((nrow+1)<<1)+1];*/ next=mwork[nrow+1].pre; #ifdef DEBUG j=mrstrt[next]; #endif for (i = 1; i <= nrow; ++i) { int iperm=mpermu[next]; eta_next[last]=iperm; eta_last[iperm]=last; temp[iperm] = mrstrt[next]; temp2[iperm] = hinrow[next]; #ifdef DEBUG if (mrstrt[next]!=j) abort(); j=mrstrt[next]+hinrow[next]; #endif /*next= mwork[(next<<1)+2];*/ next= mwork[next].suc; last=iperm; } } else { #ifdef DEBUG j=0; #endif for (i = 1; i <= nrow; ++i) { int iperm=mpermu[i]; eta_next[last]=iperm; eta_last[iperm]=last; temp[iperm] = mrstrt[i]; temp2[iperm] = hinrow[i]; last=iperm; #ifdef DEBUG if (mrstrt[i]<=j) abort(); if (i>1&&mrstrt[i]!=j+hinrow[i-1]) abort(); j=mrstrt[i]; #endif } } eta_next[last]=nrow+1; eta_last[nrow+1]=last; eta_next[nrow+1]=nrow+2; c_ekkscpy(nrow, &temp[1], &mrstrt[1]); c_ekkscpy(nrow, &temp2[1], &hinrow[1]); i=eta_last[nrow+1]; ninbas=mrstrt[i]+hinrow[i]-1; #ifdef DEBUG if (spareSpace0; i--) { int krs = mrstrt[i]; int jpiv = hcoli[krs]; if (ihlink[jpiv]!=i) abort(); } #endif for (i = 1; i <= ninbas; ++i) { k = hcoli[i]; k = ihlink[k]; #ifdef DEBUG if (k<=0||k>nrow) abort(); #endif hcoli[i]=k; hincol[k]++; } #ifdef DEBUG for (i=nrow; i>0; i--) { int krs = mrstrt[i]; int jpiv = hcoli[krs]; if (jpiv!=i) abort(); if (krs>ninbas) abort(); } #endif /* Sort into column order as was stored by row */ k = 1; /* Position */ for (kk = 1; kk <= nrow; ++kk) { nel=hincol[kk]; mcstrt[kk] = k; hrowi[k]=nel-1; k += hincol[kk]; hincol[kk]=0; } if (de2val) { dluval2=de2val; } else { dluval2=dluval+ninbas; } nnentu = k-1; mcstrt[nrow + 4] = nnentu + 1; /* create column copy */ for (i=nrow; i>0; i--) { int krs = mrstrt[i]; int kre = krs + hinrow[i]; hinrow[i]--; mrstrt[i]++; { int kx = mcstrt[i]; /*nel = hincol[i]; if (hrowi[kx]!=nel) abort(); hrowi[kx] = nel-1;*/ dluval2[kx] = 1.0 /dluval[krs]; /*hincol[i]=0;*/ for (kk = krs + 1; kk < kre; ++kk) { int j = hcoli[kk]; int iput = hincol[j]+1; hincol[j]=iput; iput+= mcstrt[j]; hrowi[iput] = SHIFT_INDEX(i); dluval2[iput] = dluval[kk]; } } } if (de2val) { double * a=dluval; double * address; /* move first down */ i=eta_next[0]; { int krs=mrstrt[i]; nel=hinrow[i]; for (j=1;j<=nel;j++) { hcoli[j]=hcoli[j+krs-1]; dluval[j]=dluval[j+krs-1]; } } mrstrt[i]=1; /****** swap dluval and de2val !!!! ******/ /* should work even for dspace */ /* move L part across */ address=fact->xeeadr+1; fact->xeeadr=fact->xe2adr-1; fact->xe2adr=address; if (nnentl) { int n=xnetal-nrow-maxinv-5; int j1,j2; int * mcstrt2=mcstrt+nrow+maxinv+4; j2 = mcstrt2[1]; j1 = mcstrt2[n+1]+1; #if 0 memcpy(de2val+j1,dluval+j1,(j2-j1+1)*sizeof(double)); #else c_ekkdcpy(j2-j1+1, (dluval+j1),(de2val+j1)); #endif } dluval = de2val; de2val = a; } else { /* copy down dluval */ #if 0 memcpy(&dluval[1],&dluval2[1],ninbas*sizeof(double)); #else c_ekkdcpy(ninbas, (dluval2+1),(dluval+1)); #endif } /* sort dense part */ for (i=nrow-ndenuc+1;i<=nrow;i++) { int kx = mcstrt[i]+1; int nel = hincol[i]; c_ekk_sort2(&hrowi[kx],&dluval[kx],nel); } } mrstrt[nrow + 1] = ilast + 1; } /* Find first non slack */ for (i = 1; i <= nrow; ++i) { int kcs = mcstrt[i]; if (hincol[i] != 0 || dluval[kcs] != SLACK_VALUE) { break; } } numberSlacks = i - 1; { /* set slacks to 1 */ int * array = fact->krpadr + ( fact->nrowmx+2); int nSet = (numberSlacks)>>5; int n2 = (fact->nrowmx+32)>>5; int i; memset(array,0xff,nSet*sizeof(int)); memset(array+nSet,0,(n2-nSet)*sizeof(int)); for (i=nSet<<5;i<=numberSlacks;i++) c_ekk_Set(array,i); c_ekk_Unset(array,fact->nrow+1); /* make sure off end not slack */ #ifndef NDEBUG for (i=1;i<=numberSlacks;i++) assert (c_ekk_IsSet(array,i)); for (;i<=fact->nrow;i++) assert (!c_ekk_IsSet(array,i)); #endif } /* and set up backward pointers */ /* clean up HPIVCO for fancy assembler stuff */ /* xnetal was initialized to nrow + maxinv + 4 in c_ekktria, and grows */ c_ekkscpy_0_1(maxinv + 1, 1, &hpivco[nrow+4]); /* magic */ hpivco[xnetal] = 1; /* shuffle down for gaps so can get rid of hpivco for L */ { const int lstart = nrow + maxinv + 5; int n=xnetal-lstart ; /* number of L entries */ int add,iel; int * hpivco_L = &hpivco[lstart]; int * mcstrt_L = &mcstrt[lstart]; if (nnentl) { /* elements of L were stored in descending order in dluval/hcoli */ int kle = mcstrt_L[0]; int kls = mcstrt_L[n]+1; if(if_sparse_update) { int i2,iel; int * mrstrt2 = &mrstrt[nrow]; /* need row copy of L */ /* hpivro is spare for counts; just used as a temp buffer */ c_ekkizero( nrow, &hpivro[1]); /* permute L indices; count L row lengths */ for (iel = kls; iel <= kle; ++iel) { int jrow = mpermu[UNSHIFT_INDEX(hrowi[iel])]; hpivro[jrow]++; hrowi[iel] = SHIFT_INDEX(jrow); } { int ibase=nnetas-nnentl+1; int firstDoRow=0; for (i=1;i<=nrow;i++) { mrstrt2[i]=ibase; if (hpivro[i]&&!firstDoRow) { firstDoRow=i; } ibase+=hpivro[i]; hpivro[i]=mrstrt2[i]; } if (!firstDoRow) { firstDoRow=nrow+1; } mrstrt2[i]=ibase; fact->firstDoRow = firstDoRow; } i2=mcstrt_L[n]; for (i = n-1; i >= 0; --i) { int i1 = mcstrt_L[i]; int ipiv=hpivco_L[i]; ipiv=mpermu[ipiv]; hpivco_L[i]=ipiv; for (iel=i2 ; iel < i1; iel++) { int irow = UNSHIFT_INDEX(hrowi[iel+1]); int iput=hpivro[irow]; hpivro[irow]=iput+1; hcoli[iput]=ipiv; de2val[iput]=dluval[iel+1]; } i2=i1; } } else { /* just permute row numbers */ for (j = 0; j < n; ++j) { hpivco_L[j] = mpermu[hpivco_L[j]]; } for (iel = kls; iel <= kle; ++iel) { int jrow = mpermu[UNSHIFT_INDEX(hrowi[iel])]; hrowi[iel] = SHIFT_INDEX(jrow); } } add=hpivco_L[n-1]-hpivco_L[0]-n+1; if (add) { int i; int last = hpivco_L[n-1]; int laststart = mcstrt_L[n]; int base=hpivco_L[0]-1; /* adjust so numbers match */ mcstrt_L-=base; hpivco_L-=base; mcstrt_L[last]=laststart; for (i=n-1;i>=0;i--) { int ipiv=hpivco_L[i+base]; while (ipivlstart; //const int * COIN_RESTRICT hpivco = fact->kcpadr; fact->firstLRow = hpivco[lstart]; } fact->nnentu = nnentu; fact->xnetal = xnetal; /* now we have xnetal * we can set up pointers */ clp_setup_pointers(fact); /* this is the array used in c_ekkbtrn; it is passed to c_ekkbtju as hpivco. * this gets modified by F-T as we pivot columns in and out. */ { /* do new hpivco */ int * hpivco_new = fact->kcpadr+1; int * back = &fact->kcpadr[2*nrow+maxinv+4]; /* set zeroth to stop illegal read */ back[0]=1; hpivco_new[nrow+1]=nrow+1; /* deliberate loop for dense tests */ hpivco_new[0]=1; for (i=1;i<=nrow;i++) { hpivco_new[i]=i+1; back[i+1]=i; } back[1]=0; fact->first_dense = CoinMax(fact->first_dense,4); fact->numberSlacks=numberSlacks; fact->lastSlack=numberSlacks; fact->firstNonSlack=hpivco_new[numberSlacks]; } /* also zero out permute region and nonzero */ c_ekkdzero( nrow, (dpermu+1)); if (if_sparse_update) { char * nonzero = reinterpret_cast (&mpermu[nrow+1]); /* used in c_ekkbtrn */ /*c_ekkizero(nrow,(int *)nonzero);*/ c_ekkczero(nrow,nonzero); /*memset(nonzero,0,nrow*sizeof(int));*/ /* for faster method */ } for (i = 1; i <= nrow; ++i) { hpivro[mpermu[i]] = i; } } /* c_ekkshfv */ static void c_ekkclcp1(const int *hcol, const int * mrstrt, int *hrow, int *mcstrt, int *hincol, int nnrow, int nncol, int ninbas) { int i, j, kc, kr, kre, krs, icol; int iput; /* Create columnwise storage of row indices */ kc = 1; for (j = 1; j <= nncol; ++j) { mcstrt[j] = kc; kc += hincol[j]; hincol[j] = 0; } mcstrt[nncol + 1] = ninbas + 1; for (i = 1; i <= nnrow; ++i) { krs = mrstrt[i]; kre = mrstrt[i + 1] - 1; for (kr = krs; kr <= kre; ++kr) { icol = hcol[kr]; iput = hincol[icol]; hincol[icol] = iput + 1; iput += mcstrt[icol]; hrow[iput] = i; } } } /* c_ekkclcp */ inline void c_ekkclcp2(const int *hcol, const double *dels, const int * mrstrt, int *hrow, double *dels2, int *mcstrt, int *hincol, int nnrow, int nncol, int ninbas) { int i, j, kc, kr, kre, krs, icol; int iput; /* Create columnwise storage of row indices */ kc = 1; for (j = 1; j <= nncol; ++j) { mcstrt[j] = kc; kc += hincol[j]; hincol[j] = 0; } mcstrt[nncol + 1] = ninbas + 1; for (i = 1; i <= nnrow; ++i) { krs = mrstrt[i]; kre = mrstrt[i + 1] - 1; for (kr = krs; kr <= kre; ++kr) { icol = hcol[kr]; iput = hincol[icol]; hincol[icol] = iput + 1; iput += mcstrt[icol]; hrow[iput] = i; dels2[iput] = dels[kr]; } } } /* c_ekkclcp */ int c_ekkslcf( register const EKKfactinfo *fact) { int * hrow = fact->xeradr; int * hcol = fact->xecadr; double * dels = fact->xeeadr; int * hinrow = fact->xrnadr; int * hincol = fact->xcnadr; int * mrstrt = fact->xrsadr; int * mcstrt = fact->xcsadr; const int nrow = fact->nrow; int ninbas; /* space for etas */ const int nnetas = fact->nnetas; ninbas=mcstrt[nrow+1]-1; /* Now sort */ if (ninbas << 1 > nnetas) { /* Put it in row order */ int i,k; c_ekkrowq(hrow, hcol, dels, mrstrt, hinrow, nrow, ninbas); k = 1; for (i = 1; i <= nrow; ++i) { mrstrt[i] = k; k += hinrow[i]; } mrstrt[nrow + 1] = k; /* make a column copy without the extra values */ c_ekkclcp1(hcol, mrstrt, hrow, mcstrt, hincol, nrow, nrow, ninbas); } else { /* Move elements up memory */ c_ekkdcpy(ninbas, (dels+1), (dels+ninbas + 1)); /* make a row copy with the extra values */ c_ekkclcp2(hrow, &dels[ninbas], mcstrt, hcol, dels, mrstrt, hinrow, nrow, nrow, ninbas); } return (ninbas); } /* c_ekkslcf */ /* Uwe H. Suhl, September 1986 */ /* Removes lower and upper triangular factors from the matrix. */ /* Code for routine: 102 */ /* Return codes: */ /* 0: ok */ /* -5: not enough space in row file */ /* 7: pivot too small - col sing */ /* * This selects singleton columns and rows for the LU factorization. * Singleton columns require no * * (1) Note that columns are processed using a queue, not a stack; * this produces better pivots. * * (2) At most nrows elements are ever entered into the queue. * * (3) When pivoting singleton columns, every column that is part of * the pivot row is shortened by one, including the singleton column * itself; the hincol entries are updated appropriately. * Thus, pivoting on a singleton column may create other singleton columns * (but not singleton rows). * The dual property is true for rows. * * (4) Row entries (hrowi) are not changed when pivoting singleton columns. * Singleton columns that are created as a result of pivoting the * rows of other singleton columns will therefore have row entries * corresponding to those pivoted rows. Since we need to find the * row entry for the row being pivoted, we have to * search its row entries for the one whose hlink entry indicates * that it has not yet been pivoted. * * (9) As a result of pivoting columns, sections in hrowi corresponding to * pivoted columns are no longer needed, and entries in sections * for non-pivoted columns may have entries corresponding to pivoted rows. * This is why hrowi needs to be compacted. * * (5) When the row_pre and col_pre fields of the hlink struct contain * negative values, they indicate that the row has been pivoted, and * the negative of that value is the pivot order. * That is the only use for these fields in this routine. * * (6) This routine assumes that hlink is initialized to zeroes. * Under this assumption, the following is an invariant in this routine: * * (clink[i].pre < 0) ==> (hincol[i]==0) * * The converse is not true; see (15). * * The dual is also true, but only while pivoting singletong rows, * since we don't update hinrow while pivoting columns; * THESE VALUES ARE USED LATER, BUT I DON'T UNDERSTAND HOW YET. * * (7) hpivco is used for two purposes. The low end is used to implement the * queue when pivoting columns; the high end is used to hold eta-matrix * entries. * * (8) As a result of pivoting columns, for all i:1<=i<=nrow, either * hinrow[i] has not changed * or * hinrow[i] = 0 * This is another way of saying that pivoting singleton columns cannot * create singleton rows. * The dual holds for hincol after pivoting rows. * * (10) In constrast to (4), while pivoting rows we * do not let the hcoli get out-of-date. That is because as part of * the process of numerical pivoting we have to find the row entries * for all the rows in the pivot column, so we may as well keep the * entries up to date. This is done by moving the last column entry * for each row into the entry that was used for the pivot column. * * (11) When pivoting a column, we must find the pivot row entry in * its row table. Sometimes we search for other things at the same time. * The same is true for pivoting columns. This search should never * fail. * * (12) Information concerning the eta matrices is stored in the high * ends of arrays that are also used to store information concerning * the basis; these arrays are: hpivco, mcstrt, dluval and hcoli. * Information is only stored in these arrays as a part of pivoting * singleton rows, since the only thing that needs to be saved as * a part of pivoting singleton columns is which rows and columns were chosen, * and this is stored in hlink. * Since they have to share the same array, the eta information grows * downward instead of upward. Eventually, eta information may grow * down to the top of the basis information. As pivoting proceeds, * more and more of this information is no longer needed, so when this * happens we can try compacting the arrays to see if we can recover * enough space. lstart points at the bottom entry in the arrays, * xnewro/xnewco at the top of the basis information, and each time we * pivot a singleton row we know that we will need exactly as many new * entries as there are rows in the pivot column, so we can easily * determine if we need more room. The variable maxinv may be used * to reserve extra room when inversion starts. * * (13) Eta information is stored in a fashion that is similar to how * matrices are stored. There is one entry in hpivco and mcstrt for * each eta (other than the initial ones for singleton columns and * for singleton rows that turn out to be singleton columns), * in the order they were chosen. hpivco records the pivot row, * and mcstrt points at the first entry in the other two arrays * for this row. dluval contains the actual eta values for the column, * and hcoli the rows these values were in. * These entries in mcstrt and hpivco grow upward; they start above * the entries used to store basis information. * (Actually, I don't see why they need to start maxinv+4 entries past the top). * * (14) c_ekkrwco assumes that invalidated hrowi/hcoli entries contain 0. * * (15) When pivoting singleton columns, it may possibly happen * that a row with all singleton column entries is created. * In this case, all of the columns will be enqueued, and pivoting * on any of them eliminates the rest, without their being chosen * as pivots. The dual holds for singleton rows. * DOES THIS INDICATE A SINGULARITY? * * (15) There are some aspects of the implementation that I find odd. * hrowi is not set to 0 for pivot rows while pivoting singleton columns, * which would make sense to me. Things don't work if this isn't done, * so the information is used somehow later on. Also, the information * for the pivot column is shifted to the front of the pivot row * when pivoting singleton columns; this is also necessary for reasons * I don't understand. */ int c_ekktria(EKKfactinfo *fact, EKKHlink * rlink, EKKHlink * clink, int *nsingp, int *xnewcop, int *xnewrop, int *ncompactionsp, const int ninbas) { const int nrow = fact->nrow; const int maxinv = fact->maxinv; int *hcoli = fact->xecadr; double *dluval = fact->xeeadr; int *mrstrt = fact->xrsadr; int *hrowi = fact->xeradr; int *mcstrt = fact->xcsadr; int *hinrow = fact->xrnadr; int *hincol = fact->xcnadr; int *stack = fact->krpadr; /* normally hpivro */ int *hpivco = fact->kcpadr; const double drtpiv = fact->drtpiv; CoinZeroN(reinterpret_cast(rlink+1),static_cast(nrow*(sizeof(EKKHlink)/sizeof(int)))); CoinZeroN(reinterpret_cast(clink+1),static_cast(nrow*(sizeof(EKKHlink)/sizeof(int)))); fact->npivots = 0; /* Use NUSPIK to keep sum of deactivated row counts */ fact->nuspike = 0; int xnetal = nrow + maxinv + 4; int xnewro = mrstrt[nrow] + hinrow[nrow] - 1; int xnewco = xnewro; int kmxeta = ninbas; int ncompactions = 0; int i, j, k, kc, kce, kcs, npr; double pivot; int kipis, kipie, kjpis, kjpie, knprs, knpre; int ipivot, jpivot, stackc, stackr; #ifndef NDEBUG int kpivot=-1; #else int kpivot=-1; #endif int epivco, kstart, maxstk; int irtcod = 0; int lastSlack=0; int lstart = fact->nnetas + 1; /*int nnentu = ninbas; */ int lstart_minus_nnentu=lstart-ninbas; /* do initial column singletons - as can do faster */ for (jpivot = 1; jpivot <= nrow; ++jpivot) { if (hincol[jpivot] == 1) { ipivot = hrowi[mcstrt[jpivot]]; if (ipivot>lastSlack) { lastSlack=ipivot; } else { /* so we can't put a structural over a slack */ break; } kipis = mrstrt[ipivot]; #if 1 assert (hcoli[kipis]==jpivot); #else if (hcoli[kipis]!=jpivot) { kpivot=kipis+1; while(hcoli[kpivot]!=jpivot) kpivot++; #ifdef DEBUG kipie = kipis + hinrow[ipivot] ; if (kpivot>=kipie) { abort(); } #endif pivot=dluval[kpivot]; dluval[kpivot] = dluval[kipis]; dluval[kipis] = pivot; hcoli[kpivot] = hcoli[kipis]; hcoli[kipis] = jpivot; } #endif if (dluval[kipis]==SLACK_VALUE) { /* record the new pivot row and column */ ++fact->npivots; rlink[ipivot].pre = -fact->npivots; clink[jpivot].pre = -fact->npivots; hincol[jpivot]=0; fact->nuspike += hinrow[ipivot]; } else { break; } } else { break; } } /* Fill queue with other column singletons and clean up */ maxstk = 0; for (j = 1; j <= nrow; ++j) { if (hincol[j]) { int n=0; kcs = mcstrt[j]; kce = mcstrt[j + 1]; for (k = kcs; k < kce; ++k) { if (! (rlink[hrowi[k]].pre < 0)) { n++; } } hincol[j] = n; if (n == 1) { /* we just created a new singleton column - enqueue it */ ++maxstk; stack[maxstk] = j; } } } stackc = 0; /* (1) */ while (! (stackc >= maxstk)) { /* (1) */ /* dequeue the next entry */ ++stackc; jpivot = stack[stackc]; /* (15) */ if (hincol[jpivot] != 0) { for (k = mcstrt[jpivot]; rlink[hrowi[k]].pre < 0; k++) { /* (4) */ } ipivot = hrowi[k]; /* All the columns in this row are being shortened. */ kipis = mrstrt[ipivot]; kipie = kipis + hinrow[ipivot] ; for (k = kipis; k < kipie; ++k) { j = hcoli[k]; --hincol[j]; /* (3) (6) */ if (j == jpivot) { kpivot = k; /* (11) */ } else if (hincol[j] == 1) { /* we just created a new singleton column - enqueue it */ ++maxstk; stack[maxstk] = j; } } /* record the new pivot row and column */ ++fact->npivots; rlink[ipivot].pre = -fact->npivots; clink[jpivot].pre = -fact->npivots; fact->nuspike += hinrow[ipivot]; /* check the pivot */ assert (kpivot>0); pivot = dluval[kpivot]; if (fabs(pivot) < drtpiv) { irtcod = 7; ++(*nsingp); rlink[ipivot].pre = -nrow - 1; clink[jpivot].pre = -nrow - 1; } /* swap the pivot column entry with the first one. */ /* I don't know why. */ dluval[kpivot] = dluval[kipis]; dluval[kipis] = pivot; hcoli[kpivot] = hcoli[kipis]; hcoli[kipis] = jpivot; } } /* (8) */ /* The entire basis may already be triangular */ if (fact->npivots < nrow) { /* (9) */ kstart = 0; for (j = 1; j <= nrow; ++j) { if (! (clink[j].pre < 0)) { kcs = mcstrt[j]; kce = mcstrt[j + 1]; mcstrt[j] = kstart + 1; for (k = kcs; k < kce; ++k) { if (! (rlink[hrowi[k]].pre < 0)) { ++kstart; hrowi[kstart] = hrowi[k]; } } hincol[j] = kstart - mcstrt[j] + 1; } } xnewco = kstart; /* Fill stack with initial row singletons that haven't been pivoted away */ stackr = 0; for (i = 1; i <= nrow; ++i) { if (! (rlink[i].pre < 0) && (hinrow[i] == 1)) { ++stackr; stack[stackr] = i; } } while (! (stackr <= 0)) { ipivot = stack[stackr]; assert (ipivot); --stackr; #if 1 assert (rlink[ipivot].pre>=0); #else /* This test is probably unnecessary: rlink[i].pre < 0 ==> hinrow[i]==0 */ if (rlink[ipivot].pre < 0) { continue; } #endif /* (15) */ if (hinrow[ipivot] != 0) { /* This is a singleton row, which means it has exactly one column */ jpivot = hcoli[mrstrt[ipivot]]; kjpis = mcstrt[jpivot]; epivco = hincol[jpivot] - 1; hincol[jpivot] = 0; /* this column is being pivoted away */ /* (11) */ kjpie = kjpis + epivco; for (k = kjpis; k <= kjpie; ++k) { if (ipivot == hrowi[k]) break; } /* ASSERT (k <= kjpie) */ /* move the last row entry for the pivot column into the pivot row's entry */ /* I don't know why */ hrowi[k] = hrowi[kjpie]; /* invalidate the (old) last row entry of the pivot column */ /* I don't know why */ hrowi[kjpie] = 0; /* (12) */ if (! (xnewro + epivco < lstart)) { int kstart; if (! (epivco < lstart_minus_nnentu)) { irtcod = -5; break; } kstart = c_ekkrwco(fact,dluval, hcoli, mrstrt, hinrow, xnewro); ++ncompactions; kmxeta += (xnewro - kstart) << 1; xnewro = kstart; } if (! (xnewco + epivco < lstart)) { if (! (epivco < lstart_minus_nnentu)) { irtcod = -5; break; } xnewco = c_ekkclco(fact,hrowi, mcstrt, hincol, xnewco); ++ncompactions; /* HINCOL MAY HAVE CHANGED ??? (JJHF) */ epivco = hincol[jpivot]; } /* record the new pivot row and column */ ++fact->npivots; rlink[ipivot].pre = -fact->npivots; clink[jpivot].pre = -fact->npivots; /* no update for nuspik */ /* check the pivot */ pivot = dluval[mrstrt[ipivot]]; if (fabs(pivot) < drtpiv) { /* If the pivot is too small, reject it, but keep going */ irtcod = 7; rlink[ipivot].pre = -nrow - 1; clink[jpivot].pre = -nrow - 1; } /* Perform numerical part of elimination. */ if (! (epivco <= 0)) { ++xnetal; mcstrt[xnetal] = lstart - 1; hpivco[xnetal] = ipivot; pivot = -1.f / pivot; kcs = mcstrt[jpivot]; kce = kcs + epivco - 1; hincol[jpivot] = 0; for (kc = kcs; kc <= kce; ++kc) { npr = hrowi[kc]; /* why bother? */ hrowi[kc] = 0; --hinrow[npr]; /* (3) */ if (hinrow[npr] == 1) { /* this may create new singleton rows */ ++stackr; stack[stackr] = npr; } /* (11) */ knprs = mrstrt[npr]; knpre = knprs + hinrow[npr]; for (k = knprs; k <= knpre; ++k) { if (jpivot == hcoli[k]) { kpivot = k; break; } } /* ASSERT (kpivot <= knpre) */ { /* (10) */ double elemnt = dluval[kpivot]; dluval[kpivot] = dluval[knpre]; hcoli[kpivot] = hcoli[knpre]; hcoli[knpre] = 0; /* (14) */ /* store elementary row transformation */ --lstart; dluval[lstart] = elemnt * pivot; hcoli[lstart] = npr; } } } } } } /* (8) */ *xnewcop = xnewco; *xnewrop = xnewro; fact->xnetal = xnetal; fact->nnentu = lstart - lstart_minus_nnentu; fact->kmxeta = kmxeta; *ncompactionsp = ncompactions; return (irtcod); } /* c_ekktria */ CoinUtils-2.9.10/CoinUtils/src/CoinStructuredModel.cpp0000644000076600007660000016074112130104232021331 0ustar coincoin/* $Id: CoinStructuredModel.cpp 1585 2013-04-06 20:42:02Z stefan $ */ // Copyright (C) 2008, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include "CoinUtilsConfig.h" #include "CoinHelperFunctions.hpp" #include "CoinStructuredModel.hpp" #include "CoinSort.hpp" #include "CoinMpsIO.hpp" #include "CoinFloatEqual.hpp" //############################################################################# // Constructors / Destructor / Assignment //############################################################################# //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- CoinStructuredModel::CoinStructuredModel () : CoinBaseModel(), numberRowBlocks_(0), numberColumnBlocks_(0), numberElementBlocks_(0), maximumElementBlocks_(0), blocks_(NULL), coinModelBlocks_(NULL), blockType_(NULL) { } /* Read a problem in MPS or GAMS format from the given filename. */ CoinStructuredModel::CoinStructuredModel(const char *fileName, int decomposeType, int maxBlocks) : CoinBaseModel(), numberRowBlocks_(0), numberColumnBlocks_(0), numberElementBlocks_(0), maximumElementBlocks_(0), blocks_(NULL), coinModelBlocks_(NULL), blockType_(NULL) { CoinModel coinModel(fileName,false); if (coinModel.numberRows()) { problemName_ = coinModel.getProblemName(); optimizationDirection_ = coinModel.optimizationDirection(); objectiveOffset_ = coinModel.objectiveOffset(); if (!decomposeType) { addBlock("row_master","column_master",coinModel); } else { const CoinPackedMatrix * matrix = coinModel.packedMatrix(); if (!matrix) coinModel.convertMatrix(); decompose(coinModel,decomposeType,maxBlocks); //addBlock("row_master","column_master",coinModel); } } } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- CoinStructuredModel::CoinStructuredModel (const CoinStructuredModel & rhs) : CoinBaseModel(rhs), numberRowBlocks_(rhs.numberRowBlocks_), numberColumnBlocks_(rhs.numberColumnBlocks_), numberElementBlocks_(rhs.numberElementBlocks_), maximumElementBlocks_(rhs.maximumElementBlocks_) { if (maximumElementBlocks_) { blocks_ = CoinCopyOfArray(rhs.blocks_,maximumElementBlocks_); for (int i=0;iclone(); blockType_ = CoinCopyOfArray(rhs.blockType_,maximumElementBlocks_); if (rhs.coinModelBlocks_) { coinModelBlocks_ = CoinCopyOfArray(rhs.coinModelBlocks_, maximumElementBlocks_); for (int i=0;iclone(); blockType_ = CoinCopyOfArray(rhs.blockType_,maximumElementBlocks_); if (rhs.coinModelBlocks_) { coinModelBlocks_ = CoinCopyOfArray(rhs.coinModelBlocks_, maximumElementBlocks_); for (int i=0;inumberRows(); for ( i=0;igetRowName(i); const char * bName = b->getRowName(i); bool good=true; if (aName) { if (!bName||strcmp(aName,bName)) good=false; } else if (bName) { good=false; } if (!good) break; } } else { n = a->numberColumns(); for ( i=0;igetColumnName(i); const char * bName = b->getColumnName(i); bool good=true; if (aName) { if (!bName||strcmp(aName,bName)) good=false; } else if (bName) { good=false; } if (!good) break; } } return (i==n); } // Add a row block name and number of rows int CoinStructuredModel::addRowBlock(int numberRows,const std::string &name) { int iRowBlock; for (iRowBlock=0;iRowBlocknumberElements(); } return numberElements; } // Return i'th block as CoinModel (or NULL) CoinModel * CoinStructuredModel::coinBlock(int i) const { CoinModel * block = dynamic_cast(blocks_[i]); if (block) return block; else if (coinModelBlocks_) return coinModelBlocks_[i]; else return NULL; } /* Return block as a CoinModel block and fill in info structure and update counts */ CoinModel * CoinStructuredModel::coinModelBlock(CoinModelBlockInfo & info) { // CoinStructuredModel int numberRows=this->numberRows(); int numberColumns =this-> numberColumns(); int numberRowBlocks=this->numberRowBlocks(); int numberColumnBlocks =this-> numberColumnBlocks(); int numberElementBlocks =this-> numberElementBlocks(); CoinBigIndex numberElements=this->numberElements(); // See what is needed double * rowLower = NULL; double * rowUpper = NULL; double * columnLower = NULL; double * columnUpper = NULL; double * objective = NULL; int * integerType = NULL; info = CoinModelBlockInfo(); CoinModel ** blocks = new CoinModel * [numberElementBlocks]; for (int iBlock=0;iBlock(blocks_[iBlock]); CoinModel * thisBlock; if (subModel) { thisBlock = subModel->coinModelBlock(thisInfo); fillInfo(thisInfo,subModel); setCoinModel(thisBlock,iBlock); } else { thisBlock = dynamic_cast(blocks_[iBlock]); assert (thisBlock); fillInfo(thisInfo,thisBlock); } blocks[iBlock]=thisBlock; if (thisInfo.rhs&&!info.rhs) { info.rhs=1; rowLower = new double [numberRows]; rowUpper = new double [numberRows]; CoinFillN(rowLower,numberRows,-COIN_DBL_MAX); CoinFillN(rowUpper,numberRows,COIN_DBL_MAX); } if (thisInfo.bounds&&!info.bounds) { info.bounds=1; columnLower = new double [numberColumns]; columnUpper = new double [numberColumns]; objective = new double [numberColumns]; CoinFillN(columnLower,numberColumns,0.0); CoinFillN(columnUpper,numberColumns,COIN_DBL_MAX); CoinFillN(objective,numberColumns,0.0); } if (thisInfo.integer&&!info.integer) { info.integer=1; integerType = new int [numberColumns]; CoinFillN(integerType,numberColumns,0); } if (thisInfo.rowName&&!info.rowName) { info.rowName=1; } if (thisInfo.columnName&&!info.columnName) { info.columnName=1; } } // Space for elements int * row = new int[numberElements]; int * column = new int[numberElements]; double * element = new double[numberElements]; numberElements=0; // Bases for blocks int * rowBase = new int[numberRowBlocks]; CoinFillN(rowBase,numberRowBlocks,-1); CoinModelBlockInfo * rowBlockInfo = new CoinModelBlockInfo [numberRowBlocks]; int * columnBase = new int[numberColumnBlocks]; CoinFillN(columnBase,numberColumnBlocks,-1); CoinModelBlockInfo * columnBlockInfo = new CoinModelBlockInfo [numberColumnBlocks]; for (int iBlock=0;iBlockgetRowBlock()); assert (iRowBlock>=0&&iRowBlocknumberRows(); else assert (rowBase[iRowBlock]==blocks[iBlock]->numberRows()); int iColumnBlock = columnBlock(blocks[iBlock]->getColumnBlock()); assert (iColumnBlock>=0&&iColumnBlocknumberColumns(); else assert (columnBase[iColumnBlock]==blocks[iBlock]->numberColumns()); } int n=0; for (int iBlock=0;iBlock=0); n+=k; } assert (n==numberRows); n=0; for (int iBlock=0;iBlock=0); n+=k; } assert (n==numberColumns); for (int iBlock=0;iBlockgetRowBlock()); int iRowBase = rowBase[iRowBlock]; int nRows = thisBlock->numberRows(); // could check if identical before error if (thisInfo.rhs) { assert (!rowBlockInfo[iRowBlock].rhs); rowBlockInfo[iRowBlock].rhs=1; memcpy(rowLower+iRowBase,thisBlock->rowLowerArray(), nRows*sizeof(double)); memcpy(rowUpper+iRowBase,thisBlock->rowUpperArray(), nRows*sizeof(double)); } int iColumnBlock = columnBlock(blocks[iBlock]->getColumnBlock()); int iColumnBase = columnBase[iColumnBlock]; int nColumns = thisBlock->numberColumns(); if (thisInfo.bounds) { assert (!columnBlockInfo[iColumnBlock].bounds); columnBlockInfo[iColumnBlock].bounds=1; memcpy(columnLower+iColumnBase,thisBlock->columnLowerArray(), nColumns*sizeof(double)); memcpy(columnUpper+iColumnBase,thisBlock->columnUpperArray(), nColumns*sizeof(double)); memcpy(objective+iColumnBase,thisBlock->objectiveArray(), nColumns*sizeof(double)); } if (thisInfo.integer) { assert (!columnBlockInfo[iColumnBlock].integer); columnBlockInfo[iColumnBlock].integer=1; memcpy(integerType+iColumnBase,thisBlock->integerTypeArray(), nColumns*sizeof(int)); } const CoinPackedMatrix * elementBlock = thisBlock->packedMatrix(); // get matrix data pointers const int * row2 = elementBlock->getIndices(); const CoinBigIndex * columnStart = elementBlock->getVectorStarts(); const double * elementByColumn = elementBlock->getElements(); const int * columnLength = elementBlock->getVectorLengths(); int n = elementBlock->getNumCols(); assert (elementBlock->isColOrdered()); for (int iColumn=0;iColumnsetColumnIsInteger(iColumn,integerType[iColumn]!=0); } } delete [] integerType; block->setObjectiveOffset(objectiveOffset()); if (info.rowName||info.columnName) { for (int iBlock=0;iBlockgetRowBlock()); int iRowBase = rowBase[iRowBlock]; if (thisInfo.rowName) { int numberItems = thisBlock->rowNames()->numberItems(); assert( thisBlock->numberRows()>=numberItems); if (numberItems) { const char *const * rowNames=thisBlock->rowNames()->names(); for (int i=0;isetRowName(i+iRowBase,name.c_str()); } } } int iColumnBlock = columnBlock(thisBlock->getColumnBlock()); int iColumnBase = columnBase[iColumnBlock]; if (thisInfo.columnName) { int numberItems = thisBlock->columnNames()->numberItems(); assert( thisBlock->numberColumns()>=numberItems); if (numberItems) { const char *const * columnNames=thisBlock->columnNames()->names(); for (int i=0;isetColumnName(i+iColumnBase,name.c_str()); } } } } } delete [] rowBase; delete [] columnBase; for (int iBlock=0;iBlock (blocks[iBlock])!= static_cast (blocks_[iBlock])) delete blocks[iBlock]; } delete [] blocks; return block; } // Sets given block into coinModelBlocks_ void CoinStructuredModel::setCoinModel(CoinModel * block, int iBlock) { if (!coinModelBlocks_) { coinModelBlocks_ = new CoinModel * [maximumElementBlocks_]; CoinZeroN(coinModelBlocks_,maximumElementBlocks_); } delete coinModelBlocks_[iBlock]; coinModelBlocks_[iBlock]=block; } // Refresh info in blockType_ void CoinStructuredModel::refresh(int iBlock) { fillInfo(blockType_[iBlock],coinBlock(iBlock)); } /* Fill in info structure and update counts Returns number of inconsistencies on border */ int CoinStructuredModel::fillInfo(CoinModelBlockInfo & info, const CoinModel * block) { int whatsSet = block->whatIsSet(); info.matrix = static_cast(((whatsSet&1)!=0) ? 1 : 0); info.rhs = static_cast(((whatsSet&2)!=0) ? 1 : 0); info.rowName = static_cast(((whatsSet&4)!=0) ? 1 : 0); info.integer = static_cast(((whatsSet&32)!=0) ? 1 : 0); info.bounds = static_cast(((whatsSet&8)!=0) ? 1 : 0); info.columnName = static_cast(((whatsSet&16)!=0) ? 1 : 0); int numberRows = block->numberRows(); int numberColumns = block->numberColumns(); // Which block int iRowBlock=addRowBlock(numberRows,block->getRowBlock()); info.rowBlock=iRowBlock; int iColumnBlock=addColumnBlock(numberColumns,block->getColumnBlock()); info.columnBlock=iColumnBlock; int numberErrors=0; CoinModelBlockInfo sumInfo=blockType_[numberElementBlocks_-1]; int iRhs=(sumInfo.rhs) ? numberElementBlocks_-1 : -1; int iRowName=(sumInfo.rowName) ? numberElementBlocks_-1 : -1; int iBounds=(sumInfo.bounds) ? numberElementBlocks_-1 : -1; int iColumnName=(sumInfo.columnName) ? numberElementBlocks_-1 : -1; int iInteger=(sumInfo.integer) ? numberElementBlocks_-1 : -1; for (int i=0;inumberRows()) numberErrors+=1000; if (blockType_[i].rhs) { if (iRhs<0) { iRhs=i; } else { // check const double * a = static_cast(blocks_[iRhs])->rowLowerArray(); const double * b = static_cast(blocks_[i])->rowLowerArray(); if (!sameValues(a,b,numberRows)) numberErrors++; a = static_cast(blocks_[iRhs])->rowUpperArray(); b = static_cast(blocks_[i])->rowUpperArray(); if (!sameValues(a,b,numberRows)) numberErrors++; } } if (blockType_[i].rowName) { if (iRowName<0) { iRowName=i; } else { // check if (!sameValues(static_cast(blocks_[iRowName]), static_cast(blocks_[i]),true)) numberErrors++; } } } if (iColumnBlock==blockType_[i].columnBlock) { if (numberColumns!=blocks_[i]->numberColumns()) numberErrors+=1000; if (blockType_[i].bounds) { if (iBounds<0) { iBounds=i; } else { // check const double * a = static_cast(blocks_[iBounds])->columnLowerArray(); const double * b = static_cast(blocks_[i])->columnLowerArray(); if (!sameValues(a,b,numberColumns)) numberErrors++; a = static_cast(blocks_[iBounds])->columnUpperArray(); b = static_cast(blocks_[i])->columnUpperArray(); if (!sameValues(a,b,numberColumns)) numberErrors++; a = static_cast(blocks_[iBounds])->objectiveArray(); b = static_cast(blocks_[i])->objectiveArray(); if (!sameValues(a,b,numberColumns)) numberErrors++; } } if (blockType_[i].columnName) { if (iColumnName<0) { iColumnName=i; } else { // check if (!sameValues(static_cast(blocks_[iColumnName]), static_cast(blocks_[i]),false)) numberErrors++; } } if (blockType_[i].integer) { if (iInteger<0) { iInteger=i; } else { // check const int * a = static_cast(blocks_[iInteger])->integerTypeArray(); const int * b = static_cast(blocks_[i])->integerTypeArray(); if (!sameValues(a,b,numberColumns)) numberErrors++; } } } } return numberErrors; } /* Fill in info structure and update counts */ void CoinStructuredModel::fillInfo(CoinModelBlockInfo & info, const CoinStructuredModel * block) { int numberRows = block->numberRows(); int numberColumns = block->numberColumns(); // Which block int iRowBlock=addRowBlock(numberRows,block->rowBlockName_); info.rowBlock=iRowBlock; int iColumnBlock=addColumnBlock(numberColumns,block->columnBlockName_); info.columnBlock=iColumnBlock; } /* add a block from a CoinModel without names*/ int CoinStructuredModel::addBlock(const std::string & rowBlock, const std::string & columnBlock, const CoinBaseModel & block) { CoinBaseModel * block2 = block.clone(); return addBlock(rowBlock,columnBlock,block2); } /* add a block using names */ int CoinStructuredModel::addBlock(const std::string & rowBlock, const std::string & columnBlock, const CoinPackedMatrix & matrix, const double * rowLower, const double * rowUpper, const double * columnLower, const double * columnUpper, const double * objective) { CoinModel * block = new CoinModel(); block->loadBlock(matrix,columnLower,columnUpper,objective, rowLower,rowUpper); return addBlock(rowBlock,columnBlock,block); } /* add a block from a CoinModel without names*/ int CoinStructuredModel::addBlock(const std::string & rowBlock, const std::string & columnBlock, CoinBaseModel * block) { if (numberElementBlocks_==maximumElementBlocks_) { maximumElementBlocks_ = 3*(maximumElementBlocks_+10)/2; CoinBaseModel ** temp = new CoinBaseModel * [maximumElementBlocks_]; memcpy(temp,blocks_,numberElementBlocks_*sizeof(CoinBaseModel *)); delete [] blocks_; blocks_ = temp; CoinModelBlockInfo * temp2 = new CoinModelBlockInfo [maximumElementBlocks_]; memcpy(temp2,blockType_,numberElementBlocks_*sizeof(CoinModelBlockInfo)); delete [] blockType_; blockType_ = temp2; if (coinModelBlocks_) { CoinModel ** temp = new CoinModel * [maximumElementBlocks_]; CoinZeroN(temp,maximumElementBlocks_); memcpy(temp,coinModelBlocks_,numberElementBlocks_*sizeof(CoinModel *)); delete [] coinModelBlocks_; coinModelBlocks_ = temp; } } blocks_[numberElementBlocks_++]=block; block->setRowBlock(rowBlock); block->setColumnBlock(columnBlock); int numberErrors=0; CoinModel * coinBlock = dynamic_cast(block); if (coinBlock) { // Convert matrix if (coinBlock->type()!=3) coinBlock->convertMatrix(); numberErrors=fillInfo(blockType_[numberElementBlocks_-1],coinBlock); } else { CoinStructuredModel * subModel = dynamic_cast(block); assert (subModel); CoinModel * blockX = subModel->coinModelBlock(blockType_[numberElementBlocks_-1]); fillInfo(blockType_[numberElementBlocks_-1],subModel); setCoinModel(blockX,numberElementBlocks_-1); } return numberErrors; } /* add a block from a CoinModel with names*/ int CoinStructuredModel::addBlock(const CoinBaseModel & block) { //inline const std::string & getRowBlock() const //abort(); return addBlock(block.getRowBlock(),block.getColumnBlock(), block); } /* Decompose a model specified as arrays + CoinPackedMatrix 1 - try D-W 2 - try Benders 3 - try Staircase Returns number of blocks or zero if no structure */ int CoinStructuredModel::decompose(const CoinPackedMatrix & matrix, const double * rowLower, const double * rowUpper, const double * columnLower, const double * columnUpper, const double * objective, int type,int maxBlocks, double objectiveOffset) { setObjectiveOffset(objectiveOffset); int numberBlocks=0; if (type==1) { // get row copy CoinPackedMatrix rowCopy = matrix; rowCopy.reverseOrdering(); const int * row = matrix.getIndices(); const int * columnLength = matrix.getVectorLengths(); const CoinBigIndex * columnStart = matrix.getVectorStarts(); //const double * elementByColumn = matrix.getElements(); const int * column = rowCopy.getIndices(); const int * rowLength = rowCopy.getVectorLengths(); const CoinBigIndex * rowStart = rowCopy.getVectorStarts(); //const double * elementByRow = rowCopy.getElements(); int numberRows = matrix.getNumRows(); int * rowBlock = new int[numberRows+1]; int iRow; // Row counts (maybe look at long rows for master) CoinZeroN(rowBlock,numberRows+1); for (iRow=0;iRow=0) { // already marked if (iBlock<0) { iBlock = columnBlock[iColumn]; } else if (iBlock != columnBlock[iColumn]) { // join two blocks int jBlock = columnBlock[iColumn]; numberGoodBlocks--; // Increase count of iBlock rowBlock[iBlock] += rowBlock[jBlock]; rowBlock[jBlock]=0; // First column of block jBlock int jColumn = whichRow[jBlock]; while (jColumn>=0) { columnBlock[jColumn]=iBlock; iColumn = jColumn; jColumn = whichColumn[jColumn]; } whichColumn[iColumn] = whichRow[iBlock]; whichRow[iBlock] = whichRow[jBlock]; whichRow[jBlock]=-1; } } } int n=end-start; // If not in block - then start one if (iBlock<0) { // unless null row if (n) { iBlock = numberBlocks; numberBlocks++; numberGoodBlocks++; int jColumn = column[start]; columnBlock[jColumn]=iBlock; whichRow[iBlock]=jColumn; numberMarkedColumns += n; rowBlock[iBlock] = n; for (CoinBigIndex j=start+1;j=0) { nn++; assert (iBlock=0) { n++; jColumn = whichColumn[jColumn]; } assert (n==temp[i]); } delete [] temp; } #endif rowsDone++; if (iBlock>=0) maximumInBlock = CoinMax(maximumInBlock,rowBlock[iBlock]); if (rowsDone>=checkAfterRows) { assert (numberGoodBlocks>0); double averageSize = static_cast(numberMarkedColumns)/ static_cast(numberGoodBlocks); #ifndef OSL_WAY double notionalBlocks = static_cast(numberMarkedColumns)/ averageSize; if (maximumInBlock<3*averageSize&&numberGoodBlocks>2) { if(best*(numberRows-rowsDone) < notionalBlocks) { best = notionalBlocks/ static_cast (numberRows-rowsDone); bestRow = kRow; } } #else if (maximumInBlock*101) { double test = maximumInBlock + 0.0*averageSize; if(best*static_cast(rowsDone) > test) { best = test/static_cast (rowsDone); bestRow = kRow; bestRowsDone=rowsDone; } } #endif } } #ifndef OSL_WAY best2[iWay]=best; #else if (bestRowsDonebest2[1]) { // Bottom rows in master iRow1=row2[0]+1; iRow2=numberRows; } else { // Top rows in master iRow1=0; iRow2=numberRows-row2[1]; } nMaster = iRow2-iRow1; CoinFillN(rowBlock+iRow1,nMaster,-1); } else { // sorted // Bottom rows in master (in order) int iRow1=row2[2]+1; nMaster = numberRows-iRow1; for (int i=iRow1;inumberRows) { printf("%d rows out of %d would be in master - no good\n", nMaster,numberRows); delete [] rowBlock; delete [] columnBlock; delete [] whichRow; delete [] whichColumn; delete [] stack; CoinModel model(numberRows,numberColumns,&matrix, rowLower, rowUpper, columnLower,columnUpper,objective); model.setObjectiveOffset(objectiveOffset); addBlock("row_master","column_master",model); return 0; } } else { for (iRow=0;iRowmaxBlocks) { int iBlock; for (iRow=0;iRow=0) rowBlock[iRow] = iBlock%maxBlocks; } for (iColumn=0;iColumn=0) columnBlock[iColumn] = iBlock%maxBlocks; } numberBlocks=maxBlocks; } } // make up problems // Create all sub problems // Space for creating double * obj = new double [numberColumns]; double * columnLo = new double [numberColumns]; double * columnUp = new double [numberColumns]; double * rowLo = new double [numberRows]; double * rowUp = new double [numberRows]; // Counts int * rowCount = reinterpret_cast(rowLo); CoinZeroN(rowCount,numberBlocks); for (int i=0;i=0) rowCount[iBlock]++; } // allocate empty rows for (int i=0;i(rowUp); CoinZeroN(columnCount,numberBlocks); for (int i=0;i=0) columnCount[iBlock]++; } int maximumSize=0; for (int i=0;i4*(2*numberRows+numberColumns)) { // No good printf("Doesn't look good\n"); delete [] rowBlock; delete [] columnBlock; delete [] whichRow; delete [] whichColumn; delete [] obj ; delete [] columnLo ; delete [] columnUp ; delete [] rowLo ; delete [] rowUp ; CoinModel model(numberRows,numberColumns,&matrix, rowLower, rowUpper, columnLower,columnUpper,objective); model.setObjectiveOffset(objectiveOffset); addBlock("row_master","column_master",model); return 0; } // Name for master so at top addRowBlock(numberMasterRows,"row_master"); // Arrays // get full matrix CoinPackedMatrix fullMatrix = matrix; int numberRow2,numberColumn2; int iBlock; for (iBlock=0;iBlocksetOriginalIndices(whichRow,whichColumn); addBlock(rowName,columnName,block); // takes ownership // and top block numberRow2=0; // get top matrix for (iRow=0;iRowsetOriginalIndices(whichRow,whichColumn); addBlock("row_master",columnName,block); // takes ownership } // and master numberRow2=0; numberColumn2=0; for (iRow=0;iRowsetOriginalIndices(whichRow,whichColumn); addBlock("row_master","column_master",block); // takes ownership delete [] whichRow; delete [] whichColumn; delete [] obj ; delete [] columnLo ; delete [] columnUp ; delete [] rowLo ; delete [] rowUp ; } else if (type==2) { // get row copy CoinPackedMatrix rowCopy = matrix; rowCopy.reverseOrdering(); const int * row = matrix.getIndices(); const int * columnLength = matrix.getVectorLengths(); const CoinBigIndex * columnStart = matrix.getVectorStarts(); //const double * elementByColumn = matrix.getElements(); const int * column = rowCopy.getIndices(); const int * rowLength = rowCopy.getVectorLengths(); const CoinBigIndex * rowStart = rowCopy.getVectorStarts(); //const double * elementByRow = rowCopy.getElements(); int numberColumns = matrix.getNumCols(); int * columnBlock = new int[numberColumns+1]; int iColumn; // Column counts (maybe look at long columns for master) CoinZeroN(columnBlock,numberColumns+1); for (iColumn=0;iColumn=0) { // already marked if (iBlock<0) { iBlock = rowBlock[iRow]; } else if (iBlock != rowBlock[iRow]) { // join two blocks int jBlock = rowBlock[iRow]; numberGoodBlocks--; // Increase count of iBlock columnBlock[iBlock] += columnBlock[jBlock]; columnBlock[jBlock]=0; // First row of block jBlock int jRow = whichColumn[jBlock]; while (jRow>=0) { rowBlock[jRow]=iBlock; iRow = jRow; jRow = whichRow[jRow]; } whichRow[iRow] = whichColumn[iBlock]; whichColumn[iBlock] = whichColumn[jBlock]; whichColumn[jBlock]=-1; } } } int n=end-start; // If not in block - then start one if (iBlock<0) { // unless null column if (n) { iBlock = numberBlocks; numberBlocks++; numberGoodBlocks++; int jRow = row[start]; rowBlock[jRow]=iBlock; whichColumn[iBlock]=jRow; numberMarkedRows += n; columnBlock[iBlock] = n; for (CoinBigIndex j=start+1;j=0) maximumInBlock = CoinMax(maximumInBlock,columnBlock[iBlock]); if (columnsDone>=checkAfterColumns) { assert (numberGoodBlocks>0); double averageSize = static_cast(numberMarkedRows)/ static_cast(numberGoodBlocks); #ifndef OSL_WAY double notionalBlocks = static_cast(numberMarkedRows)/ averageSize; if (maximumInBlock<3*averageSize&&numberGoodBlocks>2) { if(best*(numberColumns-columnsDone) < notionalBlocks) { best = notionalBlocks/ static_cast (numberColumns-columnsDone); bestColumn = kColumn; } } #else if (maximumInBlock*101) { double test = maximumInBlock + 0.0*averageSize; if(best*static_cast(columnsDone) > test) { best = test/static_cast (columnsDone); bestColumn = kColumn; bestColumnsDone=columnsDone; } } #endif } } #ifndef OSL_WAY best2[iWay]=best; #else if (bestColumnsDonebest2[1]) { // End columns in master iColumn1=column2[0]+1; iColumn2=numberColumns; } else { // Beginning columns in master iColumn1=0; iColumn2=numberColumns-column2[1]; } nMaster = iColumn2-iColumn1; CoinFillN(columnBlock+iColumn1,nMaster,-1); } else { // sorted // End columns in master (in order) int iColumn1=column2[2]+1; nMaster = numberColumns-iColumn1; for (int i=iColumn1;inumberColumns) { printf("%d columns out of %d would be in master - no good\n", nMaster,numberColumns); delete [] rowBlock; delete [] columnBlock; delete [] whichRow; delete [] whichColumn; delete [] stack; CoinModel model(numberRows,numberColumns,&matrix, rowLower, rowUpper, columnLower,columnUpper,objective); model.setObjectiveOffset(objectiveOffset); addBlock("row_master","column_master",model); return 0; } } else { for (iColumn=0;iColumnmaxBlocks) { int iBlock; for (iColumn=0;iColumn=0) columnBlock[iColumn] = iBlock%maxBlocks; } for (iRow=0;iRow=0) rowBlock[iRow] = iBlock%maxBlocks; } numberBlocks=maxBlocks; } } // make up problems // Create all sub problems // Space for creating double * obj = new double [numberColumns]; double * rowLo = new double [numberRows]; double * rowUp = new double [numberRows]; double * columnLo = new double [numberColumns]; double * columnUp = new double [numberColumns]; // Counts int * columnCount = reinterpret_cast(columnLo); CoinZeroN(columnCount,numberBlocks); for (int i=0;i=0) columnCount[iBlock]++; } // allocate empty columns for (int i=0;i(columnUp); CoinZeroN(rowCount,numberBlocks); for (int i=0;i=0) rowCount[iBlock]++; } int maximumSize=0; for (int i=0;i4*(2*numberColumns+numberRows)) { // No good printf("Doesn't look good\n"); delete [] rowBlock; delete [] columnBlock; delete [] whichRow; delete [] whichColumn; delete [] obj ; delete [] columnLo ; delete [] columnUp ; delete [] rowLo ; delete [] rowUp ; CoinModel model(numberRows,numberColumns,&matrix, rowLower, rowUpper, columnLower,columnUpper,objective); model.setObjectiveOffset(objectiveOffset); addBlock("row_master","column_master",model); return 0; } // Name for master so at beginning addColumnBlock(numberMasterColumns,"column_master"); // Arrays // get full matrix CoinPackedMatrix fullMatrix = matrix; int numberRow2,numberColumn2; int iBlock; for (iBlock=0;iBlocksetOriginalIndices(whichRow,whichColumn); addBlock(rowName,columnName,block); // takes ownership // and beginning block numberColumn2=0; // get beginning matrix for (iColumn=0;iColumnsetOriginalIndices(whichRow,whichColumn); addBlock(rowName,"column_master",block); // takes ownership } // and master numberRow2=0; numberColumn2=0; for (iColumn=0;iColumnsetOriginalIndices(whichRow,whichColumn); addBlock("row_master","column_master",block); // takes ownership delete [] whichRow; delete [] whichColumn; delete [] obj ; delete [] columnLo ; delete [] columnUp ; delete [] rowLo ; delete [] rowUp ; } else { abort(); } return numberBlocks; } /* Decompose a CoinModel 1 - try D-W 2 - try Benders 3 - try Staircase Returns number of blocks or zero if no structure */ int CoinStructuredModel::decompose(const CoinModel & coinModel, int type, int maxBlocks) { const CoinPackedMatrix * matrix = coinModel.packedMatrix(); assert (matrix!=NULL); // Arrays const double * objective = coinModel.objectiveArray(); const double * columnLower = coinModel.columnLowerArray(); const double * columnUpper = coinModel.columnUpperArray(); const double * rowLower = coinModel.rowLowerArray(); const double * rowUpper = coinModel.rowUpperArray(); return decompose(*matrix, rowLower, rowUpper, columnLower, columnUpper, objective, type,maxBlocks, coinModel.objectiveOffset()); } // Return block corresponding to row and column const CoinBaseModel * CoinStructuredModel::block(int row,int column) const { const CoinBaseModel * block = NULL; if (blockType_) { for (int iBlock=0;iBlock(blocks_[iBlock]); assert (block); break; } } } return block; } /* Fill pointers corresponding to row and column. False if any missing */ CoinModelBlockInfo CoinStructuredModel::block(int row,int column, const double * & rowLower, const double * & rowUpper, const double * & columnLower, const double * & columnUpper, const double * & objective) const { CoinModelBlockInfo info; //memset(&info,0,sizeof(info)); rowLower=NULL; rowUpper=NULL; columnLower=NULL; columnUpper=NULL; objective=NULL; if (blockType_) { for (int iBlock=0;iBlockrowLowerArray(); rowUpper = thisBlock->rowUpperArray(); } } if (blockType_[iBlock].columnBlock==column) { if (blockType_[iBlock].bounds) { info.bounds=1; columnLower = thisBlock->columnLowerArray(); columnUpper = thisBlock->columnUpperArray(); objective = thisBlock->objectiveArray(); } } } } return info; } // Return block number corresponding to row and column int CoinStructuredModel::blockIndex(int row,int column) const { int block=-1; if (blockType_) { for (int iBlock=0;iBlock #include #include #include #include #include #include #include "CoinMpsIO.hpp" #include "CoinMessage.hpp" #include "CoinHelperFunctions.hpp" #include "CoinModel.hpp" #include "CoinSort.hpp" //############################################################################# // type - 0 normal, 1 INTEL IEEE, 2 other IEEE namespace { const double fraction[]= {1.0,1.0e-1,1.0e-2,1.0e-3,1.0e-4,1.0e-5,1.0e-6,1.0e-7,1.0e-8, 1.0e-9,1.0e-10,1.0e-11,1.0e-12,1.0e-13,1.0e-14,1.0e-15,1.0e-16, 1.0e-17,1.0e-18,1.0e-19,1.0e-20,1.0e-21,1.0e-22,1.0e-23}; const double exponent[]= {1.0e-9,1.0e-8,1.0e-7,1.0e-6,1.0e-5,1.0e-4,1.0e-3,1.0e-2,1.0e-1, 1.0,1.0e1,1.0e2,1.0e3,1.0e4,1.0e5,1.0e6,1.0e7,1.0e8,1.0e9}; } // end file-local namespace double CoinMpsCardReader::osi_strtod(char * ptr, char ** output, int type) { double value = 0.0; char * save = ptr; // take off leading white space while (*ptr==' '||*ptr=='\t') ptr++; if (!type) { double sign1=1.0; // do + or - if (*ptr=='-') { sign1=-1.0; ptr++; } else if (*ptr=='+') { ptr++; } // more white space while (*ptr==' '||*ptr=='\t') ptr++; char thisChar=0; while (value<1.0e30) { thisChar = *ptr; ptr++; if (thisChar>='0'&&thisChar<='9') value = value*10.0+thisChar-'0'; else break; } if (value<1.0e30) { if (thisChar=='.') { // do fraction double value2 = 0.0; int nfrac=0; while (nfrac<24) { thisChar = *ptr; ptr++; if (thisChar>='0'&&thisChar<='9') { value2 = value2*10.0+thisChar-'0'; nfrac++; } else { break; } } if (nfrac<24) { value += value2*fraction[nfrac]; } else { thisChar='x'; // force error } } if (thisChar=='e'||thisChar=='E') { // exponent int sign2=1; // do + or - if (*ptr=='-') { sign2=-1; ptr++; } else if (*ptr=='+') { ptr++; } int value3 = 0; while (value3<1000) { thisChar = *ptr; ptr++; if (thisChar>='0'&&thisChar<='9') { value3 = value3*10+thisChar-'0'; } else { break; } } if (value3<300) { value3 *= sign2; // power of 10 if (abs(value3)<10) { // do most common by lookup (for accuracy?) value *= exponent[value3+9]; } else { value *= pow(10.0,value3); } } else if (sign2<0.0) { value = 0.0; // force zero } else { value = COIN_DBL_MAX; } } if (thisChar==0||thisChar=='\t'||thisChar==' ') { // okay *output=ptr; } else { value = osi_strtod(save,output); sign1=1.0; } } else { // bad value value = osi_strtod(save,output); sign1=1.0; } value *= sign1; } else { // ieee - 3 bytes go to 2 assert (sizeof(double)==8*sizeof(char)); assert (sizeof(unsigned short) == 2*sizeof(char)); unsigned short shortValue[4]; *output = ptr+12; // say okay if (type==1) { // INTEL for (int i=3;i>=0;i--) { int integerValue=0; char * three = reinterpret_cast (&integerValue); three[1]=ptr[0]; three[2]=ptr[1]; three[3]=ptr[2]; unsigned short thisValue=0; // decode 6 bits at a time for (int j=2;j>=0;j--) { thisValue = static_cast(thisValue<<6); char thisChar = ptr[j]; if (thisChar >= '0' && thisChar <= '0' + 9) { thisValue = static_cast(thisValue | (thisChar - '0')); } else if (thisChar >= 'a' && thisChar <= 'a' + 25) { thisValue = static_cast(thisValue | (thisChar - 'a' + 10)); } else if (thisChar >= 'A' && thisChar <= 'A' + 25) { thisValue = static_cast(thisValue | (thisChar - 'A' + 36)); } else if (thisChar >= '*' && thisChar <= '*' + 1) { thisValue = static_cast(thisValue | (thisChar - '*' + 62)); } else { // error *output=save; } } ptr+=3; shortValue[i]=thisValue; } } else { // not INTEL for (int i=0;i<4;i++) { int integerValue=0; char * three = reinterpret_cast (&integerValue); three[1]=ptr[0]; three[2]=ptr[1]; three[3]=ptr[2]; unsigned short thisValue=0; // decode 6 bits at a time for (int j=2;j>=0;j--) { thisValue = static_cast(thisValue<<6); char thisChar = ptr[j]; if (thisChar >= '0' && thisChar <= '0' + 9) { thisValue = static_cast(thisValue | (thisChar - '0')); } else if (thisChar >= 'a' && thisChar <= 'a' + 25) { thisValue = static_cast(thisValue | (thisChar - 'a' + 10)); } else if (thisChar >= 'A' && thisChar <= 'A' + 25) { thisValue = static_cast(thisValue | (thisChar - 'A' + 36)); } else if (thisChar >= '*' && thisChar <= '*' + 1) { thisValue = static_cast(thisValue | (thisChar - '*' + 62)); } else { // error *output=save; } } ptr+=3; shortValue[i]=thisValue; } } memcpy(&value,shortValue,sizeof(double)); } return value; } // for strings double CoinMpsCardReader::osi_strtod(char * ptr, char ** output) { char * save = ptr; double value=-1.0e100; if (!stringsAllowed_) { *output=save; } else { // take off leading white space while (*ptr==' '||*ptr=='\t') ptr++; if (*ptr=='=') { strcpy(valueString_,ptr); #define STRING_VALUE -1.234567e-101 value = STRING_VALUE; *output=ptr+strlen(ptr); } else { *output=save; } } return value; } //############################################################################# // sections const static char *section[] = { "", "NAME", "ROW", "COLUMN", "RHS", "RANGES", "BOUNDS", "ENDATA", " ","QSECTION", "CSECTION", "QUADOBJ" , "SOS", "BASIS", " " }; // what is allowed in each section - must line up with COINSectionType const static COINMpsType startType[] = { COIN_UNKNOWN_MPS_TYPE, COIN_UNKNOWN_MPS_TYPE, COIN_N_ROW, COIN_BLANK_COLUMN, COIN_BLANK_COLUMN, COIN_BLANK_COLUMN, COIN_UP_BOUND, COIN_UNKNOWN_MPS_TYPE, COIN_UNKNOWN_MPS_TYPE, COIN_BLANK_COLUMN, COIN_BLANK_COLUMN, COIN_BLANK_COLUMN, COIN_S1_BOUND, COIN_BS_BASIS, COIN_UNKNOWN_MPS_TYPE }; const static COINMpsType endType[] = { COIN_UNKNOWN_MPS_TYPE, COIN_UNKNOWN_MPS_TYPE, COIN_BLANK_COLUMN, COIN_UNSET_BOUND, COIN_S1_COLUMN, COIN_S1_COLUMN, COIN_UNKNOWN_MPS_TYPE, COIN_UNKNOWN_MPS_TYPE, COIN_UNKNOWN_MPS_TYPE, COIN_BLANK_COLUMN, COIN_BLANK_COLUMN, COIN_BLANK_COLUMN, COIN_BS_BASIS, COIN_UNKNOWN_MPS_TYPE, COIN_UNKNOWN_MPS_TYPE }; const static int allowedLength[] = { 0, 0, 1, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0 }; // names of types const static char *mpsTypes[] = { "N", "E", "L", "G", " ", "S1", "S2", "S3", " ", " ", " ", " ", "UP", "FX", "LO", "FR", "MI", "PL", "BV", "UI", "LI", "SC", "X1", "X2", "BS", "XL", "XU", "LL", "UL", " " }; int CoinMpsCardReader::cleanCard() { char * getit; getit = input_->gets ( card_, MAX_CARD_LENGTH); if ( getit ) { cardNumber_++; unsigned char * lastNonBlank = reinterpret_cast (card_-1); unsigned char * image = reinterpret_cast (card_); bool tabs=false; while ( *image != '\0' ) { if ( *image != '\t' && *image < ' ' ) { break; } else if ( *image != '\t' && *image != ' ') { lastNonBlank = image; } else if (*image == '\t') { tabs=true; } image++; } *(lastNonBlank+1)='\0'; if (tabs&§ion_ == COIN_BOUNDS_SECTION&&!freeFormat_&&eightChar_) { int length = static_cast(lastNonBlank+1- reinterpret_cast(card_)); assert (length<81); memcpy(card_+82,card_,length); int pos[]={1,4,14,24,1000}; int put=0; int tab=0; for (int i=0;imessage(COIN_MPS_LINE,messages_)<message(COIN_MPS_LINE,messages_)< (i); break; } } return section_; } CoinMpsCardReader::CoinMpsCardReader ( CoinFileInput *input, CoinMpsIO * reader) { memset ( card_, 0, MAX_CARD_LENGTH ); position_ = card_; eol_ = card_; mpsType_ = COIN_UNKNOWN_MPS_TYPE; memset ( rowName_, 0, COIN_MAX_FIELD_LENGTH ); memset ( columnName_, 0, COIN_MAX_FIELD_LENGTH ); value_ = 0.0; input_ = input; section_ = COIN_EOF_SECTION; cardNumber_ = 0; freeFormat_ = false; ieeeFormat_ = 0; eightChar_ = true; reader_ = reader; handler_ = reader_->messageHandler(); messages_ = reader_->messages(); memset ( valueString_, 0, COIN_MAX_FIELD_LENGTH ); stringsAllowed_=false; } // ~CoinMpsCardReader. Destructor CoinMpsCardReader::~CoinMpsCardReader ( ) { delete input_; } void CoinMpsCardReader::strcpyAndCompress ( char *to, const char *from ) { int n = static_cast(strlen(from)); int i; int nto = 0; for ( i = 0; i < n; i++ ) { if ( from[i] != ' ' ) { to[nto++] = from[i]; } } if ( !nto ) to[nto++] = ' '; to[nto] = '\0'; } // nextField COINSectionType CoinMpsCardReader::nextField ( ) { mpsType_ = COIN_BLANK_COLUMN; // find next non blank character char *next = position_; while ( next != eol_ ) { if ( *next == ' ' || *next == '\t' ) { next++; } else { break; } } bool gotCard; if ( next == eol_ ) { gotCard = false; } else { gotCard = true; } while ( !gotCard ) { // need new image if ( cleanCard() ) { return COIN_EOF_SECTION; } if ( card_[0] == ' ' || card_[0] == '\0') { // not a section or comment position_ = card_; eol_ = card_ + strlen ( card_ ); // get mps type and column name // scan to first non blank next = card_; while ( next != eol_ ) { if ( *next == ' ' || *next == '\t' ) { next++; } else { break; } } if ( next != eol_ ) { char *nextBlank = nextBlankOr ( next ); int nchar; if ( nextBlank ) { nchar = static_cast(nextBlank - next); } else { nchar = -1; } mpsType_ = COIN_BLANK_COLUMN; // special coding if RHS or RANGES, not free format and blanks if ( ( section_ != COIN_RHS_SECTION && section_ != COIN_RANGES_SECTION ) || freeFormat_ || strncmp ( card_ + 4, " ", 8 ) ) { // if columns section only look for first field if MARKER if ( section_ == COIN_COLUMN_SECTION && !strstr ( next, "'MARKER'" ) ) nchar = -1; if (section_ == COIN_SOS_SECTION) { if (!strncmp(card_," S1",3)) { mpsType_ = COIN_S1_BOUND; break; } else if (!strncmp(card_," S2",3)) { mpsType_ = COIN_S2_BOUND; break; } } if ( nchar == allowedLength[section_] ) { //could be a type int i; for ( i = startType[section_]; i < endType[section_]; i++ ) { if ( !strncmp ( next, mpsTypes[i], nchar ) ) { mpsType_ = static_cast (i); break; } } if ( mpsType_ != COIN_BLANK_COLUMN ) { //we know all we need so we can skip over next = nextBlank; while ( next != eol_ ) { if ( *next == ' ' || *next == '\t' ) { next++; } else { break; } } if ( next == eol_ ) { // error position_ = eol_; mpsType_ = COIN_UNKNOWN_MPS_TYPE; } else { nextBlank = nextBlankOr ( next ); } } else if (section_ == COIN_BOUNDS_SECTION) { // should have been something - but just fix LI problem // set to something illegal if (card_[0]==' '&&card_[3]==' '&&(card_[1]!=' '||card_[2]!=' ')) { mpsType_ = COIN_S3_COLUMN; //we know all we need so we can skip over next = nextBlank; while ( next != eol_ ) { if ( *next == ' ' || *next == '\t' ) { next++; } else { break; } } if ( next == eol_ ) { // error position_ = eol_; mpsType_ = COIN_UNKNOWN_MPS_TYPE; } else { nextBlank = nextBlankOr ( next ); } } } } if ( mpsType_ != COIN_UNKNOWN_MPS_TYPE ) { // special coding if BOUND, not free format and blanks if ( section_ != COIN_BOUNDS_SECTION || freeFormat_ || strncmp ( card_ + 4, " ", 8 ) ) { char save = '?'; if ( !freeFormat_ && eightChar_ && next == card_ + 4 ) { if ( eol_ - next >= 8 ) { if ( *( next + 8 ) != ' ' && *( next + 8 ) != '\0' ) { eightChar_ = false; } else { nextBlank = next + 8; } if (nextBlank) { save = *nextBlank; *nextBlank = '\0'; } } else { nextBlank = NULL; } } else { if ( nextBlank ) { save = *nextBlank; *nextBlank = '\0'; } } strcpyAndCompress ( columnName_, next ); if ( nextBlank ) { *nextBlank = save; // on to next next = nextBlank; } else { next = eol_; } } else { // blank bounds name strcpy ( columnName_, " " ); } while ( next != eol_ ) { if ( *next == ' ' || *next == '\t' ) { next++; } else { break; } } if ( next == eol_ ) { // error unless row section or conic section position_ = eol_; value_ = -1.0e100; if ( section_ != COIN_ROW_SECTION && section_!= COIN_CONIC_SECTION) mpsType_ = COIN_UNKNOWN_MPS_TYPE; else return section_; } else { nextBlank = nextBlankOr ( next ); //if (section_==COIN_CONIC_SECTION) } if ( section_ != COIN_ROW_SECTION ) { char save = '?'; if ( !freeFormat_ && eightChar_ && next == card_ + 14 ) { if ( eol_ - next >= 8 ) { if ( *( next + 8 ) != ' ' && *( next + 8 ) != '\0' ) { eightChar_ = false; } else { nextBlank = next + 8; } save = *nextBlank; *nextBlank = '\0'; } else { nextBlank = NULL; } } else { if ( nextBlank ) { save = *nextBlank; *nextBlank = '\0'; } } strcpyAndCompress ( rowName_, next ); if ( nextBlank ) { *nextBlank = save; // on to next next = nextBlank; } else { next = eol_; } while ( next != eol_ ) { if ( *next == ' ' || *next == '\t' ) { next++; } else { break; } } // special coding for markers if ( section_ == COIN_COLUMN_SECTION && !strncmp ( rowName_, "'MARKER'", 8 ) && next != eol_ ) { if ( !strncmp ( next, "'INTORG'", 8 ) ) { mpsType_ = COIN_INTORG; } else if ( !strncmp ( next, "'INTEND'", 8 ) ) { mpsType_ = COIN_INTEND; } else if ( !strncmp ( next, "'SOSORG'", 8 ) ) { if ( mpsType_ == COIN_BLANK_COLUMN ) mpsType_ = COIN_S1_COLUMN; } else if ( !strncmp ( next, "'SOSEND'", 8 ) ) { mpsType_ = COIN_SOSEND; } else { mpsType_ = COIN_UNKNOWN_MPS_TYPE; } position_ = eol_; return section_; } if ( next == eol_ ) { // error unless bounds or basis position_ = eol_; if ( section_ != COIN_BOUNDS_SECTION ) { if ( section_ != COIN_BASIS_SECTION ) mpsType_ = COIN_UNKNOWN_MPS_TYPE; value_ = -1.0e100; } else { value_ = 0.0; } } else { nextBlank = nextBlankOr ( next ); if ( nextBlank ) { save = *nextBlank; *nextBlank = '\0'; } char * after; value_ = osi_strtod(next,&after,ieeeFormat_); // see if error if (after>next) { if ( nextBlank ) { *nextBlank = save; position_ = nextBlank; } else { position_ = eol_; } } else { // error position_ = eol_; mpsType_ = COIN_UNKNOWN_MPS_TYPE; value_ = -1.0e100; } } } } } else { //blank name in RHS or RANGES strcpy ( columnName_, " " ); char save = '?'; if ( !freeFormat_ && eightChar_ && next == card_ + 14 ) { if ( eol_ - next >= 8 ) { if ( *( next + 8 ) != ' ' && *( next + 8 ) != '\0' ) { eightChar_ = false; } else { nextBlank = next + 8; } save = *nextBlank; *nextBlank = '\0'; } else { nextBlank = NULL; } } else { if ( nextBlank ) { save = *nextBlank; *nextBlank = '\0'; } } strcpyAndCompress ( rowName_, next ); if ( nextBlank ) { *nextBlank = save; // on to next next = nextBlank; } else { next = eol_; } while ( next != eol_ ) { if ( *next == ' ' || *next == '\t' ) { next++; } else { break; } } if ( next == eol_ ) { // error position_ = eol_; value_ = -1.0e100; mpsType_ = COIN_UNKNOWN_MPS_TYPE; } else { nextBlank = nextBlankOr ( next ); value_ = -1.0e100; if ( nextBlank ) { save = *nextBlank; *nextBlank = '\0'; } char * after; value_ = osi_strtod(next,&after,ieeeFormat_); // see if error if (after>next) { if ( nextBlank ) { *nextBlank = save; position_ = nextBlank; } else { position_ = eol_; } } else { // error position_ = eol_; mpsType_ = COIN_UNKNOWN_MPS_TYPE; value_ = -1.0e100; } } } } else { // blank continue; } return section_; } else if ( card_[0] != '*' ) { // not a comment int i; handler_->message(COIN_MPS_LINE,messages_)< (i); return section_; } else { // comment } } // we only get here for second field (we could even allow more???) { char save = '?'; char *nextBlank = nextBlankOr ( next ); if ( !freeFormat_ && eightChar_ && next == card_ + 39 ) { if ( eol_ - next >= 8 ) { if ( *( next + 8 ) != ' ' && *( next + 8 ) != '\0' ) { eightChar_ = false; } else { nextBlank = next + 8; } save = *nextBlank; *nextBlank = '\0'; } else { nextBlank = NULL; } } else { if ( nextBlank ) { save = *nextBlank; *nextBlank = '\0'; } } strcpyAndCompress ( rowName_, next ); // on to next if ( nextBlank ) { *nextBlank = save; next = nextBlank; } else { next = eol_; } while ( next != eol_ ) { if ( *next == ' ' || *next == '\t' ) { next++; } else { break; } } if ( next == eol_ && section_ != COIN_SOS_SECTION) { // error position_ = eol_; mpsType_ = COIN_UNKNOWN_MPS_TYPE; } else { nextBlank = nextBlankOr ( next ); } if ( nextBlank ) { save = *nextBlank; *nextBlank = '\0'; } //value_ = -1.0e100; char * after; value_ = osi_strtod(next,&after,ieeeFormat_); // see if error if (after>next) { if ( nextBlank ) { *nextBlank = save; position_ = nextBlank; } else { position_ = eol_; } } else { // error position_ = eol_; if (mpsType_!=COIN_S1_BOUND&&mpsType_!=COIN_S2_BOUND) mpsType_ = COIN_UNKNOWN_MPS_TYPE; value_ = -1.0e100; } } return section_; } static char * nextNonBlank ( char *image ) { while ( 1 ) { if ( *image != ' ' && *image != '\t' ) break; else image++; } if ( *image == '\0' ) image=NULL; return image; } /** Gets next field for .gms file and returns type. -1 - EOF 0 - what we expected (and processed so pointer moves past) 1 - not what we expected 2 - equation type when expecting value name pair leading blanks always ignored input types 0 - anything - stops on non blank card 1 - name (in columnname) 2 - value 3 - value name pair 4 - equation type 5 - ; */ int CoinMpsCardReader::nextGmsField ( int expectedType ) { int returnCode=-1; bool good=false; switch(expectedType) { case 0: // 0 - May get * in first column or anything if ( cleanCard()) return -1; while(!strlen(card_)) { if ( cleanCard()) return -1; } eol_ = card_+strlen(card_); position_=card_; returnCode=0; break; case 1: // 1 - expect name while (!good) { position_ = nextNonBlank(position_); if (position_==NULL) { if ( cleanCard()) return -1; eol_ = card_+strlen(card_); position_=card_; } else { good=true; char nextChar =*position_; if ((nextChar>='a'&&nextChar<='z')|| (nextChar>='A'&&nextChar<='Z')) { returnCode=0; char * next=position_; while (*next!=','&&*next!=';'&&*next!='='&&*next!=' ' &&*next!='\t'&&*next!='-'&&*next!='+'&&*next>=32) next++; if (next) { int length = static_cast(next-position_); strncpy(columnName_,position_,length); columnName_[length]='\0'; } else { strcpy(columnName_,position_); next=eol_; } position_=next; } else { returnCode=1; } } } break; case 2: // 2 - expect value while (!good) { position_ = nextNonBlank(position_); if (position_==NULL) { if ( cleanCard()) return -1; eol_ = card_+strlen(card_); position_=card_; } else { good=true; char nextChar =*position_; if ((nextChar>='0'&&nextChar<='9')||nextChar=='+'||nextChar=='-') { returnCode=0; char * next=position_; while (*next!=','&&*next!=';'&&*next!='='&&*next!=' ' &&*next!='\t'&&*next>=32) next++; if (next) { int length = static_cast(next-position_); strncpy(rowName_,position_,length); rowName_[length]='\0'; } else { strcpy(rowName_,position_); next=eol_; } value_=-1.0e100; sscanf(rowName_,"%lg",&value_); position_=next; } else { returnCode=1; } } } break; case 3: // 3 - expect value name pair while (!good) { position_ = nextNonBlank(position_); char * savePosition = position_; if (position_==NULL) { if ( cleanCard()) return -1; eol_ = card_+strlen(card_); position_=card_; savePosition = position_; } else { good=true; value_=1.0; char nextChar =*position_; returnCode=0; if ((nextChar>='0'&&nextChar<='9')||nextChar=='+'||nextChar=='-') { char * next; int put=0; if (nextChar=='+'||nextChar=='-') { rowName_[0]=nextChar; put=1; next=position_+1; while (*next==' '||*next=='\t') next++; if ((*next>='a'&&*next<='z')|| (*next>='A'&&*next<='Z')) { // name - set value if (nextChar=='+') value_=1.0; else value_=-1.0; position_=next; } else if ((*next>='0'&&*next<='9')||*next=='+'||*next=='-') { rowName_[put++]=*next; next++; while (*next!=' '&&*next!='\t'&&*next!='*') { rowName_[put++]=*next; next++; } assert (*next=='*'); next ++; rowName_[put]='\0'; value_=-1.0e100; sscanf(rowName_,"%lg",&value_); position_=next; } else { returnCode=1; } } else { // number char * next = nextBlankOr(position_); // but could be * char * next2 = strchr(position_,'*'); if (next2&&next2-position_(next-position_); strncpy(rowName_,position_,length); rowName_[length]='\0'; value_=-1.0e100; sscanf(rowName_,"%lg",&value_); position_=next; } } else if ((nextChar>='a'&&nextChar<='z')|| (nextChar>='A'&&nextChar<='Z')) { // name so take value as 1.0 } else if (nextChar=='=') { returnCode=2; position_=savePosition; } else { returnCode=1; position_=savePosition; } if ((*position_)=='*') position_++; position_= nextNonBlank(position_); if (!returnCode) { char nextChar =*position_; if ((nextChar>='a'&&nextChar<='z')|| (nextChar>='A'&&nextChar<='Z')) { char * next = nextBlankOr(position_); if (next) { int length = static_cast(next-position_); strncpy(columnName_,position_,length); columnName_[length]='\0'; } else { strcpy(columnName_,position_); next=eol_; } position_=next; } else { returnCode=1; position_=savePosition; } } } } break; case 4: // 4 - expect equation type while (!good) { position_ = nextNonBlank(position_); if (position_==NULL) { if ( cleanCard()) return -1; eol_ = card_+strlen(card_); position_=card_; } else { good=true; char nextChar =*position_; if (nextChar=='=') { returnCode=0; char * next = nextBlankOr(position_); int length = static_cast(next-position_); strncpy(rowName_,position_,length); rowName_[length]='\0'; position_=next; } else { returnCode=1; } } } break; case 5: // 5 - ; expected while (!good) { position_ = nextNonBlank(position_); if (position_==NULL) { if ( cleanCard()) return -1; eol_ = card_+strlen(card_); position_=card_; } else { good=true; char nextChar =*position_; if (nextChar==';') { returnCode=0; char * next = nextBlankOr(position_); if (!next) next=eol_; position_=next; } else { returnCode=1; } } } break; } return returnCode; } //############################################################################# namespace { const int mmult[] = { 262139, 259459, 256889, 254291, 251701, 249133, 246709, 244247, 241667, 239179, 236609, 233983, 231289, 228859, 226357, 223829, 221281, 218849, 216319, 213721, 211093, 208673, 206263, 203773, 201233, 198637, 196159, 193603, 191161, 188701, 186149, 183761, 181303, 178873, 176389, 173897, 171469, 169049, 166471, 163871, 161387, 158941, 156437, 153949, 151531, 149159, 146749, 144299, 141709, 139369, 136889, 134591, 132169, 129641, 127343, 124853, 122477, 120163, 117757, 115361, 112979, 110567, 108179, 105727, 103387, 101021, 98639, 96179, 93911, 91583, 89317, 86939, 84521, 82183, 79939, 77587, 75307, 72959, 70793, 68447, 66103 }; int hash ( const char *name, int maxsiz, int length ) { int n = 0; int j; for ( j = 0; j < length; ++j ) { int iname = name[j]; n += mmult[j] * iname; } return ( abs ( n ) % maxsiz ); /* integer abs */ } } // end file-local namespace // Define below if you are reading a Cnnnnnn file // Will not do row names (for electricfence) //#define NONAMES #ifndef NONAMES // startHash. Creates hash list for names void CoinMpsIO::startHash ( char **names, const COINColumnIndex number , int section ) { names_[section] = names; numberHash_[section] = number; startHash(section); } void CoinMpsIO::startHash ( int section ) const { char ** names = names_[section]; COINColumnIndex number = numberHash_[section]; COINColumnIndex i; COINColumnIndex maxhash = 4 * number; COINColumnIndex ipos, iput; //hash_=(CoinHashLink *) malloc(maxhash*sizeof(CoinHashLink)); hash_[section] = new CoinHashLink[maxhash]; CoinHashLink * hashThis = hash_[section]; for ( i = 0; i < maxhash; i++ ) { hashThis[i].index = -1; hashThis[i].next = -1; } /* * Initialize the hash table. Only the index of the first name that * hashes to a value is entered in the table; subsequent names that * collide with it are not entered. */ for ( i = 0; i < number; ++i ) { char *thisName = names[i]; int length = static_cast(strlen(thisName)); ipos = hash ( thisName, maxhash, length ); if ( hashThis[ipos].index == -1 ) { hashThis[ipos].index = i; } } /* * Now take care of the names that collided in the preceding loop, * by finding some other entry in the table for them. * Since there are as many entries in the table as there are names, * there must be room for them. */ iput = -1; for ( i = 0; i < number; ++i ) { char *thisName = names[i]; int length = static_cast(strlen(thisName)); ipos = hash ( thisName, maxhash, length ); while ( 1 ) { COINColumnIndex j1 = hashThis[ipos].index; if ( j1 == i ) break; else { char *thisName2 = names[j1]; if ( strcmp ( thisName, thisName2 ) == 0 ) { printf ( "** duplicate name %s\n", names[i] ); break; } else { COINColumnIndex k = hashThis[ipos].next; if ( k == -1 ) { while ( 1 ) { ++iput; if ( iput > number ) { printf ( "** too many names\n" ); break; } if ( hashThis[iput].index == -1 ) { break; } } hashThis[ipos].next = iput; hashThis[iput].index = i; break; } else { ipos = k; /* nothing worked - try it again */ } } } } } } // stopHash. Deletes hash storage void CoinMpsIO::stopHash ( int section ) { delete [] hash_[section]; hash_[section] = NULL; } // findHash. -1 not found COINColumnIndex CoinMpsIO::findHash ( const char *name , int section ) const { COINColumnIndex found = -1; char ** names = names_[section]; CoinHashLink * hashThis = hash_[section]; COINColumnIndex maxhash = 4 * numberHash_[section]; COINColumnIndex ipos; /* default if we don't find anything */ if ( !maxhash ) return -1; int length = static_cast(strlen(name)); ipos = hash ( name, maxhash, length ); while ( 1 ) { COINColumnIndex j1 = hashThis[ipos].index; if ( j1 >= 0 ) { char *thisName2 = names[j1]; if ( strcmp ( name, thisName2 ) != 0 ) { COINColumnIndex k = hashThis[ipos].next; if ( k != -1 ) ipos = k; else break; } else { found = j1; break; } } else { found = -1; break; } } return found; } #else // Version when we know images are C/Rnnnnnn // startHash. Creates hash list for names void CoinMpsIO::startHash ( char **names, const COINColumnIndex number , int section ) { numberHash_[section] = number; names_[section] = names; } void CoinMpsIO::startHash ( int section ) const { } // stopHash. Deletes hash storage void CoinMpsIO::stopHash ( int section ) { } // findHash. -1 not found COINColumnIndex CoinMpsIO::findHash ( const char *name , int section ) const { COINColumnIndex found = atoi(name+1); if (!strcmp(name,"OBJROW")) found = numberHash_[section]-1; return found; } #endif //------------------------------------------------------------------ // Get value for infinity //------------------------------------------------------------------ double CoinMpsIO::getInfinity() const { return infinity_; } //------------------------------------------------------------------ // Set value for infinity //------------------------------------------------------------------ void CoinMpsIO::setInfinity(double value) { if ( value >= 1.020 ) { infinity_ = value; } else { handler_->message(COIN_MPS_ILLEGAL,messages_)<<"infinity" <message(COIN_MPS_FILE,messages_)<<"NULL" <(strlen(filename))-1; strcpy(newName,filename); bool foundDot=false; for (;i>=0;i--) { char character = filename[i]; if (character=='/'||character=='\\') { break; } else if (character=='.') { foundDot=true; break; } } if (!foundDot) { strcat(newName,"."); strcat(newName,extension); } } else { // no extension strcpy(newName,filename); } } else { strcpy(newName,"stdin"); } // See if new name if (fileName_&&!strcmp(newName,fileName_)) { // old name return 0; } else { // new file free(fileName_); fileName_=CoinStrdup(newName); if (strcmp(fileName_,"stdin")) { // be clever with extensions here std::string fname = fileName_; bool readable = fileCoinReadable(fname); if (!readable) goodFile = -1; else { input = CoinFileInput::create (fname); goodFile = 1; } } else { // only plain file at present input = CoinFileInput::create ("stdin"); goodFile = 1; } } } else { // same as before // reset section ? goodFile=0; } if (goodFile<0) handler_->message(COIN_MPS_FILE,messages_)<= 1 && value <=MAX_INTEGER ) { defaultBound_ = value; } else { handler_->message(COIN_MPS_ILLEGAL,messages_)<<"default integer bound" <0) { delete cardReader_; cardReader_ = new CoinMpsCardReader ( input, this); } if (!extension||(strcmp(extension,"gms")&&!strstr(filename,".gms"))) { return readMps(); } else { int numberSets=0; CoinSet ** sets=NULL; int returnCode = readGms(numberSets,sets); for (int i=0;i0) { delete cardReader_; cardReader_ = new CoinMpsCardReader ( input, this); } return readMps(numberSets,sets); } int CoinMpsIO::readMps() { int numberSets=0; CoinSet ** sets=NULL; int returnCode = readMps(numberSets,sets); for (int i=0;ireadToNextSection(); if ( cardReader_->whichSection ( ) == COIN_NAME_SECTION ) { ifmps = true; // save name of section free(problemName_); problemName_=CoinStrdup(cardReader_->columnName()); } else if ( cardReader_->whichSection ( ) == COIN_UNKNOWN_SECTION ) { handler_->message(COIN_MPS_BADFILE1,messages_)<card() <<1 <fileInput()->getReadType()!="plain") handler_->message(COIN_MPS_BADFILE2,messages_) <fileInput()->getReadType() <whichSection ( ) != COIN_EOF_SECTION ) { // save name of section free(problemName_); problemName_=CoinStrdup(cardReader_->card()); ifmps = false; } else { handler_->message(COIN_MPS_EOF,messages_)<setStringsAllowed(); //get ROWS cardReader_->nextField ( ) ; // Fudge for what ever code has OBJSENSE if (!strncmp(cardReader_->card(),"OBJSENSE",8)) { cardReader_->nextField(); int i; const char * thisCard = cardReader_->card(); int direction = 0; for (i=0;i<20;i++) { if (thisCard[i]!=' ') { if (!strncmp(thisCard+i,"MAX",3)) direction=-1; else if (!strncmp(thisCard+i,"MIN",3)) direction=1; break; } } if (!direction) printf("No MAX/MIN found after OBJSENSE\n"); else printf("%s found after OBJSENSE - Coin ignores\n", (direction>0 ? "MIN" : "MAX")); cardReader_->nextField(); } if ( cardReader_->whichSection ( ) != COIN_ROW_SECTION ) { handler_->message(COIN_MPS_BADIMAGE,messages_)<cardNumber() <card() <message(COIN_MPS_RETURNING,messages_)< (malloc ( maxRows * sizeof ( COINMpsType ))); char **rowName = reinterpret_cast (malloc ( maxRows * sizeof ( char * ))); // for discarded free rows COINRowIndex maxFreeRows = 100; COINRowIndex numberOtherFreeRows = 0; char **freeRowName = reinterpret_cast (malloc ( maxFreeRows * sizeof ( char * ))); while ( cardReader_->nextField ( ) == COIN_ROW_SECTION ) { switch ( cardReader_->mpsType ( ) ) { case COIN_N_ROW: if ( !gotNrow ) { gotNrow = true; // save name of section free(objectiveName_); objectiveName_=CoinStrdup(cardReader_->columnName()); } else { // add to discard list if ( numberOtherFreeRows == maxFreeRows ) { maxFreeRows = ( 3 * maxFreeRows ) / 2 + 100; freeRowName = reinterpret_cast (realloc ( freeRowName, maxFreeRows * sizeof ( char * ))); } freeRowName[numberOtherFreeRows] = CoinStrdup ( cardReader_->columnName ( ) ); numberOtherFreeRows++; } break; case COIN_E_ROW: case COIN_L_ROW: case COIN_G_ROW: if ( numberRows_ == maxRows ) { maxRows = ( 3 * maxRows ) / 2 + 1000; rowType = reinterpret_cast (realloc ( rowType, maxRows * sizeof ( COINMpsType ))); rowName = reinterpret_cast (realloc ( rowName, maxRows * sizeof ( char * ))); } rowType[numberRows_] = cardReader_->mpsType ( ); #ifndef NONAMES rowName[numberRows_] = CoinStrdup ( cardReader_->columnName ( ) ); #endif numberRows_++; break; default: numberErrors++; if ( numberErrors < 100 ) { handler_->message(COIN_MPS_BADIMAGE,messages_)<cardNumber() <card() < 100000) { handler_->message(COIN_MPS_RETURNING,messages_)<whichSection ( ) != COIN_COLUMN_SECTION ) { handler_->message(COIN_MPS_BADIMAGE,messages_)<cardNumber() <card() <message(COIN_MPS_RETURNING,messages_)< (realloc ( rowType, numberRows_ * sizeof ( COINMpsType ))); else rowType = reinterpret_cast (realloc ( rowType,sizeof ( COINMpsType ))); // put objective and other free rows at end rowName = reinterpret_cast (realloc ( rowName, ( numberRows_ + 1 + numberOtherFreeRows ) * sizeof ( char * ))); #ifndef NONAMES rowName[numberRows_] = CoinStrdup(objectiveName_); memcpy ( rowName + numberRows_ + 1, freeRowName, numberOtherFreeRows * sizeof ( char * ) ); // now we can get rid of this array free(freeRowName); #else memset(rowName,0,(numberRows_+1)*sizeof(char **)); #endif startHash ( rowName, numberRows_ + 1 + numberOtherFreeRows , 0 ); COINColumnIndex maxColumns = 1000 + numberRows_ / 5; CoinBigIndex maxElements = 5000 + numberRows_ / 2; COINMpsType *columnType = reinterpret_cast (malloc ( maxColumns * sizeof ( COINMpsType ))); char **columnName = reinterpret_cast (malloc ( maxColumns * sizeof ( char * ))); objective_ = reinterpret_cast (malloc ( maxColumns * sizeof ( double ))); start = reinterpret_cast (malloc ( ( maxColumns + 1 ) * sizeof ( CoinBigIndex ))); row = reinterpret_cast (malloc ( maxElements * sizeof ( COINRowIndex ))); element = reinterpret_cast (malloc ( maxElements * sizeof ( double ))); // for duplicates CoinBigIndex *rowUsed = new CoinBigIndex[numberRows_]; for (i=0;inextField ( ) == COIN_COLUMN_SECTION ) { switch ( cardReader_->mpsType ( ) ) { case COIN_BLANK_COLUMN: if ( strcmp ( lastColumn, cardReader_->columnName ( ) ) ) { // new column // reset old column and take out tiny if ( numberColumns_ ) { objUsed = false; CoinBigIndex i; CoinBigIndex k = start[column]; for ( i = k; i < numberElements_; i++ ) { COINRowIndex irow = row[i]; #if 0 if ( fabs ( element[i] ) > smallElement_ ) { element[k++] = element[i]; } #endif rowUsed[irow] = -1; } //numberElements_ = k; } column = numberColumns_; if ( numberColumns_ == maxColumns ) { maxColumns = ( 3 * maxColumns ) / 2 + 1000; columnType = reinterpret_cast (realloc ( columnType, maxColumns * sizeof ( COINMpsType ))); columnName = reinterpret_cast (realloc ( columnName, maxColumns * sizeof ( char * ))); objective_ = reinterpret_cast (realloc ( objective_, maxColumns * sizeof ( double ))); start = reinterpret_cast (realloc ( start, ( maxColumns + 1 ) * sizeof ( CoinBigIndex ))); } if ( !inIntegerSet ) { columnType[column] = COIN_UNSET_BOUND; } else { columnType[column] = COIN_INTORG; numberIntegers++; } #ifndef NONAMES columnName[column] = CoinStrdup ( cardReader_->columnName ( ) ); #else columnName[column]=NULL; #endif strcpy ( lastColumn, cardReader_->columnName ( ) ); objective_[column] = 0.0; start[column] = numberElements_; numberColumns_++; } if ( fabs ( cardReader_->value ( ) ) > smallElement_ ) { if ( numberElements_ == maxElements ) { maxElements = ( 3 * maxElements ) / 2 + 1000; row = reinterpret_cast (realloc ( row, maxElements * sizeof ( COINRowIndex ))); element = reinterpret_cast (realloc ( element, maxElements * sizeof ( double ))); } // get row number COINRowIndex irow = findHash ( cardReader_->rowName ( ) , 0 ); if ( irow >= 0 ) { double value = cardReader_->value ( ); // check for duplicates if ( irow == numberRows_ ) { // objective if ( objUsed ) { numberErrors++; if ( numberErrors < 100 ) { handler_->message(COIN_MPS_DUPOBJ,messages_) <cardNumber()<card() < 100000) { handler_->message(COIN_MPS_RETURNING,messages_) <= 0 ) { element[rowUsed[irow]] += value; numberErrors++; if ( numberErrors < 100 ) { handler_->message(COIN_MPS_DUPROW,messages_) <rowName()<cardNumber() <card() < 100000) { handler_->message(COIN_MPS_RETURNING,messages_) <message(COIN_MPS_NOMATCHROW,messages_) <rowName()<cardNumber()<card() < 100000) { handler_->message(COIN_MPS_RETURNING,messages_)<value () == STRING_VALUE ) { // tiny element - string const char * s = cardReader_->valueString(); assert (*s=='='); // get row number COINRowIndex irow = findHash ( cardReader_->rowName ( ) , 0 ); if ( irow >= 0 ) { addString(irow,column,s+1); } else { numberErrors++; if ( numberErrors < 100 ) { handler_->message(COIN_MPS_NOMATCHROW,messages_) <rowName()<cardNumber()<card() < 100000) { handler_->message(COIN_MPS_RETURNING,messages_)<message(COIN_MPS_BADIMAGE,messages_)<cardNumber() <card() < 100000) { handler_->message(COIN_MPS_RETURNING,messages_)<whichSection ( ) != COIN_RHS_SECTION ) { handler_->message(COIN_MPS_BADIMAGE,messages_)<cardNumber() <card() <message(COIN_MPS_RETURNING,messages_)< (realloc ( columnType, numberColumns_ * sizeof ( COINMpsType ))); columnName = reinterpret_cast (realloc ( columnName, numberColumns_ * sizeof ( char * ))); objective_ = reinterpret_cast (realloc ( objective_, numberColumns_ * sizeof ( double ))); } else { columnType = reinterpret_cast (realloc ( columnType, sizeof ( COINMpsType ))); columnName = reinterpret_cast (realloc ( columnName, sizeof ( char * ))); objective_ = reinterpret_cast (realloc ( objective_, sizeof ( double ))); } start = reinterpret_cast (realloc ( start, ( numberColumns_ + 1 ) * sizeof ( CoinBigIndex ))); if (numberElements_) { row = reinterpret_cast (realloc ( row, numberElements_ * sizeof ( COINRowIndex ))); element = reinterpret_cast (realloc ( element, numberElements_ * sizeof ( double ))); } else { row = reinterpret_cast (realloc ( row, sizeof ( COINRowIndex ))); element = reinterpret_cast (realloc ( element, sizeof ( double ))); } if (numberRows_) { rowlower_ = reinterpret_cast (malloc ( numberRows_ * sizeof ( double ))); rowupper_ = reinterpret_cast (malloc ( numberRows_ * sizeof ( double ))); } else { rowlower_ = reinterpret_cast (malloc ( sizeof ( double ))); rowupper_ = reinterpret_cast (malloc ( sizeof ( double ))); } for (i=0;inextField ( ) == COIN_RHS_SECTION ) { COINRowIndex irow; switch ( cardReader_->mpsType ( ) ) { case COIN_BLANK_COLUMN: if ( strcmp ( lastColumn, cardReader_->columnName ( ) ) ) { // skip rest if got a rhs if ( gotRhs ) { while ( cardReader_->nextField ( ) == COIN_RHS_SECTION ) { } break; } else { gotRhs = true; strcpy ( lastColumn, cardReader_->columnName ( ) ); // save name of section free(rhsName_); rhsName_=CoinStrdup(cardReader_->columnName()); } } // get row number irow = findHash ( cardReader_->rowName ( ) , 0 ); if ( irow >= 0 ) { double value = cardReader_->value ( ); // check for duplicates if ( irow == numberRows_ ) { // objective if ( objUsed ) { numberErrors++; if ( numberErrors < 100 ) { handler_->message(COIN_MPS_DUPOBJ,messages_) <cardNumber()<card() < 100000) { handler_->message(COIN_MPS_RETURNING,messages_)<valueString(); assert (*s=='='); addString(irow,numberColumns_,s+1); } objectiveOffset_ += value; } else if ( irow < numberRows_ ) { if ( rowlower_[irow] != -infinity_ ) { numberErrors++; if ( numberErrors < 100 ) { handler_->message(COIN_MPS_DUPROW,messages_) <rowName()<cardNumber()<card() < 100000) { handler_->message(COIN_MPS_RETURNING,messages_)<valueString(); assert (*s=='='); addString(irow,numberColumns_,s+1); } rowlower_[irow] = value; } } } else { numberErrors++; if ( numberErrors < 100 ) { handler_->message(COIN_MPS_NOMATCHROW,messages_) <rowName()<cardNumber()<card() < 100000) { handler_->message(COIN_MPS_RETURNING,messages_)<message(COIN_MPS_BADIMAGE,messages_)<cardNumber() <card() < 100000) { handler_->message(COIN_MPS_RETURNING,messages_)<whichSection ( ) == COIN_RANGES_SECTION ) { memset ( lastColumn, '\0', 200 ); bool gotRange = false; COINRowIndex irow; // need coding for blank range while ( cardReader_->nextField ( ) == COIN_RANGES_SECTION ) { switch ( cardReader_->mpsType ( ) ) { case COIN_BLANK_COLUMN: if ( strcmp ( lastColumn, cardReader_->columnName ( ) ) ) { // skip rest if got a range if ( gotRange ) { while ( cardReader_->nextField ( ) == COIN_RANGES_SECTION ) { } break; } else { gotRange = true; strcpy ( lastColumn, cardReader_->columnName ( ) ); // save name of section free(rangeName_); rangeName_=CoinStrdup(cardReader_->columnName()); } } // get row number irow = findHash ( cardReader_->rowName ( ) , 0 ); if ( irow >= 0 ) { double value = cardReader_->value ( ); // check for duplicates if ( irow == numberRows_ ) { // objective numberErrors++; if ( numberErrors < 100 ) { handler_->message(COIN_MPS_DUPOBJ,messages_) <cardNumber()<card() < 100000) { handler_->message(COIN_MPS_RETURNING,messages_)<message(COIN_MPS_DUPROW,messages_) <rowName()<cardNumber()<card() < 100000) { handler_->message(COIN_MPS_RETURNING,messages_) <message(COIN_MPS_NOMATCHROW,messages_) <rowName()<cardNumber()<card() < 100000) { handler_->message(COIN_MPS_RETURNING,messages_)<message(COIN_MPS_BADIMAGE,messages_)<cardNumber() <card() < 100000) { handler_->message(COIN_MPS_RETURNING,messages_)< 0.0 ) { up += lo; } else { up = lo; lo += up2; } break; case COIN_L_ROW: if ( lo == -infinity_ ) { up = 0.0; } else { up = lo; lo = -infinity_; } if ( up2 != infinity_ ) { lo = up - fabs ( up2 ); } break; case COIN_G_ROW: if ( lo == -infinity_ ) { lo = 0.0; up = infinity_; } else { up = infinity_; } if ( up2 != infinity_ ) { up = lo + fabs ( up2 ); } break; default: abort(); } rowlower_[irow] = lo; rowupper_[irow] = up; } } free ( rowType ); // default bounds if (numberColumns_) { collower_ = reinterpret_cast (malloc ( numberColumns_ * sizeof ( double ))); colupper_ = reinterpret_cast (malloc ( numberColumns_ * sizeof ( double ))); } else { collower_ = reinterpret_cast (malloc ( sizeof ( double ))); colupper_ = reinterpret_cast (malloc ( sizeof ( double ))); } for (i=0;i (malloc (numberColumns_*sizeof(char))); else integerType_ = reinterpret_cast (malloc (sizeof(char))); for ( column = 0; column < numberColumns_; column++ ) { if ( columnType[column] == COIN_INTORG ) { columnType[column] = COIN_UNSET_BOUND; integerType_[column] = 1; } else { integerType_[column] = 0; } } // start hash even if no bound section - to make sure names survive startHash ( columnName, numberColumns_ , 1 ); if ( cardReader_->whichSection ( ) == COIN_BOUNDS_SECTION ) { memset ( lastColumn, '\0', 200 ); bool gotBound = false; while ( cardReader_->nextField ( ) == COIN_BOUNDS_SECTION ) { if ( strcmp ( lastColumn, cardReader_->columnName ( ) ) ) { // skip rest if got a bound if ( gotBound ) { while ( cardReader_->nextField ( ) == COIN_BOUNDS_SECTION ) { } break; } else { gotBound = true;; strcpy ( lastColumn, cardReader_->columnName ( ) ); // save name of section free(boundName_); boundName_=CoinStrdup(cardReader_->columnName()); } } // get column number COINColumnIndex icolumn = findHash ( cardReader_->rowName ( ) , 1 ); if ( icolumn >= 0 ) { double value = cardReader_->value ( ); bool ifError = false; switch ( cardReader_->mpsType ( ) ) { case COIN_UP_BOUND: if ( value == -1.0e100 ) ifError = true; if (value==STRING_VALUE) { value=1.0e10; // tiny element - string const char * s = cardReader_->valueString(); assert (*s=='='); addString(numberRows_+2,icolumn,s+1); } if ( columnType[icolumn] == COIN_UNSET_BOUND ) { if ( value < 0.0 ) { collower_[icolumn] = -infinity_; } } else if ( columnType[icolumn] == COIN_LO_BOUND || columnType[icolumn] == COIN_LI_BOUND) { if ( value < collower_[icolumn] ) { ifError = true; } else if ( value < collower_[icolumn] + smallElement_ ) { value = collower_[icolumn]; } } else if ( columnType[icolumn] == COIN_MI_BOUND ) { } else { ifError = true; } if (value>1.0e25) value=infinity_; colupper_[icolumn] = value; if ( columnType[icolumn] == COIN_UNSET_BOUND ) { columnType[icolumn] = COIN_UP_BOUND; } else { columnType[icolumn] = COIN_BOTH_BOUNDS_SET; } break; case COIN_LO_BOUND: if ( value == -1.0e100 ) ifError = true; if (value==STRING_VALUE) { value=-1.0e10; // tiny element - string const char * s = cardReader_->valueString(); assert (*s=='='); addString(numberRows_+1,icolumn,s+1); } if ( columnType[icolumn] == COIN_UNSET_BOUND ) { } else if ( columnType[icolumn] == COIN_UP_BOUND || columnType[icolumn] == COIN_UI_BOUND ) { if ( value > colupper_[icolumn] ) { ifError = true; } else if ( value > colupper_[icolumn] - smallElement_ ) { value = colupper_[icolumn]; } } else if ( columnType[icolumn] == COIN_PL_BOUND ) { } else { ifError = true; } if (value<-1.0e25) value=-infinity_; collower_[icolumn] = value; if ( columnType[icolumn] == COIN_UNSET_BOUND ) { columnType[icolumn] = COIN_LO_BOUND; } else { columnType[icolumn] = COIN_BOTH_BOUNDS_SET; } break; case COIN_FX_BOUND: if ( value == -1.0e100 ) ifError = true; if (value==STRING_VALUE) { value=0.0; // tiny element - string const char * s = cardReader_->valueString(); assert (*s=='='); addString(numberRows_+1,icolumn,s+1); addString(numberRows_+2,icolumn,s+1); } if ( columnType[icolumn] == COIN_UNSET_BOUND ) { } else if (columnType[icolumn] == COIN_FX_BOUND ) { ifError=true; } else if (integerType_[icolumn] ) { // Allow so people can easily put FX's at end double value2 = floor(value); if (fabs(value2-value)>1.0e-12|| value2colupper_[icolumn]) { ifError=true; } else { // take off integer list numberIntegers--; integerType_[icolumn] = 0; } } else { ifError = true; } collower_[icolumn] = value; colupper_[icolumn] = value; columnType[icolumn] = COIN_FX_BOUND; break; case COIN_FR_BOUND: if ( columnType[icolumn] == COIN_UNSET_BOUND ) { } else { ifError = true; } collower_[icolumn] = -infinity_; colupper_[icolumn] = infinity_; columnType[icolumn] = COIN_FR_BOUND; break; case COIN_MI_BOUND: if ( columnType[icolumn] == COIN_UNSET_BOUND ) { colupper_[icolumn] = COIN_DBL_MAX; } else if ( columnType[icolumn] == COIN_UP_BOUND || columnType[icolumn] == COIN_UI_BOUND ) { } else { ifError = true; } collower_[icolumn] = -infinity_; if ( columnType[icolumn] == COIN_UNSET_BOUND ) { columnType[icolumn] = COIN_MI_BOUND; } else { columnType[icolumn] = COIN_BOTH_BOUNDS_SET; } break; case COIN_PL_BOUND: // change to allow if no upper bound set //if ( columnType[icolumn] == COIN_UNSET_BOUND ) { if (colupper_[icolumn]==infinity_) { } else { ifError = true; } if ( columnType[icolumn] == COIN_UNSET_BOUND ) { columnType[icolumn] = COIN_PL_BOUND; } else { columnType[icolumn] = COIN_BOTH_BOUNDS_SET; } break; case COIN_UI_BOUND: if (value==STRING_VALUE) { value=1.0e20; // tiny element - string const char * s = cardReader_->valueString(); assert (*s=='='); addString(numberRows_+2,icolumn,s+1); } #if 0 if ( value == -1.0e100 ) ifError = true; if ( columnType[icolumn] == COIN_UNSET_BOUND ) { } else if ( columnType[icolumn] == COIN_LO_BOUND || columnType[icolumn] == COIN_LI_BOUND) { if ( value < collower_[icolumn] ) { ifError = true; } else if ( value < collower_[icolumn] + smallElement_ ) { value = collower_[icolumn]; } } else if ( columnType[icolumn] == COIN_MI_BOUND ) { } else { ifError = true; } #else if ( value == -1.0e100 ) { value = infinity_; if (columnType[icolumn] != COIN_UNSET_BOUND && columnType[icolumn] != COIN_LO_BOUND && columnType[icolumn] != COIN_LI_BOUND && columnType[icolumn] != COIN_MI_BOUND) { ifError = true; } } else { if ( columnType[icolumn] == COIN_UNSET_BOUND ) { } else if ( columnType[icolumn] == COIN_LO_BOUND || columnType[icolumn] == COIN_LI_BOUND || columnType[icolumn] == COIN_MI_BOUND ) { if ( value < collower_[icolumn] ) { ifError = true; } else if ( value < collower_[icolumn] + smallElement_ ) { value = collower_[icolumn]; } } else { ifError = true; } } #endif if (value>1.0e25) value=infinity_; colupper_[icolumn] = value; if ( columnType[icolumn] == COIN_UNSET_BOUND ) { columnType[icolumn] = COIN_UI_BOUND; } else { columnType[icolumn] = COIN_BOTH_BOUNDS_SET; } if ( !integerType_[icolumn] ) { numberIntegers++; integerType_[icolumn] = 1; } break; case COIN_LI_BOUND: if ( value == -1.0e100 ) ifError = true; if (value==STRING_VALUE) { value=-1.0e20; // tiny element - string const char * s = cardReader_->valueString(); assert (*s=='='); addString(numberRows_+1,icolumn,s+1); } if ( columnType[icolumn] == COIN_UNSET_BOUND ) { } else if ( columnType[icolumn] == COIN_UP_BOUND || columnType[icolumn] == COIN_UI_BOUND ) { if ( value > colupper_[icolumn] ) { ifError = true; } else if ( value > colupper_[icolumn] - smallElement_ ) { value = colupper_[icolumn]; } } else if ( columnType[icolumn] == COIN_PL_BOUND ) { } else { ifError = true; } if (value<-1.0e25) value=-infinity_; collower_[icolumn] = value; if ( columnType[icolumn] == COIN_UNSET_BOUND ) { columnType[icolumn] = COIN_LI_BOUND; } else { columnType[icolumn] = COIN_BOTH_BOUNDS_SET; } if ( !integerType_[icolumn] ) { numberIntegers++; integerType_[icolumn] = 1; } break; case COIN_BV_BOUND: if ( columnType[icolumn] == COIN_UNSET_BOUND ) { } else { ifError = true; } collower_[icolumn] = 0.0; colupper_[icolumn] = 1.0; columnType[icolumn] = COIN_BV_BOUND; if ( !integerType_[icolumn] ) { numberIntegers++; integerType_[icolumn] = 1; } break; default: ifError = true; break; } if ( ifError ) { numberErrors++; if ( numberErrors < 100 ) { handler_->message(COIN_MPS_BADIMAGE,messages_) <cardNumber() <card() < 100000) { handler_->message(COIN_MPS_RETURNING,messages_)<message(COIN_MPS_NOMATCHCOL,messages_) <rowName()<cardNumber()<card() < 100000) { handler_->message(COIN_MPS_RETURNING,messages_)<whichSection ( ) == COIN_SOS_SECTION ) { // Go to free format cardReader_->setFreeFormat(true); int numberInSet=0; int iType=-1; int * which = new int[numberColumns_]; double * weights = new double[numberColumns_]; CoinSet ** setsA = new CoinSet * [numberColumns_]; while ( cardReader_->nextField ( ) == COIN_SOS_SECTION ) { if (cardReader_->mpsType()==COIN_S1_BOUND|| cardReader_->mpsType()==COIN_S2_BOUND) { if (numberInSet) { CoinSosSet * newSet = new CoinSosSet(numberInSet,which,weights,iType); setsA[numberSets++]=newSet; } numberInSet=0; iType = cardReader_->mpsType()== COIN_S1_BOUND ? 1 : 2; // skip continue; } // get column number COINColumnIndex icolumn = findHash ( cardReader_->columnName ( ) , 1 ); if ( icolumn >= 0 ) { //integerType_[icolumn]=2; double value = cardReader_->value ( ); if (value==-1.0e100) value = atof(cardReader_->rowName()); // try from row name which[numberInSet]=icolumn; weights[numberInSet++]=value; } else { numberErrors++; if ( numberErrors < 100 ) { handler_->message(COIN_MPS_NOMATCHCOL,messages_) <columnName()<cardNumber()<card() < 100000) { handler_->message(COIN_MPS_RETURNING,messages_)< MAX_INTEGER ) colupper_[icolumn] = MAX_INTEGER; // clean up to allow for bad reads on 1.0e2 etc if (colupper_[icolumn]<1.0e10) { double value = colupper_[icolumn]; double value2 = floor(value+0.5); if (value!=value2) { if (fabs(value-value2)<1.0e-5) colupper_[icolumn]=value2; } } if (collower_[icolumn]>-1.0e10) { double value = collower_[icolumn]; double value2 = floor(value+0.5); if (value!=value2) { if (fabs(value-value2)<1.0e-5) collower_[icolumn]=value2; } } } } } free ( columnType ); if ( cardReader_->whichSection ( ) != COIN_ENDATA_SECTION && cardReader_->whichSection ( ) != COIN_QUAD_SECTION && cardReader_->whichSection ( ) != COIN_CONIC_SECTION ) { handler_->message(COIN_MPS_BADIMAGE,messages_)<cardNumber() <card() <message(COIN_MPS_RETURNING,messages_)<filePointer(); fscanf ( fp, "%d %d %d\n", &numberRows_, &numberColumns_, &i); */ // new: char buffer[1000]; cardReader_->fileInput ()->gets (buffer, 1000); sscanf (buffer, "%d %d %d\n", &numberRows_, &numberColumns_, &i); numberElements_ = i; // done this way in case numberElements_ long rowlower_ = reinterpret_cast (malloc ( numberRows_ * sizeof ( double ))); rowupper_ = reinterpret_cast (malloc ( numberRows_ * sizeof ( double ))); for ( i = 0; i < numberRows_; i++ ) { int j; // old: fscanf ( fp, "%d %lg %lg\n", &j, &rowlower_[i], &rowupper_[i] ); // new: cardReader_->fileInput ()->gets (buffer, 1000); sscanf (buffer, "%d %lg %lg\n", &j, &rowlower_[i], &rowupper_[i] ); assert ( i == j ); } collower_ = reinterpret_cast (malloc ( numberColumns_ * sizeof ( double ))); colupper_ = reinterpret_cast (malloc ( numberColumns_ * sizeof ( double ))); objective_= reinterpret_cast (malloc ( numberColumns_ * sizeof ( double ))); start = reinterpret_cast (malloc ((numberColumns_ + 1) * sizeof (CoinBigIndex))); row = reinterpret_cast (malloc (numberElements_ * sizeof (COINRowIndex))); element = reinterpret_cast (malloc (numberElements_ * sizeof (double))); start[0] = 0; numberElements_ = 0; for ( i = 0; i < numberColumns_; i++ ) { int j; int n; /* old: fscanf ( fp, "%d %d %lg %lg %lg\n", &j, &n, &collower_[i], &colupper_[i], &objective_[i] ); */ // new: cardReader_->fileInput ()->gets (buffer, 1000); sscanf (buffer, "%d %d %lg %lg %lg\n", &j, &n, &collower_[i], &colupper_[i], &objective_[i] ); assert ( i == j ); for ( j = 0; j < n; j++ ) { /* old: fscanf ( fp, " %d %lg\n", &row[numberElements_], &element[numberElements_] ); */ // new: cardReader_->fileInput ()->gets (buffer, 1000); sscanf (buffer, " %d %lg\n", &row[numberElements_], &element[numberElements_] ); numberElements_++; } start[i + 1] = numberElements_; } } // construct packed matrix matrixByColumn_ = new CoinPackedMatrix(true, numberRows_,numberColumns_,numberElements_, element,row,start,NULL); free ( row ); free ( start ); free ( element ); handler_->message(COIN_MPS_STATS,messages_)< (malloc ( numberRows_ * sizeof ( double ))); rowupper_ = reinterpret_cast (malloc ( numberRows_ * sizeof ( double ))); // and objective objective_ = reinterpret_cast (malloc ( numberColumns_ * sizeof ( double ))); problemName_= CoinStrdup(glp_get_prob_name(cbc_glp_prob)); int kRow=0; start[0]=0; numberElements_=0; // spare space for checking double * el = new double[numberColumns_]; int * ind = new int[numberColumns_]; char ** names = NULL; if (keepNames) { names = reinterpret_cast (malloc(numberRows_*sizeof(char *))); names_[0] = names; numberHash_[0] = numberRows_; } for (iRow=0; iRowmessage(COIN_GENERAL_INFO,messages_)<< " CoinMpsIO::readGMPL(): Maximization problem reformulated as minimization" <reverseOrdering(); delete [] element; delete [] start; delete [] index; // Now do columns collower_ = reinterpret_cast (malloc ( numberColumns_ * sizeof ( double ))); colupper_ = reinterpret_cast (malloc ( numberColumns_ * sizeof ( double ))); integerType_ = reinterpret_cast (malloc (numberColumns_*sizeof(char))); if (keepNames) { names = reinterpret_cast (malloc(numberColumns_*sizeof(char *))); names_[1] = names; numberHash_[1] = numberColumns_; } int numberIntegers=0; for (iColumn=0; iColumn= -MAX_INTEGER ); if ( collower_[iColumn] < -MAX_INTEGER ) collower_[iColumn] = -MAX_INTEGER; if ( colupper_[iColumn] > MAX_INTEGER ) colupper_[iColumn] = MAX_INTEGER; } else if (columnType==GLP_BV) { numberIntegers++; integerType_[iColumn]=1; collower_[iColumn]=0.0; colupper_[iColumn]=1.0; } else { integerType_[iColumn]=0; } if (keepNames) { strcpy(name,glp_get_col_name(cbc_glp_prob,iColumn+1)); // could look at name? names[iColumn]=CoinStrdup(name); } } // leave in case report needed //glp_free(cbc_glp_prob); //glp_mpl_free_wksp(cbc_glp_tran); //glp_free_env(); if ( !numberIntegers ) { free(integerType_); integerType_ = NULL; } if(handler_) handler_->message(COIN_MPS_STATS,messages_)<0) { delete cardReader_; cardReader_ = new CoinMpsCardReader ( input, this); } int numberSets=0; CoinSet ** sets=NULL; returnCode = readGms(numberSets,sets); for (int i=0;i0) { delete cardReader_; cardReader_ = new CoinMpsCardReader ( input, this); } return readGms(numberSets,sets); } int CoinMpsIO::readGms(int & /*numberSets*/,CoinSet ** &/*sets*/) { // First version expects comments giving size numberRows_ = 0; numberColumns_ = 0; numberElements_ = 0; bool gotName=false; bool minimize=false; char objName[COIN_MAX_FIELD_LENGTH]; int decodeType=-1; while(!gotName) { if (cardReader_->nextGmsField(0)<0) { handler_->message(COIN_MPS_EOF,messages_)<mutableCard(); if (card[0]!='*') { // finished preamble without finding name printf("bad gms file\n"); return -1; } else { // skip * and find next char * next = nextNonBlank(card+1); if (!next) continue; if (decodeType>=0) { // in middle of getting a total if (!strncmp(next,"Total",5)) { // next line wanted decodeType+=100; } else if (decodeType>=100) { decodeType -= 100; int number = atoi(next); assert (number>0); if (decodeType==0) numberRows_=number; else if (decodeType==1) numberColumns_=number; else numberElements_=number; decodeType=-1; } } else if (!strncmp(next,"Equation",8)) { decodeType=0; } else if (!strncmp(next,"Variable",8)) { decodeType=1; } else if (!strncmp(next,"Nonzero",7)) { decodeType=2; } else if (!strncmp(next,"Solve",5)) { decodeType=-1; gotName=true; assert (numberRows_>0&&numberColumns_>0&&numberElements_>0); next = cardReader_->nextBlankOr(next+5); char name[100]; char * put=name; next= nextNonBlank(next); while(*next!=' '&&*next!='\t') { *put = *next; put++; next++; } *put='\0'; assert (put-name<100); free(problemName_); problemName_=CoinStrdup(name); next = strchr(next,';'); assert (next); // backup while(*next!=' '&&*next!='\t') { next--; } cardReader_->setPosition(next); #ifdef NDEBUG cardReader_->nextGmsField(1); #else int returnCode = cardReader_->nextGmsField(1); assert (!returnCode); #endif next = strchr(next,';'); cardReader_->setPosition(next+1); strcpy(objName,cardReader_->columnName()); char * semi = strchr(objName,';'); if (semi) *semi='\0'; if (strstr(card,"minim")) { minimize=true; } else { assert (strstr(card,"maxim")); minimize=false; } } else { decodeType=-1; } } } } objectiveOffset_ = 0.0; rowlower_ = reinterpret_cast (malloc ( numberRows_ * sizeof ( double ))); rowupper_ = reinterpret_cast (malloc ( numberRows_ * sizeof ( double ))); collower_ = reinterpret_cast (malloc ( numberColumns_ * sizeof ( double ))); colupper_ = reinterpret_cast (malloc ( numberColumns_ * sizeof ( double ))); objective_= reinterpret_cast (malloc ( numberColumns_ * sizeof ( double ))); CoinBigIndex *start = reinterpret_cast (malloc ((numberRows_ + 1) * sizeof (CoinBigIndex))); COINColumnIndex * column = reinterpret_cast (malloc (numberElements_ * sizeof (COINRowIndex))); double *element = reinterpret_cast (malloc (numberElements_ * sizeof (double))); COINMpsType *rowType = reinterpret_cast (malloc ( numberRows_ * sizeof ( COINMpsType ))); char **rowName = reinterpret_cast (malloc ( numberRows_ * sizeof ( char * ))); COINMpsType *columnType = reinterpret_cast (malloc ( numberColumns_ * sizeof ( COINMpsType ))); char **columnName = reinterpret_cast (malloc ( numberColumns_ * sizeof ( char * ))); start[0] = 0; numberElements_ = 0; int numberErrors = 0; int i; COINColumnIndex numberIntegers = 0; // expect Variables int returnCode; returnCode = cardReader_->nextGmsField(1); assert (!returnCode&&!strcmp(cardReader_->columnName(),"Variables")); for (i=0;inextGmsField(1); assert (!returnCode); char * next = cardReader_->getPosition(); if (*next=='\0') { // eol - expect , at beginning of next line returnCode = cardReader_->nextGmsField(0); assert (!returnCode); next = strchr(cardReader_->mutableCard(),','); assert (next); } assert (*next==','||*next==';'); cardReader_->setPosition(next+1); columnName[i]=CoinStrdup(cardReader_->columnName()); // Default is free? collower_[i]=-COIN_DBL_MAX; // Surely not - check collower_[i]=0.0; colupper_[i]=COIN_DBL_MAX; objective_[i]=0.0; columnType[i]=COIN_UNSET_BOUND; } startHash ( columnName, numberColumns_ , 1 ); integerType_ = reinterpret_cast (malloc (numberColumns_*sizeof(char))); memset(integerType_,0,numberColumns_); // Lists come in various flavors - I don't know many now // 0 - Positive // 1 - Binary // -1 end int listType=10; while (listType>=0) { returnCode=cardReader_->nextGmsField(1); assert (!returnCode); listType=-1; if (!strcmp(cardReader_->columnName(),"Positive")) { listType=0; } else if (!strcmp(cardReader_->columnName(),"Binary")) { listType=1; } else if (!strcmp(cardReader_->columnName(),"Integer")) { listType=2; } else { break; } // skip Variables returnCode=cardReader_->nextGmsField(1); assert (!returnCode); assert (!strcmp(cardReader_->columnName(),"Variables")); // Go through lists bool inList=true; while (inList) { returnCode=cardReader_->nextGmsField(1); assert (!returnCode); char * next = cardReader_->getPosition(); if (*next=='\0') { // eol - expect , at beginning of next line returnCode = cardReader_->nextGmsField(0); assert (!returnCode); next = strchr(cardReader_->mutableCard(),','); assert (next); } assert (*next==','||*next==';'); cardReader_->setPosition(next+1); inList=(*next==','); int iColumn = findHash(cardReader_->columnName(),1); assert (iColumn>=0); if (listType==0) { collower_[iColumn]=0.0; } else if (listType==1) { collower_[iColumn]=0.0; colupper_[iColumn]=1.0; columnType[iColumn]=COIN_BV_BOUND; integerType_[iColumn] = 1; numberIntegers++; } else if (listType==2) { collower_[iColumn]=0.0; columnType[iColumn]=COIN_UI_BOUND; integerType_[iColumn] = 1; numberIntegers++; } } } // should be equations assert (!strcmp(cardReader_->columnName(),"Equations")); for (i=0;inextGmsField(1); assert (!returnCode); char * next = cardReader_->getPosition(); if (*next=='\0') { // eol - expect , at beginning of next line returnCode = cardReader_->nextGmsField(0); assert (!returnCode); next = strchr(cardReader_->mutableCard(),','); assert (next); } assert (*next==','||*next==';'); cardReader_->setPosition(next+1); rowName[i]=CoinStrdup(cardReader_->columnName()); // Default is free? rowlower_[i]=-COIN_DBL_MAX; rowupper_[i]=COIN_DBL_MAX; rowType[i]=COIN_N_ROW; } startHash ( rowName, numberRows_ , 0 ); const double largeElement = 1.0e14; int numberTiny=0; int numberLarge=0; // For now expect just equations so do loop for (i=0;inextGmsField(1); assert (!returnCode); char * next = cardReader_->getPosition(); assert (*next==' '); char rowName[COIN_MAX_FIELD_LENGTH]; strcpy(rowName,cardReader_->columnName()); char * dot = strchr(rowName,'.'); assert (dot); *dot='\0'; assert (*(dot+1)=='.'); #ifndef NDEBUG int iRow = findHash(rowName,0); assert (i==iRow); #endif returnCode=0; while(!returnCode) { returnCode = cardReader_->nextGmsField(3); assert (returnCode==0||returnCode==2); if (returnCode==2) break; int iColumn = findHash(cardReader_->columnName(),1); if (iColumn>=0) { column[numberElements_]=iColumn; double value = cardReader_->value(); if (fabs(value)largeElement) numberLarge++; element[numberElements_++]=value; } else { // may be string char temp[100]; strcpy(temp,cardReader_->columnName()); char * ast = strchr(temp,'*'); if (!ast) { assert (iColumn>=0); } else { assert (allowStringElements_); *ast='\0'; if (allowStringElements_==1) iColumn = findHash(temp,1); else iColumn = findHash(ast+1,1); assert (iColumn>=0); char temp2[100]; temp2[0]='\0'; double value = cardReader_->value(); if (value&&value!=1.0) sprintf(temp2,"%g*",value); if (allowStringElements_==1) strcat(temp2,ast+1); else strcat(temp2,temp); addString(i,iColumn,temp2); } } } start[i+1]=numberElements_; next=cardReader_->getPosition(); // what about ranges? COINMpsType type=COIN_N_ROW; if (!strncmp(next,"=E=",3)) type=COIN_E_ROW; else if (!strncmp(next,"=G=",3)) type=COIN_G_ROW; else if (!strncmp(next,"=L=",3)) type=COIN_L_ROW; assert (type!=COIN_N_ROW); cardReader_->setPosition(next+3); returnCode = cardReader_->nextGmsField(2); assert (!returnCode); if (type==COIN_E_ROW) { rowlower_[i]=cardReader_->value(); rowupper_[i]=cardReader_->value(); } else if (type==COIN_G_ROW) { rowlower_[i]=cardReader_->value(); } else if (type==COIN_L_ROW) { rowupper_[i]=cardReader_->value(); } rowType[i]=type; // and skip ; #ifdef NDEBUG cardReader_->nextGmsField(5); #else returnCode = cardReader_->nextGmsField(5); assert (!returnCode); #endif } // Now non default bounds while (true) { returnCode=cardReader_->nextGmsField(0); if (returnCode<0) break; // if there is a . see if valid name char * card = cardReader_->mutableCard(); char * dot = strchr(card,'.'); if (dot) { *dot='\0'; int iColumn = findHash(card,1); if (iColumn>=0) { // bound char * next = strchr(dot+1,'='); assert (next); double value =atof(next+1); if (!strncmp(dot+1,"fx",2)) { collower_[iColumn]=value; colupper_[iColumn]=value; } else if (!strncmp(dot+1,"up",2)) { colupper_[iColumn]=value; } else if (!strncmp(dot+1,"lo",2)) { collower_[iColumn]=value; } } // may be two per card char * semi = strchr(dot+1,';'); dot = NULL; if (semi) dot = strchr(semi+1,'.'); if (dot) { char * next= nextNonBlank(semi+1); dot = strchr(next,'.'); assert (dot); *dot='\0'; assert (iColumn==findHash(next,1)); // bound next = strchr(dot+1,'='); assert (next); double value =atof(next+1); if (!strncmp(dot+1,"fx",2)) { collower_[iColumn]=value; abort(); colupper_[iColumn]=value; } else if (!strncmp(dot+1,"up",2)) { colupper_[iColumn]=value; } else if (!strncmp(dot+1,"lo",2)) { collower_[iColumn]=value; } // may be two per card semi = strchr(dot+1,';'); assert (semi); } } } // Objective int iObjCol = findHash(objName,1); int iObjRow=-1; assert (iObjCol>=0); if (!convertObjective_) { objective_[iObjCol]=minimize ? 1.0 : -1.0; } else { // move column stuff COINColumnIndex iColumn; free(names_[1][iObjCol]); for ( iColumn = iObjCol+1; iColumn < numberColumns_; iColumn++ ) { integerType_[iColumn-1]=integerType_[iColumn]; collower_[iColumn-1]=collower_[iColumn]; colupper_[iColumn-1]=colupper_[iColumn]; names_[1][iColumn-1]=names_[1][iColumn]; } numberHash_[1]--; numberColumns_--; double multiplier = minimize ? 1.0 : -1.0; // but swap multiplier *= -1.0; int iRow; CoinBigIndex nel=0; CoinBigIndex last=0; int kRow=0; for (iRow=0;iRowiObjCol) iColumn --; objective_[iColumn]=multiplier * element[j]; } } nel=start[kRow]; last=start[iRow+1]; } } numberRows_=kRow; assert (iObjRow>=0); numberHash_[0]--; } stopHash(0); stopHash(1); // clean up integers if ( !numberIntegers ) { free(integerType_); integerType_ = NULL; } else { COINColumnIndex iColumn; for ( iColumn = 0; iColumn < numberColumns_; iColumn++ ) { if ( integerType_[iColumn] ) { //assert ( collower_[iColumn] >= -MAX_INTEGER ); if ( collower_[iColumn] < -MAX_INTEGER ) collower_[iColumn] = -MAX_INTEGER; if ( colupper_[iColumn] > MAX_INTEGER ) colupper_[iColumn] = MAX_INTEGER; } } } free ( columnType ); free ( rowType ); if (numberStringElements()&&convertObjective_) { int numberElements = numberStringElements(); for (int i=0;iiObjRow) { modify=true; iRow--; } if (iColumn>iObjCol) { modify=true; iColumn--; } if (modify) { char temp[500]; const char * pos = strchr(line,','); assert (pos); pos = strchr(pos+1,','); assert (pos); pos++; sprintf(temp,"%d,%d,%s",iRow,iColumn,pos); free(line); stringElements_[i]=CoinStrdup(temp); } } } // construct packed matrix and convert to column format CoinPackedMatrix matrixByRow(false, numberColumns_,numberRows_,numberElements_, element,column,start,NULL); free ( column ); free ( start ); free ( element ); matrixByColumn_= new CoinPackedMatrix(); matrixByColumn_->setExtraGap(0.0); matrixByColumn_->setExtraMajor(0.0); matrixByColumn_->reverseOrderedCopyOf(matrixByRow); if (!convertObjective_) assert (matrixByColumn_->getVectorLengths()[iObjCol]==1); handler_->message(COIN_MPS_STATS,messages_)<logLevel()>3) printf("There were %d coefficients < %g and %d > %g\n", numberTiny,smallElement_,numberLarge,largeElement); return numberErrors; } /* Read a basis in MPS format from the given filename. If VALUES on NAME card and solution not NULL fills in solution status values as for CoinWarmStartBasis (but one per char) Use "stdin" or "-" to read from stdin. */ int CoinMpsIO::readBasis(const char *filename, const char *extension , double * solution, unsigned char * rowStatus, unsigned char * columnStatus, const std::vector & colnames,int numberColumns, const std::vector & rownames, int numberRows) { // Deal with filename - +1 if new, 0 if same as before, -1 if error CoinFileInput *input = 0; int returnCode = dealWithFileName(filename,extension,input); if (returnCode<0) { return -1; } else if (returnCode>0) { delete cardReader_; cardReader_ = new CoinMpsCardReader ( input, this); } cardReader_->readToNextSection(); if ( cardReader_->whichSection ( ) == COIN_NAME_SECTION ) { // Get whether to use values (passed back by freeFormat) if (!cardReader_->freeFormat()) solution = NULL; } else if ( cardReader_->whichSection ( ) == COIN_UNKNOWN_SECTION ) { handler_->message(COIN_MPS_BADFILE1,messages_)<card() <<1 <fileInput()->getReadType()!="plain") handler_->message(COIN_MPS_BADFILE2,messages_) <fileInput()->getReadType() <whichSection ( ) != COIN_EOF_SECTION ) { return -4; } else { handler_->message(COIN_MPS_EOF,messages_)< (numberRows_)|| colnames.size()!=static_cast (numberColumns_)) { gotNames = false; } else { gotNames=true; numberHash_[0]=numberRows_; numberHash_[1]=numberColumns_; names_[0] = reinterpret_cast (malloc(numberRows_ * sizeof(char *))); names_[1] = reinterpret_cast (malloc (numberColumns_ * sizeof(char *))); const char** rowNames = const_cast(names_[0]); const char** columnNames = const_cast(names_[1]); int i; for (i = 0; i < numberRows_; ++i) { rowNames[i] = rownames[i].c_str(); } for (i = 0; i < numberColumns_; ++i) { columnNames[i] = colnames[i].c_str(); } startHash ( const_cast(rowNames), numberRows , 0 ); startHash ( const_cast(columnNames), numberColumns , 1 ); } cardReader_->setWhichSection(COIN_BASIS_SECTION); cardReader_->setFreeFormat(true); // below matches CoinWarmStartBasis, const unsigned char basic = 0x01; const unsigned char atLowerBound = 0x03; const unsigned char atUpperBound = 0x02; while ( cardReader_->nextField ( ) == COIN_BASIS_SECTION ) { // Get type and column number int iColumn; if (gotNames) { iColumn = findHash (cardReader_->columnName(),1); } else { // few checks char check; sscanf(cardReader_->columnName(),"%c%d",&check,&iColumn); assert (check=='C'&&iColumn>=0); if (iColumn>=numberColumns_) iColumn=-1; } if (iColumn>=0) { double value = cardReader_->value ( ); if (solution && value>-1.0e50) solution[iColumn]=value; int iRow=-1; switch ( cardReader_->mpsType ( ) ) { case COIN_BS_BASIS: columnStatus[iColumn]= basic; break; case COIN_XL_BASIS: columnStatus[iColumn]= basic; // get row number if (gotNames) { iRow = findHash (cardReader_->rowName(),0); } else { // few checks char check; sscanf(cardReader_->rowName(),"%c%d",&check,&iRow); assert (check=='R'&&iRow>=0); if (iRow>=numberRows_) iRow=-1; } if ( iRow >= 0 ) { rowStatus[iRow] = atLowerBound; } break; case COIN_XU_BASIS: columnStatus[iColumn]= basic; // get row number if (gotNames) { iRow = findHash (cardReader_->rowName(),0); } else { // few checks char check; sscanf(cardReader_->rowName(),"%c%d",&check,&iRow); assert (check=='R'&&iRow>=0); if (iRow>=numberRows_) iRow=-1; } if ( iRow >= 0 ) { rowStatus[iRow] = atUpperBound; } break; case COIN_LL_BASIS: columnStatus[iColumn]= atLowerBound; break; case COIN_UL_BASIS: columnStatus[iColumn]= atUpperBound; break; default: break; } } } if (gotNames) { stopHash ( 0 ); stopHash ( 1 ); free(names_[0]); names_[0]=NULL; numberHash_[0]=0; free(names_[1]); names_[1]=NULL; numberHash_[1]=0; delete[] hash_[0]; delete[] hash_[1]; hash_[0]=0; hash_[1]=0; } if ( cardReader_->whichSection ( ) != COIN_ENDATA_SECTION) { handler_->message(COIN_MPS_BADIMAGE,messages_)<cardNumber() <card() <message(COIN_MPS_RETURNING,messages_)<1&&formatType<8) { int i; // pad out to 8 for (i=0;i<8;i++) { if (outputRow[i]=='\0') break; } for (;i<8;i++) outputRow[i]=' '; outputRow[8]='\0'; } } // Function to return number in most efficient way // Also creates row name field /* formatType is 0 - normal and 8 character names 1 - extra accuracy 2 - IEEE hex - INTEL 3 - IEEE hex - not INTEL */ static void convertDouble(int section,int formatType, double value, char outputValue[24], const char * name, char outputRow[100]) { convertRowName(formatType,name,outputRow); CoinConvertDouble(section,formatType&3,value,outputValue); } // Function to return number in most efficient way /* formatType is 0 - normal and 8 character names 1 - extra accuracy 2 - IEEE hex - INTEL 3 - IEEE hex - not INTEL */ void CoinConvertDouble(int section, int formatType, double value, char outputValue[24]) { if (formatType==0) { bool stripZeros=true; if (fabs(value)<1.0e40) { int power10, decimal; if (value>=0.0) { power10 =static_cast (log10(value)); if (power10<9&&power10>-4) { decimal = CoinMin(10,10-power10); char format[8]; sprintf(format,"%%12.%df",decimal); sprintf(outputValue,format,value); } else { sprintf(outputValue,"%13.7g",value); stripZeros=false; } } else { power10 =static_cast (log10(-value))+1; if (power10<8&&power10>-3) { decimal = CoinMin(9,9-power10); char format[8]; sprintf(format,"%%12.%df",decimal); sprintf(outputValue,format,value); } else { sprintf(outputValue,"%13.6g",value); stripZeros=false; } } if (stripZeros) { // take off trailing 0 int j; for (j=11;j>=0;j--) { if (outputValue[j]=='0') outputValue[j]=' '; else break; } } else { // still need to make sure fits in 12 characters char * e = strchr(outputValue,'e'); if (!e) { // no e but better make sure fits in 12 if (outputValue[12]!=' '&&outputValue[12]!='\0') { assert (outputValue[0]==' '); int j; for (j=0;j<12;j++) outputValue[j]=outputValue[j+1]; } outputValue[12]='\0'; } else { // e take out 0s int j = static_cast((e-outputValue))+1; int put = j+1; assert(outputValue[j]=='-'||outputValue[j]=='+'); for ( j = put ; j < 14 ; j++) { if (outputValue[j]!='0') break; } if (j == put) { // we need to lose something // try taking out blanks if (outputValue[0]==' ') { // skip blank j=1; put=0; } else { // rounding will be wrong but .... put -= 3; // points to one before e j -= 2; // points to e } } // copy rest for ( ; j < 14 ; j++) { outputValue[put++] = outputValue[j]; } } } // overwrite if very very small if (fabs(value)<1.0e-20) strcpy(outputValue,"0.0"); } else { if (section==2) { outputValue[0]= '\0'; // needs no value } else { // probably error ... but .... sprintf(outputValue,"%12.6g",value); } } int i; // pad out to 12 for (i=0;i<12;i++) { if (outputValue[i]=='\0') break; } for (;i<12;i++) outputValue[i]=' '; outputValue[12]='\0'; } else if (formatType==1) { if (fabs(value)<1.0e40) { memset(outputValue,' ',24); sprintf(outputValue,"%.16g",value); // take out blanks int i=0; int j; for (j=0;j<23;j++) { if (outputValue[j]!=' ') outputValue[i++]=outputValue[j]; } outputValue[i]='\0'; } else { if (section==2) { outputValue[0]= '\0'; // needs no value } else { // probably error ... but .... sprintf(outputValue,"%12.6g",value); } } } else { // IEEE // ieee - 3 bytes go to 2 assert (sizeof(double)==8*sizeof(char)); assert (sizeof(unsigned short) == 2*sizeof(char)); unsigned short shortValue[4]; memcpy(shortValue,&value,sizeof(double)); outputValue[12]='\0'; if (formatType==2) { // INTEL char * thisChar = outputValue; for (int i=3;i>=0;i--) { unsigned short thisValue=shortValue[i]; // encode 6 bits at a time for (int j=0;j<3;j++) { unsigned short thisPart = static_cast(thisValue & 63); thisValue = static_cast(thisValue>>6); if (thisPart < 10) { *thisChar = static_cast(thisPart+'0'); } else if (thisPart < 36) { *thisChar = static_cast(thisPart-10+'a'); } else if (thisPart < 62) { *thisChar = static_cast(thisPart-36+'A'); } else { *thisChar = static_cast(thisPart-62+'*'); } thisChar++; } } } else { // not INTEL char * thisChar = outputValue; for (int i=0;i<4;i++) { unsigned short thisValue=shortValue[i]; // encode 6 bits at a time for (int j=0;j<3;j++) { unsigned short thisPart = static_cast(thisValue & 63); thisValue = static_cast(thisValue>>6); if (thisPart < 10) { *thisChar = static_cast(thisPart+'0'); } else if (thisPart < 36) { *thisChar = static_cast(thisPart-10+'a'); } else if (thisPart < 62) { *thisChar = static_cast(thisPart-36+'A'); } else { *thisChar = static_cast(thisPart-62+'*'); } thisChar++; } } } } } static void writeString(CoinFileOutput *output, const char* str) { if (output != 0) { output->puts (str); } } // Put out card image static void outputCard(int formatType,int numberFields, CoinFileOutput *output, std::string head, const char * name, const char outputValue[2][24], const char outputRow[2][100]) { // fprintf(fp,"%s",head.c_str()); std::string line = head; int i; if (formatType==0||(formatType>=2&&formatType<8)) { char outputColumn[9]; strcpy(outputColumn,name); for (i=0;i<8;i++) { if (outputColumn[i]=='\0') break; } for (;i<8;i++) outputColumn[i]=' '; outputColumn[8]='\0'; // fprintf(fp,"%s ",outputColumn); line += outputColumn; line += " "; for (i=0;i='0'&&num<='9') { n *= 10; n += num-'0'; } else { n=-1; break; } } if (n>=0) largest = CoinMax(largest,n); } } largest ++; if (largest>0) { // check char * used = new char[largest]; memset(used,0,largest); int nDup=0; for (i=0;i='0'&&num<='9') { n *= 10; n += num-'0'; } else { n=-1; break; } } if (n>=0) { if (!used[n]) { used[n]=1; } else { // duplicate nDup++; free(names[i]); char newName[9]; sprintf(newName,"%c%7.7d",first,largest); names[i] = CoinStrdup(newName); largest++; } } } } delete []used; return nDup; } else { return 0; } } static void strcpyeq(char * output, const char * input) { output[0]='='; strcpy(output+1,input); } int CoinMpsIO::writeMps(const char *filename, int compression, int formatType, int numberAcross, CoinPackedMatrix * quadratic, int numberSOS, const CoinSet * setInfo) const { // Clean up format and numberacross numberAcross=CoinMax(1,numberAcross); numberAcross=CoinMin(2,numberAcross); formatType=CoinMax(0,formatType); formatType=CoinMin(2,formatType); int possibleCompression=0; #ifdef COIN_HAS_ZLIB possibleCompression =1; #endif #ifdef COIN_HAS_BZLIB possibleCompression += 2; #endif if ((compression&possibleCompression)==0) { // switch to other if possible if (compression&&possibleCompression) compression = 3-compression; else compression=0; } std::string line = filename; CoinFileOutput *output = 0; switch (compression) { case 1: if (strcmp(line.c_str() +(line.size()-3), ".gz") != 0) { line += ".gz"; } output = CoinFileOutput::create (line, CoinFileOutput::COMPRESS_GZIP); break; case 2: if (strcmp(line.c_str() +(line.size()-4), ".bz2") != 0) { line += ".bz2"; } output = CoinFileOutput::create (line, CoinFileOutput::COMPRESS_BZIP2); break; case 0: default: output = CoinFileOutput::create (line, CoinFileOutput::COMPRESS_NONE); break; } const char * const * const rowNames = names_[0]; const char * const * const columnNames = names_[1]; int i; unsigned int length = 8; bool freeFormat = (formatType==1); // Check names for uniqueness if default int nChanged; nChanged=makeUniqueNames(names_[0],numberRows_,'R'); if (nChanged) handler_->message(COIN_MPS_CHANGED,messages_)<<"row"<message(COIN_MPS_CHANGED,messages_)<<"column"< length) { length = static_cast(strlen(rowNames[i])); break; } } if (length <= 8) { for (i = 0 ; i < numberColumns_; ++i) { if (strlen(columnNames[i]) > length) { length = static_cast(strlen(columnNames[i])); break; } } } if (length > 8 && freeFormat!=1) { freeFormat = true; formatType += 8; } if (numberStringElements_) { freeFormat=true; numberAcross=1; } // NAME card line = "NAME "; if (strcmp(problemName_,"")==0) { line.append("BLANK "); } else { if (strlen(problemName_) >= 8) { line.append(problemName_, 8); } else { line.append(problemName_); line.append(8-strlen(problemName_), ' '); } } if (freeFormat&&(formatType&7)!=2) line.append(" FREE"); else if (freeFormat) line.append(" FREEIEEE"); else if ((formatType&7)==2) line.append(" IEEE"); // See if INTEL if IEEE if ((formatType&7)==2) { // test intel here and add 1 if not intel double value=1.0; char x[8]; memcpy(x,&value,8); if (x[0]==63) { formatType ++; // not intel } else { assert (x[0]==0); } } // finish off name and do ROWS card and objective char* objrow = CoinStrdup(strcmp(objectiveName_,"")==0 ? "OBJROW" : objectiveName_); line.append("\nROWS\n N "); line.append(objrow); line.append("\n"); writeString(output, line.c_str()); // Rows section // Sense array // But massage if looks odd char * sense = new char [numberRows_]; memcpy( sense , getRowSense(), numberRows_); const double * rowLower = getRowLower(); const double * rowUpper = getRowUpper(); for (i=0;i-1.0e30) { if(rowUpper[i]<1.0e30) { line.append("L"); } else { sense[i]='G'; line.append(1,sense[i]); } } else { sense[i]='L'; line.append(1,sense[i]); } } line.append(" "); line.append(rowNames[i]); line.append("\n"); writeString(output, line.c_str()); } // COLUMNS card writeString(output, "COLUMNS\n"); bool ifBounds=false; double largeValue = infinity_; largeValue = 1.0e30; // safer const double * columnLower = getColLower(); const double * columnUpper = getColUpper(); const double * objective = getObjCoefficients(); const CoinPackedMatrix * matrix = getMatrixByCol(); const double * elements = matrix->getElements(); const int * rows = matrix->getIndices(); const CoinBigIndex * starts = matrix->getVectorStarts(); const int * lengths = matrix->getVectorLengths(); char outputValue[2][24]; char outputRow[2][100]; // strings int nextRowString=numberRows_+10; int nextColumnString=numberColumns_+10; int whichString=0; const char * nextString=NULL; // mark string rows char * stringRow = new char[numberRows_+1]; memset(stringRow,0,numberRows_+1); if (numberStringElements_) { decodeString(whichString,nextRowString,nextColumnString,nextString); } // Arrays so we can put out rows in order int * tempRow = new int [numberRows_]; double * tempValue = new double [numberRows_]; // Through columns (only put out if elements or objective value) for (i=0;i=numberColumns_) { strcpyeq(outputValue[0],nextString); decodeString(++whichString,nextRowString,nextColumnString,nextString); } numberFields++; if (numberFields==numberAcross) { // put out card outputCard(formatType, numberFields, output, " ", "RHS", outputValue, outputRow); numberFields=0; } } } if (numberFields) { // put out card outputCard(formatType, numberFields, output, " ", "RHS", outputValue, outputRow); } if (ifRange) { // RANGES writeString(output, "RANGES\n"); numberFields = 0; for (i=0;i=largeValue&&!isInteger(i)) { header[0]=" FR "; value[0] = largeValue; } else { header[0]=" MI "; value[0] = -largeValue; if (!isInteger(i)) header[1]=" UP "; else header[1]=" UI "; if (upperValuegetIndices(); const CoinBigIndex * columnQuadraticStart = quadratic->getVectorStarts(); const int * columnQuadraticLength = quadratic->getVectorLengths(); const double * quadraticElement = quadratic->getElements(); for (int iColumn=0;iColumn -infinity_) { if (upper < infinity_) { right = upper; if (upper==lower) { sense = 'E'; } else { sense = 'R'; range = upper - lower; } } else { sense = 'G'; right = lower; } } else { if (upper < infinity_) { sense = 'L'; right = upper; } else { sense = 'N'; right = 0.0; } } } //----------------------------------------------------------------------------- /** A quick inlined function to convert from sense/rhs/range stryle constraint definition to lb/ub style */ inline void CoinMpsIO::convertSenseToBound(const char sense, const double right, const double range, double& lower, double& upper) const { switch (sense) { case 'E': lower = upper = right; break; case 'L': lower = -infinity_; upper = right; break; case 'G': lower = right; upper = infinity_; break; case 'R': lower = right - range; upper = right; break; case 'N': lower = -infinity_; upper = infinity_; break; } } //------------------------------------------------------------------ // Get sense of row constraints. //------------------------------------------------------------------ const char * CoinMpsIO::getRowSense() const { if ( rowsense_==NULL ) { int nr=numberRows_; rowsense_ = reinterpret_cast (malloc(nr*sizeof(char))); double dum1,dum2; int i; for ( i=0; i (malloc(nr*sizeof(double))); char dum1; double dum2; int i; for ( i=0; i (malloc(nr*sizeof(double))); std::fill(rowrange_,rowrange_+nr,0.0); char dum1; double dum2; int i; for ( i=0; ireverseOrdering(); } return matrixByRow_; } //------------------------------------------------------------------ // Create a column copy of the matrix ... //------------------------------------------------------------------ const CoinPackedMatrix * CoinMpsIO::getMatrixByCol() const { return matrixByColumn_; } //------------------------------------------------------------------ // Save the data ... //------------------------------------------------------------------ void CoinMpsIO::setMpsDataWithoutRowAndColNames( const CoinPackedMatrix& m, const double infinity, const double* collb, const double* colub, const double* obj, const char* integrality, const double* rowlb, const double* rowub) { freeAll(); if (m.isColOrdered()) { matrixByColumn_ = new CoinPackedMatrix(m); } else { matrixByColumn_ = new CoinPackedMatrix; matrixByColumn_->reverseOrderedCopyOf(m); } numberColumns_ = matrixByColumn_->getNumCols(); numberRows_ = matrixByColumn_->getNumRows(); numberElements_ = matrixByColumn_->getNumElements(); defaultBound_ = 1; infinity_ = infinity; objectiveOffset_ = 0; rowlower_ = reinterpret_cast (malloc (numberRows_ * sizeof(double))); rowupper_ = reinterpret_cast (malloc (numberRows_ * sizeof(double))); collower_ = reinterpret_cast (malloc (numberColumns_ * sizeof(double))); colupper_ = reinterpret_cast (malloc (numberColumns_ * sizeof(double))); objective_ = reinterpret_cast (malloc (numberColumns_ * sizeof(double))); std::copy(rowlb, rowlb + numberRows_, rowlower_); std::copy(rowub, rowub + numberRows_, rowupper_); std::copy(collb, collb + numberColumns_, collower_); std::copy(colub, colub + numberColumns_, colupper_); std::copy(obj, obj + numberColumns_, objective_); if (integrality) { integerType_ = reinterpret_cast (malloc (numberColumns_ * sizeof(char))); std::copy(integrality, integrality + numberColumns_, integerType_); } else { integerType_ = NULL; } problemName_ = CoinStrdup(""); objectiveName_ = CoinStrdup(""); rhsName_ = CoinStrdup(""); rangeName_ = CoinStrdup(""); boundName_ = CoinStrdup(""); } void CoinMpsIO::setMpsDataColAndRowNames( char const * const * const colnames, char const * const * const rownames) { releaseRowNames(); releaseColumnNames(); // If long names free format names_[0] = reinterpret_cast (malloc(numberRows_ * sizeof(char *))); names_[1] = reinterpret_cast (malloc (numberColumns_ * sizeof(char *))); numberHash_[0]=numberRows_; numberHash_[1]=numberColumns_; char** rowNames = names_[0]; char** columnNames = names_[1]; int i; if (rownames) { for (i = 0 ; i < numberRows_; ++i) { if (rownames[i]) { rowNames[i] = CoinStrdup(rownames[i]); } else { rowNames[i] = reinterpret_cast (malloc (9 * sizeof(char))); sprintf(rowNames[i],"R%7.7d",i); } } } else { for (i = 0; i < numberRows_; ++i) { rowNames[i] = reinterpret_cast (malloc (9 * sizeof(char))); sprintf(rowNames[i],"R%7.7d",i); } } #ifndef NONAMES if (colnames) { for (i = 0 ; i < numberColumns_; ++i) { if (colnames[i]) { columnNames[i] = CoinStrdup(colnames[i]); } else { columnNames[i] = reinterpret_cast (malloc (9 * sizeof(char))); sprintf(columnNames[i],"C%7.7d",i); } } } else { for (i = 0; i < numberColumns_; ++i) { columnNames[i] = reinterpret_cast (malloc (9 * sizeof(char))); sprintf(columnNames[i],"C%7.7d",i); } } #else const double * objective = getObjCoefficients(); const CoinPackedMatrix * matrix = getMatrixByCol(); const int * lengths = matrix->getVectorLengths(); int k=0; for (i = 0 ; i < numberColumns_; ++i) { columnNames[i] = reinterpret_cast (malloc (9 * sizeof(char))); sprintf(columnNames[i],"C%7.7d",k); if (objective[i]||lengths[i]) k++; } #endif } void CoinMpsIO::setMpsDataColAndRowNames( const std::vector & colnames, const std::vector & rownames) { // If long names free format names_[0] = reinterpret_cast (malloc(numberRows_ * sizeof(char *))); names_[1] = reinterpret_cast (malloc (numberColumns_ * sizeof(char *))); char** rowNames = names_[0]; char** columnNames = names_[1]; int i; if (rownames.size()!=0) { for (i = 0 ; i < numberRows_; ++i) { rowNames[i] = CoinStrdup(rownames[i].c_str()); } } else { for (i = 0; i < numberRows_; ++i) { rowNames[i] = reinterpret_cast (malloc (9 * sizeof(char))); sprintf(rowNames[i],"R%7.7d",i); } } if (colnames.size()!=0) { for (i = 0 ; i < numberColumns_; ++i) { columnNames[i] = CoinStrdup(colnames[i].c_str()); } } else { for (i = 0; i < numberColumns_; ++i) { columnNames[i] = reinterpret_cast (malloc (9 * sizeof(char))); sprintf(columnNames[i],"C%7.7d",i); } } } void CoinMpsIO::setMpsData(const CoinPackedMatrix& m, const double infinity, const double* collb, const double* colub, const double* obj, const char* integrality, const double* rowlb, const double* rowub, char const * const * const colnames, char const * const * const rownames) { setMpsDataWithoutRowAndColNames(m,infinity,collb,colub,obj,integrality,rowlb,rowub); setMpsDataColAndRowNames(colnames,rownames); } void CoinMpsIO::setMpsData(const CoinPackedMatrix& m, const double infinity, const double* collb, const double* colub, const double* obj, const char* integrality, const double* rowlb, const double* rowub, const std::vector & colnames, const std::vector & rownames) { setMpsDataWithoutRowAndColNames(m,infinity,collb,colub,obj,integrality,rowlb,rowub); setMpsDataColAndRowNames(colnames,rownames); } void CoinMpsIO::setMpsData(const CoinPackedMatrix& m, const double infinity, const double* collb, const double* colub, const double* obj, const char* integrality, const char* rowsen, const double* rowrhs, const double* rowrng, char const * const * const colnames, char const * const * const rownames) { const int numrows = m.getNumRows(); double * rlb = numrows ? new double[numrows] : 0; double * rub = numrows ? new double[numrows] : 0; for (int i = 0; i < numrows; ++i) { convertSenseToBound(rowsen[i], rowrhs[i], rowrng[i], rlb[i], rub[i]); } setMpsData(m, infinity, collb, colub, obj, integrality, rlb, rub, colnames, rownames); delete [] rlb; delete [] rub; } void CoinMpsIO::setMpsData(const CoinPackedMatrix& m, const double infinity, const double* collb, const double* colub, const double* obj, const char* integrality, const char* rowsen, const double* rowrhs, const double* rowrng, const std::vector & colnames, const std::vector & rownames) { const int numrows = m.getNumRows(); double * rlb = numrows ? new double[numrows] : 0; double * rub = numrows ? new double[numrows] : 0; for (int i = 0; i < numrows; ++i) { convertSenseToBound(rowsen[i], rowrhs[i], rowrng[i], rlb[i], rub[i]); } setMpsData(m, infinity, collb, colub, obj, integrality, rlb, rub, colnames, rownames); delete [] rlb; delete [] rub; } void CoinMpsIO::setProblemName (const char *name) { free(problemName_) ; problemName_ = CoinStrdup(name) ; } void CoinMpsIO::setObjectiveName (const char *name) { free(objectiveName_) ; objectiveName_ = CoinStrdup(name) ; } //------------------------------------------------------------------ // Return true if column is a continuous, binary, ... //------------------------------------------------------------------ bool CoinMpsIO::isContinuous(int columnNumber) const { const char * intType = integerType_; if ( intType==NULL ) return true; assert (columnNumber>=0 && columnNumber < numberColumns_); if ( intType[columnNumber]==0 ) return true; return false; } /* Return true if column is integer. Note: This function returns true if the the column is binary or a general integer. */ bool CoinMpsIO::isInteger(int columnNumber) const { const char * intType = integerType_; if ( intType==NULL ) return false; assert (columnNumber>=0 && columnNumber < numberColumns_); if ( intType[columnNumber]!=0 ) return true; return false; } // if integer const char * CoinMpsIO::integerColumns() const { return integerType_; } // Pass in array saying if each variable integer void CoinMpsIO::copyInIntegerInformation(const char * integerType) { if (integerType) { if (!integerType_) integerType_ = reinterpret_cast (malloc (numberColumns_ * sizeof(char))); memcpy(integerType_,integerType,numberColumns_); } else { free(integerType_); integerType_=NULL; } } // names - returns NULL if out of range const char * CoinMpsIO::rowName(int index) const { if (index>=0&&index=0&&index (malloc(numberRows_*sizeof(double))); rowupper_ = reinterpret_cast (malloc(numberRows_*sizeof(double))); memcpy(rowlower_,rhs.rowlower_,numberRows_*sizeof(double)); memcpy(rowupper_,rhs.rowupper_,numberRows_*sizeof(double)); } if (rhs.collower_) { collower_ = reinterpret_cast (malloc(numberColumns_*sizeof(double))); colupper_ = reinterpret_cast (malloc(numberColumns_*sizeof(double))); objective_ = reinterpret_cast (malloc(numberColumns_*sizeof(double))); memcpy(collower_,rhs.collower_,numberColumns_*sizeof(double)); memcpy(colupper_,rhs.colupper_,numberColumns_*sizeof(double)); memcpy(objective_,rhs.objective_,numberColumns_*sizeof(double)); } if (rhs.integerType_) { integerType_ = reinterpret_cast (malloc (numberColumns_*sizeof(char))); memcpy(integerType_,rhs.integerType_,numberColumns_*sizeof(char)); } free(fileName_); free(problemName_); free(objectiveName_); free(rhsName_); free(rangeName_); free(boundName_); fileName_ = CoinStrdup(rhs.fileName_); problemName_ = CoinStrdup(rhs.problemName_); objectiveName_ = CoinStrdup(rhs.objectiveName_); rhsName_ = CoinStrdup(rhs.rhsName_); rangeName_ = CoinStrdup(rhs.rangeName_); boundName_ = CoinStrdup(rhs.boundName_); numberHash_[0]=rhs.numberHash_[0]; numberHash_[1]=rhs.numberHash_[1]; defaultBound_=rhs.defaultBound_; infinity_=rhs.infinity_; smallElement_ = rhs.smallElement_; objectiveOffset_=rhs.objectiveOffset_; int section; for (section=0;section<2;section++) { if (numberHash_[section]) { char ** names2 = rhs.names_[section]; names_[section] = reinterpret_cast (malloc(numberHash_[section]* sizeof(char *))); char ** names = names_[section]; int i; for (i=0;i0) { delete cardReader_; cardReader_ = new CoinMpsCardReader ( input, this); } // See if QUADOBJ just found if (!filename&&cardReader_->whichSection ( ) == COIN_QUAD_SECTION ) { cardReader_->setWhichSection(COIN_QUAD_SECTION); } else if (cardReader_->whichSection ( ) == COIN_CONIC_SECTION ) { return -3; } else { cardReader_->readToNextSection(); // Skip NAME if ( cardReader_->whichSection ( ) == COIN_NAME_SECTION ) cardReader_->readToNextSection(); if ( cardReader_->whichSection ( ) == COIN_QUAD_SECTION ) { // save name of section free(problemName_); problemName_=CoinStrdup(cardReader_->columnName()); } else if ( cardReader_->whichSection ( ) == COIN_EOF_SECTION ) { handler_->message(COIN_MPS_EOF,messages_)<message(COIN_MPS_BADFILE1,messages_)<card() <cardNumber() < (malloc(maximumNonZeros*sizeof(int))); int * column2Temp = reinterpret_cast (malloc(maximumNonZeros*sizeof(int))); double * elementTemp = reinterpret_cast (malloc(maximumNonZeros*sizeof(double))); startHash(1); int numberElements=0; while ( cardReader_->nextField ( ) == COIN_QUAD_SECTION ) { switch ( cardReader_->mpsType ( ) ) { case COIN_BLANK_COLUMN: if ( fabs ( cardReader_->value ( ) ) > smallElement_ ) { if ( numberElements == maximumNonZeros ) { maximumNonZeros = ( 3 * maximumNonZeros ) / 2 + 1000; column = reinterpret_cast (realloc ( column, maximumNonZeros * sizeof ( COINColumnIndex ))); column2Temp = reinterpret_cast (realloc ( column2Temp, maximumNonZeros * sizeof ( COINColumnIndex ))); elementTemp = reinterpret_cast (realloc ( elementTemp, maximumNonZeros * sizeof ( double ))); } // get indices COINColumnIndex iColumn1 = findHash ( cardReader_->columnName ( ) , 1 ); COINColumnIndex iColumn2 = findHash ( cardReader_->rowName ( ) , 1 ); if ( iColumn1 >= 0 ) { if (iColumn2 >=0) { double value = cardReader_->value ( ); column[numberElements]=iColumn1; column2Temp[numberElements]=iColumn2; elementTemp[numberElements++]=value; } else { numberErrors++; if ( numberErrors < 100 ) { handler_->message(COIN_MPS_NOMATCHROW,messages_) <rowName()<cardNumber()<card() < 100000) { handler_->message(COIN_MPS_RETURNING,messages_)<message(COIN_MPS_NOMATCHCOL,messages_) <columnName()<cardNumber()<card() < 100000) { handler_->message(COIN_MPS_RETURNING,messages_)<message(COIN_MPS_BADIMAGE,messages_)<cardNumber() <card() < 100000) { handler_->message(COIN_MPS_RETURNING,messages_)<whichSection ( ) != COIN_ENDATA_SECTION && cardReader_->whichSection ( ) != COIN_CONIC_SECTION ) { handler_->message(COIN_MPS_BADIMAGE,messages_)<cardNumber() <card() <message(COIN_MPS_RETURNING,messages_)<0) { delete cardReader_; cardReader_ = new CoinMpsCardReader ( input, this); } // See if CSECTION just found if (!filename&&cardReader_->whichSection ( ) == COIN_CONIC_SECTION ) { cardReader_->setWhichSection(COIN_CONIC_SECTION); } else { cardReader_->readToNextSection(); // Skip NAME if ( cardReader_->whichSection ( ) == COIN_NAME_SECTION ) cardReader_->readToNextSection(); if ( cardReader_->whichSection ( ) == COIN_CONIC_SECTION ) { // looks good } else if ( cardReader_->whichSection ( ) == COIN_EOF_SECTION ) { handler_->message(COIN_MPS_EOF,messages_)<message(COIN_MPS_BADFILE1,messages_)<card() <cardNumber() <card()+strlen(cardReader_->card())-4; // Should be QUAD but if not don't complain int type=1; if (!strcmp(quad,"QUAD")) { if (*(quad-1)=='R') type=2; } coneType[0] = type; int numberErrors = 0; columnStart[0]=0; int numberElements=0; startHash(1); while ( cardReader_->nextField ( ) == COIN_CONIC_SECTION ) { const char * card = cardReader_->card(); if (!strncmp(card,"CSECTION",8)) { // check QUAD or RQUAD (by hand) - card has had end stripped const char * quad = card+strlen(card)-4; // Should be QUAD but if not don't complain int type=1; if (!strcmp(quad,"QUAD")) { if (*(quad-1)=='R') type=2; } if (numberElements==columnStart[numberCones]) { printf("Cone must have at least one column\n"); abort(); } columnStart[++numberCones]=numberElements; coneType[numberCones] = type; continue; } COINColumnIndex iColumn1; switch ( cardReader_->mpsType ( ) ) { case COIN_BLANK_COLUMN: // get index iColumn1 = findHash ( cardReader_->columnName ( ) , 1 ); if ( iColumn1 >= 0 ) { column[numberElements++]=iColumn1; } else { numberErrors++; if ( numberErrors < 100 ) { handler_->message(COIN_MPS_NOMATCHCOL,messages_) <columnName()<cardNumber()<card() < 100000) { handler_->message(COIN_MPS_RETURNING,messages_)<message(COIN_MPS_BADIMAGE,messages_)<cardNumber() <card() < 100000) { handler_->message(COIN_MPS_RETURNING,messages_)<whichSection ( ) == COIN_ENDATA_SECTION ) { // Error if no cones if (!numberElements) { handler_->message(COIN_MPS_EOF,messages_)<message(COIN_MPS_BADFILE1,messages_)<card() <cardNumber() <(strlen(id)+strlen(value)); if (numberStringElements_==maximumStringElements_) { maximumStringElements_ = 2*maximumStringElements_+100; char ** temp = new char * [maximumStringElements_]; for (int i=0;i (malloc(n+1)); stringElements_[numberStringElements_++]=line; strcpy(line,id); strcat(line,value); } // Decode string void CoinMpsIO::decodeString(int iString, int & iRow, int & iColumn, const char * & value) const { iRow=-1; iColumn=-1; value=NULL; if (iString>=0&&iStringstringsExist()) return 0; // no strings assert (!numberStringElements_); /* First columns (including objective==numberRows) then RHS(==numberColumns (+1)) (with rowLower and rowUpper marked) then bounds LO==numberRows+1, UP==numberRows+2 */ int numberColumns = model->numberColumns(); int numberRows = model->numberRows(); int iColumn; for (iColumn=0;iColumngetColumnObjectiveAsString(iColumn); if (strcmp(expr,"Numeric")) { addString(numberRows,iColumn,expr); } CoinModelLink triple=model->firstInColumn(iColumn); while (triple.row()>=0) { int iRow = triple.row(); const char * expr = model->getElementAsString(iRow,iColumn); if (strcmp(expr,"Numeric")) { addString(iRow,iColumn,expr); } triple=model->next(triple); } } int iRow; for (iRow=0;iRowgetRowLowerAsString(iRow); const char * expr2 = model->getRowUpperAsString(iRow); if (strcmp(expr1,"Numeric")) { if (rowupper_[iRow]>1.0e20&&!strcmp(expr2,"Numeric")) { // G row addString(iRow,numberColumns,expr1); rowlower_[iRow]=STRING_VALUE; } else if (!strcmp(expr1,expr2)) { // E row addString(iRow,numberColumns,expr1); rowlower_[iRow]=STRING_VALUE; addString(iRow,numberColumns+1,expr1); rowupper_[iRow]=STRING_VALUE; } else if (rowlower_[iRow]<-1.0e20&&!strcmp(expr1,"Numeric")) { // L row addString(iRow,numberColumns+1,expr2); rowupper_[iRow]=STRING_VALUE; } else { // Range printf("Unaable to handle string ranges row %d %s %s\n", iRow,expr1,expr2); abort(); } } } // Bounds for (iColumn=0;iColumngetColumnLowerAsString(iColumn); if (strcmp(expr,"Numeric")) { addString(numberRows+1,iColumn,expr); collower_[iColumn]=STRING_VALUE; } expr = model->getColumnUpperAsString(iColumn); if (strcmp(expr,"Numeric")) { addString(numberRows+2,iColumn,expr); colupper_[iColumn]=STRING_VALUE; } } return numberStringElements_; } // Constructor CoinSet::CoinSet ( int numberEntries, const int * which) { numberEntries_ = numberEntries; which_ = new int [numberEntries_]; weights_ = NULL; memcpy(which_,which,numberEntries_*sizeof(int)); setType_=1; } // Default constructor CoinSet::CoinSet () { numberEntries_ = 0; which_ = NULL; weights_ = NULL; setType_=1; } // Copy constructor CoinSet::CoinSet (const CoinSet & rhs) { numberEntries_ = rhs.numberEntries_; setType_=rhs.setType_; which_ = CoinCopyOfArray(rhs.which_,numberEntries_); weights_ = CoinCopyOfArray(rhs.weights_,numberEntries_); } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- CoinSet & CoinSet::operator=(const CoinSet& rhs) { if (this != &rhs) { delete [] which_; delete [] weights_; numberEntries_ = rhs.numberEntries_; setType_=rhs.setType_; which_ = CoinCopyOfArray(rhs.which_,numberEntries_); weights_ = CoinCopyOfArray(rhs.weights_,numberEntries_); } return *this; } // Destructor CoinSet::~CoinSet ( ) { delete [] which_; delete [] weights_; } // Constructor CoinSosSet::CoinSosSet ( int numberEntries, const int * which, const double * weights, int type) : CoinSet(numberEntries,which) { weights_= new double [numberEntries_]; memcpy(weights_,weights,numberEntries_*sizeof(double)); setType_ = type; double last = weights_[0]; int i; bool allSame=true; for (i=1;i #include #include #include #include "CoinUtilsConfig.h" #include "CoinPragma.hpp" /** A function to block the popup windows that windows creates when the code crashes */ void WindowsErrorPopupBlocker(); //------------------------------------------------------------------- // // Error class used to throw exceptions // // Errors contain: // //------------------------------------------------------------------- /** Error Class thrown by an exception This class is used when exceptions are thrown. It contains:
  • message text
  • name of method throwing exception
  • name of class throwing exception or hint
  • name of file if assert
  • line number
For asserts class=> optional hint */ class CoinError { friend void CoinErrorUnitTest(); private: CoinError() : message_(), method_(), class_(), file_(), lineNumber_() { // nothing to do here } public: //------------------------------------------------------------------- // Get methods //------------------------------------------------------------------- /**@name Get error attributes */ //@{ /// get message text inline const std::string & message() const { return message_; } /// get name of method instantiating error inline const std::string & methodName() const { return method_; } /// get name of class instantiating error (or hint for assert) inline const std::string & className() const { return class_; } /// get name of file for assert inline const std::string & fileName() const { return file_; } /// get line number of assert (-1 if not assert) inline int lineNumber() const { return lineNumber_; } /// Just print (for asserts) inline void print(bool doPrint = true) const { if (! doPrint) return; if (lineNumber_<0) { std::cout< #include #include "CoinPresolveMatrix.hpp" #include "CoinPresolveFixed.hpp" #include "CoinPresolveDual.hpp" #include "CoinMessage.hpp" #include "CoinHelperFunctions.hpp" #include "CoinFloatEqual.hpp" /* Define PRESOLVE_DEBUG and PRESOLVE_CONSISTENCY as compile flags! If not uniformly on across all uses of presolve code you'll get something between garbage and a core dump. See comments in CoinPresolvePsdebug.hpp */ #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #include "CoinPresolvePsdebug.hpp" #endif /* Set to > 0 to enable bound propagation on dual variables? This has been disabled for a good while. See notes in code. #define PRESOLVE_TIGHTEN_DUALS 1 */ /* Guards incorrect code that attempts to adjust a column solution. See comments with the code. Could possibly be fixed, which is why it hasn't been chopped out. #define REMOVE_DUAL_ACTION_REPAIR_SOLN 1 */ /* In this transform we're looking to prove bounds on the duals y and reduced costs cbar. We can use this in two ways. First, if we can prove a bound on the reduced cost cbar with strict inequality, * cbar > 0 ==> x NBLB at optimality * cbar < 0 ==> x NBUB at optimality If the required bound is not finite, the problem is unbounded. Andersen & Andersen call this a dominated column. Second, suppose we can show that cbar = -y is strictly nonzero for the logical s associated with some inequality i. (There must be exactly one finite row bound, so that the logical has exactly one finite bound which is 0). If cbar demands the logical be nonbasic at bound, it's zero, and we can convert the inequality to an equality. Not based on duals and reduced costs, but in the same vein, if we can identify an architectural x that'll accomplish the same goal (bring one constraint tight when moved in a favourable direction), we can make that constraint an equality. The conditions are different, however: * Moving x in the favourable direction tightens exactly one constraint. * The bound (l or u) in the favourable direction is infinite. * If x is entangled in any other constraints, moving x in the favourable direction loosens those constraints. A bit of thought and linear algebra is required to convince yourself that in the circumstances, cbar = c, hence we need only look at c to determine the favourable direction. To get from bounds on the duals to bounds on the reduced costs, note that cbar = c - (SUM{P}ay + SUM{M}ay) for P = {a > 0} and M = {a < 0}. Then cbarmin = c - (SUM{P}aymax + SUM{M}aymin) cbarmax = c - (SUM{P}aymin + SUM{M}aymax) As A&A note, the reverse implication also holds: * if l = -infty, cbar <= 0 at optimality * if u = infty, cbar >= 0 at optimality We can use this to run bound propagation on the duals in an attempt to tighten bounds and force more reduced costs to strict inequality. Suppose u = infty. Then cbar >= 0. It must be possible to achieve this, so cbarmax >= 0: 0 <= c - (SUM{P}aymin + SUM{M}aymax) Solve for y, a > 0: y <= 1/a[c - (SUM{P\t}aymin + SUM{M}aymax)] If a < 0, y >= 1/a[c - (SUM{P}aymin + SUM{M\t}aymax)] For l = -infty, cbar <= 0, hence cbarmin <= 0: 0 >= c - (SUM{P}aymax + SUM{M}aymin) Solve for y, a > 0: y >= 1/a[c - (SUM{P\t}aymax + SUM{M}aymin)] If a < 0, y <= 1/a[c - (SUM{P}aymax + SUM{M\t}aymin)] We can get initial bounds on ymin and ymax from column singletons x, where cbar = c - ay If u = infty, then at optimality 0 <= cbar = c - ay For a > 0 we have y <= c/a and for a < 0 we have y >= c/a We can do a similar calculation for l = -infty, so that 0 >= cbar = c - ay For a > 0 we have y >= c/a and for a < 0 we have y <= c/a A logical is a column singleton with c = 0.0 and |a| = 1.0. One or both bounds can be finite, depending on constraint representation. This code is hardwired for minimisation. Extensive rework of the second part of the routine Fall 2011 to add a postsolve transform to fix bug #67, incorrect status for logicals. -- lh, 111208 -- */ /* Original comments from 040916: This routine looks to be something of a work in progress. Down in the bound propagation loop, why do we only work with variables with u_j = infty? The corresponding section of code for l_j = -infty is ifdef'd away. l = -infty is uncommon; perhaps it's not worth the effort? Why exclude the code protected by PRESOLVE_TIGHTEN_DUALS? Why are we using ekkinf instead of PRESOLVE_INF? */ const CoinPresolveAction *remove_dual_action::presolve (CoinPresolveMatrix *prob, const CoinPresolveAction *next) { # if PRESOLVE_DEBUG > 0 std::cout << "Entering remove_dual_action::presolve, " << prob->nrows_ << "x" << prob->ncols_ << "." << std::endl ; # endif # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 presolve_check_sol(prob,2,1,1) ; presolve_check_nbasic(prob) ; # endif # if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 int startEmptyRows = 0 ; int startEmptyColumns = 0 ; startEmptyRows = prob->countEmptyRows() ; startEmptyColumns = prob->countEmptyCols() ; # if COIN_PRESOLVE_TUNING > 0 double startTime = 0.0 ; if (prob->tuning_) startTime = CoinCpuTime() ; # endif # endif // column-major representation const int ncols = prob->ncols_ ; const CoinBigIndex *const mcstrt = prob->mcstrt_ ; const int *const hincol = prob->hincol_ ; const int *const hrow = prob->hrow_ ; const double *const colels = prob->colels_ ; const double *const cost = prob->cost_ ; // column type, bounds, solution, and status const unsigned char *const integerType = prob->integerType_ ; const double *const clo = prob->clo_ ; const double *const cup = prob->cup_ ; double *const csol = prob->sol_ ; unsigned char *&colstat = prob->colstat_ ; // row-major representation const int nrows = prob->nrows_ ; const CoinBigIndex *const mrstrt = prob->mrstrt_ ; const int *const hinrow = prob->hinrow_ ; const int *const hcol = prob->hcol_ ; # if REMOVE_DUAL_ACTION_REPAIR_SOLN > 0 const double *const rowels = prob->rowels_ ; # endif // row bounds double *const rlo = prob->rlo_ ; double *const rup = prob->rup_ ; // tolerances const double ekkinf2 = PRESOLVE_SMALL_INF ; const double ekkinf = ekkinf2*1.0e8 ; const double ztolcbarj = prob->ztoldj_ ; const CoinRelFltEq relEq(prob->ztolzb_) ; /* Grab one of the preallocated scratch arrays to hold min and max values of row duals. */ double *ymin = prob->usefulRowDouble_ ; double *ymax = ymin+nrows ; /* Initialise row dual min/max. The defaults are +/- infty, but if we know that the logical has no upper (lower) bound, it can only be nonbasic at the other bound. Given minimisation, we can conclude: * <= constraint ==> [0,infty] ==> NBLB ==> cbar > 0 ==> y < 0 * >= constraint ==> [-infty,0] ==> NBUB ==> cbar < 0 ==> y > 0 Range constraints are not helpful here, the dual can be either sign. There's no calculation because we assume the objective coefficient c = 0 and the coefficient a = 1.0, hence cbar = -y. */ for (int i = 0; i < nrows; i++) { const bool no_lb = (rup[i] >= ekkinf) ; const bool no_ub = (rlo[i] <= -ekkinf) ; ymin[i] = ((no_lb && !no_ub)?0.0:(-PRESOLVE_INF)) ; ymax[i] = ((no_ub && !no_lb)?0.0:PRESOLVE_INF) ; } /* We can do a similar calculation with singleton columns where the variable has only one finite bound, but we have to work a bit harder, as the cost coefficient c is not necessarily 0.0 and a is not necessarily 1.0. cbar = c - ya, hence y = c/a at cbar = 0. The question is whether this is an upper or lower bound on y. * x NBLB ==> cbar >= 0 a > 0 ==> increasing y decreases cbar ==> upper bound a < 0 ==> increasing y increases cbar ==> lower bound * x NBUB ==> cbar <= 0 a > 0 ==> increasing y decreases cbar ==> lower bound a < 0 ==> increasing y increases cbar ==> upper bound The condition below (simple test for equality to choose the bound) looks a bit odd, but a bit of boolean algebra should convince you it's correct. We have a bound; the only question is whether it's upper or lower. Skip integer variables; it's far too likely that we'll tighten infinite bounds elsewhere in presolve. NOTE: If bound propagation is applied to continuous variables, the same hazard will apply. -- lh, 110611 -- */ for (int j = 0 ; j < ncols ; j++) { if (integerType[j]) continue ; if (hincol[j] != 1) continue ; const bool no_ub = (cup[j] >= ekkinf) ; const bool no_lb = (clo[j] <= -ekkinf) ; if (no_ub != no_lb) { const int &i = hrow[mcstrt[j]] ; double aij = colels[mcstrt[j]] ; PRESOLVEASSERT(fabs(aij) > ZTOLDP) ; const double yzero = cost[j]/aij ; if ((aij > 0.0) == no_ub) { if (ymax[i] > yzero) ymax[i] = yzero ; } else { if (ymin[i] < yzero) ymin[i] = yzero ; } } } int nfixup_cols = 0 ; int nfixdown_cols = ncols ; // Grab another work array, sized to ncols_ int *fix_cols = prob->usefulColumnInt_ ; # if PRESOLVE_TIGHTEN_DUALS > 0 double *cbarmin = new double[ncols] ; double *cbarmax = new double[ncols] ; # endif /* Now we have (admittedly weak) bounds on the dual for each row. We can use these to calculate upper and lower bounds on cbar. Open loops to take multiple passes over all columns. */ int nPass = 0 ; while (nPass++ < 100) { int tightened = 0 ; for (int j = 0 ; j < ncols ; j++) { if (hincol[j] <= 0) continue ; /* Calculate min cbar and max cbar for the column by calculating the contribution to c-ya using ymin and ymax from above. */ const CoinBigIndex &kcs = mcstrt[j] ; const CoinBigIndex kce = kcs + hincol[j] ; // Number of infinite rows int nflagu = 0 ; int nflagl = 0 ; // Number of ordinary rows int nordu = 0 ; int nordl = 0 ; double cbarjmin = cost[j] ; double cbarjmax = cbarjmin ; for (CoinBigIndex k = kcs ; k < kce ; k++) { const int &i = hrow[k] ; const double &aij = colels[k] ; const double mindelta = aij*ymin[i] ; const double maxdelta = aij*ymax[i] ; if (aij > 0.0) { if (ymin[i] >= -ekkinf2) { cbarjmax -= mindelta ; nordu++ ; } else { nflagu++ ; } if (ymax[i] <= ekkinf2) { cbarjmin -= maxdelta ; nordl++ ; } else { nflagl++ ; } } else { if (ymax[i] <= ekkinf2) { cbarjmax -= maxdelta ; nordu++ ; } else { nflagu++ ; } if (ymin[i] >= -ekkinf2) { cbarjmin -= mindelta ; nordl++ ; } else { nflagl++ ; } } } /* See if we can tighten bounds on a dual y. See the comments at the head of the file for the linear algebra. At this point, I don't understand the restrictions on propagation. Neither are necessary. The net effect is to severely restrict the circumstances where we'll propagate. Requiring nflagu == 1 excludes the case where all duals have finite bounds (unlikely?). And why cbarjmax < -ztolcbarj? In any event, we're looking for the row that's contributing the infinity. If a > 0, the contribution is due to ymin and we tighten ymax; a < 0, ymax and ymin, respectively. The requirement cbarjmax < (ymax[i]*aij-ztolcbarj) ensures we don't propagate tiny changes. If we make a change, it will affect cbarjmin. Make the adjustment immediately. Continuous variables only. */ if (!integerType[j]) { if (cup[j] > ekkinf) { if (nflagu == 1 && cbarjmax < -ztolcbarj) { for (CoinBigIndex k = kcs ; k < kce; k++) { const int i = hrow[k] ; const double aij = colels[k] ; if (aij > 0.0 && ymin[i] < -ekkinf2) { if (cbarjmax < (ymax[i]*aij-ztolcbarj)) { const double newValue = cbarjmax/aij ; if (ymax[i] > ekkinf2 && newValue <= ekkinf2) { nflagl-- ; cbarjmin -= aij*newValue ; } else if (ymax[i] <= ekkinf2) { cbarjmin -= aij*(newValue-ymax[i]) ; } # if PRESOLVE_DEBUG > 1 std::cout << "NDUAL(infu/inf): u(" << j << ") = " << cup[j] << ": max y(" << i << ") was " << ymax[i] << " now " << newValue << "." << std::endl ; # endif ymax[i] = newValue ; tightened++ ; } } else if (aij < 0.0 && ymax[i] > ekkinf2) { if (cbarjmax < (ymin[i]*aij-ztolcbarj)) { const double newValue = cbarjmax/aij ; if (ymin[i] < -ekkinf2 && newValue >= -ekkinf2) { nflagl-- ; cbarjmin -= aij*newValue ; } else if (ymin[i] >= -ekkinf2) { cbarjmin -= aij*(newValue-ymin[i]) ; } # if PRESOLVE_DEBUG > 1 std::cout << "NDUAL(infu/inf): u(" << j << ") = " << cup[j] << ": min y(" << i << ") was " << ymin[i] << " now " << newValue << "." << std::endl ; # endif ymin[i] = newValue ; tightened++ ; // Huh? asymmetric // cbarjmin = 0.0 ; } } } } else if (nflagl == 0 && nordl == 1 && cbarjmin < -ztolcbarj) { /* This is a column singleton. Why are we doing this? It's not like changes to other y will affect this. */ for (CoinBigIndex k = kcs; k < kce; k++) { const int i = hrow[k] ; const double aij = colels[k] ; if (aij > 0.0) { # if PRESOLVE_DEBUG > 1 std::cout << "NDUAL(infu/sing): u(" << j << ") = " << cup[j] << ": max y(" << i << ") was " << ymax[i] << " now " << ymax[i]+cbarjmin/aij << "." << std::endl ; # endif ymax[i] += cbarjmin/aij ; cbarjmin = 0.0 ; tightened++ ; } else if (aij < 0.0 ) { # if PRESOLVE_DEBUG > 1 std::cout << "NDUAL(infu/sing): u(" << j << ") = " << cup[j] << ": min y(" << i << ") was " << ymin[i] << " now " << ymin[i]+cbarjmin/aij << "." << std::endl ; # endif ymin[i] += cbarjmin/aij ; cbarjmin = 0.0 ; tightened++ ; } } } } // end u = infty # if PROCESS_INFINITE_LB /* Unclear why this section is commented out, except for the possibility that bounds of -infty < x < something are rare and it likely suffered fromm the same errors. Consider the likelihood that this whole block needs to be edited to sway min/max, & similar. */ if (clo[j]<-ekkinf) { // cbarj can not be positive if (cbarjmin > ztolcbarj&&nflagl == 1) { // We can make bound finite one way for (CoinBigIndex k = kcs; k < kce; k++) { const int i = hrow[k] ; const double coeff = colels[k] ; if (coeff < 0.0&&ymin[i] < -ekkinf2) { // ymax[i] has upper bound if (cbarjmin>ymax[i]*coeff+ztolcbarj) { const double newValue = cbarjmin/coeff ; // re-compute hi if (ymax[i] > ekkinf2 && newValue <= ekkinf2) { nflagu-- ; cbarjmax -= coeff * newValue ; } else if (ymax[i] <= ekkinf2) { cbarjmax -= coeff * (newValue-ymax[i]) ; } ymax[i] = newValue ; tightened++ ; # if PRESOLVE_DEBUG > 1 printf("Col %d, row %d max pi now %g\n",j,i,ymax[i]) ; # endif } } else if (coeff > 0.0 && ymax[i] > ekkinf2) { // ymin[i] has lower bound if (cbarjmin>ymin[i]*coeff+ztolcbarj) { const double newValue = cbarjmin/coeff ; // re-compute lo if (ymin[i] < -ekkinf2 && newValue >= -ekkinf2) { nflagu-- ; cbarjmax -= coeff * newValue ; } else if (ymin[i] >= -ekkinf2) { cbarjmax -= coeff*(newValue-ymin[i]) ; } ymin[i] = newValue ; tightened++ ; # if PRESOLVE_DEBUG > 1 printf("Col %d, row %d min pi now %g\n",j,i,ymin[i]) ; # endif } } } } else if (nflagu == 0 && nordu == 1 && cbarjmax > ztolcbarj) { // We may be able to tighten for (CoinBigIndex k = kcs; k < kce; k++) { const int i = hrow[k] ; const double coeff = colels[k] ; if (coeff < 0.0) { ymax[i] += cbarjmax/coeff ; cbarjmax =0.0 ; tightened++ ; # if PRESOLVE_DEBUG > 1 printf("Col %d, row %d max pi now %g\n",j,i,ymax[i]) ; # endif } else if (coeff > 0.0 ) { ymin[i] += cbarjmax/coeff ; cbarjmax =0.0 ; tightened++ ; # if PRESOLVE_DEBUG > 1 printf("Col %d, row %d min pi now %g\n",j,i,ymin[i]) ; # endif } } } } // end l < -infty # endif // PROCESS_INFINITE_LB } /* That's the end of propagation of bounds for dual variables. */ # if PRESOLVE_TIGHTEN_DUALS > 0 cbarmin[j] = (nflagl?(-PRESOLVE_INF):cbarjmin) ; cbarmax[j] = (nflagu?PRESOLVE_INF:cbarjmax) ; # endif /* If cbarmin > 0 (strict inequality) then x NBLB at optimality. If l is -infinity, notify the user and set the status to unbounded. */ if (cbarjmin > ztolcbarj && nflagl == 0 && !prob->colProhibited2(j)) { if (clo[j] <= -ekkinf) { CoinMessageHandler *msghdlr = prob->messageHandler() ; msghdlr->message(COIN_PRESOLVE_COLUMNBOUNDB,prob->messages()) << j << CoinMessageEol ; prob->status_ |= 2 ; break ; } else { fix_cols[--nfixdown_cols] = j ; # if PRESOLVE_DEBUG > 1 std::cout << "NDUAL(fix l): fix x(" << j << ")" ; if (csol) std::cout << " = " << csol[j] ; std::cout << " at l(" << j << ") = " << clo[j] << "; cbar(" << j << ") > " << cbarjmin << "." << std::endl ; # endif if (csol) { # if REMOVE_DUAL_ACTION_REPAIR_SOLN > 0 /* Original comment: User may have given us feasible solution - move if simple Except it's not simple. The net result is that we end up with an excess of basic variables. Mark x NBLB and let the client recalculate the solution after establishing the basis. */ if (csol[j]-clo[j] > 1.0e-7 && hincol[j] == 1) { double value_j = colels[mcstrt[j]] ; double distance_j = csol[j]-clo[j] ; int row = hrow[mcstrt[j]] ; // See if another column can take value for (CoinBigIndex kk = mrstrt[row] ; kk < mrstrt[row]+hinrow[row] ; kk++) { const int k = hcol[kk] ; if (colstat[k] == CoinPrePostsolveMatrix::superBasic) continue ; if (hincol[k] == 1 && k != j) { const double value_k = rowels[kk] ; double movement ; if (value_k*value_j>0.0) { // k needs to increase double distance_k = cup[k]-csol[k] ; movement = CoinMin((distance_j*value_j)/value_k,distance_k) ; } else { // k needs to decrease double distance_k = clo[k]-csol[k] ; movement = CoinMax((distance_j*value_j)/value_k,distance_k) ; } if (relEq(movement,0)) continue ; csol[k] += movement ; if (relEq(csol[k],clo[k])) { colstat[k] = CoinPrePostsolveMatrix::atLowerBound ; } else if (relEq(csol[k],cup[k])) { colstat[k] = CoinPrePostsolveMatrix::atUpperBound ; } else if (colstat[k] != CoinPrePostsolveMatrix::isFree) { colstat[k] = CoinPrePostsolveMatrix::basic ; } printf("NDUAL: x<%d> moved %g to %g; ", k,movement,csol[k]) ; printf("lb = %g, ub = %g, status now %s.\n", clo[k],cup[k],columnStatusString(k)) ; distance_j -= (movement*value_k)/value_j ; csol[j] -= (movement*value_k)/value_j ; if (distance_j<1.0e-7) break ; } } } # endif // repair solution. csol[j] = clo[j] ; colstat[j] = CoinPrePostsolveMatrix::atLowerBound ; } } } else if (cbarjmax < -ztolcbarj && nflagu == 0 && !prob->colProhibited2(j)) { /* If cbarmax < 0 (strict inequality) then x NBUB at optimality. If u is infinity, notify the user and set the status to unbounded. */ if (cup[j] >= ekkinf) { CoinMessageHandler *msghdlr = prob->messageHandler() ; msghdlr->message(COIN_PRESOLVE_COLUMNBOUNDA,prob->messages()) << j << CoinMessageEol ; prob->status_ |= 2 ; break ; } else { fix_cols[nfixup_cols++] = j ; # if PRESOLVE_DEBUG > 1 std::cout << "NDUAL(fix u): fix x(" << j << ")" ; if (csol) std::cout << " = " << csol[j] ; std::cout << " at u(" << j << ") = " << cup[j] << "; cbar(" << j << ") < " << cbarjmax << "." << std::endl ; # endif if (csol) { # if 0 // See comments above for 'fix at lb'. if (cup[j]-csol[j] > 1.0e-7 && hincol[j] == 1) { double value_j = colels[mcstrt[j]] ; double distance_j = csol[j]-cup[j] ; int row = hrow[mcstrt[j]] ; // See if another column can take value for (CoinBigIndex kk = mrstrt[row] ; kk < mrstrt[row]+hinrow[row] ; kk++) { const int k = hcol[kk] ; if (colstat[k] == CoinPrePostsolveMatrix::superBasic) continue ; if (hincol[k] == 1 && k != j) { const double value_k = rowels[kk] ; double movement ; if (value_k*value_j<0.0) { // k needs to increase double distance_k = cup[k]-csol[k] ; movement = CoinMin((distance_j*value_j)/value_k,distance_k) ; } else { // k needs to decrease double distance_k = clo[k]-csol[k] ; movement = CoinMax((distance_j*value_j)/value_k,distance_k) ; } if (relEq(movement,0)) continue ; csol[k] += movement ; if (relEq(csol[k],clo[k])) { colstat[k] = CoinPrePostsolveMatrix::atLowerBound ; } else if (relEq(csol[k],cup[k])) { colstat[k] = CoinPrePostsolveMatrix::atUpperBound ; } else if (colstat[k] != CoinPrePostsolveMatrix::isFree) { colstat[k] = CoinPrePostsolveMatrix::basic ; } printf("NDUAL: x<%d> moved %g to %g; ", k,movement,csol[k]) ; printf("lb = %g, ub = %g, status now %s.\n", clo[k],cup[k],columnStatusString(k)) ; distance_j -= (movement*value_k)/value_j ; csol[j] -= (movement*value_k)/value_j ; if (distance_j>-1.0e-7) break ; } } } # endif csol[j] = cup[j] ; colstat[j] = CoinPrePostsolveMatrix::atUpperBound ; } } } // end cbar < 0 } /* That's the end of this walk through the columns. */ // I don't know why I stopped doing this. # if PRESOLVE_TIGHTEN_DUALS > 0 const double *rowels = prob->rowels_ ; const int *hcol = prob->hcol_ ; const CoinBigIndex *mrstrt = prob->mrstrt_ ; int *hinrow = prob->hinrow_ ; // tighten row dual bounds, as described on p. 229 for (int i = 0; i < nrows; i++) { const bool no_ub = (rup[i] >= ekkinf) ; const bool no_lb = (rlo[i] <= -ekkinf) ; if ((no_ub ^ no_lb) == true) { const CoinBigIndex krs = mrstrt[i] ; const CoinBigIndex kre = krs + hinrow[i] ; const double rmax = ymax[i] ; const double rmin = ymin[i] ; // all row columns are non-empty for (CoinBigIndex k = krs ; k < kre ; k++) { const double coeff = rowels[k] ; const int icol = hcol[k] ; const double cbarmax0 = cbarmax[icol] ; const double cbarmin0 = cbarmin[icol] ; if (no_ub) { // cbarj must not be negative if (coeff > ZTOLDP2 && cbarjmax0 < PRESOLVE_INF && cup[icol] >= ekkinf) { const double bnd = cbarjmax0 / coeff ; if (rmax > bnd) { # if PRESOLVE_DEBUG > 1 printf("MAX TIGHT[%d,%d]: %g --> %g\n",i,hrow[k],ymax[i],bnd) ; # endif ymax[i] = rmax = bnd ; tightened ++; ; } } else if (coeff < -ZTOLDP2 && cbarjmax0 = ekkinf) { const double bnd = cbarjmax0 / coeff ; if (rmin < bnd) { # if PRESOLVE_DEBUG > 1 printf("MIN TIGHT[%d,%d]: %g --> %g\n",i,hrow[k],ymin[i],bnd) ; # endif ymin[i] = rmin = bnd ; tightened ++; ; } } } else { // no_lb // cbarj must not be positive if (coeff > ZTOLDP2 && cbarmin0 > -PRESOLVE_INF && clo[icol] <= -ekkinf) { const double bnd = cbarmin0 / coeff ; if (rmin < bnd) { # if PRESOLVE_DEBUG > 1 printf("MIN1 TIGHT[%d,%d]: %g --> %g\n",i,hrow[k],ymin[i],bnd) ; # endif ymin[i] = rmin = bnd ; tightened ++; ; } } else if (coeff < -ZTOLDP2 && cbarmin0 > -PRESOLVE_INF && clo[icol] <= -ekkinf) { const double bnd = cbarmin0 / coeff ; if (rmax > bnd) { # if PRESOLVE_DEBUG > 1 printf("MAX TIGHT1[%d,%d]: %g --> %g\n",i,hrow[k],ymax[i],bnd) ; # endif ymax[i] = rmax = bnd ; tightened ++; ; } } } } } } # endif // PRESOLVE_TIGHTEN_DUALS /* Is it productive to continue with another pass? Essentially, we need lots of tightening but no fixing. If we fixed any variables, break and process them. */ # if PRESOLVE_DEBUG > 1 std::cout << "NDUAL: pass " << nPass << ": fixed " << (ncols-nfixdown_cols) << " down, " << nfixup_cols << " up, tightened " << tightened << " duals." << std::endl ; # endif if (tightened < 100 || nfixdown_cols < ncols || nfixup_cols) break ; } assert (nfixup_cols <= nfixdown_cols) ; /* Process columns fixed at upper bound. */ if (nfixup_cols) { # if PRESOLVE_DEBUG > 1 std::cout << "NDUAL(upper):" ; for (int k = 0 ; k < nfixup_cols ; k++) std::cout << " " << fix_cols[k] ; std::cout << "." << std::endl ; # endif next = make_fixed_action::presolve(prob,fix_cols,nfixup_cols,false,next) ; } /* Process columns fixed at lower bound. */ if (nfixdown_cols < ncols) { int *fixdown_cols = fix_cols+nfixdown_cols ; nfixdown_cols = ncols-nfixdown_cols ; # if PRESOLVE_DEBUG > 1 std::cout << "NDUAL(lower):" ; for (int k = 0 ; k < nfixdown_cols ; k++) std::cout << " " << fixdown_cols[k] ; std::cout << "." << std::endl ; # endif next = make_fixed_action::presolve(prob,fixdown_cols, nfixdown_cols,true,next) ; } /* Now look for variables that, when moved in the favourable direction according to reduced cost, will naturally tighten an inequality to an equality. We can convert that inequality to an equality. See the comments at the head of the routine. Start with logicals. Open a loop and look for suitable rows. At the end of this loop, rows marked with +/-1 will be forced to equality by their logical. Rows marked with +/-2 are inequalities that (perhaps) can be forced to equality using architecturals. Rows marked with 0 are not suitable (range or nonbinding). Note that usefulRowInt_ is 3*nrows_; we'll use the second partition below. */ int *canFix = prob->usefulRowInt_ ; for (int i = 0 ; i < nrows ; i++) { const bool no_rlb = (rlo[i] <= -ekkinf) ; const bool no_rub = (rup[i] >= ekkinf) ; canFix[i] = 0 ; if (no_rub && !no_rlb ) { if (ymin[i] > 0.0) canFix[i] = -1 ; else canFix[i] = -2 ; } else if (no_rlb && !no_rub ) { if (ymax[i] < 0.0) canFix[i] = 1 ; else canFix[i] = 2 ; } # if PRESOLVE_DEBUG > 1 if (abs(canFix[i]) == 1) { std::cout << "NDUAL(eq): candidate row (" << i << ") (" << rlo[i] << "," << rup[i] << "), logical must be " << ((canFix[i] == -1)?"NBUB":"NBLB") << "." << std::endl ; } # endif } /* Can we do a similar trick with architectural variables? Here, we're looking for x such that (1) Exactly one of l or u is infinite. (2) Moving x towards the infinite bound can tighten exactly one constraint i to equality. If x is entangled with other constraints, moving x towards the infinite bound will loosen those constraints. (3) Moving x towards the infinite bound is a good idea according to the cost c (note we don't have to consider reduced cost here). If we can find a suitable x, constraint i can become an equality. This is yet another instance of bound propagation, but we're looking for a very specific pattern: A variable that can be increased arbitrarily in all rows it's entangled with, except for one, which bounds it. And we're going to push the variable so as to make that row an equality. But note what we're *not* doing: No actual comparison of finite bound values to the amount necessary to force an equality. So no worries about accuracy, the bane of bound propagation. Open a loop to scan columns. bindingUp and bindingDown indicate the result of the analysis; -1 says `possible', -2 is ruled out. Test first for condition (1). Column singletons are presumably handled elsewhere. Integer variables need not apply. If both bounds are finite, no need to look further. */ for (int j = 0 ; j < ncols ; j++) { if (hincol[j] <= 1) continue ; if (integerType[j]) continue ; int bindingUp = -1 ; int bindingDown = -1 ; if (cup[j] < ekkinf) bindingUp = -2 ; if (clo[j] > -ekkinf) bindingDown = -2 ; if (bindingUp == -2 && bindingDown == -2) continue ; /* Open a loop to walk the column and check for condition (2). The test for |canFix[i]| != 2 is a non-interference check. We don't want to mess with constraints where we've already decided to use the logical to force equality. Nor do we want to deal with range or nonbinding constraints. */ const CoinBigIndex &kcs = mcstrt[j] ; const CoinBigIndex kce = kcs+hincol[j] ; for (CoinBigIndex k = kcs; k < kce; k++) { const int &i = hrow[k] ; if (abs(canFix[i]) != 2) { bindingUp = -2 ; bindingDown = -2 ; break ; } double aij = colels[k] ; /* For a > 0 in a <= constraint (canFix = 2), the up direction is binding. For a >= constraint, it'll be the down direction. If the relevant binding code is still -1, set it to the index of the row. Similarly for a < 0. If this is the second or subsequent binding constraint in that direction, set binding[Up,Down] to -2 (we don't want to get into the business of calculating which constraint is actually binding). */ if (aij > 0.0) { if (canFix[i] == 2) { if (bindingUp == -1) bindingUp = i ; else bindingUp = -2 ; } else { if (bindingDown == -1) bindingDown = i ; else bindingDown = -2 ; } } else { if (canFix[i] == 2) { if (bindingDown == -1) bindingDown = i ; else bindingDown = -2 ; } else { if (bindingUp == -1) bindingUp = i ; else bindingUp = -2 ; } } } if (bindingUp == -2 && bindingDown == -2) continue ; /* If bindingUp > -2, then either no constraint provided a bound (-1) or there's a single constraint (0 <= i < m) that bounds x. If we have just one binding constraint, check that the reduced cost is favourable (c <= 0 for x NBUB at optimum for minimisation). If so, declare that we will force the row to equality (canFix[i] = +/-1). Note that we don't adjust the primal solution value for x. If no constraint provided a bound, we might be headed for unboundedness, but leave that for some other code to determine. */ double cj = cost[j] ; if (bindingUp > -2 && cj <= 0.0) { if (bindingUp >= 0) { canFix[bindingUp] /= 2 ; # if PRESOLVE_DEBUG > 1 std::cout << "NDUAL(eq): candidate row (" << bindingUp << ") (" << rlo[bindingUp] << "," << rup[bindingUp] << "), " << " increasing x(" << j << "), cbar = " << cj << "." << std::endl ; } else { std::cout << "NDUAL(eq): no binding upper bound for x(" << j << "), cbar = " << cj << "." << std::endl ; # endif } } else if (bindingDown > -2 && cj >= 0.0) { if (bindingDown >= 0) { canFix[bindingDown] /= 2 ; # if PRESOLVE_DEBUG > 1 std::cout << "NDUAL(eq): candidate row (" << bindingDown << ") (" << rlo[bindingDown] << "," << rup[bindingDown] << "), " << " decreasing x(" << j << "), cbar = " << cj << "." << std::endl ; } else { std::cout << "NDUAL(eq): no binding lower bound for x(" << j << "), cbar = " << cj << "." << std::endl ; # endif } } } /* We have candidate rows. We've avoided scanning full rows until now, but there's one remaining hazard: if the row contains unfixed integer variables then we don't want to just pin the row to a fixed rhs; that might prevent us from achieving integrality. Scan canFix, count and record suitable rows (use the second partition of usefulRowInt_). */ # if PRESOLVE_DEBUG > 0 int makeEqCandCnt = 0 ; for (int i = 0 ; i < nrows ; i++) { if (abs(canFix[i]) == 1) makeEqCandCnt++ ; } # endif int makeEqCnt = nrows ; for (int i = 0 ; i < nrows ; i++) { if (abs(canFix[i]) == 1) { const CoinBigIndex &krs = mrstrt[i] ; const CoinBigIndex kre = krs+hinrow[i] ; for (CoinBigIndex k = krs ; k < kre ; k++) { const int j = hcol[k] ; if (cup[j] > clo[j] && (integerType[j]||prob->colProhibited2(j))) { canFix[i] = 0 ; # if PRESOLVE_DEBUG > 1 std::cout << "NDUAL(eq): cannot convert row " << i << " to equality; " << "unfixed integer variable x(" << j << ")." << std::endl ; # endif break ; } } if (canFix[i] != 0) canFix[makeEqCnt++] = i ; } } makeEqCnt -= nrows ; # if PRESOLVE_DEBUG > 0 if ((makeEqCandCnt-makeEqCnt) > 0) { std::cout << "NDUAL(eq): rejected " << (makeEqCandCnt-makeEqCnt) << " rows due to unfixed integer variables." << std::endl ; } # endif /* If we've identified inequalities to convert, do the conversion, record the information needed to restore bounds in postsolve, and finally create the postsolve object. */ if (makeEqCnt > 0) { action *bndRecords = new action[makeEqCnt] ; for (int k = 0 ; k < makeEqCnt ; k++) { const int &i = canFix[k+nrows] ; # if PRESOLVE_DEBUG > 1 std::cout << "NDUAL(eq): forcing row " << i << " to equality;" ; if (canFix[i] == -1) std::cout << " dropping b = " << rup[i] << " to " << rlo[i] ; else std::cout << " raising blow = " << rlo[i] << " to " << rup[i] ; std::cout << "." << std::endl ; # endif action &bndRec = bndRecords[(k)] ; bndRec.rlo_ = rlo[i] ; bndRec.rup_ = rup[i] ; bndRec.ndx_ = i ; if (canFix[i] == 1) { rlo[i] = rup[i] ; prob->addRow(i) ; } else if (canFix[i] == -1) { rup[i] = rlo[i] ; prob->addRow(i) ; } } next = new remove_dual_action(makeEqCnt,bndRecords,next) ; } # if PRESOLVE_TIGHTEN_DUALS > 0 delete[] cbarmin ; delete[] cbarmax ; # endif # if COIN_PRESOLVE_TUNING > 0 double thisTime = 0.0 ; if (prob->tuning_) thisTime = CoinCpuTime() ; # endif # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 presolve_check_sol(prob,2,1,1) ; presolve_check_nbasic(prob) ; # endif # if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 int droppedRows = prob->countEmptyRows()-startEmptyRows ; int droppedColumns = prob->countEmptyCols()-startEmptyColumns ; std::cout << "Leaving remove_dual_action::presolve, dropped " << droppedRows << " rows, " << droppedColumns << " columns, forced " << makeEqCnt << " equalities" ; # if COIN_PRESOLVE_TUNING > 0 if (prob->tuning_) std::cout << " in " << (thisTime-prob->startTime_) << "s" ; # endif std::cout << "." << std::endl ; # endif return (next) ; } /* Postsolve: replace the original row bounds. The catch here is that each constraint was an equality in the presolved problem, with a logical s that had l = u = 0. We're about to convert the equality back to an inequality. One row bound will go to infinity, as will one of the bounds of the logical. We may need to patch the basis. The logical for a <= constraint cannot be NBUB, and the logical for a >= constraint cannot be NBLB. */ void remove_dual_action::postsolve (CoinPostsolveMatrix *prob) const { const action *const &bndRecords = actions_ ; const int &numRecs = nactions_ ; double *&rlo = prob->rlo_ ; double *&rup = prob->rup_ ; unsigned char *&rowstat = prob->rowstat_ ; # if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 # if PRESOLVE_DEBUG > 0 std::cout << "Entering remove_dual_action::postsolve, " << numRecs << " bounds to restore." << std::endl ; # endif presolve_check_threads(prob) ; presolve_check_sol(prob,2,2,2) ; presolve_check_nbasic(prob) ; # endif /* For each record, restore the row bounds. If we have status arrays, check the status of the logical and adjust if necessary. In spite of the fact that the status array is an unsigned char array, we still need to use getRowStatus to make sure we're only looking at the bottom three bits. Why is this an issue? Because the status array isn't necessarily cleared to zeros, and setRowStatus carefully changes only the bottom three bits! */ for (int k = 0 ; k < numRecs ; k++) { const action &bndRec = bndRecords[k] ; const int &i = bndRec.ndx_ ; const double &rloi = bndRec.rlo_ ; const double &rupi = bndRec.rup_ ; # if PRESOLVE_DEBUG > 1 std::cout << "NDUAL(eq): row(" << i << ")" ; if (rlo[i] != rloi) std::cout << " LB " << rlo[i] << " -> " << rloi ; if (rup[i] != rupi) std::cout << " UB " << rup[i] << " -> " << rupi ; # endif rlo[i] = rloi ; rup[i] = rupi ; if (rowstat) { unsigned char stati = prob->getRowStatus(i) ; if (stati == CoinPresolveMatrix::atUpperBound) { if (rloi <= -PRESOLVE_INF) { rowstat[i] = CoinPresolveMatrix::atLowerBound ; # if PRESOLVE_DEBUG > 1 std::cout << ", status forced to " << statusName(static_cast(rowstat[i])) ; # endif } } else if (stati == CoinPresolveMatrix::atLowerBound) { if (rupi >= PRESOLVE_INF) { rowstat[i] = CoinPresolveMatrix::atUpperBound ; # if PRESOLVE_DEBUG > 1 std::cout << ", status forced to " << statusName(static_cast(rowstat[i])) ; # endif } } # if PRESOLVE_DEBUG > 2 else if (stati == CoinPresolveMatrix::basic) { std::cout << ", status is basic." ; } else if (stati == CoinPresolveMatrix::isFree) { std::cout << ", status is free?!" ; } else { unsigned int tmp = static_cast(stati) ; std::cout << ", status is invalid (" << tmp << ")!" ; } # endif } # if PRESOLVE_DEBUG > 1 std::cout << "." << std::endl ; # endif } # if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 presolve_check_threads(prob) ; presolve_check_sol(prob,2,2,2) ; presolve_check_nbasic(prob) ; # if PRESOLVE_DEBUG > 0 std::cout << "Leaving remove_dual_action::postsolve." << std::endl ; # endif # endif return ; } /* Destructor */ remove_dual_action::~remove_dual_action () { deleteAction(actions_,action*) ; } CoinUtils-2.9.10/CoinUtils/src/CoinIndexedVector.hpp0000644000076600007660000011540012044253514020760 0ustar coincoin/* $Id: CoinIndexedVector.hpp 1554 2012-10-31 16:52:28Z forrest $ */ // 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 CoinIndexedVector_H #define CoinIndexedVector_H #if defined(_MSC_VER) // Turn off compiler warning about long names # pragma warning(disable:4786) #endif #include #include "CoinFinite.hpp" #ifndef CLP_NO_VECTOR #include "CoinPackedVectorBase.hpp" #endif #include "CoinSort.hpp" #include "CoinHelperFunctions.hpp" #include #ifndef COIN_FLOAT #define COIN_INDEXED_TINY_ELEMENT 1.0e-50 #define COIN_INDEXED_REALLY_TINY_ELEMENT 1.0e-100 #else #define COIN_INDEXED_TINY_ELEMENT 1.0e-35 #define COIN_INDEXED_REALLY_TINY_ELEMENT 1.0e-39 #endif /** Indexed Vector This stores values unpacked but apart from that is a bit like CoinPackedVector. It is designed to be lightweight in normal use. It now has a "packed" mode when it is even more like CoinPackedVector Indices array has capacity_ extra chars which are zeroed and can be used for any purpose - but must be re-zeroed Stores vector of indices and associated element values. Supports sorting of indices. Does not support negative indices. Does NOT support testing for duplicates *** getElements is no longer supported Here is a sample usage: @verbatim const int ne = 4; int inx[ne] = { 1, 4, 0, 2 } double el[ne] = { 10., 40., 1., 50. } // Create vector and set its valuex1 CoinIndexedVector r(ne,inx,el); // access as a full storage vector assert( r[ 0]==1. ); assert( r[ 1]==10.); assert( r[ 2]==50.); assert( r[ 3]==0. ); assert( r[ 4]==40.); // sort Elements in increasing order r.sortIncrElement(); // access each index and element assert( r.getIndices ()[0]== 0 ); assert( r.getIndices ()[1]== 1 ); assert( r.getIndices ()[2]== 4 ); assert( r.getIndices ()[3]== 2 ); // access as a full storage vector assert( r[ 0]==1. ); assert( r[ 1]==10.); assert( r[ 2]==50.); assert( r[ 3]==0. ); assert( r[ 4]==40.); // Tests for equality and equivalence CoinIndexedVector r1; r1=r; assert( r==r1 ); assert( r.equivalent(r1) ); r.sortIncrElement(); assert( r!=r1 ); assert( r.equivalent(r1) ); // Add indexed vectors. // Similarly for subtraction, multiplication, // and division. CoinIndexedVector add = r + r1; assert( add[0] == 1.+ 1. ); assert( add[1] == 10.+10. ); assert( add[2] == 50.+50. ); assert( add[3] == 0.+ 0. ); assert( add[4] == 40.+40. ); assert( r.sum() == 10.+40.+1.+50. ); @endverbatim */ class CoinIndexedVector { friend void CoinIndexedVectorUnitTest(); public: /**@name Get methods. */ //@{ /// Get the size inline int getNumElements() const { return nElements_; } /// Get indices of elements inline const int * getIndices() const { return indices_; } /// Get element values // ** No longer supported virtual const double * getElements() const ; /// Get indices of elements inline int * getIndices() { return indices_; } /** Get the vector as a dense vector. This is normal storage method. The user should not not delete [] this. */ inline double * denseVector() const { return elements_; } /// For very temporary use when user needs to borrow a dense vector inline void setDenseVector(double * array) { elements_ = array;} /// For very temporary use when user needs to borrow an index vector inline void setIndexVector(int * array) { indices_ = array;} /** Access the i'th element of the full storage vector. */ double & operator[](int i) const; //@} //------------------------------------------------------------------- // Set indices and elements //------------------------------------------------------------------- /**@name Set methods */ //@{ /// Set the size inline void setNumElements(int value) { nElements_ = value; if (!nElements_) packedMode_=false;} /// Reset the vector (as if were just created an empty vector). This leaves arrays! void clear(); /// Reset the vector (as if were just created an empty vector) void empty(); /** Assignment operator. */ CoinIndexedVector & operator=(const CoinIndexedVector &); #ifndef CLP_NO_VECTOR /** Assignment operator from a CoinPackedVectorBase.
NOTE: This assumes no duplicates */ CoinIndexedVector & operator=(const CoinPackedVectorBase & rhs); #endif /** Copy the contents of one vector into another. If multiplier is 1 It is the equivalent of = but if vectors are same size does not re-allocate memory just clears and copies */ void copy(const CoinIndexedVector & rhs, double multiplier=1.0); /** Borrow ownership of the arguments to this vector. Size is the length of the unpacked elements vector. */ void borrowVector(int size, int numberIndices, int* inds, double* elems); /** Return ownership of the arguments to this vector. State after is empty . */ void returnVector(); /** Set vector numberIndices, indices, and elements. NumberIndices is the length of both the indices and elements vectors. The indices and elements vectors are copied into this class instance's member data. Assumed to have no duplicates */ void setVector(int numberIndices, const int * inds, const double * elems); /** Set vector size, indices, and elements. Size is the length of the unpacked elements vector. The indices and elements vectors are copied into this class instance's member data. We do not check for duplicate indices */ void setVector(int size, int numberIndices, const int * inds, const double * elems); /** Elements set to have the same scalar value */ void setConstant(int size, const int * inds, double elems); /** Indices are not specified and are taken to be 0,1,...,size-1 */ void setFull(int size, const double * elems); /** Set an existing element in the indexed vector The first argument is the "index" into the elements() array */ void setElement(int index, double element); /// Insert an element into the vector void insert(int index, double element); /// Insert a nonzero element into the vector inline void quickInsert(int index, double element) { assert (!elements_[index]); indices_[nElements_++] = index; assert (nElements_<=capacity_); elements_[index] = element; } /** Insert or if exists add an element into the vector Any resulting zero elements will be made tiny */ void add(int index, double element); /** Insert or if exists add an element into the vector Any resulting zero elements will be made tiny. This version does no checking */ inline void quickAdd(int index, double element) { if (elements_[index]) { element += elements_[index]; if ((element > 0 ? element : -element) >= COIN_INDEXED_TINY_ELEMENT) { elements_[index] = element; } else { elements_[index] = 1.0e-100; } } else if ((element > 0 ? element : -element) >= COIN_INDEXED_TINY_ELEMENT) { indices_[nElements_++] = index; assert (nElements_<=capacity_); elements_[index] = element; } } /** Insert or if exists add an element into the vector Any resulting zero elements will be made tiny. This knows element is nonzero This version does no checking */ inline void quickAddNonZero(int index, double element) { assert (element); if (elements_[index]) { element += elements_[index]; if ((element > 0 ? element : -element) >= COIN_INDEXED_TINY_ELEMENT) { elements_[index] = element; } else { elements_[index] = COIN_DBL_MIN; } } else { indices_[nElements_++] = index; assert (nElements_<=capacity_); elements_[index] = element; } } /** Makes nonzero tiny. This version does no checking */ inline void zero(int index) { if (elements_[index]) elements_[index] = COIN_DBL_MIN; } /** set all small values to zero and return number remaining - < tolerance => 0.0 */ int clean(double tolerance); /// Same but packs down int cleanAndPack(double tolerance); /// Same but packs down and is safe (i.e. if order is odd) int cleanAndPackSafe(double tolerance); /// Mark as packed inline void setPacked() { packedMode_ = true;} #ifndef NDEBUG /// For debug check vector is clear i.e. no elements void checkClear(); /// For debug check vector is clean i.e. elements match indices void checkClean(); #else inline void checkClear() {}; inline void checkClean() {}; #endif /// Scan dense region and set up indices (returns number found) int scan(); /** Scan dense region from start to < end and set up indices returns number found */ int scan(int start, int end); /** Scan dense region and set up indices (returns number found). Only ones >= tolerance */ int scan(double tolerance); /** Scan dense region from start to < end and set up indices returns number found. Only >= tolerance */ int scan(int start, int end, double tolerance); /// These are same but pack down int scanAndPack(); int scanAndPack(int start, int end); int scanAndPack(double tolerance); int scanAndPack(int start, int end, double tolerance); /// Create packed array void createPacked(int number, const int * indices, const double * elements); /// Create unpacked array void createUnpacked(int number, const int * indices, const double * elements); /// Create unpacked singleton void createOneUnpackedElement(int index, double element); /// This is mainly for testing - goes from packed to indexed void expand(); #ifndef CLP_NO_VECTOR /// Append a CoinPackedVector to the end void append(const CoinPackedVectorBase & caboose); #endif /// Append a CoinIndexedVector to the end (with extra space) void append(const CoinIndexedVector & caboose); /// Append a CoinIndexedVector to the end and modify indices void append(CoinIndexedVector & other,int adjustIndex,bool zapElements=false); /// Swap values in positions i and j of indices and elements void swap(int i, int j); /// Throw away all entries in rows >= newSize void truncate(int newSize); /// Print out void print() const; //@} /**@name Arithmetic operators. */ //@{ /// add value to every entry void operator+=(double value); /// subtract value from every entry void operator-=(double value); /// multiply every entry by value void operator*=(double value); /// divide every entry by value (** 0 vanishes) void operator/=(double value); //@} /**@name Comparison operators on two indexed vectors */ //@{ #ifndef CLP_NO_VECTOR /** Equal. Returns true if vectors have same length and corresponding element of each vector is equal. */ bool operator==(const CoinPackedVectorBase & rhs) const; /// Not equal bool operator!=(const CoinPackedVectorBase & rhs) const; #endif /** Equal. Returns true if vectors have same length and corresponding element of each vector is equal. */ bool operator==(const CoinIndexedVector & rhs) const; /// Not equal bool operator!=(const CoinIndexedVector & rhs) const; /// Equal with a tolerance (returns -1 or position of inequality). int isApproximatelyEqual(const CoinIndexedVector & rhs, double tolerance=1.0e-8) const; //@} /**@name Index methods */ //@{ /// Get value of maximum index int getMaxIndex() const; /// Get value of minimum index int getMinIndex() const; //@} /**@name Sorting */ //@{ /** Sort the indexed storage vector (increasing indices). */ void sort() { std::sort(indices_,indices_+nElements_); } void sortIncrIndex() { std::sort(indices_,indices_+nElements_); } void sortDecrIndex(); void sortIncrElement(); void sortDecrElement(); void sortPacked(); //@} //############################################################################# /**@name Arithmetic operators on packed vectors. NOTE: These methods operate on those positions where at least one of the arguments has a value listed. At those positions the appropriate operation is executed, Otherwise the result of the operation is considered 0.
NOTE 2: Because these methods return an object (they can't return a reference, though they could return a pointer...) they are very inefficient... */ //@{ /// Return the sum of two indexed vectors CoinIndexedVector operator+( const CoinIndexedVector& op2); /// Return the difference of two indexed vectors CoinIndexedVector operator-( const CoinIndexedVector& op2); /// Return the element-wise product of two indexed vectors CoinIndexedVector operator*( const CoinIndexedVector& op2); /// Return the element-wise ratio of two indexed vectors (0.0/0.0 => 0.0) (0 vanishes) CoinIndexedVector operator/( const CoinIndexedVector& op2); /// The sum of two indexed vectors void operator+=(const CoinIndexedVector& op2); /// The difference of two indexed vectors void operator-=( const CoinIndexedVector& op2); /// The element-wise product of two indexed vectors void operator*=(const CoinIndexedVector& op2); /// The element-wise ratio of two indexed vectors (0.0/0.0 => 0.0) (0 vanishes) void operator/=(const CoinIndexedVector& op2); //@} /**@name Memory usage */ //@{ /** Reserve space. If one knows the eventual size of the indexed vector, then it may be more efficient to reserve the space. */ void reserve(int n); /** capacity returns the size which could be accomodated without having to reallocate storage. */ int capacity() const { return capacity_; } /// Sets packed mode inline void setPackedMode(bool yesNo) { packedMode_=yesNo;} /// Gets packed mode inline bool packedMode() const { return packedMode_;} //@} /**@name Constructors and destructors */ //@{ /** Default constructor */ CoinIndexedVector(); /** Alternate Constructors - set elements to vector of doubles */ CoinIndexedVector(int size, const int * inds, const double * elems); /** Alternate Constructors - set elements to same scalar value */ CoinIndexedVector(int size, const int * inds, double element); /** Alternate Constructors - construct full storage with indices 0 through size-1. */ CoinIndexedVector(int size, const double * elements); /** Alternate Constructors - just size */ CoinIndexedVector(int size); /** Copy constructor. */ CoinIndexedVector(const CoinIndexedVector &); /** Copy constructor.2 */ CoinIndexedVector(const CoinIndexedVector *); #ifndef CLP_NO_VECTOR /** Copy constructor from a PackedVectorBase. */ CoinIndexedVector(const CoinPackedVectorBase & rhs); #endif /** Destructor */ ~CoinIndexedVector (); //@} private: /**@name Private methods */ //@{ /// Copy internal data void gutsOfSetVector(int size, const int * inds, const double * elems); void gutsOfSetVector(int size, int numberIndices, const int * inds, const double * elems); void gutsOfSetPackedVector(int size, int numberIndices, const int * inds, const double * elems); /// void gutsOfSetConstant(int size, const int * inds, double value); //@} protected: /**@name Private member data */ //@{ /// Vector indices int * indices_; ///Vector elements double * elements_; /// Size of indices and packed elements vectors int nElements_; /// Amount of memory allocated for indices_, and elements_. int capacity_; /// Offset to get where new allocated array int offset_; /// If true then is operating in packed mode bool packedMode_; //@} }; //############################################################################# /** A function that tests the methods in the CoinIndexedVector class. The only reason for it not to be a member method is that this way it doesn't have to be compiled into the library. And that's a gain, because the library should be compiled with optimization on, but this method should be compiled with debugging. */ void CoinIndexedVectorUnitTest(); /** Pointer with length in bytes This has a pointer to an array and the number of bytes in array. If number of bytes==-1 then CoinConditionalNew deletes existing pointer and returns new pointer of correct size (and number bytes still -1). CoinConditionalDelete deletes existing pointer and NULLs it. So behavior is as normal (apart from New deleting pointer which will have no effect with good coding practices. If number of bytes >=0 then CoinConditionalNew just returns existing pointer if array big enough otherwise deletes existing pointer, allocates array with spare 1%+64 bytes and updates number of bytes CoinConditionalDelete sets number of bytes = -size-2 and then array returns NULL */ class CoinArrayWithLength { public: /**@name Get methods. */ //@{ /// Get the size inline int getSize() const { return size_; } /// Get the size inline int rawSize() const { return size_; } /// See if persistence already on inline bool switchedOn() const { return size_!=-1; } /// Get the capacity (just read it) inline int capacity() const { return (size_>-2) ? size_ : (-size_)-2; } /// Set the capacity to >=0 if <=-2 inline void setCapacity() { if (size_<=-2) size_ = (-size_)-2; } /// Get Array inline const char * array() const { return (size_>-2) ? array_ : NULL; } //@} /**@name Set methods */ //@{ /// Set the size inline void setSize(int value) { size_ = value; } /// Set the size to -1 inline void switchOff() { size_ = -1; } /// Set the size to -2 and alignment inline void switchOn(int alignment=3) { size_ = -2; alignment_=alignment;} /// Does what is needed to set persistence void setPersistence(int flag,int currentLength); /// Zero out array void clear(); /// Swaps memory between two members void swap(CoinArrayWithLength & other); /// Extend a persistent array keeping data (size in bytes) void extend(int newSize); //@} /**@name Condition methods */ //@{ /// Conditionally gets new array char * conditionalNew(long sizeWanted); /// Conditionally deletes void conditionalDelete(); //@} /**@name Constructors and destructors */ //@{ /** Default constructor - NULL*/ inline CoinArrayWithLength() : array_(NULL),size_(-1),offset_(0),alignment_(0) { } /** Alternate Constructor - length in bytes - size_ -1 */ inline CoinArrayWithLength(int size) : size_(-1),offset_(0),alignment_(0) { array_=new char [size];} /** Alternate Constructor - length in bytes mode - 0 size_ set to size mode>0 size_ set to size and zeroed if size<=0 just does alignment If abs(mode) >2 then align on that as power of 2 */ CoinArrayWithLength(int size, int mode); /** Copy constructor. */ CoinArrayWithLength(const CoinArrayWithLength & rhs); /** Copy constructor.2 */ CoinArrayWithLength(const CoinArrayWithLength * rhs); /** Assignment operator. */ CoinArrayWithLength& operator=(const CoinArrayWithLength & rhs); /** Assignment with length (if -1 use internal length) */ void copy(const CoinArrayWithLength & rhs, int numberBytes=-1); /** Assignment with length - does not copy */ void allocate(const CoinArrayWithLength & rhs, int numberBytes); /** Destructor */ ~CoinArrayWithLength (); /// Get array with alignment void getArray(int size); /// Really get rid of array with alignment void reallyFreeArray(); /// Get enough space (if more needed then do at least needed) void getCapacity(int numberBytes,int numberIfNeeded=-1); //@} protected: /**@name Private member data */ //@{ /// Array char * array_; /// Size of array in bytes CoinBigIndex size_; /// Offset of array int offset_; /// Alignment wanted (power of 2) int alignment_; //@} }; /// double * version class CoinDoubleArrayWithLength : public CoinArrayWithLength { public: /**@name Get methods. */ //@{ /// Get the size inline int getSize() const { return size_/CoinSizeofAsInt(double); } /// Get Array inline double * array() const { return reinterpret_cast ((size_>-2) ? array_ : NULL); } //@} /**@name Set methods */ //@{ /// Set the size inline void setSize(int value) { size_ = value*CoinSizeofAsInt(double); } //@} /**@name Condition methods */ //@{ /// Conditionally gets new array inline double * conditionalNew(int sizeWanted) { return reinterpret_cast ( CoinArrayWithLength::conditionalNew(sizeWanted>=0 ? static_cast ((sizeWanted)*CoinSizeofAsInt(double)) : -1)); } //@} /**@name Constructors and destructors */ //@{ /** Default constructor - NULL*/ inline CoinDoubleArrayWithLength() { array_=NULL; size_=-1;} /** Alternate Constructor - length in bytes - size_ -1 */ inline CoinDoubleArrayWithLength(int size) { array_=new char [size*CoinSizeofAsInt(double)]; size_=-1;} /** Alternate Constructor - length in bytes mode - 0 size_ set to size 1 size_ set to size and zeroed */ inline CoinDoubleArrayWithLength(int size, int mode) : CoinArrayWithLength(size*CoinSizeofAsInt(double),mode) {} /** Copy constructor. */ inline CoinDoubleArrayWithLength(const CoinDoubleArrayWithLength & rhs) : CoinArrayWithLength(rhs) {} /** Copy constructor.2 */ inline CoinDoubleArrayWithLength(const CoinDoubleArrayWithLength * rhs) : CoinArrayWithLength(rhs) {} /** Assignment operator. */ inline CoinDoubleArrayWithLength& operator=(const CoinDoubleArrayWithLength & rhs) { CoinArrayWithLength::operator=(rhs); return *this;} //@} }; /// CoinFactorizationDouble * version class CoinFactorizationDoubleArrayWithLength : public CoinArrayWithLength { public: /**@name Get methods. */ //@{ /// Get the size inline int getSize() const { return size_/CoinSizeofAsInt(CoinFactorizationDouble); } /// Get Array inline CoinFactorizationDouble * array() const { return reinterpret_cast ((size_>-2) ? array_ : NULL); } //@} /**@name Set methods */ //@{ /// Set the size inline void setSize(int value) { size_ = value*CoinSizeofAsInt(CoinFactorizationDouble); } //@} /**@name Condition methods */ //@{ /// Conditionally gets new array inline CoinFactorizationDouble * conditionalNew(int sizeWanted) { return reinterpret_cast (CoinArrayWithLength::conditionalNew(sizeWanted>=0 ? static_cast (( sizeWanted)*CoinSizeofAsInt(CoinFactorizationDouble)) : -1)); } //@} /**@name Constructors and destructors */ //@{ /** Default constructor - NULL*/ inline CoinFactorizationDoubleArrayWithLength() { array_=NULL; size_=-1;} /** Alternate Constructor - length in bytes - size_ -1 */ inline CoinFactorizationDoubleArrayWithLength(int size) { array_=new char [size*CoinSizeofAsInt(CoinFactorizationDouble)]; size_=-1;} /** Alternate Constructor - length in bytes mode - 0 size_ set to size 1 size_ set to size and zeroed */ inline CoinFactorizationDoubleArrayWithLength(int size, int mode) : CoinArrayWithLength(size*CoinSizeofAsInt(CoinFactorizationDouble),mode) {} /** Copy constructor. */ inline CoinFactorizationDoubleArrayWithLength(const CoinFactorizationDoubleArrayWithLength & rhs) : CoinArrayWithLength(rhs) {} /** Copy constructor.2 */ inline CoinFactorizationDoubleArrayWithLength(const CoinFactorizationDoubleArrayWithLength * rhs) : CoinArrayWithLength(rhs) {} /** Assignment operator. */ inline CoinFactorizationDoubleArrayWithLength& operator=(const CoinFactorizationDoubleArrayWithLength & rhs) { CoinArrayWithLength::operator=(rhs); return *this;} //@} }; /// CoinFactorizationLongDouble * version class CoinFactorizationLongDoubleArrayWithLength : public CoinArrayWithLength { public: /**@name Get methods. */ //@{ /// Get the size inline int getSize() const { return size_/CoinSizeofAsInt(long double); } /// Get Array inline long double * array() const { return reinterpret_cast ((size_>-2) ? array_ : NULL); } //@} /**@name Set methods */ //@{ /// Set the size inline void setSize(int value) { size_ = value*CoinSizeofAsInt(long double); } //@} /**@name Condition methods */ //@{ /// Conditionally gets new array inline long double * conditionalNew(int sizeWanted) { return reinterpret_cast (CoinArrayWithLength::conditionalNew(sizeWanted>=0 ? static_cast (( sizeWanted)*CoinSizeofAsInt(long double)) : -1)); } //@} /**@name Constructors and destructors */ //@{ /** Default constructor - NULL*/ inline CoinFactorizationLongDoubleArrayWithLength() { array_=NULL; size_=-1;} /** Alternate Constructor - length in bytes - size_ -1 */ inline CoinFactorizationLongDoubleArrayWithLength(int size) { array_=new char [size*CoinSizeofAsInt(long double)]; size_=-1;} /** Alternate Constructor - length in bytes mode - 0 size_ set to size 1 size_ set to size and zeroed */ inline CoinFactorizationLongDoubleArrayWithLength(int size, int mode) : CoinArrayWithLength(size*CoinSizeofAsInt(long double),mode) {} /** Copy constructor. */ inline CoinFactorizationLongDoubleArrayWithLength(const CoinFactorizationLongDoubleArrayWithLength & rhs) : CoinArrayWithLength(rhs) {} /** Copy constructor.2 */ inline CoinFactorizationLongDoubleArrayWithLength(const CoinFactorizationLongDoubleArrayWithLength * rhs) : CoinArrayWithLength(rhs) {} /** Assignment operator. */ inline CoinFactorizationLongDoubleArrayWithLength& operator=(const CoinFactorizationLongDoubleArrayWithLength & rhs) { CoinArrayWithLength::operator=(rhs); return *this;} //@} }; /// int * version class CoinIntArrayWithLength : public CoinArrayWithLength { public: /**@name Get methods. */ //@{ /// Get the size inline int getSize() const { return size_/CoinSizeofAsInt(int); } /// Get Array inline int * array() const { return reinterpret_cast ((size_>-2) ? array_ : NULL); } //@} /**@name Set methods */ //@{ /// Set the size inline void setSize(int value) { size_ = value*CoinSizeofAsInt(int); } //@} /**@name Condition methods */ //@{ /// Conditionally gets new array inline int * conditionalNew(int sizeWanted) { return reinterpret_cast (CoinArrayWithLength::conditionalNew(sizeWanted>=0 ? static_cast (( sizeWanted)*CoinSizeofAsInt(int)) : -1)); } //@} /**@name Constructors and destructors */ //@{ /** Default constructor - NULL*/ inline CoinIntArrayWithLength() { array_=NULL; size_=-1;} /** Alternate Constructor - length in bytes - size_ -1 */ inline CoinIntArrayWithLength(int size) { array_=new char [size*CoinSizeofAsInt(int)]; size_=-1;} /** Alternate Constructor - length in bytes mode - 0 size_ set to size 1 size_ set to size and zeroed */ inline CoinIntArrayWithLength(int size, int mode) : CoinArrayWithLength(size*CoinSizeofAsInt(int),mode) {} /** Copy constructor. */ inline CoinIntArrayWithLength(const CoinIntArrayWithLength & rhs) : CoinArrayWithLength(rhs) {} /** Copy constructor.2 */ inline CoinIntArrayWithLength(const CoinIntArrayWithLength * rhs) : CoinArrayWithLength(rhs) {} /** Assignment operator. */ inline CoinIntArrayWithLength& operator=(const CoinIntArrayWithLength & rhs) { CoinArrayWithLength::operator=(rhs); return *this;} //@} }; /// CoinBigIndex * version class CoinBigIndexArrayWithLength : public CoinArrayWithLength { public: /**@name Get methods. */ //@{ /// Get the size inline int getSize() const { return size_/CoinSizeofAsInt(CoinBigIndex); } /// Get Array inline CoinBigIndex * array() const { return reinterpret_cast ((size_>-2) ? array_ : NULL); } //@} /**@name Set methods */ //@{ /// Set the size inline void setSize(int value) { size_ = value*CoinSizeofAsInt(CoinBigIndex); } //@} /**@name Condition methods */ //@{ /// Conditionally gets new array inline CoinBigIndex * conditionalNew(int sizeWanted) { return reinterpret_cast (CoinArrayWithLength::conditionalNew(sizeWanted>=0 ? static_cast (( sizeWanted)*CoinSizeofAsInt(CoinBigIndex)) : -1)); } //@} /**@name Constructors and destructors */ //@{ /** Default constructor - NULL*/ inline CoinBigIndexArrayWithLength() { array_=NULL; size_=-1;} /** Alternate Constructor - length in bytes - size_ -1 */ inline CoinBigIndexArrayWithLength(int size) { array_=new char [size*CoinSizeofAsInt(CoinBigIndex)]; size_=-1;} /** Alternate Constructor - length in bytes mode - 0 size_ set to size 1 size_ set to size and zeroed */ inline CoinBigIndexArrayWithLength(int size, int mode) : CoinArrayWithLength(size*CoinSizeofAsInt(CoinBigIndex),mode) {} /** Copy constructor. */ inline CoinBigIndexArrayWithLength(const CoinBigIndexArrayWithLength & rhs) : CoinArrayWithLength(rhs) {} /** Copy constructor.2 */ inline CoinBigIndexArrayWithLength(const CoinBigIndexArrayWithLength * rhs) : CoinArrayWithLength(rhs) {} /** Assignment operator. */ inline CoinBigIndexArrayWithLength& operator=(const CoinBigIndexArrayWithLength & rhs) { CoinArrayWithLength::operator=(rhs); return *this;} //@} }; /// unsigned int * version class CoinUnsignedIntArrayWithLength : public CoinArrayWithLength { public: /**@name Get methods. */ //@{ /// Get the size inline int getSize() const { return size_/CoinSizeofAsInt(unsigned int); } /// Get Array inline unsigned int * array() const { return reinterpret_cast ((size_>-2) ? array_ : NULL); } //@} /**@name Set methods */ //@{ /// Set the size inline void setSize(int value) { size_ = value*CoinSizeofAsInt(unsigned int); } //@} /**@name Condition methods */ //@{ /// Conditionally gets new array inline unsigned int * conditionalNew(int sizeWanted) { return reinterpret_cast (CoinArrayWithLength::conditionalNew(sizeWanted>=0 ? static_cast (( sizeWanted)*CoinSizeofAsInt(unsigned int)) : -1)); } //@} /**@name Constructors and destructors */ //@{ /** Default constructor - NULL*/ inline CoinUnsignedIntArrayWithLength() { array_=NULL; size_=-1;} /** Alternate Constructor - length in bytes - size_ -1 */ inline CoinUnsignedIntArrayWithLength(int size) { array_=new char [size*CoinSizeofAsInt(unsigned int)]; size_=-1;} /** Alternate Constructor - length in bytes mode - 0 size_ set to size 1 size_ set to size and zeroed */ inline CoinUnsignedIntArrayWithLength(int size, int mode) : CoinArrayWithLength(size*CoinSizeofAsInt(unsigned int),mode) {} /** Copy constructor. */ inline CoinUnsignedIntArrayWithLength(const CoinUnsignedIntArrayWithLength & rhs) : CoinArrayWithLength(rhs) {} /** Copy constructor.2 */ inline CoinUnsignedIntArrayWithLength(const CoinUnsignedIntArrayWithLength * rhs) : CoinArrayWithLength(rhs) {} /** Assignment operator. */ inline CoinUnsignedIntArrayWithLength& operator=(const CoinUnsignedIntArrayWithLength & rhs) { CoinArrayWithLength::operator=(rhs); return *this;} //@} }; /// void * version class CoinVoidStarArrayWithLength : public CoinArrayWithLength { public: /**@name Get methods. */ //@{ /// Get the size inline int getSize() const { return size_/CoinSizeofAsInt(void *); } /// Get Array inline void ** array() const { return reinterpret_cast ((size_>-2) ? array_ : NULL); } //@} /**@name Set methods */ //@{ /// Set the size inline void setSize(int value) { size_ = value*CoinSizeofAsInt(void *); } //@} /**@name Condition methods */ //@{ /// Conditionally gets new array inline void ** conditionalNew(int sizeWanted) { return reinterpret_cast ( CoinArrayWithLength::conditionalNew(sizeWanted>=0 ? static_cast ((sizeWanted)*CoinSizeofAsInt(void *)) : -1)); } //@} /**@name Constructors and destructors */ //@{ /** Default constructor - NULL*/ inline CoinVoidStarArrayWithLength() { array_=NULL; size_=-1;} /** Alternate Constructor - length in bytes - size_ -1 */ inline CoinVoidStarArrayWithLength(int size) { array_=new char [size*CoinSizeofAsInt(void *)]; size_=-1;} /** Alternate Constructor - length in bytes mode - 0 size_ set to size 1 size_ set to size and zeroed */ inline CoinVoidStarArrayWithLength(int size, int mode) : CoinArrayWithLength(size*CoinSizeofAsInt(void *),mode) {} /** Copy constructor. */ inline CoinVoidStarArrayWithLength(const CoinVoidStarArrayWithLength & rhs) : CoinArrayWithLength(rhs) {} /** Copy constructor.2 */ inline CoinVoidStarArrayWithLength(const CoinVoidStarArrayWithLength * rhs) : CoinArrayWithLength(rhs) {} /** Assignment operator. */ inline CoinVoidStarArrayWithLength& operator=(const CoinVoidStarArrayWithLength & rhs) { CoinArrayWithLength::operator=(rhs); return *this;} //@} }; /// arbitrary version class CoinArbitraryArrayWithLength : public CoinArrayWithLength { public: /**@name Get methods. */ //@{ /// Get the size inline int getSize() const { return size_/lengthInBytes_; } /// Get Array inline void ** array() const { return reinterpret_cast ((size_>-2) ? array_ : NULL); } //@} /**@name Set methods */ //@{ /// Set the size inline void setSize(int value) { size_ = value*lengthInBytes_; } //@} /**@name Condition methods */ //@{ /// Conditionally gets new array inline char * conditionalNew(int length, int sizeWanted) { lengthInBytes_=length;return reinterpret_cast ( CoinArrayWithLength::conditionalNew(sizeWanted>=0 ? static_cast ((sizeWanted)*lengthInBytes_) : -1)); } //@} /**@name Constructors and destructors */ //@{ /** Default constructor - NULL*/ inline CoinArbitraryArrayWithLength(int length=1) { array_=NULL; size_=-1;lengthInBytes_=length;} /** Alternate Constructor - length in bytes - size_ -1 */ inline CoinArbitraryArrayWithLength(int length, int size) { array_=new char [size*length]; size_=-1; lengthInBytes_=length;} /** Alternate Constructor - length in bytes mode - 0 size_ set to size 1 size_ set to size and zeroed */ inline CoinArbitraryArrayWithLength(int length, int size, int mode) : CoinArrayWithLength(size*length,mode) {lengthInBytes_=length;} /** Copy constructor. */ inline CoinArbitraryArrayWithLength(const CoinArbitraryArrayWithLength & rhs) : CoinArrayWithLength(rhs) {} /** Copy constructor.2 */ inline CoinArbitraryArrayWithLength(const CoinArbitraryArrayWithLength * rhs) : CoinArrayWithLength(rhs) {} /** Assignment operator. */ inline CoinArbitraryArrayWithLength& operator=(const CoinArbitraryArrayWithLength & rhs) { CoinArrayWithLength::operator=(rhs); return *this;} //@} protected: /**@name Private member data */ //@{ /// Length in bytes int lengthInBytes_; //@} }; class CoinPartitionedVector : public CoinIndexedVector { public: #ifndef COIN_PARTITIONS #define COIN_PARTITIONS 8 #endif /**@name Get methods. */ //@{ /// Get the size of a partition inline int getNumElements(int partition) const { assert (partition= 1200. If you're reading this and have been developing in MSVS long enough to know, fix it. -- lh, 100915 -- */ #if _MSC_VER >= 1200 # include # define COIN_INT64_T INT64 # define COIN_UINT64_T UINT64 /* Define to integer type capturing pointer */ # define COIN_INTPTR_T ULONG_PTR #else # define COIN_INT64_T long long # define COIN_UINT64_T unsigned long long # define COIN_INTPTR_T int* #endif CoinUtils-2.9.10/CoinUtils/src/CoinPresolveZeros.cpp0000644000076600007660000002115412054012620021024 0ustar coincoin/* $Id: CoinPresolveZeros.cpp 1561 2012-11-24 00:32:16Z lou $ */ // 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). #include #include #include "CoinHelperFunctions.hpp" #include "CoinPresolveMatrix.hpp" #include "CoinPresolveZeros.hpp" #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #include "CoinPresolvePsdebug.hpp" #endif namespace { // begin unnamed file-local namespace /* Count the number of zeros in the columns listed in checkcols. Trim back checkcols to just the columns with zeros. */ int count_col_zeros (int &ncheckcols, int *checkcols, const CoinBigIndex *mcstrt, const double *colels, const int *hincol) { int nzeros = 0 ; int zeroCols = 0 ; for (int ndx = 0 ; ndx < ncheckcols ; ndx++) { const int j = checkcols[ndx] ; const CoinBigIndex kcs = mcstrt[j] ; const CoinBigIndex kce = kcs+hincol[j] ; int zerosj = 0 ; for (CoinBigIndex kcol = kcs ; kcol < kce ; ++kcol) { if (fabs(colels[kcol]) < ZTOLDP) { zerosj++ ; } } if (zerosj) { checkcols[zeroCols++] = j ; nzeros += zerosj ; } } ncheckcols = zeroCols ; return (nzeros) ; } /* Count the number of zeros. Intended for the case where all columns 0 .. ncheckcols should be scanned. Typically ncheckcols is the number of columns in the matrix. Leave a list of columns with explicit zeros at the front of checkcols, with the count in ncheckcols. */ int count_col_zeros2 (int &ncheckcols, int *checkcols, const CoinBigIndex *mcstrt, const double *colels, const int *hincol) { int nzeros = 0 ; int zeroCols = 0 ; for (int j = 0 ; j < ncheckcols ; j++) { const CoinBigIndex kcs = mcstrt[j] ; CoinBigIndex kce = kcs+hincol[j] ; int zerosj = 0 ; for (CoinBigIndex k = kcs ; k < kce ; ++k) { if (fabs(colels[k]) < ZTOLDP) { zerosj++ ; } } if (zerosj) { checkcols[zeroCols++] = j ; nzeros += zerosj ; } } ncheckcols = zeroCols ; return (nzeros) ; } /* Searches the cols in checkcols for zero entries. Creates a dropped_zero entry for each one; doesn't check for out-of-memory. Returns number of zeros found. */ int drop_col_zeros (int ncheckcols, const int *checkcols, const CoinBigIndex *mcstrt, double *colels, int *hrow, int *hincol, presolvehlink *clink, dropped_zero *actions) { int nactions = 0 ; /* Physically remove explicit zeros. To maintain loose packing, move the element at the end of the column into the empty space. Of course, that element could also be zero, so recheck the position. */ for (int i = 0 ; i < ncheckcols ; i++) { int col = checkcols[i] ; const CoinBigIndex kcs = mcstrt[col] ; CoinBigIndex kce = kcs+hincol[col] ; # if PRESOLVE_DEBUG > 1 std::cout << " scanning column " << col << "..." ; # endif for (CoinBigIndex k = kcs ; k < kce ; ++k) { if (fabs(colels[k]) < ZTOLDP) { actions[nactions].col = col ; actions[nactions].row = hrow[k] ; # if PRESOLVE_DEBUG > 2 std::cout << " (" << hrow[k] << "," << col << ") " ; # endif nactions++ ; kce-- ; colels[k] = colels[kce] ; hrow[k] = hrow[kce] ; hincol[col]-- ; --k ; } } # if PRESOLVE_DEBUG > 1 if (nactions) std::cout << std::endl ; # endif if (hincol[col] == 0) PRESOLVE_REMOVE_LINK(clink,col) ; } return (nactions) ; } /* Scan rows to remove explicit zeros. This will, in general, scan a row once for each explicit zero in the row, but will remove all zeros the first time through. It's tempting to try and do something about this, but given the relatively small number of explicit zeros created by presolve, the bookkeeping likely exceeds the gain. */ void drop_row_zeros(int nzeros, const dropped_zero *zeros, const CoinBigIndex *mrstrt, double *rowels, int *hcol, int *hinrow, presolvehlink *rlink) { for (int i = 0 ; i < nzeros ; i++) { int row = zeros[i].row ; const CoinBigIndex krs = mrstrt[row] ; CoinBigIndex kre = krs+hinrow[row] ; # if PRESOLVE_DEBUG > 2 std::cout << " scanning row " << row << " for a(" << row << "," << zeros[i].col << ") ..." ; bool found = false ; # endif for (CoinBigIndex k = krs ; k < kre ; k++) { if (fabs(rowels[k]) < ZTOLDP) { # if PRESOLVE_DEBUG > 2 std::cout << " (" << row << "," << hcol[k] << ") " ; found = true ; # endif rowels[k] = rowels[kre-1] ; hcol[k] = hcol[kre-1] ; kre-- ; hinrow[row]-- ; --k ; } } # if PRESOLVE_DEBUG > 2 if (found) std::cout << " found; " << hinrow[row] << " coeffs remaining." << std::endl ; # endif if (hinrow[row] == 0) PRESOLVE_REMOVE_LINK(rlink,row) ; } } } // end unnamed file-local namespace /* Scan the columns listed in checkcols for explicit zeros and eliminate them. For the special case where all columns should be scanned (ncheckcols == prob->ncols_), there is no need to initialise checkcols. */ const CoinPresolveAction *drop_zero_coefficients_action::presolve (CoinPresolveMatrix *prob, int *checkcols, int ncheckcols, const CoinPresolveAction *next) { double *colels = prob->colels_ ; int *hrow = prob->hrow_ ; CoinBigIndex *mcstrt = prob->mcstrt_ ; int *hincol = prob->hincol_ ; presolvehlink *clink = prob->clink_ ; presolvehlink *rlink = prob->rlink_ ; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 # if PRESOLVE_DEBUG > 0 std::cout << "Entering drop_zero_action::presolve, " << ncheckcols << " columns to scan." << std::endl ; # endif presolve_consistent(prob) ; presolve_links_ok(prob) ; presolve_check_sol(prob) ; presolve_check_nbasic(prob) ; # endif /* Scan for zeros. */ int nzeros ; if (ncheckcols == prob->ncols_) { nzeros = count_col_zeros2(ncheckcols,checkcols,mcstrt,colels,hincol) ; } else { nzeros = count_col_zeros(ncheckcols,checkcols,mcstrt,colels,hincol) ; } # if PRESOLVE_DEBUG > 1 std::cout << " drop_zero_action: " << nzeros << " zeros in " << ncheckcols << " columns." << std::endl ; # endif /* Do we have zeros to remove? If so, get to it. */ if (nzeros != 0) { /* We have zeros to remove. drop_col_zeros will scan the columns and remove zeros, adding records of the dropped entries to zeros. The we need to clean the row representation. */ dropped_zero *zeros = new dropped_zero[nzeros] ; nzeros = drop_col_zeros(ncheckcols,checkcols,mcstrt,colels, hrow,hincol,clink,zeros) ; double *rowels = prob->rowels_ ; int *hcol = prob->hcol_ ; CoinBigIndex *mrstrt = prob->mrstrt_ ; int *hinrow = prob->hinrow_ ; drop_row_zeros(nzeros,zeros,mrstrt,rowels,hcol,hinrow,rlink) ; next = new drop_zero_coefficients_action(nzeros,zeros,next) ; } # if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 presolve_consistent(prob) ; presolve_links_ok(prob) ; presolve_check_sol(prob) ; presolve_check_nbasic(prob) ; # endif # if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 std::cout << "Leaving drop_zero_action::presolve, dropped " << nzeros << " zeroes." << std::endl ; # endif return (next) ; } /* This wrapper initialises checkcols for the case where the entire matrix should be scanned. Typically used from the presolve driver as part of final cleanup. */ const CoinPresolveAction *drop_zero_coefficients (CoinPresolveMatrix *prob, const CoinPresolveAction *next) { int ncheck = prob->ncols_ ; int *checkcols = new int[ncheck] ; if (prob->anyProhibited()) { ncheck = 0 ; for (int i = 0 ; i < prob->ncols_ ; i++) if (!prob->colProhibited(i)) checkcols[ncheck++] = i ; } const CoinPresolveAction *retval = drop_zero_coefficients_action::presolve(prob,checkcols,ncheck,next) ; delete [] checkcols ; return (retval) ; } void drop_zero_coefficients_action::postsolve(CoinPostsolveMatrix *prob) const { const int nzeros = nzeros_ ; const dropped_zero *const zeros = zeros_ ; double *colels = prob->colels_ ; int *hrow = prob->hrow_ ; CoinBigIndex *mcstrt = prob->mcstrt_ ; int *hincol = prob->hincol_ ; int *link = prob->link_ ; CoinBigIndex &free_list = prob->free_list_ ; for (const dropped_zero *z = &zeros[nzeros-1] ; zeros <= z ; z--) { const int i = z->row ; const int j = z->col ; CoinBigIndex k = free_list ; assert(k >= 0 && k < prob->bulk0_) ; free_list = link[free_list] ; hrow[k] = i ; colels[k] = 0.0 ; link[k] = mcstrt[j] ; mcstrt[j] = k ; hincol[j]++ ; } # if PRESOLVE_CONSISTENCY > 0 presolve_check_free_list(prob) ; # endif } CoinUtils-2.9.10/CoinUtils/src/CoinPresolveFixed.cpp0000644000076600007660000006224012055734076021003 0ustar coincoin/* $Id: CoinPresolveFixed.cpp 1565 2012-11-29 19:32:14Z lou $ */ // 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). #include #include #include "CoinPresolveMatrix.hpp" #include "CoinPresolveFixed.hpp" #include "CoinHelperFunctions.hpp" #include "CoinFinite.hpp" #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #include "CoinPresolvePsdebug.hpp" #endif /* Begin routines associated with remove_fixed_action */ const char *remove_fixed_action::name() const { return ("remove_fixed_action"); } /* * Original comment: * * invariant: both reps are loosely packed. * coefficients of both reps remain consistent. * * Note that this concerns variables whose column bounds determine that * they are slack; this does NOT concern singleton row constraints that * determine that the relevant variable is slack. * * Invariant: col and row rep are consistent */ /* This routine empties the columns for the list of fixed variables passed in (fcols, nfcols). As each coefficient a is set to 0, rlo and rup are adjusted accordingly. Note, however, that c is not considered to be removed from the objective until column j is physically removed from the matrix (drop_empty_cols_action), so the correction to the objective is adjusted there. If a column solution is available, row activity (acts_) is adjusted. remove_fixed_action implicitly assumes that the value of the variable has already been forced within bounds. If this isn't true, the correction to acts_ will be wrong. See make_fixed_action if you need to force the value within bounds first. */ const remove_fixed_action* remove_fixed_action::presolve (CoinPresolveMatrix *prob, int *fcols, int nfcols, const CoinPresolveAction *next) { double *colels = prob->colels_; int *hrow = prob->hrow_; CoinBigIndex *mcstrt = prob->mcstrt_; int *hincol = prob->hincol_; double *rowels = prob->rowels_; int *hcol = prob->hcol_; CoinBigIndex *mrstrt = prob->mrstrt_; int *hinrow = prob->hinrow_; double *clo = prob->clo_; double *rlo = prob->rlo_; double *rup = prob->rup_; double *sol = prob->sol_; double *acts = prob->acts_; presolvehlink *clink = prob->clink_; presolvehlink *rlink = prob->rlink_; action *actions = new action[nfcols+1]; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 # if PRESOLVE_DEBUG > 0 std::cout << "Entering remove_fixed_action::presolve; processing " << nfcols << " fixed columns." << std::endl ; # endif presolve_check_sol(prob) ; presolve_check_nbasic(prob) ; # endif /* Scan columns to be removed and total up the number of coefficients. */ int estsize=0; int ckc; for (ckc = 0 ; ckc < nfcols ; ckc++) { int j = fcols[ckc]; estsize += hincol[j]; } // Allocate arrays to hold coefficients and associated row indices double * els_action = new double[estsize]; int * rows_action = new int[estsize]; int actsize=0; // faster to do all deletes in row copy at once int nrows = prob->nrows_; CoinBigIndex * rstrt = new int[nrows+1]; CoinZeroN(rstrt,nrows); /* Open a loop to excise each column a. The first thing to do is load the action entry with the index j, the value of x, and the number of entries in a. After we walk the column and tweak the row-major representation, we'll simply claim this column is empty by setting hincol[j] = 0. */ for (ckc = 0 ; ckc < nfcols ; ckc++) { int j = fcols[ckc]; double solj = clo[j]; CoinBigIndex kcs = mcstrt[j]; CoinBigIndex kce = kcs + hincol[j]; CoinBigIndex k; { action &f = actions[ckc]; f.col = j; f.sol = solj; f.start = actsize; } /* Now walk a. For each row i with a coefficient a != 0: * save the coefficient and row index, * substitute the value of x, adjusting the row bounds and lhs value accordingly, then * delete a from the row-major representation. * Finally: mark the row as changed and add it to the list of rows to be processed next. Then, for each remaining column in the row, put it on the list of columns to be processed. */ for (k = kcs ; k < kce ; k++) { int row = hrow[k]; double coeff = colels[k]; els_action[actsize]=coeff; rstrt[row]++; // increase counts rows_action[actsize++]=row; // Avoid reducing finite infinity. if (-PRESOLVE_INF < rlo[row]) rlo[row] -= solj*coeff; if (rup[row] < PRESOLVE_INF) rup[row] -= solj*coeff; if (sol) { acts[row] -= solj*coeff; } #define TRY2 #ifndef TRY2 presolve_delete_from_row(row,j,mrstrt,hinrow,hcol,rowels); if (hinrow[row] == 0) { PRESOLVE_REMOVE_LINK(rlink,row) ; } // mark unless already marked if (!prob->rowChanged(row)) { prob->addRow(row); CoinBigIndex krs = mrstrt[row]; CoinBigIndex kre = krs + hinrow[row]; for (CoinBigIndex k=krs; kaddCol(jcol); } } #endif } /* Remove the column's link from the linked list of columns, and declare it empty in the column-major representation. Link removal must execute even if the column is already of length 0 when it arrives. */ PRESOLVE_REMOVE_LINK(clink, j); hincol[j] = 0; } /* Set the actual end of the coefficient and row index arrays. */ actions[nfcols].start=actsize; # if PRESOLVE_SUMMARY printf("NFIXED: %d", nfcols); if (estsize-actsize > 0) { printf(", overalloc %d",estsize-actsize) ; } printf("\n") ; # endif // Now get columns by row int * column = new int[actsize]; int nel=0; int iRow; for (iRow=0;iRowncols_; char * mark = new char[ncols]; memset(mark,0,ncols); // rstrts are now one out i.e. rstrt[0] is end of row 0 nel=0; #ifdef TRY2 for (iRow=0;iRow 0 for (k = nel ; k < rstrt[iRow] ; k++) { assert(mark[column[k]] == 0) ; } #endif if (hinrow[iRow] == 0) { PRESOLVE_REMOVE_LINK(rlink,iRow) ; } // mark unless already marked if (!prob->rowChanged(iRow)) { prob->addRow(iRow); CoinBigIndex krs = mrstrt[iRow]; CoinBigIndex kre = krs + hinrow[iRow]; for (CoinBigIndex k=krs; kaddCol(jcol); } } nel=rstrt[iRow]; } #endif delete [] mark; delete [] column; delete [] rstrt; /* Create the postsolve object, link it at the head of the list of postsolve objects, and return a pointer. */ const remove_fixed_action *fixedActions = new remove_fixed_action(nfcols,actions,els_action,rows_action,next) ; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 presolve_check_sol(prob) ; # if PRESOLVE_DEBUG > 0 std::cout << "Leaving remove_fixed_action::presolve." << std::endl ; # endif # endif return (fixedActions) ; } remove_fixed_action::remove_fixed_action(int nactions, action *actions, double * els_action, int * rows_action, const CoinPresolveAction *next) : CoinPresolveAction(next), colrows_(rows_action), colels_(els_action), nactions_(nactions), actions_(actions) { } remove_fixed_action::~remove_fixed_action() { deleteAction(actions_,action*); delete [] colels_; delete [] colrows_; } /* * Say we determined that cup - clo <= ztolzb, so we fixed sol at clo. * This involved subtracting clo*coeff from ub/lb for each row the * variable occurred in. * Now when we put the variable back in, by construction the variable * is within tolerance, the non-slacks are unchanged, and the * distances of the affected slacks from their bounds should remain * unchanged (ignoring roundoff errors). * It may be that by adding the term back in, the affected constraints * now aren't as accurate due to round-off errors; this could happen * if only one summand and the slack in the original formulation were large * (and naturally had opposite signs), and the new term in the constraint * is about the size of the old slack, so the new slack becomes about 0. * It may be that there is catastrophic cancellation in the summation, * so it might not compute to 0. */ void remove_fixed_action::postsolve(CoinPostsolveMatrix *prob) const { action * actions = actions_; const int nactions = nactions_; double *colels = prob->colels_; int *hrow = prob->hrow_; CoinBigIndex *mcstrt = prob->mcstrt_; int *hincol = prob->hincol_; int *link = prob->link_; CoinBigIndex &free_list = prob->free_list_; double *clo = prob->clo_; double *cup = prob->cup_; double *rlo = prob->rlo_; double *rup = prob->rup_; double *sol = prob->sol_; double *dcost = prob->cost_; double *rcosts = prob->rcosts_; double *acts = prob->acts_; double *rowduals = prob->rowduals_; unsigned char *colstat = prob->colstat_; const double maxmin = prob->maxmin_; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 char *cdone = prob->cdone_; # if PRESOLVE_DEBUG > 0 std::cout << "Entering remove_fixed_action::postsolve, repopulating " << nactions << " columns." << std::endl ; # endif presolve_check_threads(prob) ; presolve_check_free_list(prob) ; presolve_check_sol(prob,2,2,2) ; presolve_check_nbasic(prob) ; # endif double * els_action = colels_; int * rows_action = colrows_; int end = actions[nactions].start; /* At one point, it turned out that forcing_constraint_action was putting duplicates in the column list it passed to remove_fixed_action. This is now fixed, but ... it looks to me like we could be in trouble here if we reinstate a column multiple times. Hence the assert. */ for (const action *f = &actions[nactions-1]; actions<=f; f--) { int icol = f->col; const double thesol = f->sol; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 if (cdone[icol] == FIXED_VARIABLE) { std::cout << "RFA::postsolve: column " << icol << " already unfixed!" << std::endl ; assert(cdone[icol] != FIXED_VARIABLE) ; } cdone[icol] = FIXED_VARIABLE ; # endif sol[icol] = thesol; clo[icol] = thesol; cup[icol] = thesol; int cs = NO_LINK ; int start = f->start; double dj = maxmin * dcost[icol]; for (int i=start; i= 0 && k < prob->bulk0_) ; free_list = link[free_list]; // restore hrow[k] = row; colels[k] = coeff; link[k] = cs; cs = k; if (-PRESOLVE_INF < rlo[row]) rlo[row] += coeff * thesol; if (rup[row] < PRESOLVE_INF) rup[row] += coeff * thesol; acts[row] += coeff * thesol; dj -= rowduals[row] * coeff; } # if PRESOLVE_CONSISTENCY > 0 presolve_check_free_list(prob) ; # endif mcstrt[icol] = cs; rcosts[icol] = dj; hincol[icol] = end-start; end=start; /* Original comment: * the bounds in the reduced problem were tightened. * that means that this variable may not have been basic * because it didn't have to be, * but now it may have to. * no - the bounds aren't changed by this operation */ /* We've reintroduced the variable, but it's still fixed (equal bounds). Pick the nonbasic status that agrees with the reduced cost. Later, if postsolve unfixes the variable, we'll need to confirm that this status is still viable. We live in a minimisation world here. */ if (colstat) { if (dj < 0) prob->setColumnStatus(icol,CoinPrePostsolveMatrix::atUpperBound); else prob->setColumnStatus(icol,CoinPrePostsolveMatrix::atLowerBound); } } # if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 presolve_check_threads(prob) ; presolve_check_sol(prob,2,2,2) ; presolve_check_nbasic(prob) ; # if PRESOLVE_DEBUG > 0 std::cout << "Leaving remove_fixed_action::postsolve." << std::endl ; # endif # endif return ; } /* Scan the problem for variables that are already fixed, and remove them. There's an implicit assumption that the value of the variable is already within bounds. If you want to protect against this possibility, you want to use make_fixed. */ const CoinPresolveAction *remove_fixed (CoinPresolveMatrix *prob, const CoinPresolveAction *next) { int ncols = prob->ncols_; int *fcols = new int[ncols]; int nfcols = 0; int *hincol = prob->hincol_; double *clo = prob->clo_; double *cup = prob->cup_; for (int i = 0 ; i < ncols ; i++) if (hincol[i] > 0 && clo[i] == cup[i]&&!prob->colProhibited2(i)) fcols[nfcols++] = i; if (nfcols > 0) { next = remove_fixed_action::presolve(prob, fcols, nfcols, next) ; } delete[]fcols; return (next); } /* End routines associated with remove_fixed_action */ /* Begin routines associated with make_fixed_action */ const char *make_fixed_action::name() const { return ("make_fixed_action"); } /* This routine does the actual job of fixing one or more variables. The set of indices to be fixed is specified by nfcols and fcols. fix_to_lower specifies the bound where the variable(s) should be fixed. The other bound is preserved as part of the action and the bounds are set equal. Note that you don't get to specify the bound on a per-variable basis. If a primal solution is available, make_fixed_action will adjust the the row activity to compensate for forcing the variable within bounds. If the bounds are already equal, and the variable is within bounds, you should consider remove_fixed_action. */ const CoinPresolveAction* make_fixed_action::presolve (CoinPresolveMatrix *prob, int *fcols, int nfcols, bool fix_to_lower, const CoinPresolveAction *next) { double *clo = prob->clo_; double *cup = prob->cup_; double *csol = prob->sol_; double *colels = prob->colels_; int *hrow = prob->hrow_; CoinBigIndex *mcstrt = prob->mcstrt_; int *hincol = prob->hincol_; double *acts = prob->acts_; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 # if PRESOLVE_DEBUG > 0 std::cout << "Entering make_fixed_action::presolve, fixed = " << nfcols << "." << std::endl ; # endif presolve_check_sol(prob) ; presolve_check_nbasic(prob) ; # endif /* Shouldn't happen, but ... */ if (nfcols <= 0) { # if PRESOLVE_DEBUG > 0 std::cout << "make_fixed_action::presolve: useless call, " << nfcols << " to fix." << std::endl ; # endif return (next) ; } action *actions = new action[nfcols] ; /* Scan the set of indices specifying variables to be fixed. For each variable, stash the unused bound in the action and set the bounds equal. If the client has passed in a primal solution, update it if the value of the variable changes. */ for (int ckc = 0 ; ckc < nfcols ; ckc++) { int j = fcols[ckc] ; double movement = 0 ; action &f = actions[ckc] ; f.col = j ; if (fix_to_lower) { f.bound = cup[j]; cup[j] = clo[j]; if (csol) { movement = clo[j]-csol[j] ; csol[j] = clo[j] ; } } else { f.bound = clo[j]; clo[j] = cup[j]; if (csol) { movement = cup[j]-csol[j]; csol[j] = cup[j]; } } if (movement) { CoinBigIndex k; for (k = mcstrt[j] ; k < mcstrt[j]+hincol[j] ; k++) { int row = hrow[k]; acts[row] += movement*colels[k]; } } } /* Original comment: This is unusual in that the make_fixed_action transform contains within it a remove_fixed_action transform. Bad idea? Explanatory comment: Now that we've adjusted the bounds, time to create the postsolve action that will restore the original bounds. But wait! We're not done. By calling remove_fixed_action::presolve, we will (virtually) remove these variables from the model by substituting for the variable where it occurs and emptying the column. Cache the postsolve transform that will repopulate the column inside the postsolve transform for fixing the bounds. */ if (nfcols > 0) { next = new make_fixed_action(nfcols,actions,fix_to_lower, remove_fixed_action::presolve(prob,fcols,nfcols,0), next) ; } # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 presolve_check_sol(prob) ; presolve_check_nbasic(prob) ; # if PRESOLVE_DEBUG > 0 std::cout << "Leaving make_fixed_action::presolve." << std::endl ; # endif # endif return (next) ; } /* Recall that in presolve, make_fixed_action forced a bound to fix a variable, then called remove_fixed_action to empty the column. removed_fixed_action left a postsolve object hanging off faction_, and our first act here is to call r_f_a::postsolve to repopulate the columns. The m_f_a postsolve activity consists of relaxing one of the bounds and making sure that the status is still viable (we can potentially eliminate the bound here). */ void make_fixed_action::postsolve(CoinPostsolveMatrix *prob) const { const action *const actions = actions_; const int nactions = nactions_; const bool fix_to_lower = fix_to_lower_; double *clo = prob->clo_; double *cup = prob->cup_; double *sol = prob->sol_ ; unsigned char *colstat = prob->colstat_; # if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 # if PRESOLVE_DEBUG > 0 std::cout << "Entering make_fixed_action::postsolve." << std::endl ; # endif presolve_check_threads(prob) ; presolve_check_sol(prob,2,2,2) ; presolve_check_nbasic(prob) ; # endif /* Repopulate the columns. */ assert(nactions == faction_->nactions_) ; faction_->postsolve(prob); /* Walk the actions: restore each bound and check that the status is still appropriate. Given that we're unfixing a fixed variable, it's safe to assume that the unaffected bound is finite. */ for (int cnt = nactions-1 ; cnt >= 0 ; cnt--) { const action *f = &actions[cnt]; int icol = f->col; double xj = sol[icol] ; assert(faction_->actions_[cnt].col == icol) ; if (fix_to_lower) { double ub = f->bound ; cup[icol] = ub ; if (colstat) { if (ub >= PRESOLVE_INF || xj != ub) { prob->setColumnStatus(icol, CoinPrePostsolveMatrix::atLowerBound) ; } } } else { double lb = f->bound ; clo[icol] = lb ; if (colstat) { if (lb <= -PRESOLVE_INF || xj != lb) { prob->setColumnStatus(icol, CoinPrePostsolveMatrix::atUpperBound) ; } } } } # if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 presolve_check_threads(prob) ; presolve_check_sol(prob,2,2,2) ; presolve_check_nbasic(prob) ; std::cout << "Leaving make_fixed_action::postsolve." << std::endl ; # endif return ; } /* Scan the columns and collect indices of columns that have upper and lower bounds within the zero tolerance of one another. Hand this list to make_fixed_action::presolve() to do the heavy lifting. make_fixed_action will compensate for variables which are infeasible, forcing them to feasibility and correcting the row activity, before invoking remove_fixed_action to remove the variable from the problem. If you're confident of feasibility, consider remove_fixed. */ const CoinPresolveAction *make_fixed (CoinPresolveMatrix *prob, const CoinPresolveAction *next) { # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 # if PRESOLVE_DEBUG > 0 std::cout << "Entering make_fixed, checking " << prob->ncols_ << " columns." << std::endl ; # endif presolve_check_sol(prob) ; presolve_check_nbasic(prob) ; # endif int ncols = prob->ncols_ ; int *fcols = prob->usefulColumnInt_ ; int nfcols = 0 ; int *hincol = prob->hincol_ ; double *clo = prob->clo_ ; double *cup = prob->cup_ ; for (int i = 0 ; i < ncols ; i++) { if (hincol[i] > 0 && fabs(cup[i]-clo[i]) < ZTOLDP && !prob->colProhibited2(i)) { fcols[nfcols++] = i ; } } /* Call m_f_a::presolve to do the heavy lifting. This will create a new CoinPresolveAction, which will become the head of the list of CoinPresolveAction's currently pointed to by next. No point in going through the effort of a call if there are no fixed variables. */ if (nfcols > 0) next = make_fixed_action::presolve(prob,fcols,nfcols,true,next) ; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 presolve_check_sol(prob) ; presolve_check_nbasic(prob) ; # if PRESOLVE_DEBUG > 0 std::cout << "Leaving make_fixed, fixed " << nfcols << " columns." << std::endl ; # endif # endif return (next) ; } /* Transfer the cost coefficient of a column singleton in an equality to the cost coefficients of the remaining variables. Suppose x is the singleton and x is some other variable. For movement delta, there must be compensating change delta = -(a/a)delta. Substituting in the objective, cdelta + cdelta becomes c(-a/a)delta + cdelta (c - c(a/a))delta This is transform (A) below. */ void transferCosts (CoinPresolveMatrix *prob) { double *colels = prob->colels_ ; int *hrow = prob->hrow_ ; CoinBigIndex *mcstrt = prob->mcstrt_ ; int *hincol = prob->hincol_ ; double *rowels = prob->rowels_ ; int *hcol = prob->hcol_ ; CoinBigIndex *mrstrt = prob->mrstrt_ ; int *hinrow = prob->hinrow_ ; double *rlo = prob->rlo_ ; double *rup = prob->rup_ ; double *clo = prob->clo_ ; double *cup = prob->cup_ ; int ncols = prob->ncols_ ; double *cost = prob->cost_ ; unsigned char *integerType = prob->integerType_ ; double bias = prob->dobias_ ; # if PRESOLVE_DEBUG > 0 std::cout << "Entering transferCosts." << std::endl ; presolve_check_sol(prob) ; presolve_check_nbasic(prob) ; # endif int numberIntegers = 0 ; for (int icol = 0 ; icol < ncols ; icol++) { if (integerType[icol]) numberIntegers++ ; } /* For unfixed column singletons in equalities, calculate and install transform (A) described in the comments at the head of the method. */ int nchanged = 0 ; for (int js = 0 ; js < ncols ; js++) { if (cost[js] && hincol[js] == 1 && cup[js] > clo[js]) { const CoinBigIndex &jsstrt = mcstrt[js] ; const int &i = hrow[jsstrt]; if (rlo[i] == rup[i]) { const double ratio = cost[js]/colels[jsstrt]; bias += rlo[i]*ratio ; const CoinBigIndex &istrt = mrstrt[i] ; const CoinBigIndex iend = istrt+hinrow[i] ; for (CoinBigIndex jj = istrt ; jj < iend ; jj++) { int j = hcol[jj] ; double aij = rowels[jj] ; cost[j] -= ratio*aij ; } cost[js] = 0.0 ; nchanged++ ; } } } # if PRESOLVE_DEBUG > 0 if (nchanged) std::cout << " transferred costs for " << nchanged << " singleton columns." << std::endl ; int nPasses = 0 ; # endif /* We don't really need a singleton column to do this trick, just an equality. But if the column's not a singleton, it's only worth doing if we can move costs onto integer variables that start with costs of zero. Try and find some unfixed variable with a nonzero cost, that's involved in an equality where there are integer variables with costs of zero. If there's a net gain in the number of integer variables with costs (nThen > nNow), do the transform. One per column, please. */ if (numberIntegers) { int changed = -1 ; while (changed) { changed = 0 ; for (int js = 0 ; js < ncols ; js++) { if (cost[js] && cup[js] > clo[js]) { const CoinBigIndex &jsstrt = mcstrt[js] ; const CoinBigIndex jsend = jsstrt+hincol[js] ; for (CoinBigIndex ii = jsstrt ; ii < jsend ; ii++) { const int &i = hrow[ii] ; if (rlo[i] == rup[i]) { int nNow = ((integerType[js])?1:0) ; int nThen = 0 ; const CoinBigIndex &istrt = mrstrt[i] ; const CoinBigIndex iend = istrt+hinrow[i] ; for (CoinBigIndex jj = istrt ; jj < iend ; jj++) { int j = hcol[jj] ; if (!cost[j] && integerType[j]) nThen++ ; } if (nThen > nNow) { const double ratio = cost[js]/colels[jsstrt] ; bias += rlo[i]*ratio ; for (CoinBigIndex jj = istrt ; jj < iend ; jj++) { int j = hcol[jj] ; double aij = rowels[jj] ; cost[j] -= ratio*aij ; } cost[js] = 0.0 ; changed++ ; break ; } } } } } if (changed) { nchanged += changed ; # if PRESOLVE_DEBUG > 0 std::cout << " pass " << nPasses++ << " transferred costs to " << changed << " integer variables." << std::endl ; # endif } } } # if PRESOLVE_DEBUG > 0 if (bias != prob->dobias_) std::cout << " new bias " << bias << "." << std::endl ; # endif prob->dobias_ = bias; # if PRESOLVE_DEBUG > 0 std::cout << "Leaving transferCosts." << std::endl ; presolve_check_sol(prob) ; presolve_check_nbasic(prob) ; # endif } CoinUtils-2.9.10/CoinUtils/src/CoinPresolveIsolated.hpp0000644000076600007660000000264311654260357021516 0ustar coincoin/* $Id: CoinPresolveIsolated.hpp 1498 2011-11-02 15:25:35Z mjs $ */ // 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). #ifndef CoinPresolveIsolated_H #define CoinPresolveIsolated_H #include "CoinPresolveMatrix.hpp" class isolated_constraint_action : public CoinPresolveAction { isolated_constraint_action(); isolated_constraint_action(const isolated_constraint_action& rhs); isolated_constraint_action& operator=(const isolated_constraint_action& rhs); double rlo_; double rup_; int row_; int ninrow_; // the arrays are owned by the class and must be deleted at destruction const int *rowcols_; const double *rowels_; const double *costs_; isolated_constraint_action(double rlo, double rup, int row, int ninrow, const int *rowcols, const double *rowels, const double *costs, const CoinPresolveAction *next) : CoinPresolveAction(next), rlo_(rlo), rup_(rup), row_(row), ninrow_(ninrow), rowcols_(rowcols), rowels_(rowels), costs_(costs) {} public: const char *name() const; static const CoinPresolveAction *presolve(CoinPresolveMatrix * prob, int row, const CoinPresolveAction *next); void postsolve(CoinPostsolveMatrix *prob) const; virtual ~isolated_constraint_action(); }; #endif CoinUtils-2.9.10/CoinUtils/src/CoinPresolveImpliedFree.cpp0000644000076600007660000011237212134253412022117 0ustar coincoin/* $Id: CoinPresolveImpliedFree.cpp 1595 2013-04-19 14:39:06Z forrest $ */ // 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). #include #include #include "CoinPresolveMatrix.hpp" #include "CoinPresolveSubst.hpp" #include "CoinPresolveIsolated.hpp" #include "CoinPresolveFixed.hpp" #include "CoinPresolveImpliedFree.hpp" #include "CoinPresolveUseless.hpp" #include "CoinPresolveForcing.hpp" #include "CoinMessage.hpp" #include "CoinHelperFunctions.hpp" #include "CoinSort.hpp" #include "CoinFinite.hpp" #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #include "CoinPresolvePsdebug.hpp" #endif /* Implied Free and Subst Transforms If there is a constraint i entangled with a singleton column x(t) such that for any feasible (with respect to column bounds) values of the other variables in the constraint we can calculate a feasible value for x(t), then we can drop x(t) and constraint i, since we can compute the value of x(t) from the values of the other variables during postsolve. To put this into practice, calculate bounds L(i\t) and U(i\t) on row activity and use those bounds to calculate implied lower and upper bounds l'(t) and u'(t) on x(t). If the implied bounds are tighter than the original column bounds l(t) and u(t) (the implied free condition), we can drop constraint i and x(t). If x(t) is not a natural singleton, we can still do something similar. Let constraint i be an equality constraint that satisfies the implied free condition. In that case, we use constraint i to generate a substitution formula and substitute away x(t) in any other constraints where it appears. This introduces new coefficients, but the total number of coefficients never increases if x(t) is entangled with only two constraints (coefficients added during substitution are cancelled by dropping constraint i). The total may not increase much even if there are more. Both situations are detected in implied_free_action::presolve. Natural singletons are processed by implied_free_action::presolve. The rest are passed to subst_constraint_action (which see). It is possible for two singleton columns to be in the same row. In that case, the other one will become empty. If its bounds and costs aren't just right, this signals an unbounded problem. We don't need to check that specially here. There is a superficial (and misleading) similarity to a useless constraint. A useless constraint cannot be made tight for *any* feasible values of its variables. Here, it's possible we could pick some feasible value of x(t) that *would* violate the constraint. */ /* Scan for candidates for the implied free and subst transforms (see comments at head of file and in CoinPresolveSubst.cpp). Process natural singletons. Pass more complicated cases to subst_constraint_action. fill_level limits the allowable number of coefficients in a column under consideration as the implied free variable. There's a feedback loop between implied_free_action and the presolve driver. The feedback loop operates as follows: If we're not finding enough transforms and fill_level < maxSubstLevel_, increase it by one and pass it back out negated. The presolve driver can act on this, if it chooses, or simply pass it back in on the next call to implied_free_action. If implied_free_action sees a negative value, it will look at all columns, instead of just those in colsToDo_. */ const CoinPresolveAction *implied_free_action::presolve ( CoinPresolveMatrix *prob, const CoinPresolveAction *next, int &fill_level) { # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 # if PRESOLVE_DEBUG > 0 std::cout << "Entering implied_free_action::presolve, fill level " << fill_level << "." << std::endl ; # endif presolve_consistent(prob) ; presolve_links_ok(prob) ; presolve_check_sol(prob) ; presolve_check_nbasic(prob) ; # endif # if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 const int startEmptyRows = prob->countEmptyRows() ; const int startEmptyColumns = prob->countEmptyCols() ; # if COIN_PRESOLVE_TUNING > 0 double startTime = 0.0 ; if (prob->tuning_) startTime = CoinCpuTime() ; # endif # endif /* Unpack the row- and column-major representations. */ const int m = prob->nrows_ ; const int n = prob->ncols_ ; const CoinBigIndex *rowStarts = prob->mrstrt_ ; int *rowLengths = prob->hinrow_ ; const int *colIndices = prob->hcol_ ; const double *rowCoeffs = prob->rowels_ ; presolvehlink *rlink = prob->rlink_ ; CoinBigIndex *colStarts = prob->mcstrt_ ; int *colLengths = prob->hincol_ ; int *rowIndices = prob->hrow_ ; double *colCoeffs = prob->colels_ ; presolvehlink *clink = prob->clink_ ; /* Column bounds, row bounds, cost, integrality. */ double *clo = prob->clo_ ; double *cup = prob->cup_ ; double *rlo = prob->rlo_ ; double *rup = prob->rup_ ; double *cost = prob->cost_ ; const unsigned char *integerType = prob->integerType_ ; /* Documented as `inhibit x+y+z = 1 mods'. From the code below, it's clear that this is intended to avoid removing SOS equalities with length >= 5 (hardcoded). */ const bool stopSomeStuff = ((prob->presolveOptions()&0x04) != 0) ; /* Ignore infeasibility. `Fix' is overly optimistic. */ const bool fixInfeasibility = ((prob->presolveOptions_&0x4000) != 0) ; /* Defaults to 0.0. */ const double feasTol = prob->feasibilityTolerance_ ; # if 0 /* Tentatively moved to be a front-end function for useless_constraint_action, much as make_fixed is a front-end for make_fixed_action. This bit of code left for possible tuning. -- lh, 121127 -- Original comment: This needs to be made faster. */ # ifdef COIN_LIGHTWEIGHT_PRESOLVE if (prob->pass_ == 1) { # endif next = testRedundant(prob,next) ; if (prob->status_&0x01 != 0) { if ((prob->presolveOptions_&0x4000) != 0) prob->status &= !0x01 ; else return (next) ; } # ifdef COIN_LIGHTWEIGHT_PRESOLVE } # endif # endif /* implied_free and subst take a fair bit of effort to scan for candidates. This is a hook to allow a presolve driver to avoid that work. */ if (prob->pass_ > 15 && (prob->presolveOptions_&0x10000) != 0) { fill_level = 2 ; return (next) ; } /* Set up to collect implied_free actions. */ action *actions = new action [n] ; # ifdef ZEROFAULT CoinZeroN(reinterpret_cast(actions),n*sizeof(action)) ; # endif int nactions = 0 ; int *implied_free = prob->usefulColumnInt_ ; int *whichFree = implied_free+n ; int numberFree = 0 ; /* Arrays to hold row activity (row lhs) min and max values. Each row lhs bound is held as two components: a sum of finite column bounds and a count of infinite column bounds. */ int *infiniteDown = new int[m] ; int *infiniteUp = new int[m] ; double *maxDown = new double[m] ; double *maxUp = new double[m] ; /* Overload infiniteUp with row status codes: -1: L(i)/U(i) not yet computed, -2: do not use (empty or useless row), -3: give up (infeasible) -4: chosen as implied free row */ for (int i = 0 ; i < m ; i++) { if (rowLengths[i] > 1) infiniteUp[i] = -1 ; else infiniteUp[i] = -2 ; } // Get rid of rows with prohibited columns if (prob->anyProhibited_) { for (int i = 0 ; i < m ; i++) { CoinBigIndex rStart = rowStarts[i]; CoinBigIndex rEnd = rStart+rowLengths[i]; bool badRow=false; for (CoinBigIndex j = rStart; j < rEnd; ++j) { if (prob->colProhibited(colIndices[j])) { badRow=true; break; } } if (badRow) infiniteUp[i] = -2 ; } } // Can't go on without a suitable finite infinity, can we? #ifdef USE_SMALL_LARGE const double large = 1.0e10 ; #else const double large = 1.0e20 ; #endif /* Decide which columns we're going to look at. There are columns already queued in colsToDo_, but sometimes we want to look at all of them. Don't suck in prohibited columns. See comments at the head of the routine for fill_level. NOTE the overload on usefulColumnInt_. It was assigned above to whichFree (indices of interesting columns). We'll be ok because columns are consumed out of look at one per main loop iteration, but not all columns are interesting. Original comment: if gone from 2 to 3 look at all */ int numberLook = prob->numberColsToDo_ ; int iLook ; int *look = prob->colsToDo_ ; if (fill_level < 0) { look = prob->usefulColumnInt_+n ; if (!prob->anyProhibited()) { CoinIotaN(look,n,0) ; numberLook = n ; } else { numberLook = 0 ; for (iLook = 0 ; iLook < n ; iLook++) if (!prob->colProhibited(iLook)) look[numberLook++] = iLook ; } } /* Step through the columns of interest looking for suitable x(tgt). Interesting columns are limited by number of nonzeros to minimise fill-in during substitution. */ bool infeas = false ; const int maxLook = abs(fill_level) ; for (iLook = 0 ; iLook < numberLook ; iLook++) { const int tgtcol = look[iLook] ; const int tgtcol_len = colLengths[tgtcol] ; if (tgtcol_len <= 0 || tgtcol_len > maxLook) continue ; /* Set up to reconnoiter the column. The initial value for ait_max is chosen to make sure that anything that satisfies the stability check is big enough to use (though we'd clearly like something better). */ const CoinBigIndex kcs = colStarts[tgtcol] ; const CoinBigIndex kce = kcs+tgtcol_len ; const bool singletonCol = (tgtcol_len == 1) ; bool possibleRow = false ; bool singletonRow = false ; double ait_max = 20*ZTOLDP2 ; /* If this is a singleton column, the only concern is that the row is not a singleton row (that has its own, simpler, transform: slack_doubleton). But make sure we're not dealing with some tiny a(it). Note that there's no point in marking a singleton row. By definition, we won't encounter it again. */ if (singletonCol) { const int i = rowIndices[kcs] ; singletonRow = (rowLengths[i] == 1) ; possibleRow = (fabs(colCoeffs[kcs]) > ZTOLDP2) ; } else { /* If the column is not a singleton, we'll need a numerically stable substitution formula. Check that this is possible. One of the entangled rows must be an equality with a numerically stable coefficient, at least .1*MAX{i}a(it). */ for (CoinBigIndex kcol = kcs ; kcol < kce ; ++kcol) { const int i = rowIndices[kcol] ; if (rowLengths[i] == 1) { singletonRow = true ; break ; } const double abs_ait = fabs(colCoeffs[kcol]) ; ait_max = CoinMax(ait_max,abs_ait) ; if (fabs(rlo[i]-rup[i]) < feasTol && abs_ait > .1*ait_max) { possibleRow = true ; } } } if (singletonRow || !possibleRow) continue ; /* The column has possibilities. Walk the column, calculate row activity bounds L(i) and U(i) for suitable entangled rows, then calculate the improvement (if any) on the column bounds for l(j) and u(j). The goal is to satisfy the implied free condition over all entangled rows and find at least one row suitable for a substitution formula (if the column is not a natural singleton). Suitable: If this is a natural singleton, we need to look at the single entangled constraint. If we're attempting to create a singleton by substitution, only look at equalities with stable coefficients. If x(t) is integral, make sure the scaled rhs will be integral. */ # if PRESOLVE_DEBUG > 2 std::cout << " Checking x(" << tgtcol << "), " << tgtcol_len << " nonzeros" << ", l(" << tgtcol << ") " << clo[tgtcol] << ", u(" << tgtcol << ") " << cup[tgtcol] << ", c(" << tgtcol << ") " << cost[tgtcol] << "." << std::endl ; # endif const double lt = clo[tgtcol] ; const double ut = cup[tgtcol] ; double impliedLow = -COIN_DBL_MAX ; double impliedHigh = COIN_DBL_MAX ; int subst_ndx = -1 ; int subst_len = n ; for (CoinBigIndex kcol = kcs ; kcol < kce ; ++kcol) { const int i = rowIndices[kcol] ; assert(infiniteUp[i] != -3) ; if (infiniteUp[i] <= -2) continue ; const double ait = colCoeffs[kcol] ; const int leni = rowLengths[i] ; const double rloi = rlo[i] ; const double rupi = rup[i] ; /* A suitable row for substitution must * be an equality; * the entangled coefficient must be large enough to be numerically stable; * if x(t) is integer, the constant term in the substitution formula must be integer. */ bool rowiOK = (fabs(rloi-rupi) < feasTol) && (fabs(ait) > .1*ait_max) ; rowiOK = rowiOK && ((integerType[tgtcol] == 0) || (fabs((rloi/ait)-floor((rloi/ait)+0.5)) < feasTol)) ; /* If we don't already have L(i) and U(i), calculate now. Check for useless and infeasible constraints when that's done. */ int infUi = 0 ; int infLi = 0 ; double maxUi = 0.0 ; double maxLi = 0.0 ; const CoinBigIndex krs = rowStarts[i] ; const CoinBigIndex kre = krs+leni ; if (infiniteUp[i] == -1) { for (CoinBigIndex krow = krs ; krow < kre ; ++krow) { const double aik = rowCoeffs[krow] ; const int k = colIndices[krow] ; const double lk = clo[k] ; const double uk = cup[k] ; if (aik > 0.0) { if (uk < large) maxUi += uk*aik ; else ++infUi ; if (lk > -large) maxLi += lk*aik ; else ++infLi ; } else if (aik < 0.0) { if (uk < large) maxLi += uk*aik ; else ++infLi ; if (lk > -large) maxUi += lk*aik ; else ++infUi ; } } const double maxUinf = maxUi+infUi*1.0e31 ; const double maxLinf = maxLi-infLi*1.0e31 ; if (maxUinf <= rupi+feasTol && maxLinf >= rloi-feasTol) { infiniteUp[i] = -2 ; } else if (maxUinf < rloi-feasTol && !fixInfeasibility) { prob->status_|= 1 ; infeas = true ; prob->messageHandler()->message(COIN_PRESOLVE_ROWINFEAS, prob->messages()) << i << rloi << rupi << CoinMessageEol ; infiniteUp[i] = -3 ; } else if (maxLinf > rupi+feasTol && !fixInfeasibility) { prob->status_|= 1 ; infeas = true ; prob->messageHandler()->message(COIN_PRESOLVE_ROWINFEAS, prob->messages()) << i << rloi << rupi << CoinMessageEol ; infiniteUp[i] = -3 ; } else { infiniteUp[i] = infUi ; infiniteDown[i] = infLi ; maxUp[i] = maxUi ; maxDown[i] = maxLi ; } } else { infUi = infiniteUp[i] ; infLi = infiniteDown[i] ; maxUi = maxUp[i] ; maxLi = maxDown[i] ; } # if PRESOLVE_DEBUG > 2 std::cout << " row(" << i << ") " << leni << " nonzeros, blow " << rloi << ", L (" << infLi << "," << maxLi << "), U (" << infUi << "," << maxUi << "), b " << rupi ; if (infeas) std::cout << " infeas" ; if (infiniteUp[i] == -2) std::cout << " useless" ; std::cout << "." << std::endl ; # endif /* If we're infeasible, no sense checking further; escape the implied bound loop. The other possibility is that we've just discovered the constraint is useless, in which case we just move on to the next one in the column. */ if (infeas) break ; if (infiniteUp[i] == -2) continue ; assert(infiniteUp[i] >= 0 && infiniteUp[i] <= leni) ; /* At this point we have L(i) and U(i), expressed as finite and infinite components, and constraint i is neither useless or infeasible. Calculate the implied bounds l'(t) and u'(t) on x(t). The calculation (for a(it) > 0) is u'(t) <= (b(i) - (L(i)-a(it)l(t)))/a(it) = l(t)+(b(i)-L(i))/a(it) l'(t) >= (blow(i) - (U(i)-a(it)u(t)))/a(it) = u(t)+(blow(i)-U(i))/a(it) Insert the appropriate flips for a(it) < 0. Notice that if there's exactly one infinite contribution to L(i) or U(i) and x(t) is responsible, then the finite portion of L(i) or U(i) is already correct. Cut some slack for possible numerical inaccuracy if the finite portion of L(i) or U(i) is very large. If the new bound is very large, force it to infinity. */ double ltprime = -COIN_DBL_MAX ; double utprime = COIN_DBL_MAX ; if (ait > 0.0) { if (rloi > -large) { if (!infUi) { assert(ut < large) ; ltprime = ut+(rloi-maxUi)/ait ; if (fabs(maxUi) > 1.0e8 && !singletonCol) ltprime -= 1.0e-12*fabs(maxUi) ; } else if (infUi == 1 && ut > large) { ltprime = (rloi-maxUi)/ait ; if (fabs(maxUi) > 1.0e8 && !singletonCol) ltprime -= 1.0e-12*fabs(maxUi) ; } else { ltprime = -COIN_DBL_MAX ; } impliedLow = CoinMax(impliedLow,ltprime) ; } if (rupi < large) { if (!infLi) { assert(lt > -large) ; utprime = lt+(rupi-maxLi)/ait ; if (fabs(maxLi) > 1.0e8 && !singletonCol) utprime += 1.0e-12*fabs(maxLi) ; } else if (infLi == 1 && lt < -large) { utprime = (rupi-maxLi)/ait ; if (fabs(maxLi) > 1.0e8 && !singletonCol) utprime += 1.0e-12*fabs(maxLi) ; } else { utprime = COIN_DBL_MAX ; } impliedHigh = CoinMin(impliedHigh,utprime) ; } } else { if (rloi > -large) { if (!infUi) { assert(lt > -large) ; utprime = lt+(rloi-maxUi)/ait ; if (fabs(maxUi) > 1.0e8 && !singletonCol) utprime += 1.0e-12*fabs(maxUi) ; } else if (infUi == 1 && lt < -large) { utprime = (rloi-maxUi)/ait ; if (fabs(maxUi) > 1.0e8 && !singletonCol) utprime += 1.0e-12*fabs(maxUi) ; } else { utprime = COIN_DBL_MAX ; } impliedHigh = CoinMin(impliedHigh,utprime) ; } if (rupi < large) { if (!infLi) { assert(ut < large) ; ltprime = ut+(rupi-maxLi)/ait ; if (fabs(maxLi) > 1.0e8 && !singletonCol) ltprime -= 1.0e-12*fabs(maxLi) ; } else if (infLi == 1 && ut > large) { ltprime = (rupi-maxLi)/ait ; if (fabs(maxLi) > 1.0e8 && !singletonCol) ltprime -= 1.0e-12*fabs(maxLi) ; } else { ltprime = -COIN_DBL_MAX ; } impliedLow = CoinMax(impliedLow,ltprime) ; } } # if PRESOLVE_DEBUG > 2 std::cout << " row(" << i << ") l'(" << tgtcol << ") " << ltprime << ", u'(" << tgtcol << ") " << utprime ; if (lt <= impliedLow && impliedHigh <= ut) std::cout << "; implied free satisfied" ; std::cout << "." << std::endl ; # endif /* For x(t) integral, see if a substitution formula based on row i will preserve integrality. The final check in this clause aims to preserve SOS equalities (i.e., don't eliminate a non-trivial SOS equality from the system using this transform). Note that this can't be folded into the L(i)/U(i) loop because the answer changes with x(t). Original comment: can only accept if good looking row */ if (integerType[tgtcol]) { possibleRow = true ; bool allOnes = true ; for (CoinBigIndex krow = krs ; krow < kre ; ++krow) { const int j = colIndices[krow] ; const double scaled_aij = rowCoeffs[krow]/ait ; if (fabs(scaled_aij) != 1.0) allOnes = false ; if (!integerType[j] || fabs(scaled_aij-floor(scaled_aij+0.5)) > feasTol) { possibleRow = false ; break ; } } if (rloi == 1.0 && leni >= 5 && stopSomeStuff && allOnes) possibleRow = false ; rowiOK = rowiOK && possibleRow ; } /* Do we have a winner? If we have an incumbent, prefer the one with fewer coefficients. */ if (rowiOK) { if (subst_ndx < 0 || (leni < subst_len)) { # if PRESOLVE_DEBUG > 2 std::cout << " row(" << i << ") now candidate for x(" << tgtcol << ")." << std::endl ; # endif subst_ndx = i ; subst_len = leni ; } } } if (infeas) break ; /* Can we do the transform? If so, subst_ndx will have a valid row. Record the implied free variable and the equality we'll use to substitute it out. Take the row out of the running --- we can't use the same row for two substitutions. */ if (lt <= impliedLow && impliedHigh <= ut && (subst_ndx >= 0 || singletonRow)) { implied_free[numberFree] = subst_ndx ; infiniteUp[subst_ndx] = -4 ; whichFree[numberFree++] = tgtcol ; # if PRESOLVE_DEBUG > 1 std::cout << " x(" << tgtcol << ") implied free by row " << subst_ndx << std::endl ; # endif } } delete[] infiniteDown ; delete[] infiniteUp ; delete[] maxDown ; delete[] maxUp ; /* If we're infeasible, there's nothing more to be done. */ if (infeas) { # if PRESOLVE_SUMMARY > 0 || PRESOLVE_DEBUG > 0 std::cout << " IMPLIED_FREE: infeasible." << std::endl ; # endif return (next) ; } /* We have a list of implied free variables, each with a row that can be used to substitute the variable to singleton status if the variable is not a natural singleton. The loop here will only process natural singletons. We'll hand the remainder to subst_constraint_action below, if there is a remainder. The natural singletons processed here are compressed out of whichFree and implied_free. */ int unprocessed = 0 ; for (iLook = 0 ; iLook < numberFree ; iLook++) { const int tgtcol = whichFree[iLook] ; if (colLengths[tgtcol] != 1) { whichFree[unprocessed] = whichFree[iLook] ; implied_free[unprocessed] = implied_free[iLook] ; unprocessed++ ; continue ; } const int tgtrow = implied_free[iLook] ; const int tgtrow_len = rowLengths[tgtrow] ; const CoinBigIndex kcs = colStarts[tgtcol] ; const double tgtcol_coeff = colCoeffs[kcs] ; const double tgtcol_cost = cost[tgtcol] ; const CoinBigIndex krs = rowStarts[tgtrow] ; const CoinBigIndex kre = krs+tgtrow_len ; if (tgtcol_cost != 0.0) { // Check costs don't make unstable //double minOldCost=COIN_DBL_MAX; double maxOldCost=0.0; //double minNewCost=COIN_DBL_MAX; double maxNewCost=0.0; for (CoinBigIndex krow = krs ; krow < kre ; krow++) { const int j = colIndices[krow] ; if (j != tgtcol) { double oldCost = cost[j] ; double newCost = oldCost - (tgtcol_cost*rowCoeffs[krow])/tgtcol_coeff ; oldCost = fabs(oldCost); newCost = fabs(newCost); //minOldCost=CoinMin(minOldCost,oldCost); maxOldCost=CoinMax(maxOldCost,oldCost); //minNewCost=CoinMin(minNewCost,newCost); maxNewCost=CoinMax(maxNewCost,newCost); } } if (maxNewCost>1000.0*(maxOldCost+1.0) /*&& maxOldCost*/) { //printf("too big %d tgtcost %g maxOld %g maxNew %g\n", // tgtcol,tgtcol_cost,maxOldCost,maxNewCost); continue; } } /* Initialise the postsolve action. We need to remember the row and column. */ action *s = &actions[nactions++] ; s->row = tgtrow ; s->col = tgtcol ; s->clo = clo[tgtcol] ; s->cup = cup[tgtcol] ; s->rlo = rlo[tgtrow] ; s->rup = rup[tgtrow] ; s->ninrow = tgtrow_len ; s->rowels = presolve_dupmajor(rowCoeffs,colIndices,tgtrow_len,krs) ; s->costs = NULL ; /* We're processing a singleton, hence no substitutions in the matrix, but we do need to fix up the cost vector. The substitution formula is x(t) = (rhs(i) - SUM{j\t}a(ik)x(k))/a(it) hence c'(k) = c(k)-c(t)a(ik)/a(it) and there's a constant offset c(t)rhs(i)/a(it). where rhs(i) is one of blow(i) or b(i). For general constraints where blow(i) != b(i), we need to take a bit of care. If only one of blow(i) or b(i) is finite, that's the one to use. Where we have two finite but unequal bounds, choose the bound that will result in the most favourable value for x(t). For minimisation, if c(t) < 0 we want to maximise x(t), so choose b(i) if a(it) > 0, blow(i) if a(it) < 0. A bit of case analysis says choose b(i) when c(t)a(it) < 0, blow(i) when c(t)a(it) > 0. We shouldn't be here if both row bounds are infinite. Fortunately, the objective coefficients are not affected by this. */ if (tgtcol_cost != 0.0) { double tgtrow_rhs = rup[tgtrow] ; if (fabs(rlo[tgtrow]-rup[tgtrow]) > feasTol) { const double rlot = rlo[tgtrow] ; const double rupt = rup[tgtrow] ; if (rlot > -COIN_DBL_MAX && rupt < COIN_DBL_MAX) { if ((tgtcol_cost*tgtcol_coeff) > 0) tgtrow_rhs = rlot ; else tgtrow_rhs = rupt ; } else if (rupt >= COIN_DBL_MAX) { tgtrow_rhs = rlot ; } } assert(fabs(tgtrow_rhs) <= large) ; double *save_costs = new double[tgtrow_len] ; for (CoinBigIndex krow = krs ; krow < kre ; krow++) { const int j = colIndices[krow] ; save_costs[krow-krs] = cost[j] ; cost[j] -= (tgtcol_cost*rowCoeffs[krow])/tgtcol_coeff ; } prob->change_bias((tgtcol_cost*tgtrow_rhs)/tgtcol_coeff) ; cost[tgtcol] = 0.0 ; s->costs = save_costs ; } /* Remove the row from the column-major representation, queuing up each column for reconsideration. Then remove the row from the row-major representation. */ for (CoinBigIndex krow = krs ; krow < kre ; krow++) { const int j = colIndices[krow] ; presolve_delete_from_col(tgtrow,j,colStarts,colLengths,rowIndices, colCoeffs) ; if (colLengths[j] == 0) { PRESOLVE_REMOVE_LINK(prob->clink_,j) ; } else { prob->addCol(j) ; } } PRESOLVE_REMOVE_LINK(clink,tgtcol) ; colLengths[tgtcol] = 0 ; PRESOLVE_REMOVE_LINK(rlink,tgtrow) ; rowLengths[tgtrow] = 0 ; rlo[tgtrow] = 0.0 ; rup[tgtrow] = 0.0 ; } /* We're done with the natural singletons. Trim actions to length and create the postsolve object. */ if (nactions) { # if PRESOLVE_SUMMARY > 0 || PRESOLVE_DEBUG > 0 printf("NIMPLIED FREE: %d\n", nactions) ; # endif action *actions1 = new action[nactions] ; CoinMemcpyN(actions, nactions, actions1) ; next = new implied_free_action(nactions,actions1,next) ; } delete [] actions ; # if PRESOLVE_DEBUG > 0 std::cout << " IMPLIED_FREE: identified " << numberFree << " implied free transforms, processed " << numberFree-unprocessed << " natural singletons." << std::endl ; # endif /* Now take a stab at the columns that aren't natural singletons, if there are any left. */ if (unprocessed != 0) { next = subst_constraint_action::presolve(prob,implied_free,whichFree, unprocessed,next,maxLook) ; } /* Give some feedback to the presolve driver. If we aren't finding enough candidates and haven't reached the limit, bump fill_level and return a negated value. The presolve driver can tweak this value or simply return it on the next call. See the top of the routine for a full explanation. */ if (numberFree < 30 && maxLook < prob->maxSubstLevel_) { fill_level = -(maxLook+1) ; } else { fill_level = maxLook ; } # if COIN_PRESOLVE_TUNING > 0 double thisTime ; if (prob->tuning_) thisTime = CoinCpuTime() ; # endif # if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 presolve_consistent(prob) ; presolve_links_ok(prob) ; presolve_check_sol(prob) ; presolve_check_nbasic(prob) ; # endif # if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 int droppedRows = prob->countEmptyRows()-startEmptyRows ; int droppedColumns = prob->countEmptyCols()-startEmptyColumns ; std::cout << "Leaving implied_free_action::presolve, fill level " << fill_level << ", " << droppedRows << " rows, " << droppedColumns << " columns dropped" ; # if COIN_PRESOLVE_TUNING > 0 std::cout << " in " << thisTime-startTime << "s" ; # endif std::cout << "." << std::endl ; # endif return (next) ; } const char *implied_free_action::name() const { return ("implied_free_action") ; } /* Restore the target constraint and target column x(t) eliminated by the implied free presolve action. We'll solve the target constraint to get a value for x(t), so by construction the constraint is tight. For range constraints, we need to consider both the upper and lower row bounds when calculating a value for x(t). x(t) can end up at one of its column bounds or strictly between bounds. Then there's the matter of patching up the basis and solution. The natural thing to do is to make the logical nonbasic and x(t) basic. No corrections to duals or reduced costs are required because we built that correction into the problem when we modified the objective. Work the linear algebra; it's very neat. It will frequently happen that the implied bounds on x(t) are simply equal to the existing column bounds and the value we calculate here will be at one of the original column bounds. This leaves x(t) degenerate basic. The original version of this routine looked for this and attempted to make x(t) nonbasic and use the logical as the basic variable. The linear algebra for this is ugly. To calculate the proper correction for the dual variables requires the basis inverse (terms do not conveniently cancel). The original code made no attempt to fix the duals and applied a correction to the reduced costs that was valid only for the nonbasic partition. It accepted the result if it was dual feasible. In general this would leave slack dual constraints. It's really not possible to predict the effect going forward on subsequent postsolve transforms. Nor is it clear to me that a degenerate basic architectural is inherently worse than a degenerate basic logical. This version of the code always makes x(t) basic. */ void implied_free_action::postsolve(CoinPostsolveMatrix *prob) const { const action *const actions = actions_ ; const int nactions = nactions_ ; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 char *cdone = prob->cdone_ ; char *rdone = prob->rdone_ ; # if PRESOLVE_DEBUG > 0 std::cout << "Entering implied_free_action::postsolve, " << nactions << " transforms to undo." << std::endl ; # endif presolve_check_threads(prob) ; presolve_check_free_list(prob) ; presolve_check_sol(prob,2,2,2) ; presolve_check_nbasic(prob) ; # endif /* Unpack the column-major representation. */ CoinBigIndex *colStarts = prob->mcstrt_ ; int *colLengths = prob->hincol_ ; int *rowIndices = prob->hrow_ ; double *colCoeffs = prob->colels_ ; CoinBigIndex *link = prob->link_ ; CoinBigIndex &free_list = prob->free_list_ ; /* Column bounds, row bounds, and cost. */ double *clo = prob->clo_ ; double *cup = prob->cup_ ; double *rlo = prob->rlo_ ; double *rup = prob->rup_ ; double *cost = prob->cost_ ; /* Solution, reduced costs, duals, row activity. */ double *sol = prob->sol_ ; double *rcosts = prob->rcosts_ ; double *acts = prob->acts_ ; double *rowduals = prob->rowduals_ ; /* In your dreams ... hardwired to minimisation. */ const double maxmin = 1.0 ; /* And a suitably small infinity. */ const double large = 1.0e20 ; /* Open a loop to restore the row and column for each action. Start by unpacking the action. There won't be saved costs if the original cost c(t) was zero. */ for (const action *f = &actions[nactions-1] ; actions <= f ; f--) { const int tgtrow = f->row ; const int tgtcol = f->col ; const int tgtrow_len = f->ninrow ; const double *tgtrow_coeffs = f->rowels ; const int *tgtrow_cols = reinterpret_cast(tgtrow_coeffs+tgtrow_len) ; const double *saved_costs = f->costs ; # if PRESOLVE_DEBUG > 2 std::cout << " restoring col " << tgtcol << " row " << tgtrow ; if (saved_costs != 0) std::cout << ", modified costs" ; std::cout << "." << std::endl ; # endif /* Restore the target row and column and the original cost coefficients. We need to initialise the target column; for others, just bump the coefficient count. While we're restoring the row, pick off the coefficient for x(t) and calculate the row activity. */ double tgt_coeff = 0.0 ; double tgtrow_act = 0.0 ; for (int krow = 0 ; krow < tgtrow_len ; krow++) { const int j = tgtrow_cols[krow] ; const double atj = tgtrow_coeffs[krow] ; assert(free_list >= 0 && free_list < prob->bulk0_) ; CoinBigIndex kk = free_list ; free_list = link[free_list] ; link[kk] = colStarts[j] ; colStarts[j] = kk ; colCoeffs[kk] = atj ; rowIndices[kk] = tgtrow ; if (saved_costs) cost[j] = saved_costs[krow] ; if (j == tgtcol) { colLengths[j] = 1 ; clo[tgtcol] = f->clo ; cup[tgtcol] = f->cup ; rcosts[j] = -cost[tgtcol]/atj ; tgt_coeff = atj ; } else { colLengths[j]++ ; tgtrow_act += atj*sol[j] ; } } rlo[tgtrow] = f->rlo ; rup[tgtrow] = f->rup ; PRESOLVEASSERT(fabs(tgt_coeff) > ZTOLDP) ; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 cdone[tgtcol] = IMPLIED_FREE ; rdone[tgtrow] = IMPLIED_FREE ; # endif # if PRESOLVE_CONSISTENCY > 0 presolve_check_free_list(prob) ; # endif /* Calculate a value for x(t). We have two possible values for x(t), calculated against the upper and lower bound of the constraint. x(t) could end up at one of its original bounds or it could end up strictly within bounds. In either event, the constraint will be tight. The code simply forces the calculated value for x(t) to be within bounds. Arguably it should complain more loudly as this likely indicates algorithmic error or numerical inaccuracy. You'll get a warning if debugging is enabled. */ double xt_lo,xt_up ; if (tgt_coeff > 0) { xt_lo = (rlo[tgtrow]-tgtrow_act)/tgt_coeff ; xt_up = (rup[tgtrow]-tgtrow_act)/tgt_coeff ; } else { xt_lo = (rup[tgtrow]-tgtrow_act)/tgt_coeff ; xt_up = (rlo[tgtrow]-tgtrow_act)/tgt_coeff ; } const double lt = clo[tgtcol] ; const double ut = cup[tgtcol] ; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 bool chklo = true ; bool chkup = true ; if (tgt_coeff > 0) { if (rlo[tgtrow] < -large) chklo = false ; if (rup[tgtrow] > large) chkup = false ; } else { if (rup[tgtrow] > large) chklo = false ; if (rlo[tgtrow] < -large) chkup = false ; } if (chklo && (xt_lo < lt-prob->ztolzb_)) { std::cout << " LOW CSOL (implied_free): x(" << tgtcol << ") lb " << lt << ", sol = " << xt_lo << ", err " << (lt-xt_lo) << "." << std::endl ; } if (chkup && (xt_up > ut+prob->ztolzb_)) { std::cout << " HIGH CSOL (implied_free): x(" << tgtcol << ") ub " << ut << ", sol = " << xt_up << ", err " << (xt_up-ut) << "." << std::endl ; } # if PRESOLVE_DEBUG > 2 std::cout << " x(" << tgtcol << ") lb " << lt << " lo " << xt_lo << ", up " << xt_up << " ub " << ut << "." << std::endl ; # endif # endif xt_lo = CoinMax(xt_lo,lt) ; xt_up = CoinMin(xt_up,ut) ; /* Time to make x(t) basic and the logical nonbasic. The sign of the dual determines the tight row bound, which in turn determines the value of x(t). Because the row is tight, activity is by definition equal to the bound. Coin convention is that a <= constraint puts a lower bound on the slack and a >= constraint puts an upper bound on the slack. Case analysis (minimisation) says: dual >= 0 ==> reduced cost <= 0 ==> NBUB ==> finite rlo dual <= 0 ==> reduced cost >= 0 ==> NBLB ==> finite rup */ const double ct = maxmin*cost[tgtcol] ; double possibleDual = ct/tgt_coeff ; rowduals[tgtrow] = possibleDual ; if (possibleDual >= 0 && rlo[tgtrow] > -large) { sol[tgtcol] = (rlo[tgtrow]-tgtrow_act)/tgt_coeff ; acts[tgtrow] = rlo[tgtrow] ; prob->setRowStatus(tgtrow,CoinPrePostsolveMatrix::atUpperBound) ; } else if (possibleDual <= 0 && rup[tgtrow] < large) { sol[tgtcol] = (rup[tgtrow]-tgtrow_act)/tgt_coeff ; acts[tgtrow] = rup[tgtrow] ; prob->setRowStatus(tgtrow,CoinPrePostsolveMatrix::atLowerBound) ; } else { assert(rup[tgtrow] < large || rlo[tgtrow] > -large) ; if (rup[tgtrow] < large) { sol[tgtcol] = (rup[tgtrow]-tgtrow_act)/tgt_coeff ; acts[tgtrow] = rup[tgtrow] ; prob->setRowStatus(tgtrow,CoinPrePostsolveMatrix::atLowerBound) ; } else { sol[tgtcol] = (rlo[tgtrow]-tgtrow_act)/tgt_coeff ; acts[tgtrow] = rlo[tgtrow] ; prob->setRowStatus(tgtrow,CoinPrePostsolveMatrix::atUpperBound) ; } # if PRESOLVE_DEBUG > 0 std::cout << "BAD ROW STATUS row " << tgtrow << ": dual " << rowduals[tgtrow] << " but row " << ((rowduals[tgtrow] > 0)?"upper":"lower") << " bound is not finite; forcing status " << prob->rowStatusString(tgtrow) << "." << std::endl ; # endif } prob->setColumnStatus(tgtcol,CoinPrePostsolveMatrix::basic) ; rcosts[tgtcol] = 0.0 ; # if PRESOLVE_DEBUG > 2 std::cout << " x(" << tgtcol << ") B dj " << rcosts[tgtcol] << "." << std::endl ; std::cout << " row " << tgtrow << " dual " << rowduals[tgtrow] << "." << std::endl ; # endif PRESOLVEASSERT(acts[tgtrow] >= rlo[tgtrow]-1.0e-5 && acts[tgtrow] <= rup[tgtrow]+1.0e-5) ; # if PRESOLVE_DEBUG > 2 /* Debug code to compare the reduced costs against a calculation from scratch as c(j)-ya(j). */ for (int krow = 0 ; krow < tgtrow_len ; krow++) { const int j = tgtrow_cols[krow] ; const int lenj = colLengths[j] ; double dj = cost[j] ; CoinBigIndex kcol = colStarts[j] ; for (int cntj = 0 ; cntj < lenj ; ++cntj) { const int i = rowIndices[kcol] ; const double aij = colCoeffs[kcol] ; dj -= rowduals[i]*aij ; kcol = link[kcol] ; } if (fabs(dj-rcosts[j]) > 1.0e-3) { std::cout << " cbar(" << j << ") update " << rcosts[j] << " expected " << dj << " err " << fabs(dj-rcosts[j]) << "." << std::endl ; } } # endif } # if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 presolve_check_threads(prob) ; presolve_check_sol(prob,2,2,2) ; presolve_check_nbasic(prob) ; # if PRESOLVE_DEBUG > 0 std::cout << "Leaving implied_free_action::postsolve." << std::endl ; # endif # endif return ; } implied_free_action::~implied_free_action() { int i ; for (i=0;i #include "CoinPragma.hpp" #include "CoinSimpFactorization.hpp" #include "CoinIndexedVector.hpp" #include "CoinHelperFunctions.hpp" #include "CoinPackedMatrix.hpp" #include "CoinFinite.hpp" #include #define ARRAY 0 FactorPointers::FactorPointers( int numRows, int numColumns, int *UrowLengths_, int *UcolLengths_ ){ rowMax = new double[numRows]; double *current=rowMax; const double *end=current+numRows; for ( ; current!=end; ++current ) *current=-1.0; firstRowKnonzeros = new int[numRows+1]; CoinFillN(firstRowKnonzeros, numRows+1, -1 ); prevRow = new int[numRows]; nextRow = new int[numRows]; firstColKnonzeros = new int[numRows+1]; memset(firstColKnonzeros, -1, (numRows+1)*sizeof(int) ); prevColumn = new int[numColumns]; nextColumn = new int[numColumns]; newCols = new int[numRows]; for ( int i=numRows-1; i>=0; --i ){ int length=UrowLengths_[i]; prevRow[i]=-1; nextRow[i]=firstRowKnonzeros[length]; if ( nextRow[i]!=-1 ) prevRow[nextRow[i]]=i; firstRowKnonzeros[length]=i; } for ( int i=numColumns-1; i>=0; --i ){ int length=UcolLengths_[i]; prevColumn[i]=-1; nextColumn[i]=firstColKnonzeros[length]; if ( nextColumn[i]!=-1 ) prevColumn[nextColumn[i]]=i; firstColKnonzeros[length]=i; } } FactorPointers::~ FactorPointers(){ delete [] rowMax; delete [] firstRowKnonzeros; delete [] prevRow; delete [] nextRow; delete [] firstColKnonzeros; delete [] prevColumn; delete [] nextColumn; delete [] newCols; } //:class CoinSimpFactorization. Deals with Factorization and Updates // CoinSimpFactorization. Constructor CoinSimpFactorization::CoinSimpFactorization ( ) : CoinOtherFactorization() { gutsOfInitialize(); } /// Copy constructor CoinSimpFactorization::CoinSimpFactorization ( const CoinSimpFactorization &other) : CoinOtherFactorization(other) { gutsOfInitialize(); gutsOfCopy(other); } // Clone CoinOtherFactorization * CoinSimpFactorization::clone() const { return new CoinSimpFactorization(*this); } /// The real work of constructors etc void CoinSimpFactorization::gutsOfDestructor() { delete [] elements_; delete [] pivotRow_; delete [] workArea_; elements_ = NULL; pivotRow_ = NULL; workArea_ = NULL; numberRows_ = 0; numberColumns_ = 0; numberGoodU_ = 0; status_ = -1; maximumRows_=0; maximumSpace_=0; numberSlacks_=0; firstNumberSlacks_=0; // delete [] denseVector_; delete [] workArea2_; delete [] workArea3_; delete [] vecLabels_; delete [] indVector_; delete [] auxVector_; delete [] auxInd_; delete [] vecKeep_; delete [] indKeep_; delete [] LrowStarts_; delete [] LrowLengths_; delete [] Lrows_; delete [] LrowInd_; delete [] LcolStarts_; delete [] LcolLengths_; delete [] Lcolumns_; delete [] LcolInd_; delete [] UrowStarts_; delete [] UrowLengths_; #ifdef COIN_SIMP_CAPACITY delete [] UrowCapacities_; #endif delete [] Urows_; delete [] UrowInd_; delete [] prevRowInU_; delete [] nextRowInU_; delete [] UcolStarts_; delete [] UcolLengths_; #ifdef COIN_SIMP_CAPACITY delete [] UcolCapacities_; #endif delete [] Ucolumns_; delete [] UcolInd_; delete [] prevColInU_; delete [] nextColInU_; delete [] colSlack_; delete [] invOfPivots_; delete [] colOfU_; delete [] colPosition_; delete [] rowOfU_; delete [] rowPosition_; delete [] secRowOfU_; delete [] secRowPosition_; delete [] EtaPosition_; delete [] EtaStarts_; delete [] EtaLengths_; delete [] EtaInd_; delete [] Eta_; denseVector_=NULL; workArea2_=NULL; workArea3_=NULL; vecLabels_=NULL; indVector_=NULL; auxVector_=NULL; auxInd_=NULL; vecKeep_=NULL; indKeep_=NULL; LrowStarts_=NULL; LrowLengths_=NULL; Lrows_=NULL; LrowInd_=NULL; LcolStarts_=NULL; LcolLengths_=NULL; Lcolumns_=NULL; LcolInd_=NULL; UrowStarts_=NULL; UrowLengths_=NULL; #ifdef COIN_SIMP_CAPACITY UrowCapacities_=NULL; #endif Urows_=NULL; UrowInd_=NULL; prevRowInU_=NULL; nextRowInU_=NULL; UcolStarts_=NULL; UcolLengths_=NULL; #ifdef COIN_SIMP_CAPACITY UcolCapacities_=NULL; #endif Ucolumns_=NULL; UcolInd_=NULL; prevColInU_=NULL; nextColInU_=NULL; colSlack_=NULL; invOfPivots_=NULL; colOfU_=NULL; colPosition_=NULL; rowOfU_=NULL; rowPosition_=NULL; secRowOfU_=NULL; secRowPosition_=NULL; EtaPosition_=NULL; EtaStarts_=NULL; EtaLengths_=NULL; EtaInd_=NULL; Eta_=NULL; } void CoinSimpFactorization::gutsOfInitialize() { pivotTolerance_ = 1.0e-1; zeroTolerance_ = 1.0e-13; #ifndef COIN_FAST_CODE slackValue_ = -1.0; #endif maximumPivots_=200; relaxCheck_=1.0; numberRows_ = 0; numberColumns_ = 0; numberGoodU_ = 0; status_ = -1; numberPivots_ = 0; maximumRows_=0; maximumSpace_=0; numberSlacks_=0; firstNumberSlacks_=0; elements_ = NULL; pivotRow_ = NULL; workArea_ = NULL; denseVector_=NULL; workArea2_=NULL; workArea3_=NULL; vecLabels_=NULL; indVector_=NULL; auxVector_=NULL; auxInd_=NULL; vecKeep_=NULL; indKeep_=NULL; LrowStarts_=NULL; LrowLengths_=NULL; Lrows_=NULL; LrowInd_=NULL; LcolStarts_=NULL; LcolLengths_=NULL; Lcolumns_=NULL; LcolInd_=NULL; UrowStarts_=NULL; UrowLengths_=NULL; #ifdef COIN_SIMP_CAPACITY UrowCapacities_=NULL; #endif Urows_=NULL; UrowInd_=NULL; prevRowInU_=NULL; nextRowInU_=NULL; UcolStarts_=NULL; UcolLengths_=NULL; #ifdef COIN_SIMP_CAPACITY UcolCapacities_=NULL; #endif Ucolumns_=NULL; UcolInd_=NULL; prevColInU_=NULL; nextColInU_=NULL; colSlack_=NULL; invOfPivots_=NULL; colOfU_=NULL; colPosition_=NULL; rowOfU_=NULL; rowPosition_=NULL; secRowOfU_=NULL; secRowPosition_=NULL; EtaPosition_=NULL; EtaStarts_=NULL; EtaLengths_=NULL; EtaInd_=NULL; Eta_=NULL; } void CoinSimpFactorization::initialSomeNumbers(){ keepSize_=-1; LrowSize_=-1; // LrowCap_ in allocateSomeArrays LcolSize_=-1; // LcolCap_ in allocateSomeArrays // UrowMaxCap_ in allocateSomeArrays UrowEnd_=-1; firstRowInU_=-1; lastRowInU_=-1; firstColInU_=-1; lastColInU_=-1; //UcolMaxCap_ in allocateSomeArrays UcolEnd_=-1; EtaSize_=0; lastEtaRow_=-1; //maxEtaRows_ in allocateSomeArrays //EtaMaxCap_ in allocateSomeArrays // minIncrease_ in allocateSomeArrays updateTol_=1.0e12; doSuhlHeuristic_=true; maxU_=-1.0; maxGrowth_=1.e12; maxA_=-1.0; pivotCandLimit_=4; minIncrease_=10; } // ~CoinSimpFactorization. Destructor CoinSimpFactorization::~CoinSimpFactorization ( ) { gutsOfDestructor(); } // = CoinSimpFactorization & CoinSimpFactorization::operator = ( const CoinSimpFactorization & other ) { if (this != &other) { gutsOfDestructor(); gutsOfInitialize(); gutsOfCopy(other); } return *this; } void CoinSimpFactorization::gutsOfCopy(const CoinSimpFactorization &other) { pivotTolerance_ = other.pivotTolerance_; zeroTolerance_ = other.zeroTolerance_; #ifndef COIN_FAST_CODE slackValue_ = other.slackValue_; #endif relaxCheck_ = other.relaxCheck_; numberRows_ = other.numberRows_; numberColumns_ = other.numberColumns_; maximumRows_ = other.maximumRows_; maximumSpace_ = other.maximumSpace_; numberGoodU_ = other.numberGoodU_; maximumPivots_ = other.maximumPivots_; numberPivots_ = other.numberPivots_; factorElements_ = other.factorElements_; status_ = other.status_; numberSlacks_ = other.numberSlacks_; firstNumberSlacks_ = other.firstNumberSlacks_; if (other.pivotRow_) { pivotRow_ = new int [2*maximumRows_+maximumPivots_]; memcpy(pivotRow_,other.pivotRow_,(2*maximumRows_+numberPivots_)*sizeof(int)); elements_ = new CoinFactorizationDouble [maximumSpace_]; memcpy(elements_,other.elements_,(maximumRows_+numberPivots_)*maximumRows_*sizeof(CoinFactorizationDouble)); workArea_ = new CoinFactorizationDouble [maximumRows_]; } else { elements_ = NULL; pivotRow_ = NULL; workArea_ = NULL; } keepSize_ = other.keepSize_; LrowSize_ = other.LrowSize_; LrowCap_ = other.LrowCap_; LcolSize_ = other.LcolSize_; LcolCap_ = other.LcolCap_; UrowMaxCap_ = other.UrowMaxCap_; UrowEnd_ = other.UrowEnd_; firstRowInU_ = other.firstRowInU_; lastRowInU_ = other.lastRowInU_; firstColInU_ = other.firstColInU_; lastColInU_ = other.lastColInU_; UcolMaxCap_ = other.UcolMaxCap_; UcolEnd_ = other.UcolEnd_; EtaSize_ = other.EtaSize_; lastEtaRow_ = other.lastEtaRow_; maxEtaRows_ = other.maxEtaRows_; EtaMaxCap_ = other.EtaMaxCap_; minIncrease_ = other.minIncrease_; updateTol_ = other.updateTol_; if (other.denseVector_) { denseVector_ = new double[maximumRows_]; memcpy(denseVector_,other.denseVector_,maximumRows_*sizeof(double)); } else denseVector_=NULL; if (other.workArea2_) { workArea2_ = new double[maximumRows_]; memcpy(workArea2_,other.workArea2_,maximumRows_*sizeof(double)); } else workArea2_=NULL; if (other.workArea3_) { workArea3_ = new double[maximumRows_]; memcpy(workArea3_,other.workArea3_,maximumRows_*sizeof(double)); } else workArea3_=NULL; if (other.vecLabels_) { vecLabels_ = new int[maximumRows_]; memcpy(vecLabels_,other.vecLabels_,maximumRows_*sizeof(int)); } else vecLabels_=NULL; if (other.indVector_) { indVector_ = new int[maximumRows_]; memcpy(indVector_ ,other.indVector_ , maximumRows_ *sizeof(int )); } else indVector_=NULL; if (other.auxVector_) { auxVector_ = new double[maximumRows_]; memcpy(auxVector_ ,other.auxVector_ , maximumRows_ *sizeof(double )); } else auxVector_=NULL; if (other.auxInd_) { auxInd_ = new int[maximumRows_]; memcpy(auxInd_ , other.auxInd_, maximumRows_ *sizeof(int)); } else auxInd_=NULL; if (other.vecKeep_) { vecKeep_ = new double[maximumRows_]; memcpy(vecKeep_ ,other.vecKeep_ , maximumRows_ *sizeof(double)); } else vecKeep_=NULL; if (other.indKeep_) { indKeep_ = new int[maximumRows_]; memcpy(indKeep_ , other.indKeep_, maximumRows_ *sizeof(int)); } else indKeep_=NULL; if (other.LrowStarts_) { LrowStarts_ = new int[maximumRows_]; memcpy(LrowStarts_ , other.LrowStarts_, maximumRows_ *sizeof(int)); } else LrowStarts_=NULL; if (other.LrowLengths_) { LrowLengths_ = new int[maximumRows_]; memcpy(LrowLengths_ , other.LrowLengths_ , maximumRows_ *sizeof(int)); } else LrowLengths_=NULL; if (other.Lrows_) { Lrows_ = new double[other.LrowCap_]; memcpy(Lrows_ , other.Lrows_, other.LrowCap_*sizeof(double)); } else Lrows_=NULL; if (other.LrowInd_) { LrowInd_ = new int[other.LrowCap_]; memcpy(LrowInd_, other.LrowInd_, other.LrowCap_*sizeof(int)); } else LrowInd_=NULL; if (other.LcolStarts_) { LcolStarts_ = new int[maximumRows_]; memcpy(LcolStarts_ ,other.LcolStarts_ , maximumRows_*sizeof(int)); } else LcolStarts_=NULL; if (other.LcolLengths_) { LcolLengths_ = new int[maximumRows_]; memcpy(LcolLengths_ , other.LcolLengths_ , maximumRows_ *sizeof(int)); } else LcolLengths_=NULL; if (other.Lcolumns_) { Lcolumns_ = new double[other.LcolCap_]; memcpy(Lcolumns_ ,other.Lcolumns_ , other.LcolCap_ *sizeof(double)); } else Lcolumns_=NULL; if (other.LcolInd_) { LcolInd_ = new int[other.LcolCap_]; memcpy(LcolInd_ , other.LcolInd_, other.LcolCap_*sizeof(int)); } else LcolInd_=NULL; if (other.UrowStarts_) { UrowStarts_ = new int[maximumRows_]; memcpy(UrowStarts_ ,other.UrowStarts_ , maximumRows_ *sizeof(int)); } else UrowStarts_=NULL; if (other.UrowLengths_) { UrowLengths_ = new int[maximumRows_]; memcpy(UrowLengths_ ,other.UrowLengths_ , maximumRows_ *sizeof(int)); } else UrowLengths_=NULL; #ifdef COIN_SIMP_CAPACITY if (other.UrowCapacities_) { UrowCapacities_ = new int[maximumRows_]; memcpy(UrowCapacities_ ,other.UrowCapacities_ , maximumRows_ *sizeof(int)); } else UrowCapacities_=NULL; #endif if (other.Urows_) { Urows_ = new double[other.UrowMaxCap_]; memcpy(Urows_ ,other.Urows_ , other.UrowMaxCap_ *sizeof(double)); } else Urows_=NULL; if (other.UrowInd_) { UrowInd_ = new int[other.UrowMaxCap_]; memcpy(UrowInd_,other.UrowInd_, other.UrowMaxCap_*sizeof(int)); } else UrowInd_=NULL; if (other.prevRowInU_) { prevRowInU_ = new int[maximumRows_]; memcpy(prevRowInU_ , other.prevRowInU_, maximumRows_*sizeof(int)); } else prevRowInU_=NULL; if (other.nextRowInU_) { nextRowInU_ = new int[maximumRows_]; memcpy(nextRowInU_, other.nextRowInU_, maximumRows_*sizeof(int)); } else nextRowInU_=NULL; if (other.UcolStarts_) { UcolStarts_ = new int[maximumRows_]; memcpy(UcolStarts_ , other.UcolStarts_, maximumRows_*sizeof(int)); } else UcolStarts_=NULL; if (other.UcolLengths_) { UcolLengths_ = new int[maximumRows_]; memcpy(UcolLengths_ , other.UcolLengths_, maximumRows_*sizeof(int)); } else UcolLengths_=NULL; #ifdef COIN_SIMP_CAPACITY if (other.UcolCapacities_) { UcolCapacities_ = new int[maximumRows_]; memcpy(UcolCapacities_ ,other.UcolCapacities_ , maximumRows_*sizeof(int)); } else UcolCapacities_=NULL; #endif if (other.Ucolumns_) { Ucolumns_ = new double[other.UcolMaxCap_]; memcpy(Ucolumns_ ,other.Ucolumns_ , other.UcolMaxCap_*sizeof(double)); } else Ucolumns_=NULL; if (other.UcolInd_) { UcolInd_ = new int[other.UcolMaxCap_]; memcpy(UcolInd_ , other.UcolInd_ , other.UcolMaxCap_*sizeof(int)); } else UcolInd_=NULL; if (other.prevColInU_) { prevColInU_ = new int[maximumRows_]; memcpy(prevColInU_ , other.prevColInU_ , maximumRows_*sizeof(int)); } else prevColInU_=NULL; if (other.nextColInU_) { nextColInU_ = new int[maximumRows_]; memcpy(nextColInU_ ,other.nextColInU_ , maximumRows_*sizeof(int)); } else nextColInU_=NULL; if (other.colSlack_) { colSlack_ = new int[maximumRows_]; memcpy(colSlack_, other.colSlack_, maximumRows_*sizeof(int)); } if (other.invOfPivots_) { invOfPivots_ = new double[maximumRows_]; memcpy(invOfPivots_ , other.invOfPivots_, maximumRows_*sizeof(double)); } else invOfPivots_=NULL; if (other.colOfU_) { colOfU_ = new int[maximumRows_]; memcpy(colOfU_ , other.colOfU_, maximumRows_*sizeof(int)); } else colOfU_=NULL; if (other.colPosition_) { colPosition_ = new int[maximumRows_]; memcpy(colPosition_, other.colPosition_, maximumRows_*sizeof(int)); } else colPosition_=NULL; if (other.rowOfU_) { rowOfU_ = new int[maximumRows_]; memcpy(rowOfU_ , other.rowOfU_, maximumRows_*sizeof(int)); } else rowOfU_=NULL; if (other.rowPosition_) { rowPosition_ = new int[maximumRows_]; memcpy(rowPosition_ , other.rowPosition_, maximumRows_*sizeof(int)); } else rowPosition_=NULL; if (other.secRowOfU_) { secRowOfU_ = new int[maximumRows_]; memcpy(secRowOfU_ , other.secRowOfU_, maximumRows_*sizeof(int)); } else secRowOfU_=NULL; if (other.secRowPosition_) { secRowPosition_ = new int[maximumRows_]; memcpy(secRowPosition_ , other.secRowPosition_, maximumRows_*sizeof(int)); } else secRowPosition_=NULL; if (other.EtaPosition_) { EtaPosition_ = new int[other.maxEtaRows_]; memcpy(EtaPosition_ ,other.EtaPosition_ , other.maxEtaRows_ *sizeof(int)); } else EtaPosition_=NULL; if (other.EtaStarts_) { EtaStarts_ = new int[other.maxEtaRows_]; memcpy(EtaStarts_, other.EtaStarts_, other.maxEtaRows_*sizeof(int)); } else EtaStarts_=NULL; if (other.EtaLengths_) { EtaLengths_ = new int[other.maxEtaRows_]; memcpy(EtaLengths_, other.EtaLengths_, other.maxEtaRows_*sizeof(int)); } else EtaLengths_=NULL; if (other.EtaInd_) { EtaInd_ = new int[other.EtaMaxCap_]; memcpy(EtaInd_, other.EtaInd_, other.EtaMaxCap_*sizeof(int)); } else EtaInd_=NULL; if (other.Eta_) { Eta_ = new double[other.EtaMaxCap_]; memcpy(Eta_ , other.Eta_, other.EtaMaxCap_*sizeof(double)); } else Eta_=NULL; doSuhlHeuristic_ = other.doSuhlHeuristic_; maxU_ = other.maxU_; maxGrowth_ = other.maxGrowth_; maxA_ = other.maxA_; pivotCandLimit_ = other.pivotCandLimit_; } // getAreas. Gets space for a factorization //called by constructors void CoinSimpFactorization::getAreas ( int numberOfRows, int numberOfColumns, CoinBigIndex , CoinBigIndex ) { numberRows_ = numberOfRows; numberColumns_ = numberOfColumns; CoinBigIndex size = numberRows_*(numberRows_+CoinMax(maximumPivots_,(numberRows_+1)>>1)); if (size>maximumSpace_) { delete [] elements_; elements_ = new CoinFactorizationDouble [size]; maximumSpace_ = size; } if (numberRows_>maximumRows_) { maximumRows_ = numberRows_; delete [] pivotRow_; delete [] workArea_; pivotRow_ = new int [2*maximumRows_+maximumPivots_]; workArea_ = new CoinFactorizationDouble [maximumRows_]; allocateSomeArrays(); } } // preProcess. void CoinSimpFactorization::preProcess () { CoinBigIndex put = numberRows_*numberRows_; int *indexRow = reinterpret_cast (elements_+put); CoinBigIndex * starts = reinterpret_cast (pivotRow_); initialSomeNumbers(); // compute sizes for Urows_ and Ucolumns_ //for ( int row=0; row < numberRows_; ++row ) //UrowLengths_[row]=0; int k=0; for ( int column=0; column < numberColumns_; ++column ){ UcolStarts_[column]=k; //for (CoinBigIndex j=starts[column];j (elements_+put); CoinBigIndex * starts = reinterpret_cast (pivotRow_); for ( int column=0; column <= numberColumns_; ++column ){ starts[column]=colStarts[column]; } const int limit=colStarts[numberColumns_]; for ( int i=0; i (workArea_); int i; for ( i=0;i=0); for ( i=numberGoodU_;idenseVector ( ); int *regionIndex = regionSparse2->getIndices ( ); int numberNonZero = regionSparse2->getNumElements ( ); double *region=regionSparse->denseVector ( ); if (!regionSparse2->packedMode()) { region=regionSparse2->denseVector ( ); } else { // packed mode for (int j=0;jpackedMode()) { for (int i=0;i zeroTolerance_ ){ region[i]=value; regionIndex[numberNonZero++]=i; } else region[i]=0.0; } } else { // packed mode memset(region,0,numberRows_*sizeof(double)); for (int i=0;i zeroTolerance_ ){ region2[numberNonZero] = value; regionIndex[numberNonZero++]=i; } } } regionSparse2->setNumElements(numberNonZero); return 0; } int CoinSimpFactorization::updateTwoColumnsFT(CoinIndexedVector * regionSparse1, CoinIndexedVector * regionSparse2, CoinIndexedVector * regionSparse3, bool ) { assert (numberRows_==numberColumns_); double *region2 = regionSparse2->denseVector ( ); int *regionIndex2 = regionSparse2->getIndices ( ); int numberNonZero2 = regionSparse2->getNumElements ( ); double *vec1=regionSparse1->denseVector ( ); if (!regionSparse2->packedMode()) { vec1=regionSparse2->denseVector ( ); } else { // packed mode for (int j=0;jdenseVector ( ); int *regionIndex3 = regionSparse3->getIndices ( ); int numberNonZero3 = regionSparse3->getNumElements ( ); double *vec2=auxVector_; if (!regionSparse3->packedMode()) { vec2=regionSparse3->denseVector ( ); } else { // packed mode memset(vec2,0,numberRows_*sizeof(double)); for (int j=0;jpackedMode()) { double value; for (int i=0;i zeroTolerance_ ){ vec1[i]=value; regionIndex2[numberNonZero2++]=i; } else vec1[i]=0.0; } } else { // packed mode double value; for (int i=0;i zeroTolerance_ ){ region2[numberNonZero2] = value; regionIndex2[numberNonZero2++]=i; } } } regionSparse2->setNumElements(numberNonZero2); // numberNonZero3=0; if (!regionSparse3->packedMode()) { double value; for (int i=0;i zeroTolerance_ ){ vec2[i]=value; regionIndex3[numberNonZero3++]=i; } else vec2[i]=0.0; } } else { // packed mode double value; for (int i=0;i zeroTolerance_ ){ region3[numberNonZero3] = value; regionIndex3[numberNonZero3++]=i; } } } regionSparse3->setNumElements(numberNonZero3); return 0; } int CoinSimpFactorization::updateColumnTranspose ( CoinIndexedVector * regionSparse, CoinIndexedVector * regionSparse2) const { upColumnTranspose(regionSparse, regionSparse2); return 0; } int CoinSimpFactorization::upColumnTranspose ( CoinIndexedVector * regionSparse, CoinIndexedVector * regionSparse2) const { assert (numberRows_==numberColumns_); double *region2 = regionSparse2->denseVector ( ); int *regionIndex = regionSparse2->getIndices ( ); int numberNonZero = regionSparse2->getNumElements ( ); double *region = regionSparse->denseVector ( ); if (!regionSparse2->packedMode()) { region=regionSparse2->denseVector ( ); } else { // packed for (int j=0;jpackedMode()) { double value; for (int i=0;i zeroTolerance_ ){ region[i]=value; regionIndex[numberNonZero++]=i; } else region[i]=0.0; } } else { // packed mode memset(region,0,numberRows_*sizeof(double)); for (int i=0;i zeroTolerance_ ){ region2[numberNonZero] = value; regionIndex[numberNonZero++]=i; } } } regionSparse2->setNumElements(numberNonZero); return 0; } int CoinSimpFactorization::mainLoopFactor (FactorPointers &pointers ) { numberGoodU_=0; numberSlacks_=0; bool ifSlack=true; for ( int i=0; i maxGrowth_ * maxA_ ){ // return -3; //} ++numberGoodU_; } return 0; } /// find a pivot in the active part of U int CoinSimpFactorization::findPivot(FactorPointers &pointers, int &r, int &s, bool &ifSlack){ int *firstRowKnonzeros=pointers.firstRowKnonzeros; int *nextRow=pointers.nextRow; int *firstColKnonzeros=pointers.firstColKnonzeros; int *prevColumn=pointers.prevColumn; int *nextColumn=pointers.nextColumn; r=s=-1; int numCandidates=0; double bestMarkowitzCount=COIN_DBL_MAX; // if there is a column with one element choose it as pivot int column=firstColKnonzeros[1]; if ( column!=-1 ){ assert( UcolLengths_[column] == 1 ); r=UcolInd_[UcolStarts_[column]]; s=column; if ( !colSlack_[column] ) ifSlack=false; return 0; } // from now on no more slacks ifSlack=false; // if there is a row with one element choose it int row=firstRowKnonzeros[1]; if ( row!=-1 ){ assert( UrowLengths_[row] == 1 ); s=UrowInd_[UrowStarts_[row]]; r=row; return 0; } // consider other rows and columns for ( int length=2; length <=numberRows_; ++length){ int nextCol=-1; for ( column=firstColKnonzeros[length]; column!=-1; column=nextCol ){ nextCol=nextColumn[column]; int minRow, minRowLength; int rc=findShortRow(column, length, minRow, minRowLength, pointers); if ( rc== 0 ){ r=minRow; s=column; return 0; } if ( minRow != -1 ){ ++numCandidates; double MarkowitzCount=static_cast(minRowLength-1)*(length-1); if ( MarkowitzCount < bestMarkowitzCount ){ r=minRow; s=column; bestMarkowitzCount=MarkowitzCount; } if ( numCandidates == pivotCandLimit_ ) return 0; } else { if ( doSuhlHeuristic_ ){ // this column did not give a candidate, it will be // removed until it becomes a singleton removeColumnFromActSet(column, pointers); prevColumn[column]=nextColumn[column]=column; } } } // end for ( column= .... // now rows for ( row=firstRowKnonzeros[length]; row!=-1; row=nextRow[row] ){ int minCol, minColLength; int rc=findShortColumn(row, length, minCol, minColLength, pointers); if ( rc==0 ){ r=row; s=minCol; return 0; } if ( minCol != -1 ){ ++numCandidates; double MarkowitzCount=static_cast(minColLength-1)*(length-1); if ( MarkowitzCount < bestMarkowitzCount ){ r=row; s=minCol; bestMarkowitzCount=MarkowitzCount; } if ( numCandidates == pivotCandLimit_ ) return 0; } //else abort(); }// end for ( row= ... }// end for ( int length= ... if ( r== -1 || s==-1 ) return 1; else return 0; } // int CoinSimpFactorization::findPivotShCol(FactorPointers &pointers, int &r, int &s) { int *firstColKnonzeros=pointers.firstColKnonzeros; r=s=-1; // if there is a column with one element choose it as pivot int column=firstColKnonzeros[1]; if ( column!=-1 ){ assert( UcolLengths_[column] == 1 ); r=UcolInd_[UcolStarts_[column]]; s=column; return 0; } // consider other columns for ( int length=2; length <=numberRows_; ++length){ column=firstColKnonzeros[length]; if ( column != -1 ) break; } if ( column == -1 ) return 1; // find largest element const int colBeg=UcolStarts_[column]; const int colEnd=colBeg+UcolLengths_[column]; double largest=0.0; int rowLargest=-1; for ( int j=colBeg; j= minRowLength ) continue; double largestInRow=findMaxInRrow(row,pointers); // find column in row int columnIndx=findInRow(row,column); assert(columnIndx!=-1); double coeff=Urows_[columnIndx]; if ( fabs(coeff) < pivotTolerance_ * largestInRow ) continue; minRow=row; minRowLength=UrowLengths_[row]; if ( UrowLengths_[row] <= length ) return 0; } return 1; } int CoinSimpFactorization::findShortColumn(const int row, const int length, int &minCol, int &minColLength, FactorPointers &pointers) { const int rowBeg=UrowStarts_[row]; const int rowEnd=rowBeg+UrowLengths_[row]; minCol=-1; minColLength=COIN_INT_MAX; double largestInRow=findMaxInRrow(row,pointers); for ( int i=rowBeg; i= minColLength ) continue; double coeff=Urows_[i]; if ( fabs(coeff) < pivotTolerance_ * largestInRow ) continue; minCol=column; minColLength=UcolLengths_[column]; if ( minColLength <= length ) return 0; } return 1; } // Gaussian elimination void CoinSimpFactorization::GaussEliminate(FactorPointers &pointers, int &pivotRow, int &pivotCol) { assert( pivotRow >= 0 && pivotRow < numberRows_ ); assert( pivotCol >= 0 && pivotCol < numberRows_ ); int *firstColKnonzeros=pointers.firstColKnonzeros; int *prevColumn=pointers.prevColumn; int *nextColumn=pointers.nextColumn; int *colLabels=vecLabels_; double *denseRow=denseVector_; removeRowFromActSet(pivotRow, pointers); removeColumnFromActSet(pivotCol, pointers); // find column s int indxColS=findInRow(pivotRow, pivotCol); assert( indxColS >= 0 ); // store the inverse of the pivot and remove it from row double invPivot=1.0/Urows_[indxColS]; invOfPivots_[pivotRow]=invPivot; int rowBeg=UrowStarts_[pivotRow]; int rowEnd=rowBeg+UrowLengths_[pivotRow]; Urows_[indxColS]=Urows_[rowEnd-1]; UrowInd_[indxColS]=UrowInd_[rowEnd-1]; --UrowLengths_[pivotRow]; --rowEnd; // now remove pivot from column int indxRowR=findInColumn(pivotCol,pivotRow); assert( indxRowR >= 0 ); const int pivColEnd=UcolStarts_[pivotCol]+UcolLengths_[pivotCol]; UcolInd_[indxRowR]=UcolInd_[pivColEnd-1]; --UcolLengths_[pivotCol]; // go through pivot row for ( int i=rowBeg; i=0 ); const int colEnd=UcolStarts_[column]+UcolLengths_[column]; UcolInd_[indxRow]=UcolInd_[colEnd-1]; --UcolLengths_[column]; } // pivoting(pivotRow, pivotCol, invPivot, pointers); // rowBeg=UrowStarts_[pivotRow]; rowEnd=rowBeg+UrowLengths_[pivotRow]; for ( int i=rowBeg; i= 0); const double multiplier=Urows_[pivotColInRow]*invPivot; // remove element (row,pivotColumn) from row const int currentRowEnd=UrowStarts_[row]+UrowLengths_[row]; Urows_[pivotColInRow]=Urows_[currentRowEnd-1]; UrowInd_[pivotColInRow]=UrowInd_[currentRowEnd-1]; --UrowLengths_[row]; int newNonZeros=UrowLengths_[pivotRow]; updateCurrentRow(pivotRow, row, multiplier, pointers, newNonZeros); // store multiplier if ( LcolSize_ == LcolCap_ ) increaseLsize(); Lcolumns_[LcolSize_]=multiplier; LcolInd_[LcolSize_++]=row; ++LcolLengths_[pivotRow]; } // remove elements of pivot column UcolLengths_[pivotColumn]=0; // remove pivot column from Ucol_ if ( prevColInU_[pivotColumn]==-1 ) firstColInU_=nextColInU_[pivotColumn]; else{ nextColInU_[prevColInU_[pivotColumn]]=nextColInU_[pivotColumn]; #ifdef COIN_SIMP_CAPACITY UcolCapacities_[prevColInU_[pivotColumn]]+=UcolCapacities_[pivotColumn]; UcolCapacities_[pivotColumn]=0; #endif } if ( nextColInU_[pivotColumn] == -1 ) lastColInU_=prevColInU_[pivotColumn]; else prevColInU_[nextColInU_[pivotColumn]]=prevColInU_[pivotColumn]; } void CoinSimpFactorization::updateCurrentRow(const int pivotRow, const int row, const double multiplier, FactorPointers &pointers, int &newNonZeros) { double *rowMax=pointers.rowMax; int *firstRowKnonzeros=pointers.firstRowKnonzeros; int *prevRow=pointers.prevRow; int *nextRow=pointers.nextRow; int *colLabels=vecLabels_; double *denseRow=denseVector_; const int rowBeg=UrowStarts_[row]; int rowEnd=rowBeg+UrowLengths_[row]; // treat old nonzeros for ( int i=rowBeg; i= 0 ); const int colEnd=UcolStarts_[column]+UcolLengths_[column]; UcolInd_[indxRow]=UcolInd_[colEnd-1]; --UcolLengths_[column]; } else { if ( maxU_ < absNewCoeff ) maxU_=absNewCoeff; } } } // now add the new nonzeros to the row #ifdef COIN_SIMP_CAPACITY if ( UrowLengths_[row] + newNonZeros > UrowCapacities_[row] ) increaseRowSize(row, UrowLengths_[row] + newNonZeros); #endif const int pivotRowBeg=UrowStarts_[pivotRow]; const int pivotRowEnd=pivotRowBeg+UrowLengths_[pivotRow]; int numNew=0; int *newCols=pointers.newCols; for ( int i=pivotRowBeg; i= zeroTolerance_ ){ const int newInd=UrowStarts_[row]+UrowLengths_[row]; Urows_[newInd]=value; UrowInd_[newInd]=column; ++UrowLengths_[row]; newCols[numNew++]=column; if ( maxU_ < absNewCoeff ) maxU_=absNewCoeff; } } else colLabels[column]=1; } // add the new nonzeros to the columns for ( int i=0; i UcolCapacities_[column] ){ increaseColSize(column, UcolLengths_[column] + 1, false); } #endif const int newInd=UcolStarts_[column]+UcolLengths_[column]; UcolInd_[newInd]=row; ++UcolLengths_[column]; } // the row goes to a new bucket prevRow[row]=-1; nextRow[row]=firstRowKnonzeros[UrowLengths_[row]]; if ( nextRow[row]!=-1 ) prevRow[nextRow[row]]=row; firstRowKnonzeros[UrowLengths_[row]]=row; // rowMax[row]=-1.0; } #ifdef COIN_SIMP_CAPACITY void CoinSimpFactorization::increaseRowSize(const int row, const int newSize) { assert( newSize > UrowCapacities_[row] ); const int newNumElements=newSize + minIncrease_; if ( UrowMaxCap_ < UrowEnd_ + newNumElements ){ enlargeUrow( UrowEnd_ + newNumElements - UrowMaxCap_ ); } int currentCapacity=UrowCapacities_[row]; memcpy(&Urows_[UrowEnd_],&Urows_[UrowStarts_[row]], UrowLengths_[row] * sizeof(double)); memcpy(&UrowInd_[UrowEnd_],&UrowInd_[UrowStarts_[row]], UrowLengths_[row] * sizeof(int)); UrowStarts_[row]=UrowEnd_; UrowCapacities_[row]=newNumElements; UrowEnd_+=UrowCapacities_[row]; if ( firstRowInU_==lastRowInU_ ) return; // only one element // remove row from list if( prevRowInU_[row]== -1) firstRowInU_=nextRowInU_[row]; else { nextRowInU_[prevRowInU_[row]]=nextRowInU_[row]; UrowCapacities_[prevRowInU_[row]]+=currentCapacity; } if ( nextRowInU_[row]==-1 ) lastRowInU_=prevRowInU_[row]; else prevRowInU_[nextRowInU_[row]]=prevRowInU_[row]; // add row at the end of list nextRowInU_[lastRowInU_]=row; nextRowInU_[row]=-1; prevRowInU_[row]=lastRowInU_; lastRowInU_=row; } #endif #ifdef COIN_SIMP_CAPACITY void CoinSimpFactorization::increaseColSize(const int column, const int newSize, const bool ifElements) { assert( newSize > UcolCapacities_[column] ); const int newNumElements=newSize+minIncrease_; if ( UcolMaxCap_ < UcolEnd_ + newNumElements ){ enlargeUcol(UcolEnd_ + newNumElements - UcolMaxCap_, ifElements); } int currentCapacity=UcolCapacities_[column]; memcpy(&UcolInd_[UcolEnd_], &UcolInd_[UcolStarts_[column]], UcolLengths_[column] * sizeof(int)); if ( ifElements ){ memcpy(&Ucolumns_[UcolEnd_], &Ucolumns_[UcolStarts_[column]], UcolLengths_[column] * sizeof(double) ); } UcolStarts_[column]=UcolEnd_; UcolCapacities_[column]=newNumElements; UcolEnd_+=UcolCapacities_[column]; if ( firstColInU_==lastColInU_ ) return; // only one column // remove from list if ( prevColInU_[column]==-1 ) firstColInU_=nextColInU_[column]; else { nextColInU_[prevColInU_[column]]=nextColInU_[column]; UcolCapacities_[prevColInU_[column]]+=currentCapacity; } if ( nextColInU_[column]==-1 ) lastColInU_=prevColInU_[column]; else prevColInU_[nextColInU_[column]]=prevColInU_[column]; // add column at the end nextColInU_[lastColInU_]=column; nextColInU_[column]=-1; prevColInU_[column]=lastColInU_; lastColInU_=column; } #endif double CoinSimpFactorization::findMaxInRrow(const int row, FactorPointers &pointers) { double *rowMax=pointers.rowMax; double largest=rowMax[row]; if ( largest >= 0.0 ) return largest; const int rowBeg=UrowStarts_[row]; const int rowEnd=rowBeg+UrowLengths_[row]; for ( int i=rowBeg; i largest ) largest=absValue; } rowMax[row]=largest; return largest; } void CoinSimpFactorization::increaseLsize() { int newcap= LcolCap_ + minIncrease_; double *aux=new double[newcap]; memcpy(aux, Lcolumns_, LcolCap_ * sizeof(double)); delete [] Lcolumns_; Lcolumns_=aux; int *iaux=new int[newcap]; memcpy(iaux, LcolInd_, LcolCap_ * sizeof(int)); delete [] LcolInd_; LcolInd_=iaux; LcolCap_=newcap; } void CoinSimpFactorization::enlargeUcol(const int numNewElements, const bool ifElements) { int *iaux=new int[UcolMaxCap_+numNewElements]; memcpy(iaux, UcolInd_, UcolMaxCap_*sizeof(int) ); delete [] UcolInd_; UcolInd_=iaux; if ( ifElements ){ double *aux=new double[UcolMaxCap_+numNewElements]; memcpy(aux, Ucolumns_, UcolMaxCap_*sizeof(double) ); delete [] Ucolumns_; Ucolumns_=aux; } UcolMaxCap_+=numNewElements; } void CoinSimpFactorization::enlargeUrow(const int numNewElements) { int *iaux=new int[UrowMaxCap_+numNewElements]; memcpy(iaux, UrowInd_, UrowMaxCap_*sizeof(int) ); delete [] UrowInd_; UrowInd_=iaux; double *aux=new double[UrowMaxCap_+numNewElements]; memcpy(aux, Urows_, UrowMaxCap_*sizeof(double) ); delete [] Urows_; Urows_=aux; UrowMaxCap_+=numNewElements; } void CoinSimpFactorization::copyUbyColumns() { memset(UcolLengths_,0,numberColumns_*sizeof(int)); for ( int column=0; columnzeroTolerance_ ) { colBeg=LcolStarts_[k]; ind=LcolInd_+colBeg; indEnd=ind+LcolLengths_[k]; Lcol=Lcolumns_+colBeg; for ( ; ind!=indEnd; ++ind ){ rhs[ *ind ]-= (*Lcol) * xk; ++Lcol; } } } } void CoinSimpFactorization::Lxeqb2(double *b1, double *b2) const { double *rhs1=b1; double *rhs2=b2; double x1, x2, *Lcol; int k, colBeg, *ind, *indEnd, j; // now solve for ( j=firstNumberSlacks_; j=numberSlacks_; --k ){ row=secRowOfU_[k]; x=rhs[row]; column=colOfU_[k]; if ( x!=0.0 ) { //if ( fabs(x) > zeroTolerance_ ) { x*=invOfPivots_[row]; colBeg=UcolStarts_[column]; ind=UcolInd_+colBeg; indEnd=ind+UcolLengths_[column]; uCol=Ucolumns_+colBeg; for ( ; ind!=indEnd; ++ind ){ #if 0 rhs[ *ind ]-= (*uCol) * x; #else double value=rhs[ *ind ]; rhs[ *ind ] = value - (*uCol) * x; #endif ++uCol; } sol[column]=x; } else sol[column]=0.0; } for ( k=numberSlacks_-1; k>=0; --k ){ row=secRowOfU_[k]; column=colOfU_[k]; sol[column]=-rhs[row]; } } void CoinSimpFactorization::Uxeqb2(double *b1, double *sol1, double *b2, double *sol2) const { double *rhs1=b1; double *rhs2=b2; int row, column, colBeg, *ind, *indEnd; double x1, x2, *uCol; // now solve for ( int k=numberRows_-1; k>=numberSlacks_; --k ){ row=secRowOfU_[k]; x1=rhs1[row]; x2=rhs2[row]; column=colOfU_[k]; if (x1 == 0.0) { if (x2 == 0.0) { sol1[column]=0.0; sol2[column]=0.0; } else { x2*=invOfPivots_[row]; colBeg=UcolStarts_[column]; ind=UcolInd_+colBeg; indEnd=ind+UcolLengths_[column]; uCol=Ucolumns_+colBeg; for ( ; ind!=indEnd; ++ind ){ #if 0 rhs2[ *ind ]-= (*uCol) * x2; #else double value=rhs2[ *ind ]; rhs2[ *ind ]= value - (*uCol) * x2; #endif ++uCol; } sol1[column]=0.0; sol2[column]=x2; } } else { if (x2 == 0.0) { x1*=invOfPivots_[row]; colBeg=UcolStarts_[column]; ind=UcolInd_+colBeg; indEnd=ind+UcolLengths_[column]; uCol=Ucolumns_+colBeg; for ( ; ind!=indEnd; ++ind ){ #if 0 rhs1[ *ind ]-= (*uCol) * x1; #else double value=rhs1[ *ind ]; rhs1[ *ind ] = value - (*uCol) * x1; #endif ++uCol; } sol1[column]=x1; sol2[column]=0.0; } else { x1*=invOfPivots_[row]; x2*=invOfPivots_[row]; colBeg=UcolStarts_[column]; ind=UcolInd_+colBeg; indEnd=ind+UcolLengths_[column]; uCol=Ucolumns_+colBeg; for ( ; ind!=indEnd; ++ind ){ #if 0 rhs1[ *ind ]-= (*uCol) * x1; rhs2[ *ind ]-= (*uCol) * x2; #else double value1=rhs1[ *ind ]; rhs1[ *ind ] = value1 - (*uCol) * x1; double value2=rhs2[ *ind ]; rhs2[ *ind ] = value2 - (*uCol) * x2; #endif ++uCol; } sol1[column]=x1; sol2[column]=x2; } } } for ( int k=numberSlacks_-1; k>=0; --k ){ row=secRowOfU_[k]; column=colOfU_[k]; sol1[column]=-rhs1[row]; sol2[column]=-rhs2[row]; } } void CoinSimpFactorization::xLeqb(double *b) const { double *rhs=b; int k, *ind, *indEnd, j; int colBeg; double x, *Lcol; // find last nonzero int last; for ( last=numberColumns_-1; last >= 0; --last ){ if ( rhs[ rowOfU_[last] ] ) break; } // this seems to be faster if ( last >= 0 ){ for ( j=last; j >=firstNumberSlacks_ ; --j ){ k=rowOfU_[j]; x=rhs[k]; colBeg=LcolStarts_[k]; ind=LcolInd_+colBeg; indEnd=ind+LcolLengths_[k]; Lcol=Lcolumns_+colBeg; for ( ; ind!=indEnd; ++ind ){ x -= (*Lcol) * rhs[ *ind ]; ++Lcol; } rhs[k]=x; } } // if ( last >= 0 ){ } void CoinSimpFactorization::xUeqb(double *b, double *sol) const { double *rhs=b; int row, col, *ind, *indEnd, k; double xr; // now solve #if 1 int rowBeg; double * uRow; for ( k=0; k zeroTolerance_ ) { xr=-xr; rowBeg=UrowStarts_[row]; ind=UrowInd_+rowBeg; indEnd=ind+UrowLengths_[row]; uRow=Urows_+rowBeg; for ( ; ind!=indEnd; ++ind ){ rhs[ *ind ]-= (*uRow) * xr; ++uRow; } sol[row]=xr; } else sol[row]=0.0; } for ( k=numberSlacks_; k zeroTolerance_ ) { xr*=invOfPivots_[row]; rowBeg=UrowStarts_[row]; ind=UrowInd_+rowBeg; indEnd=ind+UrowLengths_[row]; uRow=Urows_+rowBeg; for ( ; ind!=indEnd; ++ind ){ rhs[ *ind ]-= (*uRow) * xr; ++uRow; } sol[row]=xr; } else sol[row]=0.0; } #else for ( k=0; k= 0); // remove from row const int rowEnd=UrowStarts_[row]+UrowLengths_[row]; Urows_[colInRow]=Urows_[rowEnd-1]; UrowInd_[colInRow]=UrowInd_[rowEnd-1]; --UrowLengths_[row]; } UcolLengths_[newBasicCol]=0; // now add new column to U int lastRowInU=-1; for ( int i=0; i < sizeNewColumn; ++i ){ //if ( fabs(newColumn[i]) < zeroTolerance_ ) continue; const int row=indNewColumn[i]; // add to row #ifdef COIN_SIMP_CAPACITY if ( UrowLengths_[row] + 1 > UrowCapacities_[row] ) increaseRowSize(row, UrowLengths_[row] + 1); #endif const int rowEnd=UrowStarts_[row]+UrowLengths_[row]; UrowInd_[rowEnd]=newBasicCol; Urows_[rowEnd]=newColumn[i]; ++UrowLengths_[row]; if ( lastRowInU < secRowPosition_[row] ) lastRowInU=secRowPosition_[row]; } // add to Ucolumns #ifdef COIN_SIMP_CAPACITY if ( sizeNewColumn > UcolCapacities_[newBasicCol] ) increaseColSize(newBasicCol, sizeNewColumn , true); #endif memcpy(&Ucolumns_[ UcolStarts_[newBasicCol] ], &newColumn[0], sizeNewColumn * sizeof(double) ); memcpy(&UcolInd_[ UcolStarts_[newBasicCol] ], &indNewColumn[0], sizeNewColumn * sizeof(int) ); UcolLengths_[newBasicCol]=sizeNewColumn; const int posNewCol=colPosition_[newBasicCol]; if ( lastRowInU < posNewCol ){ // matrix is singular return 1; } // permutations const int rowInU=secRowOfU_[posNewCol]; const int colInU=colOfU_[posNewCol]; for ( int i=posNewCol; i= numberSlacks_ ) --numberSlacks_; else numberSlacks_= lastRowInU; } // rowInU will be transformed // denseVector_ is assumed to be initialized to zero const int rowBeg=UrowStarts_[rowInU]; const int rowEnd=rowBeg+UrowLengths_[rowInU]; for ( int i=rowBeg; i= 0 ); const int colEnd=UcolStarts_[column]+UcolLengths_[column]; UcolInd_[indxRow]=UcolInd_[colEnd-1]; Ucolumns_[indxRow]=Ucolumns_[colEnd-1]; --UcolLengths_[column]; } UrowLengths_[rowInU]=0; // rowInU is empty // increase Eta by (lastRowInU-posNewCol) elements newEta(rowInU, lastRowInU-posNewCol ); assert(!EtaLengths_[lastEtaRow_]); int saveSize = EtaSize_;; for ( int i=posNewCol; i UcolCapacities_[column] ){ increaseColSize(column, UcolLengths_[column] + 1, true); } #endif const int newInd=UcolStarts_[column]+UcolLengths_[column]; UcolInd_[newInd]=rowInU; Ucolumns_[newInd]=coeff; ++UcolLengths_[column]; workArea2_[newEls]=coeff; indVector_[newEls++]=column; } #ifdef COIN_SIMP_CAPACITY if ( UrowCapacities_[rowInU] < newEls ) increaseRowSize(rowInU, newEls); #endif const int startRow=UrowStarts_[rowInU]; memcpy(&Urows_[startRow],&workArea2_[0], newEls*sizeof(double) ); memcpy(&UrowInd_[startRow],&indVector_[0], newEls*sizeof(int) ); UrowLengths_[rowInU]=newEls; // if ( fabs( invOfPivots_[rowInU] ) > updateTol_ ) return 2; return 0; } void CoinSimpFactorization::newEta(int row, int numNewElements){ if ( lastEtaRow_ == maxEtaRows_-1 ){ int *iaux=new int[maxEtaRows_ + minIncrease_]; memcpy(iaux, EtaPosition_, maxEtaRows_ * sizeof(int)); delete [] EtaPosition_; EtaPosition_=iaux; int *jaux=new int[maxEtaRows_ + minIncrease_]; memcpy(jaux, EtaStarts_, maxEtaRows_ * sizeof(int)); delete [] EtaStarts_; EtaStarts_=jaux; int *kaux=new int[maxEtaRows_ + minIncrease_]; memcpy(kaux, EtaLengths_, maxEtaRows_ * sizeof(int)); delete [] EtaLengths_; EtaLengths_=kaux; maxEtaRows_+=minIncrease_; } if ( EtaSize_ + numNewElements > EtaMaxCap_ ){ int number= CoinMax(EtaSize_ + numNewElements - EtaMaxCap_, minIncrease_); int *iaux=new int[EtaMaxCap_ + number]; memcpy(iaux, EtaInd_, EtaSize_ * sizeof(int)); delete [] EtaInd_; EtaInd_=iaux; double *aux=new double[EtaMaxCap_ + number]; memcpy(aux, Eta_, EtaSize_ * sizeof(double)); delete [] Eta_; Eta_=aux; EtaMaxCap_+=number; } EtaPosition_[++lastEtaRow_]=row; EtaStarts_[lastEtaRow_]=EtaSize_; EtaLengths_[lastEtaRow_]=0; } void CoinSimpFactorization::copyRowPermutations() { memcpy(&secRowOfU_[0], &rowOfU_[0], numberRows_ * sizeof(int) ); memcpy(&secRowPosition_[0], &rowPosition_[0], numberRows_ * sizeof(int) ); } void CoinSimpFactorization::Hxeqb(double *b) const { double *rhs=b; int row, rowBeg, *ind, *indEnd; double xr, *eta; // now solve for ( int k=0; k <= lastEtaRow_; ++k ){ row=EtaPosition_[k]; rowBeg=EtaStarts_[k]; xr=0.0; ind=EtaInd_+rowBeg; indEnd=ind+EtaLengths_[k]; eta=Eta_+rowBeg; for ( ; ind!=indEnd; ++ind ){ xr += rhs[ *ind ] * (*eta); ++eta; } rhs[row]-=xr; } } void CoinSimpFactorization::Hxeqb2(double *b1, double *b2) const { double *rhs1=b1; double *rhs2=b2; int row, rowBeg, *ind, *indEnd; double x1, x2, *eta; // now solve for ( int k=0; k <= lastEtaRow_; ++k ){ row=EtaPosition_[k]; rowBeg=EtaStarts_[k]; x1=0.0; x2=0.0; ind=EtaInd_+rowBeg; indEnd=ind+EtaLengths_[k]; eta=Eta_+rowBeg; for ( ; ind!=indEnd; ++ind ){ x1 += rhs1[ *ind ] * (*eta); x2 += rhs2[ *ind ] * (*eta); ++eta; } rhs1[row]-=x1; rhs2[row]-=x2; } } void CoinSimpFactorization::xHeqb(double *b) const { double *rhs=b; int row, rowBeg, *ind, *indEnd; double xr, *eta; // now solve for ( int k=lastEtaRow_; k >= 0; --k ){ row=EtaPosition_[k]; xr=rhs[row]; if ( xr==0.0 ) continue; //if ( fabs(xr) <= zeroTolerance_ ) continue; rowBeg=EtaStarts_[k]; ind=EtaInd_+rowBeg; indEnd=ind+EtaLengths_[k]; eta=Eta_+rowBeg; for ( ; ind!=indEnd; ++ind ){ rhs[ *ind ]-= xr * (*eta); ++eta; } } } void CoinSimpFactorization::ftran(double *b, double *sol, bool save) const { Lxeqb(b); Hxeqb(b); if ( save ){ // keep vector keepSize_=0; for ( int i=0; i #include #include #include "CoinPragma.hpp" #include "CoinParam.hpp" /* Constructors and destructors There's a generic constructor and one for integer, double, keyword, string, and action parameters. */ /* Default constructor. */ CoinParam::CoinParam () : type_(coinParamInvalid), name_(), lengthName_(0), lengthMatch_(0), lowerDblValue_(0.0), upperDblValue_(0.0), dblValue_(0.0), lowerIntValue_(0), upperIntValue_(0), intValue_(0), strValue_(), definedKwds_(), currentKwd_(-1), pushFunc_(0), pullFunc_(0), shortHelp_(), longHelp_(), display_(false) { /* Nothing to be done here */ } /* Constructor for double parameter */ CoinParam::CoinParam (std::string name, std::string help, double lower, double upper, double dflt, bool display) : type_(coinParamDbl), name_(name), lengthName_(0), lengthMatch_(0), lowerDblValue_(lower), upperDblValue_(upper), dblValue_(dflt), lowerIntValue_(0), upperIntValue_(0), intValue_(0), strValue_(), definedKwds_(), currentKwd_(-1), pushFunc_(0), pullFunc_(0), shortHelp_(help), longHelp_(), display_(display) { processName() ; } /* Constructor for integer parameter */ CoinParam::CoinParam (std::string name, std::string help, int lower, int upper, int dflt, bool display) : type_(coinParamInt), name_(name), lengthName_(0), lengthMatch_(0), lowerDblValue_(0.0), upperDblValue_(0.0), dblValue_(0.0), lowerIntValue_(lower), upperIntValue_(upper), intValue_(dflt), strValue_(), definedKwds_(), currentKwd_(-1), pushFunc_(0), pullFunc_(0), shortHelp_(help), longHelp_(), display_(display) { processName() ; } /* Constructor for keyword parameter. */ CoinParam::CoinParam (std::string name, std::string help, std::string firstValue, int dflt, bool display) : type_(coinParamKwd), name_(name), lengthName_(0), lengthMatch_(0), lowerDblValue_(0.0), upperDblValue_(0.0), dblValue_(0.0), lowerIntValue_(0), upperIntValue_(0), intValue_(0), strValue_(), definedKwds_(), currentKwd_(dflt), pushFunc_(0), pullFunc_(0), shortHelp_(help), longHelp_(), display_(display) { processName() ; definedKwds_.push_back(firstValue) ; } /* Constructor for string parameter. */ CoinParam::CoinParam (std::string name, std::string help, std::string dflt, bool display) : type_(coinParamStr), name_(name), lengthName_(0), lengthMatch_(0), lowerDblValue_(0.0), upperDblValue_(0.0), dblValue_(0.0), lowerIntValue_(0), upperIntValue_(0), intValue_(0), strValue_(dflt), definedKwds_(), currentKwd_(0), pushFunc_(0), pullFunc_(0), shortHelp_(help), longHelp_(), display_(display) { processName() ; } /* Constructor for action parameter. */ CoinParam::CoinParam (std::string name, std::string help, bool display) : type_(coinParamAct), name_(name), lengthName_(0), lengthMatch_(0), lowerDblValue_(0.0), upperDblValue_(0.0), dblValue_(0.0), lowerIntValue_(0), upperIntValue_(0), intValue_(0), strValue_(), definedKwds_(), currentKwd_(0), pushFunc_(0), pullFunc_(0), shortHelp_(help), longHelp_(), display_(display) { processName() ; } /* Copy constructor. */ CoinParam::CoinParam (const CoinParam &orig) : type_(orig.type_), lengthName_(orig.lengthName_), lengthMatch_(orig.lengthMatch_), lowerDblValue_(orig.lowerDblValue_), upperDblValue_(orig.upperDblValue_), dblValue_(orig.dblValue_), lowerIntValue_(orig.lowerIntValue_), upperIntValue_(orig.upperIntValue_), intValue_(orig.intValue_), currentKwd_(orig.currentKwd_), pushFunc_(orig.pushFunc_), pullFunc_(orig.pullFunc_), display_(orig.display_) { name_ = orig.name_ ; strValue_ = orig.strValue_ ; definedKwds_ = orig.definedKwds_ ; shortHelp_ = orig.shortHelp_ ; longHelp_ = orig.longHelp_ ; } /* Clone */ CoinParam *CoinParam::clone () { return (new CoinParam(*this)) ; } CoinParam &CoinParam::operator= (const CoinParam &rhs) { if (this != &rhs) { type_ = rhs.type_ ; name_ = rhs.name_ ; lengthName_ = rhs.lengthName_ ; lengthMatch_ = rhs.lengthMatch_ ; lowerDblValue_ = rhs.lowerDblValue_ ; upperDblValue_ = rhs.upperDblValue_ ; dblValue_ = rhs.dblValue_ ; lowerIntValue_ = rhs.lowerIntValue_ ; upperIntValue_ = rhs.upperIntValue_ ; intValue_ = rhs.intValue_ ; strValue_ = rhs.strValue_ ; definedKwds_ = rhs.definedKwds_ ; currentKwd_ = rhs.currentKwd_ ; pushFunc_ = rhs.pushFunc_ ; pullFunc_ = rhs.pullFunc_ ; shortHelp_ = rhs.shortHelp_ ; longHelp_ = rhs.longHelp_ ; display_ = rhs.display_ ; } return *this ; } /* Destructor */ CoinParam::~CoinParam () { /* Nothing more to do */ } /* Methods to manipulate a CoinParam object. */ /* Process the parameter name. Process the name for efficient matching: determine if an `!' is present. If so, locate and record the position and remove the `!'. */ void CoinParam::processName() { std::string::size_type shriekPos = name_.find('!') ; lengthName_ = name_.length() ; if (shriekPos == std::string::npos) { lengthMatch_ = lengthName_ ; } else { lengthMatch_ = shriekPos ; name_ = name_.substr(0,shriekPos)+name_.substr(shriekPos+1) ; lengthName_-- ; } return ; } /* Check an input string to see if it matches the parameter name. The whole input string must match, and the length of the match must exceed the minimum match length. A match is impossible if the string is longer than the name. Returns: 0 for no match, 1 for a successful match, 2 if the match is short */ int CoinParam::matches (std::string input) const { size_t inputLen = input.length() ; if (inputLen <= lengthName_) { size_t i ; for (i = 0 ; i < inputLen ; i++) { if (tolower(name_[i]) != tolower(input[i])) break ; } if (i < inputLen) { return (0) ; } else if (i >= lengthMatch_) { return (1) ; } else { return (2) ; } } return (0) ; } /* Return the parameter name, formatted to indicate how it'll be matched. E.g., some!Name will come back as some(Name). */ std::string CoinParam::matchName () const { if (lengthMatch_ == lengthName_) { return name_ ; } else { return name_.substr(0,lengthMatch_)+"("+name_.substr(lengthMatch_)+")" ; } } /* Print the long help message and a message about appropriate values. */ void CoinParam::printLongHelp() const { if (longHelp_ != "") { CoinParamUtils::printIt(longHelp_.c_str()) ; } else if (shortHelp_ != "") { CoinParamUtils::printIt(shortHelp_.c_str()) ; } else { CoinParamUtils::printIt("No help provided.") ; } switch (type_) { case coinParamDbl: { std::cout << "" << std::endl ; assert (upperDblValue_>lowerDblValue_) ; break ; } case coinParamInt: { std::cout << "" << std::endl ; assert (upperIntValue_>lowerIntValue_) ; break ; } case coinParamKwd: { printKwds() ; break ; } case coinParamStr: { std::cout << "" ; } else { std::cout << "`" << strValue_ << "'>" ; } std::cout << std::endl ; break ; } case coinParamAct: { break ; } default: { std::cout << "!! invalid parameter type !!" << std::endl ; assert (false) ; } } } /* Methods to manipulate the value of a parameter. */ /* Methods to manipulate the values associated with a keyword parameter. */ /* Add a keyword to the list for a keyword parameter. */ void CoinParam::appendKwd (std::string kwd) { assert (type_ == coinParamKwd) ; definedKwds_.push_back(kwd) ; } /* Scan the keywords of a keyword parameter and return the integer index of the keyword matching the input, or -1 for no match. */ int CoinParam::kwdIndex (std::string input) const { assert (type_ == coinParamKwd) ; int whichItem = -1 ; size_t numberItems = definedKwds_.size() ; if (numberItems > 0) { size_t inputLen = input.length() ; size_t it ; /* Open a loop to check each keyword against the input string. We don't record the match length for keywords, so we need to check each one for an `!' and do the necessary preprocessing (record position and elide `!') before checking for a match of the required length. */ for (it = 0 ; it < numberItems ; it++) { std::string kwd = definedKwds_[it] ; std::string::size_type shriekPos = kwd.find('!') ; size_t kwdLen = kwd.length() ; size_t matchLen = kwdLen ; if (shriekPos != std::string::npos) { matchLen = shriekPos ; kwd = kwd.substr(0,shriekPos)+kwd.substr(shriekPos+1) ; kwdLen = kwd.length() ; } /* Match is possible only if input is shorter than the keyword. The entire input must match and the match must exceed the minimum length. */ if (inputLen <= kwdLen) { unsigned int i ; for (i = 0 ; i < inputLen ; i++) { if (tolower(kwd[i]) != tolower(input[i])) break ; } if (i >= inputLen && i >= matchLen) { whichItem = static_cast(it) ; break ; } } } } return (whichItem) ; } /* Set current value for a keyword parameter using a string. */ void CoinParam::setKwdVal (const std::string value) { assert (type_ == coinParamKwd) ; int action = kwdIndex(value) ; if (action >= 0) { currentKwd_ = action ; } } /* Set current value for keyword parameter using an integer. Echo the new value to cout if requested. */ void CoinParam::setKwdVal (int value, bool printIt) { assert (type_ == coinParamKwd) ; assert (value >= 0 && unsigned(value) < definedKwds_.size()) ; if (printIt && value != currentKwd_) { std::cout << "Option for " << name_ << " changed from " << definedKwds_[currentKwd_] << " to " << definedKwds_[value] << std::endl ; } currentKwd_ = value ; } /* Return the string corresponding to the current value. */ std::string CoinParam::kwdVal() const { assert (type_ == coinParamKwd) ; return (definedKwds_[currentKwd_]) ; } /* Print the keywords for a keyword parameter, formatted to indicate how they'll be matched. (E.g., some!Name prints as some(Name).). Follow with current value. */ void CoinParam::printKwds () const { assert (type_ == coinParamKwd) ; std::cout << "Possible options for " << name_ << " are:" ; unsigned int it ; int maxAcross = 5 ; for (it = 0 ; it < definedKwds_.size() ; it++) { std::string kwd = definedKwds_[it] ; std::string::size_type shriekPos = kwd.find('!') ; if (shriekPos != std::string::npos) { kwd = kwd.substr(0,shriekPos)+"("+kwd.substr(shriekPos+1)+")" ; } if (it%maxAcross == 0) { std::cout << std::endl ; } std::cout << " " << kwd ; } std::cout << std::endl ; assert (currentKwd_ >= 0 && unsigned(currentKwd_) < definedKwds_.size()) ; std::string current = definedKwds_[currentKwd_] ; std::string::size_type shriekPos = current.find('!') ; if (shriekPos != std::string::npos) { current = current.substr(0,shriekPos)+ "("+current.substr(shriekPos+1)+")" ; } std::cout << " " << std::endl ; } /* Methods to manipulate the value of a string parameter. */ void CoinParam::setStrVal (std::string value) { assert (type_ == coinParamStr) ; strValue_ = value ; } std::string CoinParam::strVal () const { assert (type_ == coinParamStr) ; return (strValue_) ; } /* Methods to manipulate the value of a double parameter. */ void CoinParam::setDblVal (double value) { assert (type_ == coinParamDbl) ; dblValue_ = value ; } double CoinParam::dblVal () const { assert (type_ == coinParamDbl) ; return (dblValue_) ; } /* Methods to manipulate the value of an integer parameter. */ void CoinParam::setIntVal (int value) { assert (type_ == coinParamInt) ; intValue_ = value ; } int CoinParam::intVal () const { assert (type_ == coinParamInt) ; return (intValue_) ; } /* A print function (friend of the class) */ std::ostream &operator<< (std::ostream &s, const CoinParam ¶m) { switch (param.type()) { case CoinParam::coinParamDbl: { return (s << param.dblVal()) ; } case CoinParam::coinParamInt: { return (s << param.intVal()) ; } case CoinParam::coinParamKwd: { return (s << param.kwdVal()) ; } case CoinParam::coinParamStr: { return (s << param.strVal()) ; } case CoinParam::coinParamAct: { return (s << "") ; } default: { return (s << "!! invalid parameter type !!") ; } } } CoinUtils-2.9.10/CoinUtils/src/CoinIndexedVector.cpp0000644000076600007660000016220612130104232020745 0ustar coincoin/* $Id: CoinIndexedVector.cpp 1585 2013-04-06 20:42:02Z stefan $ */ // 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 "CoinTypes.hpp" #include "CoinFloatEqual.hpp" #include "CoinHelperFunctions.hpp" #include "CoinIndexedVector.hpp" #include "CoinTypes.hpp" //############################################################################# #define WARN_USELESS 0 void CoinIndexedVector::clear() { #if WARN_USELESS int nNonZero=0; for (int i=0;i1 if (nNonZero!=nElements_) printf("Vector said it had %d nonzeros - only had %d\n", nElements_,nNonZero); #endif if (!nNonZero&&nElements_) printf("Vector said it had %d nonzeros - but is already empty\n", nElements_); #endif if (!packedMode_) { if (3*nElements_=COIN_INDEXED_TINY_ELEMENT) { elements_[indexValue]=elems[i]; indices_[nElements_++]=indexValue; } } } //############################################################################# /** Access the i'th element of the full storage vector. */ double & CoinIndexedVector::operator[](int index) const { assert (!packedMode_); #ifndef COIN_FAST_CODE if ( index >= capacity_ ) throw CoinError("index >= capacity()", "[]", "CoinIndexedVector"); if ( index < 0 ) throw CoinError("index < 0" , "[]", "CoinIndexedVector"); #endif double * where = elements_ + index; return *where; } //############################################################################# void CoinIndexedVector::setElement(int index, double element) { #ifndef COIN_FAST_CODE if ( index >= nElements_ ) throw CoinError("index >= size()", "setElement", "CoinIndexedVector"); if ( index < 0 ) throw CoinError("index < 0" , "setElement", "CoinIndexedVector"); #endif elements_[indices_[index]] = element; } //############################################################################# void CoinIndexedVector::insert( int index, double element ) { #ifndef COIN_FAST_CODE if ( index < 0 ) throw CoinError("index < 0" , "setElement", "CoinIndexedVector"); #endif if (index >= capacity_) reserve(index+1); #ifndef COIN_FAST_CODE if (elements_[index]) throw CoinError("Index already exists", "insert", "CoinIndexedVector"); #endif indices_[nElements_++] = index; elements_[index] = element; } //############################################################################# void CoinIndexedVector::add( int index, double element ) { #ifndef COIN_FAST_CODE if ( index < 0 ) throw CoinError("index < 0" , "setElement", "CoinIndexedVector"); #endif if (index >= capacity_) reserve(index+1); if (elements_[index]) { element += elements_[index]; if (fabs(element)>= COIN_INDEXED_TINY_ELEMENT) { elements_[index] = element; } else { elements_[index] = COIN_INDEXED_REALLY_TINY_ELEMENT; } } else if (fabs(element)>= COIN_INDEXED_TINY_ELEMENT) { indices_[nElements_++] = index; assert (nElements_<=capacity_); elements_[index] = element; } } //############################################################################# int CoinIndexedVector::clean( double tolerance ) { int number = nElements_; int i; nElements_=0; assert(!packedMode_); for (i=0;i=tolerance) { indices_[nElements_++]=indexValue; } else { elements_[indexValue]=0.0; } } return nElements_; } #ifndef NDEBUG //############################################################################# // For debug check vector is clear i.e. no elements void CoinIndexedVector::checkClear() { #ifndef NDEBUG //printf("checkClear %p\n",this); assert(!nElements_); //assert(!packedMode_); int i; for (i=0;i (indices_+capacity_); for (i=0;i (indices_+capacity_); for (i=0;i=COIN_INDEXED_TINY_ELEMENT) { elements_[indexValue]=celem[i]; indices_[nElements_++]=indexValue; } } } if (needClean) { // go through again int size=nElements_; nElements_=0; for (i=0;i=COIN_INDEXED_TINY_ELEMENT) { indices_[nElements_++]=indexValue; } else { elements_[indexValue]=0.0; } } } if (numberDuplicates) throw CoinError("duplicate index", "append", "CoinIndexedVector"); } #endif //############################################################################# void CoinIndexedVector::swap(int i, int j) { if ( i >= nElements_ ) throw CoinError("index i >= size()","swap","CoinIndexedVector"); if ( i < 0 ) throw CoinError("index i < 0" ,"swap","CoinIndexedVector"); if ( j >= nElements_ ) throw CoinError("index j >= size()","swap","CoinIndexedVector"); if ( j < 0 ) throw CoinError("index j < 0" ,"swap","CoinIndexedVector"); // Swap positions i and j of the // indices array int isave = indices_[i]; indices_[i] = indices_[j]; indices_[j] = isave; } //############################################################################# void CoinIndexedVector::truncate( int n ) { reserve(n); } //############################################################################# void CoinIndexedVector::operator+=(double value) { assert (!packedMode_); int i,indexValue; for (i=0;i=COIN_INDEXED_TINY_ELEMENT) elements_[indexValue] = newValue; else elements_[indexValue] = COIN_INDEXED_REALLY_TINY_ELEMENT; } } //----------------------------------------------------------------------------- void CoinIndexedVector::operator-=(double value) { assert (!packedMode_); int i,indexValue; for (i=0;i=COIN_INDEXED_TINY_ELEMENT) elements_[indexValue] = newValue; else elements_[indexValue] = COIN_INDEXED_REALLY_TINY_ELEMENT; } } //----------------------------------------------------------------------------- void CoinIndexedVector::operator*=(double value) { assert (!packedMode_); int i,indexValue; for (i=0;i=COIN_INDEXED_TINY_ELEMENT) elements_[indexValue] = newValue; else elements_[indexValue] = COIN_INDEXED_REALLY_TINY_ELEMENT; } } //----------------------------------------------------------------------------- void CoinIndexedVector::operator/=(double value) { assert (!packedMode_); int i,indexValue; for (i=0;i=COIN_INDEXED_TINY_ELEMENT) elements_[indexValue] = newValue; else elements_[indexValue] = COIN_INDEXED_REALLY_TINY_ELEMENT; } } //############################################################################# void CoinIndexedVector::reserve(int n) { int i; // don't make allocated space smaller but do take off values if ( n < capacity_ ) { #ifndef COIN_FAST_CODE if (n<0) throw CoinError("negative capacity", "reserve", "CoinIndexedVector"); #endif int nNew=0; for (i=0;icapacity_) { // save pointers to existing data int * tempIndices = indices_; double * tempElements = elements_; double * delTemp = elements_-offset_; // allocate new space int nPlus; if (sizeof(int)==4*sizeof(char)) nPlus=(n+3)>>2; else nPlus=(n+7)>>4; indices_ = new int [n+nPlus]; CoinZeroN(indices_+n,nPlus); // align on 64 byte boundary double * temp = new double [n+9]; offset_ = 0; CoinInt64 xx = reinterpret_cast(temp); int iBottom = static_cast(xx & 63); //if (iBottom) offset_ = (64-iBottom)>>3; elements_ = temp + offset_;; // copy data to new space // and zero out part of array if (nElements_ > 0) { CoinMemcpyN(tempIndices, nElements_, indices_); CoinMemcpyN(tempElements, capacity_, elements_); CoinZeroN(elements_+capacity_,n-capacity_); } else { CoinZeroN(elements_,n); } capacity_ = n; // free old data if (tempElements) delete [] delTemp; delete [] tempIndices; } } //############################################################################# CoinIndexedVector::CoinIndexedVector () : indices_(NULL), elements_(NULL), nElements_(0), capacity_(0), offset_(0), packedMode_(false) { } CoinIndexedVector::CoinIndexedVector (int size) : indices_(NULL), elements_(NULL), nElements_(0), capacity_(0), offset_(0), packedMode_(false) { // Get space reserve(size); } //----------------------------------------------------------------------------- CoinIndexedVector::CoinIndexedVector(int size, const int * inds, const double * elems) : indices_(NULL), elements_(NULL), nElements_(0), capacity_(0), offset_(0), packedMode_(false) { gutsOfSetVector(size, inds, elems); } //----------------------------------------------------------------------------- CoinIndexedVector::CoinIndexedVector(int size, const int * inds, double value) : indices_(NULL), elements_(NULL), nElements_(0), capacity_(0), offset_(0), packedMode_(false) { gutsOfSetConstant(size, inds, value); } //----------------------------------------------------------------------------- CoinIndexedVector::CoinIndexedVector(int size, const double * element) : indices_(NULL), elements_(NULL), nElements_(0), capacity_(0), offset_(0), packedMode_(false) { setFull(size, element); } //----------------------------------------------------------------------------- #ifndef CLP_NO_VECTOR CoinIndexedVector::CoinIndexedVector(const CoinPackedVectorBase & rhs) : indices_(NULL), elements_(NULL), nElements_(0), capacity_(0), offset_(0), packedMode_(false) { gutsOfSetVector(rhs.getNumElements(), rhs.getIndices(), rhs.getElements()); } #endif //----------------------------------------------------------------------------- CoinIndexedVector::CoinIndexedVector(const CoinIndexedVector & rhs) : indices_(NULL), elements_(NULL), nElements_(0), capacity_(0), offset_(0), packedMode_(false) { if (!rhs.packedMode_) gutsOfSetVector(rhs.capacity_,rhs.nElements_, rhs.indices_, rhs.elements_); else gutsOfSetPackedVector(rhs.capacity_,rhs.nElements_, rhs.indices_, rhs.elements_); } //----------------------------------------------------------------------------- CoinIndexedVector::CoinIndexedVector(const CoinIndexedVector * rhs) : indices_(NULL), elements_(NULL), nElements_(0), capacity_(0), offset_(0), packedMode_(false) { if (!rhs->packedMode_) gutsOfSetVector(rhs->capacity_,rhs->nElements_, rhs->indices_, rhs->elements_); else gutsOfSetPackedVector(rhs->capacity_,rhs->nElements_, rhs->indices_, rhs->elements_); } //----------------------------------------------------------------------------- CoinIndexedVector::~CoinIndexedVector () { delete [] indices_; if (elements_) delete [] (elements_-offset_); } //############################################################################# //############################################################################# /// Return the sum of two indexed vectors CoinIndexedVector CoinIndexedVector::operator+( const CoinIndexedVector& op2) { assert (!packedMode_); int i; int nElements=nElements_; int capacity = CoinMax(capacity_,op2.capacity_); CoinIndexedVector newOne(*this); newOne.reserve(capacity); bool needClean=false; // new one now can hold everything so just modify old and add new for (i=0;i=COIN_INDEXED_TINY_ELEMENT) { newOne.elements_[indexValue]=value; newOne.indices_[nElements++]=indexValue; } } else { value += oldValue; newOne.elements_[indexValue]=value; if (fabs(value)=COIN_INDEXED_TINY_ELEMENT) { newOne.indices_[newOne.nElements_++]=indexValue; } else { newOne.elements_[indexValue]=0.0; } } } return newOne; } /// Return the difference of two indexed vectors CoinIndexedVector CoinIndexedVector::operator-( const CoinIndexedVector& op2) { assert (!packedMode_); int i; int nElements=nElements_; int capacity = CoinMax(capacity_,op2.capacity_); CoinIndexedVector newOne(*this); newOne.reserve(capacity); bool needClean=false; // new one now can hold everything so just modify old and add new for (i=0;i=COIN_INDEXED_TINY_ELEMENT) { newOne.elements_[indexValue]=-value; newOne.indices_[nElements++]=indexValue; } } else { value = oldValue-value; newOne.elements_[indexValue]=value; if (fabs(value)=COIN_INDEXED_TINY_ELEMENT) { newOne.indices_[newOne.nElements_++]=indexValue; } else { newOne.elements_[indexValue]=0.0; } } } return newOne; } /// Return the element-wise product of two indexed vectors CoinIndexedVector CoinIndexedVector::operator*( const CoinIndexedVector& op2) { assert (!packedMode_); int i; int nElements=nElements_; int capacity = CoinMax(capacity_,op2.capacity_); CoinIndexedVector newOne(*this); newOne.reserve(capacity); bool needClean=false; // new one now can hold everything so just modify old and add new for (i=0;i=COIN_INDEXED_TINY_ELEMENT) { newOne.indices_[newOne.nElements_++]=indexValue; } else { newOne.elements_[indexValue]=0.0; } } } return newOne; } /// Return the element-wise ratio of two indexed vectors CoinIndexedVector CoinIndexedVector::operator/ (const CoinIndexedVector& op2) { assert (!packedMode_); // I am treating 0.0/0.0 as 0.0 int i; int nElements=nElements_; int capacity = CoinMax(capacity_,op2.capacity_); CoinIndexedVector newOne(*this); newOne.reserve(capacity); bool needClean=false; // new one now can hold everything so just modify old and add new for (i=0;i=COIN_INDEXED_TINY_ELEMENT) { newOne.indices_[newOne.nElements_++]=indexValue; } else { newOne.elements_[indexValue]=0.0; } } } return newOne; } // The sum of two indexed vectors void CoinIndexedVector::operator+=(const CoinIndexedVector& op2) { // do slowly at first *this = *this + op2; } // The difference of two indexed vectors void CoinIndexedVector::operator-=( const CoinIndexedVector& op2) { // do slowly at first *this = *this - op2; } // The element-wise product of two indexed vectors void CoinIndexedVector::operator*=(const CoinIndexedVector& op2) { // do slowly at first *this = *this * op2; } // The element-wise ratio of two indexed vectors (0.0/0.0 => 0.0) (0 vanishes) void CoinIndexedVector::operator/=(const CoinIndexedVector& op2) { // do slowly at first *this = *this / op2; } //############################################################################# void CoinIndexedVector::sortDecrIndex() { // Should replace with std sort double * elements = new double [nElements_]; CoinZeroN (elements,nElements_); CoinSort_2(indices_, indices_ + nElements_, elements, CoinFirstGreater_2()); delete [] elements; } void CoinIndexedVector::sortPacked() { assert(packedMode_); CoinSort_2(indices_, indices_ + nElements_, elements_); } void CoinIndexedVector::sortIncrElement() { double * elements = new double [nElements_]; int i; for (i=0;i()); delete [] elements; } void CoinIndexedVector::sortDecrElement() { double * elements = new double [nElements_]; int i; for (i=0;i()); delete [] elements; } //############################################################################# void CoinIndexedVector::gutsOfSetVector(int size, const int * inds, const double * elems) { #ifndef COIN_FAST_CODE if (size<0) throw CoinError("negative number of indices", "setVector", "CoinIndexedVector"); #endif assert(!packedMode_); // find largest int i; int maxIndex=-1; for (i=0;i=COIN_INDEXED_TINY_ELEMENT) { indices_[nElements_++]=indexValue; elements_[indexValue]=elems[i]; } } else { numberDuplicates++; elements_[indexValue] += elems[i] ; if (fabs(elements_[indexValue])=COIN_INDEXED_TINY_ELEMENT) { indices_[nElements_++]=indexValue; } else { elements_[indexValue]=0.0; } } } if (numberDuplicates) throw CoinError("duplicate index", "setVector", "CoinIndexedVector"); } //############################################################################# void CoinIndexedVector::gutsOfSetVector(int size, int numberIndices, const int * inds, const double * elems) { assert(!packedMode_); int i; reserve(size); #ifndef COIN_FAST_CODE if (numberIndices<0) throw CoinError("negative number of indices", "setVector", "CoinIndexedVector"); #endif nElements_ = 0; // elements_ array is all zero bool needClean=false; int numberDuplicates=0; for (i=0;i=size) throw CoinError("too large an index", "setVector", "CoinIndexedVector"); #endif if (elements_[indexValue]) { numberDuplicates++; elements_[indexValue] += elems[indexValue] ; if (fabs(elements_[indexValue])=COIN_INDEXED_TINY_ELEMENT) { #endif elements_[indexValue]=elems[indexValue]; indices_[nElements_++]=indexValue; #ifndef COIN_FAC_NEW } #endif } } if (needClean) { // go through again size=nElements_; nElements_=0; for (i=0;i=COIN_INDEXED_TINY_ELEMENT) { indices_[nElements_++]=indexValue; } else { elements_[indexValue]=0.0; } } } if (numberDuplicates) throw CoinError("duplicate index", "setVector", "CoinIndexedVector"); } //----------------------------------------------------------------------------- void CoinIndexedVector::gutsOfSetPackedVector(int size, int numberIndices, const int * inds, const double * elems) { packedMode_=true; int i; reserve(size); #ifndef COIN_FAST_CODE if (numberIndices<0) throw CoinError("negative number of indices", "setVector", "CoinIndexedVector"); #endif nElements_ = 0; // elements_ array is all zero // Does not check for duplicates for (i=0;i=size) throw CoinError("too large an index", "setVector", "CoinIndexedVector"); #endif if (fabs(elems[i])>=COIN_INDEXED_TINY_ELEMENT) { elements_[nElements_]=elems[i]; indices_[nElements_++]=indexValue; } } } //----------------------------------------------------------------------------- void CoinIndexedVector::gutsOfSetConstant(int size, const int * inds, double value) { assert(!packedMode_); #ifndef COIN_FAST_CODE if (size<0) throw CoinError("negative number of indices", "setConstant", "CoinIndexedVector"); #endif // find largest int i; int maxIndex=-1; for (i=0;i=COIN_INDEXED_TINY_ELEMENT) { elements_[indexValue] += value; indices_[nElements_++]=indexValue; } } else { numberDuplicates++; elements_[indexValue] += value ; if (fabs(elements_[indexValue])=COIN_INDEXED_TINY_ELEMENT) { indices_[nElements_++]=indexValue; } else { elements_[indexValue]=0.0; } } } if (numberDuplicates) throw CoinError("duplicate index", "setConstant", "CoinIndexedVector"); } //############################################################################# // Append a CoinIndexedVector to the end void CoinIndexedVector::append(const CoinIndexedVector & caboose) { const int cs = caboose.getNumElements(); const int * cind = caboose.getIndices(); const double * celem = caboose.denseVector(); int maxIndex=-1; int i; for (i=0;i=COIN_INDEXED_TINY_ELEMENT) { elements_[indexValue]=celem[indexValue]; indices_[nElements_++]=indexValue; } } } if (needClean) { // go through again int size=nElements_; nElements_=0; for (i=0;i=COIN_INDEXED_TINY_ELEMENT) { indices_[nElements_++]=indexValue; } else { elements_[indexValue]=0.0; } } } if (numberDuplicates) throw CoinError("duplicate index", "append", "CoinIndexedVector"); } // Append a CoinIndexedVector to the end and modify indices void CoinIndexedVector::append(CoinIndexedVector & other,int adjustIndex, bool zapElements/*,double multiplier*/) { const int cs = other.nElements_; const int * cind = other.indices_; double * celem = other.elements_; int * newInd = indices_+nElements_; if (packedMode_) { double * newEls = elements_+nElements_; if (zapElements) { if (other.packedMode_) { for (int i=0;itolerance) { bad=i; break; } } } for (int i=0;itolerance) { bad=i; break; } } } } return bad; } /* Equal. Returns true if vectors have same length and corresponding element of each vector is equal. */ bool CoinIndexedVector::operator==(const CoinIndexedVector & rhs) const { const int cs = rhs.nElements_; const int * cind = rhs.indices_; const double * celem = rhs.elements_; if (nElements_!=cs) return false; bool okay=true; CoinRelFltEq eq(1.0e-8); if (!packedMode_&&!rhs.packedMode_) { for (int i=0;i=tolerance) indices[number++] = i; else elements_[i]=0.0; } } nElements_ += number; return number; } // These pack down int CoinIndexedVector::cleanAndPack( double tolerance ) { if (!packedMode_) { int number = nElements_; int i; nElements_=0; for (i=0;i=tolerance) { elements_[nElements_]=value; indices_[nElements_++]=indexValue; } } packedMode_=true; } return nElements_; } // These pack down int CoinIndexedVector::cleanAndPackSafe( double tolerance ) { int number = nElements_; if (number) { int i; nElements_=0; assert(!packedMode_); double * temp=NULL; bool gotMemory; if (number*3 (indices_+number); CoinInt64 xx = reinterpret_cast(tempC); CoinInt64 iBottom = xx & 7; if (iBottom) tempC += 8-iBottom; temp = reinterpret_cast (tempC); xx = reinterpret_cast(temp); iBottom = xx & 7; assert(!iBottom); } else { // might be better to do complete scan gotMemory=true; temp = new double[number]; } for (i=0;i=tolerance) { temp[nElements_]=value; indices_[nElements_++]=indexValue; } } CoinMemcpyN(temp,nElements_,elements_); if (gotMemory) delete [] temp; packedMode_=true; } return nElements_; } // Scan dense region and set up indices int CoinIndexedVector::scanAndPack() { nElements_=0; return scanAndPack(0,capacity_); } // Scan dense region from start to < end and set up indices int CoinIndexedVector::scanAndPack(int start, int end) { assert(!packedMode_); end = CoinMin(end,capacity_); start = CoinMax(start,0); int i; int number = 0; int * indices = indices_+nElements_; for (i=start;i=tolerance) { elements_[number]=value; indices[number++] = i; } } nElements_ += number; packedMode_=true; return number; } // This is mainly for testing - goes from packed to indexed void CoinIndexedVector::expand() { if (nElements_&&packedMode_) { double * temp = new double[capacity_]; int i; for (i=0;i0&&array_)||!array_); memset (array_,0,size_); } // Get array with alignment void CoinArrayWithLength::getArray(int size) { if (size>0) { if(alignment_>2) { offset_ = 1<0); char * array = new char [size+offset_]; if (offset_) { // need offset CoinInt64 xx = reinterpret_cast(array); int iBottom = static_cast(xx & ((offset_-1))); if (iBottom) offset_ = offset_-iBottom; else offset_ = 0; array_ = array + offset_;; } else { array_=array; } if (size_!=-1) size_=size; } else { array_= NULL; } } // Get rid of array with alignment void CoinArrayWithLength::conditionalDelete() { if (size_==-1) { char * charArray = reinterpret_cast (array_); if (charArray) delete [] (charArray-offset_); array_=NULL; } else if (size_>=0) { size_ = -size_-2; } } // Really get rid of array with alignment void CoinArrayWithLength::reallyFreeArray() { char * charArray = reinterpret_cast (array_); if (charArray) delete [] (charArray-offset_); array_=NULL; size_=-1; } // Get enough space void CoinArrayWithLength::getCapacity(int numberBytes,int numberNeeded) { int k=capacity(); if (k0 size_ set to size and zeroed if size<=0 just does alignment If abs(mode) >2 then align on that as power of 2 */ CoinArrayWithLength::CoinArrayWithLength(int size, int mode) { alignment_=abs(mode); getArray(size); if (mode>0&&array_) memset(array_,0,size); size_=size; } CoinArrayWithLength::~CoinArrayWithLength () { if (array_) delete [] (array_-offset_); } // Conditionally gets new array char * CoinArrayWithLength::conditionalNew(long sizeWanted) { if (size_==-1) { getCapacity(static_cast(sizeWanted)); } else { int newSize = static_cast (sizeWanted*101/100)+64; // round to multiple of 16 newSize -= newSize&15; getCapacity(static_cast(sizeWanted),newSize); } return array_; } /* Copy constructor. */ CoinArrayWithLength::CoinArrayWithLength(const CoinArrayWithLength & rhs) { assert (capacity()>=0); getArray(rhs.capacity()); if (size_>0) CoinMemcpyN(rhs.array_,size_,array_); } /* Copy constructor.2 */ CoinArrayWithLength::CoinArrayWithLength(const CoinArrayWithLength * rhs) { assert (rhs->capacity()>=0); size_=rhs->size_; getArray(rhs->capacity()); if (size_>0) CoinMemcpyN(rhs->array_,size_,array_); } /* Assignment operator. */ CoinArrayWithLength & CoinArrayWithLength::operator=(const CoinArrayWithLength & rhs) { if (this != &rhs) { assert (rhs.size_!=-1||!rhs.array_); if (rhs.size_==-1) { reallyFreeArray(); } else { getCapacity(rhs.size_); if (size_>0) CoinMemcpyN(rhs.array_,size_,array_); } } return *this; } /* Assignment with length (if -1 use internal length) */ void CoinArrayWithLength::copy(const CoinArrayWithLength & rhs, int numberBytes) { if (numberBytes==-1||numberBytes<=rhs.capacity()) { CoinArrayWithLength::operator=(rhs); } else { assert (numberBytes>=0); getCapacity(numberBytes); if (rhs.array_) CoinMemcpyN(rhs.array_,numberBytes,array_); } } /* Assignment with length - does not copy */ void CoinArrayWithLength::allocate(const CoinArrayWithLength & rhs, int numberBytes) { if (numberBytes==-1||numberBytes<=rhs.capacity()) { assert (rhs.size_!=-1||!rhs.array_); if (rhs.size_==-1) { reallyFreeArray(); } else { getCapacity(rhs.size_); } } else { assert (numberBytes>=0); if (size_==-1) { delete [] array_; array_=NULL; } else { size_=-1; } if (rhs.size_>=0) size_ = numberBytes; assert (numberBytes>=0); assert (!array_); if (numberBytes) array_ = new char[numberBytes]; } } // Does what is needed to set persistence void CoinArrayWithLength::setPersistence(int flag,int currentLength) { if (flag) { if (size_==-1) { if (currentLength&&array_) { size_=currentLength; } else { size_=0; conditionalDelete(); array_=NULL; } } } else { size_=-1; } } // Swaps memory between two members void CoinArrayWithLength::swap(CoinArrayWithLength & other) { #ifdef COIN_DEVELOP if (!(size_==other.size_||size_==-1||other.size_==-1)) printf("Two arrays have sizes - %d and %d\n",size_,other.size_); #endif assert (alignment_==other.alignment_); char * swapArray = other.array_; other.array_=array_; array_=swapArray; int swapSize = other.size_; other.size_=size_; size_=swapSize; int swapOffset = other.offset_; other.offset_=offset_; offset_=swapOffset; } // Extend a persistent array keeping data (size in bytes) void CoinArrayWithLength::extend(int newSize) { //assert (newSize>=capacity()&&capacity()>=0); assert (size_>=0); // not much point otherwise if (newSize>size_) { char * temp = array_; getArray(newSize); if (temp) { CoinMemcpyN(array_,size_,temp); delete [] (temp-offset_); } size_=newSize; } } /* Default constructor */ CoinPartitionedVector::CoinPartitionedVector() : CoinIndexedVector() { memset(startPartition_,0,((&numberPartitions_-startPartition_)+1)*sizeof(int)); } /* Copy constructor. */ CoinPartitionedVector::CoinPartitionedVector(const CoinPartitionedVector & rhs) : CoinIndexedVector(rhs) { memcpy(startPartition_,rhs.startPartition_,((&numberPartitions_-startPartition_)+1)*sizeof(int)); } /* Copy constructor.2 */ CoinPartitionedVector::CoinPartitionedVector(const CoinPartitionedVector * rhs) : CoinIndexedVector(rhs) { memcpy(startPartition_,rhs->startPartition_,((&numberPartitions_-startPartition_)+1)*sizeof(int)); } /* Assignment operator. */ CoinPartitionedVector & CoinPartitionedVector::operator=(const CoinPartitionedVector & rhs) { if (this != &rhs) { CoinIndexedVector::operator=(rhs); memcpy(startPartition_,rhs.startPartition_,((&numberPartitions_-startPartition_)+1)*sizeof(int)); } return *this; } /* Destructor */ CoinPartitionedVector::~CoinPartitionedVector () { } // Add up number of elements in partitions void CoinPartitionedVector::computeNumberElements() { if (numberPartitions_) { assert (packedMode_); int n=0; for (int i=0;i=last); assert (numberElementsPartition_[i]==0); last=startPartition_[i]; } assert (startPartition_[numberPartitions_]>=last&& startPartition_[numberPartitions_]<=capacity_); #endif } else { clearAndReset(); } } // Reset the vector (as if were just created an empty vector). Gets rid of partitions void CoinPartitionedVector::clearAndReset() { if (numberPartitions_) { assert (packedMode_||!nElements_); for (int i=0;i (indices_+capacity_); for (i=0;itolerance) { elements[n]=value; indices[n++]=i+start; } } } } numberElementsPartition_[partition]=n; return n; } // Print out void CoinPartitionedVector::print() const { printf("Vector has %d elements (%d partitions)\n",nElements_,numberPartitions_); if (!numberPartitions_) { CoinIndexedVector::print(); return; } double * tempElements=CoinCopyOfArray(elements_,capacity_); int * tempIndices=CoinCopyOfArray(indices_,capacity_); for (int partition=0;partition #else # ifdef HAVE_FLOAT_H # include # endif #endif #ifdef HAVE_CMATH # include #else # ifdef HAVE_MATH_H # include # endif #endif #ifdef HAVE_CIEEEFP # include #else # ifdef HAVE_IEEEFP_H # include # endif #endif bool CoinFinite(double val) { #ifdef COIN_C_FINITE return COIN_C_FINITE(val)!=0; #else return val != DBL_MAX && val != -DBL_MAX; #endif } bool CoinIsnan(double val) { #ifdef COIN_C_ISNAN return COIN_C_ISNAN(val)!=0; #else return false; #endif } CoinUtils-2.9.10/CoinUtils/src/CoinPresolvePsdebug.cpp0000644000076600007660000010725112054012315021317 0ustar coincoin/* $Id: CoinPresolvePsdebug.cpp 1560 2012-11-24 00:29:01Z lou $ */ // 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). #include #include #include #include "CoinPresolveMatrix.hpp" #include "CoinHelperFunctions.hpp" /* \file This file contains a number of routines that are useful when doing serious debugging but unneeded otherwise. It also contains the methods that implement the CoinPresolveMonitor class. Presumably if you're deep enough into presolve to need these, you're willing to scan the file to see what can be done. See also the Presolve Debug Functions module in the doxygen doc'n and CoinPresolvePsdebug.hpp. The general approach for the matrix consistency routines is that the routines return void and abort when they find a problem. The routines that check the basis and solution complain loudly but do not abort. NOTE: The definitions for PRESOLVE_CONSISTENCY and PRESOLVE_DEBUG MUST BE CONSISTENT across all CoinPresolve source files AND OsiPresolve AND ClpPresolve AND OsiDylpPresolve (assuming any of the latter are relevant to your code). Otherwise, at best you'll get garbage output. More likely, you'll get a core dump. Resist the temptation to define these constants in individual files. In particular, cdone and rdone will NOT be consistently maintained during postsolve. Hack away as your needs dictate. */ /* Integrity checking routines for the (loosely) packed matrices of a CoinPresolveMatrix object. Some routines work on column-major and row-major reps separately, others do cross-checking. */ namespace { // begin unnamed file-local namespace #if PRESOLVE_DEBUG || PRESOLVE_CONSISTENCY /* Check for duplicate entries in a major vector by walking the vector. For each coefficient, use presolve_find_minor1 to search the remainder of the major vector for an entry with the same minor index. We don't want to find anything. */ void no_majvec_dups (const char *majdones, const CoinBigIndex *majstrts, const int *minndxs, const int *majlens, int nmaj) { for (int maj = 0 ; maj < nmaj ; maj++) { if ((!majdones || majdones[maj]) && majlens[maj] > 0) { CoinBigIndex ks = majstrts[maj] ; CoinBigIndex ke = ks+majlens[maj] ; for (CoinBigIndex k = ks ; k < ke ; k++) { /* Assert we fell off the end of the major vector without finding the entry. */ PRESOLVEASSERT(presolve_find_minor1(minndxs[k],k+1, ke,minndxs) == ke) ; } } } return ; } /* As the name implies: scan for explicit zeros. */ void check_majvec_nozeros (const CoinBigIndex *majstrts, const double *majels, const int *majlens, int nmaj) { for (int maj = 0 ; maj < nmaj ; maj++) { if (majlens[maj] > 0) { CoinBigIndex ks = majstrts[maj] ; CoinBigIndex ke = ks+majlens[maj] ; for (CoinBigIndex k = ks ; k < ke ; k++) { PRESOLVEASSERT(fabs(majels[k]) > ZTOLDP) ; } } } return ; } /* Integrity checks for the linked lists that indicate major vector ordering in the bulk storage area (minor index and coefficient arrays). */ void links_ok (presolvehlink *majlink, int *majstrts, int *majlens, int nmaj) { int maj ; /* Confirm link integrity. Vectors of length 0 should not be part of the chain. */ for (maj = 0 ; maj < nmaj ; maj++) { int pre = majlink[maj].pre ; int suc = majlink[maj].suc ; if (majlens[maj] == 0) { PRESOLVEASSERT(pre == NO_LINK && suc == NO_LINK) ; } if (pre != NO_LINK) { PRESOLVEASSERT(0 <= pre && pre <= nmaj) ; PRESOLVEASSERT(majlink[pre].suc == maj) ; } if (suc != NO_LINK) { PRESOLVEASSERT(0 <= suc && suc <= nmaj) ; PRESOLVEASSERT(majlink[suc].pre == maj) ; } } /* There must be a first vector. */ for (maj = 0 ; maj < nmaj ; maj++) { if (majlink[maj].pre == NO_LINK) break ; } PRESOLVEASSERT(nmaj == 0 || maj < nmaj) ; /* The order of the linked list should match the ordering indicated by the major vector start & length arrays. */ while (maj != NO_LINK) { if (majlink[maj].suc != NO_LINK) { PRESOLVEASSERT(majstrts[maj]+majlens[maj] <= majstrts[majlink[maj].suc]) ; } maj = majlink[maj].suc ; } return ; } /* matrix_consistent checks that an entry is in the column-major representation if it is in the row-major representation. If testvals is non-zero, it also checks that their values are the same. By doing the appropriate swaps of column- and row-major data structures in the parameter list, we can check that an entry is in the row-major representation if it's in the column-major representation. I can't see any nice way to rename the parameters (majmajstrt? minmajstrt?). Original comment: ``Note that there may be entries in a row that correspond to empty columns and vice-versa.'' To which a previous browser had commented ``HUH???''. And I agree. -- lh, 040907 -- */ void matrix_consistent (const CoinBigIndex *mrstrt, const int *hinrow, const int *hcol, const double *rowels, const CoinBigIndex *mcstrt, const int *hincol, const int *hrow, const double *colels, int nrows, int testvals, const char *ROW, const char *COL) { for (int irow = 0 ; irow < nrows ; irow++) { if (hinrow[irow] > 0) { const CoinBigIndex krs = mrstrt[irow] ; const CoinBigIndex kre = krs+hinrow[irow] ; for (CoinBigIndex k = krs ; k < kre ; k++) { int jcol = hcol[k] ; const CoinBigIndex kcs = mcstrt[jcol] ; const CoinBigIndex kce = kcs+hincol[jcol] ; CoinBigIndex kk = presolve_find_row1(irow,kcs,kce,hrow) ; if (kk == kce) { std::cout << "MATRIX INCONSISTENT: can't find " << ROW << " " << irow << " in " << COL << " " << jcol << std::endl ; fflush(stdout) ; abort() ; } if (testvals && colels[kk] != rowels[k]) { std::cout << "MATRIX INCONSISTENT: values differ for " << ROW << " " << irow << " and " << COL << " " << jcol << std::endl ; fflush(stdout) ; abort() ; } } } } } #endif } // end unnamed file-local namespace /* Utilizes matrix_consistent to check for equivalence of the column- and row-major representations. Checks for presence of coefficients in the column-major matrix, given presence in the row-major matrix, then checks for presence in the row-major matrix given presence in the column-major matrix. If testvals == true (default), the check also tests that the coefficients have equal value. See further comments with matrix_consistent. */ # if PRESOLVE_CONSISTENCY void presolve_consistent(const CoinPresolveMatrix *preObj, bool testvals) { matrix_consistent(preObj->mrstrt_,preObj->hinrow_,preObj->hcol_, preObj->rowels_, preObj->mcstrt_,preObj->hincol_,preObj->hrow_, preObj->colels_, preObj->nrows_,testvals,"row","col") ; matrix_consistent(preObj->mcstrt_,preObj->hincol_,preObj->hrow_, preObj->colels_, preObj->mrstrt_,preObj->hinrow_,preObj->hcol_, preObj->rowels_, preObj->ncols_,testvals,"col","row") ; } /* Check the column- and/or row-major matrices for duplicates. By default, both will be checked. */ void presolve_no_dups (const CoinPresolveMatrix *preObj, bool doCol, bool doRow) { if (doCol) { no_majvec_dups(0,preObj->mcstrt_,preObj->hrow_, preObj->hincol_,preObj->ncols_) ; } if (doRow) { no_majvec_dups(0,preObj->mrstrt_,preObj->hcol_, preObj->hinrow_,preObj->nrows_) ; } return ; } /* As the name implies: scan for explicit zeros. By default, both matrices are scanned. */ void presolve_no_zeros (const CoinPresolveMatrix *preObj, bool doCol, bool doRow) { if (doCol) { check_majvec_nozeros(preObj->mcstrt_,preObj->colels_,preObj->hincol_, preObj->ncols_) ; } if (doRow) { check_majvec_nozeros(preObj->mrstrt_,preObj->rowels_,preObj->hinrow_, preObj->nrows_) ; } return ; } /* Lazy check on column lengths. Scan the row index array for the column. If the relevant row length in the row-major rep is non-zero, assume we're ok. Not advertised in CoinPresolvePsdebug.hpp. */ void presolve_hincol_ok(const int *mcstrt, const int *hincol, const int *hinrow, const int *hrow, int ncols) { int jcol; for (jcol=0; jcol 0) { int kcs = mcstrt[jcol]; int kce = kcs + hincol[jcol]; int n=0; int k; for (k=kcs; k 0) n++; } if (n != hincol[jcol]) abort(); } } /* Integrity checks for the linked lists that indicate major vector ordering in the bulk storage area (minor index and coefficient arrays). */ void presolve_links_ok (const CoinPresolveMatrix *preObj, bool doCol, bool doRow) { if (doCol) { links_ok(preObj->clink_,preObj->mcstrt_, preObj->hincol_,preObj->ncols_) ; } if (doRow) { links_ok(preObj->rlink_,preObj->mrstrt_, preObj->hinrow_,preObj->nrows_) ; } return ; } /* Routines to check a threaded matrix from a CoinPostsolve object. */ /* Check that the column length agrees with the column thread. There must be the correct number of coefficients, and the thread must end with the NO_LINK marker. */ void presolve_check_threads (const CoinPostsolveMatrix *obj) { CoinBigIndex *mcstrt = obj->mcstrt_ ; int *hincol = obj->hincol_ ; CoinBigIndex *link = obj->link_ ; char *cdone = obj->cdone_ ; int n = obj->ncols0_ ; /* Scan the columns, checking only the ones that have been processed into the constraint matrix. */ for (int j = 0 ; j < n ; j++) { if (!cdone[j]) continue ; int lenj = hincol[j] ; int k ; for (k = mcstrt[j] ; k != NO_LINK && lenj > 0 ; k = link[k]) { assert(k >= 0 && k < obj->maxlink_) ; lenj-- ; } assert(k == NO_LINK && lenj == 0) ; } return ; } /* Check the free list. We're looking for gross corruption here. The notion is that the free list plus elements in the matrix should add up to the capacity of the bulk store. */ void presolve_check_free_list (const CoinPostsolveMatrix *obj, bool chkElemCnt) { CoinBigIndex k = obj->free_list_ ; CoinBigIndex freeCnt = 0 ; CoinBigIndex maxlink = obj->maxlink_ ; CoinBigIndex *link = obj->link_ ; /* Redundancy in the data structure. These should always be equal. */ assert(maxlink == obj->bulk0_) ; /* Walk the free list portion of link. We should never point outside the bulk store. If we ever come across an entry that's less than 0, it had better be NO_LINK, the end marker. */ while (k >= 0) { assert(k < maxlink) ; freeCnt++ ; k = link[k] ; } assert(k == NO_LINK) ; /* And a final test: elements in the matrix plus free space should equal the size of the bulk area. A good thought, but less than practical. Currently postsolve doesn't track the number of elements in the matrix. But you might find it useful if you're checking a newly constructed postsolve matrix. Even then, you need to make sure nelems_ is correct. In the normal scheme of things, this requires that somewhere there's a count of elements. Right now, drop_empty_cols_action::presolve does this count, and you can get an accurate value from the presolve object. assignPresolveToPostsolve will transfer this value. Otherwise you're on your own --- your constructor must somehow find this count. Using a standard CoinPackedMatrix is another way to get a count. */ if (chkElemCnt) { assert(obj->nelems_+freeCnt == maxlink) ; } return ; } #endif /* Routines to check solution and basis composition. */ /* CoinPostsolveMatrix This routine performs two checks on reduced costs held in rcosts_: * The value held in rcosts_ is checked against the status of the variable. Errors reported as "Bad rcost" * The reduced cost is calculated from scratch and compared to the value held in rcosts_. Errors reported as "Inacc rcost" Remember that postsolve has a schizophrenic attitude about maximisation. All transforms assume minimisation, and that's reflected in the reduced costs we see here. And you must load duals and reduced costs with the correct sign for minimisation. But, as a small courtesy (and a big inconsistency), postsolve will negate objective coefficients for you. Hence the rather odd use of maxmin. The routine is specific to CoinPostsolveMatrix because the reduced cost calculation requires traversal of (threaded) matrix columns. NOTE: This routine holds static variables. It will detect when the problem size changes and reinitialise. If you use presolve debugging over multiple problems and you want to be dead sure of reinitialisation, use the call presolve_check_reduced_costs(0), which will reinitialise and return. */ # if PRESOLVE_DEBUG void presolve_check_reduced_costs (const CoinPostsolveMatrix *postObj) { static bool warned = false ; static double *warned_rcosts = 0 ; static int allocSize = 0 ; static const CoinPostsolveMatrix *lastObj = 0 ; /* Is the client asking for reinitialisation only? */ if (postObj == 0) { warned = false ; if (warned_rcosts != 0) { delete[] warned_rcosts ; warned_rcosts = 0 ; } allocSize = 0 ; lastObj = 0 ; return ; } /* *Should* the client have asked for reinitialisation? */ int ncols0 = postObj->ncols0_ ; if (allocSize < ncols0 || postObj != lastObj) { warned = false ; delete[] warned_rcosts ; warned_rcosts = 0 ; allocSize = 0 ; lastObj = postObj ; } double *rcosts = postObj->rcosts_ ; /* By tracking values in warned_rcosts, we can produce a single message the first time a value is determined to be incorrect. */ if (!warned) { warned = true ; std::cout << "reduced cost" << std::endl ; warned_rcosts = new double[ncols0] ; CoinZeroN(warned_rcosts,ncols0) ; } double *colels = postObj->colels_ ; int *hrow = postObj->hrow_ ; int *mcstrt = postObj->mcstrt_ ; int *hincol = postObj->hincol_ ; CoinBigIndex *link = postObj->link_ ; double *clo = postObj->clo_ ; double *cup = postObj->cup_ ; double *dcost = postObj->cost_ ; double *sol = postObj->sol_ ; char *cdone = postObj->cdone_ ; char *rdone = postObj->rdone_ ; const double ztoldj = postObj->ztoldj_ ; const double ztolzb = postObj->ztolzb_ ; double *rowduals = postObj->rowduals_ ; double maxmin = postObj->maxmin_ ; std::string strMaxmin((maxmin < 0)?"max":"min") ; int checkCol = -1 ; /* Scan all columns, but only check the ones that are marked as having been postprocessed. */ for (int j = 0 ; j < ncols0 ; j++) { if (cdone[j] == 0) continue ; const char *statjstr = postObj->columnStatusString(j) ; /* Check the stored reduced cost for accuracy. See note above w.r.t. maxmin. */ double dj = rcosts[j] ; double wrndj = warned_rcosts[j] ; { int ndx ; CoinBigIndex k = mcstrt[j] ; int len = hincol[j] ; double chkdj = maxmin*dcost[j] ; if (j == checkCol) std::cout << "dj for " << j << " is " << dj << " - cost is " << chkdj << std::endl ; for (ndx = 0 ; ndx < len ; ndx++) { int row = hrow[k] ; PRESOLVEASSERT(rdone[row] != 0) ; chkdj -= rowduals[row]*colels[k] ; if (j == checkCol) std::cout << "row " << row << " coeff " << colels[k] << " dual " << rowduals[row] << " => dj " << chkdj << std::endl ; k = link[k] ; } if (fabs(dj-chkdj) > ztoldj && wrndj != dj) { std::cout << "Inacc rcost: " << j << " " << statjstr << " " << strMaxmin << " have " << dj << " should be " << chkdj << " err " << fabs(dj-chkdj) << std::endl ; } } /* Check the stored reduced cost for consistency with the variable's status. The cases are * basic: (reduced cost) == 0 * at upper bound and not at lower bound: (reduced cost)*(maxmin) <= 0 * at lower bound and not at upper bound: (reduced cost)*(maxmin) >= 0 * not at either bound: any sign is correct (the variable can move either way) but superbasic status is sufficiently exotic that it always deserves a message. (There should be no superbasic variables at the completion of postsolve.) As a courtesy, show the reduced cost with the proper sign. */ { double xj = sol[j] ; double lj = clo[j] ; double uj = cup[j] ; if (postObj->columnIsBasic(j)) { if (fabs(dj) > ztoldj && wrndj != dj) { std::cout << "Bad rcost: " << j << " " << maxmin*dj << " " << statjstr << " " << strMaxmin << std::endl ; } } else if (fabs(xj-uj) < ztolzb && fabs(xj-lj) > ztolzb) { if (dj >= ztoldj && wrndj != dj) { std::cout << "Bad rcost: " << j << " " << maxmin*dj << " " << statjstr << " " << strMaxmin << std::endl ; } } else if (fabs(xj-lj) < ztolzb && fabs(xj-uj) > ztolzb) { if (dj <= -ztoldj && wrndj != dj) { std::cout << "Bad rcost: " << j << " " << maxmin*dj << " " << statjstr << " " << strMaxmin << std::endl ; } } else if (fabs(xj-lj) > ztolzb && fabs(xj-uj) > ztolzb) { if (fabs(dj) > ztoldj && wrndj != dj) { std::cout << "Superbasic rcost: " << j << " " << maxmin*dj << " " << statjstr << " " << strMaxmin << " lb "<< lj << " val " << xj << " ub "<< uj << std::endl ; } } } warned_rcosts[j] = rcosts[j] ; } } /* CoinPostsolveMatrix This routine checks the value and status of the dual variables. It checks that the value and status of the dual agree with the row activity. Errors are reported as "Bad dual" See presolve_check_reduced_costs for an explanation of the use of maxmin. Specific to CoinPostsolveMatrix due to the use of rdone. This could be fixed, but probably better to clone the function and specialise it for CoinPresolveMatrix. */ void presolve_check_duals (const CoinPostsolveMatrix *postObj) { int nrows0 = postObj->nrows0_ ; double *rowduals = postObj->rowduals_ ; double *acts = postObj->acts_ ; double *rup = postObj->rup_ ; double *rlo = postObj->rlo_ ; char *rdone = postObj->rdone_ ; const double ztoldj = postObj->ztoldj_ ; const double ztolzb = postObj->ztolzb_ ; double maxmin = postObj->maxmin_ ; std::string strMaxmin((maxmin < 0)?"max":"min") ; /* Scan all processed rows. The rules are as for normal reduced costs, but we need to remember the various flips and inversions. In summary, the correct situation at optimality (minimisation) is: * acts[i] == rup[i] ==> artificial NBLB ==> dual[i] < 0 * acts[i] == rlo[i] ==> artificial NBUB ==> dual[i] > 0 We can't say much about the dual for an equality. It can go either way. As a courtesy, show the dual with the proper sign. */ for (int i = 0 ; i < nrows0 ; i++) { if (rdone[i] == 0) continue ; double ui = rup[i] ; double li = rlo[i] ; if (ui-li < 1.0e-6) continue ; double yi = rowduals[i] ; double lhsi = acts[i] ; const char *statistr = postObj->rowStatusString(i) ; if (fabs(lhsi-li) < ztolzb) { if (yi < -ztoldj) { std::cout << "Bad dual: " << i << " " << maxmin*yi << " " << statistr << " " << strMaxmin << std::endl ; } } else if (fabs(lhsi-ui) < ztolzb) { if (yi > ztoldj) { std::cout << "Bad dual: " << i << " " << maxmin*yi << " " << statistr << " " << strMaxmin << std::endl ; } } else if (li < lhsi && lhsi < ui) { if (fabs(yi) > ztoldj) { std::cout << "Bad dual: " << i << " " << maxmin*yi << " " << statistr << " " << strMaxmin << std::endl ; } } } return ; } /* CoinPresolveMatrix This routine will check the primal (column) solution for feasibility and status. If there's no column solution (sol_), the routine bails out. If the column solution is present, all else is assumed to be present. chkColSol: check colum solution (primal variables) 0 - checks off 1 - check for NaN/Inf *2 - check for above/below column bounds chkRowAct: check row solution (evaluate constraint lhs) 0 - checks off *1 - check for NaN/Inf 2 - check for inaccuracy, above/below row bounds chkStatus: check for valid status of variables 0 - checks off *1 - check status of architecturals, if colstat_ exists 2 - check status rows, if rowstat_ exists In order to check row status we need accurate row activity. Setting chkStatus to 2 forces chkRowAct to 2. CoinPrePostsolveMatrix plays games with colstat_ and rowstat_, allocating them as a single vector, so if colstat_ exists, rowstat_ really should exist. Check it anyway; this is a debug method, be robust. In general, the presolve transforms are not prepared to properly adjust the row activity (reported as `Inacc RSOL'). Postsolve transforms do better. On the bright side, the code seems to work just fine without maintaining row activity. You probably don't want to use the level 2 checks for the row solution, particularly in presolve. With a bit of thought, the various checks could be more cleanly separated to require only the minimum information for each check. */ void presolve_check_sol (const CoinPresolveMatrix *preObj, int chkColSol, int chkRowAct, int chkStatus) { double *colels = preObj->colels_ ; int *hrow = preObj->hrow_ ; int *mcstrt = preObj->mcstrt_ ; int *hincol = preObj->hincol_ ; int *hinrow = preObj->hinrow_ ; int n = preObj->ncols_ ; int m = preObj->nrows_ ; /* If there's no column solution, bail out now. */ if (preObj->sol_ == 0) return ; double *csol = preObj->sol_ ; double *acts = preObj->acts_ ; double *clo = preObj->clo_ ; double *cup = preObj->cup_ ; double *rlo = preObj->rlo_ ; double *rup = preObj->rup_ ; double tol = preObj->ztolzb_ ; if (chkStatus >= 2) chkRowAct = 2 ; double *rsol = 0 ; if (chkRowAct) { rsol = new double[m] ; memset(rsol,0,m*sizeof(double)) ; } /* Open a loop to scan each column. For each column, do the following: * Update the row solution (lhs value) by adding the contribution from this column. * Check for bogus values (NaN, infinity) * Check for feasibility (value within column bounds) * Check that the status of the variable agrees with the value and with the lower and upper bounds. Free should have no bounds, superbasic should have at least one. */ for (int j = 0 ; j < n ; ++j) { CoinBigIndex v = mcstrt[j] ; int colLen = hincol[j] ; double xj = csol[j] ; double lj = clo[j] ; double uj = cup[j] ; if (chkRowAct >= 1) { for (int u = 0 ; u < colLen ; ++u) { int i = hrow[v] ; double aij = colels[v] ; v++ ; rsol[i] += aij*xj ; } } if (chkColSol > 0) { if (CoinIsnan(xj)) { printf("NaN CSOL: %d : lb = %g x = %g ub = %g\n",j,lj,xj,uj) ; } if (xj <= -PRESOLVE_INF || xj >= PRESOLVE_INF) { printf("Inf CSOL: %d : lb = %g x = %g ub = %g\n",j,lj,xj,uj) ; } if (chkColSol > 1) { if (xj < lj-tol) { printf("low CSOL: %d : lb = %g x = %g ub = %g\n",j,lj,xj,uj) ; } else if (xj > uj+tol) { printf("high CSOL: %d : lb = %g x = %g ub = %g\n", j,lj,xj,uj) ; } } } if (chkStatus && preObj->colstat_) { CoinPrePostsolveMatrix::Status statj = preObj->getColumnStatus(j) ; switch (statj) { case CoinPrePostsolveMatrix::atUpperBound: { if (uj >= PRESOLVE_INF || fabs(xj-uj) > tol) { printf("Bad status CSOL: %d : status atUpperBound : ",j) ; printf("lb = %g x = %g ub = %g\n",lj,xj,uj) ; } break ; } case CoinPrePostsolveMatrix::atLowerBound: { if (lj <= -PRESOLVE_INF || fabs(xj-lj) > tol) { printf("Bad status CSOL: %d : status atLowerBound : ",j) ; printf("lb = %g x = %g ub = %g\n",lj,xj,uj) ; } break ; } case CoinPrePostsolveMatrix::isFree: { if (lj > -PRESOLVE_INF || uj < PRESOLVE_INF) { printf("Bad status CSOL: %d : status isFree : ",j) ; printf("lb = %g x = %g ub = %g\n",lj,xj,uj) ; } break ; } case CoinPrePostsolveMatrix::superBasic: { if (!(lj > -PRESOLVE_INF || uj < PRESOLVE_INF)) { printf("Bad status CSOL: %d : status superBasic : ",j) ; printf("lb = %g x = %g ub = %g\n",lj,xj,uj) ; } break ; } case CoinPrePostsolveMatrix::basic: { /* Nothing to do here. */ break ; } default: { printf("Bad status CSOL: %d : status unrecognized : ",j) ; break ; } } } } /* Now check the row solution. acts[i] is what presolve thinks we have, rsol[i] is what we've just calculated while scanning the columns. We need only check nontrivial rows (i.e., rows with length > 0). For each row, * Check for bogus values (NaN, infinity) * Check for accuracy (acts == rsol) * Check for feasibility (rsol within row bounds) */ tol *=1.0e3; if (chkRowAct >= 1) { for (int i = 0 ; i < m ; ++i) { if (hinrow[i]) { double lhsi = acts[i] ; double evali = rsol[i] ; double li = rlo[i] ; double ui = rup[i] ; if (CoinIsnan(evali) || CoinIsnan(lhsi)) { printf("NaN RSOL: %d : lb = %g eval = %g (expected %g) ub = %g\n", i,li,evali,lhsi,ui) ; } if (evali <= -PRESOLVE_INF || evali >= PRESOLVE_INF || lhsi <= -PRESOLVE_INF || lhsi >= PRESOLVE_INF) { printf("Inf RSOL: %d : lb = %g eval = %g (expected %g) ub = %g\n", i,li,evali,lhsi,ui) ; } if (chkRowAct >= 2) { if (fabs(evali-lhsi) > tol) { printf("Inacc RSOL: %d : lb = %g eval = %g (expected %g) ub = %g\n", i,li,evali,lhsi,ui) ; } if (evali < li-tol || lhsi < li-tol) { printf("low RSOL: %d : lb = %g eval = %g (expected %g) ub = %g\n", i,li,evali,lhsi,ui) ; } else if (evali > ui+tol || lhsi > ui+tol) { printf("high RSOL: %d : lb = %g eval = %g (expected %g) ub = %g\n", i,li,evali,lhsi,ui) ; } } if (chkStatus >= 2 && preObj->rowstat_) { CoinPrePostsolveMatrix::Status stati = preObj->getRowStatus(i) ; switch (stati) { case CoinPrePostsolveMatrix::atUpperBound: { if (li <= -PRESOLVE_INF || fabs(lhsi-li) > tol) { printf("Bad status RSOL: %d : status atUpperBound : ",i) ; printf("LB = %g lhs = %g UB = %g\n",li,lhsi,ui) ; } break ; } case CoinPrePostsolveMatrix::atLowerBound: { if (ui >= PRESOLVE_INF || fabs(lhsi-ui) > tol) { printf("Bad status RSOL: %d : status atLowerBound : ",i) ; printf("LB = %g lhs = %g UB = %g\n",li,lhsi,ui) ; } break ; } case CoinPrePostsolveMatrix::isFree: { if (li > -PRESOLVE_INF || ui < PRESOLVE_INF) { printf("Bad status RSOL: %d : status isFree : ",i) ; printf("LB = %g lhs = %g UB = %g\n",li,lhsi,ui) ; } break ; } case CoinPrePostsolveMatrix::superBasic: { printf("Bad status RSOL: %d : status superBasic : ",i) ; printf("LB = %g lhs = %g UB = %g\n",li,lhsi,ui) ; break ; } case CoinPrePostsolveMatrix::basic: { /* Nothing to do here. */ break ; } default: { printf("Bad status RSOL: %d : status unrecognized : ",i) ; break ; } } } } } delete [] rsol ; } return ; } /* CoinPostsolveMatrix check_sol overload for CoinPostsolveMatrix. Parameters and functionality identical to check_sol immediately above, but we have to remember we're working with a threaded column-major representation. */ void presolve_check_sol (const CoinPostsolveMatrix *postObj, int chkColSol, int chkRowAct, int chkStatus) { double *colels = postObj->colels_ ; int *hrow = postObj->hrow_ ; int *mcstrt = postObj->mcstrt_ ; int *hincol = postObj->hincol_ ; int *link = postObj->link_ ; int n = postObj->ncols_ ; int m = postObj->nrows_ ; double *csol = postObj->sol_ ; double *acts = postObj->acts_ ; double *clo = postObj->clo_ ; double *cup = postObj->cup_ ; double *rlo = postObj->rlo_ ; double *rup = postObj->rup_ ; double tol = postObj->ztolzb_ ; if (chkStatus >= 2) chkRowAct = 2 ; double *rsol = 0 ; if (chkRowAct >= 1) { rsol = new double[m] ; memset(rsol,0,m*sizeof(double)) ; } /* Open a loop to scan each column. For each column, do the following: * Update the row solution (lhs value) by adding the contribution from this column. * Check for bogus values (NaN, infinity) * check that the status of the variable agrees with the value and with the lower and upper bounds. Free should have no bounds, superbasic should have at least one. */ for (int j = 0 ; j < n ; ++j) { CoinBigIndex v = mcstrt[j] ; int colLen = hincol[j] ; double xj = csol[j] ; double lj = clo[j] ; double uj = cup[j] ; if (chkRowAct >= 1) { for (int u = 0 ; u < colLen ; ++u) { int i = hrow[v] ; double aij = colels[v] ; v = link[v] ; rsol[i] += aij*xj ; } } if (chkColSol >= 1) { if (CoinIsnan(xj)) { printf("NaN CSOL: %d : lb = %g x = %g ub = %g\n",j,lj,xj,uj) ; } if (xj <= -PRESOLVE_INF || xj >= PRESOLVE_INF) { printf("Inf CSOL: %d : lb = %g x = %g ub = %g\n",j,lj,xj,uj) ; } if (chkColSol >= 2) { if (xj < lj-tol) { printf("low CSOL: %d : lb = %g x = %g ub = %g\n",j,lj,xj,uj) ; } else if (xj > uj+tol) { printf("high CSOL: %d : lb = %g x = %g ub = %g\n", j,lj,xj,uj) ; } } } if (chkStatus >= 1 && postObj->colstat_) { CoinPrePostsolveMatrix::Status statj = postObj->getColumnStatus(j) ; switch (statj) { case CoinPrePostsolveMatrix::atUpperBound: { if (uj >= PRESOLVE_INF || fabs(xj-uj) > tol) { printf("Bad status CSOL: %d : status atUpperBound : ",j) ; printf("lb = %g x = %g ub = %g\n",lj,xj,uj) ; } break ; } case CoinPrePostsolveMatrix::atLowerBound: { if (lj <= -PRESOLVE_INF || fabs(xj-lj) > tol) { printf("Bad status CSOL: %d : status atLowerBound : ",j) ; printf("lb = %g x = %g ub = %g\n",lj,xj,uj) ; } break ; } case CoinPrePostsolveMatrix::isFree: { if (lj > -PRESOLVE_INF || uj < PRESOLVE_INF) { printf("Bad status CSOL: %d : status isFree : ",j) ; printf("lb = %g x = %g ub = %g\n",lj,xj,uj) ; } break ; } case CoinPrePostsolveMatrix::superBasic: { if (!(lj > -PRESOLVE_INF || uj < PRESOLVE_INF)) { printf("Bad status CSOL: %d : status superBasic : ",j) ; printf("lb = %g x = %g ub = %g\n",lj,xj,uj) ; } break ; } case CoinPrePostsolveMatrix::basic: { /* Nothing to do here. */ break ; } default: { printf("Bad status CSOL: %d : status unrecognized : ",j) ; break ; } } } } /* Now check the row solution. acts[i] is what presolve thinks we have, rsol[i] is what we've just calculated while scanning the columns. CoinPostsolveMatrix does not contain hinrow_, so we can't check for trivial rows (cf. check_sol for CoinPresolveMatrix). For each row, * Check for bogus values (NaN, infinity) */ tol *= 1.0e4; if (chkRowAct >= 1) { for (int i = 0 ; i < m ; ++i) { double lhsi = acts[i] ; double evali = rsol[i] ; double li = rlo[i] ; double ui = rup[i] ; if (CoinIsnan(evali) || CoinIsnan(lhsi)) { printf("NaN RSOL: %d : lb = %g eval = %g (expected %g) ub = %g\n", i,li,evali,lhsi,ui) ; } if (evali <= -PRESOLVE_INF || evali >= PRESOLVE_INF || lhsi <= -PRESOLVE_INF || lhsi >= PRESOLVE_INF) { printf("Inf RSOL: %d : lb = %g eval = %g (expected %g) ub = %g\n", i,li,evali,lhsi,ui) ; } if (chkRowAct >= 2) { if (fabs(evali-lhsi) > tol) { printf("Inacc RSOL: %d : lb = %g eval = %g (expected %g) ub = %g\n", i,li,evali,lhsi,ui) ; } if (evali < li-tol || lhsi < li-tol) { printf("low RSOL: %d : lb = %g eval = %g (expected %g) ub = %g\n", i,li,evali,lhsi,ui) ; } else if (evali > ui+tol || lhsi > ui+tol) { printf("high RSOL: %d : lb = %g eval = %g (expected %g) ub = %g\n", i,li,evali,lhsi,ui) ; } } if (chkStatus >= 2 && postObj->rowstat_) { CoinPrePostsolveMatrix::Status stati = postObj->getRowStatus(i) ; switch (stati) { case CoinPrePostsolveMatrix::atUpperBound: { if (li <= -PRESOLVE_INF || fabs(lhsi-li) > tol) { printf("Bad status RSOL: %d : status atUpperBound : ",i) ; printf("LB = %g lhs = %g UB = %g\n",li,lhsi,ui) ; } break ; } case CoinPrePostsolveMatrix::atLowerBound: { if (ui >= PRESOLVE_INF || fabs(lhsi-ui) > tol) { printf("Bad status RSOL: %d : status atLowerBound : ",i) ; printf("LB = %g lhs = %g UB = %g\n",li,lhsi,ui) ; } break ; } case CoinPrePostsolveMatrix::isFree: { if (li > -PRESOLVE_INF || ui < PRESOLVE_INF) { printf("Bad status RSOL: %d : status isFree : ",i) ; printf("LB = %g lhs = %g UB = %g\n",li,lhsi,ui) ; } break ; } case CoinPrePostsolveMatrix::superBasic: { printf("Bad status RSOL: %d : status superBasic : ",i) ; printf("LB = %g lhs = %g UB = %g\n",li,lhsi,ui) ; break ; } case CoinPrePostsolveMatrix::basic: { /* Nothing to do here. */ break ; } default: { printf("Bad status RSOL: %d : status unrecognized : ",i) ; break ; } } } } delete [] rsol ; } return ; } /* CoinPostsolveMatrix Make sure that the number of basic variables is correct. */ void presolve_check_nbasic (const CoinPostsolveMatrix *postObj) { int ncols0 = postObj->ncols0_ ; int nrows0 = postObj->nrows0_ ; char *cdone = postObj->cdone_ ; char *rdone = postObj->rdone_ ; int nbasic = 0 ; int ncdone = 0; int nrdone = 0; int ncb = 0; int nrb = 0; for (int j = 0 ; j < ncols0 ; j++) { if (cdone[j] != 0 && postObj->columnIsBasic(j)) { nbasic++ ; ncb++ ; } if (cdone[j]) ncdone++ ; } for (int i = 0 ; i < nrows0 ; i++) { if (rdone[i] && postObj->rowIsBasic(i)) { nbasic++ ; nrb++ ; } if (rdone[i]) nrdone++ ; } if (nbasic != postObj->nrows_) { printf("NBASIC (ERROR): %d basic variables, should be %d; ", nbasic,postObj->nrows_) ; printf("cdone %d, col basic %d, rdone %d, row basic %d.\n", ncdone,ncb,nrdone,nrb) ; fflush(stdout) ; } # if PRESOLVE_DEBUG > 1 else { std::cout << "NBASIC: " << nbasic << " basic variables; cdone " << ncdone << ", col basic " << ncb << ", rdone " << nrdone << ", row basic " << nrb << std::endl ; std::cout << std::flush ; } # endif return ; } /* CoinPresolveMatrix Overload of presolve_check_nbasic for a CoinPresolveMatrix. There may not be a solution, eh? */ void presolve_check_nbasic (const CoinPresolveMatrix *preObj) { if (preObj->sol_ == 0) return ; int ncols = preObj->ncols_ ; int nrows = preObj->nrows_ ; int nbasic = 0 ; int ncb = 0; int nrb = 0; for (int j = 0 ; j < ncols ; j++) { if (preObj->columnIsBasic(j)) { nbasic++ ; ncb++ ; } } for (int i = 0 ; i < nrows ; i++) { if (preObj->rowIsBasic(i)) { nbasic++ ; nrb++ ; } } if (nbasic != nrows) { printf("WRONG NUMBER NBASIC: is: %d should be: %d;", nbasic,nrows) ; printf(" cb %d, rb %d.\n",ncb,nrb); fflush(stdout) ; } return ; } #endif /* Original comment: I've forgotton what this is all about Looks to me like it's confirming that the columns flagged as basic indeed have enough coefficients between them to cover the basis. It'd be serious work to get this going again. Waaaaaay out of date. -- lh, 040831 -- */ # if 0 void check_pivots (const int *mrstrt, const int *hinrow, const int *hcol, int nrows, const unsigned char *colstat, const unsigned char *rowstat, int ncols) { int i ; int nbasic = 0 ; int gotone = 1 ; int stillmore ; return ; int *bcol = new int[nrows] ; memset(bcol, -1, nrows*sizeof(int)) ; char *coldone = new char[ncols] ; memset(coldone, 0, ncols) ; while (gotone) { gotone = 0 ; stillmore = 0 ; for (i=0; irowIsBasic(i)) { int krs = mrstrt[i] ; int kre = mrstrt[i] + hinrow[i] ; int nb = 0 ; int kk ; for (int k=krs; kcolumnIsBasic(hcol[k]) && !coldone[hcol[k]]) { nb++ ; kk = k ; if (nb > 1) break ; } if (nb == 1) { PRESOLVEASSERT(bcol[i] == -1) ; bcol[i] = hcol[kk] ; coldone[hcol[kk]] = 1 ; nbasic++ ; gotone = 1 ; } else stillmore = 1 ; } } PRESOLVEASSERT(!stillmore) ; for (i=0; irowIsBasic(i)) { int krs = mrstrt[i] ; int kre = mrstrt[i] + hinrow[i] ; for (int k=krs; kcolumnIsBasic(hcol[k]) || coldone[hcol[k]]) ; nbasic++ ; } PRESOLVEASSERT(nbasic == nrows) ; } # endif CoinUtils-2.9.10/CoinUtils/src/CoinModelUseful.hpp0000644000076600007660000002571411552534611020454 0ustar coincoin/* $Id: CoinModelUseful.hpp 1416 2011-04-17 09:57:29Z 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). #ifndef CoinModelUseful_H #define CoinModelUseful_H #include #include #include #include #include #include #include #include "CoinPragma.hpp" /** This is for various structures/classes needed by CoinModel. CoinModelLink CoinModelLinkedList CoinModelHash */ /// for going through row or column class CoinModelLink { public: /**@name Constructors, destructor */ //@{ /** Default constructor. */ CoinModelLink(); /** Destructor */ ~CoinModelLink(); //@} /**@name Copy method */ //@{ /** The copy constructor. */ CoinModelLink(const CoinModelLink&); /// = CoinModelLink& operator=(const CoinModelLink&); //@} /**@name Sets and gets method */ //@{ /// Get row inline int row() const { return row_;} /// Get column inline int column() const { return column_;} /// Get value inline double value() const { return value_;} /// Get value inline double element() const { return value_;} /// Get position inline int position() const { return position_;} /// Get onRow inline bool onRow() const { return onRow_;} /// Set row inline void setRow(int row) { row_=row;} /// Set column inline void setColumn(int column) { column_=column;} /// Set value inline void setValue(double value) { value_=value;} /// Set value inline void setElement(double value) { value_=value;} /// Set position inline void setPosition(int position) { position_=position;} /// Set onRow inline void setOnRow(bool onRow) { onRow_=onRow;} //@} private: /**@name Data members */ //@{ /// Row int row_; /// Column int column_; /// Value as double double value_; /// Position in data int position_; /// If on row chain bool onRow_; //@} }; /// for linked lists // for specifying triple typedef struct { // top bit is nonzero if string // rest is row unsigned int row; //CoinModelRowIndex row; int column; double value; // If string then index into strings } CoinModelTriple; inline int rowInTriple(const CoinModelTriple & triple) { return triple.row&0x7fffffff;} inline void setRowInTriple(CoinModelTriple & triple,int iRow) { triple.row = iRow|(triple.row&0x80000000);} inline bool stringInTriple(const CoinModelTriple & triple) { return (triple.row&0x80000000)!=0;} inline void setStringInTriple(CoinModelTriple & triple,bool string) { triple.row = (string ? 0x80000000 : 0)|(triple.row&0x7fffffff);} inline void setRowAndStringInTriple(CoinModelTriple & triple, int iRow,bool string) { triple.row = (string ? 0x80000000 : 0)|iRow;} /// for names and hashing // for hashing typedef struct { int index, next; } CoinModelHashLink; /* Function type. */ typedef double (*func_t) (double); /// For string evaluation /* Data type for links in the chain of symbols. */ struct symrec { char *name; /* name of symbol */ int type; /* type of symbol: either VAR or FNCT */ union { double var; /* value of a VAR */ func_t fnctptr; /* value of a FNCT */ } value; struct symrec *next; /* link field */ }; typedef struct symrec symrec; class CoinYacc { private: CoinYacc(const CoinYacc& rhs); CoinYacc& operator=(const CoinYacc& rhs); public: CoinYacc() : symtable(NULL), symbuf(NULL), length(0), unsetValue(0) {} ~CoinYacc() { if (length) { free(symbuf); symbuf = NULL; } symrec* s = symtable; while (s) { free(s->name); symtable = s; s = s->next; free(symtable); } } public: symrec * symtable; char * symbuf; int length; double unsetValue; }; class CoinModelHash { public: /**@name Constructors, destructor */ //@{ /** Default constructor. */ CoinModelHash(); /** Destructor */ ~CoinModelHash(); //@} /**@name Copy method */ //@{ /** The copy constructor. */ CoinModelHash(const CoinModelHash&); /// = CoinModelHash& operator=(const CoinModelHash&); //@} /**@name sizing (just increases) */ //@{ /// Resize hash (also re-hashs) void resize(int maxItems,bool forceReHash=false); /// Number of items i.e. rows if just row names inline int numberItems() const { return numberItems_;} /// Set number of items void setNumberItems(int number); /// Maximum number of items inline int maximumItems() const { return maximumItems_;} /// Names inline const char *const * names() const { return names_;} //@} /**@name hashing */ //@{ /// Returns index or -1 int hash(const char * name) const; /// Adds to hash void addHash(int index, const char * name); /// Deletes from hash void deleteHash(int index); /// Returns name at position (or NULL) const char * name(int which) const; /// Returns non const name at position (or NULL) char * getName(int which) const; /// Sets name at position (does not create) void setName(int which,char * name ) ; /// Validates void validateHash() const; private: /// Returns a hash value int hashValue(const char * name) const; public: //@} private: /**@name Data members */ //@{ /// Names char ** names_; /// hash CoinModelHashLink * hash_; /// Number of items int numberItems_; /// Maximum number of items int maximumItems_; /// Last slot looked at int lastSlot_; //@} }; /// For int,int hashing class CoinModelHash2 { public: /**@name Constructors, destructor */ //@{ /** Default constructor. */ CoinModelHash2(); /** Destructor */ ~CoinModelHash2(); //@} /**@name Copy method */ //@{ /** The copy constructor. */ CoinModelHash2(const CoinModelHash2&); /// = CoinModelHash2& operator=(const CoinModelHash2&); //@} /**@name sizing (just increases) */ //@{ /// Resize hash (also re-hashs) void resize(int maxItems, const CoinModelTriple * triples,bool forceReHash=false); /// Number of items inline int numberItems() const { return numberItems_;} /// Set number of items void setNumberItems(int number); /// Maximum number of items inline int maximumItems() const { return maximumItems_;} //@} /**@name hashing */ //@{ /// Returns index or -1 int hash(int row, int column, const CoinModelTriple * triples) const; /// Adds to hash void addHash(int index, int row, int column, const CoinModelTriple * triples); /// Deletes from hash void deleteHash(int index, int row, int column); private: /// Returns a hash value int hashValue(int row, int column) const; public: //@} private: /**@name Data members */ //@{ /// hash CoinModelHashLink * hash_; /// Number of items int numberItems_; /// Maximum number of items int maximumItems_; /// Last slot looked at int lastSlot_; //@} }; class CoinModelLinkedList { public: /**@name Constructors, destructor */ //@{ /** Default constructor. */ CoinModelLinkedList(); /** Destructor */ ~CoinModelLinkedList(); //@} /**@name Copy method */ //@{ /** The copy constructor. */ CoinModelLinkedList(const CoinModelLinkedList&); /// = CoinModelLinkedList& operator=(const CoinModelLinkedList&); //@} /**@name sizing (just increases) */ //@{ /** Resize list - for row list maxMajor is maximum rows. */ void resize(int maxMajor,int maxElements); /** Create list - for row list maxMajor is maximum rows. type 0 row list, 1 column list */ void create(int maxMajor,int maxElements, int numberMajor, int numberMinor, int type, int numberElements, const CoinModelTriple * triples); /// Number of major items i.e. rows if just row links inline int numberMajor() const { return numberMajor_;} /// Maximum number of major items i.e. rows if just row links inline int maximumMajor() const { return maximumMajor_;} /// Number of elements inline int numberElements() const { return numberElements_;} /// Maximum number of elements inline int maximumElements() const { return maximumElements_;} /// First on free chain inline int firstFree() const { return first_[maximumMajor_];} /// Last on free chain inline int lastFree() const { return last_[maximumMajor_];} /// First on chain inline int first(int which) const { return first_[which];} /// Last on chain inline int last(int which) const { return last_[which];} /// Next array inline const int * next() const { return next_;} /// Previous array inline const int * previous() const { return previous_;} //@} /**@name does work */ //@{ /** Adds to list - easy case i.e. add row to row list Returns where chain starts */ int addEasy(int majorIndex, int numberOfElements, const int * indices, const double * elements, CoinModelTriple * triples, CoinModelHash2 & hash); /** Adds to list - hard case i.e. add row to column list */ void addHard(int minorIndex, int numberOfElements, const int * indices, const double * elements, CoinModelTriple * triples, CoinModelHash2 & hash); /** Adds to list - hard case i.e. add row to column list This is when elements have been added to other copy */ void addHard(int first, const CoinModelTriple * triples, int firstFree, int lastFree,const int * nextOther); /** Deletes from list - same case i.e. delete row from row list */ void deleteSame(int which, CoinModelTriple * triples, CoinModelHash2 & hash, bool zapTriples); /** Deletes from list - other case i.e. delete row from column list This is when elements have been deleted from other copy */ void updateDeleted(int which, CoinModelTriple * triples, CoinModelLinkedList & otherList); /** Deletes one element from Row list */ void deleteRowOne(int position, CoinModelTriple * triples, CoinModelHash2 & hash); /** Update column list for one element when one element deleted from row copy */ void updateDeletedOne(int position, const CoinModelTriple * triples); /// Fills first,last with -1 void fill(int first,int last); /** Puts in free list from other list */ void synchronize(CoinModelLinkedList & other); /// Checks that links are consistent void validateLinks(const CoinModelTriple * triples) const; //@} private: /**@name Data members */ //@{ /// Previous - maximumElements long int * previous_; /// Next - maximumElements long int * next_; /// First - maximumMajor+1 long (last free element chain) int * first_; /// Last - maximumMajor+1 long (last free element chain) int * last_; /// Number of major items i.e. rows if just row links int numberMajor_; /// Maximum number of major items i.e. rows if just row links int maximumMajor_; /// Number of elements int numberElements_; /// Maximum number of elements int maximumElements_; /// 0 row list, 1 column list int type_; //@} }; #endif CoinUtils-2.9.10/CoinUtils/src/CoinFactorization2.cpp0000644000076600007660000013374711552534611021127 0ustar coincoin/* $Id: CoinFactorization2.cpp 1416 2011-04-17 09:57:29Z stefan $ */ // 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). #if defined(_MSC_VER) // Turn off compiler warning about long names # pragma warning(disable:4786) #endif #include "CoinUtilsConfig.h" #include #include #include #include "CoinFactorization.hpp" #include "CoinIndexedVector.hpp" #include "CoinHelperFunctions.hpp" #include "CoinFinite.hpp" #if DENSE_CODE==1 // using simple lapack interface extern "C" { /** LAPACK Fortran subroutine DGETRF. */ void F77_FUNC(dgetrf,DGETRF)(ipfint * m, ipfint *n, double *A, ipfint *ldA, ipfint * ipiv, ipfint *info); } #endif #ifndef NDEBUG static int counter1=0; #endif // factorSparse. Does sparse phase of factorization //return code is <0 error, 0= finished int CoinFactorization::factorSparse ( ) { int larger; if ( numberRows_ < numberColumns_ ) { larger = numberColumns_; } else { larger = numberRows_; } int returnCode; #define LARGELIMIT 65530 #define SMALL_SET 65531 #define SMALL_UNSET (SMALL_SET+1) #define LARGE_SET COIN_INT_MAX-10 #define LARGE_UNSET (LARGE_SET+1) if ( larger < LARGELIMIT ) returnCode = factorSparseSmall(); else returnCode = factorSparseLarge(); return returnCode; } // factorSparse. Does sparse phase of factorization //return code is <0 error, 0= finished int CoinFactorization::factorSparseSmall ( ) { int *indexRow = indexRowU_.array(); int *indexColumn = indexColumnU_.array(); CoinFactorizationDouble *element = elementU_.array(); int count = 1; workArea_.conditionalNew(numberRows_); CoinFactorizationDouble * workArea = workArea_.array(); #ifndef NDEBUG counter1++; #endif // when to go dense int denseThreshold=denseThreshold_; CoinZeroN ( workArea, numberRows_ ); //get space for bit work area CoinBigIndex workSize = 1000; workArea2_.conditionalNew(workSize); unsigned int * workArea2 = workArea2_.array(); //set markRow so no rows updated unsigned short * markRow = reinterpret_cast (markRow_.array()); CoinFillN ( markRow, numberRows_, static_cast (SMALL_UNSET)); int status = 0; //do slacks first int * numberInRow = numberInRow_.array(); int * numberInColumn = numberInColumn_.array(); int * numberInColumnPlus = numberInColumnPlus_.array(); CoinBigIndex * startColumnU = startColumnU_.array(); CoinBigIndex * startColumnL = startColumnL_.array(); if (biasLU_<3&&numberColumns_==numberRows_) { int iPivotColumn; int * pivotColumn = pivotColumn_.array(); int * nextRow = nextRow_.array(); int * lastRow = lastRow_.array(); for ( iPivotColumn = 0; iPivotColumn < numberColumns_; iPivotColumn++ ) { if ( numberInColumn[iPivotColumn] == 1 ) { CoinBigIndex start = startColumnU[iPivotColumn]; CoinFactorizationDouble value = element[start]; if ( value == slackValue_ && numberInColumnPlus[iPivotColumn] == 0 ) { // treat as slack int iRow = indexRow[start]; // but only if row not marked if (numberInRow[iRow]>0) { totalElements_ -= numberInRow[iRow]; //take out this bit of indexColumnU int next = nextRow[iRow]; int last = lastRow[iRow]; nextRow[last] = next; lastRow[next] = last; nextRow[iRow] = numberGoodU_; //use for permute lastRow[iRow] = -2; //mark //modify linked list for pivots deleteLink ( iRow ); numberInRow[iRow]=-1; numberInColumn[iPivotColumn]=0; numberGoodL_++; startColumnL[numberGoodL_] = 0; pivotColumn[numberGoodU_] = iPivotColumn; numberGoodU_++; } } } } // redo preProcess(4); CoinFillN ( markRow, numberRows_, static_cast (SMALL_UNSET)); } numberSlacks_ = numberGoodU_; int *nextCount = nextCount_.array(); int *firstCount = firstCount_.array(); CoinBigIndex *startRow = startRowU_.array(); CoinBigIndex *startColumn = startColumnU; //#define UGLY_COIN_FACTOR_CODING #ifdef UGLY_COIN_FACTOR_CODING CoinFactorizationDouble *elementL = elementL_.array(); int *indexRowL = indexRowL_.array(); int *saveColumn = saveColumn_.array(); int *nextRow = nextRow_.array(); int *lastRow = lastRow_.array() ; #endif double pivotTolerance = pivotTolerance_; int numberTrials = numberTrials_; int numberRows = numberRows_; // Put column singletons first - (if false) separateLinks(1,(biasLU_>1)); #ifndef NDEBUG int counter2=0; #endif while ( count <= biggerDimension_ ) { #ifndef NDEBUG counter2++; int badRow=-1; if (counter1==-1&&counter2>=0) { // check counts consistent for (int iCount=1;iCount= 0 ) { if ( look < numberRows_ ) { int iRow = look; if (iRow==badRow) printf("row count for row %d is %d\n",iCount,iRow); if ( numberInRow[iRow] != iCount ) { printf("failed debug on %d entry to factorSparse and %d try\n", counter1,counter2); printf("row %d - count %d number %d\n",iRow,iCount,numberInRow[iRow]); abort(); } look = nextCount[look]; } else { int iColumn = look - numberRows; if ( numberInColumn[iColumn] != iCount ) { printf("failed debug on %d entry to factorSparse and %d try\n", counter1,counter2); printf("column %d - count %d number %d\n",iColumn,iCount,numberInColumn[iColumn]); abort(); } look = nextCount[look]; } } } } #endif CoinBigIndex minimumCount = COIN_INT_MAX; double minimumCost = COIN_DBL_MAX; int iPivotRow = -1; int iPivotColumn = -1; int pivotRowPosition = -1; int pivotColumnPosition = -1; int look = firstCount[count]; int trials = 0; int * pivotColumn = pivotColumn_.array(); if ( count == 1 && firstCount[1] >= 0 &&!biasLU_) { //do column singletons first to put more in U while ( look >= 0 ) { if ( look < numberRows_ ) { look = nextCount[look]; } else { int iColumn = look - numberRows_; assert ( numberInColumn[iColumn] == count ); CoinBigIndex start = startColumnU[iColumn]; int iRow = indexRow[start]; iPivotRow = iRow; pivotRowPosition = start; iPivotColumn = iColumn; assert (iPivotRow>=0&&iPivotColumn>=0); pivotColumnPosition = -1; look = -1; break; } } /* endwhile */ if ( iPivotRow < 0 ) { //back to singletons look = firstCount[1]; } } while ( look >= 0 ) { if ( look < numberRows_ ) { int iRow = look; #ifndef NDEBUG if ( numberInRow[iRow] != count ) { printf("failed on %d entry to factorSparse and %d try\n", counter1,counter2); printf("row %d - count %d number %d\n",iRow,count,numberInRow[iRow]); abort(); } #endif look = nextCount[look]; bool rejected = false; CoinBigIndex start = startRow[iRow]; CoinBigIndex end = start + count; CoinBigIndex i; for ( i = start; i < end; i++ ) { int iColumn = indexColumn[i]; assert (numberInColumn[iColumn]>0); double cost = ( count - 1 ) * numberInColumn[iColumn]; if ( cost < minimumCost ) { CoinBigIndex where = startColumn[iColumn]; double minimumValue = element[where]; minimumValue = fabs ( minimumValue ) * pivotTolerance; while ( indexRow[where] != iRow ) { where++; } /* endwhile */ assert ( where < startColumn[iColumn] + numberInColumn[iColumn]); CoinFactorizationDouble value = element[where]; value = fabs ( value ); if ( value >= minimumValue ) { minimumCost = cost; minimumCount = numberInColumn[iColumn]; iPivotRow = iRow; pivotRowPosition = -1; iPivotColumn = iColumn; assert (iPivotRow>=0&&iPivotColumn>=0); pivotColumnPosition = i; rejected=false; if ( minimumCount < count ) { look = -1; break; } } else if ( iPivotRow == -1 ) { rejected = true; } } } trials++; if ( trials >= numberTrials && iPivotRow >= 0 ) { look = -1; break; } if ( rejected ) { //take out for moment //eligible when row changes deleteLink ( iRow ); addLink ( iRow, biggerDimension_ + 1 ); } } else { int iColumn = look - numberRows; assert ( numberInColumn[iColumn] == count ); look = nextCount[look]; CoinBigIndex start = startColumn[iColumn]; CoinBigIndex end = start + numberInColumn[iColumn]; CoinFactorizationDouble minimumValue = element[start]; minimumValue = fabs ( minimumValue ) * pivotTolerance; CoinBigIndex i; for ( i = start; i < end; i++ ) { CoinFactorizationDouble value = element[i]; value = fabs ( value ); if ( value >= minimumValue ) { int iRow = indexRow[i]; int nInRow = numberInRow[iRow]; assert (nInRow>0); double cost = ( count - 1 ) * nInRow; if ( cost < minimumCost ) { minimumCost = cost; minimumCount = nInRow; iPivotRow = iRow; pivotRowPosition = i; iPivotColumn = iColumn; assert (iPivotRow>=0&&iPivotColumn>=0); pivotColumnPosition = -1; if ( minimumCount <= count + 1 ) { look = -1; break; } } } } trials++; if ( trials >= numberTrials && iPivotRow >= 0 ) { look = -1; break; } } } /* endwhile */ if (iPivotRow>=0) { assert (iPivotRow 0 ) { if ( numberDoRow > 0 ) { if ( numberDoColumn > 1 ) { // if (1) { //need to adjust more for cache and SMP //allow at least 4 extra int increment = numberDoColumn + 1 + 4; if ( increment & 15 ) { increment = increment & ( ~15 ); increment += 16; } int increment2 = ( increment + COINFACTORIZATION_BITS_PER_INT - 1 ) >> COINFACTORIZATION_SHIFT_PER_INT; CoinBigIndex size = increment2 * numberDoRow; if ( size > workSize ) { workSize = size; workArea2_.conditionalNew(workSize); workArea2 = workArea2_.array(); } bool goodPivot; #ifndef UGLY_COIN_FACTOR_CODING //branch out to best pivot routine goodPivot = pivot ( iPivotRow, iPivotColumn, pivotRowPosition, pivotColumnPosition, workArea, workArea2, increment2, markRow , SMALL_SET); #else #define FAC_SET SMALL_SET #include "CoinFactorization.hpp" #undef FAC_SET #undef UGLY_COIN_FACTOR_CODING #endif if ( !goodPivot ) { status = -99; count=biggerDimension_+1; break; } } else { if ( !pivotOneOtherRow ( iPivotRow, iPivotColumn ) ) { status = -99; count=biggerDimension_+1; break; } } } else { assert (!numberDoRow); if ( !pivotRowSingleton ( iPivotRow, iPivotColumn ) ) { status = -99; count=biggerDimension_+1; break; } } } else { assert (!numberDoColumn); if ( !pivotColumnSingleton ( iPivotRow, iPivotColumn ) ) { status = -99; count=biggerDimension_+1; break; } } assert (nextRow_.array()[iPivotRow]==numberGoodU_); pivotColumn[numberGoodU_] = iPivotColumn; numberGoodU_++; // This should not need to be trapped here - but be safe if (numberGoodU_==numberRows_) count=biggerDimension_+1; #if COIN_DEBUG==2 checkConsistency ( ); #endif #if 0 // Even if no dense code may be better to use naive dense if (!denseThreshold_&&totalElements_>1000) { int leftRows=numberRows_-numberGoodU_; double full = leftRows; full *= full; assert (full>=0.0); double leftElements = totalElements_; double ratio; if (leftRows>2000) ratio=4.0; else ratio=3.0; if (ratio*leftElements>full) denseThreshold=1; } #endif if (denseThreshold) { // see whether to go dense int leftRows=numberRows_-numberGoodU_; double full = leftRows; full *= full; assert (full>=0.0); double leftElements = totalElements_; //if (leftRows==100) //printf("at 100 %d elements\n",totalElements_); double ratio; if (leftRows>2000) ratio=4.0; else if (leftRows>800) ratio=3.0; else if (leftRows>256) ratio=2.0; else ratio=1.5; if ((ratio*leftElements>full&&leftRows>denseThreshold_)) { //return to do dense if (status!=0) break; int check=0; for (int iColumn=0;iColumn=2<<15) { abort(); } CoinBigIndex full; if (denseThreshold_>0) full = numberDense_*numberDense_; else full = - denseThreshold_*numberDense_; totalElements_=full; denseArea_= new double [full]; CoinZeroN(denseArea_,full); densePermute_= new int [numberDense_]; int * indexRowU = indexRowU_.array(); //mark row lookup using lastRow int i; int * nextRow = nextRow_.array(); int * lastRow = lastRow_.array(); int * numberInColumn = numberInColumn_.array(); int * numberInColumnPlus = numberInColumnPlus_.array(); for (i=0;i=0) lastRow[i]=0; } int * indexRow = indexRowU_.array(); CoinFactorizationDouble * element = elementU_.array(); int which=0; for (i=0;i=0&&iRow0) { assert(numberGoodU_==numberRows_); numberGoodL_=numberRows_; //now factorize //dgef(denseArea_,&numberDense_,&numberDense_,densePermute_); int info; F77_FUNC(dgetrf,DGETRF)(&numberDense_,&numberDense_,denseArea_,&numberDense_,densePermute_, &info); // need to check size of pivots if(info) status = -1; return status; } #endif numberGoodU_ = numberRows_-numberDense_; int base = numberGoodU_; int iDense; int numberToDo=-denseThreshold_; denseThreshold_=0; double tolerance = zeroTolerance_; tolerance = 1.0e-30; int * nextColumn = nextColumn_.array(); const int * pivotColumnConst = pivotColumn_.array(); // make sure we have enough space in L and U for (iDense=0;iDense space ) { //getColumnSpace also moves fixed part if ( !getColumnSpace ( iColumn, numberInPivotColumn ) ) { return -99; } } // set so further moves will work numberInColumn[iColumn]=numberInPivotColumn; } // Fill in ? for (iColumn=numberGoodU_+numberToDo;iColumn lengthAreaL_ ) { //need more memory if ((messageLevel_&4)!=0) std::cout << "more memory needed in middle of invert" << std::endl; return -99; } CoinFactorizationDouble *elementU = elementU_.array(); for (iDense=0;iDenselargest) { largest = fabs(element[iRow]); pivotRow = iRow; } } if ( pivotRow >= 0 ) { iColumn = pivotColumnConst[base+iDense]; CoinFactorizationDouble pivotElement=element[pivotRow]; // get original row int originalRow = densePermute_[pivotRow]; // do nextRow nextRow[originalRow] = numberGoodU_; lastRow[originalRow] = -2; //mark // swap densePermute_[pivotRow]=densePermute_[iDense]; densePermute_[iDense] = originalRow; for (jDense=iDense;jDensetolerance) { indexRowL[l] = densePermute_[iRow]; elementL[l++] = value; } } numberGoodL_++; lengthL_ = l; startColumnL[numberGoodL_] = l; // update U column CoinBigIndex start = startColumnU[iColumn]; for (iRow=0;iRowtolerance) { indexRowU[start] = densePermute_[iRow]; elementU[start++] = element[iRow]; } } numberInColumn[iColumn]=0; numberInColumnPlus[iColumn] += start-startColumnU[iColumn]; startColumnU[iColumn]=start; // update other columns double * element2 = element+numberDense_; for (jDense=iDense+1;jDense=0) { int next2=nextCount[next]; if (next>=numberRows_) { nextCount[next]=-1; // Column if (firstColumn>=0) { lastCount[next]=lastColumn; nextCount[lastColumn]=next; } else { lastCount[next]= -2 - count; firstColumn=next; } lastColumn=next; } else { // Row if (firstRow>=0) { lastCount[next]=lastRow; nextCount[lastRow]=next; } else { lastCount[next]= -2 - count; firstRow=next; } lastRow=next; } next=next2; } if (rowsFirst&&firstRow>=0) { firstCount[count]=firstRow; nextCount[lastRow]=firstColumn; if (firstColumn>=0) lastCount[firstColumn]=lastRow; } else if (firstRow<0) { firstCount[count]=firstColumn; } else if (firstColumn>=0) { firstCount[count]=firstColumn; nextCount[lastColumn]=firstRow; if (firstRow>=0) lastCount[firstRow]=lastColumn; } } // Debug - save on file int CoinFactorization::saveFactorization (const char * file ) const { FILE * fp = fopen(file,"wb"); if (fp) { // Save so we can pick up scalars const char * first = reinterpret_cast ( &pivotTolerance_); const char * last = reinterpret_cast ( &biasLU_); // increment last += sizeof(int); if (fwrite(first,last-first,1,fp)!=1) return 1; // Now arrays if (CoinToFile(elementU_.array(),lengthAreaU_ , fp )) return 1; if (CoinToFile(indexRowU_.array(),lengthAreaU_ , fp )) return 1; if (CoinToFile(indexColumnU_.array(),lengthAreaU_ , fp )) return 1; if (CoinToFile(convertRowToColumnU_.array(),lengthAreaU_ , fp )) return 1; if (CoinToFile(elementByRowL_.array(),lengthAreaL_ , fp )) return 1; if (CoinToFile(indexColumnL_.array(),lengthAreaL_ , fp )) return 1; if (CoinToFile(startRowL_.array() , numberRows_+1, fp )) return 1; if (CoinToFile(elementL_.array(),lengthAreaL_ , fp )) return 1; if (CoinToFile(indexRowL_.array(),lengthAreaL_ , fp )) return 1; if (CoinToFile(startColumnL_.array(),numberRows_ + 1 , fp )) return 1; if (CoinToFile(markRow_.array(),numberRows_ , fp)) return 1; if (CoinToFile(saveColumn_.array(),numberColumns_ , fp)) return 1; if (CoinToFile(startColumnR_.array() , maximumPivots_ + 1 , fp )) return 1; if (CoinToFile(startRowU_.array(),maximumRowsExtra_ + 1 , fp )) return 1; if (CoinToFile(numberInRow_.array(),maximumRowsExtra_ + 1 , fp )) return 1; if (CoinToFile(nextRow_.array(),maximumRowsExtra_ + 1 , fp )) return 1; if (CoinToFile(lastRow_.array(),maximumRowsExtra_ + 1 , fp )) return 1; if (CoinToFile(pivotRegion_.array(),maximumRowsExtra_ + 1 , fp )) return 1; if (CoinToFile(permuteBack_.array(),maximumRowsExtra_ + 1 , fp )) return 1; if (CoinToFile(permute_.array(),maximumRowsExtra_ + 1 , fp )) return 1; if (CoinToFile(pivotColumnBack_.array(),maximumRowsExtra_ + 1 , fp )) return 1; if (CoinToFile(startColumnU_.array(),maximumColumnsExtra_ + 1 , fp )) return 1; if (CoinToFile(numberInColumn_.array(),maximumColumnsExtra_ + 1 , fp )) return 1; if (CoinToFile(numberInColumnPlus_.array(),maximumColumnsExtra_ + 1 , fp )) return 1; if (CoinToFile(firstCount_.array(),biggerDimension_ + 2 , fp )) return 1; if (CoinToFile(nextCount_.array(),numberRows_ + numberColumns_ , fp )) return 1; if (CoinToFile(lastCount_.array(),numberRows_ + numberColumns_ , fp )) return 1; if (CoinToFile(pivotRowL_.array(),numberRows_ + 1 , fp )) return 1; if (CoinToFile(pivotColumn_.array(),maximumColumnsExtra_ + 1 , fp )) return 1; if (CoinToFile(nextColumn_.array(),maximumColumnsExtra_ + 1 , fp )) return 1; if (CoinToFile(lastColumn_.array(),maximumColumnsExtra_ + 1 , fp )) return 1; if (CoinToFile(denseArea_ , numberDense_*numberDense_, fp )) return 1; if (CoinToFile(densePermute_ , numberDense_, fp )) return 1; fclose(fp); } return 0; } // Debug - restore from file int CoinFactorization::restoreFactorization (const char * file , bool factorIt ) { FILE * fp = fopen(file,"rb"); if (fp) { // Get rid of current gutsOfDestructor(); CoinBigIndex newSize=0; // for checking - should be same // Restore so we can pick up scalars char * first = reinterpret_cast ( &pivotTolerance_); char * last = reinterpret_cast ( &biasLU_); // increment last += sizeof(int); if (fread(first,last-first,1,fp)!=1) return 1; CoinBigIndex space = lengthAreaL_ - lengthL_; // Now arrays CoinFactorizationDouble *elementU = elementU_.array(); if (CoinFromFile(elementU,lengthAreaU_ , fp, newSize )==1) return 1; assert (newSize==lengthAreaU_); int * indexRowU = indexRowU_.array(); if (CoinFromFile(indexRowU,lengthAreaU_ , fp, newSize )==1) return 1; assert (newSize==lengthAreaU_); int * indexColumnU = indexColumnU_.array(); if (CoinFromFile(indexColumnU,lengthAreaU_ , fp, newSize )==1) return 1; assert (newSize==lengthAreaU_); CoinBigIndex *convertRowToColumnU = convertRowToColumnU_.array(); if (CoinFromFile(convertRowToColumnU,lengthAreaU_ , fp, newSize )==1) return 1; assert (newSize==lengthAreaU_||(newSize==0&&!convertRowToColumnU_.array())); CoinFactorizationDouble * elementByRowL = elementByRowL_.array(); if (CoinFromFile(elementByRowL,lengthAreaL_ , fp, newSize )==1) return 1; assert (newSize==lengthAreaL_||(newSize==0&&!elementByRowL_.array())); int * indexColumnL = indexColumnL_.array(); if (CoinFromFile(indexColumnL,lengthAreaL_ , fp, newSize )==1) return 1; assert (newSize==lengthAreaL_||(newSize==0&&!indexColumnL_.array())); CoinBigIndex * startRowL = startRowL_.array(); if (CoinFromFile(startRowL , numberRows_+1, fp, newSize )==1) return 1; assert (newSize==numberRows_+1||(newSize==0&&!startRowL_.array())); CoinFactorizationDouble * elementL = elementL_.array(); if (CoinFromFile(elementL,lengthAreaL_ , fp, newSize )==1) return 1; assert (newSize==lengthAreaL_); int * indexRowL = indexRowL_.array(); if (CoinFromFile(indexRowL,lengthAreaL_ , fp, newSize )==1) return 1; assert (newSize==lengthAreaL_); CoinBigIndex * startColumnL = startColumnL_.array(); if (CoinFromFile(startColumnL,numberRows_ + 1 , fp, newSize )==1) return 1; assert (newSize==numberRows_+1); int * markRow = markRow_.array(); if (CoinFromFile(markRow,numberRows_ , fp, newSize )==1) return 1; assert (newSize==numberRows_); int * saveColumn = saveColumn_.array(); if (CoinFromFile(saveColumn,numberColumns_ , fp, newSize )==1) return 1; assert (newSize==numberColumns_); CoinBigIndex * startColumnR = startColumnR_.array(); if (CoinFromFile(startColumnR , maximumPivots_ + 1 , fp, newSize )==1) return 1; assert (newSize==maximumPivots_+1||(newSize==0&&!startColumnR_.array())); CoinBigIndex * startRowU = startRowU_.array(); if (CoinFromFile(startRowU,maximumRowsExtra_ + 1 , fp, newSize )==1) return 1; assert (newSize==maximumRowsExtra_+1||(newSize==0&&!startRowU_.array())); int * numberInRow = numberInRow_.array(); if (CoinFromFile(numberInRow,maximumRowsExtra_ + 1 , fp, newSize )==1) return 1; assert (newSize==maximumRowsExtra_+1); int * nextRow = nextRow_.array(); if (CoinFromFile(nextRow,maximumRowsExtra_ + 1 , fp, newSize )==1) return 1; assert (newSize==maximumRowsExtra_+1); int * lastRow = lastRow_.array(); if (CoinFromFile(lastRow,maximumRowsExtra_ + 1 , fp, newSize )==1) return 1; assert (newSize==maximumRowsExtra_+1); CoinFactorizationDouble * pivotRegion = pivotRegion_.array(); if (CoinFromFile(pivotRegion,maximumRowsExtra_ + 1 , fp, newSize )==1) return 1; assert (newSize==maximumRowsExtra_+1); int * permuteBack = permuteBack_.array(); if (CoinFromFile(permuteBack,maximumRowsExtra_ + 1 , fp, newSize )==1) return 1; assert (newSize==maximumRowsExtra_+1||(newSize==0&&!permuteBack_.array())); int * permute = permute_.array(); if (CoinFromFile(permute,maximumRowsExtra_ + 1 , fp, newSize )==1) return 1; assert (newSize==maximumRowsExtra_+1||(newSize==0&&!permute_.array())); int * pivotColumnBack = pivotColumnBack_.array(); if (CoinFromFile(pivotColumnBack,maximumRowsExtra_ + 1 , fp, newSize )==1) return 1; assert (newSize==maximumRowsExtra_+1||(newSize==0&&!pivotColumnBack_.array())); CoinBigIndex * startColumnU = startColumnU_.array(); if (CoinFromFile(startColumnU,maximumColumnsExtra_ + 1 , fp, newSize )==1) return 1; assert (newSize==maximumColumnsExtra_+1); int * numberInColumn = numberInColumn_.array(); if (CoinFromFile(numberInColumn,maximumColumnsExtra_ + 1 , fp, newSize )==1) return 1; assert (newSize==maximumColumnsExtra_+1); int * numberInColumnPlus = numberInColumnPlus_.array(); if (CoinFromFile(numberInColumnPlus,maximumColumnsExtra_ + 1 , fp, newSize )==1) return 1; assert (newSize==maximumColumnsExtra_+1); int *firstCount = firstCount_.array(); if (CoinFromFile(firstCount,biggerDimension_ + 2 , fp, newSize )==1) return 1; assert (newSize==biggerDimension_+2); int *nextCount = nextCount_.array(); if (CoinFromFile(nextCount,numberRows_ + numberColumns_ , fp, newSize )==1) return 1; assert (newSize==numberRows_+numberColumns_); int *lastCount = lastCount_.array(); if (CoinFromFile(lastCount,numberRows_ + numberColumns_ , fp, newSize )==1) return 1; assert (newSize==numberRows_+numberColumns_); int * pivotRowL = pivotRowL_.array(); if (CoinFromFile(pivotRowL,numberRows_ + 1 , fp, newSize )==1) return 1; assert (newSize==numberRows_+1); int * pivotColumn = pivotColumn_.array(); if (CoinFromFile(pivotColumn,maximumColumnsExtra_ + 1 , fp, newSize )==1) return 1; assert (newSize==maximumColumnsExtra_+1); int * nextColumn = nextColumn_.array(); if (CoinFromFile(nextColumn,maximumColumnsExtra_ + 1 , fp, newSize )==1) return 1; assert (newSize==maximumColumnsExtra_+1); int * lastColumn = lastColumn_.array(); if (CoinFromFile(lastColumn,maximumColumnsExtra_ + 1 , fp, newSize )==1) return 1; assert (newSize==maximumColumnsExtra_+1); if (CoinFromFile(denseArea_ , numberDense_*numberDense_, fp, newSize )==1) return 1; assert (newSize==numberDense_*numberDense_); if (CoinFromFile(densePermute_ , numberDense_, fp, newSize )==1) return 1; assert (newSize==numberDense_); lengthAreaR_ = space; elementR_ = elementL_.array() + lengthL_; indexRowR_ = indexRowL_.array() + lengthL_; fclose(fp); if (factorIt) { if (biasLU_>=3||numberRows_!=numberColumns_) preProcess ( 2 ); else preProcess ( 3 ); // no row copy factor ( ); } } return 0; } // factorSparse. Does sparse phase of factorization //return code is <0 error, 0= finished int CoinFactorization::factorSparseLarge ( ) { int *indexRow = indexRowU_.array(); int *indexColumn = indexColumnU_.array(); CoinFactorizationDouble *element = elementU_.array(); int count = 1; workArea_.conditionalNew(numberRows_); CoinFactorizationDouble * workArea = workArea_.array(); #ifndef NDEBUG counter1++; #endif // when to go dense int denseThreshold=denseThreshold_; CoinZeroN ( workArea, numberRows_ ); //get space for bit work area CoinBigIndex workSize = 1000; workArea2_.conditionalNew(workSize); unsigned int * workArea2 = workArea2_.array(); //set markRow so no rows updated int * markRow = markRow_.array(); CoinFillN ( markRow, numberRows_, COIN_INT_MAX-10+1); int status = 0; //do slacks first int * numberInRow = numberInRow_.array(); int * numberInColumn = numberInColumn_.array(); int * numberInColumnPlus = numberInColumnPlus_.array(); CoinBigIndex * startColumnU = startColumnU_.array(); CoinBigIndex * startColumnL = startColumnL_.array(); if (biasLU_<3&&numberColumns_==numberRows_) { int iPivotColumn; int * pivotColumn = pivotColumn_.array(); int * nextRow = nextRow_.array(); int * lastRow = lastRow_.array(); for ( iPivotColumn = 0; iPivotColumn < numberColumns_; iPivotColumn++ ) { if ( numberInColumn[iPivotColumn] == 1 ) { CoinBigIndex start = startColumnU[iPivotColumn]; CoinFactorizationDouble value = element[start]; if ( value == slackValue_ && numberInColumnPlus[iPivotColumn] == 0 ) { // treat as slack int iRow = indexRow[start]; // but only if row not marked if (numberInRow[iRow]>0) { totalElements_ -= numberInRow[iRow]; //take out this bit of indexColumnU int next = nextRow[iRow]; int last = lastRow[iRow]; nextRow[last] = next; lastRow[next] = last; nextRow[iRow] = numberGoodU_; //use for permute lastRow[iRow] = -2; //mark //modify linked list for pivots deleteLink ( iRow ); numberInRow[iRow]=-1; numberInColumn[iPivotColumn]=0; numberGoodL_++; startColumnL[numberGoodL_] = 0; pivotColumn[numberGoodU_] = iPivotColumn; numberGoodU_++; } } } } // redo preProcess(4); CoinFillN ( markRow, numberRows_, COIN_INT_MAX-10+1); } numberSlacks_ = numberGoodU_; int *nextCount = nextCount_.array(); int *firstCount = firstCount_.array(); CoinBigIndex *startRow = startRowU_.array(); CoinBigIndex *startColumn = startColumnU; //double *elementL = elementL_.array(); //int *indexRowL = indexRowL_.array(); //int *saveColumn = saveColumn_.array(); //int *nextRow = nextRow_.array(); //int *lastRow = lastRow_.array() ; double pivotTolerance = pivotTolerance_; int numberTrials = numberTrials_; int numberRows = numberRows_; // Put column singletons first - (if false) separateLinks(1,(biasLU_>1)); #ifndef NDEBUG int counter2=0; #endif while ( count <= biggerDimension_ ) { #ifndef NDEBUG counter2++; int badRow=-1; if (counter1==-1&&counter2>=0) { // check counts consistent for (int iCount=1;iCount= 0 ) { if ( look < numberRows_ ) { int iRow = look; if (iRow==badRow) printf("row count for row %d is %d\n",iCount,iRow); if ( numberInRow[iRow] != iCount ) { printf("failed debug on %d entry to factorSparse and %d try\n", counter1,counter2); printf("row %d - count %d number %d\n",iRow,iCount,numberInRow[iRow]); abort(); } look = nextCount[look]; } else { int iColumn = look - numberRows; if ( numberInColumn[iColumn] != iCount ) { printf("failed debug on %d entry to factorSparse and %d try\n", counter1,counter2); printf("column %d - count %d number %d\n",iColumn,iCount,numberInColumn[iColumn]); abort(); } look = nextCount[look]; } } } } #endif CoinBigIndex minimumCount = COIN_INT_MAX; double minimumCost = COIN_DBL_MAX; int iPivotRow = -1; int iPivotColumn = -1; int pivotRowPosition = -1; int pivotColumnPosition = -1; int look = firstCount[count]; int trials = 0; int * pivotColumn = pivotColumn_.array(); if ( count == 1 && firstCount[1] >= 0 &&!biasLU_) { //do column singletons first to put more in U while ( look >= 0 ) { if ( look < numberRows_ ) { look = nextCount[look]; } else { int iColumn = look - numberRows_; assert ( numberInColumn[iColumn] == count ); CoinBigIndex start = startColumnU[iColumn]; int iRow = indexRow[start]; iPivotRow = iRow; pivotRowPosition = start; iPivotColumn = iColumn; assert (iPivotRow>=0&&iPivotColumn>=0); pivotColumnPosition = -1; look = -1; break; } } /* endwhile */ if ( iPivotRow < 0 ) { //back to singletons look = firstCount[1]; } } while ( look >= 0 ) { if ( look < numberRows_ ) { int iRow = look; #ifndef NDEBUG if ( numberInRow[iRow] != count ) { printf("failed on %d entry to factorSparse and %d try\n", counter1,counter2); printf("row %d - count %d number %d\n",iRow,count,numberInRow[iRow]); abort(); } #endif look = nextCount[look]; bool rejected = false; CoinBigIndex start = startRow[iRow]; CoinBigIndex end = start + count; CoinBigIndex i; for ( i = start; i < end; i++ ) { int iColumn = indexColumn[i]; assert (numberInColumn[iColumn]>0); double cost = ( count - 1 ) * numberInColumn[iColumn]; if ( cost < minimumCost ) { CoinBigIndex where = startColumn[iColumn]; CoinFactorizationDouble minimumValue = element[where]; minimumValue = fabs ( minimumValue ) * pivotTolerance; while ( indexRow[where] != iRow ) { where++; } /* endwhile */ assert ( where < startColumn[iColumn] + numberInColumn[iColumn]); CoinFactorizationDouble value = element[where]; value = fabs ( value ); if ( value >= minimumValue ) { minimumCost = cost; minimumCount = numberInColumn[iColumn]; iPivotRow = iRow; pivotRowPosition = -1; iPivotColumn = iColumn; assert (iPivotRow>=0&&iPivotColumn>=0); pivotColumnPosition = i; rejected=false; if ( minimumCount < count ) { look = -1; break; } } else if ( iPivotRow == -1 ) { rejected = true; } } } trials++; if ( trials >= numberTrials && iPivotRow >= 0 ) { look = -1; break; } if ( rejected ) { //take out for moment //eligible when row changes deleteLink ( iRow ); addLink ( iRow, biggerDimension_ + 1 ); } } else { int iColumn = look - numberRows; assert ( numberInColumn[iColumn] == count ); look = nextCount[look]; CoinBigIndex start = startColumn[iColumn]; CoinBigIndex end = start + numberInColumn[iColumn]; CoinFactorizationDouble minimumValue = element[start]; minimumValue = fabs ( minimumValue ) * pivotTolerance; CoinBigIndex i; for ( i = start; i < end; i++ ) { CoinFactorizationDouble value = element[i]; value = fabs ( value ); if ( value >= minimumValue ) { int iRow = indexRow[i]; int nInRow = numberInRow[iRow]; assert (nInRow>0); double cost = ( count - 1 ) * nInRow; if ( cost < minimumCost ) { minimumCost = cost; minimumCount = nInRow; iPivotRow = iRow; pivotRowPosition = i; iPivotColumn = iColumn; assert (iPivotRow>=0&&iPivotColumn>=0); pivotColumnPosition = -1; if ( minimumCount <= count + 1 ) { look = -1; break; } } } } trials++; if ( trials >= numberTrials && iPivotRow >= 0 ) { look = -1; break; } } } /* endwhile */ if (iPivotRow>=0) { if ( iPivotRow >= 0 ) { int numberDoRow = numberInRow[iPivotRow] - 1; int numberDoColumn = numberInColumn[iPivotColumn] - 1; totalElements_ -= ( numberDoRow + numberDoColumn + 1 ); if ( numberDoColumn > 0 ) { if ( numberDoRow > 0 ) { if ( numberDoColumn > 1 ) { // if (1) { //need to adjust more for cache and SMP //allow at least 4 extra int increment = numberDoColumn + 1 + 4; if ( increment & 15 ) { increment = increment & ( ~15 ); increment += 16; } int increment2 = ( increment + COINFACTORIZATION_BITS_PER_INT - 1 ) >> COINFACTORIZATION_SHIFT_PER_INT; CoinBigIndex size = increment2 * numberDoRow; if ( size > workSize ) { workSize = size; workArea2_.conditionalNew(workSize); workArea2 = workArea2_.array(); } bool goodPivot; //might be able to do better by permuting #ifndef UGLY_COIN_FACTOR_CODING //branch out to best pivot routine goodPivot = pivot ( iPivotRow, iPivotColumn, pivotRowPosition, pivotColumnPosition, workArea, workArea2, increment2, markRow , LARGE_SET); #else #define FAC_SET LARGE_SET #include "CoinFactorization.hpp" #undef FAC_SET #endif if ( !goodPivot ) { status = -99; count=biggerDimension_+1; break; } } else { if ( !pivotOneOtherRow ( iPivotRow, iPivotColumn ) ) { status = -99; count=biggerDimension_+1; break; } } } else { assert (!numberDoRow); if ( !pivotRowSingleton ( iPivotRow, iPivotColumn ) ) { status = -99; count=biggerDimension_+1; break; } } } else { assert (!numberDoColumn); if ( !pivotColumnSingleton ( iPivotRow, iPivotColumn ) ) { status = -99; count=biggerDimension_+1; break; } } assert (nextRow_.array()[iPivotRow]==numberGoodU_); pivotColumn[numberGoodU_] = iPivotColumn; numberGoodU_++; // This should not need to be trapped here - but be safe if (numberGoodU_==numberRows_) count=biggerDimension_+1; } #if COIN_DEBUG==2 checkConsistency ( ); #endif #if 0 // Even if no dense code may be better to use naive dense if (!denseThreshold_&&totalElements_>1000) { int leftRows=numberRows_-numberGoodU_; double full = leftRows; full *= full; assert (full>=0.0); double leftElements = totalElements_; double ratio; if (leftRows>2000) ratio=4.0; else ratio=3.0; if (ratio*leftElements>full) denseThreshold=1; } #endif if (denseThreshold) { // see whether to go dense int leftRows=numberRows_-numberGoodU_; double full = leftRows; full *= full; assert (full>=0.0); double leftElements = totalElements_; //if (leftRows==100) //printf("at 100 %d elements\n",totalElements_); double ratio; if (leftRows>2000) ratio=4.0; else if (leftRows>800) ratio=3.0; else if (leftRows>256) ratio=2.0; else ratio=1.5; if ((ratio*leftElements>full&&leftRows>denseThreshold_)) { //return to do dense if (status!=0) break; int check=0; for (int iColumn=0;iColumn #include #include #include #include #include #include "CoinError.hpp" #include "CoinHelperFunctions.hpp" #include "CoinPackedMatrix.hpp" #include "CoinLpIO.hpp" #include "CoinFinite.hpp" using namespace std; //#define LPIO_DEBUG /************************************************************************/ CoinLpIO::CoinLpIO() : problemName_(CoinStrdup("")), defaultHandler_(true), numberRows_(0), numberColumns_(0), numberElements_(0), rowsense_(NULL), rhs_(NULL), rowrange_(NULL), matrixByRow_(NULL), matrixByColumn_(NULL), rowlower_(NULL), rowupper_(NULL), collower_(NULL), colupper_(NULL), objective_(NULL), objectiveOffset_(0), integerType_(NULL), fileName_(NULL), infinity_(COIN_DBL_MAX), numberAcross_(10), epsilon_(1e-5), decimals_(5), objName_(NULL) { card_previous_names_[0] = 0; card_previous_names_[1] = 0; previous_names_[0] = NULL; previous_names_[1] = NULL; maxHash_[0]=0; numberHash_[0]=0; hash_[0] = NULL; names_[0] = NULL; maxHash_[1] = 0; numberHash_[1] = 0; hash_[1] = NULL; names_[1] = NULL; handler_ = new CoinMessageHandler(); messages_ = CoinMessage(); } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- CoinLpIO::CoinLpIO(const CoinLpIO& rhs) : problemName_(CoinStrdup("")), defaultHandler_(true), numberRows_(0), numberColumns_(0), numberElements_(0), rowsense_(NULL), rhs_(NULL), rowrange_(NULL), matrixByRow_(NULL), matrixByColumn_(NULL), rowlower_(NULL), rowupper_(NULL), collower_(NULL), colupper_(NULL), objective_(NULL), objectiveOffset_(0.0), integerType_(NULL), fileName_(CoinStrdup("")), infinity_(COIN_DBL_MAX), numberAcross_(10), epsilon_(1e-5), objName_(NULL) { card_previous_names_[0] = 0; card_previous_names_[1] = 0; previous_names_[0] = NULL; previous_names_[1] = NULL; maxHash_[0] = 0; numberHash_[0] = 0; hash_[0] = NULL; names_[0] = NULL; maxHash_[1] = 0; numberHash_[1] = 0; hash_[1] = NULL; names_[1] = NULL; if ( rhs.rowlower_ != NULL || rhs.collower_ != NULL) { gutsOfCopy(rhs); } defaultHandler_ = rhs.defaultHandler_; if (defaultHandler_) { handler_ = new CoinMessageHandler(*rhs.handler_); } else { handler_ = rhs.handler_; } messages_ = CoinMessage(); } void CoinLpIO::gutsOfCopy(const CoinLpIO& rhs) { defaultHandler_ = rhs.defaultHandler_; if (rhs.matrixByRow_) { matrixByRow_ = new CoinPackedMatrix(*(rhs.matrixByRow_)); } numberElements_ = rhs.numberElements_; numberRows_ = rhs.numberRows_; numberColumns_ = rhs.numberColumns_; decimals_ = rhs.decimals_; if (rhs.rowlower_) { rowlower_ = reinterpret_cast (malloc(numberRows_ * sizeof(double))); rowupper_ = reinterpret_cast (malloc(numberRows_ * sizeof(double))); memcpy(rowlower_, rhs.rowlower_, numberRows_ * sizeof(double)); memcpy(rowupper_, rhs.rowupper_, numberRows_ * sizeof(double)); rowrange_ = reinterpret_cast (malloc(numberRows_*sizeof(double))); rowsense_ = reinterpret_cast (malloc(numberRows_*sizeof(char))); rhs_ = reinterpret_cast (malloc(numberRows_*sizeof(double))); memcpy(rowrange_,rhs.getRowRange(),numberRows_*sizeof(double)); memcpy(rowsense_,rhs.getRowSense(),numberRows_*sizeof(char)); memcpy(rhs_,rhs.getRightHandSide(),numberRows_*sizeof(double)); } if (rhs.collower_) { collower_ = reinterpret_cast (malloc(numberColumns_ * sizeof(double))); colupper_ = reinterpret_cast (malloc(numberColumns_ * sizeof(double))); objective_ = reinterpret_cast (malloc(numberColumns_ * sizeof(double))); memcpy(collower_, rhs.collower_, numberColumns_ * sizeof(double)); memcpy(colupper_, rhs.colupper_, numberColumns_ * sizeof(double)); memcpy(objective_, rhs.objective_, numberColumns_ * sizeof(double)); } if (rhs.integerType_) { integerType_ = reinterpret_cast (malloc (numberColumns_ * sizeof(char))); memcpy(integerType_, rhs.integerType_, numberColumns_ * sizeof(char)); } free(fileName_); free(problemName_); fileName_ = CoinStrdup(rhs.fileName_); problemName_ = CoinStrdup(rhs.problemName_); numberHash_[0] = rhs.numberHash_[0]; numberHash_[1] = rhs.numberHash_[1]; maxHash_[0] = rhs.maxHash_[0]; maxHash_[1] = rhs.maxHash_[1]; infinity_ = rhs.infinity_; numberAcross_ = rhs.numberAcross_; objectiveOffset_ = rhs.objectiveOffset_; int section; for (section = 0; section < 2; section++) { if (numberHash_[section]) { char** names2 = rhs.names_[section]; names_[section] = reinterpret_cast (malloc(maxHash_[section] * sizeof(char*))); char** names = names_[section]; int i; for (i = 0; i < numberHash_[section]; i++) { names[i] = CoinStrdup(names2[i]); } hash_[section] = new CoinHashLink[maxHash_[section]]; std::memcpy(hash_[section], rhs.hash_[section], maxHash_[section]*sizeof(CoinHashLink)); } } } CoinLpIO & CoinLpIO::operator=(const CoinLpIO& rhs) { if (this != &rhs) { gutsOfDestructor(); if ( rhs.rowlower_ != NULL || rhs.collower_ != NULL) { gutsOfCopy(rhs); } defaultHandler_ = rhs.defaultHandler_; if (defaultHandler_) { handler_ = new CoinMessageHandler(*rhs.handler_); } else { handler_ = rhs.handler_; } messages_ = CoinMessage(); } return *this; } void CoinLpIO::gutsOfDestructor() { freeAll(); if (defaultHandler_) { delete handler_; handler_ = NULL; } } /************************************************************************/ CoinLpIO::~CoinLpIO() { stopHash(0); stopHash(1); freeAll(); if (defaultHandler_) { delete handler_; handler_ = NULL; } } /************************************************************************/ void CoinLpIO::freePreviousNames(const int section) { int j; if(previous_names_[section] != NULL) { for(j=0; j -infinity_) { if (upper < infinity_) { right = upper; if (upper==lower) { sense = 'E'; } else { sense = 'R'; range = upper - lower; } } else { sense = 'G'; right = lower; } } else { if (upper < infinity_) { sense = 'L'; right = upper; } else { sense = 'N'; right = 0.0; } } } /*************************************************************************/ const char * CoinLpIO::getRowSense() const { if(rowsense_ == NULL) { int nr=numberRows_; rowsense_ = reinterpret_cast (malloc(nr*sizeof(char))); double dum1,dum2; int i; for(i=0; i (malloc(nr*sizeof(double))); char dum1; double dum2; int i; for (i=0; i (malloc(nr*sizeof(double))); std::fill(rowrange_,rowrange_+nr,0.0); char dum1; double dum2; int i; for (i=0; ireverseOrdering(); } return matrixByColumn_; } /*************************************************************************/ const char * CoinLpIO::getObjName() const { return objName_; } /*************************************************************************/ void CoinLpIO::checkRowNames() { int i, nrow = getNumRows(); if(numberHash_[0] != nrow+1) { setDefaultRowNames(); handler_->message(COIN_GENERAL_WARNING,messages_)<< "### CoinLpIO::checkRowNames(): non distinct or missing row names or objective function name.\nNow using default row names." <message(COIN_GENERAL_WARNING,messages_)<message(COIN_GENERAL_WARNING,messages_)<< "### CoinLpIO::checkColNames(): non distinct or missing column names.\nNow using default column names." <= 0) && (index < numberRows_+1)) { return names_[0][index]; } else { return NULL; } } /*************************************************************************/ const char * CoinLpIO::columnName(int index) const { if((names_[1] != NULL) && (index >= 0) && (index < numberColumns_)) { return names_[1][index]; } else { return NULL; } } /*************************************************************************/ int CoinLpIO::rowIndex(const char * name) const { if (!hash_[0]) { return -1; } return findHash(name , 0); } /*************************************************************************/ int CoinLpIO::columnIndex(const char * name) const { if (!hash_[1]) { return -1; } return findHash(name , 1); } /************************************************************************/ double CoinLpIO::getInfinity() const { return infinity_; } /************************************************************************/ void CoinLpIO::setInfinity(const double value) { if (value >= 1.0e20) { infinity_ = value; } else { char str[8192]; sprintf(str,"### ERROR: value: %f\n", value); throw CoinError(str, "setInfinity", "CoinLpIO", __FILE__, __LINE__); } } /************************************************************************/ double CoinLpIO::getEpsilon() const { return epsilon_; } /************************************************************************/ void CoinLpIO::setEpsilon(const double value) { if (value < 0.1) { epsilon_ = value; } else { char str[8192]; sprintf(str,"### ERROR: value: %f\n", value); throw CoinError(str, "setEpsilon", "CoinLpIO", __FILE__, __LINE__); } } /************************************************************************/ int CoinLpIO::getNumberAcross() const { return numberAcross_; } /************************************************************************/ void CoinLpIO::setNumberAcross(const int value) { if (value > 0) { numberAcross_ = value; } else { char str[8192]; sprintf(str,"### ERROR: value: %d\n", value); throw CoinError(str, "setNumberAcross", "CoinLpIO", __FILE__, __LINE__); } } /************************************************************************/ int CoinLpIO::getDecimals() const { return decimals_; } /************************************************************************/ void CoinLpIO::setDecimals(const int value) { if (value > 0) { decimals_ = value; } else { char str[8192]; sprintf(str,"### ERROR: value: %d\n", value); throw CoinError(str, "setDecimals", "CoinLpIO", __FILE__, __LINE__); } } /************************************************************************/ double CoinLpIO::objectiveOffset() const { return objectiveOffset_; } /************************************************************************/ bool CoinLpIO::isInteger(int columnNumber) const { const char * intType = integerType_; if (intType == NULL) return false; assert (columnNumber >= 0 && columnNumber < numberColumns_); if (intType[columnNumber] != 0) return true; return false; } /************************************************************************/ const char * CoinLpIO::integerColumns() const { return integerType_; } /************************************************************************/ void CoinLpIO::setLpDataWithoutRowAndColNames( const CoinPackedMatrix& m, const double *collb, const double *colub, const double *obj_coeff, const char *is_integer, const double *rowlb, const double *rowub) { freeAll(); problemName_ = CoinStrdup(""); if (m.isColOrdered()) { matrixByRow_ = new CoinPackedMatrix(); matrixByRow_->reverseOrderedCopyOf(m); } else { matrixByRow_ = new CoinPackedMatrix(m); } numberColumns_ = matrixByRow_->getNumCols(); numberRows_ = matrixByRow_->getNumRows(); rowlower_ = reinterpret_cast (malloc (numberRows_ * sizeof(double))); rowupper_ = reinterpret_cast (malloc (numberRows_ * sizeof(double))); collower_ = reinterpret_cast (malloc (numberColumns_ * sizeof(double))); colupper_ = reinterpret_cast (malloc (numberColumns_ * sizeof(double))); objective_ = reinterpret_cast (malloc (numberColumns_ * sizeof(double))); std::copy(rowlb, rowlb + numberRows_, rowlower_); std::copy(rowub, rowub + numberRows_, rowupper_); std::copy(collb, collb + numberColumns_, collower_); std::copy(colub, colub + numberColumns_, colupper_); std::copy(obj_coeff, obj_coeff + numberColumns_, objective_); if (is_integer) { integerType_ = reinterpret_cast (malloc (numberColumns_ * sizeof(char))); std::copy(is_integer, is_integer + numberColumns_, integerType_); } else { integerType_ = 0; } if((numberHash_[0] > 0) && (numberHash_[0] != numberRows_+1)) { stopHash(0); } if((numberHash_[1] > 0) && (numberHash_[1] != numberColumns_)) { stopHash(1); } } /* SetLpDataWithoutRowAndColNames */ /*************************************************************************/ void CoinLpIO::setDefaultRowNames() { int i, nrow = getNumRows(); char **defaultRowNames = reinterpret_cast (malloc ((nrow+1) * sizeof(char *))); char buff[1024]; for(i=0; i (malloc (ncol * sizeof(char *))); char buff[256]; for(j=0; jmessage(COIN_GENERAL_WARNING,messages_)<< "### CoinLpIO::setLpDataRowAndColNames(): Invalid row names\nUse getPreviousNames() to get the old row names.\nNow using default row names." <message(COIN_GENERAL_WARNING,messages_)<< "### CoinLpIO::setLpDataRowAndColNames(): Invalid column names\nNow using default row names." < 1 - lp_eps) { fprintf(fp, " %.0f", floor(v+0.5)); } else { int decimals = getDecimals(); char form[15]; sprintf(form, " %%.%df", decimals); fprintf(fp, form, v); } } } /* out_coeff */ /************************************************************************/ int CoinLpIO::writeLp(const char *filename, const double epsilon, const int numberAcross, const int decimals, const bool useRowNames) { FILE *fp = NULL; fp = fopen(filename,"w"); if (!fp) { char str[8192]; sprintf(str,"### ERROR: unable to open file %s\n", filename); throw CoinError(str, "writeLP", "CoinLpIO", __FILE__, __LINE__); } int nerr = writeLp(fp, epsilon, numberAcross, decimals, useRowNames); fclose(fp); return(nerr); } /************************************************************************/ int CoinLpIO::writeLp(FILE *fp, const double epsilon, const int numberAcross, const int decimals, const bool useRowNames) { setEpsilon(epsilon); setNumberAcross(numberAcross); setDecimals(decimals); return writeLp(fp, useRowNames); } /************************************************************************/ int CoinLpIO::writeLp(const char *filename, const bool useRowNames) { FILE *fp = NULL; fp = fopen(filename,"w"); if (!fp) { char str[8192]; sprintf(str,"### ERROR: unable to open file %s\n", filename); throw CoinError(str, "writeLP", "CoinLpIO", __FILE__, __LINE__); } int nerr = writeLp(fp, useRowNames); fclose(fp); return(nerr); } /************************************************************************/ int CoinLpIO::writeLp(FILE *fp, const bool useRowNames) { double lp_eps = getEpsilon(); double lp_inf = getInfinity(); int numberAcross = getNumberAcross(); int i, j, cnt_print, loc_row_names = 0, loc_col_names = 0; char **prowNames = NULL, **pcolNames = NULL; const int *indices = matrixByRow_->getIndices(); const double *elements = matrixByRow_->getElements(); int ncol = getNumCols(); int nrow = getNumRows(); const double *collow = getColLower(); const double *colup = getColUpper(); const double *rowlow = getRowLower(); const double *rowup = getRowUpper(); const double *obj = getObjCoefficients(); const char *integerType = integerColumns(); char const * const * rowNames = getRowNames(); char const * const * colNames = getColNames(); char buff[256]; if(rowNames == NULL) { loc_row_names = 1; prowNames = reinterpret_cast (malloc ((nrow+1) * sizeof(char *))); for (j=0; j (malloc (ncol * sizeof(char *))); for (j=0; j 0) && (objective_[j] > lp_eps)) { fprintf(fp, " +"); } if(fabs(obj[j]) > lp_eps) { out_coeff(fp, obj[j], 0); fprintf(fp, " %s", colNames[j]); cnt_print++; if(cnt_print % numberAcross == 0) { fprintf(fp, "\n"); } } } if((cnt_print > 0) && (objectiveOffset_ > lp_eps)) { fprintf(fp, " +"); } if(fabs(objectiveOffset_) > lp_eps) { out_coeff(fp, objectiveOffset_, 1); cnt_print++; } if((cnt_print == 0) || (cnt_print % numberAcross != 0)) { fprintf(fp, "\n"); } fprintf(fp, "Subject To\n"); int cnt_out_rows = 0; for(i=0; igetVectorFirst(i); jgetVectorLast(i); j++) { if((cnt_print > 0) && (elements[j] > lp_eps)) { fprintf(fp, " +"); } if(fabs(elements[j]) > lp_eps) { out_coeff(fp, elements[j], 0); fprintf(fp, " %s", colNames[indices[j]]); cnt_print++; if(cnt_print % numberAcross == 0) { fprintf(fp, "\n"); } } } if(rowup[i] - rowlow[i] < lp_eps) { fprintf(fp, " ="); out_coeff(fp, rowlow[i], 1); fprintf(fp, "\n"); } else { if(rowup[i] < lp_inf) { fprintf(fp, " <="); out_coeff(fp, rowup[i], 1); fprintf(fp, "\n"); if(rowlower_[i] > -lp_inf) { cnt_print = 0; if(useRowNames) { fprintf(fp, "%s_low:", rowNames[i]); } cnt_out_rows++; for(j=matrixByRow_->getVectorFirst(i); jgetVectorLast(i); j++) { if((cnt_print>0) && (elements[j] > lp_eps)) { fprintf(fp, " +"); } if(fabs(elements[j]) > lp_eps) { out_coeff(fp, elements[j], 0); fprintf(fp, " %s", colNames[indices[j]]); cnt_print++; if(cnt_print % numberAcross == 0) { fprintf(fp, "\n"); } } } fprintf(fp, " >="); out_coeff(fp, rowlow[i], 1); fprintf(fp, "\n"); } } else { fprintf(fp, " >="); out_coeff(fp, rowlow[i], 1); fprintf(fp, "\n"); } } } #ifdef LPIO_DEBUG printf("CoinLpIO::writeLp(): Done with constraints\n"); #endif fprintf(fp, "Bounds\n"); for(j=0; j -lp_inf) && (colup[j] < lp_inf)) { out_coeff(fp, collow[j], 1); fprintf(fp, " <= %s <=", colNames[j]); out_coeff(fp, colup[j], 1); fprintf(fp, "\n"); } if((collow[j] == -lp_inf) && (colup[j] < lp_inf)) { fprintf(fp, "%s <=", colNames[j]); out_coeff(fp, colup[j], 1); fprintf(fp, "\n"); } if((collow[j] > -lp_inf) && (colup[j] == lp_inf)) { if(fabs(collow[j]) > lp_eps) { out_coeff(fp, collow[j], 1); fprintf(fp, " <= %s\n", colNames[j]); } } if(collow[j] == -lp_inf) { fprintf(fp, " %s Free\n", colNames[j]); } } #ifdef LPIO_DEBUG printf("CoinLpIO::writeLp(): Done with bounds\n"); #endif if(integerType != NULL) { int first_int = 1; cnt_print = 0; for(j=0; j=") == 0) { return(2); } printf("### ERROR: CoinLpIO: is_sense(): string: %s \n", buff); } return(-1); } /* is_sense */ /*************************************************************************/ int CoinLpIO::is_free(const char *buff) const { size_t lbuff = strlen(buff); if((lbuff == 4) && (CoinStrNCaseCmp(buff, "free", 4) == 0)) { return(1); } return(0); } /* is_free */ /*************************************************************************/ int CoinLpIO::is_inf(const char *buff) const { size_t lbuff = strlen(buff); if((lbuff == 3) && (CoinStrNCaseCmp(buff, "inf", 3) == 0)) { return(1); } return(0); } /* is_inf */ /*************************************************************************/ int CoinLpIO::is_comment(const char *buff) const { if((buff[0] == '/') || (buff[0] == '\\')) { return(1); } return(0); } /* is_comment */ /*************************************************************************/ void CoinLpIO::skip_comment(char *buff, FILE *fp) const { while(strcspn(buff, "\n") == strlen(buff)) { // end of line not read yet if(feof(fp)) { char str[8192]; sprintf(str,"### ERROR: end of file reached while skipping comment\n"); throw CoinError(str, "skip_comment", "CoinLpIO", __FILE__, __LINE__); } if(ferror(fp)) { char str[8192]; sprintf(str,"### ERROR: error while skipping comment\n"); throw CoinError(str, "skip_comment", "CoinLpIO", __FILE__, __LINE__); } char * x=fgets(buff, sizeof(buff), fp); if (!x) throw("bad fgets"); } } /* skip_comment */ /*************************************************************************/ void CoinLpIO::scan_next(char *buff, FILE *fp) const { int x=fscanf(fp, "%s", buff); if (x<=0) throw("bad fscanf"); while(is_comment(buff)) { skip_comment(buff, fp); x=fscanf(fp, "%s", buff); if (x<=0) throw("bad fscanf"); } #ifdef LPIO_DEBUG printf("CoinLpIO::scan_next: (%s)\n", buff); #endif } /* scan_next */ /*************************************************************************/ int CoinLpIO::is_invalid_name(const char *name, const bool ranged) const { size_t pos, lname, valid_lname = 100; char str_valid[] = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\"!#$%&(),.;?@_'`{}~"; if(ranged) { valid_lname -= 4; // will add "_low" when writing the Lp file } if(name == NULL) { lname = 0; } else { lname = strlen(name); } if(lname < 1) { handler_->message(COIN_GENERAL_WARNING,messages_)<< "### CoinLpIO::is_invalid_name(): Name is empty" < valid_lname) { char printBuffer[512]; sprintf(printBuffer,"### CoinLpIO::is_invalid_name(): Name %s is too long", name); handler_->message(COIN_GENERAL_WARNING,messages_)<message(COIN_GENERAL_WARNING,messages_)<message(COIN_GENERAL_WARNING,messages_)<message(COIN_GENERAL_WARNING,messages_)< 0) { return(read_st); } start = buff; mult = 1; if(buff[0] == '+') { mult = 1; if(strlen(buff) == 1) { scan_next(buff, fp); start = buff; } else { start = &(buff[1]); } } if(buff[0] == '-') { mult = -1; if(strlen(buff) == 1) { scan_next(buff, fp); start = buff; } else { start = &(buff[1]); } } if(first_is_number(start)) { coeff[*cnt] = atof(start); sprintf(loc_name, "aa"); scan_next(loc_name, fp); } else { coeff[*cnt] = 1; strcpy(loc_name, start); } read_st = is_subject_to(loc_name); #ifdef LPIO_DEBUG printf("read_monom_obj: second buff: (%s)\n", buff); #endif if(read_st > 0) { setObjectiveOffset(mult * coeff[*cnt]); #ifdef LPIO_DEBUG printf("read_monom_obj: objectiveOffset: %f\n", objectiveOffset_); #endif return(read_st); } coeff[*cnt] *= mult; name[*cnt] = CoinStrdup(loc_name); #ifdef LPIO_DEBUG printf("read_monom_obj: (%f) (%s)\n", coeff[*cnt], name[*cnt]); #endif (*cnt)++; return(read_st); } /* read_monom_obj */ /*************************************************************************/ int CoinLpIO::read_monom_row(FILE *fp, char *start_str, double *coeff, char **name, int cnt_coeff) const { double mult; char buff[1024], loc_name[1024], *start; int read_sense = -1; sprintf(buff, "%s", start_str); read_sense = is_sense(buff); if(read_sense > -1) { return(read_sense); } start = buff; mult = 1; if(buff[0] == '+') { mult = 1; if(strlen(buff) == 1) { scan_next(buff, fp); start = buff; } else { start = &(buff[1]); } } if(buff[0] == '-') { mult = -1; if(strlen(buff) == 1) { scan_next(buff, fp); start = buff; } else { start = &(buff[1]); } } if(first_is_number(start)) { coeff[cnt_coeff] = atof(start); scan_next(loc_name, fp); } else { coeff[cnt_coeff] = 1; strcpy(loc_name, start); } coeff[cnt_coeff] *= mult; #ifdef KILL_ZERO_READLP if (fabs(coeff[cnt_coeff])>epsilon_) name[cnt_coeff] = CoinStrdup(loc_name); else read_sense=-2; // effectively zero #else name[cnt_coeff] = CoinStrdup(loc_name); #endif #ifdef LPIO_DEBUG printf("CoinLpIO: read_monom_row: (%f) (%s)\n", coeff[cnt_coeff], name[cnt_coeff]); #endif return(read_sense); } /* read_monom_row */ /*************************************************************************/ void CoinLpIO::realloc_coeff(double **coeff, char ***colNames, int *maxcoeff) const { *maxcoeff *= 5; *colNames = reinterpret_cast (realloc ((*colNames), (*maxcoeff+1) * sizeof(char *))); *coeff = reinterpret_cast (realloc ((*coeff), (*maxcoeff+1) * sizeof(double))); } /* realloc_coeff */ /*************************************************************************/ void CoinLpIO::realloc_row(char ***rowNames, int **start, double **rhs, double **rowlow, double **rowup, int *maxrow) const { *maxrow *= 5; *rowNames = reinterpret_cast (realloc ((*rowNames), (*maxrow+1) * sizeof(char *))); *start = reinterpret_cast (realloc ((*start), (*maxrow+1) * sizeof(int))); *rhs = reinterpret_cast (realloc ((*rhs), (*maxrow+1) * sizeof(double))); *rowlow = reinterpret_cast (realloc ((*rowlow), (*maxrow+1) * sizeof(double))); *rowup = reinterpret_cast (realloc ((*rowup), (*maxrow+1) * sizeof(double))); } /* realloc_row */ /*************************************************************************/ void CoinLpIO::realloc_col(double **collow, double **colup, char **is_int, int *maxcol) const { *maxcol += 100; *collow = reinterpret_cast (realloc ((*collow), (*maxcol+1) * sizeof(double))); *colup = reinterpret_cast (realloc ((*colup), (*maxcol+1) * sizeof(double))); *is_int = reinterpret_cast (realloc ((*is_int), (*maxcol+1) * sizeof(char))); } /* realloc_col */ /*************************************************************************/ void CoinLpIO::read_row(FILE *fp, char *buff, double **pcoeff, char ***pcolNames, int *cnt_coeff, int *maxcoeff, double *rhs, double *rowlow, double *rowup, int *cnt_row, double inf) const { int read_sense = -1; char start_str[1024]; sprintf(start_str, "%s", buff); while(read_sense < 0) { if((*cnt_coeff) == (*maxcoeff)) { realloc_coeff(pcoeff, pcolNames, maxcoeff); } read_sense = read_monom_row(fp, start_str, *pcoeff, *pcolNames, *cnt_coeff); #ifdef KILL_ZERO_READLP if (read_sense!=-2) // see if zero #endif (*cnt_coeff)++; scan_next(start_str, fp); if(feof(fp)) { char str[8192]; sprintf(str,"### ERROR: Unable to read row monomial\n"); throw CoinError(str, "read_monom_row", "CoinLpIO", __FILE__, __LINE__); } } (*cnt_coeff)--; rhs[*cnt_row] = atof(start_str); switch(read_sense) { case 0: rowlow[*cnt_row] = -inf; rowup[*cnt_row] = rhs[*cnt_row]; break; case 1: rowlow[*cnt_row] = rhs[*cnt_row]; rowup[*cnt_row] = rhs[*cnt_row]; break; case 2: rowlow[*cnt_row] = rhs[*cnt_row]; rowup[*cnt_row] = inf; break; default: break; } (*cnt_row)++; } /* read_row */ /*************************************************************************/ int CoinLpIO::is_keyword(const char *buff) const { size_t lbuff = strlen(buff); if(((lbuff == 5) && (CoinStrNCaseCmp(buff, "bound", 5) == 0)) || ((lbuff == 6) && (CoinStrNCaseCmp(buff, "bounds", 6) == 0))) { return(1); } if(((lbuff == 7) && (CoinStrNCaseCmp(buff, "integer", 7) == 0)) || ((lbuff == 8) && (CoinStrNCaseCmp(buff, "integers", 8) == 0))) { return(2); } if(((lbuff == 7) && (CoinStrNCaseCmp(buff, "general", 7) == 0)) || ((lbuff == 8) && (CoinStrNCaseCmp(buff, "generals", 8) == 0))) { return(2); } if(((lbuff == 6) && (CoinStrNCaseCmp(buff, "binary", 6) == 0)) || ((lbuff == 8) && (CoinStrNCaseCmp(buff, "binaries", 8) == 0))) { return(3); } if((lbuff == 3) && (CoinStrNCaseCmp(buff, "end", 3) == 0)) { return(4); } return(0); } /* is_keyword */ /*************************************************************************/ void CoinLpIO::readLp(const char *filename, const double epsilon) { setEpsilon(epsilon); readLp(filename); } /*************************************************************************/ void CoinLpIO::readLp(const char *filename) { FILE *fp = fopen(filename, "r"); if(!fp) { char str[8192]; sprintf(str,"### ERROR: Unable to open file %s for reading\n", filename); throw CoinError(str, "readLp", "CoinLpIO", __FILE__, __LINE__); } readLp(fp); fclose(fp); } /*************************************************************************/ void CoinLpIO::readLp(FILE* fp, const double epsilon) { setEpsilon(epsilon); readLp(fp); } /*************************************************************************/ void CoinLpIO::readLp(FILE* fp) { int maxrow = 1000; int maxcoeff = 40000; double lp_eps = getEpsilon(); double lp_inf = getInfinity(); char buff[1024]; int objsense, cnt_coeff = 0, cnt_row = 0, cnt_obj = 0; char *objName = NULL; char **colNames = reinterpret_cast (malloc ((maxcoeff+1) * sizeof(char *))); double *coeff = reinterpret_cast (malloc ((maxcoeff+1) * sizeof(double))); char **rowNames = reinterpret_cast (malloc ((maxrow+1) * sizeof(char *))); int *start = reinterpret_cast (malloc ((maxrow+1) * sizeof(int))); double *rhs = reinterpret_cast (malloc ((maxrow+1) * sizeof(double))); double *rowlow = reinterpret_cast (malloc ((maxrow+1) * sizeof(double))); double *rowup = reinterpret_cast (malloc ((maxrow+1) * sizeof(double))); int i; objsense = find_obj(fp); int read_st = 0; while(!read_st) { read_st = read_monom_obj(fp, coeff, colNames, &cnt_obj, &objName); if(cnt_obj == maxcoeff) { realloc_coeff(&coeff, &colNames, &maxcoeff); } } start[0] = cnt_obj; cnt_coeff = cnt_obj; if(read_st == 2) { int x=fscanf(fp, "%s", buff); if (x<=0) throw("bad fscanf"); size_t lbuff = strlen(buff); if((lbuff != 2) || (CoinStrNCaseCmp(buff, "to", 2) != 0)) { char str[8192]; sprintf(str,"### ERROR: Can not locate keyword 'Subject To'\n"); throw CoinError(str, "readLp", "CoinLpIO", __FILE__, __LINE__); } } scan_next(buff, fp); while(!is_keyword(buff)) { if(buff[strlen(buff)-1] == ':') { buff[strlen(buff)-1] = '\0'; #ifdef LPIO_DEBUG printf("CoinLpIO::readLp(): rowName[%d]: %s\n", cnt_row, buff); #endif rowNames[cnt_row] = CoinStrdup(buff); scan_next(buff, fp); } else { char rname[15]; sprintf(rname, "cons%d", cnt_row); rowNames[cnt_row] = CoinStrdup(rname); } read_row(fp, buff, &coeff, &colNames, &cnt_coeff, &maxcoeff, rhs, rowlow, rowup, &cnt_row, lp_inf); scan_next(buff, fp); start[cnt_row] = cnt_coeff; if(cnt_row == maxrow) { realloc_row(&rowNames, &start, &rhs, &rowlow, &rowup, &maxrow); } } numberRows_ = cnt_row; stopHash(1); startHash(colNames, cnt_coeff, 1); COINColumnIndex icol; int read_sense1, read_sense2; double bnd1 = 0, bnd2 = 0; int maxcol = numberHash_[1] + 100; double *collow = reinterpret_cast (malloc ((maxcol+1) * sizeof(double))); double *colup = reinterpret_cast (malloc ((maxcol+1) * sizeof(double))); char *is_int = reinterpret_cast (malloc ((maxcol+1) * sizeof(char))); int has_int = 0; for (i=0; imessage(COIN_GENERAL_WARNING,messages_)< -1) { scan_next(buff, fp); mult = 1; start_str = buff; if(buff[0] == '-'||buff[0] == '+') { mult = (buff[0] == '-') ? -1 : +1; if(strlen(buff) == 1) { scan_next(buff, fp); start_str = buff; } else { start_str = &(buff[1]); } } if(first_is_number(start_str)) { bnd2 = mult * atof(start_str); scan_next(buff, fp); } else { if(is_inf(start_str)) { bnd2 = mult * lp_inf; scan_next(buff, fp); } else { char str[8192]; sprintf(str,"### ERROR: Bounds; expect a number, get: %s\n", buff); throw CoinError(str, "readLp", "CoinLpIO", __FILE__, __LINE__); } } } if((read_sense1 > -1) && (read_sense2 > -1)) { if(read_sense1 != read_sense2) { char str[8192]; sprintf(str,"### ERROR: Bounds; variable: %s read_sense1: %d read_sense2: %d\n", buff, read_sense1, read_sense2); throw CoinError(str, "readLp", "CoinLpIO", __FILE__, __LINE__); } else { if(read_sense1 == 1) { if(fabs(bnd1 - bnd2) > lp_eps) { char str[8192]; sprintf(str,"### ERROR: Bounds; variable: %s read_sense1: %d read_sense2: %d bnd1: %f bnd2: %f\n", buff, read_sense1, read_sense2, bnd1, bnd2); throw CoinError(str, "readLp", "CoinLpIO", __FILE__, __LINE__); } collow[icol] = bnd1; colup[icol] = bnd1; } if(read_sense1 == 0) { collow[icol] = bnd1; colup[icol] = bnd2; } if(read_sense1 == 2) { colup[icol] = bnd1; collow[icol] = bnd2; } } } else { if(read_sense1 > -1) { switch(read_sense1) { case 0: collow[icol] = bnd1; break; case 1: collow[icol] = bnd1; colup[icol] = bnd1; break; case 2: colup[icol] = bnd1; break; } } if(read_sense2 > -1) { switch(read_sense2) { case 0: colup[icol] = bnd2; break; case 1: collow[icol] = bnd2; colup[icol] = bnd2; break; case 2: collow[icol] = bnd2; break; } } } } } break; case 2: /* Integers/Generals section */ scan_next(buff, fp); while(is_keyword(buff) == 0) { icol = findHash(buff, 1); #ifdef LPIO_DEBUG printf("CoinLpIO::readLp(): Integer: colname: (%s) icol: %d\n", buff, icol); #endif if(icol < 0) { char printBuffer[512]; sprintf(printBuffer,"### CoinLpIO::readLp(): Integer variable %s does not appear in objective function or constraints", buff); handler_->message(COIN_GENERAL_WARNING,messages_)<message(COIN_GENERAL_WARNING,messages_)< 1) { colup[icol] = 1; } scan_next(buff, fp); } break; case 4: done = 1; break; default: char str[8192]; sprintf(str,"### ERROR: Lost while reading: (%s)\n", buff); throw CoinError(str, "readLp", "CoinLpIO", __FILE__, __LINE__); break; } } #ifdef LPIO_DEBUG printf("CoinLpIO::readLp(): Done with reading the Lp file\n"); #endif int *ind = reinterpret_cast (malloc ((maxcoeff+1) * sizeof(int))); for(i=0; i (malloc (numberColumns_ * sizeof(double))); memset(obj, 0, numberColumns_ * sizeof(double)); for(i=0; imessage(COIN_GENERAL_INFO,messages_)<< " CoinLpIO::readLp(): Maximization problem reformulated as minimization" <dumpMatrix(); #endif setLpDataWithoutRowAndColNames(*matrix, collow, colup, obj, has_int ? is_int : 0, rowlow, rowup); if(objName == NULL) { rowNames[cnt_row] = CoinStrdup("obj"); } else { rowNames[cnt_row] = CoinStrdup(objName); } // Hash tables for column names are already set up setLpDataRowAndColNames(rowNames, NULL); if(are_invalid_names(names_[1], numberHash_[1], false)) { setDefaultColNames(); handler_->message(COIN_GENERAL_WARNING,messages_)<< "### CoinLpIO::readLp(): Invalid column names\nNow using default column names." <dumpMatrix(); int i; printf("rowlower_:\n"); for(i=0; i (malloc(maxhash * sizeof(char *))); hash_[section] = new CoinHashLink[maxhash]; CoinHashLink * hashThis = hash_[section]; char **hashNames = names_[section]; for ( i = 0; i < maxhash; i++ ) { hashThis[i].index = -1; hashThis[i].next = -1; } /* * Initialize the hash table. Only the index of the first name that * hashes to a value is entered in the table; subsequent names that * collide with it are not entered. */ for (i=0; i i) { char str[8192]; sprintf(str,"### ERROR: Hash table: j1: %d i: %d\n", j1, i); throw CoinError(str, "startHash", "CoinLpIO", __FILE__, __LINE__); } #endif if (strcmp(thisName, hashNames[j1]) == 0) { // thisName already entered break; } else { // Collision; check if thisName already entered COINColumnIndex k = hashThis[ipos].next; if (k == -1) { // thisName not found; enter it while (1) { ++iput; if (iput > maxhash) { char str[8192]; sprintf(str,"### ERROR: Hash table: too many names\n"); throw CoinError(str, "startHash", "CoinLpIO", __FILE__, __LINE__); break; } if (hashThis[iput].index == -1) { break; } } hashThis[ipos].next = iput; hashThis[iput].index = cnt_distinct; hashNames[cnt_distinct] = CoinStrdup(thisName); cnt_distinct++; break; } else { ipos = k; // continue the check with names in collision } } } } } numberHash_[section] = cnt_distinct; } /* startHash */ /**************************************************************************/ // stopHash. Deletes hash storage void CoinLpIO::stopHash(int section) { freePreviousNames(section); previous_names_[section] = names_[section]; card_previous_names_[section] = numberHash_[section]; delete[] hash_[section]; hash_[section] = NULL; maxHash_[section] = 0; numberHash_[section] = 0; if(section == 0) { free(objName_); objName_ = NULL; } } /* stopHash */ /**********************************************************************/ // findHash. -1 not found COINColumnIndex CoinLpIO::findHash(const char *name, int section) const { COINColumnIndex found = -1; char ** names = names_[section]; CoinHashLink * hashThis = hash_[section]; COINColumnIndex maxhash = maxHash_[section]; COINColumnIndex ipos; /* default if we don't find anything */ if (!maxhash) return -1; int length = CoinStrlenAsInt(name); ipos = compute_hash(name, maxhash, length); while (1) { COINColumnIndex j1 = hashThis[ipos].index; if (j1 >= 0) { char *thisName2 = names[j1]; if (strcmp (name, thisName2) != 0) { COINColumnIndex k = hashThis[ipos].next; if (k != -1) ipos = k; else break; } else { found = j1; break; } } else { found = -1; break; } } return found; } /* findHash */ /*********************************************************************/ void CoinLpIO::insertHash(const char *thisName, int section) { int number = numberHash_[section]; int maxhash = maxHash_[section]; CoinHashLink * hashThis = hash_[section]; char **hashNames = names_[section]; int iput = -1; int length = CoinStrlenAsInt(thisName); int ipos = compute_hash(thisName, maxhash, length); while (1) { COINColumnIndex j1 = hashThis[ipos].index; if (j1 == -1) { hashThis[ipos].index = number; break; } else { char *thisName2 = hashNames[j1]; if ( strcmp (thisName, thisName2) != 0 ) { COINColumnIndex k = hashThis[ipos].next; if (k == -1) { while (1) { ++iput; if (iput == maxhash) { char str[8192]; sprintf(str,"### ERROR: Hash table: too many names\n"); throw CoinError(str, "insertHash", "CoinLpIO", __FILE__, __LINE__); break; } if (hashThis[iput].index == -1) { break; } } hashThis[ipos].next = iput; hashThis[iput].index = number; break; } else { ipos = k; /* nothing worked - try it again */ } } } } hashNames[number] = CoinStrdup(thisName); (numberHash_[section])++; } // Pass in Message handler (not deleted at end) void CoinLpIO::passInMessageHandler(CoinMessageHandler * handler) { if (defaultHandler_) delete handler_; defaultHandler_=false; handler_=handler; } // Set language void CoinLpIO::newLanguage(CoinMessages::Language language) { messages_ = CoinMessage(language); } CoinUtils-2.9.10/CoinUtils/src/CoinPresolveMatrix.hpp0000644000076600007660000017126212130014662021204 0ustar coincoin/* $Id: CoinPresolveMatrix.hpp 1581 2013-04-06 12:48:50Z stefan $ */ // 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). #ifndef CoinPresolveMatrix_H #define CoinPresolveMatrix_H #include "CoinPragma.hpp" #include "CoinPackedMatrix.hpp" #include "CoinMessage.hpp" #include "CoinTime.hpp" #include #include #include #include #include #if PRESOLVE_DEBUG > 0 #include "CoinFinite.hpp" #endif /*! \file Declarations for CoinPresolveMatrix and CoinPostsolveMatrix and their common base class CoinPrePostsolveMatrix. Also declarations for CoinPresolveAction and a number of non-member utility functions. */ #if defined(_MSC_VER) // Avoid MS Compiler problem in recognizing type to delete // by casting to type. // Is this still necessary? -- lh, 111202 -- #define deleteAction(array,type) delete [] ((type) array) #else #define deleteAction(array,type) delete [] array #endif /* Define PRESOLVE_DEBUG and PRESOLVE_CONSISTENCY on the configure command line or in a Makefile! See comments in CoinPresolvePsdebug.hpp. */ #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #define PRESOLVE_STMT(s) s #define PRESOLVEASSERT(x) \ ((x) ? 1 : ((std::cerr << "FAILED ASSERTION at line " \ << __LINE__ << ": " #x "\n"), abort(), 0)) inline void DIE(const char *s) { std::cout << s ; abort() ; } /*! \brief Indicate column or row present at start of postsolve This code is used during postsolve in [cr]done to indicate columns and rows that are present in the presolved system (i.e., present at the start of postsolve processing). \todo There are a bunch of these code definitions, scattered through presolve files. They should be collected in one place. */ #define PRESENT_IN_REDUCED '\377' #else #define PRESOLVEASSERT(x) {} #define PRESOLVE_STMT(s) {} inline void DIE(const char *) {} #endif /* Unclear why these are separate from standard debug. */ #ifndef PRESOLVE_DETAIL #define PRESOLVE_DETAIL_PRINT(s) {} #else #define PRESOLVE_DETAIL_PRINT(s) s #endif /*! \brief Zero tolerance OSL had a fixed zero tolerance; we still use that here. */ const double ZTOLDP = 1e-12 ; /*! \brief Alternate zero tolerance Use a different one if we are doing doubletons, etc. */ const double ZTOLDP2 = 1e-10 ; /// The usual finite infinity #define PRESOLVE_INF COIN_DBL_MAX /// And a small infinity #define PRESOLVE_SMALL_INF 1.0e20 /// Check for infinity using finite infinity #define PRESOLVEFINITE(n) (-PRESOLVE_INF < (n) && (n) < PRESOLVE_INF) class CoinPostsolveMatrix ; /*! \class CoinPresolveAction \brief Abstract base class of all presolve routines. The details will make more sense after a quick overview of the grand plan: A presolve object is handed a problem object, which it is expected to modify in some useful way. Assuming that it succeeds, the presolve object should create a postsolve object, i.e., an object that contains instructions for backing out the presolve transform to recover the original problem. These postsolve objects are accumulated in a linked list, with each successive presolve action adding its postsolve action to the head of the list. The end result of all this is a presolved problem object, and a list of postsolve objects. The presolved problem object is then handed to a solver for optimization, and the problem object augmented with the results. The list of postsolve objects is then traversed. Each of them (un)modifies the problem object, with the end result being the original problem, augmented with solution information. The problem object representation is CoinPrePostsolveMatrix and subclasses. Check there for details. The \c CoinPresolveAction class and subclasses represent the presolve and postsolve objects. In spite of the name, the only information held in a \c CoinPresolveAction object is the information needed to postsolve (i.e., the information needed to back out the presolve transformation). This information is not expected to change, so the fields are all \c const. A subclass of \c CoinPresolveAction, implementing a specific pre/postsolve action, is expected to declare a static function that attempts to perform a presolve transformation. This function will be handed a CoinPresolveMatrix to transform, and a pointer to the head of the list of postsolve objects. If the transform is successful, the function will create a new \c CoinPresolveAction object, link it at the head of the list of postsolve objects, and return a pointer to the postsolve object it has just created. Otherwise, it should return 0. It is expected that these static functions will be the only things that can create new \c CoinPresolveAction objects; this is expressed by making each subclass' constructor(s) private. Every subclass must also define a \c postsolve method. This function will be handed a CoinPostsolveMatrix to transform. It is the client's responsibility to implement presolve and postsolve driver routines. See OsiPresolve for examples. \note Since the only fields in a \c CoinPresolveAction are \c const, anything one can do with a variable declared \c CoinPresolveAction* can also be done with a variable declared \c const \c CoinPresolveAction* It is expected that all derived subclasses of \c CoinPresolveAction also have this property. */ class CoinPresolveAction { public: /*! \brief Stub routine to throw exceptions. Exceptions are inefficient, particularly with g++. Even with xlC, the use of exceptions adds a long prologue to a routine. Therefore, rather than use throw directly in the routine, I use it in a stub routine. */ static void throwCoinError(const char *error, const char *ps_routine) { throw CoinError(error, ps_routine, "CoinPresolve"); } /*! \brief The next presolve transformation Set at object construction. */ const CoinPresolveAction *next; /*! \brief Construct a postsolve object and add it to the transformation list. This is an `add to head' operation. This object will point to the one passed as the parameter. */ CoinPresolveAction(const CoinPresolveAction *next) : next(next) {} /// modify next (when building rather than passing) inline void setNext(const CoinPresolveAction *nextAction) { next = nextAction;} /*! \brief A name for debug printing. It is expected that the name is not stored in the transform itself. */ virtual const char *name() const = 0; /*! \brief Apply the postsolve transformation for this particular presolve action. */ virtual void postsolve(CoinPostsolveMatrix *prob) const = 0; /*! \brief Virtual destructor. */ virtual ~CoinPresolveAction() {} }; /* These are needed for OSI-aware constructors associated with CoinPrePostsolveMatrix, CoinPresolveMatrix, and CoinPostsolveMatrix. */ class ClpSimplex; class OsiSolverInterface; /* CoinWarmStartBasis is required for methods in CoinPrePostsolveMatrix that accept/return a CoinWarmStartBasis object. */ class CoinWarmStartBasis ; /*! \class CoinPrePostsolveMatrix \brief Collects all the information about the problem that is needed in both presolve and postsolve. In a bit more detail, a column-major representation of the constraint matrix and upper and lower bounds on variables and constraints, plus row and column solutions, reduced costs, and status. There's also a set of arrays holding the original row and column numbers. As presolve and postsolve transform the matrix, it will occasionally be necessary to expand the number of entries in a column. There are two aspects:
  • During postsolve, the constraint system is expected to grow as the smaller presolved system is transformed back to the original system.
  • During both pre- and postsolve, transforms can increase the number of coefficients in a row or column. (See the variable substitution, doubleton, and tripleton transforms.)
The first is addressed by the members #ncols0_, #nrows0_, and #nelems0_. These should be set (via constructor parameters) to values large enough for the largest size taken on by the constraint system. Typically, this will be the size of the original constraint system. The second is addressed by a generous allocation of extra (empty) space for the arrays used to hold coefficients and row indices. When columns must be expanded, they are moved into the empty space. When it is used up, the arrays are compacted. When compaction fails to produce sufficient space, presolve/postsolve will fail. CoinPrePostsolveMatrix isn't really intended to be used `bare' --- the expectation is that it'll be used through CoinPresolveMatrix or CoinPostsolveMatrix. Some of the functions needed to load a problem are defined in the derived classes. When CoinPresolve is applied when reoptimising, we need to be prepared to accept a basis and modify it in step with the presolve actions (otherwise we throw away all the advantages of warm start for reoptimization). But other solution components (#acts_, #rowduals_, #sol_, and #rcosts_) are needed only for postsolve, where they're used in places to determine the proper action(s) when restoring rows or columns. If presolve is provided with a solution, it will modify it in step with the presolve actions. Moving the solution components from CoinPrePostsolveMatrix to CoinPostsolveMatrix would break a lot of code. It's not clear that it's worth it, and it would preclude upgrades to the presolve side that might make use of any of these. -- lh, 080501 -- The constructors that take an OSI or ClpSimplex as a parameter really should not be here, but for historical reasons they will likely remain for the forseeable future. -- lh, 111202 -- */ class CoinPrePostsolveMatrix { public: /*! \name Constructors & Destructors */ //@{ /*! \brief `Native' constructor This constructor creates an empty object which must then be loaded. On the other hand, it doesn't assume that the client is an OsiSolverInterface. */ CoinPrePostsolveMatrix(int ncols_alloc, int nrows_alloc, CoinBigIndex nelems_alloc) ; /*! \brief Generic OSI constructor See OSI code for the definition. */ CoinPrePostsolveMatrix(const OsiSolverInterface * si, int ncols_, int nrows_, CoinBigIndex nelems_); /*! ClpOsi constructor See Clp code for the definition. */ CoinPrePostsolveMatrix(const ClpSimplex * si, int ncols_, int nrows_, CoinBigIndex nelems_, double bulkRatio); /// Destructor ~CoinPrePostsolveMatrix(); //@} /*! \brief Enum for status of various sorts Matches CoinWarmStartBasis::Status and adds superBasic. Most code that converts between CoinPrePostsolveMatrix::Status and CoinWarmStartBasis::Status will break if this correspondence is broken. superBasic is an unresolved problem: there's no analogue in CoinWarmStartBasis::Status. */ enum Status { isFree = 0x00, basic = 0x01, atUpperBound = 0x02, atLowerBound = 0x03, superBasic = 0x04 }; /*! \name Functions to work with variable status Functions to work with the CoinPrePostsolveMatrix::Status enum and related vectors. \todo Why are we futzing around with three bit status? A holdover from the packed arrays of CoinWarmStartBasis? Big swaths of the presolve code manipulates colstat_ and rowstat_ as unsigned char arrays using simple assignment to set values. */ //@{ /// Set row status (i.e., status of artificial for this row) inline void setRowStatus(int sequence, Status status) { unsigned char & st_byte = rowstat_[sequence]; st_byte = static_cast(st_byte & (~7)) ; st_byte = static_cast(st_byte | status) ; } /// Get row status inline Status getRowStatus(int sequence) const {return static_cast (rowstat_[sequence]&7);} /// Check if artificial for this row is basic inline bool rowIsBasic(int sequence) const {return (static_cast (rowstat_[sequence]&7)==basic);} /// Set column status (i.e., status of primal variable) inline void setColumnStatus(int sequence, Status status) { unsigned char & st_byte = colstat_[sequence]; st_byte = static_cast(st_byte & (~7)) ; st_byte = static_cast(st_byte | status) ; # ifdef PRESOLVE_DEBUG switch (status) { case isFree: { if (clo_[sequence] > -PRESOLVE_INF || cup_[sequence] < PRESOLVE_INF) { std::cout << "Bad status: Var " << sequence << " isFree, lb = " << clo_[sequence] << ", ub = " << cup_[sequence] << std::endl ; } break ; } case basic: { break ; } case atUpperBound: { if (cup_[sequence] >= PRESOLVE_INF) { std::cout << "Bad status: Var " << sequence << " atUpperBound, lb = " << clo_[sequence] << ", ub = " << cup_[sequence] << std::endl ; } break ; } case atLowerBound: { if (clo_[sequence] <= -PRESOLVE_INF) { std::cout << "Bad status: Var " << sequence << " atLowerBound, lb = " << clo_[sequence] << ", ub = " << cup_[sequence] << std::endl ; } break ; } case superBasic: { if (clo_[sequence] <= -PRESOLVE_INF && cup_[sequence] >= PRESOLVE_INF) { std::cout << "Bad status: Var " << sequence << " superBasic, lb = " << clo_[sequence] << ", ub = " << cup_[sequence] << std::endl ; } break ; } default: { assert(false) ; break ; } } # endif } /// Get column (structural variable) status inline Status getColumnStatus(int sequence) const {return static_cast (colstat_[sequence]&7);} /// Check if column (structural variable) is basic inline bool columnIsBasic(int sequence) const {return (static_cast (colstat_[sequence]&7)==basic);} /*! \brief Set status of row (artificial variable) to the correct nonbasic status given bounds and current value */ void setRowStatusUsingValue(int iRow); /*! \brief Set status of column (structural variable) to the correct nonbasic status given bounds and current value */ void setColumnStatusUsingValue(int iColumn); /*! \brief Set column (structural variable) status vector */ void setStructuralStatus(const char *strucStatus, int lenParam) ; /*! \brief Set row (artificial variable) status vector */ void setArtificialStatus(const char *artifStatus, int lenParam) ; /*! \brief Set the status of all variables from a basis */ void setStatus(const CoinWarmStartBasis *basis) ; /*! \brief Get status in the form of a CoinWarmStartBasis */ CoinWarmStartBasis *getStatus() ; /*! \brief Return a print string for status of a column (structural variable) */ const char *columnStatusString(int j) const ; /*! \brief Return a print string for status of a row (artificial variable) */ const char *rowStatusString(int i) const ; //@} /*! \name Functions to load problem and solution information These functions can be used to load portions of the problem definition and solution. See also the CoinPresolveMatrix and CoinPostsolveMatrix classes. */ //@{ /// Set the objective function offset for the original system. void setObjOffset(double offset) ; /*! \brief Set the objective sense (max/min) Coded as 1.0 for min, -1.0 for max. Yes, there's a method, and a matching attribute. No, you really don't want to set this to maximise. */ void setObjSense(double objSense) ; /// Set the primal feasibility tolerance void setPrimalTolerance(double primTol) ; /// Set the dual feasibility tolerance void setDualTolerance(double dualTol) ; /// Set column lower bounds void setColLower(const double *colLower, int lenParam) ; /// Set column upper bounds void setColUpper(const double *colUpper, int lenParam) ; /// Set column solution void setColSolution(const double *colSol, int lenParam) ; /// Set objective coefficients void setCost(const double *cost, int lenParam) ; /// Set reduced costs void setReducedCost(const double *redCost, int lenParam) ; /// Set row lower bounds void setRowLower(const double *rowLower, int lenParam) ; /// Set row upper bounds void setRowUpper(const double *rowUpper, int lenParam) ; /// Set row solution void setRowPrice(const double *rowSol, int lenParam) ; /// Set row activity void setRowActivity(const double *rowAct, int lenParam) ; //@} /*! \name Functions to retrieve problem and solution information */ //@{ /// Get current number of columns inline int getNumCols() const { return (ncols_) ; } /// Get current number of rows inline int getNumRows() const { return (nrows_) ; } /// Get current number of non-zero coefficients inline int getNumElems() const { return (nelems_) ; } /// Get column start vector for column-major packed matrix inline const CoinBigIndex *getColStarts() const { return (mcstrt_) ; } /// Get column length vector for column-major packed matrix inline const int *getColLengths() const { return (hincol_) ; } /// Get vector of row indices for column-major packed matrix inline const int *getRowIndicesByCol() const { return (hrow_) ; } /// Get vector of elements for column-major packed matrix inline const double *getElementsByCol() const { return (colels_) ; } /// Get column lower bounds inline const double *getColLower() const { return (clo_) ; } /// Get column upper bounds inline const double *getColUpper() const { return (cup_) ; } /// Get objective coefficients inline const double *getCost() const { return (cost_) ; } /// Get row lower bounds inline const double *getRowLower() const { return (rlo_) ; } /// Get row upper bounds inline const double *getRowUpper() const { return (rup_) ; } /// Get column solution (primal variable values) inline const double *getColSolution() const { return (sol_) ; } /// Get row activity (constraint lhs values) inline const double *getRowActivity() const { return (acts_) ; } /// Get row solution (dual variables) inline const double *getRowPrice() const { return (rowduals_) ; } /// Get reduced costs inline const double *getReducedCost() const { return (rcosts_) ; } /// Count empty columns inline int countEmptyCols() { int empty = 0 ; for (int i = 0 ; i < ncols_ ; i++) if (hincol_[i] == 0) empty++ ; return (empty) ; } //@} /*! \name Message handling */ //@{ /// Return message handler inline CoinMessageHandler *messageHandler() const { return handler_; } /*! \brief Set message handler The client retains responsibility for the handler --- it will not be destroyed with the \c CoinPrePostsolveMatrix object. */ inline void setMessageHandler(CoinMessageHandler *handler) { if (defaultHandler_ == true) { delete handler_ ; defaultHandler_ = false ; } handler_ = handler ; } /// Return messages inline CoinMessages messages() const { return messages_; } //@} /*! \name Current and Allocated Size During pre- and postsolve, the matrix will change in size. During presolve it will shrink; during postsolve it will grow. Hence there are two sets of size variables, one for the current size and one for the allocated size. (See the general comments for the CoinPrePostsolveMatrix class for more information.) */ //@{ /// current number of columns int ncols_; /// current number of rows int nrows_; /// current number of coefficients CoinBigIndex nelems_; /// Allocated number of columns int ncols0_; /// Allocated number of rows int nrows0_ ; /// Allocated number of coefficients CoinBigIndex nelems0_ ; /*! \brief Allocated size of bulk storage for row indices and coefficients This is the space allocated for hrow_ and colels_. This must be large enough to allow columns to be copied into empty space when they need to be expanded. For efficiency (to minimize the number of times the representation must be compressed) it's recommended that this be at least 2*nelems0_. */ CoinBigIndex bulk0_ ; /// Ratio of bulk0_ to nelems0_; default is 2. double bulkRatio_; //@} /*! \name Problem representation The matrix is the common column-major format: A pair of vectors with positional correspondence to hold coefficients and row indices, and a second pair of vectors giving the starting position and length of each column in the first pair. */ //@{ /// Vector of column start positions in #hrow_, #colels_ CoinBigIndex *mcstrt_; /// Vector of column lengths int *hincol_; /// Row indices (positional correspondence with #colels_) int *hrow_; /// Coefficients (positional correspondence with #hrow_) double *colels_; /// Objective coefficients double *cost_; /// Original objective offset double originalOffset_; /// Column (primal variable) lower bounds double *clo_; /// Column (primal variable) upper bounds double *cup_; /// Row (constraint) lower bounds double *rlo_; /// Row (constraint) upper bounds double *rup_; /*! \brief Original column numbers Over the current range of column numbers in the presolved problem, the entry for column j will contain the index of the corresponding column in the original problem. */ int * originalColumn_; /*! \brief Original row numbers Over the current range of row numbers in the presolved problem, the entry for row i will contain the index of the corresponding row in the original problem. */ int * originalRow_; /// Primal feasibility tolerance double ztolzb_; /// Dual feasibility tolerance double ztoldj_; /*! \brief Maximization/minimization Yes, there's a variable here. No, you really don't want to set this to maximise. See the main notes for CoinPresolveMatrix. */ double maxmin_; //@} /*! \name Problem solution information The presolve phase will work without any solution information (appropriate for initial optimisation) or with solution information (appropriate for reoptimisation). When solution information is supplied, presolve will maintain it to the best of its ability. #colstat_ is checked to determine the presence/absence of status information. #sol_ is checked for primal solution information, and #rowduals_ for dual solution information. The postsolve phase requires the complete solution information from the presolved problem (status, primal and dual solutions). It will be transformed into a correct solution for the original problem. */ //@{ /*! \brief Vector of primal variable values If #sol_ exists, it is assumed that primal solution information should be updated and that #acts_ also exists. */ double *sol_; /*! \brief Vector of dual variable values If #rowduals_ exists, it is assumed that dual solution information should be updated and that #rcosts_ also exists. */ double *rowduals_; /*! \brief Vector of constraint left-hand-side values (row activity) Produced by evaluating constraints according to #sol_. Updated iff #sol_ exists. */ double *acts_; /*! \brief Vector of reduced costs Produced by evaluating dual constraints according to #rowduals_. Updated iff #rowduals_ exists. */ double *rcosts_; /*! \brief Status of primal variables Coded with CoinPrePostSolveMatrix::Status, one code per char. colstat_ and #rowstat_ MUST be allocated as a single vector. This is to maintain compatibility with ClpPresolve and OsiPresolve, which do it this way. */ unsigned char *colstat_; /*! \brief Status of constraints More accurately, the status of the logical variable associated with the constraint. Coded with CoinPrePostSolveMatrix::Status, one code per char. Note that this must be allocated as a single vector with #colstat_. */ unsigned char *rowstat_; //@} /*! \name Message handling Uses the standard COIN approach: a default handler is installed, and the CoinPrePostsolveMatrix object takes responsibility for it. If the client replaces the handler with one of their own, it becomes their responsibility. */ //@{ /// Message handler CoinMessageHandler *handler_; /// Indicates if the current #handler_ is default (true) or not (false). bool defaultHandler_; /// Standard COIN messages CoinMessage messages_; //@} }; /*! \relates CoinPrePostsolveMatrix \brief Generate a print string for a status code. */ const char *statusName (CoinPrePostsolveMatrix::Status status) ; /*! \class presolvehlink \brief Links to aid in packed matrix modification Currently, the matrices held by the CoinPrePostsolveMatrix and CoinPresolveMatrix objects are represented in the same way as a CoinPackedMatrix. In the course of presolve and postsolve transforms, it will happen that a major-dimension vector needs to increase in size. In order to check whether there is enough room to add another coefficient in place, it helps to know the next vector (in memory order) in the bulk storage area. To do that, a linked list of major-dimension vectors is maintained; the "pre" and "suc" fields give the previous and next vector, in memory order (that is, the vector whose mcstrt_ or mrstrt_ entry is next smaller or larger). Consider a column-major matrix with ncols columns. By definition, presolvehlink[ncols].pre points to the column in the last occupied position of the bulk storage arrays. There is no easy way to find the column which occupies the first position (there is no presolvehlink[-1] to consult). If the column that initially occupies the first position is moved for expansion, there is no way to reclaim the space until the bulk storage is compacted. The same holds for the last and first rows of a row-major matrix, of course. */ class presolvehlink { public: int pre, suc; } ; #define NO_LINK -66666666 /*! \relates presolvehlink \brief unlink vector i Remove vector i from the ordering. */ inline void PRESOLVE_REMOVE_LINK(presolvehlink *link, int i) { int ipre = link[i].pre; int isuc = link[i].suc; if (ipre >= 0) { link[ipre].suc = isuc; } if (isuc >= 0) { link[isuc].pre = ipre; } link[i].pre = NO_LINK, link[i].suc = NO_LINK; } /*! \relates presolvehlink \brief insert vector i after vector j Insert vector i between j and j.suc. */ inline void PRESOLVE_INSERT_LINK(presolvehlink *link, int i, int j) { int isuc = link[j].suc; link[j].suc = i; link[i].pre = j; if (isuc >= 0) { link[isuc].pre = i; } link[i].suc = isuc; } /*! \relates presolvehlink \brief relink vector j in place of vector i Replace vector i in the ordering with vector j. This is equivalent to
     int pre = link[i].pre;
     PRESOLVE_REMOVE_LINK(link,i);
     PRESOLVE_INSERT_LINK(link,j,pre);
   
But, this routine will work even if i happens to be first in the order. */ inline void PRESOLVE_MOVE_LINK(presolvehlink *link, int i, int j) { int ipre = link[i].pre; int isuc = link[i].suc; if (ipre >= 0) { link[ipre].suc = j; } if (isuc >= 0) { link[isuc].pre = j; } link[i].pre = NO_LINK, link[i].suc = NO_LINK; } /*! \class CoinPresolveMatrix \brief Augments CoinPrePostsolveMatrix with information about the problem that is only needed during presolve. For problem manipulation, this class adds a row-major matrix representation, linked lists that allow for easy manipulation of the matrix when applying presolve transforms, and vectors to track row and column processing status (changed, needs further processing, change prohibited) For problem representation, this class adds information about variable type (integer or continuous), an objective offset, and a feasibility tolerance. NOTE that the #anyInteger_ and #anyProhibited_ flags are independent of the vectors used to track this information for individual variables (#integerType_ and #rowChanged_ and #colChanged_, respectively). NOTE also that at the end of presolve the column-major and row-major matrix representations are loosely packed (i.e., there may be gaps between columns in the bulk storage arrays). NOTE that while you might think that CoinPresolve is prepared to handle minimisation or maximisation, it's unlikely that this still works. This is a good thing: better to convert objective coefficients and duals once, before starting presolve, rather than doing it over and over in each transform that considers dual variables. The constructors that take an OSI or ClpSimplex as a parameter really should not be here, but for historical reasons they will likely remain for the forseeable future. -- lh, 111202 -- */ class CoinPresolveMatrix : public CoinPrePostsolveMatrix { public: /*! \brief `Native' constructor This constructor creates an empty object which must then be loaded. On the other hand, it doesn't assume that the client is an OsiSolverInterface. */ CoinPresolveMatrix(int ncols_alloc, int nrows_alloc, CoinBigIndex nelems_alloc) ; /*! \brief Clp OSI constructor See Clp code for the definition. */ CoinPresolveMatrix(int ncols0, double maxmin, // end prepost members ClpSimplex * si, // rowrep int nrows, CoinBigIndex nelems, bool doStatus, double nonLinearVariable, double bulkRatio); /*! \brief Update the model held by a Clp OSI */ void update_model(ClpSimplex * si, int nrows0, int ncols0, CoinBigIndex nelems0); /*! \brief Generic OSI constructor See OSI code for the definition. */ CoinPresolveMatrix(int ncols0, double maxmin, // end prepost members OsiSolverInterface * si, // rowrep int nrows, CoinBigIndex nelems, bool doStatus, double nonLinearVariable, const char * prohibited, const char * rowProhibited=NULL); /*! \brief Update the model held by a generic OSI */ void update_model(OsiSolverInterface * si, int nrows0, int ncols0, CoinBigIndex nelems0); /// Destructor ~CoinPresolveMatrix(); /*! \brief Initialize a CoinPostsolveMatrix object, destroying the CoinPresolveMatrix object. See CoinPostsolveMatrix::assignPresolveToPostsolve. */ friend void assignPresolveToPostsolve (CoinPresolveMatrix *&preObj) ; /*! \name Functions to load the problem representation */ //@{ /*! \brief Load the cofficient matrix. Load the coefficient matrix before loading the other vectors (bounds, objective, variable type) required to define the problem. */ void setMatrix(const CoinPackedMatrix *mtx) ; /// Count number of empty rows inline int countEmptyRows() { int empty = 0 ; for (int i = 0 ; i < nrows_ ; i++) if (hinrow_[i] == 0) empty++ ; return (empty) ; } /*! \brief Set variable type information for a single variable Set \p variableType to 0 for continous, 1 for integer. Does not manipulate the #anyInteger_ flag. */ inline void setVariableType(int i, int variableType) { if (integerType_ == 0) integerType_ = new unsigned char [ncols0_] ; integerType_[i] = static_cast(variableType) ; } /*! \brief Set variable type information for all variables Set \p variableType[i] to 0 for continuous, 1 for integer. Does not manipulate the #anyInteger_ flag. */ void setVariableType(const unsigned char *variableType, int lenParam) ; /*! \brief Set the type of all variables allIntegers should be true to set the type to integer, false to set the type to continuous. */ void setVariableType (bool allIntegers, int lenParam) ; /// Set a flag for presence (true) or absence (false) of integer variables inline void setAnyInteger (bool anyInteger = true) { anyInteger_ = anyInteger ; } //@} /*! \name Functions to retrieve problem information */ //@{ /// Get row start vector for row-major packed matrix inline const CoinBigIndex *getRowStarts() const { return (mrstrt_) ; } /// Get vector of column indices for row-major packed matrix inline const int *getColIndicesByRow() const { return (hcol_) ; } /// Get vector of elements for row-major packed matrix inline const double *getElementsByRow() const { return (rowels_) ; } /*! \brief Check for integrality of the specified variable. Consults the #integerType_ vector if present; fallback is the #anyInteger_ flag. */ inline bool isInteger (int i) const { if (integerType_ == 0) { return (anyInteger_) ; } else if (integerType_[i] == 1) { return (true) ; } else { return (false) ; } } /*! \brief Check if there are any integer variables Consults the #anyInteger_ flag */ inline bool anyInteger () const { return (anyInteger_) ; } /// Picks up any special options inline int presolveOptions() const { return presolveOptions_;} /// Sets any special options (see #presolveOptions_) inline void setPresolveOptions(int value) { presolveOptions_=value;} //@} /*! \name Matrix storage management links Linked lists, modelled after the linked lists used in OSL factorization. They are used for management of the bulk coefficient and minor index storage areas. */ //@{ /// Linked list for the column-major representation. presolvehlink *clink_; /// Linked list for the row-major representation. presolvehlink *rlink_; //@} /// Objective function offset introduced during presolve double dobias_ ; /// Adjust objective function constant offset inline void change_bias(double change_amount) { dobias_ += change_amount ; # if PRESOLVE_DEBUG > 2 assert(fabs(change_amount)<1.0e50) ; if (change_amount) PRESOLVE_STMT(printf("changing bias by %g to %g\n", change_amount, dobias_)) ; # endif } /*! \name Row-major representation Common row-major format: A pair of vectors with positional correspondence to hold coefficients and column indices, and a second pair of vectors giving the starting position and length of each row in the first pair. */ //@{ /// Vector of row start positions in #hcol, #rowels_ CoinBigIndex *mrstrt_; /// Vector of row lengths int *hinrow_; /// Coefficients (positional correspondence with #hcol_) double *rowels_; /// Column indices (positional correspondence with #rowels_) int *hcol_; //@} /// Tracks integrality of columns (1 for integer, 0 for continuous) unsigned char *integerType_; /*! \brief Flag to say if any variables are integer Note that this flag is not manipulated by the various \c setVariableType routines. */ bool anyInteger_ ; /// Print statistics for tuning bool tuning_; /// Say we want statistics - also set time void statistics(); /// Start time of presolve double startTime_; /// Bounds can be moved by this to retain feasibility double feasibilityTolerance_; /// Return feasibility tolerance inline double feasibilityTolerance() { return (feasibilityTolerance_) ; } /// Set feasibility tolerance inline void setFeasibilityTolerance (double val) { feasibilityTolerance_ = val ; } /*! \brief Output status: 0 = feasible, 1 = infeasible, 2 = unbounded Actually implemented as single bit flags: 1^0 = infeasible, 1^1 = unbounded. */ int status_; /// Returns problem status (0 = feasible, 1 = infeasible, 2 = unbounded) inline int status() { return (status_) ; } /// Set problem status inline void setStatus(int status) { status_ = (status&0x3) ; } /*! \brief Presolve pass number Should be incremented externally by the method controlling application of presolve transforms. Used to control the execution of testRedundant (evoked by the implied_free transform). */ int pass_; /// Set pass number inline void setPass (int pass = 0) { pass_ = pass ; } /*! \brief Maximum substitution level Used to control the execution of subst from implied_free */ int maxSubstLevel_; /// Set Maximum substitution level (normally 3) inline void setMaximumSubstitutionLevel (int level) { maxSubstLevel_ = level ; } /*! \name Row and column processing status Information used to determine if rows or columns can be changed and if they require further processing due to changes. There are four major lists: the [row,col]ToDo list, and the [row,col]NextToDo list. In general, a transform processes entries from the ToDo list and adds entries to the NextToDo list. There are two vectors, [row,col]Changed, which track the status of individual rows and columns. */ //@{ /*! \brief Column change status information Coded using the following bits:
  • 0x01: Column has changed
  • 0x02: preprocessing prohibited
  • 0x04: Column has been used
  • 0x08: Column originally had infinite ub
*/ unsigned char * colChanged_; /// Input list of columns to process int * colsToDo_; /// Length of #colsToDo_ int numberColsToDo_; /// Output list of columns to process next int * nextColsToDo_; /// Length of #nextColsToDo_ int numberNextColsToDo_; /*! \brief Row change status information Coded using the following bits:
  • 0x01: Row has changed
  • 0x02: preprocessing prohibited
  • 0x04: Row has been used
*/ unsigned char * rowChanged_; /// Input list of rows to process int * rowsToDo_; /// Length of #rowsToDo_ int numberRowsToDo_; /// Output list of rows to process next int * nextRowsToDo_; /// Length of #nextRowsToDo_ int numberNextRowsToDo_; /*! \brief Fine control over presolve actions Set/clear the following bits to allow or suppress actions: - 0x01 allow duplicate column tests for integer variables - 0x02 not used - 0x04 set to inhibit x+y+z=1 mods - 0x08 not used - 0x10 set to allow stuff which won't unroll easily (overlapping duplicate rows; opportunistic fixing of variables from bound propagation). - 0x04000 allow presolve transforms to arbitrarily ignore infeasibility and set arbitrary feasible bounds. - 0x10000 instructs implied_free_action to be `more lightweight'; will return without doing anything after 15 presolve passes. - 0x20000 instructs implied_free_action to remove small created elements - 0x80000000 set by presolve to say dupcol_action compressed columns */ int presolveOptions_; /*! Flag to say if any rows or columns are marked as prohibited Note that this flag is not manipulated by any of the various \c set*Prohibited routines. */ bool anyProhibited_; //@} /*! \name Scratch work arrays Preallocated work arrays are useful to avoid having to allocate and free work arrays in individual presolve methods. All are allocated from #setMatrix by #initializeStuff, freed from #~CoinPresolveMatrix. You can use #deleteStuff followed by #initializeStuff to remove and recreate them. */ //@{ /// Preallocated scratch work array, 3*nrows_ int *usefulRowInt_ ; /// Preallocated scratch work array, 2*nrows_ double *usefulRowDouble_ ; /// Preallocated scratch work array, 2*ncols_ int *usefulColumnInt_ ; /// Preallocated scratch work array, ncols_ double *usefulColumnDouble_ ; /// Array of random numbers (max row,column) double *randomNumber_ ; /// Work array for count of infinite contributions to row lhs upper bound int *infiniteUp_ ; /// Work array for sum of finite contributions to row lhs upper bound double *sumUp_ ; /// Work array for count of infinite contributions to row lhs lower bound int *infiniteDown_ ; /// Work array for sum of finite contributions to row lhs lower bound double *sumDown_ ; //@} /*! \brief Recompute row lhs bounds Calculate finite contributions to row lhs upper and lower bounds and count infinite contributions. Returns the number of rows found to be infeasible. If \p whichRow < 0, bounds are recomputed for all rows. As of 110611, this seems to be a work in progress in the sense that it's barely used by the existing presolve code. */ int recomputeSums(int whichRow) ; /// Allocate scratch arrays void initializeStuff() ; /// Free scratch arrays void deleteStuff() ; /*! \name Functions to manipulate row and column processing status */ //@{ /*! \brief Initialise the column ToDo lists Places all columns in the #colsToDo_ list except for columns marked as prohibited (viz. #colChanged_). */ void initColsToDo () ; /*! \brief Step column ToDo lists Moves columns on the #nextColsToDo_ list to the #colsToDo_ list, emptying #nextColsToDo_. Returns the number of columns transferred. */ int stepColsToDo () ; /// Return the number of columns on the #colsToDo_ list inline int numberColsToDo() { return (numberColsToDo_) ; } /// Has column been changed? inline bool colChanged(int i) const { return (colChanged_[i]&1)!=0; } /// Mark column as not changed inline void unsetColChanged(int i) { colChanged_[i] = static_cast(colChanged_[i] & (~1)) ; } /// Mark column as changed. inline void setColChanged(int i) { colChanged_[i] = static_cast(colChanged_[i] | (1)) ; } /// Mark column as changed and add to list of columns to process next inline void addCol(int i) { if ((colChanged_[i]&1)==0) { colChanged_[i] = static_cast(colChanged_[i] | (1)) ; nextColsToDo_[numberNextColsToDo_++] = i; } } /// Test if column is eligible for preprocessing inline bool colProhibited(int i) const { return (colChanged_[i]&2)!=0; } /*! \brief Test if column is eligible for preprocessing The difference between this method and #colProhibited() is that this method first tests #anyProhibited_ before examining the specific entry for the specified column. */ inline bool colProhibited2(int i) const { if (!anyProhibited_) return false; else return (colChanged_[i]&2)!=0; } /// Mark column as ineligible for preprocessing inline void setColProhibited(int i) { colChanged_[i] = static_cast(colChanged_[i] | (2)) ; } /*! \brief Test if column is marked as used This is for doing faster lookups to see where two columns have entries in common. */ inline bool colUsed(int i) const { return (colChanged_[i]&4)!=0; } /// Mark column as used inline void setColUsed(int i) { colChanged_[i] = static_cast(colChanged_[i] | (4)) ; } /// Mark column as unused inline void unsetColUsed(int i) { colChanged_[i] = static_cast(colChanged_[i] & (~4)) ; } /// Has column infinite ub (originally) inline bool colInfinite(int i) const { return (colChanged_[i]&8)!=0; } /// Mark column as not infinite ub (originally) inline void unsetColInfinite(int i) { colChanged_[i] = static_cast(colChanged_[i] & (~8)) ; } /// Mark column as infinite ub (originally) inline void setColInfinite(int i) { colChanged_[i] = static_cast(colChanged_[i] | (8)) ; } /*! \brief Initialise the row ToDo lists Places all rows in the #rowsToDo_ list except for rows marked as prohibited (viz. #rowChanged_). */ void initRowsToDo () ; /*! \brief Step row ToDo lists Moves rows on the #nextRowsToDo_ list to the #rowsToDo_ list, emptying #nextRowsToDo_. Returns the number of rows transferred. */ int stepRowsToDo () ; /// Return the number of rows on the #rowsToDo_ list inline int numberRowsToDo() { return (numberRowsToDo_) ; } /// Has row been changed? inline bool rowChanged(int i) const { return (rowChanged_[i]&1)!=0; } /// Mark row as not changed inline void unsetRowChanged(int i) { rowChanged_[i] = static_cast(rowChanged_[i] & (~1)) ; } /// Mark row as changed inline void setRowChanged(int i) { rowChanged_[i] = static_cast(rowChanged_[i] | (1)) ; } /// Mark row as changed and add to list of rows to process next inline void addRow(int i) { if ((rowChanged_[i]&1)==0) { rowChanged_[i] = static_cast(rowChanged_[i] | (1)) ; nextRowsToDo_[numberNextRowsToDo_++] = i; } } /// Test if row is eligible for preprocessing inline bool rowProhibited(int i) const { return (rowChanged_[i]&2)!=0; } /*! \brief Test if row is eligible for preprocessing The difference between this method and #rowProhibited() is that this method first tests #anyProhibited_ before examining the specific entry for the specified row. */ inline bool rowProhibited2(int i) const { if (!anyProhibited_) return false; else return (rowChanged_[i]&2)!=0; } /// Mark row as ineligible for preprocessing inline void setRowProhibited(int i) { rowChanged_[i] = static_cast(rowChanged_[i] | (2)) ; } /*! \brief Test if row is marked as used This is for doing faster lookups to see where two rows have entries in common. It can be used anywhere as long as it ends up zeroed out. */ inline bool rowUsed(int i) const { return (rowChanged_[i]&4)!=0; } /// Mark row as used inline void setRowUsed(int i) { rowChanged_[i] = static_cast(rowChanged_[i] | (4)) ; } /// Mark row as unused inline void unsetRowUsed(int i) { rowChanged_[i] = static_cast(rowChanged_[i] & (~4)) ; } /// Check if there are any prohibited rows or columns inline bool anyProhibited() const { return anyProhibited_;} /// Set a flag for presence of prohibited rows or columns inline void setAnyProhibited(bool val = true) { anyProhibited_ = val ; } //@} }; /*! \class CoinPostsolveMatrix \brief Augments CoinPrePostsolveMatrix with information about the problem that is only needed during postsolve. The notable point is that the matrix representation is threaded. The representation is column-major and starts with the standard two pairs of arrays: one pair to hold the row indices and coefficients, the second pair to hold the column starting positions and lengths. But the row indices and coefficients for a column do not necessarily occupy a contiguous block in their respective arrays. Instead, a link array gives the position of the next (row index,coefficient) pair. If the row index and value of a coefficient a occupy position kp in their arrays, then the position of the next coefficient a is found as kq = link[kp]. This threaded representation allows for efficient expansion of columns as rows are reintroduced during postsolve transformations. The basic packed structures are allocated to the expected size of the postsolved matrix, and as new coefficients are added, their location is simply added to the thread for the column. There is no provision to convert the threaded representation to a packed representation. In the context of postsolve, it's not required. (You did keep a copy of the original matrix, eh?) The constructors that take an OSI or ClpSimplex as a parameter really should not be here, but for historical reasons they will likely remain for the forseeable future. -- lh, 111202 -- */ class CoinPostsolveMatrix : public CoinPrePostsolveMatrix { public: /*! \brief `Native' constructor This constructor creates an empty object which must then be loaded. On the other hand, it doesn't assume that the client is an OsiSolverInterface. */ CoinPostsolveMatrix(int ncols_alloc, int nrows_alloc, CoinBigIndex nelems_alloc) ; /*! \brief Clp OSI constructor See Clp code for the definition. */ CoinPostsolveMatrix(ClpSimplex * si, int ncols0, int nrows0, CoinBigIndex nelems0, double maxmin_, // end prepost members double *sol, double *acts, unsigned char *colstat, unsigned char *rowstat); /*! \brief Generic OSI constructor See OSI code for the definition. */ CoinPostsolveMatrix(OsiSolverInterface * si, int ncols0, int nrows0, CoinBigIndex nelems0, double maxmin_, // end prepost members double *sol, double *acts, unsigned char *colstat, unsigned char *rowstat); /*! \brief Load an empty CoinPostsolveMatrix from a CoinPresolveMatrix This routine transfers the contents of the CoinPrePostsolveMatrix object from the CoinPresolveMatrix object to the CoinPostsolveMatrix object and completes initialisation of the CoinPostsolveMatrix object. The empty shell of the CoinPresolveMatrix object is destroyed. The routine expects an empty CoinPostsolveMatrix object. If handed a loaded object, a lot of memory will leak. */ void assignPresolveToPostsolve (CoinPresolveMatrix *&preObj) ; /// Destructor ~CoinPostsolveMatrix(); /*! \name Column thread structures As mentioned in the class documentation, the entries for a given column do not necessarily occupy a contiguous block of space. The #link_ array is used to maintain the threading. There is one thread for each column, and a single thread for all free entries in #hrow_ and #colels_. The allocated size of #link_ must be at least as large as the allocated size of #hrow_ and #colels_. */ //@{ /*! \brief First entry in free entries thread */ CoinBigIndex free_list_; /// Allocated size of #link_ int maxlink_; /*! \brief Thread array Within a thread, link_[k] points to the next entry in the thread. */ CoinBigIndex *link_; //@} /*! \name Debugging aids These arrays are allocated only when CoinPresolve is compiled with PRESOLVE_DEBUG defined. They hold codes which track the reason that a column or row is added to the problem during postsolve. */ //@{ char *cdone_; char *rdone_; //@} /// debug void check_nbasic(); }; /*! \defgroup MtxManip Presolve Matrix Manipulation Functions Functions to work with the loosely packed and threaded packed matrix structures used during presolve and postsolve. */ //@{ /*! \relates CoinPrePostsolveMatrix \brief Initialise linked list for major vector order in bulk storage */ void presolve_make_memlists(/*CoinBigIndex *starts,*/ int *lengths, presolvehlink *link, int n); /*! \relates CoinPrePostsolveMatrix \brief Make sure a major-dimension vector k has room for one more coefficient. You can use this directly, or use the inline wrappers presolve_expand_col and presolve_expand_row */ bool presolve_expand_major(CoinBigIndex *majstrts, double *majels, int *minndxs, int *majlens, presolvehlink *majlinks, int nmaj, int k) ; /*! \relates CoinPrePostsolveMatrix \brief Make sure a column (colx) in a column-major matrix has room for one more coefficient */ inline bool presolve_expand_col(CoinBigIndex *mcstrt, double *colels, int *hrow, int *hincol, presolvehlink *clink, int ncols, int colx) { return presolve_expand_major(mcstrt,colels, hrow,hincol,clink,ncols,colx) ; } /*! \relates CoinPrePostsolveMatrix \brief Make sure a row (rowx) in a row-major matrix has room for one more coefficient */ inline bool presolve_expand_row(CoinBigIndex *mrstrt, double *rowels, int *hcol, int *hinrow, presolvehlink *rlink, int nrows, int rowx) { return presolve_expand_major(mrstrt,rowels, hcol,hinrow,rlink,nrows,rowx) ; } /*! \relates CoinPrePostsolveMatrix \brief Find position of a minor index in a major vector. The routine returns the position \c k in \p minndxs for the specified minor index \p tgt. It will abort if the entry does not exist. Can be used directly or via the inline wrappers presolve_find_row and presolve_find_col. */ inline CoinBigIndex presolve_find_minor(int tgt, CoinBigIndex ks, CoinBigIndex ke, const int *minndxs) { CoinBigIndex k ; for (k = ks ; k < ke ; k++) #ifndef NDEBUG { if (minndxs[k] == tgt) return (k) ; } DIE("FIND_MINOR") ; abort () ; return -1; #else { if (minndxs[k] == tgt) break ; } return (k) ; #endif } /*! \relates CoinPrePostsolveMatrix \brief Find position of a row in a column in a column-major matrix. The routine returns the position \c k in \p hrow for the specified \p row. It will abort if the entry does not exist. */ inline CoinBigIndex presolve_find_row(int row, CoinBigIndex kcs, CoinBigIndex kce, const int *hrow) { return presolve_find_minor(row,kcs,kce,hrow) ; } /*! \relates CoinPostsolveMatrix \brief Find position of a column in a row in a row-major matrix. The routine returns the position \c k in \p hcol for the specified \p col. It will abort if the entry does not exist. */ inline CoinBigIndex presolve_find_col(int col, CoinBigIndex krs, CoinBigIndex kre, const int *hcol) { return presolve_find_minor(col,krs,kre,hcol) ; } /*! \relates CoinPrePostsolveMatrix \brief Find position of a minor index in a major vector. The routine returns the position \c k in \p minndxs for the specified minor index \p tgt. A return value of \p ke means the entry does not exist. Can be used directly or via the inline wrappers presolve_find_row1 and presolve_find_col1. */ CoinBigIndex presolve_find_minor1(int tgt, CoinBigIndex ks, CoinBigIndex ke, const int *minndxs); /*! \relates CoinPrePostsolveMatrix \brief Find position of a row in a column in a column-major matrix. The routine returns the position \c k in \p hrow for the specified \p row. A return value of \p kce means the entry does not exist. */ inline CoinBigIndex presolve_find_row1(int row, CoinBigIndex kcs, CoinBigIndex kce, const int *hrow) { return presolve_find_minor1(row,kcs,kce,hrow) ; } /*! \relates CoinPrePostsolveMatrix \brief Find position of a column in a row in a row-major matrix. The routine returns the position \c k in \p hcol for the specified \p col. A return value of \p kre means the entry does not exist. */ inline CoinBigIndex presolve_find_col1(int col, CoinBigIndex krs, CoinBigIndex kre, const int *hcol) { return presolve_find_minor1(col,krs,kre,hcol) ; } /*! \relates CoinPostsolveMatrix \brief Find position of a minor index in a major vector in a threaded matrix. The routine returns the position \c k in \p minndxs for the specified minor index \p tgt. It will abort if the entry does not exist. Can be used directly or via the inline wrapper presolve_find_row2. */ CoinBigIndex presolve_find_minor2(int tgt, CoinBigIndex ks, int majlen, const int *minndxs, const CoinBigIndex *majlinks) ; /*! \relates CoinPostsolveMatrix \brief Find position of a row in a column in a column-major threaded matrix. The routine returns the position \c k in \p hrow for the specified \p row. It will abort if the entry does not exist. */ inline CoinBigIndex presolve_find_row2(int row, CoinBigIndex kcs, int collen, const int *hrow, const CoinBigIndex *clinks) { return presolve_find_minor2(row,kcs,collen,hrow,clinks) ; } /*! \relates CoinPostsolveMatrix \brief Find position of a minor index in a major vector in a threaded matrix. The routine returns the position \c k in \p minndxs for the specified minor index \p tgt. It will return -1 if the entry does not exist. Can be used directly or via the inline wrappers presolve_find_row3. */ CoinBigIndex presolve_find_minor3(int tgt, CoinBigIndex ks, int majlen, const int *minndxs, const CoinBigIndex *majlinks) ; /*! \relates CoinPostsolveMatrix \brief Find position of a row in a column in a column-major threaded matrix. The routine returns the position \c k in \p hrow for the specified \p row. It will return -1 if the entry does not exist. */ inline CoinBigIndex presolve_find_row3(int row, CoinBigIndex kcs, int collen, const int *hrow, const CoinBigIndex *clinks) { return presolve_find_minor3(row,kcs,collen,hrow,clinks) ; } /*! \relates CoinPrePostsolveMatrix \brief Delete the entry for a minor index from a major vector. Deletes the entry for \p minndx from the major vector \p majndx. Specifically, the relevant entries are removed from the minor index (\p minndxs) and coefficient (\p els) arrays and the vector length (\p majlens) is decremented. Loose packing is maintained by swapping the last entry in the row into the position occupied by the deleted entry. */ inline void presolve_delete_from_major(int majndx, int minndx, const CoinBigIndex *majstrts, int *majlens, int *minndxs, double *els) { const CoinBigIndex ks = majstrts[majndx] ; const CoinBigIndex ke = ks+majlens[majndx] ; const CoinBigIndex kmi = presolve_find_minor(minndx,ks,ke,minndxs) ; minndxs[kmi] = minndxs[ke-1] ; els[kmi] = els[ke-1] ; majlens[majndx]-- ; return ; } /*! \relates CoinPrePostsolveMatrix \brief Delete marked entries Removes the entries specified in \p marked, compressing the major vector to maintain loose packing. \p marked is cleared in the process. */ inline void presolve_delete_many_from_major(int majndx, char *marked, const CoinBigIndex *majstrts, int *majlens, int *minndxs, double *els) { const CoinBigIndex ks = majstrts[majndx] ; const CoinBigIndex ke = ks+majlens[majndx] ; CoinBigIndex put = ks ; for (CoinBigIndex k = ks ; k < ke ; k++) { int iMinor = minndxs[k] ; if (!marked[iMinor]) { minndxs[put] = iMinor ; els[put++] = els[k] ; } else { marked[iMinor] = 0 ; } } majlens[majndx] = put-ks ; return ; } /*! \relates CoinPrePostsolveMatrix \brief Delete the entry for row \p row from column \p col in a column-major matrix Deletes the entry for \p row from the major vector for \p col. Specifically, the relevant entries are removed from the row index (\p hrow) and coefficient (\p colels) arrays and the vector length (\p hincol) is decremented. Loose packing is maintained by swapping the last entry in the row into the position occupied by the deleted entry. */ inline void presolve_delete_from_col(int row, int col, const CoinBigIndex *mcstrt, int *hincol, int *hrow, double *colels) { presolve_delete_from_major(col,row,mcstrt,hincol,hrow,colels) ; } /*! \relates CoinPrePostsolveMatrix \brief Delete the entry for column \p col from row \p row in a row-major matrix Deletes the entry for \p col from the major vector for \p row. Specifically, the relevant entries are removed from the column index (\p hcol) and coefficient (\p rowels) arrays and the vector length (\p hinrow) is decremented. Loose packing is maintained by swapping the last entry in the column into the position occupied by the deleted entry. */ inline void presolve_delete_from_row(int row, int col, const CoinBigIndex *mrstrt, int *hinrow, int *hcol, double *rowels) { presolve_delete_from_major(row,col,mrstrt,hinrow,hcol,rowels) ; } /*! \relates CoinPostsolveMatrix \brief Delete the entry for a minor index from a major vector in a threaded matrix. Deletes the entry for \p minndx from the major vector \p majndx. Specifically, the relevant entries are removed from the minor index (\p minndxs) and coefficient (\p els) arrays and the vector length (\p majlens) is decremented. The thread for the major vector is relinked around the deleted entry and the space is returned to the free list. */ void presolve_delete_from_major2 (int majndx, int minndx, CoinBigIndex *majstrts, int *majlens, int *minndxs, int *majlinks, CoinBigIndex *free_listp) ; /*! \relates CoinPostsolveMatrix \brief Delete the entry for row \p row from column \p col in a column-major threaded matrix Deletes the entry for \p row from the major vector for \p col. Specifically, the relevant entries are removed from the row index (\p hrow) and coefficient (\p colels) arrays and the vector length (\p hincol) is decremented. The thread for the major vector is relinked around the deleted entry and the space is returned to the free list. */ inline void presolve_delete_from_col2(int row, int col, CoinBigIndex *mcstrt, int *hincol, int *hrow, int *clinks, CoinBigIndex *free_listp) { presolve_delete_from_major2(col,row,mcstrt,hincol,hrow,clinks,free_listp) ; } //@} /*! \defgroup PresolveUtilities Presolve Utility Functions Utilities used by multiple presolve transform objects. */ //@{ /*! \brief Duplicate a major-dimension vector; optionally omit the entry with minor index \p tgt. Designed to copy a major-dimension vector from the paired coefficient (\p elems) and minor index (\p indices) arrays used in the standard packed matrix representation. Copies \p length entries starting at \p offset. If \p tgt is specified, the entry with minor index == \p tgt is omitted from the copy. */ double *presolve_dupmajor(const double *elems, const int *indices, int length, CoinBigIndex offset, int tgt = -1); /// Initialize a vector with random numbers void coin_init_random_vec(double *work, int n); //@} #endif CoinUtils-2.9.10/CoinUtils/src/CoinSignal.hpp0000644000076600007660000000636411510456064017444 0ustar coincoin/* $Id: CoinSignal.hpp 1372 2011-01-03 23:31:00Z lou $ */ // 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 _CoinSignal_hpp #define _CoinSignal_hpp // This file is fully docified. // There's nothing to docify... //############################################################################# #include //############################################################################# #if defined(_MSC_VER) typedef void (__cdecl *CoinSighandler_t) (int); # define CoinSighandler_t_defined #endif //----------------------------------------------------------------------------- #if (defined(__GNUC__) && defined(__linux__)) typedef sighandler_t CoinSighandler_t; # define CoinSighandler_t_defined #endif //----------------------------------------------------------------------------- #if defined(__CYGWIN__) && defined(__GNUC__) typedef typeof(SIG_DFL) CoinSighandler_t; # define CoinSighandler_t_defined #endif //----------------------------------------------------------------------------- #if defined(__MINGW32__) && defined(__GNUC__) typedef typeof(SIG_DFL) CoinSighandler_t; # define CoinSighandler_t_defined #endif //----------------------------------------------------------------------------- #if defined(__FreeBSD__) && defined(__GNUC__) typedef typeof(SIG_DFL) CoinSighandler_t; # define CoinSighandler_t_defined #endif //----------------------------------------------------------------------------- #if defined(__NetBSD__) && defined(__GNUC__) typedef typeof(SIG_DFL) CoinSighandler_t; # define CoinSighandler_t_defined #endif //----------------------------------------------------------------------------- #if defined(_AIX) # if defined(__GNUC__) typedef typeof(SIG_DFL) CoinSighandler_t; # define CoinSighandler_t_defined # endif #endif //----------------------------------------------------------------------------- #if defined (__hpux) # define CoinSighandler_t_defined # if defined(__GNUC__) typedef typeof(SIG_DFL) CoinSighandler_t; # else extern "C" { typedef void (*CoinSighandler_t) (int); } # endif #endif //----------------------------------------------------------------------------- #if defined(__sun) # if defined(__SUNPRO_CC) # include extern "C" { typedef void (*CoinSighandler_t) (int); } # define CoinSighandler_t_defined # endif # if defined(__GNUC__) typedef typeof(SIG_DFL) CoinSighandler_t; # define CoinSighandler_t_defined # endif #endif //----------------------------------------------------------------------------- #if defined(__MACH__) && defined(__GNUC__) typedef typeof(SIG_DFL) CoinSighandler_t; # define CoinSighandler_t_defined #endif //############################################################################# #ifndef CoinSighandler_t_defined # warning("OS and/or compiler is not recognized. Defaulting to:"); # warning("extern "C" {") # warning(" typedef void (*CoinSighandler_t) (int);") # warning("}") extern "C" { typedef void (*CoinSighandler_t) (int); } #endif //############################################################################# #endif CoinUtils-2.9.10/CoinUtils/src/CoinSnapshot.cpp0000644000076600007660000003551311552534611020020 0ustar coincoin/* $Id: CoinSnapshot.cpp 1416 2011-04-17 09:57:29Z 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 "CoinUtilsConfig.h" #include "CoinHelperFunctions.hpp" #include "CoinSnapshot.hpp" #include "CoinPackedMatrix.hpp" #include "CoinFinite.hpp" //############################################################################# // Constructors / Destructor / Assignment //############################################################################# //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- CoinSnapshot::CoinSnapshot () { gutsOfDestructor(13); } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- CoinSnapshot::CoinSnapshot (const CoinSnapshot & rhs) { gutsOfDestructor(13); gutsOfCopy(rhs); } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- CoinSnapshot::~CoinSnapshot () { gutsOfDestructor(15); } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- CoinSnapshot & CoinSnapshot::operator=(const CoinSnapshot& rhs) { if (this != &rhs) { gutsOfDestructor(15); gutsOfCopy(rhs); } return *this; } // Does main work of destructor void CoinSnapshot::gutsOfDestructor(int type) { if ((type&2)!=0) { if (owned_.colLower) delete [] colLower_; if (owned_.colUpper) delete [] colUpper_; if (owned_.rowLower) delete [] rowLower_; if (owned_.rowUpper) delete [] rowUpper_; if (owned_.rightHandSide) delete [] rightHandSide_; if (owned_.objCoefficients) delete [] objCoefficients_; if (owned_.colType) delete [] colType_; if (owned_.matrixByRow) delete matrixByRow_; if (owned_.matrixByCol) delete matrixByCol_; if (owned_.originalMatrixByRow) delete originalMatrixByRow_; if (owned_.originalMatrixByCol) delete originalMatrixByCol_; if (owned_.colSolution) delete [] colSolution_; if (owned_.rowPrice) delete [] rowPrice_; if (owned_.reducedCost) delete [] reducedCost_; if (owned_.rowActivity) delete [] rowActivity_; if (owned_.doNotSeparateThis) delete [] doNotSeparateThis_; } if ((type&4)!=0) { objSense_ = 1.0; infinity_ = COIN_DBL_MAX; dualTolerance_ = 1.0e-7; primalTolerance_ = 1.0e-7; integerTolerance_ = 1.0e-7; } if ((type&8)!=0) { objValue_ = COIN_DBL_MAX; objOffset_ = 0.0; integerUpperBound_ = COIN_DBL_MAX; integerLowerBound_ = -COIN_DBL_MAX; } if ((type&1)!=0) { colLower_ = NULL; colUpper_ = NULL; rowLower_ = NULL; rowUpper_ = NULL; rightHandSide_ = NULL; objCoefficients_ = NULL; colType_ = NULL; matrixByRow_ = NULL; matrixByCol_ = NULL; originalMatrixByRow_ = NULL; originalMatrixByCol_ = NULL; colSolution_ = NULL; rowPrice_ = NULL; reducedCost_ = NULL; rowActivity_ = NULL; doNotSeparateThis_ = NULL; numCols_ = 0; numRows_ = 0; numElements_ = 0; numIntegers_ = 0; // say nothing owned memset(&owned_,0,sizeof(owned_)); } } // Does main work of copy void CoinSnapshot::gutsOfCopy(const CoinSnapshot & rhs) { objSense_ = rhs.objSense_; infinity_ = rhs.infinity_; objValue_ = rhs.objValue_; objOffset_ = rhs.objOffset_; dualTolerance_ = rhs.dualTolerance_; primalTolerance_ = rhs.primalTolerance_; integerTolerance_ = rhs.integerTolerance_; integerUpperBound_ = rhs.integerUpperBound_; integerLowerBound_ = rhs.integerLowerBound_; numCols_ = rhs.numCols_; numRows_ = rhs.numRows_; numElements_ = rhs.numElements_; numIntegers_ = rhs.numIntegers_; owned_ = rhs.owned_; if (owned_.colLower) colLower_ = CoinCopyOfArray(rhs.colLower_,numCols_); else colLower_ = rhs.colLower_; if (owned_.colUpper) colUpper_ = CoinCopyOfArray(rhs.colUpper_,numCols_); else colUpper_ = rhs.colUpper_; if (owned_.rowLower) rowLower_ = CoinCopyOfArray(rhs.rowLower_,numRows_); else rowLower_ = rhs.rowLower_; if (owned_.rowUpper) rowUpper_ = CoinCopyOfArray(rhs.rowUpper_,numRows_); else rowUpper_ = rhs.rowUpper_; if (owned_.rightHandSide) rightHandSide_ = CoinCopyOfArray(rhs.rightHandSide_,numRows_); else rightHandSide_ = rhs.rightHandSide_; if (owned_.objCoefficients) objCoefficients_ = CoinCopyOfArray(rhs.objCoefficients_,numCols_); else objCoefficients_ = rhs.objCoefficients_; if (owned_.colType) colType_ = CoinCopyOfArray(rhs.colType_,numCols_); else colType_ = rhs.colType_; if (owned_.colSolution) colSolution_ = CoinCopyOfArray(rhs.colSolution_,numCols_); else colSolution_ = rhs.colSolution_; if (owned_.rowPrice) rowPrice_ = CoinCopyOfArray(rhs.rowPrice_,numRows_); else rowPrice_ = rhs.rowPrice_; if (owned_.reducedCost) reducedCost_ = CoinCopyOfArray(rhs.reducedCost_,numCols_); else reducedCost_ = rhs.reducedCost_; if (owned_.rowActivity) rowActivity_ = CoinCopyOfArray(rhs.rowActivity_,numRows_); else rowActivity_ = rhs.rowActivity_; if (owned_.doNotSeparateThis) doNotSeparateThis_ = CoinCopyOfArray(rhs.doNotSeparateThis_,numCols_); else doNotSeparateThis_ = rhs.doNotSeparateThis_; if (owned_.matrixByRow) matrixByRow_ = new CoinPackedMatrix(*rhs.matrixByRow_); else matrixByRow_ = rhs.matrixByRow_; if (owned_.matrixByCol) matrixByCol_ = new CoinPackedMatrix(*rhs.matrixByCol_); else matrixByCol_ = rhs.matrixByCol_; if (owned_.originalMatrixByRow) originalMatrixByRow_ = new CoinPackedMatrix(*rhs.originalMatrixByRow_); else originalMatrixByRow_ = rhs.originalMatrixByRow_; if (owned_.originalMatrixByCol) originalMatrixByCol_ = new CoinPackedMatrix(*rhs.originalMatrixByCol_); else originalMatrixByCol_ = rhs.originalMatrixByCol_; } /* Load in an problem by copying the arguments (the constraints on the rows are given by lower and upper bounds). If a pointer is NULL 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
*/ void CoinSnapshot::loadProblem(const CoinPackedMatrix& matrix, const double* collb, const double* colub, const double* obj, const double* rowlb, const double* rowub, bool makeRowCopy) { // Keep scalars (apart from objective value etc) gutsOfDestructor(3+8); numRows_ = matrix.getNumRows(); numCols_ = matrix.getNumCols(); numElements_ = matrix.getNumElements(); owned_.matrixByCol = 1; matrixByCol_ = new CoinPackedMatrix(matrix); if (makeRowCopy) { owned_.matrixByRow = 1; CoinPackedMatrix * matrixByRow = new CoinPackedMatrix(matrix); matrixByRow->reverseOrdering(); matrixByRow_ = matrixByRow; } colLower_ = CoinCopyOfArray(collb,numCols_,0.0); colUpper_ = CoinCopyOfArray(colub,numCols_,infinity_); objCoefficients_ = CoinCopyOfArray(obj,numCols_,0.0); rowLower_ = CoinCopyOfArray(rowlb,numRows_,-infinity_); rowUpper_ = CoinCopyOfArray(rowub,numRows_,infinity_); // do rhs as well createRightHandSide(); } // Set pointer to array[getNumCols()] of column lower bounds void CoinSnapshot::setColLower(const double * array, bool copyIn) { if (owned_.colLower) delete [] colLower_; if (copyIn) { owned_.colLower=1; colLower_ = CoinCopyOfArray(array,numCols_); } else { owned_.colLower=0; colLower_ = array; } } // Set pointer to array[getNumCols()] of column upper bounds void CoinSnapshot::setColUpper(const double * array, bool copyIn) { if (owned_.colUpper) delete [] colUpper_; if (copyIn) { owned_.colUpper=1; colUpper_ = CoinCopyOfArray(array,numCols_); } else { owned_.colUpper=0; colUpper_ = array; } } // Set pointer to array[getNumRows()] of row lower bounds void CoinSnapshot::setRowLower(const double * array, bool copyIn) { if (owned_.rowLower) delete [] rowLower_; if (copyIn) { owned_.rowLower=1; rowLower_ = CoinCopyOfArray(array,numRows_); } else { owned_.rowLower=0; rowLower_ = array; } } // Set pointer to array[getNumRows()] of row upper bounds void CoinSnapshot::setRowUpper(const double * array, bool copyIn) { if (owned_.rowUpper) delete [] rowUpper_; if (copyIn) { owned_.rowUpper=1; rowUpper_ = CoinCopyOfArray(array,numRows_); } else { owned_.rowUpper=0; rowUpper_ = array; } } /* Set pointer to array[getNumRows()] of rhs side values This gives same results as OsiSolverInterface for useful cases If getRowUpper()[i] != infinity then getRightHandSide()[i] == getRowUpper()[i] else getRightHandSide()[i] == getRowLower()[i] */ void CoinSnapshot::setRightHandSide(const double * array, bool copyIn) { if (owned_.rightHandSide) delete [] rightHandSide_; if (copyIn) { owned_.rightHandSide=1; rightHandSide_ = CoinCopyOfArray(array,numRows_); } else { owned_.rightHandSide=0; rightHandSide_ = array; } } /* Create array[getNumRows()] of rhs side values This gives same results as OsiSolverInterface for useful cases If getRowUpper()[i] != infinity then getRightHandSide()[i] == getRowUpper()[i] else getRightHandSide()[i] == getRowLower()[i] */ void CoinSnapshot::createRightHandSide() { if (owned_.rightHandSide) delete [] rightHandSide_; owned_.rightHandSide=1; assert (rowUpper_); assert (rowLower_); double * rightHandSide = CoinCopyOfArray(rowUpper_,numRows_); for (int i=0;igetNumCols()==numCols_); assert (matrixByRow_->getNumRows()==numRows_); } // Create row-wise copy from MatrixByCol void CoinSnapshot::createMatrixByRow() { if (owned_.matrixByRow) delete matrixByRow_; assert (matrixByCol_); owned_.matrixByRow = 1; CoinPackedMatrix * matrixByRow = new CoinPackedMatrix(*matrixByCol_); matrixByRow->reverseOrdering(); matrixByRow_ = matrixByRow; } // Set pointer to column-wise copy of current matrix void CoinSnapshot::setMatrixByCol(const CoinPackedMatrix * matrix, bool copyIn) { if (owned_.matrixByCol) delete matrixByCol_; if (copyIn) { owned_.matrixByCol=1; matrixByCol_ = new CoinPackedMatrix(*matrix); } else { owned_.matrixByCol=0; matrixByCol_ = matrix; } assert (matrixByCol_->getNumCols()==numCols_); assert (matrixByCol_->getNumRows()==numRows_); } // Set pointer to row-wise copy of "original" matrix void CoinSnapshot::setOriginalMatrixByRow(const CoinPackedMatrix * matrix, bool copyIn) { if (owned_.originalMatrixByRow) delete originalMatrixByRow_; if (copyIn) { owned_.originalMatrixByRow=1; originalMatrixByRow_ = new CoinPackedMatrix(*matrix); } else { owned_.originalMatrixByRow=0; originalMatrixByRow_ = matrix; } assert (matrixByRow_->getNumCols()==numCols_); } // Set pointer to column-wise copy of "original" matrix void CoinSnapshot::setOriginalMatrixByCol(const CoinPackedMatrix * matrix, bool copyIn) { if (owned_.originalMatrixByCol) delete originalMatrixByCol_; if (copyIn) { owned_.originalMatrixByCol=1; originalMatrixByCol_ = new CoinPackedMatrix(*matrix); } else { owned_.originalMatrixByCol=0; originalMatrixByCol_ = matrix; } assert (matrixByCol_->getNumCols()==numCols_); } // Set pointer to array[getNumCols()] of primal variable values void CoinSnapshot::setColSolution(const double * array, bool copyIn) { if (owned_.colSolution) delete [] colSolution_; if (copyIn) { owned_.colSolution=1; colSolution_ = CoinCopyOfArray(array,numCols_); } else { owned_.colSolution=0; colSolution_ = array; } } // Set pointer to array[getNumRows()] of dual variable values void CoinSnapshot::setRowPrice(const double * array, bool copyIn) { if (owned_.rowPrice) delete [] rowPrice_; if (copyIn) { owned_.rowPrice=1; rowPrice_ = CoinCopyOfArray(array,numRows_); } else { owned_.rowPrice=0; rowPrice_ = array; } } // Set a pointer to array[getNumCols()] of reduced costs void CoinSnapshot::setReducedCost(const double * array, bool copyIn) { if (owned_.reducedCost) delete [] reducedCost_; if (copyIn) { owned_.reducedCost=1; reducedCost_ = CoinCopyOfArray(array,numCols_); } else { owned_.reducedCost=0; reducedCost_ = array; } } // Set pointer to array[getNumRows()] of row activity levels (constraint matrix times the solution vector). void CoinSnapshot::setRowActivity(const double * array, bool copyIn) { if (owned_.rowActivity) delete [] rowActivity_; if (copyIn) { owned_.rowActivity=1; rowActivity_ = CoinCopyOfArray(array,numRows_); } else { owned_.rowActivity=0; rowActivity_ = array; } } // Set pointer to array[getNumCols()] of primal variable values which should not be separated (for debug) void CoinSnapshot::setDoNotSeparateThis(const double * array, bool copyIn) { if (owned_.doNotSeparateThis) delete [] doNotSeparateThis_; if (copyIn) { owned_.doNotSeparateThis=1; doNotSeparateThis_ = CoinCopyOfArray(array,numCols_); } else { owned_.doNotSeparateThis=0; doNotSeparateThis_ = array; } } CoinUtils-2.9.10/CoinUtils/src/CoinWarmStartPrimalDual.cpp0000644000076600007660000000441411510461170022105 0ustar coincoin/* $Id: CoinWarmStartPrimalDual.cpp 1373 2011-01-03 23:57:44Z lou $ */ // 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). #if defined(_MSC_VER) // Turn off compiler warning about long names # pragma warning(disable:4786) #endif #include #include "CoinWarmStartPrimalDual.hpp" #include //############################################################################# /* Generate a `diff' that can convert the warm start passed as a parameter to the warm start specified by this. The capabilities are limited: the basis passed as a parameter can be no larger than the basis pointed to by this. */ CoinWarmStartDiff* CoinWarmStartPrimalDual::generateDiff (const CoinWarmStart *const oldCWS) const { /* Make sure the parameter is CoinWarmStartPrimalDual or derived class. */ const CoinWarmStartPrimalDual *old = dynamic_cast(oldCWS) ; if (!old) { throw CoinError("Old warm start not derived from CoinWarmStartPrimalDual.", "generateDiff","CoinWarmStartPrimalDual") ; } CoinWarmStartPrimalDualDiff* diff = new CoinWarmStartPrimalDualDiff; CoinWarmStartDiff* vecdiff; vecdiff = primal_.generateDiff(&old->primal_); diff->primalDiff_.swap(*dynamic_cast*>(vecdiff)); delete vecdiff; vecdiff = dual_.generateDiff(&old->dual_); diff->dualDiff_.swap(*dynamic_cast*>(vecdiff)); delete vecdiff; return diff; } //############################################################################# /* Apply diff to this warm start. Update this warm start by applying diff. It's assumed that the allocated capacity of the warm start is sufficiently large. */ void CoinWarmStartPrimalDual::applyDiff (const CoinWarmStartDiff *const cwsdDiff) { /* Make sure we have a CoinWarmStartPrimalDualDiff */ const CoinWarmStartPrimalDualDiff *diff = dynamic_cast(cwsdDiff) ; if (!diff) { throw CoinError("Diff not derived from CoinWarmStartPrimalDualDiff.", "applyDiff","CoinWarmStartPrimalDual") ; } primal_.applyDiff(&diff->primalDiff_); dual_.applyDiff(&diff->dualDiff_); } CoinUtils-2.9.10/CoinUtils/src/CoinPresolveSingleton.cpp0000644000076600007660000007600212130014662021671 0ustar coincoin/* $Id: CoinPresolveSingleton.cpp 1581 2013-04-06 12:48:50Z stefan $ */ // 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). #include #include #include "CoinHelperFunctions.hpp" #include "CoinPresolveMatrix.hpp" #include "CoinPresolveEmpty.hpp" // for DROP_COL/DROP_ROW #include "CoinPresolveFixed.hpp" #include "CoinPresolveSingleton.hpp" #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #include "CoinPresolvePsdebug.hpp" #endif #include "CoinMessage.hpp" #include "CoinFinite.hpp" /* * Original comment: * * Transfers singleton row bound information to the corresponding column bounds. * What I refer to as a row singleton would be called a doubleton * in the paper, since my terminology doesn't refer to the slacks. * In terms of the paper, we transfer the bounds of the slack onto * the variable (vii) and then "substitute" the slack out of the problem * (which is a noop). */ /* Given blow(i) <= a(ij)x(j) <= b(i), we can transfer the bounds enforced by the constraint to the column bounds l(j) and u(j) on x(j) and delete the row. You can think of this as a specialised instance of doubleton_action, where the target variable is the logical that transforms an inequality to an equality. Since the system doesn't have logicals at this point, the row is a singleton. At some time in the past, the main loop was written to scan all rows but was limited in the number of rows it could process in one call. The notFinished parameter is the only remaining vestige of this behaviour and should probably be removed. For now, make sure it's forced to false for the benefit of code that looks at the returned value. -- lh, 121015 -- */ const CoinPresolveAction * slack_doubleton_action::presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next, bool ¬Finished) { # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 # if PRESOLVE_DEBUG > 0 std::cout << "Entering slack_doubleton_action::presolve." << std::endl ; # endif # if PRESOLVE_CONSISTENCY > 0 presolve_consistent(prob) ; presolve_links_ok(prob) ; presolve_check_sol(prob) ; presolve_check_nbasic(prob) ; # endif # endif # if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 int startEmptyRows = prob->countEmptyRows() ; int startEmptyColumns = prob->countEmptyCols() ; # if COIN_PRESOLVE_TUNING > 0 double startTime = 0.0 ; if (prob->tuning_) { startTime = CoinCpuTime() ; } # endif # endif notFinished = false ; /* Unpack the problem representation. */ double *colels = prob->colels_ ; int *hrow = prob->hrow_ ; CoinBigIndex *mcstrt = prob->mcstrt_ ; int *hincol = prob->hincol_ ; double *clo = prob->clo_ ; double *cup = prob->cup_ ; double *rowels = prob->rowels_ ; const int *hcol = prob->hcol_ ; const CoinBigIndex *mrstrt = prob->mrstrt_ ; int *hinrow = prob->hinrow_ ; double *rlo = prob->rlo_ ; double *rup = prob->rup_ ; /* Rowstat is used to decide if the solution is present. */ unsigned char *rowstat = prob->rowstat_ ; double *acts = prob->acts_ ; double *sol = prob->sol_ ; const unsigned char *integerType = prob->integerType_ ; const double ztolzb = prob->ztolzb_ ; int numberLook = prob->numberRowsToDo_ ; int *look = prob->rowsToDo_ ; bool fixInfeasibility = ((prob->presolveOptions_&0x4000) != 0) ; action *actions = new action[numberLook] ; int nactions = 0 ; int *fixed_cols = prob->usefulColumnInt_ ; int nfixed_cols = 0 ; bool infeas = false ; /* Walk the rows looking for singletons. */ for (int iLook = 0 ; iLook < numberLook ; iLook++) { int i = look[iLook] ; if (hinrow[i] != 1) continue ; int j = hcol[mrstrt[i]] ; double aij = rowels[mrstrt[i]] ; double lo = rlo[i] ; double up = rup[i] ; double abs_aij = fabs(aij) ; /* A tiny value of a(ij) invites numerical error, since the new bound will be (something)/a(ij). Columns that are already fixed are also uninteresting. */ if (abs_aij < ZTOLDP2) continue ; if (fabs(cup[j]-clo[j]) < ztolzb) continue ; PRESOLVE_DETAIL_PRINT(printf("pre_singleton %dC %dR E\n",j,i)) ; /* Get down to work. First create the postsolve action for row i / x(j). */ action *s = &actions[nactions] ; nactions++ ; s->col = j ; s->clo = clo[j] ; s->cup = cup[j] ; s->row = i ; s->rlo = rlo[i] ; s->rup = rup[i] ; s->coeff = aij ; # if PRESOLVE_DEBUG > 1 std::cout << " removing row " << i << ": " << rlo[i] << " <= " << aij << "*x(" << j << ") <= " << rup[i] << std::endl ; # endif /* Do the work of bounds transfer. Starting with blow(i) <= a(ij)x(j) <= b(i), we end up with blow(i)/a(ij) <= x(j) <= b(i)/a(ij) a(ij) > 0 blow(i)/a(ij) >= x(j) >= b(i)/a(ij) a(ij) < 0 The code deals with a(ij) < 0 by swapping and negating the row bounds and calculating with |a(ij)|. Be careful not to convert finite infinity to finite, or vice versa. */ if (aij < 0.0) { CoinSwap(lo,up) ; lo = -lo ; up = -up ; } if (lo <= -PRESOLVE_INF) lo = -PRESOLVE_INF ; else { lo /= abs_aij ; if (lo <= -PRESOLVE_INF) lo = -PRESOLVE_INF ; } if (up > PRESOLVE_INF) up = PRESOLVE_INF ; else { up /= abs_aij ; if (up > PRESOLVE_INF) up = PRESOLVE_INF ; } # if PRESOLVE_DEBUG > 2 std::cout << " l(" << j << ") = " << clo[j] << " ==> " << lo << ", delta " << (lo-clo[j]) << std::endl ; std::cout << " u(" << j << ") = " << cup[j] << " ==> " << up << ", delta " << (cup[j]-up) << std::endl ; # endif /* lo and up are now the new l(j) and u(j), respectively. If they're better than the existing bounds, update. Have a care with integer variables --- don't let numerical inaccuracy pull us off an integral bound. */ if (clo[j] < lo) { // If integer be careful if (integerType[j]) { if (fabs(lo-floor(lo+0.5)) < 0.000001) lo = floor(lo+0.5) ; if (clo[j] < lo) clo[j] = lo ; } else { clo[j] = lo ; } } if (cup[j] > up) { if (integerType[j]) { if (fabs(up-floor(up+0.5)) < 0.000001) up = floor(up+0.5) ; if (cup[j] > up) cup[j] = up ; } else { cup[j] = up ; } } /* Is x(j) now fixed? Remember it for later. */ if (fabs(cup[j] - clo[j]) < ZTOLDP) { fixed_cols[nfixed_cols++] = j ; } /* Is x(j) infeasible? Fix it if we're within the feasibility tolerance, or if the user was so foolish as to request repair of infeasibility. Integer values are preferred, if close enough. If the infeasibility is too large to ignore, mark the problem infeasible and head for the exit. */ if (lo > up) { if (lo <= up+prob->feasibilityTolerance_ || fixInfeasibility) { double nearest = floor(lo+0.5) ; if (fabs(nearest-lo)<2.0*prob->feasibilityTolerance_) { lo = nearest ; up = nearest ; } else { lo = up ; } clo[j] = lo ; cup[j] = up ; } else { prob->status_ |= 1 ; prob->messageHandler()->message(COIN_PRESOLVE_COLINFEAS, prob->messages()) << j << lo << up << CoinMessageEol ; infeas = true ; break ; } } # if PRESOLVE_DEBUG > 1 printf("SINGLETON R-%d C-%d\n", i, j) ; # endif /* Remove the row from the row-major representation. */ hinrow[i] = 0 ; PRESOLVE_REMOVE_LINK(prob->rlink_,i) ; rlo[i] = 0.0 ; rup[i] = 0.0 ; /* Remove the row from this col in the column-major representation. It can happen that this will empty the column, in which case we can delink it. If the column isn't empty, queue it for further processing. */ presolve_delete_from_col(i,j,mcstrt,hincol,hrow,colels) ; if (hincol[j] == 0) { PRESOLVE_REMOVE_LINK(prob->clink_,j) ; } else { prob->addCol(j) ; } /* Update the solution, if it's present. The trick is maintaining the right number of basic variables. We've deleted a row, so we need to reduce the basis by one. There's a corner case that doesn't seem to be covered. What happens if both x(j) and s(i) are nonbasic? The number of basic variables will not be reduced. This is admittedly a pathological situation: It implies that there's an existing bound l(j) or u(j) exactly equal to the bound imposed by this constraint, so that x(j) can be nonbasic at bound and the constraint can be simultaneously tight. -- lh, 121115 -- */ if (rowstat) { int basisChoice = 0 ; int numberBasic = 0 ; double movement = 0 ; if (prob->columnIsBasic(j)) { numberBasic++ ; basisChoice = 2 ; // move to row to keep consistent } if (prob->rowIsBasic(i)) numberBasic++ ; PRESOLVEASSERT(numberBasic > 0) ; if (sol[j] <= clo[j]+ztolzb) { movement = clo[j]-sol[j] ; sol[j] = clo[j] ; prob->setColumnStatus(j,CoinPrePostsolveMatrix::atLowerBound) ; } else if (sol[j] >= cup[j]-ztolzb) { movement = cup[j]-sol[j] ; sol[j] = cup[j] ; prob->setColumnStatus(j,CoinPrePostsolveMatrix::atUpperBound) ; } else { basisChoice = 1 ; } if (numberBasic > 1 || basisChoice == 1) prob->setColumnStatus(j,CoinPrePostsolveMatrix::basic) ; else if (basisChoice==2) prob->setRowStatus(i,CoinPrePostsolveMatrix::basic) ; if (movement) { const CoinBigIndex &kcs = mcstrt[j] ; const CoinBigIndex kce = kcs+hincol[j] ; for (CoinBigIndex kcol = kcs ; kcol < kce ; kcol++) { int k = hrow[kcol] ; PRESOLVEASSERT(hinrow[k] > 0) ; acts[k] += movement*colels[kcol] ; } } } } /* Done with processing. Time to deal with the results. First add the postsolve actions for the singletons to the postsolve list. Then call remove_fixed_action to handle variables that were fixed during the loop. (We've already adjusted the solution, so make_fixed_action is not needed.) */ if (!infeas && nactions) { # if PRESOLVE_SUMMARY std::cout << "SINGLETON ROWS: " << nactions << std::endl ; # endif action *save_actions = new action[nactions] ; CoinMemcpyN(actions, nactions, save_actions) ; next = new slack_doubleton_action(nactions,save_actions,next) ; if (nfixed_cols) next = remove_fixed_action::presolve(prob,fixed_cols,nfixed_cols,next) ; } delete[] actions ; # if COIN_PRESOLVE_TUNING > 0 double thisTime ; if (prob->tuning_) double thisTime = CoinCpuTime() ; # endif # if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 presolve_consistent(prob) ; presolve_links_ok(prob) ; presolve_check_sol(prob) ; presolve_check_nbasic(prob) ; # endif # if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 int droppedRows = prob->countEmptyRows()-startEmptyRows ; int droppedColumns = prob->countEmptyCols()-startEmptyColumns ; std::cout << "Leaving slack_doubleton_action::presolve, " << droppedRows << " rows, " << droppedColumns << " columns dropped" ; #if COIN_PRESOLVE_TUNING > 0 std::cout << " in " << (thisTime-startTime) << "s, total " << (thisTime-prob->startTime_) ; # endif std::cout << "." << std::endl ; # endif return (next) ; } void slack_doubleton_action::postsolve(CoinPostsolveMatrix *prob) const { const action *const actions = actions_ ; const int nactions = nactions_ ; double *colels = prob->colels_ ; int *hrow = prob->hrow_ ; CoinBigIndex *mcstrt = prob->mcstrt_ ; int *hincol = prob->hincol_ ; int *link = prob->link_ ; double *clo = prob->clo_ ; double *cup = prob->cup_ ; double *sol = prob->sol_ ; double *rcosts = prob->rcosts_ ; unsigned char *colstat = prob->colstat_ ; double *rlo = prob->rlo_ ; double *rup = prob->rup_ ; double *acts = prob->acts_ ; double *rowduals = prob->rowduals_ ; # if PRESOLVE_DEBUG char *rdone = prob->rdone_ ; std::cout << "Entering slack_doubleton_action::postsolve, " << nactions << " constraints to process." << std::endl ; presolve_check_sol(prob,2,2,2) ; presolve_check_nbasic(prob) ; # endif CoinBigIndex &free_list = prob->free_list_ ; const double ztolzb = prob->ztolzb_ ; for (const action *f = &actions[nactions-1] ; actions <= f ; f--) { int irow = f->row ; double lo0 = f->clo ; double up0 = f->cup ; double coeff = f->coeff ; int jcol = f->col ; rlo[irow] = f->rlo ; rup[irow] = f->rup ; clo[jcol] = lo0 ; cup[jcol] = up0 ; acts[irow] = coeff*sol[jcol] ; /* Create the row and restore the single coefficient, linking the new coefficient at the start of the column. */ { CoinBigIndex k = free_list ; assert(k >= 0 && k < prob->bulk0_) ; free_list = link[free_list] ; hrow[k] = irow ; colels[k] = coeff ; link[k] = mcstrt[jcol] ; mcstrt[jcol] = k ; hincol[jcol]++ ; } /* Since we are adding a row, we have to set the row status and dual to satisfy complimentary slackness. We may also have to modify the column status and reduced cost if bounds have been relaxed. */ if (!colstat) { // ???? rowduals[irow] = 0.0 ; } else { if (prob->columnIsBasic(jcol)) { /* The variable is basic, hence the slack must be basic, hence the dual for the row is zero. Relaxing the bounds on a basic variable doesn't change anything. */ prob->setRowStatus(irow,CoinPrePostsolveMatrix::basic) ; rowduals[irow] = 0.0 ; } else if ((fabs(sol[jcol]-lo0) <= ztolzb && rcosts[jcol] >= 0) || (fabs(sol[jcol]-up0) <= ztolzb && rcosts[jcol] <= 0)) { /* The variable is nonbasic and the sign of the reduced cost is correct for the bound. Again, the slack will be basic and the dual zero. */ prob->setRowStatus(irow,CoinPrePostsolveMatrix::basic) ; rowduals[irow] = 0.0 ; } else if (!(fabs(sol[jcol]-lo0) <= ztolzb) && !(fabs(sol[jcol]-up0) <= ztolzb)) { /* The variable was not basic but transferring bounds back to the constraint has relaxed the column bounds. The variable will need to be made basic. The constraint must then be tight and the dual must be set so that the reduced cost of the variable becomes zero. */ prob->setColumnStatus(jcol,CoinPrePostsolveMatrix::basic) ; prob->setRowStatusUsingValue(irow) ; rowduals[irow] = rcosts[jcol]/coeff ; rcosts[jcol] = 0.0 ; } else { /* The variable is at bound, but the reduced cost is wrong. Again set the row dual to bring the reduced cost to zero. This implies that the constraint is tight and the slack will be nonbasic. */ prob->setColumnStatus(jcol,CoinPrePostsolveMatrix::basic) ; prob->setRowStatusUsingValue(irow) ; rowduals[irow] = rcosts[jcol]/coeff ; rcosts[jcol] = 0.0 ; } } # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 rdone[irow] = SLACK_DOUBLETON ; # endif } # if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 presolve_check_threads(prob) ; presolve_check_sol(prob,2,2,2) ; presolve_check_nbasic(prob) ; # endif # if PRESOLVE_DEBUG > 0 std::cout << "Leaving slack_doubleton_action::postsolve." << std::endl ; # endif return ; } /* If we have a variable with one entry and no cost then we can transform the row from E to G etc. If there is a row objective region then we may be able to do this even with a cost. */ const CoinPresolveAction * slack_singleton_action::presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next, double * rowObjective) { double startTime = 0.0 ; int startEmptyRows=0 ; int startEmptyColumns = 0 ; if (prob->tuning_) { startTime = CoinCpuTime() ; startEmptyRows = prob->countEmptyRows() ; startEmptyColumns = prob->countEmptyCols() ; } double *colels = prob->colels_ ; int *hrow = prob->hrow_ ; CoinBigIndex *mcstrt = prob->mcstrt_ ; int *hincol = prob->hincol_ ; //int ncols = prob->ncols_ ; double *clo = prob->clo_ ; double *cup = prob->cup_ ; double *rowels = prob->rowels_ ; int *hcol = prob->hcol_ ; CoinBigIndex *mrstrt = prob->mrstrt_ ; int *hinrow = prob->hinrow_ ; int nrows = prob->nrows_ ; double *rlo = prob->rlo_ ; double *rup = prob->rup_ ; // Existence of unsigned char *rowstat = prob->rowstat_ ; double *acts = prob->acts_ ; double * sol = prob->sol_ ; const unsigned char *integerType = prob->integerType_ ; const double ztolzb = prob->ztolzb_ ; double *dcost = prob->cost_ ; //const double maxmin = prob->maxmin_ ; # if PRESOLVE_DEBUG std::cout << "Entering slack_singleton_action::presolve." << std::endl ; presolve_check_sol(prob) ; presolve_check_nbasic(prob) ; # endif int numberLook = prob->numberColsToDo_ ; int iLook ; int * look = prob->colsToDo_ ; // Make sure we allocate at least one action int maxActions = CoinMin(numberLook,nrows/10)+1 ; action * actions = new action[maxActions] ; int nactions = 0 ; int * fixed_cols = new int [numberLook] ; int nfixed_cols=0 ; int nWithCosts=0 ; double costOffset=0.0 ; for (iLook=0;iLookcolProhibited(iCol)) { double currentLower = rlo[iRow] ; double currentUpper = rup[iRow] ; if (!rowObjective) { if (dcost[iCol]) continue ; } else if ((dcost[iCol]&¤tLower!=currentUpper)||rowObjective[iRow]) { continue ; } double newLower=currentLower ; double newUpper=currentUpper ; if (coeff<0.0) { if (currentUpper>1.0e20||cup[iCol]>1.0e20) { newUpper=COIN_DBL_MAX ; } else { newUpper -= coeff*cup[iCol] ; if (newUpper>1.0e20) newUpper=COIN_DBL_MAX ; } if (currentLower<-1.0e20||clo[iCol]<-1.0e20) { newLower=-COIN_DBL_MAX ; } else { newLower -= coeff*clo[iCol] ; if (newLower<-1.0e20) newLower=-COIN_DBL_MAX ; } } else { if (currentUpper>1.0e20||clo[iCol]<-1.0e20) { newUpper=COIN_DBL_MAX ; } else { newUpper -= coeff*clo[iCol] ; if (newUpper>1.0e20) newUpper=COIN_DBL_MAX ; } if (currentLower<-1.0e20||cup[iCol]>1.0e20) { newLower=-COIN_DBL_MAX ; } else { newLower -= coeff*cup[iCol] ; if (newLower<-1.0e20) newLower=-COIN_DBL_MAX ; } } if (integerType&&integerType[iCol]) { // only possible if everything else integer if (newLower>-1.0e30) { if (newLower!=floor(newLower+0.5)) continue ; } if (newUpper<1.0e30) { if (newUpper!=floor(newUpper+0.5)) continue ; } bool allInt=true ; for (CoinBigIndex j=mrstrt[iRow] ; j=maxActions) { maxActions += CoinMin(numberLook-iLook,maxActions) ; action * temp = new action[maxActions] ; memcpy(temp,actions,nactions*sizeof(action)) ; // changed as 4.6 compiler bug! CoinMemcpyN(actions,nactions,temp) ; delete [] actions ; actions=temp ; } action *s = &actions[nactions] ; nactions++ ; s->col = iCol ; s->clo = clo[iCol] ; s->cup = cup[iCol] ; s->row = iRow ; s->rlo = rlo[iRow] ; s->rup = rup[iRow] ; s->coeff = coeff ; presolve_delete_from_row(iRow,iCol,mrstrt,hinrow,hcol,rowels) ; if (!hinrow[iRow]) PRESOLVE_REMOVE_LINK(prob->rlink_,iRow) ; // put row on stack of things to do next time prob->addRow(iRow) ; #ifdef PRINTCOST if (rowObjective&&dcost[iCol]) { printf("Singleton %d had coeff of %g in row %d - bounds %g %g - cost %g\n", iCol,coeff,iRow,clo[iCol],cup[iCol],dcost[iCol]) ; printf("Row bounds were %g %g now %g %g\n", rlo[iRow],rup[iRow],newLower,newUpper) ; } #endif // Row may be redundant but let someone else do that rlo[iRow]=newLower ; rup[iRow]=newUpper ; if (rowstat&&sol) { // update solution and basis if ((sol[iCol] < cup[iCol]-ztolzb&& sol[iCol] > clo[iCol]+ztolzb)||prob->columnIsBasic(iCol)) prob->setRowStatus(iRow,CoinPrePostsolveMatrix::basic) ; prob->setColumnStatusUsingValue(iCol) ; } // Force column to zero clo[iCol]=0.0 ; cup[iCol]=0.0 ; if (rowObjective&&dcost[iCol]) { rowObjective[iRow]=-dcost[iCol]/coeff ; nWithCosts++ ; // adjust offset costOffset += currentLower*rowObjective[iRow] ; prob->dobias_ -= currentLower*rowObjective[iRow] ; } if (sol) { double movement ; if (fabs(sol[iCol]-clo[iCol])clink_,iCol) ; //clo[iCol] = 0.0 ; //cup[iCol] = 0.0 ; fixed_cols[nfixed_cols++] = iCol ; //presolve_consistent(prob) ; } } } if (nactions) { # if PRESOLVE_SUMMARY printf("SINGLETON COLS: %d\n", nactions) ; # endif #ifdef COIN_DEVELOP printf("%d singletons, %d with costs - offset %g\n",nactions, nWithCosts, costOffset) ; #endif action *save_actions = new action[nactions] ; CoinMemcpyN(actions, nactions, save_actions) ; next = new slack_singleton_action(nactions, save_actions, next) ; if (nfixed_cols) next = make_fixed_action::presolve(prob, fixed_cols, nfixed_cols, true, // arbitrary next) ; } delete [] actions ; delete [] fixed_cols ; if (prob->tuning_) { double thisTime=CoinCpuTime() ; int droppedRows = prob->countEmptyRows() - startEmptyRows ; int droppedColumns = prob->countEmptyCols() - startEmptyColumns ; printf("CoinPresolveSingleton(3) - %d rows, %d columns dropped in time %g, total %g\n", droppedRows,droppedColumns,thisTime-startTime,thisTime-prob->startTime_) ; } # if PRESOLVE_DEBUG presolve_check_sol(prob) ; presolve_check_nbasic(prob) ; std::cout << "Leaving slack_singleton_action::presolve." << std::endl ; # endif return (next) ; } void slack_singleton_action::postsolve(CoinPostsolveMatrix *prob) const { const action *const actions = actions_ ; const int nactions = nactions_ ; double *colels = prob->colels_ ; int *hrow = prob->hrow_ ; CoinBigIndex *mcstrt = prob->mcstrt_ ; int *hincol = prob->hincol_ ; int *link = prob->link_ ; // int ncols = prob->ncols_ ; //double *rowels = prob->rowels_ ; //int *hcol = prob->hcol_ ; //CoinBigIndex *mrstrt = prob->mrstrt_ ; //int *hinrow = prob->hinrow_ ; double *clo = prob->clo_ ; double *cup = prob->cup_ ; double *rlo = prob->rlo_ ; double *rup = prob->rup_ ; double *sol = prob->sol_ ; double *rcosts = prob->rcosts_ ; double *acts = prob->acts_ ; double *rowduals = prob->rowduals_ ; double *dcost = prob->cost_ ; //const double maxmin = prob->maxmin_ ; unsigned char *colstat = prob->colstat_ ; // unsigned char *rowstat = prob->rowstat_ ; # if PRESOLVE_DEBUG char *rdone = prob->rdone_ ; std::cout << "Entering slack_singleton_action::postsolve." << std::endl ; presolve_check_sol(prob) ; presolve_check_nbasic(prob) ; # endif CoinBigIndex &free_list = prob->free_list_ ; const double ztolzb = prob->ztolzb_ ; #ifdef CHECK_ONE_ROW { double act=0.0 ; for (int i=0;incols_;i++) { double solV = sol[i] ; assert (solV>=clo[i]-ztolzb&&solV<=cup[i]+ztolzb) ; int j=mcstrt[i] ; for (int k=0;k=rlo[CHECK_ONE_ROW]-ztolzb&&act<=rup[CHECK_ONE_ROW]+ztolzb) ; printf("start %g %g %g %g\n",rlo[CHECK_ONE_ROW],act,acts[CHECK_ONE_ROW],rup[CHECK_ONE_ROW]) ; } #endif for (const action *f = &actions[nactions-1]; actions<=f; f--) { int iRow = f->row ; double lo0 = f->clo ; double up0 = f->cup ; double coeff = f->coeff ; int iCol = f->col ; assert (!hincol[iCol]) ; #ifdef CHECK_ONE_ROW if (iRow==CHECK_ONE_ROW) printf("Col %d coeff %g old bounds %g,%g new %g,%g - new rhs %g,%g - act %g\n", iCol,coeff,clo[iCol],cup[iCol],lo0,up0,f->rlo,f->rup,acts[CHECK_ONE_ROW]) ; #endif rlo[iRow] = f->rlo ; rup[iRow] = f->rup ; clo[iCol] = lo0 ; cup[iCol] = up0 ; double movement=0.0 ; // acts was without coefficient - adjust acts[iRow] += coeff*sol[iCol] ; if (acts[iRow]rup[iRow]+ztolzb) movement = rup[iRow]-acts[iRow] ; double cMove = movement/coeff ; sol[iCol] += cMove ; acts[iRow] += movement ; if (!dcost[iCol]) { // and to get column feasible cMove=0.0 ; if (sol[iCol]>cup[iCol]+ztolzb) cMove = cup[iCol]-sol[iCol] ; else if (sol[iCol]columnIsBasic(iCol)) numberBasic++ ; if (prob->rowIsBasic(iRow)) numberBasic++ ; #ifdef COIN_DEVELOP if (numberBasic>1) printf("odd in singleton\n") ; #endif if (sol[iCol]>clo[iCol]+ztolzb&&sol[iCol]setColumnStatus(iCol,CoinPrePostsolveMatrix::basic) ; prob->setRowStatusUsingValue(iRow) ; } else if (acts[iRow]>rlo[iRow]+ztolzb&&acts[iRow]setRowStatus(iRow,CoinPrePostsolveMatrix::basic) ; prob->setColumnStatusUsingValue(iCol) ; } else if (numberBasic) { prob->setRowStatus(iRow,CoinPrePostsolveMatrix::basic) ; prob->setColumnStatusUsingValue(iCol) ; } else { prob->setRowStatusUsingValue(iRow) ; prob->setColumnStatusUsingValue(iCol) ; } } # if PRESOLVE_DEBUG > 1 printf("SLKSING: %d = %g restored %d lb = %g ub = %g.\n", iCol,sol[iCol],prob->getColumnStatus(iCol),clo[iCol],cup[iCol]) ; # endif } else { // must have been equality row assert (rlo[iRow]==rup[iRow]) ; double cost = rcosts[iCol] ; // adjust for coefficient cost -= rowduals[iRow]*coeff ; bool basic=true ; if (fabs(sol[iCol]-cup[iCol])1.0e-6) basic=false ; //printf("Singleton %d had coeff of %g in row %d (dual %g) - bounds %g %g - cost %g, (dj %g)\n", // iCol,coeff,iRow,rowduals[iRow],clo[iCol],cup[iCol],dcost[iCol],rcosts[iCol]) ; //if (prob->columnIsBasic(iCol)) //printf("column basic! ") ; //if (prob->rowIsBasic(iRow)) //printf("row basic ") ; //printf("- make column basic %s\n",basic ? "yes" : "no") ; if (basic&&!prob->rowIsBasic(iRow)) { #ifdef PRINTCOST printf("Singleton %d had coeff of %g in row %d (dual %g) - bounds %g %g - cost %g, (dj %g - new %g)\n", iCol,coeff,iRow,rowduals[iRow],clo[iCol],cup[iCol],dcost[iCol],rcosts[iCol],cost) ; #endif #ifdef COIN_DEVELOP if (prob->columnIsBasic(iCol)) printf("column basic!\n") ; #endif basic=false ; } if (fabs(rowduals[iRow])>1.0e-6&&prob->rowIsBasic(iRow)) basic=true ; if (basic) { // Make basic have zero reduced cost rowduals[iRow] = rcosts[iCol] / coeff ; rcosts[iCol] = 0.0 ; } else { rcosts[iCol]=cost ; //rowduals[iRow]=0.0 ; } if (colstat) { if (basic) { if (!prob->rowIsBasic(iRow)) { #if 0 // find column in row int jCol=-1 ; //for (CoinBigIndex j=mrstrt[iRow];jncols0_;k++) { CoinBigIndex j=mcstrt[k] ; for (int i=0;isetColumnStatus(iCol,CoinPrePostsolveMatrix::basic) ; } prob->setRowStatusUsingValue(iRow) ; } else { //prob->setRowStatus(iRow,CoinPrePostsolveMatrix::basic) ; prob->setColumnStatusUsingValue(iCol) ; } } } #if 0 int nb=0 ; int kk ; for (kk=0;kknrows_;kk++) if (prob->rowIsBasic(kk)) nb++ ; for (kk=0;kkncols_;kk++) if (prob->columnIsBasic(kk)) nb++ ; assert (nb==prob->nrows_) ; #endif // add new element { CoinBigIndex k = free_list ; assert(k >= 0 && k < prob->bulk0_) ; free_list = link[free_list] ; hrow[k] = iRow ; colels[k] = coeff ; link[k] = mcstrt[iCol] ; mcstrt[iCol] = k ; } hincol[iCol]++; // right? #ifdef CHECK_ONE_ROW { double act=0.0 ; for (int i=0;incols_;i++) { double solV = sol[i] ; assert (solV>=clo[i]-ztolzb&&solV<=cup[i]+ztolzb) ; int j=mcstrt[i] ; for (int k=0;k=rlo[CHECK_ONE_ROW]-ztolzb&&act<=rup[CHECK_ONE_ROW]+ztolzb) ; printf("rhs now %g %g %g %g\n",rlo[CHECK_ONE_ROW],act,acts[CHECK_ONE_ROW],rup[CHECK_ONE_ROW]) ; } #endif # if PRESOLVE_DEBUG rdone[iRow] = SLACK_SINGLETON ; # endif } # if PRESOLVE_DEBUG presolve_check_sol(prob) ; presolve_check_nbasic(prob) ; std::cout << "Leaving slack_singleton_action::postsolve." << std::endl ; # endif return ; } CoinUtils-2.9.10/CoinUtils/src/CoinPresolveHelperFunctions.cpp0000644000076600007660000003135112054012315023033 0ustar coincoin/* $Id: CoinPresolveHelperFunctions.cpp 1560 2012-11-24 00:29:01Z lou $ */ // 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). /*! \file This file contains helper functions for CoinPresolve. The declarations needed for use are included in CoinPresolveMatrix.hpp. */ #include #include #include #include "CoinHelperFunctions.hpp" #include "CoinPresolveMatrix.hpp" /*! \defgroup PMMDVX Packed Matrix Major Dimension Vector Expansion \brief Functions to help with major-dimension vector expansion in a packed matrix structure. This next block of functions handles the problems associated with expanding a column in a column-major representation or a row in a row-major representation. We need to be able to answer the questions: * Is there room to expand a major vector in place? * Is there sufficient free space at the end of the element and minor index storage areas (bulk storage) to hold the major vector? When the answer to the first question is `no', we need to be able to move the major vector to the free space at the end of bulk storage. When the answer to the second question is `no', we need to be able to compact the major vectors in the bulk storage area in order to regain a block of useable space at the end. presolve_make_memlists initialises a linked list that tracks the position of major vectors in the bulk storage area. It's used to locate physically adjacent vectors. presolve_expand deals with adding a coefficient to a major vector, either in-place or by moving it to free space at the end of the storage areas. There are two inline wrappers, presolve_expand_col and presolve_expand_row, defined in CoinPresolveMatrix.hpp. compact_rep compacts the major vectors in the storage areas to leave a single block of free space at the end. */ //@{ /* This first function doesn't need to be known outside of this file. */ namespace { /* compact_rep This routine compacts the major vectors in the bulk storage area, leaving a single block of free space at the end. The vectors are not reordered, just shifted down to remove gaps. */ void compact_rep (double *elems, int *indices, CoinBigIndex *starts, const int *lengths, int n, const presolvehlink *link) { # if PRESOLVE_SUMMARY printf("****COMPACTING****\n") ; # endif // for now, just look for the first element of the list int i = n ; while (link[i].pre != NO_LINK) i = link[i].pre ; CoinBigIndex j = 0 ; for (; i != n; i = link[i].suc) { CoinBigIndex s = starts[i] ; CoinBigIndex e = starts[i] + lengths[i] ; // because of the way link is organized, j <= s starts[i] = j ; for (CoinBigIndex k = s; k < e; k++) { elems[j] = elems[k] ; indices[j] = indices[k] ; j++ ; } } } } /* end unnamed namespace */ /* \brief Initialise linked list for major vector order in bulk storage Initialise the linked list that will track the order of major vectors in the element and row index bulk storage arrays. When finished, link[j].pre contains the index of the previous non-empty vector in the storage arrays and link[j].suc contains the index of the next non-empty vector. For an empty vector j, link[j].pre = link[j].suc = NO_LINK. If n is the number of major-dimension vectors, link[n] is valid; link[n].pre is the index of the last non-empty vector, and link[n].suc = NO_LINK. This routine makes the implicit assumption that the order of vectors in the storage areas matches the order in starts. (I.e., there's no check that starts[j] > starts[i] for j < i.) */ void presolve_make_memlists (/*CoinBigIndex *starts,*/ int *lengths, presolvehlink *link, int n) { int i ; int pre = NO_LINK ; for (i=0; i= bulkCap) { return (true) ; } } /* The most complicated case --- we need to move k from its current location to empty space at the end of the bulk storage. And we may need to make that! Compaction is identical to the above case. */ else { int lastcol = majlinks[nmaj].pre ; int newkcsx = majstrts[lastcol]+majlens[lastcol] ; int newkcex = newkcsx+majlens[k] ; if (newkcex+1 >= bulkCap) { compact_rep(els,minndxs,majstrts,majlens,nmaj,majlinks) ; kcsx = majstrts[k] ; kcex = kcsx + majlens[k] ; newkcsx = majstrts[lastcol]+majlens[lastcol] ; newkcex = newkcsx+majlens[k] ; if (newkcex+1 >= bulkCap) { return (true) ; } } /* Moving the vector requires three actions. First we move the data, then update the packed matrix vector start, then relink the storage order list, */ memcpy(reinterpret_cast(&minndxs[newkcsx]), reinterpret_cast(&minndxs[kcsx]),majlens[k]*sizeof(int)) ; memcpy(reinterpret_cast(&els[newkcsx]), reinterpret_cast(&els[kcsx]),majlens[k]*sizeof(double)) ; majstrts[k] = newkcsx ; PRESOLVE_REMOVE_LINK(majlinks,k) ; PRESOLVE_INSERT_LINK(majlinks,k,lastcol) ; } /* Success --- the vector has room for one more coefficient. */ return (false) ; } //@} /* Helper function to duplicate a major-dimension vector. */ /* A major-dimension vector is composed of paired element and minor index arrays. We want to duplicate length entries from both arrays, starting at offset. If tgt > 0, we'll run a more complicated copy loop which will elide the entry with minor index == tgt. In this case, we want to reduce the size of the allocated array by 1. Pigs will fly before sizeof(int) > sizeof(double), but if it ever happens this code will fail. */ double *presolve_dupmajor (const double *elems, const int *indices, int length, CoinBigIndex offset, int tgt) { int n ; if (tgt >= 0) length-- ; if (2*sizeof(int) <= sizeof(double)) n = (3*length+1)>>1 ; else n = 2*length ; double *dArray = new double [n] ; int *iArray = reinterpret_cast(dArray+length) ; if (tgt < 0) { memcpy(dArray,elems+offset,length*sizeof(double)) ; memcpy(iArray,indices+offset,length*sizeof(int)) ; } else { int korig ; int kcopy = 0 ; indices += offset ; elems += offset ; for (korig = 0 ; korig <= length ; korig++) { int i = indices[korig] ; if (i != tgt) { dArray[kcopy] = elems[korig] ; iArray[kcopy++] = indices[korig] ; } } } return (dArray) ; } /* Routines to find the position of the entry for a given minor index in a major vector. Inline wrappers with column-major and row-major parameter names are defined in CoinPresolveMatrix.hpp. The threaded matrix used in postsolve exists only as a column-major form, so only one wrapper is defined. */ /* presolve_find_minor Find the position (k) of the entry for a given minor index (tgt) within the range of entries for a major vector (ks, ke). Print a tag and abort (DIE) if there's no entry for tgt. */ #if 0 CoinBigIndex presolve_find_minor (int tgt, CoinBigIndex ks, CoinBigIndex ke, const int *minndxs) { CoinBigIndex k ; for (k = ks ; k < ke ; k++) { if (minndxs[k] == tgt) return (k) ; } DIE("FIND_MINOR") ; abort () ; return -1; } #endif /* As presolve_find_minor, but return a position one past the end of the major vector when the entry is not already present. */ CoinBigIndex presolve_find_minor1 (int tgt, CoinBigIndex ks, CoinBigIndex ke, const int *minndxs) { CoinBigIndex k ; for (k = ks ; k < ke ; k++) { if (minndxs[k] == tgt) return (k) ; } return (k) ; } /* In a threaded matrix, the major vector does not occupy a contiguous block in the bulk storage area. For example, in a threaded column-major matrix, if a is in pos'n kp of hrow, the next coefficient a will be in pos'n kq = link[kp]. Abort if we don't find it. */ CoinBigIndex presolve_find_minor2 (int tgt, CoinBigIndex ks, int majlen, const int *minndxs, const CoinBigIndex *majlinks) { for (int i = 0 ; i < majlen ; ++i) { if (minndxs[ks] == tgt) return (ks) ; ks = majlinks[ks] ; } DIE("FIND_MINOR2") ; abort () ; return -1; } /* As presolve_find_minor2, but return -1 if the entry is missing */ CoinBigIndex presolve_find_minor3 (int tgt, CoinBigIndex ks, int majlen, const int *minndxs, const CoinBigIndex *majlinks) { for (int i = 0 ; i < majlen ; ++i) { if (minndxs[ks] == tgt) return (ks) ; ks = majlinks[ks] ; } return (-1) ; } /* Delete the entry for a minor index from a major vector. The last entry in the major vector is moved into the hole left by the deleted entry. This leaves some space between the end of this major vector and the start of the next in the bulk storage areas (this is termed loosely packed). Inline wrappers with column-major and row-major parameter names are defined in CoinPresolveMatrix.hpp. The threaded matrix used in postsolve exists only as a column-major form, so only one wrapper is defined. */ #if 0 void presolve_delete_from_major (int majndx, int minndx, const CoinBigIndex *majstrts, int *majlens, int *minndxs, double *els) { CoinBigIndex ks = majstrts[majndx] ; CoinBigIndex ke = ks + majlens[majndx] ; CoinBigIndex kmi = presolve_find_minor(minndx,ks,ke,minndxs) ; minndxs[kmi] = minndxs[ke-1] ; els[kmi] = els[ke-1] ; majlens[majndx]-- ; return ; } // Delete all marked and zero marked void presolve_delete_many_from_major (int majndx, char * marked, const CoinBigIndex *majstrts, int *majlens, int *minndxs, double *els) { CoinBigIndex ks = majstrts[majndx] ; CoinBigIndex ke = ks + majlens[majndx] ; CoinBigIndex put=ks; for (CoinBigIndex k=ks;k= 0) ; return ; } CoinUtils-2.9.10/CoinUtils/src/CoinPresolveIsolated.cpp0000644000076600007660000001157211510461170021475 0ustar coincoin/* $Id: CoinPresolveIsolated.cpp 1373 2011-01-03 23:57:44Z lou $ */ // 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). #include #include #include "CoinPresolveMatrix.hpp" #include "CoinPresolveIsolated.hpp" #include "CoinHelperFunctions.hpp" #if PRESOLVE_DEBUG || PRESOLVE_CONSISTENCY #include "CoinPresolvePsdebug.hpp" #endif // Rarely, there may a constraint whose variables only // occur in that constraint. // In this case it is a completely independent problem. // We should be able to solve it right now. // Since that is actually not trivial, I'm just going to ignore // them and stick them back in at postsolve. const CoinPresolveAction *isolated_constraint_action::presolve(CoinPresolveMatrix *prob, int irow, const CoinPresolveAction *next) { int *hincol = prob->hincol_; const CoinBigIndex *mcstrt = prob->mcstrt_; int *hrow = prob->hrow_; double *colels = prob->colels_; double *clo = prob->clo_; double *cup = prob->cup_; const double *rowels = prob->rowels_; const int *hcol = prob->hcol_; const CoinBigIndex *mrstrt = prob->mrstrt_; // may be written by useless constraint int *hinrow = prob->hinrow_; double *rlo = prob->rlo_; double *rup = prob->rup_; CoinBigIndex krs = mrstrt[irow]; CoinBigIndex kre = krs + hinrow[irow]; double *dcost = prob->cost_; const double maxmin = prob->maxmin_; # if PRESOLVE_DEBUG { printf("ISOLATED: %d - ", irow); CoinBigIndex k; for ( k = krs; k 0.0 && clo[jcol] != 0.0) || (maxmin*dcost[jcol] < 0.0 && cup[jcol] != 0.0) ){ # if PRESOLVE_DEBUG printf("can't handle non-trivial isolated constraints for now\n"); # endif return NULL; } } int nc = hinrow[irow]; #if 0 double tableau = new double[nc]; double sol = new double[nc]; double clo = new double[nc]; double cup = new double[nc]; for (int i=0; iclo[krs+i]; cup[i] = prob->cup[krs+i]; sol[i] = clo[i]; } #endif // HACK - set costs to 0.0 so empty.cpp doesn't complain double *costs = new double[nc]; for (k = krs; kclink_,hcol[k]) ; } } hinrow[irow] = 0 ; PRESOLVE_REMOVE_LINK(prob->rlink_,irow) ; // just to make things squeeky rlo[irow] = 0.0; rup[irow] = 0.0; # if CHECK_CONSISTENCY presolve_links_ok(prob) ; presolve_consistent(prob); # endif return (next); } const char *isolated_constraint_action::name() const { return ("isolated_constraint_action"); } void isolated_constraint_action::postsolve(CoinPostsolveMatrix *prob) const { double *colels = prob->colels_; int *hrow = prob->hrow_; CoinBigIndex *mcstrt = prob->mcstrt_; int *link = prob->link_; int *hincol = prob->hincol_; double *rowduals = prob->rowduals_; double *rowacts = prob->acts_; double *sol = prob->sol_; CoinBigIndex &free_list = prob->free_list_; // hides fields double *rlo = prob->rlo_; double *rup = prob->rup_; double rowact = 0.0; int irow = this->row_; rup[irow] = this->rup_; rlo[irow] = this->rlo_; int k; for (k=0; kninrow_; k++) { int jcol = this->rowcols_[k]; sol[jcol] = 0.0; // ONLY ACCEPTED SUCH CONSTRAINTS CoinBigIndex kk = free_list; assert(kk >= 0 && kk < prob->bulk0_) ; free_list = link[free_list]; mcstrt[jcol] = kk; //rowact += rowels[k] * sol[jcol]; colels[kk] = this->rowels_[k]; hrow[kk] = irow; link[kk] = NO_LINK ; hincol[jcol] = 1; } # if PRESOLVE_CONSISTENCY presolve_check_free_list(prob) ; # endif // ??? prob->setRowStatus(irow,CoinPrePostsolveMatrix::basic); rowduals[irow] = 0.0; rowacts[irow] = rowact; // leave until desctructor // deleteAction(rowcols_,int *); // deleteAction(rowels_,double *); // deleteAction(costs_,double *); } isolated_constraint_action::~isolated_constraint_action() { deleteAction(rowcols_,int *); deleteAction(rowels_,double *); deleteAction(costs_,double *); } CoinUtils-2.9.10/CoinUtils/src/CoinOslFactorization2.cpp0000644000076600007660000032702212130104232021555 0ustar coincoin/* $Id: CoinOslFactorization2.cpp 1585 2013-04-06 20:42:02Z stefan $ */ /* Copyright (C) 1987, 2009, International Business Machines Corporation and others. All Rights Reserved. This code is licensed under the terms of the Eclipse Public License (EPL). */ /* CLP_OSL - if defined use osl 0 - don't unroll 2 and 3 - don't use in Gomory 1 - don't unroll - do use in Gomory 2 - unroll - don't use in Gomory 3 - unroll and use in Gomory */ #include "CoinOslFactorization.hpp" #include "CoinOslC.h" #include "CoinFinite.hpp" #ifndef NDEBUG extern int ets_count; extern int ets_check; #endif #define COIN_REGISTER register #define COIN_REGISTER2 #define COIN_REGISTER3 register #ifdef COIN_USE_RESTRICT # define COIN_RESTRICT2 __restrict #else # define COIN_RESTRICT2 #endif static int c_ekkshfpo_scan2zero(COIN_REGISTER const EKKfactinfo * COIN_RESTRICT2 fact,const int * COIN_RESTRICT mpermu, double *COIN_RESTRICT worki, double *COIN_RESTRICT worko, int * COIN_RESTRICT mptr) { /* Local variables */ int irow; double tolerance = fact->zeroTolerance; int nin=fact->nrow; int * COIN_RESTRICT mptrX=mptr; if ((nin&1)!=0) { irow=1; if (fact->packedMode) { int irow0= *mpermu; double dval; assert (irow0>=1&&irow0<=nin); mpermu++; dval=worki[irow0]; if (NOT_ZERO(dval)) { worki[irow0]=0.0; if (fabs(dval) >= tolerance) { *(worko++)=dval; *(mptrX++) = 0; } } } else { int irow0= *mpermu; double dval; assert (irow0>=1&&irow0<=nin); mpermu++; dval=worki[irow0]; if (NOT_ZERO(dval)) { worki[irow0]=0.0; if (fabs(dval) >= tolerance) { *worko=dval; *(mptrX++) = 0; } } worko++; } } else { irow=0; } if (fact->packedMode) { for (; irow < nin; irow+=2) { int irow0,irow1; double dval0,dval1; irow0=mpermu[0]; irow1=mpermu[1]; assert (irow0>=1&&irow0<=nin); assert (irow1>=1&&irow1<=nin); dval0=worki[irow0]; dval1=worki[irow1]; if (NOT_ZERO(dval0)) { worki[irow0]=0.0; if (fabs(dval0) >= tolerance) { *(worko++)=dval0; *(mptrX++) = irow+0; } } if (NOT_ZERO(dval1)) { worki[irow1]=0.0; if (fabs(dval1) >= tolerance) { *(worko++)=dval1; *(mptrX++) = irow+1; } } mpermu+=2; } } else { for (; irow < nin; irow+=2) { int irow0,irow1; double dval0,dval1; irow0=mpermu[0]; irow1=mpermu[1]; assert (irow0>=1&&irow0<=nin); assert (irow1>=1&&irow1<=nin); dval0=worki[irow0]; dval1=worki[irow1]; if (NOT_ZERO(dval0)) { worki[irow0]=0.0; if (fabs(dval0) >= tolerance) { worko[0]=dval0; *(mptrX++) = irow+0; } } if (NOT_ZERO(dval1)) { worki[irow1]=0.0; if (fabs(dval1) >= tolerance) { worko[1]=dval1; *(mptrX++) = irow+1; } } mpermu+=2; worko+=2; } } return static_cast(mptrX-mptr); } /* * c_ekkshfpi_list executes the following loop: * * for (k=nincol, i=1; k; k--, i++) { * int ipt = mptr[i]; * int irow = mpermu[ipt]; * worko[mpermu[irow]] = worki[i]; * worki[i] = 0.0; * } */ static int c_ekkshfpi_list(const int *COIN_RESTRICT mpermu, double *COIN_RESTRICT worki, double *COIN_RESTRICT worko, const int * COIN_RESTRICT mptr, int nincol, int * lastNonZero) { int i,k,irow0,irow1; int first=COIN_INT_MAX; int last=0; /* worko was zeroed out outside */ k = nincol; i = 0; if ((k&1)!=0) { int ipt=mptr[i]; irow0=mpermu[ipt]; first = CoinMin(irow0,first); last = CoinMax(irow0,last); i++; worko[irow0]=*worki; *worki++=0.0; } k=k>>1; for (; k; k--) { int ipt0 = mptr[i]; int ipt1 = mptr[i+1]; irow0 = mpermu[ipt0]; irow1 = mpermu[ipt1]; i+=2; first = CoinMin(irow0,first); last = CoinMax(irow0,last); first = CoinMin(irow1,first); last = CoinMax(irow1,last); worko[irow0] = worki[0]; worko[irow1] = worki[1]; worki[0]=0.0; worki[1]=0.0; worki+=2; } *lastNonZero=last; return first; } /* * c_ekkshfpi_list2 executes the following loop: * * for (k=nincol, i=1; k; k--, i++) { * int ipt = mptr[i]; * int irow = mpermu[ipt]; * worko[mpermu[irow]] = worki[ipt]; * worki[ipt] = 0.0; * } */ static int c_ekkshfpi_list2(const int *COIN_RESTRICT mpermu, double *COIN_RESTRICT worki, double *COIN_RESTRICT worko, const int * COIN_RESTRICT mptr, int nincol, int * lastNonZero) { #if 1 int i,k,irow0,irow1; int first=COIN_INT_MAX; int last=0; /* worko was zeroed out outside */ k = nincol; i = 0; if ((k&1)!=0) { int ipt=mptr[i]; irow0=mpermu[ipt]; first = CoinMin(irow0,first); last = CoinMax(irow0,last); i++; worko[irow0]=worki[ipt]; worki[ipt]=0.0; } k=k>>1; for (; k; k--) { int ipt0 = mptr[i]; int ipt1 = mptr[i+1]; irow0 = mpermu[ipt0]; irow1 = mpermu[ipt1]; i+=2; first = CoinMin(irow0,first); last = CoinMax(irow0,last); first = CoinMin(irow1,first); last = CoinMax(irow1,last); worko[irow0] = worki[ipt0]; worko[irow1] = worki[ipt1]; worki[ipt0]=0.0; worki[ipt1]=0.0; } #else int first=COIN_INT_MAX; int last=0; /* worko was zeroed out outside */ for (int i=0; i>1; for (; k; k--) { int ipt0 = mptr[i]; int ipt1 = mptr[i+1]; irow0 = mpermu[ipt0]; irow1 = mpermu[ipt1]; mptr[i] = irow0; mptr[i+1] = irow1; i+=2; worko[irow0] = worki[0]; worko[irow1] = worki[1]; worki[0]=0.0; worki[1]=0.0; worki+=2; } } static int c_ekkscmv(COIN_REGISTER const EKKfactinfo * COIN_RESTRICT2 fact,int n, double *COIN_RESTRICT dwork, int *COIN_RESTRICT mptr, double *COIN_RESTRICT dwork2) { double tolerance = fact->zeroTolerance; int irow; const int * COIN_RESTRICT mptrsave = mptr; double * COIN_RESTRICT dwhere = dwork+1; if ((n&1)!=0) { if (NOT_ZERO(*dwhere)) { if (fabs(*dwhere) >= tolerance) { *++dwork2 = *dwhere; *++mptr = SHIFT_INDEX(1); } else { *dwhere = 0.0; } } dwhere++; irow=2; } else { irow=1; } for (n=n>>1;n;n--) { int second = NOT_ZERO(*(dwhere+1)); if (NOT_ZERO(*dwhere)) { if (fabs(*dwhere) >= tolerance) { *++dwork2 = *dwhere; *++mptr = SHIFT_INDEX(irow); } else { *dwhere = 0.0; } } if (second) { if (fabs(*(dwhere+1)) >= tolerance) { *++dwork2 = *(dwhere+1); *++mptr = SHIFT_INDEX(irow+1); } else { *(dwhere+1) = 0.0; } } dwhere+=2; irow+=2; } return static_cast(mptr-mptrsave); } /* c_ekkscmv */ double c_ekkputl(const EKKfactinfo * COIN_RESTRICT2 fact, const int *COIN_RESTRICT mpt2, double *COIN_RESTRICT dwork1, double del3, int nincol, int nuspik) { double * COIN_RESTRICT dwork3 = fact->xeeadr+fact->nnentu; int * COIN_RESTRICT hrowi = fact->xeradr+fact->nnentu; int offset = fact->R_etas_start[fact->nR_etas+1]; int *COIN_RESTRICT hrowiR = fact->R_etas_index+offset; double *COIN_RESTRICT dluval = fact->R_etas_element+offset; int i, j; /* dwork1 is r', the new R transform * dwork3 is the updated incoming column, alpha_p * del3 apparently has the pivot of the incoming column (???). * Here, we compute the p'th element of R^-1 alpha_p * (as described on p. 273), which is just a dot product. * I don't know why we subtract. */ for (i = 1; i <= nuspik; ++i) { j = UNSHIFT_INDEX(hrowi[ i]); del3 -= dwork3[i] * dwork1[j]; } /* here we finally copy the r' to where we want it, the end */ /* also take into account that the p'th row of R^-1 is -(p'th row of R). */ /* also zero out dwork1 as we go */ for (i = 0; i < nincol; ++i) { j = mpt2[i]; hrowiR[ - i ] = SHIFT_INDEX(j); dluval[ - i ] = -dwork1[j]; dwork1[j] = 0.; } return del3; } /* c_ekkputl */ /* making this static seems to slow code down! may be being inlined */ int c_ekkputl2( const EKKfactinfo * COIN_RESTRICT2 fact, double *COIN_RESTRICT dwork1, double *del3p, int nuspik) { double * COIN_RESTRICT dwork3 = fact->xeeadr+fact->nnentu; int * COIN_RESTRICT hrowi = fact->xeradr+fact->nnentu; int offset = fact->R_etas_start[fact->nR_etas+1]; int *COIN_RESTRICT hrowiR = fact->R_etas_index+offset; double *COIN_RESTRICT dluval = fact->R_etas_element+offset; int i, j; #if 0 int nincol=c_ekksczr(fact,fact->nrow,dwork1,hrowiR); #else int nrow=fact->nrow; const double tolerance = fact->zeroTolerance; int * COIN_RESTRICT mptrX=hrowiR; for (i = 1; i <= nrow; ++i) { if (dwork1[i] != 0.) { if (fabs(dwork1[i]) >= tolerance) { *(mptrX--) = SHIFT_INDEX(i); } else { dwork1[i] = 0.0; } } } int nincol=static_cast(hrowiR-mptrX); #endif double del3 = *del3p; /* dwork1 is r', the new R transform * dwork3 is the updated incoming column, alpha_p * del3 apparently has the pivot of the incoming column (???). * Here, we compute the p'th element of R^-1 alpha_p * (as described on p. 273), which is just a dot product. * I don't know why we subtract. */ for (i = 1; i <= nuspik; ++i) { j = UNSHIFT_INDEX(hrowi[ i]); del3 -= dwork3[i] * dwork1[j]; } /* here we finally copy the r' to where we want it, the end */ /* also take into account that the p'th row of R^-1 is -(p'th row of R). */ /* also zero out dwork1 as we go */ for (i = 0; i < nincol; ++i) { j = UNSHIFT_INDEX(hrowiR[-i]); dluval[ - i ] = -dwork1[j]; dwork1[j] = 0.; } *del3p = del3; return nincol; } /* c_ekkputl */ static void c_ekkbtj4p_no_dense(const int nrow,const double * COIN_RESTRICT dluval, const int * COIN_RESTRICT hrowi, const int * COIN_RESTRICT mcstrt, double * COIN_RESTRICT dwork1, int ndo,int jpiv) { int i; double dv1; int iel; int irow; int i1,i2; /* count down to first nonzero */ for (i=nrow;i >=1;i--) { if (dwork1[i]) { break; } } i--; /* as pivot is just 1.0 */ if (i>ndo+jpiv) { i=ndo+jpiv; } mcstrt -= jpiv; i2=mcstrt[i+1]; for (; i > jpiv; --i) { double dv1b=0.0; int nel; i1 = mcstrt[i]; nel= i1-i2; dv1 = dwork1[i]; iel=i2; if ((nel&1)!=0) { irow = hrowi[iel]; dv1b = SHIFT_REF(dwork1, irow) * dluval[iel]; iel++; } for ( ; iel < i1; iel+=2) { int irow = hrowi[iel]; int irowb = hrowi[iel+1]; dv1 += SHIFT_REF(dwork1, irow) * dluval[iel]; dv1b += SHIFT_REF(dwork1, irowb) * dluval[iel+1]; } i2=i1; dwork1[i] = dv1+dv1b; } } /* c_ekkbtj4 */ static int c_ekkbtj4p_dense(const int nrow,const double * COIN_RESTRICT dluval, const int * COIN_RESTRICT hrowi, const int * COIN_RESTRICT mcstrt, double * COIN_RESTRICT dwork1, int ndenuc, int ndo,int jpiv) { int i; int i2; int last=ndo-ndenuc+1; double * COIN_RESTRICT densew = &dwork1[nrow-1]; int nincol=0; const double * COIN_RESTRICT dlu1; dluval--; hrowi--; /* count down to first nonzero */ for (i=nrow;i >=1;i--) { if (dwork1[i]) { break; } } if (ilast; i-=2) { int k; double dv1,dv2; const double * COIN_RESTRICT dlu2; dv1=densew[1]; dlu2=dlu1+nincol; dv2=densew[0]; for (k=0;k jpiv+1; i-=2) { int i1 = mcstrt[i]; double dv1 = dwork1[i]; double dv2; for (; iel < i1; iel++) { int irow = hrowi[iel]; dv1 += SHIFT_REF(dwork1, irow) * dluval[iel]; } i1 = mcstrt[i-1]; dv2 = dwork1[i-1]; dwork1[i] = dv1; for (; iel < i1; iel++) { int irow = hrowi[iel]; dv2 += SHIFT_REF(dwork1, irow) * dluval[iel]; } dwork1[i-1] = dv2; } if (i>jpiv) { int i1 = mcstrt[i]; double dv1 = dwork1[i]; for (; iel < i1; iel++) { int irow = hrowi[iel]; dv1 += SHIFT_REF(dwork1, irow) * dluval[iel]; } dwork1[i] = dv1; } } static void c_ekkbtj4p(COIN_REGISTER const EKKfactinfo * COIN_RESTRICT2 fact, double * COIN_RESTRICT dwork1) { int lstart=fact->lstart; const int * COIN_RESTRICT hpivco = fact->kcpadr; const double * COIN_RESTRICT dluval = fact->xeeadr+1; const int * COIN_RESTRICT hrowi = fact->xeradr+1; const int * COIN_RESTRICT mcstrt = fact->xcsadr+lstart-1; int jpiv=hpivco[lstart]-1; int ndo=fact->xnetalval; /* see if dense enough to unroll */ if (fact->ndenuc<5) { c_ekkbtj4p_no_dense(fact->nrow,dluval,hrowi,mcstrt,dwork1,ndo,jpiv); } else { int i = c_ekkbtj4p_dense(fact->nrow,dluval,hrowi,mcstrt,dwork1, fact->ndenuc, ndo,jpiv); c_ekkbtj4p_after_dense(dluval,hrowi,mcstrt,dwork1,i,jpiv); } } /* c_ekkbtj4p */ static int c_ekkbtj4_sparse(COIN_REGISTER2 const EKKfactinfo * COIN_RESTRICT2 fact, double * COIN_RESTRICT dwork1, int * COIN_RESTRICT mpt, /* C style */ double * COIN_RESTRICT dworko, int nincol, int * COIN_RESTRICT spare) { const int nrow = fact->nrow; const int * COIN_RESTRICT hcoli = fact->xecadr; const int * COIN_RESTRICT mrstrt = fact->xrsadr+nrow; char * COIN_RESTRICT nonzero = fact->nonzero; const int * COIN_RESTRICT hpivro = fact->krpadr; const double * COIN_RESTRICT de2val = fact->xe2adr-1; double tolerance = fact->zeroTolerance; double dv; int iel; int k,nStack,kx; int nList=0; int * COIN_RESTRICT list = spare; int * COIN_RESTRICT stack = spare+nrow; int * COIN_RESTRICT next = stack+nrow; int iPivot,kPivot; int iput,nput=0,kput=nrow; int j; int firstDoRow=fact->firstDoRow; for (k=0;k=firstDoRow) { stack[0]=iPivot; next[0]=mrstrt[iPivot]; while (nStack) { /* take off stack */ kPivot=stack[--nStack]; if (nonzero[kPivot]!=1&&kPivot>=firstDoRow) { j=next[nStack]; if (j==mrstrt[kPivot+1]) { /* finished so mark */ list[nList++]=kPivot; nonzero[kPivot]=1; } else { kPivot=hcoli[j]; /* put back on stack */ next[nStack++] ++; if (!nonzero[kPivot]) { /* and new one */ stack[nStack]=kPivot; nonzero[kPivot]=2; next[nStack++]=mrstrt[kPivot]; } } } else if (kPivotpackedMode) { dworko++; for (k=nList-1;k>=0;k--) { double dv; iPivot = list[k]; dv = dwork1[iPivot]; dwork1[iPivot]=0.0; nonzero[iPivot]=0; if (fabs(dv) > tolerance) { iput=hpivro[iPivot]; kx=mrstrt[iPivot]; dworko[nput]=dv; for (iel = kx; iel < mrstrt[iPivot+1]; iel++) { double dval; int irow = hcoli[iel]; dval=de2val[iel]; dwork1[irow] += dv*dval; } mpt[nput++]=iput-1; } else { dwork1[iPivot]=0.0; /* force to zero, not just near zero */ } } /* check remainder */ for (k=kput;k tolerance) { dworko[nput]=dv; mpt[nput++]=iput-1; } } } else { /* not packed */ for (k=nList-1;k>=0;k--) { double dv; iPivot = list[k]; dv = dwork1[iPivot]; dwork1[iPivot]=0.0; nonzero[iPivot]=0; if (fabs(dv) > tolerance) { iput=hpivro[iPivot]; kx=mrstrt[iPivot]; dworko[iput]=dv; for (iel = kx; iel < mrstrt[iPivot+1]; iel++) { double dval; int irow = hcoli[iel]; dval=de2val[iel]; dwork1[irow] += dv*dval; } mpt[nput++]=iput-1; } else { dwork1[iPivot]=0.0; /* force to zero, not just near zero */ } } /* check remainder */ for (k=kput;k tolerance) { dworko[iput]=dv; mpt[nput++]=iput-1; } } } return (nput); } /* c_ekkbtj4 */ static void c_ekkbtjl(COIN_REGISTER2 const EKKfactinfo * COIN_RESTRICT2 fact, double * COIN_RESTRICT dwork1) { int i, j, k, k1; int l1; const double * COIN_RESTRICT dluval = fact->R_etas_element; const int * COIN_RESTRICT hrowi = fact->R_etas_index; const int * COIN_RESTRICT mcstrt = fact->R_etas_start; const int * COIN_RESTRICT hpivco = fact->hpivcoR; int ndo=fact->nR_etas; #ifndef UNROLL1 #define UNROLL1 4 #endif #if UNROLL1>2 int l2; #endif int kn; double dv; int iel; int ipiv; int knext; knext = mcstrt[ndo + 1]; #if UNROLL1>2 for (i = ndo; i > 0; --i) { k1 = knext; knext = mcstrt[i]; ipiv = hpivco[i]; dv = dwork1[ipiv]; /* fast floating */ k = knext - k1; kn = k >> 2; iel = k1 + 1; if (dv != 0.) { l1 = (k & 1) != 0; l2 = (k & 2) != 0; for (j = 1; j <= kn; j++) { int irow0 = hrowi[iel + 0]; int irow1 = hrowi[iel + 1]; int irow2 = hrowi[iel + 2]; int irow3 = hrowi[iel + 3]; double dval0 = dv * dluval[iel + 0] + SHIFT_REF(dwork1, irow0); double dval1 = dv * dluval[iel + 1] + SHIFT_REF(dwork1, irow1); double dval2 = dv * dluval[iel + 2] + SHIFT_REF(dwork1, irow2); double dval3 = dv * dluval[iel + 3] + SHIFT_REF(dwork1, irow3); SHIFT_REF(dwork1, irow0) = dval0; SHIFT_REF(dwork1, irow1) = dval1; SHIFT_REF(dwork1, irow2) = dval2; SHIFT_REF(dwork1, irow3) = dval3; iel+=4; } if (l1) { int irow0 = hrowi[iel]; SHIFT_REF(dwork1, irow0) += dv* dluval[iel]; ++iel; } if (l2) { int irow0 = hrowi[iel + 0]; int irow1 = hrowi[iel + 1]; SHIFT_REF(dwork1, irow0) += dv* dluval[iel]; SHIFT_REF(dwork1, irow1) += dv* dluval[iel+1]; } } } #else for (i = ndo; i > 0; --i) { k1 = knext; knext = mcstrt[i]; ipiv = hpivco[i]; dv = dwork1[ipiv]; k = knext - k1; kn = k >> 1; iel = k1 + 1; if (dv != 0.) { l1 = (k & 1) != 0; for (j = 1; j <= kn; j++) { int irow0 = hrowi[iel + 0]; int irow1 = hrowi[iel + 1]; double dval0 = dv * dluval[iel + 0] + SHIFT_REF(dwork1, irow0); double dval1 = dv * dluval[iel + 1] + SHIFT_REF(dwork1, irow1); SHIFT_REF(dwork1, irow0) = dval0; SHIFT_REF(dwork1, irow1) = dval1; iel+=2; } if (l1) { int irow0 = hrowi[iel]; SHIFT_REF(dwork1, irow0) += dv* dluval[iel]; ++iel; } } } #endif } /* c_ekkbtjl */ static int c_ekkbtjl_sparse(COIN_REGISTER2 const EKKfactinfo * COIN_RESTRICT2 fact, double * COIN_RESTRICT dwork1, int * COIN_RESTRICT mpt , int nincol) { const double * COIN_RESTRICT dluval = fact->R_etas_element; const int * COIN_RESTRICT hrowi = fact->R_etas_index; const int * COIN_RESTRICT mcstrt = fact->R_etas_start; const int * COIN_RESTRICT hpivco = fact->hpivcoR; char * COIN_RESTRICT nonzero = fact->nonzero; int ndo=fact->nR_etas; int i, j, k1; double dv; int ipiv; int irow0, irow1; int knext; int number=nincol; /* ------------------------------------------- */ /* adjust back */ hrowi++; dluval++; /* DO ANY ROW TRANSFORMATIONS */ /* Function Body */ knext = mcstrt[ndo + 1]; for (i = ndo; i > 0; --i) { k1 = knext; knext = mcstrt[i]; ipiv = hpivco[i]; dv = dwork1[ipiv]; if (dv) { for (j = k1; j 1 const int * hrowi2=hrowi+kx; const int * hrowi2end=hrowi2+nel; const double * dluval2=dluval+kx; #else int iel; #endif const double dpiv = dluval[kx-1]; /* inverse of pivot */ /* subtract terms whose unknowns have been solved for */ /* a significant proportion of these loops may not modify dv at all. * However, it seems to be just as expensive to check if the loop * would modify dv as it is to just do it. * The only difference would be that dluval wouldn't be referenced * for those loops, would might save some cache paging, * but unfortunately the code generated to search for zeros (on AIX) * is *worse* than code that just multiplies by dval. */ #if UNROLL2<2 for (iel = kx; iel < kxe; ++iel) { const int irow = hrowi[iel]; const double dval=dluval[iel]; dv -= SHIFT_REF(dwork1, irow) * dval; } dwork1[ipiv] = dv * dpiv; /* divide by the pivot */ #else if ((nel&1)!=0) { int irow = *hrowi2; double dval=*dluval2; dv -= SHIFT_REF(dwork1, irow) * dval; hrowi2++; dluval2++; } for (; hrowi2 < hrowi2end; hrowi2 +=2,dluval2 +=2) { int irow0 = hrowi2[0]; int irow1 = hrowi2[1]; double dval0=dluval2[0]; double dval1=dluval2[1]; double d0=SHIFT_REF(dwork1, irow0); double d1=SHIFT_REF(dwork1, irow1); dv -= d0 * dval0; dv -= d1 * dval1; } dwork1[ipiv] = dv * dpiv; /* divide by the pivot */ #endif ipiv=hpivco[ipiv]; } return (ipiv); } /* * We are given the upper diagonal matrix U from the LU factorization * and a rhs dwork1. * This solves the system U x = dwork1 * by back substitution, overwriting dwork1 with the solution x. * * It does this in textbook style by solving the equations "bottom" up, * so for each equation one new unknown is solved for by subtracting * from the rhs the sum of the terms whose unknowns have been solved for, * then dividing by the coefficient of the new unknown. * * Since we update the U matrix using F-T, the order of the columns * changes slightly each iteration. Initially, hpivco[i] == i+1, * and each iteration (generally) introduces one element where this * is no longer true. However, because we periodically refactorize, * it is much more common for hpivco[i] == i+1 than not. * * The one quirk is that value referred to as the pivot is actually * the reciprocal of the pivot, to avoid a division. * * Solving in this fashion is inappropriate if there are frequently * cases where all unknowns in an equation have value zero. * This seems to happen frequently if the sparsity of the rhs is, say, 10%. */ static void c_ekkbtju(COIN_REGISTER2 const EKKfactinfo * COIN_RESTRICT2 fact, double * COIN_RESTRICT dwork1, int ipiv) { const int nrow = fact->nrow; double * COIN_RESTRICT dluval = fact->xeeadr; int * COIN_RESTRICT hrowi = fact->xeradr; int * COIN_RESTRICT mcstrt = fact->xcsadr; int * COIN_RESTRICT hpivco_new = fact->kcpadr+1; int ndenuc=fact->ndenuc; int first_dense = fact->first_dense; int last_dense = fact->last_dense; const int has_dense = (first_densek1;j--) { int irow=UNSHIFT_INDEX(hrowi[j]); if (irow (hpivco_new), dwork1,&ipiv,last_dense, n - first_dense, densew); } (void) c_ekkbtju_aux(dluval, hrowi, mcstrt, hpivco_new, dwork1, ipiv, nrow); } /* c_ekkbtju */ /* * mpt / *nincolp contain the indices of nonzeros in dwork1. * nonzero contains the same information as a byte-mask. * * currently, erase_nonzero is true iff this is called from c_ekketsj. */ static int c_ekkbtju_sparse(COIN_REGISTER2 const EKKfactinfo * COIN_RESTRICT2 fact, double * COIN_RESTRICT dwork1, int * COIN_RESTRICT mpt, int nincol, int * COIN_RESTRICT spare) { const double * COIN_RESTRICT dluval = fact->xeeadr+1; const int * COIN_RESTRICT mcstrt = fact->xcsadr; char * COIN_RESTRICT nonzero = fact->nonzero; const int * COIN_RESTRICT hcoli = fact->xecadr; const int * COIN_RESTRICT mrstrt = fact->xrsadr; const int * COIN_RESTRICT hinrow = fact->xrnadr; const double * COIN_RESTRICT de2val = fact->xe2adr-1; int i; int iPivot; int nList=0; int nStack,k,kx; const int nrow=fact->nrow; const double tolerance = fact->zeroTolerance; int * COIN_RESTRICT list = spare; int * COIN_RESTRICT stack = spare+nrow; int * COIN_RESTRICT next = stack+nrow; /* * Examine all nonzero elements and determine which elements may be * nonzero in the result. * Any row in U that contains terms that may have nonzero variable values * may produce a nonzero value. */ for (k=0;k=0;i--) { double dpiv; double dv; iPivot = list[i]; kx = mcstrt[iPivot]; dpiv = dluval[kx-1]; dv = dpiv * dwork1[iPivot]; nonzero[iPivot] = 0; if (fabs(dv)>=tolerance) { int iel; int krx = mrstrt[iPivot]; int krxe = krx+hinrow[iPivot]; dwork1[iPivot]=dv; mpt[nList++]=iPivot; for (iel = krx; iel < krxe; iel++) { int irow0 = hcoli[iel]; double dval=de2val[iel]; dwork1[irow0] -= dv*dval; } } else { dwork1[iPivot]=0.0; } } return (nList); } /* c_ekkbtjuRow */ /* * dpermu is supposed to be zeroed on entry to this routine. * It is used as a working buffer. * The input vector dwork1 is permuted into dpermu, operated on, * and the answer is permuted back into dwork1, zeroing dpermu in * the process. */ /* * nincol > 0 ==> mpt contains indices of non-zeros in dpermu * * first_nonzero contains index of first (last??)nonzero; * only used if nincol==0. * * dpermu contains permuted input; dwork1 is now zero */ int c_ekkbtrn(COIN_REGISTER3 const EKKfactinfo * COIN_RESTRICT2 fact, double * COIN_RESTRICT dwork1, int * COIN_RESTRICT mpt, int first_nonzero) { double * COIN_RESTRICT dpermu = fact->kadrpm; const int * COIN_RESTRICT mpermu=fact->mpermu; const int * COIN_RESTRICT hpivco_new= fact->kcpadr+1; const int nrow = fact->nrow; int i; int nincol; /* find the first non-zero input */ int ipiv; if (first_nonzero) { ipiv = first_nonzero; #if 1 if (c_ekk_IsSet(fact->bitArray,ipiv)) { /* slack */ int lastSlack = fact->lastSlack; int firstDo=hpivco_new[lastSlack]; assert (dpermu[ipiv]); while (ipiv!=firstDo) { assert (c_ekk_IsSet(fact->bitArray,ipiv)); if (dpermu[ipiv]) dpermu[ipiv]=-dpermu[ipiv]; ipiv=hpivco_new[ipiv]; } } #endif } else { int lastSlack = fact->numberSlacks; ipiv=hpivco_new[0]; for (i=0;ibitArray,ipiv)); if (dpermu[ipiv]) { break; } else { ipiv=next_piv; } } /* usually, there is a non-zero slack entry... */ if (i==lastSlack) { /* but if there isn't... */ for (;ibitArray,ipiv)); if (dpermu[ipiv]) dpermu[ipiv]=-dpermu[ipiv]; ipiv=hpivco_new[ipiv]; } assert (!c_ekk_IsSet(fact->bitArray,ipiv)||ipiv>fact->nrow); /* this is presumably the first non-zero non slack */ /*ipiv=firstDo;*/ } } if (ipiv<=fact->nrow) { /* skipBtju is always (?) 0 first the first call, * ipiv tends to be >nrow for the second */ /* DO U */ c_ekkbtju(fact,dpermu, ipiv); } /* DO ROW ETAS IN L */ c_ekkbtjl(fact, dpermu); c_ekkbtj4p(fact,dpermu); /* dwork1[mpermu] = dpermu; dpermu = 0; mpt = indices of non-zeros */ nincol = c_ekkshfpo_scan2zero(fact,&mpermu[1],dpermu,&dwork1[1],&mpt[1]); /* dpermu should be zero now */ #ifdef DEBUG for (i=1;i<=nrow ;i++ ) { if (dpermu[i]) { abort(); } /* endif */ } /* endfor */ #endif return (nincol); } /* c_ekkbtrn */ static int c_ekkbtrn0_new(COIN_REGISTER3 const EKKfactinfo * COIN_RESTRICT2 fact, double * COIN_RESTRICT dwork1, int * COIN_RESTRICT mpt, int nincol, int * COIN_RESTRICT spare) { double * COIN_RESTRICT dpermu = fact->kadrpm; const int * COIN_RESTRICT mpermu=fact->mpermu; const int * COIN_RESTRICT hpivro = fact->krpadr; const int nrow = fact->nrow; int i; char * nonzero=fact->nonzero; int doSparse=1; /* so: dpermu must contain room for: * nrow doubles, followed by * nrow ints (mpermu), followed by * nrow ints (the inverse permutation), followed by * an unused area (?) of nrow ints, followed by * nrow chars (this non-zero array). * * and apparently the first nrow elements of nonzero are expected * to already be zero. */ #ifdef DEBUG for (i=1;i<=nrow ;i++ ) { if (nonzero[i]) { abort(); } /* endif */ } /* endfor */ #endif /* now nonzero[i]==1 iff there is an entry for i in mpt */ nincol=c_ekkbtju_sparse(fact, dpermu, &mpt[1], nincol, spare); /* the vector may have more nonzero elements now */ /* DO ROW ETAS IN L */ #define DENSE_THRESHOLD (nincol*10+100) if (DENSE_THRESHOLD>nrow) { doSparse=0; c_ekkbtjl(fact, dpermu); } else { /* set nonzero */ for(i=0;inrow) { doSparse=0; #ifdef DEBUG for (i=1;i<=nrow;i++) { if (nonzero[i]) { abort(); } } #endif } } if (!doSparse) { c_ekkbtj4p(fact,dpermu); /* dwork1[mpermu] = dpermu; dpermu = 0; mpt = indices of non-zeros */ nincol = c_ekkshfpo_scan2zero(fact,&mpermu[1],dpermu,&dwork1[1],&mpt[1]); /* dpermu should be zero now */ #ifdef DEBUG for (i=1;i<=nrow ;i++ ) { if (dpermu[i]) { abort(); } /* endif */ } /* endfor */ #endif } else { /* still sparse */ if (fact->nnentl) { nincol = c_ekkbtj4_sparse(fact, dpermu, &mpt[1], dwork1, nincol,spare); } else { double tolerance=fact->zeroTolerance; int irow; int nput=0; if (fact->packedMode) { for (i = 0; i = tolerance) { irow0= hpivro[irow]; dwork1[1+nput]=dval; mpt[1 + nput++]=irow0-1; } dpermu[irow]=0.0; } } } else { for (i = 0; i = tolerance) { irow0= hpivro[irow]; dwork1[irow0]=dval; mpt[1 + nput++]=irow0-1; } dpermu[irow]=0.0; } } } nincol=nput; } } return (nincol); } /* c_ekkbtrn */ /* returns c_ekkbtrn(fact, dwork1, mpt) * * but since mpt[1..nincol] contains the indices of non-zeros in dwork1, * we can do faster. */ static int c_ekkbtrn_mpt(COIN_REGISTER3 const EKKfactinfo * COIN_RESTRICT2 fact, double * COIN_RESTRICT dwork1, int * COIN_RESTRICT mpt, int nincol,int * COIN_RESTRICT spare) { double * COIN_RESTRICT dpermu = fact->kadrpm; const int nrow = fact->nrow; const int * COIN_RESTRICT mpermu=fact->mpermu; /*const int *mrstrt = fact->xrsadr;*/ #ifdef DEBUG int i; memset(spare,'A',3*nrow*sizeof(int)); { for (i=1;i<=nrow;i++) { if (dpermu[i]) { abort(); } } } #endif int i; #ifdef DEBUG for (i=1;i<=nrow;i++) { if (fact->nonzero[i]||dpermu[i]) { abort(); } } #endif assert (fact->if_sparse_update>0&&mpt&&fact->rows_ok) ; /* read the input vector from mpt/dwork1; * permute it into dpermu; * construct a nonzero mask in nonzero; * overwrite mpt with the permuted indices; * clear the dwork1 vector. */ for (i=0;iif_sparse_update>0) { for (i=1;i<=nrow;i++) { if (fact->nonzero[i]) { abort(); } } } } #endif return nincol; } /* returns c_ekkbtrn(fact, dwork1, mpt) * * but since (dwork1[i]!=0) == (i==ipivrw), * we can do faster. */ int c_ekkbtrn_ipivrw(COIN_REGISTER3 const EKKfactinfo * COIN_RESTRICT2 fact, double * COIN_RESTRICT dwork1, int * COIN_RESTRICT mpt, int ipivrw,int * COIN_RESTRICT spare) { double * COIN_RESTRICT dpermu = fact->kadrpm; const int nrow = fact->nrow; const int * COIN_RESTRICT mpermu=fact->mpermu; const double * COIN_RESTRICT dluval = fact->xeeadr; const int * COIN_RESTRICT mrstrt = fact->xrsadr; const int * COIN_RESTRICT hinrow = fact->xrnadr; const int * COIN_RESTRICT hcoli = fact->xecadr; const int * COIN_RESTRICT mcstrt = fact->xcsadr; int nincol; #ifdef DEBUG int i; for (i=1;i<=nrow ;i++ ) { if (dpermu[i]) { abort(); } /* endif */ } /* endfor */ #endif if (fact->if_sparse_update>0&&mpt&& fact->rows_ok) { mpt[1] = ipivrw; nincol = c_ekkbtrn_mpt(fact, dwork1, mpt, 1,spare); } else { int ipiv; int kpivrw = mpermu[ipivrw]; dpermu[kpivrw]=dwork1[ipivrw]; dwork1[ipivrw]=0.0; if (fact->rows_ok) { /* !fact->if_sparse_update * but we still have rowwise info, * so we may as well use it to do the slack row */ int iipivrw=nrow+1; int itest = fact->nnentu+1; int k=mrstrt[kpivrw]; int lastInRow= k+hinrow[kpivrw]; double dpiv,dv; for (;knrow) { if (c_ekk_IsSet(fact->bitArray,ipiv)) { const int * hpivco_new= fact->kcpadr+1; int lastSlack = fact->lastSlack; int firstDo=hpivco_new[lastSlack]; /* slack */ /* need pivot row of first nonslack */ dpermu[ipiv]=-dpermu[ipiv]; #ifndef NDEBUG while (1) { assert (c_ekk_IsSet(fact->bitArray,ipiv)); ipiv=hpivco_new[ipiv]; if (ipiv>fact->nrow||ipiv==firstDo) break; } assert (!c_ekk_IsSet(fact->bitArray,ipiv)||ipiv>fact->nrow); assert (ipiv==firstDo); #endif ipiv=firstDo; } } nincol = c_ekkbtrn(fact, dwork1, mpt, ipiv); } return nincol; } /* * Does work associated with eq. 3.7: * r' = u' U^-1 * * where u' (can't write the overbar) is the p'th row of U, without * the entry for column p. (here, jpivrw is p). * We solve this as for btju. We know * r' U = u' * * so we solve from low index to hi, determining the next value u_i' * by doing the dot-product of r' and the i'th column of U (excluding * element i itself), subtracting that from u'_i, and dividing by * U_ii (we store the reciprocal, so here we multiply). * * Now, in principle dwork1 should be initialized to the p'th row of U. * Instead, it is initially zeroed and filled in as we go along. * Of the entries in u' that we reference during a dot product with * a column of U, either * the entry is 0 by definition, since it is < p, or * it has already been set by a previous iteration, or * it is p. * * Because of this, we know that all elements < p will be zero; * that's why we start with p (kpivrw). * While we do this product, we also zero out the p'th row. */ static void c_ekketju_aux(COIN_REGISTER2 EKKfactinfo * COIN_RESTRICT2 fact,int sparse, double * COIN_RESTRICT dluval, int * COIN_RESTRICT hrowi, const int * COIN_RESTRICT mcstrt, const int * COIN_RESTRICT hpivco, double * COIN_RESTRICT dwork1, int *ipivp, int jpivrw, int stop_col) { int ipiv = *ipivp; if (1&&ipivbitArray,ipiv)) { /* slack */ int lastSlack = fact->lastSlack; int firstDo=hpivco[lastSlack]; while (1) { assert (c_ekk_IsSet(fact->bitArray,ipiv)); dwork1[ipiv] = -dwork1[ipiv]; ipiv=hpivco[ipiv]; /* next column - generally ipiv+1 */ if (ipiv==firstDo||ipiv>=stop_col) break; } } while(ipivnrow; if (first_dense < last_dense && mcstrt[ipiv] <= mcstrt[last_dense]) { /* There are dense columns, and * some dense columns precede the pivot column */ /* first do any sparse columns "on the left" */ c_ekketju_aux(fact, true, dluval, hrowi, mcstrt, hpivco, dwork1, &ipiv, jpivrw, first_dense); /* then do dense columns */ c_ekketju_aux(fact, false, dluval, hrowi, mcstrt, hpivco, dwork1, &ipiv, jpivrw, last_dense+1); /* final sparse columns "on the right" ...*/ } /* ...are the same as sparse columns if there are no dense */ c_ekketju_aux(fact, true, dluval, hrowi, mcstrt, hpivco, dwork1, &ipiv, jpivrw, nrow+1); } /* c_ekketju */ /*#define PRINT_DEBUG*/ /* dwork1 is assumed to be zeroed on entry */ int c_ekketsj(COIN_REGISTER2 /*const*/ EKKfactinfo * COIN_RESTRICT2 fact, double * COIN_RESTRICT dwork1, int * COIN_RESTRICT mpt2, double dalpha, int orig_nincol, int npivot, int *nuspikp, const int ipivrw,int * spare) { int nuspik = *nuspikp; int * COIN_RESTRICT mpermu=fact->mpermu; int * COIN_RESTRICT hcoli = fact->xecadr; double * COIN_RESTRICT dluval = fact->xeeadr; int * COIN_RESTRICT mrstrt = fact->xrsadr; int * COIN_RESTRICT hrowi = fact->xeradr; int * COIN_RESTRICT mcstrt = fact->xcsadr; int * COIN_RESTRICT hinrow = fact->xrnadr; /*int *hincol = fact->xcnadr; int *hpivro = fact->krpadr;*/ int * COIN_RESTRICT hpivco = fact->kcpadr; double * COIN_RESTRICT de2val = fact->xe2adr; const int nrow = fact->nrow; const int ifRowCopy = fact->rows_ok; int i, j=-1, k, i1, i2, k1; int kc, iel; double del3; int nroom; bool ifrows= (mrstrt[1] != 0); int kpivrw, jpivrw; int first_dense_mcstrt,last_dense_mcstrt; int nnentl; /* includes row stuff */ int doSparse=(fact->if_sparse_update>0); #ifdef MORE_DEBUG { const int * COIN_RESTRICT hrowi = fact->R_etas_index; const int * COIN_RESTRICT mcstrt = fact->R_etas_start; int ndo=fact->nR_etas; int knext; knext = mcstrt[ndo + 1]; for (int i = ndo; i > 0; --i) { int k1 = knext; knext = mcstrt[i]; for (int j = k1+1; j < knext; j++) { assert (hrowi[j]>0&&hrowi[j]<100000); } } } #endif int mcstrt_piv; int nincol=0; int * COIN_RESTRICT hpivco_new=fact->kcpadr+1; int * COIN_RESTRICT back=fact->back; int irtcod = 0; /* Parameter adjustments */ de2val--; /* Function Body */ if (!ifRowCopy) { doSparse=0; fact->if_sparse_update=-abs(fact->if_sparse_update); } if (npivot==1) { fact->num_resets=0; } kpivrw = mpermu[ipivrw]; #if 0 //ndef NDEBUG ets_count++; if (ets_check>=0&&ets_count>=ets_check) { printf("trouble\n"); } #endif mcstrt_piv=mcstrt[kpivrw]; /* ndenuc - top has number deleted */ if (fact->ndenuc) { first_dense_mcstrt = mcstrt[fact->first_dense]; last_dense_mcstrt = mcstrt[fact->last_dense]; } else { first_dense_mcstrt=0; last_dense_mcstrt=0; } { int kdnspt = fact->nnetas - fact->nnentl; i1 = ((kdnspt - 1) + fact->R_etas_start[fact->nR_etas + 1]); /*i1 = -99999999;*/ /* fact->R_etas_start[fact->nR_etas + 1] is -(the number of els in R) */ nnentl = fact->nnetas - ((kdnspt - 1) + fact->R_etas_start[fact->nR_etas + 1]); } fact->demark=fact->nnentu+nnentl; jpivrw = SHIFT_INDEX(kpivrw); #ifdef CLP_REUSE_ETAS double del3Orig=0.0; #endif if (nuspik < 0) { goto L7000; } else if (nuspik == 0) { del3 = 0.; } else { del3 = 0.; i1 = fact->nnentu + 1; i2 = fact->nnentu + nuspik; if (fact->sortedEta) { /* binary search */ if (hrowi[i2] == jpivrw) { /* sitting right on the end - easy */ del3 = dluval[i2]; --nuspik; } else { bool foundit = true; /* binary search - sort of implies hrowi is sorted */ i = i1; if (hrowi[i] != jpivrw) { while (1) { i = (i1 + i2) >>1; if (i == i1) { foundit = false; break; } if (hrowi[i] < jpivrw) { i1 = i; } else if (hrowi[i] > jpivrw) { i2 = i; } else break; } } /* ??? what if we didn't find it? */ if (foundit) { del3 = dluval[i]; --nuspik; /* remove it and move the last element into its place */ hrowi[i] = hrowi[nuspik + fact->nnentu+1]; dluval[i] = dluval[nuspik + fact->nnentu+1]; } } } else { /* search */ for (i=i1;i<=i2;i++) { if (hrowi[i] == jpivrw) { del3 = dluval[i]; --nuspik; /* remove it and move the last element into its place */ hrowi[i] = hrowi[i2]; dluval[i] = dluval[i2]; break; } } } } #ifdef CLP_REUSE_ETAS del3Orig=del3; #endif /* OLD COLUMN POINTERS */ /* **************************************************************** */ if (!ifRowCopy) { /* old method */ /* DO U */ c_ekketju(fact,dluval, hrowi, mcstrt, hpivco_new, dwork1, kpivrw,fact->first_dense, fact->last_dense); } else { /* could take out of old column but lets try being crude */ /* try taking out */ if (fact->xe2adr != 0&&doSparse) { /* * There is both a column and row representation of U. * For each row in the kpivrw'th column of the col U rep, * find its position in the U row rep and remove it * by overwriting it with the last element. */ int k1x = mcstrt[kpivrw]; int nel = hrowi[k1x]; /* yes, this is the nel, for the pivot */ int k2x = k1x + nel; for (k = k1x + 1; k <= k2x; ++k) { int irow = UNSHIFT_INDEX(hrowi[k]); int kx = mrstrt[irow]; int nel = hinrow[irow]-1; hinrow[irow]=nel; int jlast = kx + nel; for (int iel=kx;ielnnentu + 1; i2 = fact->nnentu + nuspik; int * COIN_RESTRICT eta_last=mpermu+nrow*2+3; int * COIN_RESTRICT eta_next=eta_last+nrow+2; if (fact->xe2adr == 0||!doSparse) { /* we have column indices by row, but not the actual values */ for (iel = i1; iel <= i2; ++iel) { int irow = UNSHIFT_INDEX(hrowi[iel]); int iput = hinrow[irow]; int kput = mrstrt[irow]; int nextRow=eta_next[irow]; assert (kput>0); kput += iput; if (kput < mrstrt[nextRow]) { /* there is room - append the pivot column; * this corresponds making alpha_p the rightmost column of U (p. 268)*/ hinrow[irow] = iput + 1; hcoli[kput] = kpivrw; } else { /* no room - switch off */ doSparse=0; /* possible kpivrw 1 */ k1 = mrstrt[kpivrw]; mrstrt[1]=-1; fact->rows_ok = false; goto L1226; } } } else { if (! doSparse) { /* we have both column indices and values by row */ /* just like loop above, but with extra assign to de2val */ for (iel = i1; iel <= i2; ++iel) { int irow = UNSHIFT_INDEX(hrowi[iel]); int iput = hinrow[irow]; int kput = mrstrt[irow]; int nextRow=eta_next[irow]; assert (kput>0); kput += iput; if (kput < mrstrt[nextRow]) { hinrow[irow] = iput + 1; hcoli[kput] = kpivrw; de2val[kput] = dluval[iel]; } else { /* no room - switch off */ doSparse=0; /* possible kpivrw 1 */ k1 = mrstrt[kpivrw]; mrstrt[1]=-1; fact->rows_ok = false; goto L1226; } } } else { for (iel = i1; iel <= i2; ++iel) { int j,k; int irow = UNSHIFT_INDEX(hrowi[iel]); int iput = hinrow[irow]; k=mrstrt[irow]+iput; j=eta_next[irow]; if (k >= mrstrt[j]) { /* no room - can we make some? */ int klast=eta_last[nrow+1]; int jput=mrstrt[klast]+hinrow[klast]+2; int distance=mrstrt[nrow+1]-jput; if (iput+1nnetas-fact->nnentu-fact->nnentl-3); if (spare>nrow<<1) { /* presumbly, this compacts the rows */ int jrow,jput; if (1) { if (fact->num_resets<1000000) { int etasize =CoinMax(4*fact->nnentu+ (fact->nnetas-fact->nnentl)+1000,fact->eta_size); if (ifrows) { fact->num_resets++; if (npivot>40&&fact->num_resets<<4>npivot) { fact->eta_size=static_cast(1.05*fact->eta_size); fact->num_resets=1000000; } } else { fact->eta_size=static_cast(1.1*fact->eta_size); fact->num_resets=1000000; } fact->eta_size=CoinMin(fact->eta_size,etasize); if (fact->maxNNetas>0&&fact->eta_size> fact->maxNNetas) { fact->eta_size=fact->maxNNetas; } } } jrow=eta_next[0]; jput=1; for (j=0;jnrow<<3) { spare=3; } else if (spare>nrow<<2) { spare=1; } else { spare=0; } jput+=nrow*spare;; jrow=eta_last[nrow+1]; for (j=0;jrows_ok = false; goto L1226; } } } /* now we have room - append the new value */ hinrow[irow] = iput + 1; hcoli[k] = kpivrw; de2val[k] = dluval[iel]; } } } /* TAKE OUT ALL ELEMENTS IN PIVOT ROW */ k1 = mrstrt[kpivrw]; L1226: { int k2 = k1 + hinrow[kpivrw] - 1; /* "delete" the row */ hinrow[kpivrw] = 0; j = 0; if (doSparse) { /* remove pivot row entries from the corresponding columns */ for (k = k1; k <= k2; ++k) { int icol = hcoli[k]; int kx = mcstrt[icol]; int nel = hrowi[kx]; for (iel = kx + 1; iel <= kx+nel; iel ++) { if (hrowi[iel] == jpivrw) { break; } } if (iel <= kx+nel) { /* this has to happen, right?? */ /* copy the element into a temporary */ dwork1[icol] = dluval[iel]; mpt2[nincol++]=icol; /*nonzero[icol-1]=1;*/ hrowi[kx]=nel-1; /* column is shorter by one */ j=1; hrowi[iel]=hrowi[kx+nel]; dluval[iel]=dluval[kx+nel]; #ifdef CLP_REUSE_ETAS hrowi[kx+nel]=jpivrw; dluval[kx+nel]=dwork1[icol]; #endif } } if (j != 0) { /* now compute r', the new R transform */ orig_nincol=c_ekkbtju_sparse(fact, dwork1, mpt2, nincol, spare); dwork1[kpivrw]=0.0; } } else { /* row version isn't ok (?) */ for (k = k1; k <= k2; ++k) { int icol = hcoli[k]; int kx = mcstrt[icol]; int nel = hrowi[kx]; j = kx+nel; int iel; for (iel=kx+1;iel<=j;iel++) { if (hrowi[iel]==jpivrw) break; } dwork1[icol] = dluval[iel]; if (kxlast_dense_mcstrt) { hrowi[kx] = nel - 1; /* shorten column */ /* not packing - presumably column isn't sorted */ hrowi[iel] = hrowi[j]; dluval[iel] = dluval[j]; #ifdef CLP_REUSE_ETAS hrowi[j]=jpivrw; dluval[j]=dwork1[icol]; #endif } else { /* dense element - just zero it */ dluval[iel]=0.0; } } if (j != 0) { /* Find first nonzero */ int ipiv = hpivco_new[kpivrw]; while(ipiv<=nrow) { if (!dwork1[ipiv]) { ipiv=hpivco_new[ipiv]; } else { break; } } if (ipiv<=nrow) { /* DO U */ /* now compute r', the new R transform */ c_ekkbtju(fact, dwork1, ipiv); } } } } } if (kpivrw==fact->first_dense) { /* increase until valid pivot */ fact->first_dense=hpivco_new[fact->first_dense]; } else if (kpivrw==fact->last_dense) { fact->last_dense=back[fact->last_dense]; } if (fact->first_dense==fact->last_dense) { fact->ndenuc=0; fact->first_dense=0; fact->last_dense=-1; } if (! (ifRowCopy && j==0)) { /* increase amount of work on Etas */ /* **************************************************************** */ /* DO ROW ETAS IN L */ { if (!doSparse) { dwork1[kpivrw] = 0.; #if 0 orig_nincol=c_ekksczr(fact,nrow, dwork1, mpt2); del3=c_ekkputl(fact, mpt2, dwork1, del3, orig_nincol, nuspik); #else orig_nincol=c_ekkputl2(fact, dwork1, &del3, nuspik); #endif } else { del3=c_ekkputl(fact, mpt2, dwork1, del3, orig_nincol, nuspik); } } if (orig_nincol != 0) { /* STORE AS A ROW VECTOR */ int n = fact->nR_etas+1; int i1 = fact->R_etas_start[n]; fact->nR_etas=n; fact->R_etas_start[n + 1] = i1 - orig_nincol; hpivco[fact->nR_etas + nrow+3] = kpivrw; } } /* CHECK DEL3 AGAINST DALPHA/DOUT */ { int kx = mcstrt[kpivrw]; double dout = dluval[kx]; double dcheck = fabs(dalpha / dout); double difference=0.0; if (fabs(del3) > CoinMin(1.0e-8,fact->drtpiv*0.99999)) { double checkTolerance; if ( fact->npivots < 2 ) { checkTolerance = 1.0e-5; } else if ( fact->npivots < 10 ) { checkTolerance = 1.0e-6; } else if ( fact->npivots < 50 ) { checkTolerance = 1.0e-8; } else { checkTolerance = 1.0e-9; } difference = fabs(1.0-fabs(del3)/dcheck); if (difference > 0.1*checkTolerance) { if (difference < checkTolerance|| (difference<1.0e-7&&fact->npivots>=50)) { irtcod=1; #ifdef PRINT_DEBUG printf("mildly bad %g after %d pivots, etsj %g ftncheck %g ftnalpha %g\n", difference,fact->npivots,del3,dcheck,dalpha); #endif } else { irtcod=2; #ifdef PRINT_DEBUG printf("bad %g after %d pivots, etsj %g ftncheck %g ftnalpha %g\n", difference,fact->npivots,del3,dcheck,dalpha); #endif } } } else { irtcod=2; #ifdef PRINT_DEBUG printf("bad small %g after %d pivots, etsj %g ftncheck %g ftnalpha %g\n", difference,fact->npivots,del3,dcheck,dalpha); #endif } if (irtcod>1) goto L8000; fact->npivots++; } mcstrt[kpivrw] = fact->nnentu; #ifdef CLP_REUSE_ETAS { int * putSeq = fact->xrsadr+2*fact->nrowmx+2; int * position = putSeq+fact->maxinv; int * putStart = position+fact->maxinv; putStart[fact->nrow+fact->npivots-1]=fact->nnentu; } #endif dluval[fact->nnentu] = 1. / del3; /* new pivot */ hrowi[fact->nnentu] = nuspik; /* new nelems */ #ifndef NDEBUG { int lastSlack = fact->lastSlack; int firstDo=hpivco_new[lastSlack]; int ipiv=hpivco_new[0]; int now = fact->numberSlacks; if (now) { while (1) { if (ipiv>fact->nrow||ipiv==firstDo) break; assert (c_ekk_IsSet(fact->bitArray,ipiv)); ipiv=hpivco_new[ipiv]; } if (ipiv<=fact->nrow) { while (1) { if (ipiv>fact->nrow) break; assert (!c_ekk_IsSet(fact->bitArray,ipiv)); ipiv=hpivco_new[ipiv]; } } } } #endif { /* do new hpivco */ int inext=hpivco_new[kpivrw]; int iback=back[kpivrw]; if (inext!=nrow+1) { int ilast=back[nrow+1]; hpivco_new[iback]=inext; back[inext]=iback; assert (hpivco_new[ilast]==nrow+1); hpivco_new[ilast]=kpivrw; back[kpivrw]=ilast; hpivco_new[kpivrw]=nrow+1; back[nrow+1]=kpivrw; } } { int lastSlack = fact->lastSlack; int now = fact->numberSlacks; if (now&&mcstrt_piv<=mcstrt[lastSlack]) { if (c_ekk_IsSet(fact->bitArray,kpivrw)) { /*printf("piv %d lastSlack %d\n",mcstrt_piv,lastSlack);*/ fact->numberSlacks--; now--; /* one less slack */ c_ekk_Unset(fact->bitArray,kpivrw); if (now&&kpivrw==lastSlack) { int i; int ipiv; ipiv=hpivco_new[0]; for (i=0;ibitArray,ipiv)); assert (!c_ekk_IsSet(fact->bitArray,hpivco_new[ipiv])||hpivco_new[ipiv]>fact->nrow); fact->lastSlack = lastSlack; } else if (!now) { fact->lastSlack=0; } } } fact->firstNonSlack=hpivco_new[lastSlack]; #ifndef NDEBUG { int lastSlack = fact->lastSlack; int firstDo=hpivco_new[lastSlack]; int ipiv=hpivco_new[0]; int now = fact->numberSlacks; if (now) { while (1) { if (ipiv>fact->nrow||ipiv==firstDo) break; assert (c_ekk_IsSet(fact->bitArray,ipiv)); ipiv=hpivco_new[ipiv]; } if (ipiv<=fact->nrow) { while (1) { if (ipiv>fact->nrow) break; assert (!c_ekk_IsSet(fact->bitArray,ipiv)); ipiv=hpivco_new[ipiv]; } } } } #endif } fact->nnentu += nuspik; #ifdef CLP_REUSE_ETAS if (fact->first_dense>=fact->last_dense) { // save fact->nnentu++; dluval[fact->nnentu]=del3Orig; hrowi[fact->nnentu]=kpivrw; int * putSeq = fact->xrsadr+2*fact->nrowmx+2; int * position = putSeq+fact->maxinv; int * putStart = position+fact->maxinv; int nnentu_at_factor=putStart[fact->nrow]&0x7fffffff; //putStart[fact->nrow+fact->npivots]=fact->nnentu+1; int where; if (mcstrt_pivnrow; for (where=fact->npivots-1;where>=0;where--) { if (mcstrt_piv==(look[where]&0x7fffffff)) break; } assert (where>=0); where += fact->nrow; } position[fact->npivots-1]=where; if (orig_nincol == 0) { // flag putStart[fact->nrow+fact->npivots-1] |= 0x80000000; } } #endif { int kdnspt = fact->nnetas - fact->nnentl; /* fact->R_etas_start[fact->nR_etas + 1] is -(the number of els in R) */ nnentl = fact->nnetas - ((kdnspt - 1) + fact->R_etas_start[fact->nR_etas + 1]); } fact->demark = (fact->nnentu + nnentl) - fact->demark; /* if need to redo row version */ if (! fact->rows_ok&&fact->first_dense>=fact->last_dense) { int extraSpace=10000; int spareSpace; if (fact->if_sparse_update>0) { spareSpace=(fact->nnetas-fact->nnentu-fact->nnentl); } else { /* missing out nnentl stuff */ spareSpace=fact->nnetas-fact->nnentu; } /* save clean row copy if enough room */ nroom = spareSpace / nrow; if ((fact->nnentu<<3)>150*fact->maxinv) { extraSpace=150*fact->maxinv; } else { extraSpace=fact->nnentu<<3; } ifrows = false; if (fact->nnetas>fact->nnentu+fact->nnentl+extraSpace) { ifrows = true; } if (nroom < 5) { ifrows = false; } if (nroom > CoinMin(50, fact->maxinv - (fact->iterno - fact->iterin))) { ifrows = true; } #ifdef PRINT_DEBUGx printf(" redoing row copy %d %d %d\n",ifrows,nroom,spareSpace); #endif if (1) { if (fact->num_resets<1000000) { if (ifrows) { fact->num_resets++; if (npivot>40&&fact->num_resets<<4>npivot) { fact->eta_size=static_cast(1.05*fact->eta_size); fact->num_resets=1000000; } } else { fact->eta_size=static_cast(1.1*fact->eta_size); fact->num_resets=1000000; } if (fact->maxNNetas>0&&fact->eta_size> fact->maxNNetas) { fact->eta_size=fact->maxNNetas; } } } fact->rows_ok = ifrows; if (ifrows) { int ibase = 1; c_ekkizero(nrow,&hinrow[1]); for (i = 1; i <= nrow; ++i) { int kx = mcstrt[i]; int nel = hrowi[kx]; int kcs = kx + 1; int kce = kx + nel; for (kc = kcs; kc <= kce; ++kc) { int irow = UNSHIFT_INDEX(hrowi[kc]); if (dluval[kc]) { hinrow[irow]++; } } } int * eta_last=mpermu+nrow*2+3; int * eta_next=eta_last+nrow+2; eta_next[0]=1; for (i = 1; i <= nrow; ++i) { eta_next[i]=i+1; eta_last[i]=i-1; mrstrt[i] = ibase; ibase = ibase + hinrow[i] + nroom; hinrow[i] = 0; } eta_last[nrow+1]=nrow; //eta_next[nrow+1]=nrow+2; mrstrt[nrow+1]=ibase; if (fact->xe2adr == 0) { for (i = 1; i <= nrow; ++i) { int kx = mcstrt[i]; int nel = hrowi[kx]; int kcs = kx + 1; int kce = kx + nel; for (kc = kcs; kc <= kce; ++kc) { if (dluval[kc]) { int irow = UNSHIFT_INDEX(hrowi[kc]); int iput = hinrow[irow]; assert (irow); hcoli[mrstrt[irow] + iput] = i; hinrow[irow] = iput + 1; } } } } else { for (i = 1; i <= nrow; ++i) { int kx = mcstrt[i]; int nel = hrowi[kx]; int kcs = kx + 1; int kce = kx + nel; for (kc = kcs; kc <= kce; ++kc) { int irow = UNSHIFT_INDEX(hrowi[kc]); int iput = hinrow[irow]; hcoli[mrstrt[irow] + iput] = i; de2val[mrstrt[irow] + iput] = dluval[kc]; hinrow[irow] = iput + 1; } } } } else { mrstrt[1] = 0; if (fact->if_sparse_update>0&&fact->iterno-fact->iterin>100) { goto L7000; } } } goto L8000; /* OUT OF SPACE - COULD PACK DOWN */ L7000: irtcod = 1; #ifdef PRINT_DEBUG printf(" out of space\n"); #endif if (1) { if ((npivot<<3)nbfinv) { /* low on space */ if (npivot<10) { fact->eta_size=fact->eta_size<<1; } else { double ratio=fact->nbfinv; double ratio2=npivot<<3; ratio=ratio/ratio2; if (ratio>2.0) { ratio=2.0; } /* endif */ fact->eta_size=static_cast(ratio*fact->eta_size); } /* endif */ } else { fact->eta_size=static_cast(1.05*fact->eta_size); } /* endif */ if (fact->maxNNetas>0&&fact->eta_size> fact->maxNNetas) { fact->eta_size=fact->maxNNetas; } } /* ================= IF ERROR SHOULD WE GET RID OF LAST ITERATION??? */ L8000: *nuspikp = nuspik; #ifdef MORE_DEBUG for (int i=1;i<=fact->nrow;i++) { int kx=mcstrt[i]; int nel=hrowi[kx]; for (int j=0;jsave_nnentu=fact->nnentu; #endif return (irtcod); } /* c_ekketsj */ static void c_ekkftj4p(COIN_REGISTER2 const EKKfactinfo * COIN_RESTRICT2 fact, double * COIN_RESTRICT dwork1, int firstNonZero) { /* this is where the L factors start, because this is the place * where c_ekktria starts laying them down (see initialization of xnetal). */ int lstart=fact->lstart; const int * COIN_RESTRICT hpivco = fact->kcpadr; int firstLRow = hpivco[lstart]; if (firstNonZero>firstLRow) { lstart += firstNonZero-firstLRow; } assert (firstLRow==fact->firstLRow); int jpiv=hpivco[lstart]; const double * COIN_RESTRICT dluval = fact->xeeadr; const int * COIN_RESTRICT hrowi = fact->xeradr; const int * COIN_RESTRICT mcstrt = fact->xcsadr+lstart; int ndo=fact->xnetal-lstart; int i, iel; /* find first non-zero */ for (i=0;i kce1; --iel) { int irow0 = hrowi[iel]; SHIFT_REF(dwork1, irow0) += dv * dluval[iel]; } } } } /* c_ekkftj4p */ /* * This version is more efficient for input columns that are sparse. * It is instructive to consider the case of an especially sparse column, * which is a slack. The slack for row r has exactly one non-zero element, * in row r, which is +-1.0. Let pr = mpermu[r]. * In this case, nincol==1 and mpt[0] == pr on entry. * if mpt[0] == pr <= jpiv * then this slack is completely unaffected by L; * this is reflected by the fact that save_where = last * after the first loop, so none of the remaining loops * ever execute, * else if mpt[0] == pr > jpiv, but pr-jpiv > ndo * then the slack is also unaffected by L, this time because * its row is "after" L. During factorization, it may * be the case that the first part of the basis is upper * triangular (c_ekktria), but it may also be the case that the * last part of the basis is upper triangular (in which case the * L triangle gets "chopped off" on the right). In both cases, * no L entries are required. Since in this case the tests * (i<=ndo) will fail (and dwork1[ipiv]==1.0), the code will * do nothing. * else if mpt[0] == pr > jpiv and pr-jpiv <= ndo * then the slack *is* affected by L. * the for-loop inside the second while-loop will discover * that none of the factors for the corresponding column of L * are non-zero in the slack column, so last will not be incremented. * We multiply the eta-vector, and the last loop does nothing. */ static int c_ekkftj4_sparse(COIN_REGISTER2 const EKKfactinfo * COIN_RESTRICT2 fact, double * COIN_RESTRICT dwork1, int * COIN_RESTRICT mpt, int nincol,int * COIN_RESTRICT spare) { const int nrow = fact->nrow; /* this is where the L factors start, because this is the place * where c_ekktria starts laying them down (see initialization of xnetal). */ int lstart=fact->lstart; const int * COIN_RESTRICT hpivco = fact->kcpadr; const double * COIN_RESTRICT dluval = fact->xeeadr; const int * COIN_RESTRICT hrowi = fact->xeradr; const int * COIN_RESTRICT mcstrt = fact->xcsadr+lstart-1; double tolerance = fact->zeroTolerance; int jpiv=hpivco[lstart]-1; char * COIN_RESTRICT nonzero=fact->nonzero; int ndo=fact->xnetalval; int k,nStack; int nList=0; int iPivot; int * COIN_RESTRICT list = spare; int * COIN_RESTRICT stack = spare+nrow; int * COIN_RESTRICT next = stack+nrow; double dv; int iel; int nput=0,kput=nrow; int check=jpiv+ndo+1; const int * COIN_RESTRICT mcstrt2 = mcstrt-jpiv; for (k=0;kjpiv&&iPivotjpiv&&kPivotmcstrt2[kPivot]) { /* finished so mark */ list[nList++]=kPivot; nonzero[kPivot]=1; } else { kPivot=UNSHIFT_INDEX(hrowi[j]); /* put back on stack */ next[nStack++] ++; if (!nonzero[kPivot]) { /* and new one */ stack[nStack]=kPivot; nonzero[kPivot]=2; next[nStack++]=mcstrt2[kPivot+1]+1; } } } else if (kPivot>=check) { list[--kput]=kPivot; nonzero[kPivot]=1; } } } else if (nonzero[iPivot]!=1) { /* nothing to do (except check size at end) */ list[--kput]=iPivot; nonzero[iPivot]=1; } } for (k=nList-1;k>=0;k--) { double dv; iPivot = list[k]; dv = dwork1[iPivot]; nonzero[iPivot]=0; if (fabs(dv) > tolerance) { /* the same code as in c_ekkftj4p */ int kce1 = mcstrt2[iPivot + 1]; for (iel = mcstrt2[iPivot]; iel > kce1; --iel) { int irow0 = hrowi[iel]; SHIFT_REF(dwork1, irow0) += dv * dluval[iel]; } mpt[nput++]=iPivot; } else { dwork1[iPivot]=0.0; /* force to zero, not just near zero */ } } /* check remainder */ for (k=kput;k tolerance) { mpt[nput++]=iPivot; } else { dwork1[iPivot]=0.0; /* force to zero, not just near zero */ } } return (nput); } /* c_ekkftj4 */ /* * This applies the R transformations of the F-T LU update procedure, * equation 3.11 on p. 270 in the 1972 Math Programming paper. * Note that since the non-zero off-diagonal elements are in a row, * multiplying an R by a column is a reduction, not like applying * L or U. * * Note that this may introduce new non-zeros in dwork1, * since an hpivco entry may correspond to a zero element, * and that some non-zeros in dwork1 may be cancelled. */ static int c_ekkftjl_sparse3(COIN_REGISTER2 const EKKfactinfo * COIN_RESTRICT2 fact, double * COIN_RESTRICT dwork1, int * COIN_RESTRICT mpt, int * COIN_RESTRICT hput, double * COIN_RESTRICT dluput , int nincol) { int i; int knext; int ipiv; double dv; const double * COIN_RESTRICT dluval = fact->R_etas_element+1; const int * COIN_RESTRICT hrowi = fact->R_etas_index+1; const int * COIN_RESTRICT mcstrt = fact->R_etas_start; int ndo=fact->nR_etas; double tolerance = fact->zeroTolerance; const int * COIN_RESTRICT hpivco = fact->hpivcoR; /* and make cleaner */ hput++; dluput++; /* DO ANY ROW TRANSFORMATIONS */ /* Function Body */ /* mpt has correct list of nonzeros */ if (ndo != 0) { knext = mcstrt[1]; for (i = 1; i <= ndo; ++i) { int k1 = knext; /* == mcstrt[i] */ int iel; ipiv = hpivco[i]; dv = dwork1[ipiv]; bool onList = (dv!=0.0); knext = mcstrt[i + 1]; for (iel = knext ; iel < k1; ++iel) { int irow = hrowi[iel]; dv += SHIFT_REF(dwork1, irow) * dluval[iel]; } /* (1) if dwork[ipiv] == 0.0, then this may add a non-zero. * (2) if dwork[ipiv] != 0.0, then this may cancel out a non-zero. */ if (onList) { if (fabs(dv) > tolerance) { dwork1[ipiv]=dv; } else { dwork1[ipiv] = 1.0e-128; } } else { if (fabs(dv) > tolerance) { /* put on list if not there */ mpt[nincol++]=ipiv; dwork1[ipiv]=dv; } } } } knext=0; for (i=0; i tolerance) { hput[knext]=SHIFT_INDEX(ipiv); dluput[knext]=dv; mpt[knext++]=ipiv; } else { dwork1[ipiv]=0.0; } } return knext; } /* c_ekkftjl */ static int c_ekkftjl_sparse2(COIN_REGISTER2 const EKKfactinfo * COIN_RESTRICT2 fact, double * COIN_RESTRICT dwork1, int * COIN_RESTRICT mpt, int nincol) { double tolerance = fact->zeroTolerance; const double * COIN_RESTRICT dluval = fact->R_etas_element+1; const int * COIN_RESTRICT hrowi = fact->R_etas_index+1; const int * COIN_RESTRICT mcstrt = fact->R_etas_start; int ndo=fact->nR_etas; const int * COIN_RESTRICT hpivco = fact->hpivcoR; int i; int knext; int ipiv; double dv; /* DO ANY ROW TRANSFORMATIONS */ /* Function Body */ /* mpt has correct list of nonzeros */ if (ndo != 0) { knext = mcstrt[1]; for (i = 1; i <= ndo; ++i) { int k1 = knext; /* == mcstrt[i] */ int iel; ipiv = hpivco[i]; dv = dwork1[ipiv]; bool onList = (dv!=0.0); knext = mcstrt[i + 1]; for (iel = knext ; iel < k1; ++iel) { int irow = hrowi[iel]; dv += SHIFT_REF(dwork1, irow) * dluval[iel]; } /* (1) if dwork[ipiv] == 0.0, then this may add a non-zero. * (2) if dwork[ipiv] != 0.0, then this may cancel out a non-zero. */ if (onList) { if (fabs(dv) > tolerance) { dwork1[ipiv]=dv; } else { dwork1[ipiv] = 1.0e-128; } } else { if (fabs(dv) > tolerance) { /* put on list if not there */ mpt[nincol++]=ipiv; dwork1[ipiv]=dv; } } } } knext=0; for (i=0; i tolerance) { mpt[knext++]=ipiv; } else { dwork1[ipiv]=0.0; } } return knext; } /* c_ekkftjl */ static void c_ekkftjl(COIN_REGISTER2 const EKKfactinfo * COIN_RESTRICT2 fact, double * COIN_RESTRICT dwork1) { double tolerance = fact->zeroTolerance; const double * COIN_RESTRICT dluval = fact->R_etas_element+1; const int * COIN_RESTRICT hrowi = fact->R_etas_index+1; const int * COIN_RESTRICT mcstrt = fact->R_etas_start; int ndo=fact->nR_etas; const int * COIN_RESTRICT hpivco = fact->hpivcoR; int i; int knext; /* DO ANY ROW TRANSFORMATIONS */ /* Function Body */ if (ndo != 0) { /* * The following three lines are here just to ensure that this * new formulation of the loop has exactly the same effect * as the original. */ { int ipiv = hpivco[1]; double dv = dwork1[ipiv]; dwork1[ipiv] = (fabs(dv) > tolerance) ? dv : 0.0; } knext = mcstrt[1]; for (i = 1; i <= ndo; ++i) { int k1 = knext; /* == mcstrt[i] */ int ipiv = hpivco[i]; double dv = dwork1[ipiv]; int iel; //#define UNROLL3 2 #ifndef UNROLL3 #if CLP_OSL==2||CLP_OSL==3 #define UNROLL3 2 #else #define UNROLL3 1 #endif #endif knext = mcstrt[i + 1]; #if UNROLL3<2 for (iel = knext ; iel < k1; ++iel) { int irow = hrowi[iel]; dv += SHIFT_REF(dwork1, irow) * dluval[iel]; } #else iel = knext; if (((k1-knext)&1)!=0) { int irow = hrowi[iel]; dv += SHIFT_REF(dwork1, irow) * dluval[iel]; iel++; } for ( ; iel < k1; iel+=2) { int irow0 = hrowi[iel]; double dval0 = dluval[iel]; int irow1 = hrowi[iel+1]; double dval1 = dluval[iel+1]; dv += SHIFT_REF(dwork1, irow0) * dval0; dv += SHIFT_REF(dwork1, irow1) * dval1; } #endif /* (1) if dwork[ipiv] == 0.0, then this may add a non-zero. * (2) if dwork[ipiv] != 0.0, then this may cancel out a non-zero. */ dwork1[ipiv] = (fabs(dv) > tolerance) ? dv : 0.0; } } } /* c_ekkftjl */ /* this assumes it is ok to reference back[loop_limit] */ /* another 3 seconds from a ~570 second run can be trimmed * by using two routines, one with scan==true and the other false, * since that eliminates the branch instructions involving them * entirely. This was how the code was originally written. * However, I'm still hoping that eventually we can use * C++ templates to do that for us automatically. */ static void c_ekkftjup_scan_aux(COIN_REGISTER2 const EKKfactinfo * COIN_RESTRICT2 fact, double * COIN_RESTRICT dwork1, double * COIN_RESTRICT dworko , int loop_limit, int *ip, int ** mptp) { const double * COIN_RESTRICT dluval = fact->xeeadr+1; const int * COIN_RESTRICT hrowi = fact->xeradr+1; const int * COIN_RESTRICT mcstrt = fact->xcsadr; const int * COIN_RESTRICT hpivro = fact->krpadr; const int * COIN_RESTRICT back=fact->back; double tolerance = fact->zeroTolerance; int ipiv = *ip; double dv = dwork1[ipiv]; int * mptX = *mptp; assert (mptX); while (ipiv != loop_limit) { int next_ipiv = back[ipiv]; dwork1[ipiv] = 0.0; #ifndef UNROLL4 #define UNROLL4 2 #endif /* invariant: dv == dwork1[ipiv] */ /* in the case of world.mps with dual, this condition is true * only 20-60% of the time. */ if (fabs(dv) > tolerance) { const int kx = mcstrt[ipiv]; const int nel = hrowi[kx-1]; const double dpiv = dluval[kx-1]; #if UNROLL4>1 const int * hrowi2=hrowi+kx; const int * hrowi2end=hrowi2+nel; const double * dluval2=dluval+kx; #else int iel; #endif dv*=dpiv; /* * The following loop is the unrolled version of this: * * for (iel = kx+1; iel <= kx + nel; iel++) { * SHIFT_REF(dwork1, hrowi[iel]) -= dv * dluval[iel]; * } */ #if UNROLL4<2 iel = kx; if (nel&1) { int irow = hrowi[iel]; double dval=dluval[iel]; SHIFT_REF(dwork1, irow) -= dv*dval; iel++; } for (; iel < kx + nel; iel+=2) { int irow0 = hrowi[iel]; int irow1 = hrowi[iel+1]; double dval0=dluval[iel]; double dval1=dluval[iel+1]; double d0=SHIFT_REF(dwork1, irow0); double d1=SHIFT_REF(dwork1, irow1); d0-=dv*dval0; d1-=dv*dval1; SHIFT_REF(dwork1, irow0)=d0; SHIFT_REF(dwork1, irow1)=d1; } /* end loop */ #else if ((nel&1)!=0) { int irow = *hrowi2; double dval=*dluval2; SHIFT_REF(dwork1, irow) -= dv*dval; hrowi2++; dluval2++; } for (; hrowi2 < hrowi2end; hrowi2 +=2,dluval2 +=2) { int irow0 = hrowi2[0]; int irow1 = hrowi2[1]; double dval0=dluval2[0]; double dval1=dluval2[1]; double d0=SHIFT_REF(dwork1, irow0); double d1=SHIFT_REF(dwork1, irow1); d0-=dv*dval0; d1-=dv*dval1; SHIFT_REF(dwork1, irow0)=d0; SHIFT_REF(dwork1, irow1)=d1; } #endif /* put this down here so that dv is less likely to cause a stall */ if (fabs(dv) >= tolerance) { int iput=hpivro[ipiv]; dworko[iput]=dv; *mptX++=iput-1; } } dv = dwork1[next_ipiv]; ipiv=next_ipiv; } /* endwhile */ *mptp = mptX; *ip = ipiv; } static void c_ekkftjup_aux3(COIN_REGISTER2 const EKKfactinfo * COIN_RESTRICT2 fact, double * COIN_RESTRICT dwork1, double * COIN_RESTRICT dworko, const int * COIN_RESTRICT back, const int * COIN_RESTRICT hpivro, int *ipivp, int loop_limit, int **mptXp) { double tolerance = fact->zeroTolerance; int ipiv = *ipivp; if (ipiv!=loop_limit) { int *mptX = *mptXp; double dv = dwork1[ipiv]; do { int next_ipiv = back[ipiv]; double next_dv=dwork1[next_ipiv]; dwork1[ipiv]=0.0; if (fabs(dv)>=tolerance) { int iput=hpivro[ipiv]; dworko[iput]=dv; *mptX++=iput-1; } ipiv = next_ipiv; dv = next_dv; } while (ipiv!=loop_limit); *mptXp = mptX; *ipivp = ipiv; } } static void c_ekkftju_dense(const double *dluval, const int * COIN_RESTRICT hrowi, const int * COIN_RESTRICT mcstrt, const int * COIN_RESTRICT back, double * COIN_RESTRICT dwork1, int * start, int last, int offset , double *densew) { int ipiv=*start; while (ipiv>last ) { const int ipiv1=ipiv; double dv1=dwork1[ipiv1]; ipiv=back[ipiv]; if (fabs(dv1) > 1.0e-14) { const int kx1 = mcstrt[ipiv1]; const int nel1 = hrowi[kx1-1]; const double dpiv1 = dluval[kx1-1]; int iel,k; const int n1=offset+ipiv1; /* number in dense part */ const int nsparse1=nel1-n1; const int k1=kx1+nsparse1; const double *dlu1=&dluval[k1]; int ipiv2=back[ipiv1]; const int nskip=ipiv1-ipiv2; dv1*=dpiv1; dwork1[ipiv1]=dv1; for (k = n1 - (nskip-1) -1; k >=0 ; k--) { const double dval = dv1*dlu1[k]; double dv2=densew[k]-dval; ipiv=back[ipiv]; if (fabs(dv2) > 1.0e-14) { const int kx2 = mcstrt[ipiv2]; const int nel2 = hrowi[kx2-1]; const double dpiv2 = dluval[kx2-1]; /* number in dense part is k */ const int nsparse2=nel2-k; const int k2=kx2+nsparse2; const double *dlu2=&dluval[k2]; dv2*=dpiv2; densew[k]=dv2; /* was dwork1[ipiv2]=dv2; */ k--; /* * The following loop is the unrolled version of: * * for (; k >= 0; k--) { * densew[k]-=dv1*dlu1[k]+dv2*dlu2[k]; * } */ if ((k&1)==0) { densew[k]-=dv1*dlu1[k]+dv2*dlu2[k]; k--; } for (; k >=0 ; k-=2) { double da,db; da=densew[k]; db=densew[k-1]; da-=dv1*dlu1[k]; db-=dv1*dlu1[k-1]; da-=dv2*dlu2[k]; db-=dv2*dlu2[k-1]; densew[k]=da; densew[k-1]=db; } /* end loop */ /* * The following loop is the unrolled version of: * * for (iel=kx2+nsparse2-1; iel >= kx2; iel--) { * SHIFT_REF(dwork1, hrowi[iel]) -= dv2*dluval[iel]; * } */ iel=kx2+nsparse2-1; if ((nsparse2&1)!=0) { int irow0 = hrowi[iel]; double dval=dluval[iel]; SHIFT_REF(dwork1,irow0) -= dv2*dval; iel--; } for (; iel >=kx2 ; iel-=2) { double dval0 = dluval[iel]; double dval1 = dluval[iel-1]; int irow0 = hrowi[iel]; int irow1 = hrowi[iel-1]; double d0 = SHIFT_REF(dwork1, irow0); double d1 = SHIFT_REF(dwork1, irow1); d0-=dv2*dval0; d1-=dv2*dval1; SHIFT_REF(dwork1, irow0) = d0; SHIFT_REF(dwork1, irow1) = d1; } /* end loop */ } else { densew[k]=0.0; /* skip if next deleted */ k-=ipiv2-ipiv-1; ipiv2=ipiv; if (ipiv=0 ; k--) { double dval; dval=dv1*dlu1[k]; densew[k]=densew[k]-dval; } } } } /* * The following loop is the unrolled version of: * * for (iel=kx1+nsparse1-1; iel >= kx1; iel--) { * SHIFT_REF(dwork1, hrowi[iel]) -= dv1*dluval[iel]; * } */ iel=kx1+nsparse1-1; if ((nsparse1&1)!=0) { int irow0 = hrowi[iel]; double dval=dluval[iel]; SHIFT_REF(dwork1, irow0) -= dv1*dval; iel--; } for (; iel >=kx1 ; iel-=2) { double dval0=dluval[iel]; double dval1=dluval[iel-1]; int irow0 = hrowi[iel]; int irow1 = hrowi[iel-1]; double d0=SHIFT_REF(dwork1, irow0); double d1=SHIFT_REF(dwork1, irow1); d0-=dv1*dval0; d1-=dv1*dval1; SHIFT_REF(dwork1, irow0) = d0; SHIFT_REF(dwork1, irow1) = d1; } /* end loop */ } else { dwork1[ipiv1]=0.0; } /* endif */ } /* endwhile */ *start=ipiv; } /* do not use return value if mpt==0 */ /* using dual, this is usually called via c_ekkftrn_ft, from c_ekksdul * (so mpt is non-null). * it is generally called every iteration, but sometimes several iterations * are skipped (null moves?). * * generally, back[i] == i-1 (initialized in c_ekkshfv towards the end). */ static int c_ekkftjup(COIN_REGISTER3 const EKKfactinfo * COIN_RESTRICT2 fact, double * COIN_RESTRICT dwork1, int last, double * COIN_RESTRICT dworko , int * COIN_RESTRICT mpt) { const double * COIN_RESTRICT dluval = fact->xeeadr; const int * COIN_RESTRICT hrowi = fact->xeradr; const int * COIN_RESTRICT mcstrt = fact->xcsadr; const int * COIN_RESTRICT hpivro = fact->krpadr; double tolerance = fact->zeroTolerance; int ndenuc=fact->ndenuc; const int first_dense=fact->first_dense; const int last_dense=fact->last_dense; int i; int * mptX = mpt; const int nrow = fact->nrow; const int * COIN_RESTRICT back=fact->back; int ipiv=back[nrow+1]; if (last_dense>first_dense&&mcstrt[ipiv]>=mcstrt[last_dense]) { c_ekkftjup_scan_aux(fact, dwork1, dworko, last_dense, &ipiv, &mptX); { int j; int n=0; const int firstDense = nrow- ndenuc+1; double *densew = &dwork1[firstDense]; int offset; /* check first dense to see where in triangle it is */ int last=first_dense; const int k1=mcstrt[last]; const int k2=k1+hrowi[k1]; for (j=k2; j>k1; j--) { int irow = UNSHIFT_INDEX(hrowi[j]); if (irow=tolerance) { int iput=hpivro[ipiv]; dworko[iput]=-dv; *mptX++=iput-1; } ipiv = next_ipiv; dv = next_dv; } while (ipiv!=0); } return static_cast(mptX-mpt); } /* this assumes it is ok to reference back[loop_limit] */ /* another 3 seconds from a ~570 second run can be trimmed * by using two routines, one with scan==true and the other false, * since that eliminates the branch instructions involving them * entirely. This was how the code was originally written. * However, I'm still hoping that eventually we can use * C++ templates to do that for us automatically. */ static void c_ekkftjup_scan_aux_pack(COIN_REGISTER2 const EKKfactinfo * COIN_RESTRICT2 fact, double * COIN_RESTRICT dwork1, double * COIN_RESTRICT dworko , int loop_limit, int *ip, int ** mptp) { double tolerance = fact->zeroTolerance; const double *dluval = fact->xeeadr+1; const int *hrowi = fact->xeradr+1; const int *mcstrt = fact->xcsadr; const int *hpivro = fact->krpadr; const int * back=fact->back; int ipiv = *ip; double dv = dwork1[ipiv]; int * mptX = *mptp; #if 0 int inSlacks=0; int lastSlack; if (fact->numberSlacks!=0) lastSlack=fact->lastSlack; else lastSlack=0; if (c_ekk_IsSet(fact->bitArray,ipiv)) { printf("already in slacks - ipiv %d\n",ipiv); inSlacks=1; return; } #endif assert (mptX); while (ipiv != loop_limit) { int next_ipiv = back[ipiv]; #if 0 if (ipiv==lastSlack) { printf("now in slacks - ipiv %d\n",ipiv); inSlacks=1; break; } if (inSlacks) { assert (c_ekk_IsSet(fact->bitArray,ipiv)); assert (dluval[mcstrt[ipiv]-1]==-1.0); assert (hrowi[mcstrt[ipiv]-1]==0); } #endif dwork1[ipiv] = 0.0; /* invariant: dv == dwork1[ipiv] */ /* in the case of world.mps with dual, this condition is true * only 20-60% of the time. */ if (fabs(dv) > tolerance) { const int kx = mcstrt[ipiv]; const int nel = hrowi[kx-1]; const double dpiv = dluval[kx-1]; #ifndef UNROLL5 #define UNROLL5 2 #endif #if UNROLL5>1 const int * hrowi2=hrowi+kx; const int * hrowi2end=hrowi2+nel; const double * dluval2=dluval+kx; #else int iel; #endif dv*=dpiv; /* * The following loop is the unrolled version of this: * * for (iel = kx+1; iel <= kx + nel; iel++) { * SHIFT_REF(dwork1, hrowi[iel]) -= dv * dluval[iel]; * } */ #if UNROLL5<2 iel = kx; if (nel&1) { int irow = hrowi[iel]; double dval=dluval[iel]; SHIFT_REF(dwork1, irow) -= dv*dval; iel++; } for (; iel < kx + nel; iel+=2) { int irow0 = hrowi[iel]; int irow1 = hrowi[iel+1]; double dval0=dluval[iel]; double dval1=dluval[iel+1]; double d0=SHIFT_REF(dwork1, irow0); double d1=SHIFT_REF(dwork1, irow1); d0-=dv*dval0; d1-=dv*dval1; SHIFT_REF(dwork1, irow0)=d0; SHIFT_REF(dwork1, irow1)=d1; } /* end loop */ #else if ((nel&1)!=0) { int irow = *hrowi2; double dval=*dluval2; SHIFT_REF(dwork1, irow) -= dv*dval; hrowi2++; dluval2++; } for (; hrowi2 < hrowi2end; hrowi2 +=2,dluval2 +=2) { int irow0 = hrowi2[0]; int irow1 = hrowi2[1]; double dval0=dluval2[0]; double dval1=dluval2[1]; double d0=SHIFT_REF(dwork1, irow0); double d1=SHIFT_REF(dwork1, irow1); d0-=dv*dval0; d1-=dv*dval1; SHIFT_REF(dwork1, irow0)=d0; SHIFT_REF(dwork1, irow1)=d1; } #endif /* put this down here so that dv is less likely to cause a stall */ if (fabs(dv) >= tolerance) { int iput=hpivro[ipiv]; *dworko++=dv; *mptX++=iput-1; } } dv = dwork1[next_ipiv]; ipiv=next_ipiv; } /* endwhile */ *mptp = mptX; *ip = ipiv; } static void c_ekkftjup_aux3_pack(COIN_REGISTER2 const EKKfactinfo * COIN_RESTRICT2 fact, double * COIN_RESTRICT dwork1, double * COIN_RESTRICT dworko, const int * COIN_RESTRICT back, const int * COIN_RESTRICT hpivro, int *ipivp, int loop_limit, int **mptXp) { double tolerance = fact->zeroTolerance; int ipiv = *ipivp; if (ipiv!=loop_limit) { int *mptX = *mptXp; double dv = dwork1[ipiv]; do { int next_ipiv = back[ipiv]; double next_dv=dwork1[next_ipiv]; dwork1[ipiv]=0.0; if (fabs(dv)>=tolerance) { int iput=hpivro[ipiv]; *dworko++=dv; *mptX++=iput-1; } ipiv = next_ipiv; dv = next_dv; } while (ipiv!=loop_limit); *mptXp = mptX; *ipivp = ipiv; } } /* do not use return value if mpt==0 */ /* using dual, this is usually called via c_ekkftrn_ft, from c_ekksdul * (so mpt is non-null). * it is generally called every iteration, but sometimes several iterations * are skipped (null moves?). * * generally, back[i] == i-1 (initialized in c_ekkshfv towards the end). */ static int c_ekkftjup_pack(COIN_REGISTER3 const EKKfactinfo * COIN_RESTRICT2 fact, double * COIN_RESTRICT dwork1, int last, double * COIN_RESTRICT dworko , int * COIN_RESTRICT mpt) { const double * COIN_RESTRICT dluval = fact->xeeadr; const int * COIN_RESTRICT hrowi = fact->xeradr; const int * COIN_RESTRICT mcstrt = fact->xcsadr; const int * COIN_RESTRICT hpivro = fact->krpadr; double tolerance = fact->zeroTolerance; int ndenuc=fact->ndenuc; const int first_dense=fact->first_dense; const int last_dense=fact->last_dense; int * mptX = mpt; int * mptY = mpt; const int nrow = fact->nrow; const int * COIN_RESTRICT back=fact->back; int ipiv=back[nrow+1]; assert (mpt); if (last_dense>first_dense&&mcstrt[ipiv]>=mcstrt[last_dense]) { c_ekkftjup_scan_aux_pack(fact, dwork1, dworko, last_dense, &ipiv, &mptX ); /* adjust */ dworko+= (mptX-mpt); mpt=mptX; { int j; int n=0; const int firstDense = nrow- ndenuc+1; double *densew = &dwork1[firstDense]; int offset; /* check first dense to see where in triangle it is */ int last=first_dense; const int k1=mcstrt[last]; const int k2=k1+hrowi[k1]; for (j=k2; j>k1; j--) { int irow = UNSHIFT_INDEX(hrowi[j]); if (irow=tolerance) { int iput=hpivro[ipiv]; *dworko++=-dv; *mptX++=iput-1; } ipiv = next_ipiv; } return static_cast(mptX-mptY); } static int c_ekkftju_sparse_a(COIN_REGISTER2 const EKKfactinfo * COIN_RESTRICT2 fact, int * COIN_RESTRICT mpt, int nincol,int * COIN_RESTRICT spare) { const int * COIN_RESTRICT hrowi = fact->xeradr+1; const int * COIN_RESTRICT mcstrt = fact->xcsadr; const int nrow = fact->nrow; char * COIN_RESTRICT nonzero=fact->nonzero; int k,nStack,kx,nel; int nList=0; int iPivot; /*int kkk=nincol;*/ int * COIN_RESTRICT list = spare; int * COIN_RESTRICT stack = spare+nrow; int * COIN_RESTRICT next = stack+nrow; for (k=0;kxeeadr+1; const int * COIN_RESTRICT hrowi = fact->xeradr+1; const int * COIN_RESTRICT mcstrt = fact->xcsadr; const int * COIN_RESTRICT hpivro = fact->krpadr; double tolerance = fact->zeroTolerance; char * COIN_RESTRICT nonzero=fact->nonzero; int i,k,kx,nel; int iPivot; /*int kkk=nincol;*/ int * COIN_RESTRICT list = spare; i=nList-1; nList=0; for (;i>=0;i--) { double dpiv; double dv; iPivot = list[i]; /*printf("pivot %d %d\n",i,iPivot);*/ dv=dwork1[iPivot]; kx = mcstrt[iPivot]; nel = hrowi[kx-1]; dwork1[iPivot]=0.0; dpiv = dluval[kx-1]; dv*=dpiv; nonzero[iPivot]=0; iPivot=hpivro[iPivot]; if (fabs(dv)>=tolerance) { *dworko++=dv; mpt[nList++]=iPivot-1; for (k = kx; k < kx+nel; k++) { double dval; double dd; int irow = hrowi[k]; dval=dluval[k]; dd=dwork1[irow]; dd-=dv*dval; dwork1[irow]=dd; } } } return (nList); } /* dwork1 = (B^-1)dwork1; * I think dpermu[1..nrow+1] is zeroed on exit (?) * I don't think it is expected to have any particular value on entry (?) */ int c_ekkftrn(COIN_REGISTER const EKKfactinfo * COIN_RESTRICT2 fact, double * COIN_RESTRICT dwork1, double * COIN_RESTRICT dpermu, int * COIN_RESTRICT mpt,int numberNonZero) { const int * COIN_RESTRICT mpermu = fact->mpermu; int lastNonZero; int firstNonZero = c_ekkshfpi_list2(mpermu+1, dwork1+1, dpermu, mpt, numberNonZero,&lastNonZero); if (fact->nnentl&&lastNonZero>=fact->firstLRow) { /* dpermu = (L^-1)dpermu */ c_ekkftj4p(fact, dpermu, firstNonZero); } int lastSlack; /* dpermu = (R^-1) dpermu */ c_ekkftjl(fact, dpermu); assert (fact->numberSlacks!=0||!fact->lastSlack); lastSlack=fact->lastSlack; /* dwork1 = (U^-1)dpermu; dpermu zeroed (?) */ return c_ekkftjup(fact, dpermu, lastSlack, dwork1, mpt); } /* c_ekkftrn */ int c_ekkftrn_ft(COIN_REGISTER EKKfactinfo * COIN_RESTRICT2 fact, double * COIN_RESTRICT dwork1_ft, int * COIN_RESTRICT mpt_ft, int *nincolp_ft) { double * COIN_RESTRICT dpermu_ft = fact->kadrpm; int * COIN_RESTRICT spare = reinterpret_cast(fact->kp1adr); int nincol = *nincolp_ft; int nuspik; double * COIN_RESTRICT dluvalPut = fact->xeeadr+fact->nnentu+1; int * COIN_RESTRICT hrowiPut = fact->xeradr+fact->nnentu+1; const int nrow = fact->nrow; /* mpermu contains the permutation */ const int * COIN_RESTRICT mpermu=fact->mpermu; int lastSlack; int kdnspt = fact->nnetas - fact->nnentl; bool isRoom = (fact->nnentu + (nrow << 1) < (kdnspt - 2) + fact->R_etas_start[fact->nR_etas + 1]); /* say F-T will be sorted */ fact->sortedEta=1; assert (fact->numberSlacks!=0||!fact->lastSlack); lastSlack=fact->lastSlack; #ifdef CLP_REUSE_ETAS bool skipStuff = (fact->reintro>=0); int save_nR_etas=fact->nR_etas; int * save_hpivcoR=fact->hpivcoR; int * save_R_etas_start=fact->R_etas_start; if (skipStuff) { // just move int * putSeq = fact->xrsadr+2*fact->nrowmx+2; int * position = putSeq+fact->maxinv; int * putStart = position+fact->maxinv; memset(dwork1_ft,0,nincol*sizeof(double)); int iPiv=fact->reintro; int start=putStart[iPiv]&0x7fffffff; int end=putStart[iPiv+1]&0x7fffffff; double * COIN_RESTRICT dluval = fact->xeeadr; int * COIN_RESTRICT hrowi = fact->xeradr; double dValue; if (fact->reintronrow) { iPiv++; dValue=1.0/dluval[start++]; } else { iPiv=hrowi[--end]; dValue=dluval[end]; start++; int ndoSkip=0; for (int i=fact->nrow;ireintro;i++) { if ((putStart[i]&0x80000000)==0) ndoSkip++; } fact->nR_etas-=ndoSkip; fact->hpivcoR+=ndoSkip; fact->R_etas_start+=ndoSkip; } dpermu_ft[iPiv]=dValue; if (fact->if_sparse_update>0 && DENSE_THRESHOLDif_sparse_update>0 && DENSE_THRESHOLDnnentl) { nincol = c_ekkftj4_sparse(fact, dpermu_ft, mpt_ft, nincol,spare); } } /* DO ROW ETAS IN L */ if (isRoom) { ++fact->nnentu; nincol= c_ekkftjl_sparse3(fact, dpermu_ft, mpt_ft, hrowiPut, dluvalPut,nincol); nuspik = nincol; /* temporary */ /* say not sorted */ fact->sortedEta=0; } else { /* no room */ nuspik=-3; nincol= c_ekkftjl_sparse2(fact, dpermu_ft, mpt_ft, nincol); } /* DO U */ if (DENSE_THRESHOLD>nrow-fact->numberSlacks) { nincol = c_ekkftjup_pack(fact, dpermu_ft,lastSlack, dwork1_ft, mpt_ft); } else { nincol= c_ekkftju_sparse_a(fact, mpt_ft, nincol, spare); nincol = c_ekkftju_sparse_b(fact, dpermu_ft, dwork1_ft , mpt_ft, nincol, spare); } } else { if (!skipStuff) { int lastNonZero; int firstNonZero = c_ekkshfpi_list(mpermu+1, dwork1_ft, dpermu_ft, mpt_ft, nincol,&lastNonZero); if (fact->nnentl&&lastNonZero>=fact->firstLRow) { /* dpermu_ft = (L^-1)dpermu_ft */ c_ekkftj4p(fact, dpermu_ft, firstNonZero); } } /* dpermu_ft = (R^-1) dpermu_ft */ c_ekkftjl(fact, dpermu_ft); if (isRoom) { /* fake start to allow room for pivot */ /* dluval[fact->nnentu...] = non-zeros of dpermu_ft; * hrowi[fact->nnentu..] = indices of these non-zeros; * near-zeros in dluval flattened */ ++fact->nnentu; nincol= c_ekkscmv(fact,fact->nrow, dpermu_ft, hrowiPut, dluvalPut); /* * note that this is not the value of nincol determined by c_ekkftjup. * For Forrest-Tomlin update we want vector before U * this vector will replace one in U */ nuspik = nincol; } else { /* no room */ nuspik = -3; } /* dwork1_ft = (U^-1)dpermu_ft; dpermu_ft zeroed (?) */ nincol = c_ekkftjup_pack(fact, dpermu_ft, lastSlack, dwork1_ft, mpt_ft); } #ifdef CLP_REUSE_ETAS fact->nR_etas=save_nR_etas; fact->hpivcoR=save_hpivcoR; fact->R_etas_start=save_R_etas_start; #endif *nincolp_ft = nincol; return (nuspik); } /* c_ekkftrn */ void c_ekkftrn2(COIN_REGISTER EKKfactinfo * COIN_RESTRICT2 fact, double * COIN_RESTRICT dwork1, double * COIN_RESTRICT dpermu1,int * COIN_RESTRICT mpt1, int *nincolp, double * COIN_RESTRICT dwork1_ft, int * COIN_RESTRICT mpt_ft, int *nincolp_ft) { double * COIN_RESTRICT dluvalPut = fact->xeeadr+fact->nnentu+1; int * COIN_RESTRICT hrowiPut = fact->xeradr+fact->nnentu+1; const int nrow = fact->nrow; /* mpermu contains the permutation */ const int * COIN_RESTRICT mpermu=fact->mpermu; int lastSlack; assert (fact->numberSlacks!=0||!fact->lastSlack); lastSlack=fact->lastSlack; int nincol = *nincolp_ft; /* using dwork1 instead double *dpermu_ft = fact->kadrpm; */ int * spare = reinterpret_cast(fact->kp1adr); int kdnspt = fact->nnetas - fact->nnentl; bool isRoom = (fact->nnentu + (nrow << 1) < (kdnspt - 2) + fact->R_etas_start[fact->nR_etas + 1]); /* say F-T will be sorted */ fact->sortedEta=1; int lastNonZero; int firstNonZero = c_ekkshfpi_list2(mpermu+1, dwork1+1, dpermu1, mpt1, *nincolp,&lastNonZero); if (fact->nnentl&&lastNonZero>=fact->firstLRow) { /* dpermu1 = (L^-1)dpermu1 */ c_ekkftj4p(fact, dpermu1, firstNonZero); } #ifdef CLP_REUSE_ETAS bool skipStuff = (fact->reintro>=0); int save_nR_etas=fact->nR_etas; int * save_hpivcoR=fact->hpivcoR; int * save_R_etas_start=fact->R_etas_start; if (skipStuff) { // just move int * putSeq = fact->xrsadr+2*fact->nrowmx+2; int * position = putSeq+fact->maxinv; int * putStart = position+fact->maxinv; memset(dwork1_ft,0,nincol*sizeof(double)); int iPiv=fact->reintro; int start=putStart[iPiv]&0x7fffffff; int end=putStart[iPiv+1]&0x7fffffff; double * COIN_RESTRICT dluval = fact->xeeadr; int * COIN_RESTRICT hrowi = fact->xeradr; double dValue; if (fact->reintronrow) { iPiv++; dValue=1.0/dluval[start++]; } else { iPiv=hrowi[--end]; dValue=dluval[end]; start++; int ndoSkip=0; for (int i=fact->nrow;ireintro;i++) { if ((putStart[i]&0x80000000)==0) ndoSkip++; } fact->nR_etas-=ndoSkip; fact->hpivcoR+=ndoSkip; fact->R_etas_start+=ndoSkip; } dwork1[iPiv]=dValue; if (fact->if_sparse_update>0 && DENSE_THRESHOLDif_sparse_update>0 && DENSE_THRESHOLDnnentl) { nincol = c_ekkftj4_sparse(fact, dwork1, mpt_ft, nincol,spare); } } /* DO ROW ETAS IN L */ if (isRoom) { ++fact->nnentu; nincol= c_ekkftjl_sparse3(fact, dwork1, mpt_ft, hrowiPut, dluvalPut, nincol); fact->nuspike = nincol; /* say not sorted */ fact->sortedEta=0; } else { /* no room */ fact->nuspike=-3; nincol= c_ekkftjl_sparse2(fact, dwork1, mpt_ft, nincol); } } else { if (!skipStuff) { int lastNonZero; int firstNonZero = c_ekkshfpi_list(mpermu+1, dwork1_ft, dwork1, mpt_ft, nincol,&lastNonZero); if (fact->nnentl&&lastNonZero>=fact->firstLRow) { /* dpermu_ft = (L^-1)dpermu_ft */ c_ekkftj4p(fact, dwork1, firstNonZero); } } c_ekkftjl(fact, dwork1); if (isRoom) { /* fake start to allow room for pivot */ /* dluval[fact->nnentu...] = non-zeros of dpermu_ft; * hrowi[fact->nnentu..] = indices of these non-zeros; * near-zeros in dluval flattened */ ++fact->nnentu; nincol= c_ekkscmv(fact,fact->nrow, dwork1, hrowiPut, dluvalPut); /* * note that this is not the value of nincol determined by c_ekkftjup. * For Forrest-Tomlin update we want vector before U * this vector will replace one in U */ fact->nuspike = nincol; } else { /* no room */ fact->nuspike = -3; } } #ifdef CLP_REUSE_ETAS fact->nR_etas=save_nR_etas; fact->hpivcoR=save_hpivcoR; fact->R_etas_start=save_R_etas_start; #endif /* dpermu1 = (R^-1) dpermu1 */ c_ekkftjl(fact, dpermu1); /* DO U */ if (fact->if_sparse_update<=0 || DENSE_THRESHOLD>nrow-fact->numberSlacks) { nincol = c_ekkftjup_pack(fact, dwork1,lastSlack, dwork1_ft, mpt_ft); } else { nincol= c_ekkftju_sparse_a(fact, mpt_ft, nincol, spare); nincol = c_ekkftju_sparse_b(fact, dwork1, dwork1_ft , mpt_ft, nincol, spare); } *nincolp_ft = nincol; /* dwork1 = (U^-1)dpermu1; dpermu1 zeroed (?) */ *nincolp = c_ekkftjup(fact, dpermu1,lastSlack, dwork1, mpt1); } CoinUtils-2.9.10/CoinUtils/src/CoinPresolveDoubleton.cpp0000644000076600007660000013100012130014662021650 0ustar coincoin/* $Id: CoinPresolveDoubleton.cpp 1581 2013-04-06 12:48:50Z stefan $ */ // 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). #include #include #include "CoinFinite.hpp" #include "CoinHelperFunctions.hpp" #include "CoinPresolveMatrix.hpp" #include "CoinPresolveEmpty.hpp" // for DROP_COL/DROP_ROW #include "CoinPresolveZeros.hpp" #include "CoinPresolveFixed.hpp" #include "CoinPresolveDoubleton.hpp" #include "CoinPresolvePsdebug.hpp" #include "CoinMessage.hpp" #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #include "CoinPresolvePsdebug.hpp" #endif namespace { /* begin unnamed local namespace */ #if PRESOLVE_DEBUG > 0 #define DBGPARAM(zz_param_zz) zz_param_zz #else #define DBGPARAM(zz_param_zz) #endif /* This routine does the grunt work needed to substitute x for y in all rows i where coeff[i,y] != 0. Given ax + by = c, we have y = (c - a*x)/b = c/b + (-a/b)*x Suppose we're fixing row i. We need to adjust the row bounds by -coeff[i,y]*(c/b) and coeff[i,x] by coeff[i,y]*(-a/b). The value c/b is passed as the bounds_factor, and -a/b as the coeff_factor. row0 is the doubleton row. It is assumed that coeff[row0,y] has been removed from the column major representation before this routine is called. (Otherwise, we'd have to check for it to avoid a useless row update.) Both the row and col representations are updated. There are two cases: * coeff[i,x] != 0: in the column rep, modify coeff[i,x] ; in the row rep, modify coeff[i,x] and drop coeff[i,y]. * coeff[i,x] == 0 (i.e., non-existent): in the column rep, add coeff[i,x]; mcstrt is modified if the column must be moved ; in the row rep, convert coeff[i,y] to coeff[i,x]. The row and column reps are inconsistent during the routine and at completion. In the row rep, column x and y are updated except for the doubleton row, and in the column rep only column x is updated except for coeff[row0,x]. On return, column y and row row0 will be deleted and consistency will be restored. */ bool elim_doubleton (const char *DBGPARAM(msg), CoinBigIndex *mcstrt, double *rlo, double *rup, double *colels, int *hrow, int *hcol, int *hinrow, int *hincol, presolvehlink *clink, int ncols, CoinBigIndex *mrstrt, double *rowels, double coeff_factor, double bounds_factor, int DBGPARAM(row0), int icolx, int icoly) { CoinBigIndex kcsx = mcstrt[icolx] ; CoinBigIndex kcex = kcsx + hincol[icolx] ; # if PRESOLVE_DEBUG > 1 printf("%s %d x=%d y=%d cf=%g bf=%g nx=%d yrows=(", msg, row0, icolx, icoly, coeff_factor, bounds_factor, hincol[icolx]) ; # endif /* Open a loop to scan column y. For each nonzero coefficient (row,y), update column x and the row bounds for the row. The initial assert checks that we're properly updating column x. */ CoinBigIndex base = mcstrt[icoly] ; int numberInY = hincol[icoly] ; for (int kwhere = 0 ; kwhere < numberInY ; kwhere++) { PRESOLVEASSERT(kcex == kcsx+hincol[icolx]) ; const CoinBigIndex kcoly = base+kwhere ; const int row = hrow[kcoly] ; const double coeffy = colels[kcoly] ; double delta = coeffy*coeff_factor ; /* Look for coeff[row,x], then update accordingly. */ CoinBigIndex kcolx = presolve_find_row1(row,kcsx,kcex,hrow) ; # if PRESOLVE_DEBUG > 1 printf("%d%s ",row,(kcolx < kcex)?"+":"") ; # endif /* Case 1: coeff[i,x] != 0: update it in column and row reps; drop coeff[i,y] from row rep. */ if (kcolx < kcex) { colels[kcolx] += delta ; const CoinBigIndex kmi = presolve_find_col(icolx,mrstrt[row],mrstrt[row]+hinrow[row],hcol) ; rowels[kmi] = colels[kcolx] ; presolve_delete_from_row(row,icoly,mrstrt,hinrow,hcol,rowels) ; /* Case 2: coeff[i,x] == 0: add it in the column rep; convert coeff[i,y] in the row rep. presolve_expand_col ensures an empty entry exists at the end of the column. The location of column x may change with expansion. */ } else { const bool no_mem = presolve_expand_col(mcstrt,colels,hrow,hincol, clink,ncols,icolx) ; if (no_mem) return (true) ; kcsx = mcstrt[icolx] ; kcex = kcsx+hincol[icolx] ; // recompute y as well base = mcstrt[icoly] ; hrow[kcex] = row ; colels[kcex] = delta ; hincol[icolx]++ ; kcex++ ; CoinBigIndex k2 = presolve_find_col(icoly,mrstrt[row],mrstrt[row]+hinrow[row],hcol) ; hcol[k2] = icolx ; rowels[k2] = delta ; } /* Update the row bounds, if necessary. Avoid updating finite infinity. */ if (bounds_factor != 0.0) { delta = coeffy*bounds_factor ; if (-PRESOLVE_INF < rlo[row]) rlo[row] -= delta ; if (rup[row] < PRESOLVE_INF) rup[row] -= delta ; } } # if PRESOLVE_DEBUG > 1 printf(")\n") ; # endif return (false) ; } #if PRESOLVE_DEBUG > 0 /* Debug helpers */ double *doubleton_mult ; int *doubleton_id ; void check_doubletons (const CoinPresolveAction *paction) { const CoinPresolveAction * paction0 = paction ; if (paction) { check_doubletons(paction->next) ; if (strcmp(paction0->name(),"doubleton_action") == 0) { const doubleton_action *daction = dynamic_cast(paction0) ; for (int i = daction->nactions_-1 ; i >= 0 ; --i) { int icolx = daction->actions_[i].icolx ; int icoly = daction->actions_[i].icoly ; double coeffx = daction->actions_[i].coeffx ; double coeffy = daction->actions_[i].coeffy ; doubleton_mult[icoly] = -coeffx/coeffy ; doubleton_id[icoly] = icolx ; } } } } void check_doubletons1(const CoinPresolveAction * paction, int ncols) { doubleton_mult = new double[ncols] ; doubleton_id = new int[ncols] ; int i ; for ( i=0; i fabs(mult)) { minmult = fabs(mult) ; minid = i ; } } } if (minid != -1) printf("MIN MULT: %d %g\n", minid, minmult) ; } #endif // PRESOLVE_DEBUG } /* end unnamed local namespace */ /* It is always the case that one of the variables of a doubleton is, or can be made, implied free, but neither will necessarily be a singleton. Since in the case of a doubleton the number of non-zero entries will never increase if one is eliminated, it makes sense to always eliminate them. The col rep and row rep must be consistent. */ const CoinPresolveAction *doubleton_action::presolve (CoinPresolveMatrix *prob, const CoinPresolveAction *next) { # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 # if PRESOLVE_DEBUG > 0 std::cout << "Entering doubleton_action::presolve; considering " << prob->numberRowsToDo_ << " rows." << std::endl ; # endif presolve_consistent(prob) ; presolve_links_ok(prob) ; presolve_check_sol(prob) ; presolve_check_nbasic(prob) ; # endif # if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 int startEmptyRows = 0 ; int startEmptyColumns = 0 ; startEmptyRows = prob->countEmptyRows() ; startEmptyColumns = prob->countEmptyCols() ; # if COIN_PRESOLVE_TUNING > 0 double startTime = 0.0 ; if (prob->tuning_) startTime = CoinCpuTime() ; # endif # endif const int n = prob->ncols_ ; const int m = prob->nrows_ ; /* Unpack column-major and row-major representations, along with rim vectors. */ CoinBigIndex *colStarts = prob->mcstrt_ ; int *colLengths = prob->hincol_ ; double *colCoeffs = prob->colels_ ; int *rowIndices = prob->hrow_ ; presolvehlink *clink = prob->clink_ ; double *clo = prob->clo_ ; double *cup = prob->cup_ ; CoinBigIndex *rowStarts = prob->mrstrt_ ; int *rowLengths = prob->hinrow_ ; double *rowCoeffs = prob->rowels_ ; int *colIndices = prob->hcol_ ; presolvehlink *rlink = prob->rlink_ ; double *rlo = prob->rlo_ ; double *rup = prob->rup_ ; const unsigned char *integerType = prob->integerType_ ; double *cost = prob->cost_ ; int numberLook = prob->numberRowsToDo_ ; int *look = prob->rowsToDo_ ; const double ztolzb = prob->ztolzb_ ; const double ztolzero = 1.0e-12 ; action *actions = new action [m] ; int nactions = 0 ; /* zeros will hold columns that should be groomed to remove explicit zeros when we're finished. fixed will hold columns that have ended up as fixed variables. */ int *zeros = prob->usefulColumnInt_ ; int nzeros = 0 ; int *fixed = zeros+n ; int nfixed = 0 ; unsigned char *rowstat = prob->rowstat_ ; double *acts = prob->acts_ ; double *sol = prob->sol_ ; /* More like `ignore infeasibility'. */ bool fixInfeasibility = ((prob->presolveOptions_&0x4000) != 0) ; /* Open the main loop to scan for doubleton candidates. */ for (int iLook = 0 ; iLook < numberLook ; iLook++) { const int tgtrow = look[iLook] ; /* We need an equality with two coefficients. Avoid isolated constraints, lest both variables vanish. Failure of the assert indicates that the row- and column-major representations are out of sync. */ if ((rowLengths[tgtrow] != 2) || (fabs(rup[tgtrow]-rlo[tgtrow]) > ZTOLDP)) continue ; const CoinBigIndex krs = rowStarts[tgtrow] ; int tgtcolx = colIndices[krs] ; int tgtcoly = colIndices[krs+1] ; PRESOLVEASSERT(colLengths[tgtcolx] > 0 || colLengths[tgtcoly] > 0) ; if (colLengths[tgtcolx] == 1 && colLengths[tgtcoly] == 1) continue ; /* Avoid prohibited columns and fixed columns. Make sure the coefficients are nonzero. JJF - test should allow one to be prohibited as long as you leave that one. I modified earlier code but hope I have got this right. */ if (prob->colProhibited(tgtcolx) && prob->colProhibited(tgtcoly)) continue ; if (fabs(rowCoeffs[krs]) < ZTOLDP2 || fabs(rowCoeffs[krs+1]) < ZTOLDP2) continue ; if ((fabs(cup[tgtcolx]-clo[tgtcolx]) < ZTOLDP) || (fabs(cup[tgtcoly]-clo[tgtcoly]) < ZTOLDP)) continue ; # if PRESOLVE_DEBUG > 2 std::cout << " row " << tgtrow << " colx " << tgtcolx << " coly " << tgtcoly << " passes preliminary eval." << std::endl ; # endif /* Find this row in each column. The indices are not const because we may flip them below, once we decide which column will be eliminated. */ CoinBigIndex krowx = presolve_find_row(tgtrow,colStarts[tgtcolx], colStarts[tgtcolx]+colLengths[tgtcolx],rowIndices) ; double coeffx = colCoeffs[krowx] ; CoinBigIndex krowy = presolve_find_row(tgtrow,colStarts[tgtcoly], colStarts[tgtcoly]+colLengths[tgtcoly],rowIndices) ; double coeffy = colCoeffs[krowy] ; const double rhs = rlo[tgtrow] ; /* Avoid obscuring a requirement for integrality. If only one variable is integer, keep it and substitute for the continuous variable. If both are integer, substitute only for the forms x = k*y (k integral and non-empty intersection on bounds on x) or x = 1-y, where both x and y are binary. flag bits for integerStatus: 0x01: x integer; 0x02: y integer This bit of code works because 0 is continuous, 1 is integer. Make sure that's true. */ assert((integerType[tgtcolx] == 0) || (integerType[tgtcolx] == 1)) ; assert((integerType[tgtcoly] == 0) || (integerType[tgtcoly] == 1)) ; int integerX = integerType[tgtcolx]; int integerY = integerType[tgtcoly]; /* if one prohibited then treat that as integer. This may be pessimistic - but will catch SOS etc */ if (prob->colProhibited2(tgtcolx)) integerX=1; if (prob->colProhibited2(tgtcoly)) integerY=1; int integerStatus = (integerY<<1)|integerX ; if (integerStatus == 3) { int good = 0 ; double rhs2 = rhs ; if (coeffx < 0.0) { coeffx = -coeffx ; rhs2 += 1 ; } if ((cup[tgtcolx] == 1.0) && (clo[tgtcolx] == 0.0) && (fabs(coeffx-1.0) < 1.0e-7) && !prob->colProhibited2(tgtcoly)) good = 1 ; if (coeffy < 0.0) { coeffy = -coeffy ; rhs2 += 1 ; } if ((cup[tgtcoly] == 1.0) && (clo[tgtcoly] == 0.0) && (fabs(coeffy-1.0) < 1.0e-7) && !prob->colProhibited2(tgtcolx)) good |= 2 ; if (!(good == 3 && fabs(rhs2-1.0) < 1.0e-7)) integerStatus = -1 ; /* Not x+y = 1. Try for ax+by = 0 */ if (integerStatus < 0 && rhs == 0.0) { coeffx = colCoeffs[krowx] ; coeffy = colCoeffs[krowy] ; double ratio ; bool swap = false ; if (fabs(coeffx) > fabs(coeffy)) { ratio = coeffx/coeffy ; } else { ratio = coeffy/coeffx ; swap = true ; } ratio = fabs(ratio) ; if (fabs(ratio-floor(ratio+0.5)) < ztolzero) { integerStatus = swap ? 2 : 1 ; } } /* One last try --- just require an integral substitution formula. But ax+by = 0 above is a subset of ax+by = c below and should pass the test below. For that matter, so will x+y = 1. Why separate special cases above? -- lh, 121106 -- */ if (integerStatus < 0) { bool canDo = false ; coeffx = colCoeffs[krowx] ; coeffy = colCoeffs[krowy] ; double ratio ; bool swap = false ; double rhsRatio ; if (fabs(coeffx) > fabs(coeffy)) { ratio = coeffx/coeffy ; rhsRatio = rhs/coeffx ; } else { ratio = coeffy/coeffx ; rhsRatio = rhs/coeffy ; swap = true ; } ratio = fabs(ratio) ; if (fabs(ratio-floor(ratio+0.5)) < ztolzero) { // possible integerStatus = swap ? 2 : 1 ; // but check rhs if (rhsRatio==floor(rhsRatio+0.5)) canDo=true ; } # ifdef COIN_DEVELOP2 if (canDo) printf("Good CoinPresolveDoubleton tgtcolx %d (%g and bounds %g %g) tgtcoly %d (%g and bound %g %g) - rhs %g\n", tgtcolx,colCoeffs[krowx],clo[tgtcolx],cup[tgtcolx], tgtcoly,colCoeffs[krowy],clo[tgtcoly],cup[tgtcoly],rhs) ; else printf("Bad CoinPresolveDoubleton tgtcolx %d (%g) tgtcoly %d (%g) - rhs %g\n", tgtcolx,colCoeffs[krowx],tgtcoly,colCoeffs[krowy],rhs) ; # endif if (!canDo) continue ; } } /* We've resolved integrality concerns. If we concluded that we need to switch the roles of x and y because of integrality, do that now. If both variables are continuous, we may still want to swap for numeric stability. Eliminate the variable with the larger coefficient. */ if (integerStatus == 2) { CoinSwap(tgtcoly,tgtcolx) ; CoinSwap(krowy,krowx) ; } else if (integerStatus == 0) { if (fabs(colCoeffs[krowy]) < fabs(colCoeffs[krowx])) { CoinSwap(tgtcoly,tgtcolx) ; CoinSwap(krowy,krowx) ; } } /* Don't eliminate y just yet if it's entangled in a singleton row (we want to capture that explicit bound in a column bound). */ const CoinBigIndex kcsy = colStarts[tgtcoly] ; const CoinBigIndex kcey = kcsy+colLengths[tgtcoly] ; bool singletonRow = false ; for (CoinBigIndex kcol = kcsy ; kcol < kcey ; kcol++) { if (rowLengths[rowIndices[kcol]] == 1) { singletonRow = true ; break ; } } // skip if y prohibited if (singletonRow || prob->colProhibited2(tgtcoly)) continue ; coeffx = colCoeffs[krowx] ; coeffy = colCoeffs[krowy] ; # if PRESOLVE_DEBUG > 2 std::cout << " doubleton row " << tgtrow << ", keep x(" << tgtcolx << ") elim x(" << tgtcoly << ")." << std::endl ; # endif PRESOLVE_DETAIL_PRINT(printf("pre_doubleton %dC %dC %dR E\n", tgtcoly,tgtcolx,tgtrow)) ; /* Capture the existing columns and other information before we start to modify the constraint system. Save the shorter column. */ action *s = &actions[nactions] ; nactions++ ; s->row = tgtrow ; s->icolx = tgtcolx ; s->clox = clo[tgtcolx] ; s->cupx = cup[tgtcolx] ; s->costx = cost[tgtcolx] ; s->icoly = tgtcoly ; s->costy = cost[tgtcoly] ; s->rlo = rlo[tgtrow] ; s->coeffx = coeffx ; s->coeffy = coeffy ; s->ncolx = colLengths[tgtcolx] ; s->ncoly = colLengths[tgtcoly] ; if (s->ncoly < s->ncolx) { s->colel = presolve_dupmajor(colCoeffs,rowIndices,colLengths[tgtcoly], colStarts[tgtcoly],tgtrow) ; s->ncolx = 0 ; } else { s->colel = presolve_dupmajor(colCoeffs,rowIndices,colLengths[tgtcolx], colStarts[tgtcolx],tgtrow) ; s->ncoly = 0 ; } /* Move finite bound information from y to x, so that y is implied free. a x + b y = c l1 <= x <= u1 l2 <= y <= u2 l2 <= (c - a x) / b <= u2 b/-a > 0 ==> (b l2 - c) / -a <= x <= (b u2 - c) / -a b/-a < 0 ==> (b u2 - c) / -a <= x <= (b l2 - c) / -a */ { double lo1 = -PRESOLVE_INF ; double up1 = PRESOLVE_INF ; if (-PRESOLVE_INF < clo[tgtcoly]) { if (coeffx*coeffy < 0) lo1 = (coeffy*clo[tgtcoly]-rhs)/-coeffx ; else up1 = (coeffy*clo[tgtcoly]-rhs)/-coeffx ; } if (cup[tgtcoly] < PRESOLVE_INF) { if (coeffx*coeffy < 0) up1 = (coeffy*cup[tgtcoly]-rhs)/-coeffx ; else lo1 = (coeffy*cup[tgtcoly]-rhs)/-coeffx ; } /* Don't forget the objective coefficient. costy y = costy ((c - a x) / b) = (costy c)/b + x (costy -a)/b */ cost[tgtcolx] += (cost[tgtcoly]*-coeffx)/coeffy ; prob->change_bias((cost[tgtcoly]*rhs)/coeffy) ; /* The transfer of bounds could make x infeasible. Patch it up if the problem is minor or if the user was so incautious as to instruct us to ignore it. Prefer an integer value if there's one nearby. If there's nothing to be done, break out of the main loop. */ { double lo2 = CoinMax(clo[tgtcolx],lo1) ; double up2 = CoinMin(cup[tgtcolx],up1) ; if (lo2 > up2) { if (lo2 <= up2+prob->feasibilityTolerance_ || fixInfeasibility) { double nearest = floor(lo2+0.5) ; if (fabs(nearest-lo2) < 2.0*prob->feasibilityTolerance_) { lo2 = nearest ; up2 = nearest ; } else { lo2 = up2 ; } } else { prob->status_ |= 1 ; prob->messageHandler()->message(COIN_PRESOLVE_COLINFEAS, prob->messages()) << tgtcolx << lo2 << up2 << CoinMessageEol ; break ; } } # if PRESOLVE_DEBUG > 2 std::cout << " x(" << tgtcolx << ") lb " << clo[tgtcolx] << " --> " << lo2 << ", ub " << cup[tgtcolx] << " --> " << up2 << std::endl ; # endif clo[tgtcolx] = lo2 ; cup[tgtcolx] = up2 ; /* Do we have a solution to maintain? If so, take a stab at it. If x ends up at bound, prefer to set it nonbasic, but if we're short of basic variables after eliminating y and the logical for the row, make it basic. This code will snap the value of x to bound if it's within the primal feasibility tolerance. */ if (rowstat && sol) { int numberBasic = 0 ; double movement = 0 ; if (prob->columnIsBasic(tgtcolx)) numberBasic++ ; if (prob->columnIsBasic(tgtcoly)) numberBasic++ ; if (prob->rowIsBasic(tgtrow)) numberBasic++ ; if (sol[tgtcolx] <= lo2+ztolzb) { movement = lo2-sol[tgtcolx] ; sol[tgtcolx] = lo2 ; prob->setColumnStatus(tgtcolx, CoinPrePostsolveMatrix::atLowerBound) ; } else if (sol[tgtcolx] >= up2-ztolzb) { movement = up2-sol[tgtcolx] ; sol[tgtcolx] = up2 ; prob->setColumnStatus(tgtcolx, CoinPrePostsolveMatrix::atUpperBound) ; } if (numberBasic > 1) prob->setColumnStatus(tgtcolx,CoinPrePostsolveMatrix::basic) ; /* We need to compensate if x was forced to move. Beyond that, even if x didn't move, we've forced y = (c-ax)/b, and that might not have been true before. So even if x didn't move, y may have moved. Note that the constant term c/b is subtracted out as the constraints are modified, so we don't include it when calculating movement for y. */ if (movement) { const CoinBigIndex kkcsx = colStarts[tgtcolx] ; const CoinBigIndex kkcex = kkcsx+colLengths[tgtcolx] ; for (CoinBigIndex kcol = kkcsx ; kcol < kkcex ; kcol++) { int row = rowIndices[kcol] ; if (rowLengths[row]) acts[row] += movement*colCoeffs[kcol] ; } } movement = ((-coeffx*sol[tgtcolx])/coeffy)-sol[tgtcoly] ; if (movement) { const CoinBigIndex kkcsy = colStarts[tgtcoly] ; const CoinBigIndex kkcey = kkcsy+colLengths[tgtcoly] ; for (CoinBigIndex kcol = kkcsy ; kcol < kkcey ; kcol++) { int row = rowIndices[kcol] ; if (rowLengths[row]) acts[row] += movement*colCoeffs[kcol] ; } } } if (lo2 == up2) fixed[nfixed++] = tgtcolx ; } } /* We're done transferring bounds from y to x, and we've patched up the solution if one existed to patch. One last thing to do before we eliminate column y and the doubleton row: put column x and the entangled rows on the lists of columns and rows to look at in the next round of transforms. */ { prob->addCol(tgtcolx) ; const CoinBigIndex kkcsy = colStarts[tgtcoly] ; const CoinBigIndex kkcey = kkcsy+colLengths[tgtcoly] ; for (CoinBigIndex kcol = kkcsy ; kcol < kkcey ; kcol++) { int row = rowIndices[kcol] ; prob->addRow(row) ; } const CoinBigIndex kkcsx = colStarts[tgtcolx] ; const CoinBigIndex kkcex = kkcsx+colLengths[tgtcolx] ; for (CoinBigIndex kcol = kkcsx ; kcol < kkcex ; kcol++) { int row = rowIndices[kcol] ; prob->addRow(row) ; } } /* Empty tgtrow in the column-major matrix. Deleting the coefficient for (tgtrow,tgtcoly) is a bit costly (given that we're about to drop the whole column), but saves the trouble of checking for it in elim_doubleton. */ presolve_delete_from_col(tgtrow,tgtcolx, colStarts,colLengths,rowIndices,colCoeffs) ; presolve_delete_from_col(tgtrow,tgtcoly, colStarts,colLengths,rowIndices,colCoeffs) ; /* Drop tgtrow in the row-major representation: set the length to 0 and reclaim the major vector space in bulk storage. */ rowLengths[tgtrow] = 0 ; PRESOLVE_REMOVE_LINK(rlink,tgtrow) ; /* Transfer the colx factors to coly. This modifies coefficients in column x as it removes coefficients in column y. */ bool no_mem = elim_doubleton("ELIMD", colStarts,rlo,rup,colCoeffs, rowIndices,colIndices,rowLengths,colLengths, clink,n, rowStarts,rowCoeffs, -coeffx/coeffy, rhs/coeffy, tgtrow,tgtcolx,tgtcoly) ; if (no_mem) throwCoinError("out of memory","doubleton_action::presolve") ; /* Eliminate coly entirely from the col rep. We'll want to groom colx to remove explicit zeros. */ colLengths[tgtcoly] = 0 ; PRESOLVE_REMOVE_LINK(clink, tgtcoly) ; cost[tgtcoly] = 0.0 ; rlo[tgtrow] = 0.0 ; rup[tgtrow] = 0.0 ; zeros[nzeros++] = tgtcolx ; # if PRESOLVE_CONSISTENCY > 0 presolve_consistent(prob) ; presolve_links_ok(prob) ; # endif } /* Tidy up the collected actions and clean up explicit zeros and fixed variables. Don't bother unless we're feasible (status of 0). */ if (nactions && !prob->status_) { # if PRESOLVE_SUMMARY > 0 printf("NDOUBLETONS: %d\n", nactions) ; # endif action *actions1 = new action[nactions] ; CoinMemcpyN(actions, nactions, actions1) ; next = new doubleton_action(nactions, actions1, next) ; if (nzeros) next = drop_zero_coefficients_action::presolve(prob, zeros, nzeros, next) ; if (nfixed) next = remove_fixed_action::presolve(prob, fixed, nfixed, next) ; } deleteAction(actions,action*) ; # if COIN_PRESOLVE_TUNING > 0 if (prob->tuning_) double thisTime = CoinCpuTime() ; # endif # if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 presolve_check_sol(prob) ; # endif # if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 int droppedRows = prob->countEmptyRows()-startEmptyRows ; int droppedColumns = prob->countEmptyCols()-startEmptyColumns ; std::cout << "Leaving doubleton_action::presolve, " << droppedRows << " rows, " << droppedColumns << " columns dropped" ; # if COIN_PRESOLVE_TUNING > 0 std::cout << " in " << thisTime-startTime << "s" ; # endif std::cout << "." << std::endl ; # endif return (next) ; } /* Reintroduce the column (y) and doubleton row (irow) removed in presolve. Correct the other column (x) involved in the doubleton, update the solution, etc. A fair amount of complication arises because the presolve transform saves the shorter of x or y. Postsolve thus includes portions to restore either. */ void doubleton_action::postsolve(CoinPostsolveMatrix *prob) const { const action *const actions = actions_ ; const int nactions = nactions_ ; double *colels = prob->colels_ ; int *hrow = prob->hrow_ ; CoinBigIndex *mcstrt = prob->mcstrt_ ; int *hincol = prob->hincol_ ; int *link = prob->link_ ; double *clo = prob->clo_ ; double *cup = prob->cup_ ; double *rlo = prob->rlo_ ; double *rup = prob->rup_ ; double *dcost = prob->cost_ ; double *sol = prob->sol_ ; double *acts = prob->acts_ ; double *rowduals = prob->rowduals_ ; double *rcosts = prob->rcosts_ ; unsigned char *colstat = prob->colstat_ ; unsigned char *rowstat = prob->rowstat_ ; const double maxmin = prob->maxmin_ ; CoinBigIndex &free_list = prob->free_list_ ; const double ztolzb = prob->ztolzb_ ; const double ztoldj = prob->ztoldj_ ; const double ztolzero = 1.0e-12 ; int nrows = prob->nrows_ ; // Arrays to rebuild the unsaved column. int *index1 = new int[nrows] ; double *element1 = new double[nrows] ; CoinZeroN(element1,nrows) ; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 char *cdone = prob->cdone_ ; char *rdone = prob->rdone_ ; presolve_check_threads(prob) ; presolve_check_sol(prob,2,2,2) ; presolve_check_nbasic(prob) ; presolve_check_reduced_costs(prob) ; # if PRESOLVE_DEBUG > 0 std::cout << "Entering doubleton_action::postsolve, " << nactions << " transforms to undo." << std::endl ; # endif # endif /* The outer loop: step through the doubletons in this array of actions. The first activity is to unpack the doubleton. */ for (const action *f = &actions[nactions-1] ; actions <= f ; f--) { const int irow = f->row ; const double lo0 = f->clox ; const double up0 = f->cupx ; const double coeffx = f->coeffx ; const double coeffy = f->coeffy ; const int jcolx = f->icolx ; const int jcoly = f->icoly ; const double rhs = f->rlo ; # if PRESOLVE_DEBUG > 2 std::cout << std::endl << " restoring doubleton " << irow << ", elim x(" << jcoly << "), kept x(" << jcolx << "); stored col " ; if (f->ncoly) std::cout << jcoly ; else std::cout << jcolx ; std::cout << "." << std::endl ; std::cout << " x(" << jcolx << ") " << prob->columnStatusString(jcolx) << " " << clo[jcolx] << " <= " << sol[jcolx] << " <= " << cup[jcolx] << "; cj " << f->costx << " dj " << rcosts[jcolx] << "." << std::endl ; # endif /* jcolx is in the problem (for whatever reason), and the doubleton row (irow) and column (jcoly) have only been processed by empty row/column postsolve (i.e., reintroduced with length 0). */ PRESOLVEASSERT(cdone[jcolx] && rdone[irow] == DROP_ROW) ; PRESOLVEASSERT(cdone[jcoly] == DROP_COL) ; /* Restore bounds for doubleton row, bounds and objective coefficient for x, objective for y. Original comment: restoration of rlo and rup likely isn't necessary. */ rlo[irow] = f->rlo ; rup[irow] = f->rlo ; clo[jcolx] = lo0 ; cup[jcolx] = up0 ; dcost[jcolx] = f->costx ; dcost[jcoly] = f->costy ; /* Set primal solution for y (including status) and row activity for the doubleton row. The motivation (up in presolve) for wanting coeffx < coeffy is to avoid inflation into sol[y]. Since this is a (satisfied) equality, activity is the rhs value and the logical is nonbasic. */ const double diffy = rhs-coeffx*sol[jcolx] ; if (fabs(diffy) < ztolzero) sol[jcoly] = 0 ; else sol[jcoly] = diffy/coeffy ; acts[irow] = rhs ; if (rowstat) prob->setRowStatus(irow,CoinPrePostsolveMatrix::atLowerBound) ; # if PRESOLVE_DEBUG > 2 /* Original comment: I've forgotten what this is about We have sol[y] = (rhs - coeffx*sol[x])/coeffy. As best I can figure, the original check here tested for the possibility of loss of significant digits through cancellation, followed by inflation if coeffy is small. The hazard is clear enough, but the test was puzzling. Overly complicated and it generated false warnings for the common case of sol[y] a clean zero. Replaced with something that I hope is more useful. The tolerances are, sad to say, completely arbitrary. -- lh, 121106 -- */ if ((fabs(diffy) < 1.0e-6) && (fabs(diffy) >= ztolzero) && (fabs(coeffy) < 1.0e-3)) std::cout << " loss of significance? rhs " << rhs << " (coeffx*sol[jcolx])" << (coeffx*sol[jcolx]) << " diff " << diffy << "." << std::endl ; # endif /* Time to get into the correction/restoration of coefficients for columns x and y, with attendant correction of row bounds and activities. Accumulate partial reduced costs (missing the contribution from the doubleton row) so that we can eventually calculate a dual for the doubleton row. */ double djy = maxmin*dcost[jcoly] ; double djx = maxmin*dcost[jcolx] ; /* We saved column y in the action, so we'll use it to reconstruct column x. There are two aspects: correction of existing x coefficients, and fill in. Given coeffx'[k] = coeffx[k]+coeffy[k]*coeff_factor we have coeffx[k] = coeffx'[k]-coeffy[k]*coeff_factor where coeff_factor = -coeffx[dblton]/coeffy[dblton]. Keep in mind that the major vector stored in the action does not include the coefficient from the doubleton row --- the doubleton coefficients are held in coeffx and coeffy. */ if (f->ncoly) { int ncoly = f->ncoly-1 ; int *indy = reinterpret_cast(f->colel+ncoly) ; /* Rebuild a threaded column y, starting with the end of the thread and working back to the beginning. In the process, accumulate corrections to column x in element1 and index1. Fix row bounds and activity as we go (add back the constant correction removed in presolve), and accumulate contributions to the reduced cost for y. Don't tweak finite infinity. The PRESOLVEASSERT says this row should already be present. */ int ystart = NO_LINK ; int nX = 0 ; for (int kcol = 0 ; kcol < ncoly ; ++kcol) { const int i = indy[kcol] ; PRESOLVEASSERT(rdone[i]) ; double yValue = f->colel[kcol] ; if (-PRESOLVE_INF < rlo[i]) rlo[i] += (yValue*rhs)/coeffy ; if (rup[i] < PRESOLVE_INF) rup[i] += (yValue*rhs)/coeffy ; acts[i] += (yValue*rhs)/coeffy ; djy -= rowduals[i]*yValue ; /* Link the coefficient into column y: Acquire the first free slot in the bulk arrays and store the row index and coefficient. Then link the slot in front of coefficients we've already processed. */ const CoinBigIndex kfree = free_list ; assert(kfree >= 0 && kfree < prob->bulk0_) ; free_list = link[free_list] ; hrow[kfree] = i ; colels[kfree] = yValue ; link[kfree] = ystart ; ystart = kfree ; # if PRESOLVE_DEBUG > 4 std::cout << " link y " << kfree << " row " << i << " coeff " << yValue << " dual " << rowduals[i] << std::endl ; # endif /* Calculate and store the correction to the x coefficient. */ yValue = (yValue*coeffx)/coeffy ; element1[i] = yValue ; index1[nX++] = i ; } # if PRESOLVE_CONSISTENCY > 0 presolve_check_free_list(prob) ; # endif /* Handle the coefficients of the doubleton row. Insert coeffy, coeffx. */ const CoinBigIndex kfree = free_list ; assert(kfree >= 0 && kfree < prob->bulk0_) ; free_list = link[free_list] ; hrow[kfree] = irow ; colels[kfree] = coeffy ; link[kfree] = ystart ; ystart = kfree ; # if PRESOLVE_DEBUG > 4 std::cout << " link y " << kfree << " row " << irow << " coeff " << coeffy << " dual n/a" << std::endl ; # endif element1[irow] = coeffx ; index1[nX++] = irow ; /* Attach the threaded column y to mcstrt and record the length. */ mcstrt[jcoly] = ystart ; hincol[jcoly] = f->ncoly ; /* Now integrate the corrections to column x. Scan the column and correct the existing entries. The correction could cancel the existing coefficient and we don't want to leave an explicit zero. In this case, relink the column around it. The freed slot is linked at the beginning of the free list. */ CoinBigIndex kcs = mcstrt[jcolx] ; CoinBigIndex last_nonzero = NO_LINK ; int numberInColumn = hincol[jcolx] ; const int numberToDo = numberInColumn ; for (int kcol = 0 ; kcol < numberToDo ; ++kcol) { const int i = hrow[kcs] ; assert(i >= 0 && i < nrows && i != irow) ; double value = colels[kcs]+element1[i] ; element1[i] = 0.0 ; if (fabs(value) >= 1.0e-15) { colels[kcs] = value ; last_nonzero = kcs ; kcs = link[kcs] ; djx -= rowduals[i]*value ; # if PRESOLVE_DEBUG > 4 std::cout << " link x " << last_nonzero << " row " << i << " coeff " << value << " dual " << rowduals[i] << std::endl ; # endif } else { # if PRESOLVE_DEBUG > 4 std::cout << " link x skipped row " << i << " dual " << rowduals[i] << std::endl ; # endif numberInColumn-- ; // add to free list int nextk = link[kcs] ; assert(free_list >= 0) ; link[kcs] = free_list ; free_list = kcs ; assert(kcs >= 0) ; kcs = nextk ; if (last_nonzero != NO_LINK) link[last_nonzero] = kcs ; else mcstrt[jcolx] = kcs ; } } if (last_nonzero != NO_LINK) link[last_nonzero] = NO_LINK ; /* We've dealt with the existing nonzeros in column x. Any remaining nonzeros in element1 will be fill in, which we insert at the beginning of the column. */ for (int kcol = 0 ; kcol < nX ; kcol++) { const int i = index1[kcol] ; double xValue = element1[i] ; element1[i] = 0.0 ; if (fabs(xValue) >= 1.0e-15) { if (i != irow) djx -= rowduals[i]*xValue ; numberInColumn++ ; CoinBigIndex kfree = free_list ; assert(kfree >= 0 && kfree < prob->bulk0_) ; free_list = link[free_list] ; hrow[kfree] = i ; PRESOLVEASSERT(rdone[hrow[kfree]] || (hrow[kfree] == irow)) ; colels[kfree] = xValue ; link[kfree] = mcstrt[jcolx] ; mcstrt[jcolx] = kfree ; # if PRESOLVE_DEBUG > 4 std::cout << " link x " << kfree << " row " << i << " coeff " << xValue << " dual " ; if (i != irow) std::cout << rowduals[i] ; else std::cout << "n/a" ; std::cout << std::endl ; # endif } } # if PRESOLVE_CONSISTENCY > 0 presolve_check_free_list(prob) ; # endif /* Whew! Set the column length and we're done. */ assert(numberInColumn) ; hincol[jcolx] = numberInColumn ; } else { /* Of course, we could have saved column x in the action. Now we need to regenerate coefficients of column y. Given coeffx'[k] = coeffx[k]+coeffy[k]*coeff_factor we have coeffy[k] = (coeffx'[k]-coeffx[k])*(1/coeff_factor) where coeff_factor = -coeffx[dblton]/coeffy[dblton]. */ const int ncolx = f->ncolx-1 ; int *indx = reinterpret_cast (f->colel+ncolx) ; /* Scan existing column x to find the end. While we're at it, accumulate part of the new y coefficients in index1 and element1. */ CoinBigIndex kcs = mcstrt[jcolx] ; int nX = 0 ; for (int kcol = 0 ; kcol < hincol[jcolx]-1 ; ++kcol) { if (colels[kcs]) { const int i = hrow[kcs] ; index1[nX++] = i ; element1[i] = -(colels[kcs]*coeffy)/coeffx ; } kcs = link[kcs] ; } if (colels[kcs]) { const int i = hrow[kcs] ; index1[nX++] = i ; element1[i] = -(colels[kcs]*coeffy)/coeffx ; } /* Replace column x with the the original column x held in the doubleton action (recall that this column does not include coeffx). We first move column x to the free list, then thread a column with the original coefficients, back to front. While we're at it, add the second part of the y coefficients to index1 and element1. */ link[kcs] = free_list ; free_list = mcstrt[jcolx] ; int xstart = NO_LINK ; for (int kcol = 0 ; kcol < ncolx ; ++kcol) { const int i = indx[kcol] ; PRESOLVEASSERT(rdone[i] && i != irow) ; double xValue = f->colel[kcol] ; CoinBigIndex k = free_list ; assert(k >= 0 && k < prob->bulk0_) ; free_list = link[free_list] ; hrow[k] = i ; colels[k] = xValue ; link[k] = xstart ; xstart = k ; djx -= rowduals[i]*xValue ; xValue = (xValue*coeffy)/coeffx ; if (!element1[i]) { element1[i] = xValue ; index1[nX++] = i ; } else { element1[i] += xValue ; } } # if PRESOLVE_CONSISTENCY > 0 presolve_check_free_list(prob) ; # endif /* The same, for the doubleton row. */ { double xValue = coeffx ; CoinBigIndex k = free_list ; assert(k >= 0 && k < prob->bulk0_) ; free_list = link[free_list] ; hrow[k] = irow ; colels[k] = xValue ; link[k] = xstart ; xstart = k ; element1[irow] = coeffy ; index1[nX++] = irow ; } /* Link the new column x to mcstrt and set the length. */ mcstrt[jcolx] = xstart ; hincol[jcolx] = f->ncolx ; /* Now get to work building a threaded column y from the nonzeros in element1. As before, build the thread in reverse. */ int ystart = NO_LINK ; int leny = 0 ; for (int kcol = 0 ; kcol < nX ; kcol++) { const int i = index1[kcol] ; PRESOLVEASSERT(rdone[i] || i == irow) ; double yValue = element1[i] ; element1[i] = 0.0 ; if (fabs(yValue) >= ztolzero) { leny++ ; CoinBigIndex k = free_list ; assert(k >= 0 && k < prob->bulk0_) ; free_list = link[free_list] ; hrow[k] = i ; colels[k] = yValue ; link[k] = ystart ; ystart = k ; } } # if PRESOLVE_CONSISTENCY > 0 presolve_check_free_list(prob) ; # endif /* Tidy up --- link the new column into mcstrt and set the length. */ mcstrt[jcoly] = ystart ; assert(leny) ; hincol[jcoly] = leny ; /* Now that we have the original y, we can scan it and do the corrections to the row bounds and activity, and get a start on a reduced cost for y. */ kcs = mcstrt[jcoly] ; const int ny = hincol[jcoly] ; for (int kcol = 0 ; kcol < ny ; ++kcol) { const int row = hrow[kcs] ; const double coeff = colels[kcs] ; kcs = link[kcs] ; if (row != irow) { // undo elim_doubleton(1) if (-PRESOLVE_INF < rlo[row]) rlo[row] += (coeff*rhs)/coeffy ; // undo elim_doubleton(2) if (rup[row] < PRESOLVE_INF) rup[row] += (coeff*rhs)/coeffy ; acts[row] += (coeff*rhs)/coeffy ; djy -= rowduals[row]*coeff ; } } } # if PRESOLVE_DEBUG > 2 /* Sanity checks. The doubleton coefficients should be linked in the first position of the each column (for no good reason except that it makes it much easier to write these checks). */ # if PRESOLVE_DEBUG > 4 std::cout << " kept: saved " << jcolx << " " << coeffx << ", reconstructed " << hrow[mcstrt[jcolx]] << " " << colels[mcstrt[jcolx]] << "." << std::endl ; std::cout << " elim: saved " << jcoly << " " << coeffy << ", reconstructed " << hrow[mcstrt[jcoly]] << " " << colels[mcstrt[jcoly]] << "." << std::endl ; # endif assert((coeffx == colels[mcstrt[jcolx]]) && (coeffy == colels[mcstrt[jcoly]])) ; # endif /* Time to calculate a dual for the doubleton row, and settle the status of x and y. Ideally, we'll leave x at whatever nonbasic status it currently has and make y basic. There's a potential problem, however: Remember that we transferred bounds from y to x when we eliminated y. If those bounds were tighter than x's original bounds, we may not be able to maintain x at its present status, or even as nonbasic. We'll make two claims here: * If the dual value for the doubleton row is chosen to keep the reduced cost djx of col x at its prior value, then the reduced cost djy of col y will be 0. (Crank through the linear algebra to convince yourself.) * If the bounds on x have loosened, then it must be possible to make y nonbasic, because we've transferred the tight bound back to y. (Yeah, I'm waving my hands. But it sounds good. -- lh, 040907 --) So ... if we can maintain x nonbasic, then we need to set y basic, which means we should calculate rowduals[dblton] so that rcost[jcoly] == 0. We may need to change the status of x (an artifact of loosening a bound when x was previously a fixed variable). If we need to push x into the basis, then we calculate rowduals[dblton] so that rcost[jcolx] == 0 and make y nonbasic. */ # if PRESOLVE_DEBUG > 2 std::cout << " pre status: x(" << jcolx << ") " << prob->columnStatusString(jcolx) << " " << clo[jcolx] << " <= " << sol[jcolx] << " <= " << cup[jcolx] << ", cj " << dcost[jcolx] << ", dj " << djx << "." << std::endl ; std::cout << " pre status: x(" << jcoly << ") " << clo[jcoly] << " <= " << sol[jcoly] << " <= " << cup[jcoly] << ", cj " << dcost[jcoly] << ", dj " << djy << "." << std::endl ; # endif if (colstat) { bool basicx = prob->columnIsBasic(jcolx) ; bool nblbxok = (fabs(lo0 - sol[jcolx]) < ztolzb) && (rcosts[jcolx] >= -ztoldj) ; bool nbubxok = (fabs(up0 - sol[jcolx]) < ztolzb) && (rcosts[jcolx] <= ztoldj) ; if (basicx || nblbxok || nbubxok) { if (!basicx) { if (nblbxok) { prob->setColumnStatus(jcolx, CoinPrePostsolveMatrix::atLowerBound) ; } else if (nbubxok) { prob->setColumnStatus(jcolx, CoinPrePostsolveMatrix::atUpperBound) ; } } prob->setColumnStatus(jcoly,CoinPrePostsolveMatrix::basic) ; rowduals[irow] = djy/coeffy ; rcosts[jcolx] = djx-rowduals[irow]*coeffx ; rcosts[jcoly] = 0.0 ; } else { prob->setColumnStatus(jcolx,CoinPrePostsolveMatrix::basic) ; prob->setColumnStatusUsingValue(jcoly) ; rowduals[irow] = djx/coeffx ; rcosts[jcoly] = djy-rowduals[irow]*coeffy ; rcosts[jcolx] = 0.0 ; } # if PRESOLVE_DEBUG > 2 std::cout << " post status: " << irow << " dual " << rowduals[irow] << " rhs " << rlo[irow] << std::endl ; std::cout << " post status: x(" << jcolx << ") " << prob->columnStatusString(jcolx) << " " << clo[jcolx] << " <= " << sol[jcolx] << " <= " << cup[jcolx] << ", cj " << dcost[jcolx] << ", dj = " << rcosts[jcolx] << "." << std::endl ; std::cout << " post status: x(" << jcoly << ") " << prob->columnStatusString(jcoly) << " " << clo[jcoly] << " <= " << sol[jcoly] << " <= " << cup[jcoly] << ", cj " << dcost[jcoly] << ", dj " << rcosts[jcoly] << "." << std::endl ; /* These asserts are valid but need a scaled tolerance to work well over a range of problems. Occasionally useful for a hard stop while debugging. assert(!prob->columnIsBasic(jcolx) || (fabs(rcosts[jcolx]) < 1.0e-5)) ; assert(!prob->columnIsBasic(jcoly) || (fabs(rcosts[jcoly]) < 1.0e-5)) ; */ # endif } else { // No status array // this is the coefficient we need to force col y's reduced cost to 0.0 ; // for example, this is obviously true if y is a singleton column rowduals[irow] = djy/coeffy ; rcosts[jcoly] = 0.0 ; } # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 /* Mark the column and row as processed by doubleton action. Then check integrity of the threaded matrix. */ cdone[jcoly] = DOUBLETON ; rdone[irow] = DOUBLETON ; presolve_check_threads(prob) ; # endif # if PRESOLVE_DEBUG > 0 /* Confirm accuracy of reduced cost for columns x and y. */ { CoinBigIndex k = mcstrt[jcolx] ; const int nx = hincol[jcolx] ; double dj = maxmin*dcost[jcolx] ; for (int kcol = 0 ; kcol < nx ; ++kcol) { const int row = hrow[k] ; const double coeff = colels[k] ; k = link[k] ; dj -= rowduals[row]*coeff ; } if (!(fabs(rcosts[jcolx]-dj) < 100*ZTOLDP)) printf("BAD DOUBLE X DJ: %d %d %g %g\n", irow,jcolx,rcosts[jcolx],dj) ; rcosts[jcolx] = dj ; } { CoinBigIndex k = mcstrt[jcoly] ; const int ny = hincol[jcoly] ; double dj = maxmin*dcost[jcoly] ; for (int kcol = 0 ; kcol < ny ; ++kcol) { const int row = hrow[k] ; const double coeff = colels[k] ; k = link[k] ; dj -= rowduals[row]*coeff ; } if (!(fabs(rcosts[jcoly]-dj) < 100*ZTOLDP)) printf("BAD DOUBLE Y DJ: %d %d %g %g\n", irow,jcoly,rcosts[jcoly],dj) ; rcosts[jcoly] = dj ; } # endif } /* Done at last. Delete the scratch arrays. */ delete [] index1 ; delete [] element1 ; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 presolve_check_sol(prob,2,2,2) ; presolve_check_nbasic(prob) ; presolve_check_reduced_costs(prob) ; # if PRESOLVE_DEBUG > 0 std::cout << "Leaving doubleton_action::postsolve." << std::endl ; # endif # endif } doubleton_action::~doubleton_action() { for (int i=nactions_-1; i>=0; i--) { delete[]actions_[i].colel ; } deleteAction(actions_,action*) ; } CoinUtils-2.9.10/CoinUtils/src/CoinPragma.hpp0000644000076600007660000000152611510456064017431 0ustar coincoin/* $Id: CoinPragma.hpp 1372 2011-01-03 23:31:00Z 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). #ifndef CoinPragma_H #define CoinPragma_H //------------------------------------------------------------------- // // This is a file which can contain Pragma's that are // generally applicable to any source file. // //------------------------------------------------------------------- #if defined(_MSC_VER) // Turn off compiler warning about long names # pragma warning(disable:4786) // Turn off compiler warning: // "empty controlled statement found; is this the intent?" # pragma warning(disable:4390) // Turn off compiler warning about deprecated functions # pragma warning(disable:4996) #endif #endif CoinUtils-2.9.10/CoinUtils/src/config.h.in0000644000076600007660000001167312227525576016742 0ustar coincoin/* src/config.h.in. Generated from configure.ac by autoheader. */ /* Define to 1 if stdint.h is available for CoinUtils */ #undef COINUTILS_HAS_STDINT_H /* Default maximum pooled allocation size */ #undef COINUTILS_MEMPOOL_MAXPOOLED /* Define to 1 CoinUtils should override global new/delete */ #undef COINUTILS_MEMPOOL_OVERRIDE_NEW /* Define to 1 if the thread aware version of CoinUtils should be compiled */ #undef COINUTILS_PTHREADS /* SVN revision number of project */ #undef COINUTILS_SVN_REV /* Version number of project */ #undef COINUTILS_VERSION /* Major Version number of project */ #undef COINUTILS_VERSION_MAJOR /* Minor Version number of project */ #undef COINUTILS_VERSION_MINOR /* Release Version number of project */ #undef COINUTILS_VERSION_RELEASE /* Define to the debug sanity check level (0 is no test) */ #undef COIN_COINUTILS_CHECKLEVEL /* Define to the debug verbosity level (0 is no output) */ #undef COIN_COINUTILS_VERBOSITY /* Define to be the name of C-function for Inf check */ #undef COIN_C_FINITE /* Define to be the name of C-function for NaN check */ #undef COIN_C_ISNAN /* If defined, the BLAS Library is available. */ #undef COIN_HAS_BLAS /* Define to 1 if bzlib is available */ #undef COIN_HAS_BZLIB /* Define to 1 if the Glpk package is available */ #undef COIN_HAS_GLPK /* If defined, the LAPACK Library is available. */ #undef COIN_HAS_LAPACK /* Define to 1 if the Netlib package is available */ #undef COIN_HAS_NETLIB /* Define to 1 if readline is available */ #undef COIN_HAS_READLINE /* Define to 1 if the Sample package is available */ #undef COIN_HAS_SAMPLE /* Define to 1 if zlib is available */ #undef COIN_HAS_ZLIB /* Define to 64bit integer type */ #undef COIN_INT64_T /* Define to integer type capturing pointer */ #undef COIN_INTPTR_T /* Define to 64bit unsigned integer type */ #undef COIN_UINT64_T /* Define to dummy `main' function (if any) required to link to the Fortran libraries. */ #undef F77_DUMMY_MAIN /* Define to a macro mangling the given C identifier (in lower and upper case), which must not contain underscores, for linking with Fortran. */ #undef F77_FUNC /* As F77_FUNC, but for C identifiers containing underscores. */ #undef F77_FUNC_ /* 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_BZLIB_H /* 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_CINTTYPES /* Define to 1 if you have the header file. */ #undef HAVE_CMATH /* Define to 1 if you have the header file. */ #undef HAVE_CSTDINT /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_ENDIAN_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_READLINE_READLINE_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 /* Define to 1 if you have the header file. */ #undef HAVE_WINDOWS_H /* Define to 1 if you have the header file. */ #undef HAVE_ZLIB_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 /* The size of a `int', as computed by sizeof. */ #undef SIZEOF_INT /* The size of a `int *', as computed by sizeof. */ #undef SIZEOF_INT_P /* The size of a `long', as computed by sizeof. */ #undef SIZEOF_LONG /* The size of a `long long', as computed by sizeof. */ #undef SIZEOF_LONG_LONG /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION CoinUtils-2.9.10/CoinUtils/src/CoinTypes.hpp0000644000076600007660000000304312215120127017311 0ustar coincoin/* $Id: CoinTypes.hpp 1628 2013-09-14 17:43:51Z stefan $ */ // Copyright (C) 2004, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef _CoinTypes_hpp #define _CoinTypes_hpp #include "CoinUtilsConfig.h" /* On some systems, we require stdint.h to have the 64bit integer type defined. */ #ifdef COINUTILS_HAS_STDINT_H #include #endif #define CoinInt64 COIN_INT64_T #define CoinUInt64 COIN_UINT64_T #define CoinIntPtr COIN_INTPTR_T //============================================================================= #ifndef COIN_BIG_INDEX #define COIN_BIG_INDEX 0 #endif #if COIN_BIG_INDEX==0 typedef int CoinBigIndex; #elif COIN_BIG_INDEX==1 typedef long CoinBigIndex; #else typedef long long CoinBigIndex; #endif //============================================================================= #ifndef COIN_BIG_DOUBLE #define COIN_BIG_DOUBLE 0 #endif // See if we want the ability to have long double work arrays #if COIN_BIG_DOUBLE==2 #undef COIN_BIG_DOUBLE #define COIN_BIG_DOUBLE 0 #define COIN_LONG_WORK 1 typedef long double CoinWorkDouble; #elif COIN_BIG_DOUBLE==3 #undef COIN_BIG_DOUBLE #define COIN_BIG_DOUBLE 1 #define COIN_LONG_WORK 1 typedef long double CoinWorkDouble; #else #define COIN_LONG_WORK 0 typedef double CoinWorkDouble; #endif #if COIN_BIG_DOUBLE==0 typedef double CoinFactorizationDouble; #elif COIN_BIG_DOUBLE==1 typedef long double CoinFactorizationDouble; #else typedef double CoinFactorizationDouble; #endif #endif CoinUtils-2.9.10/CoinUtils/src/CoinOslC.h0000644000076600007660000005364212130104232016512 0ustar coincoin/* $Id: CoinOslC.h 1585 2013-04-06 20:42:02Z stefan $ */ #ifndef COIN_OSL_C_INCLUDE /* Copyright (C) 1987, 2009, International Business Machines Corporation and others. All Rights Reserved. This code is licensed under the terms of the Eclipse Public License (EPL). */ #define COIN_OSL_C_INCLUDE #ifndef CLP_OSL #define CLP_OSL 0 #endif #define C_EKK_GO_SPARSE 200 #ifdef HAVE_ENDIAN_H #include #if __BYTE_ORDER == __LITTLE_ENDIAN #define INTEL #endif #endif #include #include #include #include #define SPARSE_UPDATE #define NO_SHIFT #include "CoinHelperFunctions.hpp" #include #ifdef __cplusplus extern "C"{ #endif int c_ekkbtrn( register const EKKfactinfo *fact, double *dwork1, int * mpt,int first_nonzero); int c_ekkbtrn_ipivrw( register const EKKfactinfo *fact, double *dwork1, int * mpt, int ipivrw,int * spare); int c_ekketsj( register /*const*/ EKKfactinfo *fact, double *dwork1, int *mpt2, double dalpha, int orig_nincol, int npivot, int *nuspikp, const int ipivrw, int * spare); int c_ekkftrn( register const EKKfactinfo *fact, double *dwork1, double * dpermu,int * mpt, int numberNonZero); int c_ekkftrn_ft( register EKKfactinfo *fact, double *dwork1, int *mpt, int *nincolp); void c_ekkftrn2( register EKKfactinfo *fact, double *dwork1, double * dpermu1,int * mpt1, int *nincolp, double *dwork1_ft, int *mpt_ft, int *nincolp_ft); int c_ekklfct( register EKKfactinfo *fact); int c_ekkslcf( register const EKKfactinfo *fact); inline void c_ekkscpy(int n, const int *marr1,int *marr2) { CoinMemcpyN(marr1,n,marr2);} inline void c_ekkdcpy(int n, const double *marr1,double *marr2) { CoinMemcpyN(marr1,n,marr2);} int c_ekk_IsSet(const int * array,int bit); void c_ekk_Set(int * array,int bit); void c_ekk_Unset(int * array,int bit); void c_ekkzero(int length, int n, void * array); inline void c_ekkdzero(int n, double *marray) {CoinZeroN(marray,n);} inline void c_ekkizero(int n, int *marray) {CoinZeroN(marray,n);} inline void c_ekkczero(int n, char *marray) {CoinZeroN(marray,n);} #ifdef __cplusplus } #endif #define c_ekkscpy_0_1(s,ival,array) CoinFillN(array,s,ival) #define c_ekks1cpy( n,marr1,marr2) CoinMemcpyN(marr1,n, marr2) void clp_setup_pointers(EKKfactinfo * fact); void clp_memory(int type); double * clp_double(int number_entries); int * clp_int(int number_entries); void * clp_malloc(int number_entries); void clp_free(void * oldArray); #define SLACK_VALUE -1.0 #define C_EKK_REMOVE_LINK(hpiv,hin,link,ipivot) \ { \ int ipre = link[ipivot].pre; \ int isuc = link[ipivot].suc; \ if (ipre > 0) { \ link[ipre].suc = isuc; \ } \ if (ipre <= 0) { \ hpiv[hin[ipivot]] = isuc; \ } \ if (isuc > 0) { \ link[isuc].pre = ipre; \ } \ } #define C_EKK_ADD_LINK(hpiv,nzi,link, npr) \ { \ int ifiri = hpiv[nzi]; \ hpiv[nzi] = npr; \ link[npr].suc = ifiri; \ link[npr].pre = 0; \ if (ifiri != 0) { \ link[ifiri].pre = npr; \ } \ } #include #ifdef NO_SHIFT #define SHIFT_INDEX(limit) (limit) #define UNSHIFT_INDEX(limit) (limit) #define SHIFT_REF(arr,ind) (arr)[ind] #else #define SHIFT_INDEX(limit) ((limit)<<3) #define UNSHIFT_INDEX(limit) ((unsigned int)(limit)>>3) #define SHIFT_REF(arr,ind) (*(double*)((char*)(arr) + (ind))) #endif #ifdef INTEL #define NOT_ZERO(x) (((*((reinterpret_cast(&x))+7)) & 0x7F) != 0) #else #define NOT_ZERO(x) ((x) != 0.0) #endif #define SWAP(type,_x,_y) { type _tmp = (_x); (_x) = (_y); (_y) = _tmp;} #define UNROLL_LOOP_BODY1(code) \ {{code}} #define UNROLL_LOOP_BODY2(code) \ {{code} {code}} #define UNROLL_LOOP_BODY4(code) \ {{code} {code} {code} {code}} #endif #ifdef COIN_OSL_CMFC /* Return codes in IRTCOD/IRTCOD are */ /* 4: numerical problems */ /* 5: not enough space in row file */ /* 6: not enough space in column file */ /* 23: system error at label 320 */ { #if 1 int *hcoli = fact->xecadr; double *dluval = fact->xeeadr; double *dvalpv = fact->kw3adr; int *mrstrt = fact->xrsadr; int *hrowi = fact->xeradr; int *mcstrt = fact->xcsadr; int *hinrow = fact->xrnadr; int *hincol = fact->xcnadr; int *hpivro = fact->krpadr; int *hpivco = fact->kcpadr; #endif int nnentl = fact->nnentl; int nnentu = fact->nnentu; int kmxeta = fact->kmxeta; int xnewro = *xnewrop; int ncompactions = *ncompactionsp; MACTION_T *maction = reinterpret_cast(maction_void); int i, j, k; double d1; int j1, j2; int jj, kk, kr, nz, jj1, jj2, kce, kcs, kqq, npr; int fill, naft; int enpr; int nres, npre; int knpr, irow, iadd32, ibase; double pivot; int count, nznpr; int nlast, epivr1; int kipis; double dpivx; int kipie, kcpiv, knprs, knpre; bool cancel; double multip, elemnt; int ipivot, jpivot, epivro, epivco, lstart, nfirst; int nzpivj, kfill, kstart; int nmove, ileft; #ifndef C_EKKCMFY int iput, nspare; int noRoomForDense=0; int if_sparse_update=fact->if_sparse_update; int ifdens = 0; #endif int irtcod = 0; const int nrow = fact->nrow; /* Parameter adjustments */ --maction; /* Function Body */ lstart = nnetas - nnentl + 1; for (i = lstart; i <= nnetas; ++i) { hrowi[i] = SHIFT_INDEX(hcoli[i]); } for (i = 1; i <= nrow; ++i) { maction[i] = 0; mwork[i].pre = i - 1; mwork[i].suc = i + 1; } iadd32 = 0; nlast = nrow; nfirst = 1; mwork[1].pre = nrow; mwork[nrow].suc = 1; for (count = 1; count <= nrow; ++count) { /* Pick column singletons */ if (! (hpivco[1] <= 0)) { int small_pivot = c_ekkcsin(fact, rlink, clink, nsingp); if (small_pivot) { irtcod = 7; /* pivot too small */ if (fact->invok >= 0) { goto L1050; } } if (fact->npivots >= nrow) { goto L1050; } } /* Pick row singletons */ if (! (hpivro[1] <= 0)) { irtcod = c_ekkrsin(fact, rlink, clink, mwork,nfirst, nsingp, &xnewco, &xnewro, &nnentu, &kmxeta, &ncompactions, &nnentl); if (irtcod != 0) { if (irtcod < 0 || fact->invok >= 0) { /* -5 */ goto L1050; } /* ASSERT: irtcod == 7 - pivot too small */ /* why don't we return with an error? */ } if (fact->npivots >= nrow) { goto L1050; } lstart = nnetas - nnentl + 1; } /* Find a pivot element */ irtcod = c_ekkfpvt(fact, rlink, clink, nsingp, xrejctp, &ipivot, &jpivot); if (irtcod != 0) { /* irtcod == 10 */ goto L1050; } /* Update list structures and prepare for numerical phase */ c_ekkprpv(fact, rlink, clink, *xrejctp, ipivot, jpivot); epivco = hincol[jpivot]; ++fact->xnetal; mcstrt[fact->xnetal] = lstart - 1; hpivco[fact->xnetal] = ipivot; epivro = hinrow[ipivot]; epivr1 = epivro - 1; kipis = mrstrt[ipivot]; pivot = dluval[kipis]; dpivx = 1. / pivot; kipie = kipis + epivr1; ++kipis; #ifndef C_EKKCMFY { double size = nrow - fact->npivots; if (size > GO_DENSE && (nnentu - fact->nuspike) * GO_DENSE_RATIO > size * size) { /* say going to dense coding */ if (*nsingp == 0) { ifdens = 1; } } } #endif /* copy the pivot row entries into dvalpv */ /* the maction array tells us the index into dvalpv for a given row */ /* the alternative would be using a large array of doubles */ for (k = kipis; k <= kipie; ++k) { irow = hcoli[k]; dvalpv[k - kipis + 1] = dluval[k]; maction[irow] = static_cast(k - kipis + 1); } /* Loop over nonzeros in pivot column */ kcpiv = mcstrt[jpivot] - 1; for (nzpivj = 1; nzpivj <= epivco; ++nzpivj) { ++kcpiv; npr = hrowi[kcpiv]; hrowi[kcpiv] = 0; /* zero out for possible compaction later on */ --hincol[jpivot]; ++mcstrt[jpivot]; /* loop invariant: kcpiv == mcstrt[jpivot] - 1 */ --hinrow[npr]; enpr = hinrow[npr]; knprs = mrstrt[npr]; knpre = knprs + enpr; /* Search for element to be eliminated */ knpr = knprs; while (1) { UNROLL_LOOP_BODY4({ if (jpivot == hcoli[knpr]) { break; } knpr++; }); } multip = -dluval[knpr] * dpivx; /* swap last entry with pivot */ dluval[knpr] = dluval[knpre]; hcoli[knpr] = hcoli[knpre]; --knpre; #if 1 /* MONSTER_UNROLLED_CODE - see below */ kfill = epivr1 - (knpre - knprs + 1); nres = ((knpre - knprs + 1) & 1) + knprs; cancel = false; d1 = 1e33; j1 = hcoli[nres]; if (nres != knprs) { j = hcoli[knprs]; if (maction[j] == 0) { ++kfill; } else { jj = maction[j]; maction[j] = static_cast(-maction[j]); dluval[knprs] += multip * dvalpv[jj]; d1 = fabs(dluval[knprs]); } } j2 = hcoli[nres + 1]; jj1 = maction[j1]; for (kr = nres; kr < knpre; kr += 2) { jj2 = maction[j2]; if ( (jj1 == 0)) { ++kfill; } else { maction[j1] = static_cast(-maction[j1]); dluval[kr] += multip * dvalpv[jj1]; cancel = cancel || ! (fact->zeroTolerance < d1); d1 = fabs(dluval[kr]); } j1 = hcoli[kr + 2]; if ( (jj2 == 0)) { ++kfill; } else { maction[j2] = static_cast(-maction[j2]); dluval[kr + 1] += multip * dvalpv[jj2]; cancel = cancel || ! (fact->zeroTolerance < d1); d1 = fabs(dluval[kr + 1]); } jj1 = maction[j1]; j2 = hcoli[kr + 3]; } cancel = cancel || ! (fact->zeroTolerance < d1); #else /* * This is apparently what the above code does. * In addition to being unrolled, the assignments to j[12] and jj[12] * are shifted so that the result of dereferencing maction doesn't * have to be used immediately afterwards for the branch test. * This would would cause a pipeline delay. (The apparent dereference * of hcoli will be removed by the compiler using strength reduction). * * loop through the entries in the row being processed, * flipping the sign of the maction entries as we go along. * Afterwards, we look for positive entries to see what pivot * row entries will cause fill-in. We count the number of fill-ins, too. * "cancel" says if the result of combining the pivot row with this one * causes an entry to get too small; if so, we discard those entries. */ kfill = epivr1 - (knpre - knprs + 1); cancel = false; for (kr = knprs; kr <= knpre; kr++) { j1 = hcoli[kr]; jj1 = maction[j1]; if ( (jj1 == 0)) { /* no entry - this pivot column entry will have to be added */ ++kfill; } else { /* there is an entry for this column in the pivot row */ maction[j1] = -maction[j1]; dluval[kr] += multip * dvalpv[jj1]; d1 = fabs(dluval[kr]); cancel = cancel || ! (fact->zeroTolerance < d1); } } #endif kstart = knpre; fill = kfill; if (cancel) { /* KSTART is used as a stack pointer for nonzeros in factored row */ kstart = knprs - 1; for (kr = knprs; kr <= knpre; ++kr) { j = hcoli[kr]; if (fabs(dluval[kr]) > fact->zeroTolerance) { ++kstart; dluval[kstart] = dluval[kr]; hcoli[kstart] = j; } else { /* Remove element from column file */ --nnentu; --hincol[j]; --enpr; kcs = mcstrt[j]; kce = kcs + hincol[j]; for (kk = kcs; kk <= kce; ++kk) { if (hrowi[kk] == npr) { hrowi[kk] = hrowi[kce]; hrowi[kce] = 0; break; } } /* ASSERT !(kk>kce) */ } } knpre = kstart; } /* Fill contains an upper bound on the amount of fill-in */ if (fill == 0) { for (k = kipis; k <= kipie; ++k) { maction[hcoli[k]] = static_cast(-maction[hcoli[k]]); } } else { naft = mwork[npr].suc; kqq = mrstrt[naft] - knpre - 1; if (fill > kqq) { /* Fill-in exceeds space left. Check if there is enough */ /* space in row file for the new row. */ nznpr = enpr + fill; if (! (xnewro + nznpr + 1 < lstart)) { if (! (nnentu + nznpr + 1 < lstart)) { irtcod = -5; goto L1050; } /* idea 1 is to compress every time xnewro increases by x thousand */ /* idea 2 is to copy nucleus rows with a reasonable gap */ /* then copy each row down when used */ /* compressions would just be 1 remainder which eventually will */ /* fit in cache */ { int iput = c_ekkrwcs(fact,dluval, hcoli, mrstrt, hinrow, mwork, nfirst); kmxeta += xnewro - iput ; xnewro = iput - 1; ++ncompactions; } kipis = mrstrt[ipivot] + 1; kipie = kipis + epivr1 - 1; knprs = mrstrt[npr]; } /* I think this assignment should be inside the previous if-stmt */ /* otherwise, it does nothing */ /*assert(knpre == knprs + enpr - 1);*/ knpre = knprs + enpr - 1; /* * copy this row to the end of the row file and adjust its links. * The links keep track of the order of rows in memory. * Rows are only moved from the middle all the way to the end. */ if (npr != nlast) { npre = mwork[npr].pre; if (npr == nfirst) { nfirst = naft; } /* take out of chain */ mwork[naft].pre = npre; mwork[npre].suc = naft; /* and put in at end */ mwork[nfirst].pre = npr; mwork[nlast].suc = npr; mwork[npr].pre = nlast; mwork[npr].suc = nfirst; nlast = npr; kstart = xnewro; mrstrt[npr] = kstart + 1; nmove = knpre - knprs + 1; ibase = kstart + 1 - knprs; for (kr = knprs; kr <= knpre; ++kr) { dluval[ibase + kr] = dluval[kr]; hcoli[ibase + kr] = hcoli[kr]; } kstart += nmove; } else { kstart = knpre; } /* extra space ? */ /* * The mystery of iadd32. * This code assigns to xnewro, possibly using iadd32. * However, in that case xnewro is assigned to just after * the for-loop below, and there is no intervening reference. * Therefore, I believe that this code can be entirely eliminated; * it is the leftover of an interrupted or dropped experiment. * Presumably, this was trying to implement the ideas about * padding expressed above. */ if (iadd32 != 0) { xnewro += iadd32; } else { if (kstart + (nrow << 1) + 100 < lstart) { ileft = ((nrow - fact->npivots + 32) & -32); if (kstart + ileft * ileft + 32 < lstart) { iadd32 = ileft; xnewro = CoinMax(kstart,xnewro); xnewro = (xnewro & -32) + ileft; } else { xnewro = ((kstart + 31) & -32); } } else { xnewro = kstart; } } hinrow[npr] = enpr; } else if (! (nnentu + kqq + 2 < lstart)) { irtcod = -5; goto L1050; } /* Scan pivot row again to generate fill in. */ for (kr = kipis; kr <= kipie; ++kr) { j = hcoli[kr]; jj = maction[j]; if (jj >0) { elemnt = multip * dvalpv[jj]; if (fabs(elemnt) > fact->zeroTolerance) { ++kstart; dluval[kstart] = elemnt; //printf("pivot %d at %d col %d el %g\n", // npr,kstart,j,elemnt); hcoli[kstart] = j; ++nnentu; nz = hincol[j]; kcs = mcstrt[j]; kce = kcs + nz - 1; if (kce == xnewco) { if (xnewco + 1 >= lstart) { if (xnewco + nz + 1 >= lstart) { /* Compress column file */ if (nnentu + nz + 1 < lstart) { xnewco = c_ekkclco(fact,hrowi, mcstrt, hincol, xnewco); ++ncompactions; kcpiv = mcstrt[jpivot] - 1; kcs = mcstrt[j]; /* HINCOL MAY HAVE CHANGED? (JJHF) ??? */ nz = hincol[j]; kce = kcs + nz - 1; } else { irtcod = -5; goto L1050; } } /* Copy column */ mcstrt[j] = xnewco + 1; ibase = mcstrt[j] - kcs; for (kk = kcs; kk <= kce; ++kk) { hrowi[ibase + kk] = hrowi[kk]; hrowi[kk] = 0; } kce = xnewco + kce - kcs + 1; xnewco = kce + 1; } else { ++xnewco; } } else if (hrowi[kce + 1] != 0) { /* here we use the fact that hrowi entries not "in use" are zeroed */ if (xnewco + nz + 1 >= lstart) { /* Compress column file */ if (nnentu + nz + 1 < lstart) { xnewco = c_ekkclco(fact,hrowi, mcstrt, hincol, xnewco); ++ncompactions; kcpiv = mcstrt[jpivot] - 1; kcs = mcstrt[j]; /* HINCOL MAY HAVE CHANGED? (JJHF) ??? */ nz = hincol[j]; kce = kcs + nz - 1; } else { irtcod = -5; goto L1050; } } /* move the column to the end of the column file */ mcstrt[j] = xnewco + 1; ibase = mcstrt[j] - kcs; for (kk = kcs; kk <= kce; ++kk) { hrowi[ibase + kk] = hrowi[kk]; hrowi[kk] = 0; } kce = xnewco + kce - kcs + 1; xnewco = kce + 1; } /* store element */ hrowi[kce + 1] = npr; hincol[j] = nz + 1; } } else { maction[j] = static_cast(-maction[j]); } } if (fill > kqq) { xnewro = kstart; } } hinrow[npr] = kstart - mrstrt[npr] + 1; /* Check if row or column file needs compression */ if (! (xnewco + 1 < lstart)) { xnewco = c_ekkclco(fact,hrowi, mcstrt, hincol, xnewco); ++ncompactions; kcpiv = mcstrt[jpivot] - 1; } if (! (xnewro + 1 < lstart)) { int iput = c_ekkrwcs(fact,dluval, hcoli, mrstrt, hinrow, mwork, nfirst); kmxeta += xnewro - iput ; xnewro = iput - 1; ++ncompactions; kipis = mrstrt[ipivot] + 1; kipie = kipis + epivr1 - 1; } /* Store elementary row transformation */ ++nnentl; --nnentu; --lstart; dluval[lstart] = multip; hrowi[lstart] = SHIFT_INDEX(npr); #define INLINE_AFPV 3 /* We could do this while computing values but it makes it much more complex. At least we should get reasonable cache behavior by doing it each row */ #if INLINE_AFPV { int j; int nel, krs; int koff; int * index; double * els; nel = hinrow[npr]; krs = mrstrt[npr]; index=&hcoli[krs]; els=&dluval[krs]; #if INLINE_AFPV<3 #if INLINE_AFPV==1 double maxaij = 0.0; koff = 0; j=0; while (j 0) { C_EKK_ADD_LINK(hpivro, nzi, rlink, npr); } } } /* after pivot move biggest to first in each row */ #if INLINE_AFPV==0 int nn = mcstrt[fact->xnetal] - lstart + 1; c_ekkafpv(hrowi+lstart, hcoli, dluval, mrstrt, hinrow, nn); #endif /* Restore work array */ for (k = kipis; k <= kipie; ++k) { maction[hcoli[k]] = 0; } if (*xrejctp > 0) { for (k = kipis; k <= kipie; ++k) { int j = hcoli[k]; int nzj = hincol[j]; if (! (nzj <= 0) && ! ((clink[j].pre > nrow && nzj != 1))) { C_EKK_ADD_LINK(hpivco, nzj, clink, j); } } } else { for (k = kipis; k <= kipie; ++k) { int j = hcoli[k]; int nzj = hincol[j]; if (! (nzj <= 0)) { C_EKK_ADD_LINK(hpivco, nzj, clink, j); } } } fact->nuspike += hinrow[ipivot]; /* Go to dense coding if appropriate */ #ifndef C_EKKCMFY if (ifdens != 0) { int ndense = nrow - fact->npivots; if (! (xnewro + ndense * ndense >= lstart)) { /* set up sort order in MACTION */ c_ekkizero( nrow, reinterpret_cast (maction+1)); iput = 0; for (i = 1; i <= nrow; ++i) { if (clink[i].pre >= 0) { ++iput; maction[i] = static_cast(iput); } } /* and get number spare needed */ nspare = 0; for (i = 1; i <= nrow; ++i) { if (rlink[i].pre >= 0) { nspare = nspare + ndense - hinrow[i]; } } if (iput != nrow - fact->npivots) { /* must be singular */ c_ekkizero( nrow, reinterpret_cast (maction+1)); } else { /* pack down then back up */ int iput = c_ekkrwcs(fact,dluval, hcoli, mrstrt, hinrow, mwork, nfirst); kmxeta += xnewro - iput ; xnewro = iput - 1; ++ncompactions; --ncompactions; if (xnewro + nspare + ndense * ndense >= lstart) { c_ekkizero( nrow, reinterpret_cast (maction+1)); } else { xnewro += nspare; c_ekkrwct(fact,dluval, hcoli, mrstrt, hinrow, mwork, rlink, maction, dvalpv, nlast, xnewro); kmxeta += xnewro ; if (nnentu + nnentl > nrow * 5 && (ndense*ndense)>(nnentu+nnentl)>>2 && !if_sparse_update) { fact->ndenuc = ndense; } irtcod = c_ekkcmfd(fact, (reinterpret_cast(dvalpv)+1), rlink, clink, (reinterpret_cast(maction+1))+1, nnetas, &nnentl, &nnentu, nsingp); /* irtcod == 0 || irtcod == 10 */ /* 10 == found 0.0 pivot */ goto L1050; } } } else { /* say not enough room */ /*printf("no room %d\n",ndense);*/ if (1) { /* return and increase size of etas if possible */ if (!noRoomForDense) { int etasize =CoinMax(4*fact->nnentu+(nnetas-fact->nnentl)+1000,fact->eta_size); noRoomForDense=ndense; fact->eta_size=CoinMin(static_cast(1.2*fact->eta_size),etasize); if (fact->maxNNetas>0&&fact->eta_size> fact->maxNNetas) { fact->eta_size=fact->maxNNetas; } } } } } #endif /* C_EKKCMFY */ } L1050: { int iput = c_ekkrwcs(fact,dluval, hcoli, mrstrt, hinrow, mwork, nfirst); kmxeta += xnewro - iput; xnewro = iput - 1; ++ncompactions; } nnentu = xnewro; /* save order of row copy for c_ekkshfv */ mwork[nrow+1].pre = nfirst; mwork[nrow+1].suc = nlast; fact->nnentl = nnentl; fact->nnentu = nnentu; fact->kmxeta = kmxeta; *xnewrop = xnewro; *ncompactionsp = ncompactions; return (irtcod); } /* c_ekkcmfc */ #endif CoinUtils-2.9.10/CoinUtils/src/CoinPresolveDupcol.hpp0000644000076600007660000001241612017155726021174 0ustar coincoin/* $Id: CoinPresolveDupcol.hpp 1550 2012-08-28 14:55:18Z forrest $ */ // 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). #ifndef CoinPresolveDupcol_H #define CoinPresolveDupcol_H #include "CoinPresolveMatrix.hpp" /*! \file */ #define DUPCOL 10 /*! \class dupcol_action \brief Detect and remove duplicate columns The general technique is to sum the coefficients a_(*,j) of each column. Columns with identical sums are duplicates. The obvious problem is that, e.g., [1 0 1 0] and [0 1 0 1] both add to 2. To minimize the chances of false positives, the coefficients of each row are multipled by a random number r_i, so that we sum r_i*a_ij. Candidate columns are checked to confirm they are identical. Where the columns have the same objective coefficient, the two are combined. If the columns have different objective coefficients, complications ensue. In order to remove the duplicate, it must be possible to fix the variable at a bound. */ class dupcol_action : public CoinPresolveAction { dupcol_action(); dupcol_action(const dupcol_action& rhs); dupcol_action& operator=(const dupcol_action& rhs); struct action { double thislo; double thisup; double lastlo; double lastup; int ithis; int ilast; double *colels; int nincol; }; const int nactions_; // actions_ is owned by the class and must be deleted at destruction const action *const actions_; dupcol_action(int nactions, const action *actions, const CoinPresolveAction *next) : CoinPresolveAction(next), nactions_(nactions), actions_(actions) {} public: const char *name() const; static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next); void postsolve(CoinPostsolveMatrix *prob) const; virtual ~dupcol_action(); }; /*! \class duprow_action \brief Detect and remove duplicate rows The algorithm to detect duplicate rows is as outlined for dupcol_action. If the feasible interval for one constraint is strictly contained in the other, the tighter (contained) constraint is kept. If the feasible intervals are disjoint, the problem is infeasible. If the feasible intervals overlap, both constraints are kept. duprow_action is definitely a work in progress; #postsolve is unimplemented. This doesn't matter as it uses useless_constraint. */ class duprow_action : public CoinPresolveAction { struct action { int row; double lbound; double ubound; }; const int nactions_; const action *const actions_; duprow_action():CoinPresolveAction(NULL),nactions_(0),actions_(NULL) {} duprow_action(int nactions, const action *actions, const CoinPresolveAction *next) : CoinPresolveAction(next), nactions_(nactions), actions_(actions) {} public: const char *name() const; static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next); void postsolve(CoinPostsolveMatrix *prob) const; //~duprow_action() { delete[]actions_; } }; /*! \class gubrow_action \brief Detect and remove entries whose sum is known If we have an equality row where all entries same then For other rows where all entries for that equality row are same then we can delete entries and modify rhs gubrow_action is definitely a work in progress; #postsolve is unimplemented. */ class gubrow_action : public CoinPresolveAction { struct action { int row; double lbound; double ubound; }; const int nactions_; const action *const actions_; gubrow_action():CoinPresolveAction(NULL),nactions_(0),actions_(NULL) {} gubrow_action(int nactions, const action *actions, const CoinPresolveAction *next) : CoinPresolveAction(next), nactions_(nactions), actions_(actions) {} public: const char *name() const; static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next); void postsolve(CoinPostsolveMatrix *prob) const; //~gubrow_action() { delete[]actions_; } }; /*! \class twoxtwo_action \brief Detect interesting 2 by 2 blocks If a variable has two entries and for each row there are only two entries with same other variable then we can get rid of one constraint and modify costs. This is a work in progress - I need more examples */ class twoxtwo_action : public CoinPresolveAction { struct action { double lbound_row; double ubound_row; double lbound_col; double ubound_col; double cost_col; double cost_othercol; int row; int col; int othercol; }; const int nactions_; const action *const actions_; twoxtwo_action():CoinPresolveAction(NULL),nactions_(0),actions_(NULL) {} twoxtwo_action(int nactions, const action *actions, const CoinPresolveAction *next) : CoinPresolveAction(next), nactions_(nactions), actions_(actions) {} public: const char *name() const; static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next); void postsolve(CoinPostsolveMatrix *prob) const; ~twoxtwo_action() { delete [] actions_; } }; #endif CoinUtils-2.9.10/CoinUtils/src/CoinOslFactorization.cpp0000644000076600007660000012467612130104232021505 0ustar coincoin/* $Id: CoinOslFactorization.cpp 1585 2013-04-06 20:42:02Z stefan $ */ // Copyright (C) 1987, 2009, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include "CoinUtilsConfig.h" #include #include "CoinPragma.hpp" #include "CoinOslFactorization.hpp" #include "CoinOslC.h" #include "CoinIndexedVector.hpp" #include "CoinHelperFunctions.hpp" #include "CoinPackedMatrix.hpp" #include "CoinTypes.hpp" #include "CoinFinite.hpp" #include static void c_ekksmem(EKKfactinfo *fact,int numberRows,int maximumPivots); static void c_ekksmem_copy(EKKfactinfo *fact,const EKKfactinfo * rhsFact); static void c_ekksmem_delete(EKKfactinfo *fact); //:class CoinOslFactorization. Deals with Factorization and Updates // CoinOslFactorization. Constructor CoinOslFactorization::CoinOslFactorization ( ) : CoinOtherFactorization() { gutsOfInitialize(); } /// Copy constructor CoinOslFactorization::CoinOslFactorization ( const CoinOslFactorization &other) : CoinOtherFactorization(other) { gutsOfInitialize(); gutsOfCopy(other); } // Clone CoinOtherFactorization * CoinOslFactorization::clone() const { return new CoinOslFactorization(*this); } /// The real work of constructors etc void CoinOslFactorization::gutsOfDestructor(bool clearFact) { delete [] elements_; delete [] pivotRow_; delete [] workArea_; elements_ = NULL; pivotRow_ = NULL; workArea_ = NULL; numberRows_ = 0; numberColumns_ = 0; numberGoodU_ = 0; status_ = -1; maximumRows_=0; maximumSpace_=0; solveMode_=0; if (clearFact) c_ekksmem_delete(&factInfo_); } void CoinOslFactorization::gutsOfInitialize(bool zapFact) { pivotTolerance_ = 1.0e-1; zeroTolerance_ = 1.0e-13; #ifndef COIN_FAST_CODE slackValue_ = -1.0; #endif maximumPivots_=200; relaxCheck_=1.0; numberRows_ = 0; numberColumns_ = 0; numberGoodU_ = 0; status_ = -1; numberPivots_ = 0; maximumRows_=0; maximumSpace_=0; elements_ = NULL; pivotRow_ = NULL; workArea_ = NULL; solveMode_=0; if (zapFact) { memset(&factInfo_,0,sizeof(factInfo_)); factInfo_.maxinv=100; factInfo_.drtpiv=1.0e-10; factInfo_.zeroTolerance=1.0e-12; factInfo_.zpivlu=0.1; factInfo_.areaFactor=1.0; factInfo_.nbfinv=100; } } // ~CoinOslFactorization. Destructor CoinOslFactorization::~CoinOslFactorization ( ) { gutsOfDestructor(); } // = CoinOslFactorization & CoinOslFactorization::operator = ( const CoinOslFactorization & other ) { if (this != &other) { bool noGood = factInfo_.nrowmx!=other.factInfo_.nrowmx&& factInfo_.eta_size!=other.factInfo_.eta_size; gutsOfDestructor(noGood); gutsOfInitialize(noGood); gutsOfCopy(other); } return *this; } #define WORK_MULT 2 void CoinOslFactorization::gutsOfCopy(const CoinOslFactorization &other) { pivotTolerance_ = other.pivotTolerance_; zeroTolerance_ = other.zeroTolerance_; #ifndef COIN_FAST_CODE slackValue_ = other.slackValue_; #endif relaxCheck_ = other.relaxCheck_; numberRows_ = other.numberRows_; numberColumns_ = other.numberColumns_; maximumRows_ = other.maximumRows_; maximumSpace_ = other.maximumSpace_; solveMode_ = other.solveMode_; numberGoodU_ = other.numberGoodU_; maximumPivots_ = other.maximumPivots_; numberPivots_ = other.numberPivots_; factorElements_ = other.factorElements_; status_ = other.status_; elements_ = NULL; pivotRow_ = NULL; workArea_ = NULL; c_ekksmem_copy(&factInfo_,&other.factInfo_); } // getAreas. Gets space for a factorization //called by constructors void CoinOslFactorization::getAreas ( int numberOfRows, int numberOfColumns, CoinBigIndex maximumL, CoinBigIndex maximumU ) { numberRows_ = numberOfRows; numberColumns_ = numberOfColumns; CoinBigIndex size = static_cast(factInfo_.areaFactor* (maximumL+maximumU)); factInfo_.zeroTolerance=zeroTolerance_; // If wildly out redo if (maximumRows_>numberRows_+1000) { maximumRows_=0; maximumSpace_=0; factInfo_.last_eta_size=0; } if (size>maximumSpace_) { //delete [] elements_; //elements_ = new CoinFactorizationDouble [size]; maximumSpace_ = size; } factInfo_.lastEtaCount = factInfo_.nnentu+factInfo_.nnentl; int oldnnetas=factInfo_.last_eta_size; // If we are going to increase then be on safe side if (size>oldnnetas) size = static_cast(1.1*size); factInfo_.eta_size=CoinMax(size,oldnnetas); //printf("clp size %d, old %d now %d - iteration %d - last count %d - rows %d,%d,%d\n", // size,oldnnetas,factInfo_.eta_size,factInfo_.iterno,factInfo_.lastEtaCount, //numberRows_,factInfo_.nrowmx,factInfo_.nrow); //if (!factInfo_.iterno) { //printf("here\n"); //} /** Get solve mode e.g. 0 C++ code, 1 Lapack, 2 choose If 4 set then values pass if 8 set then has iterated */ solveMode_ &= 4+8; // clear bottom bits factInfo_.ifvsol= ((solveMode_&4)!=0) ? 1 : 0; if ((solveMode_&8)!=0) { factInfo_.ifvsol=0; factInfo_.invok=1; } else { factInfo_.iter0=factInfo_.iterno; factInfo_.invok=-1; factInfo_.if_sparse_update=0; } #if 0 if (!factInfo_.if_sparse_update && factInfo_.iterno>factInfo_.iter0 && numberRows_>=C_EKK_GO_SPARSE) { printf("count %d rows %d etasize %d\n", factInfo_.lastEtaCount,factInfo_.nrow,factInfo_.eta_size); } #endif if (!factInfo_.if_sparse_update && factInfo_.iterno>factInfo_.iter0 && numberRows_>=C_EKK_GO_SPARSE && (factInfo_.lastEtaCount>>2)maximumRows_) { maximumRows_ = numberRows_; //delete [] pivotRow_; //delete [] workArea_; //pivotRow_ = new int [2*maximumRows_+maximumPivots_]; //workArea_ = new CoinFactorizationDouble [maximumRows_*WORK_MULT]; } } // preProcess. void CoinOslFactorization::preProcess () { factInfo_.zpivlu=pivotTolerance_; // Go to Fortran int * hcoli=factInfo_.xecadr+1; int * indexRowU = factInfo_.xeradr+1; CoinBigIndex * startColumnU=factInfo_.xcsadr+1; for (int i=0;i0); } //Does factorization int CoinOslFactorization::factor ( ) { /* Uwe's factorization (sort of) */ int irtcod = c_ekklfct(&factInfo_); /* Check return code */ /* 0 - Fine , 1 - Backtrack, 2 - Singularities on initial, 3-Fatal */ /* now 5-Need more memory */ status_= 0; if (factInfo_.eta_size>factInfo_.last_eta_size) { factInfo_.areaFactor *= factInfo_.eta_size; factInfo_.areaFactor /= factInfo_.last_eta_size; #ifdef CLP_INVESTIGATE printf("areaFactor increased to %g\n",factInfo_.areaFactor); #endif } if (irtcod==5) { status_=-99; assert (factInfo_.eta_size>factInfo_.last_eta_size) ; #ifdef CLP_INVESTIGATE printf("need more memory\n"); #endif } else if (irtcod) { status_=-1; //printf("singular %d\n",irtcod); } return status_; } // Makes a non-singular basis by replacing variables void CoinOslFactorization::makeNonSingular(int * sequence, int numberColumns) { const EKKHlink *rlink = factInfo_.kp1adr; const EKKHlink *clink = factInfo_.kp2adr; int nextRow=0; //int * mark = reinterpret_cast(factInfo_.kw1adr); //int nr=0; //int nc=0; #if 0 for (int i=0;i=0||rlink[i].pre==-(numberRows_+1)) { nr++; printf("%d rl %d cl %d\n",i,rlink[i].pre,clink[i].pre); } if (clink[i].pre>=0||clink[i].pre==-(numberRows_+1)) { nc++; printf("%d rl %d cl %d\n",i,rlink[i].pre,clink[i].pre); } } #endif //printf("nr %d nc %d\n",nr,nc); #ifndef NDEBUG bool goodPass=true; #endif int numberDone=0; for (int i=0;i (factInfo_.kadrpm+numberRows_+1)); // this is ridiculous - must be better way int * permute2 = reinterpret_cast(factInfo_.kw1adr); const int * permute = reinterpret_cast(factInfo_.kp2adr); for (int i=0;igetIndices ( ); double *region = regionSparse->denseVector ( ); int orig_nincol=0; double saveTolerance = factInfo_.drtpiv; factInfo_.drtpiv=acceptablePivot; int returnCode=c_ekketsj(&factInfo_,region-1, regionIndex, pivotCheck,orig_nincol, numberPivots_,&factInfo_.nuspike, pivotRow+1, reinterpret_cast(factInfo_.kw1adr)); factInfo_.drtpiv=saveTolerance; if (returnCode!=2) numberPivots_++; #ifndef NDEBUG { int lstart=numberRows_+factInfo_.maxinv+5; int ndo = factInfo_.xnetal-lstart; double * dluval=factInfo_.xeeadr; int * mcstrt = factInfo_.xcsadr+lstart; if (ndo) assert (dluval[mcstrt[ndo]+1]<1.0e50); } #endif return returnCode; } /* This version has same effect as above with FTUpdate==false so number returned is always >=0 */ int CoinOslFactorization::updateColumn ( CoinIndexedVector * regionSparse, CoinIndexedVector * regionSparse2, bool /*noPermute*/) const { #ifndef NDEBUG { int lstart=numberRows_+factInfo_.maxinv+5; int ndo = factInfo_.xnetal-lstart; double * dluval=factInfo_.xeeadr; int * mcstrt = factInfo_.xcsadr+lstart; if (ndo) assert (dluval[mcstrt[ndo]+1]<1.0e50); } #endif assert (numberRows_==numberColumns_); double *region2 = regionSparse2->denseVector ( ); int *regionIndex2 = regionSparse2->getIndices ( ); int numberNonZero = regionSparse2->getNumElements ( ); double *region = regionSparse->denseVector ( ); //const int * permuteIn = factInfo_.mpermu+1; // Stuff is put one up so won't get illegal read assert (!region[numberRows_]); assert (!regionSparse2->packedMode()); #if 0 int first=numberRows_; for (int j=0;jsetNumElements(numberNonZero); return 0; } /* Updates one column (FTRAN) from regionSparse2 Tries to do FT update number returned is negative if no room regionSparse starts as zero and is zero at end. Note - if regionSparse2 packed on input - will be packed on output */ int CoinOslFactorization::updateColumnFT ( CoinIndexedVector * regionSparse, CoinIndexedVector * regionSparse2, bool /*noPermute*/) { assert (numberRows_==numberColumns_); double *region2 = regionSparse2->denseVector ( ); int *regionIndex2 = regionSparse2->getIndices ( ); int numberNonZero = regionSparse2->getNumElements ( ); assert (regionSparse2->packedMode()); // packed mode //int numberNonInOriginal=numberNonZero; //double *dpermu = factInfo_.kadrpm; // Use region instead of dpermu double * save =factInfo_.kadrpm; factInfo_.kadrpm=regionSparse->denseVector()-1; int nuspike=c_ekkftrn_ft(&factInfo_, region2,regionIndex2, &numberNonZero); factInfo_.kadrpm=save; regionSparse2->setNumElements(numberNonZero); //regionSparse2->print(); factInfo_.nuspike=nuspike; return nuspike; } int CoinOslFactorization::updateTwoColumnsFT(CoinIndexedVector * regionSparse1, CoinIndexedVector * regionSparse2, CoinIndexedVector * regionSparse3, bool /*noPermute*/) { #if 1 // probably best to merge on a LU part by part // but can try full merge double *region2 = regionSparse2->denseVector ( ); int *regionIndex2 = regionSparse2->getIndices ( ); int numberNonZero2 = regionSparse2->getNumElements ( ); assert (regionSparse2->packedMode()); assert (numberRows_==numberColumns_); double *region3 = regionSparse3->denseVector ( ); int *regionIndex3 = regionSparse3->getIndices ( ); int numberNonZero3 = regionSparse3->getNumElements ( ); double *region = regionSparse1->denseVector ( ); // Stuff is put one up so won't get illegal read assert (!region[numberRows_]); assert (!regionSparse3->packedMode()); // packed mode //double *dpermu = factInfo_.kadrpm; #if 0 factInfo_.nuspike=c_ekkftrn_ft(&factInfo_, region2,regionIndex2, &numberNonZero2); numberNonZero3=c_ekkftrn(&factInfo_, region3-1,region,regionIndex3,numberNonZero3); #else c_ekkftrn2(&factInfo_,region3-1,region,regionIndex3,&numberNonZero3, region2,regionIndex2,&numberNonZero2); #endif regionSparse2->setNumElements(numberNonZero2); regionSparse3->setNumElements(numberNonZero3); return factInfo_.nuspike; #else // probably best to merge on a LU part by part // but can try full merge int returnCode= updateColumnFT(regionSparse1, regionSparse2); updateColumn(regionSparse1, regionSparse3, noPermute); return returnCode; #endif } /* Updates one column (BTRAN) from regionSparse2 regionSparse starts as zero and is zero at end Note - if regionSparse2 packed on input - will be packed on output */ int CoinOslFactorization::updateColumnTranspose ( CoinIndexedVector * regionSparse, CoinIndexedVector * regionSparse2) const { assert (numberRows_==numberColumns_); double *region2 = regionSparse2->denseVector ( ); int *regionIndex2 = regionSparse2->getIndices ( ); int numberNonZero = regionSparse2->getNumElements ( ); //double *region = regionSparse->denseVector ( ); /*int *regionIndex = regionSparse->getIndices ( );*/ const int * permuteIn = factInfo_.mpermu+1; factInfo_.packedMode = regionSparse2->packedMode() ? 1 : 0; // Use region instead of dpermu double * save =factInfo_.kadrpm; factInfo_.kadrpm=regionSparse->denseVector()-1; // use internal one for now (address is one off) double * region = factInfo_.kadrpm; if (numberNonZero<2) { if (numberNonZero) { int ipivrw=regionIndex2[0]; if (factInfo_.packedMode) { double value=region2[0]; region2[0]=0.0; region2[ipivrw]=value; } numberNonZero=c_ekkbtrn_ipivrw(&factInfo_, region2-1, regionIndex2-1,ipivrw+1, reinterpret_cast(factInfo_.kp1adr)); } } else { #ifndef NDEBUG { int *mcstrt = factInfo_.xcsadr; int * hpivco_new=factInfo_.kcpadr+1; int nrow=factInfo_.nrow; int i; int ipiv = hpivco_new[0]; int last = mcstrt[ipiv]; for (i=0;ilast); last=mcstrt[ipiv]; } } #endif int iSmallest = COIN_INT_MAX; int iPiv=0; const int *mcstrt = factInfo_.xcsadr; // permute and save where nonzeros are if (!factInfo_.packedMode) { if ((numberRows_<200||(numberNonZero<<4)>numberRows_)) { for (int j=0;j=0); numberNonZero=c_ekkbtrn(&factInfo_, region2-1,regionIndex2-1,iPiv); } factInfo_.kadrpm=save; factInfo_.packedMode=0; regionSparse2->setNumElements(numberNonZero); return 0; } // Number of entries in each row int * CoinOslFactorization::numberInRow() const { return reinterpret_cast (factInfo_.xrnadr+1);} // Number of entries in each column int * CoinOslFactorization::numberInColumn() const { return reinterpret_cast (factInfo_.xcnadr+1);} // Returns array to put basis starts in CoinBigIndex * CoinOslFactorization::starts() const { return reinterpret_cast (factInfo_.xcsadr+1);} // Returns array to put basis elements in CoinFactorizationDouble * CoinOslFactorization::elements() const { return factInfo_.xeeadr+1;} // Returns pivot row int * CoinOslFactorization::pivotRow() const { return factInfo_.krpadr+1;} // Returns work area CoinFactorizationDouble * CoinOslFactorization::workArea() const { return factInfo_.kw1adr;} // Returns int work area int * CoinOslFactorization::intWorkArea() const { return reinterpret_cast (factInfo_.kw1adr);} // Returns permute back int * CoinOslFactorization::permuteBack() const { return factInfo_.kcpadr+1;} // Returns array to put basis indices in int * CoinOslFactorization::indices() const { return factInfo_.xeradr+1;} // Returns true if wants tableauColumn in replaceColumn bool CoinOslFactorization::wantsTableauColumn() const { return false;} /* Useful information for factorization 0 - iteration number whereFrom is 0 for factorize and 1 for replaceColumn */ #ifdef CLP_REUSE_ETAS void CoinOslFactorization::setUsefulInformation(const int * info,int whereFrom) { factInfo_.iterno=info[0]; if (whereFrom) { factInfo_.reintro=-1; if( factInfo_.first_dense>=factInfo_.last_dense) { int * putSeq = factInfo_.xrsadr+2*factInfo_.nrowmx+2; int * position = putSeq+factInfo_.maxinv; //int * putStart = position+factInfo_.maxinv; int iSequence=info[1]; if (whereFrom==1) { putSeq[factInfo_.npivots]=iSequence; } else { int i; for (i=factInfo_.npivots-1;i>=0;i--) { if (putSeq[i]==iSequence) break; } if (i>=0) { factInfo_.reintro=position[i]; } else { factInfo_.reintro=-1; } factInfo_.nnentu=factInfo_.save_nnentu; } } } } #else void CoinOslFactorization::setUsefulInformation(const int * info,int /*whereFrom*/) { factInfo_.iterno=info[0]; } #endif // Get rid of all memory void CoinOslFactorization::clearArrays() { factInfo_.nR_etas=0; factInfo_.nnentu=0; factInfo_.nnentl=0; maximumRows_=0; maximumSpace_=0; factInfo_.last_eta_size=0; gutsOfDestructor(false); } void CoinOslFactorization::maximumPivots ( int value ) { maximumPivots_ = value; } #define CLP_FILL 15 /*#undef NDEBUG*/ //#define CLP_DEBUG_MALLOC 1000000 #if CLP_DEBUG_MALLOC static int malloc_number=0; static int malloc_check=-1; static int malloc_counts_on=0; struct malloc_struct { void * previous; void * next; int size; int when; int type; }; static double malloc_times=0.0; static double malloc_total=0.0; static double malloc_current=0.0; static double malloc_max=0.0; static int malloc_amount[]={0,32,128,256,1024,4096,16384,65536,262144, 2000000000}; static int malloc_n=10; double malloc_counts[10]={0,0,0,0,0,0,0,0,0,0}; typedef struct malloc_struct malloc_struct; static malloc_struct startM = {0,0,0,0}; static malloc_struct endM = {0,0,0,0}; static int extra=4; void clp_memory(int type) { if (type==0) { /* switch on */ malloc_counts_on=1; startM.next=&endM; endM.previous=&startM; } else { /* summary */ double average = malloc_total/malloc_times; int i; malloc_struct * previous = (malloc_struct *) endM.previous; printf("count %g bytes %g - average %g\n",malloc_times,malloc_total,average); printf("current bytes %g - maximum %g\n",malloc_current,malloc_max); for ( i=0;iprevious!=&startM) { int n=0; printf("Allocated blocks\n"); while (previous->previous!=&startM) { printf("(%d at %d) ",previous->size,previous->when); n++; if ((n%5)==0) printf("\n"); previous = (malloc_struct *) previous->previous; } printf("\n - total %d\n",n); } } malloc_number=0; malloc_times=0.0; malloc_total=0.0; malloc_current=0.0; malloc_max=0.0; memset(malloc_counts,0,sizeof(malloc_counts)); } static void clp_adjust(void * temp,int size,int type) { malloc_struct * itemp = (malloc_struct *) temp; malloc_struct * first = (malloc_struct *) startM.next; int i; startM.next=temp; first->previous=temp; itemp->previous=&startM; itemp->next=first; malloc_number++; if (malloc_number==malloc_check) { printf("Allocation of %d bytes at %d (type %d) not freed\n", size,malloc_number,type); } itemp->when=malloc_number; itemp->size=size; itemp->type=type; malloc_times ++; malloc_total += size; malloc_current += size; malloc_max=CoinMax(malloc_max,malloc_current); for (i=0;i( malloc(number_entries*sizeof(double))); #else double * temp = reinterpret_cast( malloc((number_entries+extra)*sizeof(double))); clp_adjust(temp,number_entries*sizeof(double),1); #if CLP_DEBUG_MALLOC>1 if (number_entries*sizeof(double)>=CLP_DEBUG_MALLOC) printf("WWW %x malloced by double %d - size %d\n", temp+extra,malloc_number,number_entries); #endif return temp+extra; #endif } int * clp_int(int number_entries) { #if CLP_DEBUG_MALLOC==0 return reinterpret_cast( malloc(number_entries*sizeof(int))); #else double * temp = reinterpret_cast( malloc(((number_entries+1)/2+extra)*sizeof(double))); clp_adjust(temp,number_entries*sizeof(int),2); #if CLP_DEBUG_MALLOC>1 if (number_entries*sizeof(int)>=CLP_DEBUG_MALLOC) printf("WWW %x malloced by int %d - size %d\n", temp+extra,malloc_number,number_entries); #endif return reinterpret_cast( (temp+extra)); #endif } void * clp_malloc(int number_entries) { #if CLP_DEBUG_MALLOC==0 return malloc(number_entries); #else double * temp = reinterpret_cast( malloc(number_entries+extra*sizeof(double))); clp_adjust(temp,number_entries,0); #if CLP_DEBUG_MALLOC>1 if (number_entries>=CLP_DEBUG_MALLOC) printf("WWW %x malloced by void %d - size %d\n", temp+extra,malloc_number,number_entries); #endif return (void *) (temp+extra); #endif } void clp_free(void * oldArray) { #if CLP_DEBUG_MALLOC==0 free(oldArray); #else if (oldArray) { double * temp = (reinterpret_cast( oldArray)-extra); malloc_struct * itemp = (malloc_struct *) temp; malloc_struct * next = (malloc_struct *) itemp->next; malloc_struct * previous = (malloc_struct *) itemp->previous; previous->next=next; next->previous=previous; malloc_current -= itemp->size; #if CLP_DEBUG_MALLOC>1 if (itemp->size>=CLP_DEBUG_MALLOC) printf("WWW %x freed by free %d - old length %d - type %d\n", oldArray,itemp->when,itemp->size,itemp->type); #endif free(temp); } #endif } /*#define FIX_ADD 4*nrowmx+5 #define FIX_ADD2 4*nrowmx+5*/ #define FIX_ADD 1*nrowmx+5 #define FIX_ADD2 1*nrowmx+5 #define ALIGNMENT 32 static void * clp_align (void * memory) { if (sizeof(int)==sizeof(void *)&&ALIGNMENT) { CoinInt64 k = reinterpret_cast (memory); if ((k&(ALIGNMENT-1))!=0) { k &= ~(ALIGNMENT-1); k += ALIGNMENT; memory = reinterpret_cast (k); } return memory; } else { return memory; } } void clp_setup_pointers(EKKfactinfo * fact) { /* do extra stuff */ int nrow=fact->nrow; int nrowmx=fact->nrowmx; int maxinv=fact->maxinv; fact->lstart = nrow + maxinv + 5; /* this is the number of L transforms */ fact->xnetalval = fact->xnetal - fact->lstart; fact->mpermu = (reinterpret_cast (fact->kadrpm+nrow))+1; fact->bitArray = fact->krpadr + ( nrowmx+2); fact->back = fact->kcpadr+2*nrow + maxinv + 4; fact->hpivcoR = fact->kcpadr+nrow+3; fact->nonzero = (reinterpret_cast( &fact->mpermu[nrow+1]))-1; } #ifndef NDEBUG int ets_count=0; int ets_check=-1; //static int adjust_count=0; //static int adjust_check=-1; #endif static void clp_adjust_pointers(EKKfactinfo * fact, int adjust) { #if 0 //ndef NDEBUG adjust_count++; if (adjust_check>=0&&adjust_count>=adjust_check) { printf("trouble\n"); } #endif if (fact->trueStart) { fact->kadrpm += adjust; fact->krpadr += adjust; fact->kcpadr += adjust; fact->xrsadr += adjust; fact->xcsadr += adjust; fact->xrnadr += adjust; fact->xcnadr += adjust; } if (fact->xeradr) { fact->xeradr += adjust; fact->xecadr += adjust; fact->xeeadr += adjust; } } /* deals with memory for complicated array 0 just do addresses 1 just get memory */ static double * clp_alloc_memory(EKKfactinfo * fact,int type, int * length) { int nDouble=0; int nInt=0; int nrowmxp; int ntot1; int ntot2; int ntot3; int nrowmx; int * tempI; double * tempD; nrowmx=fact->nrowmx; nrowmxp = nrowmx + 2; ntot1 = nrowmxp; ntot2 = 3*nrowmx+5; /* space for three lists */ ntot3 = 2*nrowmx; if ((ntot1<<1)>1; } ntot3=CoinMax(ntot3,ntot1); /* Row work regions */ /* must be contiguous so allocate as one chunk */ /* may only need 2.5 */ /* now doing all at once - far too much - reduce later */ tempD=fact->kw1adr; tempD+=nrowmxp; tempD = reinterpret_cast( clp_align(tempD)); fact->kw2adr=tempD; tempD+=nrowmxp; tempD = reinterpret_cast( clp_align(tempD)); fact->kw3adr=tempD-1; tempD+=nrowmxp; tempD = reinterpret_cast( clp_align(tempD)); fact->kp1adr=reinterpret_cast(tempD); tempD+=nrowmxp; tempD = reinterpret_cast( clp_align(tempD)); fact->kp2adr=reinterpret_cast(tempD); //tempD+=ntot3; tempD+=nrowmxp; tempD = reinterpret_cast( clp_align(tempD)); /*printf("zz %x %x\n",tempD,fact->kadrpm);*/ fact->kadrpm = tempD; /* seems a lot */ tempD += ((6*nrowmx +8)*(sizeof(int))/sizeof(double)); /* integer arrays */ tempI = reinterpret_cast( tempD); tempI = reinterpret_cast( clp_align(tempI)); fact->xrsadr = tempI; #ifdef CLP_REUSE_ETAS tempI +=( 3*(nrowmx+fact->maxinv+1)); #else tempI +=( (nrowmx<<1)+fact->maxinv+1); #endif tempI = reinterpret_cast( clp_align(tempI)); fact->xcsadr = tempI; #if 1 //def CLP_REUSE_ETAS tempI += ( 2*nrowmx+8+2*fact->maxinv); #else tempI += ( 2*nrowmx+8+fact->maxinv); #endif tempI += FIX_ADD+FIX_ADD2; tempI = reinterpret_cast( clp_align(tempI)); fact->xrnadr = tempI; tempI += nrowmx; tempI = reinterpret_cast( clp_align(tempI)); fact->xcnadr = tempI; tempI += nrowmx; tempI = reinterpret_cast( clp_align(tempI)); fact->krpadr = tempI; tempI += ( nrowmx+1) +((nrowmx+33)>>5); /*printf("zzz %x %x\n",tempI,fact->kcpadr);*/ tempI = reinterpret_cast( clp_align(tempI)); fact->kcpadr = tempI; tempI += 3*nrowmx+8+fact->maxinv; fact->R_etas_start = fact->xcsadr+nrowmx+fact->maxinv+4; fact->R_etas_start += FIX_ADD; nInt = static_cast(tempI-(reinterpret_cast( fact->trueStart))); nDouble = static_cast(sizeof(int)*(nInt+1)/sizeof(double)); *length = nDouble; /*printf("nDouble %d - type %d\n",nDouble,type);*/ nDouble += static_cast((2*ALIGNMENT)/sizeof(double)); if (type) { /*printf("%d allocated\n",nDouble);*/ tempD = reinterpret_cast( clp_double(nDouble)); #ifndef NDEBUG memset(tempD,CLP_FILL,nDouble*sizeof(double)); #endif } return tempD; } static void c_ekksmem(EKKfactinfo *fact,int nrow,int maximumPivots) { /* space for invert */ int nnetas=fact->eta_size; fact->nrow=nrow; if (!(nnetas>fact->last_eta_size||(!fact->xe2adr&&fact->if_sparse_update)|| nrow>fact->nrowmx||maximumPivots>fact->maxinv)) return; clp_adjust_pointers(fact, +1); if (nrow>fact->nrowmx||maximumPivots>fact->maxinv) { int length; fact->nrowmx=CoinMax(nrow,fact->nrowmx); fact->maxinv=CoinMax(maximumPivots,fact->maxinv); clp_free(fact->trueStart); fact->trueStart=0; fact->kw1adr=0; fact->trueStart=clp_alloc_memory(fact,1,&length); fact->kw1adr=reinterpret_cast( clp_align(fact->trueStart)); clp_alloc_memory(fact,0,&length); } /*if (!fact->iterno) fact->eta_size+=1000000;*//* TEMP*/ if (nnetas>fact->last_eta_size||(!fact->xe2adr&&fact->if_sparse_update)) { fact->last_eta_size = nnetas; clp_free(reinterpret_cast(fact->xe2adr)); /* if malloc fails - we have lost memory - start again */ if (!fact->ndenuc &&fact->if_sparse_update) { /* allow second copy of elements */ fact->xe2adr = clp_double(nnetas); #ifndef NDEBUG memset(fact->xe2adr,CLP_FILL,nnetas*sizeof(double)); #endif if (!fact->xe2adr) { fact->maxNNetas=fact->last_eta_size; /* dont allow any increase */ nnetas=fact->last_eta_size; fact->eta_size=nnetas; #ifdef PRINT_DEBUG if (fact->if_sparse_update) { printf("*** Sparse update off due to memory\n"); } #endif fact->if_sparse_update=0; fact->switch_off_sparse_update=1; } } else { fact->xe2adr = 0; fact->if_sparse_update=0; } clp_free(fact->xeradr); fact->xeradr= clp_int( nnetas); #ifndef NDEBUG memset(fact->xeradr,CLP_FILL,nnetas*sizeof(int)); #endif if (!fact->xeradr) { nnetas=0; } if (nnetas) { clp_free(fact->xecadr); fact->xecadr= clp_int( nnetas); #ifndef NDEBUG memset(fact->xecadr,CLP_FILL,nnetas*sizeof(int)); #endif if (!fact->xecadr) { nnetas=0; } } if (nnetas) { clp_free(fact->xeeadr); fact->xeeadr= clp_double(nnetas); #ifndef NDEBUG memset(fact->xeeadr,CLP_FILL,nnetas*sizeof(double)); #endif if (!fact->xeeadr) { nnetas=0; } } } if (!nnetas) { char msg[100]; sprintf(msg,"Unable to allocate factorization memory for %d elements", nnetas); throw(msg); } /*c_ekklplp->nnetas=nnetas;*/ fact->nnetas=nnetas; clp_adjust_pointers(fact, -1); } static void c_ekksmem_copy(EKKfactinfo *fact,const EKKfactinfo * rhsFact) { /* space for invert */ int nrowmx=rhsFact->nrowmx,nnetas=rhsFact->nnetas; int canReuseEtas= (fact->eta_size==rhsFact->eta_size) ? 1 : 0; int canReuseArrays = (fact->nrowmx==rhsFact->nrowmx) ? 1 : 0; clp_adjust_pointers(fact, +1); clp_adjust_pointers(const_cast(rhsFact), +1); /*memset(fact,0,sizeof(EKKfactinfo));*/ /* copy scalars */ memcpy(&fact->drtpiv,&rhsFact->drtpiv,5*sizeof(double)); memcpy(&fact->nrow,&rhsFact->nrow,((&fact->maxNNetas-&fact->nrow)+1)* sizeof(int)); if (nrowmx) { int length; int kCopyEnd,nCopyEnd,nCopyStart; if (!canReuseEtas) { clp_free(fact->xeradr); clp_free(fact->xecadr); clp_free(fact->xeeadr); clp_free(fact->xe2adr); fact->xeradr = 0; fact->xecadr = 0; fact->xeeadr = 0; fact->xe2adr = 0; } if (!canReuseArrays) { clp_free(fact->trueStart); fact->trueStart=0; fact->kw1adr=0; fact->trueStart=clp_alloc_memory(fact,1,&length); fact->kw1adr=reinterpret_cast( clp_align(fact->trueStart)); } clp_alloc_memory(fact,0,&length); nnetas=fact->eta_size; assert (nnetas); { int n2 = rhsFact->nR_etas; int n3 = n2 ? rhsFact->R_etas_start[1+n2]: 0; int * startR = rhsFact->R_etas_index+n3; nCopyEnd=static_cast((rhsFact->xeradr+nnetas)-startR); nCopyStart=rhsFact->nnentu; nCopyEnd = CoinMin(nCopyEnd+20,nnetas); kCopyEnd = nnetas-nCopyEnd; nCopyStart = CoinMin(nCopyStart+20,nnetas); if (!n2&&!rhsFact->nnentu&&!rhsFact->nnentl) { nCopyStart=nCopyEnd=0; } } /* copy */ if(nCopyStart||nCopyEnd||true) { #if 1 memcpy(fact->kw1adr,rhsFact->kw1adr,length*sizeof(double)); #else c_ekkscpy((length*sizeof(double))/sizeof(int), reinterpret_cast( rhsFact->kw1adr,reinterpret_cast( fact->kw1adr)); #endif } /* if malloc fails - we have lost memory - start again */ if (!fact->ndenuc &&fact->if_sparse_update) { /* allow second copy of elements */ if (!canReuseEtas) fact->xe2adr = clp_double(nnetas); if (!fact->xe2adr) { fact->maxNNetas=nnetas; /* dont allow any increase */ #ifdef PRINT_DEBUG if (fact->if_sparse_update) { printf("*** Sparse update off due to memory\n"); } #endif fact->if_sparse_update=0; } else { #ifndef NDEBUG memset(fact->xe2adr,CLP_FILL,nnetas*sizeof(double)); #endif } } else { clp_free(fact->xe2adr); fact->xe2adr = 0; fact->if_sparse_update=0; } if (!canReuseEtas) fact->xeradr= clp_int(nnetas); if (!fact->xeradr) { nnetas=0; } else { #ifndef NDEBUG memset(fact->xeradr,CLP_FILL,nnetas*sizeof(int)); #endif /* copy */ if(nCopyStart||nCopyEnd) { #if 0 memcpy(fact->xeradr,rhsFact->xeradr,nCopyStart*sizeof(int)); memcpy(fact->xeradr+kCopyEnd,rhsFact->xeradr+kCopyEnd,nCopyEnd*sizeof(int)); #else c_ekkscpy(nCopyStart,rhsFact->xeradr,fact->xeradr); c_ekkscpy(nCopyEnd,rhsFact->xeradr+kCopyEnd,fact->xeradr+kCopyEnd); #endif } } if (nnetas) { if (!canReuseEtas) fact->xecadr= clp_int(nnetas); if (!fact->xecadr) { nnetas=0; } else { #ifndef NDEBUG memset(fact->xecadr,CLP_FILL,nnetas*sizeof(int)); #endif /* copy */ if (fact->rows_ok&&(nCopyStart||nCopyEnd)) { int i; int * hcoliR=rhsFact->xecadr-1; int * hcoli=fact->xecadr-1; int * mrstrt=fact->xrsadr; int * hinrow=fact->xrnadr; #if 0 memcpy(fact->xecadr+kCopyEnd,rhsFact->xecadr+kCopyEnd, nCopyEnd*sizeof(int)); #else c_ekkscpy(nCopyEnd,rhsFact->xecadr+kCopyEnd,fact->xecadr+kCopyEnd); #endif if (!fact->xe2adr) { for (i=0;inrow;i++) { int istart = mrstrt[i]; assert (istart>0&&istart<=nnetas); assert (hinrow[i]>=0&&hinrow[i]<=fact->nrow); memcpy(hcoli+istart,hcoliR+istart,hinrow[i]*sizeof(int)); } } else { double * de2valR=rhsFact->xe2adr-1; double * de2val=fact->xe2adr-1; #if 0 memcpy(fact->xe2adr+kCopyEnd,rhsFact->xe2adr+kCopyEnd, nCopyEnd*sizeof(double)); #else c_ekkdcpy(nCopyEnd,rhsFact->xe2adr+kCopyEnd ,fact->xe2adr+kCopyEnd); #endif for (i=0;inrow;i++) { int istart = mrstrt[i]; assert (istart>0&&istart<=nnetas); assert (hinrow[i]>=0&&hinrow[i]<=fact->nrow); memcpy(hcoli+istart,hcoliR+istart,hinrow[i]*sizeof(int)); memcpy(de2val+istart,de2valR+istart,hinrow[i]*sizeof(double)); #ifndef NDEBUG { int j; for (j=istart;jxeeadr= clp_double(nnetas); if (!fact->xeeadr) { nnetas=0; } else { #ifndef NDEBUG memset(fact->xeeadr,CLP_FILL,nnetas*sizeof(double)); #endif /* copy */ if(nCopyStart||nCopyEnd) { #if 0 memcpy(fact->xeeadr,rhsFact->xeeadr,nCopyStart*sizeof(double)); memcpy(fact->xeeadr+kCopyEnd,rhsFact->xeeadr+kCopyEnd,nCopyEnd*sizeof(double)); #else c_ekkdcpy(nCopyStart, rhsFact->xeeadr,fact->xeeadr); c_ekkdcpy(nCopyEnd, rhsFact->xeeadr+kCopyEnd, fact->xeeadr+kCopyEnd); #endif } /*fact->R_etas_index = &XERADR1()[kdnspt - 1]; fact->R_etas_element = &XEEADR1()[kdnspt - 1];*/ fact->R_etas_start = fact->xcsadr+ (rhsFact->R_etas_start-rhsFact->xcsadr); fact->R_etas_index = fact->xeradr+ (rhsFact->R_etas_index-rhsFact->xeradr); fact->R_etas_element = fact->xeeadr+ (rhsFact->R_etas_element-rhsFact->xeeadr); } } } assert (nnetas||!nrowmx); fact->nnetas=nnetas; clp_adjust_pointers(fact, -1); clp_setup_pointers(fact); clp_adjust_pointers(const_cast(rhsFact), -1); } static void c_ekksmem_delete(EKKfactinfo *fact) { clp_adjust_pointers(fact, +1); clp_free(fact->trueStart); clp_free(fact->xe2adr); clp_free(fact->xecadr); clp_free(fact->xeradr); clp_free(fact->xeeadr); fact->eta_size=0; fact->xrsadr = 0; fact->xcsadr = 0; fact->xrnadr = 0; fact->xcnadr = 0; fact->krpadr = 0; fact->kcpadr = 0; fact->xeradr = 0; fact->xecadr = 0; fact->xeeadr = 0; fact->xe2adr = 0; fact->trueStart = 0; fact->kw2adr = 0; fact->kw3adr = 0; fact->kp1adr = 0; fact->kp2adr = 0; fact->kadrpm = 0; fact->kw1adr = 0; } int c_ekk_IsSet(const int * array,int bit); void c_ekk_Set(int * array,int bit); void c_ekk_Unset(int * array,int bit); int c_ekk_IsSet(const int * array,int bit) { int iWord = bit>>5; int iBit = bit&31; int word = array[iWord]; return (word&(1<>5; int iBit = bit&31; array[iWord] |= (1<>5; int iBit = bit&31; array[iWord] &= ~(1<=0) pivotTemp[numberRowBasic++]=i; } numberBasic = numberRowBasic; for (i=0;i=0) { pivotTemp[numberBasic++]=i; numberElements += columnLength[i]; } } if ( numberBasic > numberRows ) { return -2; // say too many in basis } numberElements = 3 * numberRows + 3 * numberElements + 20000; setUsefulInformation(&numberRows,0); getAreas ( numberRows, numberRows, numberElements, 2 * numberElements ); //fill numberBasic=0; numberElements=0; // Fill in counts so we can skip part of preProcess double * elementU=elements(); int * indexRowU=indices(); int * startColumnU=starts(); int * numberInRow=this->numberInRow(); int * numberInColumn=this->numberInColumn(); CoinZeroN ( numberInRow, numberRows ); CoinZeroN ( numberInColumn, numberRows ); for (i=0;i=0) { CoinBigIndex j; for (j=columnStart[i];j=0); columnIsBasic[iPivot]=i; } else { iPivot-=numberColumns; assert (rowIsBasic[iPivot]>=0); rowIsBasic[iPivot]=i; } } delete [] pivotVariable; } delete [] pivotTemp; return status_; } // Condition number - product of pivots after factorization double CoinOslFactorization::conditionNumber() const { double condition = 1.0; const double *dluval = factInfo_.xeeadr+1-1; // stored before const int *mcstrt = factInfo_.xcsadr+1; for (int i=0;i #include "CoinPackedVectorBase.hpp" #include "CoinTypes.hpp" #include "CoinHelperFunctions.hpp" #include "CoinFloatEqual.hpp" //############################################################################# double * CoinPackedVectorBase::denseVector(int denseSize) const { if (getMaxIndex() >= denseSize) throw CoinError("Dense vector size is less than max index", "denseVector", "CoinPackedVectorBase"); double * dv = new double[denseSize]; CoinFillN(dv, denseSize, 0.0); const int s = getNumElements(); const int * inds = getIndices(); const double * elems = getElements(); for (int i = 0; i < s; ++i) dv[inds[i]] = elems[i]; return dv; } //----------------------------------------------------------------------------- double CoinPackedVectorBase::operator[](int i) const { if (! testedDuplicateIndex_) duplicateIndex("operator[]", "CoinPackedVectorBase"); // Get a reference to a map of full storage indices to // packed storage location. const std::set & sv = *indexSet("operator[]", "CoinPackedVectorBase"); #if 1 if (sv.find(i) == sv.end()) return 0.0; return getElements()[findIndex(i)]; #else // LL: suggested change, somthing is wrong with this const size_t ind = std::distance(sv.begin(), sv.find(i)); return (ind == sv.size()) ? 0.0 : getElements()[ind]; #endif } //############################################################################# void CoinPackedVectorBase::setTestForDuplicateIndex(bool test) const { if (test == true) { testForDuplicateIndex_ = true; duplicateIndex("setTestForDuplicateIndex", "CoinPackedVectorBase"); } else { testForDuplicateIndex_ = false; testedDuplicateIndex_ = false; } } //############################################################################# void CoinPackedVectorBase::setTestForDuplicateIndexWhenTrue(bool test) const { // We know everything is okay so let's not test (e.g. full array) testForDuplicateIndex_ = test; testedDuplicateIndex_ = test; } //############################################################################# int CoinPackedVectorBase::getMaxIndex() const { findMaxMinIndices(); return maxIndex_; } //----------------------------------------------------------------------------- int CoinPackedVectorBase::getMinIndex() const { findMaxMinIndices(); return minIndex_; } //----------------------------------------------------------------------------- void CoinPackedVectorBase::duplicateIndex(const char* methodName, const char * className) const { if (testForDuplicateIndex()) indexSet(methodName, className); testedDuplicateIndex_ = true; } //----------------------------------------------------------------------------- bool CoinPackedVectorBase::isExistingIndex(int i) const { if (! testedDuplicateIndex_) duplicateIndex("indexExists", "CoinPackedVectorBase"); const std::set & sv = *indexSet("indexExists", "CoinPackedVectorBase"); return sv.find(i) != sv.end(); } int CoinPackedVectorBase::findIndex(int i) const { const int * inds = getIndices(); int retVal = static_cast(std::find(inds, inds + getNumElements(), i) - inds); if (retVal == getNumElements() ) retVal = -1; return retVal; } //############################################################################# bool CoinPackedVectorBase::operator==(const CoinPackedVectorBase& rhs) const { if (getNumElements() == 0 || rhs.getNumElements() == 0) { if (getNumElements() == 0 && rhs.getNumElements() == 0) return (true) ; else return (false) ; } else { return (getNumElements()==rhs.getNumElements() && std::equal(getIndices(),getIndices()+getNumElements(), rhs.getIndices()) && std::equal(getElements(),getElements()+getNumElements(), rhs.getElements())) ; } } //----------------------------------------------------------------------------- bool CoinPackedVectorBase::operator!=(const CoinPackedVectorBase& rhs) const { return !( (*this)==rhs ); } //----------------------------------------------------------------------------- int CoinPackedVectorBase::compare(const CoinPackedVectorBase& rhs) const { const int size = getNumElements(); int itmp = size - rhs.getNumElements(); if (itmp != 0) { return itmp; } itmp = memcmp(getIndices(), rhs.getIndices(), size * sizeof(int)); if (itmp != 0) { return itmp; } return memcmp(getElements(), rhs.getElements(), size * sizeof(double)); } bool CoinPackedVectorBase::isEquivalent(const CoinPackedVectorBase& rhs) const { return isEquivalent(rhs, CoinRelFltEq()); } //############################################################################# double CoinPackedVectorBase::dotProduct(const double* dense) const { const double * elems = getElements(); const int * inds = getIndices(); double dp = 0.0; for (int i = getNumElements() - 1; i >= 0; --i) dp += elems[i] * dense[inds[i]]; return dp; } //----------------------------------------------------------------------------- double CoinPackedVectorBase::oneNorm() const { register double norm = 0.0; register const double* elements = getElements(); for (int i = getNumElements() - 1; i >= 0; --i) { norm += fabs(elements[i]); } return norm; } //----------------------------------------------------------------------------- double CoinPackedVectorBase::normSquare() const { return std::inner_product(getElements(), getElements() + getNumElements(), getElements(), 0.0); } //----------------------------------------------------------------------------- double CoinPackedVectorBase::twoNorm() const { return sqrt(normSquare()); } //----------------------------------------------------------------------------- double CoinPackedVectorBase::infNorm() const { register double norm = 0.0; register const double* elements = getElements(); for (int i = getNumElements() - 1; i >= 0; --i) { norm = CoinMax(norm, fabs(elements[i])); } return norm; } //----------------------------------------------------------------------------- double CoinPackedVectorBase::sum() const { return std::accumulate(getElements(), getElements() + getNumElements(), 0.0); } //############################################################################# CoinPackedVectorBase::CoinPackedVectorBase() : maxIndex_(-COIN_INT_MAX/*0*/), minIndex_(COIN_INT_MAX/*0*/), indexSetPtr_(NULL), testForDuplicateIndex_(true), testedDuplicateIndex_(false) {} //----------------------------------------------------------------------------- CoinPackedVectorBase::~CoinPackedVectorBase() { delete indexSetPtr_; } //############################################################################# //############################################################################# void CoinPackedVectorBase::findMaxMinIndices() const { if ( getNumElements()==0 ) return; // if indexSet exists then grab begin and rend to get min & max indices else if ( indexSetPtr_ != NULL ) { maxIndex_ = *indexSetPtr_->rbegin(); minIndex_ = *indexSetPtr_-> begin(); } else { // Have to scan through vector to find min and max. maxIndex_ = *(std::max_element(getIndices(), getIndices() + getNumElements())); minIndex_ = *(std::min_element(getIndices(), getIndices() + getNumElements())); } } //------------------------------------------------------------------- std::set * CoinPackedVectorBase::indexSet(const char* methodName, const char * className) const { testedDuplicateIndex_ = true; if ( indexSetPtr_ == NULL ) { // create a set of the indices indexSetPtr_ = new std::set; const int s = getNumElements(); const int * inds = getIndices(); for (int j=0; j < s; ++j) { if (!indexSetPtr_->insert(inds[j]).second) { testedDuplicateIndex_ = false; delete indexSetPtr_; indexSetPtr_ = NULL; if (methodName != NULL) { throw CoinError("Duplicate index found", methodName, className); } else { throw CoinError("Duplicate index found", "indexSet", "CoinPackedVectorBase"); } } } } return indexSetPtr_; } //----------------------------------------------------------------------------- void CoinPackedVectorBase::clearIndexSet() const { delete indexSetPtr_; indexSetPtr_ = NULL; } //----------------------------------------------------------------------------- void CoinPackedVectorBase::clearBase() const { clearIndexSet(); maxIndex_ = -COIN_INT_MAX/*0*/; minIndex_ = COIN_INT_MAX/*0*/; testedDuplicateIndex_ = false; } //############################################################################# CoinUtils-2.9.10/CoinUtils/src/CoinError.cpp0000644000076600007660000000111411510461170017271 0ustar coincoin/* $Id: CoinError.cpp 1373 2011-01-03 23:57:44Z lou $ */ // 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 "CoinError.hpp" bool CoinError::printErrors_ = false; /** A function to block the popup windows that windows creates when the code crashes */ #ifdef HAVE_WINDOWS_H #include void WindowsErrorPopupBlocker() { SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX); } #else void WindowsErrorPopupBlocker() {} #endif CoinUtils-2.9.10/CoinUtils/depcomp0000755000076600007660000003710011405215457015465 0ustar coincoin#! /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: CoinUtils-2.9.10/CoinUtils/MSVisualStudio/0000755000076600007660000000000012244605315017000 5ustar coincoinCoinUtils-2.9.10/CoinUtils/MSVisualStudio/v10/0000755000076600007660000000000012244605315017406 5ustar coincoinCoinUtils-2.9.10/CoinUtils/MSVisualStudio/v10/unitTestCoinUtils/0000755000076600007660000000000012244605315023057 5ustar coincoinCoinUtils-2.9.10/CoinUtils/MSVisualStudio/v10/unitTestCoinUtils/unitTestCoinUtils.vcxproj0000644000076600007660000010247512227405531030155 0ustar coincoin Debug Win32 Debug x64 Release Win32 Release x64 {D8879B84-4497-48E6-96A5-49B154FB0422} unitTestCoinUtils Application false MultiByte Application false MultiByte Application false MultiByte Application false MultiByte <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false $(SolutionDir)$(Platform)-$(PlatformToolset)-$(Configuration)\ $(Platform)-$(PlatformToolset)-$(Configuration)\ false $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset .\Debug/unitTestCoinUtils.tlb Disabled ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) COINUTILS_BUILD;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;COIN_MSVS;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS EnableFastChecks MultiThreadedDebugDLL true .\Debug/unitTestCoinUtils.pch Level3 true EditAndContinue Default _DEBUG;%(PreprocessorDefinitions) 0x0409 NotSet true true $(TargetDir)$(TargetName).pdb Console false MachineX86 libCoinUtils.lib;%(AdditionalDependencies) $(OutDir);%(AdditionalLibraryDirectories) false X64 .\Debug/unitTestCoinUtils.tlb Disabled ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;COIN_MSVS;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS EnableFastChecks MultiThreadedDebugDLL true .\Debug/unitTestCoinUtils.pch Level3 true ProgramDatabase Default _DEBUG;%(PreprocessorDefinitions) 0x0409 true true $(TargetDir)$(TargetName).pdb Console false MachineX64 libCoinUtils.lib;%(AdditionalDependencies) $(OutDir);%(AdditionalLibraryDirectories) false .\Release/unitTestCoinUtils.tlb MaxSpeed OnlyExplicitInline ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) COINUTILS_BUILD;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;COIN_MSVS;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS true MultiThreadedDLL true true .\Release/unitTestCoinUtils.pch Level3 true Default NDEBUG;%(PreprocessorDefinitions) 0x0409 true $(TargetDir)$(TargetName).pdb Console false MachineX86 libCoinUtils.lib;%(AdditionalDependencies) $(OutDir);%(AdditionalLibraryDirectories) true false X64 .\Release/unitTestCoinUtils.tlb MaxSpeed OnlyExplicitInline ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;COIN_MSVS;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS true MultiThreadedDLL true true .\Release/unitTestCoinUtils.pch Level3 true Default NDEBUG;%(PreprocessorDefinitions) 0x0409 true $(TargetDir)$(TargetName).pdb Console false MachineX64 libCoinUtils.lib;%(AdditionalDependencies) $(OutDir);%(AdditionalLibraryDirectories) true false Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) {c4867f15-438d-4ff8-8388-62fbaaa9786c} false CoinUtils-2.9.10/CoinUtils/MSVisualStudio/v10/libCoinUtils/0000755000076600007660000000000012244605315022006 5ustar coincoinCoinUtils-2.9.10/CoinUtils/MSVisualStudio/v10/libCoinUtils/libCoinUtils.vcxproj0000644000076600007660000032413612131313741026026 0ustar coincoin Debug Win32 Debug x64 Release Win32 Release x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C} libCoinUtils StaticLibrary StaticLibrary StaticLibrary StaticLibrary <_ProjectFileVersion>10.0.30319.1 AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset ..\..\..\..\BuildTools\headers;C:\cygwin\home\ted\SYMPHONY-trunk\CoinUtils\inc;%(AdditionalIncludeDirectories) COINUTILS_BUILD;WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS true true Level3 true NDEBUG;%(PreprocessorDefinitions) 0x0409 true X64 Default ..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) COINUTILS_BUILD;WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS Level3 true NDEBUG;%(PreprocessorDefinitions) 0x0409 true ..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) COINUTILS_BUILD;WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) _DEBUG;%(PreprocessorDefinitions) 0x0409 true X64 ..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) COINUTILS_BUILD;WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS true EnableFastChecks Level3 true ProgramDatabase _DEBUG;%(PreprocessorDefinitions) 0x0409 true Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) CoinUtils-2.9.10/CoinUtils/MSVisualStudio/v10/CoinUtils.sln0000644000076600007660000000377711537753401022057 0ustar coincoin Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libCoinUtils", "libCoinUtils\libCoinUtils.vcxproj", "{C4867F15-438D-4FF8-8388-62FBAAA9786C}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unitTestCoinUtils", "unitTestCoinUtils\unitTestCoinUtils.vcxproj", "{D8879B84-4497-48E6-96A5-49B154FB0422}" 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 {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 {D8879B84-4497-48E6-96A5-49B154FB0422}.Debug|Win32.ActiveCfg = Debug|Win32 {D8879B84-4497-48E6-96A5-49B154FB0422}.Debug|Win32.Build.0 = Debug|Win32 {D8879B84-4497-48E6-96A5-49B154FB0422}.Debug|x64.ActiveCfg = Debug|x64 {D8879B84-4497-48E6-96A5-49B154FB0422}.Debug|x64.Build.0 = Debug|x64 {D8879B84-4497-48E6-96A5-49B154FB0422}.Release|Win32.ActiveCfg = Release|Win32 {D8879B84-4497-48E6-96A5-49B154FB0422}.Release|Win32.Build.0 = Release|Win32 {D8879B84-4497-48E6-96A5-49B154FB0422}.Release|x64.ActiveCfg = Release|x64 {D8879B84-4497-48E6-96A5-49B154FB0422}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal CoinUtils-2.9.10/CoinUtils/MSVisualStudio/v9/0000755000076600007660000000000012244605315017336 5ustar coincoinCoinUtils-2.9.10/CoinUtils/MSVisualStudio/v9/unitTestCoinUtils/0000755000076600007660000000000012244605315023007 5ustar coincoinCoinUtils-2.9.10/CoinUtils/MSVisualStudio/v9/unitTestCoinUtils/unitTestCoinUtils.vcproj0000644000076600007660000005117011475605352027717 0ustar coincoin CoinUtils-2.9.10/CoinUtils/MSVisualStudio/v9/libCoinUtils/0000755000076600007660000000000012244605315021736 5ustar coincoinCoinUtils-2.9.10/CoinUtils/MSVisualStudio/v9/libCoinUtils/libCoinUtils.vcproj0000644000076600007660000020221011562355660025567 0ustar coincoin CoinUtils-2.9.10/CoinUtils/MSVisualStudio/v9/CoinUtils.sln0000644000076600007660000000423011473056425021771 0ustar coincoin Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libCoinUtils", "libCoinUtils\libCoinUtils.vcproj", "{C4867F15-438D-4FF8-8388-62FBAAA9786C}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unitTestCoinUtils", "unitTestCoinUtils\unitTestCoinUtils.vcproj", "{D8879B84-4497-48E6-96A5-49B154FB0422}" ProjectSection(ProjectDependencies) = postProject {C4867F15-438D-4FF8-8388-62FBAAA9786C} = {C4867F15-438D-4FF8-8388-62FBAAA9786C} 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 {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 {D8879B84-4497-48E6-96A5-49B154FB0422}.Debug|Win32.ActiveCfg = Debug|Win32 {D8879B84-4497-48E6-96A5-49B154FB0422}.Debug|Win32.Build.0 = Debug|Win32 {D8879B84-4497-48E6-96A5-49B154FB0422}.Debug|x64.ActiveCfg = Debug|x64 {D8879B84-4497-48E6-96A5-49B154FB0422}.Debug|x64.Build.0 = Debug|x64 {D8879B84-4497-48E6-96A5-49B154FB0422}.Release|Win32.ActiveCfg = Release|Win32 {D8879B84-4497-48E6-96A5-49B154FB0422}.Release|Win32.Build.0 = Release|Win32 {D8879B84-4497-48E6-96A5-49B154FB0422}.Release|x64.ActiveCfg = Release|x64 {D8879B84-4497-48E6-96A5-49B154FB0422}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal CoinUtils-2.9.10/CoinUtils/Makefile.in0000644000076600007660000007420112240310440016142 0ustar coincoin# 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@ # 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_1 = test DIST_COMMON = README $(am__configure_deps) \ $(srcdir)/BuildTools/Makemain.inc $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/coinutils-uninstalled.pc.in \ $(srcdir)/coinutils.pc.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_2 = Dependencies @HAVE_EXTERNALS_TRUE@am__append_3 = .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/config.h \ $(top_builddir)/src/config_coinutils.h CONFIG_CLEAN_FILES = coinutils.pc coinutils-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 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@ ADD_FFLAGS = @ADD_FFLAGS@ 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@ BLAS_CFLAGS = @BLAS_CFLAGS@ BLAS_CFLAGS_INSTALLED = @BLAS_CFLAGS_INSTALLED@ BLAS_DATA = @BLAS_DATA@ BLAS_DATA_INSTALLED = @BLAS_DATA_INSTALLED@ BLAS_DEPENDENCIES = @BLAS_DEPENDENCIES@ BLAS_LIBS = @BLAS_LIBS@ BLAS_LIBS_INSTALLED = @BLAS_LIBS_INSTALLED@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILSLIB_CFLAGS = @COINUTILSLIB_CFLAGS@ COINUTILSLIB_CFLAGS_INSTALLED = @COINUTILSLIB_CFLAGS_INSTALLED@ COINUTILSLIB_DEPENDENCIES = @COINUTILSLIB_DEPENDENCIES@ COINUTILSLIB_LIBS = @COINUTILSLIB_LIBS@ COINUTILSLIB_LIBS_INSTALLED = @COINUTILSLIB_LIBS_INSTALLED@ COINUTILSLIB_PCLIBS = @COINUTILSLIB_PCLIBS@ COINUTILSLIB_PCREQUIRES = @COINUTILSLIB_PCREQUIRES@ COINUTILS_SVN_REV = @COINUTILS_SVN_REV@ 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_BLAS_FALSE = @COIN_HAS_BLAS_FALSE@ COIN_HAS_BLAS_TRUE = @COIN_HAS_BLAS_TRUE@ COIN_HAS_GLPK_FALSE = @COIN_HAS_GLPK_FALSE@ COIN_HAS_GLPK_TRUE = @COIN_HAS_GLPK_TRUE@ COIN_HAS_LAPACK_FALSE = @COIN_HAS_LAPACK_FALSE@ COIN_HAS_LAPACK_TRUE = @COIN_HAS_LAPACK_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_ZLIB_FALSE = @COIN_HAS_ZLIB_FALSE@ COIN_HAS_ZLIB_TRUE = @COIN_HAS_ZLIB_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@ 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@ FLIBS = @FLIBS@ 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@ 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@ LAPACK_CFLAGS = @LAPACK_CFLAGS@ LAPACK_CFLAGS_INSTALLED = @LAPACK_CFLAGS_INSTALLED@ LAPACK_DATA = @LAPACK_DATA@ LAPACK_DATA_INSTALLED = @LAPACK_DATA_INSTALLED@ LAPACK_DEPENDENCIES = @LAPACK_DEPENDENCIES@ LAPACK_LIBS = @LAPACK_LIBS@ LAPACK_LIBS_INSTALLED = @LAPACK_LIBS_INSTALLED@ 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@ 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@ 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@ 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@ 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@ 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 = $(am__append_2) ######################################################################## # Installation of the addlibs and .pc file # ######################################################################## pkgconfiglibdir = $(libdir)/pkgconfig pkgconfiglib_DATA = coinutils.pc addlibsdir = $(DESTDIR)$(datadir)/coin/doc/CoinUtils ######################################################################## # Maintainer Stuff # ######################################################################## CLEANFILES = # Files that are generated and should be cleaned with make distclean DISTCLEANFILES = $(am__append_3) $(VPATH_DISTCLEANFILES) DocFiles = README AUTHORS LICENSE DocInstallDir = $(datadir)/coin/doc/$(PACKAGE_NAME) 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) coinutils.pc: $(top_builddir)/config.status $(srcdir)/coinutils.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ coinutils-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/coinutils-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 @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@" \ @COIN_HAS_PKGCONFIG_TRUE@ "$(PKG_CONFIG)" --libs coinutils > $(addlibsdir)/coinutils_addlibs.txt @COIN_CXX_IS_CL_TRUE@@COIN_HAS_PKGCONFIG_FALSE@ echo "-libpath:`$(CYGPATH_W) @abs_lib_dir@` libCoinUtils.lib @COINUTILSLIB_LIBS_INSTALLED@" > $(addlibsdir)/coinutils_addlibs.txt @COIN_CXX_IS_CL_FALSE@@COIN_HAS_PKGCONFIG_FALSE@ echo -L@abs_lib_dir@ -lCoinUtils @COINUTILSLIB_LIBS_INSTALLED@ > $(addlibsdir)/coinutils_addlibs.txt uninstall-hook: rm -f $(addlibsdir)/coinutils_addlibs.txt 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: CoinUtils-2.9.10/CoinUtils/ltmain.sh0000755000076600007660000057753011405215457015753 0ustar coincoin# 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: CoinUtils-2.9.10/CoinUtils/missing0000755000076600007660000002540611405215457015515 0ustar coincoin#! /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: CoinUtils-2.9.10/CoinUtils/README0000644000076600007660000000020210740302141014745 0ustar coincoinThis is the CoinUtils project. For information on the purpose of this project please visit https://projects.coin-or.org/CoinUtils CoinUtils-2.9.10/CoinUtils/test/0000755000076600007660000000000012244605314015063 5ustar coincoinCoinUtils-2.9.10/CoinUtils/test/unitTest.cpp0000644000076600007660000001512112167771551017421 0ustar coincoin// 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). // Test individual classes or groups of classes #ifdef NDEBUG #undef NDEBUG #endif #include #include #include "CoinPragma.hpp" #include "CoinFinite.hpp" #include "CoinError.hpp" #include "CoinHelperFunctions.hpp" #include "CoinSort.hpp" #include "CoinShallowPackedVector.hpp" #include "CoinPackedVector.hpp" #include "CoinDenseVector.hpp" #include "CoinIndexedVector.hpp" #include "CoinPackedMatrix.hpp" #include "CoinMpsIO.hpp" #include "CoinLpIO.hpp" #include "CoinMessageHandler.hpp" void CoinModelUnitTest(const std::string & mpsDir, const std::string & netlibDir, const std::string & testModel); // Function Prototypes. Function definitions is in this file. void testingMessage( const char * const msg ); //---------------------------------------------------------------- // unitTest [-mpsDir=V1] [-netlibDir=V2] [-testModel=V3] // // where (unix defaults): // -mpsDir: directory containing mps test files // Default value V1="../../Data/Sample" // -netlibDir: directory containing netlib files // Default value V2="../../Data/Netlib" // -testModel: name of model in netlibdir for testing CoinModel // Default value V3="25fv47.mps" // // All parameters are optional. //---------------------------------------------------------------- int main (int argc, const char *argv[]) { /* Set default location for Data directory, assuming traditional package layout. */ const char dirsep = CoinFindDirSeparator(); std::string dataDir ; if (dirsep == '/') dataDir = "../../Data" ; else dataDir = "..\\..\\Data" ; # ifdef COIN_MSVS // Visual Studio builds are deeper. dataDir = "..\\..\\"+dataDir ; # endif // define valid parameter keywords std::set definedKeyWords; // Really should be sampleDir, but let's not rock the boat. definedKeyWords.insert("-mpsDir"); // Directory for netlib problems. definedKeyWords.insert("-netlibDir"); // Allow for large named model for CoinModel definedKeyWords.insert("-testModel"); /* Set parameter defaults. */ std::string mpsDir = dataDir + dirsep + "Sample" + dirsep ; std::string netlibDir = dataDir + dirsep + "Netlib" + dirsep ; std::string testModel = "p0033.mps" ; /* Process command line parameters. Assume params of the form 'keyword' or 'keyword=value'. */ std::map parms; 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 ; value = "" ; } else { key = parm.substr(0,eqPos) ; value = parm.substr(eqPos+1) ; } /* Check for valid keyword. Print help and exit on failure. */ if (definedKeyWords.find(key) == definedKeyWords.end()) { std::cerr << "Undefined parameter \"" << key << "\".\n" << "Correct usage: \n" << " unitTest [-mpsDir=V1] [-netlibDir=V2] [-testModel=V3]\n" << "where:\n" << " -mpsDir: directory containing mps test files\n" << " Default value V1=\"" << mpsDir << "\"\n" << " -netlibDir: directory containing netlib files\n" << " Default value V2=\"" << netlibDir << "\"\n" << " -testModel: name of model testing CoinModel\n" << " Default value V3=\"" << testModel << "\"\n"; return 1 ; } parms[key] = value ; } // Deal with any values given on the command line if (parms.find("-mpsDir") != parms.end()) mpsDir = parms["-mpsDir"] + dirsep; if (parms.find("-netlibDir") != parms.end()) netlibDir = parms["-netlibDir"] + dirsep; if (parms.find("-testModel") != parms.end()) testModel = parms["-testModel"] ; bool allOK = true ; // *FIXME* : these tests should be written... // testingMessage( "Testing CoinHelperFunctions\n" ); // CoinHelperFunctionsUnitTest(); // testingMessage( "Testing CoinSort\n" ); // tripleCompareUnitTest(); /* Check that finite and isnan are working. */ double finiteVal = 1.0 ; double zero = 0.0 ; double checkVal ; testingMessage( "Testing CoinFinite ... " ) ; # ifdef COIN_C_FINITE checkVal = finiteVal/zero ; # else checkVal = COIN_DBL_MAX ; # endif testingMessage( " finite value: " ) ; if (CoinFinite(finiteVal)) { testingMessage( "ok" ) ; } else { allOK = false ; testingMessage( "ERROR" ) ; } testingMessage( "; infinite value: " ) ; if (!CoinFinite(checkVal)) { testingMessage( "ok.\n" ) ; } else { allOK = false ; testingMessage( "ERROR.\n" ) ; } # ifdef COIN_C_ISNAN testingMessage( "Testing CoinIsnan ... " ) ; testingMessage( " finite value: " ) ; if (!CoinIsnan(finiteVal)) { testingMessage( "ok" ) ; } else { allOK = false ; testingMessage( "ERROR" ) ; } testingMessage( "; NaN value: " ) ; checkVal = checkVal/checkVal ; if (CoinIsnan(checkVal)) { testingMessage( "ok.\n" ) ; } else { allOK = false ; testingMessage( "ERROR.\n" ) ; } # else allOK = false ; testingMessage( "ERROR: No functional CoinIsnan.\n" ) ; # endif testingMessage( "Testing CoinModel\n" ); CoinModelUnitTest(mpsDir,netlibDir,testModel); testingMessage( "Testing CoinError\n" ); CoinErrorUnitTest(); testingMessage( "Testing CoinShallowPackedVector\n" ); CoinShallowPackedVectorUnitTest(); testingMessage( "Testing CoinPackedVector\n" ); CoinPackedVectorUnitTest(); testingMessage( "Testing CoinIndexedVector\n" ); CoinIndexedVectorUnitTest(); testingMessage( "Testing CoinPackedMatrix\n" ); CoinPackedMatrixUnitTest(); // At moment CoinDenseVector is not compiling with MS V C++ V6 #if 1 testingMessage( "Testing CoinDenseVector\n" ); //CoinDenseVectorUnitTest(0); CoinDenseVectorUnitTest(0.0); CoinDenseVectorUnitTest(0.0f); #endif testingMessage( "Testing CoinMpsIO\n" ); CoinMpsIOUnitTest(mpsDir); testingMessage( "Testing CoinLpIO\n" ); CoinLpIOUnitTest(mpsDir); testingMessage( "Testing CoinMessageHandler\n" ); if (!CoinMessageHandlerUnitTest()) { allOK = false ; } if (allOK) { testingMessage( "All tests completed successfully.\n" ); return (0) ; } else { testingMessage( "\nERROR: " ) ; testingMessage( "Errors occurred during testing; please check the output.\n\n"); return (1) ; } } // Display message on stdout and stderr void testingMessage( const char * const msg ) { std::cerr < namespace { // begin file-local namespace /* Define a set of test messages. */ enum COIN_TestMessage { COIN_TST_NOFIELDS, COIN_TST_INT, COIN_TST_DBL, COIN_TST_DBLFMT, COIN_TST_CHAR, COIN_TST_STRING, COIN_TST_MULTIPART, COIN_TST_NOCODES, COIN_TST_END } ; /* Convenient structure for doing static initialisation. Essentially, we want something that'll allow us to set up an array of structures with the information required by CoinOneMessage. Then we can easily walk the array, create a CoinOneMessage structure for each message, and add each message to a CoinMessages structure. */ typedef struct { COIN_TestMessage internalNumber; int externalNumber; char detail; const char * message; } MsgDefn ; MsgDefn us_tstmsgs[] = { {COIN_TST_NOFIELDS,1,1,"This message has no parts and no fields."}, {COIN_TST_INT,3,1,"This message has an integer field: (%d)"}, {COIN_TST_DBL,4,1,"This message has a double field: (%g)"}, {COIN_TST_DBLFMT,4,1, "This message has an explicit precision .3: (%.3g)"}, {COIN_TST_CHAR,5,1,"This message has a char field: (%c)"}, {COIN_TST_STRING,6,1,"This message has a string field: (%s)"}, {COIN_TST_MULTIPART,7,1, "Prefix%? Part 1%? Part 2 with integer in hex %#.4x%? Part 3%? suffix."}, {COIN_TST_NOCODES,8,1,""}, {COIN_TST_END,7,1,"This is the dummy end marker."} } ; /* Tests that don't use formatted messages. */ void testsWithoutMessages (int &errs) { CoinMessageHandler hdl ; /* format_ must be null in order for on-the-fly message construction to work properly. */ hdl.message() << "This should print if the constructor sets format_ to null." << CoinMessageEol ; /* Log level should have no effect by default, so set it to 0 to prove the point. */ hdl.message() << "By default, the log level has no effect for on-the-fly messages." << CoinMessageEol ; hdl.setLogLevel(0) ; if (hdl.logLevel() != 0) { std::cout << "Cannot set/get log level of 0!" << std::endl ; errs++ ; } hdl.message() << "Log level is now" << hdl.logLevel() << "." << CoinMessageEol ; /* But we can specify a log level and it will be effective. What's more, each message is completely independent, so the default behaviour should return after an explicit log level suppressed printing. */ hdl.message() << "But we can specify a log level and have it take effect." << CoinMessageEol ; hdl.message(1) << "This message should not print!" << CoinMessageEol ; hdl.message() << "If you saw a message that said 'should not print', there's a problem." << CoinMessageEol ; /* This next sequence exposed a subtle bug in cloning. Failure here may well cause a core dump. Here's the scenario: Since we haven't used any messages, rhs.format_ is null and rhs.currentMessage_ is set to the default for CoinOneMessage, which sets the format string to the null string "\0". Cloning assumed that rhs.format_ was a pointer into the format string from currentMessage_, and proceeded to set up format_ in the clone to be a pointer into the cloned currentMessage_, allowing for the fact that we might be somewhere in the middle of the message at the time of cloning. Net result was that format_ was non-null in the clone, but god only knows where it pointed to. When the code tried to write to *format_, the result was a core dump. */ hdl.message() << "A core dump here indicates a cloning failure." << CoinMessageEol ; CoinMessageHandler hdlClone(hdl) ; hdlClone.message() << "This should print if cloning sets format_ to null." << CoinMessageEol ; return ; } /* Basic functionality for printing messages. Check that supported parameter types work, and that we can selectively suppress portions of a message. */ void basicTestsWithMessages (const CoinMessages &testMessages, int &errs) { CoinMessageHandler hdl ; hdl.setLogLevel(1) ; if (hdl.logLevel() != 1) { std::cout << "Cannot set/get log level of 1!" << std::endl ; errs++ ; } /* Simple tests of one piece messages. */ hdl.message(COIN_TST_NOFIELDS,testMessages) << CoinMessageEol ; hdl.message(COIN_TST_INT,testMessages) << 42 << CoinMessageEol ; hdl.message(COIN_TST_DBL,testMessages) << (42.42+1.0/7.0) << CoinMessageEol ; std::cout << "Changing to 10 significant digits." << std::endl ; int savePrecision = hdl.precision() ; hdl.setPrecision(10) ; hdl.message(COIN_TST_DBL,testMessages) << (42.42+1.0/7.0) << CoinMessageEol ; std::cout << "And back to " << savePrecision << " significant digits." << std::endl ; hdl.setPrecision(savePrecision) ; hdl.message(COIN_TST_DBL,testMessages) << (42.42+1.0/7.0) << CoinMessageEol ; hdl.message(COIN_TST_DBLFMT,testMessages) << (42.42+1.0/7.0) << CoinMessageEol ; hdl.message(COIN_TST_CHAR,testMessages) << 'w' << CoinMessageEol ; hdl.message(COIN_TST_STRING,testMessages) << "forty-two" << CoinMessageEol ; /* A multipart message, consisting of prefix, three optional parts, and a suffix. Note that we need four calls to printing() in order to process the four `%?' codes. */ hdl.message(COIN_TST_MULTIPART,testMessages) ; hdl.printing(true) ; hdl.printing(true) << 42 ; hdl.printing(true) ; hdl.printing(true) << CoinMessageEol ; hdl.message(COIN_TST_MULTIPART,testMessages) ; hdl.printing(false) ; hdl.printing(false) << 42 ; hdl.printing(false) ; hdl.printing(true) << CoinMessageEol ; hdl.message(COIN_TST_MULTIPART,testMessages) ; hdl.printing(true) ; hdl.printing(false) << 42 ; hdl.printing(false) ; hdl.printing(true) << CoinMessageEol ; hdl.message(COIN_TST_MULTIPART,testMessages) ; hdl.printing(false) ; hdl.printing(true) << 42 ; hdl.printing(false) ; hdl.printing(true) << CoinMessageEol ; hdl.message(COIN_TST_MULTIPART,testMessages) ; hdl.printing(false) ; hdl.printing(false) << 42 ; hdl.printing(true) ; hdl.printing(true) << CoinMessageEol ; /* Construct a message from scratch given an empty message. Parameters are printed with default format codes. */ hdl.message(COIN_TST_NOCODES,testMessages) ; hdl.message() << "Standardised prefix, free form remainder:" ; hdl.message() << "An int" << 42 << "A double" << 4.2 << "a new line" << CoinMessageNewline << "and done." << CoinMessageEol ; /* Construct a message from scratch given nothing at all. hdl.finish is equivalent to CoinMessageEol (more accurately, processing CoinMessagEol consists of a call to finish). */ hdl.message() << "No standardised prefix, free form reminder: integer (" << 42 << ")." ; hdl.finish() ; /* And the transition mechanism, where we just dump the string we're given. It's not possible to augment this message, as printStatus_ is set to 2, which prevents the various operator<< methods from contributing to the output buffer, with the exception of operator<<(CoinMessageMarker). */ hdl.message(27,"Tran","Transition message.",'I') << CoinMessageEol ; return ; } /* More difficult tests. Clone a handler in mid-message. Why? Because we can. */ void advTestsWithMessages (const CoinMessages &testMessages, int &errs) { CoinMessageHandler hdl ; /* A multipart message, consisting of prefix, three optional parts, and a suffix. Note that we need four calls to printing() in order to process the four `%?' codes. */ hdl.message() << "Trying a clone in mid-message." << CoinMessageEol ; hdl.message(COIN_TST_MULTIPART,testMessages) ; hdl.printing(true) ; hdl.printing(true) ; CoinMessageHandler hdl2 ; hdl2 = hdl ; hdl2.message() << 42 ; hdl2.printing(true) ; hdl2.printing(true) << CoinMessageEol ; hdl.message() << 0x42 ; hdl.printing(false) ; hdl.printing(false) << CoinMessageEol ; hdl.message() << "The second copy should be missing Part 3 and suffix." << CoinMessageEol ; return ; } } // end file-local namespace bool CoinMessageHandlerUnitTest () { int errs = 0 ; /* Create a CoinMessages object to hold our messages. */ CoinMessages testMessages(sizeof(us_tstmsgs)/sizeof(MsgDefn)) ; strcpy(testMessages.source_,"Test") ; /* Load with messages. This involves creating successive messages (CoinOneMessage) and loading them into the array. This is the usual copy operation; client is responsible for disposing of the original message (accomplished here by keeping the CoinOneMessage internal to the loop body). */ MsgDefn *msgDef = us_tstmsgs ; while (msgDef->internalNumber != COIN_TST_END) { CoinOneMessage msg(msgDef->externalNumber,msgDef->detail,msgDef->message) ; testMessages.addMessage(msgDef->internalNumber,msg) ; msgDef++ ; } /* Run some tests on a message handler without messages. */ testsWithoutMessages(errs) ; /* Basic tests with messages. */ basicTestsWithMessages(testMessages,errs) ; /* Advanced tests with messages. */ advTestsWithMessages(testMessages,errs) ; /* Did we make it without error? */ if (errs) { std::cout << "ERROR! CoinMessageHandlerTest reports " << errs << " errors." << std::endl ; } else { std::cout << "CoinMessageHandlerTest completed without error." << std::endl ; } return (errs == 0) ; } CoinUtils-2.9.10/CoinUtils/test/CoinLpIOTest.cpp0000755000076600007660000003252512167771551020070 0ustar coincoin// 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 #ifdef NDEBUG #undef NDEBUG #endif #include #include "CoinLpIO.hpp" #include "CoinFloatEqual.hpp" #include //############################################################################# //-------------------------------------------------------------------------- // test import methods void CoinLpIOUnitTest(const std::string& lpDir) { // Test default constructor { CoinLpIO m; assert( m.rowsense_ == NULL ); assert( m.rhs_ == NULL ); assert( m.rowrange_ == NULL ); assert( m.matrixByRow_ == NULL ); assert( m.matrixByColumn_ == NULL ); assert( m.integerType_ == NULL); assert( m.fileName_ == NULL ); assert( !strcmp( m.problemName_ , "")); assert( m.objName_ == NULL); } { CoinRelFltEq eq; CoinLpIO m; std::string fn = lpDir + "exmip1.lp"; m.readLp(fn.c_str()); assert( !strcmp( m.problemName_ , "")); assert( !strcmp( m.objName_ , "OBJ")); // Test language and re-use m.newLanguage(CoinMessages::it); m.messageHandler()->setPrefix(false); m.readLp(fn.c_str()); // Test copy constructor and assignment operator { CoinLpIO lhs; { CoinLpIO im(m); CoinLpIO imC1(im); assert( imC1.getNumCols() == im.getNumCols() ); assert( imC1.getNumRows() == im.getNumRows() ); for (int i = 0; i < im.numberHash_[0]; i++) { // check the row name assert(!strcmp(im.names_[0][i], imC1.names_[0][i])); } for (int i = 0; i < im.numberHash_[1]; i++) { // check the column name assert(!strcmp(im.names_[1][i], imC1.names_[1][i])); } for (int i = 0; i < im.maxHash_[0]; i++) { // check hash value for row name assert(im.hash_[0][i].next == imC1.hash_[0][i].next); assert(im.hash_[0][i].index == imC1.hash_[0][i].index); } for (int i = 0; i < im.maxHash_[1]; i++) { // check hash value for column name assert(im.hash_[1][i].next == imC1.hash_[1][i].next); assert(im.hash_[1][i].index == imC1.hash_[1][i].index); } CoinLpIO imC2(im); assert( imC2.getNumCols() == im.getNumCols() ); assert( imC2.getNumRows() == im.getNumRows() ); lhs = imC2; assert( lhs.getNumCols() == imC2.getNumCols() ); assert( lhs.getNumRows() == imC2.getNumRows() ); for (int i = 0; i < imC2.numberHash_[0]; i++) { // check the row name assert(!strcmp(lhs.names_[0][i], imC2.names_[0][i])); } for (int i = 0; i < imC2.numberHash_[1]; i++) { // check the column name assert(!strcmp(lhs.names_[1][i], imC2.names_[1][i])); } for (int i = 0; i < imC2.maxHash_[0]; i++) { // check hash value for row name assert(lhs.hash_[0][i].next == imC2.hash_[0][i].next); assert(lhs.hash_[0][i].index == imC2.hash_[0][i].index); } for (int i = 0; i < im.maxHash_[1]; i++) { // check hash value for column name assert(lhs.hash_[1][i].next == imC2.hash_[1][i].next); assert(lhs.hash_[1][i].index == imC2.hash_[1][i].index); } } // Test that lhs has correct values even though rhs has gone out of scope assert( lhs.getNumCols() == m.getNumCols() ); assert( lhs.getNumRows() == m.getNumRows() ); } { CoinLpIO dumSi(m); int nc = dumSi.getNumCols(); int nr = dumSi.getNumRows(); const double* cl = dumSi.getColLower(); const double* cu = dumSi.getColUpper(); const double* rl = dumSi.getRowLower(); const double* ru = dumSi.getRowUpper(); assert( nc == 10 ); assert( nr == 5 ); assert( eq(cl[0], 2.5) ); assert( eq(cl[1], 0.5) ); assert( eq(cu[1], 4) ); assert( eq(cu[2], 4.3) ); assert( eq(rl[0], 2.5) ); assert( eq(rl[4], 15.0) ); assert( eq(ru[1], 2.1) ); assert( eq(ru[4], 15.0) ); assert( !eq(cl[3], 1.2345) ); assert( !eq(cu[4], 10.2345) ); assert( eq( dumSi.getObjCoefficients()[0], 1.0) ); assert( eq( dumSi.getObjCoefficients()[1], 2.0) ); assert( eq( dumSi.getObjCoefficients()[2], -1.0) ); assert( eq( dumSi.getObjCoefficients()[3], 0.0) ); assert( eq( dumSi.getObjCoefficients()[4], 0.0) ); assert( eq( dumSi.getObjCoefficients()[5], 0.0) ); assert( eq( dumSi.getObjCoefficients()[6], 0.0) ); assert( eq( dumSi.getObjCoefficients()[7], 0.0) ); assert( eq( dumSi.getObjCoefficients()[8], 0.0) ); assert( eq( dumSi.getObjCoefficients()[9], 0.0) ); dumSi.writeLp("CoinLpIoTest.lp", true); } // Read just written file { CoinLpIO dumSi; dumSi.readLp("CoinLpIoTest.lp"); int nc = dumSi.getNumCols(); int nr = dumSi.getNumRows(); const double* cl = dumSi.getColLower(); const double* cu = dumSi.getColUpper(); const double* rl = dumSi.getRowLower(); const double* ru = dumSi.getRowUpper(); assert( nc == 10 ); assert( nr == 5 ); assert( eq(cl[0], 2.5) ); assert( eq(cl[1], 0.5) ); assert( eq(cu[1], 4) ); assert( eq(cu[2], 4.3) ); assert( eq(rl[0], 2.5) ); assert( eq(rl[4], 15.0) ); assert( eq(ru[1], 2.1) ); assert( eq(ru[4], 15.0) ); assert( !eq(cl[3], 1.2345) ); assert( !eq(cu[4], 10.2345) ); assert( eq( dumSi.getObjCoefficients()[0], 1.0) ); assert( eq( dumSi.getObjCoefficients()[1], 2.0) ); assert( eq( dumSi.getObjCoefficients()[2], -1.0) ); assert( eq( dumSi.getObjCoefficients()[3], 0.0) ); assert( eq( dumSi.getObjCoefficients()[4], 0.0) ); assert( eq( dumSi.getObjCoefficients()[5], 0.0) ); assert( eq( dumSi.getObjCoefficients()[6], 0.0) ); assert( eq( dumSi.getObjCoefficients()[7], 0.0) ); } // Test matrixByRow method { const CoinLpIO si(m); const CoinPackedMatrix* smP = si.getMatrixByRow(); CoinRelFltEq eq; const double* ev = smP->getElements(); assert( eq(ev[0], 3.0) ); assert( eq(ev[1], 1.0) ); assert( eq(ev[2], -2.0) ); assert( eq(ev[3], -1.0) ); assert( eq(ev[4], -1.0) ); assert( eq(ev[5], 2.0) ); assert( eq(ev[6], 1.1) ); assert( eq(ev[7], 1.0) ); assert( eq(ev[8], 1.0) ); assert( eq(ev[9], 2.8) ); assert( eq(ev[10], -1.2) ); assert( eq(ev[11], -1.0 ) ); assert( eq(ev[12], 5.6) ); assert( eq(ev[13], 1.0) ); assert( eq(ev[14], 1.9) ); assert( eq(ev[15], -1.0) ); const CoinBigIndex* mi = smP->getVectorStarts(); assert( mi[0] == 0 ); assert( mi[1] == 5 ); assert( mi[2] == 7 ); assert( mi[3] == 9 ); assert( mi[4] == 12 ); assert( mi[5] == 16 ); const int* ei = smP->getIndices(); assert( ei[0] == 0 ); assert( ei[1] == 3 ); assert( ei[2] == 4 ); assert( ei[3] == 1 ); assert( ei[4] == 2 ); assert( ei[5] == 3 ); assert( ei[6] == 5 ); assert( ei[7] == 5 ); assert( ei[8] == 6 ); assert( ei[9] == 4 ); assert( ei[10] == 7 ); assert( ei[11] == 8 ); assert( ei[12] == 0 ); assert( ei[13] == 1 ); assert( ei[14] == 2 ); assert( ei[15] == 9 ); assert( smP->getMajorDim() == 5 ); assert( smP->getNumElements() == 16 ); } // Test matrixByCol method { const CoinLpIO si(m); const CoinPackedMatrix* smP = si.getMatrixByCol(); CoinRelFltEq eq; const double* ev = smP->getElements(); assert( eq(ev[0], 3.0) ); assert( eq(ev[1], 5.6) ); assert( eq(ev[2], -1.0) ); assert( eq(ev[3], 1.0) ); assert( eq(ev[4], -1.0) ); assert( eq(ev[5], 1.9) ); assert( eq(ev[6], 1.0) ); assert( eq(ev[7], 2.0) ); assert( eq(ev[8], -2.0) ); assert( eq(ev[9], 2.8) ); assert( eq(ev[10], 1.1) ); assert( eq(ev[11], 1.0) ); assert( eq(ev[12], 1.0) ); assert( eq(ev[13], -1.2) ); assert( eq(ev[14], -1.0) ); assert( eq(ev[15], -1.0) ); const CoinBigIndex* mi = smP->getVectorStarts(); assert( mi[0] == 0 ); assert( mi[1] == 2 ); assert( mi[2] == 4 ); assert( mi[3] == 6 ); assert( mi[4] == 8 ); assert( mi[5] == 10 ); assert( mi[6] == 12 ); assert( mi[7] == 13 ); assert( mi[8] == 14 ); assert( mi[9] == 15 ); assert( mi[10] == 16 ); const int* ei = smP->getIndices(); assert( ei[0] == 0 ); assert( ei[1] == 4 ); assert( ei[2] == 0 ); assert( ei[3] == 4 ); assert( ei[4] == 0 ); assert( ei[5] == 4 ); assert( ei[6] == 0 ); assert( ei[7] == 1 ); assert( ei[8] == 0 ); assert( ei[9] == 3 ); assert( ei[10] == 1 ); assert( ei[11] == 2 ); assert( ei[12] == 2 ); assert( ei[13] == 3 ); assert( ei[14] == 3 ); assert( ei[15] == 4 ); assert( smP->getMajorDim() == 10 ); assert( smP->getNumElements() == 16 ); assert( smP->getSizeVectorStarts() == 11 ); assert( smP->getMinorDim() == 5 ); } //-------------- // Test rowsense, rhs, rowrange, matrixByRow { CoinLpIO lhs; { assert( lhs.rowrange_ == NULL ); assert( lhs.rowsense_ == NULL ); assert( lhs.rhs_ == NULL ); assert( lhs.matrixByColumn_ == NULL ); CoinLpIO siC1(m); assert( siC1.rowrange_ != NULL ); assert( siC1.rowsense_ != NULL ); assert( siC1.rhs_ != NULL ); assert( siC1.matrixByRow_ != NULL ); const char* siC1rs = siC1.getRowSense(); assert( siC1rs[0] == 'G' ); assert( siC1rs[1] == 'L' ); assert( siC1rs[2] == 'E' ); assert( siC1rs[3] == 'E' ); assert( siC1rs[4] == 'E' ); const double* siC1rhs = siC1.getRightHandSide(); assert( eq(siC1rhs[0], 2.5) ); assert( eq(siC1rhs[1], 2.1) ); assert( eq(siC1rhs[2], 4.0) ); assert( eq(siC1rhs[3], 1.8) ); assert( eq(siC1rhs[4], 15.) ); const double* siC1rr = siC1.getRowRange(); assert( eq(siC1rr[0], 0.0) ); assert( eq(siC1rr[1], 0.0) ); assert( eq(siC1rr[2], 0.0) ); assert( eq(siC1rr[3], 0.0) ); assert( eq(siC1rr[4], 0.0) ); const CoinPackedMatrix* siC1mbr = siC1.getMatrixByRow(); assert( siC1mbr != NULL ); const double* ev = siC1mbr->getElements(); assert( eq(ev[0], 3.0) ); assert( eq(ev[1], 1.0) ); assert( eq(ev[2], -2.0) ); assert( eq(ev[3], -1.0) ); assert( eq(ev[4], -1.0) ); assert( eq(ev[5], 2.0) ); assert( eq(ev[6], 1.1) ); assert( eq(ev[7], 1.0) ); assert( eq(ev[8], 1.0) ); assert( eq(ev[9], 2.8) ); assert( eq(ev[10], -1.2) ); assert( eq(ev[11], -1.0) ); assert( eq(ev[12], 5.6) ); assert( eq(ev[13], 1.0) ); assert( eq(ev[14], 1.9) ); assert( eq(ev[15], -1.0) ); const CoinBigIndex* mi = siC1mbr->getVectorStarts(); assert( mi[0] == 0 ); assert( mi[1] == 5 ); assert( mi[2] == 7 ); assert( mi[3] == 9 ); assert( mi[4] == 12 ); assert( mi[5] == 16 ); const int* ei = siC1mbr->getIndices(); assert( ei[0] == 0 ); assert( ei[1] == 3 ); assert( ei[2] == 4 ); assert( ei[3] == 1 ); assert( ei[4] == 2 ); assert( ei[5] == 3 ); assert( ei[6] == 5 ); assert( ei[7] == 5 ); assert( ei[8] == 6 ); assert( ei[9] == 4 ); assert( ei[10] == 7 ); assert( ei[11] == 8 ); assert( ei[12] == 0 ); assert( ei[13] == 1 ); assert( ei[14] == 2 ); assert( ei[15] == 9 ); assert( siC1mbr->getMajorDim() == 5 ); assert( siC1mbr->getNumElements() == 16 ); assert( siC1rs == siC1.getRowSense() ); assert( siC1rhs == siC1.getRightHandSide() ); assert( siC1rr == siC1.getRowRange() ); } } } } CoinUtils-2.9.10/CoinUtils/test/CoinShallowPackedVectorTest.cpp0000644000076600007660000003167111654260357023164 0ustar coincoin// 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). #ifdef NDEBUG #undef NDEBUG #endif #include #include "CoinPragma.hpp" #include "CoinFinite.hpp" #include "CoinFloatEqual.hpp" #include "CoinShallowPackedVector.hpp" #include "CoinPackedVector.hpp" void CoinShallowPackedVectorUnitTest() { CoinRelFltEq eq; int i; // Test default constructor { CoinShallowPackedVector r; assert( r.indices_==NULL ); assert( r.elements_==NULL ); assert( r.nElements_==0 ); } // 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 }; { CoinShallowPackedVector r; assert( r.getNumElements()==0 ); // Test setting/getting elements with int* & double* vectors r.setVector( ne, inx, el ); assert( r.getNumElements()==ne ); for ( i=0; i #include "CoinError.hpp" void CoinErrorUnitTest() { // Test default constructor { CoinError r; assert( r.message_=="" ); assert( r.method_=="" ); assert( r.class_=="" ); } // Test alternate constructor and get method CoinError rhs; { CoinError a("msg","me.hpp","cl"); assert( a.message()=="msg" ); assert( a.methodName()=="me.hpp" ); assert( a.className()=="cl" ); // Test copy constructor { CoinError c(a); assert( c.message()=="msg" ); assert( c.methodName()=="me.hpp" ); assert( c.className()=="cl" ); } // Test assignment { CoinError a1("msg1","meth1","cl1"); assert( a1.message()=="msg1" ); assert( a1.methodName()=="meth1" ); assert( a1.className()=="cl1" ); rhs = a1; } } assert( rhs.message()=="msg1" ); assert( rhs.methodName()=="meth1" ); assert( rhs.className()=="cl1" ); } CoinUtils-2.9.10/CoinUtils/test/Makefile.am0000644000076600007660000000406712167771551017141 0ustar coincoin# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 1602 2013-07-12 12:15:37Z tkr $ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign ######################################################################## # unitTest for CoinUtils # ######################################################################## noinst_PROGRAMS = unitTest unitTest_SOURCES = \ CoinLpIOTest.cpp \ CoinDenseVectorTest.cpp \ CoinErrorTest.cpp \ CoinIndexedVectorTest.cpp \ CoinMessageHandlerTest.cpp \ CoinModelTest.cpp \ CoinMpsIOTest.cpp \ CoinPackedMatrixTest.cpp \ CoinPackedVectorTest.cpp \ CoinShallowPackedVectorTest.cpp \ unitTest.cpp # List libraries to link into binary unitTest_LDADD = ../src/libCoinUtils.la $(COINUTILSLIB_LIBS) # Dependencies of binaries are mostly the same as given in LDADD, but with -l and -L removed unitTest_DEPENDENCIES = ../src/libCoinUtils.la $(COINUTILSLIB_DEPENDENCIES) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Cygwin AM_CPPFLAGS = -I`$(CYGPATH_W) $(srcdir)/../src` # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src unittestflags = if COIN_HAS_SAMPLE unittestflags += -mpsDir=`$(CYGPATH_W) $(SAMPLE_DATA)` endif if COIN_HAS_NETLIB unittestflags += -netlibDir=`$(CYGPATH_W) $(NETLIB_DATA)` -testModel=adlittle.mps 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 = \ byColumn.mps byRow.mps CoinMpsIoTest.mps string.mps CoinUtils-2.9.10/CoinUtils/test/plan.mod0000644000076600007660000000170511316446223016522 0ustar coincoin/* plan.mod (taken from GLPK 4.41 distribution) */ var bin1, >= 0, <= 200; var bin2, >= 0, <= 2500; var bin3, >= 400, <= 800; var bin4, >= 100, <= 700; var bin5, >= 0, <= 1500; var alum, >= 0; var silicon, >= 0; minimize value: .03 * bin1 + .08 * bin2 + .17 * bin3 + .12 * bin4 + .15 * bin5 + .21 * alum + .38 * silicon; subject to yield: bin1 + bin2 + bin3 + bin4 + bin5 + alum + silicon = 2000; fe: .15 * bin1 + .04 * bin2 + .02 * bin3 + .04 * bin4 + .02 * bin5 + .01 * alum + .03 * silicon <= 60; cu: .03 * bin1 + .05 * bin2 + .08 * bin3 + .02 * bin4 + .06 * bin5 + .01 * alum <= 100; mn: .02 * bin1 + .04 * bin2 + .01 * bin3 + .02 * bin4 + .02 * bin5 <= 40; mg: .02 * bin1 + .03 * bin2 + .01 * bin5 <= 30; al: .70 * bin1 + .75 * bin2 + .80 * bin3 + .75 * bin4 + .80 * bin5 + .97 * alum >= 1500; si: 250 <= .02 * bin1 + .06 * bin2 + .08 * bin3 + .12 * bin4 + .02 * bin5 + .01 * alum + .97 * silicon <= 300; end; /* eof */ CoinUtils-2.9.10/CoinUtils/test/Makefile.in0000644000076600007660000004735312240310440017131 0ustar coincoin# 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) @COIN_HAS_SAMPLE_TRUE@am__append_1 = -mpsDir=`$(CYGPATH_W) $(SAMPLE_DATA)` @COIN_HAS_NETLIB_TRUE@am__append_2 = -netlibDir=`$(CYGPATH_W) $(NETLIB_DATA)` -testModel=adlittle.mps 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/config.h \ $(top_builddir)/src/config_coinutils.h CONFIG_CLEAN_FILES = PROGRAMS = $(noinst_PROGRAMS) am_unitTest_OBJECTS = CoinLpIOTest.$(OBJEXT) \ CoinDenseVectorTest.$(OBJEXT) CoinErrorTest.$(OBJEXT) \ CoinIndexedVectorTest.$(OBJEXT) \ CoinMessageHandlerTest.$(OBJEXT) CoinModelTest.$(OBJEXT) \ CoinMpsIOTest.$(OBJEXT) CoinPackedMatrixTest.$(OBJEXT) \ CoinPackedVectorTest.$(OBJEXT) \ CoinShallowPackedVectorTest.$(OBJEXT) unitTest.$(OBJEXT) unitTest_OBJECTS = $(am_unitTest_OBJECTS) am__DEPENDENCIES_1 = 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 = $(unitTest_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ADD_FFLAGS = @ADD_FFLAGS@ 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@ BLAS_CFLAGS = @BLAS_CFLAGS@ BLAS_CFLAGS_INSTALLED = @BLAS_CFLAGS_INSTALLED@ BLAS_DATA = @BLAS_DATA@ BLAS_DATA_INSTALLED = @BLAS_DATA_INSTALLED@ BLAS_DEPENDENCIES = @BLAS_DEPENDENCIES@ BLAS_LIBS = @BLAS_LIBS@ BLAS_LIBS_INSTALLED = @BLAS_LIBS_INSTALLED@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILSLIB_CFLAGS = @COINUTILSLIB_CFLAGS@ COINUTILSLIB_CFLAGS_INSTALLED = @COINUTILSLIB_CFLAGS_INSTALLED@ COINUTILSLIB_DEPENDENCIES = @COINUTILSLIB_DEPENDENCIES@ COINUTILSLIB_LIBS = @COINUTILSLIB_LIBS@ COINUTILSLIB_LIBS_INSTALLED = @COINUTILSLIB_LIBS_INSTALLED@ COINUTILSLIB_PCLIBS = @COINUTILSLIB_PCLIBS@ COINUTILSLIB_PCREQUIRES = @COINUTILSLIB_PCREQUIRES@ COINUTILS_SVN_REV = @COINUTILS_SVN_REV@ 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_BLAS_FALSE = @COIN_HAS_BLAS_FALSE@ COIN_HAS_BLAS_TRUE = @COIN_HAS_BLAS_TRUE@ COIN_HAS_GLPK_FALSE = @COIN_HAS_GLPK_FALSE@ COIN_HAS_GLPK_TRUE = @COIN_HAS_GLPK_TRUE@ COIN_HAS_LAPACK_FALSE = @COIN_HAS_LAPACK_FALSE@ COIN_HAS_LAPACK_TRUE = @COIN_HAS_LAPACK_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_ZLIB_FALSE = @COIN_HAS_ZLIB_FALSE@ COIN_HAS_ZLIB_TRUE = @COIN_HAS_ZLIB_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@ 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@ FLIBS = @FLIBS@ 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@ 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@ LAPACK_CFLAGS = @LAPACK_CFLAGS@ LAPACK_CFLAGS_INSTALLED = @LAPACK_CFLAGS_INSTALLED@ LAPACK_DATA = @LAPACK_DATA@ LAPACK_DATA_INSTALLED = @LAPACK_DATA_INSTALLED@ LAPACK_DEPENDENCIES = @LAPACK_DEPENDENCIES@ LAPACK_LIBS = @LAPACK_LIBS@ LAPACK_LIBS_INSTALLED = @LAPACK_LIBS_INSTALLED@ 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@ 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@ 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@ 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@ 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@ 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 = \ CoinLpIOTest.cpp \ CoinDenseVectorTest.cpp \ CoinErrorTest.cpp \ CoinIndexedVectorTest.cpp \ CoinMessageHandlerTest.cpp \ CoinModelTest.cpp \ CoinMpsIOTest.cpp \ CoinPackedMatrixTest.cpp \ CoinPackedVectorTest.cpp \ CoinShallowPackedVectorTest.cpp \ unitTest.cpp # List libraries to link into binary unitTest_LDADD = ../src/libCoinUtils.la $(COINUTILSLIB_LIBS) # Dependencies of binaries are mostly the same as given in LDADD, but with -l and -L removed unitTest_DEPENDENCIES = ../src/libCoinUtils.la $(COINUTILSLIB_DEPENDENCIES) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Cygwin AM_CPPFLAGS = -I`$(CYGPATH_W) $(srcdir)/../src` # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src unittestflags = $(am__append_1) $(am__append_2) ######################################################################## # Cleaning stuff # ######################################################################## # Here we list everything that is not generated by the compiler, e.g., # output files of a program DISTCLEANFILES = \ byColumn.mps byRow.mps CoinMpsIoTest.mps string.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 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)/CoinDenseVectorTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinErrorTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinIndexedVectorTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinLpIOTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinMessageHandlerTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinModelTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinMpsIOTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPackedMatrixTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPackedVectorTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinShallowPackedVectorTest.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: CoinUtils-2.9.10/CoinUtils/test/CoinDenseVectorTest.cpp0000644000076600007660000000457311510454173021472 0ustar coincoin// 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 #ifdef NDEBUG #undef NDEBUG #endif #include #include "CoinDenseVector.hpp" #include "CoinFloatEqual.hpp" //-------------------------------------------------------------------------- template void CoinDenseVectorUnitTest(T dummy) { // Test default constructor { CoinDenseVector r; assert( r.getElements() == 0 ); assert( r.getNumElements() == 0 ); } const int ne = 4; T el[ne] = { 10, 40, 1, 50 }; // Create vector and set its value CoinDenseVector r(ne,el); // access each element assert( r.getElements()[0]==10. ); assert( r.getElements()[1]==40. ); assert( r.getElements()[2]== 1. ); assert( r.getElements()[3]==50. ); // Test norms etc assert( r.sum() == 10.+40.+1.+50. ); assert( r.oneNorm() == 101.0); // std namespace removed to compile with Microsoft Visual C++ V6 //assert( r.twoNorm() == /*std::*/sqrt(100.0 + 1600. + 1. + 2500.)); CoinRelFltEq eq; assert( eq(r.twoNorm() , /*std::*/sqrt(100.0 + 1600. + 1. + 2500.))); assert( r.infNorm() == 50.); assert(r[0]+r[1]+r[2]+r[3]==101.); // Test for equality CoinDenseVector r1; r1=r; assert( r1.getElements()[0]==10. ); assert( r1.getElements()[1]==40. ); assert( r1.getElements()[2]== 1. ); assert( r1.getElements()[3]==50. ); // Add dense vectors. CoinDenseVector add = r + r1; assert( add[0] == 10.+10. ); assert( add[1] == 40.+40. ); assert( add[2] == 1.+ 1. ); assert( add[3] == 50.+50. ); // Similarly for copy constructor and subtraction and multiplication CoinDenseVector r2(r); CoinDenseVector diff = r - r2; assert(diff.sum() == 0.0); CoinDenseVector mult = r * r2; assert( mult[0] == 10.*10. ); assert( mult[1] == 40.*40. ); assert( mult[2] == 1.* 1. ); assert( mult[3] == 50.*50. ); // and division. CoinDenseVector div = r / r1; assert(div.sum() == 4.0); } template void CoinDenseVectorUnitTest(float); template void CoinDenseVectorUnitTest(double); //template void CoinDenseVectorUnitTest(int); CoinUtils-2.9.10/CoinUtils/test/CoinIndexedVectorTest.cpp0000644000076600007660000003154712017155726022022 0ustar coincoin// 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 #ifdef NDEBUG #undef NDEBUG // checkClean and checkClear not define #define NO_CHECK_CL #endif #include #include "CoinFinite.hpp" #include "CoinIndexedVector.hpp" #include "CoinShallowPackedVector.hpp" //-------------------------------------------------------------------------- void CoinIndexedVectorUnitTest() { int i; // Test default constructor { CoinIndexedVector r; assert( r.indices_==NULL ); assert( r.elements_==NULL ); assert( r.getNumElements()==0 ); assert( r.capacity_==0); } // 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 }; { CoinIndexedVector r; assert( r.getNumElements()==0 ); // Test setting/getting elements with int* & float* vectors r.setVector( ne, inx, el ); assert( r.getNumElements()==ne ); for ( i=0; i #include "CoinFloatEqual.hpp" #include "CoinPackedVector.hpp" #include "CoinPackedMatrix.hpp" //############################################################################# void CoinPackedMatrixUnitTest() { CoinRelFltEq eq; { // Test construction on empty matrices CoinPackedMatrix m; CoinPackedMatrix lhs = m; CoinPackedMatrix mCopy(m); assert( eq(m.getExtraGap(),0.0) ); assert( eq(lhs.getExtraGap(),0.0) ); assert( eq(mCopy.getExtraGap(),0.0) ); assert( eq(m.getExtraMajor(),0.0) ); assert( eq(lhs.getExtraMajor(),0.0) ); assert( eq(mCopy.getExtraMajor(),0.0) ); assert( m.isColOrdered() ); assert( lhs.isColOrdered() ); assert( mCopy.isColOrdered() ); assert( m.getNumElements() == 0 ); assert( lhs.getNumElements() == 0 ); assert( mCopy.getNumElements() == 0 ); assert( m.getNumCols() == 0 ); assert( lhs.getNumCols() == 0 ); assert( mCopy.getNumCols() == 0 ); assert( m.getNumRows() == 0 ); assert( lhs.getNumRows() == 0 ); assert( mCopy.getNumRows() == 0 ); assert( m.getElements() == 0 ); assert( lhs.getElements() == 0 ); assert( mCopy.getElements() == 0 ); assert( m.getIndices() == 0 ); assert( lhs.getIndices() == 0 ); assert( mCopy.getIndices() == 0 ); assert( m.getSizeVectorStarts()==0 ); assert( lhs.getSizeVectorStarts()==0 ); assert( mCopy.getSizeVectorStarts()==0 ); assert( m.getSizeVectorLengths()==0 ); assert( lhs.getSizeVectorLengths()==0 ); assert( mCopy.getSizeVectorLengths()==0 ); // out as empty matrix still has one start //assert( m.getVectorStarts()==NULL ); //assert( lhs.getVectorStarts()==NULL ); //assert( mCopy.getVectorStarts()==NULL ); assert( m.getVectorLengths()==NULL ); assert( lhs.getVectorLengths()==NULL ); assert( mCopy.getVectorLengths()==NULL ); assert( m.getMajorDim() == 0 ); assert( lhs.getMajorDim() == 0 ); assert( mCopy.getMajorDim() == 0 ); assert( m.getMinorDim() == 0 ); assert( lhs.getMinorDim() == 0 ); assert( mCopy.getMinorDim() == 0 ); } { CoinPackedMatrix * globalP; { /************************************************************************* * Setup data to represent this matrix by rows * * 3x1 + x2 - 2x4 - x5 - x8 * 2x2 + 1.1x3 * x3 + x6 * 2.8x4 -1.2x7 * 5.6x1 + x5 + 1.9x8 * *************************************************************************/ #if 0 // By columns const int minor=5; const int major=8; const int numels=14; const double elemBase[numels]={3., 5.6, 1., 2., 1.1, 1., -2., 2.8, -1., 1., 1., -1.2, -1., 1.9}; const int indBase[numels]={0,4,0,1,1,2,0,3,0,4,2,3,0,4}; const CoinBigIndex startsBase[major+1]={0,2,4,6,8,10,11,12,14}; const int lenBase[major]={2,2,2,2,2,1,1,2}; #else // By rows const int minor=8; const int major=5; const int numels=14; const double elemBase[numels]={3., 1., -2., -1., -1., 2., 1.1, 1., 1., 2.8, -1.2, 5.6, 1., 1.9 }; const int indBase[numels]={0,1,3,4,7,1,2,2,5,3,6,0,4,7}; const CoinBigIndex startsBase[major+1]={0,5,7,9,11,14}; const int lenBase[major]={5,2,2,2,3}; #endif double * elem = new double[numels]; int * ind = new int[numels]; CoinBigIndex * starts = new CoinBigIndex[major+1]; int * lens = new int[major]; std::copy(elemBase,elemBase+numels,elem); std::copy(indBase,indBase+numels,ind); std::copy(startsBase,startsBase+major+1,starts); std::copy(lenBase,lenBase+major,lens); /* Explicitly request gap on this matrix, so we can see it propagate in subsequent copy & assignment. */ CoinPackedMatrix pm(false,minor,major,numels,elem,ind,starts,lens, .25,.25); assert( elem!=NULL ); assert( ind!=NULL ); assert( starts!=NULL ); assert( lens!=NULL ); delete[] elem; delete[] ind; delete[] starts; delete[] lens; assert( eq(pm.getExtraGap(),.25) ); assert( eq(pm.getExtraMajor(),.25) ); assert( !pm.isColOrdered() ); assert( pm.getNumElements()==numels ); assert( pm.getNumCols()==minor ); assert( pm.getNumRows()==major); assert( pm.getSizeVectorStarts()==major+1 ); assert( pm.getSizeVectorLengths()==major ); const double * ev = pm.getElements(); assert( eq(ev[0], 3.0) ); assert( eq(ev[1], 1.0) ); assert( eq(ev[2], -2.0) ); assert( eq(ev[3], -1.0) ); assert( eq(ev[4], -1.0) ); assert( eq(ev[7], 2.0) ); assert( eq(ev[8], 1.1) ); assert( eq(ev[10], 1.0) ); assert( eq(ev[11], 1.0) ); assert( eq(ev[13], 2.8) ); assert( eq(ev[14], -1.2) ); assert( eq(ev[16], 5.6) ); assert( eq(ev[17], 1.0) ); assert( eq(ev[18], 1.9) ); const CoinBigIndex * mi = pm.getVectorStarts(); assert( mi[0]==0 ); assert( mi[1]==7 ); assert( mi[2]==10 ); assert( mi[3]==13 ); assert( mi[4]==16 ); assert( mi[5]==20 ); const int * vl = pm.getVectorLengths(); assert( vl[0]==5 ); assert( vl[1]==2 ); assert( vl[2]==2 ); assert( vl[3]==2 ); assert( vl[4]==3 ); const int * ei = pm.getIndices(); assert( ei[0] == 0 ); assert( ei[1] == 1 ); assert( ei[2] == 3 ); assert( ei[3] == 4 ); assert( ei[4] == 7 ); assert( ei[7] == 1 ); assert( ei[8] == 2 ); assert( ei[10] == 2 ); assert( ei[11] == 5 ); assert( ei[13] == 3 ); assert( ei[14] == 6 ); assert( ei[16] == 0 ); assert( ei[17] == 4 ); assert( ei[18] == 7 ); assert( pm.getMajorDim() == 5 ); assert( pm.getMinorDim() == 8 ); assert( pm.getNumElements() == 14 ); assert( pm.getSizeVectorStarts()==6 ); { // Test copy constructor CoinPackedMatrix pmC(pm); assert( eq(pmC.getExtraGap(),.25) ); assert( eq(pmC.getExtraMajor(),.25) ); assert( !pmC.isColOrdered() ); assert( pmC.getNumElements()==numels ); assert( pmC.getNumCols()==minor ); assert( pmC.getNumRows()==major); assert( pmC.getSizeVectorStarts()==major+1 ); assert( pmC.getSizeVectorLengths()==major ); // Test that osm has the correct values assert( pm.getElements() != pmC.getElements() ); const double * ev = pmC.getElements(); assert( eq(ev[0], 3.0) ); assert( eq(ev[1], 1.0) ); assert( eq(ev[2], -2.0) ); assert( eq(ev[3], -1.0) ); assert( eq(ev[4], -1.0) ); assert( eq(ev[7], 2.0) ); assert( eq(ev[8], 1.1) ); assert( eq(ev[10], 1.0) ); assert( eq(ev[11], 1.0) ); assert( eq(ev[13], 2.8) ); assert( eq(ev[14], -1.2) ); assert( eq(ev[16], 5.6) ); assert( eq(ev[17], 1.0) ); assert( eq(ev[18], 1.9) ); assert( pm.getVectorStarts() != pmC.getVectorStarts() ); const CoinBigIndex * mi = pmC.getVectorStarts(); assert( mi[0]==0 ); assert( mi[1]==7 ); assert( mi[2]==10 ); assert( mi[3]==13 ); assert( mi[4]==16 ); assert( mi[5]==20 ); assert( pm.getVectorLengths() != pmC.getVectorLengths() ); const int * vl = pmC.getVectorLengths(); assert( vl[0]==5 ); assert( vl[1]==2 ); assert( vl[2]==2 ); assert( vl[3]==2 ); assert( vl[4]==3 ); assert( pm.getIndices() != pmC.getIndices() ); const int * ei = pmC.getIndices(); assert( ei[0] == 0 ); assert( ei[1] == 1 ); assert( ei[2] == 3 ); assert( ei[3] == 4 ); assert( ei[4] == 7 ); assert( ei[7] == 1 ); assert( ei[8] == 2 ); assert( ei[10] == 2 ); assert( ei[11] == 5 ); assert( ei[13] == 3 ); assert( ei[14] == 6 ); assert( ei[16] == 0 ); assert( ei[17] == 4 ); assert( ei[18] == 7 ); assert( pmC.isEquivalent(pm) ); // Test assignment { CoinPackedMatrix pmA; // Gap should be 0.0 assert( eq(pmA.getExtraGap(),0.0) ); assert( eq(pmA.getExtraMajor(),0.0) ); pmA = pm; assert( eq(pmA.getExtraGap(),0.25) ); assert( eq(pmA.getExtraMajor(),0.25) ); assert( !pmA.isColOrdered() ); assert( pmA.getNumElements()==numels ); assert( pmA.getNumCols()==minor ); assert( pmA.getNumRows()==major); assert( pmA.getSizeVectorStarts()==major+1 ); assert( pmA.getSizeVectorLengths()==major ); // Test that osm1 has the correct values assert( pm.getElements() != pmA.getElements() ); const double * ev = pmA.getElements(); assert( eq(ev[0], 3.0) ); assert( eq(ev[1], 1.0) ); assert( eq(ev[2], -2.0) ); assert( eq(ev[3], -1.0) ); assert( eq(ev[4], -1.0) ); assert( eq(ev[7], 2.0) ); assert( eq(ev[8], 1.1) ); assert( eq(ev[10], 1.0) ); assert( eq(ev[11], 1.0) ); assert( eq(ev[13], 2.8) ); assert( eq(ev[14], -1.2) ); assert( eq(ev[16], 5.6) ); assert( eq(ev[17], 1.0) ); assert( eq(ev[18], 1.9) ); // Test modification of a single element pmA.modifyCoefficient(2,5,-7.0); assert( eq(ev[11], -7.0) ); // and back pmA.modifyCoefficient(2,5,1.0); assert( eq(ev[11], 1.0) ); assert( pm.getVectorStarts() != pmA.getVectorStarts() ); const CoinBigIndex * mi = pmA.getVectorStarts(); assert( mi[0]==0 ); assert( mi[1]==7 ); assert( mi[2]==10 ); assert( mi[3]==13 ); assert( mi[4]==16 ); assert( mi[5]==20 ); assert( pm.getVectorLengths() != pmA.getVectorLengths() ); const int * vl = pmC.getVectorLengths(); assert( vl[0]==5 ); assert( vl[1]==2 ); assert( vl[2]==2 ); assert( vl[3]==2 ); assert( vl[4]==3 ); assert( pm.getIndices() != pmA.getIndices() ); const int * ei = pmA.getIndices(); assert( ei[0] == 0 ); assert( ei[1] == 1 ); assert( ei[2] == 3 ); assert( ei[3] == 4 ); assert( ei[4] == 7 ); assert( ei[7] == 1 ); assert( ei[8] == 2 ); assert( ei[10] == 2 ); assert( ei[11] == 5 ); assert( ei[13] == 3 ); assert( ei[14] == 6 ); assert( ei[16] == 0 ); assert( ei[17] == 4 ); assert( ei[18] == 7 ); assert( pmA.isEquivalent(pm) ); assert( pmA.isEquivalent(pmC) ); // Test new to global globalP = new CoinPackedMatrix(pmA); assert( eq(globalP->getElements()[0], 3.0) ); assert( globalP->isEquivalent(pmA) ); } assert( eq(globalP->getElements()[0], 3.0) ); } assert( eq(globalP->getElements()[0], 3.0) ); } // Test that cloned matrix contains correct values const double * ev = globalP->getElements(); assert( eq(ev[0], 3.0) ); assert( eq(ev[1], 1.0) ); assert( eq(ev[2], -2.0) ); assert( eq(ev[3], -1.0) ); assert( eq(ev[4], -1.0) ); assert( eq(ev[7], 2.0) ); assert( eq(ev[8], 1.1) ); assert( eq(ev[10], 1.0) ); assert( eq(ev[11], 1.0) ); assert( eq(ev[13], 2.8) ); assert( eq(ev[14], -1.2) ); assert( eq(ev[16], 5.6) ); assert( eq(ev[17], 1.0) ); assert( eq(ev[18], 1.9) ); // Check printMatrixElement std::cout << "Testing printMatrixElement:" << std::endl ; std::cout << "Expecting 1.1, 0.0, -1.2." << std::endl ; std::cout << "a(1,2) = " ; globalP->printMatrixElement(1,2) ; std::cout << "; a(3,5) = " ; globalP->printMatrixElement(3,5) ; std::cout << "; a(3,6) = " ; globalP->printMatrixElement(3,6) ; std::cout << std::endl ; std::cout << "Expecting bounds error messages." << std::endl ; std::cout << "a(-1,-1) = " ; globalP->printMatrixElement(-1,-1) ; std::cout << "a(0,-1) = " ; globalP->printMatrixElement(0,-1) ; std::cout << "a(4,8) = " ; globalP->printMatrixElement(4,8) ; std::cout << "a(5,8) = " ; globalP->printMatrixElement(5,8) ; # if 0 /* If you want an exhaustive test, enable these loops. */ for (CoinBigIndex rowndx = -1 ; rowndx <= globalP->getMajorDim() ; rowndx++) { for (CoinBigIndex colndx = -1 ; colndx < globalP->getMinorDim() ; colndx++) { std::cout << "a(" << rowndx << "," << colndx << ") = " ; globalP->printMatrixElement(rowndx,colndx) ; std::cout << std::endl ; } } # endif const CoinBigIndex * mi = globalP->getVectorStarts(); assert( mi[0]==0 ); assert( mi[1]==7 ); assert( mi[2]==10 ); assert( mi[3]==13 ); assert( mi[4]==16 ); assert( mi[5]==20 ); const int * ei = globalP->getIndices(); assert( ei[0] == 0 ); assert( ei[1] == 1 ); assert( ei[2] == 3 ); assert( ei[3] == 4 ); assert( ei[4] == 7 ); assert( ei[7] == 1 ); assert( ei[8] == 2 ); assert( ei[10] == 2 ); assert( ei[11] == 5 ); assert( ei[13] == 3 ); assert( ei[14] == 6 ); assert( ei[16] == 0 ); assert( ei[17] == 4 ); assert( ei[18] == 7 ); assert( globalP->getMajorDim() == 5 ); assert( globalP->getMinorDim() == 8 ); assert( globalP->getNumElements() == 14 ); assert( globalP->getSizeVectorStarts()==6 ); // Test method which returns length of vectors assert( globalP->getVectorSize(0)==5 ); assert( globalP->getVectorSize(1)==2 ); assert( globalP->getVectorSize(2)==2 ); assert( globalP->getVectorSize(3)==2 ); assert( globalP->getVectorSize(4)==3 ); // Test getVectorSize exceptions { bool errorThrown = false; try { globalP->getVectorSize(-1); } catch (CoinError& e) { errorThrown = true; } assert( errorThrown ); } { bool errorThrown = false; try { globalP->getVectorSize(5); } catch (CoinError& e) { errorThrown = true; } assert( errorThrown ); } // Test vector method { // 3x1 + x2 - 2x4 - x5 - x8 CoinShallowPackedVector pv = globalP->getVector(0); assert( pv.getNumElements() == 5 ); assert( eq(pv[0], 3.0) ); assert( eq(pv[1], 1.0) ); assert( eq(pv[3],-2.0) ); assert( eq(pv[4],-1.0) ); assert( eq(pv[7],-1.0) ); // 2x2 + 1.1x3 pv = globalP->getVector(1); assert( pv.getNumElements() == 2 ); assert( eq(pv[1], 2.0) ); assert( eq(pv[2], 1.1) ); // x3 + x6 pv = globalP->getVector(2); assert( pv.getNumElements() == 2 ); assert( eq(pv[2], 1.0) ); assert( eq(pv[5], 1.0) ); // 2.8x4 -1.2x7 pv = globalP->getVector(3); assert( pv.getNumElements() == 2 ); assert( eq(pv[3], 2.8) ); assert( eq(pv[6],-1.2) ); // 5.6x1 + x5 + 1.9x8 pv = globalP->getVector(4); assert( pv.getNumElements() == 3 ); assert( eq(pv[0], 5.6) ); assert( eq(pv[4], 1.0) ); assert( eq(pv[7], 1.9) ); } // Test vector method exceptions { bool errorThrown = false; try { CoinShallowPackedVector v = globalP->getVector(-1); } catch (CoinError& e) { errorThrown = true; } assert( errorThrown ); } { bool errorThrown = false; try { CoinShallowPackedVector vs = globalP->getVector(5); } catch (CoinError& e) { errorThrown = true; } assert( errorThrown ); } { CoinPackedMatrix pm(*globalP); assert( pm.getExtraGap() != 0.0 ); assert( pm.getExtraMajor() != 0.0 ); pm.setExtraGap(0.0); pm.setExtraMajor(0.0); assert( pm.getExtraGap() == 0.0 ); assert( pm.getExtraMajor() == 0.0 ); pm.reverseOrdering(); assert( pm.getExtraGap() == 0.0 ); assert( pm.getExtraMajor() == 0.0 ); } // Test ordered triples constructor { /************************************************************************* * Setup data to represent this matrix by rows * * 3x1 + x2 - 2x4 - x5 - x8 * 2x2y+ 1.1x3 * x3 + x6y * 2.8x4 -1.2x7 * 5.6x1 + x5 + 1.9x8 * *************************************************************************/ const int ne=17; int ri[ne]; int ci[ne]; double el[ne]; ri[ 0]=1; ci[ 0]=2; el[ 0]=1.1; ri[ 1]=0; ci[ 1]=3; el[ 1]=-2.0; ri[ 2]=4; ci[ 2]=7; el[ 2]=1.9; ri[ 3]=3; ci[ 3]=6; el[ 3]=-1.2; ri[ 4]=2; ci[ 4]=5; el[ 4]=1.0; ri[ 5]=4; ci[ 5]=0; el[ 5]=5.6; ri[ 6]=0; ci[ 6]=7; el[ 6]=-1.0; ri[ 7]=0; ci[ 7]=0; el[ 7]=3.0; ri[ 8]=0; ci[ 8]=4; el[ 8]=-1.0; ri[ 9]=4; ci[ 9]=4; el[ 9]=1.0; ri[10]=3; ci[10]=3; el[10]=2.0; // (3,3) is a duplicate element ri[11]=1; ci[11]=1; el[11]=2.0; ri[12]=0; ci[12]=1; el[12]=1.0; ri[13]=2; ci[13]=2; el[13]=1.0; ri[14]=3; ci[14]=3; el[14]=0.8; // (3,3) is a duplicate element ri[15]=2; ci[15]=0; el[15]=-3.1415; ri[16]=2; ci[16]=0; el[16]= 3.1415; assert(!globalP->isColOrdered()); // create col ordered matrix from triples CoinPackedMatrix pmtco(true,ri,ci,el,ne); // Test that duplicates got the correct value assert( eq( pmtco.getVector(3)[3] , 2.8 ) ); assert( eq( pmtco.getVector(0)[2] , 0.0 ) ); // Test to make sure there are no gaps in the created matrix assert( pmtco.getVectorStarts()[0]==0 ); assert( pmtco.getVectorStarts()[1]==2 ); assert( pmtco.getVectorStarts()[2]==4 ); assert( pmtco.getVectorStarts()[3]==6 ); assert( pmtco.getVectorStarts()[4]==8 ); assert( pmtco.getVectorStarts()[5]==10 ); assert( pmtco.getVectorStarts()[6]==11 ); assert( pmtco.getVectorStarts()[7]==12 ); assert( pmtco.getVectorStarts()[8]==14 ); // Test the whole matrix CoinPackedMatrix globalco; globalco.reverseOrderedCopyOf(*globalP); assert(pmtco.isEquivalent(globalco)); // create row ordered matrix from triples CoinPackedMatrix pmtro(false,ri,ci,el,ne); assert(!pmtro.isColOrdered()); assert( eq( pmtro.getVector(3)[3] , 2.8 ) ); assert( eq( pmtro.getVector(2)[0] , 0.0 ) ); assert( pmtro.getVectorStarts()[0]==0 ); assert( pmtro.getVectorStarts()[1]==5 ); assert( pmtro.getVectorStarts()[2]==7 ); assert( pmtro.getVectorStarts()[3]==9 ); assert( pmtro.getVectorStarts()[4]==11 ); assert( pmtro.getVectorStarts()[5]==14 ); assert(globalP->isEquivalent(pmtro)); } delete globalP; } #if 0 { // test append CoinPackedMatrix pm; const int ne = 4; int inx[ne] = { 1, -4, 0, 2 }; double el[ne] = { 10., 40., 1., 50. }; CoinPackedVector r(ne,inx,el); pm.appendRow(r); // This line fails } #endif } CoinUtils-2.9.10/CoinUtils/test/CoinPackedVectorTest.cpp0000644000076600007660000006775111654260357021642 0ustar coincoin// 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). #ifdef NDEBUG #undef NDEBUG #endif #include #include "CoinPragma.hpp" #include "CoinFloatEqual.hpp" #include "CoinFinite.hpp" #include "CoinPackedVector.hpp" #include "CoinShallowPackedVector.hpp" //-------------------------------------------------------------------------- void CoinPackedVectorUnitTest() { int i; // Test default constructor { CoinPackedVector r; assert( r.indices_==NULL ); assert( r.origIndices_==NULL ); assert( r.elements_==NULL ); assert( r.getNumElements()==0 ); assert( r.capacity_==0); } // 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 }; { CoinPackedVector r; assert( r.getNumElements()==0 ); // Test setting/getting elements with int* & float* vectors r.setVector( ne, inx, el ); assert( r.getNumElements()==ne ); for ( i=0; ir.getElements()[i] ) incr=false; assert( !incr ); r.sortIncrElement(); incr = true; for ( i=1; ir.getElements()[i] ) incr=false; assert( incr ); } { CoinPackedVector r; const int ne = 3; int inx[ne] = { 1, 2, 3 }; double el[ne] = { 2.2, 4.4, 8.8}; r.setVector(ne,inx,el); int c = r.capacity(); int max = r.getMaxIndex(); int min = r.getMinIndex(); // Test swap function r.swap(0,2); assert( r.getIndices()[0]==3 ); assert( r.getIndices()[1]==2 ); assert( r.getIndices()[2]==1 ); assert( r.getElements()[0]==8.8 ); assert( r.getElements()[1]==4.4 ); assert( r.getElements()[2]==2.2 ); assert( r.getMaxIndex() == max ); assert( r.getMinIndex() == min ); assert( r.capacity() == c ); // Test the append function CoinPackedVector s; const int nes = 4; int inxs[nes] = { 11, 12, 13, 14 }; double els[nes] = { .122, 14.4, 18.8, 19.9}; s.setVector(nes,inxs,els); r.append(s); assert( r.getNumElements()==7 ); assert( r.getIndices()[0]==3 ); assert( r.getIndices()[1]==2 ); assert( r.getIndices()[2]==1 ); assert( r.getIndices()[3]==11 ); assert( r.getIndices()[4]==12 ); assert( r.getIndices()[5]==13 ); assert( r.getIndices()[6]==14 ); assert( r.getElements()[0]==8.8 ); assert( r.getElements()[1]==4.4 ); assert( r.getElements()[2]==2.2 ); assert( r.getElements()[3]==.122 ); assert( r.getElements()[4]==14.4 ); assert( r.getElements()[5]==18.8 ); assert( r.getElements()[6]==19.9 ); assert( r.getMaxIndex() == 14 ); assert( r.getMinIndex() == 1 ); // Test the resize function c = r.capacity(); r.truncate(4); assert( r.getNumElements()==4 ); assert( r.getIndices()[0]==3 ); assert( r.getIndices()[1]==2 ); assert( r.getIndices()[2]==1 ); assert( r.getIndices()[3]==11 ); assert( r.getElements()[0]==8.8 ); assert( r.getElements()[1]==4.4 ); assert( r.getElements()[2]==2.2 ); assert( r.getElements()[3]==.122 ); assert( r.getMaxIndex() == 11 ); assert( r.getMinIndex() == 1 ); assert( r.capacity() == c ); } // Test copy constructor and assignment operator { CoinPackedVector rhs; { CoinPackedVector r; { CoinPackedVector rC1(r); assert( 0==r.getNumElements() ); assert( 0==rC1.getNumElements() ); r.setVector( ne, inx, el ); assert( ne==r.getNumElements() ); assert( 0==rC1.getNumElements() ); } CoinPackedVector rC2(r); assert( ne==r.getNumElements() ); assert( ne==rC2.getNumElements() ); for ( i=0; i, +v1, v1+v2 { const int ne1 = 5; int inx1[ne1] = { 1, 3, 4, 7, 5 }; double el1[ne1] = { 1., 5., 6., 2., 9. }; const int ne2 = 4; int inx2[ne2] = { 7, 4, 2, 1 }; double el2[ne2] = { 7., 4., 2., 1. }; CoinPackedVector v1; CoinPackedVector v2; CoinPackedVector r ; CoinPackedVector rV ; v1.setVector(ne1,inx1,el1); rV.setVector(ne1,inx1,el1) ; r = v1 + v2 ; assert(r.isEquivalent(rV)) ; r = v2 + v1 ; assert(r.isEquivalent(rV)) ; v2.setVector(ne2,inx2,el2); r = v1 + v2 ; const int ner = 6; int inxr[ner] = { 1, 2, 3, 4, 5, 7 }; double elr[ner] = { 1.+1., 0.+2., 5.+0., 6.+4., 9.+0., 2.+7. }; rV.setVector(ner,inxr,elr); assert( r.isEquivalent(rV) ); } // Test subtracting vectors. Note that zeros are not automatically // compressed out of the result. { const int ne1 = 5; int inx1[ne1] = { 1, 3, 4, 7, 5 }; double el1[ne1] = { 1., 5., 6., 2., 9. }; const int ne2 = 4; int inx2[ne2] = { 7, 4, 2, 1 }; double el2[ne2] = { 7., 4., 2., 1. }; CoinPackedVector v1; v1.setVector(ne1,inx1,el1); CoinPackedVector v2; v2.setVector(ne2,inx2,el2); CoinPackedVector r = v1 - v2; const int ner = 6; int inxr[ner] = { 1, 2, 3, 4, 5, 7 }; double elr[ner] = { 1.-1., 0.-2., 5.-0., 6.-4., 9.-0., 2.-7. }; CoinPackedVector rV; rV.setVector(ner,inxr,elr); assert( r.isEquivalent(rV) ); } // Test multiplying vectors. Note that zeros are not automatically // compressed out of the result. { const int ne1 = 5; int inx1[ne1] = { 1, 3, 4, 7, 5 }; double el1[ne1] = { 1., 5., 6., 2., 9. }; const int ne2 = 4; int inx2[ne2] = { 7, 4, 2, 1 }; double el2[ne2] = { 7., 4., 2., 1. }; CoinPackedVector v1; v1.setVector(ne1,inx1,el1); CoinPackedVector v2; v2.setVector(ne2,inx2,el2); CoinPackedVector r = v1 * v2; const int ner = 6; int inxr[ner] = { 1, 2, 3, 4, 5, 7 }; double elr[ner] = { 1.*1., 0.*2., 5.*0., 6.*4., 9.*0., 2.*7. }; CoinPackedVector rV; rV.setVector(ner,inxr,elr); assert( r.isEquivalent(rV) ); } // Test dividing vectors. Note that zeros are not automatically compressed // out of the result. Previously, used HUGE_VAL to get IEEE infinity, but // this triggers a bug in some GCC compilers. -- lh, 061020 -- { const int ne1 = 3; int inx1[ne1] = { 1, 4, 7 }; double el1[ne1] = { 1., 6., 2. }; const int ne2 = 4; int inx2[ne2] = { 7, 4, 2, 1 }; double el2[ne2] = { 7., 4., 2., 1. }; # ifdef COIN_C_FINITE double one = 1.0 ; double zero = 0.0 ; double infty = one/zero ; # else double infty = COIN_DBL_MAX ; # endif CoinPackedVector v1; CoinPackedVector v2; CoinPackedVector r ; CoinPackedVector rV; v1.setVector(ne1,inx1,el1) ; rV.setConstant(ne1,inx1,0) ; r = v2 / v1; assert(r.isEquivalent(rV)) ; rV.setConstant(ne1,inx1,infty) ; r = v1 / v2; assert(r.isEquivalent(rV)) ; r.isEquivalent(rV) ; v2.setVector(ne2,inx2,el2); r = v1 / v2; const int ner = 4; int inxr[ner] = { 1, 2, 4, 7 }; double elr[ner] = { 1./1., 0./2., 6./4., 2./7. }; rV.setVector(ner,inxr,elr); assert( r.isEquivalent(rV) ); } // Test sum { CoinPackedVector s; assert( s.sum() == 0 ); s.insert(25,45.); assert(s.sum()==45.); const int ne1 = 5; int inx1[ne1] = { 10, 3, 4, 7, 5 }; double el1[ne1] = { 1., 5., 6., 2., 9. }; s.setVector(ne1,inx1,el1); assert(s.sum()==1.+5.+6.+2.+9.); } // Just another interesting test { // Create numerator vector const int ne1 = 2; int inx1[ne1] = { 1, 4 }; double el1[ne1] = { 1., 6. }; CoinPackedVector v1(ne1,inx1,el1); // create denominator vector const int ne2 = 3; int inx2[ne2] = { 1, 2, 4 }; double el2[ne2] = { 1., 7., 4.}; CoinPackedVector v2(ne2,inx2,el2); // Compute ratio CoinPackedVector ratio = v1 / v2; // Sort ratios ratio.sortIncrElement(); // Test that the sort really worked assert( ratio.getElements()[0] == 0.0/7.0 ); assert( ratio.getElements()[1] == 1.0/1.0 ); assert( ratio.getElements()[2] == 6.0/4.0 ); // Get numerator of of sorted ratio vector assert( v1[ ratio.getIndices()[0] ] == 0.0 ); assert( v1[ ratio.getIndices()[1] ] == 1.0 ); assert( v1[ ratio.getIndices()[2] ] == 6.0 ); // Get denominator of of sorted ratio vector assert( v2[ ratio.getIndices()[0] ] == 7.0 ); assert( v2[ ratio.getIndices()[1] ] == 1.0 ); assert( v2[ ratio.getIndices()[2] ] == 4.0 ); } // Test copy constructor from ShallowPackedVector { const int ne = 4; int inx[ne] = { 1, 4, 0, 2 }; double el[ne] = { 10., 40., 1., 50. }; CoinPackedVector std(ne,inx,el); CoinShallowPackedVector * spvP = new CoinShallowPackedVector(ne,inx,el); CoinPackedVector pv(*spvP); assert( pv == std ); assert( pv.isEquivalent(std) ); delete spvP; assert( pv == std ); assert( pv.isEquivalent(std) ); pv.sortIncrElement(); assert( pv != std ); assert( pv.isEquivalent(std) ); } // Test assignment from ShallowPackedVector { const int ne = 4; int inx[ne] = { 1, 4, 0, 2 }; double el[ne] = { 10., 40., 1., 50. }; CoinPackedVector std(ne,inx,el); CoinShallowPackedVector * spvP = new CoinShallowPackedVector(ne,inx,el); CoinPackedVector pv; pv = *spvP; assert( pv == std ); assert( pv.isEquivalent(std) ); delete spvP; assert( pv == std ); assert( pv.isEquivalent(std) ); pv.sortIncrElement(); assert( pv != std ); assert( pv.isEquivalent(std) ); } { // Test that sample usage works const int ne = 4; int inx[ne] = { 1, 4, 0, 2 }; double el[ne] = { 10., 40., 1., 50. }; CoinPackedVector r(ne,inx,el); assert( r.getIndices()[0]== 1 ); assert( r.getElements()[0]==10. ); assert( r.getIndices()[1]== 4 ); assert( r.getElements()[1]==40. ); assert( r.getIndices()[2]== 0 ); assert( r.getElements()[2]== 1. ); assert( r.getIndices()[3]== 2 ); assert( r.getElements()[3]==50. ); assert( r.getOriginalPosition()[0]==0 ); assert( r.getOriginalPosition()[1]==1 ); assert( r.getOriginalPosition()[2]==2 ); assert( r.getOriginalPosition()[3]==3 ); assert( r[ 0]==1. ); assert( r[ 1]==10.); assert( r[ 2]==50.); assert( r[ 3]==0. ); assert( r[ 4]==40.); r.sortIncrElement(); assert( r.getIndices()[0]== 0 ); assert( r.getElements()[0]== 1. ); assert( r.getIndices()[1]== 1 ); assert( r.getElements()[1]==10. ); assert( r.getIndices()[2]== 4 ); assert( r.getElements()[2]==40. ); assert( r.getIndices()[3]== 2 ); assert( r.getElements()[3]==50. ); assert( r.getOriginalPosition()[0]==2 ); assert( r.getOriginalPosition()[1]==0 ); assert( r.getOriginalPosition()[2]==1 ); assert( r.getOriginalPosition()[3]==3 ); assert( r[ 0]==1. ); assert( r[ 1]==10.); assert( r[ 2]==50.); assert( r[ 3]==0. ); assert( r[ 4]==40.); r.sortOriginalOrder(); assert( r.getIndices()[0]== 1 ); assert( r.getElements()[0]==10. ); assert( r.getIndices()[1]== 4 ); assert( r.getElements()[1]==40. ); assert( r.getIndices()[2]== 0 ); assert( r.getElements()[2]== 1. ); assert( r.getIndices()[3]== 2 ); assert( r.getElements()[3]==50. ); CoinPackedVector r1; r1=r; assert( r==r1 ); assert( r.isEquivalent(r1) ); r.sortIncrElement(); assert( r!=r1 ); assert( r.isEquivalent(r1) ); CoinPackedVector add = r + r1; assert( add[0] == 1.+ 1. ); assert( add[1] == 10.+10. ); assert( add[2] == 50.+50. ); assert( add[3] == 0.+ 0. ); assert( add[4] == 40.+40. ); assert( r.sum() == 10.+40.+1.+50. ); } { // Test findIndex const int ne = 4; int inx[ne] = { 1, -4, 0, 2 }; double el[ne] = { 10., 40., 1., 50. }; CoinPackedVector r(ne,inx,el); assert( r.findIndex(2) == 3 ); assert( r.findIndex(0) == 2 ); assert( r.findIndex(-4) == 1 ); assert( r.findIndex(1) == 0 ); assert( r.findIndex(3) == -1 ); } #if 0 { // Test construction with testing for duplicates as false const int ne = 4; int inx[ne] = { 1, -4, 0, 2 }; double el[ne] = { 10., 40., 1., 50. }; CoinPackedVector rT(ne,inx,el); CoinPackedVector r(false); assert( !r.isExistingIndex(1) ); r.insert(1,10.); assert( !r.isExistingIndex(-4) ); r.insert(-4,20.); assert( !r.isExistingIndex(0) ); r.insert(0,1.); assert( r.isExistingIndex(-4) ); // This line is failing!! // If r is constructed with true, // then it does not fail int neg4Index = r.findIndex(-4); assert( neg4Index == 1 ); r.setElement(neg4Index, r.getElements()[neg4Index] + 20); assert( !r.isExistingIndex(2) ); r.insert(2,50.); assert( r == rT ); } #endif /* Repeat various tests, using the constructor that takes ownership of the vectors. */ { const int neo = ne; int *inxo = new int[neo]; double *elo = new double[neo]; for (i = 0 ; i < neo ; i++) inxo[i] = inx[i] ; for (i = 0 ; i < neo ; i++) elo[i] = el[i] ; CoinPackedVector r(neo,neo,inxo,elo); assert( inxo == NULL ) ; assert( elo == NULL ) ; // Test getting elements with int* & float* vectors assert( r.getNumElements()==ne ); for ( i=0; ir.getElements()[i] ) incr=false; assert( !incr ); r.sortIncrElement(); incr = true; for ( i=1; ir.getElements()[i] ) incr=false; assert( incr ); } } CoinUtils-2.9.10/CoinUtils/test/CoinMpsIOTest.cpp0000644000076600007660000004605412237744727020256 0ustar coincoin// 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 #ifdef NDEBUG #undef NDEBUG #endif #include #include "CoinMpsIO.hpp" #include "CoinFloatEqual.hpp" //############################################################################# //-------------------------------------------------------------------------- // test import methods void CoinMpsIOUnitTest(const std::string & mpsDir) { // Test default constructor { CoinMpsIO m; assert( m.rowsense_==NULL ); assert( m.rhs_==NULL ); assert( m.rowrange_==NULL ); assert( m.matrixByRow_==NULL ); assert( m.matrixByColumn_==NULL ); assert( m.integerType_==NULL); assert( !strcmp( m.getFileName() , "????")); assert( !strcmp( m.getProblemName() , "")); assert( !strcmp( m.objectiveName_ , "")); assert( !strcmp( m.rhsName_ , "")); assert( !strcmp( m.rangeName_ , "")); assert( !strcmp( m.boundName_ , "")); } { CoinRelFltEq eq; CoinMpsIO m; std::string fn = mpsDir+"exmip1"; int numErr = m.readMps(fn.c_str(),"mps"); assert( numErr== 0 ); assert( !strcmp( m.problemName_ , "EXAMPLE")); assert( !strcmp( m.objectiveName_ , "OBJ")); assert( !strcmp( m.rhsName_ , "RHS1")); assert( !strcmp( m.rangeName_ , "RNG1")); assert( !strcmp( m.boundName_ , "BND1")); // Test language and re-use m.newLanguage(CoinMessages::it); m.messageHandler()->setPrefix(false); // This call should return an error indicating that the // end-of-file was reached. // This is because the file remains open to possibly read // a quad. section. numErr = m.readMps(fn.c_str(),"mps"); assert( numErr < 0 ); // Test copy constructor and assignment operator { CoinMpsIO lhs; { CoinMpsIO im(m); CoinMpsIO imC1(im); assert( imC1.getNumCols() == im.getNumCols() ); assert( imC1.getNumRows() == im.getNumRows() ); CoinMpsIO imC2(im); assert( imC2.getNumCols() == im.getNumCols() ); assert( imC2.getNumRows() == im.getNumRows() ); lhs=imC2; } // Test that lhs has correct values even though rhs has gone out of scope assert( lhs.getNumCols() == m.getNumCols() ); assert( lhs.getNumRows() == m.getNumRows() ); } { CoinMpsIO dumSi(m); int nc = dumSi.getNumCols(); int nr = dumSi.getNumRows(); const double * cl = dumSi.getColLower(); const double * cu = dumSi.getColUpper(); const double * rl = dumSi.getRowLower(); const double * ru = dumSi.getRowUpper(); assert( nc == 8 ); assert( nr == 5 ); assert( eq(cl[0],2.5) ); assert( eq(cl[1],0.0) ); assert( eq(cu[1],4.1) ); assert( eq(cu[2],1.0) ); assert( eq(rl[0],2.5) ); assert( eq(rl[4],3.0) ); assert( eq(ru[1],2.1) ); assert( eq(ru[4],15.0) ); assert( !eq(cl[3],1.2345) ); assert( !eq(cu[4],10.2345) ); assert( eq( dumSi.getObjCoefficients()[0], 1.0) ); assert( eq( dumSi.getObjCoefficients()[1], 0.0) ); assert( eq( dumSi.getObjCoefficients()[2], 0.0) ); assert( eq( dumSi.getObjCoefficients()[3], 0.0) ); assert( eq( dumSi.getObjCoefficients()[4], 2.0) ); assert( eq( dumSi.getObjCoefficients()[5], 0.0) ); assert( eq( dumSi.getObjCoefficients()[6], 0.0) ); assert( eq( dumSi.getObjCoefficients()[7], -1.0) ); dumSi.writeMps("CoinMpsIoTest.mps");//,0,0,1); } // Read just written file { CoinMpsIO dumSi; dumSi.readMps("CoinMpsIoTest"); int nc = dumSi.getNumCols(); int nr = dumSi.getNumRows(); const double * cl = dumSi.getColLower(); const double * cu = dumSi.getColUpper(); const double * rl = dumSi.getRowLower(); const double * ru = dumSi.getRowUpper(); assert( nc == 8 ); assert( nr == 5 ); assert( eq(cl[0],2.5) ); assert( eq(cl[1],0.0) ); assert( eq(cu[1],4.1) ); assert( eq(cu[2],1.0) ); assert( eq(rl[0],2.5) ); assert( eq(rl[4],3.0) ); assert( eq(ru[1],2.1) ); assert( eq(ru[4],15.0) ); assert( !eq(cl[3],1.2345) ); assert( !eq(cu[4],10.2345) ); assert( eq( dumSi.getObjCoefficients()[0], 1.0) ); assert( eq( dumSi.getObjCoefficients()[1], 0.0) ); assert( eq( dumSi.getObjCoefficients()[2], 0.0) ); assert( eq( dumSi.getObjCoefficients()[3], 0.0) ); assert( eq( dumSi.getObjCoefficients()[4], 2.0) ); assert( eq( dumSi.getObjCoefficients()[5], 0.0) ); assert( eq( dumSi.getObjCoefficients()[6], 0.0) ); assert( eq( dumSi.getObjCoefficients()[7], -1.0) ); } // Test matrixByRow method { const CoinMpsIO si(m); const CoinPackedMatrix * smP = si.getMatrixByRow(); // LL: const CoinDumPackedMatrix * osmP = dynamic_cast(smP); // LL: assert( osmP!=NULL ); CoinRelFltEq eq; const double * ev = smP->getElements(); assert( eq(ev[0], 3.0) ); assert( eq(ev[1], 1.0) ); assert( eq(ev[2], -2.0) ); assert( eq(ev[3], -1.0) ); assert( eq(ev[4], -1.0) ); assert( eq(ev[5], 2.0) ); assert( eq(ev[6], 1.1) ); assert( eq(ev[7], 1.0) ); assert( eq(ev[8], 1.0) ); assert( eq(ev[9], 2.8) ); assert( eq(ev[10], -1.2) ); assert( eq(ev[11], 5.6) ); assert( eq(ev[12], 1.0) ); assert( eq(ev[13], 1.9) ); const CoinBigIndex * mi = smP->getVectorStarts(); assert( mi[0]==0 ); assert( mi[1]==5 ); assert( mi[2]==7 ); assert( mi[3]==9 ); assert( mi[4]==11 ); assert( mi[5]==14 ); const int * ei = smP->getIndices(); assert( ei[0] == 0 ); assert( ei[1] == 1 ); assert( ei[2] == 3 ); assert( ei[3] == 4 ); assert( ei[4] == 7 ); assert( ei[5] == 1 ); assert( ei[6] == 2 ); assert( ei[7] == 2 ); assert( ei[8] == 5 ); assert( ei[9] == 3 ); assert( ei[10] == 6 ); assert( ei[11] == 0 ); assert( ei[12] == 4 ); assert( ei[13] == 7 ); assert( smP->getMajorDim() == 5 ); assert( smP->getNumElements() == 14 ); } // Test matrixByCol method { const CoinMpsIO si(m); const CoinPackedMatrix * smP = si.getMatrixByCol(); // LL: const CoinDumPackedMatrix * osmP = dynamic_cast(smP); // LL: assert( osmP!=NULL ); CoinRelFltEq eq; const double * ev = smP->getElements(); assert( eq(ev[0], 3.0) ); assert( eq(ev[1], 5.6) ); assert( eq(ev[2], 1.0) ); assert( eq(ev[3], 2.0) ); assert( eq(ev[4], 1.1) ); assert( eq(ev[5], 1.0) ); assert( eq(ev[6], -2.0) ); assert( eq(ev[7], 2.8) ); assert( eq(ev[8], -1.0) ); assert( eq(ev[9], 1.0) ); assert( eq(ev[10], 1.0) ); assert( eq(ev[11], -1.2) ); assert( eq(ev[12], -1.0) ); assert( eq(ev[13], 1.9) ); const CoinBigIndex * mi = smP->getVectorStarts(); assert( mi[0]==0 ); assert( mi[1]==2 ); assert( mi[2]==4 ); assert( mi[3]==6 ); assert( mi[4]==8 ); assert( mi[5]==10 ); assert( mi[6]==11 ); assert( mi[7]==12 ); assert( mi[8]==14 ); const int * ei = smP->getIndices(); assert( ei[0] == 0 ); assert( ei[1] == 4 ); assert( ei[2] == 0 ); assert( ei[3] == 1 ); assert( ei[4] == 1 ); assert( ei[5] == 2 ); assert( ei[6] == 0 ); assert( ei[7] == 3 ); assert( ei[8] == 0 ); assert( ei[9] == 4 ); assert( ei[10] == 2 ); assert( ei[11] == 3 ); assert( ei[12] == 0 ); assert( ei[13] == 4 ); assert( smP->getMajorDim() == 8 ); assert( smP->getNumElements() == 14 ); assert( smP->getSizeVectorStarts()==9 ); assert( smP->getMinorDim() == 5 ); } //-------------- // Test rowsense, rhs, rowrange, matrixByRow { CoinMpsIO lhs; { assert( m.rowrange_==NULL ); assert( m.rowsense_==NULL ); assert( m.rhs_==NULL ); assert( m.matrixByRow_==NULL ); CoinMpsIO siC1(m); assert( siC1.rowrange_==NULL ); assert( siC1.rowsense_==NULL ); assert( siC1.rhs_==NULL ); assert( siC1.matrixByRow_==NULL ); const char * siC1rs = siC1.getRowSense(); assert( siC1rs[0]=='G' ); assert( siC1rs[1]=='L' ); assert( siC1rs[2]=='E' ); assert( siC1rs[3]=='R' ); assert( siC1rs[4]=='R' ); const double * siC1rhs = siC1.getRightHandSide(); assert( eq(siC1rhs[0],2.5) ); assert( eq(siC1rhs[1],2.1) ); assert( eq(siC1rhs[2],4.0) ); assert( eq(siC1rhs[3],5.0) ); assert( eq(siC1rhs[4],15.) ); const double * siC1rr = siC1.getRowRange(); assert( eq(siC1rr[0],0.0) ); assert( eq(siC1rr[1],0.0) ); assert( eq(siC1rr[2],0.0) ); assert( eq(siC1rr[3],5.0-1.8) ); assert( eq(siC1rr[4],15.0-3.0) ); const CoinPackedMatrix * siC1mbr = siC1.getMatrixByRow(); assert( siC1mbr != NULL ); const double * ev = siC1mbr->getElements(); assert( eq(ev[0], 3.0) ); assert( eq(ev[1], 1.0) ); assert( eq(ev[2], -2.0) ); assert( eq(ev[3], -1.0) ); assert( eq(ev[4], -1.0) ); assert( eq(ev[5], 2.0) ); assert( eq(ev[6], 1.1) ); assert( eq(ev[7], 1.0) ); assert( eq(ev[8], 1.0) ); assert( eq(ev[9], 2.8) ); assert( eq(ev[10], -1.2) ); assert( eq(ev[11], 5.6) ); assert( eq(ev[12], 1.0) ); assert( eq(ev[13], 1.9) ); const CoinBigIndex * mi = siC1mbr->getVectorStarts(); assert( mi[0]==0 ); assert( mi[1]==5 ); assert( mi[2]==7 ); assert( mi[3]==9 ); assert( mi[4]==11 ); assert( mi[5]==14 ); const int * ei = siC1mbr->getIndices(); assert( ei[0] == 0 ); assert( ei[1] == 1 ); assert( ei[2] == 3 ); assert( ei[3] == 4 ); assert( ei[4] == 7 ); assert( ei[5] == 1 ); assert( ei[6] == 2 ); assert( ei[7] == 2 ); assert( ei[8] == 5 ); assert( ei[9] == 3 ); assert( ei[10] == 6 ); assert( ei[11] == 0 ); assert( ei[12] == 4 ); assert( ei[13] == 7 ); assert( siC1mbr->getMajorDim() == 5 ); assert( siC1mbr->getNumElements() == 14 ); assert( siC1rs == siC1.getRowSense() ); assert( siC1rhs == siC1.getRightHandSide() ); assert( siC1rr == siC1.getRowRange() ); } } //test special sections: SOS, QUADOBJ, CSECTION { CoinMpsIO m_MpsData; std::string fn = mpsDir+"spec_sections"; int nOfSOS; CoinSet ** SOS; int status = m_MpsData.readMps(fn.c_str(),"mps", nOfSOS, SOS); assert (status == 0); assert (nOfSOS == 2); assert (SOS[0]->numberEntries() == 2); assert (SOS[1]->numberEntries() == 2); assert (SOS[0]->setType() == 1); assert (SOS[1]->setType() == 2); { int numberEntries = SOS[0]->numberEntries(); const int * which = SOS[0]->which(); const double * weights = SOS[0]->weights(); assert (which[0] == 2); assert (which[1] == 3); assert (weights[0] == 0); assert (weights[1] == 1); } { int numberEntries = SOS[1]->numberEntries(); const int * which = SOS[1]->which(); const double * weights = SOS[1]->weights(); assert (which[0] == 4); assert (which[1] == 5); assert (weights[0] == 20); assert (weights[1] == 40); } int * columnStart = NULL; int * columnIdx = NULL; double * elements = NULL; status = m_MpsData.readQuadraticMps(NULL, columnStart, columnIdx, elements, 0); assert (status == 0); assert (columnStart[ 0] == 0); assert (columnStart[ 1] == 0); assert (columnStart[ 2] == 0); assert (columnStart[ 3] == 0); assert (columnStart[ 4] == 0); assert (columnStart[ 5] == 0); assert (columnStart[ 6] == 0); assert (columnStart[ 7] == 2); assert (columnStart[ 8] == 3); assert (columnStart[ 9] == 3); assert (columnStart[10] == 3); assert (columnStart[11] == 3); assert (columnStart[12] == 3); assert (columnStart[13] == 3); assert (columnStart[14] == 3); assert (columnStart[15] == 3); assert (columnIdx[0] == 6); assert (columnIdx[1] == 7); assert (columnIdx[2] == 7); assert (elements[0] == 1.0); assert (elements[1] == 2.0); assert (elements[2] == 7.0); int nOfCones; int * coneStart = NULL; int * coneIdx = NULL; int * coneType = NULL; status = m_MpsData.readConicMps(NULL, coneStart, coneIdx, coneType, nOfCones); assert (status == 0); assert (nOfCones == 2); assert (coneType[0] == 1); assert (coneType[1] == 2); assert (coneStart[0] == 0); assert (coneStart[1] == 3); assert (coneStart[2] == 7); assert (coneStart[0] == 0); assert (coneStart[1] == 3); assert (coneStart[2] == 7); assert (coneIdx[0] == 8); assert (coneIdx[1] == 9); assert (coneIdx[2] == 10); assert (coneIdx[3] == 11); assert (coneIdx[4] == 12); assert (coneIdx[5] == 13); assert (coneIdx[6] == 14); } #ifdef COIN_HAS_GLPK // test GMPL reader { CoinMessageHandler msghandler; CoinMpsIO mpsio; mpsio.passInMessageHandler(&msghandler); int ret = mpsio.readGMPL("plan.mod", NULL, true); printf("read plan.mod with return == %d\n", ret); assert(ret == 0); int nc = mpsio.getNumCols(); int nr = mpsio.getNumRows(); const double * cl = mpsio.getColLower(); const double * cu = mpsio.getColUpper(); const double * rl = mpsio.getRowLower(); const double * ru = mpsio.getRowUpper(); const double * obj = mpsio.getObjCoefficients(); assert( nc == 7 ); assert( nr == 8 ); assert( eq(cl[0],0) ); assert( eq(cl[1],0) ); assert( eq(cl[2],400) ); assert( eq(cl[3],100) ); assert( eq(cl[4],0) ); assert( eq(cl[5],0) ); assert( eq(cl[6],0) ); assert( eq(cu[0],200) ); assert( eq(cu[1],2500) ); assert( eq(cu[2],800) ); assert( eq(cu[3],700) ); assert( eq(cu[4],1500) ); assert( eq(cu[5],mpsio.getInfinity()) ); assert( eq(cu[6],mpsio.getInfinity()) ); assert( eq(rl[0],-mpsio.getInfinity()) ); assert( eq(rl[1],2000) ); assert( eq(rl[2],-mpsio.getInfinity()) ); assert( eq(rl[3],-mpsio.getInfinity()) ); assert( eq(rl[4],-mpsio.getInfinity()) ); assert( eq(rl[5],-mpsio.getInfinity()) ); assert( eq(rl[6],1500) ); assert( eq(rl[7],250) ); assert( eq(ru[0],mpsio.getInfinity()) ); assert( eq(ru[1],2000) ); assert( eq(ru[2],60) ); assert( eq(ru[3],100) ); assert( eq(ru[4],40) ); assert( eq(ru[5],30) ); assert( eq(ru[6],mpsio.getInfinity()) ); assert( eq(ru[7],300) ); assert( eq(obj[0],0.03) ); assert( eq(obj[1],0.08) ); assert( eq(obj[2],0.17) ); assert( eq(obj[3],0.12) ); assert( eq(obj[4],0.15) ); assert( eq(obj[5],0.21) ); assert( eq(obj[6],0.38) ); const CoinPackedMatrix * matrix = mpsio.getMatrixByRow(); assert( matrix != NULL ); assert( matrix->getMajorDim() == nr ); int nel = matrix->getNumElements(); assert( nel == 48 ); const double * ev = matrix->getElements(); assert( ev != NULL ); const int * ei = matrix->getIndices(); assert( ei != NULL ); const CoinBigIndex * mi = matrix->getVectorStarts(); assert( mi != NULL ); assert( eq(ev[0],0.03) ); assert( eq(ev[1],0.08) ); assert( eq(ev[2],0.17) ); assert( eq(ev[3],0.12) ); assert( eq(ev[4],0.15) ); assert( eq(ev[5],0.21) ); assert( eq(ev[6],0.38) ); assert( eq(ev[7],1) ); assert( eq(ev[8],1) ); assert( eq(ev[9],1) ); assert( eq(ev[10],1) ); assert( eq(ev[11],1) ); assert( eq(ev[12],1) ); assert( eq(ev[13],1) ); assert( eq(ev[14],0.15) ); assert( eq(ev[15],0.04) ); assert( eq(ev[16],0.02) ); assert( eq(ev[17],0.04) ); assert( eq(ev[18],0.02) ); assert( eq(ev[19],0.01) ); assert( eq(ev[20],0.03) ); assert( eq(ev[21],0.03) ); assert( eq(ev[22],0.05) ); assert( eq(ev[23],0.08) ); assert( eq(ev[24],0.02) ); assert( eq(ev[25],0.06) ); assert( eq(ev[26],0.01) ); assert( eq(ev[27],0.02) ); assert( eq(ev[28],0.04) ); assert( eq(ev[29],0.01) ); assert( eq(ev[30],0.02) ); assert( eq(ev[31],0.02) ); assert( eq(ev[32],0.02) ); assert( eq(ev[33],0.03) ); assert( eq(ev[34],0.01) ); assert( eq(ev[35],0.7) ); assert( eq(ev[36],0.75) ); assert( eq(ev[37],0.8) ); assert( eq(ev[38],0.75) ); assert( eq(ev[39],0.8) ); assert( eq(ev[40],0.97) ); assert( eq(ev[41],0.02) ); assert( eq(ev[42],0.06) ); assert( eq(ev[43],0.08) ); assert( eq(ev[44],0.12) ); assert( eq(ev[45],0.02) ); assert( eq(ev[46],0.01) ); assert( eq(ev[47],0.97) ); assert( ei[0] == 0 ); assert( ei[1] == 1 ); assert( ei[2] == 2 ); assert( ei[3] == 3 ); assert( ei[4] == 4 ); assert( ei[5] == 5 ); assert( ei[6] == 6 ); assert( ei[7] == 0 ); assert( ei[8] == 1 ); assert( ei[9] == 2 ); assert( ei[10] == 3 ); assert( ei[11] == 4 ); assert( ei[12] == 5 ); assert( ei[13] == 6 ); assert( ei[14] == 0 ); assert( ei[15] == 1 ); assert( ei[16] == 2 ); assert( ei[17] == 3 ); assert( ei[18] == 4 ); assert( ei[19] == 5 ); assert( ei[20] == 6 ); assert( ei[21] == 0 ); assert( ei[22] == 1 ); assert( ei[23] == 2 ); assert( ei[24] == 3 ); assert( ei[25] == 4 ); assert( ei[26] == 5 ); assert( ei[27] == 0 ); assert( ei[28] == 1 ); assert( ei[29] == 2 ); assert( ei[30] == 3 ); assert( ei[31] == 4 ); assert( ei[32] == 0 ); assert( ei[33] == 1 ); assert( ei[34] == 4 ); assert( ei[35] == 0 ); assert( ei[36] == 1 ); assert( ei[37] == 2 ); assert( ei[38] == 3 ); assert( ei[39] == 4 ); assert( ei[40] == 5 ); assert( ei[41] == 0 ); assert( ei[42] == 1 ); assert( ei[43] == 2 ); assert( ei[44] == 3 ); assert( ei[45] == 4 ); assert( ei[46] == 5 ); assert( ei[47] == 6 ); assert( mi[0] == 0 ); assert( mi[1] == 7 ); assert( mi[2] == 14 ); assert( mi[3] == 21 ); assert( mi[4] == 27 ); assert( mi[5] == 32 ); assert( mi[6] == 35 ); assert( mi[7] == 41 ); assert( mi[8] == 48 ); } #endif } } CoinUtils-2.9.10/CoinUtils/test/CoinModelTest.cpp0000644000076600007660000005676011552534611020320 0ustar coincoin// 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 #ifdef NDEBUG #undef NDEBUG #endif #include #include "CoinMpsIO.hpp" #include "CoinModel.hpp" #include "CoinHelperFunctions.hpp" #include "CoinTime.hpp" //############################################################################# /* Build a model in some interesting way Nine blocks defined by 4 random numbers If next random number <0.4 addRow next possible If <0.8 addColumn if possible Otherwise do by element For each one use random <0.5 to add rim at same time At end fill in rim at random */ void buildRandom(CoinModel & baseModel, double random, double & timeIt, int iPass) { CoinModel model; int numberRows = baseModel.numberRows(); int numberColumns = baseModel.numberColumns(); int numberElements = baseModel.numberElements(); // Row numbers and column numbers int lastRow[4]; int lastColumn[4]; int i; lastRow[0]=0; lastColumn[0]=0; lastRow[3]=numberRows; lastColumn[3]=numberColumns; for ( i=1;i<3;i++) { int size; size = (int) ((0.25*random+0.2)*numberRows); random = CoinDrand48(); lastRow[i]=lastRow[i-1]+size; size = (int) ((0.25*random+0.2)*numberColumns); random = CoinDrand48(); lastColumn[i]=lastColumn[i-1]+size; } // whether block done 0 row first char block[9]={0,0,0,0,0,0,0,0,0}; // whether rowRim done char rowDone[3]={0,0,0}; // whether columnRim done char columnDone[3]={0,0,0}; // Save array for deleting elements CoinModelTriple * dTriple = new CoinModelTriple[numberElements]; numberElements=0; double time1 = CoinCpuTime(); for (int jBlock=0;jBlock<9;jBlock++) { int iType=-1; int iBlock=-1; if (random<0.4) { // trying addRow int j; for (j=0;j<3;j++) { int k; for (k=0;k<3;k++) { if (block[3*j+k]) break; //already taken } if (k==3) { // can do but decide which one iBlock = 3*j + (int) (CoinDrand48()*0.3); iType=0; break; } } } if (iType==-1&&random<0.8) { // trying addRow int j; for (j=0;j<3;j++) { int k; for (k=0;k<3;k++) { if (block[j+3*k]) break; //already taken } if (k==3) { // can do but decide which one iBlock = j + 3*((int) (CoinDrand48()*0.3)); iType=1; break; } } } if (iType==-1) { iType=2; int j; for (j=0;j<9;j++) { if (!block[j]) { iBlock=j; break; } } } random=CoinDrand48(); assert (iBlock>=0&&iBlock<9); assert (iType>=0); assert (!block[iBlock]); block[iBlock]=static_cast(1+iType); int jRow = iBlock/3; int jColumn = iBlock%3; bool doRow = (CoinDrand48()<0.5)&&!rowDone[jRow]; bool doColumn = (CoinDrand48()<0.5&&!columnDone[jColumn]); if (!iType) { // addRow int * column = new int[lastColumn[jColumn+1]-lastColumn[jColumn]]; double * element = new double[lastColumn[jColumn+1]-lastColumn[jColumn]]; for (i=lastRow[jRow];i=0) { if (triple.column()>=lastColumn[jColumn]&&triple.column()=model.numberRows()); if (i>model.numberRows()) { assert (i==lastRow[jRow]); std::cout << "need to fill in rows" << std::endl ; for (int k=0;k=0) { if (triple.row()>=lastRow[jRow]&&triple.row()=model.numberColumns()); if (i>model.numberColumns()) { assert (i==lastColumn[jColumn]); std::cout << "need to fill in columns" << std::endl ; for (int k=0;k=0) { int iColumn = triple.column(); if (iColumn>=lastColumn[jColumn]&&iColumn=0) { int iRow = triple.row(); if (iRow>=lastRow[jRow]&&iRow=0;i--) { int iRow = (int) rowInTriple(elements[i]); int iColumn = elements[i].column; if (iRow>=lastRow[jRow]&&iRow=lastColumn[jColumn]&&iColumn=0) { int iColumn = triple.column(); if (iColumn>=lastColumn[jColumn]&&iColumn=0) { int iRow = triple.row(); if (iRow>=lastRow[jRow]&&iRow=0;i--) { int iRow = (int) rowInTriple(elements[i]); int iColumn = elements[i].column; if (iRow>=lastRow[jRow]&&iRow=lastColumn[jColumn]&&iColumn10) { double random2=CoinDrand48(); double randomDelete = 0.2 + 0.5*random2; // fraction to delete //model.validateLinks(); if (random2<0.2) { // delete some rows for (int j=lastRow[jRow];j=0) { int iColumn = triple.column(); assert (j==triple.row()); setRowInTriple(dTriple[numberElements],j); dTriple[numberElements].column=iColumn; dTriple[numberElements].value = triple.value(); numberElements++; triple=model.next(triple); } model.deleteRow(j); if (rowDone[jRow]) { // put back rim model.setRowLower(j,rowLower); model.setRowUpper(j,rowUpper); model.setRowName(j,rowName); } free(rowName); } } } else if (random2<0.4) { // delete some columns for (int j=lastColumn[jColumn];j=0) { int iRow = triple.row(); assert (j==triple.column()); dTriple[numberElements].column = j; setRowInTriple(dTriple[numberElements],iRow); dTriple[numberElements].value = triple.value(); numberElements++; triple=model.next(triple); } model.deleteColumn(j); if (columnDone[jColumn]) { // put back rim model.setColumnLower(j,columnLower); model.setColumnUpper(j,columnUpper); model.setObjective(j,objective); model.setIsInteger(j,integer); model.setColumnName(j,columnName); } free(columnName); } } } else { // delete some elements //model.validateLinks(); const CoinModelTriple * elements = baseModel.elements(); for (i=0;i=lastRow[jRow]&&iRow=lastColumn[jColumn]&&iColumn=0) numberElements++; } } } } } } // Do rim if necessary for (int k=0;k<3;k++) { if (!rowDone[k]) { for (i=lastRow[k];i=0;i--) temp.setRowLower(i,model.getRowLower(i)); for (i=0;i=0;i--) { temp.setColumnLower(i,model.getColumnLower(i)); temp.setColumnObjective(i,model.getColumnObjective(i)); temp.setColumnIsInteger(i,model.getColumnIsInteger(i)); } for (i=0;i=0) { temp(i,triple.column(),triple.value()); triple=model.next(triple); } } // and by column for (i=numberColumns-1;i>=0;i--) { CoinModelLink triple=model.lastInColumn(i); while (triple.row()>=0) { assert (triple.value()==temp(triple.row(),i)); temp(triple.row(),i,triple.value()); triple=model.previous(triple); } } // check equal model.setLogLevel(1); assert (!model.differentModel(temp,false)); } // Try creating model with strings { CoinModel temp; int i; for (i=numberRows-1;i>=0;i--) { double value = model.getRowLower(i); if (value==-1.0) temp.setRowLower(i,"minusOne"); else if (value==1.0) temp.setRowLower(i,"sqrt(plusOne)"); else if (value==4.0) temp.setRowLower(i,"abs(4*plusOne)"); else temp.setRowLower(i,value); } for (i=0;i=0;i--) { temp.setColumnLower(i,model.getColumnLower(i)); temp.setColumnObjective(i,model.getColumnObjective(i)); temp.setColumnIsInteger(i,model.getColumnIsInteger(i)); } for (i=0;i=0) { double value = triple.value(); if (value==-1.0) temp(i,triple.column(),"minusOne"); else if (value==1.0) temp(i,triple.column(),"plusOne"); else if (value==-2.0) temp(i,triple.column(),"minusOne-1.0"); else if (value==2.0) temp(i,triple.column(),"plusOne+1.0+minusOne+(2.0-plusOne)"); else temp(i,triple.column(),value); triple=model.next(triple); } } temp.associateElement("minusOne",-1.0); temp.associateElement("plusOne",1.0); temp.setProblemName("fromStrings"); temp.writeMps("string.mps"); // check equal model.setLogLevel(1); assert (!model.differentModel(temp,false)); } // Test with various ways of generating { /* Get a model. Try first with netlibDir, fall back to mpsDir (sampleDir) if that fails. */ CoinMpsIO m; std::string fn = netlibDir+testModel; double time1 = CoinCpuTime(); int numErr = m.readMps(fn.c_str(),""); if (numErr != 0) { std::cout << "Could not read " << testModel << " in " << netlibDir << "; falling back to " << mpsDir << "." << std::endl ; fn = mpsDir+testModel ; numErr = m.readMps(fn.c_str(),"") ; if (numErr != 0) { std::cout << "Could not read " << testModel << "; skipping test." << std::endl ; } } if (numErr == 0) { std::cout << "Time for readMps is " << (CoinCpuTime()-time1) << " seconds." << std::endl ; int numberRows = m.getNumRows(); int numberColumns = m.getNumCols(); // Build model CoinModel model; CoinPackedMatrix matrixByRow = * m.getMatrixByRow(); const double * element = matrixByRow.getElements(); const int * column = matrixByRow.getIndices(); const CoinBigIndex * rowStart = matrixByRow.getVectorStarts(); const int * rowLength = matrixByRow.getVectorLengths(); const double * rowLower = m.getRowLower(); const double * rowUpper = m.getRowUpper(); const double * columnLower = m.getColLower(); const double * columnUpper = m.getColUpper(); const double * objective = m.getObjCoefficients(); int i; for (i=0;i. # # 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='CoinUtils' PACKAGE_TARNAME='coinutils' PACKAGE_VERSION='2.9.10' PACKAGE_STRING='CoinUtils 2.9.10' PACKAGE_BUGREPORT='http://projects.coin-or.org/CoinUtils' ac_unique_file="src/CoinError.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 COINUTILS_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 ADD_FFLAGS DBG_FFLAGS OPT_FFLAGS F77 ac_ct_F77 FFLAGS MPIF77 FLIBS 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 PKG_CONFIG ac_ct_PKG_CONFIG COIN_HAS_PKGCONFIG_TRUE COIN_HAS_PKGCONFIG_FALSE COIN_PKG_CONFIG_PATH COIN_PKG_CONFIG_PATH_UNINSTALLED BLAS_LIBS BLAS_CFLAGS BLAS_DATA BLAS_DEPENDENCIES BLAS_LIBS_INSTALLED BLAS_CFLAGS_INSTALLED BLAS_DATA_INSTALLED COINUTILSLIB_CFLAGS COINUTILSLIB_LIBS COINUTILSLIB_PCLIBS COINUTILSLIB_PCREQUIRES COINUTILSLIB_DEPENDENCIES COINUTILSLIB_CFLAGS_INSTALLED COINUTILSLIB_LIBS_INSTALLED COIN_HAS_BLAS_TRUE COIN_HAS_BLAS_FALSE LAPACK_LIBS LAPACK_CFLAGS LAPACK_DATA LAPACK_DEPENDENCIES LAPACK_LIBS_INSTALLED LAPACK_CFLAGS_INSTALLED LAPACK_DATA_INSTALLED COIN_HAS_LAPACK_TRUE COIN_HAS_LAPACK_FALSE GLPK_LIBS GLPK_CFLAGS GLPK_DATA GLPK_DEPENDENCIES GLPK_LIBS_INSTALLED GLPK_CFLAGS_INSTALLED GLPK_DATA_INSTALLED COIN_HAS_GLPK_TRUE COIN_HAS_GLPK_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 COIN_HAS_ZLIB_TRUE COIN_HAS_ZLIB_FALSE coin_have_doxygen coin_doxy_usedot coin_doxy_tagname coin_doxy_logname 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_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 CoinUtils 2.9.10 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 CoinUtils 2.9.10:";; 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-coinutils compile project CoinUtils 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) --enable-coinutils-threads enables compilation of thread aware CoinUtils (mempool so far) --enable-coinutils-mempool-override-new enables the CoinUtils mempool to override global new/delete --enable-coinutils-mempool-maxpooled Specify the default maximum memory allocation size that is served by the memory pool. If negative (or 'no') then the memory pool is disabled completely. Otherwise its value can be overridden at runtime using the COINUTILS_MEMPOOL_MAXPOOLED environment variable. --disable-pkg-config disable use of pkg-config (if available) --disable-interpackage-dependencies disables deduction of Makefile dependencies from package linker flags --disable-zlib do not compile with compression library zlib --disable-bzlib do not compile with compression library bzlib --enable-gnu-packages compile with GNU packages (disabled by default) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-coinutils-verbosity specify the debug verbosity level for project CoinUtils --with-coinutils-checklevel specify the sanity check level for project CoinUtils --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-blas specify BLAS library (or BUILD to enforce use of ThirdParty/Blas) --with-coin-instdir prefix of installation directory for precompiled COIN packages --with-blas-lib linker flags for using package Blas --with-blas-incdir directory with header files for using package Blas --with-blas-datadir directory with data files for using package Blas --with-lapack specify LAPACK library (or BUILD to enforce use of ThirdParty/Lapack) --with-lapack-lib linker flags for using package Lapack --with-lapack-incdir directory with header files for using package Lapack --with-lapack-datadir directory with data files for using package Lapack --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-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-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 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 CoinUtils configure 2.9.10 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 CoinUtils $as_me 2.9.10, 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 COINUTILS_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 COINUTILS_VERSION_MAJOR $coin_majorver _ACEOF cat >>confdefs.h <<_ACEOF #define COINUTILS_VERSION_MINOR $coin_minorver _ACEOF cat >>confdefs.h <<_ACEOF #define COINUTILS_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=COINUTILS # 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 COINUTILS_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 COINUTILS_SVN_REV $COINUTILS_SVN_REV _ACEOF fi fi # Capture libtool library version, if given. coin_libversion=12:10:9 # 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-coinutils or --disable-debug-coinutils was given. if test "${enable_debug_coinutils+set}" = set; then enableval="$enable_debug_coinutils" case "${enableval}" in yes) coin_debug_compile=true ;; no) coin_debug_compile=false ;; *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-debug-coinutils" >&5 echo "$as_me: error: bad value ${enableval} for --enable-debug-coinutils" >&2;} { (exit 1); exit 1; }; } ;; esac else : fi; # m4_ifvaln([CoinUtils], 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-coinutils-verbosity or --without-coinutils-verbosity was given. if test "${with_coinutils_verbosity+set}" = set; then withval="$with_coinutils_verbosity" if test "$withval" = yes; then withval=1 fi coin_coinutils_verbosity=$withval else coin_coinutils_verbosity=0 fi; cat >>confdefs.h <<_ACEOF #define COIN_COINUTILS_VERBOSITY $coin_coinutils_verbosity _ACEOF # Check whether --with-coinutils-checklevel or --without-coinutils-checklevel was given. if test "${with_coinutils_checklevel+set}" = set; then withval="$with_coinutils_checklevel" if test "$withval" = yes; then withval=1 fi coin_coinutils_checklevel=$withval else coin_coinutils_checklevel=0 fi; cat >>confdefs.h <<_ACEOF #define COIN_COINUTILS_CHECKLEVEL $coin_coinutils_checklevel _ACEOF # m4_ifvaln([CoinUtils], # 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 case $build in *-mingw*) if test "${LD+set}" = set; then :; else LD=link fi ;; esac if test $enable_msvc = yes ; then if test "x${LD+set}" = xset; then :; else LD=link 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 # 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 ;; *-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" case $build in *-darwin*) ;; *) coin_warn_cflags="-pedantic-errors $coin_warn_cflags" ;; esac 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*) case $build in *-mingw*) if test "${LD+set}" = set; then :; else LD=link fi ;; esac if test $enable_msvc = yes ; then if test "x${LD+set}" = xset; then :; else LD=link fi fi ;; 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="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* ) ;; 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" case $build in *-darwin*) ;; *) coin_warn_cxxflags="-pedantic-errors $coin_warn_cxxflags" ;; esac 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 mingw build with MS or intel compiler case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) case $build in *-mingw*) if test "${LD+set}" = set; then :; else LD=link fi ;; esac if test $enable_msvc = yes ; then if test "x${LD+set}" = xset; then :; else LD=link fi fi ;; 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 gfortran g95 g77" 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:4370:" \ "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 "$F77" in ifort* | */ifort* | IFORT* | */IFORT*) case $build in *-mingw*) if test "${LD+set}" = set; then :; else LD=link fi ;; esac if test $enable_msvc = yes ; then if test "x${LD+set}" = xset; then :; else LD=link fi fi ;; 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 # Find out how to call Fortran from C and determine Fortran runtime libraries if test "x$F77" != xunavailable then # get FLIBS 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 echo "$as_me:$LINENO: checking how to get verbose linking output from $F77" >&5 echo $ECHO_N "checking how to get verbose linking output from $F77... $ECHO_C" >&6 if test "${ac_cv_prog_f77_v+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else 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_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FFLAGS=$FFLAGS FFLAGS="$FFLAGS $ac_verb" (eval echo $as_me:4895: \"$ac_link\") >&5 ac_f77_v_output=`eval $ac_link 5>&1 2>&1 | grep -v 'Driving:'` echo "$ac_f77_v_output" >&5 FFLAGS=$ac_save_FFLAGS rm -f conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_f77_v_output="`echo $ac_f77_v_output | grep 'LPATH is:' | sed 's,.*LPATH is\(: *[^ ]*\).*,\1,;s,: */, -L/,g'` $ac_f77_v_output" case $ac_f77_v_output in # If we are using xlf then replace all the commas with spaces. *xlfentry*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/,/ /g'` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/\"-mGLOB[^\"]*\"/ /g'` ;; # If we are using Cray Fortran then delete quotes. # Use "\"" instead of '"' for font-lock-mode. # FIXME: a more general fix for quoted arguments with spaces? *cft90*) ac_f77_v_output=`echo $ac_f77_v_output | sed "s/\"//g"` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_f77_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_f77_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_f77_v"; then { echo "$as_me:$LINENO: WARNING: cannot determine how to obtain linking information from $F77" >&5 echo "$as_me: WARNING: cannot determine how to obtain linking information from $F77" >&2;} fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { echo "$as_me:$LINENO: WARNING: compilation failed" >&5 echo "$as_me: WARNING: compilation failed" >&2;} fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_f77_v" >&5 echo "${ECHO_T}$ac_cv_prog_f77_v" >&6 echo "$as_me:$LINENO: checking for Fortran libraries of $F77" >&5 echo $ECHO_N "checking for Fortran libraries of $F77... $ECHO_C" >&6 if test "${ac_cv_f77_libs+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "x$FLIBS" != "x"; then ac_cv_f77_libs="$FLIBS" # Let the user override the test. else cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FFLAGS=$FFLAGS FFLAGS="$FFLAGS $ac_cv_prog_f77_v" (eval echo $as_me:4973: \"$ac_link\") >&5 ac_f77_v_output=`eval $ac_link 5>&1 2>&1 | grep -v 'Driving:'` echo "$ac_f77_v_output" >&5 FFLAGS=$ac_save_FFLAGS rm -f conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_f77_v_output="`echo $ac_f77_v_output | grep 'LPATH is:' | sed 's,.*LPATH is\(: *[^ ]*\).*,\1,;s,: */, -L/,g'` $ac_f77_v_output" case $ac_f77_v_output in # If we are using xlf then replace all the commas with spaces. *xlfentry*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/,/ /g'` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/\"-mGLOB[^\"]*\"/ /g'` ;; # If we are using Cray Fortran then delete quotes. # Use "\"" instead of '"' for font-lock-mode. # FIXME: a more general fix for quoted arguments with spaces? *cft90*) ac_f77_v_output=`echo $ac_f77_v_output | sed "s/\"//g"` ;; esac ac_cv_f77_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_f77_v_output while test $# != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt" done else ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" fi fi ;; # Ignore these flags. -lang* | -lcrt[01].o | -lcrtbegin.o | -lc | -lgcc | -libmil | -LANG:=*) ;; -lkernel32) test x"$CYGWIN" != xyes && ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" ;; -[LRuY]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `echo $ac_arg | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_arg="$ac_arg $ac_j" ac_cv_f77_libs="$ac_cv_f77_libs $ac_j" fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" fi ;; # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`echo $ac_f77_v_output | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt" done else ac_cv_f77_libs="$ac_cv_f77_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" fi echo "$as_me:$LINENO: result: $ac_cv_f77_libs" >&5 echo "${ECHO_T}$ac_cv_f77_libs" >&6 FLIBS="$ac_cv_f77_libs" 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 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 { echo "$as_me:$LINENO: Corrected Fortran libraries: $FLIBS" >&5 echo "$as_me: Corrected Fortran libraries: $FLIBS" >&6;} 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 echo "$as_me:$LINENO: checking for dummy main to link with Fortran libraries" >&5 echo $ECHO_N "checking for dummy main to link with Fortran libraries... $ECHO_C" >&6 if test "${ac_cv_f77_dummy_main+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_f77_dm_save_LIBS=$LIBS LIBS="$LIBS $FLIBS" ac_fortran_dm_var=F77_DUMMY_MAIN 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 # First, try linking without a dummy main: cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif 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 ac_cv_fortran_dummy_main=none else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_fortran_dummy_main=unknown fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test $ac_cv_fortran_dummy_main = unknown; then for ac_func in MAIN__ MAIN_ __main MAIN _MAIN __MAIN main_ main__ _main; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #define $ac_fortran_dm_var $ac_func #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif 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 ac_cv_fortran_dummy_main=$ac_func; 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_exeext conftest.$ac_ext done 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 ac_cv_f77_dummy_main=$ac_cv_fortran_dummy_main rm -f conftest* LIBS=$ac_f77_dm_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_f77_dummy_main" >&5 echo "${ECHO_T}$ac_cv_f77_dummy_main" >&6 F77_DUMMY_MAIN=$ac_cv_f77_dummy_main if test "$F77_DUMMY_MAIN" != unknown; then if test $F77_DUMMY_MAIN != none; then cat >>confdefs.h <<_ACEOF #define F77_DUMMY_MAIN $F77_DUMMY_MAIN _ACEOF if test "x$ac_cv_fc_dummy_main" = "x$ac_cv_f77_dummy_main"; then cat >>confdefs.h <<\_ACEOF #define FC_DUMMY_MAIN_EQ_F77 1 _ACEOF fi fi else { { echo "$as_me:$LINENO: error: linking to Fortran libraries from C fails See \`config.log' for more details." >&5 echo "$as_me: error: linking to Fortran libraries from C fails See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } 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 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 echo "$as_me:$LINENO: checking for Fortran name-mangling scheme" >&5 echo $ECHO_N "checking for Fortran name-mangling scheme... $ECHO_C" >&6 if test "${ac_cv_f77_mangling+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF subroutine foobar() return end subroutine foo_bar() return 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 mv conftest.$ac_objext cfortran_test.$ac_objext ac_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $FLIBS" 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_success=no for ac_foobar in foobar FOOBAR; do for ac_underscore in "" "_"; do ac_func="$ac_foobar$ac_underscore" 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 $ac_func (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $ac_func (); ; 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_success=yes; break 2 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 done done 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 "$ac_success" = "yes"; then case $ac_foobar in foobar) ac_case=lower ac_foo_bar=foo_bar ;; FOOBAR) ac_case=upper ac_foo_bar=FOO_BAR ;; 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 ac_success_extra=no for ac_extra in "" "_"; do ac_func="$ac_foo_bar$ac_underscore$ac_extra" 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 $ac_func (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $ac_func (); ; 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_success_extra=yes; 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_exeext conftest.$ac_ext done 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 "$ac_success_extra" = "yes"; then ac_cv_f77_mangling="$ac_case case" if test -z "$ac_underscore"; then ac_cv_f77_mangling="$ac_cv_f77_mangling, no underscore" else ac_cv_f77_mangling="$ac_cv_f77_mangling, underscore" fi if test -z "$ac_extra"; then ac_cv_f77_mangling="$ac_cv_f77_mangling, no extra underscore" else ac_cv_f77_mangling="$ac_cv_f77_mangling, extra underscore" fi else ac_cv_f77_mangling="unknown" fi else ac_cv_f77_mangling="unknown" fi LIBS=$ac_save_LIBS rm -f cfortran_test* conftest* else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compile a simple Fortran program See \`config.log' for more details." >&5 echo "$as_me: error: cannot compile a simple Fortran program See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_f77_mangling" >&5 echo "${ECHO_T}$ac_cv_f77_mangling" >&6 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 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 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 case $ac_cv_f77_mangling in "lower case, no underscore, no extra underscore") cat >>confdefs.h <<\_ACEOF #define F77_FUNC(name,NAME) name _ACEOF cat >>confdefs.h <<\_ACEOF #define F77_FUNC_(name,NAME) name _ACEOF ;; "lower case, no underscore, extra underscore") cat >>confdefs.h <<\_ACEOF #define F77_FUNC(name,NAME) name _ACEOF cat >>confdefs.h <<\_ACEOF #define F77_FUNC_(name,NAME) name ## _ _ACEOF ;; "lower case, underscore, no extra underscore") cat >>confdefs.h <<\_ACEOF #define F77_FUNC(name,NAME) name ## _ _ACEOF cat >>confdefs.h <<\_ACEOF #define F77_FUNC_(name,NAME) name ## _ _ACEOF ;; "lower case, underscore, extra underscore") cat >>confdefs.h <<\_ACEOF #define F77_FUNC(name,NAME) name ## _ _ACEOF cat >>confdefs.h <<\_ACEOF #define F77_FUNC_(name,NAME) name ## __ _ACEOF ;; "upper case, no underscore, no extra underscore") cat >>confdefs.h <<\_ACEOF #define F77_FUNC(name,NAME) NAME _ACEOF cat >>confdefs.h <<\_ACEOF #define F77_FUNC_(name,NAME) NAME _ACEOF ;; "upper case, no underscore, extra underscore") cat >>confdefs.h <<\_ACEOF #define F77_FUNC(name,NAME) NAME _ACEOF cat >>confdefs.h <<\_ACEOF #define F77_FUNC_(name,NAME) NAME ## _ _ACEOF ;; "upper case, underscore, no extra underscore") cat >>confdefs.h <<\_ACEOF #define F77_FUNC(name,NAME) NAME ## _ _ACEOF cat >>confdefs.h <<\_ACEOF #define F77_FUNC_(name,NAME) NAME ## _ _ACEOF ;; "upper case, underscore, extra underscore") cat >>confdefs.h <<\_ACEOF #define F77_FUNC(name,NAME) NAME ## _ _ACEOF cat >>confdefs.h <<\_ACEOF #define F77_FUNC_(name,NAME) NAME ## __ _ACEOF ;; *) { echo "$as_me:$LINENO: WARNING: unknown Fortran name-mangling scheme" >&5 echo "$as_me: WARNING: unknown Fortran name-mangling scheme" >&2;} ;; 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 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 # 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 # On Cygwin and AIX, building DLLs doesn't work case $build in *-cygwin* | *-mingw*) coin_disable_shared=yes if test x"$enable_shared" = xyes; then case "$CXX" in clang* ) { echo "$as_me:$LINENO: WARNING: DLL building not supported. I'm disabling your choice." >&5 echo "$as_me: WARNING: DLL building not supported. I'm disabling your choice." >&2;} ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) { echo "$as_me:$LINENO: DLL building not supported, but will build with -MD(d) instead of -MT(d)." >&5 echo "$as_me: DLL building not supported, but will build with -MD(d) instead of -MT(d)." >&6;} ;; *) { echo "$as_me:$LINENO: WARNING: DLL building not supported. I'm disabling your choice." >&5 echo "$as_me: WARNING: DLL building not supported. I'm disabling your choice." >&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. I'm disabling your choice." >&5 echo "$as_me: WARNING: Shared objects are not supported. I'm disabling your choice." >&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='coinutils' VERSION='2.9.10' 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 7492 "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. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif 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 http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _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:9472: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:9476: \$? = $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:9740: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:9744: \$? = $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:9844: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:9848: \$? = $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. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif 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. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif 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 (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #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 (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #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 (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif 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 (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif 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 (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif 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. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif 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. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif 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:14721: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:14725: \$? = $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:14825: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:14829: \$? = $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:16395: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:16399: \$? = $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:16499: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:16503: \$? = $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:18706: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:18710: \$? = $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:18974: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:18978: \$? = $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:19078: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:19082: \$? = $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. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif 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. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif 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 mydos2unix= ;; 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=no fi; # ToDo # For now, don't use the -no-undefined flag, since the Makefiles are # not yet set up that way. But we need to fix this, when we want # to comile DLLs under Windows. 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 } ############################################################################ # Stuff that we need for finite and isnan # ############################################################################ 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_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 http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _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 http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _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=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_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 http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _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 http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _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=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_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 http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _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 http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _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=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_C_FINITE= echo "$as_me:$LINENO: checking whether isfinite is declared" >&5 echo $ECHO_N "checking whether isfinite is declared... $ECHO_C" >&6 if test "${ac_cv_have_decl_isfinite+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. */ #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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { #ifndef isfinite char *p = (char *) isfinite; #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_cv_have_decl_isfinite=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_have_decl_isfinite=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_have_decl_isfinite" >&5 echo "${ECHO_T}$ac_cv_have_decl_isfinite" >&6 if test $ac_cv_have_decl_isfinite = yes; then COIN_C_FINITE=isfinite fi if test -z "$COIN_C_FINITE"; then echo "$as_me:$LINENO: checking whether finite is declared" >&5 echo $ECHO_N "checking whether finite is declared... $ECHO_C" >&6 if test "${ac_cv_have_decl_finite+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. */ #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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { #ifndef finite char *p = (char *) finite; #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_cv_have_decl_finite=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_have_decl_finite=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_have_decl_finite" >&5 echo "${ECHO_T}$ac_cv_have_decl_finite" >&6 if test $ac_cv_have_decl_finite = yes; then COIN_C_FINITE=finite fi if test -z "$COIN_C_FINITE"; then echo "$as_me:$LINENO: checking whether _finite is declared" >&5 echo $ECHO_N "checking whether _finite is declared... $ECHO_C" >&6 if test "${ac_cv_have_decl__finite+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. */ #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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { #ifndef _finite char *p = (char *) _finite; #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_cv_have_decl__finite=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_have_decl__finite=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_have_decl__finite" >&5 echo "${ECHO_T}$ac_cv_have_decl__finite" >&6 if test $ac_cv_have_decl__finite = yes; then COIN_C_FINITE=_finite fi fi fi if test -z "$COIN_C_FINITE"; then { echo "$as_me:$LINENO: WARNING: Cannot find C-function for checking Inf." >&5 echo "$as_me: WARNING: Cannot find C-function for checking Inf." >&2;} else cat >>confdefs.h <<_ACEOF #define COIN_C_FINITE $COIN_C_FINITE _ACEOF 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 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 http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _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 http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _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=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_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 http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _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 http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _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=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_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 http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _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 http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _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=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_C_ISNAN= echo "$as_me:$LINENO: checking whether isnan is declared" >&5 echo $ECHO_N "checking whether isnan is declared... $ECHO_C" >&6 if test "${ac_cv_have_decl_isnan+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. */ #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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { #ifndef isnan char *p = (char *) isnan; #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_cv_have_decl_isnan=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_have_decl_isnan=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_have_decl_isnan" >&5 echo "${ECHO_T}$ac_cv_have_decl_isnan" >&6 if test $ac_cv_have_decl_isnan = yes; then COIN_C_ISNAN=isnan fi # 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 echo "$as_me:$LINENO: checking whether std::isnan(42.42) is declared" >&5 echo $ECHO_N "checking whether std::isnan(42.42) is declared... $ECHO_C" >&6 if test "${ac_cv_have_decl_std__isnan_42_42_+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. */ #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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { #ifndef std::isnan(42.42) char *p = (char *) std::isnan(42.42); #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_cv_have_decl_std__isnan_42_42_=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_have_decl_std__isnan_42_42_=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_have_decl_std__isnan_42_42_" >&5 echo "${ECHO_T}$ac_cv_have_decl_std__isnan_42_42_" >&6 if test $ac_cv_have_decl_std__isnan_42_42_ = yes; then COIN_C_ISNAN=std::isnan fi fi if test -z "$COIN_C_ISNAN"; then echo "$as_me:$LINENO: checking whether _isnan is declared" >&5 echo $ECHO_N "checking whether _isnan is declared... $ECHO_C" >&6 if test "${ac_cv_have_decl__isnan+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. */ #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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { #ifndef _isnan char *p = (char *) _isnan; #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_cv_have_decl__isnan=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_have_decl__isnan=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_have_decl__isnan" >&5 echo "${ECHO_T}$ac_cv_have_decl__isnan" >&6 if test $ac_cv_have_decl__isnan = yes; then COIN_C_ISNAN=_isnan fi fi if test -z "$COIN_C_ISNAN"; then echo "$as_me:$LINENO: checking whether isnand is declared" >&5 echo $ECHO_N "checking whether isnand is declared... $ECHO_C" >&6 if test "${ac_cv_have_decl_isnand+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. */ #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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { #ifndef isnand char *p = (char *) isnand; #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_cv_have_decl_isnand=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_have_decl_isnand=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_have_decl_isnand" >&5 echo "${ECHO_T}$ac_cv_have_decl_isnand" >&6 if test $ac_cv_have_decl_isnand = yes; then COIN_C_ISNAN=isnand fi fi if test -z "$COIN_C_ISNAN"; then { echo "$as_me:$LINENO: WARNING: Cannot find C-function for checking NaN." >&5 echo "$as_me: WARNING: Cannot find C-function for checking NaN." >&2;} else cat >>confdefs.h <<_ACEOF #define COIN_C_ISNAN $COIN_C_ISNAN _ACEOF 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 ############################################################################# # Thread configuration # ############################################################################# # Define new options: # --enable-coinutils-threads # --enable-coinutils-mempool-override-new # --enable-coinutils-mempool-maxpooled 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 # Check whether --enable-coinutils-threads or --disable-coinutils-threads was given. if test "${enable_coinutils_threads+set}" = set; then enableval="$enable_coinutils_threads" fi; if test "$enable_coinutils_threads" = yes; then # Define the preprocessor macro cat >>confdefs.h <<\_ACEOF #define COINUTILS_PTHREADS 1 _ACEOF echo "$as_me:$LINENO: checking for clock_gettime in -lrt" >&5 echo $ECHO_N "checking for clock_gettime in -lrt... $ECHO_C" >&6 if test "${ac_cv_lib_rt_clock_gettime+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lrt $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 clock_gettime (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { clock_gettime (); ; 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 ac_cv_lib_rt_clock_gettime=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_rt_clock_gettime=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_rt_clock_gettime" >&5 echo "${ECHO_T}$ac_cv_lib_rt_clock_gettime" >&6 if test $ac_cv_lib_rt_clock_gettime = yes; then COINUTILSLIB_LIBS="-lrt $COINUTILSLIB_LIBS" COINUTILSLIB_PCLIBS="-lrt $COINUTILSLIB_PCLIBS" else { { echo "$as_me:$LINENO: error: --enable-coinutils-threads selected, but -lrt unavailable" >&5 echo "$as_me: error: --enable-coinutils-threads selected, but -lrt unavailable" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: checking for pthread_create in -lpthread" >&5 echo $ECHO_N "checking for pthread_create in -lpthread... $ECHO_C" >&6 if test "${ac_cv_lib_pthread_pthread_create+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $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 pthread_create (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { pthread_create (); ; 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 ac_cv_lib_pthread_pthread_create=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_pthread_pthread_create=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_pthread_pthread_create" >&5 echo "${ECHO_T}$ac_cv_lib_pthread_pthread_create" >&6 if test $ac_cv_lib_pthread_pthread_create = yes; then COINUTILSLIB_LIBS="-lpthread $COINUTILSLIB_LIBS" COINUTILSLIB_PCLIBS="-lpthread $COINUTILSLIB_PCLIBS" else { { echo "$as_me:$LINENO: error: --enable-coinutils-threads selected, but -lpthreads unavailable" >&5 echo "$as_me: error: --enable-coinutils-threads selected, but -lpthreads unavailable" >&2;} { (exit 1); exit 1; }; } fi fi # Check whether --enable-coinutils-mempool-override-new or --disable-coinutils-mempool-override-new was given. if test "${enable_coinutils_mempool_override_new+set}" = set; then enableval="$enable_coinutils_mempool_override_new" fi; if test "$enable_coinutils_mempool_override_new" = yes; then cat >>confdefs.h <<\_ACEOF #define COINUTILS_MEMPOOL_OVERRIDE_NEW 1 _ACEOF fi # Check whether --enable-coinutils-mempool-maxpooled or --disable-coinutils-mempool-maxpooled was given. if test "${enable_coinutils_mempool_maxpooled+set}" = set; then enableval="$enable_coinutils_mempool_maxpooled" fi; if test "$enable_coinutils_mempool_maxpooled" = yes; then cat >>confdefs.h <<\_ACEOF #define COINUTILS_MEMPOOL_MAXPOOLED 4096 _ACEOF elif test "$enable_coinutils_mempool_maxpooled" = no; then cat >>confdefs.h <<\_ACEOF #define COINUTILS_MEMPOOL_MAXPOOLED -1 _ACEOF elif test x"$enable_coinutils_mempool_maxpooled" = x; then cat >>confdefs.h <<\_ACEOF #define COINUTILS_MEMPOOL_MAXPOOLED -1 _ACEOF else cat >>confdefs.h <<_ACEOF #define COINUTILS_MEMPOOL_MAXPOOLED ${enable_coinutils_mempool_maxpooled} _ACEOF fi ############################################################################# # Finding certain integer types # ############################################################################# 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([cinttypes],[],[],[$hdr]) for ac_header in cinttypes 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 http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _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_cinttypes" != "yes"; then #if test x"" = x; then # hdr="#include " #else # hdr="" #fi #AC_CHECK_HEADERS([inttypes.h],[],[],[$hdr]) for ac_header in inttypes.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 http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _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=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_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([cstdint],[],[],[$hdr]) for ac_header in cstdint 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 http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _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_cstdint" != "yes"; then #if test x"" = x; then # hdr="#include " #else # hdr="" #fi #AC_CHECK_HEADERS([stdint.h],[],[],[$hdr]) for ac_header in stdint.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 http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _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=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 ##### 64bit Integer types # The problem here is that you can't extend `int64_t' to `unsigned int64_t'. # So we need distinct CoinInt64 and CoinUInt64. It should be safe to assume # uint64_t, given int64_t. CoinInt64= CoinUInt64= # try int64_t echo "$as_me:$LINENO: checking for int64_t" >&5 echo $ECHO_N "checking for int64_t... $ECHO_C" >&6 if test "${ac_cv_type_int64_t+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. */ #ifdef HAVE_CINTTYPES # include #else # ifdef HAVE_INTTYPES_H # include # endif #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { if ((int64_t *) 0) return 0; if (sizeof (int64_t)) return 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 ac_cv_type_int64_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_int64_t=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_int64_t" >&5 echo "${ECHO_T}$ac_cv_type_int64_t" >&6 if test $ac_cv_type_int64_t = yes; then CoinInt64=int64_t ; CoinUInt64=uint64_t fi # We need to use the C compiler in the AC_CHECK_SIZEOF since otherwise the # MSCV compiler complains about redefinition of "exit". ac_cv_sizeof_ # sometimes adds `^M' to the number, hence the check for `8?'. 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 # try long long if test x"$CoinInt64" = x; then echo "$as_me:$LINENO: checking for long long" >&5 echo $ECHO_N "checking for long long... $ECHO_C" >&6 if test "${ac_cv_type_long_long+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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { if ((long long *) 0) return 0; if (sizeof (long long)) return 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_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_type_long_long=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_long_long=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5 echo "${ECHO_T}$ac_cv_type_long_long" >&6 echo "$as_me:$LINENO: checking size of long long" >&5 echo $ECHO_N "checking size of long long... $ECHO_C" >&6 if test "${ac_cv_sizeof_long_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_long_long" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long long))) >= 0)]; test_array [0] = 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_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_lo=0 ac_mid=0 while :; do 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long long))) <= $ac_mid)]; test_array [0] = 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_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_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long long))) < 0)]; test_array [0] = 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_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_hi=-1 ac_mid=-1 while :; do 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long long))) >= $ac_mid)]; test_array [0] = 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_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_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long long))) <= $ac_mid)]; test_array [0] = 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_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_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_long_long=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long long), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } 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 long longval () { return (long) (sizeof (long long)); } unsigned long ulongval () { return (long) (sizeof (long long)); } #include #include #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (long long))) < 0) { long i = longval (); if (i != ((long) (sizeof (long long)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (long long)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 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 ac_cv_sizeof_long_long=`cat conftest.val` 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 ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long long), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_long_long=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_long" >&5 echo "${ECHO_T}$ac_cv_sizeof_long_long" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long _ACEOF case $ac_cv_sizeof_long_long in 8 | 8?) CoinInt64="long long" CoinUInt64="unsigned long long" ;; esac fi #try long if test x"$CoinInt64" = x; then echo "$as_me:$LINENO: checking for long" >&5 echo $ECHO_N "checking for long... $ECHO_C" >&6 if test "${ac_cv_type_long+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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { if ((long *) 0) return 0; if (sizeof (long)) return 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_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_type_long=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_long=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5 echo "${ECHO_T}$ac_cv_type_long" >&6 echo "$as_me:$LINENO: checking size of long" >&5 echo $ECHO_N "checking size of long... $ECHO_C" >&6 if test "${ac_cv_sizeof_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_long" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) >= 0)]; test_array [0] = 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_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_lo=0 ac_mid=0 while :; do 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; test_array [0] = 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_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_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) < 0)]; test_array [0] = 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_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_hi=-1 ac_mid=-1 while :; do 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) >= $ac_mid)]; test_array [0] = 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_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_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; test_array [0] = 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_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_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_long=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } 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 long longval () { return (long) (sizeof (long)); } unsigned long ulongval () { return (long) (sizeof (long)); } #include #include #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (long))) < 0) { long i = longval (); if (i != ((long) (sizeof (long)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (long)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 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 ac_cv_sizeof_long=`cat conftest.val` 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 ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_long=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5 echo "${ECHO_T}$ac_cv_sizeof_long" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG $ac_cv_sizeof_long _ACEOF case $ac_cv_sizeof_long in 8 | 8?) CoinInt64="long" CoinUInt64="unsigned long" ;; esac fi #try int if test x"$CoinInt64" = x; then echo "$as_me:$LINENO: checking for int" >&5 echo $ECHO_N "checking for int... $ECHO_C" >&6 if test "${ac_cv_type_int+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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { if ((int *) 0) return 0; if (sizeof (int)) return 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_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_type_int=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_int=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5 echo "${ECHO_T}$ac_cv_type_int" >&6 echo "$as_me:$LINENO: checking size of int" >&5 echo $ECHO_N "checking size of int... $ECHO_C" >&6 if test "${ac_cv_sizeof_int+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_int" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) >= 0)]; test_array [0] = 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_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_lo=0 ac_mid=0 while :; do 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; test_array [0] = 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_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_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) < 0)]; test_array [0] = 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_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_hi=-1 ac_mid=-1 while :; do 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) >= $ac_mid)]; test_array [0] = 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_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_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; test_array [0] = 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_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_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_int=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } 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 long longval () { return (long) (sizeof (int)); } unsigned long ulongval () { return (long) (sizeof (int)); } #include #include #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (int))) < 0) { long i = longval (); if (i != ((long) (sizeof (int)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (int)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 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 ac_cv_sizeof_int=`cat conftest.val` 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 ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_int=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5 echo "${ECHO_T}$ac_cv_sizeof_int" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_INT $ac_cv_sizeof_int _ACEOF case $ac_cv_sizeof_int in 8 | 8?) CoinInt64="int" CoinUInt64="unsigned int" ;; esac 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 if test x"$CoinInt64" = x; then { { echo "$as_me:$LINENO: error: Cannot find integer type with 64 bits" >&5 echo "$as_me: error: Cannot find integer type with 64 bits" >&2;} { (exit 1); exit 1; }; } fi cat >>confdefs.h <<_ACEOF #define COIN_INT64_T $CoinInt64 _ACEOF cat >>confdefs.h <<_ACEOF #define COIN_UINT64_T $CoinInt64 _ACEOF ##### Integer type for Pointer CoinIntPtr= # try intptr_t echo "$as_me:$LINENO: checking for intptr_t" >&5 echo $ECHO_N "checking for intptr_t... $ECHO_C" >&6 if test "${ac_cv_type_intptr_t+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. */ #ifdef HAVE_CINTTYPES # include #else # ifdef HAVE_INTTYPES_H # include # endif #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { if ((intptr_t *) 0) return 0; if (sizeof (intptr_t)) return 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 ac_cv_type_intptr_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_intptr_t=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_intptr_t" >&5 echo "${ECHO_T}$ac_cv_type_intptr_t" >&6 if test $ac_cv_type_intptr_t = yes; then CoinIntPtr=intptr_t 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 # try long long if test x"$CoinIntPtr" = x; then echo "$as_me:$LINENO: checking for int *" >&5 echo $ECHO_N "checking for int *... $ECHO_C" >&6 if test "${ac_cv_type_int_p+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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { if ((int * *) 0) return 0; if (sizeof (int *)) return 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_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_type_int_p=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_int_p=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_int_p" >&5 echo "${ECHO_T}$ac_cv_type_int_p" >&6 echo "$as_me:$LINENO: checking size of int *" >&5 echo $ECHO_N "checking size of int *... $ECHO_C" >&6 if test "${ac_cv_sizeof_int_p+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_int_p" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (int *))) >= 0)]; test_array [0] = 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_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_lo=0 ac_mid=0 while :; do 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (int *))) <= $ac_mid)]; test_array [0] = 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_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_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (int *))) < 0)]; test_array [0] = 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_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_hi=-1 ac_mid=-1 while :; do 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (int *))) >= $ac_mid)]; test_array [0] = 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_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_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (int *))) <= $ac_mid)]; test_array [0] = 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_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_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_int_p=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int *), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (int *), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } 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 long longval () { return (long) (sizeof (int *)); } unsigned long ulongval () { return (long) (sizeof (int *)); } #include #include #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (int *))) < 0) { long i = longval (); if (i != ((long) (sizeof (int *)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (int *)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 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 ac_cv_sizeof_int_p=`cat conftest.val` 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 ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (int *), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (int *), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_int_p=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_int_p" >&5 echo "${ECHO_T}$ac_cv_sizeof_int_p" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_INT_P $ac_cv_sizeof_int_p _ACEOF echo "$as_me:$LINENO: checking for long long" >&5 echo $ECHO_N "checking for long long... $ECHO_C" >&6 if test "${ac_cv_type_long_long+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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { if ((long long *) 0) return 0; if (sizeof (long long)) return 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_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_type_long_long=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_long_long=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5 echo "${ECHO_T}$ac_cv_type_long_long" >&6 echo "$as_me:$LINENO: checking size of long long" >&5 echo $ECHO_N "checking size of long long... $ECHO_C" >&6 if test "${ac_cv_sizeof_long_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_long_long" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long long))) >= 0)]; test_array [0] = 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_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_lo=0 ac_mid=0 while :; do 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long long))) <= $ac_mid)]; test_array [0] = 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_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_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long long))) < 0)]; test_array [0] = 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_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_hi=-1 ac_mid=-1 while :; do 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long long))) >= $ac_mid)]; test_array [0] = 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_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_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long long))) <= $ac_mid)]; test_array [0] = 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_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_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_long_long=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long long), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } 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 long longval () { return (long) (sizeof (long long)); } unsigned long ulongval () { return (long) (sizeof (long long)); } #include #include #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (long long))) < 0) { long i = longval (); if (i != ((long) (sizeof (long long)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (long long)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 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 ac_cv_sizeof_long_long=`cat conftest.val` 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 ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long long), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_long_long=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_long" >&5 echo "${ECHO_T}$ac_cv_sizeof_long_long" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long _ACEOF if test "$ac_cv_sizeof_long_long" = "$ac_cv_sizeof_int_p"; then CoinIntPtr="long long" fi fi # try long if test x"$CoinIntPtr" = x; then echo "$as_me:$LINENO: checking for long" >&5 echo $ECHO_N "checking for long... $ECHO_C" >&6 if test "${ac_cv_type_long+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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { if ((long *) 0) return 0; if (sizeof (long)) return 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_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_type_long=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_long=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5 echo "${ECHO_T}$ac_cv_type_long" >&6 echo "$as_me:$LINENO: checking size of long" >&5 echo $ECHO_N "checking size of long... $ECHO_C" >&6 if test "${ac_cv_sizeof_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_long" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) >= 0)]; test_array [0] = 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_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_lo=0 ac_mid=0 while :; do 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; test_array [0] = 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_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_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) < 0)]; test_array [0] = 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_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_hi=-1 ac_mid=-1 while :; do 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) >= $ac_mid)]; test_array [0] = 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_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_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; test_array [0] = 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_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_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_long=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } 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 long longval () { return (long) (sizeof (long)); } unsigned long ulongval () { return (long) (sizeof (long)); } #include #include #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (long))) < 0) { long i = longval (); if (i != ((long) (sizeof (long)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (long)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 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 ac_cv_sizeof_long=`cat conftest.val` 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 ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_long=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5 echo "${ECHO_T}$ac_cv_sizeof_long" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG $ac_cv_sizeof_long _ACEOF if test "$ac_cv_sizeof_long" = "$ac_cv_sizeof_int_p"; then CoinIntPtr="long" fi fi # try int if test x"$CoinIntPtr" = x; then echo "$as_me:$LINENO: checking for int" >&5 echo $ECHO_N "checking for int... $ECHO_C" >&6 if test "${ac_cv_type_int+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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { if ((int *) 0) return 0; if (sizeof (int)) return 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_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_type_int=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_int=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5 echo "${ECHO_T}$ac_cv_type_int" >&6 echo "$as_me:$LINENO: checking size of int" >&5 echo $ECHO_N "checking size of int... $ECHO_C" >&6 if test "${ac_cv_sizeof_int+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_int" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) >= 0)]; test_array [0] = 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_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_lo=0 ac_mid=0 while :; do 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; test_array [0] = 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_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_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) < 0)]; test_array [0] = 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_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_hi=-1 ac_mid=-1 while :; do 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) >= $ac_mid)]; test_array [0] = 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_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_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` 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 #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; test_array [0] = 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_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_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_int=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } 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 long longval () { return (long) (sizeof (int)); } unsigned long ulongval () { return (long) (sizeof (int)); } #include #include #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (int))) < 0) { long i = longval (); if (i != ((long) (sizeof (int)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (int)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 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 ac_cv_sizeof_int=`cat conftest.val` 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 ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_int=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5 echo "${ECHO_T}$ac_cv_sizeof_int" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_INT $ac_cv_sizeof_int _ACEOF if test "$ac_cv_sizeof_int" = "$ac_cv_sizeof_int_p"; then CoinIntPtr="int" fi 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 if test x"$CoinIntPtr" = x; then { { echo "$as_me:$LINENO: error: Cannot find integer type capturing pointer" >&5 echo "$as_me: error: Cannot find integer type capturing pointer" >&2;} { (exit 1); exit 1; }; } fi cat >>confdefs.h <<_ACEOF #define COIN_INTPTR_T $CoinIntPtr _ACEOF if test "x$ac_cv_header_stdint_h" = xyes ; then cat >>confdefs.h <<\_ACEOF #define COINUTILS_HAS_STDINT_H 1 _ACEOF fi ############################################################################# # Check whether we have windows.h # ############################################################################# for ac_header in windows.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 http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _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 ############################################################################# # Check whether we have endian.h # ############################################################################# for ac_header in endian.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 http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _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 ############################################################################# # COIN-OR components # ############################################################################# if test $coin_cc_is_cl != true ; then COINUTILSLIB_LIBS="-lm $COINUTILSLIB_LIBS" COINUTILSLIB_PCLIBS="-lm $COINUTILSLIB_PCLIBS" COINUTILSLIB_LIBS_INSTALLED="-lm $COINUTILSLIB_LIBS_INSTALLED" fi # 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 # Check whether --with-blas or --without-blas was given. if test "${with_blas+set}" = set; then withval="$with_blas" use_blas="$withval" else use_blas= fi; # if user specified --with-blas-lib, then we should give COIN_CHECK_PACKAGE # preference # Check whether --with-blas-lib or --without-blas-lib was given. if test "${with_blas_lib+set}" = set; then withval="$with_blas_lib" use_blas=BUILD fi; # 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 echo "$as_me:$LINENO: checking whether user supplied BLASLIB=\"$use_blas\" works" >&5 echo $ECHO_N "checking whether user supplied BLASLIB=\"$use_blas\" works... $ECHO_C" >&6 coin_need_flibs=no coin_save_LIBS="$LIBS" LIBS="$use_blas $LIBS" case $ac_ext in f) cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { call daxpy ; 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 if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&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: user supplied BLAS library \"$use_blas\" does not work" >&5 echo "$as_me: error: user supplied BLAS library \"$use_blas\" does not work" >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; c) 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 case $ac_cv_f77_mangling in upper*) ac_val="DAXPY" ;; lower*) ac_val="daxpy" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdaxpy="$ac_val" 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"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdaxpy(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; 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 flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdaxpy(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; 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 LIBS="$flink_save_libs" coin_need_flibs=yes if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: user supplied BLAS library \"$use_blas\" does not work" >&5 echo "$as_me: error: user supplied BLAS library \"$use_blas\" does not work" >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: user supplied BLAS library \"$use_blas\" does not work" >&5 echo "$as_me: error: user supplied BLAS library \"$use_blas\" does not work" >&2;} { (exit 1); exit 1; }; } fi fi ;; cc|cpp) 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 case $ac_cv_f77_mangling in upper*) ac_val="DAXPY" ;; lower*) ac_val="daxpy" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdaxpy="$ac_val" 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"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdaxpy();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; 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 flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdaxpy();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; 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 LIBS="$flink_save_libs" coin_need_flibs=yes if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: user supplied BLAS library \"$use_blas\" does not work" >&5 echo "$as_me: error: user supplied BLAS library \"$use_blas\" does not work" >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: user supplied BLAS library \"$use_blas\" does not work" >&5 echo "$as_me: error: user supplied BLAS library \"$use_blas\" does not work" >&2;} { (exit 1); exit 1; }; } fi fi ;; esac 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-*) echo "$as_me:$LINENO: checking whether -lcomplib.sgimath has BLAS" >&5 echo $ECHO_N "checking whether -lcomplib.sgimath has BLAS... $ECHO_C" >&6 coin_need_flibs=no coin_save_LIBS="$LIBS" LIBS="-lcomplib.sgimath $LIBS" case $ac_ext in f) cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { call daxpy ; 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 use_blas="-lcomplib.sgimath" if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&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 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; c) 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 case $ac_cv_f77_mangling in upper*) ac_val="DAXPY" ;; lower*) ac_val="daxpy" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdaxpy="$ac_val" 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"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdaxpy(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; 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 flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_blas="-lcomplib.sgimath" if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdaxpy(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; 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 LIBS="$flink_save_libs" coin_need_flibs=yes use_blas="-lcomplib.sgimath" if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" 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 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; cc|cpp) 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 case $ac_cv_f77_mangling in upper*) ac_val="DAXPY" ;; lower*) ac_val="daxpy" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdaxpy="$ac_val" 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"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdaxpy();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; 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 flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_blas="-lcomplib.sgimath" if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdaxpy();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; 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 LIBS="$flink_save_libs" coin_need_flibs=yes use_blas="-lcomplib.sgimath" if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" 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 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; esac 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*) echo "$as_me:$LINENO: checking for BLAS in libsunperf" >&5 echo $ECHO_N "checking for BLAS in libsunperf... $ECHO_C" >&6 coin_need_flibs=no coin_save_LIBS="$LIBS" LIBS="-lsunperf $FLIBS $LIBS" case $ac_ext in f) cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { call daxpy ; 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 use_blas='-lsunperf' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&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 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; c) 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 case $ac_cv_f77_mangling in upper*) ac_val="DAXPY" ;; lower*) ac_val="daxpy" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdaxpy="$ac_val" 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"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdaxpy(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; 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 flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_blas='-lsunperf' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdaxpy(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; 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 LIBS="$flink_save_libs" coin_need_flibs=yes use_blas='-lsunperf' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" 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 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; cc|cpp) 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 case $ac_cv_f77_mangling in upper*) ac_val="DAXPY" ;; lower*) ac_val="daxpy" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdaxpy="$ac_val" 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"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdaxpy();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; 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 flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_blas='-lsunperf' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdaxpy();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; 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 LIBS="$flink_save_libs" coin_need_flibs=yes use_blas='-lsunperf' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" 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 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; esac LIBS="$coin_save_LIBS" ;; *-cygwin* | *-mingw*) case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) coin_save_LIBS="$LIBS" echo "$as_me:$LINENO: checking for BLAS in MKL (32bit)" >&5 echo $ECHO_N "checking for BLAS in MKL (32bit)... $ECHO_C" >&6 LIBS="mkl_intel_c.lib mkl_sequential.lib mkl_core.lib $LIBS" case $ac_ext in f) cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { call daxpy ; 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 use_blas='mkl_intel_c.lib mkl_sequential.lib mkl_core.lib' echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&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 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; c) 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 case $ac_cv_f77_mangling in upper*) ac_val="DAXPY" ;; lower*) ac_val="daxpy" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdaxpy="$ac_val" 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"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdaxpy(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; 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 flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_blas='mkl_intel_c.lib mkl_sequential.lib mkl_core.lib' echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdaxpy(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; 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 LIBS="$flink_save_libs" coin_need_flibs=yes use_blas='mkl_intel_c.lib mkl_sequential.lib mkl_core.lib' echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" 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 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; cc|cpp) 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 case $ac_cv_f77_mangling in upper*) ac_val="DAXPY" ;; lower*) ac_val="daxpy" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdaxpy="$ac_val" 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"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdaxpy();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; 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 flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_blas='mkl_intel_c.lib mkl_sequential.lib mkl_core.lib' echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdaxpy();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; 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 LIBS="$flink_save_libs" coin_need_flibs=yes use_blas='mkl_intel_c.lib mkl_sequential.lib mkl_core.lib' echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" 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 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; esac LIBS="$coin_save_LIBS" if test "x$use_blas" = x ; then echo "$as_me:$LINENO: checking for BLAS in MKL (64bit)" >&5 echo $ECHO_N "checking for BLAS in MKL (64bit)... $ECHO_C" >&6 LIBS="mkl_intel_lp64.lib mkl_sequential.lib mkl_core.lib $LIBS" case $ac_ext in f) cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { call daxpy ; 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 use_blas='mkl_intel_lp64.lib mkl_sequential.lib mkl_core.lib' echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&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 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; c) 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 case $ac_cv_f77_mangling in upper*) ac_val="DAXPY" ;; lower*) ac_val="daxpy" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdaxpy="$ac_val" 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"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdaxpy(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; 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 flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_blas='mkl_intel_lp64.lib mkl_sequential.lib mkl_core.lib' echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdaxpy(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; 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 LIBS="$flink_save_libs" coin_need_flibs=yes use_blas='mkl_intel_lp64.lib mkl_sequential.lib mkl_core.lib' echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" 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 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; cc|cpp) 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 case $ac_cv_f77_mangling in upper*) ac_val="DAXPY" ;; lower*) ac_val="daxpy" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdaxpy="$ac_val" 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"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdaxpy();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; 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 flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_blas='mkl_intel_lp64.lib mkl_sequential.lib mkl_core.lib' echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdaxpy();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; 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 LIBS="$flink_save_libs" coin_need_flibs=yes use_blas='mkl_intel_lp64.lib mkl_sequential.lib mkl_core.lib' echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" 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 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; esac LIBS="$coin_save_LIBS" fi ;; esac ;; *-darwin*) echo "$as_me:$LINENO: checking for BLAS in Veclib" >&5 echo $ECHO_N "checking for BLAS in Veclib... $ECHO_C" >&6 coin_need_flibs=no coin_save_LIBS="$LIBS" LIBS="-framework vecLib $LIBS" case $ac_ext in f) cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { call daxpy ; 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 use_blas='-framework vecLib' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&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 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; c) 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 case $ac_cv_f77_mangling in upper*) ac_val="DAXPY" ;; lower*) ac_val="daxpy" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdaxpy="$ac_val" 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"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdaxpy(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; 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 flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_blas='-framework vecLib' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdaxpy(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; 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 LIBS="$flink_save_libs" coin_need_flibs=yes use_blas='-framework vecLib' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" 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 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; cc|cpp) 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 case $ac_cv_f77_mangling in upper*) ac_val="DAXPY" ;; lower*) ac_val="daxpy" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdaxpy="$ac_val" 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"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdaxpy();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; 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 flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_blas='-framework vecLib' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdaxpy();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; 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 LIBS="$flink_save_libs" coin_need_flibs=yes use_blas='-framework vecLib' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" 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 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; esac LIBS="$coin_save_LIBS" ;; esac if test -z "$use_blas" ; then echo "$as_me:$LINENO: checking whether -lblas has BLAS" >&5 echo $ECHO_N "checking whether -lblas has BLAS... $ECHO_C" >&6 coin_need_flibs=no coin_save_LIBS="$LIBS" LIBS="-lblas $LIBS" case $ac_ext in f) cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { call daxpy ; 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 use_blas='-lblas' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&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 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; c) 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 case $ac_cv_f77_mangling in upper*) ac_val="DAXPY" ;; lower*) ac_val="daxpy" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdaxpy="$ac_val" 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"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdaxpy(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; 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 flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_blas='-lblas' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdaxpy(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; 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 LIBS="$flink_save_libs" coin_need_flibs=yes use_blas='-lblas' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" 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 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; cc|cpp) 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 case $ac_cv_f77_mangling in upper*) ac_val="DAXPY" ;; lower*) ac_val="daxpy" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdaxpy="$ac_val" 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"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdaxpy();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; 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 flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_blas='-lblas' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdaxpy();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; 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 LIBS="$flink_save_libs" coin_need_flibs=yes use_blas='-lblas' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" 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 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; esac 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 echo "$as_me:$LINENO: checking for COIN-OR package Blas" >&5 echo $ECHO_N "checking for COIN-OR package Blas... $ECHO_C" >&6 coin_has_blas=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 = "Blas"; then coin_has_blas=skipping fi done fi if test "$coin_has_blas" != skipping; then # Check whether --with-m4_tolower(Blas) or --without-m4_tolower(Blas) was given. if test "${with_blas+set}" = set; then withval="$with_blas" if test "$withval" = no ; then coin_has_blas=skipping fi fi; fi BLAS_LIBS= BLAS_CFLAGS= BLAS_DATA= BLAS_DEPENDENCIES= BLAS_PCLIBS= BLAS_PCREQUIRES= BLAS_DATA= #check if user provided LIBS, CFLAGS, or DATA for package or disables use of package if test $coin_has_blas != skipping; then # Check whether --with-m4_tolower(Blas)-lib or --without-m4_tolower(Blas)-lib was given. if test "${with_blas_lib+set}" = set; then withval="$with_blas_lib" if test "$withval" = no ; then coin_has_blas=skipping else coin_has_blas=yes BLAS_LIBS="$withval" BLAS_PCLIBS="$withval" COINUTILSLIB_PCLIBS="$withval $COINUTILSLIB_PCLIBS" COINUTILSLIB_LIBS="$withval $COINUTILSLIB_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 BLAS_LIBS_INSTALLED="$withval" COINUTILSLIB_LIBS_INSTALLED="$withval $COINUTILSLIB_LIBS_INSTALLED" fi fi fi; fi if test $coin_has_blas != skipping; then # Check whether --with-m4_tolower(Blas)-incdir or --without-m4_tolower(Blas)-incdir was given. if test "${with_blas_incdir+set}" = set; then withval="$with_blas_incdir" if test "$withval" = no ; then coin_has_blas=skipping else coin_has_blas=yes BLAS_CFLAGS="-I`${CYGPATH_W} $withval`" COINUTILSLIB_CFLAGS="-I`${CYGPATH_W} $withval` $COINUTILSLIB_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 BLAS_CFLAGS_INSTALLED="$BLAS_CFLAGS" COINUTILSLIB_CFLAGS_INSTALLED="$BLAS_CFLAGS $COINUTILSLIB_CFLAGS_INSTALLED" fi fi fi; fi if test $coin_has_blas != skipping; then # Check whether --with-m4_tolower(Blas)-datadir or --without-m4_tolower(Blas)-datadir was given. if test "${with_blas_datadir+set}" = set; then withval="$with_blas_datadir" if test "$withval" = no ; then coin_has_blas=skipping else coin_has_blas=yes BLAS_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 BLAS_DATA_INSTALLED="$withval" fi fi fi; fi if test $coin_has_blas = 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 "coinblas"; then BLAS_VERSIONS=`$PKG_CONFIG --modversion "coinblas" 2>/dev/null | tr '\n' ' '` cflags=`$PKG_CONFIG --cflags "coinblas" 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 BLAS_CFLAGS="$cflags" BLAS_LIBS=`$PKG_CONFIG --libs "coinblas" 2>/dev/null` BLAS_DATA=`$PKG_CONFIG --variable=datadir "coinblas" 2>/dev/null` coin_has_blas=yes echo "$as_me:$LINENO: result: yes: $BLAS_VERSIONS" >&5 echo "${ECHO_T}yes: $BLAS_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 BLAS_LIBS=`echo " $BLAS_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` fi BLAS_PCREQUIRES="coinblas" # augment X_PCREQUIRES, X_CFLAGS, and X_LIBS for each build target X in CoinUtilsLib COINUTILSLIB_PCREQUIRES="coinblas $COINUTILSLIB_PCREQUIRES" COINUTILSLIB_CFLAGS="$BLAS_CFLAGS $COINUTILSLIB_CFLAGS" COINUTILSLIB_LIBS="$BLAS_LIBS $COINUTILSLIB_LIBS" else BLAS_PKG_ERRORS=`$PKG_CONFIG $pkg_short_errors --errors-to-stdout --print-errors "coinblas"` coin_has_blas=notGiven echo "$as_me:$LINENO: result: not given: $BLAS_PKG_ERRORS" >&5 echo "${ECHO_T}not given: $BLAS_PKG_ERRORS" >&6 fi else { { echo "$as_me:$LINENO: error: \"Cannot check for existance of module Blas without pkg-config\"" >&5 echo "$as_me: error: \"Cannot check for existance of module Blas 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 Blas (fallback)" >&5 echo $ECHO_N "checking for COIN-OR package Blas (fallback)... $ECHO_C" >&6 coin_has_blas=notGiven BLAS_LIBS= BLAS_LIBS_INSTALLED= BLAS_CFLAGS= BLAS_CFLAGS_INSTALLED= BLAS_DATA= BLAS_DATA_INSTALLED= BLAS_PCLIBS= BLAS_PCREQUIRES= # initial list of dependencies is "coinblas", but we need to filter out version number specifications (= x, <= x, >= x, != x) projtoprocess="coinblas" # 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$BLAS_DATA" = x ; then projdatadir= pcfilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcfile` eval `sh -c "$pcfilemod"` BLAS_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$BLAS_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 BLAS_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 BLAS_CFLAGS="$projcflags $BLAS_CFLAGS" # set LIBS variable BLAS_LIBS="$projlibs $BLAS_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 BLAS_CFLAGS_INSTALLED="$projcflags $BLAS_CFLAGS_INSTALLED" # set LIBS variable BLAS_LIBS_INSTALLED="$projlibs $BLAS_LIBS_INSTALLED" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # finish up coin_has_blas=yes echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 cat >>confdefs.h <<\_ACEOF #define COIN_HAS_BLAS 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 BLAS_LIBS=`echo " $BLAS_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` BLAS_LIBS_INSTALLED=`echo " $BLAS_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 BLAS_PCREQUIRES="coinblas" COINUTILSLIB_PCREQUIRES="coinblas $COINUTILSLIB_PCREQUIRES" COINUTILSLIB_CFLAGS="$BLAS_CFLAGS $COINUTILSLIB_CFLAGS" COINUTILSLIB_LIBS="$BLAS_LIBS $COINUTILSLIB_LIBS" COINUTILSLIB_CFLAGS_INSTALLED="$BLAS_CFLAGS_INSTALLED $COINUTILSLIB_CFLAGS_INSTALLED" COINUTILSLIB_LIBS_INSTALLED="$BLAS_LIBS_INSTALLED $COINUTILSLIB_LIBS_INSTALLED" fi if test $coin_has_blas != notGiven && test $coin_has_blas != skipping; then COIN_HAS_BLAS_TRUE= COIN_HAS_BLAS_FALSE='#' else COIN_HAS_BLAS_TRUE='#' COIN_HAS_BLAS_FALSE= fi fi else echo "$as_me:$LINENO: result: $coin_has_blas" >&5 echo "${ECHO_T}$coin_has_blas" >&6 fi if test $coin_has_blas != skipping && test $coin_has_blas != notGiven ; then cat >>confdefs.h <<\_ACEOF #define COIN_HAS_BLAS 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) BLAS_DEPENDENCIES=`echo " $BLAS_LIBS" | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` COINUTILSLIB_DEPENDENCIES=`echo " $COINUTILSLIB_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 "$BLAS_CFLAGS" ; then { echo "$as_me:$LINENO: Blas CFLAGS are $BLAS_CFLAGS" >&5 echo "$as_me: Blas CFLAGS are $BLAS_CFLAGS" >&6;} fi if test -n "$BLAS_LIBS" ; then { echo "$as_me:$LINENO: Blas LIBS are $BLAS_LIBS" >&5 echo "$as_me: Blas LIBS are $BLAS_LIBS" >&6;} fi if test -n "$BLAS_DEPENDENCIES" ; then { echo "$as_me:$LINENO: Blas DEPENDENCIES are $BLAS_DEPENDENCIES" >&5 echo "$as_me: Blas DEPENDENCIES are $BLAS_DEPENDENCIES" >&6;} fi if test -n "$BLAS_DATA" ; then { echo "$as_me:$LINENO: Blas DATA is $BLAS_DATA" >&5 echo "$as_me: Blas DATA is $BLAS_DATA" >&6;} fi if test -n "$BLAS_PCLIBS" ; then { echo "$as_me:$LINENO: Blas PCLIBS are $BLAS_PCLIBS" >&5 echo "$as_me: Blas PCLIBS are $BLAS_PCLIBS" >&6;} fi if test -n "$BLAS_PCREQUIRES" ; then { echo "$as_me:$LINENO: Blas PCREQUIRES are $BLAS_PCREQUIRES" >&5 echo "$as_me: Blas PCREQUIRES are $BLAS_PCREQUIRES" >&6;} fi { echo "$as_me:$LINENO: CoinUtilsLib CFLAGS are $COINUTILSLIB_CFLAGS" >&5 echo "$as_me: CoinUtilsLib CFLAGS are $COINUTILSLIB_CFLAGS" >&6;} { echo "$as_me:$LINENO: CoinUtilsLib LIBS are $COINUTILSLIB_LIBS" >&5 echo "$as_me: CoinUtilsLib LIBS are $COINUTILSLIB_LIBS" >&6;} { echo "$as_me:$LINENO: CoinUtilsLib DEPENDENCIES are $COINUTILSLIB_DEPENDENCIES" >&5 echo "$as_me: CoinUtilsLib DEPENDENCIES are $COINUTILSLIB_DEPENDENCIES" >&6;} fi fi # Define the Makefile conditional if test $coin_has_blas != notGiven && test $coin_has_blas != skipping; then COIN_HAS_BLAS_TRUE= COIN_HAS_BLAS_FALSE='#' else COIN_HAS_BLAS_TRUE='#' COIN_HAS_BLAS_FALSE= fi elif test "x$use_blas" != x && test "$use_blas" != no; then coin_has_blas=yes if test 0 = 0; then COIN_HAS_BLAS_TRUE= COIN_HAS_BLAS_FALSE='#' else COIN_HAS_BLAS_TRUE='#' COIN_HAS_BLAS_FALSE= fi cat >>confdefs.h <<\_ACEOF #define COIN_HAS_BLAS 1 _ACEOF BLAS_LIBS="$use_blas" BLAS_CFLAGS= BLAS_DATA= COINUTILSLIB_PCLIBS="$BLAS_LIBS $COINUTILSLIB_PCLIBS" COINUTILSLIB_LIBS="$BLAS_LIBS $COINUTILSLIB_LIBS" COINUTILSLIB_LIBS_INSTALLED="$BLAS_LIBS $COINUTILSLIB_LIBS_INSTALLED" else coin_has_blas=no if test 0 = 1; then COIN_HAS_BLAS_TRUE= COIN_HAS_BLAS_FALSE='#' else COIN_HAS_BLAS_TRUE='#' COIN_HAS_BLAS_FALSE= fi fi # Check whether --with-lapack or --without-lapack was given. if test "${with_lapack+set}" = set; then withval="$with_lapack" use_lapack=$withval else use_lapack= fi; #if user specified --with-lapack-lib, then we should give COIN_HAS_PACKAGE preference # Check whether --with-lapack-lib or --without-lapack-lib was given. if test "${with_lapack_lib+set}" = set; then withval="$with_lapack_lib" use_lapack=BUILD fi; # 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 echo "$as_me:$LINENO: checking whether user supplied LAPACKLIB=\"$use_lapack\" works" >&5 echo $ECHO_N "checking whether user supplied LAPACKLIB=\"$use_lapack\" works... $ECHO_C" >&6 coin_need_flibs=no use_lapack="$use_lapack $BLAS_LIBS" coin_save_LIBS="$LIBS" LIBS="$use_lapack $LIBS" case $ac_ext in f) cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { call dsyev ; 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 if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&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: user supplied LAPACK library \"$use_lapack\" does not work" >&5 echo "$as_me: error: user supplied LAPACK library \"$use_lapack\" does not work" >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; c) 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 case $ac_cv_f77_mangling in upper*) ac_val="DSYEV" ;; lower*) ac_val="dsyev" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdsyev="$ac_val" 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"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdsyev(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; 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 flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdsyev(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; 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 LIBS="$flink_save_libs" coin_need_flibs=yes if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: user supplied LAPACK library \"$use_lapack\" does not work" >&5 echo "$as_me: error: user supplied LAPACK library \"$use_lapack\" does not work" >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: user supplied LAPACK library \"$use_lapack\" does not work" >&5 echo "$as_me: error: user supplied LAPACK library \"$use_lapack\" does not work" >&2;} { (exit 1); exit 1; }; } fi fi ;; cc|cpp) 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 case $ac_cv_f77_mangling in upper*) ac_val="DSYEV" ;; lower*) ac_val="dsyev" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdsyev="$ac_val" 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"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdsyev();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; 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 flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdsyev();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; 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 LIBS="$flink_save_libs" coin_need_flibs=yes if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: user supplied LAPACK library \"$use_lapack\" does not work" >&5 echo "$as_me: error: user supplied LAPACK library \"$use_lapack\" does not work" >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: user supplied LAPACK library \"$use_lapack\" does not work" >&5 echo "$as_me: error: user supplied LAPACK library \"$use_lapack\" does not work" >&2;} { (exit 1); exit 1; }; } fi fi ;; esac 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 echo "$as_me:$LINENO: checking whether LAPACK is already available with BLAS library" >&5 echo $ECHO_N "checking whether LAPACK is already available with BLAS library... $ECHO_C" >&6 coin_save_LIBS="$LIBS" coin_need_flibs=no LIBS="$BLAS_LIBS $LIBS" case $ac_ext in f) cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { call dsyev ; 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 use_lapack="$BLAS_LIBS" if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&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 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; c) 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 case $ac_cv_f77_mangling in upper*) ac_val="DSYEV" ;; lower*) ac_val="dsyev" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdsyev="$ac_val" 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"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdsyev(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; 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 flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_lapack="$BLAS_LIBS" if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdsyev(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; 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 LIBS="$flink_save_libs" coin_need_flibs=yes use_lapack="$BLAS_LIBS" if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" 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 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; cc|cpp) 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 case $ac_cv_f77_mangling in upper*) ac_val="DSYEV" ;; lower*) ac_val="dsyev" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdsyev="$ac_val" 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"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdsyev();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; 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 flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_lapack="$BLAS_LIBS" if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdsyev();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; 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 LIBS="$flink_save_libs" coin_need_flibs=yes use_lapack="$BLAS_LIBS" if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" 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 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; esac 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-*) echo "$as_me:$LINENO: checking whether -lcomplib.sgimath has LAPACK" >&5 echo $ECHO_N "checking whether -lcomplib.sgimath has LAPACK... $ECHO_C" >&6 coin_save_LIBS="$LIBS" coin_need_flibs=no LIBS="-lcomplib.sgimath $BLAS_LIBS $LIBS" case $ac_ext in f) cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { call dsyev ; 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 use_lapack="-lcomplib.sgimath $BLAS_LIBS" if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&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 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; c) 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 case $ac_cv_f77_mangling in upper*) ac_val="DSYEV" ;; lower*) ac_val="dsyev" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdsyev="$ac_val" 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"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdsyev(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; 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 flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_lapack="-lcomplib.sgimath $BLAS_LIBS" if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdsyev(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; 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 LIBS="$flink_save_libs" coin_need_flibs=yes use_lapack="-lcomplib.sgimath $BLAS_LIBS" if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" 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 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; cc|cpp) 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 case $ac_cv_f77_mangling in upper*) ac_val="DSYEV" ;; lower*) ac_val="dsyev" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdsyev="$ac_val" 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"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdsyev();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; 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 flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_lapack="-lcomplib.sgimath $BLAS_LIBS" if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdsyev();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; 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 LIBS="$flink_save_libs" coin_need_flibs=yes use_lapack="-lcomplib.sgimath $BLAS_LIBS" if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" 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 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; esac 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*) echo "$as_me:$LINENO: checking for LAPACK in libsunperf" >&5 echo $ECHO_N "checking for LAPACK in libsunperf... $ECHO_C" >&6 coin_need_flibs=no coin_save_LIBS="$LIBS" LIBS="-lsunperf $BLAS_LIBS $FLIBS $LIBS" case $ac_ext in f) cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { call dsyev ; 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 use_lapack='-lsunperf $BLAS_LIBS' if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&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 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; c) 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 case $ac_cv_f77_mangling in upper*) ac_val="DSYEV" ;; lower*) ac_val="dsyev" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdsyev="$ac_val" 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"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdsyev(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; 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 flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_lapack='-lsunperf $BLAS_LIBS' if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdsyev(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; 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 LIBS="$flink_save_libs" coin_need_flibs=yes use_lapack='-lsunperf $BLAS_LIBS' if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" 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 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; cc|cpp) 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 case $ac_cv_f77_mangling in upper*) ac_val="DSYEV" ;; lower*) ac_val="dsyev" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdsyev="$ac_val" 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"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdsyev();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; 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 flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_lapack='-lsunperf $BLAS_LIBS' if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdsyev();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; 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 LIBS="$flink_save_libs" coin_need_flibs=yes use_lapack='-lsunperf $BLAS_LIBS' if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" 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 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; esac 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 echo "$as_me:$LINENO: checking whether -llapack has LAPACK" >&5 echo $ECHO_N "checking whether -llapack has LAPACK... $ECHO_C" >&6 coin_need_flibs=no coin_save_LIBS="$LIBS" LIBS="-llapack $BLAS_LIBS $LIBS" case $ac_ext in f) cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { call dsyev ; 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 use_lapack='-llapack' if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&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 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; c) 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 case $ac_cv_f77_mangling in upper*) ac_val="DSYEV" ;; lower*) ac_val="dsyev" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdsyev="$ac_val" 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"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdsyev(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; 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 flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_lapack='-llapack' if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdsyev(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; 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 LIBS="$flink_save_libs" coin_need_flibs=yes use_lapack='-llapack' if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" 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 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; cc|cpp) 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 case $ac_cv_f77_mangling in upper*) ac_val="DSYEV" ;; lower*) ac_val="dsyev" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdsyev="$ac_val" 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"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdsyev();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; 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 flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_lapack='-llapack' if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdsyev();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; 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 LIBS="$flink_save_libs" coin_need_flibs=yes use_lapack='-llapack' if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" 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 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; esac 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 echo "$as_me:$LINENO: checking for COIN-OR package Lapack" >&5 echo $ECHO_N "checking for COIN-OR package Lapack... $ECHO_C" >&6 coin_has_lapack=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 = "Lapack"; then coin_has_lapack=skipping fi done fi if test "$coin_has_lapack" != skipping; then # Check whether --with-m4_tolower(Lapack) or --without-m4_tolower(Lapack) was given. if test "${with_lapack+set}" = set; then withval="$with_lapack" if test "$withval" = no ; then coin_has_lapack=skipping fi fi; fi LAPACK_LIBS= LAPACK_CFLAGS= LAPACK_DATA= LAPACK_DEPENDENCIES= LAPACK_PCLIBS= LAPACK_PCREQUIRES= LAPACK_DATA= #check if user provided LIBS, CFLAGS, or DATA for package or disables use of package if test $coin_has_lapack != skipping; then # Check whether --with-m4_tolower(Lapack)-lib or --without-m4_tolower(Lapack)-lib was given. if test "${with_lapack_lib+set}" = set; then withval="$with_lapack_lib" if test "$withval" = no ; then coin_has_lapack=skipping else coin_has_lapack=yes LAPACK_LIBS="$withval" LAPACK_PCLIBS="$withval" COINUTILSLIB_PCLIBS="$withval $COINUTILSLIB_PCLIBS" COINUTILSLIB_LIBS="$withval $COINUTILSLIB_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 LAPACK_LIBS_INSTALLED="$withval" COINUTILSLIB_LIBS_INSTALLED="$withval $COINUTILSLIB_LIBS_INSTALLED" fi fi fi; fi if test $coin_has_lapack != skipping; then # Check whether --with-m4_tolower(Lapack)-incdir or --without-m4_tolower(Lapack)-incdir was given. if test "${with_lapack_incdir+set}" = set; then withval="$with_lapack_incdir" if test "$withval" = no ; then coin_has_lapack=skipping else coin_has_lapack=yes LAPACK_CFLAGS="-I`${CYGPATH_W} $withval`" COINUTILSLIB_CFLAGS="-I`${CYGPATH_W} $withval` $COINUTILSLIB_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 LAPACK_CFLAGS_INSTALLED="$LAPACK_CFLAGS" COINUTILSLIB_CFLAGS_INSTALLED="$LAPACK_CFLAGS $COINUTILSLIB_CFLAGS_INSTALLED" fi fi fi; fi if test $coin_has_lapack != skipping; then # Check whether --with-m4_tolower(Lapack)-datadir or --without-m4_tolower(Lapack)-datadir was given. if test "${with_lapack_datadir+set}" = set; then withval="$with_lapack_datadir" if test "$withval" = no ; then coin_has_lapack=skipping else coin_has_lapack=yes LAPACK_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 LAPACK_DATA_INSTALLED="$withval" fi fi fi; fi if test $coin_has_lapack = 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 "coinlapack"; then LAPACK_VERSIONS=`$PKG_CONFIG --modversion "coinlapack" 2>/dev/null | tr '\n' ' '` cflags=`$PKG_CONFIG --cflags "coinlapack" 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 LAPACK_CFLAGS="$cflags" LAPACK_LIBS=`$PKG_CONFIG --libs "coinlapack" 2>/dev/null` LAPACK_DATA=`$PKG_CONFIG --variable=datadir "coinlapack" 2>/dev/null` coin_has_lapack=yes echo "$as_me:$LINENO: result: yes: $LAPACK_VERSIONS" >&5 echo "${ECHO_T}yes: $LAPACK_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 LAPACK_LIBS=`echo " $LAPACK_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` fi LAPACK_PCREQUIRES="coinlapack" # augment X_PCREQUIRES, X_CFLAGS, and X_LIBS for each build target X in CoinUtilsLib COINUTILSLIB_PCREQUIRES="coinlapack $COINUTILSLIB_PCREQUIRES" COINUTILSLIB_CFLAGS="$LAPACK_CFLAGS $COINUTILSLIB_CFLAGS" COINUTILSLIB_LIBS="$LAPACK_LIBS $COINUTILSLIB_LIBS" else LAPACK_PKG_ERRORS=`$PKG_CONFIG $pkg_short_errors --errors-to-stdout --print-errors "coinlapack"` coin_has_lapack=notGiven echo "$as_me:$LINENO: result: not given: $LAPACK_PKG_ERRORS" >&5 echo "${ECHO_T}not given: $LAPACK_PKG_ERRORS" >&6 fi else { { echo "$as_me:$LINENO: error: \"Cannot check for existance of module Lapack without pkg-config\"" >&5 echo "$as_me: error: \"Cannot check for existance of module Lapack 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 Lapack (fallback)" >&5 echo $ECHO_N "checking for COIN-OR package Lapack (fallback)... $ECHO_C" >&6 coin_has_lapack=notGiven LAPACK_LIBS= LAPACK_LIBS_INSTALLED= LAPACK_CFLAGS= LAPACK_CFLAGS_INSTALLED= LAPACK_DATA= LAPACK_DATA_INSTALLED= LAPACK_PCLIBS= LAPACK_PCREQUIRES= # initial list of dependencies is "coinlapack", but we need to filter out version number specifications (= x, <= x, >= x, != x) projtoprocess="coinlapack" # 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$LAPACK_DATA" = x ; then projdatadir= pcfilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcfile` eval `sh -c "$pcfilemod"` LAPACK_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$LAPACK_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 LAPACK_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 LAPACK_CFLAGS="$projcflags $LAPACK_CFLAGS" # set LIBS variable LAPACK_LIBS="$projlibs $LAPACK_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 LAPACK_CFLAGS_INSTALLED="$projcflags $LAPACK_CFLAGS_INSTALLED" # set LIBS variable LAPACK_LIBS_INSTALLED="$projlibs $LAPACK_LIBS_INSTALLED" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # finish up coin_has_lapack=yes echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 cat >>confdefs.h <<\_ACEOF #define COIN_HAS_LAPACK 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 LAPACK_LIBS=`echo " $LAPACK_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` LAPACK_LIBS_INSTALLED=`echo " $LAPACK_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 LAPACK_PCREQUIRES="coinlapack" COINUTILSLIB_PCREQUIRES="coinlapack $COINUTILSLIB_PCREQUIRES" COINUTILSLIB_CFLAGS="$LAPACK_CFLAGS $COINUTILSLIB_CFLAGS" COINUTILSLIB_LIBS="$LAPACK_LIBS $COINUTILSLIB_LIBS" COINUTILSLIB_CFLAGS_INSTALLED="$LAPACK_CFLAGS_INSTALLED $COINUTILSLIB_CFLAGS_INSTALLED" COINUTILSLIB_LIBS_INSTALLED="$LAPACK_LIBS_INSTALLED $COINUTILSLIB_LIBS_INSTALLED" fi if test $coin_has_lapack != notGiven && test $coin_has_lapack != skipping; then COIN_HAS_LAPACK_TRUE= COIN_HAS_LAPACK_FALSE='#' else COIN_HAS_LAPACK_TRUE='#' COIN_HAS_LAPACK_FALSE= fi fi else echo "$as_me:$LINENO: result: $coin_has_lapack" >&5 echo "${ECHO_T}$coin_has_lapack" >&6 fi if test $coin_has_lapack != skipping && test $coin_has_lapack != notGiven ; then cat >>confdefs.h <<\_ACEOF #define COIN_HAS_LAPACK 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) LAPACK_DEPENDENCIES=`echo " $LAPACK_LIBS" | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` COINUTILSLIB_DEPENDENCIES=`echo " $COINUTILSLIB_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 "$LAPACK_CFLAGS" ; then { echo "$as_me:$LINENO: Lapack CFLAGS are $LAPACK_CFLAGS" >&5 echo "$as_me: Lapack CFLAGS are $LAPACK_CFLAGS" >&6;} fi if test -n "$LAPACK_LIBS" ; then { echo "$as_me:$LINENO: Lapack LIBS are $LAPACK_LIBS" >&5 echo "$as_me: Lapack LIBS are $LAPACK_LIBS" >&6;} fi if test -n "$LAPACK_DEPENDENCIES" ; then { echo "$as_me:$LINENO: Lapack DEPENDENCIES are $LAPACK_DEPENDENCIES" >&5 echo "$as_me: Lapack DEPENDENCIES are $LAPACK_DEPENDENCIES" >&6;} fi if test -n "$LAPACK_DATA" ; then { echo "$as_me:$LINENO: Lapack DATA is $LAPACK_DATA" >&5 echo "$as_me: Lapack DATA is $LAPACK_DATA" >&6;} fi if test -n "$LAPACK_PCLIBS" ; then { echo "$as_me:$LINENO: Lapack PCLIBS are $LAPACK_PCLIBS" >&5 echo "$as_me: Lapack PCLIBS are $LAPACK_PCLIBS" >&6;} fi if test -n "$LAPACK_PCREQUIRES" ; then { echo "$as_me:$LINENO: Lapack PCREQUIRES are $LAPACK_PCREQUIRES" >&5 echo "$as_me: Lapack PCREQUIRES are $LAPACK_PCREQUIRES" >&6;} fi { echo "$as_me:$LINENO: CoinUtilsLib CFLAGS are $COINUTILSLIB_CFLAGS" >&5 echo "$as_me: CoinUtilsLib CFLAGS are $COINUTILSLIB_CFLAGS" >&6;} { echo "$as_me:$LINENO: CoinUtilsLib LIBS are $COINUTILSLIB_LIBS" >&5 echo "$as_me: CoinUtilsLib LIBS are $COINUTILSLIB_LIBS" >&6;} { echo "$as_me:$LINENO: CoinUtilsLib DEPENDENCIES are $COINUTILSLIB_DEPENDENCIES" >&5 echo "$as_me: CoinUtilsLib DEPENDENCIES are $COINUTILSLIB_DEPENDENCIES" >&6;} fi fi # Define the Makefile conditional if test $coin_has_lapack != notGiven && test $coin_has_lapack != skipping; then COIN_HAS_LAPACK_TRUE= COIN_HAS_LAPACK_FALSE='#' else COIN_HAS_LAPACK_TRUE='#' COIN_HAS_LAPACK_FALSE= fi elif test "x$use_lapack" != x && test "$use_lapack" != no; then coin_has_lapack=yes if test 0 = 0; then COIN_HAS_LAPACK_TRUE= COIN_HAS_LAPACK_FALSE='#' else COIN_HAS_LAPACK_TRUE='#' COIN_HAS_LAPACK_FALSE= fi cat >>confdefs.h <<\_ACEOF #define COIN_HAS_LAPACK 1 _ACEOF LAPACK_LIBS="$use_lapack" LAPACK_CFLAGS= LAPACK_DATA= COINUTILSLIB_PCLIBS="$LAPACK_LIBS $COINUTILSLIB_PCLIBS" COINUTILSLIB_LIBS="$LAPACK_LIBS $COINUTILSLIB_LIBS" COINUTILSLIB_LIBS_INSTALLED="$LAPACK_LIBS $COINUTILSLIB_LIBS_INSTALLED" else coin_has_lapack=no if test 0 = 1; then COIN_HAS_LAPACK_TRUE= COIN_HAS_LAPACK_FALSE='#' else COIN_HAS_LAPACK_TRUE='#' COIN_HAS_LAPACK_FALSE= fi 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= GLPK_DATA= #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" COINUTILSLIB_PCLIBS="$withval $COINUTILSLIB_PCLIBS" COINUTILSLIB_LIBS="$withval $COINUTILSLIB_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" COINUTILSLIB_LIBS_INSTALLED="$withval $COINUTILSLIB_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`" COINUTILSLIB_CFLAGS="-I`${CYGPATH_W} $withval` $COINUTILSLIB_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" COINUTILSLIB_CFLAGS_INSTALLED="$GLPK_CFLAGS $COINUTILSLIB_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 CoinUtilsLib COINUTILSLIB_PCREQUIRES="coinglpk $COINUTILSLIB_PCREQUIRES" COINUTILSLIB_CFLAGS="$GLPK_CFLAGS $COINUTILSLIB_CFLAGS" COINUTILSLIB_LIBS="$GLPK_LIBS $COINUTILSLIB_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" COINUTILSLIB_PCREQUIRES="coinglpk $COINUTILSLIB_PCREQUIRES" COINUTILSLIB_CFLAGS="$GLPK_CFLAGS $COINUTILSLIB_CFLAGS" COINUTILSLIB_LIBS="$GLPK_LIBS $COINUTILSLIB_LIBS" COINUTILSLIB_CFLAGS_INSTALLED="$GLPK_CFLAGS_INSTALLED $COINUTILSLIB_CFLAGS_INSTALLED" COINUTILSLIB_LIBS_INSTALLED="$GLPK_LIBS_INSTALLED $COINUTILSLIB_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'` COINUTILSLIB_DEPENDENCIES=`echo " $COINUTILSLIB_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: CoinUtilsLib CFLAGS are $COINUTILSLIB_CFLAGS" >&5 echo "$as_me: CoinUtilsLib CFLAGS are $COINUTILSLIB_CFLAGS" >&6;} { echo "$as_me:$LINENO: CoinUtilsLib LIBS are $COINUTILSLIB_LIBS" >&5 echo "$as_me: CoinUtilsLib LIBS are $COINUTILSLIB_LIBS" >&6;} { echo "$as_me:$LINENO: CoinUtilsLib DEPENDENCIES are $COINUTILSLIB_DEPENDENCIES" >&5 echo "$as_me: CoinUtilsLib DEPENDENCIES are $COINUTILSLIB_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 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= SAMPLE_DATA= #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= NETLIB_DATA= #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 coin_has_zlib=no # Check whether --enable-zlib or --disable-zlib was given. if test "${enable_zlib+set}" = set; then enableval="$enable_zlib" coin_enable_zlib=$enableval else coin_enable_zlib=yes fi; if test $coin_enable_zlib = yes; then #if test x"" = x; then # hdr="#include " #else # hdr="" #fi #AC_CHECK_HEADERS([zlib.h],[coin_has_zlib=yes],[],[$hdr]) for ac_header in zlib.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 http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _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 coin_has_zlib=yes fi done if test $coin_has_zlib = yes; then echo "$as_me:$LINENO: checking for gzopen in -lz" >&5 echo $ECHO_N "checking for gzopen in -lz... $ECHO_C" >&6 if test "${ac_cv_lib_z_gzopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $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 gzopen (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { gzopen (); ; 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 ac_cv_lib_z_gzopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_z_gzopen=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_z_gzopen" >&5 echo "${ECHO_T}$ac_cv_lib_z_gzopen" >&6 if test $ac_cv_lib_z_gzopen = yes; then : else coin_has_zlib=no fi fi if test $coin_has_zlib = yes; then COINUTILSLIB_LIBS="-lz $COINUTILSLIB_LIBS" COINUTILSLIB_PCLIBS="-lz $COINUTILSLIB_PCLIBS" COINUTILSLIB_LIBS_INSTALLED="-lz $COINUTILSLIB_LIBS_INSTALLED" cat >>confdefs.h <<\_ACEOF #define COIN_HAS_ZLIB 1 _ACEOF fi fi if test x$coin_has_zlib = xyes; then COIN_HAS_ZLIB_TRUE= COIN_HAS_ZLIB_FALSE='#' else COIN_HAS_ZLIB_TRUE='#' COIN_HAS_ZLIB_FALSE= fi # Check whether --enable-bzlib or --disable-bzlib was given. if test "${enable_bzlib+set}" = set; then enableval="$enable_bzlib" coin_enable_bzlib=$enableval else coin_enable_bzlib=yes fi; coin_has_bzlib=no if test $coin_enable_bzlib = yes; then #if test x"" = x; then # hdr="#include " #else # hdr="" #fi #AC_CHECK_HEADERS([bzlib.h],[coin_has_bzlib=yes],[],[$hdr]) for ac_header in bzlib.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 http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _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 coin_has_bzlib=yes fi done if test $coin_has_bzlib = yes; then echo "$as_me:$LINENO: checking for BZ2_bzReadOpen in -lbz2" >&5 echo $ECHO_N "checking for BZ2_bzReadOpen in -lbz2... $ECHO_C" >&6 if test "${ac_cv_lib_bz2_BZ2_bzReadOpen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbz2 $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 BZ2_bzReadOpen (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { BZ2_bzReadOpen (); ; 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 ac_cv_lib_bz2_BZ2_bzReadOpen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_bz2_BZ2_bzReadOpen=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_bz2_BZ2_bzReadOpen" >&5 echo "${ECHO_T}$ac_cv_lib_bz2_BZ2_bzReadOpen" >&6 if test $ac_cv_lib_bz2_BZ2_bzReadOpen = yes; then : else coin_has_bzlib=no fi fi if test $coin_has_bzlib = yes; then COINUTILSLIB_LIBS="-lbz2 $COINUTILSLIB_LIBS" COINUTILSLIB_PCLIBS="-lbz2 $COINUTILSLIB_PCLIBS" COINUTILSLIB_LIBS_INSTALLED="-lbz2 $COINUTILSLIB_LIBS_INSTALLED" cat >>confdefs.h <<\_ACEOF #define COIN_HAS_BZLIB 1 _ACEOF fi fi # Check whether --enable-gnu-packages or --disable-gnu-packages was given. if test "${enable_gnu_packages+set}" = set; then enableval="$enable_gnu_packages" coin_enable_gnu=$enableval else coin_enable_gnu=no fi; coin_has_readline=no if test $coin_enable_gnu = yes; then #if test x"#include " = x; then # hdr="#include " #else # hdr="#include " #fi #AC_CHECK_HEADERS([readline/readline.h],[coin_has_readline=yes],[],[$hdr]) for ac_header in readline/readline.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. */ #include #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 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 coin_has_readline=yes fi done coin_save_LIBS="$LIBS" LIBS= # First we check if tputs and friends are available if test $coin_has_readline = yes; then echo "$as_me:$LINENO: checking for library containing tputs" >&5 echo $ECHO_N "checking for library containing tputs... $ECHO_C" >&6 if test "${ac_cv_search_tputs+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_func_search_save_LIBS=$LIBS ac_cv_search_tputs=no 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 tputs (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { tputs (); ; 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 ac_cv_search_tputs="none required" 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 "$ac_cv_search_tputs" = no; then for ac_lib in ncurses termcap curses; do LIBS="-l$ac_lib $ac_func_search_save_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 tputs (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { tputs (); ; 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 ac_cv_search_tputs="-l$ac_lib" 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_exeext conftest.$ac_ext done fi LIBS=$ac_func_search_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_search_tputs" >&5 echo "${ECHO_T}$ac_cv_search_tputs" >&6 if test "$ac_cv_search_tputs" != no; then test "$ac_cv_search_tputs" = "none required" || LIBS="$ac_cv_search_tputs $LIBS" else coin_has_readline=no fi fi # Now we check for readline if test $coin_has_readline = yes; then echo "$as_me:$LINENO: checking for readline in -lreadline" >&5 echo $ECHO_N "checking for readline in -lreadline... $ECHO_C" >&6 if test "${ac_cv_lib_readline_readline+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lreadline $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 readline (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { readline (); ; 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 ac_cv_lib_readline_readline=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_readline_readline=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_readline_readline" >&5 echo "${ECHO_T}$ac_cv_lib_readline_readline" >&6 if test $ac_cv_lib_readline_readline = yes; then : else coin_has_readline=no fi fi if test $coin_has_readline = yes; then COINUTILSLIB_LIBS="-lreadline $LIBS $COINUTILSLIB_LIBS" COINUTILSLIB_PCLIBS="-lreadline $LIBS $COINUTILSLIB_PCLIBS" COINUTILSLIB_LIBS_INSTALLED="-lreadline $LIBS $COINUTILSLIB_LIBS_INSTALLED" cat >>confdefs.h <<\_ACEOF #define COIN_HAS_READLINE 1 _ACEOF fi LIBS="$coin_save_LIBS" fi 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="test/plan.mod" for file in $cvl_tmp ; do coin_vpath_link_files="$coin_vpath_link_files $file" done fi ############################################################################# # 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 # 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 # 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="" 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 for chkProj in $coin_subdirs ; do if test "$chkProj" = "$proj" ; then # 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 eval doxydir="`pwd`/${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 fi done # 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 src/Makefile test/Makefile coinutils.pc coinutils-uninstalled.pc" 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/config.h src/config_coinutils.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_BLAS_TRUE}" && test -z "${COIN_HAS_BLAS_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_BLAS\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_BLAS\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_BLAS_TRUE}" && test -z "${COIN_HAS_BLAS_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_BLAS\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_BLAS\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_BLAS_TRUE}" && test -z "${COIN_HAS_BLAS_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_BLAS\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_BLAS\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_BLAS_TRUE}" && test -z "${COIN_HAS_BLAS_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_BLAS\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_BLAS\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_LAPACK_TRUE}" && test -z "${COIN_HAS_LAPACK_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_LAPACK\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_LAPACK\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_LAPACK_TRUE}" && test -z "${COIN_HAS_LAPACK_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_LAPACK\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_LAPACK\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_LAPACK_TRUE}" && test -z "${COIN_HAS_LAPACK_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_LAPACK\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_LAPACK\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_LAPACK_TRUE}" && test -z "${COIN_HAS_LAPACK_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_LAPACK\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_LAPACK\" 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_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_ZLIB_TRUE}" && test -z "${COIN_HAS_ZLIB_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_ZLIB\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_ZLIB\" 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 CoinUtils $as_me 2.9.10, 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="\\ CoinUtils config.status 2.9.10 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" ;; "src/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "test/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; "coinutils.pc" ) CONFIG_FILES="$CONFIG_FILES coinutils.pc" ;; "coinutils-uninstalled.pc" ) CONFIG_FILES="$CONFIG_FILES coinutils-uninstalled.pc" ;; "doxydoc/doxygen.conf" ) CONFIG_FILES="$CONFIG_FILES doxydoc/doxygen.conf" ;; "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "src/config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS src/config.h" ;; "src/config_coinutils.h" ) CONFIG_HEADERS="$CONFIG_HEADERS src/config_coinutils.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,@COINUTILS_SVN_REV@,$COINUTILS_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,@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,@FLIBS@,$FLIBS,;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,@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,@BLAS_LIBS@,$BLAS_LIBS,;t t s,@BLAS_CFLAGS@,$BLAS_CFLAGS,;t t s,@BLAS_DATA@,$BLAS_DATA,;t t s,@BLAS_DEPENDENCIES@,$BLAS_DEPENDENCIES,;t t s,@BLAS_LIBS_INSTALLED@,$BLAS_LIBS_INSTALLED,;t t s,@BLAS_CFLAGS_INSTALLED@,$BLAS_CFLAGS_INSTALLED,;t t s,@BLAS_DATA_INSTALLED@,$BLAS_DATA_INSTALLED,;t t s,@COINUTILSLIB_CFLAGS@,$COINUTILSLIB_CFLAGS,;t t s,@COINUTILSLIB_LIBS@,$COINUTILSLIB_LIBS,;t t s,@COINUTILSLIB_PCLIBS@,$COINUTILSLIB_PCLIBS,;t t s,@COINUTILSLIB_PCREQUIRES@,$COINUTILSLIB_PCREQUIRES,;t t s,@COINUTILSLIB_DEPENDENCIES@,$COINUTILSLIB_DEPENDENCIES,;t t s,@COINUTILSLIB_CFLAGS_INSTALLED@,$COINUTILSLIB_CFLAGS_INSTALLED,;t t s,@COINUTILSLIB_LIBS_INSTALLED@,$COINUTILSLIB_LIBS_INSTALLED,;t t s,@COIN_HAS_BLAS_TRUE@,$COIN_HAS_BLAS_TRUE,;t t s,@COIN_HAS_BLAS_FALSE@,$COIN_HAS_BLAS_FALSE,;t t s,@LAPACK_LIBS@,$LAPACK_LIBS,;t t s,@LAPACK_CFLAGS@,$LAPACK_CFLAGS,;t t s,@LAPACK_DATA@,$LAPACK_DATA,;t t s,@LAPACK_DEPENDENCIES@,$LAPACK_DEPENDENCIES,;t t s,@LAPACK_LIBS_INSTALLED@,$LAPACK_LIBS_INSTALLED,;t t s,@LAPACK_CFLAGS_INSTALLED@,$LAPACK_CFLAGS_INSTALLED,;t t s,@LAPACK_DATA_INSTALLED@,$LAPACK_DATA_INSTALLED,;t t s,@COIN_HAS_LAPACK_TRUE@,$COIN_HAS_LAPACK_TRUE,;t t s,@COIN_HAS_LAPACK_FALSE@,$COIN_HAS_LAPACK_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,@COIN_HAS_GLPK_TRUE@,$COIN_HAS_GLPK_TRUE,;t t s,@COIN_HAS_GLPK_FALSE@,$COIN_HAS_GLPK_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,@COIN_HAS_ZLIB_TRUE@,$COIN_HAS_ZLIB_TRUE,;t t s,@COIN_HAS_ZLIB_FALSE@,$COIN_HAS_ZLIB_FALSE,;t t s,@coin_have_doxygen@,$coin_have_doxygen,;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_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 CoinUtils-2.9.10/CoinUtils/coinutils-uninstalled.pc.in0000644000076600007660000000045511573155175021403 0ustar coincoinprefix=@prefix@ libdir=@ABSBUILDDIR@/src Name: CoinUtils Description: COIN-OR Utilities URL: https://projects.coin-or.org/CoinUtils Version: @PACKAGE_VERSION@ Libs: ${libdir}/libCoinUtils.la @COINUTILSLIB_PCLIBS@ Cflags: -I@abs_source_dir@/src -I@ABSBUILDDIR@/src Requires: @COINUTILSLIB_PCREQUIRES@ CoinUtils-2.9.10/CoinUtils/config.guess0000755000076600007660000012706311405215457016440 0ustar coincoin#! /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: CoinUtils-2.9.10/CoinUtils/coinutils.pc.in0000644000076600007660000000047611507663424017064 0ustar coincoinprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@/coin Name: CoinUtils Description: COIN-OR Utilities URL: https://projects.coin-or.org/CoinUtils Version: @PACKAGE_VERSION@ Libs: -L${libdir} -lCoinUtils @COINUTILSLIB_PCLIBS@ Cflags: -I${includedir} Requires: @COINUTILSLIB_PCREQUIRES@ CoinUtils-2.9.10/configure0000755000076600007660000274666112244556771014144 0ustar coincoin#! /bin/sh # From configure.ac 0.9. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.59 for CoinUtils 2.9.10. # # 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, 2009 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='CoinUtils' PACKAGE_TARNAME='coinutils' PACKAGE_VERSION='2.9.10' PACKAGE_STRING='CoinUtils 2.9.10' PACKAGE_BUGREPORT='coinutils@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 ThirdParty/Glpk" ac_subdirs_all="$ac_subdirs_all ThirdParty/Blas" ac_subdirs_all="$ac_subdirs_all ThirdParty/Lapack" ac_subdirs_all="$ac_subdirs_all Data/Sample" ac_subdirs_all="$ac_subdirs_all Data/Netlib" ac_subdirs_all="$ac_subdirs_all CoinUtils" 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_doxy_usedot coin_doxy_tagname coin_doxy_logname 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 CoinUtils 2.9.10 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 CoinUtils 2.9.10:";; 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) 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-glpk-lib linker flags for using project Glpk --with-glpk-incdir directory with header files for using project Glpk --with-glpk-datadir directory with data files for using project Glpk --with-blas-lib linker flags for using project Blas --with-blas-incdir directory with header files for using project Blas --with-blas-datadir directory with data files for using project Blas --with-blas specify BLAS library (or BUILD to enforce use of ThirdParty/Blas) --with-lapack-lib linker flags for using project Lapack --with-lapack-incdir directory with header files for using project Lapack --with-lapack-datadir directory with data files for using project Lapack --with-lapack specify LAPACK library (or BUILD to enforce use of ThirdParty/Lapack) --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-netlib-lib linker flags for using project Netlib --with-netlib-incdir directory with header files for using project Netlib --with-netlib-datadir directory with data files for using project Netlib --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-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 CoinUtils configure 2.9.10 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, 2009 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 CoinUtils $as_me 2.9.10, 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. ############################################################################# # Do the tests necessary to configure compilers and initialise autotools # ############################################################################# 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 case $build in *-mingw*) if test "${LD+set}" = set; then :; else LD=link fi ;; esac if test $enable_msvc = yes ; then if test "x${LD+set}" = xset; then :; else LD=link 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 # 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 ;; *-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" case $build in *-darwin*) ;; *) coin_warn_cflags="-pedantic-errors $coin_warn_cflags" ;; esac 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*) case $build in *-mingw*) if test "${LD+set}" = set; then :; else LD=link fi ;; esac if test $enable_msvc = yes ; then if test "x${LD+set}" = xset; then :; else LD=link fi fi ;; 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="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* ) ;; 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" case $build in *-darwin*) ;; *) coin_warn_cxxflags="-pedantic-errors $coin_warn_cxxflags" ;; esac 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 mingw build with MS or intel compiler case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) case $build in *-mingw*) if test "${LD+set}" = set; then :; else LD=link fi ;; esac if test $enable_msvc = yes ; then if test "x${LD+set}" = xset; then :; else LD=link fi fi ;; 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 gfortran g95 g77" 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:4189:" \ "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 "$F77" in ifort* | */ifort* | IFORT* | */IFORT*) case $build in *-mingw*) if test "${LD+set}" = set; then :; else LD=link fi ;; esac if test $enable_msvc = yes ; then if test "x${LD+set}" = xset; then :; else LD=link fi fi ;; 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 # On Cygwin and AIX, building DLLs doesn't work case $build in *-cygwin* | *-mingw*) coin_disable_shared=yes if test x"$enable_shared" = xyes; then case "$CXX" in clang* ) { echo "$as_me:$LINENO: WARNING: DLL building not supported. I'm disabling your choice." >&5 echo "$as_me: WARNING: DLL building not supported. I'm disabling your choice." >&2;} ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) { echo "$as_me:$LINENO: DLL building not supported, but will build with -MD(d) instead of -MT(d)." >&5 echo "$as_me: DLL building not supported, but will build with -MD(d) instead of -MT(d)." >&6;} ;; *) { echo "$as_me:$LINENO: WARNING: DLL building not supported. I'm disabling your choice." >&5 echo "$as_me: WARNING: DLL building not supported. I'm disabling your choice." >&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. I'm disabling your choice." >&5 echo "$as_me: WARNING: Shared objects are not supported. I'm disabling your choice." >&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='coinutils' VERSION='2.9.10' 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 6419 "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 coinutils@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:8383: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:8387: \$? = $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:8651: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:8655: \$? = $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:8755: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:8759: \$? = $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:13544: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:13548: \$? = $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:13648: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:13652: \$? = $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:15218: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:15222: \$? = $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:15322: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:15326: \$? = $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:17529: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:17533: \$? = $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:17797: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:17801: \$? = $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:17901: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:17905: \$? = $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 mydos2unix= ;; 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=no fi; # ToDo # For now, don't use the -no-undefined flag, since the Makefiles are # not yet set up that way. But we need to fix this, when we want # to comile DLLs under Windows. 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 might need to be configured # ############################################################################# echo "$as_me:$LINENO: checking whether source of project Glpk is available and should be compiled" >&5 echo $ECHO_N "checking whether source of project Glpk is available and should be compiled... $ECHO_C" >&6 coin_has_glpk=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 = "Glpk"; then coin_has_glpk="no" coin_reason="Glpk has been specified in COIN_SKIP_PROJECTS" fi if test $dir = "ThirdParty/Glpk"; then coin_has_glpk="no" coin_reason="ThirdParty/Glpk has been specified in COIN_SKIP_PROJECTS" fi done fi if test "$coin_has_glpk" != no; 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="no" coin_reason="--without-glpk has been specified" fi fi; fi if test "$coin_has_glpk" != no; 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="no" coin_reason="--without-glpk-lib has been specified" else coin_has_glpk="no" coin_reason="--with-glpk-lib has been specified" fi fi; fi if test "$coin_has_glpk" != no; 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="no" coin_reason="--without-glpk-incdir has been specified" else coin_has_glpk="no" coin_reason="--with-glpk-incdir has been specified" fi fi; fi if test "$coin_has_glpk" != no; 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="no" coin_reason="--without-glpk-datadir has been specified" else coin_has_glpk="no" coin_reason="--with-glpk-datadir has been specified" fi fi; fi # check if project is available in present directory if test "$coin_has_glpk" = notGiven; then coin_has_glpk=no if test -d $srcdir/ThirdParty/Glpk; then coin_reason="source in ThirdParty/Glpk" # 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. for i in $srcdir/ThirdParty/Glpk/glpk/src/glplpx01.c; do if test -r $i; then coin_has_glpk="yes" else coin_has_glpk="no" coin_reason="source file $i not available" break fi done fi fi if test -z "$coin_reason" ; then echo "$as_me:$LINENO: result: $coin_has_glpk" >&5 echo "${ECHO_T}$coin_has_glpk" >&6 else echo "$as_me:$LINENO: result: $coin_has_glpk, $coin_reason" >&5 echo "${ECHO_T}$coin_has_glpk, $coin_reason" >&6 fi if test "$coin_has_glpk" = yes ; then if test -r $srcdir/ThirdParty/Glpk/configure; then coin_subdirs="$coin_subdirs ThirdParty/Glpk" subdirs="$subdirs ThirdParty/Glpk" fi fi echo "$as_me:$LINENO: checking whether source of project Blas is available and should be compiled" >&5 echo $ECHO_N "checking whether source of project Blas is available and should be compiled... $ECHO_C" >&6 coin_has_blas=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 = "Blas"; then coin_has_blas="no" coin_reason="Blas has been specified in COIN_SKIP_PROJECTS" fi if test $dir = "ThirdParty/Blas"; then coin_has_blas="no" coin_reason="ThirdParty/Blas has been specified in COIN_SKIP_PROJECTS" fi done fi if test "$coin_has_blas" != no; then # Check whether --with-m4_tolower(Blas) or --without-m4_tolower(Blas) was given. if test "${with_blas+set}" = set; then withval="$with_blas" if test "$withval" = no ; then coin_has_blas="no" coin_reason="--without-blas has been specified" fi fi; fi if test "$coin_has_blas" != no; then # Check whether --with-m4_tolower(Blas)-lib or --without-m4_tolower(Blas)-lib was given. if test "${with_blas_lib+set}" = set; then withval="$with_blas_lib" if test "$withval" = no ; then coin_has_blas="no" coin_reason="--without-blas-lib has been specified" else coin_has_blas="no" coin_reason="--with-blas-lib has been specified" fi fi; fi if test "$coin_has_blas" != no; then # Check whether --with-m4_tolower(Blas)-incdir or --without-m4_tolower(Blas)-incdir was given. if test "${with_blas_incdir+set}" = set; then withval="$with_blas_incdir" if test "$withval" = no ; then coin_has_blas="no" coin_reason="--without-blas-incdir has been specified" else coin_has_blas="no" coin_reason="--with-blas-incdir has been specified" fi fi; fi if test "$coin_has_blas" != no; then # Check whether --with-m4_tolower(Blas)-datadir or --without-m4_tolower(Blas)-datadir was given. if test "${with_blas_datadir+set}" = set; then withval="$with_blas_datadir" if test "$withval" = no ; then coin_has_blas="no" coin_reason="--without-blas-datadir has been specified" else coin_has_blas="no" coin_reason="--with-blas-datadir has been specified" fi fi; fi if test $coin_has_blas != no; then #--with-blas can overwrite --with-blas-lib, and can be set to BUILD to enforce building blas # Check whether --with-blas or --without-blas was given. if test "${with_blas+set}" = set; then withval="$with_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; fi # check if project is available in present directory if test "$coin_has_blas" = notGiven; then coin_has_blas=no if test -d $srcdir/ThirdParty/Blas; then coin_reason="source in ThirdParty/Blas" # 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. for i in $srcdir/ThirdParty/Blas/daxpy.f; do if test -r $i; then coin_has_blas="yes" else coin_has_blas="no" coin_reason="source file $i not available" break fi done fi fi if test -z "$coin_reason" ; then echo "$as_me:$LINENO: result: $coin_has_blas" >&5 echo "${ECHO_T}$coin_has_blas" >&6 else echo "$as_me:$LINENO: result: $coin_has_blas, $coin_reason" >&5 echo "${ECHO_T}$coin_has_blas, $coin_reason" >&6 fi if test "$coin_has_blas" = yes ; then if test -r $srcdir/ThirdParty/Blas/configure; then coin_subdirs="$coin_subdirs ThirdParty/Blas" subdirs="$subdirs ThirdParty/Blas" fi fi echo "$as_me:$LINENO: checking whether source of project Lapack is available and should be compiled" >&5 echo $ECHO_N "checking whether source of project Lapack is available and should be compiled... $ECHO_C" >&6 coin_has_lapack=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 = "Lapack"; then coin_has_lapack="no" coin_reason="Lapack has been specified in COIN_SKIP_PROJECTS" fi if test $dir = "ThirdParty/Lapack"; then coin_has_lapack="no" coin_reason="ThirdParty/Lapack has been specified in COIN_SKIP_PROJECTS" fi done fi if test "$coin_has_lapack" != no; then # Check whether --with-m4_tolower(Lapack) or --without-m4_tolower(Lapack) was given. if test "${with_lapack+set}" = set; then withval="$with_lapack" if test "$withval" = no ; then coin_has_lapack="no" coin_reason="--without-lapack has been specified" fi fi; fi if test "$coin_has_lapack" != no; then # Check whether --with-m4_tolower(Lapack)-lib or --without-m4_tolower(Lapack)-lib was given. if test "${with_lapack_lib+set}" = set; then withval="$with_lapack_lib" if test "$withval" = no ; then coin_has_lapack="no" coin_reason="--without-lapack-lib has been specified" else coin_has_lapack="no" coin_reason="--with-lapack-lib has been specified" fi fi; fi if test "$coin_has_lapack" != no; then # Check whether --with-m4_tolower(Lapack)-incdir or --without-m4_tolower(Lapack)-incdir was given. if test "${with_lapack_incdir+set}" = set; then withval="$with_lapack_incdir" if test "$withval" = no ; then coin_has_lapack="no" coin_reason="--without-lapack-incdir has been specified" else coin_has_lapack="no" coin_reason="--with-lapack-incdir has been specified" fi fi; fi if test "$coin_has_lapack" != no; then # Check whether --with-m4_tolower(Lapack)-datadir or --without-m4_tolower(Lapack)-datadir was given. if test "${with_lapack_datadir+set}" = set; then withval="$with_lapack_datadir" if test "$withval" = no ; then coin_has_lapack="no" coin_reason="--without-lapack-datadir has been specified" else coin_has_lapack="no" coin_reason="--with-lapack-datadir has been specified" fi fi; fi if test $coin_has_lapack != skipping; then #--with-lapack can overwrite --with-lapack-lib, and can be set to BUILD to enforce building lapack # Check whether --with-lapack or --without-lapack was given. if test "${with_lapack+set}" = set; then withval="$with_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; fi # check if project is available in present directory if test "$coin_has_lapack" = notGiven; then coin_has_lapack=no if test -d $srcdir/ThirdParty/Lapack; then coin_reason="source in ThirdParty/Lapack" # 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. for i in $srcdir/ThirdParty/Lapack/LAPACK/SRC/dlarf.f; do if test -r $i; then coin_has_lapack="yes" else coin_has_lapack="no" coin_reason="source file $i not available" break fi done fi fi if test -z "$coin_reason" ; then echo "$as_me:$LINENO: result: $coin_has_lapack" >&5 echo "${ECHO_T}$coin_has_lapack" >&6 else echo "$as_me:$LINENO: result: $coin_has_lapack, $coin_reason" >&5 echo "${ECHO_T}$coin_has_lapack, $coin_reason" >&6 fi if test "$coin_has_lapack" = yes ; then if test -r $srcdir/ThirdParty/Lapack/configure; then coin_subdirs="$coin_subdirs ThirdParty/Lapack" subdirs="$subdirs ThirdParty/Lapack" fi fi 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 Netlib is available and should be compiled" >&5 echo $ECHO_N "checking whether source of project Netlib is available and should be compiled... $ECHO_C" >&6 coin_has_netlib=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 = "Netlib"; then coin_has_netlib="no" coin_reason="Netlib has been specified in COIN_SKIP_PROJECTS" fi if test $dir = "Data/Netlib"; then coin_has_netlib="no" coin_reason="Data/Netlib has been specified in COIN_SKIP_PROJECTS" fi done fi if test "$coin_has_netlib" != no; 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="no" coin_reason="--without-netlib has been specified" fi fi; fi if test "$coin_has_netlib" != no; 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="no" coin_reason="--without-netlib-lib has been specified" else coin_has_netlib="no" coin_reason="--with-netlib-lib has been specified" fi fi; fi if test "$coin_has_netlib" != no; 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="no" coin_reason="--without-netlib-incdir has been specified" else coin_has_netlib="no" coin_reason="--with-netlib-incdir has been specified" fi fi; fi if test "$coin_has_netlib" != no; 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="no" coin_reason="--without-netlib-datadir has been specified" else coin_has_netlib="no" coin_reason="--with-netlib-datadir has been specified" fi fi; fi # check if project is available in present directory if test "$coin_has_netlib" = notGiven; then coin_has_netlib=no if test -d $srcdir/Data/Netlib; then coin_reason="source in Data/Netlib" # 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_netlib="yes" fi fi if test -z "$coin_reason" ; then echo "$as_me:$LINENO: result: $coin_has_netlib" >&5 echo "${ECHO_T}$coin_has_netlib" >&6 else echo "$as_me:$LINENO: result: $coin_has_netlib, $coin_reason" >&5 echo "${ECHO_T}$coin_has_netlib, $coin_reason" >&6 fi if test "$coin_has_netlib" = yes ; then if test -r $srcdir/Data/Netlib/configure; then coin_subdirs="$coin_subdirs Data/Netlib" subdirs="$subdirs Data/Netlib" 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 ############################################################################# # 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 # 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 # 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="" 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 for chkProj in $coin_subdirs ; do if test "$chkProj" = "$proj" ; then # 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 eval doxydir="`pwd`/${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 fi done # 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" ac_config_files="$ac_config_files 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 : ${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 CoinUtils $as_me 2.9.10, 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="\\ CoinUtils config.status 2.9.10 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_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_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 CoinUtils-2.9.10/config.guess0000755000076600007660000012706310651755432014533 0ustar coincoin#! /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: