pax_global_header00006660000000000000000000000064143657540130014522gustar00rootroot0000000000000052 comment=030d111af16a0f30b6fff851ba7f983bea14f982 Bonmin-releases-1.8.9/000077500000000000000000000000001436575401300145645ustar00rootroot00000000000000Bonmin-releases-1.8.9/.gitattributes000066400000000000000000000255421436575401300174670ustar00rootroot00000000000000* text=auto !eol /.travis.yml -text Bonmin/AUTHORS -text Bonmin/INSTALL -text Bonmin/LICENSE -text Bonmin/README -text Bonmin/bonmin-uninstalled.pc.in -text Bonmin/bonmin.pc.in -text Bonmin/config.guess -text Bonmin/config.sub -text Bonmin/configure -text Bonmin/depcomp -text Bonmin/doc/BONMIN_ReferenceManual.hpp -text Bonmin/doc/BONMIN_UsersManual.pdf -text Bonmin/doc/Makefile -text Bonmin/doc/bonmin.sty -text Bonmin/doc/genHtml.sh -text Bonmin/doc/htrick.sty -text Bonmin/doc/ltrick.sty -text Bonmin/doc/option_pages/Head.tex -text Bonmin/doc/option_pages/bonmin.sty -text Bonmin/doc/option_pages/genHtml.sh -text Bonmin/doc/option_pages/genOptionsDocs.sh -text Bonmin/doc/option_pages/htrick.sty -text Bonmin/doc/option_pages/ltrick.sty -text Bonmin/doc/option_pages/options_list_TEMPLATE.tex -text Bonmin/doc/option_pages/options_list_bonmin_content.tex -text Bonmin/doc/option_pages/options_list_filter_content.tex -text Bonmin/doc/option_pages/options_list_ipopt_content.tex -text Bonmin/doxydoc/doxygen.conf.in -text Bonmin/examples/CppExample/Mybonmin.opt -text Bonmin/examples/OptionDocGen/DocGen.cpp -text Bonmin/examples/OptionDocGen/Makefile.in -text Bonmin/examples/OptionDocGen/MyTMINLP.cpp -text Bonmin/examples/OptionDocGen/MyTMINLP.hpp -text Bonmin/examples/amplExamples/toy.mod -text Bonmin/experimental/Bcp/BM.par -text Bonmin/experimental/Bcp/BM_lp.cpp -text Bonmin/experimental/Bcp/BM_lp_branch.cpp -text Bonmin/experimental/Bcp/BM_tm.cpp -text Bonmin/experimental/Bcp/README -text Bonmin/experimental/Bcp/ampl_bcp.patch -text Bonmin/experimental/RobotBonmin/BonNWayChoose.cpp -text Bonmin/experimental/RobotBonmin/BonNWayChoose.hpp -text Bonmin/experimental/RobotBonmin/BonNWayObject.cpp -text Bonmin/experimental/RobotBonmin/BonNWayObject.hpp -text Bonmin/experimental/RobotBonmin/Makefile.am -text Bonmin/experimental/RobotBonmin/Makefile.in -text Bonmin/experimental/RobotBonmin/Robot-bonmin.cpp -text Bonmin/experimental/RobotBonmin/RobotSetup.cpp -text Bonmin/experimental/RobotBonmin/RobotSetup.hpp -text Bonmin/experimental/Separable/BonHeuristicInnerApproximation.cpp -text Bonmin/experimental/Separable/BonHeuristicInnerApproximation.hpp -text Bonmin/experimental/Separable/BonOuterDescription.cpp -text Bonmin/experimental/Separable/BonOuterDescription.hpp -text Bonmin/experimental/Separable/Makefile.am -text Bonmin/experimental/Separable/Makefile.in -text Bonmin/experimental/Separable/Sepa.cpp -text Bonmin/experimental/Separable/SepaHeuristicInnerApproximation.cpp -text Bonmin/experimental/Separable/SepaHeuristicInnerApproximation.hpp -text Bonmin/experimental/Separable/SepaSetup.cpp -text Bonmin/experimental/Separable/SepaSetup.hpp -text Bonmin/experimental/Separable/SepaTMINLP2OsiLP.cpp -text Bonmin/experimental/Separable/SepaTMINLP2OsiLP.hpp -text Bonmin/install-sh -text Bonmin/ltmain.sh -text Bonmin/missing -text Bonmin/src/Algorithms/Ampl/BonAmplSetup.cpp -text Bonmin/src/Algorithms/Ampl/BonAmplSetup.hpp -text Bonmin/src/Algorithms/Ampl/Makefile.am -text Bonmin/src/Algorithms/Ampl/Makefile.in -text Bonmin/src/Algorithms/BonBabSetupBase.cpp -text Bonmin/src/Algorithms/BonBabSetupBase.hpp -text Bonmin/src/Algorithms/BonBonminSetup.cpp -text Bonmin/src/Algorithms/BonBonminSetup.hpp -text Bonmin/src/Algorithms/BonCbcLpStrategy.cpp -text Bonmin/src/Algorithms/BonCbcLpStrategy.hpp -text Bonmin/src/Algorithms/BonSolverHelp.cpp -text Bonmin/src/Algorithms/BonSolverHelp.hpp -text Bonmin/src/Algorithms/BonSubMipSolver.cpp -text Bonmin/src/Algorithms/BonSubMipSolver.hpp -text Bonmin/src/Algorithms/Branching/BonChooseVariable.cpp -text Bonmin/src/Algorithms/Branching/BonChooseVariable.hpp -text Bonmin/src/Algorithms/Branching/BonCurvBranchingSolver.cpp -text Bonmin/src/Algorithms/Branching/BonCurvBranchingSolver.hpp -text Bonmin/src/Algorithms/Branching/BonLpBranchingSolver.cpp -text Bonmin/src/Algorithms/Branching/BonLpBranchingSolver.hpp -text Bonmin/src/Algorithms/Branching/BonPseudoCosts.cpp -text Bonmin/src/Algorithms/Branching/BonPseudoCosts.hpp -text Bonmin/src/Algorithms/Branching/BonQpBranchingSolver.cpp -text Bonmin/src/Algorithms/Branching/BonQpBranchingSolver.hpp -text Bonmin/src/Algorithms/Branching/BonRandomChoice.cpp -text Bonmin/src/Algorithms/Branching/BonRandomChoice.hpp -text Bonmin/src/Algorithms/Branching/Makefile.am -text Bonmin/src/Algorithms/Branching/Makefile.in -text Bonmin/src/Algorithms/Makefile.am -text Bonmin/src/Algorithms/Makefile.in -text Bonmin/src/Algorithms/OaGenerators/BonDummyHeuristic.cpp -text Bonmin/src/Algorithms/OaGenerators/BonDummyHeuristic.hpp -text Bonmin/src/Algorithms/OaGenerators/BonEcpCuts.cpp -text Bonmin/src/Algorithms/OaGenerators/BonEcpCuts.hpp -text Bonmin/src/Algorithms/OaGenerators/BonFpForMinlp.cpp -text Bonmin/src/Algorithms/OaGenerators/BonFpForMinlp.hpp -text Bonmin/src/Algorithms/OaGenerators/BonOACutGenerator2.cpp -text Bonmin/src/Algorithms/OaGenerators/BonOACutGenerator2.hpp -text Bonmin/src/Algorithms/OaGenerators/BonOAMessages.cpp -text Bonmin/src/Algorithms/OaGenerators/BonOAMessages.hpp -text Bonmin/src/Algorithms/OaGenerators/BonOaDecBase.cpp -text Bonmin/src/Algorithms/OaGenerators/BonOaDecBase.hpp -text Bonmin/src/Algorithms/OaGenerators/BonOaFeasChecker.cpp -text Bonmin/src/Algorithms/OaGenerators/BonOaFeasChecker.hpp -text Bonmin/src/Algorithms/OaGenerators/BonOaNlpOptim.cpp -text Bonmin/src/Algorithms/OaGenerators/BonOaNlpOptim.hpp -text Bonmin/src/Algorithms/OaGenerators/Makefile.am -text Bonmin/src/Algorithms/OaGenerators/Makefile.in -text Bonmin/src/Algorithms/QuadCuts/BonArraysHelpers.hpp -text Bonmin/src/Algorithms/QuadCuts/BonLinearCutsGenerator.cpp -text Bonmin/src/Algorithms/QuadCuts/BonLinearCutsGenerator.hpp -text Bonmin/src/Algorithms/QuadCuts/BonOuterApprox.cpp -text Bonmin/src/Algorithms/QuadCuts/BonOuterApprox.hpp -text Bonmin/src/Algorithms/QuadCuts/BonQuadCut.cpp -text Bonmin/src/Algorithms/QuadCuts/BonQuadCut.hpp -text Bonmin/src/Algorithms/QuadCuts/BonQuadRow.cpp -text Bonmin/src/Algorithms/QuadCuts/BonQuadRow.hpp -text Bonmin/src/Algorithms/QuadCuts/BonTMINLP2Quad.cpp -text Bonmin/src/Algorithms/QuadCuts/BonTMINLP2Quad.hpp -text Bonmin/src/Algorithms/QuadCuts/BonTMINLPLinObj.cpp -text Bonmin/src/Algorithms/QuadCuts/BonTMINLPLinObj.hpp -text Bonmin/src/Algorithms/QuadCuts/BonTMatrix.cpp -text Bonmin/src/Algorithms/QuadCuts/BonTMatrix.hpp -text Bonmin/src/Algorithms/QuadCuts/Makefile.am -text Bonmin/src/Algorithms/QuadCuts/Makefile.in -text Bonmin/src/Algorithms/QuadCuts/next -text Bonmin/src/CbcBonmin/BonBabInfos.cpp -text Bonmin/src/CbcBonmin/BonBabInfos.hpp -text Bonmin/src/CbcBonmin/BonCbc.cpp -text Bonmin/src/CbcBonmin/BonCbc.hpp -text Bonmin/src/CbcBonmin/BonDiver.cpp -text Bonmin/src/CbcBonmin/BonDiver.hpp -text Bonmin/src/CbcBonmin/BonGuessHeuristic.cpp -text Bonmin/src/CbcBonmin/BonGuessHeuristic.hpp -text Bonmin/src/CbcBonmin/Heuristics/BonDummyPump.cpp -text Bonmin/src/CbcBonmin/Heuristics/BonDummyPump.hpp -text Bonmin/src/CbcBonmin/Heuristics/BonFixAndSolveHeuristic.cpp -text Bonmin/src/CbcBonmin/Heuristics/BonFixAndSolveHeuristic.hpp -text Bonmin/src/CbcBonmin/Heuristics/BonHeuristicDive.cpp -text Bonmin/src/CbcBonmin/Heuristics/BonHeuristicDive.hpp -text Bonmin/src/CbcBonmin/Heuristics/BonHeuristicDiveFractional.cpp -text Bonmin/src/CbcBonmin/Heuristics/BonHeuristicDiveFractional.hpp -text Bonmin/src/CbcBonmin/Heuristics/BonHeuristicDiveMIP.cpp -text Bonmin/src/CbcBonmin/Heuristics/BonHeuristicDiveMIP.hpp -text Bonmin/src/CbcBonmin/Heuristics/BonHeuristicDiveMIPFractional.cpp -text Bonmin/src/CbcBonmin/Heuristics/BonHeuristicDiveMIPFractional.hpp -text Bonmin/src/CbcBonmin/Heuristics/BonHeuristicDiveMIPVectorLength.cpp -text Bonmin/src/CbcBonmin/Heuristics/BonHeuristicDiveMIPVectorLength.hpp -text Bonmin/src/CbcBonmin/Heuristics/BonHeuristicDiveVectorLength.cpp -text Bonmin/src/CbcBonmin/Heuristics/BonHeuristicDiveVectorLength.hpp -text Bonmin/src/CbcBonmin/Heuristics/BonHeuristicFPump.cpp -text Bonmin/src/CbcBonmin/Heuristics/BonHeuristicFPump.hpp -text Bonmin/src/CbcBonmin/Heuristics/BonHeuristicLocalBranching.cpp -text Bonmin/src/CbcBonmin/Heuristics/BonHeuristicLocalBranching.hpp -text Bonmin/src/CbcBonmin/Heuristics/BonHeuristicRINS.cpp -text Bonmin/src/CbcBonmin/Heuristics/BonHeuristicRINS.hpp -text Bonmin/src/CbcBonmin/Heuristics/BonLocalSolverBasedHeuristic.cpp -text Bonmin/src/CbcBonmin/Heuristics/BonLocalSolverBasedHeuristic.hpp -text Bonmin/src/CbcBonmin/Heuristics/BonMilpRounding.cpp -text Bonmin/src/CbcBonmin/Heuristics/BonMilpRounding.hpp -text Bonmin/src/CbcBonmin/Heuristics/BonPumpForMinlp.cpp -text Bonmin/src/CbcBonmin/Heuristics/BonPumpForMinlp.hpp -text Bonmin/src/CbcBonmin/Heuristics/Makefile.am -text Bonmin/src/CbcBonmin/Heuristics/Makefile.in -text Bonmin/src/CbcBonmin/bonminamplinterface-uninstalled.pc.in -text Bonmin/src/CbcBonmin/bonminamplinterface.pc.in -text Bonmin/src/Interfaces/Ampl/BonSolReader.cpp -text Bonmin/src/Interfaces/Ampl/BonSolReader.hpp -text Bonmin/src/Interfaces/Ampl/Makefile.in -text Bonmin/src/Interfaces/BonAuxInfos.cpp -text Bonmin/src/Interfaces/BonAuxInfos.hpp -text Bonmin/src/Interfaces/BonExitCodes.hpp -text Bonmin/src/Interfaces/BonMsgUtils.hpp -text Bonmin/src/Interfaces/BonOsiTMINLPInterface.cpp -text Bonmin/src/Interfaces/BonOsiTMINLPInterface.hpp -text Bonmin/src/Interfaces/BonRegisteredOptions.cpp -text Bonmin/src/Interfaces/BonRegisteredOptions.hpp -text Bonmin/src/Interfaces/BonStrongBranchingSolver.cpp -text Bonmin/src/Interfaces/BonStrongBranchingSolver.hpp -text Bonmin/src/Interfaces/BonTMINLP.cpp -text Bonmin/src/Interfaces/BonTMINLP2OsiLP.cpp -text Bonmin/src/Interfaces/BonTMINLP2OsiLP.hpp -text Bonmin/src/Interfaces/BonTNLPSolver.cpp -text Bonmin/src/Interfaces/BonTNLPSolver.hpp -text Bonmin/src/Interfaces/BonTypes.hpp -text Bonmin/src/Interfaces/Filter/BonBqpdSolver.cpp -text Bonmin/src/Interfaces/Filter/BonBqpdSolver.hpp -text Bonmin/src/Interfaces/Filter/BonBqpdWarmStart.cpp -text Bonmin/src/Interfaces/Filter/BonBqpdWarmStart.hpp -text Bonmin/src/Interfaces/Filter/BonFilterSolver.cpp -text Bonmin/src/Interfaces/Filter/BonFilterSolver.hpp -text Bonmin/src/Interfaces/Filter/BonFilterTypes.hpp -text Bonmin/src/Interfaces/Filter/BonFilterWarmStart.cpp -text Bonmin/src/Interfaces/Filter/BonFilterWarmStart.hpp -text Bonmin/src/Interfaces/Filter/Makefile.am -text Bonmin/src/Interfaces/Filter/Makefile.in -text Bonmin/src/Interfaces/Ipopt/BonIpoptSolver.cpp -text Bonmin/src/Interfaces/Ipopt/BonIpoptSolver.hpp -text Bonmin/src/Interfaces/Ipopt/Makefile.am -text Bonmin/src/Interfaces/Ipopt/Makefile.in -text Bonmin/src/Interfaces/config.h.in -text Bonmin/src/Interfaces/config_bonmin.h.in -text Bonmin/src/Interfaces/config_bonmin_default.h -text Bonmin/src/Interfaces/config_default.h -text Bonmin/test/bonmin.opt -text Bonmin/test/mytoy.nl -text Bonmin/test/toy.mps.gz -text svneol=unset#application/x-gzip /Dependencies -text /INSTALL -text /LICENSE -text /README -text /appveyor.yml -text /config.guess -text /config.sub -text /configure -text /depcomp -text doxydoc/doxygen.conf -text doxydoc/doxygen.conf.in -text /install-sh -text /missing -text Bonmin-releases-1.8.9/.gitignore000066400000000000000000000000361436575401300165530ustar00rootroot00000000000000Bonmin/experimental/Bcp/.deps Bonmin-releases-1.8.9/.travis.yml000066400000000000000000000021101436575401300166670ustar00rootroot00000000000000language: cpp matrix: include: - os: linux addons: apt: packages: - gfortran - os: osx osx_image: xcode10 env: OSX=10.13 compiler: clang - os: osx osx_image: xcode9.2 env: OSX=10.12 compiler: clang - os: osx osx_image: xcode8 env: OSX=10.11 compiler: clang allow_failures: - os: osx before_script: - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then export PLATFORM=osx$OSX-x86_64-clang`clang -dumpversion`; fi - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update; brew install bash gcc; brew link --overwrite gcc; gfortran --version; fi - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then export PLATFORM=linux-x86_64-gcc`gcc -dumpversion`; fi - cd .. - wget https://raw.githubusercontent.com/coin-or/coinbrew/master/coinbrew - export PROJECT_URL=https://github.com/$TRAVIS_REPO_SLUG - export PROJECT=`echo $TRAVIS_REPO_SLUG | cut -d "/" -f 2` - bash ./coinbrew fetch $PROJECT_URL:$TRAVIS_BRANCH --no-prompt --skip-update > /dev/null script: - bash ./coinbrew build $PROJECT --no-prompt --verbosity=2 --test Bonmin-releases-1.8.9/Bonmin/000077500000000000000000000000001436575401300160065ustar00rootroot00000000000000Bonmin-releases-1.8.9/Bonmin/AUTHORS000066400000000000000000000017221436575401300170600ustar00rootroot00000000000000 Pierre Bonami, project manager (CNRS), John J. Forrest (IBM Copr.), Carl Laird, (Carnegie Mellon University), Lazlo Ladanyi (IBM Copr.), Jon Lee (IBM Copr.) Francois Margot (Carnegie Mellon University) Andreas Waechter (IBM Copr.) Claudia D'amborsio (Universita di Bologna, various improvement for non-convex problems). Pietro Belotti (Lehigh). Stefan Vigerske (Humboldt-University, found and fixed many bugs when developping the GAMSlink for Bonmin) Hassan Hijazi (Orange Labs, experimental code for separable problems + various improvements) We would also like to acknoweldge
L.T. Biegler (Carnegie Mellon University)
A.R. Conn (IBM)
G. Cornuejols (LIF Marseille, Carnegie Mellon University)
I.E. Grossmann (Carnegie Mellon University)
J. Lee (IBM)
A. Lodi (IBM, Universita di Bologna)
N. Sawaya (Carnegie Mellon University)
for their advices, help and other contributions to the underlying algorithms. Bonmin-releases-1.8.9/Bonmin/INSTALL000066400000000000000000000036021436575401300170400ustar00rootroot00000000000000Detailed installation instructions for Bonmin can be found in the Users Manual at http://www.coin-or.org/Bonmin/Intro.html Standard installation instructions for COIN-OR projects can be found at https://projects.coin-or.org/BuildTools I - Installing Bonmin The build process of Bonmin uses the standard GNU Autotools It has been successfully compiled and run on the following platforms: - Linux using g++ version 4.5 - Windows using version Cygwin 1.5.18 - Mac OS X using gcc 4.5 Note that Bonmin reauires a certain number of third parties dependencies. Please visit: https://projects.coin-or.org/Bonmin/wiki/ThirdParty to find out how to obtain and install them. Bonmin is then compiled and installed using the commands: % ./configure % make % make install This installs the executable bonmin in the bin subdirectory of the installation direcory. The configure script attempts to find all of the machine specific settings (compiler, libraries,...) necessary to compile and run the code. Although {\tt configure} should find most of the standard ones, you may have to manually specify a few of the settings. The options for the configure script can be found by issuing the command % ./configure --help For a more in depth description of these options, the reader is invited to refer to the COIN-OR BuildTools trac page at: https://projects.coin-or.org/BuildTools/ II - BUILDING THE DOCUMENTATION The documentation for Bonmin consists of a users' manual and a reference manual. You can build a local copy of the reference manual provided that you have Latex and Doxygen installed on your machine. To do it Issue the command % make doxydoc It calls Doxygen to build a copy of the reference manual. An html version of the reference manual can then be accessed in doc/html/index.html. III - RUNNING THE TEST PROGRAMS By issuing the command % make test you build and run the automatic test program for Bonmin. Bonmin-releases-1.8.9/Bonmin/LICENSE000066400000000000000000000257611436575401300170260ustar00rootroot00000000000000Eclipse 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. Bonmin-releases-1.8.9/Bonmin/Makefile.am000066400000000000000000000066551436575401300200560ustar00rootroot00000000000000# Copyright (C) 2006, 2008 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id$ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign ######################################################################## # Subdirectories # ######################################################################## # Here list all subdirectories into which to recurse SUBDIRS = src/Interfaces \ src/Algorithms \ src/CbcBonmin \ src/Apps # 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 = \ doc/Bonmin_ReferenceManual.hpp \ doc/Bonm-Min_UsersManual.pdf \ doc/Bonm-Min_UsersManual.tex \ doc/BOUM_Intro.tex \ doc/options.tex \ test/InterfaceTest.cpp \ test/CppExample/MyTMINLP.hpp \ test/CppExample/MyTMINLP.cpp \ test/CppExample/MyBonmin.cpp \ test/mytoy.nl ######################################################################## # Extra Targets # ######################################################################## .PHONY: doc test unitTest userman astyle nodeSolver doxydoc test: unitTest unitTest: all cd test; $(MAKE) test nodeSolver: all cd src/Apps; $(MAKE) nodeSolver doc: userman userman: $(top_srcdir)/doc/BONMIN_UsersManual.tex cd $(top_srcdir)/doc && pdflatex BONMIN_UsersManual.tex # 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 astyle: cd src/Algorithms; $(MAKE) astyle cd src/Algorithms/Ampl; $(MAKE) astyle cd src/Algorithms/Branching; $(MAKE) astyle cd src/Algorithms/OaGenerators; $(MAKE) astyle cd src/Apps; $(MAKE) astyle cd src/CbcBonmin; $(MAKE) astyle cd src/Interfaces; $(MAKE) astyle cd src/Interfaces/Ampl; $(MAKE) astyle cd src/Interfaces/Filter; $(MAKE) astyle cd src/Interfaces/Ipopt; $(MAKE) astyle ######################################################################## # Installation of the .pc file # ######################################################################## pkgconfiglibdir = $(libdir)/pkgconfig pkgconfiglib_DATA = bonmin.pc if COIN_HAS_ASL pkgconfiglib_DATA += bonminamplinterface.pc endif ######################################################################## # Maintainer Stuff # ######################################################################## # Files that are generated and should be cleaned with make distclean DISTCLEANFILES = \ Test/*.$(OBJEXT) \ Test/unitTest$(EXEEXT) \ Test/CppExample/*.$(OBJEXT) \ Test/CppExample/CppExample$(EXEEXT) \ Test/testtoy.nl include BuildTools/Makemain.inc Bonmin-releases-1.8.9/Bonmin/Makefile.in000066400000000000000000001056231436575401300200620ustar00rootroot00000000000000# 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, 2008 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 @COIN_HAS_ASL_TRUE@am__append_2 = bonminamplinterface.pc DIST_COMMON = README $(am__configure_deps) \ $(srcdir)/BuildTools/Makemain.inc $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/bonmin-uninstalled.pc.in \ $(srcdir)/bonmin.pc.in $(top_srcdir)/configure \ $(top_srcdir)/doxydoc/doxygen.conf.in \ $(top_srcdir)/examples/CppExample/Makefile.in \ $(top_srcdir)/examples/CppExample/MyBonmin.cpp \ $(top_srcdir)/examples/CppExample/MyTMINLP.cpp \ $(top_srcdir)/examples/CppExample/MyTMINLP.hpp \ $(top_srcdir)/examples/OptionDocGen/Makefile.in \ $(top_srcdir)/src/CbcBonmin/bonminamplinterface-uninstalled.pc.in \ $(top_srcdir)/src/CbcBonmin/bonminamplinterface.pc.in AUTHORS \ INSTALL config.guess config.sub depcomp install-sh ltmain.sh \ missing @HAVE_EXTERNALS_TRUE@am__append_3 = Dependencies @HAVE_EXTERNALS_TRUE@am__append_4 = .Dependencies-stamp subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno configure.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/Interfaces/config.h \ $(top_builddir)/src/Interfaces/config_bonmin.h CONFIG_CLEAN_FILES = examples/OptionDocGen/Makefile \ examples/CppExample/Makefile bonmin.pc bonmin-uninstalled.pc \ doxydoc/doxygen.conf bonminamplinterface.pc \ bonminamplinterface-uninstalled.pc SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-exec-recursive install-info-recursive \ install-recursive installcheck-recursive installdirs-recursive \ pdf-recursive ps-recursive uninstall-info-recursive \ uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(pkgconfiglibdir)" pkgconfiglibDATA_INSTALL = $(INSTALL_DATA) DATA = $(pkgconfiglib_DATA) ETAGS = etags CTAGS = ctags DIST_SUBDIRS = src/Interfaces src/Algorithms src/CbcBonmin src/Apps \ 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@ ASL_CFLAGS = @ASL_CFLAGS@ ASL_CFLAGS_INSTALLED = @ASL_CFLAGS_INSTALLED@ ASL_DATA = @ASL_DATA@ ASL_DATA_INSTALLED = @ASL_DATA_INSTALLED@ ASL_DEPENDENCIES = @ASL_DEPENDENCIES@ ASL_LIBS = @ASL_LIBS@ ASL_LIBS_INSTALLED = @ASL_LIBS_INSTALLED@ ASTYLE = @ASTYLE@ ASTYLEFLAGS = @ASTYLEFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BONMINAMPLINTERFACELIB_CFLAGS = @BONMINAMPLINTERFACELIB_CFLAGS@ BONMINAMPLINTERFACELIB_CFLAGS_INSTALLED = @BONMINAMPLINTERFACELIB_CFLAGS_INSTALLED@ BONMINAMPLINTERFACELIB_DEPENDENCIES = @BONMINAMPLINTERFACELIB_DEPENDENCIES@ BONMINAMPLINTERFACELIB_LIBS = @BONMINAMPLINTERFACELIB_LIBS@ BONMINAMPLINTERFACELIB_LIBS_INSTALLED = @BONMINAMPLINTERFACELIB_LIBS_INSTALLED@ BONMINAMPLINTERFACELIB_PCLIBS = @BONMINAMPLINTERFACELIB_PCLIBS@ BONMINAMPLINTERFACELIB_PCREQUIRES = @BONMINAMPLINTERFACELIB_PCREQUIRES@ BONMINLIB_CFLAGS = @BONMINLIB_CFLAGS@ BONMINLIB_CFLAGS_INSTALLED = @BONMINLIB_CFLAGS_INSTALLED@ BONMINLIB_DEPENDENCIES = @BONMINLIB_DEPENDENCIES@ BONMINLIB_LIBS = @BONMINLIB_LIBS@ BONMINLIB_LIBS_INSTALLED = @BONMINLIB_LIBS_INSTALLED@ BONMINLIB_PCLIBS = @BONMINLIB_PCLIBS@ BONMINLIB_PCREQUIRES = @BONMINLIB_PCREQUIRES@ BONMIN_SVN_REV = @BONMIN_SVN_REV@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINDEPEND_CFLAGS = @COINDEPEND_CFLAGS@ COINDEPEND_CFLAGS_INSTALLED = @COINDEPEND_CFLAGS_INSTALLED@ COINDEPEND_DATA = @COINDEPEND_DATA@ COINDEPEND_DATA_INSTALLED = @COINDEPEND_DATA_INSTALLED@ COINDEPEND_DEPENDENCIES = @COINDEPEND_DEPENDENCIES@ COINDEPEND_LIBS = @COINDEPEND_LIBS@ COINDEPEND_LIBS_INSTALLED = @COINDEPEND_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_ASL_FALSE = @COIN_HAS_ASL_FALSE@ COIN_HAS_ASL_TRUE = @COIN_HAS_ASL_TRUE@ COIN_HAS_COINDEPEND_FALSE = @COIN_HAS_COINDEPEND_FALSE@ COIN_HAS_COINDEPEND_TRUE = @COIN_HAS_COINDEPEND_TRUE@ COIN_HAS_CPX_FALSE = @COIN_HAS_CPX_FALSE@ COIN_HAS_CPX_TRUE = @COIN_HAS_CPX_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_FILTERSQP_FALSE = @COIN_HAS_FILTERSQP_FALSE@ COIN_HAS_FILTERSQP_TRUE = @COIN_HAS_FILTERSQP_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_OSICPX_FALSE = @COIN_HAS_OSICPX_FALSE@ COIN_HAS_OSICPX_TRUE = @COIN_HAS_OSICPX_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPXINCDIR = @CPXINCDIR@ CPXLIB = @CPXLIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ 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@ FILTERSQP_CFLAGS = @FILTERSQP_CFLAGS@ FILTERSQP_CFLAGS_INSTALLED = @FILTERSQP_CFLAGS_INSTALLED@ FILTERSQP_DATA = @FILTERSQP_DATA@ FILTERSQP_DATA_INSTALLED = @FILTERSQP_DATA_INSTALLED@ FILTERSQP_DEPENDENCIES = @FILTERSQP_DEPENDENCIES@ FILTERSQP_LIBS = @FILTERSQP_LIBS@ FILTERSQP_LIBS_INSTALLED = @FILTERSQP_LIBS_INSTALLED@ FLIBS = @FLIBS@ 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@ OSICPX_CFLAGS = @OSICPX_CFLAGS@ OSICPX_CFLAGS_INSTALLED = @OSICPX_CFLAGS_INSTALLED@ OSICPX_DATA = @OSICPX_DATA@ OSICPX_DATA_INSTALLED = @OSICPX_DATA_INSTALLED@ OSICPX_DEPENDENCIES = @OSICPX_DEPENDENCIES@ OSICPX_LIBS = @OSICPX_LIBS@ OSICPX_LIBS_INSTALLED = @OSICPX_LIBS_INSTALLED@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ 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@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ dos2unix = @dos2unix@ 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 # ######################################################################## # Here list all subdirectories into which to recurse SUBDIRS = src/Interfaces src/Algorithms src/CbcBonmin src/Apps \ $(am__append_1) ######################################################################## # Additional files to be included in tarball # ######################################################################## # Here we need include all files that are not mentioned in other Makefiles EXTRA_DIST = doc/Bonmin_ReferenceManual.hpp \ doc/Bonm-Min_UsersManual.pdf doc/Bonm-Min_UsersManual.tex \ doc/BOUM_Intro.tex doc/options.tex test/InterfaceTest.cpp \ test/CppExample/MyTMINLP.hpp test/CppExample/MyTMINLP.cpp \ test/CppExample/MyBonmin.cpp test/mytoy.nl $(am__append_3) ######################################################################## # Installation of the .pc file # ######################################################################## pkgconfiglibdir = $(libdir)/pkgconfig pkgconfiglib_DATA = bonmin.pc $(am__append_2) ######################################################################## # Maintainer Stuff # ######################################################################## # Files that are generated and should be cleaned with make distclean DISTCLEANFILES = Test/*.$(OBJEXT) Test/unitTest$(EXEEXT) \ Test/CppExample/*.$(OBJEXT) \ Test/CppExample/CppExample$(EXEEXT) Test/testtoy.nl \ $(am__append_4) $(VPATH_DISTCLEANFILES) DocFiles = README README.md AUTHORS AUTHORS.md LICENSE LICENSE.md DocInstallDir = $(datadir)/coin/doc/$(PACKAGE_NAME) COIN_HAS_DOXYGEN = @COIN_HAS_DOXYGEN_TRUE@TRUE COIN_HAS_LATEX = @COIN_HAS_LATEX_TRUE@TRUE all: all-recursive .SUFFIXES: am--refresh: @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/BuildTools/Makemain.inc $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \ cd $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) examples/OptionDocGen/Makefile: $(top_builddir)/config.status $(top_srcdir)/examples/OptionDocGen/Makefile.in cd $(top_builddir) && $(SHELL) ./config.status $@ examples/CppExample/Makefile: $(top_builddir)/config.status $(top_srcdir)/examples/CppExample/Makefile.in cd $(top_builddir) && $(SHELL) ./config.status $@ bonmin.pc: $(top_builddir)/config.status $(srcdir)/bonmin.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ bonmin-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/bonmin-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 $@ bonminamplinterface.pc: $(top_builddir)/config.status $(top_srcdir)/src/CbcBonmin/bonminamplinterface.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ bonminamplinterface-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/CbcBonmin/bonminamplinterface-uninstalled.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: install-pkgconfiglibDATA: $(pkgconfiglib_DATA) @$(NORMAL_INSTALL) test -z "$(pkgconfiglibdir)" || $(mkdir_p) "$(DESTDIR)$(pkgconfiglibdir)" @list='$(pkgconfiglib_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(pkgconfiglibDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfiglibdir)/$$f'"; \ $(pkgconfiglibDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfiglibdir)/$$f"; \ done uninstall-pkgconfiglibDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfiglib_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(pkgconfiglibdir)/$$f'"; \ rm -f "$(DESTDIR)$(pkgconfiglibdir)/$$f"; \ done # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) mkdir $(distdir) $(mkdir_p) $(distdir)/. $(distdir)/BuildTools $(distdir)/doc $(distdir)/doxydoc $(distdir)/examples/CppExample $(distdir)/examples/OptionDocGen $(distdir)/src/CbcBonmin $(distdir)/test $(distdir)/test/CppExample @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(mkdir_p) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ distdir) \ || exit 1; \ fi; \ done -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r $(distdir) dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && cd $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' distuninstallcheck: @cd $(distuninstallcheck_dir) \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(pkgconfiglibdir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-libtool \ distclean-local distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive info: info-recursive info-am: install-data-am: install-pkgconfiglibDATA 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 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-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-info-am \ uninstall-local uninstall-pkgconfiglibDATA ######################################################################## # Extra Targets # ######################################################################## .PHONY: doc test unitTest userman astyle nodeSolver doxydoc test: unitTest unitTest: all cd test; $(MAKE) test nodeSolver: all cd src/Apps; $(MAKE) nodeSolver doc: userman userman: $(top_srcdir)/doc/BONMIN_UsersManual.tex cd $(top_srcdir)/doc && pdflatex BONMIN_UsersManual.tex # 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 astyle: cd src/Algorithms; $(MAKE) astyle cd src/Algorithms/Ampl; $(MAKE) astyle cd src/Algorithms/Branching; $(MAKE) astyle cd src/Algorithms/OaGenerators; $(MAKE) astyle cd src/Apps; $(MAKE) astyle cd src/CbcBonmin; $(MAKE) astyle cd src/Interfaces; $(MAKE) astyle cd src/Interfaces/Ampl; $(MAKE) astyle cd src/Interfaces/Filter; $(MAKE) astyle cd src/Interfaces/Ipopt; $(MAKE) astyle doxygen-docs: if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/"; then \ doxygen doxydoc/doxygen.conf;\ fi;\ fi pdf-doxygen-docs: doxygen-docs if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/latex"; then \ if test "$(COIN_HAS_LATEX)" = TRUE; then \ cd doxydoc/latex;\ $(MAKE) pdf;\ cd -;\ fi;\ fi;\ fi clean-doxygen-docs: if test -d "doxydoc/"; then \ cd doxydoc ;\ rm -rf html latex *.log *.tag;\ fi install-doxygen-docs: doxygen-docs if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/"; then \ test -d "$(DESTDIR)$(DocInstallDir)/doxydoc" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)/doxydoc"; \ $(INSTALL_DATA) @coin_doxy_tagname@ "$(DESTDIR)$(DocInstallDir)/@coin_doxy_tagname@";\ if test -f "doxydoc/latex/refman.pdf"; then \ $(INSTALL_DATA) doxydoc/latex/refman.pdf "$(DESTDIR)$(DocInstallDir)";\ fi;\ if test -d "doxydoc/html"; then \ test -d "$(DESTDIR)$(DocInstallDir)/doxydoc/search/" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)/doxydoc/search/"; \ $(INSTALL_DATA) doxydoc/html/*.* "$(DESTDIR)$(DocInstallDir)/doxydoc";\ $(INSTALL_DATA) doxydoc/html/search/*.* "$(DESTDIR)$(DocInstallDir)/doxydoc/search";\ fi;\ fi;\ fi uninstall-doxygen-docs: if test -d "$(DESTDIR)$(DocInstallDir)/doxydoc/"; then \ rm -rf "$(DESTDIR)$(DocInstallDir)/doxydoc/"; \ fi if test -f "$(DESTDIR)$(DocInstallDir)/refman.pdf"; then \ rm -f "$(DESTDIR)$(DocInstallDir)/refman.pdf"; \ fi all-doxygen-docs: for dir in $(subdirs) ; do \ do_project=true;\ for proj in $(COIN_SKIP_DOXYGEN); do\ if test $$dir = $$proj; then\ do_project=false;\ fi;\ done;\ if test -r $$dir/doxydoc & $$do_project = true; then \ (cd $$dir ; $(MAKE) doxygen-docs) \ fi ; \ done ; clean-all-doxygen-docs: for dir in $(subdirs) ; do \ if test -r $$dir/doxydoc ; then \ (cd $$dir ; $(MAKE) clean-doxygen-docs) \ fi ; \ done ; install-all-doxygen-docs: all-doxygen-docs for dir in $(subdirs) ; do \ do_project=true;\ for proj in $(COIN_SKIP_DOXYGEN); do\ if test $$dir = $$proj; then\ do_project=false;\ fi;\ done;\ if test -r $$dir/doxydoc & $$do_project = true; then \ (cd $$dir ; $(MAKE) install-doxygen-docs) \ fi ; \ done ; uninstall-all-doxygen-docs: for dir in $(subdirs) ; do \ if test -r $$dir/doxydoc ; then \ (cd $$dir ; $(MAKE) uninstall-doxygen-docs) \ fi ; \ done ; install-doc: 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: Bonmin-releases-1.8.9/Bonmin/README000066400000000000000000000042731436575401300166740ustar00rootroot00000000000000README file for Bonmin Bonmin (Basic Open-source Nonlinear Mixed INteger programming) is an open-source code for solving general MINLP (Mixed Integer NonLinear Programming) problems. It is distributed on COIN-OR (www.coin-or.org) under the EPL (Eclipse Public License). The EPL is a license approved by the OSI (Open Source Initiative), thus Bonmin is OSI Certified Open Source Software. Bonmin features several algorithms - B-BB is a NLP-based branch-and-bound algorithm, - B-OA is an outer-approximation decomposition algorithm, - B-QG is an implementation of Quesada and Grossmann's branch-and-cut algorithm, - B-Hyb is a hybrid outer-approximation based branch-and-cut algorithm. Bonmin documentation consists of a users' manual and a refernece manual they may be found on-line at the project web-site or can be built from the project source distribution. Instructions are provided in the INSTALL file. BONMIN MAINTAINER : Pierre Bonami (contact at pbonami@andrew.cmu.edu) BONMIN WEB-PAGE : https://projects.coin-or.org/Bonmin BONMIN MAILING LIST : http://list.coin-or.org/mailman/listinfo/bonmin For obtaining support, reporting bug, requesting feature you should write to the mailing-list (or if it does not exists yet to the project maintainer). For contributing code you should either contact the project maintainer or write to the mailing list. You will find legal requirement here : http://www.coin-or.org/contributions.html#contributions. This project was initiated in 2004 by IBM and Carnegie Mellon University as part of a joint effort to study algorithm for MINLP. You may find additional informations on at http://egon.cheme.cmu.edu/ibm/page.htm. In partivular - A publicly available library of test instances of Convex MINLPs, - Research papers on new algorithmic procedures for MINLP. DEPENDENCIES : Bonmin depends on the following external software : - COIN-OR software : CoinUtils, Cbc, Cgl, Clp, Ipopt - Others : blas, lapck, HSL. EXTERNAL RESSOURCES : COIN-OR : www.coin-or.org Eclipse Public License : http://www.opensource.org/licenses/cpl.php IBM-CMU Open Source MINLP web page : http://egon.cheme.cmu.edu/ibm/page.htm Bonmin is available on NEOS : http://www-neos.mcs.anl.gov/ Bonmin-releases-1.8.9/Bonmin/bonmin-uninstalled.pc.in000066400000000000000000000012261436575401300225420ustar00rootroot00000000000000prefix=@prefix@ libdir=@ABSBUILDDIR@/src/CbcBonmin Name: Bonmin Description: Basic Open-source Nonlinear Mixed Integer programming URL: https://projects.coin-or.org/Bonmin Version: @PACKAGE_VERSION@ Libs: ${libdir}/libbonmin.la @BONMINLIB_PCLIBS@ Cflags: -I@abs_source_dir@/src -I@abs_source_dir@/src/Algorithms -I@abs_source_dir@/src/Algorithms/Branching -I@abs_source_dir@/src/Algorithms/OaGenerators -I@abs_source_dir@/src/Algorithms/QuadCuts -I@abs_source_dir@/src/CbcBonmin -I@abs_source_dir@/src/CbcBonmin/Heuristics -I@abs_source_dir@/src/Interfaces -I@abs_source_dir@/src/Interfaces/Ipopt -I@ABSBUILDDIR@/src/Interfaces Requires: @BONMINLIB_PCREQUIRES@ Bonmin-releases-1.8.9/Bonmin/bonmin.pc.in000066400000000000000000000005231436575401300202210ustar00rootroot00000000000000prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@/coin Name: Bonmin Description: Basic Open-source Nonlinear Mixed Integer programming URL: https://projects.coin-or.org/Bonmin Version: @PACKAGE_VERSION@ Libs: -L${libdir} -lbonmin @BONMINLIB_PCLIBS@ Cflags: -I${includedir} Requires: @BONMINLIB_PCREQUIRES@ Bonmin-releases-1.8.9/Bonmin/config.guess000077500000000000000000001270631436575401300203370ustar00rootroot00000000000000#! /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: Bonmin-releases-1.8.9/Bonmin/config.sub000077500000000000000000000777261436575401300200140ustar00rootroot00000000000000#! /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: Bonmin-releases-1.8.9/Bonmin/configure000077500000000000000000033405431436575401300177310ustar00rootroot00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.59 for Bonmin 1.8.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, 2008 International Business Machines and others. # All Rights Reserved. # This file is part of the open source package BONMIN 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='Bonmin' PACKAGE_TARNAME='bonmin' PACKAGE_VERSION='1.8.9' PACKAGE_STRING='Bonmin 1.8.9' PACKAGE_BUGREPORT='bonmin@list.coin-or.org' ac_unique_file="src/CbcBonmin/BonCbc.hpp" 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 BONMIN_SVN_REV CDEFS ADD_CFLAGS DBG_CFLAGS OPT_CFLAGS sol_cc_compiler CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT COIN_CC_IS_CL_TRUE COIN_CC_IS_CL_FALSE MPICC CXXDEFS ADD_CXXFLAGS DBG_CXXFLAGS OPT_CXXFLAGS CXX CXXFLAGS ac_ct_CXX COIN_CXX_IS_CL_TRUE COIN_CXX_IS_CL_FALSE MPICXX EGREP LN_S INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBTOOLM4 have_autoconf have_automake have_svn BUILDTOOLSDIR AUX_DIR abs_source_dir abs_lib_dir abs_include_dir abs_bin_dir HAVE_EXTERNALS_TRUE HAVE_EXTERNALS_FALSE host host_cpu host_vendor host_os ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CPP CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL ac_c_preproc_warn_flag ac_cxx_preproc_warn_flag dos2unix RPATH_FLAGS LT_LDFLAGS DEPENDENCY_LINKING_TRUE DEPENDENCY_LINKING_FALSE PKG_CONFIG ac_ct_PKG_CONFIG COIN_HAS_PKGCONFIG_TRUE COIN_HAS_PKGCONFIG_FALSE COIN_PKG_CONFIG_PATH COIN_PKG_CONFIG_PATH_UNINSTALLED COINDEPEND_LIBS COINDEPEND_CFLAGS COINDEPEND_DATA COINDEPEND_DEPENDENCIES COINDEPEND_LIBS_INSTALLED COINDEPEND_CFLAGS_INSTALLED COINDEPEND_DATA_INSTALLED BONMINLIB_CFLAGS BONMINLIB_LIBS BONMINLIB_PCLIBS BONMINLIB_PCREQUIRES BONMINLIB_DEPENDENCIES BONMINLIB_CFLAGS_INSTALLED BONMINLIB_LIBS_INSTALLED COIN_HAS_COINDEPEND_TRUE COIN_HAS_COINDEPEND_FALSE ASL_LIBS ASL_CFLAGS ASL_DATA ASL_DEPENDENCIES ASL_LIBS_INSTALLED ASL_CFLAGS_INSTALLED ASL_DATA_INSTALLED BONMINAMPLINTERFACELIB_CFLAGS BONMINAMPLINTERFACELIB_LIBS BONMINAMPLINTERFACELIB_PCLIBS BONMINAMPLINTERFACELIB_PCREQUIRES BONMINAMPLINTERFACELIB_DEPENDENCIES BONMINAMPLINTERFACELIB_CFLAGS_INSTALLED BONMINAMPLINTERFACELIB_LIBS_INSTALLED COIN_HAS_ASL_TRUE COIN_HAS_ASL_FALSE OSICPX_LIBS OSICPX_CFLAGS OSICPX_DATA OSICPX_DEPENDENCIES OSICPX_LIBS_INSTALLED OSICPX_CFLAGS_INSTALLED OSICPX_DATA_INSTALLED COIN_HAS_OSICPX_TRUE COIN_HAS_OSICPX_FALSE CPXINCDIR CPXLIB COIN_HAS_CPX_TRUE COIN_HAS_CPX_FALSE FILTERSQP_LIBS FILTERSQP_CFLAGS FILTERSQP_DATA FILTERSQP_DEPENDENCIES FILTERSQP_LIBS_INSTALLED FILTERSQP_CFLAGS_INSTALLED FILTERSQP_DATA_INSTALLED COIN_HAS_FILTERSQP_TRUE COIN_HAS_FILTERSQP_FALSE ADD_FFLAGS DBG_FFLAGS OPT_FFLAGS MPIF77 FLIBS ASTYLE ASTYLEFLAGS coin_have_doxygen coin_have_latex coin_doxy_usedot coin_doxy_tagname coin_doxy_logname COIN_HAS_DOXYGEN_TRUE COIN_HAS_DOXYGEN_FALSE COIN_HAS_LATEX_TRUE COIN_HAS_LATEX_FALSE coin_doxy_tagfiles coin_doxy_excludes LIBEXT VPATH_DISTCLEANFILES ABSBUILDDIR LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CDEFS_set=${CDEFS+set} ac_env_CDEFS_value=$CDEFS ac_cv_env_CDEFS_set=${CDEFS+set} ac_cv_env_CDEFS_value=$CDEFS ac_env_ADD_CFLAGS_set=${ADD_CFLAGS+set} ac_env_ADD_CFLAGS_value=$ADD_CFLAGS ac_cv_env_ADD_CFLAGS_set=${ADD_CFLAGS+set} ac_cv_env_ADD_CFLAGS_value=$ADD_CFLAGS ac_env_DBG_CFLAGS_set=${DBG_CFLAGS+set} ac_env_DBG_CFLAGS_value=$DBG_CFLAGS ac_cv_env_DBG_CFLAGS_set=${DBG_CFLAGS+set} ac_cv_env_DBG_CFLAGS_value=$DBG_CFLAGS ac_env_OPT_CFLAGS_set=${OPT_CFLAGS+set} ac_env_OPT_CFLAGS_value=$OPT_CFLAGS ac_cv_env_OPT_CFLAGS_set=${OPT_CFLAGS+set} ac_cv_env_OPT_CFLAGS_value=$OPT_CFLAGS ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_MPICC_set=${MPICC+set} ac_env_MPICC_value=$MPICC ac_cv_env_MPICC_set=${MPICC+set} ac_cv_env_MPICC_value=$MPICC ac_env_CXXDEFS_set=${CXXDEFS+set} ac_env_CXXDEFS_value=$CXXDEFS ac_cv_env_CXXDEFS_set=${CXXDEFS+set} ac_cv_env_CXXDEFS_value=$CXXDEFS ac_env_ADD_CXXFLAGS_set=${ADD_CXXFLAGS+set} ac_env_ADD_CXXFLAGS_value=$ADD_CXXFLAGS ac_cv_env_ADD_CXXFLAGS_set=${ADD_CXXFLAGS+set} ac_cv_env_ADD_CXXFLAGS_value=$ADD_CXXFLAGS ac_env_DBG_CXXFLAGS_set=${DBG_CXXFLAGS+set} ac_env_DBG_CXXFLAGS_value=$DBG_CXXFLAGS ac_cv_env_DBG_CXXFLAGS_set=${DBG_CXXFLAGS+set} ac_cv_env_DBG_CXXFLAGS_value=$DBG_CXXFLAGS ac_env_OPT_CXXFLAGS_set=${OPT_CXXFLAGS+set} ac_env_OPT_CXXFLAGS_value=$OPT_CXXFLAGS ac_cv_env_OPT_CXXFLAGS_set=${OPT_CXXFLAGS+set} ac_cv_env_OPT_CXXFLAGS_value=$OPT_CXXFLAGS ac_env_CXX_set=${CXX+set} ac_env_CXX_value=$CXX ac_cv_env_CXX_set=${CXX+set} ac_cv_env_CXX_value=$CXX ac_env_CXXFLAGS_set=${CXXFLAGS+set} ac_env_CXXFLAGS_value=$CXXFLAGS ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set} ac_cv_env_CXXFLAGS_value=$CXXFLAGS ac_env_MPICXX_set=${MPICXX+set} ac_env_MPICXX_value=$MPICXX ac_cv_env_MPICXX_set=${MPICXX+set} ac_cv_env_MPICXX_value=$MPICXX ac_env_CPP_set=${CPP+set} ac_env_CPP_value=$CPP ac_cv_env_CPP_set=${CPP+set} ac_cv_env_CPP_value=$CPP ac_env_CXXCPP_set=${CXXCPP+set} ac_env_CXXCPP_value=$CXXCPP ac_cv_env_CXXCPP_set=${CXXCPP+set} ac_cv_env_CXXCPP_value=$CXXCPP ac_env_F77_set=${F77+set} ac_env_F77_value=$F77 ac_cv_env_F77_set=${F77+set} ac_cv_env_F77_value=$F77 ac_env_FFLAGS_set=${FFLAGS+set} ac_env_FFLAGS_value=$FFLAGS ac_cv_env_FFLAGS_set=${FFLAGS+set} ac_cv_env_FFLAGS_value=$FFLAGS ac_env_LT_LDFLAGS_set=${LT_LDFLAGS+set} ac_env_LT_LDFLAGS_value=$LT_LDFLAGS ac_cv_env_LT_LDFLAGS_set=${LT_LDFLAGS+set} ac_cv_env_LT_LDFLAGS_value=$LT_LDFLAGS 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 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_MPIF77_set=${MPIF77+set} ac_env_MPIF77_value=$MPIF77 ac_cv_env_MPIF77_set=${MPIF77+set} ac_cv_env_MPIF77_value=$MPIF77 # # 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 Bonmin 1.8.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] --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 Bonmin 1.8.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-debug compile all projects with debug options tests (implies --disable-shared) --enable-debug-bonmin compile project Bonmin with debug compiler flags --enable-msvc Prefer (i)cl/ifort/link over GNU on MinGW/Cygwin. --enable-static[=PKGS] build static libraries [default=no] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-shared[=PKGS] build shared libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --disable-dependency-linking disable linking library dependencies into shared libraries --disable-pkg-config disable use of pkg-config (if available) --disable-interpackage-dependencies disables deduction of Makefile dependencies from package linker flags --disable-cplex-libcheck skip the link check at configuration time Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-bonmin-verbosity specify the debug verbosity level for project Bonmin --with-bonmin-checklevel specify the sanity check level for project Bonmin --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-pic try to use only PIC/non-PIC objects [default=use both] --with-tags[=TAGS] include additional configurations [automatic] --with-coin-instdir prefix of installation directory for precompiled COIN packages --with-coindepend-lib linker flags for using package CoinDepend --with-coindepend-incdir directory with header files for using package CoinDepend --with-coindepend-datadir directory with data files for using package CoinDepend --with-asl-lib linker flags for using package ASL --with-asl-incdir directory with header files for using package ASL --with-asl-datadir directory with data files for using package ASL --with-osicpx-lib linker flags for using package OsiCpx --with-osicpx-incdir directory with header files for using package OsiCpx --with-osicpx-datadir directory with data files for using package OsiCpx --with-cplex-incdir specify the header file directory for library Cplex --with-cplex-lib specify the flags used to link with the library Cplex --with-filtersqp specify library for FilterSQP (or BUILD for compilation) --with-filtersqp-lib linker flags for using package FilterSQP --with-filtersqp-incdir directory with header files for using package FilterSQP --with-filtersqp-datadir directory with data files for using package FilterSQP --with-dot use dot (from graphviz) when creating documentation with doxygen if available; --without-dot to disable Some influential environment variables: CDEFS Additional -D flags to be used when compiling C code. ADD_CFLAGS Additional C compiler options DBG_CFLAGS Debug C compiler options OPT_CFLAGS Optimize C compiler options CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory MPICC C MPI Compiler CXXDEFS Additional -D flags to be used when compiling C++ code. ADD_CXXFLAGS Additional C++ compiler options DBG_CXXFLAGS Debug C++ compiler options OPT_CXXFLAGS Optimize C++ compiler options CXX C++ compiler command CXXFLAGS C++ compiler flags MPICXX C++ MPI Compiler CPP C preprocessor CXXCPP C++ preprocessor F77 Fortran 77 compiler command FFLAGS Fortran 77 compiler flags LT_LDFLAGS Flags passed to libtool when building libraries or executables that are installed PKG_CONFIG path to pkg-config utility ADD_FFLAGS Additional Fortran compiler options DBG_FFLAGS Debug Fortran compiler options OPT_FFLAGS Optimize Fortran compiler options MPIF77 Fortran MPI Compiler 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 Bonmin configure 1.8.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, 2008 International Business Machines and others. All Rights Reserved. This file is part of the open source package BONMIN 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 Bonmin $as_me 1.8.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. ############################################################################# # 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 BONMIN_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 BONMIN_VERSION_MAJOR $coin_majorver _ACEOF cat >>confdefs.h <<_ACEOF #define BONMIN_VERSION_MINOR $coin_minorver _ACEOF cat >>confdefs.h <<_ACEOF #define BONMIN_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=BONMIN # 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 BONMIN_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 BONMIN_SVN_REV $BONMIN_SVN_REV _ACEOF fi fi # Capture libtool library version, if given. coin_libversion=12:9:8 # 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-bonmin or --disable-debug-bonmin was given. if test "${enable_debug_bonmin+set}" = set; then enableval="$enable_debug_bonmin" case "${enableval}" in yes) coin_debug_compile=true ;; no) coin_debug_compile=false ;; *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-debug-bonmin" >&5 echo "$as_me: error: bad value ${enableval} for --enable-debug-bonmin" >&2;} { (exit 1); exit 1; }; } ;; esac else : fi; # m4_ifvaln([Bonmin], 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-bonmin-verbosity or --without-bonmin-verbosity was given. if test "${with_bonmin_verbosity+set}" = set; then withval="$with_bonmin_verbosity" if test "$withval" = yes; then withval=1 fi coin_bonmin_verbosity=$withval else coin_bonmin_verbosity=0 fi; cat >>confdefs.h <<_ACEOF #define COIN_BONMIN_VERBOSITY $coin_bonmin_verbosity _ACEOF # Check whether --with-bonmin-checklevel or --without-bonmin-checklevel was given. if test "${with_bonmin_checklevel+set}" = set; then withval="$with_bonmin_checklevel" if test "$withval" = yes; then withval=1 fi coin_bonmin_checklevel=$withval else coin_bonmin_checklevel=0 fi; cat >>confdefs.h <<_ACEOF #define COIN_BONMIN_CHECKLEVEL $coin_bonmin_checklevel _ACEOF # m4_ifvaln([Bonmin], # Get the name of the C++ compiler and appropriate compiler options # for backward compatibility # Check whether --enable-doscompile or --disable-doscompile was given. if test "${enable_doscompile+set}" = set; then enableval="$enable_doscompile" enable_doscompile=$enableval else enable_doscompile=no fi; # Check whether --enable-msvc or --disable-msvc was given. if test "${enable_msvc+set}" = set; then enableval="$enable_msvc" enable_msvc=$enableval else enable_msvc=no if test "$enable_doscompile" = msvc ; then enable_msvc=yes elif test "$enable_doscompile" != no ; then { { echo "$as_me:$LINENO: error: --enable-doscompile=$enable_doscompile not supported anymore." >&5 echo "$as_me: error: --enable-doscompile=$enable_doscompile not supported anymore." >&2;} { (exit 1); exit 1; }; } fi fi; if test "$enable_msvc" = MD; then enable_shared=yes enable_msvc=yes fi if test "$enable_msvc" = yes; then case $build in *-cygwin* | *-mingw*) ;; *) { { echo "$as_me:$LINENO: error: --enable-msvc option makes sense only under Cygwin or MinGW" >&5 echo "$as_me: error: --enable-msvc option makes sense only under Cygwin or MinGW" >&2;} { (exit 1); exit 1; }; } ;; esac fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # For consistency, we set the C compiler to the same value of the C++ # compiler, if the C++ is set, but the C compiler isn't (only for CXX=cl) if test x"$CXX" != x; then case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) if test x"$CC" = x; then CC="$CXX" { echo "$as_me:$LINENO: WARNING: C++ compiler name provided as $CXX, but CC is unset. Setting CC to $CXX" >&5 echo "$as_me: WARNING: C++ compiler name provided as $CXX, but CC is unset. Setting CC to $CXX" >&2;} fi ;; esac fi coin_has_cc=yes save_cflags="$CFLAGS" # For *-*-solaris*, promote Studio/Workshop cc compiler to front of list. # Depending on the user's PATH, when Studio/Workshop cc is not present we may # find /usr/ucb/cc, which is almost certainly not a good choice for the C # compiler. In this case, put cc after gcc. case $build in *-cygwin* | *-mingw*) if test "$enable_msvc" = yes ; then comps="icl cl gcc" else comps="gcc icl cl" fi ;; *-*-solaris*) # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_sol_cc_compiler+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$sol_cc_compiler"; then ac_cv_prog_sol_cc_compiler="$sol_cc_compiler" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_sol_cc_compiler="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_sol_cc_compiler shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set sol_cc_compiler to just the basename; use the full file name. shift ac_cv_prog_sol_cc_compiler="$as_dir/$ac_word${1+' '}$@" fi fi fi fi sol_cc_compiler=$ac_cv_prog_sol_cc_compiler if test -n "$sol_cc_compiler"; then echo "$as_me:$LINENO: result: $sol_cc_compiler" >&5 echo "${ECHO_T}$sol_cc_compiler" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "$sol_cc_compiler" = "cc" ; then comps="cc xlc gcc pgcc icc" else comps="xlc gcc pgcc icc cc" fi ;; *-*-darwin*) comps="clang gcc cc" ;; *-linux-gnu*) comps="gcc cc pgcc icc xlc" ;; *-linux-*) comps="xlc gcc cc pgcc icc" ;; *) comps="xlc_r xlc cc gcc pgcc icc" ;; esac # We delete the cached value, since the test might not have been # performed with our choice of compilers earlier $as_unset ac_cv_prog_CC || test "${ac_cv_prog_CC+set}" != set || { ac_cv_prog_CC=; export ac_cv_prog_CC; } # AC_MSG_NOTICE([C compiler candidates: $comps]) ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in $comps do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in $comps do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. # Be careful to initialize this variable, since it used to be cached. # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. ac_cv_exeext= # b.out is created by i960 compilers. for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; conftest.$ac_ext ) # This is the source file. ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool, # but it would be cool to find out if it's true. Does anybody # maintain Libtool? --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std1 is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std1. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -z "$CC" ; then { { echo "$as_me:$LINENO: error: Failed to find a C compiler!" >&5 echo "$as_me: error: Failed to find a C compiler!" >&2;} { (exit 1); exit 1; }; } fi # Autoconf incorrectly concludes that cl recognises -g. It doesn't. case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* ) if test "$ac_cv_prog_cc_g" = yes ; then ac_cv_prog_cc_g=no { echo "$as_me:$LINENO: Overruling autoconf; cl does not recognise -g." >&5 echo "$as_me: Overruling autoconf; cl does not recognise -g." >&6;} fi ;; * ) if test x"$CYGPATH_W" = x ; then CYGPATH_W=echo fi ;; esac CFLAGS="$save_cflags" # add automake conditional so we can recognize cl compiler in makefile coin_cc_is_cl=false case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) coin_cc_is_cl=true ;; esac if test $coin_cc_is_cl = true; then COIN_CC_IS_CL_TRUE= COIN_CC_IS_CL_FALSE='#' else COIN_CC_IS_CL_TRUE='#' COIN_CC_IS_CL_FALSE= fi # Check if a project specific CFLAGS variable has been set if test x$COIN_PRJCT != x; then eval coin_tmp=\${${COIN_PRJCT}_CFLAGS+set} if test x$coin_tmp = xset; then eval CFLAGS=\${${COIN_PRJCT}_CFLAGS} fi fi if test x"$CFLAGS" = x; then coin_add_cflags= coin_opt_cflags= coin_dbg_cflags= coin_warn_cflags= if test "$GCC" = "yes"; then case "$CC" in icc* | */icc*) ;; *) coin_opt_cflags="-O3" coin_add_cflags="-pipe" coin_dbg_cflags="-g -O0" coin_warn_cflags="-Wimplicit -Wparentheses -Wsequence-point -Wreturn-type -Wcast-qual -Wall -Wno-unknown-pragmas -Wno-long-long" esac fi if test -z "$coin_opt_cflags"; then case $build in *-cygwin* | *-mingw*) case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL*) if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cflags='-MD -O2' coin_dbg_cflags='-MDd' else coin_opt_cflags='-MT -O2' coin_dbg_cflags='-MTd' fi coin_add_cflags='-nologo -wd4996 -D_CRT_SECURE_NO_DEPRECATE' ;; icl* | */icl* | ICL* | */ICL*) if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cflags='-MD -Ox' coin_dbg_cflags='-MDd -debug' else coin_opt_cflags='-MT -Ox' coin_dbg_cflags='-MTd -debug' fi coin_add_cflags='-nologo -D_CRT_SECURE_NO_DEPRECATE' ;; esac ;; *-linux-*) case "$CC" in icc* | */icc*) coin_opt_cflags="-O3 -ip -mp1" coin_add_cflags="" coin_dbg_cflags="-g" # Check if -i_dynamic is necessary (for new glibc library) CFLAGS= cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 coin_add_cflags="-i_dynamic $coin_add_cflags" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; pgcc* | */pgcc*) coin_opt_cflags="-fast" coin_add_cflags="-Kieee -pc 64" coin_dbg_cflags="-g" ;; esac ;; *-ibm-*) case "$CC" in xlc* | */xlc* | mpxlc* | */mpxlc*) coin_opt_cflags="-O -qarch=auto -qcache=auto -qtune=auto -qmaxmem=-1" coin_add_cflags="-bmaxdata:0x80000000 -qsuppress=1500-036 -qsuppress=1500-029" coin_dbg_cflags="-g" ;; esac ;; *-hp-*) coin_opt_cflags="-O" coin_add_cflags="-Ae" coin_dbg_cflags="-g" ;; *-*-solaris*) coin_opt_cflags="-xO4" coin_dbg_cflags="-g" ;; *-sgi-*) coin_opt_cflags="-O -OPT:Olimit=0" coin_dbg_cflags="-g" ;; esac fi if test "$ac_cv_prog_cc_g" = yes && test -z "$coin_dbg_cflags" ; then coin_dbg_cflags="-g" fi if test -z "$coin_opt_cflags"; then # Try if -O option works if nothing else is set CFLAGS="-O" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then coin_opt_cflags="-O" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # if PM doesn't want the warning messages, take them out if test x"$coin_skip_warn_cflags" = xyes; then coin_warn_cflags= fi if test x${DBG_CFLAGS+set} != xset; then DBG_CFLAGS="$coin_dbg_cflags $coin_add_cflags $coin_warn_cflags" fi if test x${OPT_CFLAGS+set} != xset; then OPT_CFLAGS="$coin_opt_cflags $coin_add_cflags -DNDEBUG $coin_warn_cflags" fi DBG_CFLAGS="$DBG_CFLAGS $ADD_CFLAGS $CDEFS" OPT_CFLAGS="$OPT_CFLAGS $ADD_CFLAGS $CDEFS" if test "$coin_debug_compile" = "true"; then CFLAGS="$DBG_CFLAGS" else CFLAGS="$OPT_CFLAGS" fi else CFLAGS="$CFLAGS $ADD_CFLAGS $CDEFS" if test x${DBG_CFLAGS+set} != xset; then DBG_CFLAGS="$CFLAGS" fi if test x${OPT_CFLAGS+set} != xset; then OPT_CFLAGS="$CFLAGS" fi fi # add -DPROJECT_BUILD to signal compiler preprocessor which config header file to include if test x$COIN_PRJCT != x; then CFLAGS="$CFLAGS -D${COIN_PRJCT}_BUILD" fi # Try if CFLAGS works save_CFLAGS="$CFLAGS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$CFLAGS"; then { echo "$as_me:$LINENO: WARNING: The value CFLAGS=\"$save_CFLAGS\" do not work. I will now just try '-O', but you might want to set CFLAGS manually." >&5 echo "$as_me: WARNING: The value CFLAGS=\"$save_CFLAGS\" do not work. I will now just try '-O', but you might want to set CFLAGS manually." >&2;} CFLAGS='-O' cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$CFLAGS"; then { echo "$as_me:$LINENO: WARNING: This value for CFLAGS does not work. I will continue with empty CFLAGS, but you might want to set CFLAGS manually." >&5 echo "$as_me: WARNING: This value for CFLAGS does not work. I will continue with empty CFLAGS, but you might want to set CFLAGS manually." >&2;} fi fi { echo "$as_me:$LINENO: C compiler options are: $CFLAGS" >&5 echo "$as_me: C compiler options are: $CFLAGS" >&6;} if test x"$MPICC" = x; then :; else { echo "$as_me:$LINENO: Will use MPI C compiler $MPICC" >&5 echo "$as_me: Will use MPI C compiler $MPICC" >&6;} CC="$MPICC" fi # Correct the LD variable if we are using the MS or Intel-windows compiler case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) LD=link ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu #Let's try if that overcomes configuration problem with VC++ 6.0 ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu coin_has_cxx=yes save_cxxflags="$CXXFLAGS" # For *-*-solaris*, promote Studio/Workshop compiler to front of list. case $build in *-cygwin* | *-mingw*) if test "$enable_msvc" = yes ; then comps="icl cl g++" else comps="g++ icl cl" fi ;; *-*-solaris*) comps="CC xlC_r aCC g++ c++ pgCC icpc gpp cxx cc++ cl FCC KCC RCC" ;; *-darwin*) comps="clang++ g++ c++ CC" ;; *-linux-gnu*) comps="g++ c++ pgCC icpc gpp cxx cc++ cl FCC KCC RCC xlC_r aCC CC" ;; *) comps="xlC_r aCC CC g++ c++ pgCC icpc gpp cxx cc++ cl FCC KCC RCC" ;; esac # We delete the cached value, since the test might not have been # performed with our choice of compilers earlier $as_unset ac_cv_prog_CXX || test "${ac_cv_prog_CXX+set}" != set || { ac_cv_prog_CXX=; export ac_cv_prog_CXX; } # AC_MSG_NOTICE([C++ compiler candidates: $comps]) ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in $CCC $comps do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then echo "$as_me:$LINENO: result: $CXX" >&5 echo "${ECHO_T}$CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in $CCC $comps do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 echo "${ECHO_T}$ac_ct_CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CXX" && break done test -n "$ac_ct_CXX" || ac_ct_CXX="g++" CXX=$ac_ct_CXX fi # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C++ compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6 if test "${ac_cv_cxx_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6 GXX=`test $ac_compiler_gnu = yes && echo yes` ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS CXXFLAGS="-g" echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cxx_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cxx_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6 if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu #AC_PROG_CXX sets CXX to g++ if it cannot find a working C++ compiler #thus, we test here whether $CXX is actually working ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu echo "$as_me:$LINENO: checking whether C++ compiler $CXX works" >&5 echo $ECHO_N "checking whether C++ compiler $CXX works... $ECHO_C" >&6; cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: failed to find a C++ compiler or C++ compiler $CXX does not work" >&5 echo "$as_me: error: failed to find a C++ compiler or C++ compiler $CXX does not work" >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu coin_cxx_is_cl=false # It seems that we need to cleanup something here for the Windows case "$CXX" in clang* | */clang*) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) sed -e 's/^void exit (int);//' confdefs.h >> confdefs.hh mv confdefs.hh confdefs.h coin_cxx_is_cl=true ;; esac # add automake conditional so we can recognize cl compiler in makefile if test $coin_cxx_is_cl = true; then COIN_CXX_IS_CL_TRUE= COIN_CXX_IS_CL_FALSE='#' else COIN_CXX_IS_CL_TRUE='#' COIN_CXX_IS_CL_FALSE= fi # Autoconf incorrectly concludes that cl recognises -g. It doesn't. case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL* ) if test "$ac_cv_prog_cxx_g" = yes ; then ac_cv_prog_cxx_g=no { echo "$as_me:$LINENO: Overruling autoconf; cl does not recognise -g." >&5 echo "$as_me: Overruling autoconf; cl does not recognise -g." >&6;} fi ;; * ) if test x"$CYGPATH_W" = x ; then CYGPATH_W=echo fi ;; esac CXXFLAGS="$save_cxxflags" # Check if a project specific CXXFLAGS variable has been set if test x$COIN_PRJCT != x; then eval coin_tmp=\${${COIN_PRJCT}_CXXFLAGS+set} if test x$coin_tmp = xset; then eval CXXFLAGS=\${${COIN_PRJCT}_CXXFLAGS} fi fi if test x"$CXXFLAGS" = x; then # ToDo decide whether we want -DNDEBUG for optimization coin_add_cxxflags= coin_opt_cxxflags= coin_dbg_cxxflags= coin_warn_cxxflags= if test "$GXX" = "yes"; then case "$CXX" in icpc* | */icpc*) ;; *) # ToDo decide about unroll-loops coin_opt_cxxflags="-O3" coin_add_cxxflags="-pipe" coin_dbg_cxxflags="-g -O0" coin_warn_cxxflags="-Wparentheses -Wreturn-type -Wcast-qual -Wall -Wpointer-arith -Wwrite-strings -Wconversion -Wno-unknown-pragmas -Wno-long-long" esac fi # Note that we do not need to cover GCC in the following tests. if test -z "$coin_opt_cxxflags"; then case $build in *-cygwin* | *-mingw*) case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL*) # The MT and MTd options are mutually exclusive if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cxxflags='-MD -O2' coin_dbg_cxxflags='-MDd' else coin_opt_cxxflags='-MT -O2' coin_dbg_cxxflags='-MTd' fi coin_add_cxxflags='-nologo -EHsc -GR -wd4996 -D_CRT_SECURE_NO_DEPRECATE' ;; icl* | */icl* | ICL* | */ICL*) # The MT and MTd options are mutually exclusive if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cxxflags='-MD -Ox' coin_dbg_cxxflags='-MDd -debug' else coin_opt_cxxflags='-MT -Ox' coin_dbg_cxxflags='-MTd -debug' fi coin_add_cxxflags='-nologo -EHsc -GR -D_CRT_SECURE_NO_DEPRECATE' ;; esac ;; *-linux-*) case "$CXX" in icpc* | */icpc*) coin_opt_cxxflags="-O3 -ip -mp1" coin_add_cxxflags="" coin_dbg_cxxflags="-g" # Check if -i_dynamic is necessary (for new glibc library) CXXFLAGS= cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 coin_add_cxxflags="-i_dynamic $coin_add_cxxflags" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; pgCC* | */pgCC*) coin_opt_cxxflags="-fast" coin_add_cxxflags="-Kieee -pc 64" coin_dbg_cxxflags="-g" ;; esac ;; *-ibm-*) case "$CXX" in xlC* | */xlC* | mpxlC* | */mpxlC*) coin_opt_cxxflags="-O -qarch=auto -qcache=auto -qtune=auto -qmaxmem=-1" coin_add_cxxflags="-bmaxdata:0x80000000 -qrtti=dyna -qsuppress=1500-036 -qsuppress=1500-029 -qsourcetype=c++" coin_dbg_cxxflags="-g" ;; esac ;; *-hp-*) case "$CXX" in aCC* | */aCC* ) coin_opt_cxxflags="-O" coin_add_cxxflags="-AA" coin_dbg_cxxflags="-g" ;; esac ;; *-*-solaris*) coin_opt_cxxflags="-O4" coin_dbg_cxxflags="-g" ;; esac fi # Generic flag settings. If these don't work, add a case above. if test "$ac_cv_prog_cxx_g" = yes && test -z "$coin_dbg_cxxflags" ; then coin_dbg_cxxflags="-g" fi if test -z "$coin_opt_cxxflags"; then # Try if -O option works if nothing else is set CXXFLAGS=-O cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then coin_opt_cxxflags="-O" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # if PM doesn't want the warning messages, take them out if test x"$coin_skip_warn_cxxflags" = xyes; then coin_warn_cxxflags= fi # Do final setup of flags based on values determined above. if test x${DBG_CXXFLAGS+set} != xset; then DBG_CXXFLAGS="$coin_dbg_cxxflags $coin_add_cxxflags $coin_warn_cxxflags" fi if test x${OPT_CXXFLAGS+set} != xset; then OPT_CXXFLAGS="$coin_opt_cxxflags $coin_add_cxxflags -DNDEBUG $coin_warn_cxxflags" fi DBG_CXXFLAGS="$DBG_CXXFLAGS $ADD_CXXFLAGS $CXXDEFS" OPT_CXXFLAGS="$OPT_CXXFLAGS $ADD_CXXFLAGS $CXXDEFS" if test "$coin_debug_compile" = "true"; then CXXFLAGS="$DBG_CXXFLAGS" else CXXFLAGS="$OPT_CXXFLAGS" fi # Handle the case where CXXFLAGS was set externally. else CXXFLAGS="$CXXFLAGS $ADD_CXXFLAGS $CXXDEFS" if test x${DBG_CXXFLAGS+set} != xset; then DBG_CXXFLAGS="$CXXFLAGS" fi if test x${OPT_CXXFLAGS+set} != xset; then OPT_CXXFLAGS="$CXXFLAGS" fi fi # add -DPROJECT_BUILD to signal compiler preprocessor which config header file to include if test x$COIN_PRJCT != x; then CXXFLAGS="$CXXFLAGS -D${COIN_PRJCT}_BUILD" fi # Try if CXXFLAGS works save_CXXFLAGS="$CXXFLAGS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CXXFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$CXXFLAGS"; then { echo "$as_me:$LINENO: WARNING: The flags CXXFLAGS=\"$save_CXXFLAGS\" do not work. I will now just try '-O', but you might want to set CXXFLAGS manually." >&5 echo "$as_me: WARNING: The flags CXXFLAGS=\"$save_CXXFLAGS\" do not work. I will now just try '-O', but you might want to set CXXFLAGS manually." >&2;} CXXFLAGS='-O' cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CXXFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$CXXFLAGS"; then { echo "$as_me:$LINENO: WARNING: This value for CXXFLAGS does not work. I will continue with empty CXXFLAGS, but you might want to set CXXFLAGS manually." >&5 echo "$as_me: WARNING: This value for CXXFLAGS does not work. I will continue with empty CXXFLAGS, but you might want to set CXXFLAGS manually." >&2;} fi fi { echo "$as_me:$LINENO: C++ compiler options are: $CXXFLAGS" >&5 echo "$as_me: C++ compiler options are: $CXXFLAGS" >&6;} if test x"$MPICXX" = x; then :; else { echo "$as_me:$LINENO: Will use MPI C++ compiler $MPICXX" >&5 echo "$as_me: Will use MPI C++ compiler $MPICXX" >&6;} CXX="$MPICXX" fi # correct the LD variable in a build with MS or Intel-windows compiler case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) LD=link ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Initialize automake and libtool { # START coin_disable_shared=no # Test if force_shared has been set if test "x" = xforce_shared; then if test x$enable_shared = xno; then { { echo "$as_me:$LINENO: error: Shared libraries are disabled by user, but this is not feasible with the given options" >&5 echo "$as_me: error: Shared libraries are disabled by user, but this is not feasible with the given options" >&2;} { (exit 1); exit 1; }; } fi enable_shared=yes; else case $build in *-cygwin* | *-mingw*) coin_disable_shared=yes if test x"$enable_shared" = xyes; then case "$CC" in clang* ) { echo "$as_me:$LINENO: WARNING: Building of DLLs not supported in this configuration." >&5 echo "$as_me: WARNING: Building of DLLs not supported in this configuration." >&2;} ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) { echo "$as_me:$LINENO: Building of DLLs not supported in this configuration." >&5 echo "$as_me: Building of DLLs not supported in this configuration." >&6;} ;; *gcc*) if test x"$enable_dependency_linking" = xyes; then coin_disable_shared=no else { echo "$as_me:$LINENO: WARNING: Dependency linking seems to be disabled, so shared libraries (DLLs) will not be built" >&5 echo "$as_me: WARNING: Dependency linking seems to be disabled, so shared libraries (DLLs) will not be built" >&2;} fi ;; *) { echo "$as_me:$LINENO: WARNING: Building of DLLs not supported in this configuration." >&5 echo "$as_me: WARNING: Building of DLLs not supported in this configuration." >&2;} ;; esac fi ;; *-aix*) coin_disable_shared=yes platform=AIX if test x"$enable_shared" = xyes; then { echo "$as_me:$LINENO: WARNING: Shared objects are not supported." >&5 echo "$as_me: WARNING: Shared objects are not supported." >&2;} fi ;; esac fi if test x"$coin_disable_shared" = xyes; then if test x"$enable_shared" = xyes; then : else # we don't disable shared, because it was not selected anyway coin_disable_shared=no fi enable_shared=no fi # By default, we only want the shared objects to be compiled # Check whether --enable-static or --disable-static was given. if test "${enable_static+set}" = set; then enableval="$enable_static" p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=no fi; # Initialize automake echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6 if test "${ac_cv_prog_egrep+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 echo "${ECHO_T}$ac_cv_prog_egrep" >&6 EGREP=$ac_cv_prog_egrep echo "$as_me:$LINENO: checking whether ln -s works" >&5 echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no, using $LN_S" >&5 echo "${ECHO_T}no, using $LN_S" >&6 fi am__api_version="1.9" # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL=$ac_install_sh fi fi echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo "$as_me:$LINENO: checking whether build environment is sane" >&5 echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 test "$program_prefix" != NONE && program_transform_name="s,^,$program_prefix,;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s,\$,$program_suffix,;$program_transform_name" # Double any \ or $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm conftest.sed # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then # We used to keeping the `.' as first argument, in order to # allow $(mkdir_p) to be used without argument. As in # $(mkdir_p) $(somedir) # where $(somedir) is conditionally defined. However this is wrong # for two reasons: # 1. if the package is installed by a user who cannot write `.' # make install will fail, # 2. the above comment should most certainly read # $(mkdir_p) $(DESTDIR)$(somedir) # so it does not work when $(somedir) is undefined and # $(DESTDIR) is not. # To support the latter case, we have to write # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), # so the `.' trick is pointless. mkdir_p='mkdir -p --' else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. for d in ./-p ./--version; do test -d $d && rmdir $d done # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. if test -f "$ac_aux_dir/mkinstalldirs"; then mkdir_p='$(mkinstalldirs)' else mkdir_p='$(install_sh) -d' fi fi for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$AWK" && break done echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF all: @echo 'ac_maketemp="$(MAKE)"' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi echo "$as_me:$LINENO: result: $_am_result" >&5 echo "${ECHO_T}$_am_result" >&6 rm -f confinc confmf # Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then enableval="$enable_dependency_tracking" fi; if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi # AC_MSG_NOTICE([Beginning automake initialisation.]) # Stuff for automake # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='bonmin' VERSION='1.8.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 -' 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 elif test -r $srcdir/../BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/../BuildTools elif test -r $srcdir/../../BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/../../BuildTools elif 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 # 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 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 5848 "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 bonmin@list.coin-or.org ## ## -------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6 if test -z "$CXXCPP"; then if test "${ac_cv_prog_CXXCPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi echo "$as_me:$LINENO: result: $CXXCPP" >&5 echo "${ECHO_T}$CXXCPP" >&6 ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu fi ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$F77"; then ac_cv_prog_F77="$F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_F77="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi F77=$ac_cv_prog_F77 if test -n "$F77"; then echo "$as_me:$LINENO: result: $F77" >&5 echo "${ECHO_T}$F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$F77" && break done fi if test -z "$F77"; then ac_ct_F77=$F77 for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_F77"; then ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_F77="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_F77=$ac_cv_prog_ac_ct_F77 if test -n "$ac_ct_F77"; then echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 echo "${ECHO_T}$ac_ct_F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_F77" && break done F77=$ac_ct_F77 fi # Provide some information about the compiler. echo "$as_me:6982:" \ "checking for Fortran 77 compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6 if test "${ac_cv_f77_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_f77_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6 ac_ext=$ac_save_ext ac_test_FFLAGS=${FFLAGS+set} ac_save_FFLAGS=$FFLAGS FFLAGS= echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_f77_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else FFLAGS=-g cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_f77_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_f77_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 echo "${ECHO_T}$ac_cv_prog_f77_g" >&6 if test "$ac_test_FFLAGS" = set; then FFLAGS=$ac_save_FFLAGS elif test $ac_cv_prog_f77_g = yes; then if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-g -O2" else FFLAGS="-g" fi else if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-O2" else FFLAGS= fi fi G77=`test $ac_compiler_gnu = yes && echo yes` ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! # find the maximum length of command line arguments echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6 if test "${lt_cv_sys_max_cmd_len+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} while (test "X"`$SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \ = "XX$teststring") >/dev/null 2>&1 && new_result=`expr "X$teststring" : ".*" 2>&1` && lt_cv_sys_max_cmd_len=$new_result && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done teststring= # Add a significant safety factor because C++ compilers can tack on massive # amounts of additional arguments before passing them to the linker. # It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6 else echo "$as_me:$LINENO: result: none" >&5 echo "${ECHO_T}none" >&6 fi # Check for command to grab the raw symbol name followed by C symbol from nm. echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6 if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Transform an extracted symbol line into a proper C declaration lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32*) symcode='[ABCDGISTW]' ;; hpux*) # Its linker distinguishes data from code symbols if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" ;; linux*) if test "$host_cpu" = ia64; then symcode='[ABCDGIRSTW]' lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Try without a prefix undercore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Now try to grab the symbols. nlist=conftest.nm if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if grep ' nm_test_var$' "$nlist" >/dev/null; then if grep ' nm_test_func$' "$nlist" >/dev/null; then cat < conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' cat <> conftest.$ac_ext #if defined (__STDC__) && __STDC__ # define lt_ptr_t void * #else # define lt_ptr_t char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr_t address; } lt_preloaded_symbols[] = { EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext cat <<\EOF >> conftest.$ac_ext {0, (lt_ptr_t) 0} }; #ifdef __cplusplus } #endif EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_save_CFLAGS" else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then echo "$as_me:$LINENO: result: failed" >&5 echo "${ECHO_T}failed" >&6 else echo "$as_me:$LINENO: result: ok" >&5 echo "${ECHO_T}ok" >&6 fi echo "$as_me:$LINENO: checking for objdir" >&5 echo $ECHO_N "checking for objdir... $ECHO_C" >&6 if test "${lt_cv_objdir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 echo "${ECHO_T}$lt_cv_objdir" >&6 objdir=$lt_cv_objdir case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='sed -e 1s/^X//' sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' # Constants: rm="rm -f" # Global variables: default_ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a ltmain="$ac_aux_dir/ltmain.sh" ofile="$default_ofile" with_gnu_ld="$lt_cv_prog_gnu_ld" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="${ac_tool_prefix}ar" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then echo "$as_me:$LINENO: result: $AR" >&5 echo "${ECHO_T}$AR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="ar" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false" fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 echo "${ECHO_T}$ac_ct_AR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi AR=$ac_ct_AR else AR="$ac_cv_prog_AR" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then echo "$as_me:$LINENO: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi RANLIB=$ac_ct_RANLIB else RANLIB="$ac_cv_prog_RANLIB" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi STRIP=$ac_ct_STRIP else STRIP="$ac_cv_prog_STRIP" fi old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru test -z "$AS" && AS=as test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$LD" && LD=ld test -z "$LN_S" && LN_S="ln -s" test -z "$MAGIC_CMD" && MAGIC_CMD=file test -z "$NM" && NM=nm test -z "$SED" && SED=sed test -z "$OBJDUMP" && OBJDUMP=objdump test -z "$RANLIB" && RANLIB=: test -z "$STRIP" && STRIP=: test -z "$ac_objext" && ac_objext=o # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6 if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then echo "$as_me:$LINENO: checking for file" >&5 echo $ECHO_N "checking for file... $ECHO_C" >&6 if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi else MAGIC_CMD=: fi fi fi ;; esac enable_dlopen=no enable_win32_dll=no # Check whether --enable-libtool-lock or --disable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then enableval="$enable_libtool_lock" fi; test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Check whether --with-pic or --without-pic was given. if test "${with_pic+set}" = set; then withval="$with_pic" pic_mode="$withval" else pic_mode=default fi; test -z "$pic_mode" && pic_mode=default # Use C for the default configuration in the libtool script tagname= lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}\n' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $rm conftest* ac_outfile=conftest.$ac_objext printf "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $rm conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag=' -fno-builtin' echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:8049: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:8053: \$? = $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:8317: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:8321: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_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:8421: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:8425: \$? = $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:13210: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:13214: \$? = $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:13314: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:13318: \$? = $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:14884: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:14888: \$? = $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:14988: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:14992: \$? = $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:17195: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:17199: \$? = $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:17463: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:17467: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_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:17567: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:17571: \$? = $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;} # Extract the first word of "dos2unix", so it can be a program name with args. set dummy dos2unix; 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_dos2unix+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$dos2unix"; then ac_cv_prog_dos2unix="$dos2unix" # 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_dos2unix="dos2unix" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi dos2unix=$ac_cv_prog_dos2unix if test -n "$dos2unix"; then echo "$as_me:$LINENO: result: $dos2unix" >&5 echo "${ECHO_T}$dos2unix" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "$dos2unix" = dos2unix ; then mydos2unix="| dos2unix" fi case $build in *-mingw*) CYGPATH_W=echo ;; esac case $build in # Here we need to check if -m32 is specified. If so, we need to correct # sys_lib_search_path_spec *-cygwin* | *-mingw*) case "$CXX" in clang* ) # we assume that libtool patches for CLANG are the same as for GNU compiler - correct??? { echo "$as_me:$LINENO: Applying patches to libtool for CLANG compiler" >&5 echo "$as_me: Applying patches to libtool for CLANG compiler" >&6;} sed -e 's|fix_srcfile_path=\"`cygpath -w \"\$srcfile\"`\"|fix_srcfile_path=\"\\\`'"$CYGPATH_W"' \\\"\\$srcfile\\\"\\\`\"|' \ -e 's|"lib /OUT:\\$oldlib\\$oldobjs\\$old_deplibs"|"\\$AR \\$AR_FLAGS \\$oldlib\\$oldobjs\\$old_deplibs~\\$RANLIB \\$oldlib"|' \ -e 's|libext="lib"|libext="a"|' \ libtool > conftest.bla ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) { echo "$as_me:$LINENO: Applying patches to libtool for cl compiler" >&5 echo "$as_me: Applying patches to libtool for cl compiler" >&6;} sed -e 's|fix_srcfile_path=\"`cygpath -w \"\$srcfile\"`\"|fix_srcfile_path=\"\\\`'"$CYGPATH_W"' \\\"\\$srcfile\\\"\\\`\"|' \ -e 's|fix_srcfile_path=\"\"|fix_srcfile_path=\"\\\`'"$CYGPATH_W"' \\\"\\$srcfile\\\"\\\`\"|' \ -e 's%compile_deplibs=\"\$dir/\$old_library \$compile_deplibs\"%compile_deplibs="'\`"$CYGPATH_W"' \$dir/\$old_library | sed -e '"'"'sY\\\\\\\\Y/Yg'"'"\`' \$compile_deplibs\"'% \ -e 's%compile_deplibs=\"\$dir/\$linklib \$compile_deplibs\"%compile_deplibs="'\`"$CYGPATH_W"' \$dir/\$linklib | sed -e '"'"'sY\\\\\\\\Y/Yg'"'"\`' \$compile_deplibs\"'% \ -e 's%lib /OUT:%lib -OUT:%' \ -e "s%cygpath -w%$CYGPATH_W%" \ -e 's%$AR x \\$f_ex_an_ar_oldlib%bla=\\$(lib -nologo -list \\$('"$CYGPATH_W \$1"') '"$mydos2unix"' | xargs echo); echo \\$bla; for i in \\$bla; do lib -nologo -extract:\\$i \\$('"$CYGPATH_W \$1"'); done%' \ -e 's%$AR t "$f_ex_an_ar_oldlib"%lib -nologo -list \$('"$CYGPATH_W \$1"') '"$mydos2unix"'%' \ -e 's%f_ex_an_ar_oldlib="\($?*1*\)"%f_ex_an_ar_oldlib='\`"$CYGPATH_W"' \1`%' \ -e 's%^archive_cmds=.*%archive_cmds="\\$CC -o \\$lib \\$libobjs \\$compiler_flags \\\\\\`echo \\\\\\"\\$deplibs\\\\\\" | \\$SED -e '"\'"'s/ -lc\\$//'"\'"'\\\\\\` -link -dll~linknames="%' \ -e 's%old_archive_cmds="lib -OUT:\\$oldlib\\$oldobjs\\$old_deplibs"%old_archive_cmds="if test -r \\$oldlib; then bla=\\"\\$oldlib\\"; else bla=; fi; lib -OUT:\\$oldlib \\\\\\$bla\\$oldobjs\\$old_deplibs"%' \ libtool > conftest.bla ;; *) { echo "$as_me:$LINENO: Applying patches to libtool for GNU compiler" >&5 echo "$as_me: Applying patches to libtool for GNU compiler" >&6;} sed -e 's|fix_srcfile_path=\"`cygpath -w \"\$srcfile\"`\"|fix_srcfile_path=\"\\\`'"$CYGPATH_W"' \\\"\\$srcfile\\\"\\\`\"|' \ -e 's|"lib /OUT:\\$oldlib\\$oldobjs\\$old_deplibs"|"\\$AR \\$AR_FLAGS \\$oldlib\\$oldobjs\\$old_deplibs~\\$RANLIB \\$oldlib"|' \ -e 's|libext="lib"|libext="a"|' \ libtool > conftest.bla ;; esac mv conftest.bla libtool chmod 755 libtool ;; *x86_64-*) if test "$GCC" = yes && (echo $CXXFLAGS $CFLAGS $FFLAGS | $EGREP 'm32' >& /dev/null); then { echo "$as_me:$LINENO: Applying patches to libtool for 32bit compilation" >&5 echo "$as_me: Applying patches to libtool for 32bit compilation" >&6;} sed -e 's|sys_lib_search_path_spec=".*"|sys_lib_search_path_spec="/lib /usr/lib"|' libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool fi ;; *-solaris*) if test "$GCC" = yes && \ (echo $CXXFLAGS $CFLAGS $FFLAGS | $EGREP 'm64' >/dev/null 2>&1) ; then hdwisa=`isainfo | sed -e 's/\([^ ]*\) .*$/\1/'` if `$EGREP 'sys_lib_search_path_spec=' libtool | $EGREP -v $hdwisa >/dev/null 2>&1` ; then { echo "$as_me:$LINENO: Applying patches to libtool for 64-bit GCC compilation" >&5 echo "$as_me: Applying patches to libtool for 64-bit GCC compilation" >&6;} fixlibtmp=`$CC -m64 -print-search-dirs | $EGREP '^libraries:'` fixlibtmp=`echo $fixlibtmp | sed -e 's/libraries: =//' -e 's/:/ /g'` if `echo "$fixlibtmp" | $EGREP -v $hdwisa >/dev/null 2>&1` ; then # AC_MSG_NOTICE(Compensating for broken gcc) for lib in $fixlibtmp ; do if test -d "${lib}${hdwisa}" ; then syslibpath64="$syslibpath64 ${lib}${hdwisa}/" fi done syslibpath64="${syslibpath64} ${fixlibtmp}" else syslibpath64="$fixlibtmp" fi sed -e 's|sys_lib_search_path_spec=".*"|sys_lib_search_path_spec="'"$syslibpath64"'"|' libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool fi # AC_MSG_NOTICE(Result is ) # $EGREP 'sys_lib_search_path_spec=' libtool fi ;; # Cygwin. Ah, cygwin. Too big and ugly to inline; see the macro. *-darwin*) { echo "$as_me:$LINENO: Applying patches to libtool for Darwin" >&5 echo "$as_me: Applying patches to libtool for Darwin" >&6;} sed -e 's/verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"/verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"/' \ -e 's/ -dynamiclib / -dynamiclib -single_module /g' \ libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool ;; esac # This fi matches the commented `if test "x$LIBTOOL" = x;' up at the head of # the macro. -- lh, 061214 -- # fi # AC_MSG_NOTICE([End libtool initialisation.]) # AC_MSG_NOTICE([Finished COIN_PROG_LIBTOOL.]) # set RPATH_FLAGS to the compiler link flags required to hardcode location # of the shared objects RPATH_FLAGS= if test $enable_shared = yes; then case $build in *-linux-*) if test "$GXX" = "yes"; then RPATH_FLAGS= for dir in $abs_lib_dir; do RPATH_FLAGS="$RPATH_FLAGS -Wl,--rpath -Wl,$dir" done fi ;; *-darwin*) RPATH_FLAGS=nothing ;; *-ibm-*) case "$CXX" in xlC* | */xlC* | mpxlC* | */mpxlC*) RPATH_FLAGS=nothing ;; esac ;; *-hp-*) RPATH_FLAGS=nothing ;; *-mingw32) RPATH_FLAGS=nothing ;; *-*-solaris*) RPATH_FLAGS= for dir in $abs_lib_dir; do RPATH_FLAGS="$RPATH_FLAGS -R$dir" done esac if test "$RPATH_FLAGS" = ""; then { echo "$as_me:$LINENO: WARNING: Could not automatically determine how to tell the linker about automatic inclusion of the path for shared libraries. The test examples might not work if you link against shared objects. You will need to set the LD_LIBRARY_PATH, DYLP_LIBRARY_PATH, or LIBDIR variable manually." >&5 echo "$as_me: WARNING: Could not automatically determine how to tell the linker about automatic inclusion of the path for shared libraries. The test examples might not work if you link against shared objects. You will need to set the LD_LIBRARY_PATH, DYLP_LIBRARY_PATH, or LIBDIR variable manually." >&2;} fi if test "$RPATH_FLAGS" = "nothing"; then RPATH_FLAGS= fi fi else { echo "$as_me:$LINENO: Using libtool script in directory $coin_config_dir" >&5 echo "$as_me: Using libtool script in directory $coin_config_dir" >&6;} # get all missing information from the config.log file # output variables and defines as_save_IFS=$IFS IFS=' ' for oneline in `cat $coin_config_dir/config.status`; do case "$oneline" in # First some automake conditionals s,@am__fastdep* | s,@AR@* | s,@CPP@* | s,@CPPFLAGS@* | s,@CXXCPP@* | \ s,@RANLIB@* | s,@STRIP@* | s,@ac_ct_AR@* | s,@ac_ct_RANLIB@* | \ s,@ac_ct_STRIP@* | s,@host* | s,@LN_S@* | s,@RPATH_FLAGS@* | \ s,@ac_c_preproc_warn_flag@* | s,@ac_cxx_preproc_warn_flag@* ) command=`echo $oneline | sed -e 's/^s,@//' -e 's/@,/="/' -e 's/,;t t/"/'` # echo "$command" eval "$command" ;; s,@DEFS@* ) command=`echo $oneline | sed -e 's/^s,@DEFS@,/defsline="/' -e 's/,;t t/"/'` # echo "$command" eval "$command" ;; esac done IFS=$as_save_IFS # And some defines (assuming here that the packages base dir # doesn't have a config.h file for word in $defsline; do # echo word $word case $word in -DHAVE_[A-Z_]*_H=1 | -DSTDC_HEADERS=1 ) i=`echo $word | sed -e 's/-D/#define /' -e 's/=/ /'` # echo dd $i echo $i >>confdefs.h ;; esac done fi # AC_MSG_NOTICE([End of INIT_AUTO_TOOLS.]) # Check whether --enable-dependency-linking or --disable-dependency-linking was given. if test "${enable_dependency_linking+set}" = set; then enableval="$enable_dependency_linking" dependency_linking="$enableval" else dependency_linking=auto fi; if test "$dependency_linking" = auto; then # On Cygwin and AIX, building DLLs doesn't work dependency_linking=no if test x"$coin_disable_shared" = xno; then case $build in *-cygwin* | *-mingw*) case "$CC" in clang* ) dependency_linking=yes ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) dependency_linking=no ;; *gcc*) dependency_linking=yes ;; *) dependency_linking=yes ;; esac ;; *) dependency_linking=yes ;; esac fi fi # Set up LT_LDFLAGS, user can initialize and we augment below if test "$dependency_linking" = yes ; then LT_LDFLAGS="$LT_LDFLAGS -no-undefined" else LT_LDFLAGS="$LT_LDFLAGS" fi if test "$dependency_linking" = yes; then DEPENDENCY_LINKING_TRUE= DEPENDENCY_LINKING_FALSE='#' else DEPENDENCY_LINKING_TRUE='#' DEPENDENCY_LINKING_FALSE= fi # Check if we want to set the library version echo "$as_me:$LINENO: checking if library version is set" >&5 echo $ECHO_N "checking if library version is set... $ECHO_C" >&6 if test x"$coin_libversion" != x; then LT_LDFLAGS="$LT_LDFLAGS -version-info $coin_libversion" echo "$as_me:$LINENO: result: $coin_libversion" >&5 echo "${ECHO_T}$coin_libversion" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi #END } ############################################################################# # COIN-OR components # ############################################################################# # Check whether --enable-pkg-config or --disable-pkg-config was given. if test "${enable_pkg_config+set}" = set; then enableval="$enable_pkg_config" use_pkgconfig="$enableval" else if test x$coin_cc_is_cl = xtrue; then use_pkgconfig=no else use_pkgconfig=yes fi fi; if test $use_pkgconfig = yes ; then if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_PKG_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$PKG_CONFIG"; then ac_cv_prog_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_PKG_CONFIG="${ac_tool_prefix}pkg-config" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi PKG_CONFIG=$ac_cv_prog_PKG_CONFIG if test -n "$PKG_CONFIG"; then echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 echo "${ECHO_T}$PKG_CONFIG" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_PKG_CONFIG"; then ac_ct_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_PKG_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_PKG_CONFIG"; then ac_cv_prog_ac_ct_PKG_CONFIG="$ac_ct_PKG_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_PKG_CONFIG="pkg-config" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_PKG_CONFIG=$ac_cv_prog_ac_ct_PKG_CONFIG if test -n "$ac_ct_PKG_CONFIG"; then echo "$as_me:$LINENO: result: $ac_ct_PKG_CONFIG" >&5 echo "${ECHO_T}$ac_ct_PKG_CONFIG" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi PKG_CONFIG=$ac_ct_PKG_CONFIG else PKG_CONFIG="$ac_cv_prog_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.16.0 echo "$as_me:$LINENO: checking pkg-config is at least version $_pkg_min_version" >&5 echo $ECHO_N "checking pkg-config is at least version $_pkg_min_version... $ECHO_C" >&6 if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 PKG_CONFIG="" fi fi # check if pkg-config supports the short-errors flag if test -n "$PKG_CONFIG" && \ $PKG_CONFIG --atleast-pkgconfig-version 0.20; then pkg_short_errors=" --short-errors " else pkg_short_errors="" fi fi if test -n "$PKG_CONFIG"; then COIN_HAS_PKGCONFIG_TRUE= COIN_HAS_PKGCONFIG_FALSE='#' else COIN_HAS_PKGCONFIG_TRUE='#' COIN_HAS_PKGCONFIG_FALSE= fi # assemble pkg-config search path for installed projects COIN_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" # let's assume that when installing into $prefix, then the user may have installed some other coin projects there before, so it's worth to have a look into there # best would actually to use ${libdir}, since .pc files get installed into ${libdir}/pkgconfig, # unfortunately, ${libdir} expands to ${exec_prefix}/lib and ${exec_prefix} to ${prefix}... if test "x${prefix}" = xNONE ; then COIN_PKG_CONFIG_PATH="${ac_default_prefix}/lib64/pkgconfig:${ac_default_prefix}/lib/pkgconfig:${ac_default_prefix}/share/pkgconfig:${COIN_PKG_CONFIG_PATH}" else COIN_PKG_CONFIG_PATH="${prefix}/lib64/pkgconfig:${prefix}/lib/pkgconfig:${prefix}/share/pkgconfig:${COIN_PKG_CONFIG_PATH}" fi # Check whether --with-coin-instdir or --without-coin-instdir was given. if test "${with_coin_instdir+set}" = set; then withval="$with_coin_instdir" if test -d "$withval"; then : ; else { { echo "$as_me:$LINENO: error: argument for --with-coin-instdir not a directory" >&5 echo "$as_me: error: argument for --with-coin-instdir not a directory" >&2;} { (exit 1); exit 1; }; } fi COIN_PKG_CONFIG_PATH="$withval/lib/pkgconfig:$withval/share/pkgconfig:${COIN_PKG_CONFIG_PATH}" fi; # assemble additional pkg-config search paths for uninstalled projects if test x$coin_projectdir = xyes ; then # if we are in a project setup, then in a classic setup, we want to find uninstalled projects # their (relative) location is written to coin_subdirs.txt by the configure in the project base directory # unfortunately, if the user set prefix, then we do not know where the project base directory is located # but it is likely to be either .. (if we are a usual coin project) or ../.. (if we are a unusual coin project like ThirdParty or Data) COIN_PKG_CONFIG_PATH_UNINSTALLED= if test -f ../coin_subdirs.txt ; then for i in `cat ../coin_subdirs.txt` ; do if test -d ../$i ; then COIN_PKG_CONFIG_PATH_UNINSTALLED="`cd ../$i; pwd`:${COIN_PKG_CONFIG_PATH_UNINSTALLED}" fi if test -d ../$i/pkgconfig ; then COIN_PKG_CONFIG_PATH_UNINSTALLED="`cd ../$i/pkgconfig; pwd`:${COIN_PKG_CONFIG_PATH_UNINSTALLED}" fi done fi if test -f ../../coin_subdirs.txt ; then for i in `cat ../../coin_subdirs.txt` ; do if test -d ../../$i ; then COIN_PKG_CONFIG_PATH_UNINSTALLED="`cd ../../$i; pwd`:${COIN_PKG_CONFIG_PATH_UNINSTALLED}" fi if test -d ../../$i/pkgconfig ; then COIN_PKG_CONFIG_PATH_UNINSTALLED="`cd ../../$i/pkgconfig; pwd`:${COIN_PKG_CONFIG_PATH_UNINSTALLED}" fi done fi if test -f ../../../coin_subdirs.txt ; then for i in `cat ../../../coin_subdirs.txt` ; do if test -d ../../../$i ; then COIN_PKG_CONFIG_PATH_UNINSTALLED="`cd ../../../$i; pwd`:${COIN_PKG_CONFIG_PATH_UNINSTALLED}" fi if test -d ../../../$i/pkgconfig ; then COIN_PKG_CONFIG_PATH_UNINSTALLED="`cd ../../../$i/pkgconfig; pwd`:${COIN_PKG_CONFIG_PATH_UNINSTALLED}" fi done fi fi if test -n "$PKG_CONFIG" && test x$coin_cc_is_cl = xtrue; then { echo "$as_me:$LINENO: WARNING: Using pkg-config together with MS or Intel Compiler on Windows is not support by example Makefiles. Consider using --disable-pkg-config." >&5 echo "$as_me: WARNING: Using pkg-config together with MS or Intel Compiler on Windows is not support by example Makefiles. Consider using --disable-pkg-config." >&2;} fi echo "$as_me:$LINENO: checking for COIN-OR package CoinDepend" >&5 echo $ECHO_N "checking for COIN-OR package CoinDepend... $ECHO_C" >&6 coin_has_coindepend=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 = "CoinDepend"; then coin_has_coindepend=skipping fi done fi if test "$coin_has_coindepend" != skipping; then # Check whether --with-m4_tolower(CoinDepend) or --without-m4_tolower(CoinDepend) was given. if test "${with_coindepend+set}" = set; then withval="$with_coindepend" if test "$withval" = no ; then coin_has_coindepend=skipping fi fi; fi COINDEPEND_LIBS= COINDEPEND_CFLAGS= COINDEPEND_DATA= COINDEPEND_DEPENDENCIES= COINDEPEND_PCLIBS= COINDEPEND_PCREQUIRES= #check if user provided LIBS, CFLAGS, or DATA for package or disables use of package if test $coin_has_coindepend != skipping; then # Check whether --with-m4_tolower(CoinDepend)-lib or --without-m4_tolower(CoinDepend)-lib was given. if test "${with_coindepend_lib+set}" = set; then withval="$with_coindepend_lib" if test "$withval" = no ; then coin_has_coindepend=skipping else coin_has_coindepend=yes COINDEPEND_LIBS="$withval" COINDEPEND_PCLIBS="$withval" BONMINLIB_PCLIBS="$withval $BONMINLIB_PCLIBS" BONMINLIB_LIBS="$withval $BONMINLIB_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 COINDEPEND_LIBS_INSTALLED="$withval" BONMINLIB_LIBS_INSTALLED="$withval $BONMINLIB_LIBS_INSTALLED" fi fi fi; fi if test $coin_has_coindepend != skipping; then # Check whether --with-m4_tolower(CoinDepend)-incdir or --without-m4_tolower(CoinDepend)-incdir was given. if test "${with_coindepend_incdir+set}" = set; then withval="$with_coindepend_incdir" if test "$withval" = no ; then coin_has_coindepend=skipping else coin_has_coindepend=yes COINDEPEND_CFLAGS="-I`${CYGPATH_W} $withval`" BONMINLIB_CFLAGS="-I`${CYGPATH_W} $withval` $BONMINLIB_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 COINDEPEND_CFLAGS_INSTALLED="$COINDEPEND_CFLAGS" BONMINLIB_CFLAGS_INSTALLED="$COINDEPEND_CFLAGS $BONMINLIB_CFLAGS_INSTALLED" fi fi fi; fi if test $coin_has_coindepend != skipping; then # Check whether --with-m4_tolower(CoinDepend)-datadir or --without-m4_tolower(CoinDepend)-datadir was given. if test "${with_coindepend_datadir+set}" = set; then withval="$with_coindepend_datadir" if test "$withval" = no ; then coin_has_coindepend=skipping else coin_has_coindepend=yes COINDEPEND_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 COINDEPEND_DATA_INSTALLED="$withval" fi fi fi; fi if test $coin_has_coindepend = 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 "cbc osi-clp ipopt"; then COINDEPEND_VERSIONS=`$PKG_CONFIG --modversion "cbc osi-clp ipopt" 2>/dev/null | tr '\n' ' '` cflags=`$PKG_CONFIG --cflags "cbc osi-clp ipopt" 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 COINDEPEND_CFLAGS="$cflags" COINDEPEND_LIBS=`$PKG_CONFIG --libs "cbc osi-clp ipopt" 2>/dev/null` COINDEPEND_DATA=`$PKG_CONFIG --variable=datadir "cbc osi-clp ipopt" 2>/dev/null` coin_has_coindepend=yes echo "$as_me:$LINENO: result: yes: $COINDEPEND_VERSIONS" >&5 echo "${ECHO_T}yes: $COINDEPEND_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 COINDEPEND_LIBS=`echo " $COINDEPEND_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` fi COINDEPEND_PCREQUIRES="cbc osi-clp ipopt" # augment X_PCREQUIRES, X_CFLAGS, and X_LIBS for each build target X in BonminLib BONMINLIB_PCREQUIRES="cbc osi-clp ipopt $BONMINLIB_PCREQUIRES" BONMINLIB_CFLAGS="$COINDEPEND_CFLAGS $BONMINLIB_CFLAGS" BONMINLIB_LIBS="$COINDEPEND_LIBS $BONMINLIB_LIBS" else COINDEPEND_PKG_ERRORS=`$PKG_CONFIG $pkg_short_errors --errors-to-stdout --print-errors "cbc osi-clp ipopt"` coin_has_coindepend=notGiven echo "$as_me:$LINENO: result: not given: $COINDEPEND_PKG_ERRORS" >&5 echo "${ECHO_T}not given: $COINDEPEND_PKG_ERRORS" >&6 fi else { { echo "$as_me:$LINENO: error: \"Cannot check for existance of module CoinDepend without pkg-config\"" >&5 echo "$as_me: error: \"Cannot check for existance of module CoinDepend 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 CoinDepend (fallback)" >&5 echo $ECHO_N "checking for COIN-OR package CoinDepend (fallback)... $ECHO_C" >&6 coin_has_coindepend=notGiven COINDEPEND_LIBS= COINDEPEND_LIBS_INSTALLED= COINDEPEND_CFLAGS= COINDEPEND_CFLAGS_INSTALLED= COINDEPEND_DATA= COINDEPEND_DATA_INSTALLED= COINDEPEND_PCLIBS= COINDEPEND_PCREQUIRES= # initial list of dependencies is "cbc osi-clp ipopt", but we need to filter out version number specifications (= x, <= x, >= x, != x) projtoprocess="cbc osi-clp ipopt" # 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$COINDEPEND_DATA" = x ; then projdatadir= pcfilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcfile` eval `sh -c "$pcfilemod"` COINDEPEND_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$COINDEPEND_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 COINDEPEND_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 COINDEPEND_CFLAGS="$projcflags $COINDEPEND_CFLAGS" # set LIBS variable COINDEPEND_LIBS="$projlibs $COINDEPEND_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 COINDEPEND_CFLAGS_INSTALLED="$projcflags $COINDEPEND_CFLAGS_INSTALLED" # set LIBS variable COINDEPEND_LIBS_INSTALLED="$projlibs $COINDEPEND_LIBS_INSTALLED" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # finish up coin_has_coindepend=yes echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 cat >>confdefs.h <<\_ACEOF #define COIN_HAS_COINDEPEND 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 COINDEPEND_LIBS=`echo " $COINDEPEND_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` COINDEPEND_LIBS_INSTALLED=`echo " $COINDEPEND_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 COINDEPEND_PCREQUIRES="cbc osi-clp ipopt" BONMINLIB_PCREQUIRES="cbc osi-clp ipopt $BONMINLIB_PCREQUIRES" BONMINLIB_CFLAGS="$COINDEPEND_CFLAGS $BONMINLIB_CFLAGS" BONMINLIB_LIBS="$COINDEPEND_LIBS $BONMINLIB_LIBS" BONMINLIB_CFLAGS_INSTALLED="$COINDEPEND_CFLAGS_INSTALLED $BONMINLIB_CFLAGS_INSTALLED" BONMINLIB_LIBS_INSTALLED="$COINDEPEND_LIBS_INSTALLED $BONMINLIB_LIBS_INSTALLED" fi if test $coin_has_coindepend != notGiven && test $coin_has_coindepend != skipping; then COIN_HAS_COINDEPEND_TRUE= COIN_HAS_COINDEPEND_FALSE='#' else COIN_HAS_COINDEPEND_TRUE='#' COIN_HAS_COINDEPEND_FALSE= fi fi else echo "$as_me:$LINENO: result: $coin_has_coindepend" >&5 echo "${ECHO_T}$coin_has_coindepend" >&6 fi if test $coin_has_coindepend != skipping && test $coin_has_coindepend != notGiven ; then cat >>confdefs.h <<\_ACEOF #define COIN_HAS_COINDEPEND 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) COINDEPEND_DEPENDENCIES=`echo " $COINDEPEND_LIBS" | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` BONMINLIB_DEPENDENCIES=`echo " $BONMINLIB_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 "$COINDEPEND_CFLAGS" ; then { echo "$as_me:$LINENO: CoinDepend CFLAGS are $COINDEPEND_CFLAGS" >&5 echo "$as_me: CoinDepend CFLAGS are $COINDEPEND_CFLAGS" >&6;} fi if test -n "$COINDEPEND_LIBS" ; then { echo "$as_me:$LINENO: CoinDepend LIBS are $COINDEPEND_LIBS" >&5 echo "$as_me: CoinDepend LIBS are $COINDEPEND_LIBS" >&6;} fi if test -n "$COINDEPEND_DEPENDENCIES" ; then { echo "$as_me:$LINENO: CoinDepend DEPENDENCIES are $COINDEPEND_DEPENDENCIES" >&5 echo "$as_me: CoinDepend DEPENDENCIES are $COINDEPEND_DEPENDENCIES" >&6;} fi if test -n "$COINDEPEND_DATA" ; then { echo "$as_me:$LINENO: CoinDepend DATA is $COINDEPEND_DATA" >&5 echo "$as_me: CoinDepend DATA is $COINDEPEND_DATA" >&6;} fi if test -n "$COINDEPEND_PCLIBS" ; then { echo "$as_me:$LINENO: CoinDepend PCLIBS are $COINDEPEND_PCLIBS" >&5 echo "$as_me: CoinDepend PCLIBS are $COINDEPEND_PCLIBS" >&6;} fi if test -n "$COINDEPEND_PCREQUIRES" ; then { echo "$as_me:$LINENO: CoinDepend PCREQUIRES are $COINDEPEND_PCREQUIRES" >&5 echo "$as_me: CoinDepend PCREQUIRES are $COINDEPEND_PCREQUIRES" >&6;} fi { echo "$as_me:$LINENO: BonminLib CFLAGS are $BONMINLIB_CFLAGS" >&5 echo "$as_me: BonminLib CFLAGS are $BONMINLIB_CFLAGS" >&6;} { echo "$as_me:$LINENO: BonminLib LIBS are $BONMINLIB_LIBS" >&5 echo "$as_me: BonminLib LIBS are $BONMINLIB_LIBS" >&6;} { echo "$as_me:$LINENO: BonminLib DEPENDENCIES are $BONMINLIB_DEPENDENCIES" >&5 echo "$as_me: BonminLib DEPENDENCIES are $BONMINLIB_DEPENDENCIES" >&6;} fi fi # Define the Makefile conditional if test $coin_has_coindepend != notGiven && test $coin_has_coindepend != skipping; then COIN_HAS_COINDEPEND_TRUE= COIN_HAS_COINDEPEND_FALSE='#' else COIN_HAS_COINDEPEND_TRUE='#' COIN_HAS_COINDEPEND_FALSE= fi if test $coin_has_coindepend != yes ; then { { echo "$as_me:$LINENO: error: Required package Cbc or Ipopt not available." >&5 echo "$as_me: error: Required package Cbc or Ipopt not available." >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: checking for COIN-OR package ASL" >&5 echo $ECHO_N "checking for COIN-OR package ASL... $ECHO_C" >&6 coin_has_asl=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 = "ASL"; then coin_has_asl=skipping fi done fi if test "$coin_has_asl" != skipping; then # Check whether --with-m4_tolower(ASL) or --without-m4_tolower(ASL) was given. if test "${with_asl+set}" = set; then withval="$with_asl" if test "$withval" = no ; then coin_has_asl=skipping fi fi; fi ASL_LIBS= ASL_CFLAGS= ASL_DATA= ASL_DEPENDENCIES= ASL_PCLIBS= ASL_PCREQUIRES= #check if user provided LIBS, CFLAGS, or DATA for package or disables use of package if test $coin_has_asl != skipping; then # Check whether --with-m4_tolower(ASL)-lib or --without-m4_tolower(ASL)-lib was given. if test "${with_asl_lib+set}" = set; then withval="$with_asl_lib" if test "$withval" = no ; then coin_has_asl=skipping else coin_has_asl=yes ASL_LIBS="$withval" ASL_PCLIBS="$withval" BONMINAMPLINTERFACELIB_PCLIBS="$withval $BONMINAMPLINTERFACELIB_PCLIBS" BONMINAMPLINTERFACELIB_LIBS="$withval $BONMINAMPLINTERFACELIB_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 ASL_LIBS_INSTALLED="$withval" BONMINAMPLINTERFACELIB_LIBS_INSTALLED="$withval $BONMINAMPLINTERFACELIB_LIBS_INSTALLED" fi fi fi; fi if test $coin_has_asl != skipping; then # Check whether --with-m4_tolower(ASL)-incdir or --without-m4_tolower(ASL)-incdir was given. if test "${with_asl_incdir+set}" = set; then withval="$with_asl_incdir" if test "$withval" = no ; then coin_has_asl=skipping else coin_has_asl=yes ASL_CFLAGS="-I`${CYGPATH_W} $withval`" BONMINAMPLINTERFACELIB_CFLAGS="-I`${CYGPATH_W} $withval` $BONMINAMPLINTERFACELIB_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 ASL_CFLAGS_INSTALLED="$ASL_CFLAGS" BONMINAMPLINTERFACELIB_CFLAGS_INSTALLED="$ASL_CFLAGS $BONMINAMPLINTERFACELIB_CFLAGS_INSTALLED" fi fi fi; fi if test $coin_has_asl != skipping; then # Check whether --with-m4_tolower(ASL)-datadir or --without-m4_tolower(ASL)-datadir was given. if test "${with_asl_datadir+set}" = set; then withval="$with_asl_datadir" if test "$withval" = no ; then coin_has_asl=skipping else coin_has_asl=yes ASL_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 ASL_DATA_INSTALLED="$withval" fi fi fi; fi if test $coin_has_asl = 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 "ipoptamplinterface"; then ASL_VERSIONS=`$PKG_CONFIG --modversion "ipoptamplinterface" 2>/dev/null | tr '\n' ' '` cflags=`$PKG_CONFIG --cflags "ipoptamplinterface" 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 ASL_CFLAGS="$cflags" ASL_LIBS=`$PKG_CONFIG --libs "ipoptamplinterface" 2>/dev/null` ASL_DATA=`$PKG_CONFIG --variable=datadir "ipoptamplinterface" 2>/dev/null` coin_has_asl=yes echo "$as_me:$LINENO: result: yes: $ASL_VERSIONS" >&5 echo "${ECHO_T}yes: $ASL_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 ASL_LIBS=`echo " $ASL_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` fi ASL_PCREQUIRES="ipoptamplinterface" # augment X_PCREQUIRES, X_CFLAGS, and X_LIBS for each build target X in BonminAmplInterfaceLib BONMINAMPLINTERFACELIB_PCREQUIRES="ipoptamplinterface $BONMINAMPLINTERFACELIB_PCREQUIRES" BONMINAMPLINTERFACELIB_CFLAGS="$ASL_CFLAGS $BONMINAMPLINTERFACELIB_CFLAGS" BONMINAMPLINTERFACELIB_LIBS="$ASL_LIBS $BONMINAMPLINTERFACELIB_LIBS" else ASL_PKG_ERRORS=`$PKG_CONFIG $pkg_short_errors --errors-to-stdout --print-errors "ipoptamplinterface"` coin_has_asl=notGiven echo "$as_me:$LINENO: result: not given: $ASL_PKG_ERRORS" >&5 echo "${ECHO_T}not given: $ASL_PKG_ERRORS" >&6 fi else { { echo "$as_me:$LINENO: error: \"Cannot check for existance of module ASL without pkg-config\"" >&5 echo "$as_me: error: \"Cannot check for existance of module ASL 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 ASL (fallback)" >&5 echo $ECHO_N "checking for COIN-OR package ASL (fallback)... $ECHO_C" >&6 coin_has_asl=notGiven ASL_LIBS= ASL_LIBS_INSTALLED= ASL_CFLAGS= ASL_CFLAGS_INSTALLED= ASL_DATA= ASL_DATA_INSTALLED= ASL_PCLIBS= ASL_PCREQUIRES= # initial list of dependencies is "ipoptamplinterface", but we need to filter out version number specifications (= x, <= x, >= x, != x) projtoprocess="ipoptamplinterface" # 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$ASL_DATA" = x ; then projdatadir= pcfilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcfile` eval `sh -c "$pcfilemod"` ASL_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$ASL_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 ASL_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 ASL_CFLAGS="$projcflags $ASL_CFLAGS" # set LIBS variable ASL_LIBS="$projlibs $ASL_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 ASL_CFLAGS_INSTALLED="$projcflags $ASL_CFLAGS_INSTALLED" # set LIBS variable ASL_LIBS_INSTALLED="$projlibs $ASL_LIBS_INSTALLED" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # finish up coin_has_asl=yes echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 cat >>confdefs.h <<\_ACEOF #define COIN_HAS_ASL 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 ASL_LIBS=`echo " $ASL_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` ASL_LIBS_INSTALLED=`echo " $ASL_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 ASL_PCREQUIRES="ipoptamplinterface" BONMINAMPLINTERFACELIB_PCREQUIRES="ipoptamplinterface $BONMINAMPLINTERFACELIB_PCREQUIRES" BONMINAMPLINTERFACELIB_CFLAGS="$ASL_CFLAGS $BONMINAMPLINTERFACELIB_CFLAGS" BONMINAMPLINTERFACELIB_LIBS="$ASL_LIBS $BONMINAMPLINTERFACELIB_LIBS" BONMINAMPLINTERFACELIB_CFLAGS_INSTALLED="$ASL_CFLAGS_INSTALLED $BONMINAMPLINTERFACELIB_CFLAGS_INSTALLED" BONMINAMPLINTERFACELIB_LIBS_INSTALLED="$ASL_LIBS_INSTALLED $BONMINAMPLINTERFACELIB_LIBS_INSTALLED" fi if test $coin_has_asl != notGiven && test $coin_has_asl != skipping; then COIN_HAS_ASL_TRUE= COIN_HAS_ASL_FALSE='#' else COIN_HAS_ASL_TRUE='#' COIN_HAS_ASL_FALSE= fi fi else echo "$as_me:$LINENO: result: $coin_has_asl" >&5 echo "${ECHO_T}$coin_has_asl" >&6 fi if test $coin_has_asl != skipping && test $coin_has_asl != notGiven ; then cat >>confdefs.h <<\_ACEOF #define COIN_HAS_ASL 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) ASL_DEPENDENCIES=`echo " $ASL_LIBS" | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` BONMINAMPLINTERFACELIB_DEPENDENCIES=`echo " $BONMINAMPLINTERFACELIB_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 "$ASL_CFLAGS" ; then { echo "$as_me:$LINENO: ASL CFLAGS are $ASL_CFLAGS" >&5 echo "$as_me: ASL CFLAGS are $ASL_CFLAGS" >&6;} fi if test -n "$ASL_LIBS" ; then { echo "$as_me:$LINENO: ASL LIBS are $ASL_LIBS" >&5 echo "$as_me: ASL LIBS are $ASL_LIBS" >&6;} fi if test -n "$ASL_DEPENDENCIES" ; then { echo "$as_me:$LINENO: ASL DEPENDENCIES are $ASL_DEPENDENCIES" >&5 echo "$as_me: ASL DEPENDENCIES are $ASL_DEPENDENCIES" >&6;} fi if test -n "$ASL_DATA" ; then { echo "$as_me:$LINENO: ASL DATA is $ASL_DATA" >&5 echo "$as_me: ASL DATA is $ASL_DATA" >&6;} fi if test -n "$ASL_PCLIBS" ; then { echo "$as_me:$LINENO: ASL PCLIBS are $ASL_PCLIBS" >&5 echo "$as_me: ASL PCLIBS are $ASL_PCLIBS" >&6;} fi if test -n "$ASL_PCREQUIRES" ; then { echo "$as_me:$LINENO: ASL PCREQUIRES are $ASL_PCREQUIRES" >&5 echo "$as_me: ASL PCREQUIRES are $ASL_PCREQUIRES" >&6;} fi { echo "$as_me:$LINENO: BonminAmplInterfaceLib CFLAGS are $BONMINAMPLINTERFACELIB_CFLAGS" >&5 echo "$as_me: BonminAmplInterfaceLib CFLAGS are $BONMINAMPLINTERFACELIB_CFLAGS" >&6;} { echo "$as_me:$LINENO: BonminAmplInterfaceLib LIBS are $BONMINAMPLINTERFACELIB_LIBS" >&5 echo "$as_me: BonminAmplInterfaceLib LIBS are $BONMINAMPLINTERFACELIB_LIBS" >&6;} { echo "$as_me:$LINENO: BonminAmplInterfaceLib DEPENDENCIES are $BONMINAMPLINTERFACELIB_DEPENDENCIES" >&5 echo "$as_me: BonminAmplInterfaceLib DEPENDENCIES are $BONMINAMPLINTERFACELIB_DEPENDENCIES" >&6;} fi fi # Define the Makefile conditional if test $coin_has_asl != notGiven && test $coin_has_asl != skipping; then COIN_HAS_ASL_TRUE= COIN_HAS_ASL_FALSE='#' else COIN_HAS_ASL_TRUE='#' COIN_HAS_ASL_FALSE= fi #AC_COIN_CHECK_PACKAGE(Bcp, [bcp]) # #AC_ARG_WITH([bonminbcp], # AC_HELP_STRING([--with-bonminbcp], # [Compile Bonmin with Bcp-based parallel version]), # [use_bcp="$withval"], [use_bcp=no]) #if test "$use_bcp" = yes; then # if test $coin_has_bcp != yes ; then # AC_MSG_ERROR([You specified --with-bonminbcp, but Bcp is not available]) # fi #fi #AM_CONDITIONAL(COMPILE_BONMINBCP, test "$use_bcp" = yes) ############################################################################# # CPLEX # ############################################################################# # Check whether OsiCplex is available echo "$as_me:$LINENO: checking for COIN-OR package OsiCpx" >&5 echo $ECHO_N "checking for COIN-OR package OsiCpx... $ECHO_C" >&6 coin_has_osicpx=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 = "OsiCpx"; then coin_has_osicpx=skipping fi done fi if test "$coin_has_osicpx" != skipping; then # Check whether --with-m4_tolower(OsiCpx) or --without-m4_tolower(OsiCpx) was given. if test "${with_osicpx+set}" = set; then withval="$with_osicpx" if test "$withval" = no ; then coin_has_osicpx=skipping fi fi; fi OSICPX_LIBS= OSICPX_CFLAGS= OSICPX_DATA= OSICPX_DEPENDENCIES= OSICPX_PCLIBS= OSICPX_PCREQUIRES= #check if user provided LIBS, CFLAGS, or DATA for package or disables use of package if test $coin_has_osicpx != skipping; then # Check whether --with-m4_tolower(OsiCpx)-lib or --without-m4_tolower(OsiCpx)-lib was given. if test "${with_osicpx_lib+set}" = set; then withval="$with_osicpx_lib" if test "$withval" = no ; then coin_has_osicpx=skipping else coin_has_osicpx=yes OSICPX_LIBS="$withval" OSICPX_PCLIBS="$withval" BONMINLIB_PCLIBS="$withval $BONMINLIB_PCLIBS" BONMINLIB_LIBS="$withval $BONMINLIB_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 OSICPX_LIBS_INSTALLED="$withval" BONMINLIB_LIBS_INSTALLED="$withval $BONMINLIB_LIBS_INSTALLED" fi fi fi; fi if test $coin_has_osicpx != skipping; then # Check whether --with-m4_tolower(OsiCpx)-incdir or --without-m4_tolower(OsiCpx)-incdir was given. if test "${with_osicpx_incdir+set}" = set; then withval="$with_osicpx_incdir" if test "$withval" = no ; then coin_has_osicpx=skipping else coin_has_osicpx=yes OSICPX_CFLAGS="-I`${CYGPATH_W} $withval`" BONMINLIB_CFLAGS="-I`${CYGPATH_W} $withval` $BONMINLIB_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 OSICPX_CFLAGS_INSTALLED="$OSICPX_CFLAGS" BONMINLIB_CFLAGS_INSTALLED="$OSICPX_CFLAGS $BONMINLIB_CFLAGS_INSTALLED" fi fi fi; fi if test $coin_has_osicpx != skipping; then # Check whether --with-m4_tolower(OsiCpx)-datadir or --without-m4_tolower(OsiCpx)-datadir was given. if test "${with_osicpx_datadir+set}" = set; then withval="$with_osicpx_datadir" if test "$withval" = no ; then coin_has_osicpx=skipping else coin_has_osicpx=yes OSICPX_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 OSICPX_DATA_INSTALLED="$withval" fi fi fi; fi if test $coin_has_osicpx = notGiven; then if test -n "$PKG_CONFIG" ; then # set search path for pkg-config # need to export variable to be sure that the following pkg-config gets these values coin_save_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" PKG_CONFIG_PATH="$COIN_PKG_CONFIG_PATH:$COIN_PKG_CONFIG_PATH_UNINSTALLED" export PKG_CONFIG_PATH # let pkg-config do it's magic if test -n "$PKG_CONFIG" ; then if $PKG_CONFIG --exists "osi-cplex"; then OSICPX_VERSIONS=`$PKG_CONFIG --modversion "osi-cplex" 2>/dev/null | tr '\n' ' '` cflags=`$PKG_CONFIG --cflags "osi-cplex" 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 OSICPX_CFLAGS="$cflags" OSICPX_LIBS=`$PKG_CONFIG --libs "osi-cplex" 2>/dev/null` OSICPX_DATA=`$PKG_CONFIG --variable=datadir "osi-cplex" 2>/dev/null` coin_has_osicpx=yes echo "$as_me:$LINENO: result: yes: $OSICPX_VERSIONS" >&5 echo "${ECHO_T}yes: $OSICPX_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 OSICPX_LIBS=`echo " $OSICPX_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` fi OSICPX_PCREQUIRES="osi-cplex" # augment X_PCREQUIRES, X_CFLAGS, and X_LIBS for each build target X in BonminLib BONMINLIB_PCREQUIRES="osi-cplex $BONMINLIB_PCREQUIRES" BONMINLIB_CFLAGS="$OSICPX_CFLAGS $BONMINLIB_CFLAGS" BONMINLIB_LIBS="$OSICPX_LIBS $BONMINLIB_LIBS" else OSICPX_PKG_ERRORS=`$PKG_CONFIG $pkg_short_errors --errors-to-stdout --print-errors "osi-cplex"` coin_has_osicpx=notGiven echo "$as_me:$LINENO: result: not given: $OSICPX_PKG_ERRORS" >&5 echo "${ECHO_T}not given: $OSICPX_PKG_ERRORS" >&6 fi else { { echo "$as_me:$LINENO: error: \"Cannot check for existance of module OsiCpx without pkg-config\"" >&5 echo "$as_me: error: \"Cannot check for existance of module OsiCpx 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 OsiCpx (fallback)" >&5 echo $ECHO_N "checking for COIN-OR package OsiCpx (fallback)... $ECHO_C" >&6 coin_has_osicpx=notGiven OSICPX_LIBS= OSICPX_LIBS_INSTALLED= OSICPX_CFLAGS= OSICPX_CFLAGS_INSTALLED= OSICPX_DATA= OSICPX_DATA_INSTALLED= OSICPX_PCLIBS= OSICPX_PCREQUIRES= # initial list of dependencies is "osi-cplex", but we need to filter out version number specifications (= x, <= x, >= x, != x) projtoprocess="osi-cplex" # 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$OSICPX_DATA" = x ; then projdatadir= pcfilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcfile` eval `sh -c "$pcfilemod"` OSICPX_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$OSICPX_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 OSICPX_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 OSICPX_CFLAGS="$projcflags $OSICPX_CFLAGS" # set LIBS variable OSICPX_LIBS="$projlibs $OSICPX_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 OSICPX_CFLAGS_INSTALLED="$projcflags $OSICPX_CFLAGS_INSTALLED" # set LIBS variable OSICPX_LIBS_INSTALLED="$projlibs $OSICPX_LIBS_INSTALLED" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # finish up coin_has_osicpx=yes echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 cat >>confdefs.h <<\_ACEOF #define COIN_HAS_OSICPX 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 OSICPX_LIBS=`echo " $OSICPX_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` OSICPX_LIBS_INSTALLED=`echo " $OSICPX_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 OSICPX_PCREQUIRES="osi-cplex" BONMINLIB_PCREQUIRES="osi-cplex $BONMINLIB_PCREQUIRES" BONMINLIB_CFLAGS="$OSICPX_CFLAGS $BONMINLIB_CFLAGS" BONMINLIB_LIBS="$OSICPX_LIBS $BONMINLIB_LIBS" BONMINLIB_CFLAGS_INSTALLED="$OSICPX_CFLAGS_INSTALLED $BONMINLIB_CFLAGS_INSTALLED" BONMINLIB_LIBS_INSTALLED="$OSICPX_LIBS_INSTALLED $BONMINLIB_LIBS_INSTALLED" fi if test $coin_has_osicpx != notGiven && test $coin_has_osicpx != skipping; then COIN_HAS_OSICPX_TRUE= COIN_HAS_OSICPX_FALSE='#' else COIN_HAS_OSICPX_TRUE='#' COIN_HAS_OSICPX_FALSE= fi fi else echo "$as_me:$LINENO: result: $coin_has_osicpx" >&5 echo "${ECHO_T}$coin_has_osicpx" >&6 fi if test $coin_has_osicpx != skipping && test $coin_has_osicpx != notGiven ; then cat >>confdefs.h <<\_ACEOF #define COIN_HAS_OSICPX 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) OSICPX_DEPENDENCIES=`echo " $OSICPX_LIBS" | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` BONMINLIB_DEPENDENCIES=`echo " $BONMINLIB_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 "$OSICPX_CFLAGS" ; then { echo "$as_me:$LINENO: OsiCpx CFLAGS are $OSICPX_CFLAGS" >&5 echo "$as_me: OsiCpx CFLAGS are $OSICPX_CFLAGS" >&6;} fi if test -n "$OSICPX_LIBS" ; then { echo "$as_me:$LINENO: OsiCpx LIBS are $OSICPX_LIBS" >&5 echo "$as_me: OsiCpx LIBS are $OSICPX_LIBS" >&6;} fi if test -n "$OSICPX_DEPENDENCIES" ; then { echo "$as_me:$LINENO: OsiCpx DEPENDENCIES are $OSICPX_DEPENDENCIES" >&5 echo "$as_me: OsiCpx DEPENDENCIES are $OSICPX_DEPENDENCIES" >&6;} fi if test -n "$OSICPX_DATA" ; then { echo "$as_me:$LINENO: OsiCpx DATA is $OSICPX_DATA" >&5 echo "$as_me: OsiCpx DATA is $OSICPX_DATA" >&6;} fi if test -n "$OSICPX_PCLIBS" ; then { echo "$as_me:$LINENO: OsiCpx PCLIBS are $OSICPX_PCLIBS" >&5 echo "$as_me: OsiCpx PCLIBS are $OSICPX_PCLIBS" >&6;} fi if test -n "$OSICPX_PCREQUIRES" ; then { echo "$as_me:$LINENO: OsiCpx PCREQUIRES are $OSICPX_PCREQUIRES" >&5 echo "$as_me: OsiCpx PCREQUIRES are $OSICPX_PCREQUIRES" >&6;} fi { echo "$as_me:$LINENO: BonminLib CFLAGS are $BONMINLIB_CFLAGS" >&5 echo "$as_me: BonminLib CFLAGS are $BONMINLIB_CFLAGS" >&6;} { echo "$as_me:$LINENO: BonminLib LIBS are $BONMINLIB_LIBS" >&5 echo "$as_me: BonminLib LIBS are $BONMINLIB_LIBS" >&6;} { echo "$as_me:$LINENO: BonminLib DEPENDENCIES are $BONMINLIB_DEPENDENCIES" >&5 echo "$as_me: BonminLib DEPENDENCIES are $BONMINLIB_DEPENDENCIES" >&6;} fi fi # Define the Makefile conditional if test $coin_has_osicpx != notGiven && test $coin_has_osicpx != skipping; then COIN_HAS_OSICPX_TRUE= COIN_HAS_OSICPX_FALSE='#' else COIN_HAS_OSICPX_TRUE='#' COIN_HAS_OSICPX_FALSE= fi # To get also the directory where cplex.h can be found, we also check for cplex directly. echo "$as_me:$LINENO: checking if user provides library for Cplex" >&5 echo $ECHO_N "checking if user provides library for Cplex... $ECHO_C" >&6 # Check for header file directory # Check whether --with-cplex-incdir or --without-cplex-incdir was given. if test "${with_cplex_incdir+set}" = set; then withval="$with_cplex_incdir" CPXINCDIR=`cd $withval; pwd` fi; # Check for library directory # Check whether --with-cplex-lib or --without-cplex-lib was given. if test "${with_cplex_lib+set}" = set; then withval="$with_cplex_lib" CPXLIB=$withval fi; # Switch to disable library check if requested # Check whether --enable-cplex-libcheck or --disable-cplex-libcheck was given. if test "${enable_cplex_libcheck+set}" = set; then enableval="$enable_cplex_libcheck" cplex_libcheck=$enableval else cplex_libcheck=yes fi; # At this point, if we're going to use the library, both LBRYINCDIR and # LBRYLIB must be defined and not empty. if test x"$CPXINCDIR" != x || test x"$CPXLIB" != x; then if test x"$CPXINCDIR" = x || test x"$CPXLIB" = x; then { { echo "$as_me:$LINENO: error: You need to specify both an include directory and link flags to use library Cplex. Use --with-cplex-incdir of environment variable $CPXINCDIR to specify the include directory. Use --with-cplex-lib or environment variable $CPXLIB to specify link flags." >&5 echo "$as_me: error: You need to specify both an include directory and link flags to use library Cplex. Use --with-cplex-incdir of environment variable $CPXINCDIR to specify the include directory. Use --with-cplex-lib or environment variable $CPXLIB to specify link flags." >&2;} { (exit 1); exit 1; }; } fi coin_has_cpx=true echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else coin_has_cpx=false echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # If we have instructions for use, consider header and link checks. if test $coin_has_cpx = true; then # If argument 3 (file) is given, check for the file. Typically this will be a # header file, but that's not assumed. if test -r $CPXINCDIR/cplex.h; then : else { { echo "$as_me:$LINENO: error: Cannot find file cplex.h in $CPXINCDIR" >&5 echo "$as_me: error: Cannot find file cplex.h in $CPXINCDIR" >&2;} { (exit 1); exit 1; }; } : fi # Now see if we can link the function. There are arguments for and against # assuming argument 3 is a header file declaring the function. A correct # function declaration is the main argument in favour. Having to cope with # possible dependencies or other oddities are the main arguments against. # Force the use of C as the best single choice amongst C++, C, and Fortran. # Obviously, this has limits. if test x"$cplex_libcheck" != xno; then coin_save_LIBS="$LIBS" LIBS="$CPXLIB " coin_CPX_link=no ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu for fnm in CPXgetstat ; do echo "$as_me:$LINENO: checking whether symbol $fnm is available with CPX" >&5 echo $ECHO_N "checking whether symbol $fnm is available with CPX... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { $fnm() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 coin_CPX_link=yes break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS="$coin_save_LIBS" if test x"$coin_CPX_link" != xyes ; then { { echo "$as_me:$LINENO: error: Cannot find symbol(s) CPXgetstat with CPX" >&5 echo "$as_me: error: Cannot find symbol(s) CPXgetstat with CPX" >&2;} { (exit 1); exit 1; }; } fi fi # If we make it this far, we've verified the file and linked the function. Add # the necessary link flags to _{PC}LIBS and define the preprocessor symbol # COIN_HAS_LBRY. cat >>confdefs.h <<\_ACEOF #define COIN_HAS_CPX 1 _ACEOF fi # Arrange for configure to substitute LBRYINCDIR and LBRYLIB and create the # automake conditional. These actions must occur unconditionally. if test $coin_has_cpx = true; then COIN_HAS_CPX_TRUE= COIN_HAS_CPX_FALSE='#' else COIN_HAS_CPX_TRUE='#' COIN_HAS_CPX_FALSE= fi ############################################################################# # FilterSQP # ############################################################################# # for backward compatibility, map --with-filtersqp to --with-filtersqp-libs # Check whether --with-filtersqp or --without-filtersqp was given. if test "${with_filtersqp+set}" = set; then withval="$with_filtersqp" filtersqp_libs="$withval" fi; echo "$as_me:$LINENO: checking for COIN-OR package FilterSQP" >&5 echo $ECHO_N "checking for COIN-OR package FilterSQP... $ECHO_C" >&6 coin_has_filtersqp=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 = "FilterSQP"; then coin_has_filtersqp=skipping fi done fi if test "$coin_has_filtersqp" != skipping; then # Check whether --with-m4_tolower(FilterSQP) or --without-m4_tolower(FilterSQP) was given. if test "${with_filtersqp+set}" = set; then withval="$with_filtersqp" if test "$withval" = no ; then coin_has_filtersqp=skipping fi fi; fi FILTERSQP_LIBS= FILTERSQP_CFLAGS= FILTERSQP_DATA= FILTERSQP_DEPENDENCIES= FILTERSQP_PCLIBS= FILTERSQP_PCREQUIRES= #check if user provided LIBS, CFLAGS, or DATA for package or disables use of package if test $coin_has_filtersqp != skipping; then # Check whether --with-m4_tolower(FilterSQP)-lib or --without-m4_tolower(FilterSQP)-lib was given. if test "${with_filtersqp_lib+set}" = set; then withval="$with_filtersqp_lib" if test "$withval" = no ; then coin_has_filtersqp=skipping else coin_has_filtersqp=yes FILTERSQP_LIBS="$withval" FILTERSQP_PCLIBS="$withval" BONMINLIB_PCLIBS="$withval $BONMINLIB_PCLIBS" BONMINLIB_LIBS="$withval $BONMINLIB_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 FILTERSQP_LIBS_INSTALLED="$withval" BONMINLIB_LIBS_INSTALLED="$withval $BONMINLIB_LIBS_INSTALLED" fi fi fi; fi if test $coin_has_filtersqp != skipping; then # Check whether --with-m4_tolower(FilterSQP)-incdir or --without-m4_tolower(FilterSQP)-incdir was given. if test "${with_filtersqp_incdir+set}" = set; then withval="$with_filtersqp_incdir" if test "$withval" = no ; then coin_has_filtersqp=skipping else coin_has_filtersqp=yes FILTERSQP_CFLAGS="-I`${CYGPATH_W} $withval`" BONMINLIB_CFLAGS="-I`${CYGPATH_W} $withval` $BONMINLIB_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 FILTERSQP_CFLAGS_INSTALLED="$FILTERSQP_CFLAGS" BONMINLIB_CFLAGS_INSTALLED="$FILTERSQP_CFLAGS $BONMINLIB_CFLAGS_INSTALLED" fi fi fi; fi if test $coin_has_filtersqp != skipping; then # Check whether --with-m4_tolower(FilterSQP)-datadir or --without-m4_tolower(FilterSQP)-datadir was given. if test "${with_filtersqp_datadir+set}" = set; then withval="$with_filtersqp_datadir" if test "$withval" = no ; then coin_has_filtersqp=skipping else coin_has_filtersqp=yes FILTERSQP_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 FILTERSQP_DATA_INSTALLED="$withval" fi fi fi; fi if test $coin_has_filtersqp = 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 "coinfiltersqp"; then FILTERSQP_VERSIONS=`$PKG_CONFIG --modversion "coinfiltersqp" 2>/dev/null | tr '\n' ' '` cflags=`$PKG_CONFIG --cflags "coinfiltersqp" 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 FILTERSQP_CFLAGS="$cflags" FILTERSQP_LIBS=`$PKG_CONFIG --libs "coinfiltersqp" 2>/dev/null` FILTERSQP_DATA=`$PKG_CONFIG --variable=datadir "coinfiltersqp" 2>/dev/null` coin_has_filtersqp=yes echo "$as_me:$LINENO: result: yes: $FILTERSQP_VERSIONS" >&5 echo "${ECHO_T}yes: $FILTERSQP_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 FILTERSQP_LIBS=`echo " $FILTERSQP_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` fi FILTERSQP_PCREQUIRES="coinfiltersqp" # augment X_PCREQUIRES, X_CFLAGS, and X_LIBS for each build target X in BonminLib BONMINLIB_PCREQUIRES="coinfiltersqp $BONMINLIB_PCREQUIRES" BONMINLIB_CFLAGS="$FILTERSQP_CFLAGS $BONMINLIB_CFLAGS" BONMINLIB_LIBS="$FILTERSQP_LIBS $BONMINLIB_LIBS" else FILTERSQP_PKG_ERRORS=`$PKG_CONFIG $pkg_short_errors --errors-to-stdout --print-errors "coinfiltersqp"` coin_has_filtersqp=notGiven echo "$as_me:$LINENO: result: not given: $FILTERSQP_PKG_ERRORS" >&5 echo "${ECHO_T}not given: $FILTERSQP_PKG_ERRORS" >&6 fi else { { echo "$as_me:$LINENO: error: \"Cannot check for existance of module FilterSQP without pkg-config\"" >&5 echo "$as_me: error: \"Cannot check for existance of module FilterSQP 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 FilterSQP (fallback)" >&5 echo $ECHO_N "checking for COIN-OR package FilterSQP (fallback)... $ECHO_C" >&6 coin_has_filtersqp=notGiven FILTERSQP_LIBS= FILTERSQP_LIBS_INSTALLED= FILTERSQP_CFLAGS= FILTERSQP_CFLAGS_INSTALLED= FILTERSQP_DATA= FILTERSQP_DATA_INSTALLED= FILTERSQP_PCLIBS= FILTERSQP_PCREQUIRES= # initial list of dependencies is "coinfiltersqp", but we need to filter out version number specifications (= x, <= x, >= x, != x) projtoprocess="coinfiltersqp" # 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$FILTERSQP_DATA" = x ; then projdatadir= pcfilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcfile` eval `sh -c "$pcfilemod"` FILTERSQP_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$FILTERSQP_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 FILTERSQP_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 FILTERSQP_CFLAGS="$projcflags $FILTERSQP_CFLAGS" # set LIBS variable FILTERSQP_LIBS="$projlibs $FILTERSQP_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 FILTERSQP_CFLAGS_INSTALLED="$projcflags $FILTERSQP_CFLAGS_INSTALLED" # set LIBS variable FILTERSQP_LIBS_INSTALLED="$projlibs $FILTERSQP_LIBS_INSTALLED" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # finish up coin_has_filtersqp=yes echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 cat >>confdefs.h <<\_ACEOF #define COIN_HAS_FILTERSQP 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 FILTERSQP_LIBS=`echo " $FILTERSQP_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` FILTERSQP_LIBS_INSTALLED=`echo " $FILTERSQP_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 FILTERSQP_PCREQUIRES="coinfiltersqp" BONMINLIB_PCREQUIRES="coinfiltersqp $BONMINLIB_PCREQUIRES" BONMINLIB_CFLAGS="$FILTERSQP_CFLAGS $BONMINLIB_CFLAGS" BONMINLIB_LIBS="$FILTERSQP_LIBS $BONMINLIB_LIBS" BONMINLIB_CFLAGS_INSTALLED="$FILTERSQP_CFLAGS_INSTALLED $BONMINLIB_CFLAGS_INSTALLED" BONMINLIB_LIBS_INSTALLED="$FILTERSQP_LIBS_INSTALLED $BONMINLIB_LIBS_INSTALLED" fi if test $coin_has_filtersqp != notGiven && test $coin_has_filtersqp != skipping; then COIN_HAS_FILTERSQP_TRUE= COIN_HAS_FILTERSQP_FALSE='#' else COIN_HAS_FILTERSQP_TRUE='#' COIN_HAS_FILTERSQP_FALSE= fi fi else echo "$as_me:$LINENO: result: $coin_has_filtersqp" >&5 echo "${ECHO_T}$coin_has_filtersqp" >&6 fi if test $coin_has_filtersqp != skipping && test $coin_has_filtersqp != notGiven ; then cat >>confdefs.h <<\_ACEOF #define COIN_HAS_FILTERSQP 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) FILTERSQP_DEPENDENCIES=`echo " $FILTERSQP_LIBS" | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` BONMINLIB_DEPENDENCIES=`echo " $BONMINLIB_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 "$FILTERSQP_CFLAGS" ; then { echo "$as_me:$LINENO: FilterSQP CFLAGS are $FILTERSQP_CFLAGS" >&5 echo "$as_me: FilterSQP CFLAGS are $FILTERSQP_CFLAGS" >&6;} fi if test -n "$FILTERSQP_LIBS" ; then { echo "$as_me:$LINENO: FilterSQP LIBS are $FILTERSQP_LIBS" >&5 echo "$as_me: FilterSQP LIBS are $FILTERSQP_LIBS" >&6;} fi if test -n "$FILTERSQP_DEPENDENCIES" ; then { echo "$as_me:$LINENO: FilterSQP DEPENDENCIES are $FILTERSQP_DEPENDENCIES" >&5 echo "$as_me: FilterSQP DEPENDENCIES are $FILTERSQP_DEPENDENCIES" >&6;} fi if test -n "$FILTERSQP_DATA" ; then { echo "$as_me:$LINENO: FilterSQP DATA is $FILTERSQP_DATA" >&5 echo "$as_me: FilterSQP DATA is $FILTERSQP_DATA" >&6;} fi if test -n "$FILTERSQP_PCLIBS" ; then { echo "$as_me:$LINENO: FilterSQP PCLIBS are $FILTERSQP_PCLIBS" >&5 echo "$as_me: FilterSQP PCLIBS are $FILTERSQP_PCLIBS" >&6;} fi if test -n "$FILTERSQP_PCREQUIRES" ; then { echo "$as_me:$LINENO: FilterSQP PCREQUIRES are $FILTERSQP_PCREQUIRES" >&5 echo "$as_me: FilterSQP PCREQUIRES are $FILTERSQP_PCREQUIRES" >&6;} fi { echo "$as_me:$LINENO: BonminLib CFLAGS are $BONMINLIB_CFLAGS" >&5 echo "$as_me: BonminLib CFLAGS are $BONMINLIB_CFLAGS" >&6;} { echo "$as_me:$LINENO: BonminLib LIBS are $BONMINLIB_LIBS" >&5 echo "$as_me: BonminLib LIBS are $BONMINLIB_LIBS" >&6;} { echo "$as_me:$LINENO: BonminLib DEPENDENCIES are $BONMINLIB_DEPENDENCIES" >&5 echo "$as_me: BonminLib DEPENDENCIES are $BONMINLIB_DEPENDENCIES" >&6;} fi fi # Define the Makefile conditional if test $coin_has_filtersqp != notGiven && test $coin_has_filtersqp != skipping; then COIN_HAS_FILTERSQP_TRUE= COIN_HAS_FILTERSQP_FALSE='#' else COIN_HAS_FILTERSQP_TRUE='#' COIN_HAS_FILTERSQP_FALSE= fi if test $coin_has_filtersqp = yes then # Get the name of the Fortran compiler and appropriate compiler options case $build in *-cygwin* | *-mingw*) if test "$enable_msvc" = yes ; then coin_f77_comps="ifort fl32 compile_f2c" else coin_f77_comps="gfortran ifort g95 g77 fl32 compile_f2c" fi ;; *-*-solaris*) coin_f77_comps="f95 f90 g95 f77 xlf_r fort77 gfortran g77 pgf90 pgf77 ifort ifc frt af77" ;; *-linux-gnu*) coin_f77_comps="gfortran ifort g95 fort77 f77 g77 pgf90 pgf77 ifc frt af77 xlf_r" ;; *) coin_f77_comps="xlf_r fort77 gfortran ifort g95 f77 g77 pgf90 pgf77 ifc frt af77" ;; esac ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu coin_has_f77=yes save_fflags="$FFLAGS" # We delete the cached value, since the test might not have been # performed with our choice of compilers earlier $as_unset ac_cv_prog_F77 || test "${ac_cv_prog_F77+set}" != set || { ac_cv_prog_F77=; export ac_cv_prog_F77; } # This is a real belt-and-suspenders approach. AC_COIN_FIND_F77 will use # coin_f77_comps to see if there's a program that matches one of the names. # If there's no such program, F77 = unavailable. If we match the name, # feed AC_PROG_F77 the same search list, just to be sure it's a functioning # compiler. # AC_MSG_NOTICE([Fortran compiler candidates: $coin_f77_comps]) { echo "$as_me:$LINENO: Trying to determine Fortran compiler name" >&5 echo "$as_me: Trying to determine Fortran compiler name" >&6;} if test -n "$ac_tool_prefix"; then for ac_prog in $coin_f77_comps do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$F77"; then ac_cv_prog_F77="$F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_F77="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi F77=$ac_cv_prog_F77 if test -n "$F77"; then echo "$as_me:$LINENO: result: $F77" >&5 echo "${ECHO_T}$F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$F77" && break done fi if test -z "$F77"; then ac_ct_F77=$F77 for ac_prog in $coin_f77_comps do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_F77"; then ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_F77="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_F77=$ac_cv_prog_ac_ct_F77 if test -n "$ac_ct_F77"; then echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 echo "${ECHO_T}$ac_ct_F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_F77" && break done test -n "$ac_ct_F77" || ac_ct_F77="unavailable" F77=$ac_ct_F77 fi if test "$F77" != "unavailable" ; then ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in $coin_f77_comps do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$F77"; then ac_cv_prog_F77="$F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_F77="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi F77=$ac_cv_prog_F77 if test -n "$F77"; then echo "$as_me:$LINENO: result: $F77" >&5 echo "${ECHO_T}$F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$F77" && break done fi if test -z "$F77"; then ac_ct_F77=$F77 for ac_prog in $coin_f77_comps do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_F77"; then ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_F77="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_F77=$ac_cv_prog_ac_ct_F77 if test -n "$ac_ct_F77"; then echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 echo "${ECHO_T}$ac_ct_F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_F77" && break done F77=$ac_ct_F77 fi # Provide some information about the compiler. echo "$as_me:23266:" \ "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 orig_FFLAGS="FFLAGS" 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=\"$orig_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=\"$orig_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: The flags FFLAGS=-O do not work. I will continue with empty FFLAGS, but you might want to set FFLAGS manually." >&5 echo "$as_me: WARNING: The flags FFLAGS=-O do not work. I will continue with empty FFLAGS, but you might want to set FFLAGS manually." >&2;} fi fi fi { echo "$as_me:$LINENO: Fortran compiler options are: $FFLAGS" >&5 echo "$as_me: Fortran compiler options are: $FFLAGS" >&6;} if test x"$MPIF77" = x; then :; else { echo "$as_me:$LINENO: Will use MPI Fortran compiler $MPIF77" >&5 echo "$as_me: Will use MPI Fortran compiler $MPIF77" >&6;} F77="$MPIF77" fi # correct the LD variable if we use the intel fortran compiler in windows case $build in *-cygwin* | *-mingw*) case "$F77" in ifort* | */ifort* | IFORT* | */IFORT*) LD=link ;; esac ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Find out how to call Fortran from C and determine Fortran runtime libraries # 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:23781: \"$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:23859: \"$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 # we want to keep the linking check for FilterSQP, but cannot do this if FilterSQP will be build later (in ThirdParty) #if test $coin_has_filtersqp = yes ; then # AC_MSG_CHECKING([whether FilterSQP library $FILTERSQP_LIBS works]) # SAVE_LIBS="$LIBS" # LIBS="$FILTERSQP_LIBS $FLIBS $LIBS" # AC_LANG_PUSH([Fortran 77]) # AC_TRY_LINK([], #[ call filterSQP # end # subroutine confun # end # subroutine objfun # end # subroutine gradient # end # subroutine hessian], # [AC_MSG_RESULT([yes]) # FILTERSQP_LIBS="$FILTERSQP_LIBS $FLIBS"], # [AC_MSG_RESULT([no]) # AC_MSG_ERROR([user supplied FilterSQP library $FILTERSQP_LIBS does not work])]) # AC_LANG_POP([Fortran 77]) # LIBS="$SAVE_LIBS" #fi ############################################################################# # Feasibility Pump # ############################################################################# #if test x"$BUILD_FP" != x; then # build_fp=yes #fi #AM_CONDITIONAL(BUILD_FP, test x$build_fp = xyes) ############################################################################# # ASTYLE # ############################################################################# ASTYLE=astyle ASTYLEFLAGS="--mode=c --indent=spaces=2 --indent-cases --indent-namespaces --min-conditional-indent=1 --brackets=linux --brackets=break-closing-headers --max-instatement-indent=2" ############################################################################# # Stuff for Examples # ############################################################################# 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/bonmin.opt" for file in $cvl_tmp ; do coin_vpath_link_files="$coin_vpath_link_files $file" done fi # Allow for newlines in the parameter if test $coin_vpath_config = yes; then cvl_tmp="test/mytoy.nl" for file in $cvl_tmp ; do coin_vpath_link_files="$coin_vpath_link_files $file" done fi ac_config_links="$ac_config_links test/MyBonmin.cpp:examples/CppExample/MyBonmin.cpp test/MyTMINLP.cpp:examples/CppExample/MyTMINLP.cpp test/MyTMINLP.hpp:examples/CppExample/MyTMINLP.hpp" ############################################################################# # Check for doxygen # ############################################################################# { echo "$as_me:$LINENO: configuring doxygen documentation options" >&5 echo "$as_me: configuring doxygen documentation options" >&6;} # Check to see if doxygen is available. # Extract the first word of "doxygen", so it can be a program name with args. set dummy doxygen; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_coin_have_doxygen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$coin_have_doxygen"; then ac_cv_prog_coin_have_doxygen="$coin_have_doxygen" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_coin_have_doxygen="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_coin_have_doxygen" && ac_cv_prog_coin_have_doxygen="no" fi fi coin_have_doxygen=$ac_cv_prog_coin_have_doxygen if test -n "$coin_have_doxygen"; then echo "$as_me:$LINENO: result: $coin_have_doxygen" >&5 echo "${ECHO_T}$coin_have_doxygen" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "latex", so it can be a program name with args. set dummy latex; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_coin_have_latex+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$coin_have_latex"; then ac_cv_prog_coin_have_latex="$coin_have_latex" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_coin_have_latex="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_coin_have_latex" && ac_cv_prog_coin_have_latex="no" fi fi coin_have_latex=$ac_cv_prog_coin_have_latex if test -n "$coin_have_latex"; then echo "$as_me:$LINENO: result: $coin_have_latex" >&5 echo "${ECHO_T}$coin_have_latex" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Look for the dot tool from the graphviz package, unless the user has # disabled it. # Check whether --with-dot or --without-dot was given. if test "${with_dot+set}" = set; then withval="$with_dot" else withval=yes fi; if test x"$withval" = xno ; then coin_doxy_usedot=NO echo "$as_me:$LINENO: checking for dot " >&5 echo $ECHO_N "checking for dot ... $ECHO_C" >&6 echo "$as_me:$LINENO: result: disabled" >&5 echo "${ECHO_T}disabled" >&6 else # Extract the first word of "dot", so it can be a program name with args. set dummy dot; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_coin_doxy_usedot+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$coin_doxy_usedot"; then ac_cv_prog_coin_doxy_usedot="$coin_doxy_usedot" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_coin_doxy_usedot="YES" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_coin_doxy_usedot" && ac_cv_prog_coin_doxy_usedot="NO" fi fi coin_doxy_usedot=$ac_cv_prog_coin_doxy_usedot if test -n "$coin_doxy_usedot"; then echo "$as_me:$LINENO: result: $coin_doxy_usedot" >&5 echo "${ECHO_T}$coin_doxy_usedot" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi # Generate a tag file name and a log file name coin_doxy_tagname=doxydoc/${PACKAGE}_doxy.tag coin_doxy_logname=doxydoc/${PACKAGE}_doxy.log if test $coin_have_doxygen = yes; then COIN_HAS_DOXYGEN_TRUE= COIN_HAS_DOXYGEN_FALSE='#' else COIN_HAS_DOXYGEN_TRUE='#' COIN_HAS_DOXYGEN_FALSE= fi if test $coin_have_latex = yes; then COIN_HAS_LATEX_TRUE= COIN_HAS_LATEX_FALSE='#' else COIN_HAS_LATEX_TRUE='#' COIN_HAS_LATEX_FALSE= fi # Process the list of project names and massage them into possible doxygen # doc'n directories. Prefer 1) classic external, source processed using # a project-specific doxygen.conf, we use the tag file; 2) classic # external, source processed using package doxygen.conf; 3) installed # doxydoc. Alternatives 1) and 2) are only possible if the directory will be # configured, which we can't know unless this is the package base configure, # since coin_subdirs is only set there. Hence it's sufficient to check for # membership. If we use a tag file from a classic external, exclude the # source from doxygen processing when doxygen runs in the base directory. coin_doxy_tagfiles= coin_doxy_excludes= tmp="CoinUtils Osi Clp Cgl Cbc Ipopt" for proj in $tmp ; do lc_proj=`echo $proj | tr [A-Z] [a-z]` echo "$as_me:$LINENO: checking for doxygen doc'n for $proj " >&5 echo $ECHO_N "checking for doxygen doc'n for $proj ... $ECHO_C" >&6 doxytag=${lc_proj}_doxy.tag doxyfound=no # proj will be configured, hence doxydoc present in build tree doxysrcdir="${srcdir}/../${proj}" # AC_MSG_NOTICE([Considering $doxysrcdir (base)]) if test -d "$doxysrcdir" ; then # with a doxydoc directory? doxydir="$doxysrcdir/doxydoc" # AC_MSG_NOTICE([Considering $doxydir (base)]) # AC_MSG_NOTICE([Subdirs: $coin_subdirs)]) if test -d "$doxydir" ; then # use tag file; don't process source doxydir="../${proj}/doxydoc" coin_doxy_tagfiles="$coin_doxy_tagfiles $doxydir/$doxytag=../../$doxydir/html" echo "$as_me:$LINENO: result: $doxydir (tag)" >&5 echo "${ECHO_T}$doxydir (tag)" >&6 coin_doxy_excludes="$coin_doxy_excludes */${proj}" else # will process the source -- nothing further to be done here echo "$as_me:$LINENO: result: $doxysrcdir (src)" >&5 echo "${ECHO_T}$doxysrcdir (src)" >&6 fi doxyfound=yes fi # Not built, fall back to installed tag file if test $doxyfound = no ; then eval doxydir="${datadir}/coin/doc/${proj}/doxydoc" # AC_MSG_NOTICE([Considering $doxydir (install)]) # AC_MSG_NOTICE([Subdirs: $coin_subdirs)]) coin_doxy_tagfiles="$coin_doxy_tagfiles $doxydir/$doxytag=$doxydir/html" echo "$as_me:$LINENO: result: $doxydir (tag)" >&5 echo "${ECHO_T}$doxydir (tag)" >&6 fi done ############################################################################## # Finishing up by writing all the output # ############################################################################## ac_config_files="$ac_config_files Makefile src/Apps/Makefile src/CbcBonmin/Makefile src/Interfaces/Makefile src/Interfaces/Ipopt/Makefile src/Interfaces/Filter/Makefile src/Interfaces/Ampl/Makefile src/Algorithms/Makefile src/Algorithms/Ampl/Makefile src/Algorithms/Branching/Makefile src/Algorithms/QuadCuts/Makefile src/Algorithms/OaGenerators/Makefile src/CbcBonmin/Heuristics/Makefile examples/OptionDocGen/Makefile experimental/Separable/Makefile experimental/RobotBonmin/Makefile test/Makefile examples/CppExample/Makefile bonmin.pc bonmin-uninstalled.pc doxydoc/doxygen.conf" if test $coin_has_asl = yes ; then ac_config_files="$ac_config_files bonminamplinterface.pc:src/CbcBonmin/bonminamplinterface.pc.in bonminamplinterface-uninstalled.pc:src/CbcBonmin/bonminamplinterface-uninstalled.pc.in" fi ac_config_headers="$ac_config_headers src/Interfaces/config.h src/Interfaces/config_bonmin.h" 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_COINDEPEND_TRUE}" && test -z "${COIN_HAS_COINDEPEND_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_COINDEPEND\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_COINDEPEND\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_COINDEPEND_TRUE}" && test -z "${COIN_HAS_COINDEPEND_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_COINDEPEND\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_COINDEPEND\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_ASL_TRUE}" && test -z "${COIN_HAS_ASL_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_ASL\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_ASL\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_ASL_TRUE}" && test -z "${COIN_HAS_ASL_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_ASL\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_ASL\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_OSICPX_TRUE}" && test -z "${COIN_HAS_OSICPX_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_OSICPX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_OSICPX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_OSICPX_TRUE}" && test -z "${COIN_HAS_OSICPX_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_OSICPX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_OSICPX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_CPX_TRUE}" && test -z "${COIN_HAS_CPX_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_CPX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_CPX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_FILTERSQP_TRUE}" && test -z "${COIN_HAS_FILTERSQP_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_FILTERSQP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_FILTERSQP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_FILTERSQP_TRUE}" && test -z "${COIN_HAS_FILTERSQP_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_FILTERSQP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_FILTERSQP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_DOXYGEN_TRUE}" && test -z "${COIN_HAS_DOXYGEN_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_DOXYGEN\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_DOXYGEN\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_LATEX_TRUE}" && test -z "${COIN_HAS_LATEX_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_LATEX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_LATEX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. Logging --version etc. is OK. exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF This file was extended by Bonmin $as_me 1.8.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 --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration links: $config_links Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ Bonmin config.status 1.8.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 # # 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/Apps/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Apps/Makefile" ;; "src/CbcBonmin/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/CbcBonmin/Makefile" ;; "src/Interfaces/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Interfaces/Makefile" ;; "src/Interfaces/Ipopt/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Interfaces/Ipopt/Makefile" ;; "src/Interfaces/Filter/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Interfaces/Filter/Makefile" ;; "src/Interfaces/Ampl/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Interfaces/Ampl/Makefile" ;; "src/Algorithms/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Algorithms/Makefile" ;; "src/Algorithms/Ampl/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Algorithms/Ampl/Makefile" ;; "src/Algorithms/Branching/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Algorithms/Branching/Makefile" ;; "src/Algorithms/QuadCuts/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Algorithms/QuadCuts/Makefile" ;; "src/Algorithms/OaGenerators/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Algorithms/OaGenerators/Makefile" ;; "src/CbcBonmin/Heuristics/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/CbcBonmin/Heuristics/Makefile" ;; "examples/OptionDocGen/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/OptionDocGen/Makefile" ;; "experimental/Separable/Makefile" ) CONFIG_FILES="$CONFIG_FILES experimental/Separable/Makefile" ;; "experimental/RobotBonmin/Makefile" ) CONFIG_FILES="$CONFIG_FILES experimental/RobotBonmin/Makefile" ;; "test/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; "examples/CppExample/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/CppExample/Makefile" ;; "bonmin.pc" ) CONFIG_FILES="$CONFIG_FILES bonmin.pc" ;; "bonmin-uninstalled.pc" ) CONFIG_FILES="$CONFIG_FILES bonmin-uninstalled.pc" ;; "doxydoc/doxygen.conf" ) CONFIG_FILES="$CONFIG_FILES doxydoc/doxygen.conf" ;; "bonminamplinterface.pc" ) CONFIG_FILES="$CONFIG_FILES bonminamplinterface.pc:src/CbcBonmin/bonminamplinterface.pc.in" ;; "bonminamplinterface-uninstalled.pc" ) CONFIG_FILES="$CONFIG_FILES bonminamplinterface-uninstalled.pc:src/CbcBonmin/bonminamplinterface-uninstalled.pc.in" ;; "test/MyBonmin.cpp" ) CONFIG_LINKS="$CONFIG_LINKS test/MyBonmin.cpp:examples/CppExample/MyBonmin.cpp" ;; "test/MyTMINLP.cpp" ) CONFIG_LINKS="$CONFIG_LINKS test/MyTMINLP.cpp:examples/CppExample/MyTMINLP.cpp" ;; "test/MyTMINLP.hpp" ) CONFIG_LINKS="$CONFIG_LINKS test/MyTMINLP.hpp:examples/CppExample/MyTMINLP.hpp" ;; "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "src/Interfaces/config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS src/Interfaces/config.h" ;; "src/Interfaces/config_bonmin.h" ) CONFIG_HEADERS="$CONFIG_HEADERS src/Interfaces/config_bonmin.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_LINKS+set}" = set || CONFIG_LINKS=$config_links 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,@BONMIN_SVN_REV@,$BONMIN_SVN_REV,;t t s,@CDEFS@,$CDEFS,;t t s,@ADD_CFLAGS@,$ADD_CFLAGS,;t t s,@DBG_CFLAGS@,$DBG_CFLAGS,;t t s,@OPT_CFLAGS@,$OPT_CFLAGS,;t t s,@sol_cc_compiler@,$sol_cc_compiler,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@COIN_CC_IS_CL_TRUE@,$COIN_CC_IS_CL_TRUE,;t t s,@COIN_CC_IS_CL_FALSE@,$COIN_CC_IS_CL_FALSE,;t t s,@MPICC@,$MPICC,;t t s,@CXXDEFS@,$CXXDEFS,;t t s,@ADD_CXXFLAGS@,$ADD_CXXFLAGS,;t t s,@DBG_CXXFLAGS@,$DBG_CXXFLAGS,;t t s,@OPT_CXXFLAGS@,$OPT_CXXFLAGS,;t t s,@CXX@,$CXX,;t t s,@CXXFLAGS@,$CXXFLAGS,;t t s,@ac_ct_CXX@,$ac_ct_CXX,;t t s,@COIN_CXX_IS_CL_TRUE@,$COIN_CXX_IS_CL_TRUE,;t t s,@COIN_CXX_IS_CL_FALSE@,$COIN_CXX_IS_CL_FALSE,;t t s,@MPICXX@,$MPICXX,;t t s,@EGREP@,$EGREP,;t t s,@LN_S@,$LN_S,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t s,@INSTALL_DATA@,$INSTALL_DATA,;t t s,@CYGPATH_W@,$CYGPATH_W,;t t s,@PACKAGE@,$PACKAGE,;t t s,@VERSION@,$VERSION,;t t s,@ACLOCAL@,$ACLOCAL,;t t s,@AUTOCONF@,$AUTOCONF,;t t s,@AUTOMAKE@,$AUTOMAKE,;t t s,@AUTOHEADER@,$AUTOHEADER,;t t s,@MAKEINFO@,$MAKEINFO,;t t s,@install_sh@,$install_sh,;t t s,@STRIP@,$STRIP,;t t s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t s,@mkdir_p@,$mkdir_p,;t t s,@AWK@,$AWK,;t t s,@SET_MAKE@,$SET_MAKE,;t t s,@am__leading_dot@,$am__leading_dot,;t t s,@AMTAR@,$AMTAR,;t t s,@am__tar@,$am__tar,;t t s,@am__untar@,$am__untar,;t t s,@DEPDIR@,$DEPDIR,;t t s,@am__include@,$am__include,;t t s,@am__quote@,$am__quote,;t t s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t s,@CCDEPMODE@,$CCDEPMODE,;t t s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t s,@CXXDEPMODE@,$CXXDEPMODE,;t t s,@am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t s,@am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t s,@MAINT@,$MAINT,;t t s,@LIBTOOLM4@,$LIBTOOLM4,;t t s,@have_autoconf@,$have_autoconf,;t t s,@have_automake@,$have_automake,;t t s,@have_svn@,$have_svn,;t t s,@BUILDTOOLSDIR@,$BUILDTOOLSDIR,;t t s,@AUX_DIR@,$AUX_DIR,;t t s,@abs_source_dir@,$abs_source_dir,;t t s,@abs_lib_dir@,$abs_lib_dir,;t t s,@abs_include_dir@,$abs_include_dir,;t t s,@abs_bin_dir@,$abs_bin_dir,;t t s,@HAVE_EXTERNALS_TRUE@,$HAVE_EXTERNALS_TRUE,;t t s,@HAVE_EXTERNALS_FALSE@,$HAVE_EXTERNALS_FALSE,;t t s,@host@,$host,;t t s,@host_cpu@,$host_cpu,;t t s,@host_vendor@,$host_vendor,;t t s,@host_os@,$host_os,;t t s,@ECHO@,$ECHO,;t t s,@AR@,$AR,;t t s,@ac_ct_AR@,$ac_ct_AR,;t t s,@RANLIB@,$RANLIB,;t t s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t s,@CPP@,$CPP,;t t s,@CXXCPP@,$CXXCPP,;t t s,@F77@,$F77,;t t s,@FFLAGS@,$FFLAGS,;t t s,@ac_ct_F77@,$ac_ct_F77,;t t s,@LIBTOOL@,$LIBTOOL,;t t s,@ac_c_preproc_warn_flag@,$ac_c_preproc_warn_flag,;t t s,@ac_cxx_preproc_warn_flag@,$ac_cxx_preproc_warn_flag,;t t s,@dos2unix@,$dos2unix,;t t s,@RPATH_FLAGS@,$RPATH_FLAGS,;t t s,@LT_LDFLAGS@,$LT_LDFLAGS,;t t s,@DEPENDENCY_LINKING_TRUE@,$DEPENDENCY_LINKING_TRUE,;t t s,@DEPENDENCY_LINKING_FALSE@,$DEPENDENCY_LINKING_FALSE,;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,@COINDEPEND_LIBS@,$COINDEPEND_LIBS,;t t s,@COINDEPEND_CFLAGS@,$COINDEPEND_CFLAGS,;t t s,@COINDEPEND_DATA@,$COINDEPEND_DATA,;t t s,@COINDEPEND_DEPENDENCIES@,$COINDEPEND_DEPENDENCIES,;t t s,@COINDEPEND_LIBS_INSTALLED@,$COINDEPEND_LIBS_INSTALLED,;t t s,@COINDEPEND_CFLAGS_INSTALLED@,$COINDEPEND_CFLAGS_INSTALLED,;t t s,@COINDEPEND_DATA_INSTALLED@,$COINDEPEND_DATA_INSTALLED,;t t s,@BONMINLIB_CFLAGS@,$BONMINLIB_CFLAGS,;t t s,@BONMINLIB_LIBS@,$BONMINLIB_LIBS,;t t s,@BONMINLIB_PCLIBS@,$BONMINLIB_PCLIBS,;t t s,@BONMINLIB_PCREQUIRES@,$BONMINLIB_PCREQUIRES,;t t s,@BONMINLIB_DEPENDENCIES@,$BONMINLIB_DEPENDENCIES,;t t s,@BONMINLIB_CFLAGS_INSTALLED@,$BONMINLIB_CFLAGS_INSTALLED,;t t s,@BONMINLIB_LIBS_INSTALLED@,$BONMINLIB_LIBS_INSTALLED,;t t s,@COIN_HAS_COINDEPEND_TRUE@,$COIN_HAS_COINDEPEND_TRUE,;t t s,@COIN_HAS_COINDEPEND_FALSE@,$COIN_HAS_COINDEPEND_FALSE,;t t s,@ASL_LIBS@,$ASL_LIBS,;t t s,@ASL_CFLAGS@,$ASL_CFLAGS,;t t s,@ASL_DATA@,$ASL_DATA,;t t s,@ASL_DEPENDENCIES@,$ASL_DEPENDENCIES,;t t s,@ASL_LIBS_INSTALLED@,$ASL_LIBS_INSTALLED,;t t s,@ASL_CFLAGS_INSTALLED@,$ASL_CFLAGS_INSTALLED,;t t s,@ASL_DATA_INSTALLED@,$ASL_DATA_INSTALLED,;t t s,@BONMINAMPLINTERFACELIB_CFLAGS@,$BONMINAMPLINTERFACELIB_CFLAGS,;t t s,@BONMINAMPLINTERFACELIB_LIBS@,$BONMINAMPLINTERFACELIB_LIBS,;t t s,@BONMINAMPLINTERFACELIB_PCLIBS@,$BONMINAMPLINTERFACELIB_PCLIBS,;t t s,@BONMINAMPLINTERFACELIB_PCREQUIRES@,$BONMINAMPLINTERFACELIB_PCREQUIRES,;t t s,@BONMINAMPLINTERFACELIB_DEPENDENCIES@,$BONMINAMPLINTERFACELIB_DEPENDENCIES,;t t s,@BONMINAMPLINTERFACELIB_CFLAGS_INSTALLED@,$BONMINAMPLINTERFACELIB_CFLAGS_INSTALLED,;t t s,@BONMINAMPLINTERFACELIB_LIBS_INSTALLED@,$BONMINAMPLINTERFACELIB_LIBS_INSTALLED,;t t s,@COIN_HAS_ASL_TRUE@,$COIN_HAS_ASL_TRUE,;t t s,@COIN_HAS_ASL_FALSE@,$COIN_HAS_ASL_FALSE,;t t s,@OSICPX_LIBS@,$OSICPX_LIBS,;t t s,@OSICPX_CFLAGS@,$OSICPX_CFLAGS,;t t s,@OSICPX_DATA@,$OSICPX_DATA,;t t s,@OSICPX_DEPENDENCIES@,$OSICPX_DEPENDENCIES,;t t s,@OSICPX_LIBS_INSTALLED@,$OSICPX_LIBS_INSTALLED,;t t s,@OSICPX_CFLAGS_INSTALLED@,$OSICPX_CFLAGS_INSTALLED,;t t s,@OSICPX_DATA_INSTALLED@,$OSICPX_DATA_INSTALLED,;t t s,@COIN_HAS_OSICPX_TRUE@,$COIN_HAS_OSICPX_TRUE,;t t s,@COIN_HAS_OSICPX_FALSE@,$COIN_HAS_OSICPX_FALSE,;t t s,@CPXINCDIR@,$CPXINCDIR,;t t s,@CPXLIB@,$CPXLIB,;t t s,@COIN_HAS_CPX_TRUE@,$COIN_HAS_CPX_TRUE,;t t s,@COIN_HAS_CPX_FALSE@,$COIN_HAS_CPX_FALSE,;t t s,@FILTERSQP_LIBS@,$FILTERSQP_LIBS,;t t s,@FILTERSQP_CFLAGS@,$FILTERSQP_CFLAGS,;t t s,@FILTERSQP_DATA@,$FILTERSQP_DATA,;t t s,@FILTERSQP_DEPENDENCIES@,$FILTERSQP_DEPENDENCIES,;t t s,@FILTERSQP_LIBS_INSTALLED@,$FILTERSQP_LIBS_INSTALLED,;t t s,@FILTERSQP_CFLAGS_INSTALLED@,$FILTERSQP_CFLAGS_INSTALLED,;t t s,@FILTERSQP_DATA_INSTALLED@,$FILTERSQP_DATA_INSTALLED,;t t s,@COIN_HAS_FILTERSQP_TRUE@,$COIN_HAS_FILTERSQP_TRUE,;t t s,@COIN_HAS_FILTERSQP_FALSE@,$COIN_HAS_FILTERSQP_FALSE,;t t s,@ADD_FFLAGS@,$ADD_FFLAGS,;t t s,@DBG_FFLAGS@,$DBG_FFLAGS,;t t s,@OPT_FFLAGS@,$OPT_FFLAGS,;t t s,@MPIF77@,$MPIF77,;t t s,@FLIBS@,$FLIBS,;t t s,@ASTYLE@,$ASTYLE,;t t s,@ASTYLEFLAGS@,$ASTYLEFLAGS,;t t s,@coin_have_doxygen@,$coin_have_doxygen,;t t s,@coin_have_latex@,$coin_have_latex,;t t s,@coin_doxy_usedot@,$coin_doxy_usedot,;t t s,@coin_doxy_tagname@,$coin_doxy_tagname,;t t s,@coin_doxy_logname@,$coin_doxy_logname,;t t s,@COIN_HAS_DOXYGEN_TRUE@,$COIN_HAS_DOXYGEN_TRUE,;t t s,@COIN_HAS_DOXYGEN_FALSE@,$COIN_HAS_DOXYGEN_FALSE,;t t s,@COIN_HAS_LATEX_TRUE@,$COIN_HAS_LATEX_TRUE,;t t s,@COIN_HAS_LATEX_FALSE@,$COIN_HAS_LATEX_FALSE,;t t s,@coin_doxy_tagfiles@,$coin_doxy_tagfiles,;t t s,@coin_doxy_excludes@,$coin_doxy_excludes,;t t s,@LIBEXT@,$LIBEXT,;t t s,@VPATH_DISTCLEANFILES@,$VPATH_DISTCLEANFILES,;t t s,@ABSBUILDDIR@,$ABSBUILDDIR,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_builddir$INSTALL ;; esac if test x"$ac_file" != x-; then { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then configure_input= else configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;t t s,@srcdir@,$ac_srcdir,;t t s,@abs_srcdir@,$ac_abs_srcdir,;t t s,@top_srcdir@,$ac_top_srcdir,;t t s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t s,@builddir@,$ac_builddir,;t t s,@abs_builddir@,$ac_abs_builddir,;t t s,@top_builddir@,$ac_top_builddir,;t t s,@abs_top_builddir@,$ac_abs_top_builddir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_HEADER section. # # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='[ ].*$,\1#\2' ac_dC=' ' ac_dD=',;t' # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='$,\1#\2define\3' ac_uC=' ' ac_uD=',;t' for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } # Do quote $f, to prevent DOS paths from being IFS'd. echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } # Remove the trailing spaces. sed 's/[ ]*$//' $ac_file_inputs >$tmp/in _ACEOF # Transform confdefs.h into two sed scripts, `conftest.defines' and # `conftest.undefs', that substitutes the proper values into # config.h.in to produce config.h. The first handles `#define' # templates, and the second `#undef' templates. # And first: Protect against being on the right side of a sed subst in # config.status. Protect against being in an unquoted here document # in config.status. rm -f conftest.defines conftest.undefs # Using a here document instead of a string reduces the quoting nightmare. # Putting comments in sed scripts is not portable. # # `end' is used to avoid that the second main sed command (meant for # 0-ary CPP macros) applies to n-ary macro definitions. # See the Autoconf documentation for `clear'. cat >confdef2sed.sed <<\_ACEOF s/[\\&,]/\\&/g s,[\\$`],\\&,g t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp t end s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp : end _ACEOF # If some macros were called several times there might be several times # the same #defines, which is useless. Nevertheless, we may not want to # sort them, since we want the *last* AC-DEFINE to be honored. uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs rm -f confdef2sed.sed # This sed command replaces #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. cat >>conftest.undefs <<\_ACEOF s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, _ACEOF # Break up conftest.defines because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS echo ' :' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.defines >/dev/null do # Write a limited-size here document to $tmp/defines.sed. echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#define' lines. echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/defines.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail rm -f conftest.defines mv conftest.tail conftest.defines done rm -f conftest.defines echo ' fi # grep' >>$CONFIG_STATUS echo >>$CONFIG_STATUS # Break up conftest.undefs because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #undef templates' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.undefs >/dev/null do # Write a limited-size here document to $tmp/undefs.sed. echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#undef' echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/undefs.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail rm -f conftest.undefs mv conftest.tail conftest.undefs done rm -f conftest.undefs cat >>$CONFIG_STATUS <<\_ACEOF # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then echo "/* Generated by configure. */" >$tmp/config.h else echo "/* $ac_file. Generated by configure. */" >$tmp/config.h fi cat $tmp/in >>$tmp/config.h rm -f $tmp/in if test x"$ac_file" != x-; then if diff $ac_file $tmp/config.h >/dev/null 2>&1; then { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } rm -f $ac_file mv $tmp/config.h $ac_file fi else cat $tmp/config.h rm -f $tmp/config.h fi # Compute $ac_file's index in $config_headers. _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $ac_file | $ac_file:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || $as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X$ac_file : 'X\(//\)[^/]' \| \ X$ac_file : 'X\(//\)$' \| \ X$ac_file : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X$ac_file | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'`/stamp-h$_am_stamp_count done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_LINKS section. # for ac_file in : $CONFIG_LINKS; do test "x$ac_file" = x: && continue ac_dest=`echo "$ac_file" | sed 's,:.*,,'` ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` { echo "$as_me:$LINENO: linking $srcdir/$ac_source to $ac_dest" >&5 echo "$as_me: linking $srcdir/$ac_source to $ac_dest" >&6;} if test ! -r $srcdir/$ac_source; then { { echo "$as_me:$LINENO: error: $srcdir/$ac_source: file not found" >&5 echo "$as_me: error: $srcdir/$ac_source: file not found" >&2;} { (exit 1); exit 1; }; } fi rm -f $ac_dest # Make relative symlinks. ac_dest_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_dest_dir" else as_dir="$ac_dest_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_dest_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dest_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dest_dir" != .; then ac_dir_suffix=/`echo "$ac_dest_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_dest_dir";; *) case "$ac_dest_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dest_dir";; *) ac_abs_builddir=`pwd`/"$ac_dest_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 $srcdir in [\\/$]* | ?:[\\/]* ) ac_rel_source=$srcdir/$ac_source ;; *) ac_rel_source=$ac_top_builddir$srcdir/$ac_source ;; esac # Try a symlink, then a hard link, then a copy. ln -s $ac_rel_source $ac_dest 2>/dev/null || ln $srcdir/$ac_source $ac_dest 2>/dev/null || cp -p $srcdir/$ac_source $ac_dest || { { echo "$as_me:$LINENO: error: cannot link or copy $srcdir/$ac_source to $ac_dest" >&5 echo "$as_me: error: cannot link or copy $srcdir/$ac_source to $ac_dest" >&2;} { (exit 1); exit 1; }; } 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 Bonmin-releases-1.8.9/Bonmin/configure.ac000066400000000000000000000175351436575401300203070ustar00rootroot00000000000000# Copyright (C) 2006, 2008 International Business Machines. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id$ # Author: Andreas Waechter IBM 2006-04-13 ############################################################################# # Names and other basic things # ############################################################################# AC_PREREQ(2.59) AC_INIT([Bonmin],[1.8.9],[bonmin@list.coin-or.org]) AC_COPYRIGHT([ Copyright 2006, 2008 International Business Machines and others. All Rights Reserved. This file is part of the open source package BONMIN 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/CbcBonmin/BonCbc.hpp) # 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(Bonmin,12:9:8) # Check if user wants to produce debugging code AC_COIN_DEBUG_COMPILE(Bonmin) # Get the name of the C++ compiler and appropriate compiler options AC_COIN_PROG_CXX # Initialize automake and libtool AC_COIN_INIT_AUTO_TOOLS ############################################################################# # COIN-OR components # ############################################################################# AC_COIN_CHECK_PACKAGE(CoinDepend, [cbc osi-clp ipopt], [BonminLib]) if test $coin_has_coindepend != yes ; then AC_MSG_ERROR([Required package Cbc or Ipopt not available.]) fi AC_COIN_CHECK_PACKAGE(ASL, [ipoptamplinterface], [BonminAmplInterfaceLib]) #AC_COIN_CHECK_PACKAGE(Bcp, [bcp]) # #AC_ARG_WITH([bonminbcp], # AC_HELP_STRING([--with-bonminbcp], # [Compile Bonmin with Bcp-based parallel version]), # [use_bcp="$withval"], [use_bcp=no]) #if test "$use_bcp" = yes; then # if test $coin_has_bcp != yes ; then # AC_MSG_ERROR([You specified --with-bonminbcp, but Bcp is not available]) # fi #fi #AM_CONDITIONAL(COMPILE_BONMINBCP, test "$use_bcp" = yes) ############################################################################# # CPLEX # ############################################################################# # Check whether OsiCplex is available AC_COIN_CHECK_PACKAGE(OsiCpx, [osi-cplex], [BonminLib]) # To get also the directory where cplex.h can be found, we also check for cplex directly. AC_COIN_CHECK_USER_LIBRARY([Cplex], [CPX],[cplex.h],[CPXgetstat]) ############################################################################# # FilterSQP # ############################################################################# # for backward compatibility, map --with-filtersqp to --with-filtersqp-libs AC_ARG_WITH([filtersqp], AC_HELP_STRING([--with-filtersqp], [specify library for FilterSQP (or BUILD for compilation)]), [filtersqp_libs="$withval"]) AC_COIN_CHECK_PACKAGE(FilterSQP, [coinfiltersqp], [BonminLib]) if test $coin_has_filtersqp = yes then # 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 AC_COIN_F77_WRAPPERS fi # we want to keep the linking check for FilterSQP, but cannot do this if FilterSQP will be build later (in ThirdParty) #if test $coin_has_filtersqp = yes ; then # AC_MSG_CHECKING([whether FilterSQP library $FILTERSQP_LIBS works]) # SAVE_LIBS="$LIBS" # LIBS="$FILTERSQP_LIBS $FLIBS $LIBS" # AC_LANG_PUSH([Fortran 77]) # AC_TRY_LINK([], #[ call filterSQP # end # subroutine confun # end # subroutine objfun # end # subroutine gradient # end # subroutine hessian], # [AC_MSG_RESULT([yes]) # FILTERSQP_LIBS="$FILTERSQP_LIBS $FLIBS"], # [AC_MSG_RESULT([no]) # AC_MSG_ERROR([user supplied FilterSQP library $FILTERSQP_LIBS does not work])]) # AC_LANG_POP([Fortran 77]) # LIBS="$SAVE_LIBS" #fi ############################################################################# # Feasibility Pump # ############################################################################# #if test x"$BUILD_FP" != x; then # build_fp=yes #fi #AM_CONDITIONAL(BUILD_FP, test x$build_fp = xyes) ############################################################################# # ASTYLE # ############################################################################# ASTYLE=astyle AC_SUBST(ASTYLE) ASTYLEFLAGS="--mode=c --indent=spaces=2 --indent-cases --indent-namespaces --min-conditional-indent=1 --brackets=linux --brackets=break-closing-headers --max-instatement-indent=2" AC_SUBST(ASTYLEFLAGS) ############################################################################# # Stuff for Examples # ############################################################################# AC_COIN_VPATH_LINK(test/bonmin.opt) AC_COIN_VPATH_LINK(test/mytoy.nl) AC_CONFIG_LINKS([test/MyBonmin.cpp:examples/CppExample/MyBonmin.cpp test/MyTMINLP.cpp:examples/CppExample/MyTMINLP.cpp test/MyTMINLP.hpp:examples/CppExample/MyTMINLP.hpp]) ############################################################################# # Check for doxygen # ############################################################################# AC_COIN_DOXYGEN(CoinUtils Osi Clp Cgl Cbc Ipopt) ############################################################################## # Finishing up by writing all the output # ############################################################################## AC_CONFIG_FILES([Makefile src/Apps/Makefile src/CbcBonmin/Makefile src/Interfaces/Makefile src/Interfaces/Ipopt/Makefile src/Interfaces/Filter/Makefile src/Interfaces/Ampl/Makefile src/Algorithms/Makefile src/Algorithms/Ampl/Makefile src/Algorithms/Branching/Makefile src/Algorithms/QuadCuts/Makefile src/Algorithms/OaGenerators/Makefile src/CbcBonmin/Heuristics/Makefile examples/OptionDocGen/Makefile experimental/Separable/Makefile experimental/RobotBonmin/Makefile test/Makefile examples/CppExample/Makefile bonmin.pc bonmin-uninstalled.pc doxydoc/doxygen.conf]) if test $coin_has_asl = yes ; then AC_CONFIG_FILES([bonminamplinterface.pc:src/CbcBonmin/bonminamplinterface.pc.in bonminamplinterface-uninstalled.pc:src/CbcBonmin/bonminamplinterface-uninstalled.pc.in ]) fi AC_CONFIG_HEADER([src/Interfaces/config.h src/Interfaces/config_bonmin.h]) AC_COIN_FINALIZE Bonmin-releases-1.8.9/Bonmin/depcomp000077500000000000000000000371001436575401300173640ustar00rootroot00000000000000#! /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: Bonmin-releases-1.8.9/Bonmin/doc/000077500000000000000000000000001436575401300165535ustar00rootroot00000000000000Bonmin-releases-1.8.9/Bonmin/doc/BONMIN_ReferenceManual.hpp000066400000000000000000000056421436575401300233710ustar00rootroot00000000000000 // Main bonmin page /*! \mainpage bonmin reference manual

bonmin is an open source code for solving general MINLP (Mixed Integer Non-Linear Programming) problems. It is distributed on COIN-OR under the EPL (Eclipse Public License) . bonmin is a C++ code

You can use the link at the top of this page to access the documentation of the different elements of the code. */ In addition you will find here:

  • A link to the html version of bonmin Users manual,
  • \subpage Code_structure "Code Structure" briefly presents the code and how it is interfaced to Cbc and Ipopt
  • \subpage Example "Example" presents the C++ example provided and explains how to interface bonmin directly with a C++ code,
  • \subpage Extra "Debugging" presents some functionality of bonmin which may be usefull for debugging.
  • \subpage Authors, a list of the person who have contributed to this code
  • OsiSolverInterface * to Ipopt *(OsiInterface's are made for linear problems so it is not truly an OsiInterface but it implements the sufficient for doing a branch-and-bound) */ /*! \dir OaInterface * Contains the necessary elements for interfacing outer-approximation inside * Cbc using an IpoptInterface-type * interface.*/ Bonmin-releases-1.8.9/Bonmin/doc/BONMIN_UsersManual.pdf000066400000000000000000012006231436575401300225530ustar00rootroot00000000000000%PDF-1.5 %ÐÔÅØ 168 0 obj << /Length 2004 /Filter /FlateDecode >> stream xÚ•XÉvÛÆÝë+° xŽÑF7æìBÙyš)Ù8Y€Dá –õ÷¹ÕÕ ’’ù6DÕÕ·æjºÖÚr­ÏîßùãÅÇO2´d$” |ëñÉR*nd…2^¢¬ÇÌújÏïno·³¿u°OÄ ÀJ“ýÞæMûÓÌñ\eߤÕL…vŸ–æXdI)’ PtÌ \!ËQ±ˆɧirœÆ±y]¥›‚ƑΤ]e<þµ®˜à:ω¯å+€õÁȉ4Œþ˜ÅÊ’‚‰#[ŠX;Ê¡ô,‡‘ÐÛ™š,íòŒyߤ3,¼òYåJ%ð &_x~ÈH¥D¢À 7ffrÞ*°ÕÌ“v×Ô`"í¬_u†ÙDV"’P…ÄÅ& SòXÏñ™ç å«Aͺ;OÛbàqdß‘±WN[÷Í*çÕÛº*‹*OžÞßI<.n»|›õmS¯›t³)ª5ØJ^,Zþ„ú[7° VcÈ †»ý0±Wµ¦ÏÌô©nhƒ¦ü†‹xuWyïÐH}}ÏC’Π¥3Ð$¬`Ó>ƒC\Ùhåže`pîÔº;Á¼@Ù[œlêe™o ¡´Î'‰½èhWj±‰*+Ú®)@ºìÙ'°ÆÖCÜHÜàZ[Ãè¿ÖW}úònqëÜýfÈ8¼ô–Ò"0¾‚;©@f}yy«º¨œºuè±ótĬmáR3Xÿýh+‚dI“W¦0HßÒ%‘Ü=,&zäífmè~ûŒ¬…%’‚R|x¡ð£ÀòÞÁ‰û ¦JôÜšÚQÛ‰ïOuG*c Êö<ûÁ8;UÑiW|#?ÕzûÀÝ3 Ý·',/Ažë f|'ì#w {ížàKÊÁÀ·/ó¦+þt¥¯”vÞFùP?uð…0¥M.X`dqá†r*0 NyX…š’‘Mæ•Æ¦:ji1-×uStÏŠ@¾¢ýçþÐòB÷œvfK'Z2F^mó2_é £Ù xŠ“HŠ3”%…Ê'øˆ dãÌçÇLò•ˆ’©>´â‘'RúÄ62•³L[­t¬.›´b¹´Ê¯îuÅõ¨£§$sáŠI´Ãt÷Ë1&å£FN½€ÀTÌ¿FŽjœ1ê¾›t¨5¨-*R’i¦ÎòU½aO©ÛB;êGH¥ôöÏÜ)>ÝŸ€š)ã}¨š±¹ R®²*‰ì§%lY”Egª--n{ì‡hbWøq°CóåóÿcKSÚè[l¶¨ˆh£cÍéõú‰¿_ú¼M³t8”ñàsS·í&­ªŸ »'Xõ9ñž¥jîüçuyÒ¯%Z¥=úì‹>´¤SÌë²)2^~Ëô¦qZ:w ¯f;àe2ø·c  ¿ZmOz„y‡),åöm„H1EÊêçEhþøÊШ ïÛ[Mš¤!Bq›¶)8§YVPï°ÞMI9”͈ìêòžÐF;äGW ¥ŠéC½¡b'cí%¾ä’¦“ŒH“ŒHMþO_4æüîœ .’´SóµL3Η´|³Ðm’ŒöÚ$ꮫմNQ¸kš¢hhšvýlÇæˆfÚÝiÀ½t)ú¯ŸðˆÏ~fÎÀýD¸ÜO U#=¥}©#EA#êÛyAwD%µæÊ×ć[SìVºôbP¾ÎbÏÖûk–Ž m™žŒiûfò~Œ^.Wïôx^¨ptv<çÜBï5ºîb[o»÷® … ö*ƒ÷­Sbw}SJ6hç¤?F‘ã=ø}«],Ÿúêlx2ê“ÚºÑg_æíÏç +eOÚËrû#•N^>üš’ë{Ó´IWxž> stream xÚÕZK“Û6¾ûW(7MÕ&$@û”ÙŠ§Û›L*Uç@I”ÄŠHªHʞɯßn4øÒ`$ÍxsØËšF÷×/hÂÙfÎÞ¾ÝóæöÅË7f–°$ñìv=‘aqhf±Œ˜äfv»šý1/òòêÏÛŸ^¾á|DÊ ql,Íš(Ƽ"–ôËŸÃ(ôðÌhÕÑÜùXĉñàH2 @8¥ä,àŠ%JÑjãeŸˆ¤ûüÕCö‚éØtëí9ù^ÑæÁa¨Å‰ôd ÷èo‡Ÿø_ Uh#pêK¢èq’ ¡.¢`ahN«)‰ä9 z¹üo€h"î"gf¨3O<Þ³ð¢U›éž)FRÈCó´iE¶Â«M.®¡ç™›¼fþ5_º–U‰-À@s¨ÍîžVVùçKˆÑŽ ]ì²kW rɸ0SË?ê6¡äCŠx¨A(u„K ´Æà9äÚ¤w ~Î óXváÓCw×4Yzä‚ArÂÑ'I‚²¤œÿ~e$jX$É<+öÛ´Éÿv¯í6u…·ÔcŒ ˆ=n>~øù݇‡{IÅäPÅ´u–¶ ±ÝפhF›Ø‘…–i㦺æFM“r¨™Œ:÷ûF(/ò¿SLÂ¥‰CHã}ÊYWuÁ |Ó·6©›èH4Ydíà «†fÑ€sŸUTÄÄÂóbºq:þV18ÈîÒ¥“"Ýmª:o·…£š¤t×¼LOäêu²N‰9ô•ñÉ:Åèè‚dsªB¯ê™´«£œ3Á?ÙÍ-- zªªDÇÑ6;ÔyÓæË†Þíñ]E–»¹îYVíP¬¹6Bvȧ*Ôá6RQ‹Æç9ƒw~Âç×ó*T3¿À tØGt+8‰[¥|Ëxx6»jqQ9ÝyzdhóMϼڷèYí!sÇ3:£°žÃ´Õ „?¡¡œwWßPzxÊ>2L&O:å1†á M~GGèS¨+(Ú¦ÀG郦Ú}ÉË ½Àîï?56©÷%GQ0ê(ÁÚ%Ý5 ì©>šÆ4õòß77eCÍ øP&¤À*øç  GÈheQ§å¸ ÀS‚…Õœ†>ì”N >·R•ôÎ=ìcÝDCJƒ}(í„h'ÜÐá+Ìà7y™¥¨Ð8Âø»©Ó‚Ö0øâ3KIØî pî80S­éI ð>#þ©=#L * s  RáTÒ/WHRÛD 2ÇæþpÖB…×h2üòöPO 6^p¾ÚBS鮩:„í*[?Ðæ÷¶Â¨š&_ä»Ü–÷´bO ¤¿~ü•nQé÷û®,A:noc,ÅôÀ§0JxC¨&"zD?~ DQ¥;Ï¡Íê ݃ùQÄ»¼ \I’;ü¡ƒf˪Ø\›¼#A ÐÂÌ ÅÇ6º~”ÖnjÚô”ú /2F9ýÅÏÒß¿ßþCús ÐÖñAe«`‰Ñá€Ñmí¬cð‰jäüôò<\ýx¿ð(&f<#Ź+ˆà±µ>³¨ó¾ËÇõ„‹/é1ŠHÈbº¡ TØHs¤Q n´û$d…×¥­¬Çt{2Œˆ§©öÛ=ö‡åþÍÊDÏ-n*ˆQ !Íã*ÅE=!µW)H’—Í>¯‰ >pA¿èK"ŸŽ›¬…îjÓtq¡YÖ9å1Â:”X6Ó4¾¦ŸçÛù›O—hzäÜ9(8m;^géq>óý£âÓüWzR*Ë5Péqh„'•Ê;”( »:6äó"µ¥Ò!Ý]ã„2}Íw;"£š¦6=©1nJD‘ÒüúP´ð…¬ºw‘ ˆlÚ³ûgÛcè5œÜî{–ŸSøq¹L­@P=dmšïz!¶z`k¦- ¾ÛºMU8W€@äN0ž03È,¯i8©9ÓÀWePÛcm¹ìì¾gòµ+Ï€ /Ÿ?°±ég€†O¿¿o3g5pÛÊ=]%É•­.é…ú%ë÷VPl7ÛÚžL:Ï·ƒÁLÈx}´:éšxÞ#¨º––‡ðµ ›ˆ"ĬkTóã Þñàó/(6‚šè¶yWUâkUâ@Dõ§ýŠðƒS¶¥À¹1ð½_šmuØ­hLœ+WÛ86Xo“cy°ãôkÕ.æû´œvi÷N7Œ~>yƒ7*d!ÞUìCc äÔÄ\ÓKvGµVVç“–IŒ Y1ߦš)Ò•Q "¨—ìw‘³†PV•PX£ŒžƒÌ<¸A\ØkA §U«e˜À»í¬ïYµÂ¢« óÞˆ†Ð„¬Ó¾}Ç“ãñ‚¥qÅðQÌ‘fIÂÏU ‡; ,Ás·µí¹:›­hnHgF³0<º)*{`ådS Á'FwRÊЩ`Ù'œªT§*•8!Þ>euã¾ZÓ–чÖ4–Ø—:ó@ñxþ!û‚&Í0C×Ó\{C–û¥‰£S»f ÆxUÑÐ~‹ò\ÒEL ?(?Ò.(4¹ãXØdÓ·v ê:…ðQÓj»MKÏv{>oJN®,w[çœ9ÖÀ^ŸéÏOC)VøQ`ÇE°óìI&}¦]P@óð>lz ˜0¨fGEà¿>y5D˪Áœ·Y-z K%¢¶¢gJKŽ4[âÍŠZÒ„¨´ÈÈlÛÖ¹!¨J¡äH%ÕÚ'> stream xÚ­XÛnÛH}×WÔc‚Ù}%›cÙ'ìØgÙÍø¢Úw(RËKbÿýž¢H_2VäØl´š¬Ë©SÕÝÕ”$È’‘±”PlI J IMR%$ñ+ŠIâ/Á¿#…ŸJ’²j¢)WÒ›Ægm^•|K¿ý6ys\¶u5ïúgo· «ðÙ¬Mó2/´öñôøã# ÝìVgtq§UûÿuyíçÔ.ózNë´no(«æ~»g=ÂlÚ´(žèZ®/Ö>˯nX­]z*ª,eª®è`]øk*òYÖ¹ovØ8¨Vëü ÊKJÉ_·¾.Ó‚æ.k«úf‡µ!¨ý./æ#¶y•u+_¶é–LÜ×7ýO]YŽê­oZZ×Õ¢NWÍv:¿Ó|—æ6jPt•~‡Ê@×Q]­hzz~ò¸øÑÍï×é ©éÕh…Ú(ž¢<8¼ðmËqukB^ËlÉ“uWuÞ"Éÿ2­†ÒrNsŸH?„.Î.$JeV£XÛ†3»ù­g}/Ð÷ÓÓ‹âæžxJáÁ/¿ŒIÛž3;ð¿îqÿЃYÉçÉßÎ)ë°n†ص‰MoׂO›|†M•‚¥Ïþò5(ã¢8›öw˜VÇéñÉ9]TÅW_ïPˆî)À~_ë"-}¿æ—7³:ŸS:R¸ÃXŽ™þ|³ÿîÃÍìÏ·»êEŒ‹æ§Ç3¡CÌ4]Cí:_mÎÖCŸá”¬š¼Ÿ1”³én$j»ÁŸ++©o-­»¶ß˜NªEá¿n;Hî4‡Š<¯á¹ ·»Û.½¡/ÐI¡–îžÆ·ÝúoÊ_¸½ô‰Â£¼½dͽ½Iøùfí)ƒ$Ÿ|Suu曾 ìúyžîW×ôE_%ʼnºœÀD ]ôj#7-Ë ¦¾ôÍ,»å^v3ºÍ‰a”è†Q£F;Œ£¤/'BèýMÂýªžûºÇ&.Ãáqx€ šØKŽ&ké Úò@ñ•˺À¢‘ÖF|½0±Ld wÑÍZØ Oòò¯pº·×{§=ïáEø¯OÇüÿfÙ¶ë_ÃðÛ·oAVå廪ªzñ¨ž ]w€ÎmxXË·@(Í@ÔHô,`v÷M „m°K½áÇ¡Ê~r 5JÜTîAµß:ï NéûÚýpUU-Üùá¸xI¸\1.2ZÚ@®SA…á*¡~ޤ,aÅÿ–›û9 fÙóóˆi¡ØGˆJÈÀ ùÊûsýŦTàpoA#«ÌkóX¬ŸQ9ðuV ˆP…nžäׂ¸(^êla?Rq‚*t|ù”À½>›N?o/á " ®^ÀœÂÖ†C –4˜Œæ6 bùÒÊU^¾žäÚã'p°–þ‚8¿RZ_ŠQþ|¤±  ³6püIÅ€J#_w3¾8ÿñïÿP¿Éá Ž*=¢²+ŠËí²º—¢8‰{š°U:ÐÚ>MX:¬?³Ë²IÀ4&°àëð‹þ<8â¯H±Ú¦7Vã„¿˜êa¨b3NøÍغ8þÎ7üæçñ¨ž`’ >ÜÆ „çu•ᆎ^$žÏ endstream endobj 238 0 obj << /Length 2428 /Filter /FlateDecode >> stream xÚÅYYWãÈ~çW8oâ .T¥Ò6oÀ 3dئͮAH ÆòÝйÈêuѬÖü­á{ó]z ˆ«rjI,x½œì£Bgmš2­j*­.28¨‚îšg­pg8[¬ÐV§în%Y,H}x‹•¥L2Kk±ŽR.þ–;f&T0ÝXÛwTtì0>t^–di;;Þ)–¼Ñè¹NӚϵ—¦ cww•±ffN8†N½î¤\Mxðé—“ÉgúÂhƒíª£Ø¹$'Meú¤#4G_΀åŒgé<M£:<«íl¼2Ï’ª"nay Ðb»Œy¯E ½ozÒª=Ãñ¬Þ€ÀÂ,“&«y•= ÜŒ§i>êê¡â¨#úp!æ-YO /êÈ {Q0a›+ âÎûðpÙˆ~2RÙ7Cô­´´ÃmRÖ§ž$ÀtŽŠ“Àÿ[Ú¨rˆG1_xƒN/%Ê…AàKÅJ‡¥²“0ˆ„”þ÷ xÆîlEÃT^Ó£» P¾äY‘,,s`Ëœy…X˜“3ÁF–>—I™`ŠèMrûÑ6Á¸ã¸ÇBÇá¡S%um8q0õl°c¤%&Äý QýóÔϯ¥îÛ^‹Xk  @m—áÁ7®u ¯“vôÛ ‘â¨Cím²M8ƒœŒØEyo)í›%–å‹le@/<¡”xW\ý–¬ JqLˆ)“G!¥Œ—à³oÙ÷ˆýˤâȫČŠ0kžKȰ]ýö° Uà;¸F,g–-Z/2Îy^¯1ÍáCh¶[.qÊÝמmhÆñÝÝÖXu„p•X ÆÎÝ… ùÔ²,6-cy«rP#ùuv{¨ÝAò@5ÿš”œ²²Œ•=ò¥Uk«t¦ªøŒ÷ÇÝãÌŽ‹²Åxèü4­ aݫӺ§<¦z_Ôò«$O‡}4Óû*lØD0Tx">ì-Kc795Ã`ŽhǬœ§ `Íf˜Àꮽõˆîðð½©!†´µ‘õßžî>k¯*­‹rw ç·)ñü:œ"½¥¡†‚Ø´éM!””,½Ó¨x èiH{”v<²ºñ¨®£ÁÃìʹ2eâ5åÜa¨¸ƒé¬hʹiÇKªp'æìÐsžÖvß"Ÿ”=ô´ï  Æ/åF›HÑv\nAAÈñÞÓ¦Y›âµ³<•[¶°ì™n³2ÆÆ¬óÔÖ7ɳm+%R5°«=¸*j@QÁ<Å,h±5SÁ¿ãÙO†RÈÐûfúÓ"ò»‚?±ôK¶ÜO“¬È-?W?ýÄìÎm_dÎXéJ¹pe4¨Ö*ÖTJáï‚{*L‚8%Là WÝñBÂ?òK l¼âå,ÉW dD§zíì-›œJÁ^©bŸlÇ‘ &ííÌÍ¢MJö&ùj¬ªm)ž(ZCñ&ãè9u{jž ÈI ÷>µe-*НÔ¡g.Š÷âÀ ðKKèâîñö»BÚJtn+»w$D ‡‚^Ï –* JŒ A𖲬íÛhÁNÙÖ‰Œ#W {‡µv¨e[5ŠÕ0Ùk0¡ Ô]ç\Šà„{¶@Zðâ¼ØrÙE3hDF|(É"o¨Ì7…9ð]a΂šE›œ¦Û0ÒdfÁLËŒMú ŽPDÃ`v1áš+U¿)'n¹*D¿^úä/ëtßA¶1tò v¾ïql¾ê·œ•Äï°1GœCí[erKN”8¸FÏÌjòRÌç³ß¡”ó¹çåÊ:u|N<ìõ¾œN£PQˆÃ;["¾¥³¿:ˆ¶ï*v1È~ÐñdìRMa¥¸ÙBåtÄuLw2/9~IÊT6й>ùغEùEÔ‡HȪ0æ+êñ  Ø2:òù)†‡ö=&ì½ÇàòÆ09Vcàv¸ïJ.FÀïCÇ×õXöM`p„”(êÝ“^?Ž\„ÄúmrXÃbÝÝÜ>ZE€OF±¨ˆÞƒŽj‹ti©BKç’¼]uÝòˆÔZŠh? Öß7Ï öù„‰’Âõ:m\=Ï`ºßØíÎR¾ïKÅS°øæŒ` ½]ÀçT ÅêOÂó£Ñw5vîÊÔìÜͶÿ¶áÙ›Ï5çLË æ.Ä`óžF>âL!䡽–¶™y=rÝSC¬—¬ôñ*7<Èl½·- "W6BK@æ@¸ Ûê´ öx šæö©U| >¾BhS{ ì&"µ/&GÝL)ùàjÝÁ»kr|ˆ+´¨â³u•V5:“ñ Û6>.¾ÐÙºœŽrü°[]…ìFïd4”÷!.»°‚Ñk þËP;U3m; zØ}zÑ?¨:~ñM®Ç/Vô]Bãw›c-ºz¸¹Ÿ>|{ßè±XWÿ«·—Ã:ïàÝ¢I³ÅSQdÕàšýrò> ÃHö¥½Êþ:ÚÙö¯£]¤ùuúŽÕÿþtò§ вû§—„^ûƒùæäów²€Mèv„Éì…Žnàh(4=‰f“ÙÉïü4èp|ˆ¤¡Å0tåJ7Ô‡/c@À ácWr`•XÇ`¸´ð_×õöçóó——‘Cî¡ÇRQ”«¡õY˜ÚkÄê°Qù¼7$|«Ïļk¹¾I_f“ÿŽþ|‹©y}ÃÀ[€Eƒÿ!Hˆ'P7Bµµn€‡ÿ®,P endstream endobj 252 0 obj << /Length 2104 /Filter /FlateDecode >> stream xÚµXMsã6¾çWè(ÏÔŒ(QÕÛ¦Óvòv»i7î´3Ûh›±õF–\IN6ÿ¾ø dI«|t¦{1 ˆx:ðv^àýxLÆ«ÕÅåRy™È’0ñVwžTZ¤2ô’8a{«­÷Éÿ3éâ¯Õÿû%Œwïu³Ÿ@P”á,‚$àúXÛ‰'Ç/yÛRÂþW§ß4ùhÿåú•#ßÛr±Œ’ÔßV‹0õË¢2Û¼Ü1³Ý[89S±Ò¤;õêæÃÏ×xÝð¼V©^·£Ù,Bíß/âØ7;ËòŸUÐþc^]Ò¯Ìb)ýíYš4rOð½ÞXÞ¾HÛ’Æ`e Ç“¹Rd±3÷®ªaqù†ŽŠJl¬ã•[žùº6un^RÝ1ûXWë¦ÚÊ5iZGí°^›F>R‰L)§MâgA\ªÞd°¨»/¯µÐ2{ÕïJ$ØnÕÙÅpJi-ÚƬ>pîË <2õ¸Ï7¨ÇžIpCI·æhòŒWUyÈKÔÉg§GZDiÃ… ïÔ% 0úP©}CÝgR#Ë‘Á•g¥u™dG›rg!ÒÓ4ãQbÃù¦ÏFÒ¤œ ?³}X@#¬BÖq]#Ÿ‹ƒ£8ÐÌð}T”z`N9ó£¾8Ì}ïu…‰ÁAXƒ³YµfX¶ú25/ÝáŠrÒ£.¤gÍràªÝujðe,bÕiÓ}Û»IÓž7LÂR=ÙLö ¼§;ïÑwŽbHŽnt; Û¸™UÕ÷sÚ÷];‚;¥QÓrbOnMëà;/Gý 8›íèý¡—mí–÷Ùl d×Añ1þ æ(8gj±$GXânÊ¥ŸRŒæø¡Z·†pSu` “a§Ó”HMáú——Œ²J2 ¯ÛT‡åóXƒwèŠXYs©Í{HÚ/{vïÃ1[!.Þv>'yz$úÁ¼†u@›¶ªŸF4z¾«\u%¹*‹'wsCÏžã@õžååݾ»¾5fÆ9¼G=k„ó®!Þ×Õi·Í Íi½Ç6kÚ$¦±/ ³Ðÿ­Ì?Ó[ïœüئ¤^"²4ÒÔGðF ½zaç˜ø…¦F •dÞr°zYäøà¹œ y %õœÍÒÇ~+È¡a&G¯(æpi ]çˆóΣ8….2Ðÿ8ºv‚2…Ò“¾úÏ ¤Ð0Èa«. ÁÓK#Ëñ£#ßõ†‹„™‡]‰8ë›;V` g|ùÈ€×UªneÞ4';A»ª(8á¸=£GÑá€]Áüû8< òE©LR¡¸ Ì0ãsš01†W>¯pÜ·í±ùöòÀ;©Fl*иªEUï.aõ%ÛpÉ¿DShßK¦¡“u ÇMñjOq.8úÈOC»g¤t°„“Òn*LýĤë3y5"ea~¹ ¸Ã1/æžÙ¡ …”Ñž{q˜ö y5{¯"ä›®5QÐéš÷H38ŽEQ?y=}y|¬… ßbÇàèSCQƒÒéÒq ¢üß©·r©ÖPÊA¸ñb—wŠ1®3©'jjþ†5Òzk·¼Í´ÏØ2 E ÊŽà¶»á9?$;-DÓÂTh­y+\/¨%!o‡9ORlÎþ>Aân™j÷yí¦ØO-"I0žrDÒýå1qz@™éìÕ?iô94ðaM…Sq]„ºf™¶Ÿá!Tš‚Ù“sæþ>@’Þk¸·¬ZæÀ“¢8m¹hÓÍwþ_¦0M °õkaƒu õøV&ú‰¯ù(oúÓ\Cï)ê¨|׌½+v?Lü‚Ùó7}÷èGþŸéW…qU•»‚Îkú‚žvVÁÛÓÊy‹/Ú¯­Ü;W– ¸W;ŠZM÷öªÅ›µHþ½7GÄt×|¾»}Ïô˜ë:ûó/Ž}Û«…´O®ñßH@~ô€’J×Á¦ýSƒ.ýç7°›M 0 _M€nÝø €ý(_+¨<öÜ÷«‹¿]ÿ$= Ršhc+os¸øôWàmáô`"Ê´÷H+°ÎѨOáÝ^üêþSϼz®Ôe’/ÔBgÙ ë‚uÚKa@ u[2– ¸ÐPÞhÕo®ÿucÅídL/_$k»Ë@C ÛÚlíÁÔ÷LR¯ #7½0¹9b9ðé_m „ >ŠgŽ¡e J¡£0^²Vjê¶}© endstream endobj 271 0 obj << /Length 2420 /Filter /FlateDecode >> stream xÚX[wã6~ϯð£|1’HÝú6“Ó™Íî$é6ÙÓÝ3í-ɶvdI«K3þ÷  l9Ž;'A H‚¸|é-6 oññÊãïûç«›É"iD‹çõÂW‰ˆý`…±d¸xΟ§²ÎŠ¥«ÂضEoÈȲËÝVwÃ2Hœ=÷Í~cçyºãY»féÂ>VEOJœ®¨ Ý9±Ç:/:¨Ê¬¨{+?lõ°üýùï ×W"U ¾¾HCVЬ&ãÈE›]«‡rU(R[Õ‰øéçO×kOT¦ëºhÊ ”ž+VcŽú¡ØºéˆÈË~èÊÕ8”MM³hxóAÆGõæš¾|¸¿{ ¹c»ËPÈD´‘ZwÍÎíÎíã݃ûøË5þùìGì=š·é祬*ÿÍóU·Ïº²zbn‹ª%νD+øNÞàz/uÕhž –Ù‘½Y³Ù)J8³Jb2©J"§Wäá²+²¡éög,‘ú“ÓŸ1z~†àÙ¿6ÄžúV²Y6{½ªôE&VöMóF"R+uì<±tSO9w|¢]Ót¤OpH8Ñø•Ìø¡Hã`n‡ã…ÀÒ2 ö—QäÜþçã¯w×Äý¤[ár_h¥Bç}¥íDÃ8†r,C`••^-}§²#,ÚvÅj,+ÞhUÖº[¢GQQoi8m‹ËmL6>ù/ØÀ˜‡3r~óBÏh‰r”­Àm»f¥WÕžþtÕ:ß“LY÷ƒ®*“É0Öð©qwÚiÉv4:n˺€]}a$Î¥9¸¤€£ºA(hª?p(æ;]OL£'£A¤Vç{¢ïZ¤M;€×•CyÅn73[whÜ\¼RYCÎï4]±Ñ]^Ö›·áˆ&L!-ÚÖ€IÓ B€Wñ!$`Üt<R\Àȶ!5?˜½8Ê&f&f(±{⬛±Î­$j0Yä-¾,,õ«Åg#üyJØâXžÊË@æqN›“þwºF¥G]½í§‚¬áA*q6%þÿàˆ(*føEÂé##þˆQ¦œûwAÌ "e´Fâoº3Å©¨Xƒ§qåžñ%'P×@RÔþ2€\uºÛÓÏ!Cà‡ŽÎÙ/é\SÑZ–'`ȯ¦ÞT<P²Ùí ¨v9ËÞßú)¬†oQ›ƒŸñ€‡C2»Ãn}¦+ŒGøQN [¾íüSHDO@{×¢+ã`¢A°XiLUD·4{‡1©bÊ#|ïÇ]ÛC’…)A«;R±øJIQt%˜CfàYÆoH¡]É%~*¼@ÎÏÏûù˜ç£±¹ù¡p,:LXâôå¦.±(fÚ€ù`E©ZÀ݆a`eE‚[Ÿƒ‰uW4Q Lij»2†è—ÕMí—wY©«kŒV3ßéI€í~à‘ˆÃøO»È{_Z©~ÛŒ´—²qÂ[è²3nÆZz”‚0d*3°KJx$Gì]/‚°r>>üë°œ!èh¢ør©nªþ¦Œ9f X9[£ˆœ¼¨é·30W¿)Y€“¡í W.+PÙÑœ¨Ñ<ÙT ©À¿nªŠ:F‚`µ•0ï‚çâ«Ùí‚XAhqÄ/€R“k=™Ùtìyål~øx61J«µá%•\Ú€TŠþºJ¿–5wÏ=퇘oÓ 1«w¢•tn÷›—’5„VøÉ7+ùv»×mûøD[þûÄ€ÒÙdÙÌ^g÷ü°´ãŸÞ ¤ L—¶ãäé3Âc67 ÉZ£‚z9ÏÀ|‰%ÿ´]iU!ae$í^èͨçWÊGpA$ÀW?¨ô„ú@äÞ xûœxÆ{Í ^Ê/%Q-u×Fj}‰‚”‰¢ ŠšzW^ªÓ'øùS™&»3àÎ"€fw^按xÁ½E&¸NäÁU.\HX­]ˆ XDihæª|Ñàè0#šwOý×ïQTAéHR£(/t)Ô•P1éÉÂâŒý!¶äÃo¼+{Sö”Œ©™K RpòèâsJÖ°i,þ0åš+«Rᡎ“OÜdM½.7#FhAëÞž+á;ý¥x“o敜>þÁ3Ûò;‚ µ!Ÿ:ïž>ÑCC—1s«s"Žëü6«ACã‚M®”>õ4À:ô'‹_‹llß{šBI(oê#VS ½Î–hÊ+q ¡P^z fAÚ›Õ¹…c)p†gƒ ºtîn=鼘NMz­Žp{ëñØ^‚aôž£ºïGƒ‰žäî©é=E¶åíí‡[ˆ£q°“˜yÑV.+;;à‹…»-Qö…®×­¶‚‘5…¾êÄ|Ïgßg ›óâé}æÁ¯}<‘¦Óí‚^¯ðz ´é;,h|Ñ’)×´O^È£»1^*×,dèž^ˆÑó-äP‘ wÈßžŽ™Ä†æÇÄk#Aw7zs¼–E-„À{(ëEžSØt™ c(S£r(‹#Ä40‚\Ón±maåèM ¯f½wÕ½éæÒ3côMvÓWÍ.ã`JD"[zw@@âÖ¹îXÊqo^'ÕQãš^ðÝ0j\°±’ÔÔ™‹œ1;«83û¡X›6Íg]¼Aw—Ķ©ÉäKAÊÏ–?=9˜é¦‡8ž¶CKΚul,â ®‰8ô%Ò¾¼œÝ?cú”ù}¾³9i§¹4Ì ÃOÏWÿã2é/|¨]q”>{ “E¶»úü»·ÈavÊô‹Ýh,T‚iT-ž®þIü~ºÀǢA^‰$2k*[0£ Üôb˜ìùTjñaÖ Dâ4u; mÿãÍ ÜÊþ[d&AEÖŒ.Ý{EÑ €ln\o°aº± vʯzƒu]Þ2‚n$˜÷E[ùýÚÚb«³Õû|[⇰@±ñE,)žzùÿºÈ†" endstream endobj 278 0 obj << /Length 2517 /Filter /FlateDecode >> stream xÚ•YK“Û6¾Ï¯`ù²œ*C<€©ÊaZg½ëØÙd.©8•âH”Ä„µ$•™ù÷ÛŸ‚íÙà ÁFhôãëF+öQ}“~æùæþæî­4QÎr-tt¿‹¸”ÌhéÌ0!³è~ý³»MsÚUûK[Þ&™Èâ$9”õùö·ûݽµó¯Ë•ŠÁYÎ }üöÖʸio%l\ÐãØàJ8ªNôÜ–çþ0 »M[ûªñsÍŽžý¡ìüg›î^Ã[&p‚ÈmYlK¿UÕ;Àÿ¿ª¾Üúe?µŸåj`*NÛ8¹˜ªÞþG3žLŒxï Œ”)EÚkÓäm!uܹg6³£\y—£ô;„êCÇÏ< Æ L qƒ$ƒ2›xÚÁøSÊU]vÄç§U†ð€ƒ˜ŒÇ¿ÜZ…ráIÒå6†§ÖqYÁˆÚ¬D ¶öÚ)°5 ˆÏ‘g?ĉmÕ–›¾iŸéõÁ;:ò‹®#ÑäÒø,üwÅ)$zÑî/Çrˆ ‡ÙÇð»!¡”Á òÓ ø®ÿ¨ñÀ?J´Ç¶êI˜pÒà“¶òù¡¹š|4£Qödä kƒD›I5yœó2hh´Xžóê9Ïý©`°kÚ£Ó/Œ7x ¢sHÂ3²œ-7ÿjm9 9ËyžPàÈ0/@.Æ8M«N¦‡—A»*MºP·tàL²TåË;‘¸ìÂÂ×ê”w['É#¸p²A1«Ó|íZØs&Ÿã…ÛÇo(×:Â9ÔN…u„%€šVüœŽ`™]&¯gZe¬›ˆ\0•®Ð{~DXåz#+æ}J³ôÔô.%cèȆÒQJ"¼G×6ñ‚≦ÎuÑ£›ÑÛˆkÈüXÕ5‘‹G§³ ÎöžRlCXœxæNj¨±„óEf}¼>˜áLN¹ØáD¤Ã.©®@úboµ;ln… ùKP™Æ2•e3eò!J¹af§ë]i!þžŠ#¬‹A™Jҷͱ ÆÉ÷$—'¢ÎÊ"T»£iÁ¤à_ÆTŒ ‚¥°[pªJpÿ*”´µÃŒÈuwéÚ»ªnö܂ĭ²)q»âS%‡rt•*‰£Þ’ŨvŸsù±ùÓgI‡Ùˆh 2Ï¡[Q¤,á}´;øòàþ¹kjfXõÑAþ7‹zxª‹:Hý Æ~öú3yLBóí¨©;G¾r}Ù–@rïôá'.•Ó ´Ð|åþóUÁ¿}µ^ˆøç^X1DÉ:h^]Û *} <Üí¬‘S2Q|¨8`Þ»jÆŸH „8_z¢ô 0Øœ3œ4³P¥«å?Í™6f*œ»Aµé*YÁ€äSq î›@X«WÙŠ6°±°¼#”8x‡‰R\*}° ¦fBà+¢jµ#æ_CD€\",“1R ¿dQƒÎOEÚÓNÈeµ9“ÃR!"¬ùLb2p/Ñvi‰KH †rÌßt§ (à>¿…Ösc'ÉnÑU””bfªäçX ¾&r3¤_ÒƒäLèeœW‘ŠÊ)oA©ÄzþÊÚ’†S¶ò©Ü\úrú8t“êĪh1Ã2@.µH#QÚ7 ·ÕÂ+è¾YfE"ÙºnR³ ›Cqû•!ò¹œ¯‡Â¶+Û~Õö˜t,„kHQÇïÓÅ“g¹~¤Ìγ,ÂÌ‹Ð\.mxÁƒ6:íï)ÿÿ±ôUèš1[Ñcþ«~’ájÌWŒ€ò‹s¼9¦ÆWX*µNîRÔÐ…Ã(&'å} ogWe_ Ð.|S‡8p)«ÁçzS@L H5õe–-°Uˆh@$9ÃÝŽK™1mW¸÷¦9«S™ , UQ:Ý¢0ä‚Í,Ï·êe ßËú®9ž«Ú_JÖªDRSÿàã‡Þ}í¡ D\ù®WAòÉ~Mo+….ÚW\–Jß¾ºWœyJP—ó¾nŽ¢[WÒÁ„«ºá¹q †$hV:Æ¢€Ì˜˜®3î°lA9°æ˜Á=%€ëXxÏ®mŽ^&ºxà5—vã{Rò’Yß÷æërJ°( 7ÅÑ׿èhnQZಮÿ&yꪜ›¥‰ïN­ÜgdhN¾ucâòTMçƒ9ÌüÈ;¥xYvéâ ìØ2c)]ùWâu‘B¬V—ý²uNÂ¥ÏOÅ]¡¹Œ»¥é»kÀàÚ oDþRуf!cuÄ;|³K¢XîÍo¯Û‡úF“0ùX›çKi 9…ÚöÄ‹æÝ–—ýžK.é"Žsç–’Ýö²Á/^>¹BÎsŒ¬P)ôÕ&$ÚØýrhÙÕÄXÍ‮¬Žä[\…k¤"å%vŶªšÓßü7G/UqC3 óŠ ^}¥!†^ÒÈù;¿{[Ò2ôÄP#(i}c3îç  üqéz¢m Sõ%Q "ÊGLYåîf:#GÁÉóu„=z[æDb—rQ¸K;u%ÇÆ­\šä\´‹FÝr ŠŠy¦‡qƒƒö–ý·`vÀ_ f©æË Å¢-슕örúòÓW¨ÉÙZóªG0£Ç½—•Ì?îoþëÌáãOn\B0°9Þüú[ma\ÌFŽõaNPsPý|óúýŽçQÆrcÆŠ ò&‡ú.Kùò7 ÐÏPJGØÜCV¼&ò Ë(f¹/I}î¾¹»ƒxü¬FêØ¦Cß&Q„5@k÷wW?y…o\ýZ˜Á†pN%…ßQ¯õ?p´f2 endstream endobj 300 0 obj << /Length 1774 /Filter /FlateDecode >> stream xÚ­XKsÛ6¾ûWðVjRAÄ›ìÍN“ŒÛ8IÍt:N´DK¬ùpùìüúî-Rt-µ= Å·ß>¡À[y÷î,p¿ó³Ù[®½ˆDŠ)o~ëQM™§¤&ŒKo¾ô®}Bfe‘§Å”’p¶(‹ÛtÕVÉd*™ô§¯'ßæ¿ÌÞ†{RoJ5‰8³ççë´žLyøÛ4Ë`¤#Q%q“ØÕfØÅ<¾›°ÐO¾Td‰;“ö‚NI¨àp“¹ÁÁ»iÓlyG1¢•ØíýÄFÔ‹¥•ÿˆW–­ƒ¦Â-•ù}š%(Ö›2ÆH()èGI$••¸M›5ìåÜiÂ…ßÖmœàV’Dl‡ÔMÑ2A˜èö Ìõ#Âu_Ž1FZÔMœe#(„rwàk ƒqZ%‘>Õ}‘”8‰Ê3ìH†Û¦Lr†@ÓðÚíœð p/PzZ¬l¹sé/Kø¥þ¢ÍÁ0hâ&-‹qW £«ÁyÙó`W{î¼ùv[Vcº!Q<ì”ÿøáêòÃá…\N;ǃ`¨Óº©­àòÖþÆö§­“ªþÁŽóØÀ@¯0s4Acâb-Òi=Ž \<Î8¯`ö&ø©’Û¤JŠ*ÏÔÞed2Õ,ðÿ˜„Âø8~5>ާ¬a÷åd‡A óEy‚į́ǜ‘PRïÚžŽ=p˜]¹¯JüºI— ^JÁ¦ë¸Á‘‰AmñÁd›}¸”Ø•÷*ì«9 ~6ÒW§¸à|ß üÒ-»ð®ì,8_§EÔ(­ü˺n“1¼Ö•À‡¡â„*z†ËòáqY.FÃG]&Ajg?!ï “Œð óDPGrí_6Z¢ ³Úâï1…ßšÒ~pöÇa¼Sõit®q¢£>+è\ír6 ö|§=דLøçx©Œüµñë¢ÞÏ습pU›¸Ä…ãeÛ¹MÖªKÖ âÆøï¨=ãÅ"©ktLУÜC xgO°àlÝäÙ,-–ÉÁá¡"ÌÄúÉcÊ€ˆ t0Úe@á2àç¶(`“ÔAପ8¯_L~§"ôSpi#PˆÈ+¬>ïÆÒ¾dúÐ †C¿£Dòh¯œ ­Ÿª(Þy3¡¾Ë-0³! ª¶°ƒSÜ6e™yá°ºû@-¥I ÔAA"l©OâÚ)_ÌáHc#F„ e*ÐR{SÎH$\ÚZÌœ£½sQ@Ø> ‡sêöM„6£/ÀD?ºõz``çëf‚ÜÂÁ®µÃºKäˆbh9ä^áßÕ–§½×SþmU:nc#;1k¤L;2áÊ1gŒ¸çD=e8RŒ„ ({j°×³’^ÀD)í_;ŒÅÁgDëÓ`€ßÿÖ  ?x BsG„Ú#â&º†.Çʨýe’ÙP…¥,.Vm¼JöpÞ·ýzØ[C×£»À9¿úô¾w¹=ªÚ¨:{«=E" ] 6†àgLQï|ŸemR÷Þæ£Ée§«ôÃሗËîsäÁf$ùÝùÕ—“XŠ(8`¸ÏÒÀ[ÎH¡‹¥=¢rÛ=™šw¦>P?€ ä#êožÓþÆ5T(ŠøÔƤλqÎñd«3,¼ž½~õÊ]*àÁŽ|ÄÏb©’¼l’ìqgªlWk{%¼h¨ÿ¢u>¼ùxšu¨óÖ<!¥GšÇíßš'âMWƱ­HªÛxqh©Å>Œüͳ¾¹Iã£]óã}“æéw÷°ÀC_’j“B—q"%éû+{‰ÖóWl¬§Rú&‹æ€¥‰E#>‘ÇÑôêßó÷ç/ròi~iÏ'!” “4ËÌ–*Û‡žFô!¼ó÷ý…ÿ=!¢ï.d×P@p°A9¼D» å…AÝÞÔÀ"{g!Ý?Ý–YfØâЬlÝ·­ÒÍÞ¬.M›ëfˤ‰SÓ‹ƒ”Ø1Ñ6½›%$°`\¥eëv77/¡Çz÷„ND )e¯ü*‡¾SEÿ¢êØ}3?ûˉšâŽ †\­¼E~vý-ð–ð šmxØ„ÞÖìÌa§&ÂÈ̼/g¿Ù?šhäI0¬vÅ ‡ò„Ò°_ÎÆ*)ôJÃ|3ÂKÜ]7ÍýO³Ùv»%q~©+#н ¥` Ž› ÊŠ¸³ãVТR¿F³c°A.<ë!(’²&ù ˆ‹Œ¬ÊY; ûo\Ôä$@Ò ðŒ…ÞrBE`©¬V³Aí8Â@ü1PÊÀ‚x}xAŠï³ßÓ»tfr×> áï KpCèǦðJŽ˜»E£çodR)" endstream endobj 207 0 obj << /Type /ObjStm /N 100 /First 903 /Length 2931 /Filter /FlateDecode >> stream xÚÍ[Yo9~ׯ °/3Ë&‹w` ™ AŒÄƒ=‚<ÈrÇÖZV{Ôò8™_¿_±)YNbEV·“qú*’‹u“Ò1%tŒB‡k”¬ÐI kð.iá?{´¤HðlDTZ "Ygš¬‘ƉV¨µ³|ƒæíHsÿQ ²h¨ ¿ñø‹†ÿCWcóŸõø@ã¾è‚¥èR~c…Q™Æ C„É cZPÆ)tFIï &¾ÑÂ$L0°Õ˜ƒ9êÌAX >p_Öîoó6YÆŒO ó Â)b„p†¬NgØ7žð‘J#r`žq€mð)ËÄs.â‰l^)¾‰ÂkÏ7IxüEKo=˜«…wœÃ“ÂM˜7óñÉ0MÄBÓä’ÄÜF‹¦`§žiÀ—™ÆãSr€ØQ3"O"óH¢u˜ ÐF)>úÜhXOoBàþ’ˆ¹¿DLŽ[{‘TâO ŒŽ£H&Ç!‰@dDòšW‡eEß)ð¼0ˆ0ÄðI ­4¯t„x)b\­¬²#Š+åX¨"`*\„ÕÔ 3Á]Â]âu­u#ô¢™ 9ÖÚæwèE»üŽYžgˆõÖ:zë)† Ð\êôÒÄïK?ñº¡cËKÃ7èÞð›`X0ù&±²D–Ueø.Ðèà`T}¼¬Eõx>o–£êÍÕñ2?¿œÎÏGÕ“fqR/Þ*èªzWýV½¨žâAãaT½®'Kñ]K°Õh#FW¤‡HŸ´Nƒì±88ÕQýÚ5¢z&~šL—µ|R/dzŸÅ/¿ŒðoÎË,QˬexX“b’.Ü c||6mÏês9«?¾_/äl:ÇPÍòì‘òÃÁ3ÞIÈÖ^²!0d€vb¥À-w7¼ãf>¾˜JæÕ x`¤‡nÀ8J3ÛFp‘‘Q‡o·l!ÈÈ–o…#ZŒo¾Žã¬Y>"¥Ò&”gâ­†r(ñZTÿþÏáÀeL2('aÀçW³Ù»»iM¦…–О[´Ï›ù2£xmÄ*æFÏ¡”:…Õ¦•âêW*l%•*p[f¢|û¡·å ”?tx0ju¸h&oj0HT‡Ïž‹ê¨þ°ïnóüp|Zª§WÏ—- ZŸ9Û6W‹IÝf—_ý^ŸLÇOš"¯…‡³ ‰ÀÜÃñmá©£ËËØbTv¬Œ…ýjw5åj˵›ûÔîÙ—k,×nþìO»ké‡J?Tú¡Ò•öTÚSioT¹–~LéǬð„B_è¨{~·¯xêü°VÛ¤fOéd2«µŒàŒ×Úh¾(íÕq‹¶Óf.4wjÊ]ª¡×cÊÁ°&vîÒYv\JFxlGQ"x·žNžMõøà P=΃Woª?^¿à¿ŸÎ–ËËGUu}}-çõr6=–Íâ´š/Ç“óêçÞølò` U§DCì‹ïx6n{ ³@Ù²l_ÐXÕµ1J8û½ÀMÚZNf‹‰OäÕy5ŸVgí¬š”íÙòbÖ±…/à¸Ïb½ƒ»Œ™ RèÉÏëÌVјe—Al+$Ñ ÁàÁº·¦ê¨+Ý a\oP~®©¿½oš%F«%õPSÃ΢Áˆ^ 2!¨3)²gÛ‹?ã‹Ë™œ4ƒqÇ— Aß$ÖÔúMÛØcô÷x¥G°9æD‹E{·»>}¹¬}– ’.NÓ$¥U #óxmÜýV©Å2].šÿ¡ãË4ÿ³Yd›õâ²¹\î¯iÆ(É’EHñÕB”`Q‘c‚[4ȧǓÂ$ĉF[’ˆ¤‡!#ñÙÏ®^ÎêÛÄý…µ‡&„v¥—Æù ”Û´Ðö~2n0r¶Ÿ} ²@É92²uiÈîÇŸ™êD ¾“ ,!DX‰i“x %òO®¦³“£¦™µ Bës/ §ã ¦?‚r® jä¼ô "’Dhv(ˆ§³ ¸k³kˆpßf(€³ËÂC9¸qR– Wxˆû?–Ó^òUV\ÚDÀc¹àd"Y¤å\å;†‹+\dƒ8ƒ“–K·0vVlj‡îŠë š‹°sI É‹¶ƒ9ˆglkÃÎ%ˆOh»„‹Fr)o'bƒ@&)ûb¤\DÔ(ù‰!Pœ¶ïFŒ¤4€¯;ÔMnÕ@6ÊŸÔM˜j]]aªU¥D³õXWWð%ê^eGŸ•MœÚ³lÂ÷®<±*”²†-e [Ê6m)Sìn¥¼³ˆyþ£÷þüLjf×9ÊÉ›1©÷ÓP!÷«vº?D"@Jc\7y•7l¢ÔN÷ ‹ª£ñâx<›µ€2¿˜Îû”32Z™‰–Ë”ZÓ%t:ù{#m¯Žÿª-W©–ÓÓÅ´ÍxÍÆC„uò 6Ï\aô6Ëç¶@×õ)š•b%¸k͆B²} D@V÷_Ð÷ã?[Éežüi?±úNïnõoÓv†œ+áÞxm›tî.k{ËŽÞ2·›vxÓÀ:ÞÁ³_´É›Ö–·Kïem;3~ËÚú´¯µuŪºbU])‡Rö¥(ìKñدÞ+íK1Ù»^Ö̆ÎEÉ›¿Ö{®€ 瑨Ô[ê²!®NšÉÕ1ÎæÍI­ìWrdûçóF²’¼‰I²ˆ´ÙÒCûƒø‹ìØ&˜<Hoꢜ2º=L_'wrQŸœ—¿Uã«esÜ4ç77”KÂ'ÄÚAU.òD½GåùášDp(IÞeH\m¶9D4èü`…±âÿ®§çÓêéÇÓëéüż]Â5æq¬ëvToævsv=m.ÇàrŒâº}ì|Žëøø |Õ~š{ðRÃr­çÀ)W WsØÆ¼Ð‡yëlÑwéLfuɇÿnâwŸ„‘M®`#½…åDÈëoµì µ{äq›vµåM2&÷âu ©ÐqÜ‘¹¿ó¶gVx+ù»3E8+ Ÿo¦‡}7ÓùXRg”xÅÇ^ñEx@DÕÑò‰3°9!6óyW'~³¢ép®Q¹ àÈfoÜßfgâ v²îx£ÀåÍV®žÁý=$˲rÜ£$¾Påñ 1P´»“u2š¯¯UÔgƒ{‡Šî”=lQ×aµÒ(õ™V¦¸“V>ÕÊ‚…bÉbÉb©ÝÄ¢µ±hm,ÙE*YÅêˆL*íRi—VíJ–Kv’Êx娥žGU>9af„@žr-#ðæ!tw8“CL¿åˆÙ¯ã}v–"¤™z+ò1Þ¼g‰ˆÂÙeû›·¡ýkÈwX”o@n³;iÀc€X$>×l<ôٴб! PY÷=þýðeë—b¶³–AåCÉJŠ0\¢Ûsûït|Ñæld°U"xÃGG×(J…¸rÛ*iÕGŠ9ñõ&Ko®!þe}5ˆîB¸?ƒæuÓÊ‹I+Çó™g½Ì'úøØ÷ðV^Q¯Mwä0üs9,ZF&Þá†ÍÙwnJ’HúùÚüïê_9-8> stream xÚWmÛ6 þÞ_`ûà b½ÙrÛ¸z[‡¾aÈ·®|‰rqëXÛ¹»tØ%Êrœ8½~²dSù|HÇ“›I<ùýI쟯OæW<™PJ2)Ùd±žPÎIš¨I"S¸œ,V“Ï‘ t:£”Éèc5ñTFùôËâÏùœMà(å Ù"U‰Bà #Ï:¡¿c*JíåÒIF²„%Vl¦’À‰U„« ¥_üðþí”VÂt§`r ŒÌ²aÞè½ÜµùuW°O8š„½w¨¹7ã„‹Ðm~ýt±øcžŒˆ4” Þ/œ¦mÏŒ?‘µ3júÙ yÍm[Ÿ¼¶æukDæÅ ’ ᕈ¾OqŽyL²¾Óžmn\âDr¾+j0Â5´„4U¶%¸»$B`/­ôC;idº·óm$µc"Ópï}Q–¨ôLµ(¨–äÑrB Inƒg6–¿M9¥6ÓHwô”ßG ÌÅ6ÑÖ`gÔ%îK“¯\i$.åF’ŒB;Ì:>,A‚Ú.Ö­»]†Ûmbl‹ï9¦‡»Ó¦{"]ϪŠf£WÏì0H»3\“I”—;×|­Žu¯;6”U|TUx¨.l]¹‚R¾ T—檛ªšvö­26î-œN*µG£Í- †ç%î=ì;÷Öxµn@G[jgî£sdè?~ý´?ÖÛÓ8íФsqhöNKöüÇÞ¿Æh\ *yzŒØÓAt*Ùy xÜÆçøåƘÆÚw{·Î‡>UdÌaTm7ƒ";š£$' p'üÄ(4N ¼Y<ùXØ[ endstream endobj 318 0 obj << /Length 1684 /Filter /FlateDecode >> stream xÚ•ÙnÛFð=_!8/P®¹¯¤)q›¢qX@ $y %JbK“IÙŠþ{gv†)Òv£—]ÍÎ}-½ÙfæÍ~yáñúnñâòJ‡³XÄ f‹õLFø*œ~(”ög‹Õì‹órîúÊwšmÒt[wYApVóÊûc¹¯úüvñëWÏ—óo‹ßf®”¾ð‚hæ*-bI„ë2¿O_ÏÝÈx^ËåÏZ† Ü•«4·d<$$bŸ%[eõ.OŽ„uxý,ÊÑ¢\^E=•],‰\­…ôøÈí-¶¨›}'=$w»<¥Í]9wUä Dv¿L ní9c­Ë}±"0›K‡QP#+ÀÀè2 …Ô $·¼ß}ºþøáz,¨ö…”Q‹µK–s`÷÷Ü÷dÃ\³ Ô{”*+Té²)«ã{W)%”?4Û;ëâKÖ¼¾Äå}»Ë&})‚N6ѺýòÊWCS[4Wù" !Üçžs“6MVl@v¥œýŽÖÛ*)–s­œm÷×®ÊÊ*k²´þ´aý€Š“•zMI'Á­ulVé2OªÌmèèæÓ Å&Öó¢¡þK ÓT 7H1Ò]'øíÇÏ¿OSG+:ŠÙ–Vp) ¢p¨€ŠCVr€C:‘>¸OP{¹NQ=ÄÕªt——uÃX6èÂÑ^Iê:åëûYŒãà,q¦Tà.?n]ï¿z28¤µ˜»ÆÄÎÂÆöÛ?h³.+Δģ“!h)7‘ q Õ¨K ¾t¼ËçC2ÙbbßÏýÀ×'·yËä!k¶T•TÛÔ#ͺ• ‡ ¹Ù¦(yÔ‰‰²é߇,Ï :å= ’zeô'˜ÁTuC2DtfL cˆF0#KÁp¸õ¼ Bœ´×™'/ºHš0Xà‰8 ûËÖ@Ú@ü;¼ˆ,b–'üaË"¬—àTÔ¤éÑ=Èts¢«ü‰ª!…ò:·žtî³  úîò²ÂèÅS6( Éœr¥»:–Høè$’çE EhºðæÖ¥u$B=´é´Ò2„×WÚL( ƒI¥•!¥aí)­º(j#E)Js•4TX•Hî¡ ÔŠ=œXxi«Ä8\”Q˜..ö»ÏöÖÏ€?14ž03ƒ ÿ©ÌÊÉ/VåCñ$mè„^¤[ü*­w”\àÛ{T+Í1ýŒ´Z”MJ;M¢€ÀXm1Ë‚‘Êu‹ÌÖt°BÅ„JJ0Z/DëÑÐâÂ×r¨)™Ô%kBphrt¡:mø  (3˜²v‘JœBññRkºìŒÈ‚YqÒý:Ç{[îâê«ùÿ²Ù:¶;€ÒÆš`()t +äÕ: ÒÛéYà9MI§víÎÛ›QƒÊ{t®Ò£µ%4¬ßSÑ ð©ä§rú”“ÔD‘Íã\&g¤PÁ`|6$Ƽbp«0ÓQ`¹hh½ p`XxT뇭¿Ÿ«n™Ä±u%š»:§I¸½6ÔuÐ7§©Ú%©ºÚ¦á¨ÖÌ€:ã±X›ÞŒ ´Î/x<{˜Ÿ"3Y­Nñ *­I!›-Œ²LrŽr«8f¼ ,W(p÷€i×qÿÓÐZ‚ RÖëì@/€vt Ý‡ëÚ×K“nÒŠw?½ñúñ ­1ü&ŸÇ/ò›}Åw¤÷È õ7¡wØöM%ÇÚöÚâ“꺲ÓW>®æµ±#5¿ëÆáiô³.j éÍÐÏ0ÐSO\Ø93•ýgÄ)Í×mX“¼.B ý,·µ€‹ÉgÛ`~ôÙ/ê¸ë÷몼›*bú¤ÿL?€ÁAuµEdÌad)×ežS§=Ï(X¼`ò üÑ ‡”¥Ôć @hý’Ï´Y›ðÌ‹X¢q]•Ö„Ææ,Ñ´Cµ=ë¿ B˜Æ–PÉú¾’íîñv[îóÁmo›zàÛ—]ºú¿•ú™ôÇ©R—uQ>“&ˆ0øÝ·Šk;€ ¿t-ìÇ þ¯¯ýu/CCh¨gÕö噚 Ý'ù>å¯,IŇ»²†Þy?i&f˼ý¤‚yÀâ¸ãëíG™)YúV©Òuk“'’°gÒëô`gsìû¹¹¬Ó¶qØ1í¬!$õ˜ÌÄBcº©XDQD¼ãÁ…÷‹ÿíhõÉ endstream endobj 332 0 obj << /Length 2011 /Filter /FlateDecode >> stream xÚµXmÛ6þ¾¿B¸~8¸")‘RŠ~ؤM‘»ËË5 ÜI€£ey­T/®(í ýïáP¶åÕf7Ü“‡ÃáÙg†Ž‚« ~9‹|ûâòìüUd,SB—›€KÉ´J•h&d\®ƒ Ó¬—¡”rÑo ìÄ‹O\ÆyÛ,Eº¸ÆŸâ¶ì±½û ÍÜí;S:‰Þ>_~¾üÛ~Ó±=%õÑÖQ ΔLiS;¬¾y¿ ‘,ú–Ú—ms{ÝÑð¿%µ°k9coþp›¬+64~þãÞ^7óø¥,ãüDë ,×pšrãOq³-ó-u?¼ûà0z¯·¶0£ÈµéJ³ª¼¦UQµÍ•éàÿwdÛÚ¦ºô U@Û‰‘¯0Œhï˜ISÒ¯–¸z[Ó>Y£–êtŒ»_.Þ|˜‰;/ò”É4ãÉ4¿¹Ø–Ž ]K± ~ÎAcüŒ½¿ŸîP•¸ò80H¨»òÒ¿bˆè@±L#ùBòL<%SÜCË㉆“¤2<’ßuˆ!À]8öê1ª½xÑ65Q€?ŽAÞ¢.+ºp7ÝÌ—¶z@³Vy ¤êUvEUë@ƒ»Ë"&bé=H‘00^²Qºh7Ô~ äãâ”éTœÚödÔEÄ2!èÞž|ô$ÊtuJÎIJ`¾½³}Q³eKEìvøJ}w ÐÎ]|Þ´ÝW DÖ-rõMSµfíy÷”3Áå4L¿™Ìù×12ê+Ȥ,Žù8¿Ðñâ_e¿m‡ž«áΡ„}CMUB rþZ4È`ø­tâó‘^´Æ [a'+×…Ãz7°Ç¨­.Éi¹Ójvf;”UÙ—#k‡¢¤½L[øê«·Ðu;è­]É‚Ð)Á`E_Rñ ~*‘-.’(nM½«ü.Žu¡µCŽÂÛ¹,ï® €mF0pì\OϧœnhšJHèX4v%+BªìàµÑvwsq¥È}Öy¹Ûýì¾ç‰b‘Ø{€;Ž–Tá@k2ŠGYƒ½¯3NX¢örÎÐÐ_&òä•ã‘Ê…#}ôyè;ΈÜt¶ø¾>Lã¨Åb~æ|±£馡ö#IMŸú-e utk0 oÀù½Ü±ŽðÌEÖÆ‘Û`*ve ‚Xõ•P‡xFH| ¿Û‘«>P‘I–B¾¡Œû5ï—Ø×ZJ‹èínôwíü}¦Tã±`ê1 Iê˜ÞíUËŠà&É“oãgÇ%¨‘¼u|¹\ÕOT¶¸öo'|SUþ}UB K¼—RHØ¥5ã^“cBR‹ôÉsîU ±>"² ž Ý8àdvÜ jª´øuåß©Ø.é)ã‚xHMŸK¯ÀÐò ú)¯*H 3‘¥V"÷à¬\UÉ`癀/Ȳ£4ç4ènNi5=í kÏmÆ 1®§6Ì^#O“ãüˆ*‹[w=ùÐcÉÑ\a¬R¯74}€îµ)R±Ø˜JÓy«¨ÐHé0NÀc÷Är•g‚‰ôºw€ßˆá•`§\ŽžÀ…ÿ{@UR>~…‹ÆÔ³÷¦!:LöþâW()ØO—3×&€÷¶á ¤y¾NQLg{z~½›u¡OöÕ9úr"OŒ ½zp¬Lœ¼{¾Å49W8zÓêó§ZÀOÞÿ»ëÖ½ˆ°:”°þãzöªÞy –Åc¥©O†<:u?Mk* endstream endobj 346 0 obj << /Length 3147 /Filter /FlateDecode >> stream xÚ­ZY“Û¸~÷¯Pm¬©µ0ÄAÜ<Ù›õÆÉzxªò`oٔđX¡H…¤<žŸ>ÀSG®Êƒ-ÍF£ÑøúÀ‹Ý"Xüü,p¿¯îžÝ¾¶‹D$‘Šw÷ ©µˆ#»ˆÂX(.î¶‹÷Ë×7V/«úf¥ƒhÙî«&ãfYµÜ¸¿‘Ëôp³’˼€fž:Ú‡¼Ýßüy÷Û×:/"a• ˆ}~¬Ž­€L:ÇÄ"ˆuGø¸J ¸õ›ÇòFÅË6ýÂý¼qãùáXNäÛûì¤üSä[ǰªâX€?™š'’³Ü¦fè8šMƒv K ‚)@eø>EÁx(ç{Hb!cõô1„q<=†æÊéÜ òG…!èá¢2ÎGîÔÙ=2Qr²€#E7,þ³èZÿ|¶xßo ©írs"tCOÕíý Elf÷–Ñ™ÇÚœÛZïÇyézçdø×ÏàÖãE$’XÛ‘äB‹HºedxPã·- Þ*Hâ'ï±ßöÎw:·).¹¯òë“/ .¨ŠÓ IZì*¸ñûƒ³PiLL<ß).c¤bÄFovØáˆF9°}j(VÇ&­NØÆ$fë½´1xŒùë墵¬y‹IË.ã!‰Kí-AE^»&mðH)3²—hK*Ñé#UêŽ1!458OBÅ£ò¢‹-Æ)þÈCðåYºÁ¯öÜCÁ @&·±}_jžíQ¡ÁT5ÐŒÉ8³!L.NðÁ³cBð1èîpäKä¬ê9æ`]Èù›nqÇu¢_‚¬*qqŠ ðÈ5à»:Ç«óéõsîP†Ö0‹ÀB†UÚR`-?½q´ý|Î>%Ûeµ£aSŸÞ=Ÿ1kÚn‰»>‘Q¤ØÐÔÊ2ÑLEX¡ùäû9Œ”ƒ]WeŠ–»¢Z§·ûäˆêkl(0Ü Z¿&qúšTÍ$tüߨ#»u‹xäÎß—&†߄3>°öíˆý-L®Aì'™xzZ¿ñs‰GUÕO›ãÓ\8ðç:#©ò׿{+7É biÆTºå’)y¤²Bî#"¼6Ä+!—½MâÒÜê\~˜@&¥g×µ‹G—`ñ·ƒîh€n&5}n(Ú®Û|s*R73Ä(Ô…H¤ûØ»e =X>Ap¾gm†Dô¹t Ncyò¶ß‰Û²B‰É–Éõœ…´Q_f¥2oö%=ÉiÎSæÞ¢âPœx"ÒÒ›¥ ±‡¼8±3§U°f‚ã®Ú=òY8êRÁ ÷R8Ø9#Ž` Èzôο™–} Wæ껹«+ûK6`A"û}Üe¯dc„2ýÁB²µÚæÏ¶UýˆÞ¾‹´1Mš×–^ºRõÕr GÂ5ã"´Uò›&ÂP™ˆ€9ኑH œÚzý±¨v‹ìs ‡*\àžEãDÚaëœúÞ§óŒ<é¢ E”È©Pœph%]‰[.Û“Kà‡nyb—ÌO-¿”ŒÆúoÖuZ²_YŽ­ÜÀ‰3Iy!×ÇŠ¼¾& ‚êÀÀÐ h*3€[uɇѼxâ´‰‡K<àp¿&3>n”Îb]„«  a“÷å°°à!^Al„áSUÈD˜¡TÉêeäLYÔÁ [ÿ¾Ý›G©A__Qj2¼†1„zYŸ\¹ÿ¾®<„xà==«E4lëåÛßy:Õ"ŽiÙ…û°¿rtõ0¬ësitTëÇ/x ó&ô áDþœ§]b YonB ƒygV£'K}·P‹dx½¹°Ä5#¿Ï6€Å6šäž¨Š¹|exPÕƒ›¸yàzB,îyíŒ-'cßMài5'úé*‹|‰®F+jãÓwõ TÏz$ùž 8ê*’ÐhøQZ)¸7 xïzH—Š´pÂ+]èÿ n—pefŽ\ðÊÃi…¡r¥E3íä)/ø¤ÀKÌ7øf¡”²ñ²qÙÔ&GGOiŒænÖ¥§ö+a y­RdÔSŽ4€ðWÃmªó-§¥¶ß9˘µ-ØáôØvXm‡ÐÆ=³[ag—ø"¹‡o@ ®JŒ¯ê,00†ª5&®FO¡ (€5îú\Ï2ãÇaåP¤xä)JºÝ£ üxûã÷ßó؆c£­›áÇVœ.Qu¾ç\OPù5Ç9TÔ¤«þ—Ú)ÿ8©°y¬«]:Rº[J1Ú*¤c‘æ%ÅrÊÅrªóÊ=‡eøèCÝ[Ä)-º˜,!§q’…c¶t¯Ì`SüêÇxï‚døå¸ (º ×Bsc®‰-ì€úC ªÞÁtµ'Gî~_‡:Ù—¯Ô–t^öî¼zþdîÕߔݶ8Ã×ô´ßE¡`äE#´Î˜çe/"SóÓ¶øOG‚•ëvÆ*•ÓírI#ìB:áç âxZƒ0 W|n(ê‰ñaÃW0肦jæóÀPØÓ3ÛÀ¡>òœ{¾cû¢ðÛ9²*ÝÛïô σ­®‹®‚5ª±¢º{ö_w(²ÿã%‰¯îàc6‡gïÿ [˜„= Àÿ@¤ ÝËR±x÷ìþC(™,À;ıû;)0‘J‰ Šf¯¦ç¯¾·¯Á»Åðy 9ç´\a%¬työ¾m?ÜÞ><<ˆM…ÏÀåêf…Oµ¨êÝ-ÄŒ0vlo·½·ôˆs[VÛL'0#öí¡ð þ7\Ja¨±¢¸eùå\{ÿbß“Ê endstream endobj 353 0 obj << /Length 5063 /Filter /FlateDecode >> stream xÚ­Kwã¶€÷ó+´´FñØ]Ò“¤íiO’“Ùµ]È2mëT–\IN2ÿ¾…‹×$î*šˆÖG€äwñ¸ùêiÅW?|âïþûíçOúÞ¯:ÖYiWŸWB[¦„_Yã˜Tfõùaõ¯›Ï·^ݬïwýíRêFüùöNk}óíéÿ¾9<^¾9¼ž·‡ýéòõþáòíæðòº>oï·»íùVú›/—ïÛžŸ/ŸÎÏýåÈ‡í¿¹Pý±ßÇãÎéwvO‡c8öåÄnÿóùïùÜ¿ûüéŸDøÈWb%”bÎÆóÖLpµÚ¼|ú×øê!|ù÷gªó«ß†C_VJ fº.|Þ­~ùôséG´fZuµá¡Î´Õé'†j µæXç¸êQÅzìÂO…ztþR?Õ3bròÒZÖi ¬´áûNL±ç[Åo¾¼†Úä7}î=ãn)^Û1¾ãÌJ3Å{÷í·_S7PT%äðý;êߨáÚ;#I¨J3ÅÕ{êÏ?¨F…;NPeBË÷Ô¿~¹/`]Ǭ5$X/™ö=ö»Íë×XÍ sÊS`5÷Lúî=vûýOl¸´^T²Ž—Ö¾«ä¿Üo Ðp„q—›@‡#+PÉŒY:¨áLˆw÷ÓOëcj K4U6Ô­¶ ÷†v­?®žîDI&¼i¨3áûpÇ)Ãx¨™á*|((Ô„xv+»›çÃvÓ—¯²nþ©”J#Xçmc•HÉ””$¡LÆÛN\ª$åëѬ,½`\¸)ù—J[„ WyÁ 31–(Îà!|­D¯v¢A'Bä" ª.<° %BÔ" ZÅDסDXDÊèÐ2æXÕNÔ"<ùÁèÂQG…Ç#B¸˜K,ÛDÈÖÖul®™ŽÄÒ¡Îeí‚ãz¿‰MÝç»Ðõ¸»Ú»‡·¡¬ }“ëÊž{^å¢ÉVcóÐRè,‰±ÃÝ­¡·Þí1pý«hèÌ}UÂ…)üDü»g¶f¦§àTpŒ˜žÂãq½¹Òâ±}ÙQ%ס§à§õëõ8Õ^ßÒ‡¦[ç§Ìï+qj²§D‘F㪙†„HE€„H…!!T !TaHˆUHˆU2«vdV¢¢†„p5ùµJM®¥*5áy뜘­ÒP&…I'gPA©AhfEhËe¡ñ QŸ³ÏbÒt†“Í(ˆ`3„˜dFA™Õ‰à2bvBL*£ ‚Êb2ÙlbÁd^… äHLæ-3Ü^Îzóv>Ä!÷ë2ig™ŒÁ5™,BebºØ_1¸MÚ‘` :!@& Hð 2ùE‚PI(2¥ FA‘ dR ЧÌEœâ4 ý.§8Ǹ–˜S„q¬†Ãc“¦¥UdÃññq“úÍñºÉÚ‹›M6†ÖL¶Y6™—áz ÜdíÈl2 &#@‚É0$˜Œ &Ã`2$˜ Af“µ#³É0$˜Œ &Ã`²¹È‚ɬ*ŒÂd6Nè¹ËY÷û+»(#†ƒkëÝYÉ|'¦Ü‡/ûõ˶0Ý(:ͬ7$à.8XÚ)x¿«t+Û+æs&ÌÊ|Î2dÙŸ.>î÷g{)ÃmÄŒ|wIï*þ$@jÁ”ʼn Ob4@‚> ](d‡³=Û‰:FÂØ^Á`O¤vL8#Ážs‘{3„% {?ä0 g½ÝÇ1²sÿÔK •ŒÇFFø %d›Bu8ÂLáçîóAýuŸµ;·ÇäZ{p²ì³Ð|qJâ>kGæö †Ÿ ¡=ˆ!AhHhbHÚƒ2­™ÛƒŒF€„ö †£ÍEŒž“äoí™Õi†y{N)O`†3MB3ïµoðç¡Ih§èÝöe{¾î²öËØ\wrJý[Åe‹e—™Ð°wY;2» C‚Ëà2 .#@‚Ë0$¸Œ .CÙeíÈì2 .#@‚Ë0$¸l.²à²("­I\îDáu¥«'ÂÃoüåHåU“ÅŒ`B¾ƒ>®·»·cqºT³. °‹©¸j ¾¿½ mÑþöNÜ<¯ã¬í¯ÛCe¨°½ÎsWw|µ®î"dY§Z‡›Ná:m/eîêŽKYëê SW#‚M ˆÐÕÅ`Sdêê"Ä,ÓvbîêbH)ººd:Y©´Ìӌʎ9‘æ~÷‡A/%±…H¡Ýpx'º6¡:JÆàaeÕq{ª,*j/rVÙ˜\SÙbÙd*šyéÂË¡—Ñ”ïã†õÚ“óHäÇC8•âSì?Ü£íü87Sþùøvªˆµ½öA¬jM¬‹Å1 «ñQX" a`DÐ*1i#‚U ˆÉª¤J@LREˆÙ©íD¾Àˆ Tb½Àˆ`ԹĂQÃ2†d2I‡g[un¡Q=ºNúÃFŸÇé|<ìŸÊ&í¼$á“©¦Üû¼Çu¶W}Öé]Óé"dY§ñ'žŠN€Ì>Å T$C‚Q `T J%@‚Rdvj;2;C‚T U V‹,Y•3Þ‘$£k'‡œ¢Kçw½8”F5l,b¼óãmÙjQËÕ”ûÔïcÎh1ÙˆÇã: ´ŒϸwE>õýCE¡Íõœ:†VºYV¨óáFPh32+Cf…¶#A¡2+´ ÅY¡íHP(‚üC¡ÍȬP ™ÚŽ…bȬЙȂBmÜ„—$û]‡ÛBÛÔœ>öë‡Ò°°d^ G"ëÑ?2*¬œ˜BO‡ÝÛ•Œ{j6šŒ€ìÝ°ëØ„üo.ôîúò!‚Z†Äª ¶’Xµ Y¨ ý§Ü ³@1$” Å P$C‚@ P™ÚŽÌÅ P$C‚@ç" ©ë–$å^Í8äbW\œÂã ×ð¶ôwSøõ”\ϰ"(on Ž©µ¶à"dYe&®·û86x¾žñÔ\äÜ,ÓkͲÀ+&ãL˜L´´ÿð5³Å X¬˜†ÁaÍÀl°:0¬ø‡¿ ø«õ±€IëÉcQ›´ž,¸KÉáDöŠos€œÖóö¥/§7ɨ—ŸëÖŽ¬WzJEš`íe…Í(&ÔÊfËeqéÐæîð‡Ȭ. ê"@‚¼0$È‹ ú /$ Afµ#³Â0$(Œ M0 ›‹,hLJæI’»–†ý‘pÒ-ƃNüp$²ð·˜bÚO¡§~}¼67+œeÞÒ ÃmS5'èÐö;÷O_®+´½žsËoÄ­5üË ·¸”ø¶×ÈlP %@‚A1$” Å`P$Afƒ¶#³A1$´ýÉÍÀÑ3RkÎ%*Sœä…(Zķ祴Ò_oMw³>n¯íñh=®:7­CrŠû)ýÔïúMõuåÎB“kF[„,M}X|á#A)!{RÊZ6v{)³Ñ°R‚Ñ`4 F#@‚Ñd6Zûµ„llìZf£ Áh”6YVšà¯LÔ<4д¢x–æ–IŸF$¿ûËOé=‡oçÓåSÊb)Ú ^Ÿ5ûtÊ%’ºñu”*&’¤eªÎ2 KúûMq¿¤Žqs9Ò¶nï!˜"×÷§rÚ§òŽãŒôSèù°»‘Ú«)&ÈÊ 1­š+«ƒÚ‰ŽPb G‹ˆåhÄ%ãØK„€Á#¦`DP«—-‘°J…PÔ„H„S$" ¦@„S šK,¸Òk&IÓZù Ø[£.KŠÙº‹È Ë1òeýûõå£È´|t=Æ×K^ŸŠ"¨^˜XŸ`+ëH0æY3f;2+C‚2!‹ÎT]¸òغ„™¤‰"A𛬉Ôk¶f;1kC‚6 àM Þœ‹,ˆÓifiv.Qq¿Ê52Ö¢9¾÷ëûín{Ž£º_J«}â½j(à]¨}a&øÇõæ\Ù‡“ –sƒsD­µ7 ˆ Ï±fÏvb¶'By."–åéc?Ð¥@‚<1$È“ ^“<ëÕšÝÙÌîDˆ N"¨!‚9ç æŒ?E³u‰²á¡…åóuu†#eëž%ƒ;ÇÈc¿+59ãú<ÞÊchµÞ^·Ù—cfM˜HæY3f;2C‚2!ËÊtqg|ÿ $(C‚2 *6)©×ìÌvbv&†i Aš¬9Y°¦ F³}‡2ž˜¹¹¼¤7õ”eÆþƵîÚïk7Å—¥í‰*Gužy÷: k_Uh{Eç.ûZë² A¡cdM¡íȬP ]„,+4ÄEñQN"!‚@ ª5 ©Õ,Ðvb(† A :YhÜj¢mj)¾ÎÃt3n*¾f§óоòÝM¿>mcO<¾£"õÆ/³pÑÍÏývõßø¹?^¾x;m÷O—?Æ/¿‰ŸÍ½Á,Ýì"”kÁÚÆšT†uÍÀ³ ŽW) ?†Z,gÅ9£peZ³âbšð„zI‰ë‡+õßR@ ……¥ÀClœà‹;'†èb¹#' ýzŽ…ýr+‚‡j*!µýZCËä *y,H©cd-¤¶#sHÅR!Ë!Uëagw4¦ !¦bHªȔǂ!sTm¿–9ª"×2GU$DU Qu.² qi™Q4ÝÙ «ÿ?¢ñp¨q$C?jñv:H|LØž6ëciÖ!)Æpã.1ÎÛ)÷õ²)ìn»‰ ëéÕ—:[|̯Yœ #koGf‹cH°ø"dÙâJÇæQ‰AâN@‡×‰Yáí2+¹YáHP8†…ÏEJÉ-Íx|¸ó;î&_õW’2|¼)8Ü6'eH3%§-÷ý±¸³w(ŒtÉE¸Å”¾~<—vk”á;\Ùv¬”L¾¯îÓ¡ÀTá‡9MQ•d^Ë)óe½¿2k,Í™D6–‰wÜÃúz”j¿›óðÝY¾#@B”#kQª™£†„(µYŽRÒ ûÛ£aŠ a CBœ"@BœB9Pµ_˨k™†„@5Y T—õ…mãNÜ1É5ÉžàŒëÔ™üçßþ‘’æ9ì~M£t×áæžE¹ qò¦ÚˆÞQš&‹‰óá-—žÔk¬ßËóñ±nÝ!D²8¸5¦¾®ëÝ®8'o•ÞÎ ÁA 5£KS ê9G¥1¸•(•ÆÈJT"@樄!ST¢@^Þ'ŒSP¢ ¦÷ £È”(iV !BL" 昄!SLZ†,®íW±µ.bŠI³‘z7Ì/Tvœ9Øcùe[|;{µŠ‡vÂPlQ2¡žb躲Û<˜¬½À0 4AWF(ÉddÍdíH0Š“ /&C‰`2b2Š“ /&ÈÙdíD0Š“-BM&»8Plp“ÍELæ|hØŒäÇ\ù!“…Cµ$&SñY{q³ÇÆàšÇà±1²æ±vdö† “Ç0"xŒ€Ãà1dòBÌk'faHðØ"dÙc>tÝñ­{g ³~ØÿˆBc.ÜÑ~áKyâwžä¥<“ó¸Þ³öœçIÀq…Åû 8?Çí߯'yT> stream xÚ­Mw7–†÷þ\J c ßÀ2ééd¦OŸNú´w^Ðmk%*åÄÿ~.ЏP Ⲉ»²ã| ¨ªçE¡ð1¬>¯†ÕÏï†üçïï$ü9¬äJj-¼ +眈1®îßýû?ÃêþçßVƒÐ1¬þ?ú¸ÒÚü}»ú×»Ö~Äz¡µmýȰŠÂ8“âÇïþë'V^D?ÈÕ‡OðSNháx!½Y}¸_ýûæ—çÃÃîéö?þöî¯&\墈š«¼&È9öp«‡›oÏ·ïáM…¥ܵxã¦ø¨…“fŽÿñý?~OÕR‰8°Pµ´ÂX}Jýå‡ ν7Š…ª½Pñ;ê?®P­ƒ+N²PmR«Sêÿ|ûXÁ%œ5,Ø`…ì)ö¯wÏßcÍ„Wk¤ÊÇSìÃO¿V°pjÃÀRÉN­¶'•ü—w¨„uÇ‹@Ã'P%¬‘E:¨ÕB'×Ó¯ë}ê‚Ö//iÝt ª^]Z!îý‘tgÚÎ1V p£qˆÛÀ¿©ãYP•Ó á„yœÓ¡žú9Ó&¦œ1ï^/ç“¢¿œ îhçÔŒù¿pè'êaÎÏKù¾ W•™Uú|Ê-¬ŽGäs#F ¥/@b$0 ¡É#C¤‘ È¥L,QÐ42€ìÄ`@Â2"¢Ž—+þÒpSJÇâ/ QäŽGýóîq·ÿVQ\:ÞÙñÃ`ñ.‡™ôàæÜ¶Äú [$6…¶,Ö,›"[» Yט1bð–Ö5F!Qc HÔ…D1 Qc²h¬Y4F!Qc Ȭ1Šˆ[J¬hLÁ©´ŠEc*Àó¼Ì:Ù>üþº©µÄÂñjUðpeŸÆhÔ™nScý…-›B[ëGM‘-]…¬k .m'i‹1Ñb%Æ@D‰DtÖ&…õ‹Â"Œ˜ FQ`KI'|:T$f¼0Rõ` ‰0“Õsêúé¾Ö%¶MµÊ… ß;‡>ïw·ïm¼ù¿Í]­ÈQ •$Ä@И–jNoz›áìoO¡ o3 ‹·§È†·¯CÖ½=@4JOz›‰Þ¦ÙÛHô6…ÌÞæ@¢· $z›Y¼M!³·9ÙÛ1{{1±âí  g8¼máÎ…Ÿ=uý½0¸Öj?~RkÝ×ôUbð~m;¬¿¤è°´å°~$:l†l9ì*dÕa6:¸ºí0dv‰D‡1 ³ÃH$:Œ™F!‹Ãú‘è0‰c@FÑaK‰‡ù ËC<\[pƒçÚûÍýë]íŠDOÁ…¾v Ú…9·Þøô^XÅ é)VΙ/ÏÛ‡j£Ú©R²`cûžgض°»Okñõ”Ùòu7±èzJléúbÝÖžáB mÝODYSD”u?]MÑÕýDT5A,ªî&SSD4u?1‹š¢¨ëžvƒ!-Mt¾o$xŸ’¤6ä~æüý×Û÷Úš›‡§Ô}zØì?­kòOµ¡Sm,=ŽzQ|û'.¨4êyài¿;)¢ÉM̧ís­ýàpÒ'•¦³ëÚ³êú²Û~Mµ_ë·ÆPè/¯ F ƒŸ£ÿÕH…«³[ME¨¸$&)îMŒ…~dÉ ‰¹À€Ä`  HL ‰ÉÀ€Äh %ú‘%($f2‡EÄpXJ¬˜ÌDH–dk•0>GÚéMØzÿX{—æ©?î|_ëÊÌürXïçEÖ_Ü"²)µ%²«u‘Y¸<¢§EÖ_J­ òå¼ïc OQc ÄÔª€¦‰D1 #ÒGY4Ö4Ii6‰D1 í ¤ó4=¶Y÷˜1­:…÷Ž¥• ¡ì¤=iåBKëuœq9þ×~÷ñõåð´yyi4x—R½TÖ÷6xèSòôöhõÖEõ¸þ³–j<œôÉh;¼¼a½Û=½lîàL›½µÈ_k9@ (ÛÎàÓúaûºß4:aú«»ôÂLÁ­^˜«õ˜ÒpñzIÇT)1¦¦…lÅ1ÇEĘb bLQHŒ)$Æ,1Õ,1E!1¦Scj)²æQ(¥áin+ýÖƒÔö(|ÒÏâÑ)t¿~ºßÕZøA‹ºc¸Á #Õœû|û¼½Ë}F¥¥¹Cäà«t›xZîû‡×–¼»Ï±‚”᤺jÉûd]ÞiÆpÁ3F)QÞÓB6åÝOÌò¦ˆEÞýD”7…,òîG¢¼ 䛼»‘E޲Ȼ‰ò¦EÞ ‘yËAÄÀÓë+A‘ {}“Ç^oåÍc}Rÿ(¤ƒÒ½·ñ„ýpØì×é™ä¥Ö †òzËÂŽnu7g¿¼¾U¾¹»}/o½6ý_šÃÓh5‡¯BÖ*Ó£éÝÏýÈÒýL!Q© Hì~¦èT$v?SHt*»Ÿ dqj?²t?SHt*2w?SDTêRbE©ƒ<sí¢=.0*|ÁÚÀbÔ){¿9T—6ðîÂõnœ<þ>ïñÒü“ûZ“8 ­$]É4*EžúÌ£€2ƒpK©•6±±s.ù(¤û2+ù1¥·òãb=>àÔEèøè&–ô ˆ˜ýD ŠˆáÑOÄì ˆ˜ýDŒ‚X¢£›X’ƒ"brôspP@ Ž…ÀïsÃ@¥–eEDK!¢KÃÙqš‰ðg4}£=(QϹ”Çdð°Ðœ"ó|œ¶xxÝCd~\ŸY2­/è5ÇA(E'GQ†}½uÃÍz{Væ çûWfÐè_¹yFç< iRç ¥Ìý+³B6úW8ˆÇþ’˜uÎAÌý+$2ûœ™ûW($ ‰ý+$2™ûWHdvúbdEêpŽldY-Ñ@s ™‘NOM;Yœ>Á^¨txVú„}HÌo óó‹ìf—öW9އ™òÃa®#VUjÒOšH«´¿¨ÒI[&ef“@)EJÑ£ Dôh›X4ÚO,%ˆhQ"Z” ¢D—+õдQ,K6oEt»5JÿBM¥tpñxxºrë6¦ ßÍáµöhZR#¤»› ?7Üœùò¸Þnë“sƦ#6¦+û¤žž>mÖ/ÒÔ ÑâgÝݦK;xz­vðUȺ¼<CË»¿”(ïi![öf f{SDÔ7õM!Ñß Hô7,ïGSH48 N!QáK‘5…Ã¥¯:Gì§…ršc0£I}fƒþ~0ãqüÜK™Â3þùe´ÖGh|îÒk½ûã?¯·Ÿwû‡Ã—Çãþ6ØaÜ&þ"Ï\\ŠzE ®shhZ Ÿåů[^™ fû¤9fûL™å¬ÕB<޳8Èp§+fJþ´ßüþºyºkZo%c'ýÛè£ïæá¼Ó)¯1í´Ÿ—ƒŒÀaŽuãrŠ8 ±+pÕ®y““–îšï/X»€%¿zy%½†W7£‹àar-ãU$i4ÜÆ<&½â´—x>½añäz‰(Ð(Ê)º>˜3Us@Ó¸©æÐûÍóáËy5÷ŸÚ"ç)µeç~dñóÙ42+š"¢£ˆÙÒ5}±.j«à{†5C!QÕD)‹«û‘ÅÖuÍ€DaSH4öRdÅÙpôÆóô¹§]ª¤¼ÄÙðI+Y”=eNžH*½EùïGà Tü¯PëÝüÑZ0hÛD;Úî?»¥‹hJmuõ#‹¶§È–¶YÛµÍ@ÌÚ¦ˆ¨í«ˆum›Ô½@ïËÄQHÔ6QÊ¢í~dÑ6…Dm3 QÛµ½Y×¶òª³SCá†ÀÒE¤|Ùo^¾ì¶÷çsª¿ÂKNMÉ­œº Y•‘¦   éé/%æÔ´­œb 朢ˆ˜S D|•A!1§˜S²äT?²ä…Äœb@bNQHÌ©¥ÈŠI+Ϩ©îež”pÿíiýøpWW™”züpúR§ÊÆËkÊÝ|ªµð•P2°0Ô¸ 3æÝëaWŒãÎsÕ'…½;¿"É-‡&ÌÖÀ¡«ˆuaK¸:õ‡ú ‰Âž”±åk`ö5D]3Q×mÍ@D[·‰EÖýÄ"k‚ˆ®f ¢« "ªz)ñ{Uëq–Þ{øœkWvå1û—C}KãÜøéй٫M*qs0öÉÔbÜ®‚bA{%‚Rsô§Ý¾¾,‚±<Ð`E Ï ­ €§3í9ÈjœâáçäfR0\WضŸAmûëõ¨Òƒ6=L‰¡”9*f…ldñ˜$1‡1‡‰ÌiÁÌiA!1.$2ç2ç‰Ì±Y Œ¶ç™¼«Ãq£\z-›ôÉÞQ1Ç¥lfÌ‹—ëçãŠ`3>ŽúÜžªÏPÝø v†n¼‚½Yõhº ½$C!Q£Ó2¶4Ê@Ì¥ˆ¨Q"j”B¢F¨QY4Ú,¥¨Q$j”B¢F—"+õN„àY4êÓ>½þò5ÒbïÆ¾Ç5fìödv‰Ž C§Ý¾®n©!…óŠ… 7‚’jÎ|ó÷ùuÁNtø”ÝøUȺÀ­¥ Þ_J4ø´-ƒ3³Á)"œˆ§hp$œ@ƒ÷#‹Á)$œ‰§hð¥ÈŠÁ<^óìg¬ýqà‡v’Çàö…Oàmƒ÷3‹Á§•½çëÞ7àý§ùÍßrËßW!ëþöðÀwI ¼¿”Åß“B¶üÍ@DDô7±ø›@¢¿Åßmdñw?òÍßýÍ€,þ&èï¥ÈŠ¿m¢XüíÒ>Áa¿á 1zOÙ—ù›ŽþžÂ›þf`¢¿g>ú{w~0†Ó\ü=%·ü}²îo—VB¦×åe(%ú{ZÈ–¿ˆÙßýÍ@DSHô7ýM ‹¿û‘ÅßýÍ€DSHô÷RdÅß&ó›²¶Ç=’ãÉ7w»ú–ôéCÇ[­z·" þ„Ûzq vS74:]ÙÑÎÑõ—Q ­x éµCzç;…6^\Jw)KM+E8)mû½eÿUUÞ[N¡­÷–W!ëqªŒ–^t˜¡”ÓB¶â‚˜ã‚"b\01.($Æã‚@–¸èG–¸  HŒ ‰q±Y bïkzˆ¸ÖiWUÉ1v^)LnØýòzØìÃåx~†6-4iÿ|x\¿íõßJym±—üw›T€‡_Òw~h/«°øèë`Ú?qA-ª0þɑܞ/pߊݺ6ùÌÂiwãÓ´=)f¼ÚÍ™÷ùÄ@tã‰9-ýÅÆÁ“³ChŒžd@â´¬²1-‹™£…"b´\E¬®H¬Ój§Ê‘+s ó¼,‰Ù€ÌkSÈ’-ý§²d q.K¶0 1[($fËRd]h¶ýXQ¦-x,K¶( w†¹4\ %žWóù¼yʃ4RdéqÖ‹êÛ2¾ ¾†(Ã3)-n½äëûÚÃ\Tiò^²Üй{€ƒ”sæîiû­¾âDº û™i÷u5G~}Ømׇú®põ$vsÕ8ŒRŸ”u}>!ûOiIÈ)²•ýÈ’Sd+!¯BV×ì×iN¹b?² Äxdb<¶Ž @ Ç&°Dc?×ë'€Œ ÀãrýSq)ï{A«HnA{± õÖ Þlæi^žfþ”9FdEÐZÃCuVÄàçÔ—»]Þ*ë¬2*¹(sŠn(“Y”9E6”y²®L¸ƒíHir Qš2k“‰Ú¤YœH'Du2 ‹:)d–'2Ë“"f}.&Öô9Œ“Zô©¢zënéSE ‡/9ô9cî¿Ôìi£p!²@]ºÓN˜›mmJAñfwíb?ÿŒúSË›ÝHôæ Ùôæ5Ȫ7ÇW ­í½‹7û‘Ù›$²x³™½I"‹7û‘Ù›òÍ›ÝHô&‰,ÞìG½I‹7+Þ p–Þåt‡ÜeöpÜÓãÛ™)­Rw½;nëñÆž‘7ÛÍã†ØëŽ¡ÔÅgSvËgýÈâ³)²å³«uŸ¥¹­¯Ñg Hô…DŸ1 Ñg}Æ€DŸÈâ³~dñ…DŸ1 ³Ï("úl)±â3/áT²ŒsQþ¸¥s^j&ø^Þ¤ýß¾™|íø-¥T÷ìKmçÐjš.²W¹'ä‹„Ú_íE¨SvK¨ýÈ"Ô)²%Ô«u¡zhÎ_°û4…J!Q¨ H*…D¡2 Q¨²µY„J!Q¨ È,TŠˆB]J¬ 5m`mûÞ>©4P±ŒQÎéÊ˺ç×CÞ;ã)o¢ñ÷Ýçíæ8E}{þ½Üâ#ªJªÎõ%Uj óŒ«WüsÊ~üXë·p ?~ÐÄÎn_¸‹¼Ÿ3·»Ïµ^_xF Ô-Œ›C'[¢¦¥!œÏïŠÊPÙ8º}v Ñí×!«Ã•…BHGWd@–”¢˜R HL) ‰)ŀĔ¢˜R HL)YRªYRŠBbJ1 sJQDL©¥ÄŠF{âШzÀQ–M+†Î¡Þ¨Ñ)³­Q(jt=™(Ïþ*.òœ’[ò¼ yFžÃ¸°)Ï~ä›< $Ê“YäI Qž È"O‰òd@y¶‘EžýÈ7yH”'åIQžK‰uyúÞÁÞJ+Ñù†Èz I¥€…-«¼FúaÜ%oüëë&·óq<ÞÓæÏüð¼þ¼i´ø`­ˆPÕˆs«Ïð÷Ÿ¥ ðûÑ¥¡¤¹ëÁèUZ* wL̳{ð;PŠÿ–_YÜ endstream endobj 363 0 obj << /Length 4166 /Filter /FlateDecode >> stream xÚ­M{Û¸€ïù:Ú‡ øxlúìçÓvw»¹m÷à8N¢Ö¶¼²Ý6ÿ¾ ƒ6Œ…9ÉOBé%AÎ;åæóFn¾{#óço|ÊÚ(cDðqã½Ó4m.oÞüö»Ü|„ÿüq#…™âæ¿ó¦7c½ÐÑÂß×›_ßüÒú„1®÷#r3 ëmþ‰wïßüé[7ALAªÍûOðS^5ÁþH¡‚ݼÿ¸ùíì§»‡íîöü÷÷?¾ùæ}ÅÕQ ¯= xaÉ}87òìëÝù[ø¸z‰7R‹à¦ñÖWx#ö’þîí»w ¨¶ÂM‘ªƒPvzNýéÏ *œ{kx¨6Š)ÆçÔ_¾kP}:j"êÔï¿~h`'+€ÆA ªä‹óúÍåÝKªÕRXm9°VkøÛ>Çn¿ý¹Mgvbick'!í³6þˇËÔk¡ÝaK[v Z8«ŠsPoE˜ž]Ä?_ìÐ0‰èÌú#m‹L5jKágÄ:Æ¢\Ìô9·à?¥²× ç)„Oç6vð3ëÎÜ’ëàŒÅgÜûÝõ#!ûñ#Ö“Aš%ù׎àOBB,W&P®x8çFLàÑ™x×±;Ñh!SóRHT;2¡’d)$z‚ˆñˆ†ÍN'Z $Gdñ9ÒH!Sy@!Ñå H7‰`=D©®E6T’Чz4ö*'ƒOw-A¹§a;ÈXÎY ÚÜû%ñz÷¹„œ1¥xd`B®súùaî¯þx¼º½üÚQçx kˆ£iþ¶£Îq¤QZ–È·w2 Zz‰î< Ùv'\™6Ú Ht'…ÌîoW+á'‚#Ûµ¸“ iP¥‚…B¢;^‰è Dw®E6Ü©½pN±¸SOð=Z°™‹‡:+`ßœ H4gͼúϹžÎ®®;âo^=A¯#• ù‡Ž7ljś±§M"j“ ¢5O"¶­iœr¢­É€DkRÈlÍñf-Öì7k‘&¥IÑ™ Dt&ADe®%6”©ô<‹2ÕW¡Ë:i:Óª&8EJ»QiÚÔ“\0_ÓfpÈ®<Ç‘(O Yä9Þ®(OªaQžÃÄ"O‚ø$Ïáv-ò$ÚõIžãH”'…,ò\‰lËS=å´¹œ{{áà´¥é!mÿ¼ßÞ\\Ÿ¿5Ξ}õ¸ßÞ?l/Ã6Ý®uzý~´E›0ØV x†°­VåZáÓÕÅýöÃözûlýµ5D=íÉÎßòj¬ÈVL)të¸{¼i ¢Oé~uš—AMÝ}8릳]]>lyª‘¦ V£áØmœ0A-wáv·¿éäÆñó]rcMí寓Íܘ%5GŒ¤3qT†Bbnd@⨠…ÄÜÈ€ÄÜH!sn'–ÜHKnd@⨠…ÄÜ8"%7Ö!ÒËk‘ ‘%”äéXÀON6’{8¨¡cÀð°Ç‚xwqß¾bdzÐf ´šº½=¤¬ÖãÍEžãmŒ/؇ŒOC6åi&áü "Ê“B¢<(O ‰òd@¢<)d–ç8±È“ y2 QžåÉ€Ä!m ‰ò\‹lÈSC€[ž!m#óXÒì ´|…•zÞÞG3VÿJp‰Y¢ÿñÃßí˜lü€‹ÉjjÏd'!Û&ƒ˜ÉEÞ5º'ïSˆMwC@û#–ºa¢º)"ª{œˆæ¦ˆhîq"Š›"fq‹· `ñö8µMQÛñQ¬]ÇFÏÚ+‰ i§(ãYãÆI'®.qŒµaû0¸î Z»Fam2Z»&÷­=-Ö®¡O³˜/vçêlÿ׫ÛÏ_: ?åÅáõŽô~²)q=®ÞÒ0(q"ZœB¢Å¨q ‰g@¢Ç)döø8±ˆœ ‘3 ÑäM>"EåuˆôT¾ùÒåv2",kîØÉ y|ž6׃ ád•×dÚäàlò|L%ÌÐÚ¨ÑݱèiĦEešÞ2‘å ¢E)d¶(-J!³E9hQ y°(±X” ¢E9hQ ™-Ê!hÑ:B:]MlH4Â'Ï*<$åq¹–c, ÛÇÁuqТ5ú2Q£5ù0êÒ=¦T]ÊÐòE¨õNôŒz²eT;i¡{+È QˆÙ¨$Ê€ÌF%‘hTd6*‰ÌF'¢Q)b1*2•D¢QÇC¤µ‘žR×"J pŠx–æ±!­£ŽWjzͳµ&“SÌ´ BªÈÀ×r‚þó#oÏ0+"oï"ÒšÚéIȦHcšlA{”ˆ%ˆ¨Q"j” ¢EˆhQ‚˜%:,í‹CˆèP‚ˆ Ž¢Ð:8z ]‹l(Ô[ø)–z¬ÂO¡;U5­o›‚ 6£‹åHáÌ3ê§Ý¾5+WAkN,Ð`æÊz³m®mQ¤9ÞÂEš5¶'Í“Mi›#VÊá ¢5)$j“‰Ú¤èM$z“BfqŽ‹8 b1'ÍI!Qã!RÔY‡HOk‘mu¦›&CÏ*X—V±ÏnXævxØïn?žÝø°¿¸½Lõ/ÛÃ?¹³û«‡Ç»×ŸäX½Wí “lë„2<Ï6ý[Ω—··/®ÚÏp¸ˆB…Ñ¥Õ”6KòýnßZÐ-Nó« Ðáƒk`y´ûíÃÕ¾ûª!††.IªF÷’ÔIÈf’§U¤È$Å@Ä$E!1I1 1IQHLR HLR2'©qbIR±$)$&) ‰Ij°Xšˆ–&ˆ(éñà(’®ƒ£'éµÈ†¤HÓ°<”bÕ$\xLn ›§[…jÞ2„Á…í°Q/¡·©Ä}¼I5î‡yå÷«Ö0:È,½›Žc'"8Ã,÷áþ0`Õ¨°£PÖq`uz¿ItKîÓàXÇßã'˜X°; Lœ†lú[»ù%¤Àˆ(p ‰g@¢Á)$*œ‰ §ÙáãÄâp‚X$΀D‰SH´øxˆ‹×!Ò³øZdÃâ2ÀUax,.…R… }Ã^oï;¯.a8éO6¯¨=›Ÿ„lÚ\¹ù¥¤Íˆhs ‰6g@¢Í)$Úœ‰6§ÙæãÄbs‚Xl΀D›SH´ùxˆ<Ù¼ ‘žÍ×"_ÚÜ@TFžå‚¬„R—²Ymsør]Î'Û¼ÞëÝŒÞý»UœCY_å@GwèlÔè‹/W_W*CË¥ÖØŽROC6•*ýüBJ©DT*…ÌJå@¢R)dV*•J!Je ¥DT*ÃõŠ«“.®×Îê¤HT*…ÌJ]l(5Fax2“Ðñ?M©éËfpE¡¬ÔÅ~¼6ê ã)j.ÆN›%·;êý-#[k%‚Köo÷c8íèóºçó“-Ÿ›Éϯ8 }Î@Ì>'‘èsdö9‰DŸ3 ³ÏIdöù8}N‹Ï¹D&‘èóñAŸ/B¤çóµÈ†ÏC„SÉ¢sPEÀ•D^™N¨œÞØyÛip1£´°KìÝýÕãÇÖ;˜æÍ8nzMpKnzŠ»#Ïá6Æ›} hçfßIĦ:áhÍ+1ÑœÍ9NDqRDç8½I³7‡E›°hsœˆÖ¤ˆhÍáØ(Ò¬c£'͕Ć3=ü?ÏJF&h3×Uiâ´;lk×ra~=ÁûjÉ¡äU–…›F#œ[r—³Ð_Ú3]“éJÇk­çé• |óÑ §ØK(œbeõúZ‚Ò^Ïë5rpÓSÖ,¹—»Þ8Ó½ÔÎdïÓÍ•¤èçá9ˆ˜£($æ($&) ‰IЉYŠBæ,5N,iŠ –4Å€Ä> stream xڵˎÛ6ð¾_! ˆ‘Ô³·.š´)Ú$mè!)ÙÖÚdÉålÒ¯ï¼(K¶7EšöÄápÈçÉ(ØQðÃM$ãíÝÍÓç6 ´VE’˜àî>ÐÖª,̓4É”±Ip· Þ†‰2‹¥Ö& _/¬Kçêv»XÆyv‡¡îZÇ“¡Ã1 ­ ×eÃsW•ýwî˜nUºjÃà®:öµêµQ¶›Åw?6R)°_j«Š8c1ºŽÍ’p[µU_]ïôéó<(T‘šå_Žse Þ÷¦ú°0y{@«‹ðPöƒC0»{F »Š²ÙvýB‡õ°Û;FÕ-ó±Ù„‘Žsg)è‘xܾzùË‹——òØX%ÉHUöÂE4@´Œr]óÔŠÈRpõþÐÔï"{j¸I7Y’’à’VEÖ@/ÈL\Gš"¥ËáH—3EúnÕÀå`ªÃ=/>ÀM*Û({žÔ­Êv]']QA+óO*ÐÊæÆS}˾:žÓw èc½/> ¿¯ä’Æ$*5Åü’ën:PŸ«eOR„ï¢$«kP[8¿úrE¦tžŒR/ü´ºÚä*³£ÐåÀç±"‰¹à[žn*@3 ™€ç‹<«ÒÕ«º©¼ç'^x}¤+tßõ €þ~~-O ·.t6¿õô~ÖZ¼Œ±\‚PxŽ·ËÛ[^DáÃ&ÀDx\oÁ ¦ò?aôo/^¾yÂ~{6‚?3%¹6±éÁHÐ&wè3íV‘ô:¯ç²¿@Ysˆ nÍ Êã*Æ­Ár(bð‡Ù2á£ÆhƒŒ6r#Üqµ$÷Eßåµ#»Rïúî¸Ý‰r§ò¥,“˜pÅÚi÷u«€!#Ñ›J-–I…wLjÑë5úº]ׇF©îìêøl%¿ñä$2o*õ¦jÑRŽ=Ž©G:W4 PÑß"ë1¹<}®ãY¼•ʌ欳³=sOÈú[CôGÒgw7Þh@F4Ü2’²Vë`½¿yûGl`ñ§ ‚Dº¬Ò6¨ ÞÜü*™oÌ2£ŠÈÐQ&6ÌsSaœ‘såU²Bi/Ÿ7Go­†¬•}K““ ÚJDðJDô÷•„¹,ì$VY“|ÜòäsÚ_²*ÿ½ö¬.õŸGʘ8H"­’ôëô©Ì¦†ŽÂ‘¸b`¼dZ*ÍõÁÔDF庘3lWÛ&@;{m°{ymðŽSlBW’eþö"øãÜwï#öü}¯˜þ‹W„å®Ý,RIþ…7ãôð9ic85þ›ë«ÿNÚgÿ»´M‡IñŠ‹$*Nâ“ʠìø*ÉURX:*ÉåýW˜€w×3F¡šÏîcj_‚ËFÏÌœŠ˜, «%T­Õ<*¨ôæ•=FÂÒ—@€ EHóÀa` J‚cl(qÈÂ} ¡©{ÆSm iÄs±²Ý8Fò¢/|¸?óÁË* ™Ä¹%h˜ý_ t¿@ÉÑ=…GIŽ ¤<@ôÍL©Ö§ƒ0±$ôÀ#‰†—Õ¶n[.¡W˜ÑíHòU_s†æréX!uÞÑ‹ð+n:~r'sÿ$„«Î«Ãû®þ ^们)’“¸ä¼VÅjêÕ©xšz±¤gú™·É®Ia‘@Ç9ÖçxcÝ Ö3r|°÷ðVï)lóžOT±¤Ð*~È¡j'`Ç#÷²‰ÞS]ÚÆ‰•ê}õ¾©÷`S´,QCy(LIµ”Âèšl¹’þð™ö¸{k›IÀÃ#üýŽ© QãZ™ö²Ð-úÓB,ØŠsÅÎ_GjõybB+dõHKwG”ˆ‹È‡ºi)>À97ÅD|òy\!ŸÎzð¶éV>~3wféRTœ™pž©F¸äp(¤ï'ÿB¹óÐX0ÛSÅègå÷ïxA,ð²?`Ü5‡á4F92ÖF|&b(½¥ä|ìK}?€ãÄÔà×ÈAWÿ%K ”o'ÏrT0´ß¸gùë<Ã&ýaÂß-“œsvRõcí¤6sÝÞÎ׌KñS¶šÚF:©Õ/ŽÝ\³#¤½–ôåÛÃVhqóÌòÖ»~ @G†|/@#3˜3v¬AÇSþ!@âÚ²"]ªcïñŸŒF.RÒ!b´uÄúÒ8ŒÑ©-\¿¡³‡+ð¶wŠ‹Xøà÷…­úŠ;p üÓÑÎÊÿí$?§D!&Å×Ax_z»™”\S“ Ðèó,&5ÇZ^S'3"hþíù§ endstream endobj 377 0 obj << /Length 3277 /Filter /FlateDecode >> stream xÚ­ZÍ—ã¶ ¿Ï_á£æ½5#~H”r˶Ý4i¾Ú×K’ƒÆ¢m½•%G™™^ú¯ @Ù²5³Û7s±("A~¯v«xõíMÌÏ÷w7_}ÈV¹ÈS•®î¶+i2a¥Z¥‰J'«»rõkô]s»Öi {GMÛܪ,Üã@„vKÏŸ‘ü µ‹¦ÄF}ø…Û¶£ÆßýôÃ/·™ŽÞÑ€‚ÈýŸ]ýÀßõmý'Îëøóª§çØ»RÜþ~÷ýj-ȧyÂ\tüUQãø$jCu+£¶¡×¢ó»1°< ûó6RU÷5“™]ƒ»ý-–f7vU³#Ò°'&’‰MsƦgê«Úž VY-¬Ñ uÏÜûŸ)иsùëDÄ ~UÔu‹S>ðbíVÇ $Øæl»¸o« ²Ÿ³Jò,*+`^»Î‘ʈÈ\C‹¸¶ÀuO„aßµãn^5Pv ¸…}i%+Ç÷ms¨q¨ê#¾ùÛÝÍ7دäÊ(#’X®R­E¢Ìjs¸ùõ÷xUBç÷«XÀ:«?ô°ÒBê ZõêãÍ?ÉLgËeEªs?•V,‚~¼Çí€\ÉÕXÛIúl5ÚÄ×fóo4Ì¢ÈCe’̤s•© O+úzA,R&Â$“"ÿr¿¹‡J‘à”Iš¿F*ÍDj­Ÿ :üš½–B&b= áa_‘ÍЦà4õ ÊË}\øŒL˜ÜLÓVÞDS ,¯Òm‹±ˆÚ»a€sÔ¿[’ZlEr¶Ú±v×ë­µ„aé\mg»1qúÜn)âÌ|f~ ™Ëù~LœÐ~pòi?H=íg öí½ÞÂÆà”€n^4j‘gz•Æ9ˆüU§C§VHX§2’%ôK±p.d.ì’EL2ô{,ˆÀî­gO°Z«Dƒ<õ\àx–Îì-{ÙŒ`ÛÉÄ˰/ØWm tعîÑ€"vHÇ¢+nèªÿ¸’(÷ÈÝû-ðóÁuÁ6À#¯SEw'wðONïbµÌ¯fÃj djTK> R¤F²Òt,“fWI–¿JÇd¯ÀóáT Lõ‚Ž3¡d:Å { 8òí*1‘ ãYÄÀ‚ú¡k›Ýú¾ÙH 46ÚûPˆƒ@`eUƒÃ Jø¢yqB28:¬ Hðêöžø[ðÃ0¯±:BÝÞd䯲E’‚Ýûà ½E6´ôœé‰ÝØ®V“8#ˆ‚ß{ž±Û¹?F×lžè9õLèªvìyåqð¬Çs¦w®à1´>ªjý'1LÒ£=iÄûˆ@£¯vMQ{{†1UCÔ;– 9‘%u»5þõíÍêW?Lúîì€XR$’®ˆ9…ö¬BôÌà8zV¡A˜R%Ñ·äÊ`Y›D;Ÿ´äK¢y©·õ˜JŸMÛ *Ô D€_õäc×ç‡þÚ*Q`X<1á7Ù¢YÄ' E¯>d˜‰hd ë®ކdôH}@Ó-*B>dŸðOÜïÛ±.©Ý6õµÆÞÑ‚lÇñ™™®—T F´&mGyQ¥õ®í€Ç·Èé¼ ¸~ÿþZ8 €É)\Ka29_Á6ˆnë¨q²,¼ûÏj vóaðRjhPéÐî¼ÕÁ€E'©X­¾¼Ê|r4ý‘î¨Ù–}¢%¼ÉÀÂCç äc ×sS •Y5ß,¹ie’¾2)¨Ÿ ó­"¥ 3ãxœÑ²ŒÑf¤w®.   œ>óÁ¹úq‚J0,pê *8Rs:SlY°–ö~ƒôÒ¶1¸LH–¬$®Nÿîz]0“\dÚÌ<;Îê…‚Rã6®ïÁ]yÑCÏ®nïY˜µ­Š³0›G÷ã@ƒ81ÊùP ©n½.I‰^?`ÅqšÎCϲËAvßÔ=zàOìÒQ»×­‹#È%ú˜6ùÕ¥/È¡ç¼-ß8߯œÂ™«Ê%‰ƒ´ÿ¡s¨;\Êì´áô(¬Q:hKÉäOÞÞâK£&âÞAjØ¿,Ù“¼J"P  ´xò°øÆ.“ŒÓ²qƧsàߪð<X=pçÊçÓÞ'oè()¥¼ŸÄ8‚mŠaÐIºQÝ ŠzÀåÛî(ÎÊ8z?܉|Ï>=Ž·f``| %xmÎ:6ÂØÿËë½ã-Б&x  Xå‰ï¥dÀgç4rr‹Ø˜Ü"¾°¯¨p;"¡ðyÀ#ŒU‚†'b—-LÅ-³Óéäöyf¶ê?«20¨tA"”ļ|À穳·t¢ø¨CãŽu†rtb¹“(Žš~ÀžGîZ_–¯øoŸ`»åQ.øiÿ ):X8Òú +} þrÉ.`È›&ЃkOôæùØuUP´g1ÓPìÜóçöCÕõÊÁŽ5¸oÚ¼±e,èñ2ðQ¥¹ zæ÷Bdn…5öó{Rù¡ LÞÄ« Úç1k5I}ƒŠ€½SŒ4J¨\^‹÷€R¿ø°w>›‰QLÝ@™z9¾µP’4–l¾$É·Á'c&%mȤÐ(°>…?-‚z—|@¶ã 4zº8˜FQ\³Ó<GzÛ"\ÀôÂ(@•ƒ ßÃi–sN9èoÇfÃUç<§ÀÇ¡ÌàˆZЃ6Ext0ß }à1&ˆÝо¸j…9ßijM—uÚ0P`¨±MÈÃü'ûð<ªûèž•è9ü"¸Â¨¯šÏùÒÊÐÝÖ’Ë<ÚUdÀ u> Ì¥Õ€=òÏ 9-…”IT¶|äinÎT3┣fÓòÄLAÄà·É{qá#2É–j hÝŒeBM`ì™ûG¤HfŽUŸ›ÍÎç3;Ìà†¥Èyaéc¬¹Ãû–3tÌEî=ê0¥›äŠªí’ûâ‹D}î s÷‘;ýÒ¹£Á]¬§tgh8Wç¡Ç{#ƒ'áЮÓí‹f6áTÿê‡õ§†ò¹†f |‰¥CsG×½6£•,Èœ«à¼÷’z§+›…{¡%S0îì’÷aªïί„bíïq Õ€þk®„âT@>ê§‚ýr•º8.ÞÃ@}˜Lš/ÙAŽ·Ù›ì O…NÓù¶]± 7Ó™„ÎD¦Ó·XÙ°@ão#;ˆòV¤×—›qh·Û¥ä#Dä'S‘Ân^•|d¤~*.‰K·Y¸1RF@n9]űKoÜ®¨-dé||ûÅ‹†5¤^€R/n ß6 øáK„ðÏ9û<³þ¯(×~x¾ŠN€Ù)«Ñ ¬ž`sù>,¥íŸô¿¾ÝÂê²%wŒ;¬é©T†e6-Ö½ž»tý¦«ÂÿÎæÏwxÇ‘…ؾ®¶#BÏÓ…ˆ–"ÝÖÿßF2Ø„nF_"V+g×Õ­ç vrúc¡ IùJ²1qôw°•‡`|rªNCëÀ±ÂŠ =‚†{<ÖEÅT*ϸ–(!‚™_Ý]{èGñ§b•§\"ßçNg(Õ1v<´¡_(ãi»¡˜BXÊRµxßÄõ÷ž Û¢cJÅ“•eêöÈ×sqð-—‘jì—cŽJEœæŸ½À‘BgjvítºQ”øgHÌ"S|Td:¾ëð¡ß endstream endobj 390 0 obj << /Length 2635 /Filter /FlateDecode >> stream xÚ­YËvÛ8Ýû+´úœ!‚ìºgÆ}ÒÝIfï’,`‰²8¡H5qÜýós R¢LO”±WÀª€zÝÂÅí"\ürúïÏ×/¯ŒZd"‹U¼¸Þ,¤Ö"‰ÓEl¡´Y\¯#"!/—Rš0øG¾±}Ù].uõ¾+ꪥŽV—Z[[Ýæk¸¡ûËÏ׿¾¼ÒÉ1“$Ê@·úÏïÞ¾yý–È —Äh¸ø²Z¿],–ž|)S¡ÓŒ'½Þƒ·ŸÃ{yy•±Ð¡P‘Xl-dŒ¤„HK•y^q·³EY7$o$à«Dióàÿy8ÿÊxU`.þvü÷§l/%QË âÁ¾åeP\úA°ÚúWDYó"ù7¿N½9PaS‹¥—g.2ãÕÐÖeOçÓ"7…¾–>&Àþþ/Ù7õM™ï–L’൧ßÛ¦+V}i›4@vÞ%ÍÞZê|G¢ k §GjÖLTì°òÝc;Ѷ–¡Hc=èâ{šS±FÔkýyèD„2šˆÛmv˶£ÍU·Ø±2ÁÊîíMQ]‘“ÚΨZs£èZ¦ašÏœòñcºE7ôG_¬¨û¥h·¶óËð@ÛßøCwÒ†^̘Å,ˆ'¼¨6¹m A5Ij‚«KxIÝðߺY•mî¹ç”I=Lˆ—nÉp^œ{ê2‹Dxþ©ÃÞâptÉuÍ.à¯êްlnÀN‡æœš”ŠDŒð1QÓ?fë`ÍáƒL0 ƒ›¾› q&t¨†‡‰#‘eÑ@eû®ÞY¸-KÏÊéÌÅ# P±rBÓæÜ=/ošz7RÍDXÞš #¡²dºµ¯—&lÙç­pTBE'Vú¶îÀQeÒÛÊÂoê°PþÏpXLŸó νᡢš‹§&Q<ÅM]íŠJx}OÍ!³t ¼+ÊÒËs‰°È6ß4ÅÚ³õZ&¾mÞ‘ƒñ6OØCë1¬ÑJ‘fÞêw½3·^_üqÁ6*q<‘HM²0‘‘L«ÝÅÇÏábŸð¡!Ú#Ý-´š-.þ͉jºç(þ[JIŸÚ®±]~ësÎ$±E-­ñàá>”Z4sò+…¬˜>‡ø GKLį»*ó‡Z âï(<%$mé„üØäíž3™Òª+X•ð$iOƒ7c9dÔáh:vma˜_çD0fÏOf˜Ño) RH~°rby–=$Òtô;×ùšÐ"uy÷hTù]é鑘}bfô‘¶àr€#ªÎ ç-Sõ¡À` ÞP<'~=kdm91ÑИÝU"NOÀÂõÈÏü\Ø·Ý9…v4Šð|<ÚBsëwðþ— Ì–z""F>óœ»-g¯-/1‰¥: L D|½%L§]½3 Ÿ(2ާvÍ <ÉœŸh,Æ=2wú¢òèW.:Po$n‹?ócÂôð ËD¥ ÔCH›Î,‹jX#·ÍàöÔ÷Ûižv!iÕrýûóa|$’LýŒ©gaƒŽBFKÇnÝä€ÛT’=ôl*u¶ˆžS䬧x6\B'‰[*Ó=<§Âà~Æ3àxö NêöÎ\y÷µ!_êÑ‚ÉôT¤Ù9•¯Ïh`ðyœ·‘œF¿~õpi…jôIIæ-󦥋jÕàPrÏ’ ãÇZ‚þ$`‘T'UÏÑqŽ˜69Ú¦ëÞmó³ó²D¡s-9Ö‘8hZæë¡5ÉÓvÀ]‰öpiÿÏ…j´Ûº/×ÃLZ©÷nRÖp‚e¶y¹ç„Æq3¢éœ÷ÓØ¡ äþ~,ïˆrc[HyFþË¿íiÉ™h\<ÓðÕ'%¿Td€5:çeˆzŠŒA%OåJõc–šc®G…õ $…I̱Wh.T¸1‹w5RáÁÞïóöá²ÒÀÈF»xŽF•8…Â(¯,d8Ö„Ò¨µÍû¦hQ„¶Ç"À62ã˜ÚÈãM,BŸow¶ÙÍØj>-¡¤ieO² “IÀ&ŒFàk.ÛÌ™ajÜâs°MSDk=e[TÅ Wba‚§sUR‰M™îë¢êAOSKDÝÅ–˜FZ¢úž%¢ž’c¸s‘Ò­gù³é©z§Ö¾)v¶|¹î­8܇éÔ\ˆ@tél’ (ÓS›t’›0ð—tµQ”–ÍÃT‰ÝæUÞø;¢t"D‚ÐÝlìŠ?íp·BD‡X¨Ùù»Rj5É•}Ý·¼T“—ö›ÈD7@¬ð´`tˆÆ ¼¤­Kjë3ëZÕ=^?hTÆ:RÏQ?ÐR2Ò̶̿æå÷xá]ßão«)Å»Gn®}(–òMG5\Sq§&ðyv’%x£ ÇFɈòê¾Û÷˜©–J'²LU@ï Ê¿+|à( ŒÝ·9Lû\y³T$Jþ/y'‚@à,É'w—R¥ˆüjúÎ+ʯûj=Ÿi±. .@Ö÷jµH'SS™Ö1¸0éP©97˜ašÑšy¦8;… OØnì xhÆ@3ª7w¥-ÃÑ©="uœåºšf+8&êé•c*Œ™VpÅ Jšüÿ^'€—ã$~¢(xxÆ ‡Çžá)Éߨ •"rbf.@K©1 t†;¯$a›p\èŒ7fnž  eýA0Á| ‚=¢^Yw‘Oä¼ÐMÝs¨O°üô)1›îÕŠñ¾9bÓW«1ÚÇX¼âF]q–ˆjÔɇ;sËWuèÜßÏ®ßÇiä{-íG*~ËŸ¶¯´G(/ær‹ÊŒ÷tjGGhÞî¢e8䑘nöugçD¢è"&ïóMÞäÕŠSø#vC°–.È\Oû(?ŸÜØ-M¿ ÂŽ*øé²oó/€¦Á?ü{~ï®?Î7$øñ«#ÐÁõ@XT뼩»­¿*Ê7¯ß^¿ò«W<Šˆ7K»‡¹-ù1y|äðüVì\:^ÞX~ÙLå!Ý6ÜwמԨ ö¢Ê­ïîŠoÃo4ùí0Lo»Þ¢‰ŸQ±x©xýöêRÅÁ»÷o> 7¨ü¢î_뾩 ³à»ƒLƒ¿×;$¥Ù›è,s¡ôõé¥C)2;F;*”!Á‰ü²ß þgŒùËĉxüÑú££[×Å+ d–äeñ~T[ fˆÝ@´ýv@uM$K„‰ÌoL&R$„ÿúbà endstream endobj 413 0 obj << /Length 2397 /Filter /FlateDecode >> stream xÚ•XÏwÛ6 ¾÷¯ð‘~¯Rø›boNÒ䥳¬ÉÖC»ƒb+ŽVYò“ä.]û×”l9vÚ\l (Šø|-Fttþ†îüß¾9:KF6¶šëÑíýˆ‰$6j¤•‰¹P£Ûùè ùÂÿÿuû¡hô%R”’ëq"H<ޏä¸*Óeþ&J‘I~þoŒëÒÙ˜ò0æ i³Ú­‘ä2¾u«9γEÑË'ñ§ ?©Ê2lx6<©ê·Yã†_)ciÉþ®Š&¬¼ˆß‡µçuÕŒ#FšÏ>b*–ÖŒ"Æb«Âw-S÷ÉrŸÂs’2r™æcFêyP|èÄY$“NRÁ‹ ™çA~äÓ´^T­§å”\åMŠçÿÏïF?ð'¥–po¥_œ‹ÊŸš\çíÃ2Ÿ#a8¹¯Óeö>_Õß‚¨ªý`V¹{úŽ?Ù£—-óÇlî‡yé±ÈÂú²* 2’á•¥NÊȪ®ð’&ƳÉmœðÄĉàpBw²Ó¼™Õc´™;yÔ-|Ào«6_æÿ¦mt›nï©t¬8ë¶„kB…¬­(§44«Uì,ÑOœÊ8€w £o£nô+¥$ó MûŽÑ˜Q¦þŽçyS­ÚöÕ Š)cœ÷x e߇åWˆ½Ö{NÎcÿ%[ N:óĸrV:„%a(whÂÁYXà¡^6ñ²û,mò»¼È[/Uëå*¨"ÏüAðáÚ‚, Ó— Á…îí8MÛ‡l &Ÿ!>Ò6° ¹vh©ðgá†ér™—‹ç `pç|4ôó„úƒ\X „ .óržÕUûž@Vq ¤< ÈMußbBr¹$­3¯v¸AõIŸK æ’C™véÅ’‹×öéÅ’«Mð |f<ºå{‚„\ÅeD`w„EH§eë¦À˜_ýr‚hO„ñº½‡d`oôá:ÖÃ)^Î!%B€0ÈüÄ7N‹táÇWÊ„£5RÃÅÍ󶪛½Pâî³*Ö˰SÒ?ZÝïK·LÆÔô1õöŸRš\L'80äϱ Û5÷’Ɔï)w CnÅdŒ´‹7 ÉÛ ù¹+2-cà4Û—³ñ½HXÜ,‘„=Ái^ô±¤÷1p0sdM±Î\á=ƒ/‘šIp)n"ñ¿Ó{ýnêØ™&§ë:-ý0\ˆŒGÈ(äŒH×4 tM“j ´6JWÑQóeÚpŸÎëüÔGc”t¤Y‘6`Y ÿÒ‡î(¸ˆ·r2®~1'ÓÆÎÉBÒ×åd­L °ÐÞ^‚šXì¤_³‰~Nß$õOBØŸÐ71ÀÇñåÊrªåkr°Ùkýßâxp½óõªMýÐs-ütŸ_ÿA0‚ˆÐ±a8CñÃÎCw®4¨ÖÝ<{\9*—A¢Î|òm¼=ÿg¿ewhئÚaͶpÍPÝõ((ÓEj‘“Yr3˳Ò!"{nsKc•ìÒ0Á6, Ì«‚yQåÌ‹:¦FJñâ’vØ×Á/!øé_¶?TG˲™Å‚Á$†ýÅk@ìVÂ2rVd­7©ó2ÛÕúØŽ‚>¶c7¼©Šïè&NÙUY°~è¯ ØöW»)¯üìÎÓõC†wAVB‰Œ‘fŒ~ »wÁfŸ±­»‘/¸¼Ñ¯pyõM¶]^Y¢5þ‹`+;÷•woÐ î-íaëFœÁIõN©¸ãíL% ‘ôŠXoš‰šËQu–lýãÆ/•Ø9p%œ«fdG–`X/ °ÔÍï×`¢½…³LàcEw‘”ù÷¬nòö:°v!ÿO!vd½+¢ÛðXë{é¾Þ2¨J  ä@çÓâG“7^òÉí²+vGDì´^u5‰XÂö[‰­0â5Ø7‰‡7 L Ø8ý¡‡1º÷æOc—gKÎCïó]K ùŒcÈ“=ö„ä`¶¿³¸,ö±Ú\«³ƒ«p÷0mžúw_mÕ"–\¦w.0Wu ü,ϰW0¿!É|ãªÌ¡à T¢ÌŽk~ÊVaÖßÔUª (LUdàŽØ¿Ýwï/ͳkd{¯ñ"4¸~_gM:OqZ(6À:ºÂOWpéåõÑÕåµ_s—6Yxð®Ïe^²µg¸¢uÙ) ÏÌúSoEòžípÓ¹ vûQ(›^øcÀ°T„Ü×™wEv õÄyœlú ¾Â‚ë¥]“'îò@!»G†D«÷¸Õ÷å"ÔàQà!ûb T¶bƒB—çÀ-´Ï¼!ò>†ƒ:+Ì“ýY• $ yLQjC¼Çý¶ ¥<‰’10Ñqbø.†øálö qY­k—Zt—ë`à}G¯õÇñç ÿ˜Õe¾xpœHAì™L¯/ߡлŽ¬˜†FiVø,©±ÉZîP8ôb ¬ –%÷˜çj?Þ$0ç¼ Áø6o6×€¢6Ì!…× yÅ 4 TŸ§ëÇ»uýë®ë¬iöµZkß|«¾5ÞmOª"ó|_»¾+òæÁëéÅï/zw—Øþöá: Ä÷úY6O‹·^4 ªCmu!’®E¨½…·BK§Eû/†`ì³ÏSp:ï~ÅqZC¬ý䦅€˜- úy×6Üg¯­ê^b œ´Î« ™fíCheî/N€È)Ûç››‹É —Ðô¡IJé…/÷‘á*­·œTÁn¡|ÖEý!`‘»¡aÓZÖF>1mů4—ßa{Èõ ]£ˆ säfÊ«ØòÂ$†5Ф&!zùûÛ7ÿ¼G endstream endobj 310 0 obj << /Type /ObjStm /N 100 /First 871 /Length 2355 /Filter /FlateDecode >> stream xÚÍZÛn7}Ÿ¯àcü0lYU$!€œ@‰Í"°¼@v =Œ5³ÎxåiA¯¿ßS=­ëHÚž‹=Hìa›‡§®dw ì‚KA u5¸X‹£„Ÿ]TEË.)¹T›`‚lpœW"'F‰²S6áê2£\.v[]I˜!‘«1¹ƒ#¢‚ r  —8b ü‘dŒ‰ê(S¥„ž’M&»‰ÕEÊ6Ø’F\ˆ‹b3Ä´0Sr±`9‚;¥T'Sñ(EÍu¤+µ S·äŠ Ãm«L¸Eb=ö@p“Œ–N0aR®öZ°ð‘ŠZ˜ £ÄÑ1Ùã(L`f¶']R«=ñâ~bÆEŒ`TõIÐSV`ôV{XäZÁ®d'Á&8éuÁ‚‘ †&(tºSF fNX¤(ÐeÜQ#j•œh”À®#CAXe)§ÁpAXA-. T A7P1žRJÀc­C?eUœ£Óbæ“Ëà=ŒYñÌ„QÙ4šJ€…PVV¶<³ëÁ¨Š¡©°+d”Æ`?ÖCbÍ£TÉÅ-È‚}L^£+’*zr¶ *d=TÌJjv¥dh°T±h«uTØ<Ç4ˆ‹b††J¶ª‚‹ ÅÁªlÂí =@ÝèQ`c@«EÌ3`«!Àö&O!b2ó Xæèà`ÔüäÞFLÜk×üþÏÁè«ðžHä3T¶øtvv2úᇧ…CôÆ0H˜jôk½#|Ô.–îàÀ5G0v‚»aGpy˜Âê:™ÿqÿƒ:gì؈|u£âG?ë<ŸÊJ ó4¿]´§Ç³¥{ëšß~:r͛ٗ¥»†ðæÏónLÞÏFÍ€3[,/áwɆš×³ËöÓÅé첋-]ׯ³é|ò²ýâÞt(™ ÆL3¹ÀX8q‡éºnèH ~šƒx¸Ù}êîɦNV5{‚­ L C…áÁ>äò¨RåþQu™’ìÆ}Yç^·æ>oÀ}~€N.>ˆnl¶·xupÇÞ'¶%%Å5RR؈”æp±hñ¨·]Þ3,EVmê[îÛÕ*,@®~ç¾­}ûVú¶ÓØý%tóš—íÅtvÑa 'Í/Í«æGü@@8±Õœ‚ضgd2NÙ3Â`”àÊ‘¬ª—¤;þôn‰g6›/þÓt34‡§Ëy»hŽ›¼~eßý±\žß4çí<øÒŸ¶óŸ½ðíÅûæçÃ_Ï0üò@>„³ŸÃu“< ›ºW°#LC‘Ço`Ùäo`vFr욟Û7­ƒ}÷Ë¿Ûv‰éfžø…{ÉÆ y± Å R)ªüÝA‘B3öùógÿ~òÑûØì ä†w\£¤è+Ú Ê' ’bä±z33gX|s[~¦íçÅY;™ÞtÕób{Z4ÊV¤%`BQöže˜5ê7À¸±BIAàrN}· ?©PÝE¡±z”¶¤݈ÓW EÀ…'Å­ þvtxuÞž/AØé§ˆ™“nТÎû?–Ïvвå$“qÑØ[Eeî±ùF±mœ‘Ëö3Œ2IÁ{ù:eX$€[ªÏV–Dõ•øë8‰Õ‰†× weWuçÐEèAÂØyÛ Ž‚ªÛ’a‘¼m ž¾*Ñ#G(œŠ·-ß0áX<6^UQwêýÛÕ_Sü³®ÕZÌÛÖZiUÙN}USõ5÷µ÷µ÷5‡j)K|¦Cì£}¬|(¥&8Pýz²î(ût(p#‰2€êÊ‚bð¯¾yŽ~ÔË×Ë(Áçp{O¦ÈühŠÜ 2ˆEÙÕ@ä *zAd§šDrùéÝå¬#Ô‹{Ä‚¹%d—|c•\Ä—. ®cYNÞ‘=‚Pv®‡¶ ŠÉÕ öØö:=LÈäü|¶˜Î¿øÃ]ªõ{I,åŠê6nĶ7m‹Ï,Ã3ÛÙcùˆ}³!Þø–õ³ÙúìF68»‘¡g7³E–Ûu‡æÈŽDe·CY?T‘‡*ÖHx¨r³ÎAk»MǶëÔuå+m»NÏwëúÔ­õ©’iÞØÈïTqƇ=’å¼FÊêñƒI¹U¸i¸•ûò¾ô<ÙO2Bm€dTœHñdïX»rÚꆠq«Œ8¼È"¤Âʈ»L=ÈPyÃLtùØv´ËGÛW‚¶õ,ˆW$(P¢ ô!¬@Ó¦%ì`fÛW†9ÄîÊ^‹'MÄc°bÝÛžh[§©aÍiJÙÖir¿›Éýn¦šúün¯ÛVm¿û)½|éåK/_zç+ºÛÉroïšÄ«×Û»ÂÛ²Òó°wæpì4¢1V,g{­i~ôy€L¨UK²×²àìõ0 y`¤àK•g‚1'_;œˆÂÞ^•†èCµWbÙç¿ÈyÀ0ß:#§â핾z{ë¶K°Ãà‡·‹§sìÿޞΦ“³Ãéä|9ÿïl—“UÎ^ÔÞÿ3fŽ×Û"k±[y&9A…2“‹®B²:Ï×çâ"àÇ »k%û:‚`†RžKr%Ïv톴zi¥Öµ£üg¤FßaS¯ö…KE¦„¶#­ÊÏ#!• *aò%–›7‚ô^6?ØŸ~ñÓvÞ!CLÅ&;7óí)ŠC¬šJ÷j•R‡×*weÿÏG eEÇ a®01J…ñdÑ8P8 • Dïkˆ9!ü†¡l@7¾–¡Âvì6”J—V S±jóÑ­è/ýNÈR凎hì“üPÍɆs§š“×?¯a¢mkβBiŸA­ÚÔ·+À¼úx¤ûjÕ^ý¾Wú¶îTk&²cDÔ–hK±ï‘ÙQÇj¬¨œÊ®!6üt~‰¨å±w@¸v·C* ò«oïØû0»­öê@m¿µ3à›KÀyB‡Hq÷€Ö $XÅ5ZŽð‚¼'´RêÇ5IëÙ¡Úv¾tÞéÖ7ʼ¬û@[sÓ˜•xL5æqÚáÝ ‚p´Ï;QVÄ×ëÊÝ[öÎë3C»£(Õ¾Boˆ1 CŠììË£€º,pòP¹> endstream endobj 420 0 obj << /Length 2090 /Filter /FlateDecode >> stream xÚÝXMsÛ8½ûW°æDÕ|ƒð-ž‰³ÙÉ$NÙU{Hr %Ê↵¢4^×ö¯o7”H™±’If¶j/Rh4Ý÷òä.áÉË3~ôqsöì2O<óVÚäfž¥˜³ybcR™äf–¼Oß ýqòñæoûiÉûÌpž>g“Ì›þý?lÓ‰téb"ót[nh¨XÍPpéë¨{ÿ/ªò®.7ЂûôíD¤+ÒÜ.JRyµ\×å²\¡Õm±­šõ7óh›ô¯6Õ²¨3t0‘œiç°É¼‰Þÿ¼+jД"}µŠ¾U͆z®°£©¨Ÿº.«š¼ùuµ*Iº.‹MÜ´aëõ]³©¶‹% Ï;ƒ¯‹Í]™]O‹:N|Ó¬È5>ôªÓLR>‡4w›b¹¬Vw«lúkQÛ"…}Ch¦A¬©S‡à–„Üpɹ…ñã$ÓB§ë5£1iþ 9iàO>%ôËÙ±³¦:œ ÎݳVpÁ]ƹθ1>{óKe¡™ÒVb e]”dPFdî9æYˆh qVÎ`ÁʳK1˜ìræúf]¼}óë«7¤7\D{fîôš5VG{P !o„Ì™É ¸¥X.tt‡‰èP/‘èÕt¢DºhªiIÆÀÈáp`ˆr¦rOFŠnê9éöÏ‘ÌJÕù÷YÌ”R¡z•ÒTæØ±7’“dqê 7‹ª…|Z“ÞWu’M×(Œ £-·4Ø6Ë’$\•¶ RB¹‹ROÁ¤·“ À ª‰:få:t•«Y(° Ç‚Ïhjïó ´-9;ÅÓv ¥§µïãVg弨Õ[jü61 íâX8B(lÃ^1DívC5Ža[ Üÿp‘]\üÀÆŽì¶­në’”a9–kÏÊŠ¢€šy­C¢±j‚±\¸£9ý\£´O5ºtNn¶U8ÁkÈ@çÄí¦XQx2@Æ,‡ 9(…Ÿr1£3á™4¿ËÅ·èÂósò‰äÀÏå´YRþ›¶:DüÏrìÝË»w§bV‡EŸ—Hé²XE¯b4”Ešˆ\4Ë\î@ÜF’û}¸=Ç’×È‚.}¸ÝTÑófH%Är½Þ4óou!†Òw‹/gƒíuÅ2Ýmÿ`÷_L×Ñý?]‘W°h½)Ú#ÇÜÁ±¸3ú«cÚ€IaOà7¸+öÇú^]^ÅÒy‘.¶ä+81ÉuZU]m1š4pµÃB ¸úúj’+òõ“H€îàß1ÛшŒ4rB‚ÜÑlãÁF²ëÔÓœR7%Ó{ü)¼0/nÎþyFL-‘-K(à@ïu2]ž½ÿÈ“  2àúä>¨.Å´r ÕÉõÙ;ºì ¹bM9ã>ßÓP–V–R²ÜŠï±²”–IЬ|W¬G¨Tq–ó¼Ëôud§i5ÀN¼/¢°Gxj†ƒÿMYÃ1û ë5ŽÀ:$@~ðT¢x¿¨è¬Œ6pmP*²KÑ»4 Ðo›u;JC×0þv·Z n7eI]mïN‰#÷ ¸ëö•£§8FLQ†¾[!]{Ðm@Úÿ(§a·yû{a jó#‡¢i¼—aÿ§U§ûÕµ·M½‹å;\öÝ]Æë¾­C3hw»[‰ò†Ü6C·ƒî¼[$@)5†ë‡{ü×eÛv†‹ýU;–‘}ugŠKZþi ì6,QRw/t8x¤-Û…æ!t¡À¼A ì|æê`ïFC7‹ÃZx „MÀ“»rt­¸íîIÜ@…‡§·‡[ÈU„›ÐzxÞ Ù¦œóÇÎ1§}§"FŒXfµéÙmh8ÿûk¼ˆ‹8˜é¦ß<ÌŠ¸¯¿H>²”pLÖe=Å\êˆÏ®¯É™·?àèý8~*%˜sy"=gRäO¡˜d>÷C¬ <¯eLqáOá§rð¨æî»¬Œ$àípeD‹‘æLHW½ü³Áû†œŸJ¹ )·G)χ·\RÆ£á –ô–Î4«f\=’žz]TñÃÙ8K«º¯æ`iðk¿£)Ý=—¿ž {OJ=Ü|„Reúà½[Pˆ,ˆ=ì4Gï½ vr4 †ÿ4HÐu$èº`¹! :za»ý]0’àAÿ3 H_Hâ ݵÕé£ÅCYƒjd@·g@G 8š¢û Ê&QN‰d@ˆ$ƒ£D2 íIäQ’6gB¨od@~~q ã^|äœbãý²Œ;,ùËhž3p_rÍre¾ê5äŽ+LYeO@½Sê$Ô;/ÿwï›É”ôL@]f°ûö¯ýj¿ó»íaÛ{?Lí¶ ¼*Õ´jÁ´û²ªýÌ#n‰_ìhòàŒ&H ·hvõ å=ÒÐáâ“øäÃ'nlÎÃ¶Žƒ@•U.\:ÉCN¸SgÈpùugHð1ô‚Wù—¢—`¹Øƒ.Öè|>bP¸‰È0¦ä©ØÓP_÷HcÙ€Xxmô@Ó@ú&ˆíÞ)èÅ›¥ÄÃ<¬¢ñÝáíûÄuØçâwæ7‚º‘n°»á·´DàÇ98Õ,Ï#Ø ?Prú/#‹Ø„ endstream endobj 430 0 obj << /Length 2283 /Filter /FlateDecode >> stream xÚÍYÝoä6Ï_aäi]«Ö‡%kÑ—^ÑZ{ؼuûàÌh2<öÔöl6ÿý‘¢ü•h³›¦ ôÉ’L“EþHÊYr—dÉ¿¯²ðü×ÍÕ÷¿ä"±Ìj¡“›CÂ¥dF‰Î 2OnöÉï›Ýeh?d\nÿ¸ùíê盫?¯8|ž%<áZ0CÔ ¨w§«ßÿÈ’=¼û-ɘ´Erï)O‰£:yõ¿˜`­™àf-xïvÝ[”úý/Å‚V*–Ì<Ñûó6ÅÆíªÃÃ6•RÎúú2q'·Mù¦ÙáÀc’jÃ2Á“”sfó<ÆK ±ŽŽ婽Ð÷8—›[¢ûcµÃ鑦³|$¬zZ z·§Å[’W·¸zO”ôªq÷+š~ éå”ìR¿‘l½¢]A‚ÌíæC–g—þRÖõ-”ôèO°DCâ×öÕP}D=`ÇRg›Û\oÊúâˆêö2РjèÙ´Mºka?fCŸ} ìºö¶v§>P‡¯N%PI3Ê)cÛhÜ]9«#`ß NîÕq¶ÈÌææè_ÊQ×jO´]ÙÜ…ÏmGƒáˆ'Ä+kZkÏC;ðcxë=«…« a™PrôµY–=õGÃŒ²# pQÌ|Áƒ?åq¤ÍÄ#p`ÖÈ TBi,ôÝHµÅ “B%é‚ðC&QB.(3–s=ŠDŸ=žF¸R–'Zp–kû\ˆ Ø¥]‡øJ ‚c…çëS€Ç¬ÚÅl°Qÿ¥ÁR©€ÝÚib¶7Œ[ý¼íWÇó2ÛkÓƬL_ú(ª ©`LJòR´ºŒ0xWõ´ÛÏ,3a\>·ÙŸ—Û$“¬,*©`jíbŒhVˆžrcÁ‹$9§&J×”±L¢‘i^Hf…}]&±þ•VähMy~"Wpˆ<)þÁ‚kÂׂ›úÉ`€*Y>9øÏda9) ±©«Æ•½ð®„ƒ?/å~Ëâ"<£ìÑÂý¾ ¨3kŸí8ĉÊí#­Ï1ìõ¨J©srVµvVI¸Šë„«¸Ô]ÕÜÑxDVïüÁ÷¯›öšÅ¾ÛúüÓWÞ +a½·ÞT±<Ž ðytE^ÀÓŒ>ÍÍ£o–¦§–oÚ縧D›rëOþÅÜ|öêc±!@ñÌ„ÐV€£’¦Üëbñ.c…njÕ«âÖC|#+cƒì¡­$Í‹8k^03;ë{À«ò™ŸÔõ P`Y ƬOúÇf*›r*Ç.'d ‚Ž^ÜWàT ‡c9Ðh*hÚèYÂjë ¼I%¿ÖÓÊ”¾Ú»ŽÊ®Üë^!T†[òù…¨$"Žê Ńÿã€ü_qµé@_gby¯Æ À1É͈Ë|Uuk–ÿËÖœjªy«æ3n"1²2vÕ`!È3…¯‚\läž•¶’„ʪ¾t±>ŽD žþ ‚ íZ0„aîXb-ö±jc÷O9z…XcWfšdzÄ àäAïï®!‚²¡•ÿþç-Œ$%M{×U©¸ä! Ö-ÐYð´“Ù£¹4}[XbjÔ|¾¨‚ñ¯áªç<Ð/‡î²â|çï„pô”¯³àéÁU@0¸?‚ãá ˜ñ7`£3ËñÅ<›6,Pã¡AÙÝ¥ô!€ >ŒðrpÂ~ПÇBÑ—ŸÇ@Ø“p·« XWnÚ”±rééþ("ô×~ˆæhà!ž×‡r8¶§ë7h½"À³Á›sLï+´Žˆ>0©Êû0%wÀÑòTèëªî×àN|ˆRWº‡(…ÓºŒ}ø9ÚDû öƒrßÐh¥NѤÛ"¥ž9ôÓÕèlÕ|aU¼‘ËÅØ;.m±ô@¡ ³1VvíÉ;<º½8ºKWõÐã¾Á¹ ˜§Ç¤.Úû4Kdxé}ºX¿DO)»ÆM_ú=£ÓÃÝãÂl0;UwGºâÝH¶¡ñ *Ï}.x%î^åÑÎY.—Eç,§ÎY}¹sî‡öüëQ¥·¸mµyC’0wÜOŽåxiÝôì[¶ÜxA­Ÿèrz¬»‚.QÕ¨¢™Tüš–cGâÕ~,CBÁ˜à’qØÊ«n´à¼ÝUYìü…m{:—!mÉP‡Ó]àOÇ6Üð»TÊu샺Úíf﯄Šñîa[ÈÍØÓŒsµöÀ5{ð˜Ùà÷¸Lb¼Ã/É÷i£…^Hч9º-þf˜šKo5qª¡–¿9RŽ4ËnðóÅ2nýIP.¯³T$(åæzú1³(Ì¿e/‡˜Š`ž·WÔZ> stream xÚÝZK㸾÷¯0öd#°F|Š\ä’}L€œ’ݾíîAÝ–Ýl©#É™Ÿ¯ø°EÜÓÓ- @.I•Xd=>V¯«|õ÷»|òüáþîÃG&W6³šëÕý~Å¤É ÆWZju¿[ý¶þ=gÅæû\¾ûðÑŒ¾¡–À¸£Ý}nÊSýøýf+¹Xÿø°Ùòbýˆ_›Çw¾Ó]9T‡Ïè *zÿöS=<ùVé vÕsÁrd×ašªì7ܬ#y³ó 管Eca[Æ2«Âf†v³B¬ief]Ñ<×n{¦Ï©_£¦\ ?R7ÄKŽãûªìë‡cå_÷íñ<ÔmÓûîSIÔÿÙ`÷U°j|wO¼°m–MD›ècë…»exò7¨ã²Ëíá\õ=©EJèËzjnÚ¾òÛiZG» Ëõp;;•Çc”\»yªÝ ™D)Ðú>|T|¼.3›xªÌXí×GL'¦´¡Ÿïïþ}ǰö|ÅVL™L¹RÖfZ™Õãéî·?òÕ/¡ÔLX³úäHO+‘IQ u\ýz÷/oÕ k¦aœ¹©¤²žõ±>ÕÃ÷~¡cù i«¢­hßR¯‡§Ê7NåŸõ‰x>ù'tðÄÝùí>DÉö¾_ýù|l;'CY S]Ùx“Þš·Îˆ·ZfFšÔ”§6{õ…lÎòï‰W V©ôº<Ö;ß»Cx³o;ßžêÞ·Ó@ûìŒv¾ŽD¹c %†eŠ›(Èßs.=T5¢Ê3Åt$jÚ9K€”2! ¾Be…|ÑxfM-!a'è¹›Iɱ!„ °-7™e6.í¯_ZJºö¿Ìì®Àz/3ÔÍ~f“]yxð"¡A°»j_žƒ·nÈŒuªÕ Ìsðâ:àg¢¢›ñÅ|â…ø ,xÆu&™Z)Q€ºx—*›ŒÐTß9Æça†i¦ò½L 0…A$LŸKX?ãùR€Ø$žÏ­ðŽÉ­ŒžïœÝ Ìz>}BžO´?7àyúÁ2ŒuÕá|,»0•Gã]$j÷^ç6ÏòÜ•uy¤ #Å#°|ÃÖÛÍ–Á‚ÐÚm©}Fs¸B«1ÀT"Ї4æ‘€†R°Ç«ˆîeïÇf‘À²,·ökH"q9¸š9sŠgŒÔÉü¼x¨ŒÆMU`ªÛæ( –I],´°l2 ¦ñ%þ™i­_ŸDboÄ <ä ‘ €œý ,UªÉÁQÉ!lH]H\ˆ-;PÀ†.€;o…~î,Á4àNÂôªè”/‡h³Kðêg ,á[Îì•C R/ÓÎÉ|³óq];`I LaÖ¨³h\,!­¹c±CZ<=Ò¢qAZ´Òâ눴΢·HmxjÑIˆ&<€Ó3@­œe`÷²bçcdE7"+šYÑÈ*|ŒU\ÃèkŒEdžˆßˆ± @η…X³ÀŠ´O)±‚ùg0÷+Â>ÉÜT9Éß„Æù¾ Ï"Ï yИç-w“9Ï k—à+s¤ˆ¾sî&™Fø®á Ä6ðØ„g×¶³¬È´yk^g4°(œ H?ÞWtD倚Jä!å~¸å9H‡­aKðåÒ*R¶Îqþg™¾…H'‘ö·¤™ÃÇ-SÒ‰æí0I‰•†¾€IšJb*·ç‡y„f¾„Í„¯w{lúi.Í/`EüøäC?_•1ä““tŸnúd(ôÅT¨ƒ×.èícÛôu¬ã1èHLJ8U!-Ć2 nœåÏa˜C½’aíêÖRUX*žc$ïëÆ??=Õ±¢îælýsž—¥)BfW>ô5·º­\ÞÇeŒ£`ë 3pûFÂ1‘é &bà‚‰ÌWhl6&†ã¥¾^m¸–znÁ §z1BTð­ïKýuÊ‚¹©”4/»,™([„/‚Ä [gPOs˜“/W®R{3 ‘  Sè4š<ÞZª×<_;bã»öt‰!/€ƒní6ÔxUSuåÐÎÙ§2Ïœ)Ïí„s_U»ù\ –†Š9|»¢Â¡C#ô<å2Š muY@tÝ£ëÒ^é?k,W—Ò&ÃzÍ ·,^eÄc‘6ЃC R}Š—nuóš??{w¿¿.·kÓ˜/Ü„Øô&Ä^oBl¼ ±—›;½ ±£›¢´)Q½ (Ï¿TEâ2l‘°î–™ M¶ cCÀ`~®h뚪0ú«f3àXÇ 8aMfò¿ Īr7_2E`ÁY±DÅ´ ÊlüÀøbwËålÙœy ;áL×ýÇjÃx‘Yy9­~!©¸j_éþ;jñïFÇ*£'NåÑw.»ó4­ÿj@tã±uÄz8m‡)O!ÕµH¼¹Lõÿxúh³AÛÇkï‰õOÕÃùp¨cÈ÷|îžcT+’Íñ3}‘ù+üûX˜|ɪöqúXjr.þþfrü‘ ~×´ßÍ®øŸ·¢ËŸ䕟¿N»õ/&¦Þü/†¦}õ$ô·Ïþyãþ"‘cÉØ¸FN¥(š”ž’³„nð_Þ§a endstream endobj 451 0 obj << /Length 1999 /Filter /FlateDecode >> stream xÚ½XK“ã6¾÷¯PÍeåÊŠ)>Ä©\’ÚÍVå2Ùê®ÚC’ƒÚ¦ÛÊØ’W’Ó3ÿ>É’[3If’œD‚ Tž<%yòŸ»œ¿ß<Ü}ù­Q‰Þ*›<ìYÂÙ2±Æ U˜äa—üöíñ2Ôm³ùéá»»?ÜýÿNÂö<‘‰t…ð¥ŠìØ·§»~Ê“,~—ä¢ðeòYOI FÇäþî¿k';!ýòäc}ª‡×xî—ß–3æÂ ë-H‹\_?n2U¦m7l2“çiµB·É´÷ép¨˜xÚ(—^62Ýâà@ĺÙÀÆ!µ'T 2p‹£…Á’QL{Ï‘Lw£È‡)…+ÈãpÅ㇮nžÖ²Æ·Q ¨W¡© £½‹ ‹ïQ¹¶çœ‡ìäÈ_S­¸‰|©…ׄIM•îfÏÜÙ8*F_“R;!#þO>aW÷ã/”ÏÝ2@†úV"ÄX`Q‰öZäSŸ!ø•Q…(­ú#î>` @Á‰àÂÁÓ±}¬Ž¨K§ê]=U·­oÛÓù2TŒ܉׋#„}ÍÔ>l{B&·1ìæ'a•Ê(ˆl!”¹©m±€‰5,FœÆ€®AúŽ(\pá‚w\ x3Mp†ñ¸ºV†°wÈ¥ùí2äõuî¨ ”¢\H#?§ÚB#£mfÔo” mƒùH Z*ÿÉ¥GA[”´ìÀ¦KOt¶r^8'—éâõH®øDƒ}fÉåK}tì™E²c¡f ïŠrŒge%ŸÿÅÈU.S‘AXÎøVË¢SB›±,2H‡.¬F½²€¨/”øÌªè„±> ’¹äRªn‹%ñ°rréAÉâO8Ù+¸åÍÁP¡É{¿’oL!Ê <ß×[, o¹Þ’¯ÇÍD¤°ÅªÜͺâ®ÇºDôcd€°ïb™ ,)‹Ø-€õõñˆM¶©±¹ÕÞ¦Ûª¡…DZ2ãäÒcÙÅõš—¡ôÿ|i¶c·nÒgHLÄR5Üt#¹ÝÓ7ꇫMïÂ(çt®ºº§þô6§íùˆ^l2›雘 0 J›>ÈnšVP¬Š°h¶Û÷Ù®Eé › úcHáÙcEVРÏêf±ÇrÌò†5GölÎô4²„LÌ'™òV <Ç ùÇ0Ÿvoi …q0mÚ&K# ‰xGôs×B©=ï3:û067Ýõì|ùãç;¸¨ÁÚÈ!JRÿ§ãÛg •¡D.`znhí* Ù> k\î©üDα¡Ö×gÑ…×"ŒõôB7W‘ÚžAy†½„Vô}…—'•w“i_­–Ä?§Û²¼Ús6ý5`W—rÑÕU ¼|aS¼oÈo‘0† Àq0˜V=}{n…QÊøÈ]¸Ù÷ûâì¯íÉU¯Ñ¹eú¯kPä2¤© Š…‚–öDáyóŸHsi‹ï—çºçMçk"…Ñ„Hž™"vX=7clBäþ°+6bâ³g²eÕh=ñ»Í÷ ZCýkŠ“hJ_Q¥¦Ä/=ŒühJ$Åñ0w>¶uq=Fv "Pd×Ç]XŸ áË29) ôô»,>ô#i’Äð 3TSþ†Ù1Ð-Žâ/Eá,£ù@¥"$JÅH”rô;.íé»@"‘ðmÙR1†YÅD¬ 4u×$1>”cS‚·¨…K¿Y”#LkïÍ&lU]kBO4zIx(‹¹*úœ»Ðo»zDGÝrîô‘}à)?2¼zèáé'®ïéËbûaMß[K•Åòß®¿qvýÈÌDE‹ás둽Qr3 k\@£qKl„*Þ´½ -öX•½Nß4[>£Z{™¿´’õü|È —Ó}ô²m õ¨Ž]XÑ-2¬QFr׌ĵÚqR–xÓ‹ø£•™ò“Ãü´‘é'¦¨¿+´²Ýû¦:Õ[¬}¹Mï+| k©©~IsÓáÊãe A…£Ð´—§gÿ†QLHýë]±E é5½èéwք׌ÿb#¬è¯ žýÜ_‚QbÄÙ [[—rO>•~•}èÄjg€erƒFCÒNg„ƒFT]©> stream xÚÝYKoÛF¾ûW=I(¸Ù÷#è% ’A âž’h‹²‰J¢"ÒIüïûíƒ4)3²c+Ú‹¹ÚÎÌÎ ¿ýfM³‹Œf¿ÐôüõôäÉKÅ3Gœæ:;]fLb´Í´2„ •.²w³Os-gÅ®*ÎVåüÃé«“§'OTÐŒeÌà*Ã+¯œ¯OÞ} Ù‹¯2J„³Ùç ºÎ F«ìíÉ›)ëÆ&ÙØzS®Êó¶ª7O½í'/íॠÌCc|~YÏsnguS6ó\Ï•ê=3½¶ô³ÝmyqíUg¹sDI匧’ùÓËôæ¢\W«Öÿ^±ž««´¶¬wq¾½¬š^sµ¹ˆãz{c1®ËÙO¨7ùٮ؜Ïáõ%Ä"Á:váõ¡O^29Œ§$NJ(ÃOÊÞSföÞFÔú€®ë¦Í—»"¬X=çRÊa˜£7^,Å¡—ˆÿGóh6:ª¿ÝÑ©X&o<3+wÈкOLÝ%fô½|@$wå A¨VUë­]Oxªf7©šö„G®ÿƜ;«··ùq"ÊãsÕ^ÆÅ7¯ã³ØnwµúR­‹ði|Çͬ¾Óf~ôfPè›»a4"E·®U¿?>CÙ Š(Ìvòëúù©šžº©ò¦ZoWeú þjªØuÙ&¤Yĉ¶NH\Ç\Ä×~ð—ü QM”ü•÷ð÷ÑÈó€ŠE½N¾þ1í¢œEWF¸>Yþñà¨Qÿê:ÎBgñäâÁwŽˆ< ±ÖF‡ž1ÇñÆÕìÅsÿ 5;¿j›8º(7宯¹=zàEK„uQQy¾`#Цe&©!޹G±%‰¦,¨2<Ú,Κ)Ĉ‘ü(6£q#›m½š >\Åx—å·e:ÛËt(ÃÓzuÕ¦,µån]mŠ¥¥Oo’NF¤œø¼ÖW›EùH®±1.&‰‘ëÈHµˆ?¡õ"¬ØN«ëiVËÈ ì€¹DŠìŒÆ}ŽI BBU¿Ó÷”ËTkf(E‘+Õ M–†Š¨Ná5y(Mœ8TÙ(M#kðœ—UF«µ!PDα£+†øÈ&Ò˜BƆÁ°à±¦ Æ/·‹'DKv?OÄå']'Pm–:¡º8P ¥²M¹ìør( n)êÚ¤ Ò]_1 ÑrÖ1g6QÁQ7%@ÙmgÛW ë*Idš8#l‡‹ÈѬÇQšäÌ@LÎûàQ}Û’%MJ>PD&Ð*7œ(ØË¹"Öé{`–P–0x|Ì µU‘Æ_¦@K‰waÔ8À»ø1\½Õ_.x Ú‘ˆ?~®ÖþïY8œÊÔhÕË!L¥6k9Â0Ε„`NÁÍ‚ù  ü§C0¬DÓ}c‡©*ø„¦±LK=ùÅ&ÎM™c„:wAHˆÃ@¦8a>Þí¯²ÃÞT$àIÙõ"pÈImŽbÔH”žM‰¼ f­õ!0EìÁ`&8ƒÒèÁ,”`øàê¨~7]«Ûßt`¦È4‘¹?(PPp¨c€T1¨ FAñÏR“)øìú¶‡ìpDOi;v`Yœ·õn 8á¬KÅ˹E‹å%ýç¯|o‚Z¶"^¯ø9|‘áÚ«¢ŸˆƒæŸj»íå>øÁç!å÷æ¢#¾ªø,gþÉf‹ªñ¸‰³»ü ³C|;f"ÀøùÀøŸ `ü0ºtTMÔ)’ŸëÅ«fRuÄ(=8éWÊßÞ*ÿ}Æ •ÛûÈFJrOŸb'2ÑWJ—‚±™Œ[‰2Ñ ¦¡RUÌÝ*ÝɲeiÁ8g0ª÷ŒÇ²Æ)¦s.Åô]0eïä\l¦<Ø´éRq‘&éd+o,—߀LÌA—¼"gwS6aR{Îu‹8Ĭ/ޡŇõWðíÔ§párœ ÁàìÒcq°%Õ1z,¯ ¤ã@ut=Ö1ŒÆkdó¿Ùc©ƒ=½-yO™\¡¢=?h§¾ÉøOŽC];ù¸Ï±2"¨’îàÑb-"bbt\Q56êÁðÓ'ûí6¶"çÕÒ_Îã ¨€ÁrW~¼*7çaÞ"„ŠzvdM†FË›:p™EÙ@Ź¢2Ÿ/«x÷§›zL©¡aD09N¶ç=>»}æ|£ï£ÖÒ]›¿!Ú%àJ—nåbüß§Tϼ£qcÃü4?‹5 ,˜kâD[ÇõøÄVË•»8ÝÔ«Oáæ=I¢±x¯_–z.ÅuâRXID;p)/ pâ¿f©ê€‘î·n˜èñ‘¦Ö ÏI|ôÿI³ân|T¬¯’eåS0ñáp‡Î=3'®{CqM™ª4?t/*€¡9‚Q”#€Kކ²º’\mÝ£YÑ( ¸£¤Oh›2zʨbÌzOô¢ xTB%û[v@ž}PYê…¸ !êÿÏŠp endstream endobj 469 0 obj << /Length 2490 /Filter /FlateDecode >> stream xÚÍYݓ۸ ߿“'yZ3ü”¨›ÞC²½¤¹¹6édgÚ™»{ÐÚòZ=[ÚJrööþú(K^å£o¦/ ‚‚?€´\Ü-äâõ•äïË›«ç¯LºPJäÎéÅÍv¡ŒYê©Ë„6nq³Yü˜¼v¹RJ»äÕ2·IYtÕmµ¯ú¥QÉãre2—¬±½+Ãç—¥ÑIÙÒÀ±«ê;j¾ÅÁÌì»åÏ7ß?zs‘§:Eõr±R^Ÿ“â-¨B®«ïn®þ}¥`X.ÔB9#tž.R“ iÝb}¸úñg¹ØÀà÷ )Lîõ°0š ZûÅû«¿Óz'ú”KEf ˆòÂÛ”´®Ñþ° kyªÞ[‘uõÞ ‰Þž¨?öO•j JçW+ÕÒ %ÝTi‹}¼‡Í­ë¾¡­ñ£Y 7óÄöë]³\iŸ4]¹\Yc“~K £ ø0©ÙÒ7ìyhÝ•uÙ}¹Á®KveM«Åô儘Q¡¬P¿ª§è¨n÷ Å“tÍþØWM=ÐuÛëM!§“߀QFc_—teyè¨ÙãÚ²¤¡Þ-9®ñwÇ”òд<ç;\ Rº]sÜs»'6—¼,ëMÙvLm†9DØ—‹¹Ù1iSn‹ã¾ŸXÎ[õaéÒ¤ØKZé¶ii©ý..ºë[:tèüûè38åYsìËvUÜß· ®ë×gbÎEï–a‡Û“jŠHž¿RvÖVäÖ‚0 iö“TÙÙœqxakˆ®só¾ °.yÍQC‹(x­eÏ Ýá-N¦æ‹ABu(Ð ±b ŠO-`EæüÏ àívÛä5€g2k;ìRtí)B` 3è¸ÒàX™Á× Ÿ§_‚‘Xmæ/‘(Jgù…‘—PÏ9Q¿©ºuÑnfp\äÒìеÅÒNB6ûjý8’Ö€©1þBïárŒHmsàÖ)‘"f2cš2|~Y Å`.Z^{¹ad4YØéÉÑý[ÓŠýdZ™À±ÒCØÐ(´©6DZ?®1‘‹áˆd"Òž˜§&ú`"DèCuÓñvH@Ú~†7‚¿Ê8—¨d„¹›’è&Z–G"-9E,W)T)Ñý胕Àx}à}M½®9”}u(;ênH%uÓ\mé Í òšöÆg„°ì+È15‘vÕ@ ».jbۗņH!'¥àÕR%5@Ž­«žeï9åÞgÅœ/›úP±¼Ÿ¤“ÇîH;„†™ºêpû<ãt@H€÷CSxΦ&¹Yz²ŸÉ1d²$¸/„ ’8ÏX ÒK"Ñ‚€RÕ{ŽëžÈ×´÷këYd}Ú$Ç£Ìê K Ð¸7Ävµ%ÚÒ¹µlš˜ ‹þ,9‚Khå,2?R N¼( !–!Ó-:JP2¢LÇ‘351Ñ!<B–+’“ƒ¦ c¼/ƒÛ²œÎdGô¢ÞP£©ÃžB«Õ2¦R¥ ‰,¤˜JpRÞb¨’ÍÊÁtZÊá£ãžÚw;g±‡l[Cr¥=ÅS¢àL¶q;`GöNŽyèÌ Ø [†Ã L@jZúÒ•üëØ±Àê®n dÄ»¡Úµ¹S\«)vÍP®b7Ä 6‚»„£D]ؽÙ1ç°õØ•eÈ4’‚Ç[±,Ãv,˰Mã.y¶!·C Vÿg¥Å)Ûõs6ùsŒ]ïéz²Ò 6©¨^¯¡Èñ1´ýÚ8»¦/C (:ž]s3äFÍ9 Dù]+¼ª+ˆÒPæep7ö°¯d¤q# ‰ßNÒiö™Œoy™†/ fˆCêœRiàAèg¸š‰õ]¸ÄÔwÌn,z”þB‡šÂïè¾-1]¯ŠnU‡rü˜Z\ó5 ¤p~Ô‰Xl¡þ:¹,U 8@H=ª: 3rv _ÔTÔÌ„áÝYÂ@¯)Œ7|êÅPº™!Øé:\£¿´ˆÅËL%epáOPâ '÷«*i),ÜáQ”²¼Ò[ºòÓåc¦œÚ\B»Öø²4U^l{J+gZm(u­ÄÆOµvÍŒÊT £ÜET¦Nd@™è<@°á ËŒæÜˆô2ŠsŸM7ÅÌ=BÐÚá ¾çô·®¶á|I. ¬Q¼C¡Ù54ˆK!ôÂ^SÐh|Ðü 6úì­fï>á#Â'´äâkô$„ÝÑux|yWNX53݆jª¹ÙÜù&¼ød§Ÿ,Œ2ð³pG$M/*’Ju®Œ`ôä ì¡7‡-F-{º‡pwC½:ê-y”‡ê·b5[#R¥€Ù°9ÜÃ]cC=2ÄŸ|…M(@F£TÅ@£«~ã>•L†~x‡¹KPçU¿‹ãKÊÏua”9™¼ÃŽMm $“šHH:D½·Ø~AmvðîN’Æ8 †¸I'O‰Ø}qÁ‚:ª>¤‹õ{¶áå ùÎÝN¯Dpm͸âÓ&VYxÒZ'mQߕԤzOÇg8$1að"vÄ.étN2«–Fx@-“ª¶ÄÇçR85¼6|<ƒ˜!íj“Â7ÿÂh‘û|Š0•°Ê9D™”ŸDn?–<\@±Å¿%ÜTïG’‡Ma¹Ñ™àÇDé\î°™ÎfÑ ÙÞ™tªÎÉLÞ°y.¤»ÈJÔPcØ©V€2ŠL5Ž9#´óOO3 ”åJ8i§Gé3á IÂæQRUoŸÊ‚ÂR*Y躀¯Ø±›Ü¼Ï^ÅãS·“RòSêô®•N!8|3á½t9þ£ë¯oÃ?Uï›ýüãŠbmþÿªø(z9þ×¹×X%R‹Å0ƒ_õë„Ì|¥ Ã,$¸‡”û͹™O/¢Ê @¬©f¸ÓèÜÍ=†:±aƒß3í ½Õ[´J|4óí>¾èíðZ†…ÿéR;‘¯ßýðÝ?Eüw‹'7 º•‚ypŸø? À—gÚþXW]_­ÿýT‡ño‰»8ö þYG§BðúÛ*šO#x+hËmÀx膴 œÁ<"møê{<”õ|‚N„ûBÈ œn4µûdºÑCº1ŸM7óyÆå£<#åÓmœœS5#eÂðE¹j}?sFL–‹ÀG9(Nµûª4å5”ÔY¥õgÏhÄ_@³Åÿ ü™æxFf|g­HÕSßMÕx¸`çÓQü¬YÇ‚7VÈç èP<ýÿ'§÷ú…JSá!½®¬O²ÕdËÀûÈ6è² endstream endobj 477 0 obj << /Length 2128 /Filter /FlateDecode >> stream xÚíYÝoÛF÷_Aä‰Â•›ýâ~×·)\4—\㇚>È%'‘ªH5ñ3;KIkQNS»8´—k¹;œïù ͳEƳï.xü}q}ñüe)3ϼ‘&»žgB)fËLi™Tev=Ë~Ê×õj3ùùúû‹o¯/~¹ð*ÏD&JìRTéíúâ§Ÿy6ƒÃï3ΔwÙû@ºÎXX­²·ÿ»Õp&lzi×®~(™WÛ/ñîç/ÝÑ Z2i5p ¤—ËvRH—·]5)´6y¿ ‹2ï&…Èw‘ßvÒ»HÒFŠaŸ_]ýð†ºÝM±Ù¶7«jÝÑNÝÐïë Üõ5­gUÒe…qÌX“B0_FnÛõ& V÷uÛt,Ðò”êzâTÒ(eój€‹Ëͪúð®]>¥­_'e™OW5h3£ƒU}[5ÃuG¿Ûê—]½­fô4mââ…nwôÐ-ÛÝ*,§x2ØwPìz5pxÝÕ—$ù0&<Ú$ÈûúêŸÅëñÁäïxÉ»ªÚ¿O»3rÒín]5ȯŸ¢M€V0°e©óëe|eVͧ»UO¯Eµw=ÎÛ-õKÒ<ÕoëfA»í™ŽJ¨Uþìò†ä‰hc„>÷ÌýPpâVžO@á%t-õWzÌ*‘^™&`lbo÷8”BZö-¥^úÚXÇ0”J;Fƒ£¸þb áØ0–V’Y´Œíìã&èüz²‚uÄû¼ÿØ¥5ãåÓ\ìaÚò÷.î—Ûj:ëÆ:p‡ÃïmñAƒpç¢5.0I,5«Ø¢Úyt 1N=´ßeÜbw%V@UÐ\“ Ñ`[ÍÃôåãôåalxó÷ÿ¦­ó㑆®ˆ„Ã4£GÀB‹xz"ÒROÄ­šxU‹A;Üšc è’a!”“%“Ü·!vö•[j¢oy‡³R˜¨Ù­oFãÐA8•)g˜6å'&^z¡³ŒsXI3Ì›cE]ÔxŠ;%ÇzáÓ;‡H!»‰ãîì!“üý4DS›ýmΉåëf>ÂÃAå@²Ÿ☠#’š *;Sz_ÿ9‹·›Œ‚W†‚#´gÂhó¸ø53RBß ¯!xûžšÍ0„¡ËTÔ·wcÒH ýÜÄ9‘£sŸM„uUå©ç#Å ÂÅúÂ;Îù)Û$í¼ †8¤vøÍ5’è âëP 8i>X˃µÈ>¸Ž1PÍ"j/5+Kzõ¾ÍŽÕ“Gœª—HŸè7bV@ÎNšÕôùMµ5?|Ûë)ã=̪ÛzVYhžðÛäU>‰s— J ÿs“tR0ŒÙãAè»vÝRI<ý¤ (H-ÙÃ6þøèƒÿêŒ”Ç ö NPG8Aˆ8—aüÁ jÀ ¸Hê'ðŠš‡³X(`UÓ? ZfMBÿfÿµˆý/1Bó×Ü:ðŸÑÁgtðü_¡ƒ½Áε.ɳRK˜í¤ܧ b©Àʨ? <€Â·: F,Ï¡Ãsý å»dÉ÷kh–€@÷‰ÃY&Dà¡ÿµá*½ endstream endobj 487 0 obj << /Length 1642 /Filter /FlateDecode >> stream xÚí›MsÛ6†ïþz;2¶ïx±ÆÄFc¡MþÓ±+šR4rô{SÏSh›OÖEl,pey‰é†ÆÉ64gQ ¸qü\?t͆s"¤ÞMçhŽ0íšçÁ¿Öû·žÏ²1Qî½")ÑÖ6ï¼§”kˆ‘í°ÎuMMÀQÄk¨ºq×ëŽÈa„ŠV'–7ÞrðVôo×qPÌâ¢r%‰R2]ºCŸí›Ç5–›—Ì>±¯Ã­–X+ŽÝêÍtùâi,$͹ ¦±ûfâƒñ!ÞÌŠérVD±m¯›muŸîǺâ=á—L2¿dA¤¬j%EYÝ-®cÛGUðŠaÓ&NÙ9~Tˆ2ÕùöºˆëhF·­U!VÄ.VÒU–[õ¤§Œk=ùcÇz`ŠTš§ÃÍî…[˜`cO4£ •WåêáŒ&Ž™fDKU;SŸØjе³t,¬ ‘ì\îs˜¤4g´î˜U±#®¢s{Æøno µùe˜;$îGJç“ÕrEÜõ“y3üöz¹‰]Hƒ0l[,ŠúQu»]VeýpÓ± ã8ý$bž±÷Y»}’5… ÛÛc\F!Tš$•*Ö.üc¥ŒSF —™²Š*O•2Nœui)Kr*1-†Rª-e«Î’ Ûå¯ãïgß.÷wö%~Z–óÎ"AoDPŠüÖF†H9ŸÜ!ó­¶ñ¾_õümç:2ʃqÏOߊD¤ì¹ä(Ò'Xb]õÓj$8¦¬ì@éÀQÊKm?ì@bq" ¥1Ô“ØaÃ8ªÅ´ì*bºvù»ÆôEì*Å<€ {ïSy±®»"}@¸QrÑÃîÐCGù€ÿGôh½5pÇÀ/Æê[àýÜQÝw–2§‰t2“ÖŠâÒ;˜sDb×JkˆÅPOb‡} ;ÌSØaûcGdÑÁ¡›vBC’Ó¶f†"™ Øð¹ÃË>‰R•I Ø@rì Ê„²'±kœåÏã+‰_˜3hG˜pm´ ®ÀÛ-®(Óâ º® ëWð,â &¸ÆòÞGþÿï§á¦.SuWŠÙ8ÄúÁ^ôñ ¾‡4¸ g&» ì2°Ë ³Ë|UuUÇP‹d&%Rõ#I8꜉#bOçˆIÊÏ •‚œcZûðÒ×8¦yœ—;£QýÏh°Ë¤äéÍj9ßv…DRuS/Òâ„Ã?”Ø;ÌèPj‰”E©‘D£Ú%Jo}nÒ2ÿXL;Læ>Kqí0a”*ÿ"º3{t‡vCw¦¦;à…§šCÀC÷Üw¯c;a<¼êW<@Y¬c “Ì¥i)¸ ‘ù±¦i¯u ðñ\ƽ <Õ|:`o8¥Ho ½ô^òëØ#E½&=î8±\œõüPšËEû™Iv¥9P‰T' Õ#å\Q¸ö,j• †»TïûðÅä,%í„o–]ga ¡Má_­ñ†éˆ E—…¡ ïñí•»Å%ß®qÉ7=.ùëáa˜ï ;Þ7ÒB¡ó?Þþå-f «úè‹l`êévz@¡…Ph@¡¯„BÝÕËj$TŠ´:ׇ„,ª1爜3Ã_ ˜ endstream endobj 497 0 obj << /Length 2273 /Filter /FlateDecode >> stream xÚÅYY“Û¸~Ÿ_ÁòK¨Ê ÂÁt%©Êne’ÝJ9Þš©òÃz0$q‡‡ÌòóëÓ)RC{ãŒ]y4€F_âÁ!àÁßo¸ÿýþþfs+D±,‘Ip¿„R,MtÄ)“*îwÁ/áãê×ûŸ6·zB—1•$p†[ÿój­´9üdYX7«uÄy(¸ŸØÕ4QÕMleÓYšÞö]ËVë$RáýÑÅûUœ„¦ÈwDÒ˜êàWöÃñÝ1oi*¯VR‡=X¿TŸº¼®übKÌ‹hÂýšØ_ Á²Ø?ò-~Ÿ¼3ei” ïÅì04 C>##"R锈³X¤QcwýÖ"ÙÍßîoÞÝànˆ@rÁRI³(Í‚myó˯<ØÁâOg*ÓÁÙ‘–d™FÆŠàîægRäìBÉ#`K¹£¤¦kMµ[¸S ƹü*wJŲLÌîlOEÞ-ÜsìW¹4‹•ÙìR4)¯©©q{‰µù§§ÚvZÍú zD{ÐA^íÎÈr A‘¯•RaÞ¡µª(Üٽ鋎f½÷–ÖœEÃ4gþê$ •Îj…æ,ƒ[Ö2eZû·þ•¥+0d‡¯þù¶§1:„àÍÞ•mná„ ‹!ÓUqzªúQ€q–1 Öñ)©t® Ùm¤yìŽBC#³¨‹÷+%CÛ¼|*ÂH2 ÆáEøÃ±Î·–SïIPÝÑO¸sÀûÑõqÁÁ.:0¿5…ß ˜Pšù)Ûšƒ¤¯{/~äœýëD264CŠW5B—’ˆA¦£Ñ9" ÏyQÐìÏ­›GOSi”ï‡ý–¶ÀÅ"<Çih·ù[."»#’ÙáûhZ<¸÷Y[ù#«¶3Eaw¥‘ÊÂOnøráó'‹Q…}Ûöø»3úO$ÂsÞiô}]• 2¿.ùHóÞ²èðv¥#Š@v›`Žw?¿&ÊSaMkiÜZ»ÄáÑi¦;½ÜlÎçóº¯ò¬Ü¶ÌT;Ô¸ø~ÜJдýS¶Ù\dÕ2Ú_H#CT ÒW"„Í)hÆÍwµ_èL^ÑàÊý:×¥MÄJ ¼œØÇáov Qk[çÕz‰ûºausؤ6çü1ßüÇ©û•Va“oñãu)TH–7¹‡éySÂY)p~èKsƒ .t 4iiwÎ4„SØäwìì"£s,ŠG,ROòü¥íš¼:\üÉ±ØæýæÅÅè^°Ùm ÝöÚùCÛæ…G¼[‡cfrc#–ESr Ø"½Ú3ÏP²D raì%ˆ&ŠÂ}ÎÐäµGâÍ+‰Þó¯×÷y™ÿ{À–·<æ¿c ^ï—ë`øÜÃÖÄæÿü0´ ïZ/Élïì»Þz\3Þüßõf 3è˜ESS–ˆ;9|¢Zq©kúÖÛcyí}‡º(és* ï KÆõ §uðìïoàþ –ü÷‹˜|¹á¼I4}Ez6…ÆqìÜ"/̰9˜í„SOÚÑ‚5α4[QÚ-áµ›æ)üÆLgžó3ÆDÓ” "‘ŒRˆÓà Ï ÈI yPäŽJà( Èiº…X¬¦/Òº³û€ ^.Ê!Ó‘ñ Z(mwôðÑT³²½™‘ܼèxˆ›ÁÙ†»æé"˜Þ÷ÕÖ£Ll÷±n¾Ã;Ñ(ÑZ¾ÃÄ_ûÌ óÇú8mÙ½}‚§lqlg7Åø¤tÐõU»:Œ¸Ëµà7¡­8Aˆ¸‚Ù®Œ¾ãªœ„S•ƒ+.`¢Uuô=ÉñÓ—:±G` Œã‘”ªœkN_Tue¯8þ?#1²+y¦«éÔ~Ò„Ä‹:Ôiø›#¤¬  ;ki´oj¿‰²»ÂÓÖEïÍ—öôKº…AC&YwKª±…ù`ÜîoˆÚ{óèÐcÁÍÓ„¥€ Jq&¡`ü²ÂhV‡¤àÝ€+x¾Xx0mú3„Ô­Ï‹ÚÞŽ!ÊüàËQ}‡é™À¬bß„d@õÍ”¦2[Ú!jâœó ú2Ô-}¡wμju§ ¾5M*¦©¾)ýÈø¥¼`¶²ß:Ð: seBéâE¾Á×Ã^4åœ2eíòÆÃ%伦¡l ‚í$ǘœû-Ã\>ÍwžZ]&”iL5‹„|ŽÕe‘t'Iá‹=Ÿ y|¸°ûIÔ¸ˆÏ ùå“dJ%wb:Jrÿß}©®Nà‰Po^•Õúº¬žâJ 0òèTÙ¶ýt…­}‰]šK%6„a‘RI&Ôó"z ¥5@˜Tðª¡kçxjN…öBFÖÀ»¿R"\‰9{Èš bi—*ü Œ.IlÌ;[z3i xbA*!4Öe¨”::ÈÜ9G‡E¾êãøB¸Yhø ÇØ®©žò¡!—»rh@xîDpHƒmhÅbÍ£E_‰àn0LL­!¨–£Ê;ßšQÚ‡$AS´-]7í9iìŠEa][ 2×8¾?¯Õ´?†þ¼¦¶Áþ‰ ù¼[c'=ÑbŸ+€«ø÷í‚D‹À+¡þÐ$RÉT¬ŸÕ{†‚FðÌ|m• ˜«deÜ׸[9ᄎ{€ÜߊbˆGòsÍo”\öìæw”&óæ7ªµózšßäž¡ªøêo˜OtĵÄÇTŠX(LÁÖ)gzheËy>’ÿˆ ¯„ endstream endobj 417 0 obj << /Type /ObjStm /N 100 /First 883 /Length 1523 /Filter /FlateDecode >> stream xÚµX]o[7 }÷¯Ðcû]ñC5ú`6 H:`[›‡.1º`]$.Ðþû:mg×7«|Ý ,QçRyHê^M%¤ ©ªþkA¤â·…L%(i(Æ!¯\S µä9ùœ‚º†–ÊŒ“„–}žCkX×()J–±R‘$H5c/ ÄŒÍÉÂ’¨R -i¦Œ¥"”ƒj¡APÙwÃo1,H #ð¬eh {”iŠCáÔC­Á©PÛpZ`3€‡xCE0ÈcW–æX¯8‹ŠÌàxŠ3U†Â\]…5A3pl +šbI¡Ð`¶*6q 6sI;`¦ÂJlW(â@p²Š $.ãRf ›DàsÍDáhÍŠAvLÆ ¹ ³ºž†¹zª{º¤6*Ä`A*f°¹@sóãÀ81,,ðxb—xœŠKœä»WgÄkçÃëêvKƒ×Ý}n¸:SÔd¦ŽÈìñ'*WQœaU]©Ïª«p þͽ0ksbThon‹¥ˆ£ðZNYg|w°4“:F00·KìœA¨²À[j²»V±œÕ™Ð 0;ᘜÍ%ÐSÞhÐSü8R®n*üˆ » Íí…sƒÛŒ-Éo>Èn]Â@1 ž />¾›‡áñb±\͆'Ë›«ùÍË„DLÃÃóá)& øÅl8›_®ÂK²Á©+â+©D„ a+±f Îßÿ±‚Æá§ëÅ_Ããããµþáñåêz¹·_Ξûÿƒ?W«w? ÃÕ‡xµ¼ŽË›7¥Hluø{q{…0‰”E>z4ÃßK³DÆùERlÙP8 X†ÿØHµ5¥:<9I” ‘?ÀLa‹E‹YàXv®E'Rn°ƒÍ¤2€§vDHÃW¿zh)±Ùt“™9®kL, «`Þ@]Ò‹–CM&©C*© ~ЦcŸ…—J ³ÎÂðëo¿c{Ž^pkÊ„_¼ûöâ~¬¬±¥ÔHÈ•>0i4ä\‰hÖæð>0ªSl¥ÓfTBÄ€úÀ›­×u›Ñ|º°Ü ¬è<Ô’Ò fÔŸÚª5¦ö•3N–‹U8>ÉÊÝS'ê˜>MœË¨Ù>ÁCÃéÍòò|â‡áôÙI^Ì?¬ÂÅvòœ¾~3Ÿ O¡{¾XÝ¢yþœyÆÜ.ßß\Îo×½~-úy~uýúÉòCXçXáµ1’æôõ žÅ£õ·ÎÇ[ìê—·åâÀJX¨F3oþøE.Ü¢‰}Jx‹B“êQJz”rnG¿ÎÛ¶GÞ¶}òv œ4ú…  Œ>м­àŒâ\:5 Z%µ^0’¼vb=aœï]`ª-&n=9€¾NH­» ùäsBøMòç¿Î~ÚéÄ3¥~¿´‘Ý´áýÒfüéx”t ¤>pn(¼–ûÀhm£ÑÅ ØÜZX*£ðZ˜Ùû›ÜG­ oò¤‡@ùÕý ›PZ=ˆºK ™L Ùƒ2F ¢è¯¤]`\ðcÉÒV/Îc¤s‰Ô©XP5¤´>0·“¹Œ+¬Ýßf·è²É£-‚msçpºdÚ¡‹¶©tÉ©Ÿ.ÛØoT’QpªQ¹õñîj/üèuå°„¿/P›¥`rÐÚNÐr4Û#h¶OÐl¬J[kÉ£XB=+ÿc`¤l´±´ãvœJ§\®…Îð{·æ™³y¿¸ŸF[ãpN•]N•Éœ*{pªØ÷ØQpNx=£>p¼RŠö%­}PNmüUn LhÿñµE€ÃªÍT6ԺÆ;õßfƒé×lølr¶±ß¨0càÌø ÄX™q1èÔ,Õ¿ºô‚3ÅÖkgÜ9èk8|šÊÛåƒMæƒíÁÛ‡c`ÿà”‹öµÊú]XðJ,Vp5¼öH˜Œ¦Ý?¶ÚÃ=ܘʀ¶Ë€6™m´10À½`ò/ÛÖV¥Ø©wý¥|¬•Œ‚Upùÿûk~Tä endstream endobj 505 0 obj << /Length 2802 /Filter /FlateDecode >> stream xÚÍZ[oã6~ϯ0æÉFǪx)‹Úbg1ƒ¢˜bìÃÌ<(±’µå¬%Mš¿ßá¡dÉfœ™Æ]4áE$/‡ßwΡÓÙí,ýû" éO—ß¿ÉäÌ%ÎH3»¼™ ¥kò™Él"U6»\Í>Î7ŋϗï.þuyñß žéLÌD–%F8ßR£åõæâãçt¶ÂÇw³4Q.Ÿ=ø¦›™B‹Üzöáâ·˜ÐÌ%if¦BwE½Ún"r]ž¤î re*m³©ÜûÅRÉù¶ªHÚcùRæ‰Ìò³ÈW"1îhÝ«ªk~ Áß¿ÉG­µJr£1œoö¡lKí´?Ÿù²È̼Xw%wœÜlCæz»XÊ|Ž¢˜¯ªºhC»í §Eè6lûl)´H¬“ȈÄeûý¡a°?HÚÄ·L§MþsWÖØE¥æ÷Õ55û½ªo©B’ªR¸ ´Ã€¯¹r˜m?Uª¬xŒ‡j½æŠ+ßµÿd¶w%· #¢$æ´jlP† âVQ±¡/h%æŸÒ,õ%l&—Ö¯—±¥íðM¼î–œb(áOÀ÷¯jJº×ümýO?£Mêüwå®äâš“ªá”§Lõ[šòý+w\uÅÑÕ+.ûtâƒßUÅÕ:Ô}ãnYKÕB¼”rÞÝó¡’H*ïEÒ ¸î’¤Q&ìbµâ"Nò6|ñ3£L{W…‘w%í·”j¾½o«m͵ý×”•\ˆÉp‰ÊE¯æÿà&¸F#¸H“L˜¾Eœ”CóLÏLêRúÔ%•‰ËÝô’N¤é-´ôCiñ 8i¥'åYä*›8lÍDî=®I“´Ñ‰1â,bMŒv‡Ë%LŠœ–‹6Ó³cÖRBk1U¼ï"‡j«]?RUß%@BöMXÅéÚ“+¥ç«ò¦èÖ-׎À¾ù‹†j‘Ò_ƒO°x) ˆ•Y’“½Ï]Œ„2ãw'³@H£^J~9jh¨ ø®f¹+èÂ4J¡ÆžC¶Ä©èTOe7]ÃX^·ÊRh ¿bsW|(\kbJG‹àúÀúËbÔòáŽùᎋ'5cÿª ÃøîD uÔóe`' M5&¨V81 lЋW¼’vݾb5 füDƒUyÕÝÞf u»@mM´e[¯¹šNjÊ M4 Ï*mQ­û|»âÉ_w›’éÇïáè)ª4:À92¾ÛѾfjJ'ûJ=·œ6Û5ï.‹0Üh7©3æúç©Ï—E R?“ªyr*´VìgÛtWQ¢¼ßmAGàT­óyÑrÊ#kmdz¢\‡3æCô¶Ü®£xiM’Z1ËhJ¹} A K΂óCÙ<ÿ ¼„•íÌYdK¢w} ›Ô‘41ÂŽdÊœ`ÇéÆý•¬ˆKßrù˜]ÀäÉÒlìO©Î°8§ÔäユSun|¯3pªÎI° FLÙî#bÑÆª³HÍ]"@Ì©]ía™ètÓM•((ó¤K›<]óvª´X´µg‘‹û(¡>¹S':bEàjH-Ÿ2#"WÉâ*Ù¾ýïQuƒsLLé‘jS6ì´wDBì¥XßnAwÁÛ•ÒáR»)l_xNÊÙ-§»’ —y“¿æ49-eÅ5¿þòž3SböŽ0ªš¶Øµl 4õ³¹Î{‘=Å£|]ðì =1¯£D<™‹µ¤½N$Y®¦ÖCΦÝá'‚»;ÃËD`™ñ¢@Þ’AÃþáâð¹BÈG•÷ªøÔß@dßTkȇßÞ÷¯¹¨ûi[oªz˜@˜J$ô3)¢!U¯gcû¼+~–û+ w=QE—äù·½Ì1D`@§îò?þ{æ'mÏÿZ"†~Òµq)µg‘‰k©…›Ê| ´w±:OD–OÅŽÑà1b· ì3†;Rd›_Ìp f OØSi" ŠKzUí$óI#ìøÿo¬,Ø endstream endobj 515 0 obj << /Length 2646 /Filter /FlateDecode >> stream xÚ­ZMã6½÷¯0æäFb†ß" ,’ÝÍ.‚EÅ4°‡Lj·zlÀ¶:¶<™þ÷ûÈ¢dÑfwOÆ:‰¤J,~T½z,ŠÏ>Îøì_7<=¸»ùîGegB0oŒœÝ=΄R¬²nfMŤ2³»‡Ù¯ó]!Íüçÿür»P•™Úͧ[%æÍêë=W¡ñù~¿~ z½ùØî×ÝjKÕÜðÿ~¾GAÜþv÷Ów?B¯gÞJÔóÙB8¦œ'Å»ÍSºùçÝÍï7oùLÌ„áL…!*ϸ6³åöæ×ßøì/šá•w³?¢èv¦˜VJ›Ùû›ÿÒt3uÂ(æ¸AWŽ9mI)MMΛ‚êÊ1Ïå$ªdJçš÷ÍïÇf·|þ -É[Á*'Ña”|ÿt»nÞ,×Ï· íż[5¡ OP5¬xØœPîšýö@Åö‘>Ûµ±£‡æw$¾«;zþ±Z/oñrFƒ˜¡Ñ¡Ì…B¡Ô|ßlêÏu·nwÁ"”ž×û†ÞÄõ ƒ} ÑTÐí€Å¾yÞé÷SUg"+‡š9Uëm{Ü…~»5t-½§§›ïR»§fF…m%©UCbq¡å4†ùK;¿[%ÙO·&Xr°é(Xï>6Ù¸ûýkƒ.…¡¬ÖaPʇɆ!6ã0ÐÐ> $Ö qÚn¡ÇöŽmeú ÿÀ¥&)XÕHŠ3#l/TtYI&5Ü…+&Ük&+™‡ãe&›)“•&Xô$ÅÉ[ ž¢8ÖÅÙ ´*®™ÇBdZO¦A+'Fhê—䯗ž”¯Ù7…U­X¥}/°Þ=úpŒÛª©wiC»´£Íc}ÜtÔšÌçH6³€VUùÜtÖr ® ‹Ò0çíÀ¢±†)é§€ÅЕþ‹aq Õ‹™æmý¹`Ö0 á§P)yŬt¹Î‡æ©[`XcÏô`<ïl±* q½ ž~ÜRCü>%áš"âľI¥:}¤½óe€§ôáªH¸ºèFÀm–'ÌU=æê3ÌU sõ˜ë‡q‡bÄ[<9=r¼ECÄÙѳÇ[P…ùžš†a$ÉU*æzu†¹ w½œÆö˜#æÆb@ÙÂs•09æ*aÌ/“Ps9gþ 0×ræ=¬Sz¦­º t­‚„‹]I«_]é9«ðõj=x Š™Ú¢#*¬f ¥°wƹΕ’E^¼æ5λ·pÞ)™á|4¢.YÑ€ó¡rÂùÞÒï5¦¹µ^ó`oÌ 9·®´Pg8(èvèRÊIt;Ëœñ¹n°Ú yÿÜû)4G¼É4¿Š÷U†÷Ú‰y :ÑË:ShÜ…Æc ÷DÏ÷ô"’m'‰lWlS=òr×sw4Pdˆ :j¹àà08Û¤œŠ‘¼†BSH¥€PŒª•‘c¨ÕÕ¡H}¢ÀÙ 24õ†ÚTF™ÞÊ2*W–|ðePvR½ ÊJáH;Ó^ÏåU0¥98­]>r›’Ë(Ðoaý$zÁ¿…©r½O%oQÁ´AS¦Pê5üÉäJ_Ädàö)~–1y´M_ɽ=ÀŽ19º†’pk+Îhuwè͸jX2ØcrŽuòQ0>DT%ÝÉø¸(`–p°O‘L¸šY[”‹Qà’iX߀iƒ®ÅH0‰N„·'PâD•Ø{õ{Ç)Ô(õV Lò!­²l›ÇÇ~‚cIŒ_9ÃŒñWá'8–Ô:v¥Lò°O%WÖÇñO¡AÇ€§eJOx ܘ¯9Á\ ¸³eûjàÖÒ¼Üæ+€›fäÜfPVpjɪSG”Øø"x=ã佯ðÉ2+±Ñ:ÄÜêZ|âX‘Еá®÷´Ç’schÖL¢Ô{¦À2¥/ÊÄù+ Àš¥¬2Ó]î »¦43Õlÿ"•âóç@XÛ#Uþ€\÷°¬»$– µ¡åcðú©Þ×Û¦‹Ù´¿ÉBKà‹Òg ýEPDÞ'å<ÝÌí—‰Æô@xq<ÄÓ· ‡úf÷m(šBh[žX¥¢–Híd¼™Ü-Ó ‚P8ê³,ÀàÎ[ D3xy¼¹ëÑa ß&‘–Ú—íöéØ5™ôk¼Rë %â’]E+•UL`³•*ˆ˜PïÖ©yâ™'MeŠDS™ñ}]¨öDSÙþÌÑT£4±ê“wç¸emäà§Ó ÿb"”‘œ¶´—gtë"É<°—Çu`”ÕL"øK)LÌU„§{iàB’®íúÔB[˜UU©I´z~œŒ3­EpÑÜ1>ÉL5,†+Ÿë V^:h­~½œé3½}Ä?O£„Ü»z…MAndÿ_Íʹ8Kq‡èߥð?b*gú/á8|psé%î¥Ô{‰¿gI•·è;4–µÐR*×ÅK a ³Øhá€ÿJ_«± ‰Ð•èÿ Y¶»C+[¿t…*……Wé) %¯BäÀÖ7udj…µÄˆQI‹ùóy [Úô󞣉¤{=4ž:§úáx?Î6…€¹š*7פþž‚NM-í¾øhM{@8%¥Yé¿‹ÿ­7€p£(Ý5åâjm>?mZ"¹¡ZÓ#urë±§(û[JÙgãC)]|®“–wå‹0De\Ìjiy]DDtÓ6ö$¥¾0¡¸ò—`O–8ì_¯_Kúe$ÓÚäw…¡ÀÇðM¶Åƒ,”æé6B‹ù†îA(¨Ç–±ÑûÐñ3•‰‹@ˆî9ÐûZ 7ûpslMŠþZdi&÷ÑEŠþZPô/œh²›cÙhÁ.¶•rO®Š[ÿFêIÆÄ)í¯íãÑH( —¼î×@B©ØÕ®;í\éŸÁ'&P…Á3å£M.d *Æ_ÿm'[½¯‹uóP7¶K;Û‡:²çªbΞaÖeü‹øD—¹Ãá2EW ƒ{Ÿ¦/}&„¥ÿ?ƒõº¾ endstream endobj 526 0 obj << /Length 2253 /Filter /FlateDecode >> stream xÚå™ßoã6ÇßóW}²q5ËߤŠ)z=\º=\Þº}ðZr"Ô‘r¶²¹ýïû’²E[ñ&áph_Š¢8rf>34ŸÝÎøìW<ýÿîæê›Œœ¬°ÒÎn63¡sÖϬqL*3»)g¿Ì›…’óÇûů7?^ýýæê?W_ó™˜ c™&ŒÖ½¾¿úåW>+ñòÇgªð³§0ô~¦0À¡µýûê_c‚MÁ=ę놔éXX&Ï×wC"¤qóÕö¶ÝaòûøøTo·Ô²óáf„qÛØèú/³mÁs³ó~göýlXõù‘Ié†g2zfÜøþýPcOÓÔ»US¶iÑíÃyÀÎ`sE®o¾%Xž–\RÃ$­©ë· rõûƒ®ÔìoßÅþ-ééæëÕ6>·]ìÖÆoÚǦd‹¥>n5u~\ƒ}¬Ëø n«øý¦Ýžî®ÞWZwuK¥­Û†Ú8ˆ}ìãi«õp#šºßÉ÷\ê8^;ˆ ’9múAÍX”†#d"x 6XH¸$+|‘Ç„Lš4ˆ¾PŒ¦¢¸:‚#P_šI ;ªsÁcPqøSÈT¦ÌE.sG¼Ã"dªƒsüõÜ9òãúËÈ: (úv>‡„Ç!Ñ`Bup ØTYmVÛ.y”sÌò“kFˆÜ>¦PEFH±‡³(,ìYæ ûBÔ'`mj ÔÒTðrÔN!<¡6~ µÈìQ›É$TAÛ²­rL¸×Öw!hC¯‡ U–÷ U¦ ¥® ´Ô±ŠÿšUËÔ;D(MJóÜõäµID²Ëd\ÿ\U޹J‘0ʉ!Wã¸mltý—Í¢ñÓQˆŠ"*é<„¢4uѰ® *´EÇC8 ­#dÆPÀñÔ \cøàºç(u‰£<%=ÔrÛ¨jä(žGÝüë ”rs@)RÈ„R~@)FšbXOS®My¢ih%%?GN­§)r dz”¦.`åçhÊ™ö2Máö é°‘ ’–o‚Ü^I¦rZ}ަº\ô$‚ âT¹àÑ/5^L"ÓZ†”‰lÚ˜ˆŸæ˜ŠY_\¢hvLÏQÔ_¤¨(Bž0¤h0¡.ÙPOÑÐû`.ƒw[÷Jnjp‡k;7uá˜GUórnN!¿õÊK&‘ÒjJçyeÉöÓ&•3 gŽ{ŸÊÜOÍ꾆¶Ÿ^ÍY›L[5vGìÄðâ’w(»"ˆ¤“DÔ D‹°oÔ‹mÛÆîBÔ®÷#¼¡\ÄK$ç/¾ÒÊÓºé÷'áð¶ž 5Êj& $´œ#«.Þtý‡¨%Q„ÓT`aŒ5£aFyÏ<ìq ¡ÂâéPèhœÑt9éÍ25 ‡#ÕÊ$kßlFÄjŸQ“ˆÕù¿ÌÄ[ÿXÂ= NœàË®WßÍ'á±J9sÿÌùÈ Pó‡UÄbjÎ~“¨ê$Ø%è®Í%§– —ðëÇ]~i3¸µGßßž¿¥ùsĉoK­õü:ÇCŠ©øþD‚|ÓËWÑ©"õçŒu-ºc­Ÿ-­eÞ&ø(ž ‚ü@M¹# endstream endobj 536 0 obj << /Length 2492 /Filter /FlateDecode >> stream xÚÅZÝoã¸Ï_!ì“Ö\~“Z´¶E·í¡À]»Aûp{J¬8ÂÉRÎ’“æ¿ï ‡²%/c'goûDšrÈùøÍpdž­2žýåŠÇö×Wï?™å,·Òf×w™PŠ9ë3k“Êd×ËìÇY[̺þîêÏ×W¿\ XÈ3‘ m˜3:j ¼]_ýøÏ–0ù]Æ™Ê}öH×™½:û|õO3‘‹)ÏÛmß%¸:ØZ\„©ƒ‹j7eÚݶó…’³òò~ÿÉVhδÈaË@ú¥Ÿ•·ÕÝ3ôL>«î¨ý~ã©nzÅrY.cwSR§o©½ÆÍâ ЋYÙÓUÝÞÌŬÀ±:uäÕn¨­ÛpŠÛ¢fçÆÌŠºZâ²…'©,„`¹‰·¼¾VJ©Ù²¼+¶u?4.´°pçîŽ÷÷UGC]¿©šõÛ‡¾jêÓ¼ž½ÃÓõ;Xó)ÓP*m×U7uyÀ° ÂÞåûOBO¬ƒåZÃfžîi³/\¸ƒ5cMaO ŠÚ‹èÃ|¡µžý)èO7è7eÑ£zðGgÃB7Èvtb’íKç]÷…È™îíç%!¾ñ¬´ˆÎ©¦ç<°û…yr­aœî¤ƒp9 ‚¿€ƒãVœçÄssŸòok˜öâ"L­g¹ðL˺øO·•Ú þ5÷jä 7hºQ´Oè‰÷à‰ÕíŒã>ꤥ6lOP‡Èsx°‘cüó¯ŸJ˜Y{‡mXéÂJèß¶ x]Q58LŸªº¦%7„Aô#0†4»3ÃDô`èëvÛàLgªuÙ D%­,nº¶ÞöqÓ' бOÛh6xb7¬uzV5U_5¢‚C§º‹³}üÇÿð{ôó 7¼…­6OUWÒÐînw  ßß–6_›GPsfdütŠ¢YÅÓ!¤%)nÌÝlz-QÁá ÜîQúUGf3qvç™sb°›/œó¯mËAœÙ… žÚdLð…KM4`Ý#kæÌ;¥üU‚“Y®£4SZsÉrŸO]gÂLÉlØHÀF/{«ó°Ó%X:Á¼sLƒ;‘ÀĘ={'±ß}-ò©´~“çDæUs—ØT«Í@R4Ëh}4–}ð„ѽ› ¶hDBÛ‚;æåHß\$r ¦µHÄ`4*³,wÊïc†•ÛCãs#2Ë¤Ü ‚û¯9yà$²Åh#–Š ²Ÿ†Ça£\‚dé9ãÔèA¤;ƒã Y©ÃVfç².×e`Þ'ÐÌW(ñšÇÄF…ÓÀ®‡#6bVÓröì¦8òoäL4@5A´†•›rÝâsBj{w[—ES?¿£Ÿ|Òáâ`ö!ÓÂYà‰0GSECƒ“Óâ@˜<&êï‰Ú„˜tÐE˜L`àqÐ =þBRSo‡„ê cÇÈoíi€ôÇlTúS) ÅØ¹+è6a•JÈ€)i¯™«?¯À2˜‡Ä­¬žXeŸ@,ðnŽ"Öäø¿±òñ…+„ݨ·±‚KÔÖ%Í`3ô!ñOÁ˜ ™S –{yÄd1s ÄÜ+AÌ1'™~ {D)7I ¾à0“ùyOM‘n‚[ñÜžÄNÆb/ÂÙE®§œ_§ s3R¦ˆ ci[¢–|j80e™üà‰uˆ¦o‡Oý|ÂcÍ:yf~‰ði^Ÿ;½?&2¦€\KÅ”7gÁ§À:Ž [ oO‚¶Òአ-Õ”ë ж§@[]´ý[@Þ“WØÿ´í«A›Ê¯Ì<•ÍÈ›äµ3>¾ >Hüifßoû‡m|YFñ™Ùß[p|€vxÏÕ‰HÀC9IùX¸¹I•?\°… ãÎì [IㇲÔ*]þ]‚§Íá~nÊ“BN_nçžÑu þ!Í·»Ôùo„‘¸ ¼obÑ)"úÓý¤ÒP¡mƒÊ?dª±`8¨id¢›*2X²X®´ ã)˜~µP« ç¥5³ê«Sá4fÑci¹YwDŒ¡‡ÂšíÏË­›‚áø¥Û8VôDC7õxSüYÐ,ª0tÚ†ÆGÀáM*)ñ]ªz‚ÆúNÕQ€’>Úƒx„CÁ¶±³}ˆ¥ç8A×i·Ír8¹§ ¶«Š´Ð`“±L"½Õ‰] YØ ! I(d…Ýb å‘U™,¤¤j©x¤áMhå› )•Þ˜\gJæ!;§úÀ1?Ra+•Ë#*C’a*-Sæ¦Uƒv]Ô©p¹€øÖEœq!§Ñµ9T¡)¤>ŒbçÉ\8 ùè4? ¾ bˆR_®˜çâà{žøNx–ôÔH¡®2 ™n»É§%”纲çpTÝjGÌè{ˆØÛ®â7Œ„#¾:Á”Mà«¶‚ð;Ã"ú膗BQ|<¶[Ïæél *NÓ¡púÃ|á8D¿Ô4mSþº9&,ã‰uÕT뢎s2…7 ªn4íf]ÔÔ¸‰«Œ˜)LÐÝW«{ê@ÄÎC†»‡: õ†´*ãÔ€}a2¥°OªG{^¿Å@6¹oÚS0¥u¡+ÔYÙ1:‘Ö±\Ù£žBÈ{ ¦–wÊ´|Ò¶‰ð¦uß½ì^FA3rŒ!­ž~úT“êí.vA¾TDpv a_¸Ðu™RNÉÈ òn£õy0&™ÍEØJéásuL/ÒÏøÑÃ1”&á)/XP¤·c°- >Áã;ÖJ‡OÆËœ€ÌÿÍ×å¦ý–_–ó·©}(Ù}ËÁQ¾òîÝC”ÄJ–×ö™Ÿp!y0yØJˆãoÅ8¼Ó/ÁÔÂsb÷„éݦüe[6·Ï «·‚¹ýëuYuukRÒQõÛ-Øe!w6„7J»Ãšå°èaÿnpn¶o Tq÷O?P£(URÀ43ê ÞM¼+á°ìRÆMÞäÕ8<áÏ¡Ää_òjð%œ¥“y’ž-O$—ÂAÊ¢ÜAzyX"Â|üe{èe8¼Þ•`š»óJ52E¶’ü˜½)£Aéú"L ¹SS¦;{KH sKëŽWˆF2ûÕ99þñe’“{ÊɃa)¡˜¬ŸØÍ«â[ÌÒw@Î;tx’x Ä„„ÿ_–m – endstream endobj 549 0 obj << /Length 2531 /Filter /FlateDecode >> stream xÚåšK“Û6Çïó)xÔÔZÞ×^œªuµ‰“ÊÜâd‰šá–FœP’ùöù7J¢ŒÑŒ-^R{"4Ðx4~èɫۊWß]ñüüöæê›·FV+mu³¬„RÌY_Yã˜T¦ºYT¿O–×ÜüxõŸ›«?¯*òJTBk¦¤ˆ‚‚óû«ßÿàÕ…?Vœ©à«OQô¾RpH­ªß®~-éÔŽ9†:WímA©UŒ{3ŠRk™‘êDiýñZÉI½zMº¿yë*(ÜFƒQpóp=•~RÏ›åãõT)5yûKz6Ûº›m›v½¡wÇ ¨mª²bÔv5µžé`ª©,˜¬ÿ·z a§&Û»:%öµÒk»ÌÏÝöa·æ½#Á7)½¨çí}êc»i¨;)Ó®R{]z}=5ROxz›¦Çº]ׯôj"†×bÒv÷×S1™­ÎB²¢qñሲ¶¹+4*á'7w9ññÚX´Õ,Òk7[ßæ’eÛ¥Äö®Ù¤T³¦Æ¶õm‹Ú‡<2*ŒBC‰+'ôÑÒI)1×¾_¼÷\ê$ 9²ÎŒ°½PÉæ•sÌëÊb`ÖÎYŸdÁ‡¡õ t)Ï™—!6¥ä9“WÁ1!üJ5çLpw¢´þã*Ì™gA„ϧÌ?9c2-Äl³Ùn’¥+Ž­ƒ½30ŒE½œíVÛ´7`f°«óÚ¤§`Iç`ãÂÀ¤Á2ØÜÿ'ØÄ¹ªL€bìñ Ù¤ul‰fÿš$ÀéFÑ 4I~ªô94‰§Ùôß̦Ì"]b‘p®Ä"î2‹¸°ù‘;ÈÞ³hŸw\§Y׳.e>tím7»¿oÖ·)c³û0݉¨’›uz~;ýþñCVÒõY¿~Wâ @¦€™q‘WxëAferrºÐÜÏV¹L•9TêP”²V-uíS–SOÊÝ5·wYHð‡ª ±¸Ç_aH{† CÉ÷0 '0DцaÒ •`(4 U¨/‚ai“ÉàG_ Ì ¹`œvš²pÎÐP8KE©„¼”'JG£¡N+hˆå!Æœøðr ¾~Ý ÌKà›JpÆ4àß}S$ ±ÌÑ<)PÈËh„S\ááa6gè NY7ŠN‡ùVúDéü釞‰7.y@&fO˘ˆ:ð"CÈ| C&"?ò/1ñ(/× }gú|b„öÞò^§,žÞ¦é-ÃM áv(ØÃí˜)öpF;“ü9{@²ŽPçmD]YŽP—R‰bΜ8ä÷ÜBIâò2·"n¹=·±çnR½·Ö8Øç¸5íÅëöÔ&1LzWÁ5d8ç/‰0žIgÑ”cMÛ%škFQ wÔ}¢tT‚a_$‚ÁiHSêE®[™`^1‰˜q°uyi0Cµ“ §ÃE,1`7±)¦Î¹p %GQŠ&Œ C¥³mA'M‰G§óʼnή¥eÒnKЧÙv–—»yÏ…ª»:íܧ°™^ÓŽG‚“Ï“å»z5û+ÆÅ=^Žü“ð7E#ÍFÕ Æ\¤œ -Íd£Ð”¸B©W(£çJ,ÌBE(Xæ•}Î’ŒÃYàglVÚb04˜ Ö}‰ob1+ˆ¨)±tŠNJä(J½`‹¡Ò’ͪ ™Ô£¨D„#¥ªìÚv[˜Á@Í3¬’iÕ#Á¢ô)ù®ö4àùj¬ñ/š´hhJió  ´Ú@é×zd"»Äý~#wËÙ¼N² 6}šaƒ×÷Üðf½¨sãH¥ (ÕZví}J5ù&ìa›–ŸŽ`-‡«ÿÐ刪ì'8®*Mç#ìùË ÞŸ¸ –v« j‡IŒ$F#2¥fAê’ïi{߉ãÙ°ÙϤgï{åíë¼ÛPœM`½¡ÄOHü@ Z$Oæè†P¤ÀoÑ!äé"ªQ"Fîä7:=Ñ,fCös‘ì‹^vKx‘ƒyŒ!ó¹ƒiž¸%ô0ígcÁä!z.%dàHƒ2á2@Jf¹ŒMif«kî™b Côhb ó)¯’FjŸò`ÆrBLN—ƒ§æ‰©—´OýÃüå.Ru‡¤âÉ@,»žúà&*6êú ×ûy ª2™:RØ”ëyƒSx^§‚´ÚómÛmbÛ"»ø^3${ÿÞç‚ò²sԀ锱wî}Aa.K„w°ÅðEŸEpÐGHâñÖÒ\Á[˸GK<Þfžãâ%Â(J¹1'Z‹à¡Üä”J˜·öDéÑ©"ž¼«ø÷sÿ*,ã`©›õ²ÐFˆ·”Y$ßr¨þìÑéìÁž)?ú™‹ºd—t¬½ô’‘Ð…—¦ù¢¦hdçâ8À¢Ժ¸çJ—]ýçx,ˆlßOû¢Ù<¬µàûÈÖé¹K.û‚ EÀ6TÔf‘|cÙÇ©ö‚ÕsL ²g¹[/6)£Y'ÁwTýMJgwº{̧ ]$†!Uòé´©ç-5UàNrZý>‚ŒN+^{§µ%²ÓJ¥u¼_Ejï­úìâàÉ {D¸ÀT\šãMrêªù³%ë£ËRÃ-bkñÜíÓ³žªJÿ3PS‚Ÿ³>e4L@¢Ô`Ÿ;5Tº·¾Â¬! ·Ö#Ë`ξš,†û!Y¼:ú.“N~Å÷pÎ/tváˆ33 dÐzæ65Cæb•=b*/øtðõÉï:êóßu>ä:õ_Ê¡FúÞ_;é뺘üü¼Sd]úy‡‚!Æøw‡ZRA¼àßËuö¿î uþ~ÝQ¶JUeO*¬Bõõ† {ÒL~éšý'Æïë]×l¶Í|S†ðLùÜIJžmšÍ pðXrœ±:S %˜æîÒ,äãPS’göaw_ú9Bœ#r ­ÃuµZ[ìI«'ÿClÕ$ú[¸ÚcôÁz„> stream xÚíXMsÛ6½ëW`r)9S"Ä7cÚºu&鸱¦=$9Ð%!C‘.?œñ¿ï eRá¤nÊÒñÅZ,@<`÷½]Ò)Ú£ý¼Jûß—ëÕó 6’J´Þ!ÂVR#)¦L õ½‹Ö‡bAd Hx°œp¥‰ë´^Òû'›CÕÛàÝ™=³­Âô4ݹ?yí x¡^ÀéPb4–)²¡¬Z?™Nݾ ‘‚;RÈ)|!rþPˆœ«ik[îƒ=Ô þðèYY=Ãs€WîÈUãƒyÖøàžêèyãØp›‹ÊAD=3ÎŒ³Ø˜²z'R°èC‡åLGǬi]!uö›Ë×WÁrWð¿ånÈ™Ï}¸™]Óë&³E°ª®w½OEº­ÊïüPA ªÛ0‘Å`ì«d.6µmGxÄ—pÎ!9C8‡°·Cºb·ô°¨kN9±}>^&îü¿ÜÃáoð—›„`…ðŠÞ{OEH!œ\D?ʺ> stream xÚíXÉ’Û6½ë+X>QÁX зlNÅ夜òTr°}àHÔˆU©”'þû<¤†8‹g8Yªr"H€ýšèׯ¤ÑUD£g´»~{1{ùZñ(%i“èb1!ˆNL”(M¸PÑÅ*úoòC]4m±œºx3ûáböÇŒá}±ˆiM”Ñn½ÄúånöáV˜|Q"R]»¥»H`Æh½Ÿý:m¡\†Ð«âó\ð8?Gæ”c™™™SE„ÈwÙVõÛ¼¼j7¯¬ /_›Á{:%L+v/ëùB™s网q}(ÿ¸Ýä~ð=>‰ë¸»ûmnÄÆ? v¤`‡ éßY‰º:Ø´‹}³XVMû/ËÈ3ÿ^aW¥Œß[F9G.jgwgY[ôŸ õkòêrï=gb_»Ý©OœTG'ÅÀI B ròmêöë:[ZdÛ¯ÚGp“m~ÕW¡¢<­6ÏèùPv=Ü]¸Žt-mžÞçýC:“]öçÎçóiã.‰Æ7s¦ eOÓOm ûG–ÃÔ’ ¦‰kl§@M.CÔMf ·žŸ9ú1: :ç ADCô¦ÚŽè6V*p¨cÆïîð[\m=!œÛ 7×6äYà¯û\Ø^«ØÙ©ÃÎ/D ÝÕ ¾½n+ûŽËeKûRî‡ýÞ Q7q#Ø‹NÝAnŽ Tó˜âЯbçK‚å$ºN‡³N¦Qæãj{€»½FKlÓ‹‡ƒîßYW‡rEn¯ÚXqVçbåoáìU7ãk]°³y¶µ£âÆÜö ¨C¨ë ©Ixˆ8kv}®ÂÉ+aGº%{„-ÆÚòY uw1‰“Ô¤!“@¡¬[°„…ôÎä–u: ¨D { P7Ù瑤‘Tcô¨’¢UDµ P‘4cÁ7v+sk¨˜¼ã¿mãy.ðJŸð|Дˆž{}SÒw"=‰Øðÿ—$H¦s,ÛÝ¿ÄÞ'2&ÓÚ§¾N¥ø&˜™B¥­)SPé)P;•P»3K¨ÍŒNL€É™BÇCÌ;´Y=X›½0óû„Y8a6fjˆ–é× sYuÊ U~ $ÿÞê8oo×g)ÙPŸím§ÏvèôÙ¼>»Y§ÏRò¡>ÛÛ~Á¨>´/<½OŸ9T߫ωÕ"Ð'¨Î“¤2›´p¦85w 4Žr)Ÿ5¥D¢Žå¤Œ( 'À´J¯¸ 1Çå™SÂez<ÛH™<ÛÀ»,°ƒ<£1ýOȳ&A?™•Ç]ûKÙtß/d°{ÿo6D* endstream endobj 581 0 obj << /Length 1976 /Filter /FlateDecode >> stream xÚÅYK¯ã¶Þß_!ÌÊFa†ïG‘U€¤@€)r,’,4׺calk"Éiûïû‘”dQ¦¯;½º±h’âGžsø‡hñ© Åßžèðüîùé›/qšëâùµ`B£m¡•!\¨ây_üº9ÕçíïÏ?>}ÿüôÇÛ´`S‚(ÅÂL‰™/§§_§Åƒ?”g‹†©§B`‚AëXüüô¨ÒÄÙèy+øærò¿·;üVmfNa·Ê&œ#’êt]ß6çO·¸\0¢©]X„ÊîǶ<¿ø£þêÁ¿ùÁÎÞ†êw¦þ\õäCÙæ´Ý± T…ŸÓ–/¼ÐÞrëÿ  ’Ä/$‰¾i^ã„?·JmʶƛåÇcÕÅÑצÃW!;&-QÆ¡ÁˆSÉnr¨1o'„ØüFm<⟾¿jÛz?õí¥ë1…%iºÖó¡Úî¤7u¬÷ñ/ > #ac¾Ñêη¸?5`úêS5 5_úº9Çö8‰FQ2™hÝéÌ(Ìß(—qt6›Å!q7NÊ^¡)±ZHqù–Ep»K-"AZ ñK >^‡ËécîÜ+Ø*¸…]ÀÞ»Rà¸k€JO8˜‘ ƒ: êbó-âºK>*âÛÛ»óŒ R£úKF§†9©´>¿Þ®Å¡l+Ïûh¾u¸oBnöÕky9ö±æªa®—*ŽÕ]ì¦$®›\ù× Y†'tçô×ðáaÛ Z×F¼‹ïŒ&Ìš°”4r|DÆ «2¤G-¡Ô¬Ρ)e x!ǵšh©V•”P˜x{¬»>òÄ`ÕŒe½h 8Çkd3±ª ¬j#«bF`Uß;±b`T4Ñ?ºOŒD÷iMtŸÁÌ8kµ0³Ä§Zwõ©hÇ7ÎÔX¢¹½úRJo¯UB»,ç‘!¡9dA¨ùžoäFáXÐ"&«Ä{ÜÇÙ|´ë—ÒX**ýž¾qÌYVà Š¹öO ×nX)W6…õ÷7ã’áË8¨ô¾Kºã„{®Ø¾éŠ9ªe⊃ö]lŒÌ­Ùà‚.cÔ¯ñÏô=žº§ˆÎ×ðÌÔÓ¤ßèæs. ‚Â]šSFÓ)ty¨Ê}.á°7¹ÈC Óc}ªû(æà7|Wø±ù¼ ‹ÅÎèLv7Ùƒ„…û$¦<ôÄün‰Ý& tÆtþïÀt¾34b¢à[ ©ùŽ‘ÔÂà0)Ÿ(P(…=â%DÅF=â%¡5¤+ ‰€Û§~ïÊŽ¥`ÒŒ¶’3á¼nÙ*¨-ÅŒzÍЃ=Ø·è!ÙÿFˆÔ97szvƒŠh ž`}³è]¦ì v볃D–ÈœZƒ$B7nân!»°«àúÝ¢™à^ël‰¸Ý¬­°]¹1»#Þ¢nb¦¿—ÿªOCŒÕ¹|AÄxºòÏYd" AvG^šsWï«ÖÇËðb"GaÈeSc›ÂeØT†æêsjvRÉsü»¯ÈýI¬ÚL½HèX ¡S„²E0Gg:HðÌóž ‘æÞcD û÷ νHdtܪw1‘˜!ÂRÔ>¸’êPXWÂ9ÅRÜk¹b+q^ÁVÁ•8/OaÛ¦ÉdÎ’ý÷5ýÿ®‘p†\Ü `óa±d¼X!5½¥Y͈d,T²¤ï¢Y 1âð~©©,‹„û‚L;C³ (±lÌÄL ûÚ–/9–ã„òÉsþÔ6_"´CDC‡ø ωˆÐ^ºBh–Òkßw(»ØåÿÞT>ðåçP68šw2µ¨×¶9E Ÿš®ßy 2‘‚Ð~­Ê®Ž…2.k Ûi‘°þŽl‡fd;4ÀvÛ@ÔaBUckb:»f™Î„Ïîq)X#¦ oÚ¡>–Z¡ìãN¿”àòm;ôÅ`ÜUpa€L¥°Þ3‚óSd<„½+6µó8é"Fl”k!Û’CÔM¤vU蜱uÎ'nÊ•øÂ§®a\eÉÁ–/¿Í¾;é7S6|о\iøû¸‡‡OQ~)iÄÛÎ-:èup‡Ì Á½†xu6”°­×€çÊT)ü`-@‘@q˜Ü H 4òôîý¢2ÐÛ ¸ÂGænqX_½Íý5šýåPõ‡˜½êMLp BÆ>vŒµÞh¤¡kþùŽSs[èË|¾k«7nðá1Fï%:˜}ÙOI…v¨=ßgñGI×#Çl=V&¤)QŸågþœP÷!‹ú“lºÉÍÌ» åé;øÒ@ËÒ;3tq=Ò3‹wæ*r! ãßæ­Õwn¾üêêëWΜLÇ–qpÙŽ!Æn¨Ü•Ì‚-ÿŽ w† endstream endobj 502 0 obj << /Type /ObjStm /N 100 /First 880 /Length 2409 /Filter /FlateDecode >> stream xÚíZËnd¹ Ý×Wè d=H=€Æ,’Aï &³Hbô¢11‚ƒî »˜ü}Ρd—ÊUËvOE¸ºº¼E‘G$uËÒÕ§A\Œ÷âRÜ«KÚpo.‡Œ{wYðƒËÏ1:É÷ä¤%¼-ÕƒblÉ|_\MÍÅT]­x«k‘ü͵Âçî:æˆ9º®xNÁõŽ÷)º„„„NƒÄ”¡YævjÁ+Ÿ@f@fÌ$ÂWæà¢fP0AÔ†&cTI¤@r©ñ3˜k$’kÁ¨+´@ ˜;æQ¬1(§¹¡S`ŒJæP è((Ñéœ9»”DФÔÈJÎät*)ê’`q j’‚UÀ¬©ÀžªX9»B`Å“Â2©ÂAªÓ$ó¥ÖHœžÉõJJ…«¨ªÒg+Pb$Þ‹¡¤¤ V›3^2¡3Ö–….ÇÈlþ,:Zf¥× $—L `P(J§ÀɹU¬¢B`˜«B`/ÐÊIÐë’Àua€®«V‡ÉIièp]¥;I\W @˜@CÀKð‡NF§aö&Nà´ƒb€p¨6,@Š6,…¬@§ÂèRa…?¤a¹Ú!ÙTPÐÁ|B}°È $wàX PKUСdÀ´jç¨æjãfÁCn\e[Qv¢kœ½­v²ë’úáÍ›ÃÍÛ¾¸7oÜÍ[¸=B^p?â¡…³±„ÔxcÕû‡‚™kß}w¸ùáÓÇŸÿ|÷Åݺ›¾ën~ºûí‹{wÀ+NûÓ¿ÿu‡ïÿqw¸ù#T¸ûðå3v® ?Üüx÷ù㯟~¾ûl›ÙHºûû?ßÿáãoî6€P°žÚÓ;LóþÆÂv¦Æ½øïÝ-È)ö—¿þ ;.ù ƒÕ ¨þðë/¿¼»Î›·”î#ܲŠ@x’-féÕ7À‹9×âó¦9Šç.ÙbŽ-ú Œq„ÃâÎGpXqr‡(/E@Ö‹Ì¡z©}‡&»o1#â­u“9&aSç\‚/Yö˜S+¾ïêŒzÀ'Ý´3Î'žÇÈ=fDÜX~7p —t†á^ŠaœØ¶1|Ê;a™£Ï¹ï1k¬ž7¶˜%5ã¦9¯Aö˜Sßzºæâ=¯~…ƒdçŽì/ud ûŽ<å}"]bÖ|MÉRª£ºÇœJò²)9Cgœö˜ðTë&ó×Iqë™àZHx)xÚ9xê‹ÁÓžžöð\df&K}Yqø«—’S»ˆ4Ttº©†Äà㦨סrû}’ÂGÀ-"•ïïpoê÷Rq„GÜŦšm׆Òm´9bKà@Ñò;âã«qËðk´ç§:“®e$i׺Ì1àpU£qú½T~¨K˜}ÌEîÑ[¹D(u´6ã*‡»{/iw횣´˜Ú2UÏvPÆêZl¤Œu±ÈwUÕóûzF‹ã4ë!ØVàÈh±ÒméÁnÝ>Nfodý†ã›NÃ7r zªs⛑‡ÖV³×м,ýÇ«âç!tøföSEÿèÍA]}\By  _Ì‘܃C*×.j­ùf};l5úÖgÉ·ÁçÙg›ºR³ÄÅ+k€«m'·f"Ár²eR¨9í^ XÇ‹1ÁhÓ˜xí¯œ3agíäYÞf¥ÓWi¯iWÝF;ˆ›ÑÊX|Õž¹lsoM‰ï]œ¹‘Îò'q¥ha¾>y¦d“0ûy™N³Ìy­%œOEúÃ"Ö/n.ÚO.ýïý…qjšg¸n`iá<ÅØܸ¾ }kM~+ùv=yÁR™Ÿ8ùë=2¢þ+Ú!gmky,yPª0Ò×`á3ZôUD¤jJ«E¤Á—9¨5²-cP²ÌÔI&uŒŸ3$‹›…Hœ3 Nk{§œ•R¢Í4-a9i±Êº¦AªxŸÆÛ#mCj²,Ób5¤ÚnYìbòXÍ8 Åóˆˆ÷£K¡NbIFÌÆr«'þ€É1×n«¶6d¡•`,V©H²vô•œz;­M¡óÚ¶!t(‘z?ß‘²0ŸËH—Ö^dMVÓs@ÈÚ6µµ¬÷†qWë#«®JŽÙ* H+s–òü‰·–¨“qF¦4˜GÄó·d¶eÈÁ!¾´Î¤—B ¿/B$ ÒŽLQäj ¦@½d1ž½AgË„j<æòf%I°õÛ¦®° KÅnõ ŽŠLI‹ˆY¶»•KD!`5Y¶z¤F3m³Ý‘˜}–6F+cæM†ØÍÉ*]Ú•nà?p±¢b;,†ìcõ 3Zµ£ bDa†Š!r!Û‡§ÛôÄnÒ¬ÐM‰‹­.ÄšAͦ–ª¬%aK‚’»¡Ž¸h–”K –í“f°º $KÙ<ęʹÏ`–ø»>+„FµÒº›óZ¢j²ŠU«G{Ü&b@SŒAÈAP…1²I4HJ±PÔ¨©ÔÊE`ê7, 0øø/tP«<ßʰº˜¿ d¬R+èftš˜ÿúÀZzp2„³l…³™à_]£}kÿÏZ;RÏ3[€+ÿ'Û1’QeôÇ,}MK´ÙÞYs€³ÙŽ=ŸG^ÓCBÄž?Í5[ð¹Û¡Ï‚IwkJ>FÓ1ͱ·r­[V—œfïõ.)víJgZ ©£ªíLw gaä£Zu2‚Ô¬âÆæÕp¿¥—u"S¹nÁÅä šÒÇù{žÍM¾sƦ×ûTs\èãÞb6½±ôïõħé(cºBO¹G¶¯y|ÎYÞÎ"Íú£=b⤞Áõíó¿? ý—S endstream endobj 609 0 obj << /Length1 2061 /Length2 16454 /Length3 0 /Length 17701 /Filter /FlateDecode >> stream xÚŒ÷P]ÛÒ€‹ÁÝ%Ø‚»»Cp× ,î.‚ îîÜ=¸ww î—½ìœÿ½ª{‹*˜_ÛèîÑ=gAI¦¬Æ(j6}Û:1²2±ðÄÄ´YY,,ìL,,lˆ””êNÖ ÿÈ)5AŽ`[¾?,Ä@@§7™ÐéÍPl u¶°²X¹øX¹ùXXl,,¼ÿ1;ð$€.&&€,ØäˆH)¶sw°03wz;ç?cZ+//7ÃßîQƒ…1Рt2Ù¼h ´¨-@Nîÿ‚FÀÜÉÉŽ™ÙÕÕ• hãÈv0¢e¸Z8™TAŽ  ௒Š@пKcB¤¨›[8þK¡6ur:€ok c­ã›‹³­ Èðv:@MF d²ý—±ü¿ ÿn€•‰õ¿áþíýW Û¿ÆÆ`; ­»…­ÀÔÂPú(ÏääæÄÚšüe´v¿ù]€Ö@£7ƒ¿S>Šª€oþ»>Gc ;'G&G ë¿jdþ+Ì[›%mMÄÁ66 ['GÄ¿ò“°p¿õÝùß—ke vµõü™ZØš˜þU†‰³³†­…½3HFâß6o"Ädf '' 7d¹›3ÿu€º»èo%ë_â·¼=íÀvÓ·2@Þ¦ ·?ˆžŽ@ÀÉÁäíù§â ‘•`baì0™YØ"þýM 2ý¿Ý¿ƒ…@—åmüX,ýü÷IÿmÂLÀ¶Öîÿ˜ÿ}ÅÌ*bjâšôÿ.ù¿J11°À“‘“ ÀÈÆÉ`eåâp¿=xÿoe Å¿óøÃWÆÖ àýWºo}úOÊ.ÿžš/-àc)‚ß& ùgÐõX8YŒß~±þ÷¿]þÿMù_Qþ_ýÿfôÑÙÚúo=Í¿ þô@ k÷[¼M®³ÓÛ(€ßvÁöÿšjþµºb`k“ÿ«“q¾í‚¨­™õÛháøÑ d¢ládlþ¯qù—\ã¯E³¶°)ƒ-þzµYYXþîm»Œ­Þ^Žo3ù· ô¶<ÿ{¤¤­1Øä¯-c{»a ƒÐñí’߈àÉú¶Ž& ·¿§ÀÌd vzs¼ç 0; þu£\œfÑ¿Dÿ"³Ä?Ä `–ü/q³˜¥þ!v³Ì?Ä`–ÿ‡¸Ì ÿÐ[LÅè-¦Ò‰‡À¬ü±˜Uÿ¡·ÔþK¼o1ÿÐ[L£è-¦ñ‰óMg ¶~kè$Illþñÿ«ÓÌ&à[m ?ð-ÓðMiúþ¥´øç8ö¿Ðåï¿Öÿèÿ2;;üýÍÀì|ËÎü|»‹?ð­³–à[¬þÀ·Z­ÿÀ·FØü‘÷[‘¶à[àšòfûöeúCý–¨Ý?ê·síÞÖüG—þªÌþ|Kü²Xßwüß8ýÓ…·Tœ\Á¨ß qþß qùß’sý£ãoÞnà[!îãÿ¬‚±³ƒÃÛáï—ÕÛžü‡ÿþú€@n cÄ…Y°1eMPë]•(¡+ãΘà4åŽV-£ç‚C›ó*\meZÀšÃhÂ`7úò–$͵È"é³çQS-\HsœJˣדAŒêäN âünÿxÞ‘è>b"Fu‘]¯g{/M«wM²”YöÎ<¨Ê9Xw®½Rn?úJ–F¾Ìî¨ìVrÉ!=•L1FjDèùþ¢Ì6JŸÁ'‡ub$†§Ã\O÷°Ì¥ÀI)y˜SˆUŠEE%Ü©QµloIÕAÇÈÚ¦ ÜJÊæÔ<¦ð®O2)úûiNWÙÃËËÒLÂ[N×n":½|r‘[È!mé9Ã'ËŸ«ØG hÆÊˆÎ¿?¼ç¶Â¬RS~”hà•¢ÐlÉ¿q±ú:èÔÈ$IäåQÚ¡“c‘ÊŸ¡X¬$GÊÌó@@~?‰^,-ºÈÝ>+,D^š‘›Žçtü}ЕŸnr'Ôš©éãG1­íÖ`5²—>¨<6ººcBØ_£†„<|Úßšý[k”¾‡k ’ɹÖu-…z¿9bŒ@¥³gXH0YœÙ¾Z…ìh" úXHÛH縻25á¯nÂûK ¸žŽ¼¨5Œùðݬ†µåÉ No?Žåû„¨:þƒ&åIσb˜ÌÆu•­…¢ÅvØaãƒWøë¤:æ‰<\|œþ„g©v¡áëG“T‚+V}Ùö’—ò›Ø¡Ùr­ë¥‘UçǪ $$ŲBSKþ(aŠoÖäô\Ç¥ÄÝfP»Ñž÷×t÷«§'‰“HX j*Û¨l-9eTÔE¶åz†5ú*áA|û¨›+MÝ\Ö¶,F¼_lô[Ï/Ž˜‹òõ>}àz¯Kï¯!ù•¢¿1B![é˜e¼†IâiC¾r³_ïšnCä΃º°€j"« èœ-qök% =MÂUŠ•Ÿa ¾ÄÚ sÍT‚ æ`lT´Uº]%ª“áÍ籞‡üÍ™j=iŸÃOX7Åñµ/8ðXÆ”h>4Ød‹ˆ².sލhÞI?yíg]w'Ö=·²¸¾`VŒ9ŽÅa(%#ÜQ©0öØìQ‡Q}MV ªá®ÅhÂøî¤³ö­ç@ìëÅ™ PØÈIþ#€®½­ƒøxñP *b,A"*âC‹ü¥©%}|ÌñP{[Ç0äÍQæ`:¹K÷­9Å»Ò5g]‘EïýòÙ@ÄA™I:€eÇ®þnŸ S—“[©â{‰ˆáLÐ(’áâ-ì™0Þ³æ Ûï½…›’X1ed÷þâOºn#£n¶ÝâöuêÍLèWwZsÌ;tÂr†‹ƒÙ½è Ï„¯Þfüc15heq"ymB³Ò•~e]G÷gÅK6¶¼#¬ÉŒ!·;Y8źè±Pe'}(=È{N–ÜHðì} +î›A» Â:ç "»ªØÊbB—ÛGùgÇK.¡šgôDÍ­ªÁIõ0ëèi<Ф°PÉÐggt°ýÄaŠ2ïU\ y9 „â6 u‚2 ÙUâ&S¨YÜ'×NŠñ3£(®eáµ,ðk+¡„ÜzÁ˜NçœËì‘ñ‚¤Q=c­óÍÐxEhݳ^ºª)ÕBœþ2‘XA%é ×Ènèææîd[VšÃjÜ!2Hwêæ@õ¸kìðÑ ÿmPM²–‰£†Ìà™þÃt2º‚×4LJŒ‰ìÞ§UÔR)w?´ô5Åè-¢FOr\ë{½¯}« MÄä;ȳsÑ3AÁñ;‡k€æögߺ·kÐmÑoA½þ¡*²û—¬±ú #¿‰¦Im”Ùd…⪶ڈrÌùÂML D»¨õ¤pÚŸgÅÈY>Û+¬—)HÝsÑ)pü¾& •Ÿ§¹òwLÓ”;íÆŠ¼Î+¬ZUyš¹ë®H„,BaCë«A€ÏA?ÒÒ§rˆDZªÌ1÷Ó +uÅ>†´¯2ÈSþ²Ñ JkÝǪùµÒ}¨"µ»m°ËЯ»/5?´ëæèvE<'™jðp¼„GÖd¨ÀZ6]Æ>ýˆù kÖBj–¸^]F!£$ÖxÝÙj–_ܲLó+Àv½ß4—ù££:0§°Q»žÜ¦„¯;;f '¥å4,0ÌÌ߉\G¾«JTn³Ò]‘™J[qSŒ*¥ç0 ÅŠÜ5= ŽÏŸÀ‚pßš [ ùz®×.²hæ1.+l´·_ˆºâáø<;9´‰Ö1)‘YO|âåFÞÊkìœð,,LÅ,Õ!«50dtX´^ˆ¦;k±‡ HÅÏØ&Zhžÿší„ -/i6…Ègk$‹ú ßÜký>þ§Ãž%çç^Þw%Šªš?dÑöʹA8ë¿¿ÙÖPoŒWa}êOppšõýN²ŠÇÑß¾%`O®å$¦ÇŸ-Zt£ÿ”› CRsMhŠ?èêîî%íyøEÃWÀºcø¢pA “„ Ñî‡qê¸4×4¿Žf0ÙÚû86#ôq,¼7ñ«K¬JÈ %Zæ Æ{¨Ø‡Št.Ê c¿wy?}ê¾!%~VÚ…Ay‚š ‹ ¡.¨±¦ü…v»?"9£8~¶ Ç?8 v¯uýÆ_èƒ ~ž볩ÚkØÊ@ølIH¿0P&g‰¢Â‰–6$Xb9ü$ùåÂHö­-‹<òË¡:׃—Ç^ð˜8ãèD¦…—-îBÇí jú6õ"yQEK{Öuî]èK†`+åÅ·[Æè‹ˆ—x ¢±¿Ý»‡3¹‰O-ôgRth%x/èÉì¼u Mz“5#DNïÜàÛ]’Æ_<ˆ…£Iýý£‹éû11g¤¶*²!óÒC[‘'¯aÏ:ZtøfïâGL *ù€/ƒ™¦Á²¬XàáºÚN"?·åˆÿ»-yd11ÃS'«;*æ¥V.špÓyY8˜rZÍcé<Eñ¾ÝìXQ3Ÿž>ÏÇ0ž(.Ðx'{#ÍÄ1]ÆhY”âó¦‚!] …‰JßûŒ¤é¼ã(œžÖ)¢ ¹ñ¯¢"ú„¦3gIï—Ò“DPŠÙÔ3rO ãf¨¥°=¡»è“Œÿ ¶'áïigÞňjæ:Ô-B–GŸ=E7v6¨#ÿ^†/Îþ_#$ØŠ~1Ïs^ÿõ÷ŒL“p* ÒIð]¼“³ní´ÊèÈ£¤ÆO2"ü¾a=ÒÕoŽX®’¯—we• Ç\Í¥Zs‘H_°TxPN~ SºYSù"Î^•£Ÿúˆ™o ®¬ÍY#gÓkÒgØö®qÑ¡ZÜ£ëûú‰ûi!rqÞ0©ÚNM˜²ÑÂk8üÞÉ Bþ×Hàž[Að>mŠÏqp¶î}Àzýd‰+Ç*ú\p§ ³Ñ©„.må=œGa6ûþóгb`7%Zñy«SÜ. d"d¾Ýþ!ò!ö}··«B 3„'Bþx™_. “Qqâ–%™ÎV”ˆ@xÞ.JÀÍ‹‡û¬õ/Ú×gòÀÒùµ\6ÖøV`犆 x*ù~-Â*Ñ›Ö/}kÏ#n@£úöìz)èã=)B¸û¼/½8c{_JÍ}H}‘û·€äÒÙæK§}˜–xmνÍ'‚KÁ=Г åò.‹ÐkÿVGtCÇí‹ÏcPYB ŸÒ˜ˆ?>.ÇçA¦dRBÆKõà5c[¶3PAœâjP©••° &F”&©•šµëm5v?~M>Z™„¦7ça Á&,¬Žyåð†¡ï¼ÊN:3™Íæ¿9"‘êm¯ÊõËëïÓ¡­ÅÏ.þq6…²—lBƒêP•/Axñ“›ùൠ¡Už>}Ŭ¬øöóD;‹Üõ¶ÿAïór­÷ô» Ù3ò©œ<íf¥âŽlâuÜ ré™h3Âðc-cã´Y» ¡«È¨Ë¬ÝàæÒïM x82¤ÚÆéÊ·ó>a ¬€Üxàï€íÏù}Ï8ƒ\ÄÓñ´–ÄJ‹@@/å3Øý9òsVé/ÖZbØ5üÞÏRÊœ×Í"A+áø±wK/–"eÊ^DV7¸¾¹_Ž¿8zÓi?÷ÌËX&_Ûéûú$ótŠl}ëJb¯ÏµlÚaK  L€äåV;ÿàáóísw×W(!ùyÅ-Þ[÷°£]_Žá!À9ZØqR'Z &áÑYˆYÞÖôJSÕ¶’³¨Ií¦¦xW 4UBxgZûuOÀÖ ê5<»ù–ÚñZêž2Î:†ÄP_¬,-üôq/|ålb÷Î7}_àÞÓ‰pŸYÓTAû´¶lÙÞÒ2 2¥ö9 ÂÁ)ã®ÛCšmüŸßð™Ò÷I'¤šPØ¥qCBËF_w¿S澋M &‰V¥o4ÖØ(%VW߀¤É %­’”ûl²DYÛIþûE-œI®¯$“Ê‹Û>ÄuFê™`>õ!ãúfؤbvûü‹µÍ—=›žÌßõĈæeˆÑŽã<òP ;m/b¤"÷¾,÷Rè_¬ÜÅ;³rµt’üøk÷C£ø†`JG¬AUa*J\<÷.¼Ðm­DÍ…*oñâÑ{ÒÑát³ŽýbS*†½ùÙ³Ëu=æÞc¿¥Zíœra®Xðøiφ”Á˪_ÖÓ¬ÍyñMu˱¢5ÍôBú÷3ÕÇ_3­úŒ!·ÛÊ—¦´ÔÇ.O_ÇK»$e5}Çty;lòù¡B¾¡:@‘E‚ŽGùkÝ>O.+&$”ÅXrkR¤þ˜Š…†‹Ÿú1ø³YLSŠÆwÝbOw[¦PKT@¤q+U°ŠëF¸ëÀ #âŠúTñf¶?‹¢£<çõÄØAŒ<é¥óWÆ(H®Y3—(Dù]p¾decŽ m­»öŘk&„¼Êí¦çmW’Ó(ž‰ðƸ_¾P4S4©‹‚]mËk¥fk”WlwU툃õ™GŽ5éÑÎŒ9þ¬·h‘»ìP €,`­k9oÜû¬å"—@0°TÝO%æGŠê¼YƘÙ@*’5Þä¤W#él¥$îÛ × Éõ©+—6õÓ¬.OºÕjåÏÜW ^,Tçêζ¿Gšfà˜J»ðRÍຖ݉·Vårp¾uƒ±9Õ¤Q(ä2Ñðt©çÊðw¯Œû³`~ó ¤š4‘¢C÷Ô¬mö‹.PÐñˆ¸»«¨9aœÅk{¼dØ,°»Í]…YÈ‘E–;:‡OÄš„ÿXtÀ¯Ö¾´n LÑôÕ2q_Yâ”EûöcrßjùˆåhòI­¹Å\mE®i;’¶ÆÄoî¡ä}XBu£Ñ†ã9aÕ‹'䟌g­!@Íîeær dNRLŧU³ÂwB¼Å·£ôe‡QS²@¾Ü9×u[TÒE~´¦ÀˆèƒBаYT7´bŒý—ÃDhˆtÚÞhõüQ„>cˆNÌ•¢$Uµ¦q¹¡Q¾#+ŽÜKìe5øïÞ üìß—‡êjŸ¡ÆÂ£ÁvW赯¦äœ"¢á9»Fö؇úD7íZ³tšJÑ$ åN‹³ jçfðúuY,Á_+¥†´gî<~ìÓKyÅÂg›Ä:èKJÅ,­í—Ң̾Ú Ìè×)Øæ¾&»ÐTIÔ0×^-Ê•bø„Ï™lž-¨–ó/I¥ e{4ÕÑ6^Ü?ï/•¿6˜åÚø¬§Öè°EìoL„z…ÃLxn‹Ê'ª¨Þå!ÛۚЬ¢-¥¹'ÿn¸KŒª—ÈŠGC/_J‡x¨—¯~N+?Õ<çÎţφ ¹õ§‰‹´¼DÄ)Ø èFG²Œ =ƒ~òCé¨^EÓ«êæXÝ™õF¾bãNâÅa‚;ÈKìQ?WÍžWµ¯- Ðm=ù¼;Ü/\xUðñ5 kÂ(~SêÒð@\–6:JUJH£Vž|àúÀá$ßZ‡^)kY‡Ø*sª(ƒ/>›f_d’KÆ`è/GòuG´N€ç¦Î°1C¢ª±ömóïZ¼Lcì8× Øt­€Çý 3“¡DXùbbÇ8§Þ:4Ù¿ð•±Ø;!…Löá K®l\ÝßÍ—Õ¬wèÇy˳ÀÛƒ7dçN~’¯ÎÖ 8¶W4ÅÅÄü‹å÷ÝFY ŠËhô؆¶t¶Ûu˜¦—¥„oW6 ýAïÓ#jëëyPÐØ×í¾?ñ`HØ3Äõ·SÝ­ é²+ _m8Âö:Í2c—t5ª#óïÆ>Ö£‰óãÄëKHT;³¬@Áå"Ïä©<é zø½ å+gÓɉkØÇZeAÄnQŒc ïY5U!¡Ð* \œÆ¨0SÅ&G¹é<²ý >{gž]0cí÷Á‘•¹°é~¼-t”…ÕÔü ¥ t{É÷2g“,ä®ê„Ý8¨ŒÐ%Ȧvß}­èÑGúekNZsÒÚMßÏÐÛ£*yÎûôÔcêÓ7å”Íy\L$È+ð“3_¸“0Âú:mâw¡¤qÕw¸#"±|øB¨ÕF–ø²Urò˜—·úÒ4lU95¼³4²­ÙJÈå‘JÃ>ºØè¿ ¾%eýTW½h€ù”0ù>áwëY±ólQx»+ŒûBxŽøÎä¤G¼jÁÇIaüP¡•P:KØÑ=vôxáÂ:o£4¿ýy¦a÷UAÆÏHårÆcl($Ju¹ÔÓé¸^C*'/ÎJ²F¾’ÆT£ªµñ<ËÞ åéýÒ£€[6«4£ £°±WÉ(:ˤo¼Z*„$‘¨Qõ[Ÿ1¨_mrþò\µ£¶¢•áÊüî‡0ÞB&m´%äì:Ü"Ÿ[¬?üûÌüÑ‹/'òš›¯ÿ+Ò×ÐU™tèxUdíz$cM6‘­ÛÄ6M÷èH‡ßßÞµQÉsÆÀÉJ›LT$ñ†ÇɇG3”;B.~âý¤K„£lÏ«uU–ËÖ6ÐÝ{¥Î²³QXö\îDW±à®õÔ8œ -ãa:æ ƒåÈ)îRqË-»1$¾4 ÂñSÙé³ë„†v½ ÌûÙ¼hçÄåM2Q¦¢É†Ìÿ¢×8+ØïÕ-zôöŽ)¥» õpÿäÒPjP–@ýÊ3{voo ^ ’"¦ñ%‚ÅΊBVÉ·-&1™OXqÀœžŸìU\ÜóR Iº%gYö¬¨|€”Dyøm7ˆëÞ‡;KŸÓ¦AÈÂbUcÒÌ™|`tNªºfó mÌ8ÿ¥iŠêÙ{„ÜŒ3ÅztÙáhu™ˆÇÂMúÐ…¦óüóþÇ:Š3ߤ½mâù<î‚î"ÒBFoQU’¸ømTK:ìÝWN§BÚäp?e°¼æ¼QßÝ\ÅŒÿïêLÈ=B=Ñc7‹›ã"µ(5¤ž.H˜šhij„GFƒ³v×S>ÕBË)ú;˜NOa÷—'D2Ò“ þ¯?«ÈÂ(šÕ ÌÞ îŒW7”üä2¼/èXfwëoô.s±Ý()î†~…sf0£•ï{¹y|ŒÛT%ŒœÁ&…ð5|Õ£b^ò¥+ŒbŽÂˆØ™fê1'qš:m1€Á ´¤±à*6ÅÖÖ|‚f鮆µqB,%õÂu¿[ÝôïcÅ9çÙ,<´%ÑY±žA®ÏÒg+&¦Tâjä¡©¦—ÉI $plɆørðg+,Y0:d}ÔV–7@–ÅyQ`îÕ”{òŠ£Éè zIÀªÿLÅ#+ˆýI}B/ÓPNdÓG`-ØZã÷%dÜ7?õów~‚nžÌ/­p2Èϧ~¢¼Ê§âÜÉk\ë| +¹Ï ã=[ç’]d0µuv£8–·$±»â\bÒa^R´IMø0Ž2ÅÓ8äÂ"¡5XÂdUbÕÌS«nû×Uáu±ðf hgüy_ฃx¿+F#0:½ïYX+räfX;šìÜþ²v“ï×bã±HBûÞL%ùIù‹ }'Lj»w$s(df=Î ÎËá7âIÞEªglbcö\„=ÞåH¿. œ4ª°ê»œHdÉ;Ûü4Y~©Ò]Jéo7ƒÑcø&,ôrh2î|‹f1>Fž?€Ë£\zºèp· ÿú,‘þ²ú4âлdMNP÷¥H(ú¨ÄzúRõÀšaÀãé{8 ®ûX¦ùY`ÎN8”Õ+Aï…Õ‰Kß8+á'½ËÚFÇf©fÝCúäx¤n͸aB‚`T²²ŸÐ{}Yù]áÅhéd™Vüf>*&Eß}CãRÍSÕ¬nuž@ñž™ds)P—'Ö2¨J.–Á¼t¥Ê¶üAfÑë°Ÿ¦iSyQÎŒ~—†Ÿ%*Ö ¾#â!¬HЮ‰)¥[Õq<,ôzfu{øûòÉ);½Np¯ëëåÏóG¡åßE{Þg Eú£ºd÷Ncÿà«ü‹?öB›%¾ò2ŽE2×׫BÐ…!öAý!Š™]ýx‡"ÚSîüëN»Oï$Û‰Få3KËOdô#ØóeÜ÷(,Ìgi ;3¦)t3¥¹E*¼î(e)S¡­X:~z?žÄæ±zVÁ÷÷ßÊB˜YR>ÂÙ®VË\U÷^ôøÑŽ1u²Û[Ñ0;Zž¾‡ SíHŽüÞľ¸,îÞÿ‰q9ŸÆ¹n'峸ÑäÚIÉœº¤ÿÇŠh“¯åߤ0C`;çàò8"ñÕs$Ãú½·¢ßã ,úšNtZ!€{_›È¥Ùå|é+Wp·sZ˜Ó _»JT +nÎ佨WOÿJýŒp=õxNùH.AoS2ƒ×kKÒמýéåræÒ_¤ˆ«²Ø¥Šõå÷Îý¶:TGð‡£¥ç ßÌùvèk4JަËH3'E«hsÕ0}†¹Ú81MluD‰Œ¡Ñ|äjŽÃ^ÃsrhZÓò¨ðOt' B0oD4å÷dGíë:QT‚ˆ×ï½3Éô˜³ŽZaÌcË*v«·¡X?·’ïÄò¯TÑTðã¢Çt£ìœwcŽýuÈ·!LÝ×& ÷¶*Nær©»Ä’†8èñH]~} {?³Šì|‘ä+ÓÙ'€dïV²1ŸåN²q r¾|*fv6 ¿ ©Âõž«Þôï¼–®+Höù6­Ž~ð”Z@^Là:œ¡8Íß Ò”kVŠþÂùIºé%žTÿnaðiz\ÛXÿíèšÍ"Lݤ÷,¬µ¾»qZ£ ³üP,‡gC¹õÝ@Vr„X“ýñ9•ÐJôèm¡YqïÄ—Œ^Žž€„VOQÌ@¡þ&‹Û…‰µMñ%•>Ï"òyŠ_™¯$ĸĥJ5«zµIZ ˆò¶ÙÕo‰S;Ÿ­=T{~¢ƒ7A#ë—©I°Ñ”ГŤv¬Haç"ôšâƒ½áÝixmá΂Bî­§<‚>¢ÉsÝMqQ|8OkþÌñämÑtÓŽ°¤ÍI ”Iñ¢HVJq>òc¦µÕ§B ¥x‹·VzOÏÖuA¢U0FÐiNM@‹ª|ZWçþÕÏ•6п—Óvõ[\Çäg^ã 4‚2„TðÁ /¬ÙQ«—K²[€h§õ¤c|V´ŒÌÐí‚´Àô¨ž`ñÈ1@c¶›Ü±ï‡êapçu^•Îö79m2Æö NÌ'Fìîd#NɱJá‹„ñŒ}Œ®Ñã铟æñ…¡x«/JãÁÑj|Ìí-õ-Ž=å \›5èM2¾`·utÒß ÈÑn›Þ}.ЧnÔ´¥ kÛ®rªB*¢~ôÅfΞÿÊ'û¨€ˆ¡>¥k®žôe%‰WSxJ=v*(??ÿ@‘z)Uam ®#(+å™Ëz6 W•5= ÞÐUß•ílÈŸ3Ð6&J‘ñbÔ9æ @蟫ʆˆ:%ÓÓç¨tvñ€EtãùV;'êT:¿•°–lÑo`¯>ê>ö£û¡™Ï415Lý.éàCq)çÐb –ìZ$ѱ^­WI‹ y]ÅKd¾úXŽÑ’'ñ7nò.ðž/ݘ8òP¨…Îßö‰;Œx¬2ÙFžV"ÕÄ5KÑ-®†…¼ ‡pÛôÁ‘­ßë¥"FߤÊçODŒÐDj÷yY6¤ˆæžMÞT¤¶,=Ú½öF9ØŒª`—ˆTP!ÖÁêyN›Ho!:…De¥NÌky·Œ5vªù/¹ö±N}mËÊ,X 3êß¾™îÑ¢ÃUÒêå±ïu>ø  “¡ Ò­eY/©]­¢%Õ¿”n›‚~¦æ)æCg€‘#Ü™HS$¶•ÒŽØrÞ½ ï?” ·—ÅHdÆ„­õUˆðádé!äØÞË'¦ßñØÊí\Ù.¯%ËsnB;è"éÕ§øÛÆuÉ|(™f9yåÞ§Cl^YãÀB®&Ú?U²ö«¨º/ûYmÆp§&%ò¦ ÙJ™rÖ¼CI °Ÿ)€å€\©Ù>¿9™1.Öä¤Îq,ÿ[+KÌɲ첄ad÷Iˆ.5ÏZc­$­ >ñCsFÝÌýy“þŠªýß\T¶M¤D—¨©Ó³êÃ2…¡Íú’r~²,§ÒÆí‹HŸJ`R0,$®]ê#BiTb¸:ÆP‰ê|ò)ö‚õÕœ^”–‰˜U:q̈^FStÒ-ß!ÐT¾‡éSçd„ñJöÝ,›ŠÕKƒ¬%3S­WºÈ[~½3‚ÝÜþ ‰_cÑ< ®’ï}!v·ßâÁ Åÿöi›*iìÎC4öÀ0~i8j:ÐÀ .àôfm'AøÖèáSÏÆ G'Â_©eæcûY=J°žç>ݳ ßYÔT‹µùHwy“Ü«ûõ5¾ Éò¬whHZZÿpœÃj<…*Ô×¶ƒ6E¯ÚO½bÕ¼À:ËüŒƒ¯ÍkOš›ºV ão&ilœrß Þ .Ì:=×y*@ùœóІZBíèÔîìÍ„.#wœW4øvï[1, ‹zï RîNOÝ¿Xi·}lìð”ÑM/üÝ/ù e>Lñ4Ôð”á%Éçø£}¹âR?¡ÇZ°PÄ9o"BSóèÜ"ü+°Q?­· 6!ûûXîN÷žï÷\¦ÎW%³`ÃyîG³éGg^­j4UKê» ]BŽ —%¥.5Z­\Í ÉØ ­5d5Gé¤À—÷—Ó¼Ÿ·vöΛû_;Œ ^²AÝ2µK´%h¾Ð‹‘pAÝaÓ®ÔôAjg|‹†ñ_×ð¿¾g•í‚8{§Úb3]s1¸T“¥;+›×Dqÿè¥WùÎ냷-Ÿt™Eš=ܶ´Ö¥nðgÜI“Pf÷ë, ò-µÈùÉDæFóX¾µ6¥Tê«|Qé,…[9Œþûï{ ®ú+ÚÞË-/4AmxDÞº¬ÊùÞ9´V¿Ÿ<Š®~D*ÜXƒ@V-va”Ëékdbj;¿?•ÑÀaÿÈ,®,È»rÀ”‚¸´ý]ÑÇ N/_ÀÕ# 17ÑMBÔAÉäà?òÁ…nÇ:GW¶Üjñqw¬;šáDÊíÜÓÎ÷sHa·äbcW #WU5TùŠô„7ØåŒ{Qõ^2ŸÌjf.rã°_è¬-‚Š”8H¯.^ÁX¿Õù•xûŒÙPÖ’öèðÀœì%û}“uC7ÂC‰š¯¸Í £+ûíX5>3õºÕ×þUZ÷¹YÈÈ{¥ó.ÿ†Æ#1B‰îÄê82Qêµùq4míT[ÍIF–6Ý$œK—òR7¨_$že?Ù/^ÓèMØáÀJ  %·ÎAýh .?}¶Ô¡„€»ïUGmˆ}ì;Ïçã&g‹xâ>üD¸3aôª˜å®kË@9Ë¥¨x·.,+Å5ßXImŸ7-¶50ônPoÑDI–OjÜÃðð+ê Þ™Ù}øLvC´Ãwßh#˜ˆE­û¾ÇS}zde±Ê½Çèƒõl ì©ËqÕ€“¼,ÿýùA^1“’.•I+¾r8-æÈ•7¸’{ ñ¶÷D´F¹ùÑ•g½nBkp°Ç _â\·+4gë‘Çи:ýn.IDÐÂó¹¨4@]„•~ÀùP^B‹#–ÙÙ¹»cË š¸}ÿ û½eÿ ×·_º=9ÕêÓ{᣷ð ŒõïCÕþ`e›ñseh[ô¼XÔµöÃc¯,Ú]ø}%ùT=âsê—,¦ï¼¿±©n&v>ªWâ½(Éõä'Ûá«“'ò9­Ô3\Æô‡Z¢!¥÷úu¶¥(ÚÔŠÆ.À žÇé ñ9BiÑ^»ÂHC¦î¸§FoYÁžÐÕ|NHgÂÑE"©"mž`¬å2Qï$Ù¤¾…*r{ˆ&B÷zpáùV½l2|Sã3ßÝGõ÷¿Fc¥IŒ÷Ÿ_´ž—%'wz™šxyðiŒßØó<»ª¦ÊjïëÅò\|ÉÏe²|ðR0m.®k3^ê]0 Æ¹ŠÖ\¤iþʼnˆÀhjFá3?¨w@Þ}FYDÄ.edh_R¢À±‹yD…ýWº »‚¥EƒÉ—!ˆâA%ÅÑäÞ»ÑË&—šnê(Fu*=·xŠ#£ö¡„½ärJŠðÀ« aÐŽp­‡,·´¥P¦- Æã³9 j°Üp­Ô†‰¹É ó—úúþvð±P22¢œæê~x±}£'Î{Ç·ÚÝz¾73],béÍE”‰±Æ†9¨:SŸË+Þ]ÕÇÂ…§iM—l³deiF:*½£¡<=5û._ ¥þp:†q-gVqj,¨¢RðGœØ|ñMRcYeøukß+}F E´G›Ö¬Î=ÞÁdîúÀŒ™’Èm;@«7‹·OÃUVÞFÏÐ ïÝcȱ®Ë×¶äí+ÙÌ,F¯È®ù~x@Nu•Ës'çÅó2Æ,¸ j—èz*¬ŒËy}ª’À™¶¿ƒÒL@i<ÞF%ú9¹M6 ¿‰¹ö{#$%²_úï1»×³P{ \£ü\ÚWŒüÛÝ0 ‡Šg_6j¶ÃpGˆ9ŒárÀL/ á8vsŠÅÃÅÐÓËï\è¢[Eç@é€ÏÃä{¥àÃ_æ|M‹¥ÜØšš²±˜ðå#ŠsºÚ¯Öƒù*g|ŒN¹ö!û8E²¤T’/s[›Mü|ö$ôúYøÄN•÷ù˜=åŒŽë« °6IA'.¢úÞ¡¥%ïjLö¢Íc-!U´6.#äH©Oš¢Åc¤ó4Et¬V¡®x£F e3Ø$Õ5I ð0%a¼ . ã›ÜHá“9{tÔn¬bzè lO²^­(ˆ°ñ%𡬥ñƒ¾’¼ÎwÞ`ÕÞOS©[^ ìi$™J[¿'–ŸíjVWŸË‘’·äÊLNúë SQ¥†ÔÕÓ‰}ó—Ûõ˜¶vxPz!~Œ¬¦ U‡UW°àevf”r:ô !/):ç{z´‡Sk–O°7ÉZ’ÒÿÊ•à\Aòœ†;ÓZýÔ4HÔ²Hpù*ªÅ£WC˜¢Ò8«½ÞYߘóþbudRççŒe~lümôÐ>k‚Ãø¶+د¡îK Ë1þ¨æ&æŒz͵•‰ç²²"›|ð¬M>|ª‚_i®KÃ}üqroÂO9M^–W‹hcÒ»f0ùD§7ž‹—»†±Çû‚|¦|Õë+ØmRå’•äHìŸ?6Àúœô±¡ü`´å†´Ò {§‰¤k¸Æ]5ýš¦”ݪ …@s"@0Lµx ûÄÊÏvE¨#­ÂEÌs„+ž¾fwšs:…°Oð8 e:T”»}œ‚µH+~ØN‡ïpÕÏÙy£÷Ê×iÏ€p³žêj>`x±”‘rèRâ©Ä^è÷õäe_'[-‰+D4}ÈsPS]±2‡¹ê/W¨RÕk€Ðµ~ýé6n™LÇò—æÉlô"íEÞaê`xlÈžiKŠª)æ©c:Ó#Ì=4œ F ¿`Øéü=Â̾èõLR5þ}ÓV]9\Œ F ÐNYgÜùáðŽe…gU®[?ä86V›jÄjL4¶>ÒÊoêôévøN;Ó¤ËÔÚ*[+ïUÇ¢Ê"²ãŒtâõ1?Ã\Ð$ŒÍHÒ™»t(Ÿ‰L~òÜ2‚ú–H:ûNïƒJó¸¢Î{ïÊ®Ô}4Îh’Ë,Øùž+Ëýd ¬ÊÝÛÒáËÕˆÄO¸DJå+7ĸ3BéÞß¹üôîzÂXGcI#u5w³[%CGoÇ+ÁY$à»Ñ¿jÖ¼üÃn5©k×^rÚ-XTFEæ×k§ˆRÝ×ÍHÅнT4…æØù¦ƒ ÝöÛIád¿¬§\¢¤…F°'­©‹Ÿnj7ÏþɉzÇ{Àê–¯$YžbEûæòÑÎ><›!›*j n“À ^…j5öøWL¨Ã`bfŒQw6Õ™B˾*okËmN÷J“`9¢9<Ÿ¹!DD¾’08V^¦·±€òû'ʉ…“Õ#½™i\ÌÚÛíœÌrØgaDuQ2wÉ’,"BJó!›šU]ߎQ‡©ŒBô?àŽ&\PRNæSõåôpG?<)Õd÷g¬]°¬;(oB% íã+È¥Ø×±Ë»g°ØÌéÒø%ÃlG2ILÉÀõ|:ÞÜØÏËÖ_p0åZªÒO ='…ò¢‘Ò¢üœZ*0fY1ϵkºð•ìþ˜œÉCÙ`~(WpYbó ?`ÿý·cq9d)ÞÇ­ËLŸ\ÕçÍW ¤W§»kÔbD`G5k5 áíÇü^Çßf\äÊnçý : Ç¿7ßCÔÍF°\7ÁT÷´¹7£&Y'’8÷d?J×b~@‹]ª +«D Dk8ï¹7ä«Ò| ÅÕ\Wõì|ix¶fæóÔüî~ŽÞSœçK•Mã{7z‰åáŒóqönÜ#Qè}6䬮‡úÈÂam²BNpŸ w”6z¦Ì 1áã™Ô2Ñ,p¡ø‚ÿŠûŽ0hE¯Ó'vŒiz“aD\[Ñ*ð®Jñ{libÕ§ ®“w澯;ÀWCâp©$B9Ç<ûïÔ.Ž=&­Ôö6µ2ÚìäLv–šŸ›_`\/“ÇÞ;F:4Ÿˆþ–X^¾L40Ø™W¼ñîo‡Gj·Üö>|Ë3èx"0)ŠØß[¡0÷Áᙜh.\'襁²’‡o¿_Mõ+¸ØV]$¹à×T~ÿ9žiït÷…®Æâ™ÜÝ›&ä«Þ­/ý€ #©Ú—£aº¯p ‘9Öí»aá’>ê±æÓš\±÷Næ_/ê~©$4r`x­.QŠÚZ|<Õ첂èi]n¼ Î9E·6\Îá‘^˜œ4Òׄ”Â"à"o â+‡ÈNqùiGÎ\Ó\VEÙÃÑÔ¢ðjȈ€*F}`—2 Ø¥Cd G™§Úźv}K™n 4ó‘€¥„up8û‹+©/BŠôT]7KÁ„YönŸt}¦^1É,‘0[Õà›_è1¼ès ÊÎÄæ)lwÂê†Çë(·W¦¾š¶W|+¤ E2éì&oR(TÐñÈíaâÌxmÇnÇ4i’ÅJuõ N‰Å⥸ :¸èæ!z°3ô¶#mf´’éDßµ… ó¡Ò}[  Õñ¯3É`§Á+¾=g÷F”b.–xaïDCgñÊS+­~xŸŸOdí¸†x>m mØïáã"87¯º|ÙXÎõ“n2ÖBõŠûw§R¼¹n‘6¦µx¢÷ðb1o1%HDהئ"ïYÛýó—Ï„j&®%ÙÎtñÄöm¬*e¤ º4u;„›  Eæ\‡‚^ÔbÓâå.ÎJ‚ÝÖ–œ#‡pAÜ«.ý^í6¢j„í%ˆ1 dÎé þ!X««1ÁÂ4­¼„:‹i*gH¬ÿš ”-̤e ñÃ@Ué1°1¶M:öà”Ú”½ú ÛþÎëÇžbãplWÙ>s\ ÎBm9™P H?æ—öAÐ I—ægDß9{Þ äƒ²>‡æ3î:¿€‘r9W¡#@]î^pˆF|l¼UqÆïBʇ %èÚ~\f÷žÇ÷Cì7r9eާç©Ö­v-V‘Ov¾ª>%=m­ÇŠòªW­×"¢(ŸZ‰»,¢¸ûܨ'¡Á++üvú³†dLPýZ·Lìrl‚ÎPeKp$¾Ð úbü $ÕÞ.#h‹s.‡¿P“6£ØØ+(+ÕÌUûGIoânç#b¥¾`Üe¶fu²JM‡ûÌ]$UZÜqÿÒ–Qû­ï5-EîwŒmÖJw ³‹™edc† Ù‰E8Yæû»Ñ„Ssù©þ¢©¡ìS•– ‚ì-÷»6ü‰ZʰÙëµC7á*|¤ZêFœÓIŒ]Š/6Æï~ÆóhH9õ0…u—aìÉâÔui©±ñζ¯¢ºàdÑLŸø¹Eˆsa[põ^x“ùÚtÒVrC¨½íÊ-R“y¶HÛqûÍäìwVAJÐËO*)“ÚµvâÛ¨Õ•À_Ærˆü„΂;¶‚õMØrÙ –k•RÜpy9qH£Ç®{2˜ªTa¢W_¢ðûmVv‚ÇÙ`[vŜޛ‰PYÂB뺻¡0…øÞøœòiÕ‡œš¼N.”Ó“\Q¡s{&µ)•ïä>¿@ÏM+ílxaže®ÇGf˜mÂE§ñš•±!ÒTyi…qVqõ˜II¾^ò¥üá ¢/5$«Ÿ²]÷ÊÛyàihC‰“D+á¼ÕÖv(¡–â1f*íëæqùºúRÇŽ ÛSvÅ—¹»Ì«~íEïÐ jàÝ=Kn›xZ['…ƒ% –Ñl‰<_ëâ¹Wâ;œ~æ Ì'-v’«ób‘ˆµÏÑÁÓè¿Æ¶Šl8»' Nz:âó. ˆ)‡*ˆka¼½àä· ~’ב^¯¿ÙkSÍÌm8³ƒMOpo7rô¤†äBùÅè ÷±™\çu}Ö;Ë>=iIA·+ÓHŒ†`•¥²09`§(ªÏ‘O޾Ñ5ëœ<Ó˜ÚÆ¤ÃèÓK½Û>XÒuÃħ´ÙäâS:½ž¿ýÆ ¡#¨­ÄÎ_˜Km.¦´ë`ìA«ÓÜêyä^Å 9æ!câqA[ ¡ÒŒØ?•j7W£µºÿhª'N‰é‚„YO_õôÌr¾ç>Žïe2xËÃ@̣׋ÀËFÅÊÈÛúùê3^—" o˜q$Ôäs:ÈÐÀ)à7Â7þmÐIy’¶É‚ Ù¿ï#/ÒKýlâ"[…"A¸à­¾³»úFàÆØV똺½Ä'îˆð˜ïÉEîøg+Nˆðýöã¶ð†gù¨$#Ló¿'8;ÒºÒç8Ü%zC’ Œd9ß.£²¥Ÿ2;‘Þ‰Î'³<_÷!h¿ÔØÑý ³›ÛTSÅ Ì[1g¶[Ì ¶ i[ü¼Uâ§£…аníxÕ ˆ‰n…€Ý6‘~á ïy§pa—rGöýc‰¬S;Á•Þ¯ÑÊ©"X…è#—ÔË6ÄÊ­DiŸó»S'lÏR­ñ‘:v:u¿kÜ[\—‘#JDi“ì„fÁùêk_³cÚ°.íî»̦U”ÎOáhWiá¥V¬¨»||Ëž&±«®,‡Ö9¼{ßp‹¾’3Šòà9†@LvsŒñ„Á_‹,­û zš×ìÞj–NÞsâVX¨–´í¼žc\ú”¿`K¥2ôÍ d…avÁ´ÇÍŽ¢Ò—×iËf™Æ=ØðkÑŠü’ êz,x—1kÅÌ=<«(¢¡‹Ù,CDà_7H‡¿–ÊÊ Éâg —ÈLYÄòÎþêqyûË»ÆÔŸ?µÇta€õƒºå‘¾²WaÇ…Ú_U*Ït~…¨˜˜bŽåÙV?ã:͇x¤bû¼y~¨µ)0š§©±»”Iˆ¦ 3¯'Áv;9߈ þŸ°OüN30ܨÂPœ¾ ¢T)!‡S]Šì+¹OM«l,3¤A«×ÐÝ]Þ£ (¤P‘ílÜȽ²´•f?¿ÏæxW$¿…@$WH|$±·®Þ†'bv9"lÏö}M >nJ?í»Pì‘Y;ËŠÖ£ÉÖ8Eºýò óm-£*l3¯*•¼7xÜBPñ?à’­ú¤Ÿ,uTÚÙf¬ G×@ÎÉG®öAåîYºti/ÆÂ)%Vhµš0 à›p¢} ¼ùt ç2„XKÚ[î£íÂ`©K9ˆÞ’o¨Æ»o;ˆ50`OݾzU7ÎG¿b!A¸¹µoU£Õ­nÖfc›3/Öà® LC"Ø.R€p&o¸†ÔÍ%s­ +CÇe¤àÅã&y-H¸‘aúá0_6o77ö§÷ŠÂo‰e‰ÆšôØÚ[È% E±Ô«+ÉêaO@ ÃÛŽyÌ€d€l_ALÏPÚd—*8XÞ6œ¬u==ÌVÊEÎÈùl jÂ[dÍPæoN³ôM¬æ‡X[Óý€.M€9Á=öÇ4 ¦ÓËhÃîgù‘¼BýRÔUI¼$rñ@ëD¹n—,î«åÔW€uP§×WƒW( ˜àïÛëj盂±ÃÓ¼0ß몭ºq7Õ6­ªÒ£eúüf8—a_šæ Öð(D\’²£Že–»,ÄAZ˜¯Äͼa/[c»»¿f–ƒ»nlØ¡6:{µ§¾ãÒÒg;KÞ¥¢zÀ¨‰É«t|ª ?¸åÈäû¸¶U_ÄèQj{ÜÒ5(KÈ5:…_g‚¬YZ½q,}“M¡!™ý• Ëð‡#g0`ûY>A²XblVjY•¶ö·Ø ?þAz®–Ò#œ )r•%[zm?F˜Ïùž-¤s;zËGnoWÌtì´úî®ðÔ‡õE"ßê§ô™rÛÒ$à·ýKö°€¥)˜4ê)†4õùY]ÆöÑéP3VfÅQòÓ±[kpx ñüÊR„8¼û xrœû¾SØu Ð° €Ò‰ •‡ùºZ?ñ›Km endstream endobj 611 0 obj << /Length1 2238 /Length2 15643 /Length3 0 /Length 16973 /Filter /FlateDecode >> stream xÚŒõTZÒ ãnÁÆÝ݃»»kãîîÁ ÜÝ=¸K€à‚»»ËãΙÜùþ­÷k5½«vU]§ê49±¢ ½©½1PÜÞÎ…ž™‰ "'¬ÉÌ`bbe`bb#'Wµt±þÇG®tr¶´·ãùCÄ häòa5rù ÊÙÛ¤]m̬ffN&& ÷ˆöN<Q#7KS€@ÚÞè G.bïàédináòQç?_T&ÔfnnNº…„lN–&Fv9#  íGE#€Š½‰%ÐÅóRPñY¸¸8ð02º»»3Ù:3Ø;™ PÓÜ-],Ê@g “Ðð—d€¼‘-ðßÒàȪ–Î;TìÍ\Üœ€€ƒ¥ ÐÎù#ÄÕÎèø¨P‘’(8íþ&ËþM ü»9fæÿ¦ûwô_‰,íþldbboë`dçiig0³´Äe\<\èFv¦lœí?âÜŒ,mŒŒ?ÿ:º@\H `ô¡ðßúœMœ,\œœ-mþÒÈøWš6‹Ù™ŠØÛÚí\œáþ:Ÿ¨¥Ðä£ïžŒÿ¾\k;{w;ïÿ 3K;S³¿d˜º:0ªÙY:º¥DÿÍù0Áý±™]ìLLLœÜ #èabÁøWUO࿜Ì™?4øz;Ø;Ì>d}-Í€ÿà¼Ü€'W ¯÷?ÿ‹à˜™¦–&.c ¹¥ÜŸìf Ùßøãþ,=:LãÇ `úëï¿ßô>&ÌÔÞÎÆóý_W̨©¤$,­LûoÉÿu Û{¼éÙYô,ìÌffVn';À÷ó(YþûLb¥ìÌìÜ÷£Oÿ9²Û¿g€êß B øß\òö“ Pýt]&v&“æÿÏãþ¯ÿSþW–ÿ×Aÿ¿'wµ±ù—ŸêoÂÿßÈÖÒÆóߌÉuuùØ9û]°û¿T àß«+locú}R.F» dgnóß6Z:‹[zM-]L,þ—¿íj-š¥PÑÞÙò¯§@ÏÌÄô|Ûebýñ|8Ìä¿\Àåùß’bv&ö¦m ;ÀÈÉÉÈŽéc”XØÙÞÌëh ôø×ìì]>Bâ|föNpÝ(;€Qè/Ó߈À(üqEþ .£èÄ `û/âd0ŠÿAÌF‰?ˆÀ(ù±¥þ z²ÐG=¹?裞üôQOῈ룞âôQAùú¨ ò±Uÿ‹¸?*ýAŒÿ  &ÿEÝ£é?à‡&àáG«ÿƒ?„C˜ý!Ë?|Ö¿ Û?üå·wuúGüÅüðãÜÿ…l·dáé`ññÿa|Ø,ÿ?¤Yÿ~h³ùügû2ˆû“Šý#ÔîcÚþáÿPkÿ§úG°ýÿ¸?NïðÇý‘ÌáãwÄÎhö§!lÌÿ¶:ýOŸØ>:çð±öözËö¡ÜÁÆÕùù?,Žÿ€½øG§˜?„ÿ!³ÿ…€nÿè ûÝùãõüoþyÎ6FÎÿHñqŠ?gúx•],œ€ÿ¸žI.îöÿøÈáúøÑ]·\öÝãð#ŸçŸò\/ ÓßÉþgwM\>úãò¯×õc±ÿƒÿõs zMà–æíMxC¬¾‡t<Ô á¹ÓïNðÿ"ßÕH¥¦÷^rêt}B‚N¢®É ZwºJîCYÝ£ºý¼Lôê}ÜÚÖ– Ôþìób¯<½Û·8…98Yx,T?@‹O¯úyÏçÕÑG=м´[š<×Ñ• I1íÁ½_£~ |e,t~Wi¯†Cþ¥|†>F-Z7°d–<Ï8k›Ê…ž†õÂyööîjÎä;‘t<-œïI k‘·öË×Ç9¯ß•ª,Î=8d8ÚØà·¨cÓÞÂÉÒX ޥűҡQÅfúóÍÈFŽluÄÝK|壓›£Ø‡"åÈÛÓ¡±&J[äÂÇ6*9]ب¹õœ%3¯ÌpÎJ]û¯˜^QU³™NÁ‚ƒÖ.§Š,ai?¾Ù†ÜR Bu„$/p,âäpûÍP6|{÷ÿ¿Èbœç¢ÓëmäxÚÆùpé;9)a“­s£ªu* :‚?Lj4ÂlAœÃ exš­14Xún-ŠW3 &c5V·.Ýí…ôþC>ûØ$XpYŸoïñ3ØÆ‚£ê®kÈ¢i¹púkºt¯ĨÌs$)‹J~­Nâñ@–°1ªàX¥h}ÈwΚR#£Âäˆ|JÜ–0ó›’{Ež‰†é²™pøCÓaÓo>ÓRåSg_$õÝÃå«+&¤¢¢çÌY¬ = cS×ÝÒ ˜ Õ³|©ª8rÃ'$!NØT8•òA?1²“¶‚I3šµ­zï,ò‡iSÕÞÜkÞ/·á^Èâv~LménjÈ3ˆQ©ÏèžËïíáçvöµ°~B‚œ¼²1@qî-“ Ul¾/‡ïúêi¦âYº9ßm¼ñiü‡!·+Ã×Á;Å­¡¸ZyW§yjY~W‹²¯sA3C¢Kym½Š³Qú%¾ØÍ-D==³p;ô¥^j4ã+„¬•û~wÛ’EîXÁ^»J<`sÃÐíDHó›ã ‰Ó&må˜nØ)å¸TéA¨|Ú|‘‹éì2+³éõ ¿h½^>Itæ1R÷ø;iU&Dò,Ô ›äƒb #–åqJ©Ï¾BÎïæj¼·f(ë!6fr÷CjkgØú˜`Ù‡„ÕÅIéچʃ„úÙ¥%íž"Üåâ0é⼚É"d8A,ÎC$u*ô¿ûÁ,ÿ?ýšQÕƒ Î B5B¹¼G˜ÒkVŒøÂXd¢‘,šúó§” 4xäIyJ¹4¤m-¢i¦;ý…Ìá-xŠ„`õš»>ZÀÏ©}å[–¹§G{ìü‚­­“6‹ eÛHßE³¾Ý³ÁVŒN¶”¨.ªM_“Ü[6«±,“ìÐXƒp–ßÒ”ç§êz_t1¯p\ÏŒ_Iüˆïg”AÁÉV¼}¸:Ó=MÇßF;Z®.Že²Ç:ÀZ;Šó“ËzÞâÄòʦc_È&nÝ(}·1¨ùN¾ç'âl7ÏE^‰NÙxŽ)Ï”¥ Æ|šÕ«È³ËŽá»Sµlì5OöN}áÐÓFU׏߯›I.ꂜ!léF±·€âQ/ŒxaÙ]•äâ^*ZRS*ô. [B—L †VûòÇúŸ¤_µ~Ũš@ß'Ô5?jn¬d‰ztƒÚÉÙ0¨–‡Ž8Ût˽lj,f§º¤²“›튳±5Áɯã\[ŠÚ ¶qP¤¶@QÅ›éôÒpŽ6¼øÄGîb7~ ±MªAϸPù‡Th*nÜ’},Söy¾ü5M¶rÈvv4âØ M‘ ¨Z1B黯]Í(º‹³zšyèØmÉ„ Õ/K64-³cxææ×qninȲ4ï…4­®-ܾ4Î3öHŸ5Ú×yÛ@n(y€¡èL¯NçàÀ‚ÃÝ[Ù„­ÚÍ7c YD¤hf†&ÒÇYh!åÄLfö¦Š™8°*¦$AÅî±p`Û4ÆßàM¨Av£®å1Æ£ô¸eæˆãhª­4@¦`Ö™îI£òŠä{a)¡ÎánÔ ŠµIfû=ÔÅK[ O_vnŸIþHÙ1ýŽx…†sØUV¡c‚ߨÜïìÅà·4ì«H” ûe$¼*‚—sI鯫¬a²Üb@y g¶L×/xð³ûýö«Ðß\ž €(ï««¸BŸ\7CjÂ>ÑP||Ö¼¥½$²$ô‚Ø´«ÿ÷ôä™ßÎ?²D±Ú7~)¿G$õ©"6Œ™ÔAW°œÄ“¾xŠêÊ5|Rá–\¼PŠé˜Ër2»‘(ÑÑegK"Ý^rÃÐù¢5Ù@±)³£R¤ßàgךV%‡«ùLÇEQÀi„8hJö–ò; ^ß…Q5pÑs²Û¿»»溒­EIÆ›z‰䋆h‡©@»=.ðhY;Ãa) ×2„ˆüYñ›ì»q¬Oå©$ G·L ’,‘¢æèº—1RqŽv¨É̽ï{à)59–좌™ òïêÀ­ •ülƒZ\ }ð½ÓÉ?'úÊA¹¢Õ3ZÕÚS rã»äé/„5îé úDêÇîg×:¸WZt›ÓÛ¶ÆÃ¯2Yç°ÌUi(ÈJ· Ü—/{Ñ‚òQr4mˆµò–çg²f×fⳌ%‚ð c‰ö(cFãĹ«ˆ[ÂG.z·^AºX•k‰ÊŒiNl…ÇǘrO¥É˜s  âîþCç@vʯzWþ Ú=Šã„C _šŠj‡ãŒB†‘'d(éÁñà&M0>•G­Þ³Jø©‚âìS¦/çÅÚõé €ÅÎäÎSæÒg´@¬¬Š?t¹Ë)¨ÆÕˆ:K§Ž*áµ5<õ{CÃ>vª®u5ß°T«ãÄWË;¯Ï|}¾Böï"^¶ˆ¾Z!Ã_ Û¼È٠ý¶?”IY&‘Ìš¬AšEδT°L£”ªsRJ×Q5·ü̘¾ª2aV”ú·yÏ`“«4 j5,Nn•SªØÇ|ÖîeÌ2\]§°&Gk+ÓÒ:øÓŒŽd•‘Õ¯ ¿†÷ù.™3Ÿ‘³·ŠÔž~_™< roÃ._Z¸ ÿ³Ýè;‡ÓaŸEº²8wmŽê<‚wU>EêÙú—8žÑ‹nÜû÷ÛX¹w«ž}èÒ„E¼ò8q0,õ÷åp‰­!·æ (ACžci ƒòàXÓ0òƒÿwFHtîèo>­{»¡”¦ª›Ÿk`_aÐmtmÎs‘=u“’a¦øQç¬ à .ÍÖÌBò’c£sFá«QË‚ÝñĹKn'ÉäÛC–ùò_KßÃI¬4!Û5Á_åœpÄjN²æd_HˆOh̰i3ˆAÕ„"â'GÀèYQ{¶=8“/9Hñºßˆ¯#ù÷I‡Ðž_ᇓ†]‹°¢Œó[Ö%ºëWI’Š÷ºeº†Æ›ÛsdwNü]Ôã‚qŒÅ¸÷Ü_ù2ìÑ„ÕPŽŽ—8«rÙ˶±…›¶•¥iõEÜF$ØêÄhÛŸ˜Í÷JŽ+S­“ø“CO¢éÚÌ¡15¿%uΫÓwÄÀÛTÜ>ÏX6¹ïÏx’¾š¦¿ƒõž‡¢;¬ûeè‚#~éQ}=_†ãÙ½2bi+œF[]õþ’»»-‘3Ÿ óù;Ï`žMåÓ€³Ñ×ÁR—DÛŒz¤Yûô§Ž¼Õ®ã¢1)P>ÃÖ³¯ô‚g·z¼ô×ǘP¾*d„F>÷›ö MÖ®”çî(¯5)ž âG©!k?XÑ[ú}¥hÖ°„E&<Ó †A!;ØRP_x¶’êŒÅösÕõB˜›fÔ/é‚IÂdìÅ™LãŒpÛNpÞÇrÖÌØ$ôÇ*­¿QyïÿçY…ƒIk|[Ó£J7/ã&šÎ bÔ弌Y ß;Ó¢NäûG> 4:gdª|ÇÊ:  3r)õ´­»œszk%o¸gÅy1G)Ê)Z‹¢È—ó]\)b͵²0ŒÑÍqr5X¿ä½·lÂ3è:‹À€³7˜N3±¾•Ϙz ²3Ìr[À˜£fIOZIû¶CFzŠÈñ8íývóR±¿Uݤ+îv«v¢Aß`sGî©cÞ0‹rúŊïU~c•äÛ7}k‘ïçžÈm«äøoDÔSävMsâ™ Œ èr(ižUþÃè³û~×ÚŽ§eËD–Rù_ÉŠsDFU3h<‚ËôžË÷“©oˆ,s@A]Ø´3’ÕAfõlw#ÕÄ/+<'TßvP›ƒX¾µÂ]‘ÓƒI« æê˜ÕªjrÎ22à~1 ÃŒ „Qƒ§»·à<ç’Ëg›<‡õ:àæÙ«ß´z³ur»ÍP¼ùJŠ(ð-Æ8Àãª}Û྽xTöGK¼gEhyBpíÍ$;ò´ògFo³c%‘Kß Ó‘˜¡…;¿Åm§úCâp¶öלé¸Ûöh3ÅûæÓ€n¹_´ú”t©HgŒ+Þ‹ãÃçÃŒÓéGcVûõ*¾3o§Òa^ðÓΡ‘sM;‘›óVX°¥kõ~^²ÞŽBº Ê3dÔQ<^ò*Ò²¿=ñ­ô³û~#hÄ'¤žQò›’ÑÂxRd‚Œ ‚’VÄô£ðãÞ¢øQ´æÖ»¥ÿN ÙEݦɾÇo.?d$²ø½Œ<†rkÞ ŠyÕÜMp?€£ž3Pò.ó˜øíºQþæµ×*K ´}©Ëø÷ûnak ¨Kžø•çÕ^ýîí%Ź÷µ»’­v¤ô·|Ç8ÚÖÍÏðçÛ¶vtëVrvbfR¶ð¥Ê5jU ZH5\}éò_°J Þ³dP"yðôú …‰Ë°ä¤1"Ï÷)„î¬{¼ù‡úRwÉó·ÉM”C7í:ˆ!h‚·¯Òó¸Ñѹ"‰Vå‘] T³ŽÒ™›ˆ(Îh …òú%®R>·!´ïóLe$ð<ð q¦X*ÐU}Õjî· $b ÏþSWÇüâ±?ø‰r‘§uH¾x0¡ƒ|Ú~…O»ÕööŠùq³FÄ‚pÊ5ú“²I¶¡wÜÀˆÜÜѯÝ?Îxû@Fc¶âX-×+ô ô.?jD>+4ÿŽN 0<³„ݳhzÙ¯Ú4Ù.í¤e´ÎöC÷úrO¿— ß%™©¦aÒî;…vø%+ZпOÎ4T—Œ·¸Ò_U¹‡]Ž«WôÄ¿eJ6ÇYË;B´” þ!XÔÛ¨L׊·™Ì®Åt$‡r|\F !™Ò!aÁèáݪÈ',PæyS$¤—‘#11¤U6’îb>£áJ_HÎNòŶ´ýkF©&ëʪwpc¾1á$Ô;ŸŸ¼Z[ñðÕÝ6=âÞ‹åtw™{EÜph”tÁ6ÇøÚŽŽŸk 1#°ÑE¢jÏè8p–}®Ôp¾ë°ü,ó~hÛÝó¾1¨Çün›¬ªÛÔU±Êí/q™ 2Ä L.‡Ô•Eq(f·s³×œIP_m¦íÒåÜw5ù2á}†»òZ.ÖܱYHÛGx|F§:8ÖòØ$k‹f­.ý¤B@ľÙÞÌ^¦»UEÔÓõé¤{”n¡h}ùÜœºá„/‹ÕÜCùDÄ:ÊcX$Ä)ë§Ik°—Ú¥L*±#¤Þï¢)ºfŠØÕ@ ;ϰE躹âuc¼ƒU”Z‹w\á¤5}Zü]>²6§‰üzÇäjWM“Âb<œ#nQ¡kÿúicVc‚¥Nû!ÉK¢æô`)Ÿ;3QñúêiÖi òN²$ðÌ`nx‡+Ì!±÷:t,œDø2dªy׈~ûµUS̤.óôË—= j»ÁAŽRÇ+”¥}iHà7q¾ú8\ÖÙ´mð·ß[òä˜kJPúîØ¿ƒ£~xgPˆUEóä[ó#ñ.Óñ…K뚥|Š’àrüæ–3jÌdÊ,­=бg^½¶-ø_¬OKõ~¶§ÖpÊôEþÍÛNí’uÇÎÉËË/Ú%»•å zo½zXù|ÄMÔc€>f:’å6«¡¬+#:ëa^ƒHŒ¨’ó`­×’ödºÓé0Ýënû˜ÔÓšÙÅžƒV\±>.‰9”4$³†ÏÏœš:¹(Q Ð‡¦¨”íÒB¥Ï·ÒŒçðd~"_‰¶|s· ädêá…šµyîrqºzããí}ÑǪŕòÖx¢T¢1š-T 1'ö–ÝZ_ÓÕ ,ëA¹*°—Ï8ôôï/¤Æ~tT&»"¡IWæë]¿Új"9ça?ö›H{€¡¨z]jT…M‘œ算ðã§5šè4Êc|Zm§j€{‡ëùõîÄ]nÑ29´G°U`×9C/ãÇ·:ꑺåêi$Oz©d‚Å5e÷H–¬cPÔWÕö桦Ó+gºz¬Ô•ö¶fÖ=ÕèÎóû7é(…Þ\oM3GüíË–¾\ߌ糄ië­,~ ñwrB™5‡xºôm;‡^LBY? QZçS ŽêïžÌÐÆèКl2EßIûÏ8§÷Yçè0QPâÙHì'„’¥¯—Pñ ’6‰0xü@cEeæ@GW탴‹§x Ü=®;Ž1ƒ‰_Bú4m“úFºñRÄ6:˜]Î1ÑE°ÜôàX£äæ.hõ9î'ï-²ºˆTü¥6dU[б‚žX<ƒè-`РËgkê!ÂõŒ«Ýœx;7Ù#nê¶Ú¼bãðÚv2Q:¦ŽYs©hXàKo¢CÒn¨3ôП#œ“£ØS!@‘©emÓåôul0ZÆ¿}ùa´ƒÙAUÐï˸·¢‰=ìþh³ÍH"Qí O•Ø¤âæ²—t5 ¯.d[~`´K^}®WÓJO¯'ÿe}þ¼)QƒÛÁü‡ž­l.ÅkeÃ)HÑtÀ‘a~§e–H„C˜D ßý£…?+óÑèæ¯ e$pÞÞ÷=Ÿi¢ËW¢~Gôhí*2!ùÀ’/'QŒ¸cò›¥wmu0½Õ¨¢ <"2Í\òd¹(³P]ÆtìoU4õÊ_ý¿à»šµbJa[Dú‡hžÇúªf27QË,(2  È¡ÛO§:y@t`_nÕÝ?ö†x“_œ¸à„¢8|ŸƒÐ!@kìÀ`/ð3d=fpX?5:®²z6µWøy”F±¨·Ñ #­3ôVû[ç àóÏn Rq.ËmX}îŒ&¾„hÐ÷ih m}‰Ms§pžif†Ú¹ÀŽpt‹Ã&¡ æ5¶Õ‚Ñ`Mê÷åI ³uðZ•`òM•á‚}vêt¼¬þ0"íS(¼BðÔ’QÍOó}0émh¥k)g››ÛpO© p"¯—É5þ%ÅJmÌmy1-,×Gst(¡¨è —=ü¹}D-F6÷”ë79ÈÐTˆí[šAO4nùô0°nñ 2öÉ9v »ßÏi¿©Þ{/,·t– $[÷‘xæù%Jvo/$±¢ŠÌ“û…ÜÞ‡¦ ¶0­×I Ïa‡Îõœëq»µ«0`UtæPŸeÌ{Eæ6Æx6øÌ’¦–IxA!È ):€E¨öÇ)~ìˆG@©ÃcùTN6”oc †Œõdi`*HY×w=/¥é÷ ?tmáPî­t QY.e 2»O«¦“ºša€¦Ñí¹i ¬RÁ·ö=Ü„çGQ¤h æ,vuÒ³óðWX°ÑÕΦ$ VM“Zk€áÏoõ×]›:oÇËP·zµrÜWƒ•º—¤²³ä(j Ð"ÌW¦E]^ ðÑÎîI¶gJâU3ök]Õ] ãK;tõ4—!-fdù¬&ˬ]Aæ|: çi}=öÎÈPäß]Hùõ<î˜tg#ËÀ(§w#4w¾Å€ØTöò–BõÄdb¦·Oß(Ùˆôºwí¶M;~"ï'ÑÍíˆËIÿ.y#!Äôvœ€¬÷8ã;<òÖÿ– æc!<}\}Q–¨óm'èUßÓÊ´8h‰•þ éw.”otoã=-"Q\¨ˆ?Þ%Mÿë@+Òƒ.žš…“²¬®üÍHÏ@ÌA2E¨Ã}bú2Ži¢ kʰLs“m„p5 J“+!2ý2LÀƒF Y°Ì>°^¨'ËíqÈOK¿7ÑÂi‘ag%9÷0âÜÌOÒEµÍœ£üx¯ÉQ½dòÚê»jMOÏ$>€n-Ï0‰ü]Œ©cQÿ&œ’ŸÀMù!=4Ë«$=¯ìwæÀYf@ ¦\ þ± Läƒî¸½˜Âµ¤’´ÜÏ« )#eºŽaÁ}Ñ…¨OcjÎöA•|úxÓi#>ÅŽeÃ*…ayiC`ÛÁq³Î?͉DSsìrs·¨×~Ê8*Òö¢˜z±Kœr+6$þÊR1ú&ƒ£D‘Q1 ª´6]¬z«” šŽ¹H­PY¦ÈHÕ|Y‘[ôù¯&´+åû?TÒëJˆ»W3'‡’ë×Æã¼š(%öhPÙ;¤ŽT5æg–ô-ß« …BûÔA¡¦%¦ÛÒ·¨›\²–+hÈ틇üõLÒ)ÜÒÇkŽÓ  šºÏ?&[RØQ<û£=ñu½è3Ò0<¹Ðݨ¼ØÁ Òâî‡!NöKÛœ®ž?5qvò>Á"É(5¥5 ¬V(¸.#_çÔÂ)»q*—”¥0XÌÚ…€K$­ô ª_ÄzðÙNŒÇH,ÃoË[€üúÞÈú4å?ïÒY>„ˆåÜAma 2èD¦´TL„€†‡vJ ê8IRæ—¿ðD~â)ãñžä>œ¡ÁÄv¤¾$àl%&Ú6c)ŸVïM‰þ½ÃYóñËû#É™ìýÆdˆ«ëÁë9£¼?åÑLᮡ:IMº§œìíI¨šæIZøÎµ+Øp‰ãŠè%‘Ã,úï-”†KWÙ}¦ÄUë+S£zƺÝI´ß™ö0<ÍÞÆ08}RàtøÐO)Òœ›Â}?oSLokwÙ/̆áźëá5°…G…A ‰‚Ñî#=²ŒHYkÎnÕÜÈMôIÑuZZZºï9·ê@QïµHWËé vº?=3î0S½p Ž; á9qá3©¬4à-°i»Pûµ¤‘6^éÖ©Úí÷ëVL RÔ=ïÆ,“¢s ±Dj>0¾{m©iWßÅÁðJ÷StØ'Ût‹‰—½˜ÉH½H†$VuL+…噢×ûfIâ)-øu Ôœ¼ÚÂ9±ûo‹1Òð~iJåõŠV ‚]ü¯6Ö;c6<rðQêËší\5»#ííZŠL zþ7Ú…×çº Õ+7¡\8w&Ü­r·Ëu¬ÏYͳ¯DÐßIL„­"µHí𛪯ßa(#ý¿ç´kÄ ‚g¯õïæ½†Úû2°x€z¸U½É—£7¶L÷‘®Œˆ{è/i*Î -»Ü"Á†û’ˆ+œ+ýLíÑÜºŠµM ßžƒmå?!¤«¼¶yú!;4XõkCìíaݯ+«æjH#ª½ådàkŠóNKÖ‰TÛŠM÷܆»î'‚Ó_ÆÁ#]…W‘ 7……ªÛdQÜÈ ±?GmÀ÷ñ…Ù¹¢+›ñýDêX¹§šr€%݉ä¯vGGG7¬œdßÀ,¯ÉíàQ¡pµæ½ÕQ6ºA¨5à1ç,ª\§#X±zÙOÞAì5,8¡ƒ•ü­S®¢Æ.[šÝBZ„L±Æ[û²õ(bHš•þ›$ûl ǘÍtö;LEþ·+eUjÿ0Å_ ®ËÇ7…0à³=]Z#)Õ¯Rµ3|ã3ɰyˆu>ñÂÁˆ¡!Z#]eÍÜ!¯$z¢Å°îÖRBóËö•öï4Gçáíl‘MG{?,5µNºò:{êƒ:bz`´~™PX»Õ÷]¶‹Gv†·Š[6XIÁ¼À‰pý´»+7[Ë SJÝãKU樛Ú×á5pòo¤ü 5VuÀJ⺃ñEÜ –úך•|¼‹‚«Ò÷ÈXûHJ˜ÜAƒÕòØþ>9–*¥ÀòJÇ[¤Loä!0›Ë¨­ü;û0eÒÀ¬¯ o¬?Fò'¨²“ 0çãmµµ:TˆÒÒâT@oªg'œR¸zïËcñépµÁœ¤á³MI)Ä5`¤Š½µ-8r ºð1|6Ï¡  ŸNVõèJ8_}ÃEöèä{üúc™ ¯q"c{P—ÂOSƒš€òÛu²¡Sˆ×‚Û_D±Þ¿/ iÒqÑVÔ£ÉvÓ&ÜE0“~ãyŽõç‰ØÒq‹¢¶ E.åØŸiæøŸ'Ù9¦Æ¯TG¾ÐÚŠ–“Ìl•Ë ý œMÎß^”þŒê"h‰)ÅÎjEãì;Båïi½hD E÷°¦LØ€¯ƒÛöD°â6]q+ñ±sÐD…çòÓé6-Xä[YdÉ5¨m›¤ÿ!|¹Ûœï·Ù¦´¾Ybæý•cz³.ÝmÿKCbféõUȪTã³ ã¿ÃÜ$‡áfvܪ]–ûZSô«Š]$Ëa—‡²‡+3„ Ø>¨ +A‘†XL±*aê*üÙÔ™`å˪C|¾zš_e+ñgDLÔV„ú'í ãÖžQäbúðDò¹p¥H™Ð>æ:Pi…½pIâYǬ@Ý{•Ë0.Õ }© ¡ˆÂ ®˜­ÜøÎ×ÙgØõªY}X&dáÑ50ôÕÇ.±NÓQ'J¥ÎªiáwW’ßLÇyò­Fxç–íi´Âà‚{Éþ#ŽvsFMè/jþ¡Bå Œì‚UkÊŒ=6„O2ÄÙ‚&þwJ“ja©íÇ´ &ì†ozµ«(`¥PÖâ]&u «ŸËZ÷‘'c«ÐyІó,©idãöÛÖŒ?ÁÔ•"Ž„¢"“ÒWŸÃÕófÌ6:’˜ë<’"ךöNDŠz°r²€A×Ñó:§‘CSR¹ ü²Œ4ëdÎñÜqø{÷pN%£RĪ‚²x´¶¶³¦¾vØl K¾Bè¡Ú‰êï+\˜UìE”åN`̈ Šaت‹Ò°»IúELÒ‹‹i¸Vôgµ1 ×Ü&Nn•°o<Ê#=·xÌDÐüùß–žÔ†Ó…ö¥ÕÆ_€îáðçÝ·\dIÕüÓÍâdÞŸCJ6[W5Èåt2j™«øÁ~P걘&eBظ8WcŽ(™ßTÀ3§BÈ_‡øŸùùa¸ f6iPlr.|SC´šqL(4ŽBÊþñkôtø½îëÃ0×Á¥9«]–Òý½Ï~HãêïÄÞ½pG,µ:ê CÑLóïN><‡ž^ï/‹ÆäZ]GXø» ~ׄ°ŠiÍ_'ðªGŠØ4e9"A˜ü¬ê‘„Gaà› z®‡_¯#^­PÃ~(*›'Wµ¨äÒ>lñ!¨£*¨h+PQU8§ç…ÔüAÓ!Å}˵c]†º'ðE-·WG'ð¬ØÃ†>ò þ\Øi|ÃD‡}u’ô€ïYL«4õï3ÇÒæ2¨Mâï_b¬#Ê-G8×Õ‚04„îôÒ…=lÅGŒ)åŒÐ©,Q‰¼’ÌÌ:7L(`‘0a6ÔAžΗÊxÍ.äµã¨’’4Ò[6ÊS…ÍdÕX}á c}WøRT´ÅãV‰«ÈÖ–,|¸á §ÍÎ"$þËyWá;µþâb{hªˆ”-C‚cÈó'ç PÖçqûïyoß$ܴϬÝR·rËŠËHF ¿š»¿#Ž_-Š-žpþ6ËÊPëÊT¥¹3»" Ê£Ô_* yeÙâ…}Žk~ s}”éÈ0ÈGÝÖå<Ñ‚Áê^ÈfNP.z×_yß f¢v(^ ÎîB¿ÙPée|W™)8{æÆ £ ú<²Aœ̶‘ßR˜Dšù|ãç]ª!Péø4<ú–Ðü&˜ç^ò5`½9qVQÒŽ)*:{íÙmàWŽê(M Ì#• lnÄd¦ýãG¬QµíÃ-Ðý+WhHáüRm6]fíR\_yôÕkòC\ôœÐPH¨dÖ\ îø[y7Ú+dÝj2l/o.KXVúZç죙0Q蹿jE¡ótgVõ‚QÉsp¾JßrAK5]ä ÀñI×cÕ¸ISìSzI¯ å²dêoš%”szÒÏ'mÓ8G‚VøÁímÊQ1Ù_ ‰DHÎ(‰UÎ?‘¶W„/ýhI¾AýLÛ{ˆA¨ÅŒ6ä”—…¿aðEx~¼Å©ðÍ÷¨p›Í(múò¬Q–M££M@\ËÎìU;€?d¡|FNx:vÖ ?^hl^Ö¨oWÊÓ—îƒZXV£®Ÿ§Æ)VlÉJkçµ—vˆ-q¥6Žõ/Ö2“ÂwéÇvƪ‰¼T8|¶GRWð•½Ì¼ÌÊ·™¶ špÝ*Ìê¼bgdTœqòDš°ÀPwºtÁX!äŠVÝÕaR…––OÞ<¿ÎÐŒÊ~=œJ÷aË%§ Eލ ÎuÂîT;#Oö»z¡ tIèUr‘2Åvh‡k½×~¼°°†¦R5ôué«]yà°C:WÎ<èß\ŸÙ“×<ù4TüXÍÙu+~¢ÊÊ`>×Ì¡o‚IŒcÊÄõÄåsÖª¬Y#Xa§¾9VG+ô8âžGG¶/Ø»ñ$ûç;‹c@LÀZ‰=>ïïX§à|˜¯'ùjëÔ HÍ=£[7¸«¬WRì•ÓÄ,õC$9ßÙš­R!žj†]¤ û‹.˜>¹¶Ú³ ÒçJHOï¸â Îyx®º¢ðWؤÑä^vÊÅ36xÄ>S¶NÍêíÔ€èú=,ts]?Gû!‰¼™;˜‚ ËÕ-M+a&5Ä´á)m³ÆˆO‘‘:P‘=c«n1÷(JøO/¤¬wÞß&°æEls.˜w$ß,[X¡,Ò`5wcH*g•#‡\NB«ë6k~b+І¡Nìõ»½šiÌa¢\›±ô´Œ« ^EW3ÁIÝy ‚ TIixÀn|c7nYJ{°YY²©ô°Íü$ôt2Ë¢c¾ÝÊ¿,EãŸÅ}’sÐâœÓÓöo˵6¯Â/p{KVH€·Œ/¿× IGd¡]yV¼™ÆRòdyPàÐKÌ» Ýq?ïFk¡sÛî%s–GÌïÄMê †F¼'„%¨CËï[·©n çí$Aݼ@™2¡òH–®ŒØ\‰ 4Hhç]áñ|f!D˜¹hòííGÖ¥4Âÿl^ß/=m™.u¯œh @ñœö×obS¥d£(îNÿ¨·¢êMÓŠo0•d—ÇVäà3ÉðŽ2ÂW2dŽ÷ºX$*Ú· ζÎ2ìàsÛ á²¬@oñƒß7âp‚‹÷À'-.—ü(ÞžèíÏ?uEm¾xöM’©Ät½uìŠ+ÂÉ€S§Þ?p@!Oê/pˆÜý²B–¡ïy´„0êÜSتD±y­ÁÙ`UÏdgÕ^.$ÒËx×+¯­Ð±Dl0E^ZC©´ œË7C/wö"Þ•šÓ¹4ÞOEÍIXK}¥53b”xŒìá=™²Zööê÷Êb”FyQ×R¤õ•­¥ T”»jg Ñ@z?È)YÊØ„X©s‹÷ˆÛÝÑ{¤™àz åm­ZPl¦€Š¨A+ÍülŸÅÉDÖɸÀ¡å‘àü?GÞâ«éæÝ³[)®$YºúǺ<%×/PsDýT-ðDzÕ‹b]ãN3¬E|oó<Ž Ë\`ÔDƒL¯žLóÞb®K ^Ol=À]2¹Ç 9Jù44\ñÑÞÓLÉ!*]¥k4ÝÆ«ˆ´ƒk¡& qVåŠtaPv|9Ã=¬’æ…KPà5ØÌ%piMÀ¶‘05>=â©[ü›±Œg‰Éu ‹!"BFDÈk#”ÅÃÆºÏÝ÷/º÷ëšœ_­GÎ0%Y•}Ûõ‘œL@éX«`2/@Ù—R›ʹ˜í˾íùó Î Ê·Ènñ¾<‚W:Li…¦‹5#!?bYÛ0}ÝÞdNº3Ea…ñK eÞŽÌR‰|$ôŽdÎ$†3£Ç4:üIv¤Ö8t!C›[¥4WÚ!£äéòžîj—à µC[iW6 # N±®f×Bÿ|až‰Óh‚Ù‚‹ß«fÑ»ztÏek ŽÙZÉRü,nº(Ð>:5pˆuèAÙÐöÍìÝýÓy‰𸰚¶ÐQq¥$³9¬³â zúÀsÄA±9ö€¶‰õI˜|: ÕGÑTÌÉÜê›â,9ZG˜¨¸›ŠD¢{Ù“B5 ˜q({5ÊæÃR“´Ð Õ xaµ€'XŸ¨Ëúã»q1£îÈ¢sš«ÜÓÒžScÕ[â( Úr¢,¼ÚÈØ1òµ$Œ~²²D³ð—ya°MšlþÁ%øÙ“þñ ¼Ð:-}z£8kâyô§”ˆÈ¤Ð'ìçBd/ñ±2?äKA|Ìñלá³ñgH öÆÜo™¢1ÝÞ- ùWÛŒ™µéúéRÃ/%ß„VòIÓ¢4_èd’Æà`Šûåãvò²kÉßWgž VI(‚øW_ËE;eö$½˜²@ ÕT¹[çZb¾TF;šÊ.ÅUæ^ ’;¾•®0QÂZ¼Åi—³¡.@»ÑGËÎ]EÌsV×Ïñ´†R´YZõc¹ö;>-¥’Vv?”„wÞì'Õ¿ÑÔ>ˆµ!Û,© 으ÑÌ1„eÝõÏUúH[ECÕû' Î-iߪ-æëËœßFVˆ·÷ jøâ¢âJ= öŽålaScÎ`©ï†˜½;¨ ôÂ)1ÈÏP3Å4˜¨à+‡C=Û€+0â’š‡ °‘$¥‡$3n‹_ç7Ž‚$œ¦á¢Â¿ë6 l#dêÈ2r‚NØŽ7Ûk«å¦gÖ1Ç»Âã²'W^ð¾3"µ•¢I IU)Q±0)"ÖjôCÓ{e‚•¤‡} ;äoù´r0¹?ÝTô>Ja-+ë¹™W,1T Z ˜~¶zŸ4/uvÖÇK{fR¾žŒ4VÐoq(Y§8KšÃæåÒ)š]Åš©³¨é4ABº}Yä)ÑÖ/›çƒ’ŽÕ:>B Þß]IÉëÏÌ€Ÿ LµþüsFçVãÆM†€ß¯;¨à`L•ÐH}ýŠñ´jì«õ*³ÞïÄBs©L¿ðöïYgôÒ^uˆ~²˜b·XñM—×Ó?uøÖ6Nz"v…lcñ@3zWlƒnkû4´‡®¹5ôûzÆú}R Je¹ß'É›õ&´uY•¾ãXÿBGqí/áò5F¸Á ÜL#n7ŽÍøa09<æ ¥u•k_e£Á?+„ñÍÌ‚uP¢à?Á¸±ØãŽ ýY»'ž,ö l§7òâ‘ aÝeO}qœwíB_”j`0áҚО®ð÷ " ÒçVÎA óöOjùþ矚î‚7Y(w¨À—AéaJBöqË¡…†£«bbÉ!§1c2óÎ|*'{WpãÒÅG9îq®…Øï„ çýZ%)ÏÑŽÊš F3ò̵´kœ¿hhaKÍDBm¨oßk ªIrµ.ôpÀbo€ïkõ»Dbyñ·×CYœÉ³³ªŽCžóª»! æ„ð˜ö[DÕzŠ ÉÒ» £®jSçè°36±O7ˆ^÷£¤¸EÚoöx@{EA $­ÁÓ[¿f—Öé KÍ óLWÙlõ ÛèCô2( ž½õ?}!µŽž6-x»ÆI%Z:8Þ5Çþ"È©\ÏØ&(sR“ë}1ɰ^-¨âÚé/9ŸJÑZ06AAW(Bö}lᙀ鵜Ø;Ô¿³­"·•{g¯˜*ÊVf!Ks¨Ý¡ÆboE³ªoŽ?»ùØ_†uI‚À¦ÿ{Û„KœÜ…ŠÌí ÿW— È€Ü)27ûc} ïBÓ¤ÏiÒ®/ñP¬ìÅà§."öô³ßÔ‚d^Ý \ ØS ί\f{ÙçÚ/в3B†ØEU«Ø¤~dו¡Ÿ”‰ŽÊÈ$¯`ñƒxD¹/YÁCî &5ÎóëNݰì2+EITòåám/†~ ¨{  DÆù÷Ç<]fºÜûÔ˜$s}ºñ¦t,ÂºŽÆq”Ò~.;q´¸¦SÞù%þŽ7†§nª@Ø”Q¥Iè/}éÎÇ)rd …Úš}÷EØø6®éDSì¿æïXX© ÿm'ì—9 ¶ä³ KZ¶¾¡!IíÂa_{–æ$Y"†D«VªãÀ´xn\ ¼]ìtà|ðº vÃt±?·™P—ÌhØh·ö¶ÖÅÚL‰[þ}ßÍpx˜sµ¯š#²´µ,°?ÙYÌ|üSdóÐB諉¯†f³-¦aµ…\®­ S–˜yÀ«N.tbä9RrJuàE!žüi ùã!êŠ<¹™tÞ*ÕÆ„°ŸÀ7ˆ 3ò©ÑŸe`´²»Êµ{YºØ‡£üöË¡=ô·»nѵ4©ymH pIM“Âà!ŸR6u‘Jöp½ùî‡Àöt{Åi}ÛC®1òç+×ﯩ‹elX¤Yì´¼8Ö0•lG׉wAfûª'øqåpŒ~>õàˆÊø8ø‹~)wEV‡Þ1ì§+Wÿ¤íDH L:µ_‡~Ì ¨¤ipµN·Ã¹ï¿•b8v"q<Øþºk»Åð]¼vf°¤gš¢ò=-Œá®yá¹÷][c¢ìt"Æ–fßkç…Ž Éã$}Rúf2“Ôžœ¨ö|bΕƒóOõé+`Jðè.¯#¨h/ùƒ¯ó†Í€á—M²!W?xªøbÙƒn¿9לý±µ.û¹Í(Œ=×5Ÿ•ùÁ4RšûQ¦b‰™t “A¸”°ùXÁ±§ÈwšÜD“‹0ž`øË—çcӲ䭟NØÎu…™¿ÇLZadàkmóf(Zš °"_ Ú\ðŽlg™"ö6j×2Oiyfä'®j\mØ“ÏÆE%^•&âïÏc%áNC5”ÎÒwÜXë”[†ÇGЉ$ñ» ‰ú›pÉzB,Q lkϓÃr«wR3¾ `µÕ-ð¿)¤öM áÑr‚oI”öwýKê¹Ì–û{}×l]æeß…·ɱŸTÃ?ç{ˆ'áÑãNáÓ1ßÙ’ö¿Z‹¿1„©v}[•_Öu|(kŸ+æ0ÐfdЃxìgi›ŒL±—SŸG GôBDÎ6šàOOò_u²Tl;¤Š®KÅ-ÈNç]Ïä ÌpÝøÎœÜïÇßB“ŸJwEŸ±p˜¥Áz¯°·ÞÉ8½¼™ “öqX®d:›j :¥Yø!zC”è’™VLu=¯¾ƒbò¶Áro”™‡ÈxÏðN6ù3l¶+hm>[okÚ(¯„¢-0`:Ø *sƒˆé½P^ä„ðˆÜPÝÒß=‘¦>s…Ę¥ F?u«Ü rZç´Â¥ý¿“Íf·”qØ„ÉMáì%ß_ÎЛBQÞÊð„ó×{\ Ú~žŽŸD7Çvï­wâÌ<_\Ó:añz¦|‹Ï‡ZŠÇ„}È´“èÅê%@Y‚*FÙgkƒÛo‚X‡þyQ¶õ¨€ÇÆou¶?l±Nóã1qIF¾y¹ûêpÚÅŠîL‰¢ÔY¨:E“ÚñàÓt«^¹â¶&Ž´-jköR«Û¶#„p¾ ’/§½¶²Ù˜ûÀÞf´tf‰k n ·?BE/9;Šà»÷ÝÚRŠ=ñ¼"‘|Ü’Ôè&‹Ò&¦‹.L˜C“ tŒo!¿¼g{ó&`¿MñŠäBÈÞØû~íkŒœ‘ Ÿ¼7þݯ!+îãÞñ3­hý„ùÞgÝ<Ö`{×Ç&Ææ5§eÌGF nfiÂïÅÃZ_=Gã8É»™¬Ië9 o§–½fQ)!Æ¡@1@‰3I×BN7–Â賑åážØNWn„¤»f–^\hï<¶{hàq0¬<ÌiBž»³ø«±'ýëqb_ Ö åmåEÌõf Ò÷!ôDEŽÎ;sÏÐ;'¦}Ãr¬‘.T²¨c²I•ÏÖöèi§Sá’ýï@\A†ñ¤ÝÝ=¶ÂØ ´Gl@Ødô±3{1ж’kDlıv™5ºº‹*%Ô—SƒÌ]Rpþâ46+Šp¸ 0ƒPåÁ'buÆÔ·ïPNWIjä›BxÏ¿Ò]$u"à…DŽyjé/´½¡Õ1å·ââÜÖT£C¦Ÿù£Ÿ3˵<>³ü0aG‡ìn-%F¤&oÁÆ"o.=A˜iM „îž}nc)ãŸÅ£ß ¥È|Å„$þ¸ÑL•WÂÇCÒÆ¦ª‚.ÏzM(ÆÜûØ Õô®×¤Ž„Ú~šù{ PÐDWíàñcÏ’gBѺ?.4é®Dg0ktŠ‘ô¨ÚùÉ ÖO 'éNƒå yðrÑ`µ•÷l (÷z»š‰rŸçÌS°È  u^³:”q öiÿîÿÃ<ÿ›%&þĺ&ïX'QD S4ÛÄÉH4Ê„Á©¬ÞÂ{©„¼)¯Ê>r¬ºòiÓõ=G÷|„Ò#%:†Ž—–ÜJ¼ÒÞqÆÜ;» Wy –_ŠBª­Ý: „÷ÝŒ®\Œª.6€ìD4\º›>ì)w`ìÊð=¥Î/1XA„ÎÂPô*¬íºÁÎÁ(™ëú,yŠòPö‚-ï}Ãg›TQˆ»aEµÐá6]§¼|n"G&EéõÈ ¹/"¥ü|Ä ^¢èÃ{ä{…óÓ""! endstream endobj 613 0 obj << /Length1 1557 /Length2 7818 /Length3 0 /Length 8861 /Filter /FlateDecode >> stream xÚ·XÓ}7ŽH#)‚ô†ÑÒÝ%)’ŒØÆ6:¤‘”né’ %•’T¤C@:Þé}?Ïý<Ïÿ]ï{íº¶ß9çsÎ÷Äç|·±2éêóÈÙ¬ÁÊ0(ŠÈË/PÐÒRòøùyùùXY (gð¿ô¬F`ƒŠÿB¡Ð:E Ô‚AênΠ ("ççðó?ù†(‚Ü!¶-^€: F°*Àà^ˆ½ }οì6à“'¢ÜÜr.`ÄhP`ô‰6 g€>ÌFyýWvI .ÎÇçááÁ rAòÂöÒÜÊ F‚î`[Àï’Ú ðߥñ°  È¿ ú0;” Î0‰vqƒÚ‚ôé}5M€ ý ¬ù€ðws@^à¿Ãýíý;úÇdcsƒ ^¨=Àâ è(kò¢»ÿÑxû‹"h£ýï›ÝÄ Â>Ȉ¢>§<ø|ο ü·M;>è?ˆøàh¶ÀlÿA žÄÿ*ÝÆ @÷ægÑ}ù—üçƒ=Á6ÓS0‰ÇÚ¶ój9ZžµaIìý´óg<Ãx¨¥1Ëåý×Y3eÊÓÝ@e Çmy×óì…¯G>«uŒõ^B§<ŒÊ›öŒÖqS·§w&}ÎèM‘¼Ãxcœ"Ï ^ŒèÁÐ¥"íÄ—±µïÑg%ñ}\Ûõ-у¢DYT=´M»½³º$K“’î‰Ñîw=T³u¿ÁšðñÃÇ9ß]^¯D›E¤jg<Òl¿ Hð¨"]êûÜ?GÖMÿ!*PÝ=hí€% E¦$ÑO§(„[e4—Gü+§Ø}'ƒÜÇZå¾ìŽmOù"GÊy­ö¡ÃêáŽ9{R§¨ƒU’]4p×û‚ž >G!Ÿ†ÈÍ_´Íg¼ÛÔ'x†4êJ‡¨~\xûÞI=ÕÛ¤×D+x{¸,ŸúVy.›kö¹À ýÞz·¹ÿXúJ 0f—nwD†Ä<äm‰xôvv¥ûå Cfœ-F‰vnùåq åP/¬ CÀ½$0úrÇûz3 M¯÷Æ.Ó} a4Öa/Ò—×Cˆ)=Í}ûSº%U'@]ÈEŽðZO°qª™“¢ß§+²e•ü Ùr(ÄmmD+iUG–ÄÁçþ,{,QÅÓþà­„WÑmrKÇÍ9Qã5´?Hâñ>)ÝÈÚ9´§¥9Ê’"f4m·d¼µ¾…Y>8§3*X¼ì Àm<4~ÄøƒsµñuæÇ%Ðáì¹2R'ž#$©€ußVà°Ù#Z»õí¸ªô‰¢ßÉÞìëø“dâ¶õ5@Çç•Áö%Ä8@ëöæ,õ2¯U»CL±õ Ž&Áû6¦lüŽIµÏ0D½Îí î§9Pë7…æ±a¿ð#‡ßðŒmÛMY@WS–=´ÎBÞF[G›P½£¥z˰lU'¦·oJ|²1„·éÉ Gl_z¦|˜~ì"RpäÕ+§\n‹h넌ïf<á@¨¥<ÎÊö}lò¹«ÞáKà>×è Ùø’]ã†ZÏpX–âUVyÄÝvOéÏv_Uë.MÍ ”N?8fèõGúóq]®®Rn2ÒHçÅV½ŸÍ%Àks2_«2ÍÚ625HØ åå’L ‹s¯\ºS0Ûh¼âœ›’àòy€û,ºŠÜ›È @Uðt|Ñ£GäÚk-²ŒQ»lÖ e •™<‹—z¹m×Ü(yà¨ñ+vœÅéóé«å± ‹9iú“žîàÜ5*'æÀ š¹‹4ƒ] Ï—Àû4Ð܈ØÉlåkƒ÷ƒmv8aßä¾õ‰ÐÛa{ÙÙIðùÙë'+Ÿ‹–.Ïö¥eïϬÖä~ë‡íéydŒ/‹„3d‚›÷ øñ#Z6éé><¤ôºúñŽØ/$7µ>ó,/¸å‘hÀ¡+*dÉîÒ¯“|}4‰£:L K_oüY²¹d²^À1YÇ¢m9¸…”µóÞ+Ã×-¡K>Ò1|¹U¥ .°Å5þaÖ ¿7ðY*Û J!éHòH\ Å¢YðÓc[âî»Û ˆ­É¨Å’lGƒ üDP‚®6P¾§YŽ|uÅÐw|rïî裷6[ë–ÇÒ¿>ý2€JpÒÝ÷iàÒ« `š~‡%Ýp˜TPðZø©ÀsAñ‡¯›hû%MTF}€ç·6FjÔÕwEØ-ZÎ#P¡¶ÁóeÚ;aæ6Ðò©ÐÑ­Ô>ý"½ÕÝk¶ÊÁ‚óƒªÆt¯Ùñ7“û 4Z;ù‚Üœ Ý‘îÂ~¼e…OЍªs‰€ÚêɈÁ&[~qwEJü4‚ù÷,ª)‡[£qgùŠE:ý"øä^öÞ8ïI{$,<Û–ü®jSÝ‹åéNþþ¾_Àª2Kæ£Lk &öo'ŧzÖ(‰º>â-Ç‚wݯWµ©O…ÞŽã]¤/ÖÍÝ:ÊqfZÙ…?-«©Åg/Ú¬~JdÈ¢·Þ’•8ïRÀxÞbS6e"ÈûzwQ$3ü0ù#­­Åò¸2—lÌNÏxá æJIN‰ÛÿüY|Œ_B%[•ðɽOc% “ßðkx5MŒž—Yï =Ë6äwt¤”Všpª ¨ezÖÓ©×Þxþ¦/Þ0µú4s î|i J×»ñÊìööÞþB†ÊaÍeEÂB‡}ÍUæé«ë´ÞÍóÚ•lÉ4I*“†@Ù†0^¾'˜}£jw¶G”½“XŠÚ ¿ñi`Þuþj'â麔KïEPëáW¤ªÊWÇÉz9kì”XõË¤Æ æù¥Ñ±r/Õ3¿Vÿ}Ú]3¯(•LK¶Ñfz#5Ãc?­(4×”Ò{nÐ.­&€<õ«缩µ¦9¥à8kÛÏÒJÒDײÊFvì3žçLÑÔ Ù;ê]ªtˆ§§q ôO…Oó_<´Öôã“v"ß}x&õÔ#OçF”Rø×KfZñä¯Üy†–”šº2ñ }Ÿ©´*×õµN'!û“D3ÒÉÄd½#g/×î­ýäüêÈlÜõZq[l3ŠåpÜ÷0›©I9rñó`仚­ÍD ˶OSÔÕX[RºLúÙ¿=¤tÑsݼ–¯nú0ÁßnŠôîî”r‘ºïT–ÀËüqaëN)>7¶ ð•L0áÑ”ÜDÏ¢—3{ЊææTk.ãÝ}Ã8ò½ÝMüNêrÙ1NÊ«8Š'q³J͘…Æ:ö<3)S¢IªU·àë‰Aª8 ð̼ ®?’ò3„(9aû¼Fƒ j’4¯Ç„½Œ5|½ÆŽVR|gQ¸Žò¶[¡FR•ÞÓ‚3Sêþm릵í 7“‚V×î¹7p("Øðž–‘qYæ)ïÆ}ÔfzÚVõÛZïד?ãC 1 $õEPÀçîy«VëŒõHŒœ µÊQzKŽ×ÏÓ&,Á¤JÄú(¢BCáÝ!…eÙ¨ X0iŸ§¦âP‡\Zdã‹ëí"ú/zxͨYv½žëŠì)AƒÐÜÚ™©¬YÈ\LÙÈhi4’¨kº-&øû%/b¯ú.Ñ’i)ÏÝŠë¦ÝâÍà’@ï÷)k¯•Ø$ÛKc,…òe„š˜|‘qâïä)OS _ÙTh³Ç†n"üæH«@‚„ãdߌ–DöJ¡œÅbö­ùÚk2§¶ÖæìÞ§Âåã«V †J—¨yÙ˹Çë_;Ÿ·Œw’ãq³èñ]&Mï¾éŒûTDâ<›K”»s‘óž>ÙȲm×–x´šîÿg4¡¤¾ØvšúൂJq@¢ö—œêØîE_ €îži§ÜâÙDŸ•Õj»£8!&ÆóºW·7†E¬œ—"´fߎå×—gâ%?o¯éF³Àï:¾ èìÝòèB…rAJ •êeÙM¿&ï {›&-¯CýòÌ>¢T¶q÷?_0¤ó(.¯Z?ãû@ÀÝ+÷ÒïVH¾©¢mß¹öýÈë“jSî|Λÿ’½˜ræ…^×ÞÝ;ºéçïnà,¶Ÿ¤ b’z¥²eÕ ŽEª…Aì Ô¢Þ$Ó™…ŸÕÓ‰éZ!]<àÉÖ†å0O«Ÿ“¿æ¨ìÆŠD*RÝåß¶9œª2›!øbÖãñç²H ªsO•[Þø0<’‡:gaÏ£ö«V”) æÚ¾q³€öƒiôf«/‘vIõùßÌ\lœ€°®õxáƒë‹X”¶Ã­÷£¸*]ºØÂ®ŸÝßQËÏìHÃB¼7›müôéöû•fåž°Ü‚°¥‚ËìŽLTVeÙM* ?À©)j6Æ>…‡M9áä÷Ëå2’²O›k­R%#Á'¥8‹³|;:©“\ãž| ½þÈb£°C+ÌT–ÝŸù}F6”)¥ÑUœYLâÞ‹7‡õ·GH,ú‹íj){…ƒ¼øúÀy™‹Í¯Þ¸1–æ‰môßQÕĪ>Ô/®£M…RQûØæ´‹O´â$òROXNpöí‹é×h>Ï)¸`;ÆÎwÃ7®ÁØ œ˜V¹@é™áÛDC±Þ¾X'yî‚H©ðÔÙ©ØZú”ëhPB/>š!à5VE2ÝèÇк©±õMÃÈ ˜¹\Œf9:;®$Þîñùuö(¥’ 9abNWE—”ÚÉVD±zŸÕÁ§¤gzžû [qw»=ñ…GygJ˜ñZU©·s¦ùû1mü?4SªÞ[ {·X(îŠEÙÛïà¥1_£,!ir›ó%ô——ïayÓ"þÙýc>DÇucÕ¾\·õv[_~ýÕªs«³÷1ȹ‘¨¨« -¤aÖ8¸.£ÄüS:v–üh{Ù‰y>ç8AV?÷ÒWãöXÕ ‹‡Â;iÌÝPFQ’#` eß¼ óº`/¹õ ¡âû–ʗ>²‰ØM,›jZ§Ë^Qb”B|Zô¾ÕMÌ9RV"4½Ø˜Øñ(¢ûÃbNŸ y›8’ÖÉY9ÍwVr¾äb"ÊÄR™}ñÂ[ŒTTg «e‰p:Y’]Ák(J‹i¼ü˜BEÁü¹ì{•vl]õ!ðJ3\l´†?õóKß‘ñívŽE×/k¤ÊÉ(üÌ|)Ïږ쨢oE–ë=R·‰¤×\©Uc:OÖÂäü¾1#\ö² á–ò´ŒþPnˆÝúªsñˆ^¸£üÌŠ˜L¨LÈÆš"vk F¦ùòTÛh’b…×`‘åìyû÷“‘afÝÒj^Ò„‰N¾UázÞ9#]³Ù±-õ“m0Ð@´\ÌÿExsÚØRo‡sòG1ÆŒµ=ïß9¨_5}È¥ËcwŒ¹µ^㤔òEEÓrÛŒ%ò“÷ð;7íW×!%Z<0*ú€cIgo9_)S¦ò”tÍÖ]½ð† ÷Ε×ÙVÜ%Uz‘xõ™­‹"èNoqÁù Íf^þúyžÉ•}+…{A¢®`ƒŒÊbIëBB8UÛ´0V20Ö± £;âÕñdñLðÜ û{þìunÅ€½˜† …åSàìØ»È8ø`p"Þ‡cÜÆuˆ•ªQ×ÖñkÊËc£énPÑî$‚˜Ù>ÔLd76‰ìnK¬Ø—4hÚJGG„cjàfÉ^ Nšíék‹‹½É§|lµU´ˆg(³À±:¡gÍ:z5‹n HÛ”Ž!ZéîóçHÃ×I (/í{æ!<Ä÷h`Ù×)½„LÍÂ÷pA½¼]…ðÝR"Cßɇl:~­³|Ô`‹µûpí^.»t!çð%þXÉn¿€ðK‡¶Íý_5^a·VOuóϦ‚8¬~–¦>}Ú׸Åþ ÷L(QøarEqðBH…Öbì%=ž° §•Ìž²V ÑRWÀÍä ýJì6¼Ónfz÷£]¸Hb[QÐÿC£{‡ÜT“Àë+~½|g#K—ìcê—ŸE¶˜Œw–†ã.•4öª5s_©|` ¹öÊœßK¼£š‡4¯ßÙ8d›?tf›]|£Ü5/Þü‘T§`‹…¹?IQ¼#Š #”•—ôp%SË3ñº¿ï‘¥fê¥ ÝG[rÎKñð)þ}sQOöÝ!8a¥®X'/–»0}6rÀZò$¶Î\óiÿ>çy£Æä¯\M²Ò`^žXÙø«ÍêJj¬”7½ΟI÷{GÍü©õ¸°¸wÁR ÓgìÃñn¼/¶s7A÷g}¡9‰ÒÀ”7Õ ¥ù¸–¾îQŠÂµ袘†­µ7GðÞQÉSÚÃÓW1H,£Ñ&’Ãzþ}zñ}…éìÇ;ÊÝ‚G9ÁÏ®•ǺxÎ9r±X,Lˆ—k|!¯z¥½rX·Rd:öÛC P˜7g…ÀøF¤`×|"ˆ! ~dóXßL à[ËýuÜuìT‹èÅyT¥h{*o9OÑb剀¾A†é$Ý™ÙC|Er>kawpŸ´:úKðÐtÅEó{‘¡t$½8QÏÁå~<¹a•žŠµžfžÿv(«ŒÔ4üŠ,¸.gÌ1½ƒþG-PžMäRŠÅƉ«?d÷Åeï'—¬‡¢+-›Ü47¢Ç_y(}lxzŸÄk}UÁ©ÂT6Qˆ¿ ïTÕöÎ/õÇ`îSÒ|ÐËœ[ȳÛrÕûHrÊÅ0Õš—Re_ î¦ÙÌ`W{õî_é½QóïãêJ¿<ùÖ(q£‘¬{·Zçi=k¤ˆ¶N+÷ÑÎû:“ÃEòÎgÉÅÆN póîƒhG™DÝ_”Ë|aËÝë™È^QZŸQ/Ì+[+^™&#ï˜Oï~ر(:Ç)”h Pe¶õiîÞžo;r‹!\; rÁøyX¬k¹JÇ@0Rõ€qV ¹.L )ÝÙhÐ0•­ru¹t?ÚWZ’˜·…ÃýP«ÇÒMvò­M¦üšóv¶#æCzÛ lìØMïölZ/Žo½‹±ÜäT[M×QÂÛ‰a$ TN€Ó.e„_+{ø5q§^Sk”|U-sÈxl˜ädô3‰Ë:¼}Ã[ï 5öòq²Þèa|À­œŽϱø‡c]Ü:ªúÙëeëówcÓ<KÅõ8áÅÖµ†ua8Ópz¦V‹òÞ.nÕ©ô²hâzÀÎÐééVRƒš|Q¼¤¶Tòr³K¨‡jŠŸs0Ô!h¤K^-ÝÁ©§Yº5å<茗c‰óýÎØ }%5%躴žœ®éf—‹˜qÄú­L„5W-+Ú…¯TN<^ûôKC¨A ³{>oÙ±qã/ ôMëã\?& —ÿÂSÈšŽW2ëÈXžøI•¬Äüöð 7º)¡®;¯«½–aѳ w^*mçý$¸q—÷>4tNÑ4ÏìŨ1?þRp¶KÁ-Éù´ȵfrãÓר_öÿ`Á°"U„N‚oX!'¤@GM1ߊ'E¿ f(LT–1û¯²ˆ?î£oüqHŸ=‘7¡Úoëí6´t³»éŠDsÝóú²¬ùêºåÚõ[J|tåW7ñZG¤Øk0Ç…~Pߢ‡Ã²aTóyhÑ묋bôæÆDÂÑêï‚Ý$E›ðÉØà£€Õ¢_ýåp·¸Ö¹ùõ³ù$t‘ C+-Ú´À^¦«!ì” ¹úù{çîì&ÂÒ ÷@Oya~ ÖrA…!¿Ê“Å®\¼Q7WRo:z±è$P2¢'RéQA¶Äy½×NÏk«40Q.Ïñgµ9,u§î=dôMbë7Å®æÓ´rŒÐV;®džÊ»$ÕjnÉÓR ¨ûpòº:ÖbZE˜ŸÕÉä¨Ñ©Ý‡µtˆ\¤y/•;8eiy0EÅãšHˆ'UÙÄô&QOeæâÔ)ïñ63!ÄÇ&ãI° /ØÝÊbz4ÜQIú¹‚ÌÞD-¿¼CØØê‡®Ei_ c|J8ª)ÍWÏÈ)|¾¢HÍ+¾—¡¡r0û*€?“øŽ.¶ iÇÁ‘•¾/k_ý]7åçaeÂ~ö52 IÓ¼¦ã'~-åäÈrìhŒŸ>“4a¿ÙÄ}­;ÅÊð²nóÿè›DÜ endstream endobj 615 0 obj << /Length1 1443 /Length2 7152 /Length3 0 /Length 8138 /Filter /FlateDecode >> stream xÚtTÔÝÖ>)ˆ„tËÐ 3tIƒt§(0  1C ÝH· „€HwwKIƒ"Jƒ”¤H|£¾÷¾÷½ÿÿZß·f­ßœgïgï³÷9Ï>¬Œ:ú¼rÖ+¨2Žäñ% ššª¢ PÀce5€!¡™ñX ®n0\â? ®P0eS#Q€uÃcU@8{»Âlí¨mþµp@8 qqQžßá9'¨+ †4ÁH;¨jGØ €À Hï¤à²C"%øù===ùÀNn|W[iN€' iЃºA]= Ö€_ ´ÀNÐ?ñá± ì`nìú¤'Ø @a(Ü á·†ºP›ôU5ÚÎPø²Æ௳€ø@ÿN÷Wô¯D0øï`0‚prýap[€ Ì ÐVÖàCz!y`¸õ/"ØÑ Š{€aŽ`+áwå`€²œ.Œjð¯öÜ ®0g¤ŸÌñW‹ü¿Ò NY n­€pr‚‘nx¿êS„¹B!¨c÷æÿs³p„'Ü÷/`ƒ[ÛüjÂÚÝ™ßsq‡ª*þEA™ðþ¶ÙB‘a ˜¨ ˜ê€zAìø¥7ðv†þv‚~™Qøû:#œ6¨& þ0(êÏ× ì ]Ý¡þ¾ÿéø'ÂÖ0`µ…ÁñþÎŽ2Cmþ`Ôå»Â¼f@”ö@à¯ß¿WOQò²FÀ½ÿ¦ÿ¾_~cU}E-Cî?ÿÛ'/ðøò‚¼Â@$ ˆ¢þÿÌ¢†ýUðïPU¸ þ©uLÿªØã/pü5œ€&ÓB T pü-ò'@a õýŸ¥þ;äÿ§ð_Yþ7‘ÿwAÊ¿Ý¿ýÿìsôþ‹€­;5šÔÀÿ›j ý3´šPk˜»Ó{U‘`Ô ÈÁmQbæ ñ…þØanÊ0/¨µ ±û#™?vÃ_£æƒCun°_o * ü/j¾ ¨÷à ¥Ë?.°jØ¿¯ñ†¢ÆéŸu(Á!ë_s' ,»º‚½ñPWBÂ_j@­¡^¿• àçƒ#¨ªg€ Âï×5‹Šø5~™~#1a¿á¿ˆ‚°ÿ€â~§¿!J-üðßðAÜ]]Q%ÿªÜáßÏê…àÍÏ ’¡öµ¡íçÕr´ž¼ãRØiç&¼ãùæ¸È~¥I‹•$ý¬ÌõRåù>²¹}—–¼Ëùë/³'¾ëu õÞBg¼ Ê_m¬gnÏЧ’}Ð1Í5£å§È?(ríGÓ¡¹ÿö®Œµm¿>+‘{mï\²'Y±²¨ZX»VçÛêâL :q£½U=d‹Õ Á†ð){öªS³µØ'Q©Z¯˜Ô¥:/ð’<«î/ ~"î£ïŽ VóÙ8d G+IÒ) áT}Ê%¼Ê.òØ}EâkõˆT^…Ól’3¹8q#£ßx+0¢jØi3nÓ=O²'È~·ô*Sîsh=½‘s¦¥îè»ou5'ÁŸÔNn‡©0ƒï´'T ʾ~°—¬Ò¤«rì+#®Ò=Ô¿„ƒ$N_Ýeð1ˆg,Ÿ®ÂÛm¡@/Ø#ùtÀ¶oÂhý¬4 ¦×6ùsõäEAtªíîãkJ™z.ª(ù+‡Åƒ¬ÒAF a£¼‘r¹ššs­ùbw,âÈZøÅÅu°³ôšî9ÙäÕðžZ? !¼[~½T¡dØO{Ýgñ2Àæ3CÖ.×¥ý²Š‹ço¢,[9ž»É~åÀ}•hªÒøµ¤!²Ów»Dú­ÛÔ\q~¶xÝ—©ºì/X{òÍcïM”4D±Wl`º¼6 ¿;¥ñ]þ9kX5N$ìÈØ‘ü C’ç]¾†TŸŽ€bê!Qôƒªð±‹×@qX„_É×nQ½| ö}¤{äRK=QISº•­ŽWÊ…²q3´|U¢AFfÃßôžà QšÆVª~Šá®!ó#Xp€äctõØåÍ¡Öå¥OÒŸ5,ù*6»ùÐór ¾@rïâײéÐÊ=nçÈÉÇÝļâ´2öar»z|"^5(šÈöC§‘œ† ãfsƒîüŠß"YÃ÷'àBPÉþÈ禨pb>ö^Ë$„XÄÁ³ý®Û'œRG+$Ñ~¥‚ÇŠXB«F?«{=Y]²t²Ý M=ÛÛYEÙ¬JÅe¶tÚ~ß|\?Óëά”ï…\Ú¦M>|tK-»ö„$ÞÖp;N§$t‚öHœjSàÕú£ÜÇ…³z¨j š¨!º§°Ý·¡¥ÖÍÏ’£D©.¾sëï.‚Ž‹âƒ÷ùS"éHȱCÉ^ªÿ¼ÞëóÞ™cZxg˜ss—;càå‚DEGh`®™ Úq¦ß“¤Ô’&ÿÂŒ-øùÞÂ./]ÂØc´~èÓmy-§}ZΤnûvÜUÉ”gëFhKTŒdΜ²™ˆJ­&NœÓ£Ç&·âºÖ.7[¢ f%Bƒ™¯Ÿ2åZ%ƒ¢3!ZWѪ×ü¬¼ß^Ó-¡ý”&¬kÉ`9kloÍ4Kþ‰©QtŽYo:6ô–±‹Hƒ¯“Pij‘«ðzÐr¢Ê´À,ììÎBؾÞÁl|ÕK±{}:Û_™kÄEJ“iÎûXÅîiâÅu¤f¯õ[µ§ âÙzÃã: ¯ôFí܆çFÉ+¬°Y1Ë×dRáíá¤úË”‡¾ö|êz¦±ß»®È™Ýÿ½léY{Q˜ ןžyÙ§môÚíšÞʾÁ ͹oÌ@Û! ÕsïS³Å-Àwõ™©€ëΨ³²þÛ*›"|Œ¹S„EUÅÂVBa’­þ,Gt”T=Äx˜ ä.äæ-Ѧ±ê½,x?…`-¥:?é_(¸‹¿ {h#28íÐŒEôQ©&Îxea£¨4îµw ¿€§aš äÙGËTCäËWÞ¤}o=À¤:ÒòŒ§j_E ñz½ÐV÷ã£éQSIeKá³ÿ¦Ã*½>Ì‘v´ýÆv3ïY]x6å.¬`LË™›R|y96+’îáJV($ )MˆÑ_<9zâRÎz°&UQá5&d9,‡èÏq¬êz©7§ug6‹’úkC¯Ê57E7+oarxjÛ™QÖ¤+aLIŽ1—5¼™9]±²IC¥hZ¦ÇÌèØu½¡Z,~'¨©H‡¿ç#.ÑlmGÇ}Yů¦Ÿ^’¨e—»rUEðÎz~àFêÙ ‰O? iáUþ„¸²ðx+­ÜÆÛå/]¢E­CËSM5΄²9+eÈÛ{ÜSñEñQe]'„kæBm<”iãL¡ÌipƆŽï#.ª ,\5b„¢×®ç #-4M"TaFù²ÍþšWN@©]úm€:tƒ½Vás@£F/¨£¢ýZ^AžõnÇØÊå–[˜Ðë3†·!ż›´Ù’6†Ucs”<£µ&yo‡ºú,fc½ÞÌÅ“Üû¼gâ»’ôa%èºxDž-!‘¬öUR+6˜“NHž´YIºCù‡Ã…F§„ä€_ˆ£U§’bNŸËì=údMé¹Àñ–ÎjÊ5"¨ö²Þ<Ž4Zü¼¢¹ÇÉ|³œPAÒ³>u¼Ã]æä¶)QºŠ|ehH‰Ù1FÇ×’í·(gÞ §C†×=és U/™¾KÄónKaM¨çO†õﱩ£ÁIG,š†¯«Kâ×Û)Cè{šî÷91hÍëWàH4cKõNIDI .“@wÄ¢g4ÓÞü„±ËìA¶åÄ|´\nºrà’1×·zØŒ‘D‘»Z𕘶 íƇS,—„áãÀð$þV½§…B6µV‚Ää¦i@«5]þŒèì~øÂF&)¨î™ÈÁIå¹ø¨^õG™Ì½i÷{d~rM³->­Z›ŠÕdÂä´ædÅ?ÏÆT[B0½yµµ¢Âí­_~f™R5›6A•õv"Q@Ú±è#‚-Üõb3¶w¬ô}“Ô †Aö¬Ñà¡Ä~[òW°šýæ°ñ¬9b§´Ö£*:¸SNg…F?®u׎B$aè¥0;ž>×ûÈÌöÅ%)1Îí±”2ôª37é7ãÉÝgź˜õ]àã½9æ6«ô˜KçWj[ÁPûZ©؃ɤº$S ²Vû’iŸ½æý`Rˆ¼œQfŒ ëD[À“¹;’k&ÀðΟ›WçÃÏïÛ{‹âÊ›Þa®Ú}Žÿ‘ß)ônèX`Ø•XÍY÷þˆÇ–kdžjd¾†+ÊiÅŸ#É0ñNç„ißsCóÉ!i<î·j”­“©&X;ë¢ËèG·$~µUÒŒYG«q¿ÕMr6 ¦pf5wY$ÖE¨~»¾j0JÁJÐx îK¸ts 1T\­]ûÕØÌó¯*'¸–^ྠÒ3ò¸zn~z‚uXyýlÔ¯¯„÷…óœ×£ýëÌ2¢¸,œ@vœ­Û.Ÿ9 ÇÚâäˆóÞ7´ãuÌÍ…¯Zä”+ÒSL^‡™ßÛ“å#-œs›iM<¦µa|J77«Füfò£ÂýG×ÕîT­ÛÓºñ“Þ í•Ænók½Õ«lQµÁª´ÄÊcAjûБ¢¯ql¼µP£7¬”µwû>Qì§x82Ÿ±‹eÜ‹©;OŽ!PYê” ™ÍÈ{Z ›$„šâ.xŒ®oDò{SÛ<=ÄÛ‘>Gw1ß°L:¾¬íA#Þ `¯ËòÇ´<¼ÁêÞ>žâØ\•Í,2ôlûLéÙËyž»W‚Ř‘ZÃÕ.9Ø‹BòYî£yùŒì¹¾væ{mòÜÙç]1 m´ëÞÄô¾ }åþ²Qœ”ÞgœÑæÊêÁAþj|çïe釅|ˆ–@/ÖY0¨y‚‡…äÝ ªà1¬œ2êè‹*:ºçáÎ:Ÿu]z`åéƒsO]äØ ž‘EV^¿~ñ¤IÇÀø‰?{«0á»û€…lŸ¬¨ÔGËgò·Øtn¹ù_G8õ⌡çs2d^¡RW•^4ܯ0ëBï]Mz}Ö¬&ͶÌ%rt—Jòj6ú”úÁ° °bð†“¢aJ»ÝÔ¶z H“ÓáÝá.§Î.+/¿#±r»9íÒñ“20yÅßÂîí’] úQœÃqjDWû§çôC 5Ž€Óe0 ‹ÍØqÖº‡ŸpPía‰pgž<«#«˜3s½ Ü~*²âR¢ÄHÁÌ‹0qž8`}Ç’×Íx­þ¹å6Ö“Éöw7Û#ûŒ«ÊõÓÒmjÄä›glæÃú>qp¢ÕU¥3éÆ-³Z}¥êwáN2×i‘{¿îÎPÚ翌ª#ñˆ ÛþÙ‚ —š?˜ÉRoaÊ"»I8Ôßúí”.³w×WsIŒA‘«Vç|•·ì¦’XoæËL ÅD®ŽO¿î¨ÃÆ–Ë)MN#¤ Ó|‹bçAíGõ„ì8ŒŠ¤(óÓõÝÜR/­—rFŠ:öÈݹêbƒy±)ðaä«q\‚Ry*¥™–° H%¶^üý -’wŽÊ_2 Ø›×½ý6‡•ÐòÎHçi¯èkL•o,{ž:»áED½dm?ÚðYT$èAÈÿX>”¶·üâ1ÆÛ'¾µ­»Š¼ÎÚCRñZÃÂ>û§¿W§»Ôe3ÄÏ_¤¸Ãß2-éÿ2ïºï”ÆGY#Í›õÅéV¬ÆÁ…m¥ÖBV[åO869Va‡:ÕóNgÙÅéŒE—i$á#óNìU}b±ÁöáÇÌ%õrvœ5;R4•Of(c¨7Ÿä±%-¤è{´žÝ°Òª§êîD¯²6ókp®i„ÄãX:¦ãÈUp‡€¦ÞvœÃ[’Gf’)Åi-Õ®¦ˆ·¼y”–.–§~ö¿T Œ"ûÑ‚s¹®Íû‰Ææxù†L`™«¿ »KK•C1Åé¿yT+µ|i6±ÎâM?½PÂÃÉ‘„íåTÿ¾¼ÝwýéÃl²"ê 2#9±°é>?2”_38¹b†dijmáûtˆ^”ۋΘ! ÷»‡ÈÄ@¤Ì<ÄbÜ>÷ïéb‡Ñ´ÝCÞÜŽ+‹óÒX Kß1™Â[ù.ß8³8l9­èw6>žMÝÜWés18¾àÝF¥B ƒÚ­ïåS+l¼Õ;öPßTº„}a¼lÞºh©¯‘tyI”ô€w™x¥Í*jì“|’ºoPÓs`hkêÒº±¿•¯ßM—R¿thI¢VïÐDO—/ ö`ú² ‘¶ü,N‡mLó 1… Œ7²=¤qJ¼;aPûc‘{ë0öÃñžâ²W$ Y湫ö?7—•Wmkš}M‡/ 3üžKÎýá¾ßÇw-'ÚüÛ2Ò„”»k{9¦°x 'É´ªLãe2ÙyÁ‡²ŸÂë­ß +ÑùgÄéDéréq±ÌNAʯºæ ˆ{T#æðyû2‚öOt>Œ2a#™º¥f³_ªµx¿ÜzÇg®™†wa¹Xu:%›ð…f•_GãÒcãàԨܳr3©!ʆYä« rÇ?H¤ÂO/n"`%׈ùâwùÀÅѳ ;üV’âØ—‡uì}66…#-“.‚3˜§þì-cyyÁ·<´ÌŻĸ×*¯âGZNt%ò†^Ó“áÎ|kRüZ]U—èÇá~xÅq:¹jòã>AY}àÚï˜0“caux¶ Æî£Ù“!³{áÐÿè¦IâG÷Œ™™R’‘9oóMÈàúÖmBP›UH–úb“³¤Ös\©}©W_~×TÐ^,$~/qLGHu,AØù`™¿}ÇÝHp-§ÑÔéˆÙ¹%ZÃòS“6z‘\©ô)T~LÎáVkXˆr¿±DkŒâªÕ¢írË"F[ÄÆ©º°“$›Tþ&¶Ï‰ãa±™KS ËãîÃ@ þçóE»2 LîÉ-ûaù’²±õ€ªñé¹Íìè”(&+­ø[k#6Øí +«pY߯V`LñˆQÂæ, Â'™ßýþ[sô=:ðL•3ëàV cñ›ÛÅ»\îLTš£v"i<ëW…´Qd"ý_ t¥ímNõˆ‹¾ÓtÓØÚï/Z ¬'òÅu#dèÇ(²O@ãèÞ,)K¦l`Ý>ö‡ðQ?·DÔùj…`qžQCÝmI¿R$$˳¯R^Z1†rJ¥„F0Êr‰.óçyRñˆx…/¥pª|C}\߾ܲ  å`´CòaK­ØÊ}ú6P1´(Öfa$š\N1 åÚa>=ú¡sè\aÅ«’lìu¥Êè  àxÁtóxòÚ0‹\¸û•:ú¤°¢ÁÍ ,5ÍÆ•1ÜQ™ÇþPª*ЄJׯKa­ý¥‰Ä½“LÖŽA/‡Ú\Fšço>ìÁsî'ãÑît6w¥¬»úÌ'ö\Xp¨‰Z›í¨ÍúãÓÒD_úá^¢Q4dzšæ~Z)ØõÆ?Ѿ2"Å?±š,íÏc>÷Ïû}x/\àŒbª,Ñ@Ž´"¯ }|øÿA6ÜGF#GW:ÿñ³È·úšÛ«]àoçbýtýLé¶ S xç~2O$¿Ix0áHÆœ¹“‹#N‘,¤ißaü6pGp²b¡zðl®DÝhi°ëVlÖÐH:¶ýž·V«ji:j¿Ê§øu„Ľˆàž€¶nè8˜:ûÔ¢ŸfÍ\\0{ºÏÔ}¸ëŸÔÜû[b7ì€kŸ‚¬ÁH°Ûåÿ-mwÿÎM‰âSTdûÚrª¹’ľ¦“‰¾(Ýš![%éFPQæžHƒÝúyͳĨ‹Y§þ:w¨Yu/a(ϤÊv#RöðÍÖ×b]•I-R£ö=ÝË®X°Á°•ú†fs…š¿3½sàÀý¶]nnºJضþz—¾ý¥¬øLú“϶d'¢‹©j‘—Ò3”¯¤i1Âü+&¦ÌÕ4LÅËúÌae¸L ¼Ÿ»¨‰MéšJ÷5úáÐ-`É{6ÜC+Œo¬ÀøyfvI€@¸P>žÜSïªì†²›ígO«ðëÓWÙojã5‰NÛÆé¾/Å.º93ªX eH}gífMÚ |?Ö¡=ªÃ»ïÐÒš%Cü:óµþ·ýà g¦ °NA•;8÷ôµZtuݳ«¯#¬îé¹ ¹Å½çoáœk•0cÝ‚L‰Œüé•Ö¶ùsÔV΄Nn#m¦^S³ÏÓaɯÈF“»*t6,®^`'pǾ™ ¾×ÜœÜÝ=!Óu’´9Ív÷ˆ°Ô0êÑà’\¿Y]ä™ö4¹&3÷Èêi} Äü~™1~Æ~qЪ2ÖØw¤)¦mý`i<4gS’.1IË蚿Π"â¿S_é³Í½!ÉWsÖLŸï;3eÁõZl!MÝ¡´™®ØšgY<õ­Ý"Áõ¹Ü-É›{¼³é¥ØÙz|ÿ]ÆŒ—ê{ÓZÎãå* •¢!þëÕäIò‚mÖíÍ¢†ÉoWØáϧè0ôÔµ§³Û{Æ8ؾr¼Lîw{d°çž¼0Øm‘eÖª¸™0y, èO?û$y9ºÐëѱlksAßÚõ½;†èèÑI.Åt›ªz å3ïs#0K¢%­ÍQ¶À0@³Ï<û“âÛ&Ùí6å3æ¬ê,²hÍ" OlOos.¤›\Êx„¹çT}Zs €I’<«åGN!bî™S ¡Q\éèìXul¶¤Û — rÂòøÑÊ?PWù¨¬×Ô›rU—Ïv©®kÃ-íh'œÖ`ñ;§z”ÃýB‡0ûîcÂp­(––Y/žõœUÎj¦à_îvGáËÆã>›5çM!"%1|G4Ò¦I¨p5ºŠdMð–j0u~ôœ +WZ†žIÔ•ÂKd¢•2ÅÅ¡òâE\XzhÂ+9<ñ¯´Ó,…ú››Äj'+rNVxçÝû…%JC!TPUûtÑ_ýM„Ò-­h£sà Óllj·nïç°Š˧9æ°‹~Œ³ñUðÕN… ö<×ÞWÚ`|<`ˆS”„®=Ùk‚T¡&ss§d^åÈ“^ 'ãPq‚0z­Ã¹¼çGð{É몭ý:¸gkõu¡%’î}þ†ÛÙ…B¾¥@Œ„~PË^l›êòJ,“ Vvƒï¤×옪c'ÚR°4±×KéÚkºÉZ›?zy¢ªÖdÂ+FïS/Ù*µ¥«V6È唜ܰãQ[G<ÍMnà9X3rqÏO±x¦HÖ‚h‘Ò¯ï­ßÛƒ¯&ÚÂ#m­oß%¤H‹n©S6»š5g¸÷ä>83³M¬\HìbWp(ØâV}¬rÅd ‹9Ýå§«²yúb"¦òªª»¾®Ë–"Q¯O•l€1;ôy‚{ ú‹±ž«ã#tk–Ó®­ŠH‚ žX•ƒ0ô5dâ‡>.=u‡:=e4y“n⃗ {Ÿ#©nÎÓ±ÕùÑc1ñu×#\Ìë{@Oý¶4œÛ/-v\{Ñåïtiª(o}™ º<ê¯ÿÞe±;˜*]¡ÛË ¸ïÓ‚¥¯|&‹ä‹(ìÒ†„ïå>Œ!SÇ9•ÁÝI¡œ5 ‹Ídº2% òuÂ÷$*¼m¿Þ ,wR\^‡yNÛÍ6.kBµg}¢£H—ÖôŸ Íy«ßÞGÔrmšõ®Ý;Z±gÄùx'ÐÜM?¨å¢´]ù•§öÿïÐÇö endstream endobj 617 0 obj << /Length1 2845 /Length2 24335 /Length3 0 /Length 25925 /Filter /FlateDecode >> stream xÚŒ÷PÈ÷ ãÁ î0¸»kpw ®ƒ3¸»%¸CpwMnÁ-8w'Á!¸¼Éîþ6Ùÿ÷U½WTÁœk}úö¹Ý™Š:“¨¹ƒ)PÊäÊÄÆÌÊWTcc°²r0³²²#RQiX»Úÿ1#Ri]¬@üˆ;M\Á6 Wpœ¢ çf`ã°qó³ñð³²ØYYùþèàÌ0q·6(2ä@@D*qG/gkK+Wð2ÿû 5£°ñññ0þ•µ:[›™€Š&®V@{ðŠf&vu3k «×JÐ Z¹º:ò³°xxx0›Ø»0;8[ Ó1<¬]­j@ ³;ÐðkÃ%{àß;cF¤hXY»ümWw°põ0qÀ;k3 Èœá2:À‹ÔeÊŽ@ÐßÁ 0þé €™íßrÿdÿ*d ú+ÙÄÌÌÁÞÑäe ²XXÛÊR Ì®ž®Œù¯@;p¾‰»‰µ‰)8à/æ&)QU€ xƒÿlÏÅÌÙÚÑÕ…ÙÅÚî×Y~•wYd.î`o¹º þâ'aí 4·Ý‹å9x€|þÖ s‹_›0wsdÑY;¹e%þ ›Û,®.VVV>Ð ô4³bùU^ÃËø—“í—¼?GG€x@?k ø¢‹‰;àêìôóùÓñ_„ÈÆ0·6s˜-­Aˆ¿«ƒÍ@‹¿1øð­=z¬`í±XýüûÉ,/s×ïð¿Î—E]Z^RGƒáïÿësðø0q²˜Ø¹Xl¿DÆþà÷ß2*&ÖÿÐø#Wdáàû›-¸Mÿcìþhÿ:Àk)9€U Ðþ¹>+«øÛÿg©ÿ•òÿOῪü¿‰üÿ’r³³ûËMû—ÿÿÇmbomçõOX´n®àPtèÿ†jÿZE ¹µ›ýÿõʺš€Adi÷o­]¤¬=æ*Ö®fV«åo»æ¯)³³U\¬]+&ðÑüx´ÌlÁW‡ X’¹€àÉùï’’ 3ó_#ÆÎÅ 0qv6ñB2q|ØÀ³hôüKÄfƒ+8ÞžÀÂÁñ׉rsXD™þFܱ߈À"þñX$~#>‹ä¿ˆ‡À"õ±X¤#v‹ÌoÄ`‘ý8,r¿˜‹üoæ¢ð¹(þF`.J¿˜‹ò¿ˆÌEå7sQýÀ\Ô~#0õßÌEã7sÑüÀ\´~#0íßÌåíoæ¢ó/âGšü‹ØÀ>3°¸~ûÁ¹¦¿˜«©³‰™-üY¸þ¶sükÿ{šþu€ šý‹ØÁ0ËÒÎî÷’\àÌìÀêúŸ…óWøÞüƒXv,æ¿!;˜´¹5Ðè¾£ÿµ‚;`îæåâbýG&˜ñïÝ€ÈüA6v0u°fM\¬~+çWŽ“xÒÿgáøäifgbÿGeðIYü†à‹? ç/ø_Á¿!Ç/èþ›Û/Ãïõ¸~…;¸9ÿ±8Àò®ÿ›0'X V^ŽV@Ð`ÛŸ}ïÜæî í|v@ð©ý±Sð]Íò»28žüßͯr³7ýuåZþÁàWK~s×tø#‹íWK»Ák8‚ßyÐtÅÉöõ¿ªâoÆ|3;üÖ'¸?ŽvnÈáWK~Ÿé/ätùëû×ÈþÛh~hËö/‡ƒ+ÐÜÔî?„88;þÒ¹ÿñü7žïëƒÙ~éãÓe·ð7u.p’ ÐÞú¿cÁõ+èþÇs‹¸€ßà{>»?•Ìök(~/ ~ÜX\­œ ¸í®$€k¸ýÁÂpÿ‚™yü!jp¶ç\Þën¢÷oràJÞ@ç¿—úÏaææ >a׿žpð$þÿõ… ôš!.Î9˜ „ÚÔ…¶ß~%ô`Úš¡ÚÕN£còYtîp»G}•BW›¼î|-š2Üóze[’ö§Èé“Ï–úWï[“TÛ|Ô¦vÛ&q&Š~ˆ~î'F bÒÙó}ròÕ ²…nü"G•ç䯋ªR€yëÑ'íù¹¿byôÝÜ®ê^-·<ÒcÅ4SŒf´~Pé,U¾iö7ºì±wß¼W«4Ø]ºð)ñuñˆ¡bŒNQûˆ¤ÊáÎû”¯ ,x¶“æ¢0~XazÍ|ÀžYk­jêýä>ºØÉ¶“—¥!ÀÜIúTÞ„eäL®Œ]Ûf…éú‰ÃH|Ði!¶Ú~­Õmaóh‰oúó `EÇêG`s·ÏC½ÓêðÈÓÍ»­·ÃM#ÛÝ~Ú¥oúßYz°ÑKZéE®,óg€­pƒêÒÊb½f\rOá}„5 ô >»'`Û*beÕå…í…%:áÊó=õ«n8SêܘEŸ·óÀ0y áVz1ýòáì¬ߊCÒ8ëm~¦dwDþZª@°a6¤‚ål£‡Y¢Ü‹T!q‹ká|²˜SVºww¾f8R?ØË掯ùD«Z³-ž«P•lç(Šiì !hH,$¬ïÚü`뺲RÌûÐAëî¬Ú#\l8vSƒ'4?¢S-0·ËE9]Z4 ªäfû[/‚)ű†˜;™}Sš¶†ÐýöXWÉ£c…¬Mñ¢b¿ü¡à{ßEƒ‰â^ü"8?›Ùë:”oi!³^¯ÆReí-CSu 7i?ˆªkÜPxo@ôÎOm“}Ú¦ô±«Ö/åìkpE§CÛ%P“Íof\® ÑFG>[D6¯izˆÖ/}Êœ® ˆQ¼êà`Å?’•Ód­)3`½Ì%åØlyg‹Ü“Æ5 Õ¸è×­aý «ÒïÒ¤\—x®ùarï‘;%wÚS:_4XI˜‰¿c]K5—œC6?…¨ÀûI/'ýj»8€Ž,Ú"ìm0¼Ùz<Ķà7¬¡º¸Ôs5LÉ|²P&þOè4èÏ“¢¨rhµÌ°‹}uârãr®Ô½>‚*5oéA.Å•çq®Né[ûä *8¾?þ iÊØ¿Q0›„µÜ>ýE°íÐþ´¾én!kmØêl-/t½ú0¾¡áãÇÌ7ÃøÆo.yRà æÁê¥t^òzªr²}#¾r¸•XBCàNoiös–wc;äxÈЇ€µÎÀ©—q­®›šñ»öÂ#™{ö7#¡Ò_w: ÔomÝãTæt'ÓË4º‘m-øxú¹ö{`Ï,Š€u¸òBQîN1W‡µj4Î݇{/yNÿ¶åœë4œAÎ/tœ­1­#ϼ"÷}˜®›WzDÞÇ$\\WL:§‘„Øk™5Ržæ]/»2ëŒÖ‡nYJJ»‡Ãûªf¦$Ü ½.¼³À±á¨ÛAx|ùÑyjv*ËdÓZï÷7r£øéŒnþŠUì}xÞkn‰éyïg¹é3ÚèKPú{P*§^ø¾Œ—­¿é+”OÆ1£Ãû:q³©f™ëZMý¦|;v¢ïê§ñã#i¯2Ï\I_¼9³h|IùznB¤X›Ý“ô€×‰LÁ|ºf›Ðá‡ÿ›Kô˜È§«ûc2ÖÄn|ï;Êã»É›Á@ª¾ê/SÃØ›k›ì½ë€£§7²V_ÑÜòÅìO¤àpùØPáRÍáˇ¼¸o‚»–ÖÄR(e¡x .õ êr¦3ks¤½oËø¾ã Ñ$îÐŽ>µË>Z)Ý×Ïùì(cPÓØ Ü;ÙcÃZ7”tQ‘+}·ïiÒþö®¯¨Ú~Å”Šu1 –þÞ8ãÇ«¾ü¤õ$‹Ÿ½ÙvT*’ìùü$Z¢têb ,{‚8'\˜â9¢…ë7Ùv5>_»h)ZÞ‚¤àÉá£ Ò By}ÔÑ»û4piwŒ´Ï LEŸä}‘Œ0çf>h£¯?%t xí(¼pVæ}2ì¸1qÍ!…Qfû‘Ï’ !uNšÜÈáEB‘¾m†¦¨8?)ݯû´ªm_õÒê=-‡€aWqWIÞ#'\„YЋÓ#òÛ×¢‹‡YQZ¶ÆgÌ? Z+=UÃÀiÆ)îh“Š„®èPÉf>èP€™ ô¼…)Á3Ò«ŽŽ;xy¥šW‹¢¡òòÓ=$ï8Â˜èø¼Dâ`•tßœä†smÌ`çCT½™‹7±Àåæ YW1qŸòÆ×Ã6ú˜;†5 [ÉFB_±3ƒQ§È0hêøNÀgµb!¨Z•ç@KK`!¿},|£F™Y9gÚ±—·rŽ$ä¨÷]˜e®¾Ð†¹Ôƽ¼Ô­F¾éCZB§VP¬­eMwö’étuÌ*YóAÅ·Ôo_õ7ŸîL8UÙp?Žú*ù¶œ´Š›KG‹‰.†¶Ç.æ±™ Tï„nøWÕ…ûEüsD 9Þø±ègÎH‘Å!îJQŠÒ<|”² ÖÏÔI¢ –„› ;n/È÷rqRÊ ‚ò»?TÆŠ”cEEñFÜß%¬MÛPï7ÜêìÎ×Ó,ŽCh/Mî†Pw°Éžñ±3X¬¬§ÝLszÄyû¼EeŠ¿år@"z1_èåy¶l­º²‰ºUWd#;ŠN0ëqª/°›z$3˜\Ë‹N”€xVD£u«Hýäéd$þ;• <ŽúEžø:[Òˆ†«\’5c+IØD¹F+-©Ò 7›g‡´$¢ÈvM˜S'lÆ+¼nÌ—n 'Û‹ä÷—ÂgŒÞÃõSTˆmµëyžÐC¬i.ÁèsCøÚlRž'³Ö–Ïö 1 žZ^?–Ч²É (¼ýñ>”:º_t£d¿KH¿^è/cvã‹ Ä5ëˆW‹³Ý÷¹V˜‹PÜ”ñBLÚ*½Ÿ’ÿ™7#PØõ}6É.Hêži!Zé2²R`c³Øü¹ªçá2±úõã:}{¤à@I~Êv?f(f´KW Ÿ`ƒtЏ¤q˜ÖaÕFÇp¶jÒ¸T±ƒJGßÖzHeE|ùGû ß<ß‘nŒ ß{Hãíj”#ç%í;~¥äâ£!—™ŸƒÉM¤"p!ÈY†ÄÚ«aÔìœåvÞH{”³ìÚ§˜u«aGÊ|¦/…»äÊ%¹˜#cÚ½ôR«,%Æ^ѪŸ‡“õUSz¥è+V¬5pÎc •׿F…ŠÆ!EïÔ©4>+µÊóÄÕÂ3¨¥Ïé9g>éüìÇ<ÖqúµZ B.ŽºYÐy¯r…8.©)Yptù}6#Òõ M&š¦®ARWUdMvqÕªpç%5«K¯ŒŽ§ºó1Ïj”ü ÿP‡fvÙ¤§Q£÷œæ­sÀìz: È”-§ƒO›*‚X·Ÿ÷u2±ºA‰ØG^ªa}ùÌÐ6Ót­ôÝçØX¡¶Ð~Ù¤H3²¥ßç1Ã}ëTa}¥u¯€3éŠ-2ÓÙ^ôåÄ%«gàò¤»MŸÞ&T~3âòóÌ!ËTÄ'Ák žL\œ4Ê× žY;@·ñè”d„´aêf颒fNÉ4¥];>›I­ èø£ÍÙ·Å?³ž÷àžy¸/µ‘Áb|ÐÛ«Ì=„tÓ¨NÌ»fä}î»+ö7î³íðpPß/Ûοï} iRHÆ‹ÿ­È1uù=ž¥Ç"Ù+Dø[ž])/uÿó°\¨ôê;;±¹Ãª$ÒÔlw2Ö»ƒ¦H©ä`äÕõû“rÉu½ð`‹[OÎ@™°îÝnÊè“ÏTêÁݲ¥Ž§›q)ÝòU8 ³óȵ‰=]6¸°@ŸD6ZÒ^•{b«2¢º ëÕlñŽ%I»ô7ñ“ªQòpcQ‡ßÛ{ÕÐY7àGºÚô\k—E)ô©‰«‰™Ø}ùáùÙ(o^'›¿ŽK±´f}ïdë4òfl[5Za@Ù‹MQØFÿb>™ßšqòÉ jm¢À¡Š9Õ·-”p2ë¥ûh£®²EÕíCߘuˆÎE@ؕΩ¯®Ž@+A=ð(ÊÛ®¢J°L ( Ô¨o`Öp –-±üspâbŒI>N—É‹½_;ãö5v¯Ö&4# 'Ø}QuLxGPY0C×õ®1û®¡ø‚%Fà•:> ²aËOþW¹O6"ß±<+?‡HÒ²JŒ·b/«:AÅ–&Ûjдœå¼ÈŒw"-츹Ú)ˆ³%½íp|@tJ˜ïsš.z³5éÍ&®ÎÐET¨ÂÖëO†RgC⨔KU\ M±£=Ÿi „'i«î²Ø;*qÉó@j?#}éz—ÖL"eR«7t[fj9Ýb4ý¾ô÷í÷^•Áai¦È¾¦ê¤}‡¸#›…”…ŸÕÙ-›ÉÅ—§:0+–¬m>"yÈ[•5 T‡c»P\δ¢[¡Žê©¾S°ªÐaÚ öWw~ö2á(ªèH—› ჉!2€)ŸÂÕÀ‰ á L\]Ÿ¢%@¼ÍJFÊî i–±y_ðzÛÛ;Øs%q¹Gxir®¶6ÂöCÍ’]Ÿuj-…àþRÆÇ `<ÅÔŽ”w¦qÓ`Ó›‚mY3uêTÁØöÄ ;‚3([*˜H[ëSGÿ¥Iµ(™—Wû6ÿù VŽY¡çlj°é„âó\Ä&‹…Çzjæ¯%ƒÛäÒå©èÕû4Š.S¯fIßjk>ù=^745ëô5Ä"ÎÎSÙŒ ’ÉtžF)˼ÀÅ’Ý5F ¼¯¿HØ’kvÏG­ 2X¡@¤\|U¶L#nõ&ˆ+]0TíøëÇîs‘¤j¼l„ “ªú@&¬tѳÈw‡vÚõŠ´qpÎM¥ËÆó“ ›ec_;(wâãVY»¼§€Od»õù?gTzFŽ|’ à$kÓN…ÆM ‘‚¬~(ÛBg7dn;ÞÞ#Wóºy­P:_¤®^¦¸!Zø™9õ2pu{ù“=­|˾'¼í:BÕd¬†ìtͣ۳旹ÈëTë[¦­1*Kiu>;MÂáW¹lô1Ió‡ož÷y‡ä„eÊèêSÅi»/tA Lzoâm|‹ñ¢ TÒØjnä«yûcãM»=–\â-Ó Gè ±õö¼ŒÈJ|ÅDÈ“m³óÌŸOî4ƒöÌ4cêÛ=m£‹v^¤x½ÙR·xõ}<>ùDüPô> ùr“·”;–ÃIÊ!z[PžQ„Nƒ!…^0²´©/í6¯¹J+d»Ìü|­Hº(¼%¶05'zâ=Útb:žªtùÇO÷û&Šú³Ø¾\4Ø,»!ÝnE |aªŽH±çVÂê3 —¸ OXr¼¦ŒMÎò1J†P"õjÇ#_OwŽJæöxtÙ"ç{ïY_(˜„âbøÙŒ|Üy(ŒÜõëðDÛ;Õn„}•¾ zï›Æ ¢GõA­µ{£[î}•2‚%ܼÏ{LêȤ0E=Tø}*o, 0®/£ê1N-8Yý2ìRñ¦ÕýkÛ€¡þc}"öÜ“êÈf™’©EÃr{çZhŽ9BÌb©&B»÷Ô¥åwË1“Øx·z©¼©tÁ^Ì·÷^«ÍU“P÷ôíPC–×/œoÞ²ôÄs–ÉdŒdÎ_dvO:)ê²Ò4/ý‘oŠ'y„èŠ.Óe@ñ9P­eÕ¢<ä‡>ïÔYØ]Ÿû¯î\vKlùdß^%Z–gMAo½L<=0`.–¼•<*M}=Äü}“¬k²—œ^nYµkI‡¤žèöÔf…˜zzQô@™¡r/üKK<ƆÐÏT¥ü]Jn÷:u ôŠe¼…/œã¥'ûo2!&h®nzï¤p͵¤æöq\°«¤Ÿ‹6 YšËê{a†¯!­¢ûѪîîtIª¼C%Ê]E9n€™¹Š "Â6t‚ÚVÆ;ŠíáÂ/óÃ/þ›Àc- ¹o¾Z[ߢùM•Š;Gáh ‰ Yà=A¥&&«ø ÀF’Ï´Ë_ÏPŒ'hä5¡JÝÜëï<ÝÎ&A@# ¤#tù~WHè÷£È¸Ír¿¨ö?M¦Ñd«r ™ xR4Ç’r\’ªòWؘ¢/S5»Ê%¼bÉW~9É"vÖZ êÁ÷4øØ×.L·ušÛÝ`h—}ÍåÐùZo?RJà5£u ¦uy¤þ'%ÕnÙ ™Ù±«IÒ®7üÇ" R§¸ûJ/H¯Ôßv¯²~¬¢k³ÚОƒ êà´h‘’h²Š[f^ø¬Eg¨;ÅDòð{bD ×Uj–Äž‡¼ª½AÒAŠQƒ6x÷Ì^Ÿq´Oë#6.¸??ëlrÇáJùezvÇ„@kæøFѼMl|*-‚¦9÷š[IŸ4=tåZø‘XËèjXø[ ½,«ÎLƒ>¹Ï6ü)‡æ’÷Àù°ÛŽT–ôèbQØO•õ²:Éøp^´àGÍâ¬{ºš3KÌȯØN³üæ6Å-µ+ØáV¯œ‘гÚ]P˜ZDå¡¥yâ¶É«}U'ßCíUÜït/¼]|Âý û¾Õ«cFóZT|³o/íå8›;SGbïÂO˜ÓûlÞ´ô(—¥¿ò‡¤šèÇìh /ðñÍî«k§ ÛÔ@¦è¾ós$vM×TÍ3þ¨œ{£<©/$ÂE}ØDŠÖZ||bÚc¦jh½ÞÊš f÷[~"˜à¥å7f ×TŸŽ•ÚVÄÔ¹øÞ݆t†Œ©È!ïëËúly qؾºchZ®Ý·L[GO ˆö€«º= ÃŽŒNÚ3ÄR"s®îÕñ.,~GëüA@Ô\VœÐ˜%<È‘ÉÉí­ÿÕîmô)2Kž“€~,Hž ~U»X}W%j¬F´Bš&¤§oå÷óäô¨ä)û¤Œ O7n-ɱΎö0SÔ0†¤b¼AÆXÄV.%„Á9;• jËÞ–ÿ´•á&ÉöáèÑÇ€ÂAŠ¥AóG©Pbë{ëï¤ð|ÎIcš> ï¯~Üê—B*FÛÇ8A €vU GÕb%5½ÒÈe‡¢'meî fóÍj²ýù¢†5¸ûòH5+âMT®+£sam,°{ê ÍÚÝ(z͘ù”ȶã2b¦3¬ˆ¤þÒwH’±$Cé0J¦¥Ú±»®vÌnï¬ú%¼ Å›d8TA[»ˆ£;Œ£¨Vz8âÔ(ý¹Ö¹¾ÏÏ—ÀÃz×õ N¦(ŠšðM’Úð­Š9±£“,¹¶¤ ñâÔhJ"›Ó‚³“†o£S×h3K½p©„QÛ"6ÍELÆvªÑ*¼Ú_ˆáDÝ£›Ò t?Óvt4”°øx‚Y3°/®䃙úN˜­Ûö|E¹¨Ý@íNÜ$о *×ôÓ«SD¾ÄÅø%;zÅ{ ?Úš‹rs}S>¶³*&æxæ#ü£Å9%Ec"ûËhj¶¾[ÚÜ<:Ö”É&{¡º¦T¤ß GhêTék”Œú¸ïÞìœåf7׃ œ”çìËRŸà*x.o•mðСVUõ."³æaÉN^ž.膴ÙY´¤Õ®ružn軞øk ¡Œ´S¯Æ>cmÕqhe¾`Ïé@Em»Kîñ™òx®?€¿Ùžî{%¾^G®öËékvDwôUïSÏ­€ÎÈԳǔO\P£×=¢a×Ç—_ñyÌ¿f¶HM•8Ü\zB0Ñê5=oÝ… 8~° ­Ñ\‹·U~%À ýF­ä0@ÁXÔ.³"V"œÉãèªç¡ø>ýS ÁWÿ8º‹UYB‡OžsÍ·e5?7°H†m—›n0Æ“ª¶b·¾ì4¸iQEz)0¶£¡rý´Œ­SŸ)êà ÿæšOÔô ™({¸Ëiñt ’{[Gª‘Žƒ"ËtÂ<*tÃ3•#êàͪ`]y#P_º’MJÌáã5Wd-}%³k4ÎÔZÈö™“¤]ml,€’å‹ÑrE”Ã+HJç æLÿ>ëzÜÓ];ˆflÎsç<; ûÐr}]±_'^ßè)õùÞè ݘ܊ҸF¤¯ …÷ITÏÀ…!$]Œ *»ü«[ÉÒ©¦ü›Pþf«C_¡Ö·Lüq9ïœâÃ[ΗøvÉ :&Þ ?l¾ðjå‡ùïøQÊÄ¿®3r¿âq§X‘[C]ͺw2`ïY“¥QT~wö`²†#.`!7ùð¹û»ä¬ïö9q<¡Q’ V+&â\l{!Øt™½è!îÁNsê)jÀCšŽ |Æ+õ›Ø&eA[¸ð[øˆÆãu¿aÆ¡u…‰àC±’K±@ŒWô&V¯mŤ/T§^¼qp™Æ%: ¨ïæàžg«[Ô>è­êÏÁw.gL¸¯C©„¡ÚòΜùç«8à]1¸Ã#0¡v·»g,߻ͣÛɽÇ_bt+üHŽ+`Ǥ3æd¤•UõÅ¡¡Ô_è§¥êóIc:L˜¨¤œêøj ¼ÀÚÿ¦õ£º9ªÖ±Ó%þÛ7(¬wÃ+”"Oa;!yyŠ’¢¬§*F”dÕœËÊOI†ËÎ5 žøÉmnPØÌºÇ\&Ú“,ßßÊÅ)A8Œ¹hêÈ’` ‘·±¯†OlNŒ}ÕjU£`ˆT¼ô¤8b¥Âlàç ó=TKùüáÃ&‹W¾¦Í9ÇM†ît䉢0m»9U/ü$sÇf$7ÑÒ#wqçC_RA ß]õrúuXÊœØåˆÐ1ä´M¦è¹’Â|ÕX†±³ôez9šû…Ÿœ’T߃ï—××¹'½Ž-]ùaDÚ¤–C`Å{<ÕÜ ¡ºïéŸ*Í+ ¿dû,p±ì¯c£È.q†Ïd7)q¸_%¾YÓu¬vŒlˆóÐüÑÉÚëxÖTÌ óÏÅкä{Ÿ‹ýª= JC{Xá{g[ˆWsÑ+YéøZ®hvÄÒ óü(œƒôïMÏ‘Œ­nVç–fNíA7øŠH’ŸÈ~:°\U0â Xãu¿·ƒWÛÙŒˆõÎA7î¹?ú+¡ÈÅŸEŽˆ„u°Žû¦®4hÊ…G–Y· þ%8þ™«-ì¿g%ù$ßïíÒçCšCå¥u|Ë–S¤^e”kø†g ?i¤5Î %h@Aë,ùŠöXà`Þíõ+Ê^÷’®—ÜeZ#Ÿçß!ËLÂ+xHp*×4ĪI¡ˆê`eӛΓ6…¶°(àĨfD9…X¼õCã Áb/¬½º…¦W!æÜ åËê»Ò´«D“î>—·¡Ø4˜|Õ(í Ë!ߨG¿œZ`8 ]9" ï°ÍØ4ο9ÿÎ`02È,ÖºHí wÚùü©Ð*‰àT†ký QüùGÆjXßÍ5²e1ê‚O¬öÝtæ3§»Ï*zö¸ÞÂbjLâD@ƪµíE-Åq|5æ“1ÿ¸'¤á=Q®ôd?˜çØ*d% G íá÷Ñ4ˆëab6{Òß‚ŠÌËDm.Mœïذ<ä$L´¿Þ®¬ÜlÚ멉•d™n®²sóeöåY\cJNJ¹`2µÒZëÔ•ùÕŽ÷R–ßSFdعҙ,ðv6’öʤÕñ²œÕƒÎë‚,ð«4xÔSwDf⻵*vôÅ9’˜B#x=P5ŸK¨¼ÅM %±ŒñÔ±·}É´dL?’¥)‰6š8vÑJR¾45ØEàÈ¢/¸i”wåQ5îÖâ4 ïc÷ç¤>÷îñã¶¾l”KŽ=`^=Ì4îSíD•âÇTte¶‡›M2û¶±nR7êç+ÀVÓZKõÔ?.€ÈJ‰‘Ù2¤@ ¥PÊÚ#çòœE6²QÛ<öЛ°ü~“=xÏÖÌ¢ ÆMïèX¡_àUg‹9k‘Òš‹k¦y^ð1_A}sáUiú8›Í(Òy÷yáãŠõt½sЋcö Œü†:=Æ{¶ œüzD‡Ø`Tù/­•h¬óÖ¶‹†Ð›ÅֹОb€ÑÌ»¨mˆÍÏ3黌­ÖOóÖè%ûØŸ÷\³„5 ¤ÎjÇ]Íõü…SòÉÌ’Ã'8•øù¡JûSZ„à©Ê¥´#é‹]œíÌÕqêmI1ƒ9-?Yè,ÙÏ™HÞ¼^7(0_⣨¦Z'dˆ¿âdBdd¯Ê»¼¾:fá×õ*ÈàÅ]𕼫÷tIr$ ´¿ÔUÌOb k-6ãZ©j@»|óÙþ†^ŒoZmIô3¢ô'ËðcJ·õ²=Ñ1kcºcz”·c[E#™ñ‰ÚX_/aªÏ¶.îëve”½œPà–^\Ùe <=û]çÜš`<bP*ü ?áÜ$]aî#p³¨ïO®ß"q£Œ’*{u½|%ç\„e–^•ÀáÉ÷F÷§â’ éè0¸zœW…j*¤Piµô Ù¼ýù¥¡í§ÊóY9t¦+åt@ËSÌüÔ9Eÿø­M$¿ò; \œ@™/^"0)–d7·å;½™>]QňsË+Ôc”›”»ŸÀ+xwÈÛüäÑNœùzSgÁó»Ø[ü¾%ÉJH|²­Ÿ\úâûgi¤³/@Ê{_Ö²´uiÆhU¢4aÎwƒ=ŒÇ¯»³©“èksÈÖ'‰0¡*k €ßr蛵¾@ö™lµ"=úU)ž­´¢Þ’x¿}cZ÷5âg%lÓÓY¾á×wA¯ =oM½y=¯›Ùü2<¾í¢!RûÒH«á¡Í„–Ü 2ò¬æßL´,€]wÊ7qÎ “©”&«ÏÛ·X|¬Co •/Ùw§6Ýâùìƒ ´ôë° õ‚œØå[ùž‹L%¦ÊLž ×)-#¾”’R×°·Ù²§’afèîìY·>ZŽùf‚8ÔÜÏ"d¶¼i  }'$Ïóçn$k”yšdž8€ˆj¥V'†‚¯ÏðU$ÍDñ›V¯Ýr™Ûj¼W4~ëþJ3¯û¸¦ðí“{î­Ì¨¦”oýtFA÷hÚ¹!Mˆ­YrFn̾‡ä^ú?G*PŽƒoL•ö>\Dù ®@£d¿êbÁ}c߀¾ÙŸò‰¢8°dÊŠOõ*͇¡mÝwñ-.q >òmLÎg ô¨kìõ#Ç$ £$ i¹gšUÒ¬LÚ?¬ø5êejŠ@ô+“)ÌŽþ3íàÂu¼¸¬Ìð&®©u‚ãÜUtŠséhïÿ‚8^¥Íš ·&vedÈ[+Ki´ Íë#U„ÙGsMŽÉ~Í…p7V½¼-nÇà§Ïz¸¬– ‚Ú¨ÜÓÄ7B'𯕶ÚCT¶Ë®„Ç.¦líH¼¸sḳݿ퇸õª½ó¹ðþˆSµ$²å¿Øìü6E:áBè'ƒ"º“ø^„dÃ}ý;ÛaºÙ,qŽ©“,Ô²ìÚÉœ“‚ ¯…ܧOØY,5¼š^o¶¼bwËHž¹ [и^R5F™â>2©=甂dGµ’JÃé…ýO;`‰dF+Ð#® Ê¢W/«IVrùÆNŒŠºBWû ?íµªpj‚2†7ÒŒŽ¾'¢ Ë%°c…U‘¸Ñ8E^`ÆR—¤Æ<ÇR» ÕžÉG„[[›ã¹“7®;{›[ÑÓ’ß‚jÄ´uþ+é¾uJ9d…Š\%@rÀÀà «³˜6Q-iÞä*¦&V0ÝÚŸ[C‹€yOȹ»j³!¾²ÔªËºXtg]¬ŽzƒD;B\¾ ØtÌM±K²‹7‰ŽH£7JªXh”Åý$Fï–W;óå­;–Ä·¦¾Ô•Óz-¤¡IëÉØ4J+󠘌‰Pަs•ìÌ4–l 9ÏËìÞ¢½…ß G~>¡žûj¡Jÿ~fr6;ß³$÷ËZ¤7%Ï+D¡[–k…ºt:úL ð~«SÖ€Omñ1’¡Èd²Ÿ‚ wÊh2Ùø‚QׇµzåŠ Ð¥ð[Å0\§sÂ+4û,¨É°^ĸñÏÓM\kôrÄÍêÆßl;å;-CJŸeÑ£“o2–iQõ{ãÉî_H>%SV&Sä¨)Ø{a""-{7|©Fø„È¥áXÎðnÊðùšaUÀd÷T×E¢_T±bG΋^Ôþ‰¬w+ºüâËAœœ÷“îèéíó¾íaÉ…l"‘5Š!ÙI^ø,*Wñ™ÄÉÛ½ÑvËŽ>CÞËrÅhs¥¹Žt&ëïƒ>ä|ùq˜|}gY½¶š«jˆ$l(= Ïô¼íMuÈlG £Ù.È®i»G,å¡(”¦ÙI *û'¢*ë·2€èºÔ{¸ƒ ®i4§†‹õÒ í ˆ`©Êë¸BÛ¦ÂÚºQ_euø×¾î‰kUÚoÑ®|¬nÎSàuIü¡rQÂé"q«øIT_öYKf%¡`Ì>’Í g?3À\®¥Ékb½ÃâCT’> SÔ¾½<4`;è/½YÄ++„ÆKš„£(UYa`9òwöa ‰M5˾\«Èç⪵z62MÉ÷ª|q@ŸëLŒ H!¡…` bɲƜ%ÁXГFSqƒ¬AGÔ×ÎŽ-Þ–þ¹\ ö9–|‘\´^,EX5%‡d…j%P˜†‡h„8¾U^Œwçú:€>î¯íÌ2î”cŸNˆåJ ö²Þ®ÔŒzjEŒTµ½«¿{f÷3.ëš´.Ù|°s«I®¨t€M‚géI~g”Kõ´îýG\¤ø£µó ­ƒd€ÓÌSòñ–ÿæ6R­ ¾¼øL›/ÈeŠ!h6•&øI‡wrd]ü¦^n£¦ÔúÞÍÐYw!JÚu HÜÔˆÝÀqªÛB¿ã׌T+<ñxª°Êêñ¿‡WKÚ³}ÞùNÄ"ï(x1vŠ\*7@Æ*Ê/Ù),vLIê ^LpÇx"Y“¤µâsŒ!6'[³%œ0al]aµ…Ìè|ôyop‚Hî7ôÑç0ßxq–j(ì ÔôPøœ;íœ,ò´º§.Üß®óÕ.Ý$jG;½¯Õ¼Ž‡VüèŠè—ü‘™àxns^ÆÖ(,ò t³ù`lÏÕzIU9šÅw'¢öW˜¬ ‡ xu¿µö&ˆL·ÓÑì³€î A@øpjÔæ…äΰÕÕx÷–×¼``[VÿCéͱ+ñ•k¼e@뮑8îÍ÷|&MR)àDû3'Å‹n—a¡­'ÿ}J*srŠW§W÷Ô¡©¹úãT©±ë¥‡ÒÈ$´îr¸ÇR.¸{©u(ýó–i<Íåb éñ è×Ê"«’d?ysÎv¡o™@Ë%š¨^¥ýÑá 'iÄ…Üm–Óõòú·8Þ}+Þ{ßön„un0!¼ûMRøH~rÚ‘Êâ6X/È:…X}Œë]r H‘¹gAË&Ð<Á Â-9Õç\ a4ÄøÀNþΣ€DÛ«x±ýÅñŠÍ1¥á I¬~IjÓ紵苪ã/o\"ù. ŽŒiM9Ý-ö”ÂÅò@ShƒQy1 ;‰WÛñ¼0¦Ü»q’1±…‚“ß¼¢ö'¼W`›¥UQ’a"±¨U}âÌ ¬yg’Ú.÷z…i’6Ü¥&†%E]½Â›ÛÕÑ^ú‡yÿAMÇüÝ ô>êWi«œ 5ŒÒÂ.xã¶S3¶Vüë¤À#Ôk÷gŠJìäEâX–œí³tªh÷Ü)™5M"<])L7ÏþYzGÍ ¿Ÿ Í"ÍggH%G¸cfþiQ3ƒƒº¯ÝŸqGïiÒûí¿51jìîñð pºîDN)?®ª|C@b²ØCVõf‡M}— Ô@MB]ÍeÓ)zÊ9hDÜeIº#Ï–ãª|]ÁÄؾaFŬ¨ õÑÓˆäÅØ5)¤ ʨ4tZœŽhãÑêgáðX:œ"œ¤ÅB1„6M¡Ý{žZGžû9dÒvwgž«’ûrR)Ten,ˆGE Á¥À™;ãRTs2/ï"7PÒ¨T|x8i®!ÐÕ¢i¼Üˆ’íKÀ%zû>Y;^%ÕY©ƒÌ˜~äÓ%ú”­ …èÁá7ež¦SŸ*X\­çSZÅ2=`sÿc)ž$q \Ĭð™ûLUKZ©’2§ãé‹y®3~ëÒºIÎ@áyeêú.ˆSÅbú0;6`©U^ìéYF§ÀaÞâÜàbÌlLóÞJbºæ¸­æ ˆ/¸7q•/þir¸0î'ûË.º_³@W±EY;—®4ÜzµfßÍ'ØÛÜGÔó5ÝñôËÒ¢Ü<Æ·”Áq»ÈvŠÚÓâ7œ‚¸¤ŸºÄaø´.ýKŸ²H–›6^﮽òíåQŒŽ?n‰ ÔHÓºRóËâüÔˆ‰n](tÅÁ×'Œþ´Aú!Z6“‰“d Óê¾¶×ñ gÒ÷+ÉöÌÍü^#µt,¯lo¶æ×1¼ÓW£O»ç^¶¿º5ó˜Ü$З“r4-5È߆nñœs}Q}ø±N¤‰<‘’Í~)16|l8µM ˆóØm$ö´LÇ©âÕÁ\Ìè¶ØËÓªó¶—‰ÿRkå²E9Å/ë}‰seØü|´]¿Y…9ú:òÏìÜ¢DÒ<qHŸu^ó„äUœ:Àð'»µàð½v¹näÆmµáª–,ï› ñ|EZðDeO/‰v•B›ø¥3o&UÔB’â¯ÅYšFPjŒ~\µ> <>æû}úWs5ûx)ÞRLœIÚLÙ¶QL™•Åßn!_¹É"Lã‰È;•Ê)rv"†z£œÞŒIQ–¯$àFÙË’ À)§O_ƒ­úXvï(%µî¬Ø ÓÙR’Ë‹éÏho—d\fß²)ÇŽ\b˜mÑC&Y! "Ô:?£^ ÏnÎùQ*§‚+zK°Ušõå:V 2U96)~/Ø:äqz“…—!tHv¯²ÅLRl¢[ ÂÎÀ¸ÁX0.‘ûYK­Åë”b„ ‰¿£@úŠqnõñ‡jïÀ#®ê$ÚI<}Eåh£ÛÄýðR¼&jARÃUY}ˆÁb˜ÿ±ï94™wo&~ÌY§V)\ê„D­Ç7e'Ìb³Ñi˜Ñ’Ò'èSÎ}éùâ{ºi”V‰\ÔÅpG¶ƒ+i¨AWÉCº¥uùÁh;Má6»e”4.ÉjÎ1Ÿë;³u7ÜZö {—c÷TëÛó¤@ ¦ìc²­˜ÂïÕhü׺‡ôñyYïÒô“'§&"7žõ'V v#\ûY1RV± œ¾íø1öÿ$ä‚ÍÅ$ÿsä­hüZøp²¦Ÿ—:Í¥—Pвí©ù¢=%åŠA“›H/›²bš¸çë*ßĈ¯U”€y2ë›c§~ÛJ(fç¢i8YÕu†ˆ\pÐ}ëòØO„À‚3:L"œÆ99ØC”‹I`LȰ×ua†Fšsr±V—ø¾©Äó’+gÍh­¬~ƒP]a¬¦O-PXlÂÞ5ÝMHw;NŸê3.ñÂá\GÓpª™®OŸ§„â%}ú4u¡´&^¢Ý‚òd˜6Kã˜ÍÛeÈ1ñWËÜÙh[ÙjUK3Ù®Rúä”Ó5ŒƒùjìŽéI"O:òž²÷Ü”¥x´[+, +éí›1jkXÖY!ê;Õ¤M‚yF ¦‘]¡šv†–ÎÏc:aßj Cí“M¯|^é@VZbsq¹¾tXôîÔŒ;Ü¡.¤•6[òŽ¿Ù_MÉ!Kþ@ÿüÊÅÙWòöGÖAW>ÃÉ&ÞeÉZ£[ˆBÎǯ ûž ¬sšo÷É¡ÎCÐO%ÃV¢‚ü²µì÷Ô2_ŠãDFâèv’õ:• ð‹¢#/yÓ{Þ, Y%Ťq­6õ“Òf°©÷ºÿôŽ)Ñ3‚ddáÂ4dÂA®PÆäÐí» ó˜Ì› þ‚<.*#ifÛÎçá“~„m ©¾KÑAú Ð<²#[å¢ÄS˜Ý Øs„sWðo¨O|¨Lb(;I»?Ö½ oØÁà©?#å—iC¤†¡ˆØæòνE-"ßúžêyŽ€M#Þðˆtœì“…Cžvû¶/Ddã·à®R•Û™´š";“ó$FæXg)ôd¹àCRù/nâbºýúÌ—¸ùù¡è k=ÙÑ©á>%ýFG p” :…×S%ßg%ƒ½½dÞ”„蟂e—×eówK¹y(ÁÛp0 œ·¬V€®•HØ€ð˜íXsI êÊØ.g ŠZliø!ýÞ¥¦y°Ø²åm®21'oÆ(¡'!~ÅXóÓ…»ž¡1“Ìõ-ÁJ}ƒü´ûÖNÒGmÅÛcáSôtm…~2ŽèøÝµ%¤g¸.|wä-[Ag­îá²ÕÇÛº2 ²Ï^><Ã¥T’LýxÐp白›bf„i•r±Øöæ«CžXâiBƒkö$lœèH1&b¸‘"ë*>Œè™6¶Ï_ª*žÞóÙפ^’&¡^B®ÓYuu=˜ ÂÞ‘½ú9}ByÉÚ‡MV_È:0ær¼Ž›5ÁTÂlQñU–áƒPwe‰f3ÇÌ;;¨KKqDoƒÇ" ½yĪõ' V@«Ïëò‰¯·Ö*=¨±™'”%"¿Ã`-ñI‹Òæ‰?”A÷®¢ŠqoÒwd’þJÛ¾ÖE›¾KëgsÄXÏVˆeA;ãԃ߫/-S?<@‡ÂŽ*iÆÒA«æ9êu% úÞ¡ì¿W„j‡¤›j!¯ž¸±g×TNç%sc3 ´½Þ¸H™‘S]¬˜·]EíæÂ }x;3ŠoJˆ¹zØjŠˆý6>m,ÿq¢~4¦üøi %‚¿Ž{Fþ¨“g ÿ{öM2ÏkÍ/ͳ|œR,8óL¼jlƃÕ>þãN³’'¶ïu—t”¦((¹¶¤VÇlc€½öøå_dæ¶ÛÞ ãÏ’6|ÀÊö ýQ!"÷ü²9‰(ñ:2!ö»Ê·¬;÷ªËßÉNÓ£¥?­³_SNÂóhû•¿/mÈÈ.ûĪ’‚Iä WŒ…6ñ™nÚe>¿†$ð­ãÃFÆL¤u¦ƒƽ®I¶í[˜´y4 Od“JšâE²º¼äË ‹ÎyÚòJ³(IéGÈöñˆ»f;¥ž(“4¿ u©.J†µsžjÿôQß Š¹³óm¿…b¬pÏÇÜ™DÛoy;Òƒæ)ƒTW’Û‹ ?Fˆ‹à}ßå X~ À/b´/È_9:9Ë^âaKÝoÛû};–ÆKî´aóšÙó½¹ \‰Z’ *÷¹%þµ>ñ1 žÞ½ÍaÛ^Kôø'Ô O7ù8õä×¼/?óÓú@“ Ö•Q› ÇVlg\§Î‘"øïú÷7’OŠ× æ°¼— Ñ.ÍÒ RïlGÇÃâD¶i£ÈÒaäê‚ñ…¬F®GTÓéá«|<ÎÍräö÷vgP2Ú/Çœ>/·n©‘î2­Þ^¶ÕÖÀ•º“|ÅRÀ†eãûé¬pq@4:uÈôxÉÏ9S =³6$S³OçFv–Ï4Ëø.VN^ÖNð¨„y³“q¼=d–Öž¡œ‡BöxÌ—¹”µ:DOüó§7(s)Ä3:cû5q>¬½x*Ó'ÄN`9ËØg}ÄÂ^³0ê(7P¢žœÛNºÃ,+yžÌŸ°–Ë>[·‹Ã²ÛûÎŒ—±ÍNª³â&*Ĥ^ ÝÏ&Äý¹°ÄÑñ²¾Ògš_­BŽ*!hiŠšF¦³³ß]žõì/€D—Œ¼³+5庭Èõázæe9ÕôŒtÅ,Ì­ØtÅù‡³äzü ¦¿M5†àPãѡ؃ÿ+Lʃcs¢SY#¿j¶}_¨Å°NKÀßNÍ Éü™òaÈß»&×:ŠÓîdQ¶úk£ H1Œl1œN4³¬ò”ª—„Ö§¤ì‚ÈÛùѾuá@ ö¨˜Y5Ë vÄ;H¹¿W ÃÅ¢ý ¦¾Y9Æ+0ìTšî5¹³ü"¤ÊAÈj9±WU“ƒˆ—n|QKR¶Zô+²d(B)Mͱ]|/”èw¥®­Øøž¸}ïá1õ«OÊU²9NÃ1"Ö`1/%ø…vEà°Æ/½æÇë›Ý<8.Û&Tªú¥˜nŠzgÌÖï•­¡Ì4§Läh ™ö²^ø’¢_<7½ø{U¢ƒÍÎGªP—b‡[Y$0”©S¾#ÆM7‚šËèð>ÇðIf•y`å+_œ×§ú´ö ]ÊÔ7”k áÖR¸²_MF /Øö›6v ln:´U ‚0†1ÿeýHØv£ZÇêó#F¢Ä½ÃÎWœ5´`×l þÅlOfz‰ [#luÅmŽ^ùˆÙœ%±RC/ÊÏךëv“ïI¥žæÎ-×6‹ýžÐpy›ùùéM#ù•›ûéG‹:©AæOÎöYH>-\žrïp̔Dž\¬ŸR|1SP ÕÄÜÓë÷ÐÙ5s¬7þè禋¹åcm)ÑtzÊȪ¹  ¼ãu½2AÂÁü´JÿÆŸáfÏZ spËZ§_ n­- ‘n |©ã~·Î|îë Éþ 7’ð#$üĶœ³CZ‰œ„f(Ž>ДU‹ ‘¡ÓÂþ‡((8Uí¨ì®r®UÝxt,Ñ~t‚ÔLR1‘ ¹°š?·>wùàÃ"ŸSÏ æM,jQšXËÃÎÅÓÌMSzâEN›J@Ríì ¥XšƳ•ö¸YËYŒêØ…h>Ÿi/WÁ|š¥~Ђ¢Aà ÛÛ},¨F¤{€h:À‡å‘Ê߯µ×S†T)’ÞXÊ•±sÏ}3³”tŒÆ{ ù9)p¼3ƒËjüWKíHøUÅøGPØi¡¥x«”kG¡¼ŽRZ¯ÙÊì{[jàЋÚ]±?©ƒ-ŠMºGwÍзKmggÎðWýõµ[·ÓPÁ(©2›t”\‹)–e‡¼Ý($é­*_ßçóóp‚•-ˆÉ0Y j ò–éߌ"5pìw‡Þ‘ŒCÌŒ [uK¸¸$‡yŸ“XÓ6 5ªS_–dª¬š8ÐU>S¶›zÖI\éúäN`ý ^Oî÷ Æ2¯"'ìûj‘6~þ;ÝM%‰ç-æíÂÎ8´s œ3•“ÅùqF–¢)_]Rç‘–í}øóO˜$‹…¯¡èþxc¢.ÙNM¤îï8ú­‡èD`äåñ|09؉ó¶§í´~,-EÅØí-Ç×v¡=$ -«Ù^á ¿¬’Ï=¢Ñ/?â[«îÝUúl”(ãýì Òzw‘©¶£3µ±×Tâ+ (ÅgÝã¯w©UZ$Í(##нVMN.PF­ŸÒu›¨o7 ¡+bòé>X=fÔz˜Ž;”e-zz³<ü)ßÄ92HÞÉ$ç£è.BqÎ0¢ÌÍ ·âLR÷II>©ˆª¹2¿;ãcïîA¥¶žÐéÿE#ºÜMÈ |Œ¤™ñÚçóššיȀ8ü=hÑ{:.HI‰C°Ë8$ L*­È/ÞÆˆH(sÑš?-£õ³£Èbr8²–ïŽ6õ¤DS̾Dª÷†ADU^Ü Òñ9¹Døc0²JÒ?Suè2#6¼jzå름nï3’8Ûœ†jÉî1QŒ- Ê“_#ÃJ AîËÕ ýu&Þým6²àY8àò0ê‰Æü‘€Ë癹42^ ¿u–ôú*Æl}h’S¹R€Dú<Ân—X0ú· OLö ÿAç>Ùj«IΣ äôûg~kʯ—†bÇûRF0íu$,ò B“|ÎÏ™d(¨E5¨5ß(ïåA ¼­Ð°¯Î¾Ê=|A›ø+y Ë%â \bgý¨dVß;Aø€/ùü^x'­o»·†@ô’FÖ)0[þÐ™Š‚±Lz×j_†á# gÓ¸«´êC4ø ƒ Õm±ô„%f´n= ô!µø¨ÁWÉåÊ;6Ì£2Œµ@T¾wíNlD *Ú-`l?añѤ¥J¾ßÃözvïÿe…–rݧS×0ý0ôݶ õ”8§ûr«¸´, 46|ú&Ô×›Ûr Yý/å¤5Ò*vc¡ßrŠ£)]†ÞE|¹›â¶ÛŒÞÑQ£:#v •¿=;˜ÏaKcµ¯çˆèö'}^ßú5‰¿›(´(ܘîé…®—îf6ÿžnê\&޶&ŸŸï„)sl‰á¦í õŸƒJK˜\/‰O×,aㆢ2e$ç»1më¤|¼·„çS¤*QAÝHºÒ§ÌÖÆÏç]eñJMºp²y¢c'ÿAà™®‹ÛÓùRæÖ²(¯Èà »ÈÂÚ¿~°:5¦!º['à“yÎt픤™¨*æs€Ìòi=ûÉÁ*ƒ…0TïFêm}™çF­âýr>µYˆŽRÁ¿ìs}'o6øW×þÅo¨%ÒŽµÿŒ[®žtîÔœ‡~O3+½‡‚‹'tpcä6¥M ƒ74ÛêX/‹@ÄÊB¢éC$ÆóùYBB)˜Ü uÛŽüCøX¶$¦N¡ymU0ß$¡½´æJ;xŸöÉTzµoéîHλâ÷ ­’ñ­!©#R_+;_¶°å”è¢ù¾ìmÂRËëiä¨4ƒè’3±ãЉ{ìé¸:s~å¨fä÷Dú̪éモÿÐï@…¹¹÷‘df%¨&«yY®¢S‚ˆÿ‡Ë×Êð"@ƒ»«\dz¦Ex©NKÍ(wW0Q :2„RS¯Ô¹HL‘…êb/.ŠëQ¼ºh¾|p—ˆÏæÿtâ1X`¡ç#µb”†?ÍdH/ãÀÅBY^¬8ñ{AØkëתI–¼lÈZÌÆŽÑ¹7, {"*)óo—w3S.”¼Z¤ý~¬irTH+z=Šm}”G&3ìG~ƒÝ¼àk)L€0wœh´àO}æäõÄ' Áh’ÊjÎHf“ã÷Ee«Æ-‰i·«ŒÑß {C)/=<š>X8 =é|vÁeþ`Xž`zôè#oKñDðµÔ‹ý KÒÔ󫸴F68L3uþ§¡€“jÃðËŒ@‘kë É÷‰¡Â¸XzÏ/b#´?½.ØÎ ˆì $‡x6œ©&þ²³7¸bç‹­D’­$ ‚…«BU䱓nÙ£a®tÓÄ´1{l’° ¡ˆ°é˜ˆa 7|ð@ê§2¡L‡=º"0µÕcKº4¢gvtSÇÀ%¼/ø_ûh¸@Þ+³é€Ñü1ÙúæzW³~¤û©Þç¯-ÿ#zj BIß2Oe£¥O½P9>0l‰ž“qHÜeɔۀÄï˜Ô”µÉ›H‰:~…„ÕæôñVßEýMWNMÄ–úö7˜fˆÐq¿œÞ´6Ý­Üy¨ì½£¹€¥²«ÁäœYƒ%W!ÛWÒ‹Dç†31<Õ€|Y•ÜÎëlºû­p©Ü´£–éIH\ÈÎ%ùêåÚÿS ͺ~Ð`É­Ë’tNƒ c5qñ­šœíi:ö³igŸñøQÇè9¸¼P üL¾\ §‚lfH » hÞ­x:ô§Y¡Úô6ûÔÝ÷ D,èç1]†ðj²Z\¢O‹Iuñ~‚ázÛ/ ïƒÍí¤ʲHÕ CƒJT;eÖ·}{ª~%Eùs»ÖŠk"ÑS(„4nýnÚÒÉ€Ê&qSÿ]Sà]#@È=»Ø ˯ë8}Cã#÷s#Á÷úJÞ•Ã7Pîª`>ãx²m®I+Ê×]ͳ,ìz(ƒ~‘Åܦè"Zrɨ]¨£úÎ]à¬Ð ´ç\¨^p»!yîÿÆ«]†/¯k‹ãš¬‹ÝÝPRµ£‚™­ÖóܧÈö𰬄à`ÔáNæƒS¥Ë*ª[~5˜ e}®ÒíKÉño6Ò«3ÇéŒ6j‘n‰pòv‰¦Cô¨Cß±mÉüfîÚi€ØáˆhA^…Š dAt9k<‚ L΋/»F¥-ö+&¹4!Ñ/kºÉÀ¥F„L sZ‰«§D,¢¯u[0$¾T…5jÚkQæÏÚÔC¨¤ü²²õ&ÁM!3xk¡˜òËüÝ6XœxÝl\aÙ ª°[£#,JŸý™ d/åAâ>|V=æ õb¥ûÖ`[•$Te½÷nÉ£A›Ûå0AÌ+ôÂpy¯Ù:d´g]ÙÃGÅi|áÈÄ I”6‚²yì]ý ¯„—ºdù‰YV„qe¼n†%_¢8§^Éxkš}À$Giò¾YF…ß~[Ú ÿÝñ€€øC×Ä­+µC–ÓoüoŸ¡å) PŒLAVTt`1o¼Œ3~åÐoÜ;$´ ±Ó¢[á$v ÀóI G±{tÂBΡ×NöÏ_Õó"È>ìå¾Óû“a›Ï››F+•jc X‡¼ÝøY×¾ÿú”l7E z¥cR!9°°HvôHµB †=éÛOÆ SÛÚŽ+|Û$kÎdþ'ýK‚K„؃)5ÃÛ×ß$5Ôæ²æ%ëÈ*$³'žÓöÕøÜ#ˆ«#é^NYnÕÕ©0rÖ’Ë&S>…ÀÏ2‘0E÷>è‡5 ඬ8†7劙Ñ/'9ºÐº·hÁ£ççGG°)|}‹_­‹±SH¿ÄÛ7XnOX¸‡Ê’«A‘j aÚ¦\&Ïý”¢\]$ôMœ%öžN+i©ÞÙØ!vCõlÝ+<1 ÄëR°&îþ¶&¥ÜÔžØMç=P0¸ÏTããñSwûØætÔ€–ºŸ¥;;÷# Wl¯¶Oºb„íƒék‹zZÖ´9§ý\}Ô0oš|ÁéI„Z žÇNJñ þ‘ZPÔ¶ðÎA# ˜]Ã<Úgv1Þ•š>zœÎ"¢$x]O2w‰  ’ÆÃ³Ýë|¯­#H,K[!õû)òÿ¼x)”ò2³VÉÙÑÆ¡±qþ–åUÖ²0ÇE$ÓP¿)¶ë¯\‰¼"îx¬uñ0?|¯é²ÅWcqkÊîâSKö8*‹|bøÎdÏ! ùúº„ àลÆÃ²™1ÍŒ(ǵÁ½‡/«l{÷å*fä0¨~ˆMâçð§w“B¦{bžv”$£.y“õü…Ì-Þ.¢©!Éö³[h{ œñßmШk'x@ËQF·Š3ÃvŒMæH´àH×ò%…™4´/Þ”³éöÒO,DÆÊ/Î%ËÝË[ý3Ð×ÔNš''¬òh/Ì:óÞöO’ᤱÕõU»E^AMjÎR‹T+ø:ÀçalTŽjn0“5CýÛ¤#a›Gyr½Àv„þV¨:0QR.ý§†—U¶Tc›”EàM!çÔ&¿Æ-Þ1æŠpXÏ_Ì¡YÛ¾¸² `þñjc¿©–;Ê€ÿ„|Svîš_¯dŸ ºõ¢u§xVµ¦za“ }\D#n‡ížÐÈi)yP0ƒ¿“;×ã¢4ÞÎ~3¤â޺̵29—ôÀdîÔ-¡úQrõÏÉß)7 ä`Ua,»Ö˜+qåjhÃÆ73ÇÅÈÕQàn“È=ËÇm¡:È$õí¹ÁPîÑ9±eÂÈ‹¹M“‹¨VO±²vWžV¢éc»½æ³—‡sŽcĆҪ$0—ˆ7áÀçúbü”é^˜ˆ 20± n{w@þ¤±' +¿ZöÍ:½µ-Õ¯Dbqaùeɾ/]`¶Ý±t+ ÍËêØŸ¤J€­"±Ì`*#²¤_*W«†¶éØüÓä!s ä¦êc¾šhl^Ȭԣ}iI,ŸG|*¼­«µ½À)lÀxææÛœ+øÿ3‘¾“ÀPôMíC6ÜëÓbg+ø'xpâ_)½{<%ž °|ßbË\µÀðô1Âô(íw£ÅÛ!R¦ÜŠ“ùÎÌÁ]g_BÚW,k0+šjZHR:AM”Öc0ük²õ)&‰}¡ fÄ¥ ³\‘Ø%9ìŒÍQ£ù ŸÆ~ÑÐ%ÖŒú 0Â+ÙòHCl;Cõ_`æ¦c„ (”á½›‡—]CÛ!ŽšØ&Œ»Ø/eª¤óc»ÑvXå¿á§üS_Ö>îȲû¦"¢¾¯0Ùyà…>Ŧ†P§}°–+ª–Áß>c!áeQ²0ãdÈsþ¾# °V¡(3j6‹ó|˜H~Æäªäßù# V-úyTK{:ª§ ²sR†qú:ýÞöoU,~Á¥Ó†w& –qj;,|u ad*ÀôìWε‘þ¢u€27)Éÿ)©I×A4^,“×%™ñâ®uIÅÇ  ˆÙEÀWZÛÞÿzµ(gñ:WbÕ9Þ¦Ê*×Õ€\‘ÏÃ~ibðÍéKœ˜Ý»T©¦o´ÅÀžâÿMœIDï®ù^Féò“•tK'ൣ²§_rRIÅýo Ì@Æ^zúè“ÂÂ¥"^VĤÍ09;N:½j^R°z_*½Qª4}¼ç$ËÎQŠÙ®L,øJCv*.Ïu2<6A¹þŒ»™ôÉ¡?·ø·-KòKŽni7…ÛË HÙZpØ×§DezÓ'¥U‚!\Ñé˜FA‹´©Ìc¦ ApüêÓIJe+Û®y9‚±äÁcJÐ^SÞhŸ°=òÁ–½ ®Ë1Ý×qaù³ŸúÈmáQ«xºÁ!˜³¿þƒØþKJpb@c×:‹«ÙB냵òÞª¦a<%o“¨ ãõJÑöD¶É!¿A±ÊSø^½‘Å‚5"‚`Ab(gL– †NìÄÉÃ\úvpå‰e‰È»(%zñºÚ2±žZ­­P8-`h0¹d$¬ÈÜ ­°n‹¼øÔÞÒrCÊQTˆ ÕLÛÖ)ÞSYš¿?î˜aTz< ×@Hê,¹åƒp?m¸hɱ?ϲg"0O¼j9…Y'¦‚Í8CÉ s ]hüæªûùýC¨ûaaÑS¾ |0…L«µì ÎíÔ®ÀKmìö%Àïõª@ÙCZ½qs%iÌÝ¢}œ–QèŒÆ$/Îg U”7°ŠÕÑiø@¹cç)epí OÅ‚çØÍe½°&º4¨q}/´pÇüÉ]hEÁFíg"wJ6ÁG„ Sgœ£J: é ÙŽIßý÷”$—ÉáJÙ7Âö7yòÌ@F“E[ìFÚŽƒÐ„XFØ€‚Nµ€ˆ±Ÿò”½üZsÅ©X9oëV–ïg8?]½ 1C 0¤ëà¤ðµWM¨ÉAzLmm{™^ú[ÐöfíŒéó§í²¼,)}%´¾3ŠIaÜ6ÔÚA ºÃ—Hì(NÈ4 DðÈHï5ah]Êápuìò³£ÝÉ‚’Æ ªiK $˜$™Å¸w,ÞÅn0qïK;› Ø7d³Á^<‡«É&ʵü3YúÅ0Ñ÷Hó¿?^q¶–ùÇ6°3o1c¾‡Ù¯©+tž'LzdÚ‡ƒ­3BÝà _¡ä‚€Gö¯Ñi:f ]ckæYHKyÚ¨+¹ŸàÚ.׆§ºVÑrqÔ3ÊæƒvsGö¤@M\ l³¯jC$’Ÿ…Ý;èIAl©iððn>eÄ(L`Hïk,ÂùÉļ=ŵTÀó,„m7±‹›Sµ ÿ +S¤Œ¾‰ÖLK„$¾cìÁ3:ôªy4Gó¤ÅÕwLÉv]¦ahú‹2S¢‘ÅT†¾tΚ>ÜáÏGÈ_7´Y'‹{w‡”Š„RÔÞŠõþâºZ‰¹óEŽÛ3ÇÈöÝ¡ìÐ9Û¯àðÑl}5/wû?¡7»Í»8+Ï 4½ã‰d,¢)¾{•&¯šžäƒÀ6¿A»Ô.Êiçy$žª`†,ý Dù<ÜåÖnshÞ•2úB ¢ eìØ‰ \Am}¦dZ7HIZm?ø¾h»Å¢%ùɹ®ís‘[šÖkÐBÞ3ñ eŒ(™²ï1^nN§ #;~¦±OÝvCº“¶e ¢ÁW‘þEði·”ß+2IÐí q{¶B¯Žïw\ž¨9ìŒÒüvùè_C;Åßs”î”vvËóÿ5k`­Bdp»x"Ÿ¶Ðmšöà ï¶öÙ ú½¯2í/m—,/ç±ØÌTð»‡!À> ±…XÆÝ¼‰°6Ò¡µ[áf}ޖ˶‚¿ XŒ Ø„Fš›0 ò‹˜fé#Ë="M!šîyD~üDÙ/h4ŸÑ…}÷¦]8Ÿ‚= }å‘w™í²]úq¯šê‰±ßñ Â€ŽL’Þ¢ìåÓRMúÁþ¹é9XG M‡9(·AµÅƒEgv²è"§CsDM’„P+†öA<~ÚÿÊt{…¦èÝæª£§¼%„J­[8?€4‰Nr{±z¥:Oþ®°™¦i²n•ükaåp^1רS’E—–ÿ88Ñù£è°å¯Ný¢w¬c`‡ÏrQlCÏã¤{Êìãÿzê÷Ãóé†KzUÅUšaW™³Cy‹³‹éåé8ãîê‹„:ëRü‘…µ›h†€±z´§"¨*(,û9¦ ȹ‚ºŒ Ás/kšª¬È« $B¼¤Ä|¹_au ¼(åò|»”§¬|xÎb?ür­©+e–Œ”j_!<»Ò½3#Bƒ`7퉱ÿâ®ñ‰q…pœJcËõ´vüX_Ç}\3¸Gmë¡EÏë÷•b7i͉ Œ:`Ž+høThй÷¸£ýš‡YPåy÷õŒõÉ(&{…>Ñ–uBÍ_sá}n0XD˜È{(Øð"ž#xéyääÑgd´£´]õG$Õ¤A§ðÉ1FODž~ó_f?Aú:ÃÎÙ1¸|{Êr—¢åžbåSYÁÇ­7ú§ñÝ1‘y¯Â ™ét·Î¼ ÜDX¢¿ÿ4VcÎ\Á²YDb eˆ tœÅF”ޜŴþ½ &Ú;œIzœþ«|ÀDƪ³eO‰PG'º|™€èJq·Œða+ÿLtˆŸSÀ»‡˜v‚ËÕû[;i=zŠEtŸÚôD)ŸôÙÍæl²vÚé_éOÿ“:+zK13]”äÓ£Ý0<Ç85Æ{Õ+`ßµ-:&g®ŸYô+¿-2j|«=¬§L_ÒüI F–è.þ¶ 7ßûœ~"LN(Š%zBý^¶­ÎTÛ™•ïSDýv\&íÆ½ó Ršx5]Psë-×g”ÛVv{ "ó™ûB‚™ >§×¹b!rƒZRmÅѱç|gã}µ_ Y˜ÒŒh§d©—Xê5E‘ÆÝû7Æu1ĉ|j´WUÞ1àÏ(ac¤Š0zhF Âum üØIµÑó&“û½0_¢ü/é_³\Qný!!„P§£Á;}ô…ßf cxزðà†ˆaJˆÚRÙmPþv‘/ÂŹԆFš"…Žªªô5(e¾°ÏÃô²?b‡ZÀ¢Mli¨ÀWÑÛí ~jïå! y¡ª:u*‡ÄzC#Åhõ€Ý‘W  ·Èë;Z]-ª\ýJÃPˆ¥½†ŽôÊšÏ:h"¶êþ²>¤±Š±Â§±Ç€eË›yÀ8ñÕ×’4™UŠéÏQÜvoÕº)¦ ±l8xïuèâ­ï°še’M§ö¶Œ¶ƒ¨4Ç8Xøcy)]yT^á 7c¨P+àu¤ÇI~ýOÃuvŠÇìY˜ŠÌÖ5r&«¡Õ€Ô ÖÑà¸Ëæ,­‰Õ I;éöZù9¿·úXp–l£²… Fu‚\/牣-Ÿ Ò…s]{‘Âù£ z aì@¡Liªú–á²á|¯îöîX—«»Ì¸ÂHNxçÃhª>ª7ž@$RÖzô·“÷Ú‘R(®‡©‹Ýæ}+*¸¯çòÞmP`5‰U6Ì—E¦¿µŠª&±M„éí­Àò -½Ó0c—h(?…ãŒHžñÕ§ñsWôõ®Í?Ûæ¦äºø}÷ÀÔiž÷ƒ ö‘¤„AdÌÝÕOÒH¢%?ØÀBæ"Ž`òrQé7ºÀv±‡– ÑO4óMÔÒ)r©ÈìrÒ×ù®œ…ìuµÏ¼ò£ÂQzÒÓv=hÒÜ”ÓÅoUÕɲ5šVMh ž–´Ñ)cÄ ¦Çü+X[*§ŽÐX`.É~¼h÷xð8­|Òãd¤ÒŽMÚ&u+ôVhÁ§O“ñQÊë5¥‰­jß~lçGÉvÌû}O 㵫ÙpÅ%Bƒ 6¡²XáñÚ[†]æ ð!¦z ªÆ~ÀC&¿¢ s‘q ]ù ×ÀÊ DwìIs2›ØÕ@#êÆ/aÑ€·ͱoÞ Ôñ¦9}®¨“aQyU>çõ{£–㨳¢È( ß„ͽÅ‹ÑÝÌz÷ý îÇØÑ€º>Èš¦K(s–†å€¸û½™]¸DAC ±µjGÌ\îbw=à`Šûv ¯q1àÁ¸ÝXyÑòêÝLþŒ›¶µÏ…$©˜n ò¶ÉQöS\gÕRÝé EØdÉc“²f–6(ÚUá»J8lÅš»ï¡3$…ÃêyË.8ãÿ…ë1„†!å¿¶»žè£ãÄú¸à×i…Ï&Ž­šÇ.óú³´Jøˆ| ×VØÁ»ÅrA¼•P†P>AʬæµÛÃ{—w Â>†îÚ¡œHV^¾hëÕ¥ë•sÏ ¦Ð¯.@-èº{'zt°b5·¥À?›g×€žóå8cáuÿ§ žú™§@XÓÑãfÞzFhu_ïâ‰vßDpšyŸn§ _iÁý©ªQ“b«ã€Ïc¥VøjŸf’Ýhq½µíåùdc]Ž`°^ć–¬ÇCÄ-± Æe€Y2+ï´~ƒ&„˜»‡Õ¥K1t'|ÝÅ$Á.f¼4h± ƒé§9þáú’/€çVò×Þõêmù5û­„Þ?Ë™Â)/ìªö°s+´›Ý8ÒÊ÷¬¥+U6-rþv‹ʬ[›¹p¤c‚³K‹knãÁV›Á¨/nçJ‚,—ý®¨FÐEÊfÁ•[îŒÿqö7~ºO†¤a«ø‘Cc‚_,†Ò¨]°í#5©å€ó•¿èb‘PsŠÖ¤k¦ä?˜âÎÚå®:€áÝÒX5ùhòO­Ë J­™Vd­Ë;QØLhgów¶ƒ[¼l­!°F¿y©}eX—n6 ×B·«“÷U—gŒk¯1î°yWõa \žHfÑÿíÌ…h‡[°}Ÿô ÊÙMfHG÷…ÍEÔÊ@F}H°9y ÆsfØæÇhvèÒ­b ÍáO¤ZÒQ=6!WäaR©ÄðEKxƒR8kñ1†ÛÜâKCmÏÝ2ÒÝšcêj *`¥Ú´ÄsÌVe6§Èèñø/鮪Ë/“ß’·­&®¸îÔÀh°Ììþü@­’­”JLÇÇÍÀi ÝiÂHl~ѹ¡»£—ÔD3@ø®£žÂ?vxN•‘/”y!‡Åö'D˜]‡¹ÊúnÌbºµ¦ðËñ±½g;‰±¶ár^D³Ý‹È9¬Ð ¯Ù?‚¦_c1n]Wm ³Û¶7ìsvà–$ž}DvŸ›ÈÊ‹v3©Ns=1ËôµZ¡Ÿ¯ÜOT¡”›<–T<áÆLÊʉa×zGn¼$t°"ÜåVË3xvå"ÏTÅYÕ”÷ùwĆÑz0T3O˜×‰²îÑåÝ*^Zl/ñkð—Ð)+²Y‘lÄK½‰?&ÆÿmJ#|±ì2ŸÊ÷67&¿B•¶%~dcIµ%®GÄœ«ää{á\2>—*¹¦ÆÿdÿCr Š<Ú<›¾zú¶vÍ$ ìm—H,˜µ¸ÜFð½:YX·Jÿ™$ìÙÊòÕïÌ/¿ù¶KÁ÷á“+í÷‘/ù˜fh~¼º½W0>°`K|ç8œV=è8 1Ì#Ͱ_?“ÓÏ|ͨ•=ÝÖô—Ä%> stream xÚ·Pœé-Š܃C‚»»»»‡išÆÝÝÝAÁÝ ®Á]‚K !‚ä’™93sÎ{U÷VWuÿkûÞßÚ_ýMC¥®Å"aåd”u»²p°² ¤T498ìì\¬ì율44Ú Wà_bT] Ôäü—hîú,“6w}¶SqÝ\^A>Avv';»À  ‚isw@… èº ÒH9A¼  [×ç4ÿyÐ[28ø˜ÿpH8¡ Ks0@ÅÜÕèøœÑÒÜ åd ºzýWza[WWˆ ›‡‡«¹£ «ÔF”àrµh]€Pw àwÃUsGàŸ±¢Ò´mA.ʵœ¬]=Ì¡@À³Àd »<{¸­€PÀsr€–‚2@ ÿi¬ü§3à¯Ù8X9þ÷—÷ï@ ðÎæ––NŽs°l°9j²Ê¬®ž®Ìs°ÕoCs§gswsƒ¹Å³Á•›d%4æÏ þÕž‹%quau9ün‘íw˜ç)Ë€­¤œ`WÔßõIƒ @Ëç±{±ýy²ö`'°Ï_À¶²þÝ„•„M rv*Hÿeò,BýGftð°³³ó p€Î §¥-ÛïðÚ^àJŽßâçü| N€õs@?5ðùÕÇÅÜp…ºý|þ­øo„ÊÁ°Yº,€6 0ê?ÑŸÅ@ë?ñóáCAž€7ìÏÜã°ÿþüýdüL/+'°ƒ×?æœ/›‚¬”‚²&ÓŸÿ­“”tòø°pqX8y8üü>v€ßGQ7ýUû?® `k'€ÀŸÅ>Oé?»ÿuþôíà¿c©:=“ ÿ‡ãFì<ì–Ï_ÿÏLÿÃåÿà¿£üß8þ¿ɺ98ü¡¦ÿCÿÿQ›;‚¼þ2x欛ë3ÿUœž·ü¿¦zÀ?wVhrsü_­‚«ùóH€mþ#ÈEä ´R¹ZÚþI–?å:¿—̪;¹€~ß*vöÿÑ=o–¥ýóÍáòÌÈ?TÀçÅùï”2`K'«ßÆÉà 0‡BͽPÙŸ‰ÄÉÃðáx^E+ ç°±‚\Ÿ]Ïíù¬ ¨¿O”—À&ù[ôâã°)þƒžuÊÿ >›Ê߈ŸÀ¦þâ°éüƒžýtÿFÏ~æ£ß=²Yý rØ€ÃçØþð?Ï¡Aÿ‚6Ç Çs4ð¿às4§¿!÷³íó½û/5'€ òú9ä™Nÿ*‡ãyÐÁçä.ÿ‚Ïÿ”öLf6W[(ð_å?WãêñOœÏ&^ÿ$ä°y¡êÿë-Ý Ðç{ì={>âÿà?.M Ðh‰º²èd)jWÚyS+AêÁ²?)2G³¯—ÉÀâ³ír»ÃDNc¨É Þ„^I¤öaÞ•¡¿_¥|ðùÖֈў¢ÑñË÷Þ4Isf¿uyúåÐTñ7‰†Ar2mñßg_Ý {ø6ØnEšg7~LõB¼9φÁòµñðÅ}ƒ^%´ûòY–8X£ Òyšwy D¯\YÈ_0âžzbÍ_^ÍáæO=Q*&1¡úÇq•ønqÆß.x¯Wjsºô¿&6$"‡¿ÄŸ¡õ‘P †¬BH³Wæ»ÎVౕÃû8••ÊN<µÃ5Vü0í¾¢»f©”±6ø©›éºø|&;ö9o?\* UZb ªö¤2žc¬ÄÉ‘õ¼/ÞZñÍIžï§ˆÔ)~²œ¨Þ,<Ä-s˜ØNáµÍæE|ƒÂ¹²Ù4ŸHAi¸å®s‘½ãЩîKà;ÜŠéxÚ¾T‘GŽ‹+BÛiŽú¥òå…b|¿Kf¨)yÑx}r¢W|À ‰¯fpaï@ãÛ± ÉŒ>;…kä ˆÀ‘LÎ ’‡sü¨ûRô§Lq>n4ñ'‚¯ÜôÉd¬"°?”fogmé •³»Lžiîú~áõb1ã8r‹\8Òä‚Á&Í MïæòiÛ¸Ï ËÐϸûm ¥”ƒ‰ Ò¸ßj3‹³€xûÌ&ðiE¼®ãñ=rA‹o´‡J44Å_`S€~ï­°=rPZ9ß°<[JQ w†æªÞBÊøåî+üy^neOÜ5ÎY?ìY½ÿm¼Íœ‰Ùn/UVkí¬Ç²’öÂëå„̘ ab½²±s0,€Rغ’&LŠq r–¸®œ­xÑ’ÊfQy_9Sž`~¯íeU™Ãô!ú°-”-Á¾³H®sÀ3PdRÌÚ­Áä¥-x}œó+QÍ ÷+5ëzªLraW˪½—†sAtH[Á¿?Ÿï]7˜'ç)Ð3>ÿÊ„°ê6P»Ï3Â×Êd룇Œù’uÝìÑãSn77)›EµêÓ1IÖ¼ÒZ×~ÎÙÏ£º  5Û)E‰á¬ì†NQ“R\÷ü¹D/FRd:G×Ö¹jA+U꓌à¢Tå9ÒsMÏ‚~ª°{+ª.M4ØÔœ€Èì&Ƴ¤ î=ƒB­êAi+<ûå~’d‹×µwºgÃáå&®éÜ~¶<À¤ yÕHè€|•B ³Z 2/ÝV ñöŽCaexjèS¸ªÚW¢UjOs”15í·/t÷Y:è[¨›Z ?zéo¢t•Q×x/}_bmüpK€Îó= fŠ%!EZ¹‘Ǻ"¿Tål\ZÃFýRŒ}h3Q£N“ã ¨´úÚÞãY0/ñ`ùm0s¬}ê]á½Õ:}(£àÛ§8+³ÈÂB •;u‹ÐØppqRÄQ+B²1uSIÔƒ íè°,£ ë0Ý‚Ç o†QM…'£NGÛöŽxÝÁ½[ ƒÔ”övžxü5D*'{è96Ó8}«J<ÊBçªú/ݘd5È»±aWK)³ö…‚öœøúÀj~žJ úAº£äHÅl4t’¼Ô9‘1°˜ $>~Ûܧ0Ú¨æö+Ã'Sîò~Jïj˜š¬EM,7tcx‡pÙe ‡\™Gðñˆ*AWðÀ€eCÕ\>ç=)ˆ_’ç‘ñ`(4Ãs Ü%NÙ+ó NZýI´½ø_áríØ¤¼ÒcŽfP.Jpó®Ðžz«ÚC¬Ò¿Ýø4‘Òÿ°íÚ”÷’|­‡Ê”Ð97`­÷)¹·BOÞeN™ÿiÌ´ÜœÔ-µ†åÝv ÆñA8b×<Ö©îV:‹%c¦]Z="¥¬5"ªJü¼7]È¡,Y[1…K­¸WÛtÚsþØÖJ!$d'˜àÃLê‡)ââ$)ñ*K¿2/J»°>Pà(#›·sí§åd£Ux+÷. f¬‰7z8"C8„é]ýèà&×óí²]Ð'‘ÈÆ€šî}ï~…T¡8@9Õn}UˆDT:7’Ž‹±…M,E‹²à—Øk6‚ÊÕêqžùrú ,ÁÝiÏÛáÔŸ#{fIHº=ig´22pùAbÍ–ØD˜‹7øèRkÃY||õ,fÃ+¯jªTÜ7‘¿’}éÛFë2;‰^Í«O5`C ¶šŠx“⳦µZ‰Ïpšw¢¼.5 ;NuâÄÜ^ï(G‹¬#ÆèÅ‚£ˆðTITè6Aíº¨zóÚJZû«á"ö-úl¿Ý@ËVp ÈWõ‹Œ€‡…\»Ë $²wâöböH#US6§Í)\ñâ=>oöÖÚ„²%4“²íçZ’ f€Ä«M°~áøGlw8)H‰¼WMŠå¥ªÄ‡mB‘ïz&žãôˆžAO«oe(j{W]ù ±ýTó/â¥ÇBS“3£º+²K(»©‚‰Fá6_ûÁ6Ëâwö$­ÈhãqŽ8j‚„QÞ÷A¹Ì_²¤¢°ÞI>DìˆÖÊ¥Õ#ðÑ%]„©FZ3}Â(ÇÜ(mbËÈÒ³D ÂØçHYæÉ÷Jâo eCo_DÒmß­)½X)mëÿœ‡Íh"ëGBI-†®NzßÈ‚tâŸNâØïowšš›üBÖLw@¥tºÌŠlDgPx5aG¹è{€+@‹œÛ5ˆ¹a åÃÚnÔèô·°”y¢4p÷¿³½‰†ë"#z“¨¦é,%¼Ý—˜B+ñ†¹«±SÿTÃl§÷%(õ¥æjµ_£3ÆqÇ£jxt6W>ÕçSbhrè7’8ʶ™Û?U=Ïk’K„²[¬{µ1!¿µ2¬Vœ+ÑÐè’c˜ãé·”6í‘atîÜK¢ó™p^iÐx‹ ¼.Óun!PäՔ˸kü<á×@HsyÛß‘ß0‹o\)¢.åzÿÙ”óóð¼ýÃ%>í·!8´#!`ßR2b‰BúMl»†u/[{ÒJô/JâÍ“œ·@*­_ÎøÙi¡¸ÅD0A —ड़]bÄ5ƒ¿}ZöøŠ DL隦¨Yû¦Š‰ßq¸•²¤[+½GæÈ -`AN‘ëdþ£V»/þ¡”çSw H56PI\U<3ö~æµuÍÀÞúmçFmqhúŽo1œ†¬Ï3zf‚»„/æ;ÿ§–ï¡u#…<öþ ‚]yÒWBvgµwU(“fZšF͘u¬³ª[„RuIöû^xþnòÔGôü˜Sª| w¬M6B 4¡ÃvkŸåä_²\ä()q!Zò`ˆŸtûwä»o^—{æÖÅ!e¹\b2Wñ¬šØù’˜°›ˆûAˆ–S:¾j?˘ÚtÈ_7BgDV"¢«IÁ‰_xÌÆÓŠ˜·¶ÙæOM BäqË/Õ«&¹š<î,ÕŒû*XË ‘·çéÁº…ïÑAb{…ÁŠ’ÖaÄyßÈ5ßÃ!ƒ|ö䩹mÑèÃ` Hmý;Qù?²,Æ/} ëšÀ¿¡÷;Î!º:x©‹¤¦’‘ª^Ulv™|gæëóH—“é‰uBÀ”Œú‰Pø‡°ëR²€jöJïø¦ƒ‚í—2DêÛÉ¥ÀÚìØÅ_Lï_&r€L³>Hæy»#œ˜‘K [2Í͇6"2†ŒÝ6U﫲·u†_¿[2šyDr¢\;?wl×EýÀ\¢ý¦ó©heÑ<ô„n¿úq¥eR„©€õÈÕ´i–™.ð}Ÿ:Ãêùté[(ãÎ6·^déu™Ž9KlsÙL°dé9 ?6œÄyµ «ÕÜLmÜ×y7Ê*ñÝÆö$× ü\ûëí¯lç¾³*šw-,f±¤[5è„xTî|óûmü^ÜÊßÔ9ü¤wê\yBš²!ÉrÁ:öHiií] e Œ €\X­6è;à'Hë»Q⾕Ck£°àTVaìG1—–n6Aškúžüm‡2`-Ü4#M‚wH^2sÛXA9}ðY}!¤vS÷ÚD'ê)¥Ðšæ• cmß7ö,ï-=•h­/"µ‰)ðç`RØu’YûœÛœÇ¸Àù8æÃ¸…J‰¢EÙ¼eûF6 £ËÝÃzw…õëƒQ¸4øw¸¸çy°Òuó_ÏÙ߸¤ÚŠ6g›…%å›Ç}P¯¥÷·£Q¯oÅBm’ÓsHSšƒËÊ‹Øk:½}…°žô¶7ÚÖ톶‹B6ü5vlpÜ<Í]¼€¥‘:ú+9úWèƒ;å·—MáÛLj£=½øi³Ø0Þad±ùL¯RöI[ñW[CÊuw䣳’/W‰›â8äVó¯å=£w °:´ë'f+Fa]Yú!Z±H½R õ΂¨Áðž@K$cÍ9o©:øˆv1/µv­EÖ¦-mj³{³WË€ ”!û¤\{N‰Ñ}Z²“úõCbMïkœ¨£t†;‰õ:Ï Iu+ášÝ“Ùxæ9*¬þwî ûŽËhŠTIuŒÂÕulZõp#}p"*ã~úäoÖ4¹¶ï$8™TC¬¾½Úq‡‘åE‘¹L~sŠõnrÎPU5Xš”|·ï ¥-Al‘/%î©ÒQžÙVz¥í;‚9Q&äð&î¯ñ2‚ ļøiÉ…o ([;S/Q*ÉYÌîqbÓ¢R“Î&’¨JJY|?\jêª@yQ¬^ãØÅ]WxTIòÛ«â¾ÓÓ°š±^ýÄpíIA5#: ˆ|{xÕ˜æØ·`½gÖ€šy[Ôà[Ç=ü µZ¸Ç•p">57FÕáL{OË輬'Ý¢ù^Jù>gþZÎÑâ)®³ÂÉŸ?—r. CXƒ´²‘˜FÅi±º¢“ŒfŒ{ò,ô6ßQªn”@VÌû°'['t:$¬ƒ;æPe¤ãÐ!ȇRPÁ³Úsrœýùc l‘¢=˜¤Cüñ<½&Rø—ü>IŽR:Ë-B-®¤»yoª£ 7Ëqq솲} à5¸)G¤„ SË?ööï¤Ã\ƒ5s øç¾m—>5hîÖê’Ë…œ‘šE³;ïþ ±xIˆæN?ó…H>†ð± ÎŒ‡õA Vz‡_ñ³k)Ù=|ô&Ów“ºiqßâ¦m i9ùÔh KZ”ñø¾x·m.6Ûv‡—÷i+óû¥GòêÏy‘¬£o–ɡ޵¤ßRÌwÊøú%ïÑ¿#„š9jIŒ¨_Äç Vfd–¿@C.¨½>†[z×øîjT†TZO‰œù ߯ˆ|[;²‰#®xšxcP8.:%×Þ·M‘bgþ•£ò½Z±c7üx…›¢û£éþB¢}¹ïÚu€P±¿õnk Ý©ýG}Gݨ¤šž~o)åãb¡§R—œtÓÝýŸÏ%_P†S€ EMåæ2ÉÔÐR4ÁÈœòå׳k­\K9Bqí’Š9AÈ©›Õ–^A/ãbï+ïÜ+jJœ#’¯˜•Œw´c¶Äû’t¿$·„[lY¯J–­~û½ÈR=–V³ÿ,§Ã{´‘²ÃrËyBËAÙ:Q2ß Ä)4’¨²>X·|Íø þ'­úèõŠé«Ÿ+'‡-Û/>†ŠìIàÆäŒ¹~ek5ª{¯ösxy71®‰Ñ˜ä«ç·>¥9¬j Y<¡ÞÉ:žHÞ•l—;Odiç(L²­ÌþG‡oª¤w10"ô„ßö7Î: *Çæ°¯ Á¢žˆà,­†–¬eJ§{´ß‘:gëq¨¨+i_‡wQ? Lmë¼´˜%x<Ї³l<ç¶9÷ ¿nJ;ÁáÆ 9…èÒ°M%O¯KLÃ~Ñä,¬jÄÁëõxÒvÒÉ0qzy³koà‘«+Ãß+,å,D™ÙÝÆ;w/g‘9ôÖ˜¼±ŠÚñäó}I¸r†BŽÏð:¤¯¢ ǶuMnƒvpÊÄÎiJ¸e–E]o¡JU>ã&Ad³åˆ‘X¶æçu;\p_=WoÕŽùý-sU±sȨÌ#ÒÖ‡ÚGS"ºœ’¥¬‘=BgÇ[޼ùú”…6àZ³sÐzàBxôisçíf§ýRÐA CÎy2ôGoì+¿Gš¤êåëMè§)rGÁ­4ÿYž;ì8hî>ÏWÖ‚i³^FW~Ù‚õö÷ùÛAÓ&IÇþ÷ŽÊ"£v=3‡G6 ÝH2Nðûú‰ì¾87w⃜»S½§U«»}5Û¤Ù­îÞ`©÷…¸P…£„e^4JÇ!úýøI¨Ôhx«¥éfS•:L=/2t¡SDtœ Ïù%âÏ2ÍéiÞ±sùºˆóçž/ Žf‰i÷ä8µ7ªR†±ÿh¸U•–MSCmUͽVî¡X©Eâ:a…¬Ôš¢½Ô‘dÅø×Š_ºjú‘Ÿ€jƒ€Æe™@lG­Gö®¬ ¿'º”2ÝÒ9–’vÛ»rou#¤:ù¾&Å-ï<«ÚVïö¥êÂBï¸wGrÃZÀOx„rxÎT0²X嘘M8®‹˜¹yL¸”3½˜á`2è¹îzV)à§Z¬lqq*Ýýûášná;•ÄN»×ö!¢uèÃU#’«Niµã>ë¯d—zÛ÷¡úõqÅ Ö…úž†¯ø‡(•Óse•ÉêNUù^?Êbåïªff-nÐíÓÇæ=j7ò¸½ z|*?xôª~bùJP¿`kCqƒR§OÊÊrŒå†ÞëúÝÕƒ*÷ªô@&£Û¸õŠ ‹ðŠÆ2Æ"á¨{_1Ëÿ´zñé8öÌ_œî‡œü;¤Ìž…¾i糑-…ƒCú*”-3Äù`­6{Ýø^ _Ø‹c¼ÍYÅ }„ð2Ìã—ñ,ÊûaF>Ëc ø6ok™· ¡ö¬"Lý‚„¯M»6¼Ë®ª‰Ø ¨1»)šRìx¿’¨µ†JP'!ö!–¼(TA’½Ò¹dƒüÎü»<1ê ”Œ`±i²h¼õa[B2Ò :-Î2Ñê˱óö/}Òúõ¯w‹â‡UOòΞ±&!žôì¤Z΃õÞÏiË' ½cY!ìM°îh³fÅ|l«]ûnEoM2¼¶%ä6 —ÇãÿÙG£zî«q؆ðA_y—]#ÖBúõ.z¹õw©#wùB|ŽýsŸ¼q-ï,&·˜V±ª©Ú9Oò*= (’&#/\£jåÕÇcºýÖë”&%(z-Å·ùüºMØjÄJÌØpµ”u©6V®ÁfGA…_aìZÙôzñcZún¤gr%: ÍlÖÍL“V)BFÆŠÆX‡_–ëøTop•GA§<±Á5Úi¶ØeÑÕDoe?—Ù”k뉪£ióHD"Þ,K9*²¿Â^31£¯b£u¢}°¾´ç—«ò s@ÃZ"œêt·ÛU”WÒ…e vü ÞxqÇ‘ŒYŠÕY¸öuòlÙ0h$½ý` ßµVŽ‘û½°iŸŽíDê²ëFD–95»ºÎ9z"WˉõJcx[ïÎJæ«x¯DÀŠÒÜa=5u>ކøJÒ?ìÃ]L\ïë»^,º^xÚ Ïpw'P¹„Ê.u~áiÀ'[Ý…ôÀÇú9ñ5)škù,µÆô›âüc0ñ…s•ÁN“7L¾MŸ¸©N”%×I}¶"øCšXח˵ÞýuÙ{Ķ£Â8]Çj7hGnêBC²±ò] ¥ tÀÁÞäk;ó×nbw>Xï%8L6lã,_IÄ÷µ)·m\sC—!§¾¢¯ØÜ®¿JY-±µ !œBÛçaüÏΡwrÛ³Å[V«º–‚³çJí½H“§áÌéÜ«õeLèBkš£SËä:b'Ýíño[¯ž®t„¿M;3œ±FUL®†·,½>ëz;I 0ï4EXf´û!ÃÑø*yΛFä*ð¢Rõö[äí»³[›FmxÕ±Hvu§ƒ+PÆ>Ö(úm Æ0ì\=hßè;R½ÆäånÊE#Éä)šœÊ;-H#˜b§q¿òÆ ‹Ô,ò3™îwû÷–æ³1 ö;XµOd4Œ?»kÊð«R"M¯ãð C´¸8T̲«´FdïÝs…]GrNväæ*£ßˆLÚìµà´uì)M3…ÃÖõñâX¤3dD 1(fòå¡©á™×†¨=–ü:Ôp5Þ0úW:GòK-˜æðÜûãôŠ:€æk¦‡3P4Çí g3nêøwêÂŒ`’âQT‘è3çº+ O\–]-¿²¹ÔÉTƒPûh¦u "²½·e6åWI4Ifrt†æn°† NÞ% ÓCúyÙÕ´Óxˆ²á^þ2‘A“' Šk‘Ù MÞúôæuc`t[%Ãêv‚›Ü§p¹/¯p]oU7ƒPõ:ÐÙ©y>9cU§[ÇÊÃÅUرl³^LÙ@Îã G# }Žé«ñ?b0Ã@¨±Ât:é[¬Q4'õ F ¬ ³?e½TФhrotžA[è]E};˜4šÞAlBUs0Q²”©åÌ/™3*Lë)¥"›—#x|»i–€¢á­;¦¹pÈꯘ“ ×â釕-ÈôI\Bûb¾§W*»›}Óă´·âØM[u#{D‘[Ü®R8iJ±ÏLyíTbAr–>j2·OÜ´êÙçhž/Ì\ޱËQ*̈%רƒø›‘lì„•)¯¦C»ÅÆE´gd§#îNÙrPÛˆiùË¿LÌç‡7OwœU{_‘ ¢,wë ]B3™­FK£9ƒðÓP3GÊ>IŽ>‰—ÆRñÞ¿ÈTxϾB¹B ³FÇÊKIm?à™_<ÝK"0I®¢(±Èî¯Ü§Óú‘äK%œÿè–u¶[­ÕOhc °@bE4úÄáßüU 3-rbÇÒ'5ɶaNGM[ЛÖûûN¤;âw,HÙ‹û’ùlEWCÓDhSјÛ$33Â]>¯ÊŠõëŠísùYÁr2zCÃñæçHXõ2Ž«3W8¦™klú oÿ’Óù\%“k+ ’4››M0xÊf¢Ã·ö@1µÞ¦îZÉr¶áuù˵¢fÿÃòëp¦7øP.Švu<#‹W®¬ïÎÌ~›±âõ}7ZüqâØTå>Q—Sã·/cw•4>Ðn]+üzú5œRÚVê6Ïz_ ü öÞ¹wZ«÷=L¼B—¯Ý½2.q¤6ˆ²,fÝea+#Í] qÿ@Ã¥c9Áœ’M{á, Q§ïK²~ÞH!céqëʰo„kÅ2Èýør˜â\ÂÇŒ––'qc{JFÙZGS˜ ,÷ Q[6ú)sŽÒÈo ÿNê=nf™>Þ}Øpˉt¨„„¾z(|s‘ÉÕÃSc½Øa5µ«ìM±kpˆ@°dkKgj¦H|¿œHÿø |¨Ô·vŠ64€^®v¤‘E’Ôyÿ„7Hä:yz…×.ÞÃmŽÑ~ÌŸOM_~œ±îM„¡<ÊÃò$¦5]¶ ÂGíi±ÍÁG»Mdšñ7­a÷6B•šž2ÈÁÿØ{™kbÀ¥®\LäÕq¤¹ '"P½.c«øð §WëÂy=”Ù¾‘e;²áæ;þ·¼¬½%,9Þ û$ÏÚùI9p/Œ`x*æ¨꽆 ðv|-z”ºÅЧŽãøP|ºlwƒ4cj¶íæ÷6ðÆ#Œœ /%KBðØ(û¾:rî„Õ›iìeIiUÍoíéÿÅùñÆûµÿ… [U¦t&V÷ó^±MMU­½mViÓœy ›]uäÁŒŒá¥4°,ý‰cÀþÂÛH=ÜÈœúv“¸¸0b{åaØŽ^z™¨dN~u?Ût»lO}yq_ w¿œqrVjà.™òÊîTkCyÌSvA`‰¯üU3vÜ—®<ìòµªµfç*>–q©på²9›¹œÍ¶fŸéR# ñ™õ«e-©»¦•¹©Qî¿Æ§tÓ²<ë<>¼Jl zÃ(¼â=.äÓ`™üØkEs¯–„Çsy™…¯ÊÍ,(n¿÷MHhæs]êS2J<§ëëk»®ë2ˆ¾ûÚ±/߆T¨áq›]/uu¤ SAEaVàÚ/Î|ËæÑ2øhòèTÅ6ѵô0xr“áÉD‡ïøGµ¨=3“£Þ¾t‘È?©‡Ç§XÓW؆²ƒºjƒï4¸C²úmЛ½úŽü%I¼SupiZ“¦—ùøË©ðå» ãÈÞ=õÄ­ŸtWu~h‡•ÛÌŠ!GðʱÉ+U9g]Æaû|¿8}j¿l#Þj€fV¶¿ð‰<7©çÛSªái‹ž†XB®Ãpti6”ÂJzÛV¿ÿ¨;[áKÒåÙì0 KòÂ@îˆØx(¥çKš”únŒï¹Å.v`®ûÞÍ}ºJ9ïzÃkˆ†÷ç ‘>­Ö ‡íÁÝèâãÃö€8V!õ²ˆ¿ÕHQ©ŒžÁ«%ËçXEÚúô»:Ou˜ÌŸxmôsŠøÈþ©%ØLzFÐlZãz×*¡ßl?&Ö[…Ñì{?TÅ|8íšN’êu˜Éiž/ÚØ5yñ¹+¹Bçe°Û% ßð˜flÛޤçÁ²"¿¼Õ)vu‚ÍVUÆÐ .¬´èÆ…¡îôÀ˜A²Çéú¶DeåB¿«åYšƒq~È‚«ñüøë¼·õ­ëÊJ6ßuTNßÏ«ìð|2oêð[»ªk~hì• Ð~Oè/~ýQÞÏ€ʘs¼z=¶ljd¦G ×î¢'ž4z­‚ò"C”މÏ&n„)ómO=1,kÿµj!0ûÀïÊå\Af¿¦Ôç†JL¸_õDצñŽ.ž÷ý“Cø—‚[´ &ýÈYŠ ê.1œyÛ×e1ŠW’ÑR¸xHçÇGR(±[øËºÈ¦ä+—xk§¡ÐÈÞÏbègš‘çÖwm̪棙… LÏ_´.•Åo¾vì¦Rˆ¿ÀÒØl¬D‰+J…®²#~`ˆî> stream xÚ¶T”k6ŒtIKH % C—t§4‚Ôà 1tw©Ò]Jw§4HwI‡ tè9ïyãÿ×ú¾õ¬5ÏsíÞû¾ö½†F]‹]Òf’ƒAáì\@a€´ª&—äá¹1´Ápèo1&ƒ.ÈÑ ƒ ÿ‡´#Èþ(“1…?ک %g€‹ÀÅ/Ì% ¸@¡Â…2¦.` €*@ 9a2HÃìÝÁVÖðÇ4ÿú0™3¸„„Øþ¸$í@Ž`sS(@Õn ²{Ìhn hÁÌÁ ¸û…`zi ‡Û srºººr˜Ú9qÀ­Ä˜Ù®`¸5@ärtY~7 P3µýÕ&@Ûìô—\ f w5u°9êôèá µ9“´U¯ìAпŒUþ2`ü=×?áþöþ ýãljn³³7…ºƒ¡VK0x%§Âwƒ³L¡¿ M!N°GSS0ÄÔìÑàOå¦9I €écƒ·çd;q8!¿[äüæqʲP i˜ wÂü]Ÿ Ødþ8vwοNÖ s…zþ ,ÁP ËßMX8Ûsê@ÁÎ E™¿ME˜ÿ–Yà> ( Ä9@næÖœ¿Ãk»Ûƒþ(¹~‹;ðö´‡Ù,›yƒ-A/LO'Sîè òöüOÅ#L..€Ø0Y¡˜ÿŽþ(Yþ…ßì0>r üýüóeôH/ âþoó?çË)¯£&«¥ÉúWÇÿ褤`nOv;7 ÄËàxÿwuSðßUÿíªµ„„þ*öqJÿ*Øåïógú{7˜ÿK öHZ€éßäš?þpý?3ýËÿÁGù¿qü ’s†@þ¨™þèÿ?jS;0ÄýoƒGÎ:Ãù¯ {ÜèÿšêþÚYUØÙpÓÇ=„ZAþ#ØIì²PÃÍ­ÿ"Ë_rßKCAê0'ðï[ÀÎþîq³Ìmo§GFþQç¿SÊBÍa¿7Œ›`êèhêŽ |$7À“ëq-@n8 àä€Âà.€Çö¼–0GÌß'* àTý-úƒùœ:ÿ ¡Gé?ˆë‘}œ ÿ€‚NÈ¿!À ýò8œasü3®[ñ8ÿ>æsúø˜Ðùü¯Í·ü ð/üçJÜ@æ˜sÓ0s‘ ›Ê æËrIrWöÍaÑ †M½DfvÏ9Ççk´8æ²Ô€eÇsɸox ë²LgóÔwž» Õh¡Ÿ4šn¼nßFkŽm6aÎŽ÷ŒäîJVuSbP°kKüðºsðÒõ·EjxòU‰!ÓÁYG=›ðÒµKÞ­ª»ðû`Èô¦Æ2~e¬ÛÂqö÷:ïÞøçM2d™¥M‘Ò¢ÂÙ)ÑYŽÜp'ÏÎ'2F¨•¢Y1½÷Þó|ö4Xáþp5å±X¬ÍíÔFFOf@J‰tF08öÂSj;^‰dÆ3ÿK$^=ÇwöRšÑ^8æ¬ “ñ¦_§§Í°r;šÌÞùJÄ 7PHËÀ ?oTô#¹féjôÈzÁúòní¢v°Øoøæˆxç_½.§œ÷•Æò’‰Áf~O­K ž9&a2 ë¤~ôfsvÓšÍmo=²Ê–íw쬑ÒÇ×ÇÙYVŸ“ŸÏÎÄCù®ž$Њ»˜Òþ#AÌ$ò-ú¯æ&2‚÷"8v//ßMËi«®ÝŒè~ÎWU@\¥Û˜s7o‰5?~G£]þz5áÂÛÊÖA(M€dï)qô™gɧ¤gØ¥ØeˆfðþQ|Ç‹u½©3^ÿís·5ëñæeÞÐJE×xû§ý1/Óe§ôytI¶]’{ÇJï©8nƒoa£‹a:•Fªrµl·Ë;½z­ïÙ´«¦¨ÍzÑM–8úµ-QÉù¯ñ™,®)5…$^2N߿ܳQ´i½ûtáWÍšae:<¯y@ûé呼_³/ÅÄjîó⎷’h„Ýne²`Ê7²V{¿Æ«¶RúÃÕ¶Dì¬*ÊšS{æÝdµ¢’bOÛ¼³é­>JX6¨AgqRÖL¿Øô;R¹aåþ ÍÆíÃôŠkÞ}™:¥œDو͗?¬¶¨ZÔ÷^ÀœF"ë}üEˆzQ— -NAN¢ßô`Ý}þí!ßwÑq…+ê2Ç.öí©Aï-D=Z¤9^’Ñ‘ÒóeÒ-Õ¢¼˜™Ç³®à£*…§ygÉÜÄjí¡¦g²–‡¡‘ÙN¤iS2Kè„x#ìžîÆqD±ëv¸Ô~®åqd}W°…[¶Ó0½ž ·/<;“óx«èšÙ?ké'qócÅÏ·ä–áeB”^™\‹QˆbùÈi7ù?þXä°“+ÍH¬)Á+!ÕþqZÄŠ,)Âwg¥Ý«bÌ–yñP#o‹±¨p©ùªçàûhOì4¡‚Hì;¸3…¤Z–÷³`ß‚lRãÜ'Mž‚ ¦ #Åo•ËßÎñH¢›¢äȈ¤­¿ï #³Íþ Så%zš›{Õ»èìáqHƒ6ÛB†³–.œáÛ0¸÷Ñ„‚Ÿû‹ˆú­LOʱ„\!åù8Å(܈ȶ]G"=]À’ÇþªÌ:Έ,µáƒmna»Á°Ý®´—¹Ü+1,¬mF£Šºƒq`üÀü|æ4!öÚÛ™öÈè)yÉ–óÜèœÏßšâò]óôôµ;–z×ýà4¿¼&‡­ûXÑXØÆîf…p_[»óùšó0|Æ·NÞ'_°a{å6Zw¶¨íV?ߪܩ¡çÍxòZQç3B”½IþS¿˜é¸ö‚»žñFXÓ¹ý¹ꎿKì ´p¡gjO/4Ô¢Ù¸…}ò]ñ<É®³{PoJ±ïÀ§~?6ªàwùŠå”er¶"Øš”|Óó ÅÛo¼>îïÐ.vh;{ý6Y²{õRÊ2!ÚIEXUóAò£' ÚS‡ ¶—¨3“ìY_îÛîk^Y¦H1W éŒI[Ê rT=UÔz.­õÊO~9ŽÝƨ!”ª¸ˆ –"Ô$³§³nZDÅÇÙùº¦üv9ôì«êéùœ—ŽLÄRRÑT$ËÐ>K÷ÜQû¸º›]kz¹#ÕγÕHÁÎ×ýÚdÏZ4ƒ¤8‰°]/_sû_øèõëFV/¬eÀ;¿ªÛ¿‚R©µEò ·s¸Z©¦Ö%[•?jp—ß /˜5éž! L‚5Wkzî}r7Þ =Ð1’£¾É«+HǙDzÞ)ŽVâã+*Gµò@øèo%¯P6"Íäÿanâf¾:˜ƒ=Káå ún¸`“ŒÒÒœÙl•¯ü¤É«MHÁߺõ{ÖEWð{ng$wžº£ÕS€¾ëËÙ-„‹æQû___¢¾ËK¶ä8?¼Ù”ùÂÌ']ä•x-ê7Æcþ«éaQ°r zÝ–¶ãÒJn:³ÉœˆÐÕ£…½þ!î #RKô ‚.)‚æ×5ž›Ì3ÆŸÎÈï56ð»wB”IU«R-0Í“ZÚ…*žÔ; wÒÖ¿µVÌYñ¥² 6²XìxYŠÍKD@X2zVx)zŸÓpžîÜðzXTv2i’‡¶µ”Vª{5õü³ =!§˜G­™À\ú£Í–"*[8=x¶Í{3¶ÞÑÊ1?1ÈË,¡W’è¦S´Ì Òq2Ì •e.daVO˜3̱…T³Lk-"œ\õº6§êÇÇ@4ô&ÝYî@Ì€nð WŠ ’ɱŠÒÍ›˜´²õþ¢ORcêøÇ;û~¹)õSµžså’ÈÅþø¬{\~’98wØ>’=.œÝ#ª õ€$R#cN02­uΑÍI&,Vg~ö%õ”ùÆ^nÍÕkÊ.Η—-nµ›¸¯¤“3êUB_«¬Ó¶‰$.f!qÊûjÑT]ùÞê8䯶P_™ÃH–¾Û˜5jŽ5˜d&Ñ{‘~¤Æ ŠpËmÓbœãvÏ8$:šyÙçÞ„7Û øýÒÈÓšÞ߯>f>Tªžì\ü¥è­Ò®eØZrm­œ¼¼ý)Ÿ—I¥‹ò v§$20ƒ#¯˜–D˜I°Ñ k¯)Þ°¹õ·« øv~×Mtû‰»Xû1xÚ¿ÏqQ ·Âf‹,VÛX“D=ÿ6òòJèm¸(2‘Eá[¶ú¦¡Ú”×wâÊ3¦¹ª³Ê-Oˆ<á;Ч¸EýÊáL?0n®dÁ$ëRg,ò<5Ià3ÿ[nUQ=’ʾô^£3ŒìMCs…b©š0¸ >Æ˜ÆÆ…u£î+rãËŠôÖ绘³ÀŽÓ0MÑNÅQ¾Bû=îü —wœWц¯"B~&)ºh|J"`Ï6®Ùâhcnþ$úÆJ=5·8¶îØy¯£–;LܰÕê+Ãè§ï‘´á¿ó>Øáï%*„‰ÃÂ7Nyæ-‡²¨› ¢Ýî˜^¯ÈXWJ7X¤AÙÉoéÒÅœ½‘…„¬W „4 ÒïðŸèÈÆÏõG˜íÑ´;–M² †¼xðu\nûqkù%´´X¢Ê;¤@‘¤Ñß}ÊU'AH-`3Ô;ÆAŽòh-€*QyF°ñ 44Q@Fêò]'T]„ `$áêËc³oÒò¹nÎÔsÔú®³0 ÕM|ºÄ\ž[yPCâ·nWÛ!Ê­JÜg˱y¡±æÈ¥%µ¨§Hè’Õb]S ˜šÏ²“}ú„Z¢B¤µšTÛ*϶„‚æq¶QP”ˆˆúÆ^>—¥ÃkcQÒ\e!øM†bóú*¸½®ˆgM8A½6¡O-K á‘Ûª¨°»D³’¯âÿ¼‘ºëìÝaøÔäÌä*¢'l|•jí]¸aÁ.ôÆlbð¨óNéSû·âéíæ.¯ýØ0†|lÂÁK™ÔŸ{_~ ›&d#¡0:ÖñJ:“* ÄÛ×’ t]ýŽBoó°¤sÀt¿÷ÛAéÌ‚¼Gµ1É2¢$Æyí¦]‹9Øt¹mG~ò` >'îgRezâšê‰ðŽkâÔô‹þ—@gup±ßNœÊGz¯ö+ž›µxwÑåÓ¾–¨¬©[ƒO²¯PÿY­>Q$ý‰kùîçÉë1îµRN¡ZÛê•Ê=9“…k‹¸†yH‘L½Ÿ)ãÉZ;¶ÖÓ0à©Zjþª´xMÊš¶?“,ed…ÜË—=ªÑ«Ûg^ÍXÚÎý–fzùæëyÝþyûß#öžª×sÄöO^”-ÊKgvCrb4Ø @UÝÐ[Ìpõ*|<¦™š»Äk"§šEÎ'Økm*'ƒ(32 €tñâ7ê( 1n߉tÐQjx`ÕT°Òv™Ç^º’´5È»ŠONØèN§"T4W8¿ä…bÚDs,Ö]OcÙw¦D¹-¯¹i½·sŶÙÏ_áË6…g]S‹ís¯«62¸#©à³­àÕ`ãÙJªv`TÌúw#ßjØâcû ©$|»ý!ù!£Nbà\ÉåŒ p+ÓV5NÿvʭზgϽkw‚ìûÂ"ýUˆñðQ2 £š:-Y7™gš8a[>tŒnerjãTt0l½AΠòJþLSë<ñ;´¦™"-wř U÷f¬*]ƒÏÝÏîHtÄÝWGû9RÏ?$÷ž¶b™,ƒ©¤æ£Ïa‡ëTÚTù=1ËQô}²Ø=ã¨7léÌf"¦Œgd¤ï*[¡v‘D‘u,ß~®ïÐaÚ-‘Q-XG£˜Ý&}µÕÚåHÙðPDxào26uô¨Í5Á‰§ºãÏ,⦘„Jv-·¿íˆía¥¨½Ð¬¹C³#iÎXÁ«<‰áŠ˜•›•NxgÄB›äB¢î~ˆí;Wž¨ YAô¦Õ¥‰Õ\–Ór!p÷'R¤jO¢$l! м¾7øÊÞa¿²fOXƒÜ.Ê. ˜o¼Ó×£²_nTÿ’럞jÐcîà­})îE¶½Ø­0ì¢J£SÀfÎ ÜcÍè–yÖ¾|J–•ìól¥,é×KðзM7“j WË|ûø¹ÂïõW…tLJï%‘¼G;D¤¨hLn™÷sZ-ü_qÂ쾸„ŸàÚ„WWB…GA?Ó?OØÍ”Ô"¾å š÷—N)Æqߌ§îѢëÃðÓÒ~—ãÞÍU°Ñ}ßM•ÅTùë:"JÍÚ¡k+|;Ä.\Ûž)¢ŸÖ‹È)un"R–Rwib·šï"JnjŸ´qÞ›'‹U®Q=ÿؘ)Eÿz?ò£Ï ¦ª¡VäÁE¤© Çåâ»\æâ!t)$4 R¢¨§÷=ksF$w3¡Âý(ò‚Ðëj‡Øµ]Ô[ÕÂÂI=%3¼áäRc픉ìNË_£ %}ú³¼F®:€Bv] $V²°’ý|"|(=m¼‹2À-ë†D¡õ9JIisn-ÓN†¡†ž¿bþWI»jÎ*ÓîI™{“8Ëa›Kæwfuø1Ÿ ÎÑ’Ô qH…>—P'nÆÔµ‹/®——]ÑRåÕõˆµÅ©ÄRá¹ÐŹ `K[ÿEXfBð»<¡ èÝZϤõHÉfT-;½ª ~F|´‘w޲.s›at×LóÖÇY©]Úmm<¥×µBI-”Já> ×¼RaÇ}¬‰î¶9–d}ó,û>ée4Ïá‚êMmÎÇXgJ‹îC;e1}¶¤½ñŽ‚ƒ[°igá„dD¸èîäSÖ´€©,¨ Æ“RAwu”ö¡ëc\zû ,ëÆçœOtàsIä˜Àl<ˆêäR¨ÑœÂGúHƒLùz,VOº4(eµ™ß˜(ç½ é• u½r.IB) (¼Z§¦QŽ(—6ø mÿpÔPñÚÚêÉZâíQ¥ÖSO£¦ØÕ!¡¾ZÉSj ò":Žá =tÓÆìTsš¼'_‘³Ž€…3 n‚ÑÄi‰Tö'·1ª´ûwHZJ„¤¿ìbõÊS%èÆf£ï ‚=Ô‰$ Ñ‘C26{Œj«Bbõ`-q'¤ÚÏÊÝv½LVºzY\Ô ;ê÷ƘSCaã ·!/5ò,i$ö”F¾Iw¥nEæýüýþ“sÖ•ì¤ó™âÕìôü3jå{ÌÃýá˜"¬&â Ž\0ßÓ˜S•Aø÷qÎWÄ£ÕúÉ?¸ÝóuxÑ‚)Ý\ÂþVÆÑ —›ùÿ°áæbÊ:nÉYƒ>ow•+¼Ø‘“™ÀZ‰7©P£^CàˆznKD\87Á‹3VÆ8]éÒJWN"x‰B+ž¿,ø²¦6CÙ¡Ú%¦©aç‚ל7¡wM-J!°Ñ´;œ¤°~ñ퇪Ü„Á8I¦n-Ü”ªC$1¬£¶Þx§Ã‡ˆzèd²yG¸]Òå±ÍÄÖ»ˆÆ¶e÷¼õÙâ;r¹¢·|ç¦8UÆÆ Î÷É­ÕL4ûõÙX¼+‚¨3ÝÄ” ³2rÈó˜ÃÌöËÙå€ôÉ !Ü.»ƒÜOó²¡åÍ3äçòO‡uXrŒAA»~b|U_?pê›Ù¿!–æ3§Ý¼q~r0úãÒÝÖ÷ð²÷׋ åÂÉcG-œw¼]´ÐGêÏúE+Ôy†ÊüåÈæ£ÔD/¯l)½ZÞtS[ ïq.WÏ&±žM{~”ÜÀPÃe !Ó‹h£¥Cx5€~Îô|$ÂCÜ92‰˜špz³îÑ‹¯ñq +û2‚à&™ÌeµkHΖ`&3å©ëD¼ÐÈ>ÁðsyòÔ6—¶j JňþÄVDjMËCé}6ùýP‹ÎpL\©ËQâV4ÛįÊ'O4ùE®†½ãùôhšŽÝ÷^ûõiGì’–'÷’òk©Ï)bl(˜ùÒû~½[Ð9S䊙›ç4¢É®Kÿví*1S+Êïˆæ‰ZÙÑw¸˜š.©¨ªíŒ)›5šæ‚HžÇùùŠôe›wy©Á1MÌžžÜ:lQ.Ï쀟òÝÀ€X ”+ĬXCåâ¯ïLy¤ ÐÙs,½é”n!ì­+Ï2¹NÈO>”S/‹Ø½x‘`ÀU—xáÛ›Öbꊑ,ƒŸ?”ã îl“6Ïç=½'eËG™úB¦S,ªæXÞŒ•aÞö+ÖÕí“-€–g“|¥“š"{çâPÜ_¾=¦wÞ:!é˜Á«*PÒëäRœFÄzèÌkv•`íí³Ž›Ü2„˜ëî¿©o!Ÿèò¬œYp³µCBÒ "åƒH4‡ö©|o£¯CD£ë›;s*œ8§<ÊÀg-##’©…pãý€FYC޵GÞÜîñz”›ÆÅÇ÷ÍØ1B¸ ßƒŠ¯ÍÇŠáçaÛE>}ß?mHGYmû¼2»ùž%³ ±ýù]¼Ÿ#E¼<ºQVGY¡ùNåâ·qÊÉUºÅ86º"9x4Ã{Äõ«Q/ý·¼_ùè$VSD %5ÓEtx{›^%<ƒ€t¢<Þ3ÖÊœÊÙµ&–Ñ­«‚€_y1,ŸJ—s%.1ܱèÆqrèûÎ@ÕÃò¥>D}žšÛ(‘>ï¹Ü¢ýij17rxéA]g…ü' +„™k}UJHTõsýÑJp!Ñ*¬Å- r8™ŠvFâbSßœC ¸Û¦}$ë¢7u&™ÛüYEº‘r}*>³`Ⱦž±Û¢Tœž}ûÂÝ2c¾¾w¦›ñótÈì±Ï=ÃKKú‘·cµ¿àû.¬ð½úöäÒ ÷TqCdûÀ‘à‰A0]ºF§ÔOS¬=1“¸OV½¨Jú8,ƒ=äa¿·œÝ­Vé"Cª4üZÇG+Àe†nW“Ò ]§ð‘ÏÉŽEF¼1õAz‘„˜,É¥Û;x¸…1䯒Ôl7€þ›-”q·÷ÜÇá„¡ð»’¬€ µ9ãà^ Îð]'Î÷¾⯒KŠx´TˆÔ«¯9½Õù¯=&¶—ý=m*ÃÙÙ/qà¾ÃÇÙÊJÎ5DÇ–C ¸‡èÙÄm¶)ŒÇUfQ‘q® ךù=d0ÎënWK?TÃnÛ¦V*œOÁÒsY0ˆ–n)Xj+ËÚƒâó•‹XÙѨ(¦ÿs–OBy¬‘!á+Ù^÷åÉû¯$T(“§ñmÑÓ3hfXÇy&=¿_ÓŠÕÏöïa•Fó¯qE¬Ð’wU}¾s”¶ï>¿‰mêÖµK[]Z“÷Å*¾Ø0æv5@|OÈŠ?W?7°£ìà§UW<æ qqLVnÃDkbw@•Ì4‹yò}×öîðWFœœÅÑ9+ÀØ\H’ I%)¢]í«(±Þb‡!ª›”R½çÔs̺#iF ?q6íãV5¿wᨥ§V b ¬$Múá@-¦@ý­®o_>ØL¢Ápòë†#Zëµ»"VžD…ÿ³Œ<ú3M»˜ò!²ë°uD¤Æ¥5úÈoã«¶›‘÷…¸J†Ÿøiðb<ƒÎcé?lëR5_¨ŽzUEòº¼í^öÔÀü’]zNå‘K&$‰”4»¼¼ã¾¥üRÁbè)<Ù¢µO£Žo‘Ä͘J7£Lçüž;?4ÇÇÛ,1*ë*<®³ïK`äÏ0rE Aè.ò†j6õ³g«œ_´\à|öÑ2Œ«‚«ÑÖ{µXì!†©x[s|#™+«JO$lí?m ^z.:ÿt¢jÝÚc¬2‘Éþ¤ÏžH/ûL“Èî"¥mçÖø>miN%qïÁF¨Ó ZN.àÉ¥·oñV™ßw¨{–¤nú<ÐS€ñ½³»CP÷b˜¡{üŠc€ˆ€æÏ.Šðð`\÷n<ìüjÞ~I¾fÎ.^]‰…ÀprÔÍú°‘UÉò¢g~ì¤Äãþ?"Ü'S›‡R¡r=Ory?B Ì7¤“ ›õä³#Ø=¥w°½Ùm)D°Ht¿ôÐà»Æ’óLĬ «ö€/ FyNb»ómL^@§€âriôðe㆜9ó.~äa¢ÎÑþ2Ñ¢ýe3æ|&ä¹ïœ‹»ëKÇgë×´”C '*!¼Y²y)0bÛsjC"ÿÍ6Ÿ_;ǰώn«ÂÂÖlz¹>Ó™AQð@?JÆÍ“[CL»J¿gYûŠþILiE trEÄf|@éCýN³i¶Q>_98 ñÖê¡(ijô†‡%4U´­¨ëv¹-« %ˆ =ˆ 8ôzoÔ[‚Œ-cJmFkù?YdÊc endstream endobj 623 0 obj << /Length1 1511 /Length2 7479 /Length3 0 /Length 8495 /Filter /FlateDecode >> stream xÚ·Tê6L§‚H(0ÄHÃÐ ÒÝ%% 0À30 Ý)-]‚4H§”´HŠt§"4ߨçžsÏýÿµ¾oÍZ3ï~v¼;žý®5@z-]Nik¸%DCròpD²ê:‚ˆ â%õ HGÈ”hA¸Bá0ÑÿÒË" `$ “#Qfêp@ÅÍÀÃàå¼ È áQ€Øj Pç¨ÀaW ,ÜÙ µµC¢nùÏÀbÅ àâøív‚  V`@Œ´ƒ8¡n´;táVPÒë_!XÄíHgQnn.°“+a+ÉÊð€"í:WÂb øU.@ìù] guýëÂm`€¡V˜+ÊÁ f APwt•ÕšÎØcµ?€¿Zàáâù;Ü_Þ¿Aa¿ÁVVp'g0Ì ³Ø@!M5.¤'’†Yÿ2;ºÂQþ`w0Ôl‰2ø8  ­ £êû«:W+ÔéÊå uüU!÷¯0¨&ËìeáNNÒ•àW~rPÄ Õu/îßcu€Á=`>Î6P˜µÍ¯¬Ýœ¹õaP7ˆ²Ü_(ˆàÌ‚€@ !aÄñ´²ãþ\ÏËò[Éó Fåïçã wØ J€øAm ¨W°;€D¸Aü|þ[ño‰€‡` µB,!¶PÁ?ÑQ0ÄæŒš<ê 0¡ˆÇýúü}2CqËsôúÇü÷p¹TõuµØü·JFî ðáä8y@>€êà÷ï(Z`è_Y€þñU†ÙÀ"’Eué? »ÿ5}–¿ƒðïXpc!–n Y¡¾xþŸiþÛåÿÝ¿¢ü_þ¿ù(¸9:þÖ²üRÿ´`'¨£×_z_Ý(î«ÃQû_SCÈŸuU‡XCÝœþW«Œ£v@fëøw¡® POˆµie÷‡*pý_ æ…A´à®Ð_ €“új«¬P†+Š¿UÔÒüûJy˜Üú×vñ ÀØ‹5b”$ðáA­¡5Äó7ƒÜ\08å@•ç°#~ÍåÄý§$üápÛ@Q$þàEp7Ä?€€†Êîo€_À ÿ/u7·+Äõfüð£›ÿ–yÜH;ä¿|@(ÄþOLa·7ñøWÉVnjáSÕÿÈ¿_ÄbE0?· µ¯ m;¯‘~èÁ¹þQb¸n˜ÎÊé3hw»$ÂMa­Î ^EœJ§ öÜ[ú"ÏròdîÚg»¥÷yk’öÛŸ¾Wæ :ãëo æÆ(úF ·¥ëßÓà?âÔ{²á{íâkä€Ù‚Þ©Ìuq&ÒÊ'=÷èUô¬_¶ø!|f]{£ZP•ðªl‚3V?Æ4¨d ˜g™=MÉ€ƒä¤Ác»àI2›©*f}^­">¤MS´|rJæqÜdñ^×Ð9G|ÿñì1pT”…Š’“L9:fµU)Ñ©„>‡?û`IeÕSù‡P‹¥+‡f"ôVÓQ¨«b²˜~Ã’ìÑųíÕñ†œ[ò’D|%H1EÜñu1ÇCÑwøçEšº)÷ò?é²iJ½iË]ÿ´–v\s?ç<†nüçÍs쟥8ç/[Ja45W#äL³|2¡‹R3¨Prø9Qÿ:Á&‡ËÚÖbTK2±K|M8~…‰±œ™ÐPk‹¦§¢ù²égÝaÒ/ŬµWÇ×É™áñÔ—¶/wxµqüD¿¿+¼·á{)Ë}›››ÓðúçÔ`‚ãñ¤ÞXÙƒe^‹®À857¾‘eâµ·r±ñ؈§eûKhÛÇ3Ö]§ÆÕBô©(”Êï(¸,êÙ 3mTNøf,m4ó~ðt\¨Ò|î6ëÙ‘h«¸É틎#ºóXpÀ¤2(¯½±ïuõm%„ÿöhJ²ÔÙ‹ù+-_zÈ­=t™kñj’º¿ø)Ö°ˆÔ—#– B·lK1…2a-# ßY29]`¢—ÄM¸-Œ^;È8õùXú«š2MèëˆðÓÊ×ñJáßÀB'©±æÆâ‡¤¶Ù‡Æ×Û##÷ÊÒ!8«99Ó9Á.)Üþ8öÌ&ò<Ëø=l9T+“‰àN3’ê b5ˆR@”ìS2LšFÚøç$äd¶sœÜ¡Ç[:O&èæ}-Ñdƒ¸ÛF½ƒkTóhͱʪ0 Ì3<£Ú‡BÏ’øZå[Î'Ëöw¢iD˜0»ŒN[{™9"iã÷rI$r(33‡$cHÉT&À÷xÚM÷XÄ_(¸äi½_²D0«k|Hh\ðg›•›é¼“í£Ê¯?ã9ó(Yîd¶kñ²!¨u%¹·À%4Z#PÕe%Qd¶í«ê9Þ`:_Í>™—4£ºµùFÙ0®!sOåN­ÜÊ£bm3j‹7 ¥X}êôc8I'ÝŸžz|=ب× GVfÎQf%±›Ù&Ôl‘O‘ †Ýܽ†»z”%mjë±f5 GW €£>K?÷»KzöÅö+·™Ã†æýÑ‚2¢ý¨öén—¢u‘™CŠÙQBw&TÛ(…"x;l²+e_ÍAAŠäN¹Zb!ORY_Ï'FªÏ§IK\h0½¦äÑNs¨$¶+ßè½ïû¨: ÕxÀj‰|¶-ZÂ/>eT°ëÆBfˆÛ” ¶Rõ]gzO®ã.\Wú‹Ý×Îsuîhxi^Â)þ§ÀÌWÏÃÆ(ÈÌw¦ä„û›#ßkëí¢= ÝÌ»¿L ö˜P4&J4Äô›=2*oæ•¶T¶¾ßbâVÕIn ð…Hì-Ž`—aæEZ¢›‡Þ6‚t7C‡RZ£Âøxæ:=7$SïL§7hf_’×tÑ>¥7ù?C4Ž?+ Žù®ûUy&ýòŒÓè7†bÛ1¯¨'TA•wß2Í•lDÇWj9H½ñzëuÁÖJ*Ž}º¼r0œè"!«È8xÚüÄz¾»»ÉÿhPšG[8XšÓw5Ò’Ç»²Ö ПºX|elz/Ÿ«±_z'×ÿk¿kgÃË­f:^r {vj™ºÓ¬[Þ‚êŸÓHo˜[457SoúPýÇ÷áeOaº7yìW#>»ö6ñÇ¡ÅiÝÅÔ;üAž: æƒø,Ž™e»Òw?Bú^ÌoËÚÈg \*˜EE{¥Âì|}°Æ{€‹3ÆÍÒéÿøæ[—VM‘ŒÈÙ[ÏÀ‚‹•-ü@ÊOg"9¸è$£šxª;“»j”éKXîÈ”8bÈ$'âÂŽcq6$c0°Ëõ5!ìÔÄÍp¥Ù7TzTÞˆ|[_ìŒß#à=³§çvä-/HëùºÕ)@Ý—RÛe{k€žØÿ` Ÿl%KXù•ꨕéqÖŽ&ÝUvIød¼ŸŸ^êÖùòOR‘ìGr,߇­0&EöóÒ]!³TaÙ»:Ï……–éë>ÖÀ\[(-‘Éwüeò5 µèλ”žÚŒà2ÊÔ?’Ó&_„¦@?ç$·$ï_Ù-ÞULNNLº¹Ç“&®Ã0Ël«ääÍÒƒ°6õoHöùñ‰Ÿq¼Ji¼³¼ö¨Š  ä Ýì-Ík«2 %h¨+n”Âúó.e¯v÷…k‚ŸHjûÑZ†)ä™`m‘•z1;ç>ÖmGcÓo`¢­ŸK¥-@‹ [èŒ+KL¿²ÞuO6§›3¥]4Ì.=“Yk=©5'mh,y3É8\}üCëºñ)´òàs‚ÆÛj+·ˆ÷ûÊifʯW«ÂMu÷ö”ãªp6܉r\ñq]Œœ³pFµÌn|o1}š ‘èèVVße@äG±ª¾³¹Ûáüg+ Y°½óçâm×Aaé¾Í·Ùi߈¾Œl½¹Í3ÂàçÜ™ÜVkXÿv§~¤º÷J¸¿¼§`PëìóÄ|(m~§2‹ÍbLMóþÎA²jg¥âÐ «o@™“JAP€j¹:qt¿ØZÚTœÊ~­ª#¸›ÓëÕ®è*1‡¹ŒÑVÅS^ÙZú„!€$ª$®Êܽ|_R‡õhG’cÍcÞSÙp©wl"ùôaÞ3U‰–ßP¤ ‰lö»pšPg)ÚÐ$O„¢³Xä±]riS®óñ8à‡¦k‚~ÞöÆî›’欵}8ÏÙó.-Ê…—?={gmœpH=@‹ñpå¡gΑ!3åÚ­4z¦{—˃4I‚âI9!@Ë‹ÌÜ£dì{IG OTE‹s·`ÖêøÎ ‘F¾zêµS¼:ã5AØw£— mYåãLc¹;•ûáÇXû|‹[2|éÖ3â^(¾ SNk²èµqpyö{‚lÆ6~œÍœÐ#ñ¯(tÊK¹Äö‘þ+¼H`å@ßu©t{5ú×\¿ûW%?X¿QˆB©ðú¬ìŒE;¿WOßWÈšÂâf>ªî4ÍÛî6àªÏz7uxZˆ AoË}W…Å~¿ o„ZУH¦*Ûí¬ù’°ö>±ÂPwš†§œÙHŽ8íƒv|#cМçÇ š-¬ç&Æþ3ÁÉ%_Ã:2œ¥Î,›EâƒdÎ^sP*Æ ÷tàÍ,%þÜF>ºÛƒqªàn%ÉKaÈøš¯ôm¡ÎT Æ¿½«LáäþrìÇ¥æVÃkÒQ–\ ìvëÊ~©:´éÉþˆéI¶I-Î1ÁÒIl$2eb\b3V_ýf"cN>À›jŽKôæ–.¥6ÁA.g¨Oöá&fʳJÂÍ/…Ñ©1EfÒSú.ç3lmãŸì@2üÛ‘l>F£¦›%|6#¯´VÐ:´¿¶Ä¾~¨%T:è5ÓéìNëP¢·ðaVO‡ø^mï ®n‰>²vÒæ¼A`«¸²†–­ÕÍ+¥ $õm´Ö|¹¹NËßÑxŒì•¤”×2RQÙWÁ¾-L4ŽK*û~+£ÄIæïÕ6Aå<ý!j¢ýKnhÄÚLµõî]oî­ÂËU¾Â5{ò„B¶.t­—« +¥¿ê76=.ódh|l™ÎïÏoö”hºu#±ãŒ&]¤JDO¼}*gè¥êfAØ@Ž…‰²OºÖ¥duˆ‘Ž›Õc–½2ŠÓIÐR™{6IÝanŽØÏw¾kO,¿·æ@®,ˈaîIY>/D×sG=X˜¶ ü!|'có“ÏâÛ®ïM›Y~x80C­ƒ\²*ï—©1Yb3ì:È0ƒ‘§‡_$FM'ÜŠ[eRpßïé³Èº÷azH)ÍâÛ#oýÑär )=‘»—“!­—QòZ‰&žÄhå“ܱu¡y¼MÁ¬Uãìk MÄ9DãCµƒžaøã›ÎJ‰â••lkàò3ÌÏóç`u–{M+?¨%ÚYal_Yr•©ú9ldÞ¬Èá»å 2²/~§ãbWìõŒ@ë)î³Øz 8êF>oþéÓÑKhÜþ‘N;ònL(ûõ‰s´¡-§Z¼eQŽóÙO*/ÓEo[A¼5È~ÿÇ® ÕØ77ŠŠ%Dôy—K6>…PÔ·ÈÖ\ÓÅO+~î†;Ç!˜/°t·Ùïê·/17öl%¥"l±›ÇSFÏóÇ ú˜Z,J —;Ðo¯¤”/¿Phö‚‹ni¤V'´Æ$©†ûSú.kî’Åé ¨Ð³QŸ¬?¸Ð}ð¤D}CˆQøñÌgqÉE®Wì²WäåÊñEÒ„@Sbh­ÞÊôÔ`¨Aîñ}‚³ò´]vC´Z]jÍ-'>ò-'ëÈï$åìɺc”Ý×%‡z;yáç^'÷tÄ™ÉG¾.ââ½ã=ž8m¦È š“(’Ê=ݯù¤ññ®…P#cYÝgÿ¡>õè““¬%½Ú.©oò³:ã#-¹ùÚduÞ女f÷I]£Ëô¶Ž'µžh…fá‡)rö¯tDÔ;×½+××Yùˆã3÷ÔÛNq‹”*_áz>ì¹5`ÆM,âb™t­¹[ö]5ÇÑÔË™~…ût{BÄ‚V;ôΓ–á|!Äh?äpq\ÂF8U¨IMçl-W´ìtì=€]:Ókö©…<¼îÍL¶w×sÕdv,OerÜZÑãcõVÜ\§ñYþá«2#ƒƼ‹Ï­Í™-êWùfÅçlýù³"_H"°”Œ§…ÏÌò³"8ÓÇÌü’”å voa·„Ì~¼žòÕ8K%îlï0 Ef±f¯áwqÁ<˜U.ýºt‹÷Cƒ1‡—ä½Êo·æêØõºàDªÒE‰W M/"Üã¹îaxJ 'oôõØþ@³1“²d½íó|YæµH¯ñB ?Ú–cR”7;:3bO!¶øÍmZÞb¯jmRfÓ3Àã e¹z0<óqѳ̣‘àì`²hâƒÑÍÚÅW…£Ò2wØcô<dOwí o 7kÅͨh"‹r9a1/½nÎÝmãšeÝ ¦ 5ǧ–²¼A¾çÒ8(ÆñíšÒšwêóëéâŽp«^c’fÐ/ÇÚªg:kì¹­t÷ƒó.>Íïs_¸¶Éñ9è§›tM̲Ssl—×ͼ£¥¤äÆÄÓ$Üå®>gÂ&Ub¾z_+‹CÂ}¿á¦1:ëNÌU~÷´/G¾»D˾ß÷ð,:Ùˆ²¬,/ A#"-¶æã˜Iˆ•.a\ ™œß*™g£US÷P¦‘ÞZOp»ÒÌhÛeµ®—û#k%§±ÔëVR=‚·»å™†}ÀQ·‰Æô“”\6ã7§4bŒvvKªBßyŪe—óƒÖòÞõ½ÿ¢:.a’®Ï¤ÁK®\e€ƒqÄ2 'Ò84€MàI²š®úUìUtÜX²×°{`Šˆ 2«2>}Bï4÷ë‹7Â'ðD­|/­î’}Ý "bqº 2zª¨lÅâ±nH{pÈ‹lp½›tM ՘㦞•›I*áyŠýŒÄ ùLœÃé*ÞsY~àðQC@E 9/»5B{¯u‚"ŸŒ[¬;!7~!áÂOö÷ŸÐ'¾·­BßwîÇòüTÀx¤é׊.ðiïñÝ`zq„ºyRÍ¡£ìøüËoÄÔƒØä³ÄŒÅýñqõüDÉ’îìê+‡<[ߺœ#Í¿TÇíT‚ Z7#))û1Ám‡Ïã›m‹:Œy"^ˆ†ùo@Yc¢¾H8¸T«+¸ºxˆ¿fÍ­0‹Š±Î¬˜ñÓpl >pó´ú¦6/] ™F_z¬F„V™ÈëFñŠîåg‚Á,‰¢QÙ1¾P“ð5ú’½òÅ¥žæœö]í[rºWÉ^K,Eòäl]?%;+˜WŸ¯†DÜ¥µ»j˜¶lÁ±yâŽàÓ£‰Ó›ôY½mç#×ìX¼ÞÏ6oŒßþ:)·ÃŽ_r‹¾bG¾BYÇGK:L*þiʵuà¡D-Z3ù‘© WŽ%¨éºX¢¼r¯|’V^‘íÀ”=p¿¤“M,Rcl$ Àh¨@ø‡ŒºôŒqâgý& %&,‘_¾7ÂXjðÁ ã£ÕáIîýÃÑ—t€ulðúFbŒó™´Sæ±w›U–:JyÈ10Üf^wÝÃúÂÝ7M¥#;èN)äyé•&\¶'pÿФŒ‡¢1ÅøÍ3ø2Øöj¾T®"à®}.žQ'¯UÆF7»úxÃÛn£€¸)S®M%b™œ+þt(ÄŠŠZ®ßøð3AhË­1ôÞÇ­Ú³Õ¤÷v™?sMÄiõú u¾€Ð…X=Ö AØÒ[ísŸx Ù×|‘„»¦´f9)ÙèERo³Õ­#îàО»­Ðt «‰¤ZÈýúýûUù›Máñ-5æXûÅÓÅü½›>¬—’…κ×÷ “ºÝD%Ûm,F‰Ìe²á°dzŽ4ÂQ/nY‚Q„¥ÔÚ ¡ŸŸH±‡DOÓŽn?œ«ªÌ#‰ l:Ý…½;t è}V)lì hBp,É$>xöYSã½ YWCzÑ-èHHz4jµ‘0]â'ÏŸ;è-]¹¹Bdøñá+ÐbFiÞÙ¸õÌYbÐ'ðŽ«Ëç#sÙI½›:Éfœ^íÚw)ï±L‚m”}ÞY«Ik$öàûYb>‚ì„s+HÝ•n6³tËžqì*/tYNŠ7áåW—Ñ+$w7­!4ÚM*Aa«Wš¤ü¦‹…›Õá2ð¾æ_2*_¼Æ@˾^­é8²˜:ûµ5B0rÄ‘Óv K'“í~€)W¶Íñ±ÑÉ*­,W Àöõñ¥õK¥”ËÃ# í"3啕ؤ®Ã%S9õCó/,+qˆ÷m¯ï•îkv,]ò³dšpÄäÊ‘‰Jò;d½:(ntV3Öê:®˜)+k\aSúž´ùÍ_¿Ìë°sEy@¾ázwnNÝÂÿ|²mºÂù0µÏü§ü·’‹ÄÛ×QKpïû ½çŠ‚š9Ñkša Sâ }úósYgäÏŠ˜·T=[µÅû¦1rÑ”sUúÆ ·í¹ËÄ9Æ üŽÞzº®²wÛ1¬äêÈÄ+JD·ó‘aìu$@]^gíò m×DçÐÊ8|*é2¸ &¯Ìömí3Aô¿³jàÀ{Ñž\aã¦ÖœðÁ·”ï£Å\¤IK•àÖ²ºÞñZÌ#˜mªèa•¡JºkåÈ;<ŸAj‚gë4½ˆŸ ‚#hi"“êØÛyÕF/x ¬nlo„ó7@ ÀÉ·3é_«tD›×ÀaÒBš®”ÔsS)d°»F?…”–QïÓ@ƒhkµ¡è²ékw¢Õ k1Ù\ã½ãGÆž®Á~wª/d4®èõ¢GÖnİcɾÎß q!ÍTŠºD8½^v=›T@%)-u+hl(ήoñêÄf É!7^~ý kÇTÓžšW@ŠÜO s–Õ·¸®»%Àw®<Ó5F=jæ]ÝOŒÚñó€úÞÃPÿd«Úì{»Ç¯Ûìw6z(¥ENµ‡1wòç’>UÉÆÏ¼¼ñTªé^Žþd7ßRYZi€‡­–È!|eÝíô íò‚šèÈ=>¨½ôµ ð® WVÏ y‹›ø¨W\«ol„=}S„a§ÅbzæÑ‰ðƒ;‘i/8¼¾½àz $‹ƒ—Ýo¤;j­®µ W˜yÈPs<œK¦íû8Ü!P?Oó-ŸŒºÏ—ì/øeŸ2Ë­ñ.Þ®£EÞ!n•ŒÏÒd*¶¢ ÷zË{<*þ]÷m×€ÖäG§N¤Á6 Uôâ0hÖ¡]õêˆþÔ/`s¨e>Nð“<íêôk¢ô'·oÂŽ§Ì¾CîŠ0òZ,ÜFƒ³¦£|ºÓ{Â_W†o§ ÁGš»‘öbL¢j¡ž2UÒᤡ¢"´1ƒ9.!÷låó¨íkŽûÙª`}¥tW¤×æÚi[X8*²ölä1í‡ÛÕ VIÏÑÕ1Ñž0‰÷$r,ϯ0óœ^z-øHK¨ÖËLU‹ [õØ ªèUâ n‰Ÿ8º’êåù:ؾ˜KøÉ·¡;[ŽŽ>¡Ñ%‹Y~;*ÈØœLl´OÈ(&åœØ±yE¨Á¥Ï¯D|ã¯2ÈaÿjÍcå‘Ì›7àDYÅ%Y¿éTý›™`#úƹ@‡³ÇÑÃnLÖcÔ;‘£W²ž©4òݲ[%?ØV{m¸ß©þ¨/yÞ©Ë3“Çpn7z :²¤²x÷tg}ph&}£•`ÖP»OyP >ˈ/yŸò…R'æÊ¶žz~F¼ÑÜÀ‹sð°ó£ÜPð--5i}uÅS©s•ËÁGÖ Ç·ŠÆöW Vžð·¹oû3 >`EØ!¥´J¥S WY} B‹?÷ÙãL)°O …'½2M`ÕºòOiBÒÌâ”T=°1uìEûO³Gí»ž> ’©_%³¢’J0Ûr¹³®“üÙ=?ÈúD³fW¡óeû2 =\¼}AæÀÿŽ:â©åûï†Y”/g¾›QOï®áöFb_/¤u¸nJ±-M›dyk\‚\п®st×ÞJ>˜"~F|¯jÉOøHÕL‘›Q7q׺ŠanuØZDV ^Æ TUñ ÿ¼ÙÄ÷$Êåõú‘úÌÞg_px`Evn5Åg­÷/bÞ~5 EZ«!žº¢¹ m$;2’^žÉÃòØ–[O ÕrЇ8ç~”¥)qsžf+Žùìì–ã™ÚïhdQnCÔ€ÖÒ'¬cBª­?¢U:İ[ ü.ë"¼AsB3Òßà ˜¡¹rT‡Swýˆ÷éž>Ȳ‰›é…Ý?’šl™Iò7¹¤î³ÙÜx ²èy¿D.ËH½[m2ó]Ð9w‚¯œfoÜ Û»[4nGú&ª€æ9O _P«1tŸ·~`-“™J#ù6ð”áÝÿ?r„a endstream endobj 625 0 obj << /Length1 1528 /Length2 7584 /Length3 0 /Length 8608 /Filter /FlateDecode >> stream xÚ¶Tl7NIŒ¥a”ÒÛhPº»SjÀ€Œî’” Ii” i ¤[R¤ù¦>ïó¼ÏûÿŸó}gçl÷õ»â¾âwÝg,:ú|²vH˜áÉáKå5õD`° ?,àà0€{ºÀþ #ÊŽDHü—^ƒz¢1¨'ÚL‰ªy¹!‚@ˆˆDT  €Áâÿ1D¢$€ Po¸P“¨†DÀ<òH7?ÜÁÑ}ËŽ@N[. D\\”÷·;PÖ†‚ÛB@M¨§#Ì}£-Ô¨´…Ã<ýþ‚ó£§§›äããÃuõàG¢¤¸x>pOG Ì†ò†Ù• Ô‚ºÂ~Æà8Â=þÀúH{O( D.p[Âíà…°ƒ¡€è»úª@m7â±Æ^à_­Bø!‡ûËûW 8â·3ÔÖéêEøÁ@{¸ ¨­¤ÁïéëÉ „"ì~B]£‰‚}þ>Y ¹e‡D¸øýcþ{¸ 9%#cžßÿ­’“CúøD|Â` " E‚þE ÿ+ ð?¾ª{$PüO²è.ý'a₩Ïù×bpÿK ‰f, ÈùÁÍÁÂ`[ôäÿ™æ¿]þÿØý+Êÿ…àÿ›’—‹Ëo-ç/õÿG u…»øý¥GóÕËÍ}M$zÿkj û³®š0;¸—ëÿjU=¡èE8¸üÝD¸‡Üf§÷´uüC•?¸á¯s#`:Hø¯ÈƒÿG‡Þ*[gô£áæão ½4ÿ¾Ra‹´ûµ]Â"@( õ GŒ–„ôÚÁ|3âG =Ñ.@tyA@{$ ðkžh'П’ÐðD²‡£Iü7 €^¨Q Îîo@HBþ·Œáæâåñ‡0äóF?"#BhMï¿eä鈂ý×µ`4âƒü'¨äCýþÕ[/ ýüæ(ºAÿ‘?70˜/Ìðe i{ÿ‘ÓÛGïN«eé}øÖ†%Ç9ÖŒ3¹ø¾ Z½ÎIðÒ¸ª²ÃP'²iýd_W9ef˜¯¶›jñ¢›Su[./­RôÆÖZÓ£w>Œ¼Ü–­éa$`à3Y¼r4 sÆnÂlWãÈs÷#Ñ) <õéVö­é)ŸŒšZÓ]¯Q'¼,ÿÄ—`oV2Á‘oób’†דŸ›âÀ—tâødœ"wä†Y-…´“ X`¶(x6é?÷Ê@À£ƒ–ÖŒ†û˜bpìn€Üfºõç€Ò¢ù s¯âXÁ¯ÊÁSË¢üà)bo¤û°YÖ–~î´6 x•c*gÒ_®_ñV„Tºa ¯o\‚sûBÈö¦Ë)êß²¶_¾•?­}v{Y$6T…NRòøÞSæÔãof©få#ÚôJ–(1³.±‰fmp=È•‰ž;þ˜3‡•^ö> *L)EÔSxI`—Ê«fYQIO‹Ã{0bnYðß ¦¦ûÄMOpXÇãìX6Žå¤í³ÙúÕ}‹àÀù.o꺕tè³Áëþ[&ÖT„ôIñð¤qL*WNjúäcfʺaFìb‚ç®ôõ¸4ëÝ³× O»@GIúÄ„éÜCÒiu¸!¶x«O׌{m){)W“t+ßÚ¼‡‹9ÂÑQe«áÓ¤HÙ4òu&éôíÙ‘™71›Mi¶ &âºÿzyFÒQv¦zaxW‚¬-i3åÝ0²TwÁfö7JòûYù’U±HŒT™ì4½gµ»¡»M.Æ©•dã]\—~¦u²¹%)ÝÍó ž"‹vhÉ=y§§3Êx²0€¸);­ÍEyýçáÑ´Ì}ÒÜÏÛ *ëŸí/I»x$ËÉýöoÂ<׳-R·® Ÿ"/òeâ ~<$Qž³ð-ìû¼>îV=»È; fýØœ¡´ë! ·²Èƒ¥¤YÅÌÚ3ÐY ¤‹Üí0á£ÛG­Ä¾N;•Z­ eº‹¯Ü#*2É*%yÖ§Áóé,¦IùÚ•)ǃšK¶Ý˜ÍÉŒ|ï ÈÊXd©}%ð¢Õ0uŒÊ2áÍ:¸ [Êa”Ý{1ÇyEIcZ„ÑçˆOwëm&é/IcxQœaÌt]aíd˜õ0W×§Å$ÁSµ+“%¿´6Îäõfrm§ÔyTInºš‡‡…§µ{‘»X*;jõ1OãÊ\l/r2d${ûâ´œ‹ÜNýÂðÇæ\3:ì÷7üú{ØåÅ="kÒ«kÛˆvÙ¼¦€ìœêg̼-Ï 1YŠ'1;üSz¾®ZB´ÍÎ ëœT>”YM.‚`Í3²rìöÜÙõ%sEŒ8Úàf«vÿÙ±ÛÕîç®ßÝr—Tê €Pr µÊ¨jÐ?éx_x¨ð¬‚?}ÏsL•<“Fq¼us€0Ö",Á¾ç|Ãè[ådjż“¨Ô Úßñ㘕/€mw|—z½„ž/ìü6àDbƒÁF;cöáw.ò=•×ïð&dM°f·[žvß”ü4tÈ}à\ç^‚¡AÛU#W±>õ‘ÛéÕx3¹#É”jü="ö[m23®üüQ ÷ Žr7 \(ˆžØÜ~kÍKÍ–)£•D=wíà¹ãÓo_ W¬§ÂD»ܬ¨½Óô†öøûæbûÂ^Á{k%˜y”åC%ŽÞ*ñ°j‘FÇéB¶£Í2]i3d=eôGwNFr]gy$«Ëº)UpótF/°òÜ\ŸY[ŠÚ íD7ê?·Ñö=42ÉÙOã/öl­RúØ„š¬÷k2 Î+¬¥±Ÿ©kä¸ÝqêÏ|©¬¹¨ógS©COCüÒ6ÊÓ,F[IµO‹éf}aOÜð.~\«/U-Ìì^mdƒëêmëvFjì2•û™Z£¨ã ¹¿•Òµeùùܹ"#'RÏ%a9,˜$Wnn žb»{ãdð+UZ1šÈ¦ç+<6–ó³Ä" Š7–šð×Ns_Ç)) q¯Ž(Œ§gÍF^£Tûƒû¿2³—Hy¬ãÍïâÞW›Ê”ž5÷• Ÿ—m’5¨¶&NcIQúÝÚ‹•¯Û‰`–ì;“Þ+|÷žU/†¼ðÞÁªŸ7¸þâ§;¿b É0¹—6‰³Š˜; òü Ë鏯¦Áš˜¹iÐoßMÕ°3 :ˆ2þ‘Eο-T’Á¿×bÉ1Ä]4ÊXsg@áKྙtÍî#ÑG‰ÆÌ×DÜÄ tV Ng±‹„þjm”§iys¸ßžH1~§R Ë•Ö±ºÙ÷EæýPKKÖˆ»g[wÜÀˆq®Õ{¾ñÓl)‰D÷C†—êA°×f §YêddõÈSG†ƒwü=FSsJ<>‚”s¹«\z&¤lŒÅgâEþBßMbYß²Ù,“ú`käØbD)…j½ÆÀXr¿—õ!>O7n"ųé„áL€þ³Á "x·"ø¨}€>-°Üª‡‰ò€f!¹ñÚy„óµÒ+±"ÆsÉ`Š!xÆÊ%¨/7ýŠe(ãpÈc^ìÏðÊ\qz<³ñË–‚hSÿ…Ë–³ÊlkUdzHÅ Mð8Ø­ Q>øXÑ<¬ûKåÏ4£húG+ÂÝŸøþzݱÄ#4p¤Ü“lÉÀ¼<;¶€Ím£®¬6cæ£ý:*½¯ƒç–;Mµ¢lQ¯Û£^|E©Öôï´W¦içLî~”F¾v'ª!36'½þxûûs®{V15µÎÆGÏÇ·1Wê:{‡–ôx½«D“*Ú`„÷¬7› SIÒKueeà=;è™Ê¦:-d»Ýâ¨O¡'[³#%Ð=¯=)íBÊê>ÏI:¦ðM;*úØËù[È*ˆy¶7‡­Œ£ÈZ«=æ¬UNÖb%¿öê‹ÜƒeÉ ‡mumèÚʲË=‘Êi­6ðú3­8t¯^á@©Ï ¯ø» "C£æ§õ¹ýÙÈÐòpš×SÁCå^-qjoœ|Fh â}ê–Æ¢7˜œuŸÚU6ÅP=!Ô;ò ø;½¸Vø‘[c+,”D­¢ ]ÖÀ†O6ßoÕ{¥Ô_,Ù! š¬*Ù£J¢€cfòÛa6ßHɆ“’i¸Jؼ®a…›s‹x›Ü È\q{‚èqo˜‚b?1«m€¼::M³­ÏXAlF^¥­·“H’‰ÄžlÛ3±Y¿ÆAjZ7ª.®>Q–£µíYTMÐëä´'Ǭ%‚J/§mIñà™ªãÑË›QEr”?õ ârû4òsÞ÷àäFE›ZAï³ã# ¬ØøèYòå²2i€ï·™Ù†äç½].|˾$”uÆ‹^4°: 2òÒcD¡yC€µ1Ú¾ëXÉeäéXâÆRÛ„ìXè5`¥cê^ßÀHÙiO;wZÐVœ£+âôÏ‹l/–¥Ž8¥Ø3dÍTƒ—MñÛµwÄÀÔU£˜t(©Ìèƒ-òWé²ý®GÏ—;¯ÆÛM÷2¨;D'- Áѽß5­Û¾˜ð~é?Abù?' šÕ²ˆ*½þzK"¯Pàf350ÞÞwcÞ7sÖC#À Y(4¸«¦·/ïu—à ¤ÀV kN ¸bR»x´µ<·|A“å¯=lj.o±ŸèøvT§µ¬+ŽÖÅ…öÉ3Áóâqïc.½,£À{d]½{ Sc,?7ðÓ9VÀTe‘ìi²2û¶Ú—îã‰Ô í:)už0b¥Ùü„ê_w n>Ï’ÌlÍ›Ý"Jó²eÐ%+¸˜ÔK¤*NÞ0x É©{ œ“ÚGmFœd¥ïÆÅßWeRž*ù~ïªQâmOY¡Ýí;&Ñ#ˆ@ÕwÇC¥…¾î  ~ôe³¼X‹ÝÆ-=ô“[ÃC›c0[J™ŠÒöÁYͽޯ˜¦ÔIU}£¼%ù…Ýw>†wßkéwK{é ôH+a„‰wKâÊ^áˆãOÜ›’·1á‰_Ç"î²;÷T@(ç=Æ6R£–|¹¦™Èݨꡓ,æ»Ì£Žm˜MGCú(*ì¹ÛHb/³YÍ6où·V× ƒ(äè>cÁ€G7éKeõ’=ï§|NøGã=z:õ–øÒcü £Õósö¸„¼KìJ™“çÛß+áÆÉØ9x¸{Ðfý°(8éÝq?" }‡ž&˜õÙ6|âçÛùí!g‡¥Ìï³’ %b¤Mû]Kn«Ä³ÍÐcÇYó¹;ûìÔ®w͵ÂðîãÕÔ³ÕÊ*‹ÈI×3÷ô‚(n`–,Tw‹±/xb­ÊvF2H¾È¶b¾W)~¿gBz$ëVª±> oN«tθQ’0%ˆ7xòBËlgKü𦟤O¾*˜qòY\2ñ“_|^'ô\*pšÙqØð2,µõ¤Šëâõ È {2ò¦¿Q¶^Ÿ G¾ëò¼Cu%,;†ÁäOÃSͳU¼MÔ— éÃ^<Ù—–—=°©»MàkrY. ×ÕØÈ¿åÕQ²VH´ˆÁ ʹ½lö3å-׫$1·ðâ‡Ñ$>[CÜœ¬-ïVxHôsc¿@=÷Úã"ˆ“Ì,­cEÉË!<&éOd9ŒŸŽ Þ–•+úÏ<°y;\%üáçÿ%z™ž‡â-ú?ÎÿÈ‹‰Y’Pjòæ^”d“È+ä›ÒWÔ‡g/'I*í'†¬R“M·ßƒMTÊ8„ªy4gU°=}vi€£ñïOâs¹„þèžy –+¼²ôµMDð”dÚŒüHw•>¯„F%©RBVŠWÌïQ`;6Ž9©`t—%=UÕ׺LÈwäÚ Ñ.½³R®.E®ó,¶Z!æ¶Ö.Á—~G«¹“ó|%(%ðtÍL«Å°÷gâ6 Û±î§VRùêôÕv@Sð:’þ'!00'n™]B‰è ôÏnŽÙ¹„wÕI®³¹E­N ²'wÃ¥á'I_Ú‹»•ºŠ%ó‰ø“÷Ñ8`}#ËäßP¶+Ø$yÊL'«¶q›CˆàÁìhp©Ëø¥•ÀÀîSã:§ò;Mí®væUŒ¸5ýYWX}'kWëáˆd+f¹xjœíû~›ÀÈh颵´z€)£.®LG–EÖq-­Ž€cè³ñv8—ÉwïÙöTS@ÿ%öណÔûõìñF°÷”ñ•ÜTÖÍ| ¢Pž7Øï3²öi*zFgU{šÇÿÜû0z¨Ü¡aïB»³Ö¶-ûìÐþÈ^ *¬ OÆ^&Ò´ìâÜv•VÏ-´Êç¦ÌdXa×\¤¯(¾v]¶cÇ«I-e§ÇãÀÖ§\D¡Ð¯—•1Äœô{>‚1æ[ÏÌMrVdûÚ³B„²¬-ªvÓS½£V"f í\I„9W‘¹v­"8ü¢JÍÎòë E È´š°]Ö: ,[¹ëMì9]„{xezS(ó†w¸ýBÇBŽVïÈf Œy+ö¼(˜¼ÕŽT%»É±˜­Üaã=û¢¢\D®.Ó[3­(½š$Dnq^k2dOΟx}ëµÕhvüçç|¤ãøŠ…ÇÎNë#Û_]άOè? —8€âƒ_­ØÛ›ÞH¤iÝ=t'Çú*”yœÌž(52õ®éü RÛD­ §UFòH'U”‰ô¯J-{Üm¨,“!6ñ''Z½x˶êK¡¢Â£Àïml¬ m„/Ø#ˆ­E¨9–->Љ—xÈJÄÚR‡r}ËŽÉØÎ˜ž¸Ô`¦MÚpÈ~Ñ[“ñn[ÇZW]ì ³ùéÁÞLZ¨=Øñ8ï 0ôAåU~$±_Äô€xÌ€ù;…³…¨&Ë×½yÈà#óHv ²jù6%›ý.šº˜þ üÌÍËùª³UÕböÞD|_†±8frŠ´ÃÆå ŒžàP«”ÍšRót¸©éúߺºµ©Ñ F•ö›F^A <ˆær;qê¸õuM5šåt¬†«ãÈQtë:د­Ú‚éÉKwúÎb'p°üÜV)ÞypÂF©,ZßÓ½k^£n–Ým2ÏØ¼|F­ØñÞrå*w{Ý©•Ðb”§#c¯•·è@’ÏÏhmÇÚSAASú E¸¼F>Mçj¦×çë2¤ê'£¶ò}޵xc=¨ÄF²°Öž0Œ‘ôÀp¾Ô°ÈÂÍ<Š|£Þ56[Ìél]zþ¦Á5»Zât%ÜsËe! ñéÒ _4¥KÅ„4uØÁ—‹,¢IÌžÚwãb ?š†Tùõ5Ÿ™k§ÀÞìS»"ŸÖЭîn²~šÕË{r^æÆÿpuÏð ›S0©4È”SÛbjrA˜ýük,ÛÀÞ{(»È©-MG¡_æØÎ è¤wf¨ÅT~Oœ8š#¿sWãÓÍ=xÑ@ÜýáUR¤JWŸÀÝEâûäÝî ‰û°ÓåÏï|+>•(ʾé?ª kòL\ œ“Ó­Q©Ïã¤[“U>.r Ø_VYVõÍÜ tt|V#yhPØn$Ývuô‹O*ŠGå&u»bÚ( X‘5IîsÕeâ‡ô–J¾ïWU1uMÀÏ·z"5¶ÖÝÇÌC‚o\o¥½è¦¾sHåaaÂM|îçUW#kkÊ´QŽ‹7—,â”k+3™÷pgîwm!Hª@;»ñþÓúæë|LˆøÈ9ä£X®(¡ê¢F]J±kn°öîvÇyÐâi#…ΕÄRõò}}‹¼,КDvÈ~¯í rŸ+¨öx”í13–OªZVѰ}½tŒ•ï»R¡d_5…é’k‘j—zcãhßßჷæsÖ$Ç»ö]…ͱXt.ÛNIëׯLdÉÂѨÏÉd[¬0åÏ©OSª5LRpy–øÚÂ_Þaöó>7ŸÇŽtÒ'\¨n¨æòz.›1ÑÙòí…ñ …dçy¸váôЇvhtÈ.{@‘Þd¶‡¹&ÝÝýN“4†@U¹ ÿǸ˲„wÍ9Ò^RÐÇN5§_Q…ZŠ~­™~LöõG~ŒÜíœm],1=9ã—¾¬½@¬ìå‘Fçž 4ÍÓøXîã z©Ó$¡ja–†ï Œ©3µ›Ç¬=!+;[îaÅzùUO×DJ#(2Å¡’lx&û"BØÜ=pW¿¾Ì¼5§ÜÇ·t«¸JÆÌž¥;˜ØÓlq+ÉèeÆÊ*ˆ‹‚béŒq#µåäeHvçÉÒ0¥$ö]"Ý|)’°ÍçÀ°{÷uÚ_W@ê\p¾#Í%˜w>Ç÷•ÞbnaÊo8ìôEž½ºÆØæÀÑÇ—)=QìÊîu%ߘ1cOóXàØkâWXCß_S`|â ys†eBáVQ“˜ýPÃ*‹´îOüø@í#ŽgŸü®DªÜŠB µw»Ëä"I<‡¼&‡[œÛÓ¬ˆlÃËJZÊ? ¼ç×U‡ ÙÓMÔëùËŽáx€êd¤ÏE+T߉oåÔÓ[ÁåC‹A¨híŠÎéÆÞÜöGe–“­÷£äxZÊgŽÓ[Y}êt¸$>[©Äe˜sÙ©[);1v±n ÜoŽîŸù&¬¤¤NõÚ'÷‘qêÉxd¹T³£’~úqâsê$Œåú]wÊD“† v"§úæ“ÛŸ(3ŠýÙÝÕd•(2_ÉŠrn§…Xg ¦êN<«fšà’ò|y ùH;—¸Ït,å”¢ÝØµpâPŽâÌB²’ߪtÜR«}Rù£jR”.Äý[aÔ5‡ôû$Lá7~=‘‰¼‹3Y”±7-&NcJÖÄyP@ Û‹¯jCUÆ–n¡ã"'¼RX£ÓÃKG?©â5x<‰²'©eìåøèw~K}"–¿Oì NXM£³1WµÖaT]ÑRã<{{1 W…3v(ñ;§O•É ¶½‡7—î³X ×B®¢j Ö‡Cþ?4Ù»†‘XË GÇyMØñP nˆÑÝ•y1Zhlübt¨ŸÕöéÅÏŽZ<“²hÔ¼¾ÿÛ€t©Ÿz>·¥¶ÞÉÜiWÈSN~3wµ*’ÊF8¥§ ö l5fÑ:j¶–+.·0 Þ’¸4*qŠI­©¬|E­Åp«Ì°GWqz3XîË•^æò­ ½²ì‹±+žçöû9q»ª†d>Y†ëÄÆt¨ ê´¼nò±é£afqþ?}6¦ endstream endobj 627 0 obj << /Length1 2123 /Length2 15842 /Length3 0 /Length 17112 /Filter /FlateDecode >> stream xÚŒ÷Pœ[³Ç ãîî îîîÜ%¸ î îÁÝ5@àÜ-Hp×àîwÂeïýž7ûœï«º·¨‚ç×½Vwÿ×ê~f "SQg3w4J;:€˜Ø˜YùŠj¼VVfVVv** kð+•ÐÅÕÚÑÿ_~   èÝ&iz_¦èès³°qظùÙxøYY쬬|ÿ³ÐÑ… iânmPdÈ9:]¨$¼\¬-­@ïYþç@kF`ãããaü{;@ÌèbmfâP4Yíß3š™ØÔͬ ¯ÿ‚VÐ râgañðð`6±wevt±¦cxXƒ¬j@W ‹;Ðð—\€’‰=ðoaÌT +k×ÌêŽ  àÝ`gmtp}ßàæ`t¼ç¨Ë*”€ÿ,Vøg#à?G`cfûo¸ÿìþ+µÃß›MÌÌíL¼¬,Öv@€²´3ÈÄ0q0ÿk¡‰«ãû~wk;Ó÷nS˜¼ëû:W3k'+³«µÝ_ Yþ ó~ÈRæŽöö@+Â_õIZ»ÍÞOÝ‹åïkµupôpðùçÙÂÚÁÜâ/ ænN,šÖÎn@YÉÿ¬x7!ü±YA.VVV>6Ðô4³bù+¸†—ðoçßæ÷úý|œï€~ÖÀ÷?>®&î@ÈÅ èçóoÇÿ&66€¹µ` ´´v@øýÝ ´ø‡ßoÞÅÚ ÇúÞxlÖ¿~þûdðÞ[æŽv^–ÿ}¹,âb ŠºÒ  þ¯K\ÜÑàÃÄÁ `bçb°±ò°xÞüþwëÿTÁúg¯¬ƒ…#€ïŸbßOé vÿÏíÓþg0èÿ;–’ã{Ç´\Ÿ•‹ÕìýÛÿç6ÿ{Ëÿ¿îþ+ÊÿKƒÿßz¤ÝììþöÒþåþÿñšØ[ÛyýÇÿÞ¯n ÷ÞWt|Ÿ‡ÿ»TøÏ¸*Í­Ýìÿ¯Wdò>b–vÿ=DkWikO ¹Š5ÈÌêŸVùÇ®ù×€ÙY;U]­ÿz¡˜ØXYÿï}ªÌlß_®ïýø· ø>4ÿ;¥”ƒ™£ù_ÓÅÎÅ 0qq1ñBx¿âwâø°½¡9Ðóï°0;8‚Þ·Þåù,]þºOn.‹Ø_¦ˆû½…þ€EâñX$ÿ€Eê¿ôÞP,Òˆ À"ó‡Ø,þ€Eö½çSøCïùÿÐ{>¥?ôžOù¿ÄûžOå½gPûCïÔÿ'€E㽫ÕüCïtþK|ïÙMþлÏô½g7û/ýuO,æÿÂw½Àá{9ðÝiñ/üËiýß‹µ°û×Þw¶ü¾Woõ_ä|¯ÞÊËÉêý]ügÅ»í_áXßÔæ_ø®Éö_ø.êßÉÞUÙÿ«ÐwUÿŠüWáŽÿÂ÷Âþ”ò¾Öéý3ÃÁhúceûõŸ‘ÿ¯ù½(§÷Awü×™ý%Üù_ø.Ôå_ø®Êõ_øàO¸÷Q`yü»´w•nÿÂw•îÿÂw•ÿ:ÿ÷ÝžÿÂ÷’½þÆÿ5Vfn.ï2@¿öÞgîøïO0 Ðh†°¼àh&bSÒñðMŒÐƒioBh–jO;ƒŽÉgÙ¥Óí 6•®&ûÓ†ËXêðw´Õ)Ú[ÑŸ¤¯>'­ °ámɪíϾ/F‰jÓ{íKS8ƒ“_OÄêˆá‰˜4D÷}_}µ‚l![Á»å¨òœÝxQT 0<úe<ëÊWÆÂöT÷k¸å_Êg˜b5côƒJæ¨òMsæñÈa@LÄpôž¨s·w³_&ßHåüNc9Š|t7Ùãç½×*5Ø]{ð)ñuñˆ!o1Ʀ©}ÄÓäp}J‹6\ÆÒçq:Ç·ìSØìi½÷”Ô\Ž® ©©&ùiññX ±d£c6Ú>$Ù—%Ápæ\¬ÊmxÊ^ñ´šº2*'Y¿)ÛñÔ¡õ_[N×gtºr ì§~WIÌIoh©òax60öȺËEqôË=©0€¹BxZ=ó/o"ÍÄ>Èù°íb'ðžŒÖ3Q…Eeø9åM!“ðêÇx¬úƒ,«é:a{á¢@:!Œ¯J7¤S*Ž’™2vKu•ØxÉím­ø7­Á>r: «ÄâIC tTOˆ4ω¡…¡ÛEHyz·ÎÆ•ô‹|Ó¿öP7 ‚¨ìgêäY1êW&ÍPÉÞi{މ†Ó²¸ÓGüˆ®ÂÖíRL-´Iµe™W§\/I\¢“îž>Nf 8P÷l‡ß»Öf0ú±#á[¤•,iÕÁ£¶á"stP§m"¢Š˜c…gâJ•2]:·ñ’֨ǎÈHÈ*ÕËêßÕuV$¡õlOîbâ-胲{û®1k5 ñE/F†§-Ø£ZrG/yîï")=Ï4Áû:íÛâ:omŠÌ†m(Ýø[`Ôʱ–C£¬¥4ÛÐÚçó'оžvl7Í3~¤®ÍX #Jp\'äsþŠü8Ú×ޕض‡PÃkÓå/;»r$‘NåØ>ûR—¥ìÀKx¥fI‘& Ù‘6J˜;…ÆžH+Ç[F éõªáôÔZ|n‰‹¼4zIeç,=0ážq-M ?À!ƒ™Sþ  ³^Œ¡\¯×ß»vr¡LðàJ)ÕGu²‹È‹øèÀæöÕÉ\ï|ôÌζšÌNít×ý*0š3ÆÈ3£ãЈ„’FKï×3LòÝ×Ü{ùšg}Ûüޤ7ªs£º,idCÄ6H¡Â]°ÄC¬Ô¹œ¡0‰0‹Î *¦Å•æîz5áŽí(UHˆ TèÍè~ÁÖp —†¼ÍsïÂýÝdÉéÐ ZÌ; _Í1?œÔ$˜ˆT`h×­%’úuïÏCbÓ;VòЩoÎÊà 0ú]XbcŸ¦+afúÇ“oãRC+H¿x*´uEGÎø» “·MOÿ<@Çâ›b.m&É"ŒþÁâø>˜+KI¨W°ú‘ñCXFQ×€ìOaö¬e$º“¼—¶²jÜïhÏîîâûäPX;i­¨”; )eO¹°'iûâ+:|áNÈ|¢ù©ðhÞ¦àÄÑ?Ò|vÜ`û£CÍ é÷JG"?M÷6~€ÙiUþö½Ÿ@ýÚ?Í„^@ds"f±Íר¥õbz“_Á ¡ñ¼b^gƒÇIv¤ÕÑ–± ¬»u‰ÒuŸÓejÏ„A‰°"èB¬iÈ|…yt[±kÀô?:\Žø¦Çå¢îç §qáno#±°WaªØÁo™»uÖÛ~߯¥|‚e=±ü³•¤ŠÂwÚËþž‰sœ‰qô2Ñ"TúÎSû %¶³¢³1ÖɵE‡,–Û™)>D•æó5 þç9ÛAÆë6WÏáFYõÂt¨ÏýÙZoä†g6<{ÙR#îZ0™™´P†çòwL¶"1—ÿ²f“˜·Ì}èæ·œàÄ­pá8+ãÝ4áéë*!¶øŸì“‹‰©\?Õ’1!móê|gp¢æ¼³ÉÄÞÅoºS6ì`«-Òpr• 5LOÀêï‡%ÉZA¾ñ¤ÌhшìlÀ¿Úqa{ŸnK ‘¾uÐbâÂu>Î&/«J¹YPy~?¤µ'‡G¤5uqþèŒïn0QñØòÇr?ÞW'ž¼ä‚*þZ¥eU1lsðŽ³°ùù©—A¿Tmi}±§¾Ý¨² Þóš$k=QÑ8þt'×d#«<-±%¶âR‰¿Î/§ÛJµ¤–˧<'-ÁBœeÜü±b£n€M=Âv*í<5F?tL¿2¬“Eo]n~¥n¡”‚™îã¬K_C)úcÓêÁÁޏÅç•\¾_ò¦üm ~´¢ñ1—/ëMÇÓ ¨Šd×kÄ#š‚®K¤Ù_ÖÅR$fÖF?… V&Ö«ÏI, 4ëÓCÊùv–ÿÅu[¹Û£PÓ»,D¦ÅŌؕãç.¿õLŒSäüiW=’žFíI(%¿k$ n䤬ńwޏŒöš%(t¹G,@¯û¥=6d½7/ MÆ1x ·(É(Fy ˜¼Î˜{<>C}¿š¾ümÔï}Y(Áp²|«ü¤y5Ò“‘Í,TÆŒö8õÖ¹§hûê›Û®l`éŠÂv×ãkû …OºÛó_p`N@r9ØÎ?2{aånróSl݆Ľê(Ê¿•±}8U091Qˆ¤ìEff]ßî "j›’~3 SE_´±p€u² BÛUe Lè'¬ÆÜñò3úDÔÕ ½BÊ¡J³ëiWK¶ùHð¬¶óõÞÒÈ®çÞOí=S°ÝL²Ù¤óO;0ÜBË0.L2¦bïaعþæèXû$-û¦ña3þQ¨qØ]–{vWêIÙžÕ,³É¾¸|X|d•—¢ø£Y§º›­—;9W튤7ÂBÉ*! 'ÁðýÆXˆª/2õBiÛPÏls›ž‡-õlDz\^§ýòµÞR^ò•ï„q6&×îÆŸ\ÓPl+ÉÐíüÂ,kÊüÎË«]ü^#"‡­nŸ£U±fhÈ’²VËdÙi1°RÈßP®´rÞš÷;8ùiÃáFõw4¾~$…uì®ÏkÙLëSjÙDPü2„t†|DómĨ‰)KƒÊ^BßÝi‹ø¡œ«©&Óh_ýÙMLi÷{;SÕy±"Z³£J…ŒN*wÉëv_-,sdwnô¦Šg®ˆÏ.ÌJzMÕ!)œ* #H­1pš/ôú!ø%¢D @ï =|Ãj÷Ä6•?g9‡èˆz6Ü;7Ô¾‡ÒÓâ©öTõbSœKÉY°p«±— Ù|^ÿÒ0ç !:—%KmîÛ–ÊðþB35 nS*¥ÍQü´E¿ÍÚ_Â\Ä F® lËT:O³@£5ã$­sˆ,ÆfùwÃB/`b~%tMø–ӯ৕ÍÃôŒòtä> Ç»¾f»µZvI6Ô÷eäÌÏ Ä£{åŒñ#»á(×À,­ø„lÁÆ¿ÕdØøbPiJãéÊäúîÀJ0›×v=îúLVÄXG§„ôÙ~yemî˜3›t¯ªEÔæ@{t*Ÿ~ê¯cÑïŸH!~îÑD5ÆdICMÕ¿RµÔÒ"YÈyGŽí’ ~n I­¯ƒƒ¸hFV4°Ç‡™„tàü.8ÿˆ²¦Û’óªK<;mjÞ¯É7˲ã›3«5Ù©a„³FM@iô¹'Tˆ-óÙsBfQfËóÇ! D$y]Sqôý­#ti½ #}bl îÒê2ÅâÇKÇEþ ê‰5¼ ¡š"·3¼[ùNãòo£nßã N Yî²ÝžÆU½˜ê]´Êíó–¤â]ðГS“NLäTb<ÄRS^úÈ<žÇ‹Ûu¢}é+§ Ž öuSDÁkƒ}èéËÕ¿ËEQW‡“*DQp¼°=d~èŸVÊ%Œ¥5G›QϊỎÞ6¤]~ šžŒÆIoJ5Ëþ°fÝ™‹øÃé& ¼ ¼«óœœ˜þöw)¤7­mîDßs9d¦ñy-:L{ùŒMš°DT:½ÄpVé†,FN–)èÙ%ÜÂ,]Û¹ë(¢'kM*èl¾5[øÑãü-«¡a›m0˜A´|7ØØ¯xÆÁ¶¿þtVþ3òËk›+í3¸TUêC˜bò™ÿ7ª=ÇŠø1fŸAµ$dú*É*|Ɖú.Íã]Œe•ÁÞpÂb˜iþ±úµ (x=Û_>ÆÁÚ£/‹m{È„Ü&ԓѸ8G ßîäÒ8*¼¿|±’ ½ý•‚ºV„Ä"qÐï=,n`ï…¹ž·~‡ÇpoTˆýÌ’•‹¦‰÷a³«£´øeOQ¥ÚBÂEjnÎJàÆÁPNº aT~«;‹2=çËÖ-Þo °Ú´•‡¬Aò­mÚ¯+z-¨ãøÚ‡þ&áK¬²á0ײ@q÷Æà\¿ìhbL¦=Ó §è5ÄìÊH¼ëŒ^7;XG$|ŒQ¼Ä²iZC¡õ~@ûç†á˜‡ŠŸèn~›9_bª/bÎmì:°RR$…† sáü"—[WéÙ¢8D¶ùʆ]¸f.j’Õ½õM5‡õ O­Uºu{T¸½ãšÕóf>ZGot~e½ñ¬öMиëÇŸ¥˜Z‰YV!ª1¸ÉïH\·pÛ__q¦ñO˜úñ„dMÝßî;~ßtÀ«¿aã+ÛUFDìõ›~•UªÁœZ£[²ÚزŠñØýBãñaYAœ"JM†uÈ^U\èëµ+¨º‰&W?¼3d•÷wŸ{]ŸYj é#€Ê”ú-ö¯À/ŸšÌ(¤MRcˆ$2w_³™aª2 ½v¾ÈgÛ™[â”9`tÐÙP‡ÝUzõU‡B\»ú#EµaCàâoD‘ìœÃ俤)¾®ËgW)¼Iыٗ­z ¬™1³bü"HaÑîIõ›dC‹3/Õëù¨[ .–".ýZݵ%.”a öƦœªsphkáyñ°ÏÅyï‹Ü·œ î„ºOßP{ƒvQFîñ÷`ï?œ¦W¯Â «û¦ÞÒ˜`“ñèÝ-èR2‹»Ëósúø×ÐH¥àÚíÞo¬=Šó!q[~rPG¥ö;“VøÌåÂæ§s˜Ó."0ùáGͱŠ2½'•Ñì8TªW$&3 ˆ­<øbÄo=èV`|B_=ÃN^J´r„ fà«*ùìîúõ•–äuYdet\Ûgì°™ýV¯3²Vœcæ2ÒæÔcÚG¾ºÕísx²’Vøø4=ðþèka gÇmó8ƒeá!o&ºŠ·Š&sâ‡bKm;_‡@8…ù:øËéx©3ŸõýíhßPfB’F±Z·.Mì%¸=ïpk–‹^ÎeªÅ»šã¿Ë+ŽEæ¼(?Çdo^Ö sgƒOú´D¬Õ¸¼BDÖ2Ýóú[t‹Ò4œ3ôØ{ep튒ð;åÎ`\Á9·k{#°oÂåÿöǧoP Çäý~‚œø†xÿóÖñ¤·û#C¹üàÊç ø(é¾P¨w?K³·šm`À£7c®]ÇwêDÃ8¤ ¬Ø7¯ç~ê–J}„üðw†Bwc̶7 ö'HÙê<”Sÿ/7–Á™I®Bä´N{ª%wyäjª=G%êÎlž‘cÅŒGlÃz2Ÿº <©IÇSÑl¿d´qI½”Ò ½xÇIÛ§?eTE^¬ÚkôùL~²Êd è×JÌ $©ÁxuÏ)÷ðçÛNàáæ pÄ¿èUyóŸ+@ª8¬ýb'°}¿V¿ö{”mȸþÆKV4+*ŽÌâ¢Y!ì¦DŠ»p]0x‚amÇ#;/‹Å(¨ˆAGé:LkBá¨GCVäãÐ~6¾›-7é Ë¦ei›IJ8<ÈYèí@Q¨æ·È“Û§¿‰Ì[™øBZØ×ÑÂùÌo¯¦¼K¾Ä¦[±·ûõÄ9³ƒ›)cÍ+¤¾ø[4ʦ¯†“rטN”åͯÛüìÑè~Ž®8…Ø.GaÃÀWÄ=œ¢~Žã ˆ¶ µ¢ûºòFÑØ-œ>It$àjW9SqËúé·ê)& AÁýÓ&XÞæ²”ÄH~mW¿ZøÙbtýˆë£Eßb¹‚³A¯rÔÀ ”~FO‹áûÖeDÑâl°Œ×zO3‹þü>“ÒŒ»,1d^Ûã1vZ=¶ ꦀ¶jØK·]ìázèå~ïþTmäÇþ Mª$‚7õ_j ¶*æQÆÜÞ6Šp¯Ñ¯*yÏýYIÅØ U½©õ?ô)ÏxÍ©À30UèŠ^» ÚóœÑê)që?gï¡[Ùéê!Û0E]÷æ¹<=N»’ÊRZCŒrøÁHSõH6öo…ú‹£•®¸,n~…†‡@u¹±ž ¾yȾT‚Ø¿ËEwH©Bñê rŸ^•†0Ó쵨ô5…}ȸ}m߀p¢áøªÔXO’PŸBÿ=Z¾í÷æ—Ô=5í#× T(CÌá&¨ D'ÓË͉4/uðÙjÆ÷sâ±{ÿܘiô"K`tnšÏóÞæ£¤ŸÀp¡6L$DcÅ­\ãEí—ÀöPS¡¨IËPÑIÎzgjË—sPd’t_!ÑØà2 rü0–ô³ð±JeXT{F&…üflBWvê¡,.Ç zRÞ×°iê ¢ ´õ$ÔvF0T&âkó«cr­ÉPe¹é©¥W5Ä ¨¿Ëàa–ú›q釾–+Ú LÆG÷:£©ÆÃÝDiUÌŠq˯í¹;HY¾éºN)jé Ç]©R¬ø œÀ˜->ÕT`m4Üî¹ »¾*bpÒãF¬6¡øT}™'ƒÃäÔ «×c¨?k±À* Ä]s—JÔX5b¢…j„Z^&E­È¸Î$2}›Ü„І¡ÍÄzÐÌØ…S~êÞ ºÒ9ðy)Ø1<GÓ²ŠRL²êä'ÐZÂþÀÄKHb­íõTr«Qi€S6ÜN-ê…XXüí‘9£ØÒ˜Vƒäbô©Hþf0Ž­)åÈiE/œ7£±Dà7ÔªúSúbE0KþŽÊõ5ÌõcØ%wªî¤âÅ}]ßÔê}ªÌpíGξ{!¢€†­Ä{Šž3ÑýùÈ¡Ü%.JD¹« 8¤~Ú’® æÞï÷ïñŒð¯úW”Š:s)÷¸îXoˆ9Äèßá:§ø‰úe+ ý~MݘÛ1‚ëÑq?W½¯ã'çäsÜvPmþtS)×â4 ܰᰞìڨϻK×ã=zsw~ÿ¦Î¤â§ÄGéø˜Ó•«_æ!‘Ø}wúÛÖ™KïÌßL†ýÊld$‚þSó”‰lÛ©2Z/R“q0ž ψÁiN¡‚p1Ç2s_Gëq9É”\¹i!kZ!ò!Xçv¡„V-1³ÖÁ°))ÆŸÌ0Çg-]ÊLTø¨åäCÀÜw:‰ÿãÛ¯þE,îqD+ªþª2À{;v„õÜ‹ûÀñ`š4ö}°[*±7½¶Jk!÷[.ÞùŠ$lŽ©#éS´Þ°¡"žÓvޝ÷žüýÄßs¡6(Çt]8œõ’§ùÚ4cÓ ù*Ðل߬ øèdåŸ Ѭ~L#œçV3LëïHÌ— ß¼²Ù5¬ÏqøO¦M ·!éF±£ Üó²*!ƒÇZÊ^1þçpk9/”cc§Áì6¥™÷¢`<^8ëF”$6©å¢¸«“ ,óëÑdÒ¥ =·ZŸnðŠHúQ Ñä¾e!1~ó´Ãf ¬ª¦ž|xˆ´g½±6WÂ3÷¹lv-{@t'T”Xü8­eýJ‘ñ¬IÆ5èºV=#2}¤aRô£ÆFFlZ}ºC;YßÊÁ£Þ£ýV}úm±,W’rª”Ü­«;¸Æm¤"Úâ¥TG – „ÊxS+ñç"®P‹xô¤SÞaºÚØ ‚Ü“_²¨_×µ”,†‹Onqæ…NKZ®Ãܶv•íGCF¯w3³óÀ˜R0iyÞö£Ùªù ¸´ïlº&¸ÞÖ:#[XX4`Šõû93Îvße#F-þµŸ¤T(åw®7kFäÏ겸‡ö»‹DWòDI.Ó­¥ÖeSÞ>}†ôý„Ïæ¿×W¦]c÷[lÊ»KæÓ/Žæùc+8;³x8uÄ=úÏi¥ Á²F¡f±ºv2Ÿ‡J2By=2ödÑSº"Énr6”„šS.Eo3UW☱ ¥3‹_é¶·.9•sÀ~|÷ìOªñ†²œ¯];~$u¹×—Ù<ÖZ˜lu|)Iö±?ëm¨ÂêãGè˜`ÿÅ 5™«ºÔP”›Ò…’Å?JÀu4Lu¡¨áÊÒ1íá¨òÕt(’ Ïm¡‘/@GØ?¸I"µãx&b̼[º%:÷þK¥36"…ˆ¹&å$Æ8±/vÞ:RÂï<¡×$ÁOš¸È±ÜݾàÜ¿Í-wy:O)yEHàÛ‰Eq{¬ðfëÉ<{¶ºЩM–Ø<¿y»Îºä[ZˤW?NðXûÏŸ!á§ ÖœCä­…æùÂÔ*‚š¶U´ü¢µ2’2è:°µzR2½.Tª °R›IÇZÁœ\¾: ™cP cíy¹}2EˆÀùàŠ7Öú¼Ÿ˜-Ãzˆvz›×.$`,*+‘Ïú6²¹áZêëN…k¥¬üݽlÅÏ©ÛA#VBKG¯„Ú3uÌQ•ÉÄ!x¢4ÒÓ@3pÃþ]u2-ñƒÈ'µ²ë·ûuY²O$N‡>ç\.ü³šà{¿6¦EõìÚ6².IˆôM™>Äs8?.ólÕ@Ìœ†°å8Þu÷|å#_»LvK^—7 Äi ÁJ="?Tà™wô˜ÂÔ­‹(,† /ªÊS­¢ ‚• ŒÍt£×¯‹ëw'Cäqš{ÆL —¹¬h§Æaÿ¹s…ioÜ8íHµ%ÔU‰_²6çzë}DÏÓuñ fªÈ$ÙÜÞ¡šÊR±¦¬¼yÕŽ€ü…‚£<=²ßCÏëwzuø‘ ž‡§÷j3r}­“SF“L ¿&zAêä‰Âò'?ŸzA•¬¼ÅÅ]·ñZƒâЇݤN2ÿ¡°ý†ðMV×™ˆ<â-u·lÚŽÜ¿U¤((ŽNæó» 1„Fu·ö:ƒ }ÙS±ú©ù4ã“w¤´nziË;2+€$,Vº–V·Ú ­»ýÔî¿…*¤c¤®ðžíõ!o`„^¼<}Æ_³ O­=û$ÿšç^"±!ôEžXOlzLfFflöJlÞ{Iäp!ßÂwÁíSš¢Å3 ê1¼ãO›Ìf“*Ástø‡غŠSïDf’g®¼A¨ù×Ókì¥z$ º6D¾1brZyy)÷ aÔÔß'íÅS àA)[N %¸‡,I¹¸Ê;’ÐóúÖüyÑAB®1ð“áíÄ ÊZáÉða(mé¯(\.¾Æøœ|ïaÚOTxÄןÀjÊú0†éPÚb™a‡b¤u!aÊz*^æ £ìOI’mÝ[0)>cÌ<”y¢ráiømî­6ü”wD½FÖŠz¦ƒêähàœK:1c;ã-ö9ÔØ1¶9%Äa"+t„Yºüj²m¡³ýzB‰»@&?aÆ,>ùp`òÐQÏHˆŽºÔÛS”Rƒ@‹MFì•Cþ%‰°vÓ[®=ZXÿ!R›ð÷i»^(#jF*2Ã1¤…¹îc¼â}ל©þñQ!U6±üþ˜Wÿ0Ð<4]y¯¸–ù|~+BÒ±ª±˜I®…£î&ƒÙ[ªÛM:E}ÔP‡íé^†kÒmEÛˆ”SwI Kô 2v ÊÁ^¦þ›Uÿ ø+>.ŸÕ¬×ýЇ¨÷š+ñªôk͵„oÌ17„L¯ÿU$µ¿ï©(J¬iÆoÝ †v¼CÖˆã€Ô²z¡* Ácþxü‰VNV›â.…‚”Y뵊;ÔÞMìt6¹'ŠŒß“Èc‰äïÿ­J•ív¢Ëã4&«àncиëxÀëø˜žU«ÁÀ×§vfñgÇš×ÛЊÛtò ƒ1’OýT6ÿÞ+󆲤û†¨«ø±Þ莃‰½R±‹>Hütš~H03@Qµç£œœ0¯žD›“ˆ-G\Ä ¦iFûŠ u<èËTêò6b·ãȧÜe&Œyv2kÌÔ§ªŸ&ˆ%ÑS[Û Ii>®HƒÖX„u¿]¨î3Yø8o&°fTEj©À“dÓ ],VbäCZÀ°ïÉyNò¿LÐ ×PùŸEØçgzùÚ-É@Ö2}ƒ™ ¨}twPj6†û=üTËØa=ùæøÔx þ²/ÜNZ+òqçX«¿Oî±Ur±—¡%à3½ÃYdRð N³<9sš»¶ÞBP&ZfÓm£[¾ï§Â êó—¨mk!Q —'yáv§Ê1«hé×j É,š…Ô×§zÈ á©á}þˆC“ûâûyQv_Âäž-Yדëe³èLùnÎY§J?5ªàz é´*Ú+ÇßÓð/îäÅ’â.Ø»jÔH; !ãêMáºN¼¦&ŸMêT¹#_Qhšò¥?b"XgA/8´L$ÊD˜ <¥˜;Új1â‡çm—ÇË™+^Š”v6•×Óe]ÌO?wV‘)O~`Ó4² C¾,(Q¥<ÂWT©þ´·4K^³‹üÚ®“åϵ CEú *ˆÕ}éK¸Ô‡Mˆq5—¢·®XJˆã~Ýæ‰&ØMµs¼aãjz[.ò2ÿçDœVœ”IÛZÃØT4PŠèY©ØÖî”ö÷NHƒ_¦úÈEèây¥TèùF@ TYׯ¢Ÿ ”F›ÀqâO«57{©é.°›R8£P³Óƒê¯XÍpé¿ÒÁ !ÏU)À3Þ/mÒC¥Þ êjz~Žrq`›±LÝÞvfCeÙjäcq!ãp™;HN4f„ÂŦjÏ  ‚{žH£ˆe7K(éLöÚ㘯5!ÉÔðC°p3U?p€©ò1GûiAº÷* ïfZ° »$ò‡E‡d•Ïú»Ÿh©Ú4iàÛâSûѾîoR)Ä-ØL~­qº¡˜~A9åeý->ÔÖŽÌÕ2úÊä³ „â÷©Ë›8¡ø¬LhOzÅ áfœ›ŠÍÉGw—g' ½¨3uMº|ìž8ÞÛh=Ûß4¯îU)ù_ÇŸ/¾ >&;Û„¯«í_ײ'"è°Ò}|u&E™òîtñ—qnì‰ãÔµÇÄÐ=è(òЩ˜æóǬ+Þbv²­7d]äÕ7ÀÌ ~ò¸Þ]DÒ5æ¡zÏâ¯g3àb¹ˆÈr‘Ôn¢wéÀ’vFEˆ ‘áë1¸•15Ë!o¯Å­J„ØŒ çRõIeÌF?$•®ˆŠÎ•:Ö¡ÌŠ³…jov²ƒ ®Û²â½!×€tM²ÍõAò•ssš’Q6[SI[?è*–SxŸˆV8d` +7ª/t0a›ƒ6ÁB¸à‚ÀØU­ó)Çót1³¾ü`ÿ j©qfáZŒ·§˜û»5²öwß3•çâ ÏÎÕô_óæ‚ÝQÇ”*݃šè¥ƒ9àx ùu/T¨ÐcŸsC_DUŒ²Ô;ZÚ;R\ö!ŸÇ»tf V­’´)I¥çæì„= =ñ CŒê£©e'Jèô\^{ö*5îž®|dÁ¤H½]æ=åomÙ¾1“—ÕÿT£ÇDÒu1ÛyÔðŒ ñõËdÌ´‰ý÷«W·†0òS¯ ªÞ ¹‹~78<¸5.o|Œ|Wè·ž‘r¾¨{ôQŸ_íëÙŒÓÅÅ×(l4 ôÈv¦.PP#Ì]À“’–ZÙ>²q0Ô íGÿ5¾ßx8@©õ|Ñ ÆÁB©;\*žNºïå’®âeaÈçt}ÔÀ|‰-öµ^5Z‚K£Bñ¾bæ [ãQ›ynK‚«Íí&!ªã26 ™Û}{™ÍXM(@b†XÓc” $ïnèœCô[TrË$-ôo÷=yÛ©ü|ˆ€OÞÌ+¯szÕ/ÆBÈãîþY 'ÅÏ9";'iÅuë,UÙÃÒ«—U5ˆ÷cs¼Z àánÇiŒbš“Ëq]—ûÿøÂF ŸXít/sš›ç _­ð‚pÜÐÓ-/uH5-l×WìB/Ý·ÁïlWw·N(æà$><"UåTŒ+ÁÐ ‹/ƒo–iþ-+RÞ-jt—œÍ•¼‘Jàºí ö¡{Z²c„;/ã¹Ê{XBXâ<Yˆ‰ ©¹, =Æ»¼( •ؤIzɇ؎ÏHûdðcu?#›VŠFš¤jWd§]U ÅùŽ©C„BƒÏè_ï¶¡éi}®+ƒ?Ÿ¤§è“ºmÀ¹Ÿ.ãT‡Æ¯ß"ÁnÌBè'n?|ê>©· ļëõ3gâÎÄ ¬—¯Ë*º T ÍÓ‰¶û]Üi_Ž|=Uв2Ù4Öab$Ðé ®-ß…„í"¿îÐþr!ÙûóW¡ÕÐÀè>¦µ!')ÿo1Ðó®ø¢f§2‡°]üò+ñðY¯€OÜìã×UÕ‘o’.ÚΞõç,gñd'_O8XJNúþnS:ÄijÍtÖn…£+`†UÑR×™£X´…Ü´ä©Ûs!äƒvŸÑêÆ·û2äµµñÉþoÐò¤p‚Ž{6j® î÷¿Oq.ÕQâù¤²»®UZú\Um¹žË»4FP2©X)\ó}}òEA_ÙÛÑ[MŽKñQÿæö¸eÈÔjÃÜ žl^@W;9à hˆ.À0u ÉÔ’3 9ì@ªši;‡¼ñ’ñø<審GD?»@Û(×yï° ~÷¢“GÙ…`ïÒJ¸:rð›!ŸOñjô_] ¦]ÊÆÊ×®¸k/# d :7Õr´¤¸bˆyö ”:·îÏK›|ByÝ9Ñ’–¿±ø˜ª‚œò5X. d‡+Qk¥SÉ µÉ.'¾067NÒ®td\‰ÖbÅ/rP²iúõBŒ? ¤Â7}Ã7ŒéD‹Ôú¬½Æ¡£VD,’ö=r€G”æ'"Þe/¼>1f‚9ìz|ÄÙJŸhÚbÓpÃ`Ÿr:f9ÙM€^ß­køÓÕC·Rî8ü²Ôz§}šy‹;q0¸oM?ÚÜH‰1œÖ¯Çƒ™8dÂEŒä®I«"opßDâ'˶å:Ï»ž؛²æ<…£UC:—¯J—0—x‰‹ÆK´æXU±¢<Aj=§BøqecR›;$–H9OWÕ×’àh'ÙPæZwï †-ÛíjNw¾V`ÌÖ¢âKs “aÙe™×Œ»¯Mr|¶"ž}™4±¢Šÿ €øýW5³ŸÜ4ïŠ*¤²»t/Ð6Œ7å´üKƒ˜šÎ§—¤Ü ‰NçzË"ÏsÿñÊèÞlƒ#ËÈJ¾SëÅ}þÂÝx¸T^i³õïëXw?K²Àõù§·‘½‚§¸Ê dÈØªÕFäÜ“m÷ ¡„œÑ$Ôˆp×ÏshšŸÐlܼr<)ÏXd«Í¬²¬Áô…ØÞ'€Ô†§YdKšO¥üˆŽà¤½´Ä~‰ ä=Ȇ'k˜qã¡¢ÕÀœ€ º•®Í¥ÓÝ,i£Fé,©«%A›¼|ö=º•æ‘NïL=)cž~Ÿ7i˜Za¿ÛàCƈ”§Ï7ƒœóÎÌ­CØ {´T«°œœâ™–©ôE öéŒwìýtM#ÓÖûB9{¡)›BµÕѤ‰±óžD#](œ %ƒ› )uÕ,µ®òê6Ê}%Xšò¹uÆo­}ø¸øVÇi0o±¢3lðH²eçÑŠjª®‘áAʰ6˜ÉÉŠ[óÈ–†d l,PÈd-ièš“ SŒzä3`LCÌsq¶Ý(ÕaÜk#nød$ ©Ï-‚Ý#T’rϨøK­ZqäK}Áªeµ*º¯¶Óß[2(‡aÝ9€‰Q@/ªXÕQ7M9{ ‰Oék7Aº™ ‚Ø#bZÄrœ'ÒŒåçåÁ¤úaDjkø”òÍÄeo'Íʼ.þ`z“B)ÉUc48;ê÷·`Æ1!o•EP¿@ófØèÅ;deå„ăúüVòb)o[ùdDª6³`mÄ’«Ø\ñ~®yÀϯqKâ¾ •”È=ÛsIùQú+¹í2ºҪ¹U6™S³\ú=»¹ì½ž ¹ dZÉÑñ°õ4Z¸H…i%¸K›ŽÊ G+Ø+Úc’xÃmÙ´_¨?‰³ `#í¿cQaÅÐxfŽÝ0¬„Ö[·r2™†á„Œ‘öÆz\¾5VÎ'ÀÖNcÊÐið ­ÝM®¶¦§“séÔØ¾²b*KJDu³Èxök†íŠx)£Ç]‹°ÆÆÓ¡4Ïq?,ÅP"ø›ÑPa™Üf6Ö•r @á±=ðÛïÌXµËF»‡±_C—3J0½#™¥J 6aWµšÛ}þ̃N×_iã­ú]!–† ö×2©mÔä &Z(Kþž‘ï/ ~¨*»y³=M æ‚g0´~]ÿ¢ØEÙyù¸ï'íŒWV)#Ö4Š{Oj8¡ë~æQš\6m5@{z¡jêbqpiðÂÕìÔ}zf€`Ëc’–P-xc#"?²‰ÀxíuÖ¶,¼­…°—E¶,¡LžY̵`Ãu&‡_Ö"yô/Á«Ú×Pƒ÷«¹ž ˜dTƨ!f¼ùóþyúêéödäXå]sj ¼´Âl—YßW|s+O³ò›NÊ<—¶çÍ “Ïvn bÕcÃC¦ä,¥w¶ØâVøÄ#‰*t¼À¥„‚Ù_UÜzi%YwÕê¤J´oÊ–—tÀc»¢Þ‹îë†ð+g2D9£íU˜Ë‘ªWÉïJ˜äûãAà&ʱÉÚ"Uý^R½}Ô­f+9·ð[ö'MŸ»~‘²øÛšJïøñÕ}4ýu‰.9ˆ¸sò–ú¾¯ñP$P!Q"¢j¢F4º4sçb{ÆæV¹”öÀ•ç?¶ ¢¬ÖXxÌ–‚w“q28N¸tOß: ‰þqrq,Ú[ù—CŸ»Æ)I6ÿ´Å÷©š; ÍŠ¢ ýS†gÙ@¿‹DÚ:~ä;dz¡¨¸.„ÔÍ=š4Òí- |Ή^ÕÅ.>ý!0£ag-ø5À£‘mvrd$á‘ÂÕïÑ'«§© ]l-¡8Y@÷Jzf´,õÚ$:P7󥮑z9%/÷FÂ3Ý…[¦í°üKO¨IÇÉÐlËæÜDbIÝÃhÛj"M7)GIÃsÜÜx1›òl3Ñà¹wE’ˆd“ż˜›¤sèwljÇDÏ'|Yñ}¡ ,•{9øG‡Cw/i¦ÃÇð6z—e”Êz’¼oÿOQ®þì›Ù»ÍHÜ37æÁÃ>œJ´?‘Ä(‰Ãû]qFª°_YþÊJ…ÓA¹]äßp„BJ¥ð˜°œMunï‘ãij×ÔÓ!ÏÏÁº ²ìî¤ÄccÉ})´_cCž 8çEEI³w–©Ï>-9¦¾ö:›Rt³&¦_wÚ„KäqäZòT`½“¯mUýóô`ˆøòSÛ—lØ/ó46æå8ûéz’î Ä„\« æ‚ÛëÔ“’C`¿mt9Úô:BíÙÌW¨ ¶ûÛSa>“399òw©mu®²­=îá±y¯ù¾ž JÇIÕÿYE¼:«‚Ú; 7õŽ$ __æÿ80| =É´ÀH5Ñ]v¶ž ÷Øjò1Èæ%$áÅ-ë'ßM™ïîÐ0&Š9ÕàËÿ&áìæá/þ³K쑆)&²l² endstream endobj 629 0 obj << /Length1 1629 /Length2 7538 /Length3 0 /Length 8615 /Filter /FlateDecode >> stream xÚ¸T”[6LII§ô€tw7RÒÝ9 00Ì 34H§4‚” H#Ò­¤t‰€”4ÒÒòÏ{ÞóþÿZß·f­™g_÷u×Þ×½gÖ°0êð(8ÀìA*0(‚G€—_ ¤e`&ÀàçâåçÄea1#  ¿q\c ƒJþCÉd‡@bìH¢ xì D%Ä$ùù‚üüa’€Gv^`€/à1 ‚ã²(ÁÜ}=ÀNÎdž¿ì@€€„„÷ow€‚È ´ƒ´ìÎ 7dF `‚Aß…`—vF Ü%ùø¼½½yíÜà¼0'Yn€7á ÐÁA^ À¯–Úvn ?­ñâ² Áð¿ 0G„·€ `  GºxB@dv€º&@Çý‹¬ùðgs¼ÿ ÷ÇûW 0ô·³ss·ƒú‚¡NG0ÐQÑäEø ¸vP‡_D;†ô·ó²Cì쑄ߥÛTôvÈÿôz€Ýp^8ò«G¾_aÛ¬ uP‚¹¹ 8î¯ú=@@ä¾ûòý9\W(Ìêÿ÷Ê upüÕ†ƒ§;ŸüĤþè áþƒ9~ QQè ätæû•ÀÐ×ôÛøFöèïs8"Û‚AÈ\¸€ððúÿ·áß+\€ˆØƒœÀPÜ¢#aã_käù{€}üHù ø½þód…T˜ ñý‡þûˆùTUM)rýiù?FEE˜ÀŸGPÀ#!ʈ‰‰ÿG×ü§ŽÿòU‡:•‹Ü§¿Köú£ö?Âøw,mR¹ û?B·äá"ßþŸåþÛåÿOå¿¢ü_…þ¿©xB ¿íìþ?v;70Ä÷©\Or ´`ÈY€þ/Õô×èjÀžnÿkUGØ!§Aê„T4€0/¿ð_8®ö9è‚@ç¿TónôkÞ `(Hÿºa^üüÿcCÐy‹À‘Òüm!gèßy•¡@˜Ã¯aØyxØùâ"Ϲø §Òäó[Ì>^( t { 8Âwdf˜òÖùÃዲ^;‡ßBú(ŽÄ@ŽÜÓþßµ‰ø<¡à_jþCÿמ==< ~‹¹á¯ßf ˆ;÷” wyÞvY­@ãͳ1‚¹¼Ò“dÖ-‚`yå﬉•¥:ùDÑÖ¡òÁÐ ÝٲȉÏ4œ—£>–rB–ÒÕò(ʽkŠG<ù?N>8è`ÔNcb/bÖˆ“õèm-0,ØRM>ßDˆu m½Ý,¼í€o™KìÜÅçDŒé4ˆx…ÜŽ]´gfŒÌ+ˆA3K¢‹ OCu£±[´gà„ Å¶8ª¾k ™ƒ‹‹súz_htW‰VF’R‘ù=fÌJé§"OÎyÜGaU9W*KKb¢*r‹d]B·[ºž*èkMîò¬wÒV ¹¯ót¸Á³&òY&·ké˜Öf=Ûðþƒ¦”gîêÌŠ,U(烇UB¼n zfmÇüÖ¬¤ôÂLíKCÖÓ0!ëÍñ—¶ñYÉ‚Vi2ñþ¯¯Eu!ôîCŽ&_n¤Ó¤Ô,¤ºêèÚŒ.+žC¹yÏ^÷‚+LR¡§ÛMÛ»¢Ž`Ìtä“!I¦íY»=;Éê"矈9•E53°NŽÄÜÄ© ý¼\ ÝÖU)sy‰Ùq¦Dc!Â|CâCÍ-” m3É…à)"R׃2º·_Þˆ¿’ m’Iæ:?~„úHo/‘¨fí¾^×{ÖIöG|‚ØÖyæÎ¶%ÚlÂIà†Ý¤›mE³É#±ÏKyŠ?‚lHKŸZæ9Æ_'œmÖæ™*ÔF›CbžwN­Ù¼¦k7ïK Íx?¾×ÝΖ¶å£VuŽqDj?¨*ÙÏ^©hHiQZì#1²è³Ól;mÂöèvl8ý'`q!%¼ân½]¯}è~]þDñ€„m6BBh­R+˜UÂ/Ú8èþ™8 ¾Ýx}¨àg(/гcî:DNã EÁ®ó³¦XâÚ+U÷£ónÚEÒ–Z¾Çý~À ô¢Pñk/]¡…¯|¦:¢}`5Ow·¬LžÐ< ÕjÆŒ6^.9‰l".0Kœ.0ÕU>Ò¼\³l¾_Ù\SKóÇ ô™¤"Øaëló¤ h…á_ž_™h3Ðég)??.ÞÏlNœB;½f}¾–aP¹£° Ò$FÓwxK¯’kÿ½¸r,+ ‚¯ti(.šïbǧõrœ†…q9Ž=ÈÑÚÝg¨ ¼€ÈÑ9—¢™*­ƒôßlZ•»E®}—„k”ë L&0ªß{7õîzëÁ™>ñOÄ”‰Tfçð÷Œ~Oyö‡åÎáÒ©ûF¯rüÖÎÎôí„6TJ!èi'â>oh° ')j& ¥]•«RµŒ_Œ—Æâ+µ ’…Ãj_Ì{µäî¥ÈuÕ>gzžS#3´ ËÞ·VRÑaÉTñ£!-‹rBÿž—¾RÚlFŽÞ#g\*‚)yîÜ~Š¡ÂvWŠx{GÈ–‚ú¥®5Zym¦÷\i±ƒú€šŸ+;ðB(Ìç:‰>v dÏ`ÐHW½ÖÑ_c´lNw0bVÕ–¿Ï·çõ!qÌ"¿ùz–¾I“E'_~7S-,2•DzI—-áñë¡ù ¯äiî>æ:&g£-¹ÓÚ]¹•TwÎÏáb^3”2óºðÀ5UÂTùBíë#¡´ÃZqÇ–Hµ¯^qTX³Gxþ~±©ÍI‚œpU¼Â«}¿×¤''Žßü£Æ­‰9/œJ¯øgf®*¦ í|¼zß7— tdS:ñ]Z­¶é;õVÞ H/žZ¥{ÂFµ‰ª}#ìª#C¹ÿ³Bþ³ ¥t½¨ S~¶D¹éŠö)““@ û ºÅF̽‹«ÆÑÙí)KXk¨õ s#kܯɱ±8$-q½ÞÌþ/iuÕš#‹Ñp£'ØÿmåÍÁÜxí EH»S¾TâvÚ§5ŠA ®‚Èq¦¨¢ ñ|t>Óp »23±f¬)b⢌Ԋs„'(Ð?z¢o@>o*ëm˜õ¶ h7ê˜_«›ú:í_ޝ]ŠrèÌÿQþí(€Ò<³¢]Hº¾ñÆøËúhX§]Y–Õé¶Ü47Úþ±="’šáL$š|§íÕeS‚©ÿm¸V"É`®»Ï¨ç~ó!‰æ¢ÙCô¢íƒTQ­yúvgߺ×,½„+ž/qE½ZН»õ£™5@ª Õ¾@θä‘~¸Õ›Ål{?U%9&–ÐÐb‘7ãvMúˆhüP‘¾î6ófc³ä]û'Žö凳ÛEloº7:ixšð> ¢ðÑôX¾'FÍuÒÄÍ.Pâ¹ ET™ßP÷hˆ½?‹ÔÁÈæÐÞÄfkª}jÑX8=iÈåÈ8Ãz’Ë534óMëi-ÊËFÅ%µÑŽ»µå‘¯Åâ'1Ƽ¥a;Í«?/C”:È-Ö˜’c²‡™…Eô\¸j›Ô›½ßW™•ÞV ¬MÿæZ;ßµ¬¿ÏþezÌZp–…ˆMáævÏ-¼%n”ð$À- 6õq¯L˜Jo£…¼2<ß÷%i@jâ/’C®§I…yô=Ï•ë ŸÞÍ¡§hõíÎðUžÓQì"f#ÐoÔ@Y‘sºJuß¼´¶˜TEñŠ÷ð°òr­êò(“ÞÇ=ç Øªf_o6žþ¾«Zú"ªáHcBæ·ä‘g³/s­ÊäÏV.<iª(fï|ÐVyHåÇ·PÛ0ç7©ÙmÐó•¾O˜‡ðÇ ¿ò¾{C,µ¹ÁUÓ‰BÿJÔìèÚ+T³M ëÏ›?´# 5£j·ù(†!>ðQ­ºÝκW PYb±cqŠ·ë—¨ô—jbØ¥‰`¦øñîÃPf~ºÙŸ!uÝÆràN’¿“-ñ¾Þ€Î"Y‡;_ìøîzc·þÍ+TOJ†”©’O’gß·d¡JøÝkÝ0ŒVZ âëA’„K¿\hìbüN¶du’þó‡ˆqø®ã„QìÎÝÀ‹›É™»¸,äï™.ÝnÌmx–Ä÷ú„ÀõTN\:.'w…`îjî2.‚"ÄJ¡bÙgÓx)‡éUõ/fi‰‚x¿ñ©”ÒÐ 4ñ¤#ôsVZbÑx™h½AxÎÔTºÁ¯@ëŸÝÜGÁêä«kVÓCîlŽv&ƒ„JVõÈ¿u*ÒŸ>e>’P.h¡Hr‘Á}f%¨Ø~éï}¯Ê†PDè¢HåÀiª³Vø¥bæözöžBiÉJû“wcGC„ Ëï—&„ë±bé£ “ÆÞê:>ø„óæ„û³AožèéZÛ=ÚW…%É‹¼l¿âµÕ×\ÇSžvù\¨2ßåÑ„íŒñæ7Þ~ÞXJ¹0Ö¡2’ùX]“•*ó òƒ##%*çP{9/&ß–7fOŒ¾x »üÜܳ,?|`S»|·6«ºÛ‹ÜÅײ¦ŒÝÒ@ßåG!&wL“ÆJjÛ—/Å?¹RN'ß“ö½ÌÑöÄ·{޵STÚÞË[Üwˆ†Ð®+ꉆ¾#jrUP·Šâ Ôº$ j0(ؼ3KŸƒÖS‡Æcbf&N³–rZ'Ðõ'³ÝåQWܰ6H/ö¾¸è Ÿ Þ¯&¹Û™+çz$¨ nÎêËæ¶—Î4ú"áÎhÓV¢×öål­X;[µîpå^†,ZoéÈ{«:艩ìã|?¹¹GûÁ2Ú—¨íöP|ºxÿ'”öfì²LsâœÛÏ:F\K}….a«±—( €à“µµ.üÄGÞ«Í—V…Áxí4I仯ü•SÈ‹ºŸy‡ÌQ­dó2“¯l9S#rÎý\™]]™­„w«È1Ž€ŽMùWUD­J&éòÇC'×B/Ï_¸3@ôª^¥êmfÆ`د”’󹟠֟¼¢5L}Ò¡2!ŽaósZ8¥ºKª÷ ë®ÀM#ÁŸÕOJzº33ÄíxÍ,6~Vø²Oó©ã–b×›ig‡Êˇˆ‰/N:´ñz¯™¯˜ßÉQ É‘ÛqrY •S§ìLÓN£°pjªÑvSg~+Ê•Rrx½’qoÀýªZ€Ìå6O…˜š¨3§C¤í«²]¬*Y¦·¸s`Trœcþ̱aÈ".ਙfo¾Ê.ª¿¯¥Õ‚[_Žÿ¤Ï‹µ¡jðBiyCH¥AÓ^ëm¨ëéŸLok«¾ÔÍ}ÆÅó²²,ßèÙ‹•3£K]¦VÑÈH®Š¶I³©{Ú96؆&K³NÊÉKâ »™:ORÄöíÙ”í4ùÖ¦Â8¶šdÝÛW+fjtö©õ«­jýþMÞaýúÖfYTܸ¯˜UJ?¥«=š;6¦–s?ÆòxÑL¦»Ä¢"ÓÚÕß§…y>wž¯ª1«ë\ûT»Î¢ C}Ðf':X ûÈÂoiÒg Gz*ýyÜMª­0ò[YYàóc¶¶Û•EfÛ@}LÂP¬/A–¥Áīڂ®Žv'0ÏÇbB/ƒˆvꎽVv:Oƒ4æMüs´¦–„äfãË´Ž­~HšPI‘{1$EeÜ3]•º®È‚SbJšÈ«»¢.%—ÇhX à½ß§ØC?7²Z–"3aûóþmŠHÝûØ``-„¬¯LU$çZˆ½zÇSküvD/‚GM>„­á²·8íæÕòôb6o€V3m7,_7•U D;÷Tõ“Òpþr2O/ÕèÉÁô­VêjÁ -½Ë«}èèæLéi­\çã°V¾&Q#Þj~Ù-L´S® ½©p~*¦Á©Š ™ÝïðoKûa>°ÇV+3åŒÃÞ7¢:‹¼Ïrƒ»CA"ÄGÆ«Ceµ\oˆ‹ßT¾¿¡‹­5‚‡f½ý\Ö绵1Ø“Še˜§$r£êá´j„ÙC$2Ìœõ"Ž5 :±¾3ûiÚ¢jùú¬xî‹üü*L-¯evJDIØÚ2ÿûXôû~¶Õ¨U¯ڰɃÙdêh7Þ¸× •G8ú”ã0mi—‡›Ø?ÙB·zÚ*Ig ÞK2EXj½~f—œ%ÖÈGD®‘šg ÓkD;Ea”õnv•m’ÊÇå¾y˜f³;gbéÓ°ÕÓüZðqíØóQdNj Aà kðm¸ïíç’Ö-{j/E Wr'—Þ€Hq4+DâÔ´YWvêtŠ£®²%)×…x>›„i`¤3 ì#pTr³(úZ¡#&âjråZTPÖŽ6dZÅö˜"‡¼KÚ¨äÝŒö¼¸&ÌÁe>C D%‹—ù†ú{ú‚Í4Í\‚KY¬æH{;Ó!NÜ¿×ê8έù%_Õý¾ïD¹­3 äEÔ^TÏÌÐ"1ÍÒÏ2xÃÜIO¿e2f*÷è¾S‘ƒ=ëqÑ%”X=®dÊþà”ªû2n´wN÷ áTJÑZ/Q§,UèG'§â}¡Ú0Oh+:sã²zÁÎ]ž&è§í'\† æ÷˶¡<äz|=EZµ à\¹Ùý;“Õõ¨ôD{ÎëèV±ÅöG8·ßZw*lv¥'.GÒû¸0ˆö´]åÕc95ÑTó–éȲh%«‡.}ÃG×Ïza†EN[R7óÙ¯Mtk«ò‹Ür¹ªošHÈ:¦–5ˆÆ/{N…Q w-ù.å‘ÅÝL%u›§IŸqóú,ȧ4cóÐÌHÈk9fa"b®äË?S²a©¥X¢p¿ñ 8…WÁ}ö‹Ôr¥U4ˆ×Ö£fïì;—Üo6âÆ½4álÀcbN’H€>úø[cõÅ Léú‚·öÆËZ;H¹d ó¥ŽÈ²îz¸w·ÍxŒ2,£Æ’PÌø“õÆÄ§'?%øk•ûإܙd~:gx³]UáûÓJC»!k±8:?¾ïÚ’ b—¸§dø7-—ª‹R*¥kÜ*¡óyW¿t#êX4øÄüVïš~BIó´à$¹‰Â'ÃçkG1]„JÓRö=Vü§LáëÊ©²#‘ R¶„½x^×,— _ª -öŸ1­CAh±Lª/Œ¨]â—+0Ã}c^>Ó’žzÉžæ¾6dï ˜RË_Ûsm}Љ´š…Tù|eõ>^5}§DÔùHƒ^‹êC”c6»“¼·•c±qæP—ÅNÐÓÝ8•ßè­ „¼Þàô¯êd{MVÑ6¢zááú]m6-] ñÏ-’Ù?<ÏFµÈöóK™fÆ ¼™wyá ¯°gËÞ!ïŸ$sÏ×D¶ó(z]ö*¹jËW~³÷®Ùhå û÷_ ÝjRý@ÿô#i_E{±2#«ObËÑ=ù²¨O‡iØ<ùóížë;–(]#h›LAlžƒ䌲óB×üuñ”Ým¯­§ß>À1Éãߨ“Ø\­óùJH¿´«ŽÐçãö.6C´^/ö©·¢ÓxòjÛ­Ámkn6ÓL9$ÛþèÜOª¹&CÝwÚRyæÞ‡¡wRW-¼FyLù.ëûWBiîÁ„ÁÅf ]È>Ç6Ÿ»~ÿåÒÜûr¦‚õž¸Ê ‘K®ž¹jx‰ù156YMsÉYÆ×-ûh½wÔ§GÕ’<—Þs@µ– ÑRðêS^R ?Km²üØð­›µ å,î5±à$±Œ%Œ”ƒŒ'ä1°ßøk¡ä$µÑœàD“ì€@ôÌÇT&ÂN=“–Wa:·gÉœ:~×-¼À¦àó 3Ö›å…ÙÙ1ÒĽ™]1’çf2ëÎ/?íp+ˆ@Õ—UbÓørän†c3Wð­ìà¼uÚ|?•¦[Ñ” ·jª"ü> :{ ìT¬?rÞ` áßðèøZñ¸„^-8ù^È)šv¥e§œµ0ÛAζ}Ù@ëÃ{6II[owà˜!iz"ã¼ÍÞ¹ZMõelsübldòÉO:ÿô^Š/?Õ:Ý̰ç_“–vÄ+:–“óôrû;æìÁ² 9æ:…%ô¯ÂcSZT¦;@\f¦ŠŒûG¤Îôõ¼°Ù¨-_¢×ޱ ‹v­¿Ú®zÌ¥êDùŽË°ë8¦üýAÉ%J[ä`¼t›Õús×B‚[Îõ½{³%(ûp1‘R!©œD¡¢†R-‘û1JG?÷ñ¹P]n%g­~BPíê~0ã$9ï>çWK Qy¡5ÖýUtƒñRÉ%v9°zšC(yYõ¾J¿RîZf‘[_;ÛÜ)ÁwÝü7€¥Ûë1ܶ‰ì½Ý÷ yR•9?÷é¬FéâZ1"'€É&sº£ËÃÂfL4ZÚüܺ™;ÇÃøv…ß”?5rZ“>{IÀùúRË;|І¥¨ÞRJÛó££/JgçC,¡·šˆñÀ“í/òùçs³ñšìYÎæšZâU”Mïã×µ]©Øåáqéd­;®V¨ãk] ’߇‘)D®¨‡ JX"@ùÀÞú@ÌYö¨ÿäƒ*¿Âj¢½¶‚'U¼Œ‡~æ÷™ ⦤ü;ºJ ~êθ%­R¨Zùæ‚ ì‹&¼±é8%ø/ñ¯K õÖWp>ŽÌßîÏ”e|¸©çh>ò9¡„÷<ÍO¯KA$`÷]-ó¥Es ðé$J7Ø‘›í–ái)jÜ·ä.¸ ðˆßæKt|‡±°N,|Ù‰eó$±‚c1½WŒy0RWá‰ì+;1VÆ=Ü,Û6›´‚‰[«æ£¨G˜ƒÚ‘4¡û¾&ίÅÏ‚¼=UVØ7oj|.ZEnÉÂ[_]÷4ŸõÁ¸œ½ãœ?A†ôãØÕ±73ηGúí|pL˜˜¹)ýÞ¨-¼A­ÏGo/ßÏn›ÿ=Ï’€ß¾gJÓS† qÂ<½A<QŠ…8Ixˆ œÕE©RìÖ·ðÆ£nÈŠ¨|¦µRžãU3É“ËøPxªú¬÷–lI#›úäuÃYÙçÐNS4;£Y3­VÔCé+ÀáÓm¸§þ°R¯x^ÇDzcÂoS ëˆÊ{8·³š“sÃd"ïùfö¦ïzE—“¸þa¥÷ˆJXÎZ§Õ(ØO{pÿÃ¥¨¹f¦`ÒÛ8L΄œnhJõÍh˜v[Ÿ1—»8…JàFaØÛ†r{Tlb®Æî+JžÎ}×Ù­W^rÝùS»ºonaÐÈ„}^÷ÜÎÐÒÉ÷”L ÏJêÖkp÷Eybøl„pظwNì6¡ð¢Ñ^ªŒþd»!§Ök|¯PšW–ñÐÍk'ÂÁz?¨;QgÚÌWq}ZùBÚ[gŸâ®w €<ëºK6*R’ö;"ìÌëÀ_Ã-=N«Å‹µŸÄoLê6‹ ^Þ¥¬©¼ß£ ;ì&¥J)E4dzoêé¢È¢÷;˜2ÀøOwVM—Y¬’¿EŠÌ\êÑmÊf£)í>œ£ÕesSÊŒìÑ¡MÎ} Öíý‚9 <–– ¯›Øæq¤"Ç¡JÍúá^zŠl7hü8ÎÜXþŽÉ”~¥è.ùþ¼<öšçS½°ñ!::¬Ý,zlÙëuíà Aæ­OjûU¹(í¹Ž­&pÒëh¨g9ã7MDÉÇÄsœÐÍîC ŸŒPÏs³üÌü©5§"ÞYŠá¯÷“FbîL>Ž^YxÉ·„aà7ê™ö óœYfŸƒa³óÏݾdHš_¬¯²U½:œ5|×ã²)]ñh8“ŤÄ4•P—±v£CËç´9kþ3#þÁ£…^y€^*¢åÍø$\èH®Puæ¾üYâä)\pb;§â;6%žîµóù¾wø0W7ñã~zañ3GÔâ}ø"éf¡Harzš ۲Ϸ`v 2Ó”³Š%`j?O’uÃ+ Wºƒw•gªêØé$Ùi-E™ÇÇ3 ïê&Cn8¯#3iw p² ÷°L×ÍDLVMÌoõ>ÇäHjôÇÕ½rI@žC¬Ñ#OeáF©YÇm‘ö·÷œ!¶:ûœz+¦l”4®ù:­_éjê‡óë'ï3„»'¢êÖÞC…äˆ[ªÿ¯ÏÔ™ endstream endobj 631 0 obj << /Length1 1371 /Length2 5904 /Length3 0 /Length 6848 /Filter /FlateDecode >> stream xÚtT”ïö.Ý(¤ƒÂ0´HHw#ÃCÌÀ0t7RÒ%R ÒÝ !Hw7‚ üÇ8çüçÞµî]³Ö7ßûìgïwï÷}žEK—GÚ a U@ÀQ< ^>1€¬º®‘€O€—ŸˆM†r€þ…‰Øô¡H.ö¿²H(…ÆäÀ(4O¨¸:@°HDŒÀÏÇ÷è_DR vƒYÔy*8Ô…ˆMáä‰„ÙØ¢ÐÛüëÀá€=yø; íE `8@Œ²…:¢w„€º ŠòüG q[ÊI twwç;ºð"6’œî0”-@êEºA­¿h€¡&ã%bèÙÂ\þàºk”;   wAg¸Â­ Hzs€®²@Ó ÿCVûCxø{6/èßåþfÿ*ƒÿNC G'0Ü·XàM5^”ê! ·úE;¸ Ðù`70Ìl‰&üî PÖ€ÑþÏ‚„9¡\x]`¿Fþ*ƒ>ey¸•,ÂÑ G¹ýêO†„BÐÇî üs³öp„;Üûï·²þ5„•«ð)æì U–ûKACDÿÁl (€ß#aaAQÔõ€Ø•×ót‚þ‚~Áè |½NkôP_˜5ýGäívƒPHW¨¯÷ÿüsE¬`Àjƒý§:†ZÿY£/ ó˜ð¡µðýúýûÍ -/+ÜÁó?ôß÷ Ô2”QTRãþ3ñ¿c22€7HÀóHñ£"¢üß–ÑÃþ¶Á÷Ÿ\e¸5ðèO·ècúWÇnÀñל€ÖÒ@ U püGä¦|B|ôôÿ-õß)ÿ7…ÿªòÿù7¤àêàð;Ìñ;þ„ÁŽ0Ï¿´h]Qh¨#Ð6€ÿ7ÕúÇ´êP+˜«ãG•Q`´¤á6h1ó€yùÿà0˜ÔJ †‚Øþ‘Ìüé/«9ÀàP-„ ì×·ÅÇ÷_1´¿ öèï‡ Z—¿CP´}þ¹¯<‚°úå3~!a‰{ñ¡åÄ/$ð¡ iõø­dŽ@¡Sè}Ö$ѯkåapW—_(Ñ?*C\‘H´Ã~ ½í¿Ö¿í …z@!DÓ“Èã»ÊÆïåÒ î<ëCx‹ËÍÏ㌺"„PìS¯¼mÕðÓÇœežY•ÜHÑúò6ltÒ‡ëàû°‡i[fàB²R C¾kUæˆ'·ïâk› ”Ù Ao3"’ò|•ü0^›éö3“‰“?CEÚ6K7ò¯š]6í…ßÈX’P1ÒÙÍ»XQF,¬Ë¨~#S²X ¤Iª«žòÓ‘+¬(Xì¹Lc4Ý…çªIlZÿü|ofwWŠÀÉkÕŽ2á’0J:*/–ì„:êøL•Z v¡o²o“âîÑ8†±/`;VN€Yc;éøEŒvҰ̤æm•‘ê†ÆÑA~ö^q–Ÿ^žx¯Ø$†n5"õ’4ÁXà^X dÛ³¨?¾y£ùø¹bõúâT’ÛpÀ.؈5+R·çèÎÀ~;‡l΂a”ó‘Ò- ÍËȥͶ´8§ ذÙ]íR!¹QãÝYµJmáyhtþgÛ¯¦²t/((îÈÞs86ܘJW<ÞÝÄ œ”ñ¿ÄgÜ5ÈÀ-{€!¿i²¬nq©¤~1Ð!ü–B¹l9㔽hlY#ÿ‰¼Å? ÷pÀ1'¸V½=ÜÿŠ$Z±\w‰oÎôÚ8÷õÓ‰ýkµL??ì1?ä£d„ïÆ¾Œe³N4V…÷Âú»yÌJb]ªNÞêG´8þýóÀ|÷º†ÅQqúû5ÛÙ@“ñ4Á/ Ev^M^ÎK£Ìi”ñ’ j‚fòh¼vÊ<–¯ 1-Sy~h(½  M¤é?¤I‘ËrD‘Íûcüœ|êžLzxý`§Ü5õ$ãFªˆc7Ï“‚2¾®jqüÈê´šåÒ5‡‰¸«+{`¯£ï*—1`îŽÅ‹\Ri\eÐ/8»Í©ÔWõýÌœÄ*ÕŠÝþxŠðnl\¡]VåëÑçiäíµ8¼’|(?úð'X2"cWÙÕ%’åý(Ü÷G¥†n“ Yƒ(®TAm'3ùqÏÊ2^uóõkÛ‡‹%¡i#žñÝl·-__Ô»/ÿd à÷'’F å­¯9;Þ×S±Ã›OÈ ï„œö¯™9eTjÔrË#à9Ò7á Û‹ô,YC“Õ&bf+ø-û,XŠÈ@öšA¹‹/bïLu}&,e2 Ê­B,UµZÞÎZ÷3KkÎÅ?“ö`Àá÷p i›~5âá«1WÑ“½;3˜ q3Ù4;å=¹‡uq ÁqƒÔ±.ÜO»É˜<|œ&g¸l:+ò‰¡LñX:[l"¹ÀxGTBþ–£0&õ%ø d_gp.ìdû%ݘÎÚËëD*RµŸ˜jšî’5Âè¢FŒt>é$kyy†½1DprÀûd}Ürþ1„4+A…J†|Üý`݇@©+2_¹`»?IH¯±„~JrRáÊлU‘Zyq¨·ÉG´ãл 9ª½²PøÁô]D^b^j•’`çŒà7% Æ»|r:Å ¦(ðãeJ;ÍýîPœ®C¬ ),?JÓäÈ!íÙ~úÑ7®þ3×-gU`绘ÇÄG8Ùäñ&ÐWDè<"Ñ2~£»¨=*AŒÓ D}Èîíùpt­2ýÎÜ­íšG©¥ ŒãoÞŽm½ JÝ:Â Л§¡,qÉÁyd‹pfÌJÔß_ù¦‚‘Mõ°Æ]'Ñb³A[ïs1M²ð_Ï ¾ÇÐM[¿WLé¡«~R¨8`ÅwÔÆ1Õxëe=o 2C]ÿŽÌŒ­¶×§f¬Ç"gû†Ãt{Ø,Ÿ÷@—gG®¬f 8ÑJ “OC„HÜÞçÀHžÂCùÓ#L;¨Ë[$„ ƒi—ãöÙüg¬îneT+°Œ®e±'È”_âvÜVñûv§àøOôNÞÙA„IÈ7ÞuÒ¿+4Ç&[aÞÒñéÖ1™Þ[xDõW.g~Á5ößü4!ýAÀ+¨›/c]“™úÔ|×x"ùáZu‘gœëycÂÎÓo² rëá· ˜>^„Ùj“{ÌQvÌßÀ%ga?éÝ¢ˆØ­yÎöÉ&×pð5êxà[†÷8’u#æävÉlT¦P`„ÔÀ佊Q \:[Šà·';~uô2Ž’0è#+£×ë¨K —˜}=Ï·;¤4Â’Öå5~]¡ìPá&Æ›lRûÆ€ø5¹»'Â_^§KÐ åAR¨¾ö)¾3 5¼ç·³0¹È¸¯™´Ã¥µvøø±}f“cÞÕ˜)Ó.;ßüE²ÉEø²ËGgñyžVµ†PßJ¸ðÞ¸Å^s¡uvq8Ò„ÎIW 4·Ë=<8J¨ïRö> 3¿õ¼d‹FØå u žˆàÏÅ Åð×.Š,¹ØãRczƒ*…&#fH,â0º«s¼NëhmwŽßtj”d'R.’vØOȦÎ3«Ü0Vl“l©Ù0.i i^©ï˜òW5fÑ®Ø0p‹'øvJ­Úù<^ÉÔôºËØZmþÒ¶«{¥5*­ ~HàK«pªh¤‚Ÿ”µè·KïÓ3WÛ/lc‚ñ+>-øÌ2óá§xËÒ°6»ºq6mQ“®ËÈ›š!’šH›]=ï1¡h'¿ö(EªY÷‰Ê~Í÷„'t[Öw é>|P?[\ü/¯™Y@û¦Š8|!Zk7ñ}P”¦åãBLŸÎÊ>ŽSîOµK«_ßïXü„UöIS×¶}95¯2¡àÕàÌ#a4Î{¼^5S°ú}äúgæ€ÆW†Wd•Ê£•šNéB­¹à7¤a2»lÝ_½ù‘g¶c̲@ýeæ1ÀíÊÿU69Ny j” –#¾åÖ'¶ÙÂ.o8ß[ôžÝâ ·çVÒ$;Ä-_¼2*¼‰<ÑSä§9ôŒ–,u.æÀ_8zD/ˆ‡;ÆÄaߌ+óõ2Ò¼¡3ömaÐèWÁ(ëÏ?ORy²…½ÏfO¨^¼ä[ãüãcHñgÿM¡'P÷ÚhF© ¦ÆóŒiMŸºÊÇkÍÉ­=aKž ³{; £w¤GÀ)†ÛBC» ][÷Dz=õš•Úvsj¦¬´~óž¯'ŽP,¥W­©X[˜àÐ/OžÞa1þÒkß"ÉC#Á€ÿJ¹ReƒGGšKëI-‹kËó£š}ÎþÙŽI73hbÞ‡«+V¯¡©-q¥ ~ ‹3¯Ã«Ä¿SÈ“v‰©I¸ÒÈn(/žñ5'UþÜ–½Û¹æ5ÓÓ²õ~RdäÄ?z¦ƒÏmU‡ÞäY}5sôÏó™.Îî1ŸËoáŒÉ(‚J—XÏlP‘Ÿ+‘nvîs£^سíi/¤B‡·¢¼¹RÔ;‘@Ž|ß8õ±é }žÊ2®ïVÎTÃ&;‘æ#¤SdkÀiOZÚÎxÒÙz °rq£7p ù ó¡F¹·»Ü½í‡Êá—_Vž7Gsh.²bÇJ‡ªême¼»ÇÎËÌdäýÍf×T6*;sÉÞB¿r«(ô£bW¹˜¡QN=óH§înÊSG„¹pSðŠSm[2ƒ!§ßÁ&fÎ(5Íàè˜ÇT F‚´R 1^2¦svõC8j¢%äù<øHdLsÔOÞóÛ…Ìœ4^¡w~´I¾iªûé™ FÛ* ŸW¸ñpÒ>KzXS×xs¼y y•Nu2À`cPµJ©š Î|MvÜôúfçig‰&’ik'’çûákQ6¤›íE ¶Ž”ˆ–6EpãºàUÚÜ(Bõ á ü¦iæ /ŒÐ;ÁUæ8Rm+4èT`”îa‡?ËbÇ€t7Î׬q³N¦ÈÞ”í‘ûmÄŸ=È¡òYªMÒºGyèGÒ à§£Nøp¢FÍ5}‘»»N$ñÞXvK´ éí@’~Txr6£Ïï š<ƒ¹¹0Ó°¢Ž%äDz^ŸÍŸ?††ÌNðv›þäéǨP:&±oeáÂr#ÛúšM@õqº…R#?_«Ë¸RÕþ§¹;ö7.p~Yæ –åòbšz’‰È$šJ·—}$¬Þ^ò©:´íPêEÇÛÞ~õìLö2çº]ÝÞZûY½¥¯»d~®oôa G°9fcU e98¶ï öhßž¾¦’XT­y´Jn[$I‹ˆý¨{|r˜~Ð.•œÄäEÑ]RÌóvåw>]Ã!dµ}S!2>Çáta¼$K$í8-,Kî¨ÌmÖsÓfíÒ‰Ä9Äçª}-˜©‘lÓKÔÊt*ÏÌV~ûT§µ<¹?Àz/–»!)¾9´žÔÒÃÕà>ü>hÀóÖû”õ}œ¢Êá0Îe_=xji6«šáj–?f³Q"v¶èÝ`>G³O<‘0lNZh¸.4¢(£ÞÈáu†«‰Ï->;Óæ9ñ’„Yâ&•¸i{OHÝO8;E;™-sä„3-œûJœ6[mÞ‹ßG?äÔ›IÉûéù×sœ]OFP<¨Ž|¦wÙ²²ÜŸò&ï^a¯ô:°h€.«îæ2ÏêÓüÆ6¢Ýç0–µÖË<­`}Ïc**òm\—IÊWråÖH߫ËiJ&TÜGºB©ä˜ÅÖ˜®ªÌ'2¤„ø³m mè¬÷L}é™Ê­¯•<_ªöž%zTèËý,fÇJ{ætHÌÈýðõVgÅ ½&†Pñ.¦~…‚bójVSRËÞuQR$—¿êìμpÓû5Þòý3Òe&‡|Ã*]Ȫòú…‰ÙPêÁmöðâ(–ðë^ÃRTIæYÓ± 2]•Q'°ÞB°fºKgŒØ;/‘åî'6Šy^Ú`ßE¢)™~îÁŽ…´›Õ—?ºa3WÌþ~ŸƒëÅÕE>L‡õ:¼lߟ‘pYÃpôÍömêäô„ã½Ð{'*Ø@‰]¼æ'Ð¥'Lö¦¨è¶Ã·Ìñ[üˆšz–î2¢n çhvòŽZM2›Œ¡®¶Ñm­ðjÂkF’fýâ̶GKv 4·.`"ôo÷…˜E¨22kIƳâžÕÕ ÛáI’I×¶CÿÕ“M®‡ß€¶UUZvÍÞkÏ胉[ädOÝ-(miOë€åNP% r¦ô»>NØQ»ýýuO‰Í°Ÿ•°#îq Ú 4Iâ'£qS™÷¾J<RÅi"Z<©‘þäS…¥È½ 'µ¥³q4L* 9y,½*SçÐ>ê½áâprøt.X¶ï£·ˆ‡®òPÜÄi‡i+hg|¦ÃÌ zy|Ãkî”Ø®Å žSÝãªÌ¥Zb“P/apÄ k5)Ê5éU n÷â½g„¾,&ÕBâåW‘X¦‚(yÉ)jeþÑù*=Rë/“_ÃÕˆÏeïÚ¦¹Ë|%¸ÝõÞ* 9òÅç{µwF¯ÞºP®6bž¿y¿y7KJ«hÓñ)${–—g`¤xÝÌ¡²»¥ï¤D4÷F0ƒšêZ|Xk—G±h´ó‰AËqãð@ñÑ™y’ýd%Dn|R]]=¿ç‰ÜnÛ²†N/çµ[޳öqQðgh7‰Îf1ëÐG­~핳’5Ë ªVèÚQòzK•°D0”·ŠîfQÁ¦¥¢M^<̘ø‚¥Çxóù)=}—ל´ý ™Ðý+Æí>z"réû¹V›¦kæ’ù±ŽÆxÝÓ ‚b,Žíëcœýíè ÖX”ï±83‘î% ¢pϳÖHÒš7ù¨‡,áø­NÏJh1ÕÇ»vo }ßQs“Åi•ÛÉóæVM|7¬£{U<`#ªªHeqÀWÅ8‰8õ*4þÉ%hæÑδ×ùn³­ŠpwZÀñ¸Iøõ9¹e—[?”ºéêöNÒAÍÀ½€QKÃ9k]q!Æ•ÿ”ðúåÁÓãù8¯Nå*Û‚|‰=åV•*b&¢ù¯:?3[37 qi¹kh0²JÙbÈ:'u@§^ÅDxcr½bX´+6•Q'ÞåF'¾A7’—‡ó›$Äݪ)GÚ¶g$E_ºn ™³LŠ:Ãèžoåðš›C|©y]ŠÞ0-™Of*JÞHW\ ¨ ®žBO‰G“Çp¢½¹NváÝÔc^oÜZ“i+†7^ özξGi—Nn<ž´Ø ¾ØÄšÎîssVµXÉj½çY*™µ¯óÚÈ{À³Û‰]øÖz&m:¿[d9ô;•žÜ9õçõER$¥è«©^HLé¤@ÒWop;¦ò ¨Ù|Ý!ñ+x®ôR6×nóÔúa‰7´j(nT)õ(ÛMå½óy†”gxåEÐ&]N½¦ô9>e}[u›âEšpnŸ2JÃøN‘Q¬w亪J“¬%Ð%•BM43kºú!©˜ì%Í_{ª ~“!kF=jYW¸–=ÁÍu^M0Ò@240dß¼WÚÜý3_¸\ ¶à Ãf\34i’Íkó?Š2Iä endstream endobj 633 0 obj << /Length1 1375 /Length2 5977 /Length3 0 /Length 6921 /Filter /FlateDecode >> stream xÚuTÓû6-N etn¤‘–Î:¶#6ØFw§€Hƒ(! ’"RÒ H‰„H(Hˆ„tóŸñ<Ïÿ÷¼ï9ï{vÎöýÜ÷uç纾ãb34R¡ìáwPH¬(HD¨¦ob%‰ˆˆ¸¸LXWø_3€ËŽÆ PH¹ÿPCÃ!XœM‚ÅáôQH Ž§+PT(*%'*-'"‘ý…–ªC¼0 >¨ƒBÂ1.5”»/áè„Å•ù×#Ê•••üTqƒ£P¨Á:ÁÝp¡W  Š€c}ÿ‘‚WÁ ‹u—öööAÜ0 ÚQ‘OèÀ:á8Ú þxâÿ3À4uB`þØMPXoÄ\P8ƒ‹ðDÂàh ®8ÐD[hàGþëýÿî( ýwº¿Ñ¿!¿ƒ!P(ÊÍ‚ôE W8ÐàŽëƒB°_@ˆ+…‹‡xA®{àwçà# 7àßñ0P4‹a®¿Fþ•·e $L åæGb1€_ý©#Ðp(ní¾ÂnÖ‰òFúÿ=8 0‡_CÀ<Ý…ÍO¸¶ú_ÎøÍŽJŠÈJIIÈá@¸ÔIøWzS_wøo§è/3n‚@w”;Ð7<áÇýü1/8‹ö„úÿoÇ?OQQ ÅíáŽ$à?Ùqf¸ÃŸ3îòÑ XÇ=Q È¯Ï¿Ÿlqô‚¡®¾ÿÿ¾_ac -c»&þ·OUåô ÉJJEEe$ÒÒ²ÀÀ¦1„ þ¶!òŸXm¤ (û§[ÜšþÕ±×_ðþðŸ¹î¢p¬…yÿCrI(îKôÿ›ê¿Cþo ÿ•åÿEòÿn莧«ëo7ïoÿÿᆸ!\}ÿp¤õÄâ ÂÉùßP øÑêÃaO·ÿöjc!8!¨ qd•‰Hü±#0w>p˜! uúC™?v³_RsE á†( â×»%"ò_>œ¾ .¸÷ÇËß.8N>ÿ¬«„¢`¿t&&)„ Ñ_€ŽNb¸ûöÅ ÷ùÍd 0‰ÂâB€¸(4à×µŠŠŠ…ÑØïýã<€d‡z¢Ñ8•ý&®ô¿Î¿% ‡ûÀ¡€é T>ÂùeDóQµ ³·Ð·÷$ó_Zc“­ºc$±Ü“Oýô®dkŽy¨Þ‡UÜÈ0œz5:ÀÌ¿y4äcÓž:—®õ‹§Ñ½¨º-”ß¼Ûî¿C19KgÄ.Rm=4ºIqLæyd1q)Ý!¾R¹\tÞŠY±–]º‹(ÙÒ™±TòZ× â­Ø8¿`ßYÙP&R£Á™ž¦ÚfÃçñˆÄCÕæÆcßEpbÖ»Ùپܞî ñÝÎ*©Š(FZ?¶¼”^Fº‡¹: Ýæ\3ÈHrÝW~ßtwϧþUºy´ž‚»‡Ë>Ô;aµnDäËþ5¶ó¤_|}†o9‘È PÉabÓ!JŸ¸ýÜUÝy€I4ü ¤¼=¥gµ…ûé·÷=%6·½fsž%6ü„¹Ll\K¿Ý#üå»u_AšäEý­OÍ„ vïÒ„‚•¾ûtN]‹x´ƒö«ZßòÀ¿', Q oœ<˜{–@ñþžäBÙ*~ᓘàšÙëâÎß`Çê’Öh^U’Ü»X¿/–õˆŒý¾Fhu8½ç’dåÞüÙZGæ”,Ö­¨ ³)LP!¶?öîÖÓ]µšùþ{¬µ‡k̵QßJ6AïÌúˆ†%"9r°T‰ÓÇ‹tIëÔÏÁžÛÈgùÈó'Y‰\òÀó(‚,B÷îMÞnqËÒ¹ÓÄà076»Û© Šëк8{ØmökŸ>º÷„TN­hÝ:;WB+í‚’ãÓî«[Ú¨²ÂÕýrÚ½9-&f¬¶uaH*sAZsH¾HøO§”¢nq[ù&§Zïý‹$VØj˃c·lÉX¿’Ã!J¦" ¹/© TÒÃQRû Ò°-U©:£ñÆ¡³i¢P…S/,í”q<‰‡4_Ü‚_†¸JûŠ8rÖ~•×2ë»öSñs¥‹HŒ 䈂yT½­dÅÉlíî“ eP…¼c"u×Râô ¯Ý72 égu<ƒ¡ó"~$Þ’“ÊÖ¿Ìn»"ùQ­Ëœ5XmÞ:8Q䄾á¬-IƒrU y’ÞGGì¤8{Ôå6ž½PÀP#½Öçñ÷…Á?ŒØ9êK"51Ð:Ó’W GŒÅ»`ÆtÃÙÝð•&sÍÅ|ê°OT5 Þ+¡?‘²¹üÎú!"°Âõ7ºlm±k˜BÂ|#ÏcÿÇ:eHƒò©Ë§³•®¸¿X‰Ð/#‘4{ï)ˆ§‹èÄ;†š); JÂA6 €‡ºÇxF%ÆRèkÖŸã8ÎzÖýzNL;÷Ø¢ù}émU§ò_ùœˆ”ZÞj&ôà´n}ÄšÝ#))­+JúòÜëªVH¶(A{2úÛyô\OØB»©‰a‹¡¶4ê r+·ŸVÆJÏ|›²Ù4’0®üªº3ûö—%ûõ/Á„ZrCšLuA@Û³.‚¶`¼ =Æìk{eм»êVÈ­C‹üFÈDÁ‡òK¡îv«õw·ÜOË)ÈýÒ‰­g:üylÂÔӆǥ°†À\¯{J®²øŒ8HÚ|`|¼;]5Íç4l¬ŸH_]Lj”åt©ˆÉ·•õZ./rˆ-:Š]}(OãÆ±³›ÝÁƒ×”e¡`°ñÅpßq ´. VÑÜ]Œghtþ|ºôci!*Ãø ”µªrûµÛ6wÒË—=¶ëÑÅH‹ð°½ÐÂ¥g’ÜÍ×¥ØÏ/'®¨OVœŠNÖXý|BÍÙ3Õ?S™·£N¯è=m|Úb y“GûM¦k±ÝS:#Çw”ÀþTCê½ÇkïŽRÇæ £<ÎÀ©3m s)¹[·Œé[݈.N¾”…±ŽpÞ‹kVÛÄÞÊ_;[ÅÀ]f©=-W9¢Úö"È’í¡Y ¾V6ÐÂÍ&¦Õ£‘ ÷¿ÄQ@‡Hú3Tæ:Â8 ½K”nlVÇÒ«° 9Ož—'RUtÔ+¯@Ç’5Ä®ÏLhçØ¾2^êmèKîÔËt»Z йÊlÐ*‰°êÍöžÓ:(XS¤ždßI%‚çjE1òQÞp–µéðö˜|òd–êÉÈÁÒÜ;%’e’µ•  𦾵ÈNÆgÜÉ)ú6oQâKì“ÊÈg•r–žçcK/ª—ß¾ö«¿ÃÎ2ÓÄNÿŒgÔ\\è»;Âä°MH0käBðg­mDszÌ{ÞE"EQ/Ã[Üb®E,q;îôbÚô7uÏóUyf¼5Ã{˜¢ï7 SµÓ–÷h“FÀ§›e»zÎyW7} Hìéà•醣n=¼[/›2äáÍm±2¹ËlfœÑk1í”}Ài8š8JÉY²ÅÉMlXÆÀs¤öÂÍ«æ^ÆÏR†9ÑžWµ¬—´ö“×j0‚/¡Ò©Q¾S†L4S‡ÉYË…V£tƒ'¼·â.(ò}â]Ú=`ÌFÒÇP¯Ÿ€Ò‡ {¤¶Íþ¯S*–‡Én:®2®ëZŽÜB•ºGnLÆVCýr¦ý©;-HÈÀrÏÂŒKØÒt öDzÜ¡¢ÐǪ]溄æl9¤¦Ë®á]‘V¯Š)µ ¨Nãc\_}÷å»úáÕ¨Nègx¬y]JmdŽ7¥Òúð䋞ì‡{ÊTŒVŠOƒ}ºˆn 祭d|–É­*»E®˜ýõd/¤¼ÌÄAè¥AÍ n}«ã³w0‹³ÊÚ}6æ¼#Ê›Ôl1A=A¥–ÝB­žšŒaçŸl!~ ¶#¸ñP–u²? ŠÑ£(`B~ò‡»³ß%º"‡ài"Zõ_°9} ?âSÚîÓ®hˆ’䫆ï_æV”Gi@“ØN3(ËçJR­O¼§Óç¨Ì—aÊ ¶hG×µ½¥9rô¤÷TÓ€uWnšòŽ(jdž€¤–Ö®$Òωϖë¡8À<´‹íö’n¯â›(–¹O…i,ÅÝ¢’Hù4Þ|ƒ,ÿøëʶÖ{©Ù3ÇŠ³bÓ“¢[K£Ѿƒ)® ,¨øg)É _ãZð´ gng¡††¢ŸÀJ5N:~ð$,ò§”Û:ÞT~j(BœRf~…,­¢TÆ1ùœ@¸Ÿ8²T?ñRH}Vºàxì=AÍ´.Ïu¶ï÷wBÚŽõ3¢mV ePk˜„Û/š4÷&[c’kòŒBòÉ©“ˆè.>û)ž ¼ŠÐjKÉ.:#ÃH5ZÔöÍTaÔ@cYÊÕf'Í5ú.4ƒž:îÎG8×.;á©áÕ»#­g¢mæKýªíPà ’£ f­_F+Fn‘Û˜áþðλ亚Çõ©ïü3bØ×À#û9©vN‚gÚðÂnj6$gèù®¹¢­÷vë;öŠEîÎu¿‚¸)ײ‰sÎH”³‹Þ3ZÑôµR¹íóÜ’4OZ×4Fé ŸÝô‹ƒCÞ% 1ÖI¤¥‹¬ûO—·  Âõ¾’2+¹Rºv1R^eÛ*˜¯ËL#éÂ/:ûJ2ë˜}ú# ]”7Õå‚>ê³ÜJåéEÀ§cÇ“(ŒÈóUýú9õbž{jšÅe8."ûÎ_NW÷ç5L7¶¼No«>ANí¡KÙQˆ ¤oæ²¾æz*EÌöïòÒØ¬Ûç¼®lA~‰ùÆpóYâØ>>óüdwwÙ½©ªû‡±PÆ×XZ’Qjt_×@椒kC߯¾gnµùSw«`vÃ|õ›§× Lº æ5=¾rÚʲ§ý¹€ær^¡#•“zÆW}­Ê¼”GbìDnÖÓæ^k=ŽPÌ*š<"5^YR ðk~ÀîÕ‹g|nº1 ¸¸Ì q»hºÂpçJÆ“Æ÷UZÌg‡9µ¨ÕÕ?×v+½Î,©{êÅÉÚ´HØÅ°.™Zš×³a²ñ3¼Œ!ÂSxÒNÃ'Cš³¥ik,»|¿<¯É Bm:¹^eç›!ç€ò5ð~'?J‘´\|-ªe>iÊ’ ;¤a¹ÇÀ89÷²R½i)?ñã®sžW· ™\¤éâÌ@ÁõKú89#›¾€òŘOfáâUƒFüò¨˜‚E íÞzÁœc#aä(„¯Ššk]xwù›úõgJÃÖÄWë»Ó=óï…5K½v¼ºØØ¨oæÞ=À$TúTéV(ãVøòBLVî²éÿ¡¦!ê·^îWŒÙ6ߟ†6zmW©V fÈ߉=gT]<¨n}sÏâc\„çúÜçì59ªÍªÆl ä ™ŒÐ°•iMüC¯Âp†+¶ãAµ]´øeém¶½$j±ÝBŸo?7r¼áêDWΖ*ÌN¼6žr„/ãÎL–p¾ûx»ßœ ‡êàx²õž8ÉÒþ¤ˆ¿úCÒ¯%{ï@R~$gþ‘6Þ¾±ÀŠ„f­æS¯Ä°]¿ÀÄ*bê…ÕZÓÌßï]„¬àc»o¾± ¸Nåö}‚P¦2!kÑF—§pE?0›Í£û™‹2.¦jÅ)!?삞ºškó~– AÕÐhÎÕ´ØEí|®¾³Ç¥Îç* ÙfÛiMœ…lÊ‚Æì¡•þm³tþ‚.=‘zbMu[:æúbÄäø:K*I7劵»¨UéùoLkvbˆóÕÇf Ym‚@;¡²“êO«À]4ŒéÐWœoYˆøw¹'€AÞƒü¤÷@zžÖo«ðÇ´?æ©÷Ò—ÑåþhމP˜„OæÔwç "Æ,‹óG–£«:„m&0 |Á¨ÔÀ¬¥|ÏÞ¶” 4Ó×<«ÊŸ–Ö ”C ¬Ëûf7TT‡·î¼¯Ä`Y‹VT†Iéû¾·¦ÊÉÍ‘_ÂæÊªNp¢é87ß™ÜRöƒv‚Æ^™ëš0ûPY™ÕÔ_è5]zwMÓ;Ðnd¿C}ÜÒÍ|çô–áHð¤q\ÏtLêŠÝ{µ7ý{¼+ðÈÞ,{lá»íµçJ[S,í®„ ô;½9ë‚»{Ú”õŠ%v=å!k™1”¤Q5dû‚ÄE/ùH—Û‡ìÍ;ÞÔ}×ÖëòÔü!בâ *PL\Ðt ÌIÅó«ßlÖÛ¾}A·éJb8»µvÅ^¥y·¾„/ëšr¸e ;Ê¿¦îåÛÓqC‹…©}YsçŽYJð‚ÆKf-Ee0Dæ­ÕI磣׊oÈÐ5ë(üôï8¹Ñ#žkÁôœ]òG”rj[å;Ãu‹ú®+Cß‚”’vûYª‘ªŽ|,)ºC 09í•Q[£„Jyžðo˜1öBŽêJ—mŸ ¯žÖÏLÜûô‘Öë¬ncùÝæûÞ¢µÐ¯½›±Œüœ¢"Ò„w5î«â)sJMX|xñêëòOôyëorÆT·¼`¢/ µ_F‘úô8cÝ^v¬5v÷›}6{[ÿÖ ¤GZ\uH7ž/i­úè†ÁþyKôê{=9'‡î,ìª*{BbqmýÃP,MëìõÌÅõ<£I(9‚ü ã\fª›<½ä$RºÒò¨1€)6Õ5»˜år²-öT§¤3rÅ¿¹ßÂk¾R?ÌóÙðYèqÄQ-=úÀÓA& ÏÛɤ ò6‘ÛB9g~|°Š¿±jÒ Mj>ŸOyÌÀ‚t¾ñ¡#•Ì<à–Ó%·îÆ™jš€yKChû”‘xøÛ”ÞY«µ›G+;d;·¥Lݾ ºÛÈÐ× Ë÷‰¬ØÑ©pn|ðau¿-¯r…˜|\u\Næ¹û‚%Èn¬ˆm…"i^Žü®ÈÞ…³5å¶ð;k"ú™“6î^BÅ5JZðˆá IåæƒbM°JŠA[±ÄEœê¦Š®žÚüb^ct¾ä ³PØæDÁ‰7emäÑö*‹´«àúøÊ~Çé"á;a8s…ï›'/W]0 F[¦é¼|j•@Áß¼Q,aúJÉ…ÆfL†´°Ð%@jºg)Wðí͉ÕÖ¹lUþãâh~ÝÙùh¶Û¼.Éa¿¡]{X€CrsÏÅ‹HX2ÐWžÅßt;ÙFÌ‘èxNn‚ endstream endobj 635 0 obj << /Length1 1966 /Length2 15434 /Length3 0 /Length 16634 /Filter /FlateDecode >> stream xÚõPZ¶€ ã\ƒ5ÁÝÝÝÝ‚4wwÜ=¸»»w·@p×Ç™™;çÜûÿUïUMË×Þkí¦ QR¥6µ3JØÙ‚虘x¢òjÒÌL&&V&& 5K5ðä@G'K;[žXˆ:@21#Ї¡¼-@ÆÙÀÌ `æàaæäab°01qÿ¡#@ÌÈÅÒ ϱ³:!PˆÚÙ»;Zš[€>òüÏWµ €™››“î_îa £¥‰‘-@Þd´ùÈhbd Pµ3±‚ÜÿWj> Èž‡‘ÑÕÕ•ÁÈÆ‰ÁÎÑ\€†àj ²¨€Ž.@SÀ_-Œl€ÿi faéôo…ªÈÕÈøX[šm>\œmMŽ€ìUi9€¢=Ðö߯rÿ6 üçpÌ Ìÿ ÷ï¿YÚþËÙÈÄÄÎÆÞÈÖÝÒÖ`fi (JÈ1€Ü@t#[Ó¿ ¬ì>ü\Œ,­Œ? þUº@BX`ôÑáús2q´´918YZÿÕ#ã_a>ŽYÜÖTÔÎÆh rBø«>1KG Éǹ»3þçr­lí\m=ÿ‡Ì,mMÍþjÃÔÙžQÝÖÒÁ(-ö›Âß2s ÀÎÄÄÄÅÂ:€n&Œ%Ps·þKÉü—ø£oO{;{€ÙG@oK3àÇ?O'# äè ôöü§â33ÀÔÒ0š[Ú"üýC 4û7Ü¿£¥@—écü˜Lýý÷›þÇ„™ÚÙZ»ÿmþ¯+fÔÐÔQS¤ýOËÿUŠˆØ¹<éYÙô,ìLff6çÇïÿGÉÈò?uüÃWÚÖÌÀýïr?ÎéJvùÏ PÿgAhÿ;–‚ÝÇäÔº;“ÉÇóÿçqÿ—Ëÿ¿)ÿ+Êÿë ÿߊ$œ­­ÿ¥§þ·ÁÿÞÈÆÒÚý?“ë úØy»]°ý¿¦šÀ¯®<ÐÔÒÙæÿj¥AFÛ lkþ1ÑôÌl Llÿ–[:IXºM•,A&ÿžšËÕÿÚ7kK[ ’“å_/̇ÓÿÑ},™‰ÕÇ+âô1šÿR?vèç·5±3ýkÙXØ9FŽŽFîwýAìOæ­4ºýk˜Œ ¶v ÀGÞ3;G„¿.–ƒÀ(ü—èßÄ `ý›¸Œb7€Qü¿ÄÉ`”ø›XŒÒ€Qæoúˆ)ÿ7}ÄTø›>b*þ—¸>b*ýM,F•¿é#ƒêßô‘AíoúèAýoâøØˆÿ÷Gv£¿é#»ñßô‘Ýä¿ô×é3šþ™ŒÀÿâÇá2þûþÿ6ø(ÐìøQ¡ù?ð£D‹ÿ"ÛG‰îö¯êß2ËàGmÖÿÀâlþÆÅfü‡ïÇSÂh÷wôÛ›¨?J³ÿ~ÔâøüHìôühím1œ˜ó?ð£,—¿‘壷àGîÿÀ¼ÿÂÿ5¤&ÎŽŽ/ö¿^“ þþ×Ïè4AX^°3á úVÔþP-ŒïJ¿?ÉÂöið*âNsOÏåP9@”ïñš5?rI¸{î òq ý„¥ä½ÉJ ›ÉÊ`Ó+5’{¹¾ÚÌx—ÎkÿéÄIΙå@¶«Kç+«­©9öy³Ê°ëÐ, Ãåþ|Ʊ$eså}…Å9,Uã)Ädt$,.+DP‡pFG¥Hðì\§4¹Ó•ÐäŸB‰ãÇÔ1öÁ•2:pËíTüß¿?ÙËÞdüøqÔËñYöë4`–b¯W÷ù;uÀM{?µ±Ó¸ª o¦ôÞô•ÔÕ^´´Šy³ÔÐä@ ¤èÖwÒ‹-xál7cªÞ/]b%­ËIj…¬ìTe½åå’üðˆýKð3§Aµ Ùh²^r5#3ñjNI™³©…tcéJª×ž‹Ì3&ðc‘Ž1–t"„»¾*`YѰß­ צ@5êí}(Rˆ$(—ÏD'd^Sgã’Ü–¹X)ãÏŒíTŒ-ÃèñŒ'`5gxC}¦O9v Ì׃ýšc‘†’aý ½áY5FH.r¤öFªOÉô%Ÿy懡ޠ«¶m!O<ʤÒiíÙÛ̯áÒ^«yNh3–f³¯-»c¡úïAu|a¸/5§–ïéÉÖ™š)ïÁ„ê5ãfqˆåÞS¹Ñ&tÁB?“<ÃêÆ8z}Î7#dT»jËúë\nÉën,ëHÉ/k£òÒˆ³5–•ãOÀÖàXÀ®Ê²r”9€—ŒM~õF¯uöɯmÛ!ªØÍOæ¾íÚï«!›ç/5c0F¿š.ßýìÛöI’h©é¤ôtÏ?wŽT–8}å)»,`$ª§P÷¥óèB9gõÏHLÞ~I¶Ï0¨˜èxL:Ôä“ÇóZ.Ÿ¿hF9EŸ(A½-ÛVÂ[h½©ó~.d0"æÔúÅáé+Ÿêq(5ˆØ¥¶’tû­(IЧÿ™p; Æa^΢¢²èY„íJœÝŤì<¤Vj|@Q¹½8UpçøqËoïN‰š¡F(»‘šðE%¬lú(XTDP0] «Øß¢ q8»\±Eâc¼¼ÓjÈ)ÉkCrÕ1­¶d=ïÕˆL= ¥%§fŸGöbHT¹?‹ùº$©[Žå6µD ÏíDÙ8ĉë@÷…±ñ†"á5Î#>_†UB˜âDè»UNÌ/â­ë_¦Œ~åúYæ×ýþ,cwCE|zÏá› ¶SšÔ˜ìÎÒØ›”¿6Ló¥á Ì4«ÛAåú)úпYYˆo!Œ¯ŽK³ 5!fT}üoK+>Q&~}=¶ØÒr’&­Û¥8D‰œH!±8kã{oˆÑàäD¯´ ËI"ÃO…U›šŠÈ!Aɉ‚™g媨¼²æ­zË›xí½JŽ+xõO•,­Òc´˜±uÔ_p«ã&Ï´Äùæ7=@þ˜½×øi¨ëδtZc[¿²±4_»DàâKqT<Ûd:ĘÅWs|eó´‚C#XÂVò07i Y!¸Ø—Kò¡²ö ôww½\@ ·"X8ª§;é÷Lea×ÆË™"ËœÏt )­iù`ì<1‚ª~¨Žd,M·`àÁðh1´×ú:F]°†ÔFmž,õ÷¼iðë#©#ãpùŒOîmGcV¯ØBI¡ýØy ¯±»Zx¿-íʾÑ>,µØe’D–Ó¸Ç3ðaÀÍüÎ~Ÿ30W°Öà¹ü$…¸öD]€ùD<óœáûc†è*ΈÀ¯SÇ=´ní\^ÖÄ ±Ï¤ÄÔÏëeîñ¥‚eU«ONå`!NbA¸ J6"vXY‚‡‡¹“¼bÂM'ÞCýJ«cÒTo*âk­CÏDm~à¶$ögùÞ–m]QÖRTñ,O·ÈÉ]pµ+ŠSÖ A,倪²„'$Ý6ü±4§nb»<$x°Ög1ÐÕó±Ñž,¡ß¤o ÷2j7£ü²¾ÙŸ6­ek³«|ú'‰I¯%@Ÿ6Q˜ù 7Dy0 ¥š‘å  Šuœ¶ßVú›Ñ eÖTC N×h­@Æ£®Y*‘)Ö9s˯fZµiÕ.ŠQû+,•9 ;æhÙ1^u€J¶v¢£dIR‹;€»fÞ±ÏÜ$ó¨Þ¨ÁÜ£¬rÓoê¹P˜>bÞÏl•ÃFñ¥›úKM‹ú~°¥‰} T,é¥Ü.Õº£¹I/RQñjWo‘ƒŒŽÂãJ¦JVJûk—`6eç!Ù®7´¶¢s>.]w ;°¬ºž£:ºOîÄz°xÚ¸\gr§ýÚž‹©©*lÓ±nŒÀö¸^û"~ÛQA1êK¤¸=~nßã›p?ðe\ö—0xôÏHÈ¿®éÆÈYIÿ€¡`^›ùgsäSШPŒ¯s-+Í ä€'¶9ÇJop€W¦%þ4á”,Û4÷.æ_qÕ ÷3€_…gëÉT€D{u2æ„»M>L¹f2‰QcÞ´n»n½—öMäp «êQ2Púò<`@úÖ>Sø¶ÃâKK) Nººï ÿêÎ¥ MݪD“eA’r?dUDk¡ÁG^j¨f^,w²Ôèü ucâÁ-xnP?ëþRCÍû3—¥fíÏï›qú¥Î œ}Ô[ÿ‰ßŽÅ”ÊI‹Lºé3ÂòúYfóZ‚núD‘–-©¶êOçþyk£Í¯Ô3Ýj‚qx© ˜ŸŒ˜å ê]Ç-B‚7¤*ÊߎïÉD£é¿šóÆ­4[§APK¨— ñ}ŦK;‹cÚ Jà›#β§ö8q—ÅÅÖ#“øÝLKj;ö/äγ¯åöº0;¸,xN¾ZÂgˆí›„rY0<œYÿ©êEñ²öBC‹C*­c,XKã¥J¥fQÒçƒß¶½Ÿ­™{@°Öë}YòÛâÉOÚŽÊ ò¢Ÿu pÆZ`'ÑžÅç&jYWR ‹ò’ú™òØ“l‰[Ký\*b¿˜>Á€¿Ø7Ò²@ŒûlOu9ŽÐðÊð¶¤Í„mɰ4üþå®ÏÀü· FÌ‹¢b:<Ó+ù.ßâ!ˆõ7ïÞ<’ µ øí˜Èº€][úÒ’ÅwV”#Î^@= +)™c߇ŠW²AÍì·Zï½uéVs6o<*¨”:µÁQ0É~Þ:bØm95æêWËKõŒ SÂrþÃEAŠÐ9˜ÎŒ>ѿԊvc «Ž&½êÑR’½¼gö¸]ëtˆ ÖEUš*aé*IÉ2j\ˆ'Ƨ‹r;-5yßé27p…( •Âr…‹?0G¹M ÒwéTg½qÈméý´ÚÒ‰7&byô½h±‘úÎìíðÚVn¨Ä‚íµnÄuZ8â66nU«´}Çf÷XdxrŠzJ°ÃÏ¿† Zè’>zz]>²¹:Áõ Î®Ûb8‹ü±g†æøÃo3ºý4ÀóþÚÌ<jÜñI¬ˆûÇ{Lâk(äBWÓ½ÉaÓžmžÊZ`·ô]˜}½»¥ªà¸»0¡NÕÔáêxcñþI9SFƒ#f» UÀôÂNÉryy’‡ÝÞ¤£9EþÖ%¯Ì£4Õ>Þ­wÖ=éZtׯxí"ô­™ò}ËP.I(¤ð¾ÌµOáW3L·Äš©/\KÜhÄ™käÐÁù$E«‘|‰I_Žï cÞÁ¥±1‘¯,-Vz:‹ÃF¹™šr@LjÏWh(RÛ#L9”E;ƈ*×èCD¸Ÿ_41òjK 3ÂÂí/Ÿ#¶ ‘“Q¬ÏXðhê)OX´KõÁ÷æoùéaˆ¯ïA¿;IjÍë?ùQ™õ :Ô¹¶…ƒ3dótæŸA÷·”Ð39t|d`¯4;Ú?è<~<xDNwECÃUQ0“$€ å4V×…h’Ú;O½mnŒT™K6w_^ª1„DC© 2›>·ßU ˜ŠB"'dAèçžó](æ"uϤó›Å÷çbf$[›ü^‘ñ¥Ê‹»%’hÑN.Dß|SG¬Ê•Í v/pëøaP®ï¾꫃å4ö$yü&N@R;§#×(áFû6q¶ª³ÙpûŽJøî‹Á¾Ó¹ÙT šSv¯ü³œúKÒÊdònû̳ Þ«X¥õâUñgPÓETØâˆ|…š=×[€ëD˜‹Ëî7 óØCruÙpxx®ê¨â0’°‹ `dJbÎfÛ<ÄnKœ†•¿µ‹ñÆT>8׈WípŸ^‡!…çů’:JJiX¬ŒÛjdÍ'Õ'Kuáès|Úu°Ùxòa1ïx¤ö[ÉÛ—£L ¿™œÊ €öÍ–jd¦ø×»¦²¦ã5i—xô=ü3Îs?34Ùö:Z§¶\1§Ëè’·Æßl´=Ǿáû<¶¾öOjŒ ËÍ”Zï1s#…빫j1tBjÁ¼®åˆo÷¥sxÙgÕeÃí³Å[ØS¿=€ó÷pëVñ&üC·F{R_ç¿’ã$ß±õ£=¡ LEn¡K-Kd0Rà4ß5_gF_' Ø¿@Ââr¿(ìŒ@F×SÎUy¯4‘e~[CXà| á? eôzj-ÔbÉð›ÓÄî&qN9Å·¡R“çR Š®ì°Râ2Ã+o,?º®쫱øÉ26lvÉvé}Ø$Œ&O™[‰X\úS#§ªð‰½W‚ƒ&|„l‘ è5²4‘0g^“c¨P¹  ÑŒq»Æó9·$³:#aUO]ø¥+Ú”OÈg´~½òa[#ˆW>gc’Ýô!osžÜ`9øÖ!¶¸T£âjiÓsÔ'7Vœ{·mR$ß4“c%/%]€,v"0¬ª1|þ­}ÆX€¹&uA!5gž ïkˆŽD¼ ¾Àþ–[|ú:‹Z?ìxóðhýEŒb‹nHÝ·†=Ð*çTÃ_¯ ÖÄ:K æIË N™¾C¯Ô:âí€}v­gWŽ×¾­_iítìzqaÀ$½Y=Èû¦Vâ"kÒÄÕž6<ÞqS &†¡µÃÌÉÖaQ„OD‚=T›À-¯¥»ßB«+ÂëôçH fÚ@Îü”:{?\¼„±V²©òGk„9_-³²¥s÷í%`[Àžp*åpSHoÈÄ9”Õ2b!{B€‹t¹R7¾,R9C0jëwÇ wÚWB0è$6l¯Ýõͤ _ xÝ¥Ôã¡×ÉHiˆæßAÍ0ç ¥c~¥Ý$Sé–®ánY‰x„ž¾¿‘ÜEoÖ‘D½"§;q+Q›ÚRykv“81¬z ö2ßeOT™¯:~ìÉq7x¬kv;å%N™ŠUCÃiI=¡gè™®fÆëô¥au[£°}¥²€ubùÊ*?UÙ¨`ê­K³Û[b)ú° L› i¯²ï%Ñ~žéå~Ýi^lJ`©¯ƒ²âB~ ¯A ¾«¦CvHéMXƒ; o9fS)s†»êÞu¡L{èÛÿl.N$-ŒIf쟩šc\³^Óµ^§Ì8ÄüŒ®â«é*B’ÿl«?ÈE+Í/傱VÛÁ«N:ôƒø&p+J·g ½å‚í*=djýË:Lÿ-¿§Næ©:G¬­ÅÄ:ÿkõ ‹²­Îe$ÍÙ»ÜÁ©: »„Ny§Z¢JP¥SÒÆ(ºëaÍrëó~– ;’ûˉq Û´™:ŽÜ÷XM4åû!”õ5zŽJàêñrK+­4vÝ`è‚DÓ Ïuð¬ÉFXa¼ÝOnûf·òUg^{FnUñ²¨àÞ]æ§r A·8$ 9ŸÖP»•(¼"Q5Ô4rÆñ{¶°­.ÌLOw\,'à¼À*ÉÃöÀÖè$:¬ÁB„ã¼Îà[Ëñ [Ô¬€±`@­ôÏxÅ`6;¤›E™’‹û‚»º·ÃhÇ”¹Y1Èpž!."«–7ÁP\µT¨3º'å"íCxé–çã :ñch™NJÇvcxìÑjEÕAÞ9 n“a²‡¢r“¼Ö…ÔNS¹¡c¦Áä±.´È´ ‹Å‹Z•@L™â!€À—9É2D‰Øe¼]O^Q* µ´‰– .c)”#o!•r'OÜ&åÚ*šAEr÷}B8X[64PpÌ’ªIè… Ë›R[:¨ü$éö½þ™ä+/fé¢ü„ðmêoÕýÒP„7²ñû.ë§Î{ ®-]º—>Q•hN»È<¸Æé…€B¹¦¡‘óĪ/_ë_V¿Ãf*…Dˆ"еe]]ÓÈÍ‹‹­ ö®ý:ÿ¬ª: f÷¤h_¦—«ÆÏ¸ü|óìç4<3p;ÐMy×*-ªS2“À)¾Kƒ_c0ú“L-J²´ .fÜs G0ž#^êöyùÅŸæí?½ç²š¯ñÌWéÑɇ¹ŒÚV ¡În_ö«GW¾>e"½‰*¤¯×[j€7 X•³ºaì¸II_ ¬TÏ5ïOžßç¢6R©x ¬bm?óð{mÞ‘§¨Ÿ¡çÄ<ûWjðüq fÀö²|Ñ¥fKtšô¯(ˆa‰^l,@X;%Ì\ì5&áÖ†ALUé s s$&ÊêÈ[à'ÛˆßKÚkeÍåÜíæò¶}Þs&ÄaRv!¶×Vêí¤äd d¼wâ¦'¼™•¹âë x}}!H‘p:”¼o[™ËôÜó˜ÎÁnç³Çç¹ðeÇ™±31ølÕA¼y·Ó€õMéö«ñŽ=á;Ôà·ˆÀKV̓n¨g›7ñdã`3ä=ϯm jfXàë¾wþÔÖPY°ÁYSá @¬3ÁºßC"]¿ør a_¬Úžž¾“aʧ­ò9R'w@,Q¼úÍIÒÌú3†Ã>ÛØ(ùxôõ•‚z“ßÉ÷sÙ¢‡šºŒìjào>Äqp-¦^¥é%„ä¼°ð«ÚS'¯öf>— s¥„äœ7KûŸÄë¿1ç Cþ@ûÝm¯Ù‚ýÂ?yÞöÓÎ#ÂfV}’ìÞóñÓRˆãŸÏ»½Æy0ò~¿xSé}ÅÜ'8Rðh\°…ÓþäˆÓ@Ö§©€o¡Í‹Ý @d[z¢\¬§- Mªò@SwcäwE(«ú<ÑÇ ^ƒ$iõ<ÁÁMÞ‹ƒd §~îg­$ζQ§ãPoÓ‘êk0ƒùr»ÔjcÙãzªu¦ø%’h¥c ¸)LÒÏe¡>/:Rb×»Ž¿)Ê >Þ† ýzÅ&£q’`¦[é±Î1+—Îߨø ­—éG?xC'×§º%îsÄ€—Z‹÷çÒ*0Å@. Áªi"–´¹7 º).“ePq| ý¶‰d@-ÿÍ/š~U¸9äqÅÖÜ‘¦›8;'ôñ›†$=`×ÊIÐy*SmòM[P#åÜ" -°tQëìŬÒð¥ŸÕÚ U |–X½±"¨T©ˆœÁ2²rw`´w½Ž• %í$¾ä»‰U€mÊK\NžáP’®¨TŦ×&jc÷ŸšBP›;Åb©0¸,ª¦ÊÔ†8¸ìØ#ZÛó¢6ÉžRÖHãWå(E#±¥ ›c h^s}h¼†¦ÛRöUË€ B i|B8•€?òÓ2>à žŠfJPÕÁ^²BÃ.#¸ZÓAݪÍÏdËO«÷ÆÒÑ'’u›vA¸0ùçé“5¹ÉBŸ‘$õ ¡œ`d}x{œûòÛðâ8ûÖZïƒ3QÂøçÑÓzdˆXÏo™éµ•]0þð‰Ý„ñŪçÇ$Þ°Ú! Z±Þ0Ì‘BƒÂkg%uóF¨ƒ¹ä]óK]rež¹ëZÜT$¡™a¡²Þ¬FSc.1àâ«ÑkŰÌ<ì.NÔX`äVÇF¬*’Iï%Aª]3›‡&š(p5«Ž ˜E]¥áÕüˤ•P2Eø¾×.Ä„¢çB¤“NêWè·«€‚–0Ïél|+uß7’ý쯤ª'7ÎÑiÁ=Þ邲®mvÊõŠÒã¾ý tm¸Ýaׯ>Xkׯ¦ú¾¬¼3ü낉ûµ£¤RJæ²éue1ÛñË,È®~ßðœRnå °JçFË•å×Ì“¬é­€¡R¢aû)K»ÌôcRw2´UØ+ÞoR]6:¦ªRѺ߃ã¶XmÛoÞâ`'–„E˜¦¦=³À4þ,9u®Ž°Pšû*wÍ™É$ÃÆœöêD+MdÙP‹F+æªã?œ ÅCMeVQ9‘*ù£° òƼkýPzÉÄ„XÌåà'f8¤²ˆÊéEOsJ÷°}¹û!woæ7W+CéV-u¥à{ ŒÿËŽU#h¶hN\h7D쇎‹ûy¼6‘­3¥Ú7¸LšBrªãíÆv†I}y9— öÑ ÑæäŸf«Ìq#]‹¢gý:-r.¹Ä·°àj¬{¸f¹uÌ–´AÙ k8¶|)(u„|Îs,Ø©Þ>ÓK½éÖm_y6ÜÊÊ‘Ö~; Ý¥ aˆEl¾@¥»d¸2Ö‡!Á1ŽH_šâ£qDFˆX¥Œ*nç% 6e>L¾v?}1@¶~è+ˆ(Xd‘p0X© ÆÞS©d¥ †H½­LiÑÔu>C¾û q”Ñ@Û^}3—Rô£ŽJø¡œ©ŸV~,ѹÈÐá¢(ubÇ„7Þ¼,½£ï]/pM·ƒ=Ò•èÏdÞHhØJsÜ‹&õk=–{J_3Q'>º´ŒŽdKßÅ»zõIœ²ïŸ[§+ž_dß*c™›øö¸.Ý¿7>Þ&;¡äØW\^–û%«/”÷rþØ\~R+—@tß§e¥yþïJ¤ œ]ê‡]§§Õ<âËRËDeð_ÃÕn¨5ž' zp»Té-SKT³–¬f …5…bDÚb;òVu…¾š¨ñ"Üù|I‡.4pkÐþòe7üIœ¿er_âu* ¬4ê‰ßÄáíN‘C‡HegùÛ¨»Ü“%¿4äe¹®ÀÃ>tðYù}çøžáVŸh:ã)o/¶×ÛEáþmÕ"ßd[ÍyØg'ø,¨çH^ÿƒÊɘÊ=„ðäDÒÁŸ)ò$OëdV–§!idKò'ý¹×}ñA5¤P a¨)¨O^LĶÈ"˦òÜXß, ²» Ã÷ø{€Í¬ãŒ‘×ðêMYöÑ‡ÖØ8o8ö"óÅ>ÕÐ9E$û—kýd»E/^p…]m¹d†Ä§€ª±gYì¤;bF5¯®­Ý;YŸÆy¯Ôö>É~uB‹¯¸Ì«?úÕÆ¨¡JVnIêY‘¼Òò- pD¢Ù¼ÛC¹J‹Ñ7mÄ(Qsášâ…†ý B!,|¤Áîz^[Š`! î~ 1¹8{ˆÚAgרï œF#¿}Ù‘ßùãXsÆ~MwgÆñg>"_7°N÷µ\ÉSÙÀA4À¸d& »¦QÃRj·œ~ŸËš©'±ü›f´ÁŒÎÃNŠö&oMe¢ÜÆjTµ¿ëd;Úaè¾™Ží›Ð]ßü5á:‹û1Ä/Œ‰”뇙°£¸¾T&‹ÛâÓg<ô!¡ÐÀÞQíͯæÓ–›m7a#ù*¬K é/ͼ\©5ÑsF ÆeÒÂNj¯ÎLXšóü‘¶'ÊÄnÆ(N·­¬uÍ.—Èo÷í _OQ†}´9½?zt½ ñë ¯jlM³Œ$‘tŒÛLor$&¢bŸf@÷´ ËX¢±ôL1üHÙMšI³JyX-B3[ƈBšåçu‹ii\¹B_=›ËHÉ÷ñ™[pÚcwÁjµ ·±”ÕX·†Þ{ºÓbêšnôÅY˜_±Ô B31!;¶(?Ø/— -þðV¹ð¦I.E‘–FX ££’ÊærÓx ‡”ÊGÄä%ň]7B·ý;ö¢$jÑÒlPäFCÏd|s°%„­‚É04î:¯:ßÀp/v¯@h3c —1#Ê9ì«®8?»x¶Ðna’o_ÜíÊ—‘õG­½ íˆÆÑ«$•¼2›Ÿ÷Ôιˆ´ DRöÁ|_a*P&§B½Uiÿ²„›b§†½v·À@‡ •tçóÃH ž0¶±á˜úRenÏÒ‘QêçéÍ{ËéŒTŒ8F!i*xcfÔ[”~™§¿ïHàVÉqÃÏ› vË9<Þ1u"/þ‚üÕ58w#öôDˆÃ„šì4 6Gv öqT¾bЭþ¶Eîö¥@÷=Tqg¿/_ÆÝ)ŠG6ÓâŽï°aª£“޶¼éa%l \&ÇÉTnG̲;Ù¤ »QZBáYáž·Îg+ÉóþâE+IÇ&‹jÉQ\´r™¦m) ŽXÓ¦™]yÄÈìøª›Î=xB9RË“ýfP1©@9¿<öýå‹Õhý,az,“»«Ææ²l¼Vüô[ÄføÀy^¶’)<ÒdþOHÍ´žqeèxÅx½ÊEÎU‡îG»g‡NT‘» ùœÎ0&¼‘ÔN}wÌCÐMrÑ\áoïãê2«6·=oS“5;ŒÇޱ¸µï°›%u²`ªoÁ”­ !õÉ>Á[Ã?¤%ìÆó#ÓüÎ!]‚»ësQ¥^?Ú ZëÝ*Îý"þˆdQå~—NT,¿Ç“’œNÀgÞ±Öelo¥Ýjo"?óÀ™×½£Ð:°a½Ù¿l›¾µêòœD[´¾]@úɨkä½*’5}o讜¾qÉ Ë3™’å±^îØ½~#]äK#8Uµ­Uþ’´:›Lü`kèÉC¦ãбG"ë•®F¨rÏp’ÔO]0Šß 4ë ¹æïÎs_p<àº"è“Fn;2·§¥Ï*Wi˜¥dÌÁÂùž è/CÀ(v¤8¯t¡|É küué2÷ Xzé!ŒìZ²ëRCÅî†1",Ñ’„¹Î9®sf°€N*.$aòŒRCÓýèå^¨‹ÒÀ¢Ax¨€9ȧ˜ïtØ5WièÍZƒ7¤›Ò~L Ëò­ç/Îc:_3V‡Ï0Ÿ$Þá±ç‹·®’Q¯o¾Aˆû?r"•ÖImºªÙ\߃fýÅü #ü*&DÙ[$ ÔŒ¤rld‘ øüaÈzf6ýD|óTspY:åGJÑó$m8"MÑ™ÆjÁÛÛñgk€2ŠÅ@™Ô玾­§à-1Þƒ)TqÉ·ãÁšŽÛt GÙ¡c;Ê%nÇDÞçÒy%‰#%RŒÕ¾k¦¿…b¬AC°-G¬‡ëó¾üaî%´ÿ„™ª”`N5¦U¨”£ð1lƒ3FqãV¼;jyP,ÒyD?aŒš5çFHïW±(EÐó™ÄjzBäºÙðMwn6î ôƒä¾$™OûÆ«%öVcïуq ””—sû¨¼hÎ÷«(øµ“o9ûm’L EõCqŒô%N .RÅ ¦Ë.xfê¿(±+²ëX÷QÚ…í‘gJ`žó2,³ñ67¹õí{¬éxuJåA°R$:üß'wXU/;§Hy_ñLëTê^Õ0m…€iö œ e ÷¢÷H 7b³X JÁ³DuÛԩΗöížÌÍþ§=Xž”U0Á šðy ‡¤!³©kã¨(’Þi/QZ½ ùyÅHé›°Üžd9¦¥5Ž¢û™¢¾~–~£Â1Þ±²Î#j °…\xz¶Ö¨Ÿúw¤Àï°Oͽ”°ó‹AaYáí_eôp9æ¾ìE=Îdk©ôØ6^2…,`T!ÁvÊÛWÓàÿJÊv_Pdx¡.@Çtôƒ~Æ“‰Rj>ó pŠó¨¾¹~“D‡>ßÅÇ’2ÖmÐÇ›#?æD0yS1ƒIêt[Þn©»§›ãÑ]ýI+síû,à:Ý„k‰WËE› ’}½€(Ëhý2>«šÙn{<Á¦©0æ8éS+IÌS‰Ô즖QÊðÂD¥y®¾#1ä÷è\‡QdU‡¶¿ÉÙ2‡õ²OyNxú,í=p½+Ë1áÂ[n8AóK†Â$üi\81êáEúW¤Ýöé¥ö á3ˆ‰þ'RñŽ)ÈTÙï|G”´å¢š&ÁׯK>g âîeìæ…åtϺLŠzû±3†x¶ž£ò&/Ÿív²l¾z?*÷j|¾ î–¯ŽË{>ºLEm×ç«Þ\Bí½þÜ%¡ :HIDcuÂ6̓r¬þ$½Sj2%Tã˜GeòH|{¾Æ¯Ì q$Y\m4!¿ï1q»@Mê×j´Úö$tt+Ò>G–Ý'í´ýÂ9V¡çth‰}h”¥ýö™²Í©ïÁСä×]MÕœ¼±{ÌØ W=l0w1EäV› ÒÖ ‡@‚O6¬Ä™¿ÄžéX@„¤”˜’[ Ýù%5÷Ša6d ™wl×ô'Lp6Ž‘ZùƒJ¿¾Âù¨”${ßxàžÆó¶”(’epà·ÈX%fƒn©Ôhu°U× Oõ“ïÁÒÄòbz²ÙÚ¹TÎÙs_QÐå*ƒc-ö}rx±@#UŸžÇ]z›º9o’Ö«µOE‡xHÜæ‰{Qñ‹gÒáñåh™üÞ´o'$‰‰#{œY`‹ïÏA!>Ëp¨C|ØÚ¬òâƒ0:¨vâø¹x”tnC_rò)øZ'ëÈ'“räg‹"µ²œxyó;uÅÊ’ážjti{ªÁ…¤ Î] TðʽsÃLwb¢zHm¶%Oqd!¤¨?ô;\­åÚ=³!2î‚Ó‰n£ÂM¶¾å_,òñûü!Íѱ¾&E†ã±óéü9~ùíÇ%ÓÕaÊõ.»œ”T~èyôž ZFfÄl£2.-}„#ÌgPº¨ò ^ÜYh¶Ô´’ÜúqÅ3)ï ë®"ôÖµ‘ –ÁPk/S«ãáVèrÜñ µ$yÚjqÏúRýÒŠt¶©¬Dþz¶½kÒå¡…® H\.Wµ³³DsÕrÆ ¶Éɯ¾iwðæ+ þœ†ýÔg®…ù04¢V—,bA§Ž)JxϓۭL‡éì`‘×_»q7‹îU}$ÿUÀÏíD§r˲H]0 ,Ó.„ÇZjM]“$2þS:ùeÚkˆBÉ7#[@c ­²×ðw„ÌÓ -2¼Kò“ ˆ…WP¼ÏO-À|g󗎳œx'^'`àʸôÕúð£TvG,…éç±ßרRÚäÚS¸Î<5$¬ñ'‹Ê6¯¦ùzZÕÌüëÂZ!²rcRnWëÒ¦-;æüÁB0m×øl‚|ôE¤!©Å;¥Ô†¯ƒtÜi(ìfçn•%6dañ Ç#L8ö²Æ!>f•uó\ÆXbx¢ÁIœù™ÊôÏ_9IJ·j•4%s¯§ŠÅMµ/#å÷¬RsgšìV—¨ÓI˜k—9©dPk&’…Ò›Z—p‰qí͈ wVƇAW«Ñd‰£l±·ny„÷ìÐ…ù¾›÷mÆUóôy£äiÉýø‰Äà™ ,ªú\#ûuDĸ¿ÛÅ—ññù6Fl;Àš=Õ£Çsj8¶šùOÑnq°—Ç÷jg<&“W¬ÑÛ¨ds›7*v§{…·¯¿NÖRAÉl [{Ôm¦çSÃ+×—©¾ûñò·&G}™Ï½%v@¸ÕDÆì³û ,én9Ÿ¢Å¿iÆæ.>#•Õìñ1ÞrÄyO´Í`SÚX\µqÏÎ÷C±¸V0¾#˜Ï•>‹jºq£š\f±wõ(!÷>ï§G~ê¶+XâðdHÈŠw¡‚š}€qßf±7¼@(þ#šþøQϧlV@þl?ÏÕgädÖCöLú…Ä@ Å6îÏëôbzm4±Nµ”Dú{9n±˜ƒž_ÑhÙg\ôÌ:Åc÷>Yérh>­Ñ ÍHÚ©^%Òu³<[¯m]Ðð*èxz»råÌ®¢¯äÐÊ|ϳ#Ñì7"OZß@%ÁE1I(]¿A‘Û ©/Ô1mé…ÔÊ,h¬ˆÂXp‚éÀfÜ0äù}ÎZèÖ'•-ùa¢7I&ó£È*å¥Úþg#¸?½íËöOE2g|mûûl‘÷€§@z"$š>‚0ŸÌäÓÀiA%ï.ÀbœáÉÉéÇ#pµÁÍ’àvÃBωž‹WDâHëiósD½¦éO¼ß°¼!dá]jªû>Eæ›Ìý Í£ìEü¨´‘Ñ“€÷eÑ&=sT´Ôgêº<õáAó>–æÂÔü¬¸«ˆ:–%Xï(Jœz™ý¼>ó¾ë2»">þûE6Šœ…ž"m›+!V‚{zde“Ëë ]3ëIò†1A ÙìP£óEå1²Sjó°êLÉùµÜ[†ÕdE{2§iíFäÇ“Räen6Ý‘wA>ú›¢‰kˆáÔQß~³Œ.“åëÆ]Xuû;"à}¶Mf›¦n\üÇN#æ…#¨þœ†‡¥çGuý8cP רîüäÌ 5%nÇpŸ–ã=¦Ó7ˆ>xiàltÙ–ÚRS'ßqQLC¯ŠÔ-À3B!IË_GìÅìÅ\‰‹AÝš1}¨Au^7Ù×R¡E áÅ© ƒ"¢ù [(ØUD’QŸGP Š“E`[ñºQÕð%èè×CòŒBxëYmSš±&Ûf³Ù:mÜÓçxu8ÅÆ Cî 1k‘Nþwûõü¶£ãb\.0Ɉõ]¥WO­À쪌¦‚IOb€oRXçŽý×TðÍ6ô6>-µµÏLøþÎüwã¿8ÊëÌi>;˸þ8½¬’föH‚²gVªH¯X0ÍŸø¢Ÿ R 3 O³Çᓌ–€çXTxºu˜/X¼2Uº@=:&jH…¥Ä?®ï@^¼RA‚*—C´øÄàì,0¶£G@ ¦o®x `›~¯§?>¯‚tnwà-[7æ(eÆ*yG¢«×î°;§™"‹0­3¡.T#e‹C³×¯¯ ò©ö¿ø‚Pµ×sß— J³ »¼ªA;’÷»ââÜÎ?–´i—`ð¼A8 ¨ a‰EŠ"ŽÞôø÷„]ù$å–`šcî­‹<(©ˆB¢§Îh «¤3öq%ÈüÔ#Ä{¬L >“(«çw­Z=6i ™ø„ŒeÂD¸™{-±óh›(jb' ÄnT‘ÝÄ'>ÉA²‹F˜§vmq~;mõKÒë*áòª$!“µÞ”ää gø)¡‡ú+â9–]˜V´oÈwvsv[þ9·µ‰uH4)†ÎW_ nTÿi•ñ ã“×vM†zñúüOgiúщ9ÌõJ‰’°F³kWB¥zmàFþg µÕM!ußYÐḮîü-»>ô‚(1ýÓ/ÞÀ®I£Ö…¥‹$‹}[Áw¢™SW…!ö\Oæ«"¼Š›lcÝW0ÀcºAÕ^Ù3KxKÛC_•{/þ¼É-U°T¶i´¿_¸É´™mW[”«›¢Ö¢ÔÚ E@j8bÓƒœ/˜šZ®º±³Ó#€Ñ VÎìǧíÁð_<‹göÎTù½D§ Ω»ýu9"p{§©2Y\îVÞuåœÅô&>Ø iâM¸]êÆ½¹|(ǘ8èóÀzâIëvbmbwG‰ ‘пî)làafhŠ¡£ƒæ3niæ”gÕìî`'-rȵ@—¸è¬oòò&#n DAx0ÄdC… ‘Qéôßk—›a©[2’DŽ1®­«lÆó¼­–KAo|™WÓ#† áÞö^Ó"ÖnHmB Áü—ïe…Êtºg¥-+»¯ñÍt’ªþ˜q§?¶ ç•ó ~ÆXCuÞcزžº¶`ò'ÏêùXØkn6JXèô‡ÃQ5Ë9•S4äiGÐQ|·³YfŠ­T~8 ^tuŽŸãÄêŽcLÑèt„ŠL.p@†î /Ç%{Bjf•À\ÅìÖ~š7l‘´B/Ñjkž>Ö0œTç3þ5¶ÄáBdÑUÆkî‘g-8T1°&׿ĶÃ|GÄfFAïĈ„ø¼„ót…^yK7饌f|ê÷ÅâÝѶ™#x]£Ó»œHõvàÛ°Üë'ùþpL!ÝkReèš4A42†²â™­šLðy ÔY©†«Å«‡bWuÀg0¸*¿Ê Œ†ë—®Ô*CÀSÒ·*Ühü@—¦09Kþ(fó„Ž©f“H~ÿ_övIä6gGÇ À]㸼ž©7.Û…Õ÷bA ûï1œ×öŒ‡us¡ßµÄÁm.91§YÑ ïužo Ö“)TÂËP‡_ep¢-H“j“ù­:RuV-#òü8òÃ`ŽW²Íó=—¤X»éïÏêI¤¢!&„¸7(Ó%m™qà±ý, ui䊥P´{‚|]àâ?ÙØ;˜kððÔ)­o È&öatÓ*·Û|ûÆøˆþ¹µþ¥xD!Å÷´¬,Iè ㆭl‰÷èwmœ+Ñ6u6ºbñlùš›ô rZO%5S¬÷°¼{ä¥Ð"m,çÁÈåi¼¦±ÆÇMƒKÆ'[¢5JtqïY ±__Ôü]2óßR³'–òn”žm0¯&´¢-#æ\© eZ¡M`lÓ«´é0³ë)Ÿ–NU("2©¼¹“²tÅ9æTVq9 ŽX|Täé•èùP\ôŸŸ­ï½&xxËnÁÐ|üó~®™ˆ~r ÷¯|§Qe‘לÃ'«¶gƒÄ3bWƒuE·ñö")Ì1 < ¯s¢¿7|wj\sÄ05~9°Í8›:®X§RïÎPb^{çÉËk’ܶÓUÒÂЩ§TR¼,:÷fr¾QÒnwòÀèv$;Õ¬‘ ®rÈØÉ™ÆÌ<ˆ®ˆBžÝEk/NVÛ~"zìºôßô³¶ÛXÍ/hc)zø&{«JüÓÉ™nEÕý ˆg÷çbŽKËYUlDÜ.ŸTëÒha˜¨ ÖŠ¹ä€±$ixžS54 :Ya;;~5a–Ö ÀT½Âµ‚F.=Ä›óZxÑNôVå³J)möDaîc0sÌg¸õ¦®a-ëB<@¡ÝÊe ÅËi8ïAb(2ùv¼Ñg|6L]Ä2< $Uê+èh‘WÎØý\ú ý½RÛŒòÜŸIF5®ôÛ]ó=VËO"Dy•‚ӇϤäŒÜ]%W#;ïóF´«%±´Pù «”{yœa¦ÏIâ£+(%M˜ÑèçËà»j^Ÿ%ë@ÅŠ}¤¼ã…zP°eôh2Zûü6Ž`„úD5Ê<¸•g:ÕMú}²Ï6ö¤¥øÞ52È÷_Vw®”‰¿üÚF„-ÅO¯Šä×ëYéwJüIdàÐd‚ ®9=»fš}¹}?á›>°`h»ÐÉ¿²û6B5évšl½üÅévÀ§à]í¼—æÁSšý™ð -,ê ‰ÿ!þEœ$d®z0™Ã?E:µ€vÓŠe!7€ée“9Τ1”1œŠ0L€áBäw±QÜ}»»E]¶ÁŒIãW¶å(0ã’Sï˾VkÀU~§|Ƀ2Ãx:JP¦ó˜k½аÇXˆÇ®¯Ó©Â{u_…(+õà"RüNû´.Å–oõj "¥Ò‡W¶šO"fOd(-™>Ó¤FgK..ÞŒ/%¼Ûèeßóô.R‰ÝóÈSk¨Õzw×Yç§ÏI䇔Eof­9~rÓg¾Øæ]õð S¦d‹ISÅ9àí¤7n—Ínïtïiöý½Õ÷ìäßJ9ÏÅÍó‹–àpœºranÄ’û9áõ–µÊNa¼ã„\F£Î¿ä¿¥¢íó5÷üdéÙè“˪ì¿HJÍ—¾ƒøþbÎs ³„ÂoåäMlY>OaïoÅãù¯HG,ô#•2ØÂº2a~W)Ü^ºPߣ¢ô É&‘cÇZd§Suk3}uYäœ=\{[ùèÞ"4nõÌyþ1Ç'µ³@iÐO¤ÌöÞ–eíaµÓе´ÓÕÅ«¬BX½¨þµMxÛˆÙìîÿ±cÙ endstream endobj 637 0 obj << /Length1 2677 /Length2 18866 /Length3 0 /Length 20399 /Filter /FlateDecode >> stream xÚŒøP\kÓŠbÁ%¸Ãàîîî\‚3Ààîî‚»»{pÜÝ nÁ!!hð3[¾½ÿ{«Î)ª`ž~»ûi}רÈTÕ™ÄÌLÒö®Ll̬ü % 6V++3++;"•ÈÕø?9"•ÐÙä`Ïÿ/ g ‰+X&iâ VTr°È»ÙØ8lÜül<ü¬¬vVV¾ÿ):8ó$MÜAæ%f€¼ƒ=БJÂÁÑËdiå æùßG­€‡ñOs€˜ÐdfbP2qµÚÍLlêf  «×\Ð Z¹º:ò³°xxx0›Ø¹0;8[ Ó1<@®V5  ÐÙhø#e€²‰ðïÔ˜©V —¿Ô,\=Lœ°Àd´w›¸Ù›`v€ºœ"@Åhÿ—²â_ Œ€¿‹`cfûÇÝßÖ8Ùÿilbfæ`çhbï²·X€liEfWOWF€‰½ùŠ&¶.`{w­‰)XáÏÐMÒbï&à ÿÎÏÅÌäèêÂì²ý#G–?Ü€Ë,eo.á`g´wuAü#>I3Ð \w/–¿›kcïàaïó?d²7·ø# s7GM{“PNòo°ñ·Ìè àbeeåå`@O3+–?4¼²ý!çàçãèà°§ôYÁ}\LÜWg7 ŸÏ¿þ‹ÙØæ 3W€)ÐdøÛ;X ´ø ƒûï òè³‚Ç ÀúÇÏ?Ÿ Àfî`oëõ[ýϳèH+Ë*ˆ1üò?‡ââž&N;€‹ƒÀÍÇ ðû¯UÐßQüËRÎÞÂÀ÷W°à*ý/`÷¿'€öïõ ü×—²xnÚßcþž•‹Õ ü‹íÿó°ÿiòÿoÆÿðòÿ:æÿ7"i7[Û?ÏiÿRøÿ97±Ùzý­ž[7Wð(9€7ÁþÿªjÿZ\% 9ÈÍîÿžÊ¹š€wAÌÞÒöŸB‚\¤Až@sU«™ÕŸ³ñ—Xó=³ÙU\@Ü,&6VÖÿs^.3ðíáÉ?€àÝù/£”½™ƒùKÆÎÅ 0qv6ñBdO;À‡ ¼æ@Ï?‡ÀÂlïà 6€³óX88#þÑRn.‹Ø¢¿7€Eü7â°HüF¼É߈À"õâa°HÿFl™ßˆÀ"ûqXä~#0ŸâoæSúÀ|Ê¿˜OåÄ æSýÀ|ï~#0ŸÚoæSÿ8,¿8wÍß̧óâÇbòíL\Ì@ 3³™›Ýo9ØÆô73›š˜Ù¸Øš¸Xý#ec‡`êlb´Z¸þKÌõ·ø¯ùÇ Û_b ëôù8þ‘ÿpeÌþA\àˆÌlÁãô? 'ç;»ßÙü1g,æÿ@pÌlmMœÿ¥ŽøÛ)XøRî?ÎÜÀûúÛœ½Åop¸ ÷ùøãØÁíß`ËßÁç–<;ÿVÇþ»’œàŠYy9Zíÿ¥–þÁ‘Zÿ ‚»hó/.ÎÁU°ýc·~ŸƒKù»¹làK”å7Ø—=x'× LmïfgúÇmhù¯À×;‹Ãï Á>þeÅÆNÔñ÷1˜Ãü ¶ÿO³9Ùþ–þ·ÕœàìÁóâð»yœà":Úºý+ ð; ‹Óï Átrspš›þÎ|ýÿ%ü)ßßÒÿ’²±]ü«'là´Óq\€v ÿÎØÄüüú'JpíþÏV°cøM~2°¸Z9ÿ5/à¸z8üËìÃíw à(þ|Uq1spþwuÁ-vÿ‡çñ¯;õü³zý ‚;ãý;f°'o ó_üçÎ5ss·ÆõÏÇ"øBþþó-ôš!®,9˜ „Z7†~þU/FèÁ´?%4Oµ¯NÇä³âüÅí.…®.;xËùV,e´ïíúžíè*é³Ïi{\DGÒ»ÎGß'£µÙýNį38CÓŧbŸ‰ˆ˜4D|Ÿ|µ‚l Û!»å©òÜxQU 1y Èx~¬\›_ÚwPÇ­€ôT9ÇôQ3æ}PÙUiÎ"9¬+1<=Æ…'ÚÂÍí™ J¿ÎO,A:ýÈÙûêÆŽôާ¨Ëx Ò2…*m¥†#w‘Î æJîqpÊ^>;+07º§7 §çÓúÞcú»ˆ»Øë­â’ÏN~XJ°D×¼=¾ÅÖY” >ýÖÓgŽóžžê_†ª¤¾»¡"§d ½Å,Îlá¡M¸iÀä|PÇ×i ð¾—NUZsÙéçÁ çyÁ„^:¯Â£·‡Q³—mòt©—)F+©µY¹v5jFcO^ñÒh¥Bÿ/ Qù5óZÑÙNé3ÈI¥ˆÃ»^£Ê‚Gst K†Æ‡S¡Ö#áÓ(˜½œ“€¶Ö4m¢(å¬(Y.]–Õ=A½Æ¡â£â‚ˆÁ$HB©Éýñ)êürH}œG‹w·(1ß`SÑð¬m,Z#•õk²©pÄŸFÇ.ë¤ûD,Õ2*>|˜ŒTŸW nëyE‹«.º©ÜÕŸ êOZ1¨§ðOŸÐ›ïÕûê5æ9RÓÑ0¤M-©Ÿ0 ‘EѼ߱(@ÎGÔ¦êwïו°ÕÝ?kr³dÍlô<õ1u\–´yÃþà£áɯ!¸Ñy¥ÖyzO»¶EœÝÚ4¬ á³ufç}ÌêxG VÉ_nѪüブº.+ßéæ_ejb0›£õ ÐvÙ¶·†ëÔÚë¸ÑÃ>$­…ÏvÒ?ªˆsšÒº W3F9â¥üåpÂKxDq4xÄÖ•UTQ£˜b7âcdÇ@á: ¹~‰¿r±¬uun¤–ݪH?q w:®Å‹Ë}.Ý)ˆRàK¸û‰}zªçÀäNº&P|±ÜaþcGÂ9¦!LHoÚw½Òãm+CØ>d 8¹*{Ù@Ûo-…è_&/cïúó16n—ö‚Òo—74å$Ž‘[¨´B0Uºlí·Uò5»g«ËYÎTÞh RSŸù„Òâ) ò3Kœ&ø »=e™0Ýw¥ž8=¸H"÷ãòW:ž¢2¯sËÌwm¹hLÇM7œSeo™*IõG¼ƒ;ÊÊöwz2—oàœÜ&IZ‡–”’¡º®{-ÌY ¡˜áÎý龤bìtt¡u±7#²}oôs@ T€8£Mýá#F0㢴Gl,@GÎm÷Ãë‹q™Qn8·ZFû¸ÊÖíž§©óôUÌ:žL æ*ĆKèdˆ:K·à D²âq>î‹[Ž—î.Q­ ôÞ“†iØüxl,²+§BÖSõâ=T0Ü_$ÅLÇ[$–íjÌ6åp²r’ _[ƒâe|@æûPcB_;i~¨‰GÇì*Gdå”°üIBÏ ïô=°£!°Nø0T{Xacˆt$n›m OŵEŸÃ÷ã—3+ôU»ãÐחǯ¼p[)ÚéDN’Šƒ_>Çú¬Ÿ7b%˜{$ú.‡¢ÈÈ¿z³´fÉÒtéQ†~XÈøª4UÌû±x;6nHïíDd,d1¼ Ï–O¢ã&zÿ&ÆÎ‘ÍØ:GHèY††Cñ“„½§p«Þ«óH½O§3n¯¦Þ+ŸTeÞÒ‚LíŽ['ߪð¶±¾S×$KpñŽÿ1ªçnjœz˜o¶érµHÎOf·qO S©'fmǰ ÆÜqE…f8> xKË'FHÛcß*êÏ„sx¨J#&ôE ”·ˆ»Ý)Ö[„Ïx4ÏÌŽ&û[ઠhZ¡°"ìÛ”Ñf2¦Øb2Kµ7‡ª^àÊW^µÖ‘+Ò•Ý`ø^WÑ8yУ½dÐhgû^¶¶PʃPúz¢Èk¼ÇvQTúŒ’}«Íô^ˆ¼Å‹BD[õÅH7ºî·EMŠ€ž©û„¦"ñ‡ÂäSØ)¯£pº=a?¾g/á~8Ö(µo²…Á\ùȧù,}"_'BŽ¡ïhЇ´úfÌqÊ*ækoþTObùÏpM(ÞÀéÅ$ï‚ÃÍ.Åp‘OPI¸Oü$ ѵ7Ú¯T:É¡70”_#øqMGù÷š¤ Í3ŧH–äÕh!¹õ™4èÏ9ɲ?ÎzéBÓ(5?ÓB#ÕÀ×)aV©ŠQ Y$j[ÅÈïÒ^tʨÕº¤†O‘ ÊÙO ¸aŠXÑñRO`³ˆ›¼µ¹MM"Ãí`l¾p}Ûª$8 ­Ã éý…m‹’›»Õï1H[p‹Íz´ËÃ}øLÙÅÙ„¬oú8¬PÜgtŸ*Ðp{wäÐοq)ôÓ¸Yªi¼œvO}l|’•9©».–m“Éü':„âjLvR 3PÕãËhóÏv5Èî—”§£”9hÆdò‘¬œ¤ Û=Sñ¼é©‘§e^ßõ5™éÜÍï:d‘í‡v`ÍØ#·êC•r¹m É“h\>Ô$ÉFbCò–ëî´âØ·aÎLû<50¡}þõŸëú:ç§út–ì:€]X&ïù)…wyd^hm‡÷½Ï˜±ÛÆ«>v$!isÙ5Õq;GodÜSOßûEgûàpeyÒæ“—èéËŒç|é›êF¤Oo.»T¬»Ó¾Ôn­04Ái g\*”µÒ¢é*¥§^õnÃUÊÿÔÕú9žÅÛtÖÃÖû kN!¯È†#‚©Ô4"‚I>˜eZ6ñ®•èGW»…YëÌ|žsÓ—:$AK[ÿ?Ò¸t릅‚Ô÷œš#ŠFÁq-ʺl?Þ¬c°\îvDOØhm¸X~ H~.ˆ^úþÖ†Ó6e&y_ô¾®ÛHEn«?kšÅ'ÞÆÛ‹ÉÜyÏÅ‚°àËéüÖìÒÏ_¡Ëó=wMê9{4y„Þ>øí§¦Í%óf6ª¦ðþCA_Y úú•NzîÉÍ×…¢h„´E«URÎ3–—Ÿ±ä‰CŸíQK¥Ãòö~Ê~RBðмË>ãLûº:À˜½ *Ð5Þj§~5Ðeøèt­”PLßšãßAØã½Þ!¸é¤y 1#ž¦[N˜'iÐ1¾eç–>Åýè§rŒ/ŬaÚ¬‡¾ØîŸ‰nÄ¥UØô?¶‰Sí˜<ާ¸q¦ùäb¥Â!\>-V»—º»ÝW[ö>ôdFVaTô bŠÇ\¥¿è`,ÔI;:Ü$á¿n½7—ß— ΄ž\Ip–$ÝëxyךOYîý›ô!®V‹hLï“¢î¿)’˜.`÷2ÖYªØÓðb>TÖÔ’áH-„Ó¿„±á"ö³Çhð¯Lô†¶‡DåóÕ·<÷äS¦s¢©äï“=§¬³°“­tØî> Ðܔϼi2,uBœ¦ýqðÐË%Óƒ ä}ko2eˆDHj„`žÆ`[¥AîCâ®7rwÖRYÃ) ‡‡Œ·€M=Ì ®´ Ù²dÉðì,¨Wž=š×d¹´”øŽõ.¨ ‹ÂÑOWNA?ø~0’±kþN,ý‡šê)œª HðN[r?©8eûÔ8ÒuJ%2Qu(Óv"îVÇþ=«Ò$ Õˆøê~¾r>r£ÈÖä4Gü×óÅ‹¦d¦”ÕÍ{ÉdeØ}a“ çÏœËI‹¢ø÷æ]•i½É‡îu\XŸ N:²¹€Ø’j ­fBª ¨W—ª5^â—Ì…;»èÀÌ5©š:Å“ƒlYßõ¤¾ú†ˆVÅÍH7\wÙůq⦲ýÃúžÎ!´JÛCÔ›FÂûŒ=ÀÈ]ùe¨:7*Î}ÔÁ°ø{o7d ¼¸®†åÛtØUØ? “ô©Èàȼªi( ì¬˼ÒÎ…— R#×d¶v:±%TŸ­ò_?öÌB–ëóªÊ½UéßW¤©/«í›Ó“Ú*Ÿã~3Å´¨À‚òøâf4XGĺ…ÇQbÔm×/Ír´ðîçõ'7‹ëÝBÄŸ4rÊ0…»"£˜NÖ•?3èÇbO3çr[ Ä0†g‰gœ w;+¸©eg’%ø–ìœßøöó87b\ÉÜSñG\Ê;¿´nÒVYÊö 4}ò¯óT=†5 TØÝ\ÀÇíÝÖ}Ð “O"ÿÕ–L‰%bÑÊC’¶š¹å‡Þž¨3þÍá(òã)›f—A# èËsãŸçù‹Oº+q v, ‚å†8ñ#=´oȧ슎OœÆÜé2;p™ü&èh¦çÛÒ‹õ†RbD–µ ¼Aš#¿ƒxlÜî àðKð–ÞÑå¼Õ†ûªN$;–.¿S–{LçÿŠE•]fªß®"ÒÿsP;OÍ#b«}Xª†«H„ïÄè<äO\át¶c±An1jPYN\ ¦¾$þ§‰‚Çì=<ø¦b~aAy%Š: *܇,oi ŒùI§~~jênJ('é€ÄþÉk#Iy#Øò:¡dìå'sRš;&Bg–¸þfó*5ó•gG‰ŒW|ìK¬-ä(ó:2”à É4Nó¢[¤;¢Bk¨ºÈ$«ž`%ñçK%Ã\)¨¥É(‚:‘æ&@CÿáíÖ@2Ô®mA;™v÷^–¬|ÂeMä$lÇ¥çïk€SÕr-Èê.è£âr­1‹ î—+À£æRµNw[JßÐÝ«“ãÅÄwž³Î{²ï"?e¸{ÿ<Ì ¹F®üäŒ3.žV˜Þ¥wˆTiÑÔ™x^`“ ÷ÑïLâ @vúG+íKH\~¨M¾a#wÎ$tÉšR—¨=€ê›óC~Ô_x\0$c*e£¬çRLÞTBG—c~ÁYL–ûÁaN‘!Ï÷:C.:Œ¢0=h»ÕbFß)ŽÉP^ƒ½.­mo®ä7­¦ë–aª Ý\ãžyh&bd©dÃ¥ç0à°õ¨<ïSÈœE~8´?îÖ¹LŸðÂÓ׿ÓÉHƼ·ùÕé{–6£PR¼˜­"Ðéy_M"•YŒaËЧvÙÙAÐå®ã´,ú¢{¾¥[&ÎÜ{‹:7(¡ÚmŒPŸ%¢£ Tpn?¼;û k\~h,o$^·MbU¶àôó“™L`”ùrz˜°›~ [Qé®zøÇa–iwr©’~š‰©ƒB–Üý¬f¨C¡Ç¢%ñ%GbïâGßµ.'bô‹*š‡ ´Hõ‡%¹%­÷pk % Ë‘èúF[zÍFgÖáDµE/É\Åuå4ʼhJ‘Tp Rüî1ˆQcä¡Ðmó•?*v’LJ=q¦u‘c?Ù!ß5L ?^þøQAnê² rf г#î/Ïâ8è‹ÎLЖ4X}ux,Åþ ¢Ì­n u2WÁz$Œ°Ïç _*Ãñqç÷pm¤•Ð)~ !h®¶˜4Y«ïÔ‚81ÍÝ]q@¯‡vIÓá7"Ô'ÅB?wL»€¦°°Ó}-ʪ>rô©²â­˜ºÅÒøÚØCÍ(ò1B”:±Nk=ßçݲíõ÷5¹Ýn m¤Yo¿^åîýx·oç7Åw‘‡ NSxvVªI!Hx@}ræfdÔ·Í®dEÈ2æW!»ŽËyM½†sY\YÑ!bÅ~qFMÄ‚4Æx‰+BUÛ;¿4xP1¦Òßkn/öñaŠt‹ªƒaA¢ÁhÏ0ÎbáÄ{ë›¥ä° ¼³Å¬ÈaoìVá.vçù÷C‡BpâVÕÆÌ’¦Áü˜¾]Žñúó¡0¾•­ðð˜Ò¹q mPG|ö³Ví¨æœ;Û~Õã—ÂìA¨ú¦·ìûù\’ß3h^ù–~Ü;ƒobGÍÞP;ào™ï”¥PQ˜‘W $xZ Ú|ö E5“SF™Î»‹®î±Ÿó]#Q„NýMCÛâÆO(Ú=-Íç' ß`–ôlªÑ|IÚ›ƒVZB˜`”}º`߬¢£4t¼‘θ†(¹;)Û\%V‰åV†O>=Dè£^˜tŠpȰˆËnµqé4ýÆÑÿ””ÙKŠCÉXdñÚc”Ž” :“'7!Õ»ÔÜìÚÐê€åEr×'(y«"'7Xd1!?y=Œ<Áo«B¡ÍKÉ)ßûq9j7ð!œø ¦Fq‰ÙÝõÀ 1ÏxÎæõ•³ °“jv|>< Œ¶ßœi¶ßúF”J×îùËE¹²úiö4(â»»Éä¶f{ž“4¦DfaTfËÞ’’~‚ œòÉé^ü·®/¤ ^WIÑñíã.Ph½wvß½ ¸?«8™sÊɨÙÁ³– ¦=õDÙ[¦Ñ%‚BP¿&9üšüy °"W^]¶x,v˜cÉf; %ÊYKORÑhÿmsb0ÖV>eÊùjV@§d&¹@ûƒ}r>!> ä÷8ZôŠžªøyŒóó›%Grvºt_•7h|&øºI®¨Uԯܑ£Dá ¨”H_ƒnã°«wúäÜŸãÅ6¤M3 †ÍÐ`{–±„áZÙ¨Ô?°Uqn_t–²•½ï§5£™ž±ýy䉈ÂYˆ å ØÈô@œ+Ä•Ûݤ%m™m‰ &X}<¤§Š·áž‚ò¢d<ÊR¾"i”«w“I…¸¾…´C76OÓæ<†ÅN»8q ±qXÙ"”¿SûX›Ógѹ'‹c½fð³?”;!NñƒeN1-ÅN̬”ÖçtµœaÅT@œM?=g¶˜kI.å¯UüµäºS²îI#ùÉËÞ¢ãbÊ¢¦¢ˆÝ~¶µD$H ©6ô—Û{ôïºÅûCPÖÃXù¨FùÝl”¥@Âc|Š´bôtJ{JÖïúãiðý1q* FH ëH=dÈæØo/t@{«Z7-S¤B_Ï&q.Þg8"Ï­m-ßu@Ö -ˆqõ¾Ä‰žm=·CÞ.âñºø(ÄàÜN÷,s€ÊñÅ4ÞÈ^‘5€fÈþ…¿>;™$åÔÅm¦Qϸ—¤pñÊI‚æTžvËAÆ“>ùá¼Rª¨X“Ü #½@ó‚Âähe‡ž0f¶K²+¢ ÝÞa×–øxê˜ö<‹?3>Ž®ÃR-Ò¹“ `í/DÎHý°ÜÏ‘ªòY% ínÌA”½+ž,[É=y`yƒU"C§= $Š2J„«™öÀ¼íüD𡆢Ú™š\ëMÝxf14*ýçY]øáeS„¬º"‘rj…¹#®eĽ §(U«÷IXûì_#óùä4<¦^’*»lØ©#£Yõ9®æ˜¨ÄÝa×\m…âü†yz¿JÊê¼®Ž  ¯'W2÷‘…ãódoôiÕØ†ëð':[^nçÃYÓõŽJÃéÉJm0Ü×è»Ù¥>ÜGÆßZe³Õ¾´¥ V£œY ‚¼MAò¢ºà“. rugÕ/¶kCòOÐÇÈ!}]îC}݉•¡ýHñŒŒÝØÎ,CŸ"/Ü>´’|ëpB¨¦žìXÁ&ü»L¥Å»rAe—ô¢¼Âš˜l¶ZÖãMbÔSSqÎðì`ØWï3ò°¦ ,›Ìs:mÄziŠ$Üqȃ©ê„¶ñÃrW9-ak†‚àŽ4ÛÐB óÔ´uVõ}&ƈÊÿðÚíÄ(K8c—ñ2ðBw¾Nu¹J•Z/C׎î?Ó•d×®ƒ¢*\­Lìê”­‘Ñÿ£zë-ëh—#®z¬²ÚùUdË~T™‘®ðÇPÑØ3YVÞ[ÏòŸ”Ãðþqç+3IÎÁ‡5ŠlՔ螑HtæYžo‰öv–#TPýC\¹RAðü.æBg°é•óôT&«¿"…Úô`"Lª›dËdð§W¯*~!Þßg‘p·¢WŸºàÚ¡«'¼îÂeMåµ5ÌïEtEʦ†*}ýñÁWB¦ž‹Ž@–5]}tiŒ8?¬á{.JbØÉVw ºÃH§\ÚÔZq¸#ùV,5[¯s®ÿ=ùÝN~|aNÀŒªŸPŠt-.,b޹ñÇÉ£1 6±Ê˜È¼˜ôwtV«ð~ÚaŒ&ÏÇíb:”m :úP,½†t|õƒ)#/žìX6äûª2Ê”+rIòÆîŒaÞ­]¨[ë-®e@ÚÝY§MLÏÑSÓÖVtEï³Ì<ÜS Ý?Oѧ7Ðﵘ0 ç 9ŽA‘SNÆüÀó¼+ŒÒ”ë±åØ”J«!£,W¼HÈu–ÂòæW5j'Gm&?gk7ªQ@ép ‹Ï±­¶ 3ö5ãÄ«]‹žS¶/˜’«À+õIÈÏÑtI\U×wðÝ¢'Ý ¦;»ÆêµÄeú£­¼ªå4t[|>¾QV,€ÄÛBÎÌhk‘/ßWÞ)MÖ“b}1W•ÓXåž«~É$/¡M¤€ïH½ä;83é§QZœîß~ÇvÞ`nŠª\èó³Õ•i×Û1BLdÒ*¨ªøvÁYAÕ·¾¯M†8<×eÈú(­_’ÐZïªd*mÛ<{ä=&³åOç¢ïEóªø@HCY D¶(ø|«mï3C ÕÁ×ÍUwÝÊ:YŽDPAáÆ×šAá‘ðJª¥ðóVô0ŸtiÅS´œ4~_cf}•:€69Òü`uÆ(¸ý£nø®Ûº»©‰ÚÕ^¯ÉŒöõÁq[hÑ!H°µÌuý!²”­¢æý$sKT ;9˜%}<—«ƒ¢ºý`n„s?¸œOo.*ê°¬~¬û¸òe€4yĈöCÉëÎõ!ýJDšÛ)£)Ƀ(”xºCXÖÑM€+;® é`áÝ*–¡½kí¿­)Tá²mH)ah"Raåˆd?e F SJÊû…ÄÜ&Wìˆùƒ~Bfá‘þM"þóÞ¢×Ò§ËjG[eÊýI_ØQ‘°°à2 +}Ó§ª~äÐ¥ªèKÞ|L­ºYã"†émókl5i^`žÙ D²B­dÒ2¯þg; ²š½©‚1mBÕXWuAHvžñò›ÉšÅα»n BÆ_YŸyMéRÚ'˜O^,YÆÕÿ„ܳšzñÕ®¨“B-³¨ƒjpø€«#öü•Ò¼T‰m­õC…eÔ£­ƒw¹'”5ŒØòëË`­Ãj¦¿E÷€»ã|é A´’NÁùâ[ª0æÜúV;è\wmÞg—K+¢¥F€€~;´,jøÎEªú?U_úw=ylîòÕŒöuéÞˆË-Ží”®COúEhŠ˜Þ7ôšãŸ&Sìú§®¨Â°ÙFÏÃÓØ}XéóÙ:\ÈÖ©¶„ñü„«REÍ$³?áfVl­CyÜ ÷}aÀ)/¶jˆÈï$ü¢³ Š;üJ’L)á™?áHÅ%7ཾì¨îéEÚèÙ\êyÝ™­¶J‚¡yH›Sïöªá~ЭA›GèY4,„Oãò‰½ÐXùw ÊcïÞJTÌ3ÎÖ-®ØJñ¯³Æz¿YIEË_ýTôSêáK§µÁ%O>Ìñ·4‡þ¤ yÖá×Px¿”.oM¹=µ£óɰ3oýâvjÕtQRÆ`q‚¯-}z~QèºòY_}˜É•÷5¹y1‰»‰`+ÅIõâVBMà Þòó++FH"^ÝÀ!U0²šì+€¹°y“òž)<+–T¼<¬*ªÛ¤G‡› _âíœ$á[åöO˜¼ ºþÔ] ž4ÚíµyE+æÅeGmYç Ï–µÁš{€!"\L÷üS£ ìè ¢IНa½b„¦L“óÇ(Ì|'TñÍØ–‰<™cì …)´FTNã,….(ÇÈÚ ‰D„+Nfv‰g[òÞM)o Yð•áȵôù«:Ûi£ŸSlÝgª¯dÖÔÔžT«_„q$ÚФ@€m!U÷é1—> KIÈ:üé •/ôÕÇKg'NYˆõÑ 8Î ³:‰°€SQ½â‚v¹’{±í§`ÅäæÜͯSŸ²´þâKïŠÄp®”» Žá°Ój›ï~'‰€á®ؒ٩á¢.ÇØ$¦aB àzžaåõ»Ü%Ñ®¹Ò΢dŠ> è8i¬s&D˜W^¾:CšH*-­QTÉÝS{):j«˜jõ!‚þ°çœ†’ÏïÐç’“ƒ#ª7'ó6¤oŒr:{HÞüŠHP\ÖU!Ä ø&ðI£jh¦kOêei0ü¦ç)zBh”¾tecsM°r1‰uë\HZcÀ‰›VáØ¼ÿÑËu8˜kuA8!%b§©×`0AÉb‹\r݇+?‘ûþlú$ô1ÒT½´&š,Ú‚K+ÿåÝVTyÓŒ–ð°­šdH‘ º’Ë)f›ñO¤o‹3œ¢Èþíæ%cm(Þ€£W𨑓òi†¤ußX\NŽiٽࠉ—›Â÷w­”£‡#ñK9„vÌß]ß?¢¸.(Irp]Ò|¦àG›»¡`p©Sð‹m¿»ç3Nðª“\ec›ðž†lêg %B̸®ÇH+^±¸2„KœëwB&BÉ¥/Ô^ñxߤà×Uáf_÷YNÚ=&²O?µfYêÞzî}&nëÀj„ {_ŸxʼŒ’Òjß¹¯ÚÊ™~µ ÇîÃJëÛJú ô"2:­¥9=z“#ÊdٜȺؤaËèÃ&x؃{!Y˜­ÉN"=ÆUéÛgAi ,ž´ÓÝ|ɔ߯· SkP_^Z`ÓͨæO‡PÈZ„4X§AP òNÌ(-ÚÇLêî«´A;êô÷Go¨cVB’o9ÁæŒmÈ2†ïtà<þ:™imá8£¤*»X¶±¥?Ø(X\bKö¡ŠÇÏZ x!"}ÏÇçW~ßAöýº<múf­-©ÑÙQÊÒÃg†ø7±-àqy£/ªÆZ ôLÓæœê—ñ‘Û;°GoS+«=&÷«(fŽœÄ­aÒðÇÙßoÈ]xÛÉTWÿûÏ ÝÑ‚Ð: yÓ¼åÛYR±uæbSW‰ÄÐN¬çSá6­ÎÝl€V é\‡Àh_Þ5d Bߨy!)¢_Ò/©÷È5ïÆÛ?úá¢?:˜É«Y"Y¸„W·[“Í7ØŸÊY>æ]ýzhÕȨþ5{AÕ«vJDTEcîÈ‹L>- *ö¾5,þ&E“æÀo±ˆžÓøñwm¹H¢¤?w¾³~¢ù ¤LñQ+bæ…\§–™ã0¨x%”› !³l;XÄëÍVŠÆXýK}/a³<‡vĬ›O~Ì÷Ô}(÷ÊØW !è¢×l"a²ˆBc»~€ª•ý"›|¶úmÂ&oIîñ$¬±-Çß=ÒÉÒ $ÇM|ΑWÖ°n‹ƒ**‹úõ—’Éë›Z–ÂÁÂ!>NÞË¡iš{·4AÉP³·J€åŒr2J P ÷G‰†Qç› œ¡éZ?òÞ ­.qáó OÓáU×ÁŸ'x,t~91$ÙUm_÷:ê2½ ]Ž(·ýdn’ˆK:ô(×”{&Òox¿‘s˜“úáœ;¼ŠÇc×c®¹ØÆý$|F~rŽv)%¬X÷(¶°«™ˆ—™Jß̉¸£ª„å¤V4}XL»‰ôÂͲ}°qê¾®«Øê–¼’®¨ ÍY -ÛH,FÁé÷œJÖIL—ÐÞT4cm‹Ò¦Ü34óWNXð–ÙŸgž"švøku Ïd®‹Ò ñ …øOu×Þ«’ò"è¢Z˧û‰Ë…ÐÎõPMÈzÅö-¯X¢Üž–°ÿ( n¤†çp«ð·¼t!ò0ÞÒ°'Ua Ø·üHá¡JSf%|鮼 eœ ÿnQùè/╦58yî•; ò§:¨A^¶¨é>v™p¸»àmÎŒo²§­uù½8üûÀ˜kÖ9î)­^s¯áKœPãÇøÖ‹"½øº1wd0ß]=÷µwÓGÛŒ;ƒ µ8š¸ÝÏrZŠ%6æÚ »·)•!u¿?ëXážØ” ôÌŸó¬ö4AvÇâÜÒƒBžÃ}ú’¿æ«]Û /9²[Fõ /nÓÃëÔ(ëøôYû¬/‘ä ùÕ˜F”Qi 8Àû–á¤Yë½Gýõ9Q#%çœ çY…!|ps2j•ýT½gðkI\9 Ë„(¥i V©s`HÚp,ôy5QÝ|Y|ý  î»orÖ£"ùo¥Å¬ðò§xD׃¸¤N{-ïùùKËÞ<ªÅA B1Ž}ØGÔ“%ÞŸQ| ý ±T6MN|¢´e…PâÏÿQÁbioZ ²©Ÿ‡€v$Žv-²Ü„ðî"™sûëa£G—* î`×'ŒLvIsÞ»6µcZpó_³Y Ç(Ê;b‹çî!MÛoˆîIº¬ËÛ×üò1[Ž [&`”ŠŠ¬l×ׂŽõ4Ÿã`†Q¾];#”‘¥Õ?+%¬>˜Ðßb~Ö^B¬Å82¡~‘Gß¼ï%{ù£ø|ŠPl&ÏŠ,¹ÙBöŸ§zâîË<–N?çqÙ$EF³m=B‚àqQ¡ÊiÐ$r£00»Õ}Ã;¹ŸÔn€¬™+A‹6)Ñx´³¸äá»é1Ìe óÒ³½Å§çzÛú~Kуñt/H^ùUôûÅ i4¥[­cŒQº§ød”Éø"q÷ûrQÔÇI53 žèsìä³™ÅÔ¥ §X]É—Ž´bÜõ#ˆSè5Â’´«ˆ*§ÏšÜÏÁ Ø[ÇéðÏiýKBo Î×ݦ^A “AŸ]\%!•lÚ S¹ù9»Òt«ÈŸ©Ÿ¢',K^¶j% B ¬+™‘ïkÄ«Ãk<Møë®ƒ^Ûá‘v¿±}ÐÁ0¸LÂj-„¥Ÿ?*ÛM¡-¾“\Ýù"H‹žÖ|hH‹¨Bšd¨-‡b¿«¨€¢9¥yá vl\•!£*¹ë ¿nÉãÓè‹=ì'Ëc$L\Ô/5Ñ)õiëk¿:o”ŽVvÊ–>£—ç拞âÚîwœ{K´¸QZD¨s1I"XbwM"²þ²Xñ¨½Š#‹>×O õl»u²V܇ïÄ6úðÞ‘ú×ûxç,A–Ц߳hð‰ÿP~9l–ý¬ßø3•ßzØŸÝà¬-×·T/&ré;cWÍÉå6_Ë›wn7D;W4hù:ɰ$6M8¹ÊìÊG˜ÐRNÒ ÎŽf…†Ô˜¬!«LT~Ñ\Ê^S%’§e‰ÉßRú2)Ì3šÔ¹²›¨Ë+ö><딸Ož˜äét ~áãÇÞJ‘ðy€xÙ¤zõjĦ÷CƒnᣰŸp¹DÜú‚9 dýñ‚ËZK5ü)Åþ§–µj_ f‡ÅMïùWÛŒ*i?ÈhôàïÒ ú5>ŽŒ,ÿ¥í}+çxzh(½zLüöIï†âé(î«Kk=ÖÅ9¦¤ˆÆêld ¡— ÀÅfµöíFwªo×q¦$¬ÅG6jw¢ƒj|[’ò°œ"å_ O …O78f@US‰ñNPH4®¶\ÑóœÀ ïb“ë1òïüy:º&F‰ô8ï'»v·Ço©¯ñR¤ôª$¾>FkÜS Ìž'ÄM^PÁFî”·N–Xn”êúcζ¿¨õ›QãF*ßö(<®`ÕV¿éðÿ)‹‰ÀFö«Y³`Ué’·óå¾lí¸ãÍpò ÷†ƒß¢;B:ì m¿Ý[aŒ×åkz'àW AÁ œ¸$ã±nÓw‘Ïݺh‚ï’_€t iJ$Žyn7EFOöî¾§à¿UíÙ@“/~õ$ÁT.Ãã=èìÊÁÅL£k¹%‚È­´È[¬ášü5¶…Y¸¯çØ›û²~µµ Š¿2zÛioÓEß­|>+O_zàm^o§”SÑ’oñœY  œuAaPÙK«Ž~|Qà'öA'èm(7åjí늞Vš'ÜxóíFùXK¬IÊìÐ7´È!sO;ÄÏ«;™®êU,…¼¶t¢‚é™ðµf£Íõ›yMØQOŽzŸ_‹1£ß§ñ˜Z¸BØäìUÖÝ:5m$º„Hß}Ísˆš6‰õPºô¡‰Vsþìñ˜Q¨œ~š‹‡%¡ëÅøD8wyîÖ×t¾…Ë%¸éÉå襵ŒáiçæÅ¾ýl2Úö«  iàc}ñèè®ÞtãŒø“/Ó_4Ø–R *Æá-ïÝW@Y¹¿s×é2Šÿ|¶n]÷k‰”ÞëÃA)NÈádNóš]Kÿ×6J7'T#Çv‚Z›;ô¢ðZŠâ›ûXD|¯7é ´ø'n Ë/!Šôšb¬Á•ù2æÓ57%<®\ É×C/o_¡ëq¦‚7¶×°œ‰½®Ï-™6÷9NjMŸ™::6ÇìJ¬ð”î'UðÂÑ5¥ê6±¾ÞH ñ;Ív³;g9u‡¼Câz]ÖðMÔÏë~1¬±/Ö`¶šj$èt^.Ô>[pÍvCRÜ—àq²î1ïœ.¨#« ß”¹CêæK#ênB“¢n§ÊùZÀŸ³\7´húbûüX>½&ûI˨'4ðM¥Â]ÁAy1©¶“Î-•€/³YY8¼†Â‰]Ôä䚣öÞPúx×eŸÇcgÊí»ãã• ~z§Ê±f&ë¹ÏAúœÉP¸©ÖMþ¯ÎñHŸþUªÃáÏ&ˆ~àWi~Ê.Iœ®c^öî(’=Ô%%š£a W p¤·ýÊ…°º|¶äÂwjÈðMv‹íxÔ¸êþA {%Ÿ ]áÏ¿w >}n‚ÑøðíÁžžïW7>ÅqZt½jŸüó:d °…æ/`6{ãg^”A\ö··ˆ%,Dr-Ge$Ã$-'¾%æyÌŠéuù²? ;¾kÙÄ>÷@PŠÎ ë&ºÊíon# BÄ2ÞÆáTˆþd¡‡ÉމZµ¯²Û} JtrƒŽÏÝ–ÇLoíÙÞÈÂS_!nó 2/^\ç²1F/=«½yéóÄ3 ô®DVÙouýˆwyÖ«Ò‘\¿2fgg|é$øö¹õf?>ž.'AD†LÔù6ð·õìû`u³Ò!)B¼…à\ûÞ+%o=Z>LªpCöWöI„¦©IàsÝ6lÆÒ“ 0©z6»ü 7Gºét,&Rùw]ÌE! ½¤ÖøxûÔóTq·9q¿£%š:D¢KyNYG š­dk¸¡À8¢Z²í_Äkm¢‹Ñ‡Ö³k@¯%ûÞ­ÕãYHÖH„TÑgÀév+ "1–nÑ~ûÚst4·`£ARw e‹@JxÝ2 òr‹ŽwŽ Ž÷;tVnŸ£èq>éZVcµÔ‘•{»ñŇ,GÏd,³÷WÐË®QT—ïúñ÷ÝÚø«ƒ–E¤?ëÈ7G±F3¼N_^¸Þ2ûì¦{B O™p‚ß]Ðò಴ⱚ6PÓñMò$VbÝrB -¸¹~P¾"YÓõ—AfN£]HË ?e³úô.N¢:`yœ“ªÁÄé›–cÈÃώ[TßÑ‹þŸÒ -òó¥8¬É™#IÖ¾æVÊöÔ…«ÒWØhùt˜kà}ŒÎÚ.fª:([ã‡&:c›²+³ÁU*üSÑ„}:ލIÀ;%{IN%RsÐHõê[/¹¹±´Ö˜ÐåßÅeψX­¨ÂåtªSHަÃñ<^žü'¾|>1 {\úa)pGµBœq?ðƘ¸©¾„1Lï3 y5ëjÙ…ÅsÜØzÂe:žL,M¬˜HS t̼4À9﬋E@†{ß–­£ÿâç û%Iì:èoå˜ãº77˜‡COíöV¥?βnï÷iZ­dh> rDE×\^ +ö¤Ü}mM¬¨aºŠÝ¸þpOWÉjY0£h?_6¤FÏtR#@]}ö)–ž3rð;wý~È[Óôà…YÆ­Lzƒú:ßÕ¾j:XœÄëêÇéG·‹MÄŠÿkfÆSŠP’Ëû&EÑ Ÿ©ùà4ÌTx#Ævö’6 Èr•]jrs7  ué-¸Ë¹Ñs(èB§5¬]stz8‰i½{-„eP½Ž\B7§›ä)VQÎ8+“6NpXœ–1V?ö®~9Zbg¡n`HÁ‰g8)³ U°ÞvYRšÀ eâC®ˆM`†[6¾5‹›u¾C÷á) î 9‘ä'ÿagZÆ6aÇU›ê‘PÃ_XÍdŸQ'~Ú›Ì àcMižlû H_Ó=ö+VI‘C±#½™ƒèg‡Õi­ÚdxÀPFd® ¸ð†îÕÅ2¦ÓW¯0‘N’“A‘/t’ w/ õíÀgÌø„Üé´“ƒá N¶óoRT0fŒA¡|LqÈ1}ó¦ÑÍ?â„Ê]\¸Þ[¥*Eý¤–Ûº±>ÙÒàƒÍZ’ ª‘0•kzvµ@E’È»ÊTzn|N!®x·+'æ‰8gTåmmÅWh““¾‰¨B_>½„üæšéS×瓪!ñ”/ýD ]R·_Ù'Ð%Èå:†vK2…‘^ö²ôÕ1‡¢G3Q«ÐÍ8‘vÌeJƒï¦OÍŒÊ œ¯-R†ž±àÉD¯š˜KË0î)½ÎWG^¨€l ƾ­2np‡¸3¯!ßïã B› 4zêìa°Â’'Á5øRø_?WªB_Ë…íÆ±L#s»´U¥@À̺¾“ 5ÈV;dDÉìÝE˜JÙÜOK ÛŽÎ?‡Ñ¡Ý_ ¾¡êÑHwõa'Y]µÔ”¨î¿ _viÏÏz»kåùϵªf¿áñÒ>1†º·YÛ±Ÿ\ J{£Ò¡’—û¤fþ«.@˜Ð·$IJðQÓ/âZØ™O ‡Mº4¶>¨g3JY—XÀ(^×J5×ú¡x ž.r2 ·Ÿ•«'šiÃÞóç ©iôr@xÐ\zÿyCÀ‚ÆáXªg."×B2¥êûfH¸¿ÞR½ÜhÕ`u€Âퟶ)íº“ ½²¡°:%‰O²œêmÿÊʉ‰° ç¨ÎíQ-èV§ÁÈfƒ‹–jaÓïÚšQ¿]VØ_cÏö)Y®Öž"éç¹Þ­3°õèê8'nðºWºï  >¢î-ztßåģĈ%Ó22èËÓò8»nÄ88ô‹ºA‘×:zg¶Õ%l]ÈY1|Y0(¹,ߟh’z¸¡ÔU˜5εÅó{àsOCº  Y1MÀ~d›’s )r²#Î×ñm¦¼¯Ÿö°(ì?K–ó—ÔLŽ1DDZn3ä*^G¬FЕ.6å(ªæeüܬPE÷°6³svÈÜ_ŒgJø"³áSËEANudCâïvJþoÖSrààârÅ–ž?„8Œ(=›±=àg8¬2)‘™óÅpçCû±'[–¬OTº‡€CâfÊÏzëœû׿z½—=—@Ÿ¬ÐQc†»?+äð*w—ÝöÖ›¥¶*uúææQ&½‘¹gŠcÒ($UöìØ}ä/½+u 1YWÕ¨4 ¼•¬g°Á•p)sN3Þí¼ï><ðv#â"ž¾m¬ _µ i»,¶Ü®K :vy?0?ôenü¥Õò×={Fq|¤¸Mej©Áíf±\‚5{”fú•?¾½ƒkI’3X%Mn„ãFôšo‚S\@àâ:f¶1î¹4LPný%ש£…FÉ›ñÃM8X]á Ì3ƒòE­—"u8ð œÐú´ìšÔ¨ZsK™*ÂqôûËì³—ZšÚN© Núµ÷÷¤ˆöI2«>„.肾[×?æa,(½)%f $Ç9ÀcàúõšÜ¾±(á¿©Û H§†^„jîÚÇjÂѦì<4åì¸Áj?Ø1çT·€­?Ò¦âTÇÍÙH€‰-ùP¼ ¢rŠâ³¿øõ7´ Í)JD ,/ƒ˜(%ìV;ÎùÓ¯pÌÔ×ÃNf Ëô¥ÜcU¸RðÑ ¹cY0…„:\ŠÅGé‚ZZÀfYû"Ví­&E–ãÏ1H‹­Ür³ 7¢±Ɉ´e–~f-ŠÃ §híÖë°b Bð W'ÐyBLêÑõ°lcPëj•ieHò4$ÑÑ‚Œ‰å× ·ñìWÝñ”*­jD8Ù/H©-d»ÎüG&{K«gê@½Øê´íÊ–Ža²u£K%)¨§ÀM@~]£?+”T:y}ÚÇ…=c ÕGºAÊÖX’;"}8Ößê¿ÖæW«0¨t¹7Mçéñ š(”jÔΦ¼_¨£…€ò ”ÖQÂ< sd0~oF±`¯zQÛ‡·Žæ±À‚ôÖ5Îbáë©yóÀÐ3—³Ç€ô°$Kȯ$ÄLÿ-DóÜóýl«º‰![ËóÛf«„í¶0\¸ùu ^ ¦q»PE¾ÐÊ×)âs9§‡zžˆ™’'ß„8uá¢õ@/Tñ¹sø#wÓsRë’Ž‹¤Ù}sí‹ñ${RBTðè蛸ê½!<3ï»LÕÏŠ9¹ÅØVÔ~%­¾°RnŠ«QO§Ê$Ö˜J£Ì›uV‡m‘ñ¤®=­€$͹ÆÇiÒ:¾|Tïõåx®Š$È8;mGu9BWA‹ËmÝ8?ˆKuRͧ¢Ïäwñ¢ þ˜u—ÔP­Â)®+µ À{½ÕO!1"ëÓ`WÁ«o½¸(`Æ0ÿz_‘®·eòch‹©<ìÎwò”ÁÞ¼•š¹W@gì®u뜱zuXç]s„|¶úEþMú6 òjþ/™ñ»IIÉ[™Ý>Ķ˜­B‡ˆ³Pµàg¾kþ’E×Âô1J·DÓli“_hH&i‚ùrëo\u™¹5宵E+ô“Oì90›y•µkÚ:!àáexIK{:‘€ryÂèAHîh*݈T"OqàÞiùB·ù3ü&)½HÓõ—}7 ”„ IÜpX¸T7\RÿvÄå¢3­îE¤í} Þ6>ÂuàáA“‘ê½c=µ‡X+}PÙpÂÓì~ÚYt—ë2F€cy"/Pð¥Ò½üwp ,üãŒH¥’1ÕK£WίÈV †OR´•ÔÝÉ„Rè´üOe7n,Ú‹“/>aÚô\wþß3´pë$Uˆ,ågòÕ`s‹F aHâ8`nš€l¥øív×} ÛÒѳ?CÒ÷4•4v*ð_ÎXô×t/á{ÁÎ#ÓK#°ø˜Ì´[oɸ§"8HT3d-ì-"Âç¸À}võetžÝf±¿’w ˜bMϱ¸¡È=«ßRýåê¼ Á}ÄvŠÛŒ*ªâcYI—Wy©z‰+<Àå› Úœ}ã"Á§81µ(9,6V Ÿ¢½HÛµ‰  ÷¨0ÿ f>:B*=v¨bNH[wl¼î9°R òjÐí‹¥") *A&$ÌÎÙR":çR†ÝS­H‹u?Õ"°o ¸Mé=`ÄӰψtèåoxlþéþ6äšu¹ï¨+ù Å?ç$¶ö"av] ÆMCB€6û4”ú•×J8)·¬\•Å"ð¿E•K0 ™À€'ñÀÆñXÂb®sZëàá5K›öçg-Û‚N9°LèMt«ê:A’+˜ÖrÉ« Õ@á åMÇ8ÿˆVÖGÿ)MË(¨ù—y:Õµx«‹ú+Ô-9ö µZ”xO˜<ïùÆ• Âà ^õ«}šWåæÉ¥5.£ Óæ†ÊóÕïå7aö¶ó(1ܶ¶g*Tê"O½£Žé´µù Šch_—#ìœ:ëáç„ &~ü0†VóL#\16½Ÿûý›'‹Õ¾[T (O<ÉhÞÁ'˜sá{ ¥T×1 endstream endobj 639 0 obj << /Length1 1632 /Length2 3829 /Length3 0 /Length 4849 /Filter /FlateDecode >> stream xÚu 8”}Ô>¥,-ÊZûf‘}É^öm,YÒ˜yÆ cfÌb—-E*{²”B^B ‰T–(ÛÈN¶HôêÍû¾ÿÿu}ß5×5óÜçÜçüÎ9Ï}~#.li#§ƒ&º†DU&UôÌ€Bä¡P8‡¸8GŃÛ9Äí@2G$¨ýƒ¡G‘T†MIe͈À˜†` LI ¦¬…p(Tõo"‘¬è#}phÀL0&@ ‡¸‘äOƹc©Œsþ~¤PÒLUUYög8 ã’q($0CR± ãDØQ8êÿ¯RX*•¤øúúÊ#½(òD²»–´,à‹£bk’}@4°Õ2`Žô·&Ï! °8Ê/‡ CõE’A€aÀãP ¡Р`œØ™$ð‹lú‹ ü“‡ýI÷;z+Žð3‰B½HH‚?Žà`px°04•§úQe$½EDâ)DF<Ò‰Ã#Ý„Ÿ¥#C+ÉèðwG¢Rä)8üV­4Œ1ÐzD//@¥plÕ§#ƒ(ÆÜý!¿_®'èKüap4f« 4±%à¼i ‘þoÃıms©€" UQP@oôCa![ üIàO'lËÌè!8D$F`02~8)H ’i`pà?ÿF0€Æ¡¨€èŽ#plgg˜AÌ/ÌxÿdœàeÈ@·>ž\ C xÿmúÏW 15qtp0;þ»å?N]]¢(äà 'Eø @IUþwK$îwÐíH#†¨þ*–1¥¿ öù­©ßë! ü;—9‘¡[Ú–¹3TŠb|ÁþÏbÿòÿÓøV–ÿUæÿ­È†ÇÿôKý"ü?~¤ïÿ›ÁÐ-ÊØ3"cÿ¥Úƒ¿× Dãh^ÿõQ‘Œ]Ð!¸ãÿ G1ÄùhK…ý©_fÛ­=Ãã %‘‚ÛºY9úc¹PžŒÛƒÂäOÈØŸh@@Ñ[KWTd2ÒŸÊP\Q„1¶ úý1‘'©Œ€Ñ]0€!’9¶^©’"ÑÙ2ýBJDw)½?H@Nm#b´q¦Ûˆg¶Tˆù6R  €Xn#FN›?Æ;üdäÁoC#”ðÈ ÿá„ôž`”Gbˆˆþƒa£nC8#ßOø¯ñ¢hd2ãŽù¹ŒÙÿ^h è¢8zßQêsýˆáÄZjc+\q¸©/_–7”*49¹d²tsR+e¼^IÐä\Ð%>ZophýªTøÒ“ aRn”6Ë«¹'1ˆ…Š©\š…È…0råLéèé×…ð‘7'—ÖÓÊdÜèòœ}¦ºlEUÃdx9ÛUK©'gä .vœ×u/zµ’{Rô E;Ë(Сî‹äÑö÷ݶRÒ Á°0nEÏëw¨cq·¯}YšÍ)Ùuñòзž oÙ$í ãSÊGZ8;¾°¼ ú´e(ký£Ô¿á]ngR ˜¹cñ_srú³!Ž2%ÓwÊœ»Ö"5Æø2l?<-NÌxî­O‘I±ðÕ¼ìªSlÍ{¾çô¼oý nbŠ•Xåâ€Ì:q±kß©|îKOÓ2|O$|øò.¸`‰Üê:Pu¶°K¼òÁ¾¿ú—v>¢>m‰g'Ä­X—Õ|Úh'¼T'¿·Oðá_Æ“Kj/Îí6=Xþ-c¸$Ý¡X(úõ¡ìÞÑIØoG\îLçGz´¢9#qXž&çÁƒD(¤ymI³OƹDÄM;Erl6ùýf§V‰¨Ž˜ Ì’™z—¼y“vÁ{Oh7êbŽÍGÕqN5ÇÉô¿òºöw¢>ñ°®5[{¼±”gG^î§ÓØÞ šfª:…Ñ‚… ¥Ø%âÈ¡¦ñaKe>êCw*ƒ‘Çþa¦œÎYiÈ­§¿Kt” lFO¢Ý¸3eSr>«ûy7%/3¾}Мàðõœ®¾q\îÔ¨H¹oÑÚE‹dÈZ©q8+ÌùØ ºNcbÈ\²àµÖÚŒjŒÄ'5SÅ;ÇfjtS +ô&ë³Å“­)<áO«4eVÑ7éÈg¸†°d]FSþ\ÏØŒÆCƒÖâÛ¤°nëÌFµ>áñã5:y"J%_-û·Øß0)¥|,îG– dj+ÕˆRô鉜@ðñt½¤¬ÉRÒÉg±Ìúš§ÿŠ ³ùÆu,}€¥b2†©4÷Y¾Ù΃êž)nëtiÝ(„#ñQôÙPíÔ§$0Áb¿#ªXû†kGKPÊä(ݼ1®¢âŽ"&x$­°Ìÿë·ÿáSð ÎÑ|Ç ‹û¯Ëì/pf•Ö‰®¹¤—©6!´ûÊQ=YÓƒŸ>îlk$ez…âl”o¬)ñ¬Jö¡wš]ïò¢T¿íÕüÈŸ©jÁ/þ²ÏdŒÊÍ:…úM=;ç÷ž*÷¼íE›å+u®©#¤èt›óÚ›®ÕS€«„MÛl?¤4¢|wx6í•åQ¶tªà„“ü£yÁ¿ÎOš; Õ/¹]yÞ.wiê,qFîò‡•×)áΪKƒQno'ô’>볿•Ó˜eõy¨ÜË0^~y/Ú1t*fî—\E¯Vj|3¦Øüä¥h{’¾^jÀSO"(;èdÙ©‰±ëF¨¶ã>ˆ¾°[í'Ž1Ìkè6I˜d¾Õ,?a+a«Z©ÞL¼•f–ä&Ä×%K×5­IkNo;ÿú´ƒtøòEA.T_QoIYLÇÆ\Ô¨ÀÎq{è?Y=ýGô¶Q²·ÔÚ‘ ˜V·:ù,27Y6BsÖÁN©¥¹•n;ò¢T©6ªË™|¬¿/®»8~DZ„™r›kÚͲyj£»a¬BO’ ¯ù²Ù½yöÊ0Û%^«jCÅf¾˜c§ä‘ßÇì }rw/NÔ¹Y«Ò˜÷pöï‹ox¡ÃR0\@Î.Sfáþz?JÙXdùAÝ€WóáozŽ-«ìzrç´‡p »wf¼ÁõÇ*Å,³óm§5Ê^Ë |«îxíÞ`õýBaE~%-j‰T“³X2ÂÕ¯®jÁܬ:RQ!†»@Ðn5GñZC¾wzÛŽBAŸA'öà™Á¬;å†Å,œ|é‰dX3OâJþqËn·œŠ®|°Õ£ÇÃ\“Úã¿÷k&±M|¾u8;CcøÎgöyËÄðèÔnæµg…O£™ñTïˆÏ&ð·KŸÞoÃY­ dê¢Öõßib_Ó×RÙ¿ô'`UÔK÷t?ŸòÈWÚmÉòÝwdð±VÛŠfdÌ䳽 ¶Šb±U=H²Ô}¦wpñ쬮֒ÎÄfœ›/".·Ç•Žå]z„Sæ €å®zßa/g~ê¾Ö±>Ý~Бõ¼«{íCÆUÃͺûNc/ŠjÙû›<Ñó>~5ÃúÇE(ûTëv© =Ð|˜[™êì´¿Ðij†ÙX² µˆlñ—iý*úœ3G^‹’ε@A[º9»©@nóõ»ÕtÄݱ8&Ÿ{!…™ÓsÁ¡;Ü8£øh?l0œõmQ³V;üí o†¡³ÆþðxVôó([Í3óûnÔˆt¬šÝÏËŸq8ßQ ªP®`>€|8·™Ê².)!΃qNv¹œ¬b)Áy!ø®Æ܉ánªù¸Úú¸ðª²îŽÉECa½[À!Ç|l°5h'X»Â³¼~7ø‚Vò¼üÚT¬ñ`±Žý)R6ª©‡,[ÇîЙmÕzæ4^Ä ?¿~#„°ã­:…{ø¾í¤íî!‡KPdï q¸0ÏRqÐ×5–ו¾GªPûí´S>uD°YwˆÐëêKJÒ jé}4ï—_*²Ž•g8Ø­oà7§¹ö«®Ö¹4WGéCpÇÁ’üå¼q WÆ¿«ÜÐ…+AèóŸ#Lr.Ó®æUù{7(Ü1D'w®AÙ©í?îß2Êíy·ë‘>ìsÄA…ÅGR™gEèAi3ËI[Û—@Ûø*×1¾­{.þ€‰$ì«–!gñÝ4Ûù3n«ÞÌv3 Œ…w¶wQŒßùíÀéY-XÂ(DÂ̈þklSDb²C? ©Ûï,)ùUس4j@fµÍaq,”ÏoéòƵêpóÈ}!š,\Ïzæ«ýÛ/^FcTó¸½v\“—nÚÂK»í¶Œ?ûmSâËlĦʸàýbßs—¦OË)O>ZVÖK›jõ–6¦=ÝËÌcßøÆ³N>±¹¤~½ËøE}è ãÖÔÎqö báñîâ"¹4žeoŠ.I<Ï) î(ÇT y᪗­œ|žÑW;½úº f¶N/ùV(x–r¼ò¹jµÎ‹6/ûõü 'ÇÍ_Z˜d% L—qyòx±&á"b ºÖ4†šj%Yíâû%÷‚" «:á¾Âa#ž«@¼Lòû…[螆®á,/sÓ!Wñ›ýöÁ)r0‡ÂUwç7×1SMvŠÝï³€õÜ(¦=ɪå+§.Ý¦Ñø¹ÂÞ èÞ2f“¬‚ïyDü{¦1ïä’‘€™¨\=«šî‰LÕj{Nx…·e->öB"‹”Y'žp0_î1O‹áцKˆµÈ¾›NIfë0³‘ neæj SGIŸÁ¹€RÑùˆÉÆ„ž}77?ůhsÛf'íÊÆ²°e°F“Ãh§'¬&;Ø­ER Ž„c‚šG÷>ÜìɯÜô:ƒÖ,/Û#ûÉ*y¯âÂɾek3Å&œÕz< ʽ=~ðå²Öƒ÷`Ö~%eÜžœ˜¢=4SQ“$I“=¥ŽtÞŽƒ¢·ž5Â8sÝît`†žE@è©ìÔ²K°›cï4Kª2+Å7è6¥6×¼ÚÍêFÿ~q)§.%Ãóbæ‹y2úð‹ýÜ—ÎEiÞÆrHçyËô_»8Š2s^¸©ÅgP{‚ð™xlJÛüÔUþ«·SüíŽÙýè­Z®ú¯Ý½…8l æê-ÎÊš}çt²º¬%ufüYäqP”é)½æpkGÊ·M¥/YP2`“˜P5ªN8p š"­¬˜¡©¹UQªÑÈ{ꈅ´‹m›Çµ†ÞC¾BeŽYvb±ã¤—œn²UöÖéã šÆqPötlNÅ®ºỾâÙÅÊ ®ö±1³X;hx0?æµ_ÆR¢÷,B4„}ßÞ«‹Ì6ŽQáSÇÖ·4w’Êa'>¹\ªG!ø¥0sˆÜ»OÅjé ¦™ªÛÛ÷pŸÝœ\%©êò†î<^ Ü5-—ÍûâÊ«×..'gÈèõî—®˜â.½.a ζîI(/pd&ºO–éiŠ%Óý(`>^ÅJ/ˆ¸¬ÈDé5?^½xƤf‘*ß&ô­È¾=0˜˜¡ñÀüMøùË‚$º­‹97û²`÷¥SýÑ.î ]£Ñ…M•¾ÒY’y§áÅ+ÓD‡Þÿ|͈÷Zýí#l:58ʉ…›­+åLGTcrC•ûºã 爡K´QƒÞEó‰;ÞÉÊ4¿U¼W'.½}©wèØ+å‘΋‡ÃüýŸ%ÍĬzÓ™R¯$~÷7w-Ž#Ø|ŒD—]þÂUÏZ=j~ž«°¥qyg±HR+³ÐÙ"¾k­HŸÒùGŸŸ/á»§óTÄr"$}`-CZ ý– £¤Kò•áÇ•²êçæBcø™Å ±žO£uïw5è^%­À £M7»ŸZy§S凯æI¸YñÇê›òˆõin»¸+-ÎK±«©A«™ea®¯^ò#¢y9?’z˜–v"±éš\@a­ €‘\*l»]§Ðî'±·ï}rûs–ù~U~êùwfáËÙR¶Ìª-áΣ“ªç[D,†Æ§öŸÞc,€óÈó í x@)Xï{•“’ð$¼C9/Qc£…tqåºÇ½¹òÑ?ß[î“æª¹8«rIã›.²ýÈWKûwBOêKˆ7n` Õ9¦{ˆ»æ%î"P㫉f7O4Ó©-&´OëÕ]A²4rüBu&çP¨zÍŸ­g9¦4øðÿÖ endstream endobj 641 0 obj << /Length1 2038 /Length2 7899 /Length3 0 /Length 9112 /Filter /FlateDecode >> stream xÚµ4ê÷M”„ щ6ºÑF=¢÷Nô`ŒÁ(3˜Ñ¢÷è"": !QBt½E‰.z”hÑ{ y'çœ{’{¿o­÷]Öb~»üŸ½ŸgïÁάkÀ'g‹´)#h>A~I€‚–¡¡8@@@˜_@@ˆÝŽv†ýc&d7‚¹£àH„ä î0cS„ 1qZH@Ýà ( •“ Hü'é. P„xÂmZüu$†"dW@ºú¸ÃíИcþóÀ%$ÄxÿJȹÀÜáP A;À\0'B!Î$Cûü——´í* yyyñC\PüHw{ /À ŽvèÃP0wO˜-àWÃmˆ ìïÎø Ù†pÔßv¤Ú â` Îp( Âdx laîÌá5M€Ž+ ñw°æß¼€î È/ø¯Ü?Ù¿„àˆ¿’!P(ÒÅ‚ð#ìvpg@GY“íæ@¶¿!Î($&â ;Cl0U(Ëé ˜ÿiu‡»¢Qü(¸ó¯A¿d0·¬„°U@º¸Àhá¯úáî0(æÚ}@¿¬é…ðýìà[»_MØz¸‚"àn05ÅB0&Âß6{ÀÜ0o¨è—¼¡+ì/§à/3¦_W¤+ÀÓÌnÃü!ôEAyy¤7À— à€EÀQ €ÿ‹èBàÿ!ð;S a‡Hü]+æ’þS¯ç?ÏÏõÏjÿ­¥ÄÌ, Àõ{Ä-ÀPÌ/ÁÿçAÿ+åÿo¾©üßFü RöpvþËÍõ—ÿÿㆸÀ}þ ÀŒ¬3þZHÌ þ7Ôö÷ÊjÁlá.ÿëUCC0k ‡°wþ÷á(e¸7ÌVކ:ü5›þZ1g8¦‹DÁ}§øþLJÙ+¨æ{…™Ç¿\0ÌÚü÷‰J(Òö×~ Ewwˆ¡fŒ„À`€¯ fmaÞM0Ä@¢1)Lwþ;¤;á¯@r¿L“($ÿ›Ä …ß$)ýKbòo€T~“¤ú›„ µß„ÑÔúMMI£©û›0šz¿ £bð›D Ãß„Ñ4þ—$0ùMâÍoœý—À錹úÿX~½ÈöÄÔû1EØÿ˜*þEÌV|\`Êalð?s½Ž ¦R§?SŽóˆ©Õå7 b*û­ Ƥ"0ò‡S*òļëïÚ0»bv ùGo‚˜êÝÿ@L©¨ß }”3åðGFý»ÌqhwØï 0 B{ýYFÃãÄ´çùbÚóúB˜lï?#ïóbºyüþ×ðC=ÜÝ1_þ};a6ã?ü×Ì%œú‚„J…9V„}<+—£óâ[!î:ˆ>ºe¼¬D빦¢ }~(œ3)×2¶s¾@¶)ôæg­“ •€“å¼_ZŒ$ÕTÕG<;›o¼~Cd÷/6QšB«ÍÍfÖÂ[{ªÝ:ýO^G²£@j^·ý•ñÌï*ÒuïNKvorÖlñ݈‹¹I#..Lt#¬Q.³ñü{¹Ñ±&56ÔìÀö3åïçi}B८é"^løbÝÆ±«ÆQæ†Lêz›è= ë!À(ûr›Íe"WÈÑǰ`.T¿nÒsz^ܨðÊ%ãw™ Y4»Ë¤DgäÇÜtR{˜2ûÆÄc¬ rOz?-rú¦ñ–ÛÞ¸1lK½meiœNn|çbŠŸ<ÄÆÁgŒ/ă7Õ/DÑìáZ ©àå;Rëd‰ºY¹÷ûÆ{²-…oQï&’<-’2æ–U’¢,ÊØ &£Í,x褶ÅÐ1½y—Xu”ÉiPl•.ôÆ¥´iÎeLA^Œ`{ˆÅƒ@EDA™®gÃÏ”0ø6±à‡Öò[*ÅP\i4¢øo'˜“îEG¸sØByòÝã Ò>`Ë ¬Ü³9a¿“´°Ð“qªA¶'‹Ø²úNö²¹Öy°’a$Àow\ªQ„Ø×J=·‘ /V¾ßc2E‹õè²Sêû横Bøm«Õóz“æÌ8H}Y8Ž]Nž”fð)}z•«77ç™~³ÆiîÆðñ'­_tÁø…>÷ÅÛ‰Až]ð&ú¸œ[0F²ðºînãñ'»Í'õÛº?¾µïÐ)ò‘€H'ù6Zþ…[²Âûá_¶Ñ…ˆN˜ø­·}Ã3ef´Ýú4KúïLawl±¿ I@3ŽD¯t”ñnfNtïߎJ-Ù|Úl8>æÐ¬Ûñ×ÎüRAs 2g›¯4¯’æAY$Šºá«Ü{~áVN4†ûž])@6.ÆéKãÞYþìë°Ss¸©F—›y|ä@×ó,ÏÆýÎÈXÀçîoi] ‚ã?ІìÉÐï¬4„5Y\–!k¼‘6§òð[Aä æ:ó].©,uME’ŸNż‡ˆ|Ü´.¯£Ø Üîj蛸¥cÿl…ÖÐ2µc¥¸¼j }šéýh;¨à`7b)D9b(¼a[Ä*QíG„c´¥œ¿æ¡%U_a^ÿÈ%ÊŒc -˜} UUµ;ëòÅäºlUþäìItØûõ!éî¬y¡«à¢‹î/WrÕ‰$k×s÷K£^uÌ17¼W° ßI(ßùÔÔõmþî83øE5)¹ñ-K3î"AðËTÚà’“PÚSv†ØZ¶1-˜3«L¯¬›P„ŠË¢P£ýʦ«åÌc$Õ -e³È©¾WߦÀ~•–9¯jκ¸žÛ͵ºöÝî¬iÃ_WÖ+ÔIyáEùØŸ‡®W¼JÓìÃ0n‘5ÏÓYíÆÈ)û¼YÕÓßM6®v¬0]Ž¥ÏÅ2<#Y_˜WªâTÇ¿¥pÕØÜx¥•ðº?VWÀæëTþêq¤o ÿøO~ïá[ËÝø'Ÿ…à™ûŃA±W»d»±Ýë—C€¯Ç¢dD‹-ÎÈÔ½ŒëcôKy"•$2¤swîp* .WV'Î}ðÆæhãŽ6÷.\8íÀˆ«&=_id*Qp÷…2DÎÈâ^ͤ¨lŸ³[|xݛϞPh§/'žÿË(O¬)mˆ¨íÜGƒƒˆ§êXä ٶʙ¼´©.5‡âò§o5_- à'ZD꒥̎±6måÍ^ì½G–3Ýʦѱ4ªw´7lU 4$2*6‹ÏÜxdwÓ4ÑK•uqFãsÛ¡jJHÂóc—mk¹Õ!~2k©Úï(IÛ ÚmS$ëë&ÿM}•í'µ²~ÆÕ”NÝúÚ+ϰ³Ù9¼Rw¨|Ù¥ˆ5–\ߤTd];ÇåLwÄîôÄWSšµ†é}Á¾‘{HE’Þíê¾y¿.ܽO®µö…ÏNŸËѨ»«Ó–™±]sCûž-ÑTæ¶-ÖI½5‚.ã»&=o®ÈçåÅ v‚àÑ &ì~/ÑQPËW/Ë1ÉÌjˆq.ýh ‡ ßö6žRÂP°ôPBsç<¤TÁ™ËÔ9\¾”ÉšJxý@¨AÑK#lHÝ iÚ}PÎHζÊ?“ MélaìÌ \L€¾‘åhÑ¢°ð¹ê›b°T„Ó‰> Ƶ5VõÏ‹ ¡ë„®gòáJɦ­S‡¤6ûRQë,íNL»·JÓ©n7ˆïÓiª>D?±|}›<ôŒÌj¤Æ0ÒÏš@©Ž”4"÷0Á–eL6k„$å©|h¨Dº¾%^/à¶¿6×µ ÕáÓ ¢J´ „^e–÷ùfߌÍ×a0çÝ ‰í~íå7_ÝFR)ÊËqnl¼õÇ¥Ëþ°MµÜš”Ú<ÃãçÀñ X÷Ù}ÛíäÔö1Éð i÷ë`Ó·oXµ´Š~nUéÖA¥$ò ù´¤•׬×é&t«¥œe³&ëNš•³è wÚ†AÍÏú²š&Ÿ*ÎÇøÅèø¼”(•UÜhËSðä-y3gý³;ÓÁ$®ð+ Ú‹`*äÄ ¥†7¦ìû€¼#w…/æ•7³>³žâ&$e±Àô,6ê·†M„ÔUóK"«ðØg+H‹ zܾØŠl°ÅÙ¡ÄË&. W'å[ß+'±‘1c®Uˆ*ÊöÛÁ5Z|þi)˯ŽýªN)ª®‰¥Ü¡7TŠyŽJ<Ò¶ýJ/¦ E*sÖ4×ⵤd¸;NJËÌk;Žy û‹tk~Ÿ,g,©öAó…zÏA~á>Ewç`+Û$…?¾t¥SáÄ-õ<°T¨ù³eõLßcMù–•–Í-óÖÒ´¼;Ð…•÷!OGÍgÑ÷·&ÃŒ·Í§tjq9æÊ›‡]õΦڸgF‹?>bLnýîîa' ¤Å_¶K­¾ƒÍËŸŠ•Ü«ùÐftJ£õ|lõÆbn!sMy÷Ì"þ¼Ìhˆ‹)©1¸ž4ÛH˜}ð ž*~òJç‡m¤þ5®ŒÁþNSmx§Ë“¢=§¤wVf¿$]ÐnŽaWÜ]Š,JÿÛN¤Å3™¦±ƒÉ%á„F¶¯ê÷+e’ë|"+âJ ­™‡w«î!ÝUM‚T¶RîIð ýä>u·YÖé{V»s´³M‘‘í^X óÀ!o¦œÆGR™ÈncE œ>uìÞË £¸oãÜr}P9)„#{!FJꬾr“±ä±àz£/¶æéØt«›Íû`’ÉžáÙ RÁ¯¡%μcp dÉRR <øfºFHå©bÖ~e$ëeöÓ@…õ#ÿ˜¦ušÕC1Vú²Ï&æÇ™¢ò[4×JoxpŸ §ÃM8*÷BæÈýu…UˆÎ±pî4¨µJ»~¹M#«1HIAÍŸ›ñ‡ _ŸÅ–-”€—RC7ð'KqÞ|á4½ ÿJ {Œ7+KÌPrÌõZÍè •ɤ²_…<æ’‹™Ñ,ƒœÏç‡ÒŠvðmÒÍÂrðéË à\“Œ•ý+BÁ#–jѳ’ÓN/{°’èŠÉïøø°ݽåûâÃGüák±Â¹q„ÚPÄB´*/†pü鋆ðƒö—~bW'+ð´š`ç‰P ¬øèŽýüYAx›'_—]³ðfÓ«NΓ, +¹Ö‚f±i‹ÔÀœQßm`h(_0c^`rÃà ~Yã£ï ñâ·gF:;ðS ñ‘©dÌO&éÌED¤VJ±´ÞW«¾{-·B"T¨CÁé½e©."dzø\‡>Μ Ó: Ùl>V¼aï 67ªAöX#L-Ûb¸–Å!obë/NÔ ¨ú:éßͲmMvºïTM˵ۢ5ûÇ)¿{†Zòrá[‘ö ¡ Jü Ä+ŸÆšÙ¯ï½ÿÜZn5HïÝÔçoP}ñ:³õûÈ"ÙÀϾ©fÓàlÚ'»Ðy¥˜ÿ~Žõ‡m†·F}Sz¸;$*€ñ°r½Bœ;Æt7¨L?52VD—‘ÝVãí¥nÌ?§ïÎï|Á'„g(À™>Ã{A@ñ¢¢Uè~`ñbØ 2KúûBê„ÂÉ<ôÛÖAÌ&V¢ ô}_@Ó¤¶GìXøLÝwºUõÈ“„º?ÜÝÎ{䌓èÑù“NY§*’j|=Ê_]ã>0$OÛ“a——xlÉ+‡‡NG¢Hà Š¯†„ozÕ®Wý [WÕF@•²|Â:Ší,¦a4‘°ÉqîRì÷¶N'uŠ~cO»ÙñøMr¦§*$”•ÃSÞ"d`•%ídžÔÄt,ØÓ.”B \n†÷Øy?† ]%ºØ¨)¦±.u:n¢^ˆV¼ÍÞw2#C¦Á¤ÄS*‹/QxjóýYŸ—åŸ7k†b»’ì"Ëo&ÒÛÆPÆÀsßYW¨£|ih ½/wÏ8”9ëà¡¿ÕØàÈÊ’»dBãËè—ºà9}¡ôïQ¸UêevÝbgÄJ¡çíE·²®3KSŸ^Få=¶Ç)¹m;J²SX’û¶ëð6cBϘ6,©Å53)à\eä=àú!õÝ^$Ibscº“œ:S¯3­sÏ÷¯j+^UQ4-wFõeWáà.~3~¬Ï)®¯ÝA¦b¾!Ï”5ŽÓw û5Òñnþ” â›I9›¬ Ò1—]RîéÖ¥î$« šâSšO€ŸpT*…Z,YfÏ3]·³)p¹ü¸X¥]z úx•23ß…³iRÍûQ>ºØÝpÆZO6íºsrŸüˆr—RPûQtÇüÖ%ÍÚÑÁ¹¿K÷Nnõ嬛®ñ™w\mˆ³Ÿ"¸StÌ+\ZSö8ãߢîD_cåmÆ»òÖB^75Ôí Ū&ôÖ°¥:>²àSÎ-÷ƒ[eÁwµ6ùY$ÓÞ…ÙWTsµÝ]˜È“R \ˆ¥%s›#£Äk:3«<¸š(&§—ñå,üÍŽWôÇeteò€ȅLiY«ÊcçOJóÈü=ñ Zî÷›e4–ßW£Rl{½’ oæ@š“IÚšºmžëoÒÝ[‹Sn·åðÆéd 9ÑŒä”ã1¥\e|³LýÁ­õ´¶©-9‡°eÒ|÷ •„0¯#œVŸä^^Zú–ê´¥7XmŠ"çO¯Î÷¬;~‹0ŒÈ$Ì~-+÷y^Ÿ0!ow %.´{ùô£ò4œÑ[‡¦#  ÂòØPͽòöbM¹;‡O6/%yã5qÇ@d Íf2¬"*?±…3ËLM™{¯˜à\¥Ò3‘8__¤ ¢cÊ<ùýQnˆ{ówÕý­³‚{7ji¼‰WøìøÞ7z&»|­v·œVœÖ³Ÿû`Y `ÚÜŸx(³Aûļï[ƒc†¦i=×&®L4’ÏÆF'ÁgR]r.Q††&mv‡¸ÞÉøxȬ\zý–錃JŽ/Óãᤲ%ìšÏNªÇ…Hf–†ka“PEæ¨ÁΟñ X­Xæa9-±`–ˆc³P¥Q‹l<¯OŠNŒ?ݱvêÛ>K¶(ƒ3R4ó~ô~?§ü¡Þ~ú01y6§Jxö…ž¦f AæiüäXï%¹VÒkÞªÓÁãG´†qøæ·ìù±=ݼ(2yU×îí)úz[#ïN™èµß@ùàwxaiãiP„¦ŠàZ°¤^ñ+ëñõ9z³¼ÈÆ~ùÔ¢¢†WÕ=Žñ‡ŠWݦ€ZÞ9DÃâÑq!]"õDDGo+Tè-ˆ}»vt9)µvÀ*Ò="ÿ…Z}Ž®AB‹u¾»Bœ¸³+×O© ^Ód²>lÕd—J³ª;Źw†n ;3¸ ‘zEëÙ,iþˆN‹ž¢yöB·0(]d"Iò^EŠÒ½ñ›Rˆ>P«„·àÖèfé÷&`òžèŒS°üŒŽ³&EÙð1\ BípZ!Ür}’ÓFƒ©ÈîçRÍoóËÓèy@¬ÔRhò…uÇ&¯[Þ ·#Ð:–²ôà'+`{ÓNíË\ÃiCUI‘¸º³—½ò.MÁ õ›ß6N –×ųÝv·ƒÜø9”fôR·%&¥B“°¾’Ã?žþ¨Ù_ÃW_64k%¿­ÙúOy}‹^«gßåzuSÄjZ¾`Ôe[ Ÿ‡¿Ó…T’«P™BÔOîüÊ]0W>Qƒ‰.Ðl«~lãhÙˆ¤›åÊà›OkÒù þ°wÍð…_#ÑÅc*î¥:2¡@æzc õgψœj Ÿ N²ß5>½¸ŽAÌþn .§§Õ’ËÃÔM!ŠúnïáÝ>šÁ{Ô!nùKWb N|÷ siì{¼¼=AÜ8‚M&Q{zv@I4Àœ«ÍÒ”ÒPþöXJI>:YÂ] f7R §ZzZ5'šg~~åù¾ßkÑ¥Y¤ï¦öÖ=+­ñùE]ÐWºd˜ÆJ™ZfÿÞWipqãç§–ø]UŠT-…­@oë·Ác®M¯ ˆHüÑ~8_9 RhGs–Yòœd¡Û«[\•ZzqÓ,þr*|Ú­ˆÆc‡|¸òëÁvý+?Íéíqt|ÿ³°AlÓ¼Ét°Žêð§ó¦/áÂ;L’2D†} Ç Hœ ^ÎÛð÷W܇]M¯sMŸý”‰.dúY\pŠ6Ò¸V­‹XDTc@Í#Ä~€ü®¡íN”„e gœ”ê2ȹck Oœ²¥¸=ÿ¾^Àʳ—¸‡ ƒbE–$ÚFó Tg‹1K'qVGFÐ-½XÍÆ:?ÔÞ³W꿎dÇʇ’QÐsN)Æ–FÑqäÍ-3TßjY0›=2ì…ñ{"¬aa|Ëñü{ÁvÊY:j‚YÜŽ÷Ðìµ Ê™Ml/ÜóËù*Æ¡Gi[9‰—‹e…®w¬ŸœÜ·;½že.Yò¿Ì ¢³ÿ¡ƒ›Mî£*Ã/Æ#²ÉÒKÚa!—T®!'(¢ÒŸ$F)¢Ý.kdNa¾x52òÙŸÛ&·‹ªÆÀ .ÝíÂР;ô¯°§ììb1XŸ[ór3<É!K¿ËÏÖ¬—°½8¾´\ p£¾Ì¶~mQ=4L* ¿Ý—¼‚å+²äô¹LgÄŸX%TBËbÄðèö<Σt>ÖÜŠP+˜xg`o‡äè!¶c¢ÈnþúùôÕ’gõOQu®¤²7´’ãàZŠ:9†ªw€­©¢ý}Ó¤&¶†Ð›YwsjÊG$Íên'ï ŠQ/K\]äûž´Aü2‚/¡La¹ÇŽvoI¾O †1-6.¼Ý¶M|¿D1†sá×Lmoûre—?NÈ2˜ ¦¬®T—N¶&C‹Ç¬}ð`”üòrfJx­B$¿H†°àÃÏ‹WEwòª˜÷’ÞG}—Òe>šZ‰0Ë+T •ÄÛˆgÉ…Æ›?³I7’±îÎf'd›m"v([î$û,áÛ­e»©cùuswˆëx”ëfœÙ…ªÝ£Í™†Ç/bèÚ.“Œ{G2Íß5wqªÇЭrÞ¸J²ü²¸HýÄ4èò«!G×á­>nY.4 RªûW)#u1£­>Y†jZZwçYñbH¨µ¯³ƒ9fÌ/džÍÎ9†vÛ”H?!¶fkT|ïMõãœFeb2ùÑï›ú‰o‹h% XÓsʉËGÔùYLäROi3j{ÄJ¡q XaÂJTö§ˆæ¦.‹%D0VÞíÈZ”sø8Z&œþ"ãÍd9pØy¼á¡'h•"rãªÈLZϦߢNžßœâÎ}°Ç´}€z³·âÖU6cZG«î¡Ã^‘Xl>~{2Xýñѽw¾èžR¬ÊHkÉG|SÒµ€–+JGî/”eÏ{ꬃ Ze4Ÿ =BÒÙ=F(­5µ=çÅÂk‹zÀ<+—°¸¢ön„”…Ä5n[îE뉟ÛrSeëHÍaa;6ÉzÅgw(‡ŸˆÐ 6©8¾'m#íïG|einNÅÞѽýqÑäÞÛ²¬oQNÈn˜,€‡Zº-Oß|&…}NiýCH™À/?¡u¢&5Hº/¨?Aë©“;ËrÙ3Gx™¢GiQ×MñieA‡+ÆÈ¸ÑóSÚ¿ë]¨ÈN&]LäŸü"Ü|Ò¹CßýÓI=؈Ö£.AÅsíý»œK6Yì±™~É7ÌÔ·Ó¡,B„‹yñÕ÷á÷v]·#xvTl‚EÙ—H _’æ+¨}ufïW7 6³Úi1œrd3ºæ’>ÿ¡Ìœšü€FÒj˜À9|³W­ºð"P”ËÇ*¬[°"!¦tÝ™ oò@¸vѰ½ù,b!ÌòäQ΢æºyG¯çQƒ Š%…JÏáC¬—ø£}6ûýe·_æ¬ZC IDÖÏ>¡çßKÆš+žo áu9оf—;ðRo/£Ørû¡Ôͪ´u§’ù=xjÚó“êÍú3ë2”A¼˜öiràùkŸ·?fÐ[T/,Q fáílôÖö&t¾³[QzK&rEí#ccod&õYðK¼X´9Kxeaj¸ä£[}"Ez“Æ´;¬pì<{*|BafÎÕ¿PúóI7—5s¥ñäx-«»ôÚ/´¿';¡c'KL¾UönºüE¡°¹ø™‰È\ê£©Æ àƒ ƒo½Ÿ‹F«žq! Ò©÷šÃIZX-|]«$×n±¼{^õ‘ž¬Š³y®ì#íc¼E:ÌÓ—±Óðõ@ÝßãI¤‡Î™ ùËÜî {¿K\®n R¿I] úÒíH^Î;C„üùJéžÝdpú£©A¤Q¯â<§³ñšNãî÷ú¨­ÉÕÈc ×ÀO¼¥sÇ‘¤‹ÁäÉ8,7fKmù\´>µÃQh¹ŠGgNwðgˆøX¢PÝFµ.¡]âœ.Ÿ¾(®ñ¡?|‘{æžÜ(œÞÃ"Z-j¥ÀÔëÿNÙ•­èõn@ÿÁí;Îež"/\彇%6¬A)9Ÿ{ ñµÂ—QO)Ê” ;…?DX+S@ôù~ö;Í”uço6øDFZ“ý *ѱp ”|H:b9;KgÒ+H.­¥¢'|vM?|&رÞŽèèLªŠÞ‘?i6'ê2ã"re{‹aý?òfÚb endstream endobj 643 0 obj << /Length1 1720 /Length2 9107 /Length3 0 /Length 10214 /Filter /FlateDecode >> stream xÚ´Tê6LJ·’CJÏÐ-Ý!Ý5 Ã020Ä !]")t) Ý ©tJJ ""%!øq<çžsîýÿµ¾oÍZ3óìýìýî½ßg¿,z†ü H{¨*ÒÅ/(’(éI@ aHˆƒÃŽB@ÿ2r˜@=<áHW©”< `Ô­MŒºåé ]šh@P (&%(.„@ Éÿ‘Re°Ü #ÐDºB= 9”n¾p˜êö˜ÿüpA¸‚’’â|¿Ã .P8ì Уœ .·'BÀ€!‡¢|ÿ+—Œ å&z{{ €]<°‡Ü|o8Ê `õ„zxA4 л@ÿìL€`ä÷üÓnˆtDyƒ= €[ºzÞF ] €ÛÆڀGnP×?ÉÚøÍ ( øwº¿¢ÿHwý †@.n`W_¸+ àG@TµP>(>ØÕá"ቼ{á°ý-áwå`€ª‚>|Ûà_íyB<àn(OO8⤹²Š«ƒÒÅêŠò$ü£>e¸r;v_àŸ7ëìŠôvõû 8Â]ÿhÂí4v…»£¡ÊQnM„ÿØ`P@I  î¨Ä øGz#_7èoçoóm~nH7€ãmи#ôö‡ÐÏì <Ðп;þ àÀ ƒ»þ“ýÖ uüß^¾Ü` ºÕž ôÇçïÖ·òr@º"|ÿ¡ÿ¾_ ¹ž¦šº&ïŸÿíSTDúüøÅüBÂÂQ!€˜¤ à¿“èáú'RÃÕ ü³ÖÛ!ý§^¯¿®Ÿë¯Õàüw.]ä­f¡®$nAn¿ÿŸ…þ;äÿOßdù¿Iü RE#¿Ý\¿ýÿ7ØŽðý‹p+Y4êVþ:ÈÛ%pý_ª)ôÏ•Õ:ÀÑ.ÿëÕ@o×@Á†ø{ŒpOU¸ÔAŽ‚8ýÆŸfã?V w…ê!=á¼)~Aè|·{q¾}7QÅ‚tøc¿„DÅ`°/!èVFB¢¢?ÁÛEt€úüV0(àŠD݆n» 8"=ÿ¸P11PñÓo$)‚ÿA ý?H„üDo}$â¶ìÿXoµ „þC¸Müç¨þ!€°AÐéo("z‹|Ýœ ÿÎxkƒÿ Þ¦|ü/x[â_ð¶>—  üWªÛ…"ÿ9ì–{ûÿË-ºýã¾=ÈíVšH‡1n«õø¼-ÍóŸ€Û¹y"ÀžNÿ"ÜæøWï‚·Åzý†ÿu}´‡Çíóõ{¿nïö?ø÷[ …ú@!„ ³Hˆtøãºð¶óoþ­²S[¦éÜü~ íèKR¼îêìÐU3…”¡ò¥ ®SùEæk¿/Íõx‘-Éú­Wþ?m &¶Z çÇ©ß}QxÓÏHpŸßH~ÛÿÚÝß$Ä»³S“#Ï-AªW@uîݧæó¦ÿõÇѧ³[úÛÕbZD?_Oò?7޵ )æÈ·9CËzÅψÏCyèC6}z6E™;ö‹Y3‘—0`ÿ¹p±ŸÅšPÜÅÌ“å #!Ï.:v: ZFìSÊÑ N?ÅÏ©š4s~e%±«²s9 nŒy×î‚CE›3`1‹¿ÚoàQ‰ý†ø€î9'"ìÆÃë4})Úx(¬Ûtõ~G¯"y`Ì÷ÂüKm(è®v]çÙNí0ï#…n™f½—0÷¯{¡,p«§UŸ"iEÞŸ fÍœK¹ÜAȺ J«Ê°Æw;Ìâ…o#TÝHÛ~Àdh¹ÃË ë…ýWòžiØn,½çÒ¤;/:y® e:YAÜÆ—âœîÉÄ^:${³q}˜ ä… OåO[l5ÂÄÓ{Ãx­Æ…S’cçg‹ÅléÖÛ,$i†@pZikuù.ëàó¤ˆ„Š‰ Éà ]élú·Sx9K[gí–’# É,ŬEζϦž²cLLÙÓ̤OÀúñ‰‡Ðq>eS&:NûÓÚìÂzXé¿Þ\ðm%Í®¸Ë׉dµÓÂsç«JQ¸ N­毩ÝRHë÷×ïí%ž{°Û©vm⯔k_^zœ|m‹X>ï±N–R<=ÆÞÒ°bL“N,¨ß ‹ k,ˆK§^¹{>˜=ØÉ²¹—Z×]«ßUoȃc«ýÁwÓlÆÓΦ(­êp×÷R’ÄKU Å§‡Ót)˜flg­e9¹ÛQyùø¤’0lé;IݪQ6¿Óã¦ôiœ®$|©Ùº½Q{HÿTÃEà8ŒÉ™”iSh‘jý¡¬ž3VXû]x{ÏÛEèNWœ›bl¶Æh0.i´T`¼{…*éÚnh4ZfÙ†ãPCEvŒgBs\ ÒÂûé$äG8„bV‚aß¼vV@ü±–‚çséæâþָv l¦}™•ôEð}[£âVI·ˆßpúÑ¡ãõaª„ãtÅ^ˆ:½üoM¯j F»»‡¡;}²j¾oBk¯¢Š˜;…œ—HIÇÆE¸~›[}OÿÊ„/ž‹þ´Ÿúqˆ*öG«÷]Æx”Šè×Rž»;Œ‘•á¾â_6 ðÚâ_<Ø2jÇ‹nÇ÷ƒ„xdí÷cž8¢G}O›VÞáÑòÛj];-æ<©Ï +š¦*‚¹Òž¤¤>s|ÂÂv]áµln[ŰØf5é5Vʽô®<¿æ?Á¼!ßtg°‹Eývؼkð¦ì‘vÖê¥þ*é6kSˆAÛ¿0fuñ<Ž†Î [6t‰§9ã·yœ„YðÉòÛÝE:BzXt\ä3òháJâùÞˆw4ʯºé“.¢¢ ĵMó}«5•d_=ÁÝ{ñ•†bÒðÊÈx1üêa¨Év¿p™KƯ*IšîÐײ¦n%Q¼ˆÙøn×¹HfaX^›ø;©aýÚnù½ÀIþ}´üT­ò7+OÃWIÒ7>Ò„ašUc$UÜâÓ0[|åFoâm”†N).4HÞ²'¨«™ç¡¦ìèIÂñÉv­>Òhg?æ¸v¬Èþ€í3°»ox' o1Öcy©£ì.èFZ6!]³Ùœ§3¡ñ PÚm`%$py·ò&¾õäµFŠÔð½Gþh›Oº;ècúlo{»ý ÉчuEç+øššÄ5}‡ ¯'Çf %‡CŒng¹8–PÇËkTL¸CèÏÌ6ó%GvŒN AFAùÄ8~Ìbeóé.±F½cæ †Ú‹;£ñ[GúÅŸÒ¦_wÜû¸OÕ±(åwYr÷ÙinK¤B½¾-ƒû(mG"þQ•cQ‹™+_̦ô‘Õ4½L¬v8üf~ÈÚŒ“4å«â•}º(ã@…ã}•ލ•ªeÔÚΓYI×ß|Ŧþ>@ÖŠ—`S$6 çfø_žÛ{¼çµ?Ó·¾2õ@ʃXMñ2ÅеL™‚¬ñžò»JµCzÛã˜Ù!Ýè'Ÿ{ü_þ€õR`zðSgRHÑç}FobçÓ¬Yö*¶’Ș.ÙyÓO♢‡4œ¬§°jt­}7ØþB×þr»·ÎI«ÈHØáÆS¼Ä6£¦ Ùà P}yÆdžƒ|€ß©^òêjj½o„ûKü5LeðœbàÃhÙ9¾Èå³U%Ï*DúS¡7-+>Ý=›Ö×à‡Üc÷¬N]Ã1øöüêyòÈ{]¯/GÍÖ2/3Ï4Æ‚ _‘™ð§ó+Å8 ø¨’¦ÜG± -*¢û|"ap “C?‡ÞÎ YA<¯±)t®Ò¾”*¯$#ÒfæZœfÕî&þÅ*ó#ÇÐãñyÊw¢k?l)—_~¹˜ «4H=óõÇÙd¡Ñxü½{6¢ƒ_UŒ·&e°]«5è5. ³±ÔIµúÚò¢ó´2*qÇ×^,´¨'a`c¼Ø×i&hðXòíØ @Æ`ϰ哈* óffQLAQñÇUÒ âW÷p ¸hçvü{š¼Û)8}Œòo¼\ê1Cìñš“Ó1¹uĵñ•¡Õ×ý5Q‚ŒS co¦ü_¸7M3âdÓ^K‰2ïoWÅlðÈ¡?{|ì Ê >Ón¼»¦<ÿ-ÓγÑ+êµi?Ë4¶aŽæÊ;¹M"U’“àÕ=÷#ÝQy¯IÞœ Î,¿®ì~’ü³® ž±~]Bèøi=ÕäÕ¹oQÇåÏs´b–Äή¢‚ùf™ÁGb®WŠ/Õ¾~I°Atª¶&Ç'k†U4çòy¼1OZ>Žq鸤Êa_¸5÷9óé×%:õ00Ý9 O,}É¢hmS›ürÀIölïœNýN¯ª,ÉPW{’_¸ÖõÇxûaö*p*ñÛÕù×’ø–þT2!w­Z‘¦Ö›é#y²nÒzêÄ ñˆ(LB1ÚÍÚvÔÙ ‹åØvà׈'NÕïZˆ*<°æë 2(?Q™*=8Ȇ‘*êµÕŒ@£àÄ÷,兀Ä쌣á¾^íò>nÝ>ib°¢¦lŠïD’ñY ƒ~­\lrê>–û¾:§@b»+ä_¦Õ¥wA.¢Œ"? ®å7]ÿð2åå×ÌÉJ›´å»›ü’…³ýÏóôª©è^ÀÓ“4Í7>y0—“>Ò©}Oîñ«œ%Ò;ö~}<؇/ œïÇGꯙªê®*íL™fLʬS¤Öy˜×vNʵ9¯vó‡!”yµöÆW´†~CB⋲߱_Mîã«*f9‡¯< ,Ù Db ²ö l¢r¿>¢}Â/lpE³½ÐhñÞ2--1™srcÈIù懂þªš’:@ÊêAL“øùD؆Pó™Ÿ,2ï!.gœ3tݼÚúBú´ $hmò¿_Rv^”÷Æ.3ïi²RŸ¦`%0wB»Úô†$Ýâ½;\¤ àë6$(b â ê8."&HN÷JGm‹?ýqÌHcI÷¨±°‡¹Öç¼Üüm$ÕÓ¡;û§©†Ù†Ó¯Egr¼IßǵaÔ6!ÈĪ·Œ«Ì[¾½zPYva[àÆƒ÷M¶æ§µ”³ ŸÖ¾Wx²Î euŸæÌ’ù´jÇõåå©Ðè³0yýD *¯‰€iÑ'Â.kó™GÀw§eÕo*réêmÉ¢;wÇÕ1hÔö_'&‹¼å+®|¶'["zuΑ¿Øl½©òR=ÆÑuèc°Ï³w÷ë.sµÌšâøÙß¡¸?ÆÚKê##À“j[´Ÿ{È<êò p—[˰§àV ¡Šd®½dŽætõ¨ü ªÑ; àé™W¾›˜bz$]ÖÚ®h}Ÿ»ò²b×d¯¦÷Ððf[¦/4]ܯÏ$‹~ŠÒêã`4òÂt…I'úUy:—÷3ŒoÎG»ŽØDàEwIȯ´¾6?kœiâš§¯ò9\HáB 0sš™ñ·VŠó”3¾ù$sª ”:½¥a`VAÑ>kKÇ7‚µÏÏ·‹F5ìã`Ô 3žÞkFÏ9Ë_•XŒ6]s+G¨WÒ=E½†¿+h" ìý1÷V.›~¾*¯~l÷j½»oÕ9j“1⾇÷ÛDýY~Ê m “\”~¥é„°P^&¢lã cÌö„È£9{~ÕÔ kÔûU/õ”ï½™®ÝP¾z´¦ŒÛ”e­ÜSÕ£Ë,‹ÜÊ,è"=íÖ: 8­¬)²›]R ƒéÛk~º‡ëzå®WÝÚÒXnË•›WcÐâtékA5=éÙýYi‹ùI4g'RúD¤ˆÿ¹8¾ ó72Ï”ï2+‹Ü$ ìz’]_«ŒLƒ·X «“û‡cŒQùi¦àYÇKÛ= õì8eÕ‡ïÙž 1ô€4úM‡&ÀßPj!Ol™(|?H~b\4$6Ìßt—mºqâG—㨘”}ÆW°îîÓùyñi=°Ç&" µЬÃÂR㔼šžK ˜¤=ž¸ýÇä˧¤ý*ë2†/áÙÝiT3ÜT3¼ 9D£ãý8ævÒñi1U¢,‘ZHmÃÖ4ݦ¤3'=§MåÃÅ·‰´üáUÍô†G»ÛÏÂwZåBŽJ¶fŠ %®p˜cX^§ñ Q…—{éÒܯ³ÄnØ ±*â·“zDg™{Øâè¼[ðvM9ÌÑÔ4RÀúЇUeÒÐiÕn?]¶<¿É¯Ãrâ¾ç0Bªt':ÃÆˆâ5;”E +1õg}%N-Ï;hÄð´fc¦?¹Ø|…Ý#JeVÕ ûбÊé5<¨n«Q^Âýf`YÛ€v'®–¡W¿6dVÎ4áOb}Ía›ðŠ1AûCx«ˆ×RsqÏÂ+¯àÞV‹S\­™Ñƒ«Usùsí˜è»~A£^«-‰¼!xÏ>èò˜S'ðºÃ­Ïñ€6ÚÜL1õ1ŒI .¾«‚ô²ÇQ‘Z{ Tq$Õ~ð”ߤë¢Üƒ§‘Buô| ›íY(Æ=¢P‰«o†~¼8ãoS]Ѝ,¡Œ)º¥Š #Ò&ðÆv|·­*§ó9ض t™ÜM‘ËÄÐ<Õ×M/:Ó²9ÕžÒËÒZ]èPJ"DúlãC)ü²ÌÈ:&íîhzÄ—fƒ_µb§€!ÿUƒMó½ö\~¾/PüØ„ÈçøIu:°+\6Òz[ë(áòpâ9û KŸä;‹-=$õ Ãâh™!±1šÐŽ…Yç'3GŒš¸T7Vb–è8ùüØÌÕãüÆ5î—˰} »*·™-¤¼&è+šNñÿZÛµïà<¸Eß¹Ìÿ°Ôò\=xú¶û˜æï ŃBTU;CipZHPìѲݣڼâUÈôIs2q•U¶Ï10ý=ÅU=yU~F,¡NÒâL䵩˜ØxÂdª%›´©Ÿh –$—ë2‘á¯ÔÚÛø¯º3v±öÙŒÎq"¨òüwã=÷`ð_ú²o™»()vO=¦p¶.–Œt“R˜Ú\SMÇá`³žìÌ^ DC94æ|ê:Øû];õ¶œE•®K¨’qÐÓúËy’Ÿ‰³ñ)Òˆà.Ž´léëm@Œa•¶/kîì†n3  F]x‡4b €»–‚Ê{"¦m±Ôx²ï•%#{½vïõ•iÆ^3>˜u-ÃÁ{Tv­6¹Á¾Ž¯ü>é„ÙR¿uGÂSFWY,&U­›R/ÿ¾PÆÇß4o2û¹aÉO%f>BI^tR,¢Û9Xõz[ЄQn¸Š›´š5T±Æ§q[å.™EÂÙG® 3œ»|H³yÀI ïœBaèÇ÷»c“m"«k½‹É®Y åÖŸz7¯ Úó—Úï˜ßî„É9˜¦½ê‘6xt[y1^Ó‹àá+3"?>²Ûݽ<°®ÎðQtœ¥=ŸaWÍ(ȧøñ(®çQê܉½[mJwn\Åùù›/Á’tQgÛQT{´" OeF tYý³ ÖͨWg} æ}Dr`'†e÷$éí2Q ÚØs%1 ¼³ª³,R2¸<Ú¼è®ZU0Çç‰ßáNR:ù§_óà;âT-k å ž,8 ò¹B×,G/¯`£ã)š*=˜÷ e#q×Ùuž°•Íbó?©Ûùåôžý*¬¶É=tsÁ­r÷a3÷5¯9KȪø©ôôvÕ3òÕTÙ¶ÙÚ·çØ‘ñœ2HkNºYãÞ¬ýÏv 2‹EÎÊ.³e­ŠÒ¾N½g¬ZáҼȖSŠ¥ÚOØÀÊ®°è0£ìèl)tƒ¢?wåSáæ BKk]¤?•Ï÷z-Öâ2Yâ tyGQü[V@=íq¨ˆjb¥mÏœRø¸÷‘^‡X9j=¹· î¥=/+Dˆš‡‰–|Á º³ü~Ǻgwh{±dÙDø9„°ÜzÀ˜}à °¹HeîÿVCáFæžš—ô·ÐèI¥ZéG4Ly÷ÃÂW“¼îÎïau+¨ a®¼¥ÞøžG¬wÍìCbÕ\RôsùRâÜÀ-²ÏIJ¦E3‡qtuÇMlȗРÐZ«÷uÇX¹Ä,jÝÿâšîWú÷üMØê$”„ͳ]ŽÇ>*<‹Õ3›€ËÚ{ØxX>é?"éawçÑ ŒÕâæ T™[)»xv´_¿¾ÝÒð×ÑäK:ˆÛ̯g1ð”©Æo=pWðY–ªlë<+×ÇÚëË7É#°ÎF˜óWØW—-'´ÈèÿóG&<údåGTaÁž+ƒ³žömn¸ Kq¯xôùfŒ4¯m¹—o¼‹Ö¶I±‹øÕ¶‡9—3 4È÷|Íî©­‡kOXÎ6)K&ê¼é,®‹3ÖõùîSkÍ $y­ÍaÍMÉïŒ5gÙ9œRÛÿh ˆå• ‹(ž b*÷Á7¼Ð郾ÜUg›6ŸCŸ9ôßisð¨Ûú0y £zè:cÂS´leFö«Û±üç›ÍŽŒï‰>Ëd7ôAS3Ô^M‡4º‰Þ1‹ÌQq.·HÚm ð_ñ  ,îÝÙJbÿ¬*­ïýúåzÈc¯îö²°¹ ¿”ÅHÙ—Õ2çqä\eö °Þ굜“IÝ2@`K<ùÅà\R${¬TÂVÞNõä›ä¶lÛ$Zv½å‰Nœ›DêI¦[µ/Ö’Àõã^^úüp¤7g6YZJ4K^¢3®ì±­n`¢ö÷zlàìl)úe2=  –ZßHöæø‡vâR ~ÜÚA’û€lÈÅ%¹F=ã\M¡(6³#1Àú¨´‚üHÔ»ÐôÁMÌ{ù\W=±!ÞÁÓ'9ÁXÀ,ó‚ü_Å;næ ¿[½­ÄYÑ×ÔÒx%Ø=ä8Ç…¶zó1Ë·Œ–É—~²ø\õøR;ÝÆ?g3>Cd1ï¸ÎçûÝrÓ"Ì/¢XƒØkvÔÆ‚Y6òÜï*×Ë[Ÿ¿ÜÙÄuº= ¤þ¥Æk“oT3Àð…5ôúXsO™x7Û|Îüžø—ü‰ò3Pa“¬ô¼$ö£k?ÈýöàÁ»={y,îÇL7Õ]^Ôu{@@)þlŠ·Ï[Àwz™½m,—`Úvï°e³—–™‹‚VÓUTã>xNc{š{õà¬hµ·@Å%ú/~ƒ|ÿéWkÄwþB­7ÿø3bxk[¤òRc;ý@&NdJ,Ú{ÿ(Û–$¯²„Y.©·+ûÑâe[ý»8)À ôlüäécž:쯞 „§â÷ë6‡Ö9Åè-@*[¨ï±#%fÇŸõ¯²ªú8àUà]na&O^'—`…6ªð%û ÙïÝå]Åo×@"¬~sæ ÉGÆS’Ðuë\ZÍb7sÆ©‘®Q<§ÎŤާRɰ ò­W¿âbô˾Á2lz­ì_Ͷb$6_ÌÿL^zçN:¬ïî9:äÉ|˜Tz¥±´;¾m{/òÇÓúÁHçO±3>Å6—mbylxʃŸW[cßèzÛ•YªÝô?¦ /OÂ7ø÷Dj6=Œ t“Fhô2³uZòÂÝÞØ”²oÖ êh屆̸Ü{œ˜Ax„¶¢K |âÌ Ûx9ý’1äÔ’_“~¡‡0é–c/RZ–x8Ò>áØž˜Ó ÊUïžR…íë—sbÐ4EpnªuS&kb!„¨}­ÇP!Þnìœ2Ñ—Š:¡èÕOñoÔ¼W rÂ|Pþ1KßJ½ 0Õ‘ÏÃ^òtC³t(.FBt,ã,-àì© Ñ„¹ñ­\n‡ô¤è“Òï‚ód^GŒöØ)º‘–6½&âb´UÜrë ÁŽñù¡Ç2Ì+žŸ+·E³Ë°{âï8ÓÕÝÃ÷2ês»Nb°¶Íão,¨/’í'{ƀܔ”!e,ŠéqÝ;L7Ã~ŠŒñ™áÅUõñ>¼ ¦K/ƒ)±ìs;&äœã· í¸8[Q-+¥¨×Ä6\Éü? ]sp^<Ðß+{£U“Ô¤@žÖQ¦ÞˆäÅšÆÞùü¢ôISÀ]! 6E1õº]Îò^P¢* Ù–È$ÄgÜå`”ý°€¶*‹âxúKrÁ'>ñ‰a.éü:¨X_ÈŒ,×…ª&Ÿ-º¯}ù“j‡MìEüÞɃ&»6'1bK˜jªŒºIÉM÷ÊTÕòöüÌ+2™˜‰y™_42m8­©"haZJüanúm—/Z/>M·)çƒðƒ²EëZ6+ÆHÄ®·IeøÙcNÉwd6ÒH/ =2ý‘æ(n¿rø ‰š-ß+{ "Kw|¸},ñ¨;H). 4=˜TVø‚€û¾/?7ŒÁ¿Àº“v9q?±pXé‹a[d,L>õä¥TR}÷Æ Íd)/亠™/î=Á{kêChx÷šC¾bV&Âö"ÔM$ÝÝã}y¡Vÿ†‰“mÁìv@(jöžDB´.e`‘r€¦üÛ€‚AÓÍGÖ8®ÉYd­el¾ñˆ}dæÒ2C«h×gÞ¿ +Ê?ÀI%9ãíçh•”€D4íû­3«fÆØ-ú¾ßcæˆMúz“}Í<àŠ!³}T ˆm¼S4ЭlLõñ/{öŠä]³NGŒ\À!´L¤#,HÜ%24ƒý˜:̨‡åzÖz0wŽ2ï;”Kv©ËBÑÁ°ÙØ‚ñ!|\‘€ãk`òÅ Mu²”Ÿî#ÖèwöÏöb±Ùâ²L¹ûìò™¾ Ǥ…Ôò¥­`èPÁë«ö†ï”8ú9iÀEô>¼%vËÛõÚ´Í:|¯z}9!z8³›(ñ‹cü€©¯I¥ÓÎ`¶I zh<’n1u’ÍD­¶ (I2rj%uÛ²sU©g“’nÛµ ÿÑNŒÛ¸DÃÑÖh±zÓÃùe&xÇÇÏ/Nð¹ÿ4Z!×Ù¢‹Î'Íp–:àíÊy‘¶é â¡Ww™k<Ê—1XàÛDÚf®k lX7aU÷ØÓÓ]±7¿ sZÛØÍ~æûØÈ«?ÍæÝ %òM X’sàmò°ÂfmxæîÊ4-;\jw7ï„àæK¯åa÷ÉSÝý†é± •C¨J¼wtTóNv޳…ã×G‚À²ŽÜåVŸõ2°ïaGÉvz¢}g ˜Aºö›ƒ."²'Æ7:VOBݲ*rØåó^±³3:`Óvn©y¾Y¹~Ëb—ƒ}9»€¹DH¹Ë!ïóƒS”Ë£’5ÓâôJÅ·¨UÁ„Z¯vcJw´Ž­Ÿ\ó$xò(PÁ×wß®05 CÇÏ©ÈÐc¿Nª.j¼ŽH–Óµ"Fü²ÀJo b/M ,È*]Ä*H1,7rÅœ·–æ„…Ð}Š Þ çÎX $G¹À^4ì}ñè¸k¬VžtCçy¹üÅž¿ÚLÙºŽë`h¸°"Ó4$-¡Û‹<߯ ¡òcØ~ÕºìRlQx¿âGîã?~`6#๠È#”ÓÒ$æ¶8ê´lî9t ¶¼ë仢,ójó§L‘QGe…òRPÉµÍ ¥SÕü•ûŒ)9šøÂyrÐgþ¦ïÛKÐi’ÀPS÷vC kµªæ Ž7å‚î1> stream xÚS 8”ù/vc§èn¥Ò¿¢È˜«Q&Yã2î#±Ú|3óùš™ïsÁ„ÖXÚÜvµÊFj=*+J!±‹”³ºZ‰$µN‰”Ûi›F[盡Úöœç9ç™çùæÿ¾ïï½ÿ^Ë•A¶,>Æ…Ùª°¥’(LàäâG¥ …N¢PhKK¢ÃoõË­°LŽ`(ó/W )p¤Ð1x+Å€JT{&u=“B4 Åá-“1ð xc(,'XºbR• ‰*˜àÝXñ¬ÕÁa=QçXX†ð øA !,Á3ò 1Âx¬P}ÂÊQ¨PH™drLL ’ÈI˜,ÒÉšb…ÂrX ó¶e°’ÀÓ­‘–€#DäS† L ˆd0Àb„£rÜE‰òaÀ³ƒ /_à/…Ñ)°ï€¦‡¨$ê»pÓÞÚ@ªs†x”T*à#<à‘JxWÂ)ß¿ ‰ŸSpúQEû{÷ÚŽ3Œ¡bÕ{¸nÅdï­[‚ý=m¦[~gtqÁbAœ-ƒlíh8Oévtà€?>Œ!ÓuüÅ× ``ýT¹øœÞ–=Í«é±ÆÚŒáÌ…Õ{¢‡Sþ¡þßt×¹ü7–k£üO¢ÿ½"¶R,ÖÙ­¦ÿa‡$ˆX5…pWŠaÙß!ðÔÁúÁ|D)ù»ÕKá7ÀB#ÅïÆ‡ÈÙH,Ì@<áMtzgÿ‡¾î(ãkτưL©œ 4|aqTüžøp¬Ž†€LB1î¤JE`2‚v%8OÉZ•Nr r˜Nú O)“á·¢Û#^Á[Yw˜0 ó]·1ÞÆäÉugXKclµÐìŒ.=K3 és_ýxK’«ãËçô£éwXnõ§¿|°`ˆVü¦Z´Í„"úâ~|n:Ó¤ëlÝÇn/1¾uÁ&ÍÜWIë÷ih‹ £üH“§5WbƜۭ?%F>êÈðp\SSöâ”ð©ÁÚsä9z-™é¦6Ðçè%׳òëË\ÊYí·Î{YÈŸ9·Œd/g¼ÌmºNc<¼t·„8éÉ]:8h$õËt:ø¤ÑÞÌ'¢´[ö5º›NfY%Õ%«­¸òæ MÿŠªlxò.e‡¦]ÕËí:öÚ4éøx¨·Ñ©Íæ›7™8Ñ£ÚEkíîÜÛöåÎì’ζEÍg[ÂíæœøÍ#"'ºó›/ºbÉ$Q§+µš›{èä!añ¾Jö›YÝÄÉ&Ã\R:Ã0 œÄvto6£{wíLëi½:!X¾ÿ€ÃïûØOº“ î¿V›éÛ#»öø>eÜ+ÞѪOhyv%žU¥6>¯?Ñóóå®_®f›—¯e7_?–¬°þ®ß·çÝû„Dè+°%&‹ˆomǹÁj?‡±ãö-Ã…QW¨» ï¼Ib›æ”vAå?]1+È=7ʘ<9PcXEÚ¶b|Ï£ñø9×\/uûÝœÑ[í‡jb˜¤Ém†¶Ì¾8™x“µ< +ª7¶`´Ï0ttÌ©˜ðÌÈ.ˆý¾öz”;Ψæ¼ÞÞ]q¤J™dM6È×ߨù)`Þ*¯¢Ú_vF\ÒK»Ùa”ð,p;u‹×®bÅó¥9×òNóÏ!ï)í3±H/.lL¹æØ–2r¾÷ÌV£ß2õÉÇÒ¨g©U†·TiUv ÒG‘ðÅu½óðÐ%KéÛ[›%5™Ã}+äq»û“ö6Ô¼éú=o!irߪ¼&N³ˆœPÚæ¦éYìýúÕí»Á—h!%ôЬs'ùÕŒC{Ûœ””ÆÚÏO«‹87eK7~µ{Ef”Úçñë>’ļšï;ïGüŽnÇë®^ÿõÐÒ¾&+Rœ¾q^ù}ΚAiü¢ù’±7ÓÂ\K^EÇüœÏÖ¶\wò0ËxüuP ïvmbOâ­ÚÚø?÷šyØäzÎjm8°µqF]rARÁËŠ&·Õ𦝛÷D^ÏØ1ÖÊ…o…6ƒæPã3™†’W§l¹fþmjq7åˆ*$9qôì~¢}ùä\iaýÇ@\È£šm}‡êB-®æ‚¼Y§»½ô®ïõT}Ïͺù©m@äåUC­¿†‡2,?»æá1ÿŸ¶;˜‹9¿>VÛ”çÎ>;/ÞëÀÍÆû);69e·>»ºëxƧ¶2ù#3ýq‹XæüÉc¯¶¸çÏŸ“–C Úa2+b9e™²FçãÛ3Œ« Ñò“š'ôB #Sccntf°è^S¿á6|{¥´£ºàÛÕmÅÂ~I°½Aµõ¹¬ö¨^uÌ--Œ»ö¥«7íc=øsì3¹ÚÊ1éøê¡¹*£ & ‘K`¦ì•AyÒÌx¬ïÓ8b]ïbQâð2Uf“ýˆ#«$øÚƒƒc>ô•îîC\®Ýpp{PŽz—3íB•µßƒ[ô«ãÿ,J8e3Ò¼!É_}da¾óÇé4$tDMç>»ŸÂi92Ã×p¾¦¨x&ÍãRmü©¬Â¢`ãåóþ »¸­ endstream endobj 605 0 obj << /Type /ObjStm /N 100 /First 928 /Length 4016 /Filter /FlateDecode >> stream xÚí[Ys7~篘G{SÖà>R©T‰v$Ù–dY²|$å‡9²¸¡H…úØ_¿ÝÀÀ´)ëe«¶*žÁ4€>¾nt£ˆHH¢ˆJ÷N(a&¡ÂÊDQ’P+44X˜²Ð SS•0ca05 §ÀYpeåH1–p«"A-ƒ†J„& 9s’HÅY"¹DŠH¤TÀ«Dj ƒºPã@ÎH àe| ‘hªA1¡-@CNe¢•° ÕÐ¥µÅu¢-áÐ0‰AY¨†Jèî† –Äj› * S£¤IŒ3ÇXè²€ ·"~î‚T×·›>¯®o»'ºDà|.qñú§¤æe/¡@¾í{æéù„O/Kp¿äñé)è@—çð ëF…Î`Eh«™Â^7’3#4-9€ÝXŽq+áúK®nvÙ„p9\ NB)Ó=-H–6 3D¢Û)ž³­EÔf L4¦œëéDt…F+˹!O7¦òÚêÛ®ü*©pcÿÿü}~ýöÛ(}óí.OÒƒå¢x–¯'«Ù]±\Ü÷iv =¯ÇOß^þòôdüžè˜gŸÖ‰ð#Æãå×ä¯'°%xÂpOAaÇ£%ù8J÷ד|Q@LÃȧÙÝQ>ûtSà¶w”¢ì{B±óy‘Íg“ýŧyžû‹"¿}‹Å|”¾/'ÁžxÜd«‹¼H¥ûé³ôô0}ž§'éiú*=KÏÓ‹4K¯ÒI:YΗ xÞÞfé4ÍÓëôþ›ÁŸácž^/7«ôSz“ÎÒ§§óô6]¤Ët¹ÈÓ»ô._Í–ÓôŸt•®Ó"-¾,ÓMú9ý’~M¿=öÌ@OE,œ8ÎG¿ÿþC¾ýzüâÜ#Èäˆ Å«}‰Ý‚à8}êP<:H¾)±Düƒ4€°ÂïæÛÝM¾+3À°F2[å‹y~]øÖÊq)á½›oÖ%Æëü3ðXϾ¦ëy¶¾AÌoVy^#¸§ÿÉWË|JwÿôèÕ›WÏü“çCá Ûk¾6ãÛÁçÛÀ‚Qëá×,@ŸÓýçet^ŒŸVyVä+b¾^Œ%H_c“ù.&¿{~ñìôÒ™¬û-¦Õz…ƒÞÃlè ÁÇé%!›$w1éâðåÞ€IçCN„ƒKéDbƦz);hQw½H_‹èu¹Œ.Ó·é»ô}úT6Ù9,««U6ù;/ÜÚ(Û~u@îʧ³ù%ô$½K8=?xúüøÜ…Ó@B†ýµKÈÖ˜‡‰&9McˆŒ3/Yvg}Õ©¬M5,}r§òtxyúÇ…c ]pî×–°ëö‡Á`H‚AB0N„ ˜§‹v”l"ÙNUààåáåÅÚ¨úMdUú –?ˆÃ txYSërê+'ük¢¿qoǹl§Z0>:;xû ð-Ó•áŒ=ˆáÚîn¸Ë(?fýNec¼|òçZo"»Ú¹MÆzµCÕho».¡V4[¯zë:JÞËï$êïodÙNióððÝøÙà¼ø0T†™MžX¼úÃ[W­e( {¿­… ƒf«Õò‹7ki^WÕ2m\m A¡œç· ¦Únù‚‰µÔ·ng ?ª# ÍfÓÙ:Wùõ<ÿºÞ\­Ñf±»ZgóÄÒíÙûñáѱqhw&C< `Ò†=†Ã‹ÒYÙÃwJ­çïŽÎÿ8uö -2‚öàõ¢ú¡íCØ3¼ÌJÇÅí”3ß¾ûóüÙ+°èÍð‘AÖYS<ÐZ™-™£Ê¸Ól猷=ǵ(ać\ŸêÓUŒÓNÙõýÁéÑË}ÄéÍà®`ðñoIʪ%J#”ð³F‰1ö{ò¾ý8æ×l=™Í&³Õds‹ûqØ‚û½fÙ²]·éKغ¯š½¹Ë,×Ñ¡¹:íur¹;úýônÜoµh—=°¿Þ,¦ x²\åÛ¶Ú|§šqüòÏ÷ïO|°áÓ(Þg3¼P—?$ò;Aß]”»Íe³Å.ZÇo¾S‚¿Ž?8‹"&ü‹±À«_ûÓwÏѬ‰“r=àjx]™aöØvF\Æ'­Ç³<±S5ùpöâðè…Ïöƒ§Ê”‚G¶æçÁ[f!@ÕÊn4:£U}ŽÑØ©½xûúòÕÑ/'ã“Á»W&§XA<±,¨DBµ*‘m!hD{-ÅC4ÎÓ?cKj°Ú\è8[çØÓ½KŽ w?Ô@–éÁlµ.Pr‚N<Ϊ_ïfÓâfHKwß¾ˆm‹gñl@¼r¿9ÙQ|û*²-^´ÅK‰'õfwñ­kÁ¶tÕ–Ži¥‘NCézwé­¼¶tóÏëz¶»ôÖ…OK:ëÄPƒŽW»Koݰ´¥wÂŽÛùÐö{ ß}´…w‚N„A'CÙdwÙñõC[v'ä’}Õþ۲ͩæ×>*·ÄóNÄ‘Èå,~€k1ÛÂÙ6áÁ:7vwÑ­ã`[´èÂÎ-¿GÀµÏnmùÝ“‘ÛCñ÷Hñí#Q[|'금ÄË äùîâÛ›í–xñ½ØY;Ý;`g}°Óvº vÁÎú`§ ìtì$‚öÁNØÉ6ØI;íƒ4°“m°“vÒ;©a·[P·è¤t[cnû!/§ö€lkŒm ±&ÐA…û€Z#—£ªœP&©'TÆL ½‰‘7$`zÌ25Ò†õÎtf™dM ¬6-«™:Ü]Tx£J¦•M,f¯k¼µØÂ>ßô`¯kì5f£ÂèÖ=Á­j€•êeãgöIJªVl‹ó£dkÃýh­œD ‰–°Ú'2öIÅÞÉ’=Ên)†gF…JõÀÝ”ËVµ!Ü}e©©•­RÉì«MilUÆXõ0že•"¸µÒZQÙÔNÞ°cßW+›RÉÅ–8ˆ²œ* œšjk4Å´UKiI_™jjg«tÆ3CŸôΦn¶ÊfÌ&ôI¯6MÍ4½lü̾Ù”Èmp‡ë>:׺9´9Û†vPCc´{,jòÈ­¢iUUt_ZE¡µk¥ú%ù”jˆ7û°Õ~ôl9yrQd«â1Àè·ÙŽ®—Ëb±,ò= TÓ¥’Çk¼C¦H2C²ì9’Ë |z<»-}âÁÛš½Xñ®‰dÕ!+$ëYÙ'¦ Ê3ŸjB*G*oëk ߢ½@^Ô@w&;&êLwÆj¤vÆ v}gu6¬y¬¸í*žÝÝå‹éìëÞþãÄÿõ#y4™ÁØý“³cdnCÚbºÊ³õó»å8T0ôó"›ƒŽ~'WŸ"E”ƒc¤È¶Æ¡õÀ޲¾cv\ä+DY|³o¨m(üpsWd†œ.x€ÌpJå®ÿt9ɧÙ|šÝ³Ï9DB^;ÝU@É®nfë›üï½yþíú:_íßi¾Z7¿t¥Ç*4+RøG˜ô›|µ\d·³=DØK¢$P«ìý´\L²ùç|ý+X4DçfYüʱ8µ´ñë.!(0pR0 ÝkY[¯zFÇ ß©CŠ9f )€‹_EcpÝÇJâ’×&¤àj÷á*YK­G (æ‹„ZŒï*àBË›–’P  ¨„ˆ(0KHÖ¯—yÜŒê׋<¢¼-))ÐE"%ƒ<ÂD€G؈Âe7]×RëQŠ<’†h` å¡“8À#Ëž’ðHQ)Ck8ðÁÿÓ½W/û¸Õ¯x¤f!C€Gš‚ Z†޹9šãÒrh Fé.”X ê× æQlaÎ.ï ­ó þÈý_n%V^lˆ¸mg(Ah« _ÝïSŒµh¤Óõ¿O¯. endstream endobj 695 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.15)/Keywords() /CreationDate (D:20150404142053+02'00') /ModDate (D:20150404142053+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2014/Arch Linux) kpathsea version 6.2.0) >> endobj 662 0 obj << /Type /ObjStm /N 33 /First 289 /Length 1332 /Filter /FlateDecode >> stream xژɎ7†ïz £5—*’€a``ß²"Ë)ðA¶c€ñÌ #òö©¿›#‹UÍŽ/¢PÜþúHV‘ÍìÝ䘣ó5J™\,^Jr$ÿ™ÙåT¥Ì®FÔç½/ò§:§à8OΧ’åw^~vœƒó…X,Ñ…)Éè9¹Ér!MÒ=³ Te¢œ]È‹ •Ѹºè“4.“‹ÑËÈ"(ÒD;.ÁÅŒî%ºX½ô*É%D`!—bD»D³%»ÄA4—âR2r©.• “ÖÉ¥:ÿñŽ&_v\ƒ#ïÅ@a’‘k’?!ï^½Ú~9~>=»¿¿{>}8ß=>|ã§°w$Ú'÷»»6G˜‹1'1‹fm&˜“13ÌdÌf†ùÝîðÓÝ绳ÕÔ··{ýzä@ÁhÖ ³qÀï]š&m•ùR0^EXS VÚ_ö}ó 턱XÏ ÔR Úša5 ¬Fc…Us'ÃÆÂiß5ˆײÐF½h“v&mÒΠMÚ™Hi jºÖÂA6á ›ŒpMzÿ%-\¼‘`  Di¬›÷}ë±î´¤×3-io"ÐΡ°³-ëeˆ@ËÆPâ±p¨éZoZ6–p ÍZ¸èŽUëN@›”rëÎû¾õXwÚ¬wbZ êÊ ´E¯~Úb¼Úb„ƒR O]8L[Ñ0m1¶j‰´zñ h«ÖM@k–@©nèî"!m…ÚªÐVí !Ù˜NÈ5“ŽT3é³MHS ‡š®õ†p¤™IKd ÕÛž-y­›=¬Z7#+{ œ‘”}ë®û¾õX7#‘{Þh½ñhƒ´ÁÚ`„ƒRï¨éZ…g Õ±#mÐÞd  Ú› ´Q{“6jo2(ÅqÎì"JÞJõdMúÎ nF7Èš,“A6iÝÆû$w©~k{€5黬Iß`Mú.›ôY(KF6 ÑwéR}ÙJõdM¢. KF"ÈšôZ@Ö¤× ²zÁ*(јwéR}ÝJõhÉL´¤wDZÖÞT 59·­É¹”x,¼v©¾n¥ú ´l„mÖËPV¥×™ªo‡ k¹qÑòã›`½:Ž7ãà7ß)z>È…—{З÷u‰Í_íq¶×;îØqÅŽâóÍüúÖVûu=°ªÒŒ°®Ø‘§ãŠû‡VìØAvÂø+›E)Ó]¶\¡yýÊT"-ÓŠ]&ÈVÚ-¤UZ³ËÑô+°nç§ ´áάÎtÚòçv~Jú¸ª›wenç'¥¿<@º†_S/ÓÔµY0É7œZ$êNÛNAß´¦òüš«ugâf~.|°¯œï_k•´œ³G•ÒóåkÄùøþþ4ŸJšÖ0z.=.ò¼û(­9-ÈxGJßÊÐÊØJól{ûøá‡?ÎÇÎ2úÓñÓ©ÛÂmô¸e;^R™”¥•mv6^,#ªÏ5v‚öåc¹%-niŠ[bâT¤> ]?;_&ij¹©ÍU‹/ÜŒüÍOÄë{h›£%-n± _ÿ–²k_Ìx‰Qÿwg¼>xm‚öäötäöXä¶ß¸}dãB[Ùd´J“Û6(·ïcÜ^ŒÜÞˆ¼<GÛÈŒþöô,xy ¾ÿü÷éäoŽçãýã§Ýá7Ù)Òf9q»Ã¯_Î÷w³¥,–å òòž\ÚÿüøñtøëùôÒXº=ng?%.¦—éþ{…Ó endstream endobj 696 0 obj << /Type /XRef /Index [0 697] /Size 697 /W [1 3 1] /Root 694 0 R /Info 695 0 R /ID [ ] /Length 1653 /Filter /FlateDecode >> stream xÚ%—IlVU†Ï÷ÿg:”-¥@)SéÀm) ¥L--cËTÚÒ ÆÄƒF®LˆÁÝ;s6®LD7’¸bAt¡9&Æ&®ˆ!&îÔÏĵÏëæÉùÞ;ü÷ž÷ýÎ=!ü[¡,4­F· ¡°x‘Â:RÚ5Ê"(¡D»JYÊÑŽ£ÍQV€J´I´YÊ*P6…v…²l@»v™²Ô¡-£]¢¬ h+h)AÓú£gåh(›A ZÚyÊVІV‰6C¹´£m@›¦Ü:Ð6££Ü ¶ mA›¢Ü :Ѷ¢MRvmhhg)»Áv´1´3”=`Ú ´Ó”;Á.´ ´S”½`7Úe´“”}`Ú ´ ʽ`ߺÛÐNPîÐ6¢Söƒƒh›ÐŽS€A´#h/Pa´ShÇ( M^¥£h—ÐŽPchòrŒRŽ¢­¢éÝtý×Ì5÷£”z q´4Ý^/3¦¹Ï(5§Ð4Ïz4Mâ´^´aJ0‰6‚¦×’yçÐ΢ RÊx%BQQ†.¥îP&V¥XñVîÕê”% ¡^ÝsÌsû]@ÑÓ·ƒ@áR^u2Zd¤§ßC¹ VÀ*X#÷Ü>Ñ’I-I#&5"m•Ôo·-Të¼2n%§;@7è;8ZŽÕ  Ô€: “»Xb »ÅH穉յôjR¯Ò¡‰–L<}R_Ò‰×JM€FL-€öKm€¦KÛ@; ßR ËÒ@o%‚ž˜ˆD¤J ëµè¨´hyÐËÐ=‰î‰z4"í´A:p:í¶°ãUÝ¥Ÿ‰ØÍh€‘ˆÐ$Ò”ˆY"“‰°&Òžˆr"ʉì&:4‘ºDO'1 YØ÷·nO%œè¼DŠ1K'-du éL¬/‰Ô%R—H]">‰è%R—H]šD/½t ¿DþÒ „‰°¦EÌS6f,Œ?ׯ-‚”Ö8ŠÉ™¯¿—©«õ~ìÑQb‘•,ÌU«Tš62⼬ÚÂü 9Y=h:¥hUÖòÚ ZÁ& eXkâzàV¦t-¹Z³»€VÑn uR £V½^ 5±ì=îÞÓ]xl'`9ÌXë²pÀÂk:EÆ÷0b…Ë-ÜïÓ!è²pÈÂGê«^v £>ÐÀ5,;N– ì,8 ŽZxô¥Nf]ËXŒ²)À”Mƒp\ÁX§,föâçºí¸ï¸ïÚ—à¾k7B›úºû/¯êdÜwm?ˆ€kÓ¡]pí-èKŸ1»÷®® Nœ8ìäÀig'4ŽñŽñŽñŽñŽñŽñ.㉊³¶;ž;íïï«` VzVÐ_4{’Ù·ʬPÿµFåVüI£ +ÌviTi…GÿkUVøù ª­XñT£+ö½£Ñ+N¨Q­ü¢Q?«Ô¨ÞŠßŒkÔ`Åç5j´Rß°FMVzcA£f+½ÿD£+=üA£V+=ÒHÛZý×ÐÇZ;ß›@›,ýYÑ6J;¨% Í§þ9诂öLN¾>9¿¿ÉMs&'grò"(>r9$rþ9äüUÈ«@5¨lWóZPêÛÕ¼4fÐZOŸ³ ÏÙÿåìÈrvd9›Àœu2g‹˜³™Í»À6+ýÖ¿þ¤u†ÿ/O÷ endstream endobj startxref 326174 %%EOF Bonmin-releases-1.8.9/Bonmin/doc/BONMIN_UsersManual.tex000066400000000000000000000007301436575401300225760ustar00rootroot00000000000000\documentclass{article} \usepackage[colorlinks=true]{hyperref} \usepackage{lscape} \usepackage{amsmath,amssymb} \usepackage{threeparttable} \usepackage{xtab} \usepackage{ltrick} \usepackage{bonmin} \title{\Bonmin\ Users' Manual} \author{Pierre Bonami and Jon Lee} \date{Version \stableVersion \\Updated May 2013} \begin{document} \maketitle \input{Intro} \input{Obtain} \input{Install} \input{use} \input{options_set} \input{bib} \input{options_list} \end{document} Bonmin-releases-1.8.9/Bonmin/doc/Head.tex000066400000000000000000000004011436575401300201310ustar00rootroot00000000000000\documentclass{article} \usepackage{tex4ht} \usepackage{hyperref} \usepackage{lscape} \usepackage{amsmath,amssymb} \usepackage{threeparttable} \usepackage{xtab} \usepackage{htrick} \usepackage{bonmin} \begin{document} \input{FILENAME} \end{document} Bonmin-releases-1.8.9/Bonmin/doc/Install.tex000066400000000000000000000136011436575401300207040ustar00rootroot00000000000000\begin{PageSummary} \PageName{Installation} \PageSection{Installing \Bonmin}{sec:install} \PageSection{Configuring {\tt Cplex}}{sec:cplex_install} \PageSection{Compiling \Bonmin\ in a external directory}{sec:vpath} \PageSection{Building documentation}{sec:ref_man} \PageSection{Running test program}{sec:test} \end{PageSummary} \begin{quickref} \quickcitation{Generic Coin Installation on Coin BuildTools web page}{\linkCoin BuildTools} \quickcitation{Known issues for building Coin packages}{\linkCoin BuildTools} \quickcitation{\Bonmin\ build Wiki page.}{\linkCoin Bonmin/wiki/GettingStarted} \quickcitation{Specific Instructions for building \Bonmin\ on Cygwin}{\linkCoin Bonmin/Wiki/CygwinInstall} \quickcitation{Specific instructions for building \Bonmin\ on Mac OSX}{\linkCoin Bonmin/Wiki/OsXInstall} \end{quickref} \PageTitle{Installing \Bonmin}{sec:install} The build process for \Bonmin\ should be fairly automatic as it uses \href{http://sources.redhat.com/autobook/autobook/}{GNU autotools}. It has been successfully compiled and run on the following platforms: \begin{itemize} \item Linux using g++ version 4.5 \item Windows using version Cygwin 1.5.18 \item Mac OS X using gcc 4.5 \end{itemize} For Cygwin and OS X some specific setup has to be done prior to installation. These step are described on the wiki pages of {\tt Bonmin} \footlink{https://projects.coin-or.org/Bonmin/wiki/CygwinInstall}{CygwinInstall} and \footlink{https://projects.coin-or.org/Bonmin/wiki/OsxInstall}{OsxInstall}. \Bonmin\ is compiled and installed using the commands: \begin{colorverb} \begin{verbatim} ./configure -C make make install \end{verbatim} \end{colorverb} If the ASL source had been obtained, this installs the executable {\tt bonmin} in {\tt Bonmin-\stableVersion/bin}. In what follows, we assume that you have put the executable {\tt bonmin} on your path. The {\tt configure} script attempts to find all of the machine specific settings (compiler, libraries,...) necessary to compile and run the code. Although {\tt configure} should find most of the standard ones, you may have to manually specify a few of the settings. The options for the configure script can be found by issuing the command \begin{colorverb} \begin{verbatim} ./configure --help \end{verbatim} \end{colorverb} For a more in depth description of these options, the reader is invited to refer to the COIN-OR {\tt BuildTools} \footlink{\linkCoin BuildTools}{trac page}. \subsectionH{Specifying the location of {\tt Cplex} libraries}{sec:cplex_install} If you have {\tt Cplex} installed on your machine, you may want to use it as the Mixed Integer Linear Programming subsolver in {\tt B-OA}, {\tt B-Hyb} and {\tt B-iFP}. To do so you have to specify the location of the header files and libraries. You can either specify the location of the header files directory by passing it as an argument to the configure script or by writing it into a {\tt config.site}. In the former case, specify the location of the {\tt Cplex} header files by using the argument {\tt --with-cplexincdir} and the location of the {\tt Cplex } library with {\tt --with-cplexlib} (note that on the Linux platform you will also need to add {\tt -lpthread -lm} as an argument to {\tt --with-cplexlib}). For example, on a Linux machine if {\tt Cplex} is installed in {\tt /usr/ilog}~, you would invoke configure with the arguments as follows: \begin{colorverb} \begin{verbatim} ./configure --with-cplex-incdir=/usr/ilog/cplex/include/ilcplex \ --with-cplex-lib="/usr/ilog/cplex/lib/libcplex.a -lpthread -lm" \end{verbatim} \end{colorverb} In the latter case, put a file called {\tt config.site} in a subdirectory named {\tt share} of the installation directory (if you do not specify an alternate installation directory to the {\tt configure} script with the {\tt --prefix} argument, the installation directory is the directory where you execute the {\tt configure} script). To specify the location of {\tt Cplex}~, insert the following lines in the {\tt config.site} file: \begin{colorverb} \begin{verbatim} with_cplex_lib="/usr/ilog/cplex/lib/libcplex.a -lpthread" with_cplex_incdir="/usr/ilog/cplex/include/ilcplex -lm" \end{verbatim} \end{colorverb} (You will find a {\tt config.site} example in the subdirectory {\tt BuildTools} of {\tt Bonmin-\stableVersion}.) \subsectionH{Compiling \Bonmin\ in a external directory}{sec:vpath} It is recommended to compile \Bonmin\ in a directory different from the source directory ({\tt Bonmin-\stableVersion} in our case). This is convenient if you want to have several executables compiled for different architectures or have several executables compiled with different options (debugging and production, shared and static libraries) but also because you don't modify the directory where the sources are. To do this just create a new directory, for example {\tt Bonmin-build} in the parent directory of {\tt Bonmin-\stableVersion} and run configure from {\tt Bonmin-build}: \medskip {\tt ../Bonmin-\stableVersion/configure -C } \medskip This will create the makefiles in {\tt Bonmin-build}, and you can then compile with the usual {\tt make} and {\tt make install} (in {\tt Bonmin-build}). \subsectionH{Building the documentation}{sec:ref_man} The documentation for \Bonmin\ consists of a users' manual (this document) and a reference manual. You can build a local copy of the reference manual provided that you have Latex and Doxygen installed on your machine. Issue the command {\tt make doxydoc} in {\tt Bonmin-\stableVersion}. It calls Doxygen to build a copy of the reference manual. An html version of the reference manual can then be accessed in {\tt doc/html/index.html}. %You can also build a pdf %version of the reference manual by issuing the command {\tt make %refman.pdf} ({\tt refman.pdf} is placed in the {\tt doc} subdirectory). \subsectionH{Running the test programs}{sec:test} By issuing the command {\tt make test}~, you build and run the automatic test program for \Bonmin. Bonmin-releases-1.8.9/Bonmin/doc/Intro.tex000066400000000000000000000203321436575401300203700ustar00rootroot00000000000000%%% Local Variables: %%% mode: latex %%% TeX-master: "Bonmin_UsersManual" %%% End: \html{ \begin{PageSummary} \PageName{Introduction} \PageSection{Types of problems solved}{MathBack} \PageSection{Algorithms}{Algos} \PageSection{Required third party code}{ThirdP} \PageSection{Supported platforms}{Support} \end{PageSummary} \begin{quickref} \quickcitation{An algorithmic framework for convex MINLP. Bonami et.al.}{\BetalLink} \quickcitation{Algorithms and Software for Convex Mixed Integer Nonlinear Programs. Bonami, Kilinc, Linderoth}{\HotMINLPLink} \quickcitation{An outer-approximation algorithm for a class of MINLP. M. Duran and I.E. Grossmann. Mathematical Programming}{\DGLink} \quickcitation{Branch and bound experiments in convex nonlinear integer programming. O.K. Gupta and V. Ravindran.}{\GuptaLink} \quickcitation{Solving MINLP by outer approximation. R. Fletcher and S. Leyffer. Mathematical Programming.}{\FLLink} \quickcitation{An LP/NLP based branched and bound algorithm for convex MINLP optimization problems. I. Quesada and I.E. Grossmann. Computers and Chemical Engineering.}{\QGLink}\end{quickref} } \PageTitle{\latexhtml{Introduction}{\Bonmin}}{sec:Intro} \Bonmin\ (Basic Open-source Nonlinear Mixed INteger programming) is an open-source code for solving general MINLP (Mixed Integer NonLinear Programming) problems. It is distributed on \COINOR\ \latexhtml{{(\tt www.coin-or.org)}}{} under the EPL (Eclipse Public License). The EPL is a license approved by the \footlink{http://www.opensource.org}{OSI}, (Open Source Initiative), thus \Bonmin\ is OSI Certified Open Source Software. There are several algorithmic choices that can be selected with \Bonmin. {\tt B-BB} is a NLP-based branch-and-bound algorithm, {\tt B-OA} is an outer-ap\-prox\-i\-ma\-tion decomposition algorithm, {\tt B-iFP} is an iterated feasibility pump algorithm, {\tt B-QG} is an implementation of Quesada and Grossmann's branch-and-cut algorithm, {\tt B-Hyb} is a hybrid outer-ap\-prox\-i\-ma\-tion based branch-and-cut algorithm and {\tt B-Ecp} is a variant of {\tt B-QG} based on adding additional ECP cuts. Some of the algorithmic choices require the ability to solve MILP (Mixed Integer Linear Programming) problems and NLP (NonLinear Programming) problems. The default solvers for these are, respectively, the COIN-OR codes \Cbc\ and \Ipopt. In turn, {\tt Cbc} uses further COIN-OR modules: \Clp\ (for LP (Linear Programming) problems), \Cgl\ (for generating MILP cutting planes), as well as various other utilities. It is also possible to step outside the open-source realm and use \Cplex\ as the MILP solver and FilterSQP as the NLP solver. Additional documentation can be found on the {\tt Bonmin} \latex{homepage at $$ \hbox{\url{http://www.coin-or.org/Bonmin}} $$ and wiki at $$ \hbox{\url{https://projects.coin-or.org/Bonmin}} $$ } \html{ \href{http://www.coin-or.org/Bonmin}{homepage} and \href{https://projects.coin-or.org/Bonmin}{wiki}.} \subsectionHs{Types of problems solved}{MathBack} \Bonmin\ solves MINLPs of the form %\left\{ \begin{align*} %\begin{array}{l} &\min f(x) \\ & {\rm s.t.} \\ &g^L \leq g(x) \leq g^U,\\ & x^L \leq x \leq x^U, \\ &x \in \mathbb{R}^n, \; x_i \in \mathbb{Z} \; \forall i \in I, %\end{array} \end{align*} %\right. where the functions $f :~\{x\in \mathbb{R}^n : x^L \leq x \leq x^U \}~ \rightarrow~\mathbb{R}$ and $g:~\{x\in \mathbb{R}^n : x^L \leq x \leq x^U \}~\rightarrow~\mathbb{R}^m$ are assumed to be twice continuously differentiable, and $I \subseteq \{1, \ldots,n \}$. We emphasize that \Bonmin\ treats problems that are cast in {\em minimization} form. The different methods that \Bonmin\ implements are exact algorithms when the functions $f$ and $g$ are convex but are only heuristics when this is not the case (i.e., \Bonmin\ is not a \emph{global} optimizer). \subsectionHs{Algorithms}{Algos} \Bonmin\ implements six different algorithms for solving MINLPs: \begin{itemize} \item {\tt B-BB}: a simple branch-and-bound algorithm based on solving a continuous nonlinear program at each node of the search tree and branching on variables \mycite{Gupta80Nonlinear}{Gupta 1980}; we also allow the possibility of SOS (Type 1) branching \item {\tt B-OA}: an outer-approximation based decomposition algorithm \latexhtml{\cite{DG,FL}} {[\href{\DGLink}{Duran Grossmann 1986},\href{\FLLink}{Fletcher Leyffer 1994}]} \item {\tt B-QG}: an outer-approximation based branch-and-cut algorithm \citeH{QG}{\QGLink}{Quesada Grossmann 1994} \item {\tt B-Hyb}: a hybrid outer-approximation / nonlinear programming based branch-and-cut algorithm \citeH{Betal} {\BetalLink}{Bonami et al. 2008} \item {\tt B-Ecp}: another outer-approximation based branch-and-cut inspired by the settings described in \citeH{abhishek.leyffer.linderoth:06}{\AbhishekLink}{Abhishek Leyffer Linderoth 2006} \item {\tt B-iFP}: an iterated feasibility pump algorithm \citeH{bonami.etal:06}{\FPLink}{Bonami Cornu\eacute jols Lodi Margot 2009}. \end{itemize} In this manual, we will not go into a further description of these algorithms. Mathematical details of these algorithms and some details of their implementations can be found in \citeH{Betal}{\BetalLink}{Bonami et al. 2008} and \citeH{hot:2009}{\HotMINLPLink}{Bonami K\i ln\i c Linderoth 2009}. Whether or not you are interested in the details of the algorithms, you certainly want to know which one of these six algorithms you should choose to solve your particular problem. For convex MINLPs, experiments we have made on a reasonably large test set of problems point in favor of using {\tt B-Hyb} (it solved the most of the problems in our test set in 3 hours of computing time). Nevertheless, there are cases where {\tt B-OA} is much faster than {\tt B-Hyb} and others where {\tt B-BB} is interesting. {\tt B-QG} and {\tt B-ECP} correspond mainly to a specific parameter setting of {\tt B-Hyb} but they can be faster in some case. {\tt B-iFP} is more tailored at finding quickly good solutions to very hard convex MINLP. For nonconvex MINLPs, we strongly recommend using {\tt B-BB} (the outer-approximation algorithms have not been tailored to treat nonconvex problems at this point). Although even {\tt B-BB} is only a heuristic for such problems, we have added several options to try and improve the quality of the solutions it provides (see \latexhtml{Section \ref{sec:non_convex}}{\href{\OptSetPage \#sec:non_convex}{non convex options}}). Because it is applicable to more classes problem {\tt B-BB} is the default algorithm in \Bonmin. \subsectionHs{Required third party code}{ThirdP} In order to run {\Bonmin}, you have to download other external libraries (and pay attention to their licenses!): \begin{itemize} \item \href{\LapackAddr}{Lapack} (Linear Algebra PACKage) \item \href{\BlasAddr}{Blas} (Basic Linear Algebra Subroutines) \item a sparse linear solver that is supported by Ipopt, e.g., MA27 from the \href{\AslAddr}{HSL} (Harwell Subroutine Library), MUMPS, or Pardiso. \end{itemize} Note that Lapack and the Blas are free for commercial use from the \footlink{http://www.netlib.org}{Netlib Repository}, but they are not OSI Certified Open Source Software. The linear solver MA27 is freely available for noncommercial use. The above software is sufficient to run \Bonmin\ as a stand-alone C++ code, but it does not provide a modeling language. For functionality from a modeling language, \Bonmin\ can be invoked from \footlink{http://www.ampl.com}{\tt AMPL} (no extra installation is required provided that you have a licensed copy of {\tt AMPL} installed), though you need the {\tt ASL} (AMPL Solver Library) which is obtainable from the Netlib. \Bonmin\ can use FilterSQP \citeH{FiLter}{\FilterLink}{FletcherLeyffer1998} as an alternative to \Ipopt\ for solving NLPs. Also, in the outer approximation methods {\tt B-OA} and {\tt B-iFP}, some MILP problems are solved. By default \Bonmin\ uses \Cbc\ to solve them, but it can also be set up to use the commercial solver \footlink{http://www.cplex.com}{\Cplex}. %\subsectionHs{Tested platforms}{Support} %\Bonmin\ has been installed on the following systems: %\begin{itemize} %\item Linux using g++ version 3.* and 4.* until 4.6 and Intel 9.* and 10.* %\item Windows using version Cygwin 1.5.18 %\item Mac OS X using gcc 3.* and 4.* until 4.3 and Intel 9.* and 10.* %\item SunOS 5 using gcc 4.3 %\end{itemize} Bonmin-releases-1.8.9/Bonmin/doc/Makefile000066400000000000000000000006371436575401300202210ustar00rootroot00000000000000OUTPUTS = html/Install.html OUTPUTS += html/Intro.html OUTPUTS += html/Obtain.html OUTPUTS += html/bib.html OUTPUTS += html/options_list.html OUTPUTS += html/options_set.html OUTPUTS += html/use.html OUTPUTS += html/bonmin.css all: $(OUTPUTS) Head.tex html/%.html : %.tex Head.tex bonmin.sty ./genHtml.sh $< html/bonmin.css : bonmin.css cp bonmin.css html/ install_www: cp -rv html/*.html ../../../../html/ Bonmin-releases-1.8.9/Bonmin/doc/Obtain.tex000066400000000000000000000105301436575401300205100ustar00rootroot00000000000000\begin{PageSummary} \PageName{Downloading \Bonmin} \PageSection{Obtaining \Bonmin}{sec:obtain} \PageSection{Obtaining required third party code}{sec:obtain_3rd} \end{PageSummary} \begin{quickref} \quickcitation{Bonmin Wiki Pages}{\linkCoin Bonmin} \quickcitation{subversion web page}{http://subversion.tigris.org/} \quickcitation{Using subversion on windows}{http://www.coin-or.org/faqs.html\#q4} \quickcitation{Linear Algebra PACKage}{http://www.netlib.org/lapack/} \quickcitation{Basic Linear Algebra Subroutines}{http://www.netlib.org/blas/} \quickcitation{Harwell Subroutine Library}{http://www.cse.clrc.ac.uk/nag/hsl/contents.shtml} \quickcitation{Mumps}{http://mumps.enseeiht.fr/} \quickcitation{AMPL Solver Library}{http://www.ampl.com} \end{quickref} \PageTitle{Obtaining \Bonmin}{sec:obtain} The \Bonmin\ package consists of the source code for the \Bonmin\ project but also source code from other \COINOR\ projects: \begin{itemize} \item \BuildTools \item \Cbc \item \Cgl \item \Clp \item \CoinUtils \item \Ipopt \item \Osi \end{itemize} When downloading the \Bonmin\ package you will download the source code for all these and libraries of problems to test the codes. Before downloading \Bonmin\ you need to know which branch of Bonmin you want to download. In particular you need to know if you want to download the latest version from: \begin{itemize} \item the Stable branch, or from \item the Released branch. \end{itemize} These different version are made according to the guidelines of COIN-OR. The interpretation of these guidelines for the Bonmin project is explained on the wiki pages of Bonmin. The main distinction between the Stable and Release branch is that a stable version that we propose to download may evolve over time to include bug fixes while a released version will never change. The released versions present an advantage in particular if you want to make experiments which you want to be able to reproduce the stable version presents the advantage that it is less work for you to update in the event where we fix a bug. The easiest way to obtain the released version is by downloading a compressed archive from \href{http://www.coin-or.org/Tarballs/Bonmin/}{Bonmin archive directory}. The only way to obtain one of the stable versions is through \href{http://subversion.tigris.org/}{subversion}. In Unix\footnote{UNIX is a registered trademark of The Open Group.}-like environments, to download the latest stable version of Bonmin (\stableVersion) in a sub-directory, say {\tt Bonmin-\stableVersion} issue the following command \begin{center} \tt \small svn co https://projects.coin-or.org/svn/Bonmin/stable/\stableVersion\ Bonmin-\stableVersion \end{center} \noindent This copies all the necessary COIN-OR files to compile \Bonmin\ to {\tt Bonmin-\stableVersion}. To download \Bonmin\ using svn on Windows, follow the instructions provided at \href{http://www.coin-or.org/faqs.html\#q4}{COIN-OR}. \subsectionH{Obtaining required third party code}{sec:obtain_3rd} \Bonmin\ needs a few external packages which are not included in the \Bonmin\ package. \begin{itemize} \item Lapack (Linear Algebra PACKage) \item Blas (Basic Linear Algebra Subroutines) \item A sparse linear solver. \item Optionally ASL (the AMPL Solver Library), to be able to use \Bonmin\ from AMPL. \end{itemize} Since these third-party software modules are released under licenses that are incompatible with the EPL, they cannot be included for distribution with \Bonmin\ from COIN-OR, but you will find scripts to help you download them in the subdirectory {\tt ThirdParty} of the \Bonmin\ distribution. In most Linux distributions and CYGWIN, Lapack and Blas are available as prebuild binary packages in the distribution (and are probably already installed on your machine). Linear solvers are used by Ipopt. The most up-to-date information regarding the supported linear solvers and how to install them is found in \href{http://www.coin-or.org/Ipopt/documentation/node13.html}{Section 2.2} of the Ipopt manual. Several options are available for linear solvers: MA27 from the Harwell Subroutine Library (and optionally, but strongly recommended, MC19 to enable automatic scaling in \Ipopt), MA57 or Mumps. In our experiment MA27 and MA57 usually perform significantly better but they are freely available only for non-commercial, academic use. Note that linear solvers can also take advantage of Metis. Bonmin-releases-1.8.9/Bonmin/doc/bib.tex000066400000000000000000000067641436575401300200460ustar00rootroot00000000000000\begin{PageSummary} \end{PageSummary} \begin{thebibliography}{10} \bibitem{abhishek.leyffer.linderoth:06} K.~Abhishek, S.~Leyffer, and J.~T. Linderoth. FilMINT: An outer-ap\-pro\-xi\-mat\-ion-based solver for nonlinear mixed integer programs. {\em INFORMS Journal On Computing}, 22 (2010), pp.~555--567. \doilink{10.1287/ijoc.1090.0373} \bibitem{Betal} P.~Bonami, A.~W\auml chter, L.T.~Biegler, A.R.~Conn, G.~Cornu\eacute jols, I.E.~Grossmann, C.D.~Laird, J.~Lee, A.~Lodi, F.~Margot and N.~Sawaya. \newblock An algorithmic framework for convex mixed integer nonlinear programs. {\em Discrete Optimization}, 5 (2008), pp.~186--204. \newblock \doilink{10.1016/j.disopt.2006.10.011} \bibitem{bonami.etal:06} {P.~Bonami, G.~Cornu\eacute jols, A.~Lodi, and F.~Margot}. {A feasibility pump for mixed integer nonlinear programs}. {\em Mathematical Programming}, 119 (2009), pp.~331--352. \doilink{10.1007/s10107-008-0212-2} \bibitem{bonami.goncalves:08} {P.~Bonami and J.~Gon{\c{c}}alves}. {Primal heuristics for mixed integer nonlinear programs}. {\em Computational Optimization and Applications}, 51 (2012), pp.~729--747. \doilink{10.1007/s10589-010-9350-6} \bibitem{hot:2009} P. Bonami, M.~{K{\i}l{\i}n\c{c}} and J.~Linderoth. Algorithms and Software for Convex Mixed Integer Nonlinear Programs. In \emph{Mixed Integer Nonlinear Programming} (J.~Lee and S.~Leyffer, editors), volume 154 of \emph{The IMA Volumes in Mathematics and its Applications} (2012), pp.~1--40. \doilink{10.1007/978-1-4614-1927-3} \bibitem{DG} M.~Duran and I.E.~Grossmann. \newblock An outer-approximation algorithm for a class of mixed-integer nonlinear programs. \newblock {\em Mathematical Programming}, 36 (1986), pp.~307--339. \newblock \doilink{10.1007/BF02592064} \bibitem{Gupta80Nonlinear} O.K.~Gupta and V.~Ravindran. \newblock Branch and bound experiments in convex nonlinear integer programming. \newblock {\em Management Science}, 31 (1985), pp.~1533--1546. \newblock \doilink{10.1287/mnsc.31.12.1533} \bibitem{FL} R.~Fletcher and S.~Leyffer. \newblock Solving mixed integer nonlinear programs by outer approximation. \newblock {\em Mathematical Programming}, 66 (1994), pp.~327--349 \newblock \doilink{10.1007/BF01581153} \bibitem{FiLter} R.~Fletcher and S.~Leyffer. \newblock User manual for filter{SQP}. \newblock {\em University of Dundee Numerical Analysis Report NA-181}, 1998. \bibitem{Gay} D.M.~Gay. \newblock Writing \texttt{.nl} files. \newblock Sandia National Laboratories, Technical Report No. 2005-7907P, 2005. \bibitem{QG} I.~Quesada and I.E.~Grossmann. \newblock An {LP/NLP} based branched and bound algorithm for convex {MINLP} optimization problems. \newblock {\em Computers and Chemical Engineering}, 16 (1992), pp.~937--947. \newblock \doilink{10.1016/0098-1354(92)80028-8} \bibitem{AMPL} R.~Fourer and D.M.~Gay and B.W.~Kernighan. \newblock AMPL: A Modeling Language for Mathematical Programming, Second Edition, \newblock Duxbury Press Brooks Cole Publishing Co., 2003. \bibitem{NocedalAdaptive} J.~Nocedal, A.~W\"achter, and R.~A. Waltz. \newblock Adaptive Barrier Strategies for Nonlinear Interior Methods. \newblock {\em SIAM Journal on Optimization}, 19 (2008), pp.~1674--1693. \newblock \doilink{10.1137/060649513} \bibitem{AndreasIpopt} A.~W\"achter and L.~T.~Biegler. \newblock On the Implementation of a Primal-Dual Interior Point Filter Line Search Algorithm for Large-Scale Nonlinear Programming. \newblock Mathematical Programming 106 (2006), pp.~25--57. \newblock \doilink{10.1007/s10107-004-0559-y} \end{thebibliography} Bonmin-releases-1.8.9/Bonmin/doc/bonmin.css000066400000000000000000000104601436575401300205500ustar00rootroot00000000000000/***********************************************/ /* Bonmin.css */ /* coin.css modified. */ /* want a top navigation panel */ /* And links on the left-hand-side */ /***********************************************/ /***********************************************/ /* HTML tag styles */ /***********************************************/ body{ background-color: white; font-family: Arial, Helvetica, Univers, Zurich BT, sans-serif; } h4 { margin-left: 5%; } ul.indented { margin-left: 5%; } /* For corporate logo display */ img.logo { border-style: none; vertical-align: middle; text-align: center; } li.logo { font-size: x-large; } table.logo { vertical-align: middle; text-align: center; border-spacing: 20px; } /* ##### Header ##### */ /* This part adapted from Tierra Verde Dos by haran from OSWD.org */ #header { /* color: rgb(0,0,153);*/ color: black; background-image: url(blue_gradient.jpg); background-repeat: repeat-y; vertical-align: center; text-align: right; /* padding: 0 2.5mm 1ex 4mm; */ padding: 0 0 0 0; border-bottom: 2px solid white; } #header h1 { margin-right: 30px; } #leftPanel { float:left; width:3cm; padding-left:10px; padding-right:10px; } #rightPanel { float:right; width:30%; padding-right: 10px; padding-left: 10px; padding-bottom: 50px; margin-right:10px; position: relative; top:4em; left:10px; bottom:50px; } #headlines{ position:relative; border-top: 1px solid #cccccc; border-left: 1px solid #cccccc; border-bottom: 1px solid #cccccc; border-right: 1px solid #cccccc; padding-right: 10px; padding-top:100px; padding-bottom:500px; } #refer{ width:97%; position:relative; float:justify; border:2px soldid #999999; background-color:#cccccc; text-align:justify; } #content{ float: justify; margin-left:10%; width: 85%; text-align:justify; } #verbatim{ width: 65%; border:2px solid #cccccc; background-color:#ccccff; } /***********************************************/ /* Components */ /***********************************************/ #siteName{ margin: 0; padding: 0 0 0 10px; } /************* #globalNav styles **************/ #globalNav{ padding: 0px 0px 5px 10px; border-bottom: 1px solid #CCC; color: black; } #globalNav img{ display: block; } #globalNav a { font-size: 120%; padding: 0 4px 0 0; } /*************** #pageName styles **************/ #pageName{ margin: 0px; padding: 0px 0px 0px 10px; } /************** .feature styles ***************/ .feature{ padding: 0px 0px 10px 10px; font-size: 100%; } .feature h3{ padding: 30px 0px 5px 0px; text-align: center; } .feature img{ float: left; padding: 10px 10px 0px 0px; } /************** .story styles *****************/ .story{ padding: 10px 0px 0px 10px; font-size: 100%; } .story p{ padding: 0px 0px 10px 0px; } /************* #siteInfo styles ***************/ #siteInfo{ clear: both; border: 1px solid #cccccc; font-size: 100%; color: #cccccc; padding: 10px 10px 10px 10px; } #siteInfo img{ padding: 4px 4px 4px 10px; vertical-align: middle; } /* ##### Side Bar ##### */ /* This part adapted from Tierra Verde Dos by haran from OSWD.org */ #side-bar { font-size: 95%; text-align: left; /* width: 11em; */ /* float: left; */ clear: left; } #side-bar ul { list-style-type: none; list-style-position: outside; margin: 0; padding: 0; } #side-bar li { margin-left: 1em; padding: 1ex 1em 1ex 0.5ex; border-bottom: 1px solid black; } #side-bar li.main { margin-left: 0; } #side-bar a { color: rgb(0,0,153); background-color: transparent; text-decoration: none; } #side-bar a:hover { background-color: transparent; text-decoration: underline; } /*********** #sectionLinks styles ***********/ #sectionLinks{ position: relative; margin: 0px; padding: 0px; border-bottom: 1px solid #cccccc; font-size: 100%; } #sectionLinks h4{ padding: 10px 0px 2px 10px; } #sectionLinks a { display: block; border-top: 1px solid #cccccc; padding: 2px 0px 2px 10px; } #sectionLinks a:hover{ background-color: #dddddd; } /************** #headlines styles **************/ #headlines{ margin: 0px; padding: 10px 0px 20px 10px; font-size: 80%; } #headlines p{ padding: 5px 0px 5px 0px; } Bonmin-releases-1.8.9/Bonmin/doc/bonmin.sty000066400000000000000000000134551436575401300206060ustar00rootroot00000000000000\newcommand{\stableVersion}{1.8} %Some frequently used html addresses %Documentation Pages \newcommand{\BonPrefix}{} \newcommand{\BibPage}{\BonPrefix bib.html} \newcommand{\OptSetPage}{\BonPrefix options_set.html} \newcommand{\OptListPage}{\BonPrefix options_list.html} % references \newcommand{\BetalLink}{http://domino.research.ibm.com/library/cyberdig.nsf/1e4115aea78b6e7c85256b360066f0d4/fdb4630e33bd2876852570b20062af37?OpenDocument} \newcommand{\FilterLink}{http://www.mcs.anl.gov/~leyffer/solvers.html} \newcommand{\DGLink}{\BibPage \#DG} \newcommand{\GuptaLink}{\BibPage \#Gupta80Nonlinear} \newcommand{\FLLink}{http://dx.doi.org/10.1007/BF01581153} \newcommand{\QGLink}{http://dx.doi.org/10.1016/0098-1354(92)80028-8} \newcommand{\AMPL}{\BibPage \#Fourrer2003} \newcommand{\FPLink}{http://dx.doi.org/10.1007/s10107-008-0212-2} \newcommand{\AbhishekLink}{http://wiki.mcs.anl.gov/leyffer/index.php/Sven\_Leyffer's\_Publications} \newcommand{\HotMINLPLink}{http://hal.archives-ouvertes.fr/hal-00423416/en/} %Some third party softwares \newcommand{\Cplex}{\href{http://www.cplex.com}{\tt Cplex}} \newcommand{\LapackAddr}{http://www.netlib.org/lapack/} \newcommand{\BlasAddr}{http://www.netlib.org/blas/} \newcommand{\AslAddr}{http://www.cse.clrc.ac.uk/nag/hsl/contents.shtml} %for coin projects \newcommand{\linkCoin}{https://projects.coin-or.org/} %Some frequently used name with strange typesetting \newcommand{\Bonmin}{{\tt BONMIN}} \newcommand{\Ipopt}{\href{\linkCoin Ipopt}{\tt Ipopt}} \newcommand{\CoinUtils}{\href{\linkCoin CoinUtils}{\tt CoinUtils}} \newcommand{\BuildTools}{\href{\linkCoin BuildTools}{\tt BuildTools}} \newcommand{\Cbc}{\href{\linkCoin Cbc}{\tt Cbc}} \newcommand{\Cgl}{\href{\linkCoin Cgl}{\tt Cgl}} \newcommand{\Clp}{\href{\linkCoin Clp}{\tt Clp}} \newcommand{\Osi}{\href{\linkCoin Osi}{\tt Osi}} \newcommand{\COINOR}{\href{http://www.coin-or.org}{COIN-OR}} \newcommand{\IpoptDoc}[1]{http://www.coin-or.org/Ipopt/documentation/node#1.html} \newcommand{\eacute}{\latexhtml{\'e}{\HCode{é}}} \newcommand{\auml}{\latexhtml{\"a}{\HCode{ä}}} \newcommand{\mycite}[2]{\latexhtml{ \cite{#1}} { \href{bib.html\##1}{[#2]} } } \newcommand{\footlink}[2]{\href{#1}{#2}\latex{\footnote{\url{#1}}}} \def\htmlanchor#1{\latexhtml{}{\HCode{}}} \newcommand{\doilink}[1]{\href{http://dx.doi.org/#1}{doi:\detokenize{#1}}} %Put into a colored background for verbatim \newenvironment{colorverb}{\HCode{
    }}{\HCode{
    }} \newcommand{\PageTitle}[2]{ \latexhtml{ \section{#1} \label{#2} } { \HCode{

    }#1\HCode{

    } } } \newcommand{\myHTMLsections}[3]{ \latexhtml{ #3{#1} \label{#2} } { \HCode{

    }#1\HCode{

    } } } \newcommand{\subsectionH}[2]{ \myHTMLsections{#1}{#2}{\subsection}} \newcommand{\subsubsectionH}[2]{ \myHTMLsections{#1}{#2}{\subsubsection}} \newcommand{\subsectionHs}[2]{ \myHTMLsections{#1}{#2}{\subsection*}} \newcommand{\citeH}[3]{\latexhtml{ \cite{#1} }{ \href{#2}{[#3]} } } %Header of the page \newcommand{\PageName}[1]{\latexhtml{}{ \HCode{

    } #1 \HCode{

    } }} \newcommand{\PageSection}[2]{\latexhtml{}{\HCode{} #1 \HCode{ /}}} \newcommand{\EndPageSummary}{ \latexhtml{}{\HCode{
    } } } %Panels of links \newcommand{\NavigationPanels}{ \HCode{ } \HCode{
    } \HCode{} \HCode{
    } \HCode{ } \HCode{
    } } \newenvironment{PageSummary}{\NavigationPanels}{\EndPageSummary } %\newenvironment{PageSummary}{}{} \newcounter{refnum} \newenvironment{quickref} { \html{ \setcounter{refnum}{0} \HCode{

    References

    }}} { \html{\HCode{
    }}} \newcommand{\quickcitation}[2]{ \html{ \addtocounter{refnum}{1} \HCode{

    } \arabic{refnum} \href{#2}{#1} \HCode{

    }} } Bonmin-releases-1.8.9/Bonmin/doc/genHtml.sh000077500000000000000000000005751436575401300205170ustar00rootroot00000000000000#!/bin/bash mkdir -p html for f in $@ ; do NAME=`basename $f .tex`; rm -rf $NAME; awk -v NAME=$NAME '{sub(/FILENAME/,NAME);print}' Head.tex > tmp.tex; latex tmp.tex; latex tmp.tex; latex tmp.tex; tex4ht tmp.tex; awk '{sub(/tmp.css/,"bonmin.css") ; sub(/>tmpBONMIN Users Manual<") ; print}' tmp.html | sed -e's/##/#/g' > toto.html; mv toto.html html/$NAME.html #rm tmp.* done Bonmin-releases-1.8.9/Bonmin/doc/htrick.sty000066400000000000000000000001611436575401300205760ustar00rootroot00000000000000 \newcommand{\latexhtml}[2]{#2} \newcommand{\html}[1]{#1} \newcommand{\htmlonly}[1]{#1} \newcommand{\latex}[1]{} Bonmin-releases-1.8.9/Bonmin/doc/ltrick.sty000066400000000000000000000002101436575401300205750ustar00rootroot00000000000000\newcommand{\HCode}[1]{} \newcommand{\latexhtml}[2]{#1} \newcommand{\html}[1]{} \newcommand{\htmlonly}[1]{} \newcommand{\latex}[1]{#1} Bonmin-releases-1.8.9/Bonmin/doc/option_pages/000077500000000000000000000000001436575401300212425ustar00rootroot00000000000000Bonmin-releases-1.8.9/Bonmin/doc/option_pages/Head.tex000066400000000000000000000004011436575401300226200ustar00rootroot00000000000000\documentclass{article} \usepackage{tex4ht} \usepackage{hyperref} \usepackage{lscape} \usepackage{amsmath,amssymb} \usepackage{threeparttable} \usepackage{xtab} \usepackage{htrick} \usepackage{bonmin} \begin{document} \input{FILENAME} \end{document} Bonmin-releases-1.8.9/Bonmin/doc/option_pages/bonmin.sty000066400000000000000000000135131436575401300232700ustar00rootroot00000000000000\newcommand{\stableVersion}{1.7} %Some frequently used html addresses %Documentation Pages \newcommand{\BonPrefix}{} \newcommand{\BibPage}{\BonPrefix bib.html} \newcommand{\OptSetPage}{\BonPrefix options_set.html} \newcommand{\OptListPage}{\BonPrefix options_list.html} % references \newcommand{\BetalLink}{http://domino.research.ibm.com/library/cyberdig.nsf/1e4115aea78b6e7c85256b360066f0d4/fdb4630e33bd2876852570b20062af37?OpenDocument} \newcommand{\FilterLink}{http://www.mcs.anl.gov/~leyffer/solvers.html} \newcommand{\DGLink}{\BibPage \#DG} \newcommand{\GuptaLink}{\BibPage \#Gupta80Nonlinear} \newcommand{\FLLink}{http://dx.doi.org/10.1007/BF01581153} \newcommand{\QGLink}{http://dx.doi.org/10.1016/0098-1354(92)80028-8} \newcommand{\AMPL}{\BibPage \#Fourrer2003} \newcommand{\FPLink}{http://dx.doi.org/10.1007/s10107-008-0212-2} \newcommand{\AbhishekLink}{http://wiki.mcs.anl.gov/leyffer/index.php/Sven\_Leyffer's\_Publications} \newcommand{\HotMINLPLink}{http://hal.archives-ouvertes.fr/hal-00423416/en/} %Some third party softwares \newcommand{\Cplex}{\href{http://www.ilog.com/products/cplex/product/mip.cfm}{\tt Cplex}} \newcommand{\LapackAddr}{http://www.netlib.org/lapack/} \newcommand{\BlasAddr}{http://www.netlib.org/blas/} \newcommand{\AslAddr}{http://www.cse.clrc.ac.uk/nag/hsl/contents.shtml} %for coin projects \newcommand{\linkCoin}{https://projects.coin-or.org/} %Some frequently used name with strange typesetting \newcommand{\Bonmin}{{\tt BONMIN}} \newcommand{\Ipopt}{\href{\linkCoin Ipopt}{\tt Ipopt}} \newcommand{\CoinUtils}{\href{\linkCoin CoinUtils}{\tt CoinUtils}} \newcommand{\BuildTools}{\href{\linkCoin BuildTools}{\tt BuildTools}} \newcommand{\Cbc}{\href{\linkCoin Cbc}{\tt Cbc}} \newcommand{\Cgl}{\href{\linkCoin Cgl}{\tt Cgl}} \newcommand{\Clp}{\href{\linkCoin Clp}{\tt Clp}} \newcommand{\Osi}{\href{\linkCoin Osi}{\tt Osi}} \newcommand{\COINOR}{\href{http://www.coin-or.org}{COIN-OR}} \newcommand{\IpoptDoc}[1]{http://www.coin-or.org/Ipopt/documentation/node#1.html} \newcommand{\eacute}{\latexhtml{\'e}{\HCode{é}}} \newcommand{\auml}{\latexhtml{\"a}{\HCode{ä}}} \newcommand{\mycite}[2]{\latexhtml{ \cite{#1}} { \href{bib.html\##1}{[#2]} } } \newcommand{\footlink}[2]{\href{#1}{#2}\latex{\footnote{\url{#1}}}} \def\htmlanchor#1{\latexhtml{}{\HCode{}}} \newcommand{\doilink}[1]{\href{http://dx.doi.org/#1}{doi:\detokenize{#1}}} %Put into a colored background for verbatim \newenvironment{colorverb}{\HCode{
    }}{\HCode{
    }} \newcommand{\PageTitle}[2]{ \latexhtml{ \section{#1} \label{#2} } { \HCode{

    }#1\HCode{

    } } } \newcommand{\myHTMLsections}[3]{ \latexhtml{ #3{#1} \label{#2} } { \HCode{

    }#1\HCode{

    } } } \newcommand{\subsectionH}[2]{ \myHTMLsections{#1}{#2}{\subsection}} \newcommand{\subsubsectionH}[2]{ \myHTMLsections{#1}{#2}{\subsubsection}} \newcommand{\subsectionHs}[2]{ \myHTMLsections{#1}{#2}{\subsection*}} \newcommand{\citeH}[3]{\latexhtml{ \cite{#1} }{ \href{#2}{[#3]} } } %Header of the page \newcommand{\PageName}[1]{\latexhtml{}{ \HCode{

    } #1 \HCode{

    } }} \newcommand{\PageSection}[2]{\latexhtml{}{\HCode{} #1 \HCode{ /}}} \newcommand{\EndPageSummary}{ \latexhtml{}{\HCode{
    } } } %Panels of links \newcommand{\NavigationPanels}{ \HCode{ } \HCode{
    } \HCode{} \HCode{
    } \HCode{ } \HCode{
    } } \newenvironment{PageSummary}{\NavigationPanels}{\EndPageSummary } %\newenvironment{PageSummary}{}{} \newcounter{refnum} \newenvironment{quickref} { \html{ \setcounter{refnum}{0} \HCode{

    References

    }}} { \html{\HCode{
    }}} \newcommand{\quickcitation}[2]{ \html{ \addtocounter{refnum}{1} \HCode{

    } \arabic{refnum} \href{#2}{#1} \HCode{

    }} } Bonmin-releases-1.8.9/Bonmin/doc/option_pages/genHtml.sh000077500000000000000000000005601436575401300232000ustar00rootroot00000000000000#!/bin/bash for f in $@ ; do NAME=`basename $f .tex`; rm -rf $NAME; awk -v NAME=$NAME '{sub(/FILENAME/,NAME);print}' Head.tex > tmp.tex; latex tmp.tex; latex tmp.tex; latex tmp.tex; tex4ht tmp.tex; awk '{sub(/tmp.css/,"bonmin.css") ; sub(/>tmpBONMIN Options pages<") ; print}' tmp.html | sed -e's/##/#/g' > toto.html; mv toto.html html/$NAME.html #rm tmp.* done Bonmin-releases-1.8.9/Bonmin/doc/option_pages/genOptionsDocs.sh000077500000000000000000000004351436575401300245410ustar00rootroot00000000000000#!/bin/bash categories="bonmin filter ipopt" mkdir -p html for f in $categories ; do awk -v NAME=$f '{sub(/TEMPLATE/,NAME) ; print}' options_list_TEMPLATE.tex > options_list_$f.tex ./genHtml.sh options_list_$f.tex mv tmp.html options_list_$f.html done cp ../bonmin.css html/ Bonmin-releases-1.8.9/Bonmin/doc/option_pages/htrick.sty000066400000000000000000000001611436575401300232650ustar00rootroot00000000000000 \newcommand{\latexhtml}[2]{#2} \newcommand{\html}[1]{#1} \newcommand{\htmlonly}[1]{#1} \newcommand{\latex}[1]{} Bonmin-releases-1.8.9/Bonmin/doc/option_pages/ltrick.sty000066400000000000000000000002461436575401300232750ustar00rootroot00000000000000\newcommand{\HCode}[1]{} \newcommand{\latexhtml}[2]{#1} \newcommand{\html}[1]{} \newcommand{\htmlonly}[1]{} \newcommand{\htmlanchor}[1]{} \newcommand{\latex}[1]{#1} Bonmin-releases-1.8.9/Bonmin/doc/option_pages/options_list_TEMPLATE.tex000066400000000000000000000003061436575401300260040ustar00rootroot00000000000000 %%% Local Variables: %%% mode: latex %%% TeX-master: "BONMIN_UsersManual" %%% End: \begin{PageSummary} \PageName{List of TEMPLATE options} \end{PageSummary} \input{options_list_TEMPLATE_content} Bonmin-releases-1.8.9/Bonmin/doc/option_pages/options_list_bonmin_content.tex000077700000000000000000000000001436575401300363602../options_list_bonmin_content.texustar00rootroot00000000000000Bonmin-releases-1.8.9/Bonmin/doc/option_pages/options_list_filter_content.tex000077700000000000000000000000001436575401300363662../options_list_filter_content.texustar00rootroot00000000000000Bonmin-releases-1.8.9/Bonmin/doc/option_pages/options_list_ipopt_content.tex000077700000000000000000000000001436575401300361022../options_list_ipopt_content.texustar00rootroot00000000000000Bonmin-releases-1.8.9/Bonmin/doc/options.tex000066400000000000000000000337151436575401300210010ustar00rootroot00000000000000 %%% Local Variables: %%% mode: latex %%% TeX-master: "BONMIN_UsersManual" %%% End: \subsection{\Bonmin\ output options} \label{app:opt_loglevel} \paragraph{bb\_log\_level} specify branch-and-bound's log level. Set the level of output of the branch-and-bound: \begin{itemize} \item {\tt 0} - none, \item {\tt 1} - minimal, \item {\tt 2} - normal low, \item {\tt 3} - normal high, \end{itemize} The valid range for this integer option is $${\tt 0} \le \hbox{\tt bb\_log\_level } \le {\tt 3}$$ and its default value is {\tt 1}. \paragraph{bb\_log\_interval} Interval at which node level output is printed. Set the interval (in terms of number of nodes) at which a log on node resolutions (consisting of lower and upper bounds) is given. The valid range for this integer option is $${\tt 0} \le \hbox{\tt bb\_log\_interval } < \infty$$ and its default value is {\tt 100}. \paragraph{lp\_log\_level} specify LP log level. Set the level of output of the linear programming subsolver in {\tt B-Hyb }or {\tt B-QG}: \begin{itemize} \item {\tt 0} - none, \item {\tt 1} - minimal, \item {\tt 2} - normal low, \item {\tt 3} - normal high, \item {\tt 4} - verbose. \end{itemize} The valid range for this integer option is $${\tt 0} \le \hbox{\tt lp\_log\_level } \le {\tt 4}$$ and its default value is {\tt 0}. \paragraph{milp\_log\_level} specify MILP subsolver log level. Set the level of output of the MILP subsolver in OA : \begin{itemize} \item {\tt 0} - none, \item {\tt 1} - minimal, \item {\tt 2} - normal low, \item {\tt 3} - normal high, \end{itemize} The valid range for this integer option is $${\tt 0} \le \hbox{\tt milp\_log\_level } \le {\tt 3}$$ and its default value is {\tt 0}. \paragraph{oa\_log\_level} specify OA iterations log level. Set the level of output of OA decomposition solver : \begin{itemize} \item {\tt 0} - none, \item {\tt 1} - normal low, \item {\tt 2} - normal high. \end{itemize} The valid range for this integer option is $${\tt 0} \le \hbox{\tt oa\_log\_level } \le {\tt 2}$$ and its default value is {\tt 1}. \paragraph{oa\_log\_frequency} specify OA log frequency. The valid range for this real option is $$ 0 \le \hbox{\tt oa\_log\_frequency } \le \infty $$ and its default value is $100$. \paragraph{nlp\_log\_level} specify NLP solver interface log level (independent from ipopt print\_level). Set the level of output of the IpoptInterface : \begin{itemize} \item {\tt 0} - none, \item {\tt 1} - low and readable with warnings, \item {\tt 2} - verbose \end{itemize} The valid range for this integer option is $${\tt 0} \le {\tt nlp\_log\_level } \le {\tt 2}$$ and its default value is {\tt 1}. \paragraph{print\_user\_options} Prints the list of options set by the user. The default value for this option is ``no".\\ Possible values are: \begin{itemize} \item yes: print the list, \item no: don't. \end{itemize} \subsection{\Bonmin\ branch-and-bound options} \paragraph{algorithm} Choice of the algorithm. This will preset default values for most options of \Bonmin\ but depending on which algorithm some of these can be changed (refer to Table \ref{tab:options} to see which options are valid with which algorithm). The default value for this string option is ``{\tt B-Hyb}''. \\ Possible values: \begin{itemize} \item {\tt B-BB}: simple branch-and-bound algorithm, \item {\tt B-OA}: OA Decomposition algorithm, \item {\tt B-QG}: Quesada and Grossmann branch-and-cut algorithm, \item {\tt B-Hyb}: hybrid outer approximation based branch-and-cut. \end{itemize} \paragraph{allowable\_gap} Specify the value of absolute gap under which the algorithm stops. Stop the tree search when the gap between the objective value of the best known solution and the best lower bound on the objective of any solution is less than this. The valid range for this real option is $$-10^{20} \le \hbox{\tt allowable\_gap } \le 10^{20}$$ and its default value is $0$. \paragraph{allowable\_fraction\_gap} Specify the value of relative gap under which the algorithm stops. Stop the tree search when the gap between the objective value of the best known solution and the best bound on the objective of any solution is less than this fraction of the absolute value of the best known solution value. The valid range for this real option is $$-10^{20} \le \hbox{\tt allowable\_fraction\_gap } \le 10^{20}$$ and its default value is $0$. \paragraph{cutoff}Specify a cutoff value cutoff should be the value of a feasible solution known by the user (if any). The algorithm will only look for solutions better (meaning with a lower objective value) than cutoff. The valid range for this real option is $$-10^{100} \le \hbox{\tt cutoff } \le 10^{100}$$ and its default value is $10^{100}$. \paragraph{cutoff\_decr} Specify cutoff decrement. Specify the amount by which cutoff is decremented below a new best upper-bound (usually a small positive value but in non-convex problems it may be a negative value). The valid range for this real option is $${\tt -10^{10}} \le \hbox{\tt cutoff\_decr } \le {\tt 10^{10}}$$ and its default value is ${\tt 10^{-05}}$. \paragraph{nodeselect\_stra} Choose the node selection strategy. Choose the strategy for selecting the next node to be processed. The default value for this string option is ``{\tt best-bound}''. \\ Possible values: \begin{itemize} \item {\tt best-bound}: choose node with the least bound, \item {\tt depth-first}: Perform depth-first search, \item {\tt breadth-first}: Perform breadth-first search, \item {\tt dynamic}: {\tt Cbc} dynamic strategy (start with depth-first search and turn to best bound after 3 integer feasible solutions have been found). \end{itemize} \paragraph{number\_strong\_branch} Choose the maximum number of variables considered for strong branching. Set the number of variables on which to do strong branching. The valid range for this integer option is $${\tt 0} \le \hbox{\tt number\_strong\_branch } < \infty$$ and its default value is ${\tt 20}$. \paragraph{number\_before\_trust} Set the number of branches on a variable before its pseudo costs are to be believed in dynamic strong branching. A value of 0 disables dynamic strong branching. The valid range for this integer option is $${\tt 0} \le \hbox{\tt number\_before\_trust } < \infty$$ and its default value is ${\tt 8}$. \paragraph{time\_limit} Set the global maximum computation time (in seconds) for the algorithm. The valid range for this real option is $${\tt 0} < \hbox{\tt time\_limit } < \infty$$ and its default value is ${\tt 10^{+10}}$. \paragraph{node\_limit} Set the maximum number of nodes explored in the branch-and-bound search. The valid range for this integer option is $${\tt 0} \le \hbox{\tt node\_limit } < \infty$$ and its default value is {\tt INT\_MAX} (as defined in system {\tt limits.h}). \paragraph{integer\_tolerance} Set integer tolerance. Any number within that value of an integer is considered integer. The valid range for this real option is $${\tt 0} < \hbox{\tt integer\_tolerance } < {\tt 0.5}$$ and its default value is ${\tt 10^{-6}}$. \paragraph{warm\_start} Select the warm start method. Possible values: \begin{itemize} \item {\tt none}: no warm start, \item {\tt optimum}: warm start with direct parent optimum", \item {\tt interior\_point}: Warm start with an interior point of direct parent". \end{itemize} The default value is {\tt optimum}. \paragraph{sos\_constraints} Wether or not to activate SOS constraints branching. Possible values are \begin{itemize} \item {\tt enable}, \item {\tt disable}. \end{itemize} The default value is {\tt enable}. \subsection{\Bonmin\ options for robustness} \paragraph{max\_random\_point\_radius} Set max value r for coordinate of a random point. When picking a random point, each coordinate is selected uniformly in the interval $[\min(\max(l,-r),u-r), \max(\min(u,r),l+r)]$ where l is the lower bound for the variable and u is its upper bound. Beware that this is a very naive procedure. In particular, it may not be possible to evaluate some functions (such as log, 1/x) at such a randomly generated point (if \Bonmin\ finds that this is the case, it will give up random point generation). The valid range for this real option is $${\tt 0} < \hbox{\tt max\_random\_point\_radius } < \infty$$ and its default value is ${\tt 10^{5}}$. \paragraph{max\_consecutive\_failures} Number $n$ of consecutive unsolved problems before aborting a branch of the tree. When $n > 0$, continue exploring a branch of the tree until $n$ consecutive problems in the branch are unsolved (i.e., for which {\tt Ipopt} can not guarantee optimality within the specified tolerances). The valid range for this integer option is $${\tt 0} \le \hbox{\tt max\_consecutive\_failures } < \infty$$ and its default value is ${\tt 10}$. \paragraph{num\_iterations\_suspect} (for debugging purposes only) number of iterations to consider a problem suspect. When the number of iterations taken by the continuous nonlinear solver (for the moment this is Ipopt) to solve a node is above this number, the subproblem is considered to be suspect and is outputed to a file. If set to {\tt -1} no subproblem is ever considered suspect. The valid range for this integer option is $${\tt -1} \le \hbox{\tt num\_iterations\_suspect } < \infty$$ and its default value is $-1$. \paragraph{nlp\_failure\_behavior} Set the behavior when an NLP or a series of NLP are unsolved by {\tt Ipopt} (an NLP is unsolved if {\tt Ipopt} is not able to guarantee optimality within the specified tolerances). If set to ``{\tt fathom}'', the algorithm will fathom the node when an NLP is unsolved. The algorithm then becomes a heuristic. A warning that the solution might not be optimal is printed. The default value for this string option is ``{\tt stop}". \\ Possible values: \begin{itemize} \item {\tt stop}: Stop when failure happens. \item {\tt fathom}: Continue when failure happens. \end{itemize} \paragraph{num\_retry\_unsolved\_random\_point} Number $k$ of times that the algorithm tries to resolve an unsolved NLP with a random starting point (unsolved NLP as defined above). When an NLP is unsolved, if $k > 0$, the algorithm tries again to solve the failed NLP with $k$ new randomly chosen starting points or until the problem is solved with success. The valid range for this integer option is $${\tt 0} \le \hbox{\tt num\_retry\_unsolved\_random\_point } < \infty$$ and its default value is {\tt 0}. \subsection{\Bonmin\ options for non-convex problems} \paragraph{max\_consecutive\_infeasible} Number $k$ of consecutive infeasible subproblems before aborting a branch. Explores a branch of the tree until $k$ consecutive problems are infeasible by the NLP subsolver. The valid range for this integer option is $${\tt 0} \le \hbox{\tt max\_consecutive\_infeasible } < \infty$$ and its default value is {\tt 0}. \paragraph{num\_resolve\_at\_root} Number $k$ of trials to solve the root node with different starting points. The algorithm solves the root node with $k$ random starting points and keeps the best local optimum found. The valid range for this integer option is $${\tt 0} \le \hbox{\tt num\_resolve\_at\_root } < \infty $$ and its default value is {\tt 0}. \paragraph{num\_resolve\_at\_node} Number $k$ of tries to solve a node (other than the root) of the tree with different starting point. The algorithm solves all the nodes with $k$ different random starting points and keeps the best local optimum found. The valid range for this integer option is $${\tt 0} \le \hbox{\tt num\_resolve\_at\_node } < \infty$$ and its default value is {\tt 0}. \subsection{\Bonmin\ options : {\tt B-Hyb} specific options} \paragraph{nlp\_solve\_frequency} Specify the frequency (in terms of nodes) at which NLP relaxations are solved in {\tt B-Hyb}. A frequency of 0 amounts to never solve the NLP relaxation. The valid range for this integer option is $${\tt 0} \le \hbox{\tt nlp\_solve\_frequency } < \infty$$ and its default value is {\tt 10}. \paragraph{oa\_dec\_time\_limit} Specify the maximum number of seconds spent overall in OA decomposition iterations. The valid range for this real option is $${\tt 0} \le \hbox{\tt oa\_dec\_time\_limit } < \infty$$ and its default value is {\tt 120}. \paragraph{tiny\_element} Value for tiny element in OA cut. We will remove cleanly (by relaxing cut) an element lower than this. The valid range for this real option is $$0 \le \hbox{\tt tiny\_element } < \infty$$ and its default value is $10^{-8}$. \paragraph{very\_tiny\_element} Value for very tiny element in OA cut. Algorithm will take the risk of neglecting an element lower than this. The valid range for this real option is $$0 \le \hbox{\tt very\_tiny\_element } < \infty$$ and its default value is $10^{-17}$. \paragraph{milp\_subsolver} Choose the subsolver to solve MILPs sub-problems in OA decompositions. To use Cplex, a valid license is required and you should have compiled OsiCpx in COIN-OR (see Osi documentation). The default value for this string option is ``{\tt Cbc\_D}''. \\ Possible values: \begin{itemize} \item {\tt Cbc\_D}: COIN-OR Branch and Cut with default options, \item {\tt Cbc\_Par}: COIN-OR Branch and Cut with options passed by user, \item {\tt Cplex}: Ilog Cplex. \end{itemize} \subsubsection{Cut generators frequency} For each one of the cut generators \paragraph{Gomory\_cuts} \paragraph{probing\_cuts}(by default probing cuts are currently disabled for numerical stability reason) \paragraph{cover\_cuts} \paragraph{mir\_cuts} Sets the frequency (in terms of nodes) for generating cuts of the given type in the branch-and-cut. \begin{itemize} \item $k > 0$, cuts are generated every k nodes, \item $-99 < k < 0$, cuts are generated every -k nodes but {\tt Cbc} may decide to stop generating cuts, if not enough are generated at the root node, \item$k = -99$ cuts are generated only at the root node, \item $k = 0$ or $k = -100$ cuts are not generated. \end{itemize} The valid range for this integer option is $${\tt -100} \le k < \infty$$ and its default value is ${\tt -5}$. Bonmin-releases-1.8.9/Bonmin/doc/options_list.tex000066400000000000000000000004551436575401300220270ustar00rootroot00000000000000 %%% Local Variables: %%% mode: latex %%% TeX-master: "BONMIN_UsersManual" %%% End: \appendix \html{\setcounter{section}{1}} \latex{\section{List of \Bonmin\ options}} \label{sec:optList} \begin{PageSummary} \PageName{List of \Bonmin\ options} \end{PageSummary} \input{options_list_bonmin_content} Bonmin-releases-1.8.9/Bonmin/doc/options_list_bonmin_content.tex000066400000000000000000001434561436575401300251340ustar00rootroot00000000000000\latexhtml{}{ \HCode{
    Option type B-BB B-OA B-QG B-Hyb
    Algorithm choice
    algorithm S + + + +
    Branch-and-bound options
    allowable_fraction_gap F + + + +
    allowable_gap F + + + +
    cutoff F + + + +
    cutoff_decr F + + + +
    enable_dynamic_nlp S + - - -
    integer_tolerance F + + + +
    iteration_limit I + + + +
    nlp_failure_behavior S + - - -
    node_comparison S + + + +
    node_limit I + + + +
    num_cut_passes I - - + +
    num_cut_passes_at_root I - - + +
    number_before_trust I + + + +
    number_strong_branch I + + + +
    random_generator_seed I + + + +
    read_solution_file S + + + +
    solution_limit I + + + +
    sos_constraints S + + + +
    time_limit F + + + +
    tree_search_strategy S + + + +
    variable_selection S + - + +
    ECP cuts generation
    ecp_abs_tol F - - + +
    ecp_max_rounds I - - + +
    ecp_probability_factor F - - + +
    ecp_rel_tol F - - + +
    filmint_ecp_cuts I - - + +
    Feasibility checker using OA cuts
    feas_check_cut_types S - - + +
    feas_check_discard_policy S - - + +
    generate_benders_after_so_many_oa I - - + +
    MILP Solver
    cpx_parallel_strategy I - - - -
    milp_solver S - - - -
    milp_strategy S - - - -
    number_cpx_threads I - - - -
    MILP cutting planes in hybrid algorithm
    2mir_cuts I - + + +
    Gomory_cuts I - + + +
    clique_cuts I - + + +
    cover_cuts I - + + +
    flow_cover_cuts I - + + +
    lift_and_project_cuts I - + + +
    mir_cuts I - + + +
    reduce_and_split_cuts I - + + +
    NLP interface
    nlp_solver S + + + +
    warm_start S + - - -
    NLP solution robustness
    max_consecutive_failures I + - - -
    max_random_point_radius F + - - -
    num_iterations_suspect I + + + +
    num_retry_unsolved_random_point I + + + +
    random_point_perturbation_interval F + - - -
    random_point_type S + - - -
    resolve_on_small_infeasibility F + - - -
    NLP solves in hybrid algorithm (B-Hyb)
    nlp_solve_frequency I - - - +
    nlp_solve_max_depth I - - - +
    nlp_solves_per_depth F - - - +
    Nonconvex problems
    coeff_var_threshold F + - - -
    dynamic_def_cutoff_decr S + - - -
    first_perc_for_cutoff_decr F + - - -
    max_consecutive_infeasible I + - - -
    num_resolve_at_infeasibles I + - - -
    num_resolve_at_node I + - - -
    num_resolve_at_root I + - - -
    second_perc_for_cutoff_decr F + - - -
    Outer Approximation Decomposition (B-OA)
    oa_decomposition S - - + +
    Outer Approximation cuts generation
    add_only_violated_oa S - + + +
    oa_cuts_scope S - + + +
    oa_rhs_relax F - + + +
    tiny_element F - + + +
    very_tiny_element F - + + +
    Output and Loglevel
    bb_log_interval I + + + +
    bb_log_level I + + + +
    file_solution S + + + +
    fp_log_frequency F - - + +
    fp_log_level I - - + +
    lp_log_level I - + + +
    milp_log_level I - - - -
    nlp_log_at_root I + + + +
    nlp_log_level I + + + +
    oa_cuts_log_level I - + + +
    oa_log_frequency F + - - +
    oa_log_level I + - - +
    Primal Heuristics
    feasibility_pump_objective_norm I + + + +
    fp_pass_infeasible S + + + +
    heuristic_RINS S + + + +
    heuristic_dive_MIP_fractional S + + + +
    heuristic_dive_MIP_vectorLength S + + + +
    heuristic_dive_fractional S + + + +
    heuristic_dive_vectorLength S + + + +
    heuristic_feasibility_pump S + + + +
    pump_for_minlp S + + + +
    Strong branching setup
    candidate_sort_criterion S + + + +
    maxmin_crit_have_sol F + + + +
    maxmin_crit_no_sol F + + + +
    min_number_strong_branch I + + + +
    number_before_trust_list I + + + +
    number_look_ahead I + + + +
    number_strong_branch_root I + + + +
    setup_pseudo_frac F + + + +
    trust_strong_branching_for_pseudo_cost S + + + +
    } } \subsection{Algorithm choice} \label{sec:Algorithmchoice} \htmlanchor{sec:Algorithmchoice} \paragraph{algorithm:}\label{opt:algorithm} Choice of the algorithm. \\ This will preset some of the options of bonmin depending on the algorithm choice. The default value for this string option is "B-BB". \\ Possible values: \begin{itemize} \item B-BB: simple branch-and-bound algorithm, \item B-OA: OA Decomposition algorithm, \item B-QG: Quesada and Grossmann branch-and-cut algorithm, \item B-Hyb: hybrid outer approximation based branch-and-cut, \item B-Ecp: ECP cuts based branch-and-cut a la FilMINT. \item B-iFP: Iterated Feasibility Pump for MINLP. \end{itemize} \subsection{Branch-and-bound options} \label{sec:Branch-and-boundoptions} \htmlanchor{sec:Branch-and-boundoptions} \paragraph{allowable\_fraction\_gap:}\label{opt:allowable_fraction_gap} Specify the value of relative gap under which the algorithm stops. \\ Stop the tree search when the gap between the objective value of the best known solution and the best bound on the objective of any solution is less than this fraction of the absolute value of the best known solution value. The valid range for this real option is $-1 \cdot 10^{+20} \le {\tt allowable\_fraction\_gap } \le 1 \cdot 10^{+20}$ and its default value is $0$. \paragraph{allowable\_gap:}\label{opt:allowable_gap} Specify the value of absolute gap under which the algorithm stops. \\ Stop the tree search when the gap between the objective value of the best known solution and the best bound on the objective of any solution is less than this. The valid range for this real option is $-1 \cdot 10^{+20} \le {\tt allowable\_gap } \le 1 \cdot 10^{+20}$ and its default value is $0$. \paragraph{cutoff:}\label{opt:cutoff} Specify cutoff value. \\ cutoff should be the value of a feasible solution known by the user (if any). The algorithm will only look for solutions better than cutoff. The valid range for this real option is $-1 \cdot 10^{+100} \le {\tt cutoff } \le 1 \cdot 10^{+100}$ and its default value is $1 \cdot 10^{+100}$. \paragraph{cutoff\_decr:}\label{opt:cutoff_decr} Specify cutoff decrement. \\ Specify the amount by which cutoff is decremented below a new best upper-bound (usually a small positive value but in non-convex problems it may be a negative value). The valid range for this real option is $-1 \cdot 10^{+10} \le {\tt cutoff\_decr } \le 1 \cdot 10^{+10}$ and its default value is $1 \cdot 10^{-05}$. \paragraph{enable\_dynamic\_nlp:}\label{opt:enable_dynamic_nlp} Enable dynamic linear and quadratic rows addition in nlp \\ The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no \item yes \end{itemize} \paragraph{integer\_tolerance:}\label{opt:integer_tolerance} Set integer tolerance. \\ Any number within that value of an integer is considered integer. The valid range for this real option is $0 < {\tt integer\_tolerance } < {\tt +inf}$ and its default value is $1 \cdot 10^{-06}$. \paragraph{iteration\_limit:}\label{opt:iteration_limit} Set the cumulative maximum number of iteration in the algorithm used to process nodes continuous relaxations in the branch-and-bound. \\ value 0 deactivates option. The valid range for this integer option is $0 \le {\tt iteration\_limit } < {\tt +inf}$ and its default value is $2147483647$. \paragraph{nlp\_failure\_behavior:}\label{opt:nlp_failure_behavior} Set the behavior when an NLP or a series of NLP are unsolved by Ipopt (we call unsolved an NLP for which Ipopt is not able to guarantee optimality within the specified tolerances). \\ If set to "fathom", the algorithm will fathom the node when Ipopt fails to find a solution to the nlp at that node within the specified tolerances. The algorithm then becomes a heuristic, and the user will be warned that the solution might not be optimal. The default value for this string option is "stop". \\ Possible values: \begin{itemize} \item stop: Stop when failure happens. \item fathom: Continue when failure happens. \end{itemize} \paragraph{node\_comparison:}\label{opt:node_comparison} Choose the node selection strategy. \\ Choose the strategy for selecting the next node to be processed. The default value for this string option is "best-bound". \\ Possible values: \begin{itemize} \item best-bound: choose node with the smallest bound, \item depth-first: Perform depth first search, \item breadth-first: Perform breadth first search, \item dynamic: Cbc dynamic strategy (starts with a depth first search and turn to best bound after 3 integer feasible solutions have been found). \item best-guess: choose node with smallest guessed integer solution \end{itemize} \paragraph{node\_limit:}\label{opt:node_limit} Set the maximum number of nodes explored in the branch-and-bound search. \\ The valid range for this integer option is $0 \le {\tt node\_limit } < {\tt +inf}$ and its default value is $2147483647$. \paragraph{num\_cut\_passes:}\label{opt:num_cut_passes} Set the maximum number of cut passes at regular nodes of the branch-and-cut. \\ The valid range for this integer option is $0 \le {\tt num\_cut\_passes } < {\tt +inf}$ and its default value is $1$. \paragraph{num\_cut\_passes\_at\_root:}\label{opt:num_cut_passes_at_root} Set the maximum number of cut passes at regular nodes of the branch-and-cut. \\ The valid range for this integer option is $0 \le {\tt num\_cut\_passes\_at\_root } < {\tt +inf}$ and its default value is $20$. \paragraph{number\_before\_trust:}\label{opt:number_before_trust} Set the number of branches on a variable before its pseudo costs are to be believed in dynamic strong branching. \\ A value of 0 disables pseudo costs. The valid range for this integer option is $0 \le {\tt number\_before\_trust } < {\tt +inf}$ and its default value is $8$. \paragraph{number\_strong\_branch:}\label{opt:number_strong_branch} Choose the maximum number of variables considered for strong branching. \\ Set the number of variables on which to do strong branching. The valid range for this integer option is $0 \le {\tt number\_strong\_branch } < {\tt +inf}$ and its default value is $20$. \paragraph{random\_generator\_seed:}\label{opt:random_generator_seed} Set seed for random number generator (a value of -1 sets seeds to time since Epoch). \\ The valid range for this integer option is $-1 \le {\tt random\_generator\_seed } < {\tt +inf}$ and its default value is $0$. \paragraph{read\_solution\_file:}\label{opt:read_solution_file} Read a file with the optimal solution to test if algorithms cuts it. \\ For Debugging purposes only. The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no \item yes \end{itemize} \paragraph{solution\_limit:}\label{opt:solution_limit} Abort after that much integer feasible solution have been found by algorithm \\ value 0 deactivates option The valid range for this integer option is $0 \le {\tt solution\_limit } < {\tt +inf}$ and its default value is $2147483647$. \paragraph{sos\_constraints:}\label{opt:sos_constraints} Whether or not to activate SOS constraints. \\ (only type 1 SOS are supported at the moment) The default value for this string option is "enable". \\ Possible values: \begin{itemize} \item enable \item disable \end{itemize} \paragraph{time\_limit:}\label{opt:time_limit} Set the global maximum computation time (in secs) for the algorithm. \\ The valid range for this real option is $0 \le {\tt time\_limit } < {\tt +inf}$ and its default value is $1 \cdot 10^{+10}$. \paragraph{tree\_search\_strategy:}\label{opt:tree_search_strategy} Pick a strategy for traversing the tree \\ All strategies can be used in conjunction with any of the node comparison functions. Options which affect dfs-dive are max-backtracks-in-dive and max-dive-depth. The dfs-dive won't work in a non-convex problem where objective does not decrease down branches. The default value for this string option is "probed-dive". \\ Possible values: \begin{itemize} \item top-node: Always pick the top node as sorted by the node comparison function \item dive: Dive in the tree if possible, otherwise pick top node as sorted by the tree comparison function. \item probed-dive: Dive in the tree exploring two children before continuing the dive at each level. \item dfs-dive: Dive in the tree if possible doing a depth first search. Backtrack on leaves or when a prescribed depth is attained or when estimate of best possible integer feasible solution in subtree is worst than cutoff. Once a prescribed limit of backtracks is attained pick top node as sorted by the tree comparison function \item dfs-dive-dynamic: Same as dfs-dive but once enough solution are found switch to best-bound and if too many nodes switch to depth-first. \end{itemize} \paragraph{variable\_selection:}\label{opt:variable_selection} Chooses variable selection strategy \\ The default value for this string option is "strong-branching". \\ Possible values: \begin{itemize} \item most-fractional: Choose most fractional variable \item strong-branching: Perform strong branching \item reliability-branching: Use reliability branching \item qp-strong-branching: Perform strong branching with QP approximation \item lp-strong-branching: Perform strong branching with LP approximation \item nlp-strong-branching: Perform strong branching with NLP approximation \item osi-simple: Osi method to do simple branching \item osi-strong: Osi method to do strong branching \item random: Method to choose branching variable randomly \end{itemize} \subsection{ECP cuts generation} \label{sec:ECPcutsgeneration} \htmlanchor{sec:ECPcutsgeneration} \paragraph{ecp\_abs\_tol:}\label{opt:ecp_abs_tol} Set the absolute termination tolerance for ECP rounds. \\ The valid range for this real option is $0 \le {\tt ecp\_abs\_tol } < {\tt +inf}$ and its default value is $1 \cdot 10^{-06}$. \paragraph{ecp\_max\_rounds:}\label{opt:ecp_max_rounds} Set the maximal number of rounds of ECP cuts. \\ The valid range for this integer option is $0 \le {\tt ecp\_max\_rounds } < {\tt +inf}$ and its default value is $5$. \paragraph{ecp\_probability\_factor:}\label{opt:ecp_probability_factor} Factor appearing in formula for skipping ECP cuts. \\ Choosing -1 disables the skipping. The valid range for this real option is ${\tt -inf} < {\tt ecp\_probability\_factor } < {\tt +inf}$ and its default value is $10$. \paragraph{ecp\_rel\_tol:}\label{opt:ecp_rel_tol} Set the relative termination tolerance for ECP rounds. \\ The valid range for this real option is $0 \le {\tt ecp\_rel\_tol } < {\tt +inf}$ and its default value is $0$. \paragraph{filmint\_ecp\_cuts:}\label{opt:filmint_ecp_cuts} Specify the frequency (in terms of nodes) at which some a la filmint ecp cuts are generated. \\ A frequency of 0 amounts to to never solve the NLP relaxation. The valid range for this integer option is $0 \le {\tt filmint\_ecp\_cuts } < {\tt +inf}$ and its default value is $0$. \subsection{Feasibility checker using OA cuts} \label{sec:FeasibilitycheckerusingOAcuts} \htmlanchor{sec:FeasibilitycheckerusingOAcuts} \paragraph{feas\_check\_cut\_types:}\label{opt:feas_check_cut_types} Choose the type of cuts generated when an integer feasible solution is found \\ If it seems too much memory is used should try Benders to use less The default value for this string option is "outer-approx". \\ Possible values: \begin{itemize} \item outer-approx: Generate a set of Outer Approximations cuts. \item Benders: Generate a single Benders cut. \end{itemize} \paragraph{feas\_check\_discard\_policy:}\label{opt:feas_check_discard_policy} How cuts from feasibility checker are discarded \\ Normally to avoid cycle cuts from feasibility checker should not be discarded in the node where they are generated. However Cbc sometimes does it if no care is taken which can lead to an infinite loop in Bonmin (usually on simple problems). To avoid this one can instruct Cbc to never discard a cut but if we do that for all cuts it can lead to memory problems. The default policy here is to detect cycles and only then impose to Cbc to keep the cut. The two other alternative are to instruct Cbc to keep all cuts or to just ignore the problem and hope for the best The default value for this string option is "detect-cycles". \\ Possible values: \begin{itemize} \item detect-cycles: Detect if a cycle occurs and only in this case force not to discard. \item keep-all: Force cuts from feasibility checker not to be discarded (memory hungry but sometimes better). \item treated-as-normal: Cuts from memory checker can be discarded as any other cuts (code may cycle then) \end{itemize} \paragraph{generate\_benders\_after\_so\_many\_oa:}\label{opt:generate_benders_after_so_many_oa} Specify that after so many oa cuts have been generated Benders cuts should be generated instead. \\ It seems that sometimes generating too many oa cuts slows down the optimization compared to Benders due to the size of the LP. With this option we specify that after so many OA cuts have been generated we should switch to Benders cuts. The valid range for this integer option is $0 \le {\tt generate\_benders\_after\_so\_many\_oa } < {\tt +inf}$ and its default value is $5000$. \subsection{MILP Solver} \label{sec:MILPSolver} \htmlanchor{sec:MILPSolver} \paragraph{cpx\_parallel\_strategy:}\label{opt:cpx_parallel_strategy} Strategy of parallel search mode in CPLEX. \\ -1 = opportunistic, 0 = automatic, 1 = deterministic (refer to CPLEX documentation) The valid range for this integer option is $-1 \le {\tt cpx\_parallel\_strategy } \le 1$ and its default value is $0$. \paragraph{milp\_solver:}\label{opt:milp_solver} Choose the subsolver to solve MILP sub-problems in OA decompositions. \\ To use Cplex, a valid license is required and you should have compiled OsiCpx in COIN-OR (see Osi documentation). The default value for this string option is "Cbc\_D". \\ Possible values: \begin{itemize} \item Cbc\_D: Coin Branch and Cut with its default \item Cbc\_Par: Coin Branch and Cut with passed parameters \item Cplex: IBM Cplex \end{itemize} \paragraph{milp\_strategy:}\label{opt:milp_strategy} Choose a strategy for MILPs. \\ The default value for this string option is "solve\_to\_optimality". \\ Possible values: \begin{itemize} \item find\_good\_sol: Stop sub milps when a solution improving the incumbent is found \item solve\_to\_optimality: Solve MILPs to optimality \end{itemize} \paragraph{number\_cpx\_threads:}\label{opt:number_cpx_threads} Set number of threads to use with cplex. \\ (refer to CPLEX documentation) The valid range for this integer option is $0 \le {\tt number\_cpx\_threads } < {\tt +inf}$ and its default value is $0$. \subsection{MILP cutting planes in hybrid algorithm} \label{sec:MILPcuttingplanesinhybridalgorithm} \htmlanchor{sec:MILPcuttingplanesinhybridalgorithm} \paragraph{2mir\_cuts:}\label{opt:2mir_cuts} Frequency (in terms of nodes) for generating 2-MIR cuts in branch-and-cut \\ If $k > 0$, cuts are generated every $k$ nodes, if $-99 < k < 0$ cuts are generated every $-k$ nodes but Cbc may decide to stop generating cuts, if not enough are generated at the root node, if $k=-99$ generate cuts only at the root node, if $k=0$ or $100$ do not generate cuts. The valid range for this integer option is $-100 \le {\tt 2mir\_cuts } < {\tt +inf}$ and its default value is $0$. \paragraph{Gomory\_cuts:}\label{opt:Gomory_cuts} Frequency (in terms of nodes) for generating Gomory cuts in branch-and-cut. \\ If $k > 0$, cuts are generated every $k$ nodes, if $-99 < k < 0$ cuts are generated every $-k$ nodes but Cbc may decide to stop generating cuts, if not enough are generated at the root node, if $k=-99$ generate cuts only at the root node, if $k=0$ or $100$ do not generate cuts. The valid range for this integer option is $-100 \le {\tt Gomory\_cuts } < {\tt +inf}$ and its default value is $-5$. \paragraph{clique\_cuts:}\label{opt:clique_cuts} Frequency (in terms of nodes) for generating clique cuts in branch-and-cut \\ If $k > 0$, cuts are generated every $k$ nodes, if $-99 < k < 0$ cuts are generated every $-k$ nodes but Cbc may decide to stop generating cuts, if not enough are generated at the root node, if $k=-99$ generate cuts only at the root node, if $k=0$ or $100$ do not generate cuts. The valid range for this integer option is $-100 \le {\tt clique\_cuts } < {\tt +inf}$ and its default value is $-5$. \paragraph{cover\_cuts:}\label{opt:cover_cuts} Frequency (in terms of nodes) for generating cover cuts in branch-and-cut \\ If $k > 0$, cuts are generated every $k$ nodes, if $-99 < k < 0$ cuts are generated every $-k$ nodes but Cbc may decide to stop generating cuts, if not enough are generated at the root node, if $k=-99$ generate cuts only at the root node, if $k=0$ or $100$ do not generate cuts. The valid range for this integer option is $-100 \le {\tt cover\_cuts } < {\tt +inf}$ and its default value is $0$. \paragraph{flow\_cover\_cuts:}\label{opt:flow_cover_cuts} Frequency (in terms of nodes) for generating flow cover cuts in branch-and-cut \\ If $k > 0$, cuts are generated every $k$ nodes, if $-99 < k < 0$ cuts are generated every $-k$ nodes but Cbc may decide to stop generating cuts, if not enough are generated at the root node, if $k=-99$ generate cuts only at the root node, if $k=0$ or $100$ do not generate cuts. The valid range for this integer option is $-100 \le {\tt flow\_cover\_cuts } < {\tt +inf}$ and its default value is $-5$. \paragraph{lift\_and\_project\_cuts:}\label{opt:lift_and_project_cuts} Frequency (in terms of nodes) for generating lift-and-project cuts in branch-and-cut \\ If $k > 0$, cuts are generated every $k$ nodes, if $-99 < k < 0$ cuts are generated every $-k$ nodes but Cbc may decide to stop generating cuts, if not enough are generated at the root node, if $k=-99$ generate cuts only at the root node, if $k=0$ or $100$ do not generate cuts. The valid range for this integer option is $-100 \le {\tt lift\_and\_project\_cuts } < {\tt +inf}$ and its default value is $0$. \paragraph{mir\_cuts:}\label{opt:mir_cuts} Frequency (in terms of nodes) for generating MIR cuts in branch-and-cut \\ If $k > 0$, cuts are generated every $k$ nodes, if $-99 < k < 0$ cuts are generated every $-k$ nodes but Cbc may decide to stop generating cuts, if not enough are generated at the root node, if $k=-99$ generate cuts only at the root node, if $k=0$ or $100$ do not generate cuts. The valid range for this integer option is $-100 \le {\tt mir\_cuts } < {\tt +inf}$ and its default value is $-5$. \paragraph{reduce\_and\_split\_cuts:}\label{opt:reduce_and_split_cuts} Frequency (in terms of nodes) for generating reduce-and-split cuts in branch-and-cut \\ If $k > 0$, cuts are generated every $k$ nodes, if $-99 < k < 0$ cuts are generated every $-k$ nodes but Cbc may decide to stop generating cuts, if not enough are generated at the root node, if $k=-99$ generate cuts only at the root node, if $k=0$ or $100$ do not generate cuts. The valid range for this integer option is $-100 \le {\tt reduce\_and\_split\_cuts } < {\tt +inf}$ and its default value is $0$. \subsection{NLP interface} \label{sec:NLPinterface} \htmlanchor{sec:NLPinterface} \paragraph{nlp\_solver:}\label{opt:nlp_solver} Choice of the solver for local optima of continuous NLP's \\ Note that option will work only if the specified solver has been installed. Ipopt will usually be installed with Bonmin by default. For FilterSQP please see http://www-unix.mcs.anl.gov/~leyffer/solvers.html on how to obtain it and https://projects.coin-or.org/Bonmin/wiki/HintTricks on how to configure Bonmin to use it. The default value for this string option is "Ipopt". \\ Possible values: \begin{itemize} \item Ipopt: Interior Point OPTimizer (https://projects.coin-or.org/Ipopt) \item filterSQP: Sequential quadratic programming trust region algorithm (http://www-unix.mcs.anl.gov/~leyffer/solvers.html) \item all: run all available solvers at each node \end{itemize} \paragraph{warm\_start:}\label{opt:warm_start} Select the warm start method \\ This will affect the function getWarmStart(), and as a consequence the warm starting in the various algorithms. The default value for this string option is "none". \\ Possible values: \begin{itemize} \item none: No warm start, just start NLPs from optimal solution of the root relaxation \item fake\_basis: builds fake basis, useful for cut management in Cbc (warm start is the same as in none) \item optimum: Warm start with direct parent optimum \item interior\_point: Warm start with an interior point of direct parent \end{itemize} \subsection{NLP solution robustness} \label{sec:NLPsolutionrobustness} \htmlanchor{sec:NLPsolutionrobustness} \paragraph{max\_consecutive\_failures:}\label{opt:max_consecutive_failures} (temporarily removed) Number $n$ of consecutive unsolved problems before aborting a branch of the tree. \\ When $n > 0$, continue exploring a branch of the tree until $n$ consecutive problems in the branch are unsolved (we call unsolved a problem for which Ipopt can not guarantee optimality within the specified tolerances). The valid range for this integer option is $0 \le {\tt max\_consecutive\_failures } < {\tt +inf}$ and its default value is $10$. \paragraph{max\_random\_point\_radius:}\label{opt:max_random_point_radius} Set max value r for coordinate of a random point. \\ When picking a random point, coordinate i will be in the interval [min(max(l,-r),u-r), max(min(u,r),l+r)] (where l is the lower bound for the variable and u is its upper bound) The valid range for this real option is $0 < {\tt max\_random\_point\_radius } < {\tt +inf}$ and its default value is $100000$. \paragraph{num\_iterations\_suspect:}\label{opt:num_iterations_suspect} Number of iterations over which a node is considered "suspect" (for debugging purposes only, see detailed documentation). \\ When the number of iterations to solve a node is above this number, the subproblem at this node is considered to be suspect and it will be written into a file (set to -1 to deactivate this). The valid range for this integer option is $-1 \le {\tt num\_iterations\_suspect } < {\tt +inf}$ and its default value is $-1$. \paragraph{num\_retry\_unsolved\_random\_point:}\label{opt:num_retry_unsolved_random_point} Number $k$ of times that the algorithm will try to resolve an unsolved NLP with a random starting point (we call unsolved an NLP for which Ipopt is not able to guarantee optimality within the specified tolerances). \\ When Ipopt fails to solve a continuous NLP sub-problem, if $k > 0$, the algorithm will try again to solve the failed NLP with $k$ new randomly chosen starting points or until the problem is solved with success. The valid range for this integer option is $0 \le {\tt num\_retry\_unsolved\_random\_point } < {\tt +inf}$ and its default value is $0$. \paragraph{random\_point\_perturbation\_interval:}\label{opt:random_point_perturbation_interval} Amount by which starting point is perturbed when choosing to pick random point by perturbing starting point \\ The valid range for this real option is $0 < {\tt random\_point\_perturbation\_interval } < {\tt +inf}$ and its default value is $1$. \paragraph{random\_point\_type:}\label{opt:random_point_type} method to choose a random starting point \\ The default value for this string option is "Jon". \\ Possible values: \begin{itemize} \item Jon: Choose random point uniformly between the bounds \item Andreas: perturb the starting point of the problem within a prescribed interval \item Claudia: perturb the starting point using the perturbation radius suffix information \end{itemize} \paragraph{resolve\_on\_small\_infeasibility:}\label{opt:resolve_on_small_infeasibility} If a locally infeasible problem is infeasible by less than this, resolve it with initial starting point. \\ It is set to 0 by default with Ipopt. When using FilterSQP, Bonmin sets it to a small value. The valid range for this real option is $0 \le {\tt resolve\_on\_small\_infeasibility } < {\tt +inf}$ and its default value is $0$. \subsection{NLP solves in hybrid algorithm (B-Hyb)} \label{sec:NLPsolvesinhybridalgorithm(B-Hyb)} \htmlanchor{sec:NLPsolvesinhybridalgorithm(B-Hyb)} \paragraph{nlp\_solve\_frequency:}\label{opt:nlp_solve_frequency} Specify the frequency (in terms of nodes) at which NLP relaxations are solved in B-Hyb. \\ A frequency of 0 amounts to to never solve the NLP relaxation. The valid range for this integer option is $0 \le {\tt nlp\_solve\_frequency } < {\tt +inf}$ and its default value is $10$. \paragraph{nlp\_solve\_max\_depth:}\label{opt:nlp_solve_max_depth} Set maximum depth in the tree at which NLP relaxations are solved in B-Hyb. \\ A depth of 0 amounts to to never solve the NLP relaxation. The valid range for this integer option is $0 \le {\tt nlp\_solve\_max\_depth } < {\tt +inf}$ and its default value is $10$. \paragraph{nlp\_solves\_per\_depth:}\label{opt:nlp_solves_per_depth} Set average number of nodes in the tree at which NLP relaxations are solved in B-Hyb for each depth. \\ The valid range for this real option is $0 \le {\tt nlp\_solves\_per\_depth } < {\tt +inf}$ and its default value is $1 \cdot 10^{+100}$. \subsection{Nonconvex problems} \label{sec:Nonconvexproblems} \htmlanchor{sec:Nonconvexproblems} \paragraph{coeff\_var\_threshold:}\label{opt:coeff_var_threshold} Coefficient of variation threshold (for dynamic definition of cutoff\_decr). \\ The valid range for this real option is $0 \le {\tt coeff\_var\_threshold } < {\tt +inf}$ and its default value is $0.1$. \paragraph{dynamic\_def\_cutoff\_decr:}\label{opt:dynamic_def_cutoff_decr} Do you want to define the parameter cutoff\_decr dynamically? \\ The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no \item yes \end{itemize} \paragraph{first\_perc\_for\_cutoff\_decr:}\label{opt:first_perc_for_cutoff_decr} The percentage used when, the coeff of variance is smaller than the threshold, to compute the cutoff\_decr dynamically. \\ The valid range for this real option is ${\tt -inf} < {\tt first\_perc\_for\_cutoff\_decr } < {\tt +inf}$ and its default value is $-0.02$. \paragraph{max\_consecutive\_infeasible:}\label{opt:max_consecutive_infeasible} Number of consecutive infeasible subproblems before aborting a branch. \\ Will continue exploring a branch of the tree until "max\_consecutive\_infeasible"consecutive problems are locally infeasible by the NLP sub-solver. The valid range for this integer option is $0 \le {\tt max\_consecutive\_infeasible } < {\tt +inf}$ and its default value is $0$. \paragraph{num\_resolve\_at\_infeasibles:}\label{opt:num_resolve_at_infeasibles} Number $k$ of tries to resolve an infeasible node (other than the root) of the tree with different starting point. \\ The algorithm will solve all the infeasible nodes with $k$ different random starting points and will keep the best local optimum found. The valid range for this integer option is $0 \le {\tt num\_resolve\_at\_infeasibles } < {\tt +inf}$ and its default value is $0$. \paragraph{num\_resolve\_at\_node:}\label{opt:num_resolve_at_node} Number $k$ of tries to resolve a node (other than the root) of the tree with different starting point. \\ The algorithm will solve all the nodes with $k$ different random starting points and will keep the best local optimum found. The valid range for this integer option is $0 \le {\tt num\_resolve\_at\_node } < {\tt +inf}$ and its default value is $0$. \paragraph{num\_resolve\_at\_root:}\label{opt:num_resolve_at_root} Number $k$ of tries to resolve the root node with different starting points. \\ The algorithm will solve the root node with $k$ random starting points and will keep the best local optimum found. The valid range for this integer option is $0 \le {\tt num\_resolve\_at\_root } < {\tt +inf}$ and its default value is $0$. \paragraph{second\_perc\_for\_cutoff\_decr:}\label{opt:second_perc_for_cutoff_decr} The percentage used when, the coeff of variance is greater than the threshold, to compute the cutoff\_decr dynamically. \\ The valid range for this real option is ${\tt -inf} < {\tt second\_perc\_for\_cutoff\_decr } < {\tt +inf}$ and its default value is $-0.05$. \subsection{Outer Approximation Decomposition (B-OA)} \label{sec:OuterApproximationDecomposition(B-OA)} \htmlanchor{sec:OuterApproximationDecomposition(B-OA)} \paragraph{oa\_decomposition:}\label{opt:oa_decomposition} If yes do initial OA decomposition \\ The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no \item yes \end{itemize} \subsection{Outer Approximation cuts generation} \label{sec:OuterApproximationcutsgeneration} \htmlanchor{sec:OuterApproximationcutsgeneration} \paragraph{add\_only\_violated\_oa:}\label{opt:add_only_violated_oa} Do we add all OA cuts or only the ones violated by current point? \\ The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: Add all cuts \item yes: Add only violated cuts \end{itemize} \paragraph{oa\_cuts\_scope:}\label{opt:oa_cuts_scope} Specify if OA cuts added are to be set globally or locally valid \\ The default value for this string option is "global". \\ Possible values: \begin{itemize} \item local: Cuts are treated as locally valid \item global: Cuts are treated as globally valid \end{itemize} \paragraph{oa\_rhs\_relax:}\label{opt:oa_rhs_relax} Value by which to relax OA cut \\ RHS of OA constraints will be relaxed by this amount times the absolute value of the initial rhs if it is >= 1 (otherwise by this amount). The valid range for this real option is $-0 \le {\tt oa\_rhs\_relax } < {\tt +inf}$ and its default value is $1 \cdot 10^{-08}$. \paragraph{tiny\_element:}\label{opt:tiny_element} Value for tiny element in OA cut \\ We will remove "cleanly" (by relaxing cut) an element lower than this. The valid range for this real option is $-0 \le {\tt tiny\_element } < {\tt +inf}$ and its default value is $1 \cdot 10^{-08}$. \paragraph{very\_tiny\_element:}\label{opt:very_tiny_element} Value for very tiny element in OA cut \\ Algorithm will take the risk of neglecting an element lower than this. The valid range for this real option is $-0 \le {\tt very\_tiny\_element } < {\tt +inf}$ and its default value is $1 \cdot 10^{-17}$. \subsection{Output and Loglevel} \label{sec:OutputandLoglevel} \htmlanchor{sec:OutputandLoglevel} \paragraph{bb\_log\_interval:}\label{opt:bb_log_interval} Interval at which node level output is printed. \\ Set the interval (in terms of number of nodes) at which a log on node resolutions (consisting of lower and upper bounds) is given. The valid range for this integer option is $0 \le {\tt bb\_log\_interval } < {\tt +inf}$ and its default value is $100$. \paragraph{bb\_log\_level:}\label{opt:bb_log_level} specify main branch-and-bound log level. \\ Set the level of output of the branch-and-bound : 0 - none, 1 - minimal, 2 - normal low, 3 - normal high The valid range for this integer option is $0 \le {\tt bb\_log\_level } \le 5$ and its default value is $1$. \paragraph{file\_solution:}\label{opt:file_solution} Write a file bonmin.sol with the solution \\ The default value for this string option is "no". \\ Possible values: \begin{itemize} \item yes \item no \end{itemize} \paragraph{fp\_log\_frequency:}\label{opt:fp_log_frequency} display an update on lower and upper bounds in FP every n seconds \\ The valid range for this real option is $0 < {\tt fp\_log\_frequency } < {\tt +inf}$ and its default value is $100$. \paragraph{fp\_log\_level:}\label{opt:fp_log_level} specify FP iterations log level. \\ Set the level of output of OA decomposition solver : 0 - none, 1 - normal, 2 - verbose The valid range for this integer option is $0 \le {\tt fp\_log\_level } \le 2$ and its default value is $1$. \paragraph{lp\_log\_level:}\label{opt:lp_log_level} specify LP log level. \\ Set the level of output of the linear programming sub-solver in B-Hyb or B-QG : 0 - none, 1 - minimal, 2 - normal low, 3 - normal high, 4 - verbose The valid range for this integer option is $0 \le {\tt lp\_log\_level } \le 4$ and its default value is $0$. \paragraph{milp\_log\_level:}\label{opt:milp_log_level} specify MILP solver log level. \\ Set the level of output of the MILP subsolver in OA : 0 - none, 1 - minimal, 2 - normal low, 3 - normal high The valid range for this integer option is $0 \le {\tt milp\_log\_level } \le 4$ and its default value is $0$. \paragraph{nlp\_log\_at\_root:}\label{opt:nlp_log_at_root} specify a different log level for root relaxation. \\ The valid range for this integer option is $0 \le {\tt nlp\_log\_at\_root } \le 12$ and its default value is $0$. \paragraph{nlp\_log\_level:}\label{opt:nlp_log_level} specify NLP solver interface log level (independent from ipopt print\_level). \\ Set the level of output of the OsiTMINLPInterface : 0 - none, 1 - normal, 2 - verbose The valid range for this integer option is $0 \le {\tt nlp\_log\_level } \le 2$ and its default value is $1$. \paragraph{oa\_cuts\_log\_level:}\label{opt:oa_cuts_log_level} level of log when generating OA cuts. \\ 0: outputs nothing, 1: when a cut is generated, its violation and index of row from which it originates, 2: always output violation of the cut. 3: output generated cuts incidence vectors. The valid range for this integer option is $0 \le {\tt oa\_cuts\_log\_level } < {\tt +inf}$ and its default value is $0$. \paragraph{oa\_log\_frequency:}\label{opt:oa_log_frequency} display an update on lower and upper bounds in OA every n seconds \\ The valid range for this real option is $0 < {\tt oa\_log\_frequency } < {\tt +inf}$ and its default value is $100$. \paragraph{oa\_log\_level:}\label{opt:oa_log_level} specify OA iterations log level. \\ Set the level of output of OA decomposition solver : 0 - none, 1 - normal, 2 - verbose The valid range for this integer option is $0 \le {\tt oa\_log\_level } \le 2$ and its default value is $1$. \subsection{Primal Heuristics} \label{sec:PrimalHeuristics} \htmlanchor{sec:PrimalHeuristics} \paragraph{feasibility\_pump\_objective\_norm:}\label{opt:feasibility_pump_objective_norm} Norm of feasibility pump objective function \\ The valid range for this integer option is $1 \le {\tt feasibility\_pump\_objective\_norm } \le 2$ and its default value is $1$. \paragraph{fp\_pass\_infeasible:}\label{opt:fp_pass_infeasible} Say whether feasibility pump should claim to converge or not \\ The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: When master MILP is infeasible just bail out (don't stop all algorithm). This is the option for using in B-Hyb. \item yes: Claim convergence, numerically dangerous. \end{itemize} \paragraph{heuristic\_RINS:}\label{opt:heuristic_RINS} if yes runs the RINS heuristic \\ The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no \item yes \end{itemize} \paragraph{heuristic\_dive\_MIP\_fractional:}\label{opt:heuristic_dive_MIP_fractional} if yes runs the Dive MIP Fractional heuristic \\ The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no \item yes \end{itemize} \paragraph{heuristic\_dive\_MIP\_vectorLength:}\label{opt:heuristic_dive_MIP_vectorLength} if yes runs the Dive MIP VectorLength heuristic \\ The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no \item yes \end{itemize} \paragraph{heuristic\_dive\_fractional:}\label{opt:heuristic_dive_fractional} if yes runs the Dive Fractional heuristic \\ The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no \item yes \end{itemize} \paragraph{heuristic\_dive\_vectorLength:}\label{opt:heuristic_dive_vectorLength} if yes runs the Dive VectorLength heuristic \\ The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no \item yes \end{itemize} \paragraph{heuristic\_feasibility\_pump:}\label{opt:heuristic_feasibility_pump} whether the heuristic feasibility pump should be used \\ The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no \item yes \end{itemize} \paragraph{pump\_for\_minlp:}\label{opt:pump_for_minlp} whether to run the feasibility pump heuristic for MINLP \\ The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no \item yes \end{itemize} \subsection{Strong branching setup} \label{sec:Strongbranchingsetup} \htmlanchor{sec:Strongbranchingsetup} \paragraph{candidate\_sort\_criterion:}\label{opt:candidate_sort_criterion} Choice of the criterion to choose candidates in strong-branching \\ The default value for this string option is "best-ps-cost". \\ Possible values: \begin{itemize} \item best-ps-cost: Sort by decreasing pseudo-cost \item worst-ps-cost: Sort by increasing pseudo-cost \item most-fractional: Sort by decreasing integer infeasibility \item least-fractional: Sort by increasing integer infeasibility \end{itemize} \paragraph{maxmin\_crit\_have\_sol:}\label{opt:maxmin_crit_have_sol} Weight towards minimum in of lower and upper branching estimates when a solution has been found. \\ The valid range for this real option is $0 \le {\tt maxmin\_crit\_have\_sol } \le 1$ and its default value is $0.1$. \paragraph{maxmin\_crit\_no\_sol:}\label{opt:maxmin_crit_no_sol} Weight towards minimum in of lower and upper branching estimates when no solution has been found yet. \\ The valid range for this real option is $0 \le {\tt maxmin\_crit\_no\_sol } \le 1$ and its default value is $0.7$. \paragraph{min\_number\_strong\_branch:}\label{opt:min_number_strong_branch} Sets minimum number of variables for strong branching (overriding trust) \\ The valid range for this integer option is $0 \le {\tt min\_number\_strong\_branch } < {\tt +inf}$ and its default value is $0$. \paragraph{number\_before\_trust\_list:}\label{opt:number_before_trust_list} Set the number of branches on a variable before its pseudo costs are to be believed during setup of strong branching candidate list. \\ The default value is that of "number\_before\_trust" The valid range for this integer option is $-1 \le {\tt number\_before\_trust\_list } < {\tt +inf}$ and its default value is $0$. \paragraph{number\_look\_ahead:}\label{opt:number_look_ahead} Sets limit of look-ahead strong-branching trials \\ The valid range for this integer option is $0 \le {\tt number\_look\_ahead } < {\tt +inf}$ and its default value is $0$. \paragraph{number\_strong\_branch\_root:}\label{opt:number_strong_branch_root} Maximum number of variables considered for strong branching in root node. \\ The valid range for this integer option is $0 \le {\tt number\_strong\_branch\_root } < {\tt +inf}$ and its default value is $2147483647$. \paragraph{setup\_pseudo\_frac:}\label{opt:setup_pseudo_frac} Proportion of strong branching list that has to be taken from most-integer-infeasible list. \\ The valid range for this real option is $0 \le {\tt setup\_pseudo\_frac } \le 1$ and its default value is $0.5$. \paragraph{trust\_strong\_branching\_for\_pseudo\_cost:}\label{opt:trust_strong_branching_for_pseudo_cost} Whether or not to trust strong branching results for updating pseudo costs. \\ The default value for this string option is "yes". \\ Possible values: \begin{itemize} \item no \item yes \end{itemize} Bonmin-releases-1.8.9/Bonmin/doc/options_list_filter_content.tex000066400000000000000000000073261436575401300251320ustar00rootroot00000000000000\latexhtml{}{ \HCode{
    Option type B-BB B-OA B-QG B-Hyb
    FilterSQP options
    eps F + + + +
    infty F + + + +
    iprint I + + + +
    kmax I + + + +
    maxf I + + + +
    maxiter I + + + +
    mlp I + + + +
    mxlws I + + + +
    mxws I + + + +
    rho_init F + + + +
    tt F + + + +
    ubd F + + + +
    } } \subsection{FilterSQP options} \label{sec:FilterSQPoptions} \htmlanchor{sec:FilterSQPoptions} \paragraph{eps:}\label{opt:eps} Tolerance for SQP solver \\ The valid range for this real option is $0 < {\tt eps } < {\tt +inf}$ and its default value is $1 \cdot 10^{-08}$. \paragraph{infty:}\label{opt:infty} A large number \\ The valid range for this real option is $0 < {\tt infty } < {\tt +inf}$ and its default value is $1 \cdot 10^{+20}$. \paragraph{iprint:}\label{opt:iprint} Print level (0=silent, 3=verbose) \\ The valid range for this integer option is $0 \le {\tt iprint } \le 6$ and its default value is $0$. \paragraph{kmax:}\label{opt:kmax} Dimension of null-space \\ The valid range for this integer option is $-1 \le {\tt kmax } < {\tt +inf}$ and its default value is $-1$. \paragraph{maxf:}\label{opt:maxf} Maximum filter length \\ The valid range for this integer option is $0 \le {\tt maxf } < {\tt +inf}$ and its default value is $100$. \paragraph{maxiter:}\label{opt:maxiter} Maximum number of iterations \\ The valid range for this integer option is $0 \le {\tt maxiter } < {\tt +inf}$ and its default value is $1000$. \paragraph{mlp:}\label{opt:mlp} Maximum level for degeneracy (bqpd) \\ The valid range for this integer option is $0 \le {\tt mlp } < {\tt +inf}$ and its default value is $1000$. \paragraph{mxlws:}\label{opt:mxlws} FINTEGER workspace increment \\ The valid range for this integer option is $0 \le {\tt mxlws } < {\tt +inf}$ and its default value is $500000$. \paragraph{mxws:}\label{opt:mxws} REAL workspace increment \\ The valid range for this integer option is $0 \le {\tt mxws } < {\tt +inf}$ and its default value is $2000000$. \paragraph{rho\_init:}\label{opt:rho_init} Initial trust region size \\ The valid range for this real option is $0 < {\tt rho\_init } < {\tt +inf}$ and its default value is $10$. \paragraph{tt:}\label{opt:tt} Parameter for upper bound on filter \\ The valid range for this real option is $0 < {\tt tt } < {\tt +inf}$ and its default value is $1.25$. \paragraph{ubd:}\label{opt:ubd} Parameter for upper bound on filter \\ The valid range for this real option is $0 < {\tt ubd } < {\tt +inf}$ and its default value is $100$. Bonmin-releases-1.8.9/Bonmin/doc/options_list_ipopt_content.tex000066400000000000000000004652131436575401300250030ustar00rootroot00000000000000\latexhtml{}{ \HCode{
    Option type B-BB B-OA B-QG B-Hyb
    sb S + + + +
    Barrier Parameter Update
    adaptive_mu_globalization S + + + +
    adaptive_mu_kkt_norm_type S + + + +
    adaptive_mu_kkterror_red_fact F + + + +
    adaptive_mu_kkterror_red_iters I + + + +
    adaptive_mu_monotone_init_factor F + + + +
    adaptive_mu_restore_previous_iterate S + + + +
    barrier_tol_factor F + + + +
    filter_margin_fact F + + + +
    filter_max_margin F + + + +
    fixed_mu_oracle S + + + +
    mu_allow_fast_monotone_decrease S + + + +
    mu_init F + + + +
    mu_linear_decrease_factor F + + + +
    mu_max F + + + +
    mu_max_fact F + + + +
    mu_min F + + + +
    mu_oracle S + + + +
    mu_strategy S + + + +
    mu_superlinear_decrease_power F + + + +
    quality_function_balancing_term S + + + +
    quality_function_centrality S + + + +
    quality_function_max_section_steps I + + + +
    quality_function_norm_type S + + + +
    quality_function_section_qf_tol F + + + +
    quality_function_section_sigma_tol F + + + +
    sigma_max F + + + +
    sigma_min F + + + +
    tau_min F + + + +
    Convergence
    acceptable_compl_inf_tol F + + + +
    acceptable_constr_viol_tol F + + + +
    acceptable_dual_inf_tol F + + + +
    acceptable_iter I + + + +
    acceptable_obj_change_tol F + + + +
    acceptable_tol F + + + +
    compl_inf_tol F + + + +
    constr_viol_tol F + + + +
    diverging_iterates_tol F + + + +
    dual_inf_tol F + + + +
    max_cpu_time F + + + +
    max_iter I + + + +
    mu_target F + + + +
    s_max F + + + +
    tol F + + + +
    Derivative Checker
    derivative_test S + + + +
    derivative_test_first_index I + + + +
    derivative_test_perturbation F + + + +
    derivative_test_print_all S + + + +
    derivative_test_tol F + + + +
    findiff_perturbation F + + + +
    jacobian_approximation S + + + +
    point_perturbation_radius F + + + +
    Hessian Approximation
    hessian_approximation S + + + +
    hessian_approximation_space S + + + +
    limited_memory_aug_solver S + + + +
    limited_memory_init_val F + + + +
    limited_memory_init_val_max F + + + +
    limited_memory_init_val_min F + + + +
    limited_memory_initialization S + + + +
    limited_memory_max_history I + + + +
    limited_memory_max_skipping I + + + +
    limited_memory_special_for_resto S + + + +
    limited_memory_update_type S + + + +
    Initialization
    bound_frac F + + + +
    bound_mult_init_method S + + + +
    bound_mult_init_val F + + + +
    bound_push F + + + +
    constr_mult_init_max F + + + +
    least_square_init_duals S + + + +
    least_square_init_primal S + + + +
    slack_bound_frac F + + + +
    slack_bound_push F + + + +
    Line Search
    accept_after_max_steps I + + + +
    accept_every_trial_step S + + + +
    alpha_for_y S + + + +
    alpha_for_y_tol F + + + +
    alpha_min_frac F + + + +
    alpha_red_factor F + + + +
    constraint_violation_norm_type S + + + +
    corrector_compl_avrg_red_fact F + + + +
    corrector_type S + + + +
    delta F + + + +
    eta_phi F + + + +
    filter_reset_trigger I + + + +
    gamma_phi F + + + +
    gamma_theta F + + + +
    kappa_sigma F + + + +
    kappa_soc F + + + +
    line_search_method S + + + +
    max_filter_resets I + + + +
    max_soc I + + + +
    nu_inc F + + + +
    nu_init F + + + +
    obj_max_inc F + + + +
    recalc_y S + + + +
    recalc_y_feas_tol F + + + +
    rho F + + + +
    s_phi F + + + +
    s_theta F + + + +
    skip_corr_if_neg_curv S + + + +
    skip_corr_in_monotone_mode S + + + +
    slack_move F + + + +
    theta_max_fact F + + + +
    theta_min_fact F + + + +
    tiny_step_tol F + + + +
    tiny_step_y_tol F + + + +
    watchdog_shortened_iter_trigger I + + + +
    watchdog_trial_iter_max I + + + +
    Linear Solver
    linear_scaling_on_demand S + + + +
    linear_solver S + + + +
    linear_system_scaling S + + + +
    MA27 Linear Solver
    ma27_ignore_singularity S + + + +
    ma27_la_init_factor F + + + +
    ma27_liw_init_factor F + + + +
    ma27_meminc_factor F + + + +
    ma27_pivtol F + + + +
    ma27_pivtolmax F + + + +
    ma27_skip_inertia_check S + + + +
    MA28 Linear Solver
    ma28_pivtol F + + + +
    MA57 Linear Solver
    ma57_automatic_scaling S + + + +
    ma57_block_size I + + + +
    ma57_node_amalgamation I + + + +
    ma57_pivot_order I + + + +
    ma57_pivtol F + + + +
    ma57_pivtolmax F + + + +
    ma57_pre_alloc F + + + +
    ma57_small_pivot_flag I + + + +
    MA77 Linear Solver
    ma77_buffer_lpage I + + + +
    ma77_buffer_npage I + + + +
    ma77_file_size I + + + +
    ma77_maxstore I + + + +
    ma77_nemin I + + + +
    ma77_order S + + + +
    ma77_print_level I + + + +
    ma77_small F + + + +
    ma77_static F + + + +
    ma77_u F + + + +
    ma77_umax F + + + +
    MA86 Linear Solver
    ma86_nemin I + + + +
    ma86_order S + + + +
    ma86_print_level I + + + +
    ma86_scaling S + + + +
    ma86_small F + + + +
    ma86_static F + + + +
    ma86_u F + + + +
    ma86_umax F + + + +
    MA97 Linear Solver
    ma97_nemin I + + + +
    ma97_order S + + + +
    ma97_print_level I + + + +
    ma97_scaling S + + + +
    ma97_scaling1 S + + + +
    ma97_scaling2 S + + + +
    ma97_scaling3 S + + + +
    ma97_small F + + + +
    ma97_solve_blas3 S + + + +
    ma97_switch1 S + + + +
    ma97_switch2 S + + + +
    ma97_switch3 S + + + +
    ma97_u F + + + +
    ma97_umax F + + + +
    Mumps Linear Solver
    mumps_dep_tol F + + + +
    mumps_mem_percent I + + + +
    mumps_permuting_scaling I + + + +
    mumps_pivot_order I + + + +
    mumps_pivtol F + + + +
    mumps_pivtolmax F + + + +
    mumps_scaling I + + + +
    NLP
    bound_relax_factor F + + + +
    check_derivatives_for_naninf S + + + +
    dependency_detection_with_rhs S + + + +
    dependency_detector S + + + +
    fixed_variable_treatment S + + + +
    hessian_constant S + + + +
    honor_original_bounds S + + + +
    jac_c_constant S + + + +
    jac_d_constant S + + + +
    kappa_d F + + + +
    nlp_lower_bound_inf F + + + +
    nlp_upper_bound_inf F + + + +
    num_linear_variables I + + + +
    NLP Scaling
    nlp_scaling_constr_target_gradient F + + + +
    nlp_scaling_max_gradient F + + + +
    nlp_scaling_method S + + + +
    nlp_scaling_min_value F + + + +
    nlp_scaling_obj_target_gradient F + + + +
    obj_scaling_factor F + + + +
    Output
    file_print_level I + + + +
    inf_pr_output S + + + +
    option_file_name S + + + +
    output_file S + + + +
    print_frequency_iter I + + + +
    print_frequency_time F + + + +
    print_info_string S + + + +
    print_level I + + + +
    print_options_documentation S + + + +
    print_timing_statistics S + + + +
    print_user_options S + + + +
    replace_bounds S + + + +
    skip_finalize_solution_call S + + + +
    Pardiso Linear Solver
    pardiso_iter_coarse_size I + + + +
    pardiso_iter_dropping_factor F + + + +
    pardiso_iter_dropping_schur F + + + +
    pardiso_iter_inverse_norm_factor F + + + +
    pardiso_iter_max_levels I + + + +
    pardiso_iter_max_row_fill I + + + +
    pardiso_iter_relative_tol F + + + +
    pardiso_iterative S + + + +
    pardiso_matching_strategy S + + + +
    pardiso_max_droptol_corrections I + + + +
    pardiso_max_iter I + + + +
    pardiso_msglvl I + + + +
    pardiso_out_of_core_power I + + + +
    pardiso_redo_symbolic_fact_only_if_inertia_wrong S + + + +
    pardiso_repeated_perturbation_means_singular S + + + +
    pardiso_skip_inertia_check S + + + +
    Restoration Phase
    bound_mult_reset_threshold F + + + +
    constr_mult_reset_threshold F + + + +
    evaluate_orig_obj_at_resto_trial S + + + +
    expect_infeasible_problem S + + + +
    expect_infeasible_problem_ctol F + + + +
    expect_infeasible_problem_ytol F + + + +
    max_resto_iter I + + + +
    max_soft_resto_iters I + + + +
    required_infeasibility_reduction F + + + +
    resto_failure_feasibility_threshold F + + + +
    resto_penalty_parameter F + + + +
    resto_proximity_weight F + + + +
    soft_resto_pderror_reduction_factor F + + + +
    start_with_resto S + + + +
    Step Calculation
    fast_step_computation S + + + +
    first_hessian_perturbation F + + + +
    jacobian_regularization_exponent F + + + +
    jacobian_regularization_value F + + + +
    max_hessian_perturbation F + + + +
    max_refinement_steps I + + + +
    mehrotra_algorithm S + + + +
    min_hessian_perturbation F + + + +
    min_refinement_steps I + + + +
    neg_curv_test_tol F + + + +
    perturb_always_cd S + + + +
    perturb_dec_fact F + + + +
    perturb_inc_fact F + + + +
    perturb_inc_fact_first F + + + +
    residual_improvement_factor F + + + +
    residual_ratio_max F + + + +
    residual_ratio_singular F + + + +
    Uncategorized
    warm_start_target_mu F + + + +
    Undocumented
    adaptive_mu_safeguard_factor F + + + +
    chi_cup F + + + +
    chi_hat F + + + +
    chi_tilde F + + + +
    delta_y_max F + + + +
    epsilon_c F + + + +
    eta_min F + + + +
    eta_penalty F + + + +
    fast_des_fact F + + + +
    gamma_hat F + + + +
    gamma_tilde F + + + +
    kappa_x_dis F + + + +
    kappa_y_dis F + + + +
    magic_steps S + + + +
    min_alpha_primal F + + + +
    mult_diverg_feasibility_tol F + + + +
    mult_diverg_y_tol F + + + +
    never_use_fact_cgpen_direction S + + + +
    never_use_piecewise_penalty_ls S + + + +
    pen_des_fact F + + + +
    pen_init_fac F + + + +
    pen_theta_max_fact F + + + +
    penalty_init_max F + + + +
    penalty_init_min F + + + +
    penalty_max F + + + +
    penalty_update_compl_tol F + + + +
    penalty_update_infeasibility_tol F + + + +
    piecewisepenalty_gamma_infeasi F + + + +
    piecewisepenalty_gamma_obj F + + + +
    print_options_latex_mode S + + + +
    suppress_all_output S + + + +
    theta_min F + + + +
    vartheta F + + + +
    wsmp_iterative S + + + +
    Warm Start
    warm_start_bound_frac F + + + +
    warm_start_bound_push F + + + +
    warm_start_entire_iterate S + + + +
    warm_start_init_point S + + + +
    warm_start_mult_bound_push F + + + +
    warm_start_mult_init_max F + + + +
    warm_start_same_structure S + + + +
    warm_start_slack_bound_frac F + + + +
    warm_start_slack_bound_push F + + + +
    } } \paragraph{sb:}\label{opt:sb} ~ \\ The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no \item yes \end{itemize} \subsection{Barrier Parameter Update} \label{sec:BarrierParameterUpdate} \htmlanchor{sec:BarrierParameterUpdate} \paragraph{adaptive\_mu\_globalization:}\label{opt:adaptive_mu_globalization} Globalization strategy for the adaptive mu selection mode. \\ To achieve global convergence of the adaptive version, the algorithm has to switch to the monotone mode (Fiacco-McCormick approach) when convergence does not seem to appear. This option sets the criterion used to decide when to do this switch. (Only used if option "mu\_strategy" is chosen as "adaptive".) The default value for this string option is "obj-constr-filter". \\ Possible values: \begin{itemize} \item kkt-error: nonmonotone decrease of kkt-error \item obj-constr-filter: 2-dim filter for objective and constraint violation \item never-monotone-mode: disables globalization \end{itemize} \paragraph{adaptive\_mu\_kkt\_norm\_type:}\label{opt:adaptive_mu_kkt_norm_type} Norm used for the KKT error in the adaptive mu globalization strategies. \\ When computing the KKT error for the globalization strategies, the norm to be used is specified with this option. Note, this options is also used in the QualityFunctionMuOracle. The default value for this string option is "2-norm-squared". \\ Possible values: \begin{itemize} \item 1-norm: use the 1-norm (abs sum) \item 2-norm-squared: use the 2-norm squared (sum of squares) \item max-norm: use the infinity norm (max) \item 2-norm: use 2-norm \end{itemize} \paragraph{adaptive\_mu\_kkterror\_red\_fact:}\label{opt:adaptive_mu_kkterror_red_fact} Sufficient decrease factor for "kkt-error" globalization strategy. \\ For the "kkt-error" based globalization strategy, the error must decrease by this factor to be deemed sufficient decrease. The valid range for this real option is $0 < {\tt adaptive\_mu\_kkterror\_red\_fact } < 1$ and its default value is $0.9999$. \paragraph{adaptive\_mu\_kkterror\_red\_iters:}\label{opt:adaptive_mu_kkterror_red_iters} Maximum number of iterations requiring sufficient progress. \\ For the "kkt-error" based globalization strategy, sufficient progress must be made for "adaptive\_mu\_kkterror\_red\_iters" iterations. If this number of iterations is exceeded, the globalization strategy switches to the monotone mode. The valid range for this integer option is $0 \le {\tt adaptive\_mu\_kkterror\_red\_iters } < {\tt +inf}$ and its default value is $4$. \paragraph{adaptive\_mu\_monotone\_init\_factor:}\label{opt:adaptive_mu_monotone_init_factor} Determines the initial value of the barrier parameter when switching to the monotone mode. \\ When the globalization strategy for the adaptive barrier algorithm switches to the monotone mode and fixed\_mu\_oracle is chosen as "average\_compl", the barrier parameter is set to the current average complementarity times the value of "adaptive\_mu\_monotone\_init\_factor". The valid range for this real option is $0 < {\tt adaptive\_mu\_monotone\_init\_factor } < {\tt +inf}$ and its default value is $0.8$. \paragraph{adaptive\_mu\_restore\_previous\_iterate:}\label{opt:adaptive_mu_restore_previous_iterate} Indicates if the previous iterate should be restored if the monotone mode is entered. \\ When the globalization strategy for the adaptive barrier algorithm switches to the monotone mode, it can either start from the most recent iterate (no), or from the last iterate that was accepted (yes). The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: don't restore accepted iterate \item yes: restore accepted iterate \end{itemize} \paragraph{barrier\_tol\_factor:}\label{opt:barrier_tol_factor} Factor for mu in barrier stop test. \\ The convergence tolerance for each barrier problem in the monotone mode is the value of the barrier parameter times "barrier\_tol\_factor". This option is also used in the adaptive mu strategy during the monotone mode. (This is kappa\_epsilon in implementation paper). The valid range for this real option is $0 < {\tt barrier\_tol\_factor } < {\tt +inf}$ and its default value is $10$. \paragraph{filter\_margin\_fact:}\label{opt:filter_margin_fact} Factor determining width of margin for obj-constr-filter adaptive globalization strategy. \\ When using the adaptive globalization strategy, "obj-constr-filter", sufficient progress for a filter entry is defined as follows: (new obj) < (filter obj) - filter\_margin\_fact*(new constr-viol) OR (new constr-viol) < (filter constr-viol) - filter\_margin\_fact*(new constr-viol). For the description of the "kkt-error-filter" option see "filter\_max\_margin". The valid range for this real option is $0 < {\tt filter\_margin\_fact } < 1$ and its default value is $1 \cdot 10^{-05}$. \paragraph{filter\_max\_margin:}\label{opt:filter_max_margin} Maximum width of margin in obj-constr-filter adaptive globalization strategy. \\ The valid range for this real option is $0 < {\tt filter\_max\_margin } < {\tt +inf}$ and its default value is $1$. \paragraph{fixed\_mu\_oracle:}\label{opt:fixed_mu_oracle} Oracle for the barrier parameter when switching to fixed mode. \\ Determines how the first value of the barrier parameter should be computed when switching to the "monotone mode" in the adaptive strategy. (Only considered if "adaptive" is selected for option "mu\_strategy".) The default value for this string option is "average\_compl". \\ Possible values: \begin{itemize} \item probing: Mehrotra's probing heuristic \item loqo: LOQO's centrality rule \item quality-function: minimize a quality function \item average\_compl: base on current average complementarity \end{itemize} \paragraph{mu\_allow\_fast\_monotone\_decrease:}\label{opt:mu_allow_fast_monotone_decrease} Allow skipping of barrier problem if barrier test is already met. \\ If set to "no", the algorithm enforces at least one iteration per barrier problem, even if the barrier test is already met for the updated barrier parameter. The default value for this string option is "yes". \\ Possible values: \begin{itemize} \item no: Take at least one iteration per barrier problem \item yes: Allow fast decrease of mu if barrier test it met \end{itemize} \paragraph{mu\_init:}\label{opt:mu_init} Initial value for the barrier parameter. \\ This option determines the initial value for the barrier parameter (mu). It is only relevant in the monotone, Fiacco-McCormick version of the algorithm. (i.e., if "mu\_strategy" is chosen as "monotone") The valid range for this real option is $0 < {\tt mu\_init } < {\tt +inf}$ and its default value is $0.1$. \paragraph{mu\_linear\_decrease\_factor:}\label{opt:mu_linear_decrease_factor} Determines linear decrease rate of barrier parameter. \\ For the Fiacco-McCormick update procedure the new barrier parameter mu is obtained by taking the minimum of mu*"mu\_linear\_decrease\_factor" and mu\^"superlinear\_decrease\_power". (This is kappa\_mu in implementation paper.) This option is also used in the adaptive mu strategy during the monotone mode. The valid range for this real option is $0 < {\tt mu\_linear\_decrease\_factor } < 1$ and its default value is $0.2$. \paragraph{mu\_max:}\label{opt:mu_max} Maximum value for barrier parameter. \\ This option specifies an upper bound on the barrier parameter in the adaptive mu selection mode. If this option is set, it overwrites the effect of mu\_max\_fact. (Only used if option "mu\_strategy" is chosen as "adaptive".) The valid range for this real option is $0 < {\tt mu\_max } < {\tt +inf}$ and its default value is $100000$. \paragraph{mu\_max\_fact:}\label{opt:mu_max_fact} Factor for initialization of maximum value for barrier parameter. \\ This option determines the upper bound on the barrier parameter. This upper bound is computed as the average complementarity at the initial point times the value of this option. (Only used if option "mu\_strategy" is chosen as "adaptive".) The valid range for this real option is $0 < {\tt mu\_max\_fact } < {\tt +inf}$ and its default value is $1000$. \paragraph{mu\_min:}\label{opt:mu_min} Minimum value for barrier parameter. \\ This option specifies the lower bound on the barrier parameter in the adaptive mu selection mode. By default, it is set to the minimum of 1e-11 and min("tol","compl\_inf\_tol")/("barrier\_tol\_factor"+1), which should be a reasonable value. (Only used if option "mu\_strategy" is chosen as "adaptive".) The valid range for this real option is $0 < {\tt mu\_min } < {\tt +inf}$ and its default value is $1 \cdot 10^{-11}$. \paragraph{mu\_oracle:}\label{opt:mu_oracle} Oracle for a new barrier parameter in the adaptive strategy. \\ Determines how a new barrier parameter is computed in each "free-mode" iteration of the adaptive barrier parameter strategy. (Only considered if "adaptive" is selected for option "mu\_strategy"). The default value for this string option is "quality-function". \\ Possible values: \begin{itemize} \item probing: Mehrotra's probing heuristic \item loqo: LOQO's centrality rule \item quality-function: minimize a quality function \end{itemize} \paragraph{mu\_strategy:}\label{opt:mu_strategy} Update strategy for barrier parameter. \\ Determines which barrier parameter update strategy is to be used. The default value for this string option is "monotone". \\ Possible values: \begin{itemize} \item monotone: use the monotone (Fiacco-McCormick) strategy \item adaptive: use the adaptive update strategy \end{itemize} \paragraph{mu\_superlinear\_decrease\_power:}\label{opt:mu_superlinear_decrease_power} Determines superlinear decrease rate of barrier parameter. \\ For the Fiacco-McCormick update procedure the new barrier parameter mu is obtained by taking the minimum of mu*"mu\_linear\_decrease\_factor" and mu\^"superlinear\_decrease\_power". (This is theta\_mu in implementation paper.) This option is also used in the adaptive mu strategy during the monotone mode. The valid range for this real option is $1 < {\tt mu\_superlinear\_decrease\_power } < 2$ and its default value is $1.5$. \paragraph{quality\_function\_balancing\_term:}\label{opt:quality_function_balancing_term} The balancing term included in the quality function for centrality. \\ This determines whether a term is added to the quality function that penalizes situations where the complementarity is much smaller than dual and primal infeasibilities. (Only used if option "mu\_oracle" is set to "quality-function".) The default value for this string option is "none". \\ Possible values: \begin{itemize} \item none: no balancing term is added \item cubic: Max(0,Max(dual\_inf,primal\_inf)-compl)\^3 \end{itemize} \paragraph{quality\_function\_centrality:}\label{opt:quality_function_centrality} The penalty term for centrality that is included in quality function. \\ This determines whether a term is added to the quality function to penalize deviation from centrality with respect to complementarity. The complementarity measure here is the xi in the Loqo update rule. (Only used if option "mu\_oracle" is set to "quality-function".) The default value for this string option is "none". \\ Possible values: \begin{itemize} \item none: no penalty term is added \item log: complementarity * the log of the centrality measure \item reciprocal: complementarity * the reciprocal of the centrality measure \item cubed-reciprocal: complementarity * the reciprocal of the centrality measure cubed \end{itemize} \paragraph{quality\_function\_max\_section\_steps:}\label{opt:quality_function_max_section_steps} Maximum number of search steps during direct search procedure determining the optimal centering parameter. \\ The golden section search is performed for the quality function based mu oracle. (Only used if option "mu\_oracle" is set to "quality-function".) The valid range for this integer option is $0 \le {\tt quality\_function\_max\_section\_steps } < {\tt +inf}$ and its default value is $8$. \paragraph{quality\_function\_norm\_type:}\label{opt:quality_function_norm_type} Norm used for components of the quality function. \\ (Only used if option "mu\_oracle" is set to "quality-function".) The default value for this string option is "2-norm-squared". \\ Possible values: \begin{itemize} \item 1-norm: use the 1-norm (abs sum) \item 2-norm-squared: use the 2-norm squared (sum of squares) \item max-norm: use the infinity norm (max) \item 2-norm: use 2-norm \end{itemize} \paragraph{quality\_function\_section\_qf\_tol:}\label{opt:quality_function_section_qf_tol} Tolerance for the golden section search procedure determining the optimal centering parameter (in the function value space). \\ The golden section search is performed for the quality function based mu oracle. (Only used if option "mu\_oracle" is set to "quality-function".) The valid range for this real option is $0 \le {\tt quality\_function\_section\_qf\_tol } < 1$ and its default value is $0$. \paragraph{quality\_function\_section\_sigma\_tol:}\label{opt:quality_function_section_sigma_tol} Tolerance for the section search procedure determining the optimal centering parameter (in sigma space). \\ The golden section search is performed for the quality function based mu oracle. (Only used if option "mu\_oracle" is set to "quality-function".) The valid range for this real option is $0 \le {\tt quality\_function\_section\_sigma\_tol } < 1$ and its default value is $0.01$. \paragraph{sigma\_max:}\label{opt:sigma_max} Maximum value of the centering parameter. \\ This is the upper bound for the centering parameter chosen by the quality function based barrier parameter update. (Only used if option "mu\_oracle" is set to "quality-function".) The valid range for this real option is $0 < {\tt sigma\_max } < {\tt +inf}$ and its default value is $100$. \paragraph{sigma\_min:}\label{opt:sigma_min} Minimum value of the centering parameter. \\ This is the lower bound for the centering parameter chosen by the quality function based barrier parameter update. (Only used if option "mu\_oracle" is set to "quality-function".) The valid range for this real option is $0 \le {\tt sigma\_min } < {\tt +inf}$ and its default value is $1 \cdot 10^{-06}$. \paragraph{tau\_min:}\label{opt:tau_min} Lower bound on fraction-to-the-boundary parameter tau. \\ (This is tau\_min in the implementation paper.) This option is also used in the adaptive mu strategy during the monotone mode. The valid range for this real option is $0 < {\tt tau\_min } < 1$ and its default value is $0.99$. \subsection{Convergence} \label{sec:Convergence} \htmlanchor{sec:Convergence} \paragraph{acceptable\_compl\_inf\_tol:}\label{opt:acceptable_compl_inf_tol} "Acceptance" threshold for the complementarity conditions. \\ Absolute tolerance on the complementarity. "Acceptable" termination requires that the max-norm of the (unscaled) complementarity is less than this threshold; see also acceptable\_tol. The valid range for this real option is $0 < {\tt acceptable\_compl\_inf\_tol } < {\tt +inf}$ and its default value is $0.01$. \paragraph{acceptable\_constr\_viol\_tol:}\label{opt:acceptable_constr_viol_tol} "Acceptance" threshold for the constraint violation. \\ Absolute tolerance on the constraint violation. "Acceptable" termination requires that the max-norm of the (unscaled) constraint violation is less than this threshold; see also acceptable\_tol. The valid range for this real option is $0 < {\tt acceptable\_constr\_viol\_tol } < {\tt +inf}$ and its default value is $0.01$. \paragraph{acceptable\_dual\_inf\_tol:}\label{opt:acceptable_dual_inf_tol} "Acceptance" threshold for the dual infeasibility. \\ Absolute tolerance on the dual infeasibility. "Acceptable" termination requires that the (max-norm of the unscaled) dual infeasibility is less than this threshold; see also acceptable\_tol. The valid range for this real option is $0 < {\tt acceptable\_dual\_inf\_tol } < {\tt +inf}$ and its default value is $1 \cdot 10^{+10}$. \paragraph{acceptable\_iter:}\label{opt:acceptable_iter} Number of "acceptable" iterates before triggering termination. \\ If the algorithm encounters this many successive "acceptable" iterates (see "acceptable\_tol"), it terminates, assuming that the problem has been solved to best possible accuracy given round-off. If it is set to zero, this heuristic is disabled. The valid range for this integer option is $0 \le {\tt acceptable\_iter } < {\tt +inf}$ and its default value is $15$. \paragraph{acceptable\_obj\_change\_tol:}\label{opt:acceptable_obj_change_tol} "Acceptance" stopping criterion based on objective function change. \\ If the relative change of the objective function (scaled by Max(1,|f(x)|)) is less than this value, this part of the acceptable tolerance termination is satisfied; see also acceptable\_tol. This is useful for the quasi-Newton option, which has trouble to bring down the dual infeasibility. The valid range for this real option is $0 \le {\tt acceptable\_obj\_change\_tol } < {\tt +inf}$ and its default value is $1 \cdot 10^{+20}$. \paragraph{acceptable\_tol:}\label{opt:acceptable_tol} "Acceptable" convergence tolerance (relative). \\ Determines which (scaled) overall optimality error is considered to be "acceptable." There are two levels of termination criteria. If the usual "desired" tolerances (see tol, dual\_inf\_tol etc) are satisfied at an iteration, the algorithm immediately terminates with a success message. On the other hand, if the algorithm encounters "acceptable\_iter" many iterations in a row that are considered "acceptable", it will terminate before the desired convergence tolerance is met. This is useful in cases where the algorithm might not be able to achieve the "desired" level of accuracy. The valid range for this real option is $0 < {\tt acceptable\_tol } < {\tt +inf}$ and its default value is $1 \cdot 10^{-06}$. \paragraph{compl\_inf\_tol:}\label{opt:compl_inf_tol} Desired threshold for the complementarity conditions. \\ Absolute tolerance on the complementarity. Successful termination requires that the max-norm of the (unscaled) complementarity is less than this threshold. The valid range for this real option is $0 < {\tt compl\_inf\_tol } < {\tt +inf}$ and its default value is $0.0001$. \paragraph{constr\_viol\_tol:}\label{opt:constr_viol_tol} Desired threshold for the constraint violation. \\ Absolute tolerance on the constraint violation. Successful termination requires that the max-norm of the (unscaled) constraint violation is less than this threshold. The valid range for this real option is $0 < {\tt constr\_viol\_tol } < {\tt +inf}$ and its default value is $0.0001$. \paragraph{diverging\_iterates\_tol:}\label{opt:diverging_iterates_tol} Threshold for maximal value of primal iterates. \\ If any component of the primal iterates exceeded this value (in absolute terms), the optimization is aborted with the exit message that the iterates seem to be diverging. The valid range for this real option is $0 < {\tt diverging\_iterates\_tol } < {\tt +inf}$ and its default value is $1 \cdot 10^{+20}$. \paragraph{dual\_inf\_tol:}\label{opt:dual_inf_tol} Desired threshold for the dual infeasibility. \\ Absolute tolerance on the dual infeasibility. Successful termination requires that the max-norm of the (unscaled) dual infeasibility is less than this threshold. The valid range for this real option is $0 < {\tt dual\_inf\_tol } < {\tt +inf}$ and its default value is $1$. \paragraph{max\_cpu\_time:}\label{opt:max_cpu_time} Maximum number of CPU seconds. \\ A limit on CPU seconds that Ipopt can use to solve one problem. If during the convergence check this limit is exceeded, Ipopt will terminate with a corresponding error message. The valid range for this real option is $0 < {\tt max\_cpu\_time } < {\tt +inf}$ and its default value is $1 \cdot 10^{+06}$. \paragraph{max\_iter:}\label{opt:max_iter} Maximum number of iterations. \\ The algorithm terminates with an error message if the number of iterations exceeded this number. The valid range for this integer option is $0 \le {\tt max\_iter } < {\tt +inf}$ and its default value is $3000$. \paragraph{mu\_target:}\label{opt:mu_target} Desired value of complementarity. \\ Usually, the barrier parameter is driven to zero and the termination test for complementarity is measured with respect to zero complementarity. However, in some cases it might be desired to have Ipopt solve barrier problem for strictly positive value of the barrier parameter. In this case, the value of "mu\_target" specifies the final value of the barrier parameter, and the termination tests are then defined with respect to the barrier problem for this value of the barrier parameter. The valid range for this real option is $0 \le {\tt mu\_target } < {\tt +inf}$ and its default value is $0$. \paragraph{s\_max:}\label{opt:s_max} Scaling threshold for the NLP error. \\ (See paragraph after Eqn. (6) in the implementation paper.) The valid range for this real option is $0 < {\tt s\_max } < {\tt +inf}$ and its default value is $100$. \paragraph{tol:}\label{opt:tol} Desired convergence tolerance (relative). \\ Determines the convergence tolerance for the algorithm. The algorithm terminates successfully, if the (scaled) NLP error becomes smaller than this value, and if the (absolute) criteria according to "dual\_inf\_tol", "primal\_inf\_tol", and "compl\_inf\_tol" are met. (This is epsilon\_tol in Eqn. (6) in implementation paper). See also "acceptable\_tol" as a second termination criterion. Note, some other algorithmic features also use this quantity to determine thresholds etc. The valid range for this real option is $0 < {\tt tol } < {\tt +inf}$ and its default value is $1 \cdot 10^{-08}$. \subsection{Derivative Checker} \label{sec:DerivativeChecker} \htmlanchor{sec:DerivativeChecker} \paragraph{derivative\_test:}\label{opt:derivative_test} Enable derivative checker \\ If this option is enabled, a (slow!) derivative test will be performed before the optimization. The test is performed at the user provided starting point and marks derivative values that seem suspicious The default value for this string option is "none". \\ Possible values: \begin{itemize} \item none: do not perform derivative test \item first-order: perform test of first derivatives at starting point \item second-order: perform test of first and second derivatives at starting point \item only-second-order: perform test of second derivatives at starting point \end{itemize} \paragraph{derivative\_test\_first\_index:}\label{opt:derivative_test_first_index} Index of first quantity to be checked by derivative checker \\ If this is set to -2, then all derivatives are checked. Otherwise, for the first derivative test it specifies the first variable for which the test is done (counting starts at 0). For second derivatives, it specifies the first constraint for which the test is done; counting of constraint indices starts at 0, and -1 refers to the objective function Hessian. The valid range for this integer option is $-2 \le {\tt derivative\_test\_first\_index } < {\tt +inf}$ and its default value is $-2$. \paragraph{derivative\_test\_perturbation:}\label{opt:derivative_test_perturbation} Size of the finite difference perturbation in derivative test. \\ This determines the relative perturbation of the variable entries. The valid range for this real option is $0 < {\tt derivative\_test\_perturbation } < {\tt +inf}$ and its default value is $1 \cdot 10^{-08}$. \paragraph{derivative\_test\_print\_all:}\label{opt:derivative_test_print_all} Indicates whether information for all estimated derivatives should be printed. \\ Determines verbosity of derivative checker. The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: Print only suspect derivatives \item yes: Print all derivatives \end{itemize} \paragraph{derivative\_test\_tol:}\label{opt:derivative_test_tol} Threshold for indicating wrong derivative. \\ If the relative deviation of the estimated derivative from the given one is larger than this value, the corresponding derivative is marked as wrong. The valid range for this real option is $0 < {\tt derivative\_test\_tol } < {\tt +inf}$ and its default value is $0.0001$. \paragraph{findiff\_perturbation:}\label{opt:findiff_perturbation} Size of the finite difference perturbation for derivative approximation. \\ This determines the relative perturbation of the variable entries. The valid range for this real option is $0 < {\tt findiff\_perturbation } < {\tt +inf}$ and its default value is $1 \cdot 10^{-07}$. \paragraph{jacobian\_approximation:}\label{opt:jacobian_approximation} Specifies technique to compute constraint Jacobian \\ The default value for this string option is "exact". \\ Possible values: \begin{itemize} \item exact: user-provided derivatives \item finite-difference-values: user-provided structure, values by finite differences \end{itemize} \paragraph{point\_perturbation\_radius:}\label{opt:point_perturbation_radius} Maximal perturbation of an evaluation point. \\ If a random perturbation of a points is required, this number indicates the maximal perturbation. This is for example used when determining the center point at which the finite difference derivative test is executed. The valid range for this real option is $0 \le {\tt point\_perturbation\_radius } < {\tt +inf}$ and its default value is $10$. \subsection{Hessian Approximation} \label{sec:HessianApproximation} \htmlanchor{sec:HessianApproximation} \paragraph{hessian\_approximation:}\label{opt:hessian_approximation} Indicates what Hessian information is to be used. \\ This determines which kind of information for the Hessian of the Lagrangian function is used by the algorithm. The default value for this string option is "exact". \\ Possible values: \begin{itemize} \item exact: Use second derivatives provided by the NLP. \item limited-memory: Perform a limited-memory quasi-Newton approximation \end{itemize} \paragraph{hessian\_approximation\_space:}\label{opt:hessian_approximation_space} Indicates in which subspace the Hessian information is to be approximated. \\ The default value for this string option is "nonlinear-variables". \\ Possible values: \begin{itemize} \item nonlinear-variables: only in space of nonlinear variables. \item all-variables: in space of all variables (without slacks) \end{itemize} \paragraph{limited\_memory\_aug\_solver:}\label{opt:limited_memory_aug_solver} Strategy for solving the augmented system for low-rank Hessian. \\ The default value for this string option is "sherman-morrison". \\ Possible values: \begin{itemize} \item sherman-morrison: use Sherman-Morrison formula \item extended: use an extended augmented system \end{itemize} \paragraph{limited\_memory\_init\_val:}\label{opt:limited_memory_init_val} Value for B0 in low-rank update. \\ The starting matrix in the low rank update, B0, is chosen to be this multiple of the identity in the first iteration (when no updates have been performed yet), and is constantly chosen as this value, if "limited\_memory\_initialization" is "constant". The valid range for this real option is $0 < {\tt limited\_memory\_init\_val } < {\tt +inf}$ and its default value is $1$. \paragraph{limited\_memory\_init\_val\_max:}\label{opt:limited_memory_init_val_max} Upper bound on value for B0 in low-rank update. \\ The starting matrix in the low rank update, B0, is chosen to be this multiple of the identity in the first iteration (when no updates have been performed yet), and is constantly chosen as this value, if "limited\_memory\_initialization" is "constant". The valid range for this real option is $0 < {\tt limited\_memory\_init\_val\_max } < {\tt +inf}$ and its default value is $1 \cdot 10^{+08}$. \paragraph{limited\_memory\_init\_val\_min:}\label{opt:limited_memory_init_val_min} Lower bound on value for B0 in low-rank update. \\ The starting matrix in the low rank update, B0, is chosen to be this multiple of the identity in the first iteration (when no updates have been performed yet), and is constantly chosen as this value, if "limited\_memory\_initialization" is "constant". The valid range for this real option is $0 < {\tt limited\_memory\_init\_val\_min } < {\tt +inf}$ and its default value is $1 \cdot 10^{-08}$. \paragraph{limited\_memory\_initialization:}\label{opt:limited_memory_initialization} Initialization strategy for the limited memory quasi-Newton approximation. \\ Determines how the diagonal Matrix B\_0 as the first term in the limited memory approximation should be computed. The default value for this string option is "scalar1". \\ Possible values: \begin{itemize} \item scalar1: sigma = s\^Ty/s\^Ts \item scalar2: sigma = y\^Ty/s\^Ty \item scalar3: arithmetic average of scalar1 and scalar2 \item scalar4: geometric average of scalar1 and scalar2 \item constant: sigma = limited\_memory\_init\_val \end{itemize} \paragraph{limited\_memory\_max\_history:}\label{opt:limited_memory_max_history} Maximum size of the history for the limited quasi-Newton Hessian approximation. \\ This option determines the number of most recent iterations that are taken into account for the limited-memory quasi-Newton approximation. The valid range for this integer option is $0 \le {\tt limited\_memory\_max\_history } < {\tt +inf}$ and its default value is $6$. \paragraph{limited\_memory\_max\_skipping:}\label{opt:limited_memory_max_skipping} Threshold for successive iterations where update is skipped. \\ If the update is skipped more than this number of successive iterations, we quasi-Newton approximation is reset. The valid range for this integer option is $1 \le {\tt limited\_memory\_max\_skipping } < {\tt +inf}$ and its default value is $2$. \paragraph{limited\_memory\_special\_for\_resto:}\label{opt:limited_memory_special_for_resto} Determines if the quasi-Newton updates should be special during the restoration phase. \\ Until Nov 2010, Ipopt used a special update during the restoration phase, but it turned out that this does not work well. The new default uses the regular update procedure and it improves results. If for some reason you want to get back to the original update, set this option to "yes". The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: use the same update as in regular iterations \item yes: use the a special update during restoration phase \end{itemize} \paragraph{limited\_memory\_update\_type:}\label{opt:limited_memory_update_type} Quasi-Newton update formula for the limited memory approximation. \\ Determines which update formula is to be used for the limited-memory quasi-Newton approximation. The default value for this string option is "bfgs". \\ Possible values: \begin{itemize} \item bfgs: BFGS update (with skipping) \item sr1: SR1 (not working well) \end{itemize} \subsection{Initialization} \label{sec:Initialization} \htmlanchor{sec:Initialization} \paragraph{bound\_frac:}\label{opt:bound_frac} Desired minimum relative distance from the initial point to bound. \\ Determines how much the initial point might have to be modified in order to be sufficiently inside the bounds (together with "bound\_push"). (This is kappa\_2 in Section 3.6 of implementation paper.) The valid range for this real option is $0 < {\tt bound\_frac } \le 0.5$ and its default value is $0.01$. \paragraph{bound\_mult\_init\_method:}\label{opt:bound_mult_init_method} Initialization method for bound multipliers \\ This option defines how the iterates for the bound multipliers are initialized. If "constant" is chosen, then all bound multipliers are initialized to the value of "bound\_mult\_init\_val". If "mu-based" is chosen, the each value is initialized to the the value of "mu\_init" divided by the corresponding slack variable. This latter option might be useful if the starting point is close to the optimal solution. The default value for this string option is "constant". \\ Possible values: \begin{itemize} \item constant: set all bound multipliers to the value of bound\_mult\_init\_val \item mu-based: initialize to mu\_init/x\_slack \end{itemize} \paragraph{bound\_mult\_init\_val:}\label{opt:bound_mult_init_val} Initial value for the bound multipliers. \\ All dual variables corresponding to bound constraints are initialized to this value. The valid range for this real option is $0 < {\tt bound\_mult\_init\_val } < {\tt +inf}$ and its default value is $1$. \paragraph{bound\_push:}\label{opt:bound_push} Desired minimum absolute distance from the initial point to bound. \\ Determines how much the initial point might have to be modified in order to be sufficiently inside the bounds (together with "bound\_frac"). (This is kappa\_1 in Section 3.6 of implementation paper.) The valid range for this real option is $0 < {\tt bound\_push } < {\tt +inf}$ and its default value is $0.01$. \paragraph{constr\_mult\_init\_max:}\label{opt:constr_mult_init_max} Maximum allowed least-square guess of constraint multipliers. \\ Determines how large the initial least-square guesses of the constraint multipliers are allowed to be (in max-norm). If the guess is larger than this value, it is discarded and all constraint multipliers are set to zero. This options is also used when initializing the restoration phase. By default, "resto.constr\_mult\_init\_max" (the one used in RestoIterateInitializer) is set to zero. The valid range for this real option is $0 \le {\tt constr\_mult\_init\_max } < {\tt +inf}$ and its default value is $1000$. \paragraph{least\_square\_init\_duals:}\label{opt:least_square_init_duals} Least square initialization of all dual variables \\ If set to yes, Ipopt tries to compute least-square multipliers (considering ALL dual variables). If successful, the bound multipliers are possibly corrected to be at least bound\_mult\_init\_val. This might be useful if the user doesn't know anything about the starting point, or for solving an LP or QP. This overwrites option "bound\_mult\_init\_method". The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: use bound\_mult\_init\_val and least-square equality constraint multipliers \item yes: overwrite user-provided point with least-square estimates \end{itemize} \paragraph{least\_square\_init\_primal:}\label{opt:least_square_init_primal} Least square initialization of the primal variables \\ If set to yes, Ipopt ignores the user provided point and solves a least square problem for the primal variables (x and s), to fit the linearized equality and inequality constraints. This might be useful if the user doesn't know anything about the starting point, or for solving an LP or QP. The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: take user-provided point \item yes: overwrite user-provided point with least-square estimates \end{itemize} \paragraph{slack\_bound\_frac:}\label{opt:slack_bound_frac} Desired minimum relative distance from the initial slack to bound. \\ Determines how much the initial slack variables might have to be modified in order to be sufficiently inside the inequality bounds (together with "slack\_bound\_push"). (This is kappa\_2 in Section 3.6 of implementation paper.) The valid range for this real option is $0 < {\tt slack\_bound\_frac } \le 0.5$ and its default value is $0.01$. \paragraph{slack\_bound\_push:}\label{opt:slack_bound_push} Desired minimum absolute distance from the initial slack to bound. \\ Determines how much the initial slack variables might have to be modified in order to be sufficiently inside the inequality bounds (together with "slack\_bound\_frac"). (This is kappa\_1 in Section 3.6 of implementation paper.) The valid range for this real option is $0 < {\tt slack\_bound\_push } < {\tt +inf}$ and its default value is $0.01$. \subsection{Line Search} \label{sec:LineSearch} \htmlanchor{sec:LineSearch} \paragraph{accept\_after\_max\_steps:}\label{opt:accept_after_max_steps} Accept a trial point after maximal this number of steps. \\ Even if it does not satisfy line search conditions. The valid range for this integer option is $-1 \le {\tt accept\_after\_max\_steps } < {\tt +inf}$ and its default value is $-1$. \paragraph{accept\_every\_trial\_step:}\label{opt:accept_every_trial_step} Always accept the first trial step. \\ Setting this option to "yes" essentially disables the line search and makes the algorithm take aggressive steps, without global convergence guarantees. The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: don't arbitrarily accept the full step \item yes: always accept the full step \end{itemize} \paragraph{alpha\_for\_y:}\label{opt:alpha_for_y} Method to determine the step size for constraint multipliers. \\ This option determines how the step size (alpha\_y) will be calculated when updating the constraint multipliers. The default value for this string option is "primal". \\ Possible values: \begin{itemize} \item primal: use primal step size \item bound-mult: use step size for the bound multipliers (good for LPs) \item min: use the min of primal and bound multipliers \item max: use the max of primal and bound multipliers \item full: take a full step of size one \item min-dual-infeas: choose step size minimizing new dual infeasibility \item safer-min-dual-infeas: like "min\_dual\_infeas", but safeguarded by "min" and "max" \item primal-and-full: use the primal step size, and full step if delta\_x <= alpha\_for\_y\_tol \item dual-and-full: use the dual step size, and full step if delta\_x <= alpha\_for\_y\_tol \item acceptor: Call LSAcceptor to get step size for y \end{itemize} \paragraph{alpha\_for\_y\_tol:}\label{opt:alpha_for_y_tol} Tolerance for switching to full equality multiplier steps. \\ This is only relevant if "alpha\_for\_y" is chosen "primal-and-full" or "dual-and-full". The step size for the equality constraint multipliers is taken to be one if the max-norm of the primal step is less than this tolerance. The valid range for this real option is $0 \le {\tt alpha\_for\_y\_tol } < {\tt +inf}$ and its default value is $10$. \paragraph{alpha\_min\_frac:}\label{opt:alpha_min_frac} Safety factor for the minimal step size (before switching to restoration phase). \\ (This is gamma\_alpha in Eqn. (20) in the implementation paper.) The valid range for this real option is $0 < {\tt alpha\_min\_frac } < 1$ and its default value is $0.05$. \paragraph{alpha\_red\_factor:}\label{opt:alpha_red_factor} Fractional reduction of the trial step size in the backtracking line search. \\ At every step of the backtracking line search, the trial step size is reduced by this factor. The valid range for this real option is $0 < {\tt alpha\_red\_factor } < 1$ and its default value is $0.5$. \paragraph{constraint\_violation\_norm\_type:}\label{opt:constraint_violation_norm_type} Norm to be used for the constraint violation in the line search. \\ Determines which norm should be used when the algorithm computes the constraint violation in the line search. The default value for this string option is "1-norm". \\ Possible values: \begin{itemize} \item 1-norm: use the 1-norm \item 2-norm: use the 2-norm \item max-norm: use the infinity norm \end{itemize} \paragraph{corrector\_compl\_avrg\_red\_fact:}\label{opt:corrector_compl_avrg_red_fact} Complementarity tolerance factor for accepting corrector step (unsupported!). \\ This option determines the factor by which complementarity is allowed to increase for a corrector step to be accepted. The valid range for this real option is $0 < {\tt corrector\_compl\_avrg\_red\_fact } < {\tt +inf}$ and its default value is $1$. \paragraph{corrector\_type:}\label{opt:corrector_type} The type of corrector steps that should be taken (unsupported!). \\ If "mu\_strategy" is "adaptive", this option determines what kind of corrector steps should be tried. The default value for this string option is "none". \\ Possible values: \begin{itemize} \item none: no corrector \item affine: corrector step towards mu=0 \item primal-dual: corrector step towards current mu \end{itemize} \paragraph{delta:}\label{opt:delta} Multiplier for constraint violation in the switching rule. \\ (See Eqn. (19) in the implementation paper.) The valid range for this real option is $0 < {\tt delta } < {\tt +inf}$ and its default value is $1$. \paragraph{eta\_phi:}\label{opt:eta_phi} Relaxation factor in the Armijo condition. \\ (See Eqn. (20) in the implementation paper) The valid range for this real option is $0 < {\tt eta\_phi } < 0.5$ and its default value is $1 \cdot 10^{-08}$. \paragraph{filter\_reset\_trigger:}\label{opt:filter_reset_trigger} Number of iterations that trigger the filter reset. \\ If the filter reset heuristic is active and the number of successive iterations in which the last rejected trial step size was rejected because of the filter, the filter is reset. The valid range for this integer option is $1 \le {\tt filter\_reset\_trigger } < {\tt +inf}$ and its default value is $5$. \paragraph{gamma\_phi:}\label{opt:gamma_phi} Relaxation factor in the filter margin for the barrier function. \\ (See Eqn. (18a) in the implementation paper.) The valid range for this real option is $0 < {\tt gamma\_phi } < 1$ and its default value is $1 \cdot 10^{-08}$. \paragraph{gamma\_theta:}\label{opt:gamma_theta} Relaxation factor in the filter margin for the constraint violation. \\ (See Eqn. (18b) in the implementation paper.) The valid range for this real option is $0 < {\tt gamma\_theta } < 1$ and its default value is $1 \cdot 10^{-05}$. \paragraph{kappa\_sigma:}\label{opt:kappa_sigma} Factor limiting the deviation of dual variables from primal estimates. \\ If the dual variables deviate from their primal estimates, a correction is performed. (See Eqn. (16) in the implementation paper.) Setting the value to less than 1 disables the correction. The valid range for this real option is $0 < {\tt kappa\_sigma } < {\tt +inf}$ and its default value is $1 \cdot 10^{+10}$. \paragraph{kappa\_soc:}\label{opt:kappa_soc} Factor in the sufficient reduction rule for second order correction. \\ This option determines how much a second order correction step must reduce the constraint violation so that further correction steps are attempted. (See Step A-5.9 of Algorithm A in the implementation paper.) The valid range for this real option is $0 < {\tt kappa\_soc } < {\tt +inf}$ and its default value is $0.99$. \paragraph{line\_search\_method:}\label{opt:line_search_method} Globalization method used in backtracking line search \\ Only the "filter" choice is officially supported. But sometimes, good results might be obtained with the other choices. The default value for this string option is "filter". \\ Possible values: \begin{itemize} \item filter: Filter method \item cg-penalty: Chen-Goldfarb penalty function \item penalty: Standard penalty function \end{itemize} \paragraph{max\_filter\_resets:}\label{opt:max_filter_resets} Maximal allowed number of filter resets \\ A positive number enables a heuristic that resets the filter, whenever in more than "filter\_reset\_trigger" successive iterations the last rejected trial steps size was rejected because of the filter. This option determine the maximal number of resets that are allowed to take place. The valid range for this integer option is $0 \le {\tt max\_filter\_resets } < {\tt +inf}$ and its default value is $5$. \paragraph{max\_soc:}\label{opt:max_soc} Maximum number of second order correction trial steps at each iteration. \\ Choosing 0 disables the second order corrections. (This is p\^{max} of Step A-5.9 of Algorithm A in the implementation paper.) The valid range for this integer option is $0 \le {\tt max\_soc } < {\tt +inf}$ and its default value is $4$. \paragraph{nu\_inc:}\label{opt:nu_inc} Increment of the penalty parameter. \\ The valid range for this real option is $0 < {\tt nu\_inc } < {\tt +inf}$ and its default value is $0.0001$. \paragraph{nu\_init:}\label{opt:nu_init} Initial value of the penalty parameter. \\ The valid range for this real option is $0 < {\tt nu\_init } < {\tt +inf}$ and its default value is $1 \cdot 10^{-06}$. \paragraph{obj\_max\_inc:}\label{opt:obj_max_inc} Determines the upper bound on the acceptable increase of barrier objective function. \\ Trial points are rejected if they lead to an increase in the barrier objective function by more than obj\_max\_inc orders of magnitude. The valid range for this real option is $1 < {\tt obj\_max\_inc } < {\tt +inf}$ and its default value is $5$. \paragraph{recalc\_y:}\label{opt:recalc_y} Tells the algorithm to recalculate the equality and inequality multipliers as least square estimates. \\ This asks the algorithm to recompute the multipliers, whenever the current infeasibility is less than recalc\_y\_feas\_tol. Choosing yes might be helpful in the quasi-Newton option. However, each recalculation requires an extra factorization of the linear system. If a limited memory quasi-Newton option is chosen, this is used by default. The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: use the Newton step to update the multipliers \item yes: use least-square multiplier estimates \end{itemize} \paragraph{recalc\_y\_feas\_tol:}\label{opt:recalc_y_feas_tol} Feasibility threshold for recomputation of multipliers. \\ If recalc\_y is chosen and the current infeasibility is less than this value, then the multipliers are recomputed. The valid range for this real option is $0 < {\tt recalc\_y\_feas\_tol } < {\tt +inf}$ and its default value is $1 \cdot 10^{-06}$. \paragraph{rho:}\label{opt:rho} Value in penalty parameter update formula. \\ The valid range for this real option is $0 < {\tt rho } < 1$ and its default value is $0.1$. \paragraph{s\_phi:}\label{opt:s_phi} Exponent for linear barrier function model in the switching rule. \\ (See Eqn. (19) in the implementation paper.) The valid range for this real option is $1 < {\tt s\_phi } < {\tt +inf}$ and its default value is $2.3$. \paragraph{s\_theta:}\label{opt:s_theta} Exponent for current constraint violation in the switching rule. \\ (See Eqn. (19) in the implementation paper.) The valid range for this real option is $1 < {\tt s\_theta } < {\tt +inf}$ and its default value is $1.1$. \paragraph{skip\_corr\_if\_neg\_curv:}\label{opt:skip_corr_if_neg_curv} Skip the corrector step in negative curvature iteration (unsupported!). \\ The corrector step is not tried if negative curvature has been encountered during the computation of the search direction in the current iteration. This option is only used if "mu\_strategy" is "adaptive". The default value for this string option is "yes". \\ Possible values: \begin{itemize} \item no: don't skip \item yes: skip \end{itemize} \paragraph{skip\_corr\_in\_monotone\_mode:}\label{opt:skip_corr_in_monotone_mode} Skip the corrector step during monotone barrier parameter mode (unsupported!). \\ The corrector step is not tried if the algorithm is currently in the monotone mode (see also option "barrier\_strategy").This option is only used if "mu\_strategy" is "adaptive". The default value for this string option is "yes". \\ Possible values: \begin{itemize} \item no: don't skip \item yes: skip \end{itemize} \paragraph{slack\_move:}\label{opt:slack_move} Correction size for very small slacks. \\ Due to numerical issues or the lack of an interior, the slack variables might become very small. If a slack becomes very small compared to machine precision, the corresponding bound is moved slightly. This parameter determines how large the move should be. Its default value is mach\_eps\^{3/4}. (See also end of Section 3.5 in implementation paper - but actual implementation might be somewhat different.) The valid range for this real option is $0 \le {\tt slack\_move } < {\tt +inf}$ and its default value is $1.81899 \cdot 10^{-12}$. \paragraph{theta\_max\_fact:}\label{opt:theta_max_fact} Determines upper bound for constraint violation in the filter. \\ The algorithmic parameter theta\_max is determined as theta\_max\_fact times the maximum of 1 and the constraint violation at initial point. Any point with a constraint violation larger than theta\_max is unacceptable to the filter (see Eqn. (21) in the implementation paper). The valid range for this real option is $0 < {\tt theta\_max\_fact } < {\tt +inf}$ and its default value is $10000$. \paragraph{theta\_min\_fact:}\label{opt:theta_min_fact} Determines constraint violation threshold in the switching rule. \\ The algorithmic parameter theta\_min is determined as theta\_min\_fact times the maximum of 1 and the constraint violation at initial point. The switching rules treats an iteration as an h-type iteration whenever the current constraint violation is larger than theta\_min (see paragraph before Eqn. (19) in the implementation paper). The valid range for this real option is $0 < {\tt theta\_min\_fact } < {\tt +inf}$ and its default value is $0.0001$. \paragraph{tiny\_step\_tol:}\label{opt:tiny_step_tol} Tolerance for detecting numerically insignificant steps. \\ If the search direction in the primal variables (x and s) is, in relative terms for each component, less than this value, the algorithm accepts the full step without line search. If this happens repeatedly, the algorithm will terminate with a corresponding exit message. The default value is 10 times machine precision. The valid range for this real option is $0 \le {\tt tiny\_step\_tol } < {\tt +inf}$ and its default value is $2.22045 \cdot 10^{-15}$. \paragraph{tiny\_step\_y\_tol:}\label{opt:tiny_step_y_tol} Tolerance for quitting because of numerically insignificant steps. \\ If the search direction in the primal variables (x and s) is, in relative terms for each component, repeatedly less than tiny\_step\_tol, and the step in the y variables is smaller than this threshold, the algorithm will terminate. The valid range for this real option is $0 \le {\tt tiny\_step\_y\_tol } < {\tt +inf}$ and its default value is $0.01$. \paragraph{watchdog\_shortened\_iter\_trigger:}\label{opt:watchdog_shortened_iter_trigger} Number of shortened iterations that trigger the watchdog. \\ If the number of successive iterations in which the backtracking line search did not accept the first trial point exceeds this number, the watchdog procedure is activated. Choosing "0" here disables the watchdog procedure. The valid range for this integer option is $0 \le {\tt watchdog\_shortened\_iter\_trigger } < {\tt +inf}$ and its default value is $10$. \paragraph{watchdog\_trial\_iter\_max:}\label{opt:watchdog_trial_iter_max} Maximum number of watchdog iterations. \\ This option determines the number of trial iterations allowed before the watchdog procedure is aborted and the algorithm returns to the stored point. The valid range for this integer option is $1 \le {\tt watchdog\_trial\_iter\_max } < {\tt +inf}$ and its default value is $3$. \subsection{Linear Solver} \label{sec:LinearSolver} \htmlanchor{sec:LinearSolver} \paragraph{linear\_scaling\_on\_demand:}\label{opt:linear_scaling_on_demand} Flag indicating that linear scaling is only done if it seems required. \\ This option is only important if a linear scaling method (e.g., mc19) is used. If you choose "no", then the scaling factors are computed for every linear system from the start. This can be quite expensive. Choosing "yes" means that the algorithm will start the scaling method only when the solutions to the linear system seem not good, and then use it until the end. The default value for this string option is "yes". \\ Possible values: \begin{itemize} \item no: Always scale the linear system. \item yes: Start using linear system scaling if solutions seem not good. \end{itemize} \paragraph{linear\_solver:}\label{opt:linear_solver} Linear solver used for step computations. \\ Determines which linear algebra package is to be used for the solution of the augmented linear system (for obtaining the search directions). Note, the code must have been compiled with the linear solver you want to choose. Depending on your Ipopt installation, not all options are available. The default value for this string option is "ma27". \\ Possible values: \begin{itemize} \item ma27: use the Harwell routine MA27 \item ma57: use the Harwell routine MA57 \item ma77: use the Harwell routine HSL\_MA77 \item ma86: use the Harwell routine HSL\_MA86 \item ma97: use the Harwell routine HSL\_MA97 \item pardiso: use the Pardiso package \item wsmp: use WSMP package \item mumps: use MUMPS package \item custom: use custom linear solver \end{itemize} \paragraph{linear\_system\_scaling:}\label{opt:linear_system_scaling} Method for scaling the linear system. \\ Determines the method used to compute symmetric scaling factors for the augmented system (see also the "linear\_scaling\_on\_demand" option). This scaling is independent of the NLP problem scaling. By default, MC19 is only used if MA27 or MA57 are selected as linear solvers. This value is only available if Ipopt has been compiled with MC19. The default value for this string option is "mc19". \\ Possible values: \begin{itemize} \item none: no scaling will be performed \item mc19: use the Harwell routine MC19 \item slack-based: use the slack values \end{itemize} \subsection{MA27 Linear Solver} \label{sec:MA27LinearSolver} \htmlanchor{sec:MA27LinearSolver} \paragraph{ma27\_ignore\_singularity:}\label{opt:ma27_ignore_singularity} Enables MA27's ability to solve a linear system even if the matrix is singular. \\ Setting this option to "yes" means that Ipopt will call MA27 to compute solutions for right hand sides, even if MA27 has detected that the matrix is singular (but is still able to solve the linear system). In some cases this might be better than using Ipopt's heuristic of small perturbation of the lower diagonal of the KKT matrix. The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: Don't have MA27 solve singular systems \item yes: Have MA27 solve singular systems \end{itemize} \paragraph{ma27\_la\_init\_factor:}\label{opt:ma27_la_init_factor} Real workspace memory for MA27. \\ The initial real workspace memory = la\_init\_factor * memory required by unfactored system. Ipopt will increase the workspace size by meminc\_factor if required. This option is only available if Ipopt has been compiled with MA27. The valid range for this real option is $1 \le {\tt ma27\_la\_init\_factor } < {\tt +inf}$ and its default value is $5$. \paragraph{ma27\_liw\_init\_factor:}\label{opt:ma27_liw_init_factor} Integer workspace memory for MA27. \\ The initial integer workspace memory = liw\_init\_factor * memory required by unfactored system. Ipopt will increase the workspace size by meminc\_factor if required. This option is only available if Ipopt has been compiled with MA27. The valid range for this real option is $1 \le {\tt ma27\_liw\_init\_factor } < {\tt +inf}$ and its default value is $5$. \paragraph{ma27\_meminc\_factor:}\label{opt:ma27_meminc_factor} Increment factor for workspace size for MA27. \\ If the integer or real workspace is not large enough, Ipopt will increase its size by this factor. This option is only available if Ipopt has been compiled with MA27. The valid range for this real option is $1 \le {\tt ma27\_meminc\_factor } < {\tt +inf}$ and its default value is $2$. \paragraph{ma27\_pivtol:}\label{opt:ma27_pivtol} Pivot tolerance for the linear solver MA27. \\ A smaller number pivots for sparsity, a larger number pivots for stability. This option is only available if Ipopt has been compiled with MA27. The valid range for this real option is $0 < {\tt ma27\_pivtol } < 1$ and its default value is $1 \cdot 10^{-08}$. \paragraph{ma27\_pivtolmax:}\label{opt:ma27_pivtolmax} Maximum pivot tolerance for the linear solver MA27. \\ Ipopt may increase pivtol as high as pivtolmax to get a more accurate solution to the linear system. This option is only available if Ipopt has been compiled with MA27. The valid range for this real option is $0 < {\tt ma27\_pivtolmax } < 1$ and its default value is $0.0001$. \paragraph{ma27\_skip\_inertia\_check:}\label{opt:ma27_skip_inertia_check} Always pretend inertia is correct. \\ Setting this option to "yes" essentially disables inertia check. This option makes the algorithm non-robust and easily fail, but it might give some insight into the necessity of inertia control. The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: check inertia \item yes: skip inertia check \end{itemize} \subsection{MA28 Linear Solver} \label{sec:MA28LinearSolver} \htmlanchor{sec:MA28LinearSolver} \paragraph{ma28\_pivtol:}\label{opt:ma28_pivtol} Pivot tolerance for linear solver MA28. \\ This is used when MA28 tries to find the dependent constraints. The valid range for this real option is $0 < {\tt ma28\_pivtol } \le 1$ and its default value is $0.01$. \subsection{MA57 Linear Solver} \label{sec:MA57LinearSolver} \htmlanchor{sec:MA57LinearSolver} \paragraph{ma57\_automatic\_scaling:}\label{opt:ma57_automatic_scaling} Controls MA57 automatic scaling \\ This option controls the internal scaling option of MA57. For higher reliability of the MA57 solver, you may want to set this option to yes. This is ICNTL(15) in MA57. The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: Do not scale the linear system matrix \item yes: Scale the linear system matrix \end{itemize} \paragraph{ma57\_block\_size:}\label{opt:ma57_block_size} Controls block size used by Level 3 BLAS in MA57BD \\ This is ICNTL(11) in MA57. The valid range for this integer option is $1 \le {\tt ma57\_block\_size } < {\tt +inf}$ and its default value is $16$. \paragraph{ma57\_node\_amalgamation:}\label{opt:ma57_node_amalgamation} Node amalgamation parameter \\ This is ICNTL(12) in MA57. The valid range for this integer option is $1 \le {\tt ma57\_node\_amalgamation } < {\tt +inf}$ and its default value is $16$. \paragraph{ma57\_pivot\_order:}\label{opt:ma57_pivot_order} Controls pivot order in MA57 \\ This is ICNTL(6) in MA57. The valid range for this integer option is $0 \le {\tt ma57\_pivot\_order } \le 5$ and its default value is $5$. \paragraph{ma57\_pivtol:}\label{opt:ma57_pivtol} Pivot tolerance for the linear solver MA57. \\ A smaller number pivots for sparsity, a larger number pivots for stability. This option is only available if Ipopt has been compiled with MA57. The valid range for this real option is $0 < {\tt ma57\_pivtol } < 1$ and its default value is $1 \cdot 10^{-08}$. \paragraph{ma57\_pivtolmax:}\label{opt:ma57_pivtolmax} Maximum pivot tolerance for the linear solver MA57. \\ Ipopt may increase pivtol as high as ma57\_pivtolmax to get a more accurate solution to the linear system. This option is only available if Ipopt has been compiled with MA57. The valid range for this real option is $0 < {\tt ma57\_pivtolmax } < 1$ and its default value is $0.0001$. \paragraph{ma57\_pre\_alloc:}\label{opt:ma57_pre_alloc} Safety factor for work space memory allocation for the linear solver MA57. \\ If 1 is chosen, the suggested amount of work space is used. However, choosing a larger number might avoid reallocation if the suggest values do not suffice. This option is only available if Ipopt has been compiled with MA57. The valid range for this real option is $1 \le {\tt ma57\_pre\_alloc } < {\tt +inf}$ and its default value is $1.05$. \paragraph{ma57\_small\_pivot\_flag:}\label{opt:ma57_small_pivot_flag} If set to 1, then when small entries defined by CNTL(2) are detected they are removed and the corresponding pivots placed at the end of the factorization. This can be particularly efficient if the matrix is highly rank deficient. \\ This is ICNTL(16) in MA57. The valid range for this integer option is $0 \le {\tt ma57\_small\_pivot\_flag } \le 1$ and its default value is $0$. \subsection{MA77 Linear Solver} \label{sec:MA77LinearSolver} \htmlanchor{sec:MA77LinearSolver} \paragraph{ma77\_buffer\_lpage:}\label{opt:ma77_buffer_lpage} Number of scalars per MA77 buffer page \\ Number of scalars per an in-core buffer in the out-of-core solver MA77. Must be at most ma77\_file\_size. The valid range for this integer option is $1 \le {\tt ma77\_buffer\_lpage } < {\tt +inf}$ and its default value is $4096$. \paragraph{ma77\_buffer\_npage:}\label{opt:ma77_buffer_npage} Number of pages that make up MA77 buffer \\ Number of pages of size buffer\_lpage that exist in-core for the out-of-core solver MA77. The valid range for this integer option is $1 \le {\tt ma77\_buffer\_npage } < {\tt +inf}$ and its default value is $1600$. \paragraph{ma77\_file\_size:}\label{opt:ma77_file_size} Target size of each temporary file for MA77, scalars per type \\ MA77 uses many temporary files, this option controls the size of each one. It is measured in the number of entries (int or double), NOT bytes. The valid range for this integer option is $1 \le {\tt ma77\_file\_size } < {\tt +inf}$ and its default value is $2097152$. \paragraph{ma77\_maxstore:}\label{opt:ma77_maxstore} Maximum storage size for MA77 in-core mode \\ If greater than zero, the maximum size of factors stored in core before out-of-core mode is invoked. The valid range for this integer option is $0 \le {\tt ma77\_maxstore } < {\tt +inf}$ and its default value is $0$. \paragraph{ma77\_nemin:}\label{opt:ma77_nemin} Node Amalgamation parameter \\ Two nodes in elimination tree are merged if result has fewer than ma77\_nemin variables. The valid range for this integer option is $1 \le {\tt ma77\_nemin } < {\tt +inf}$ and its default value is $8$. \paragraph{ma77\_order:}\label{opt:ma77_order} Controls type of ordering used by HSL\_MA77 \\ This option controls ordering for the solver HSL\_MA77. The default value for this string option is "metis". \\ Possible values: \begin{itemize} \item amd: Use the HSL\_MC68 approximate minimum degree algorithm \item metis: Use the MeTiS nested dissection algorithm (if available) \end{itemize} \paragraph{ma77\_print\_level:}\label{opt:ma77_print_level} Debug printing level for the linear solver MA77 \\ The valid range for this integer option is ${\tt -inf} < {\tt ma77\_print\_level } < {\tt +inf}$ and its default value is $-1$. \paragraph{ma77\_small:}\label{opt:ma77_small} Zero Pivot Threshold \\ Any pivot less than ma77\_small is treated as zero. The valid range for this real option is $0 \le {\tt ma77\_small } < {\tt +inf}$ and its default value is $1 \cdot 10^{-20}$. \paragraph{ma77\_static:}\label{opt:ma77_static} Static Pivoting Threshold \\ See MA77 documentation. Either ma77\_static=0.0 or ma77\_static>ma77\_small. ma77\_static=0.0 disables static pivoting. The valid range for this real option is $0 \le {\tt ma77\_static } < {\tt +inf}$ and its default value is $0$. \paragraph{ma77\_u:}\label{opt:ma77_u} Pivoting Threshold \\ See MA77 documentation. The valid range for this real option is $0 \le {\tt ma77\_u } \le 0.5$ and its default value is $1 \cdot 10^{-08}$. \paragraph{ma77\_umax:}\label{opt:ma77_umax} Maximum Pivoting Threshold \\ Maximum value to which u will be increased to improve quality. The valid range for this real option is $0 \le {\tt ma77\_umax } \le 0.5$ and its default value is $0.0001$. \subsection{MA86 Linear Solver} \label{sec:MA86LinearSolver} \htmlanchor{sec:MA86LinearSolver} \paragraph{ma86\_nemin:}\label{opt:ma86_nemin} Node Amalgamation parameter \\ Two nodes in elimination tree are merged if result has fewer than ma86\_nemin variables. The valid range for this integer option is $1 \le {\tt ma86\_nemin } < {\tt +inf}$ and its default value is $32$. \paragraph{ma86\_order:}\label{opt:ma86_order} Controls type of ordering used by HSL\_MA86 \\ This option controls ordering for the solver HSL\_MA86. The default value for this string option is "auto". \\ Possible values: \begin{itemize} \item auto: Try both AMD and MeTiS, pick best \item amd: Use the HSL\_MC68 approximate minimum degree algorithm \item metis: Use the MeTiS nested dissection algorithm (if available) \end{itemize} \paragraph{ma86\_print\_level:}\label{opt:ma86_print_level} Debug printing level for the linear solver MA86 \\ The valid range for this integer option is ${\tt -inf} < {\tt ma86\_print\_level } < {\tt +inf}$ and its default value is $-1$. \paragraph{ma86\_scaling:}\label{opt:ma86_scaling} Controls scaling of matrix \\ This option controls scaling for the solver HSL\_MA86. The default value for this string option is "mc64". \\ Possible values: \begin{itemize} \item none: Do not scale the linear system matrix \item mc64: Scale linear system matrix using MC64 \item mc77: Scale linear system matrix using MC77 [1,3,0] \end{itemize} \paragraph{ma86\_small:}\label{opt:ma86_small} Zero Pivot Threshold \\ Any pivot less than ma86\_small is treated as zero. The valid range for this real option is $0 \le {\tt ma86\_small } < {\tt +inf}$ and its default value is $1 \cdot 10^{-20}$. \paragraph{ma86\_static:}\label{opt:ma86_static} Static Pivoting Threshold \\ See MA86 documentation. Either ma86\_static=0.0 or ma86\_static>ma86\_small. ma86\_static=0.0 disables static pivoting. The valid range for this real option is $0 \le {\tt ma86\_static } < {\tt +inf}$ and its default value is $0$. \paragraph{ma86\_u:}\label{opt:ma86_u} Pivoting Threshold \\ See MA86 documentation. The valid range for this real option is $0 \le {\tt ma86\_u } \le 0.5$ and its default value is $1 \cdot 10^{-08}$. \paragraph{ma86\_umax:}\label{opt:ma86_umax} Maximum Pivoting Threshold \\ Maximum value to which u will be increased to improve quality. The valid range for this real option is $0 \le {\tt ma86\_umax } \le 0.5$ and its default value is $0.0001$. \subsection{MA97 Linear Solver} \label{sec:MA97LinearSolver} \htmlanchor{sec:MA97LinearSolver} \paragraph{ma97\_nemin:}\label{opt:ma97_nemin} Node Amalgamation parameter \\ Two nodes in elimination tree are merged if result has fewer than ma97\_nemin variables. The valid range for this integer option is $1 \le {\tt ma97\_nemin } < {\tt +inf}$ and its default value is $8$. \paragraph{ma97\_order:}\label{opt:ma97_order} Controls type of ordering used by HSL\_MA97 \\ The default value for this string option is "auto". \\ Possible values: \begin{itemize} \item auto: Use HSL\_MA97 heuristic to guess best of AMD and METIS \item best: Try both AMD and MeTiS, pick best \item amd: Use the HSL\_MC68 approximate minimum degree algorithm \item metis: Use the MeTiS nested dissection algorithm \item matched-auto: Use the HSL\_MC80 matching with heuristic choice of AMD or METIS \item matched-metis: Use the HSL\_MC80 matching based ordering with METIS \item matched-amd: Use the HSL\_MC80 matching based ordering with AMD \end{itemize} \paragraph{ma97\_print\_level:}\label{opt:ma97_print_level} Debug printing level for the linear solver MA97 \\ The valid range for this integer option is ${\tt -inf} < {\tt ma97\_print\_level } < {\tt +inf}$ and its default value is $0$. \paragraph{ma97\_scaling:}\label{opt:ma97_scaling} Specifies strategy for scaling in HSL\_MA97 linear solver \\ The default value for this string option is "dynamic". \\ Possible values: \begin{itemize} \item none: Do not scale the linear system matrix \item mc30: Scale all linear system matrices using MC30 \item mc64: Scale all linear system matrices using MC64 \item mc77: Scale all linear system matrices using MC77 [1,3,0] \item dynamic: Dynamically select scaling according to rules specified by ma97\_scalingX and ma97\_switchX options. \end{itemize} \paragraph{ma97\_scaling1:}\label{opt:ma97_scaling1} First scaling. \\ If ma97\_scaling=dynamic, this scaling is used according to the trigger ma97\_switch1. If ma97\_switch2 is triggered it is disabled. The default value for this string option is "mc64". \\ Possible values: \begin{itemize} \item none: No scaling \item mc30: Scale linear system matrix using MC30 \item mc64: Scale linear system matrix using MC64 \item mc77: Scale linear system matrix using MC77 [1,3,0] \end{itemize} \paragraph{ma97\_scaling2:}\label{opt:ma97_scaling2} Second scaling. \\ If ma97\_scaling=dynamic, this scaling is used according to the trigger ma97\_switch2. If ma97\_switch3 is triggered it is disabled. The default value for this string option is "mc64". \\ Possible values: \begin{itemize} \item none: No scaling \item mc30: Scale linear system matrix using MC30 \item mc64: Scale linear system matrix using MC64 \item mc77: Scale linear system matrix using MC77 [1,3,0] \end{itemize} \paragraph{ma97\_scaling3:}\label{opt:ma97_scaling3} Third scaling. \\ If ma97\_scaling=dynamic, this scaling is used according to the trigger ma97\_switch3. The default value for this string option is "mc64". \\ Possible values: \begin{itemize} \item none: No scaling \item mc30: Scale linear system matrix using MC30 \item mc64: Scale linear system matrix using MC64 \item mc77: Scale linear system matrix using MC77 [1,3,0] \end{itemize} \paragraph{ma97\_small:}\label{opt:ma97_small} Zero Pivot Threshold \\ Any pivot less than ma97\_small is treated as zero. The valid range for this real option is $0 \le {\tt ma97\_small } < {\tt +inf}$ and its default value is $1 \cdot 10^{-20}$. \paragraph{ma97\_solve\_blas3:}\label{opt:ma97_solve_blas3} Controls if blas2 or blas3 routines are used for solve \\ The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: Use BLAS2 (faster, some implementations bit incompatible) \item yes: Use BLAS3 (slower) \end{itemize} \paragraph{ma97\_switch1:}\label{opt:ma97_switch1} First switch, determine when ma97\_scaling1 is enabled. \\ If ma97\_scaling=dynamic, ma97\_scaling1 is enabled according to this condition. If ma97\_switch2 occurs this option is henceforth ignored. The default value for this string option is "od\_hd\_reuse". \\ Possible values: \begin{itemize} \item never: Scaling is never enabled. \item at\_start: Scaling to be used from the very start. \item at\_start\_reuse: Scaling to be used on first iteration, then reused thereafter. \item on\_demand: Scaling to be used after Ipopt request improved solution (i.e. iterative refinement has failed). \item on\_demand\_reuse: As on\_demand, but reuse scaling from previous itr \item high\_delay: Scaling to be used after more than 0.05*n delays are present \item high\_delay\_reuse: Scaling to be used only when previous itr created more that 0.05*n additional delays, otherwise reuse scaling from previous itr \item od\_hd: Combination of on\_demand and high\_delay \item od\_hd\_reuse: Combination of on\_demand\_reuse and high\_delay\_reuse \end{itemize} \paragraph{ma97\_switch2:}\label{opt:ma97_switch2} Second switch, determine when ma97\_scaling2 is enabled. \\ If ma97\_scaling=dynamic, ma97\_scaling2 is enabled according to this condition. If ma97\_switch3 occurs this option is henceforth ignored. The default value for this string option is "never". \\ Possible values: \begin{itemize} \item never: Scaling is never enabled. \item at\_start: Scaling to be used from the very start. \item at\_start\_reuse: Scaling to be used on first iteration, then reused thereafter. \item on\_demand: Scaling to be used after Ipopt request improved solution (i.e. iterative refinement has failed). \item on\_demand\_reuse: As on\_demand, but reuse scaling from previous itr \item high\_delay: Scaling to be used after more than 0.05*n delays are present \item high\_delay\_reuse: Scaling to be used only when previous itr created more that 0.05*n additional delays, otherwise reuse scaling from previous itr \item od\_hd: Combination of on\_demand and high\_delay \item od\_hd\_reuse: Combination of on\_demand\_reuse and high\_delay\_reuse \end{itemize} \paragraph{ma97\_switch3:}\label{opt:ma97_switch3} Third switch, determine when ma97\_scaling3 is enabled. \\ If ma97\_scaling=dynamic, ma97\_scaling3 is enabled according to this condition. The default value for this string option is "never". \\ Possible values: \begin{itemize} \item never: Scaling is never enabled. \item at\_start: Scaling to be used from the very start. \item at\_start\_reuse: Scaling to be used on first iteration, then reused thereafter. \item on\_demand: Scaling to be used after Ipopt request improved solution (i.e. iterative refinement has failed). \item on\_demand\_reuse: As on\_demand, but reuse scaling from previous itr \item high\_delay: Scaling to be used after more than 0.05*n delays are present \item high\_delay\_reuse: Scaling to be used only when previous itr created more that 0.05*n additional delays, otherwise reuse scaling from previous itr \item od\_hd: Combination of on\_demand and high\_delay \item od\_hd\_reuse: Combination of on\_demand\_reuse and high\_delay\_reuse \end{itemize} \paragraph{ma97\_u:}\label{opt:ma97_u} Pivoting Threshold \\ See MA97 documentation. The valid range for this real option is $0 \le {\tt ma97\_u } \le 0.5$ and its default value is $1 \cdot 10^{-08}$. \paragraph{ma97\_umax:}\label{opt:ma97_umax} Maximum Pivoting Threshold \\ See MA97 documentation. The valid range for this real option is $0 \le {\tt ma97\_umax } \le 0.5$ and its default value is $0.0001$. \subsection{Mumps Linear Solver} \label{sec:MumpsLinearSolver} \htmlanchor{sec:MumpsLinearSolver} \paragraph{mumps\_dep\_tol:}\label{opt:mumps_dep_tol} Pivot threshold for detection of linearly dependent constraints in MUMPS. \\ When MUMPS is used to determine linearly dependent constraints, this is determines the threshold for a pivot to be considered zero. This is CNTL(3) in MUMPS. The valid range for this real option is ${\tt -inf} < {\tt mumps\_dep\_tol } < {\tt +inf}$ and its default value is $0$. \paragraph{mumps\_mem\_percent:}\label{opt:mumps_mem_percent} Percentage increase in the estimated working space for MUMPS. \\ In MUMPS when significant extra fill-in is caused by numerical pivoting, larger values of mumps\_mem\_percent may help use the workspace more efficiently. On the other hand, if memory requirement are too large at the very beginning of the optimization, choosing a much smaller value for this option, such as 5, might reduce memory requirements. The valid range for this integer option is $0 \le {\tt mumps\_mem\_percent } < {\tt +inf}$ and its default value is $1000$. \paragraph{mumps\_permuting\_scaling:}\label{opt:mumps_permuting_scaling} Controls permuting and scaling in MUMPS \\ This is ICNTL(6) in MUMPS. The valid range for this integer option is $0 \le {\tt mumps\_permuting\_scaling } \le 7$ and its default value is $7$. \paragraph{mumps\_pivot\_order:}\label{opt:mumps_pivot_order} Controls pivot order in MUMPS \\ This is ICNTL(7) in MUMPS. The valid range for this integer option is $0 \le {\tt mumps\_pivot\_order } \le 7$ and its default value is $7$. \paragraph{mumps\_pivtol:}\label{opt:mumps_pivtol} Pivot tolerance for the linear solver MUMPS. \\ A smaller number pivots for sparsity, a larger number pivots for stability. This option is only available if Ipopt has been compiled with MUMPS. The valid range for this real option is $0 \le {\tt mumps\_pivtol } \le 1$ and its default value is $1 \cdot 10^{-06}$. \paragraph{mumps\_pivtolmax:}\label{opt:mumps_pivtolmax} Maximum pivot tolerance for the linear solver MUMPS. \\ Ipopt may increase pivtol as high as pivtolmax to get a more accurate solution to the linear system. This option is only available if Ipopt has been compiled with MUMPS. The valid range for this real option is $0 \le {\tt mumps\_pivtolmax } \le 1$ and its default value is $0.1$. \paragraph{mumps\_scaling:}\label{opt:mumps_scaling} Controls scaling in MUMPS \\ This is ICNTL(8) in MUMPS. The valid range for this integer option is $-2 \le {\tt mumps\_scaling } \le 77$ and its default value is $77$. \subsection{NLP} \label{sec:NLP} \htmlanchor{sec:NLP} \paragraph{bound\_relax\_factor:}\label{opt:bound_relax_factor} Factor for initial relaxation of the bounds. \\ Before start of the optimization, the bounds given by the user are relaxed. This option sets the factor for this relaxation. If it is set to zero, then then bounds relaxation is disabled. (See Eqn.(35) in implementation paper.) The valid range for this real option is $0 \le {\tt bound\_relax\_factor } < {\tt +inf}$ and its default value is $1 \cdot 10^{-08}$. \paragraph{check\_derivatives\_for\_naninf:}\label{opt:check_derivatives_for_naninf} Indicates whether it is desired to check for Nan/Inf in derivative matrices \\ Activating this option will cause an error if an invalid number is detected in the constraint Jacobians or the Lagrangian Hessian. If this is not activated, the test is skipped, and the algorithm might proceed with invalid numbers and fail. If test is activated and an invalid number is detected, the matrix is written to output with print\_level corresponding to J\_MORE\_DETAILED; so beware of large output! The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: Don't check (faster). \item yes: Check Jacobians and Hessian for Nan and Inf. \end{itemize} \paragraph{dependency\_detection\_with\_rhs:}\label{opt:dependency_detection_with_rhs} Indicates if the right hand sides of the constraints should be considered during dependency detection \\ The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: only look at gradients \item yes: also consider right hand side \end{itemize} \paragraph{dependency\_detector:}\label{opt:dependency_detector} Indicates which linear solver should be used to detect linearly dependent equality constraints. \\ The default and available choices depend on how Ipopt has been compiled. This is experimental and does not work well. The default value for this string option is "none". \\ Possible values: \begin{itemize} \item none: don't check; no extra work at beginning \item mumps: use MUMPS \item wsmp: use WSMP \item ma28: use MA28 \end{itemize} \paragraph{fixed\_variable\_treatment:}\label{opt:fixed_variable_treatment} Determines how fixed variables should be handled. \\ The main difference between those options is that the starting point in the "make\_constraint" case still has the fixed variables at their given values, whereas in the case "make\_parameter" the functions are always evaluated with the fixed values for those variables. Also, for "relax\_bounds", the fixing bound constraints are relaxed (according to" bound\_relax\_factor"). For both "make\_constraints" and "relax\_bounds", bound multipliers are computed for the fixed variables. The default value for this string option is "make\_parameter". \\ Possible values: \begin{itemize} \item make\_parameter: Remove fixed variable from optimization variables \item make\_constraint: Add equality constraints fixing variables \item relax\_bounds: Relax fixing bound constraints \end{itemize} \paragraph{hessian\_constant:}\label{opt:hessian_constant} Indicates whether the problem is a quadratic problem \\ Activating this option will cause Ipopt to ask for the Hessian of the Lagrangian function only once from the NLP and reuse this information later. The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: Assume that Hessian changes \item yes: Assume that Hessian is constant \end{itemize} \paragraph{honor\_original\_bounds:}\label{opt:honor_original_bounds} Indicates whether final points should be projected into original bounds. \\ Ipopt might relax the bounds during the optimization (see, e.g., option "bound\_relax\_factor"). This option determines whether the final point should be projected back into the user-provide original bounds after the optimization. The default value for this string option is "yes". \\ Possible values: \begin{itemize} \item no: Leave final point unchanged \item yes: Project final point back into original bounds \end{itemize} \paragraph{jac\_c\_constant:}\label{opt:jac_c_constant} Indicates whether all equality constraints are linear \\ Activating this option will cause Ipopt to ask for the Jacobian of the equality constraints only once from the NLP and reuse this information later. The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: Don't assume that all equality constraints are linear \item yes: Assume that equality constraints Jacobian are constant \end{itemize} \paragraph{jac\_d\_constant:}\label{opt:jac_d_constant} Indicates whether all inequality constraints are linear \\ Activating this option will cause Ipopt to ask for the Jacobian of the inequality constraints only once from the NLP and reuse this information later. The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: Don't assume that all inequality constraints are linear \item yes: Assume that equality constraints Jacobian are constant \end{itemize} \paragraph{kappa\_d:}\label{opt:kappa_d} Weight for linear damping term (to handle one-sided bounds). \\ (see Section 3.7 in implementation paper.) The valid range for this real option is $0 \le {\tt kappa\_d } < {\tt +inf}$ and its default value is $1 \cdot 10^{-05}$. \paragraph{nlp\_lower\_bound\_inf:}\label{opt:nlp_lower_bound_inf} any bound less or equal this value will be considered -inf (i.e. not lower bounded). \\ The valid range for this real option is ${\tt -inf} < {\tt nlp\_lower\_bound\_inf } < {\tt +inf}$ and its default value is $-1 \cdot 10^{+19}$. \paragraph{nlp\_upper\_bound\_inf:}\label{opt:nlp_upper_bound_inf} any bound greater or this value will be considered +inf (i.e. not upper bounded). \\ The valid range for this real option is ${\tt -inf} < {\tt nlp\_upper\_bound\_inf } < {\tt +inf}$ and its default value is $1 \cdot 10^{+19}$. \paragraph{num\_linear\_variables:}\label{opt:num_linear_variables} Number of linear variables \\ When the Hessian is approximated, it is assumed that the first num\_linear\_variables variables are linear. The Hessian is then not approximated in this space. If the get\_number\_of\_nonlinear\_variables method in the TNLP is implemented, this option is ignored. The valid range for this integer option is $0 \le {\tt num\_linear\_variables } < {\tt +inf}$ and its default value is $0$. \subsection{NLP Scaling} \label{sec:NLPScaling} \htmlanchor{sec:NLPScaling} \paragraph{nlp\_scaling\_constr\_target\_gradient:}\label{opt:nlp_scaling_constr_target_gradient} Target value for constraint function gradient size. \\ If a positive number is chosen, the scaling factor the constraint functions is computed so that the gradient has the max norm of the given size at the starting point. This overrides nlp\_scaling\_max\_gradient for the constraint functions. The valid range for this real option is $0 \le {\tt nlp\_scaling\_constr\_target\_gradient } < {\tt +inf}$ and its default value is $0$. \paragraph{nlp\_scaling\_max\_gradient:}\label{opt:nlp_scaling_max_gradient} Maximum gradient after NLP scaling. \\ This is the gradient scaling cut-off. If the maximum gradient is above this value, then gradient based scaling will be performed. Scaling parameters are calculated to scale the maximum gradient back to this value. (This is g\_max in Section 3.8 of the implementation paper.) Note: This option is only used if "nlp\_scaling\_method" is chosen as "gradient-based". The valid range for this real option is $0 < {\tt nlp\_scaling\_max\_gradient } < {\tt +inf}$ and its default value is $100$. \paragraph{nlp\_scaling\_method:}\label{opt:nlp_scaling_method} Select the technique used for scaling the NLP. \\ Selects the technique used for scaling the problem internally before it is solved. For user-scaling, the parameters come from the NLP. If you are using AMPL, they can be specified through suffixes ("scaling\_factor") The default value for this string option is "gradient-based". \\ Possible values: \begin{itemize} \item none: no problem scaling will be performed \item user-scaling: scaling parameters will come from the user \item gradient-based: scale the problem so the maximum gradient at the starting point is scaling\_max\_gradient \item equilibration-based: scale the problem so that first derivatives are of order 1 at random points (only available with MC19) \end{itemize} \paragraph{nlp\_scaling\_min\_value:}\label{opt:nlp_scaling_min_value} Minimum value of gradient-based scaling values. \\ This is the lower bound for the scaling factors computed by gradient-based scaling method. If some derivatives of some functions are huge, the scaling factors will otherwise become very small, and the (unscaled) final constraint violation, for example, might then be significant. Note: This option is only used if "nlp\_scaling\_method" is chosen as "gradient-based". The valid range for this real option is $0 \le {\tt nlp\_scaling\_min\_value } < {\tt +inf}$ and its default value is $1 \cdot 10^{-08}$. \paragraph{nlp\_scaling\_obj\_target\_gradient:}\label{opt:nlp_scaling_obj_target_gradient} Target value for objective function gradient size. \\ If a positive number is chosen, the scaling factor the objective function is computed so that the gradient has the max norm of the given size at the starting point. This overrides nlp\_scaling\_max\_gradient for the objective function. The valid range for this real option is $0 \le {\tt nlp\_scaling\_obj\_target\_gradient } < {\tt +inf}$ and its default value is $0$. \paragraph{obj\_scaling\_factor:}\label{opt:obj_scaling_factor} Scaling factor for the objective function. \\ This option sets a scaling factor for the objective function. The scaling is seen internally by Ipopt but the unscaled objective is reported in the console output. If additional scaling parameters are computed (e.g. user-scaling or gradient-based), both factors are multiplied. If this value is chosen to be negative, Ipopt will maximize the objective function instead of minimizing it. The valid range for this real option is ${\tt -inf} < {\tt obj\_scaling\_factor } < {\tt +inf}$ and its default value is $1$. \subsection{Output} \label{sec:Output} \htmlanchor{sec:Output} \paragraph{file\_print\_level:}\label{opt:file_print_level} Verbosity level for output file. \\ NOTE: This option only works when read from the ipopt.opt options file! Determines the verbosity level for the file specified by "output\_file". By default it is the same as "print\_level". The valid range for this integer option is $0 \le {\tt file\_print\_level } \le 12$ and its default value is $5$. \paragraph{inf\_pr\_output:}\label{opt:inf_pr_output} Determines what value is printed in the "inf\_pr" output column. \\ Ipopt works with a reformulation of the original problem, where slacks are introduced and the problem might have been scaled. The choice "internal" prints out the constraint violation of this formulation. With "original" the true constraint violation in the original NLP is printed. The default value for this string option is "original". \\ Possible values: \begin{itemize} \item internal: max-norm of violation of internal equality constraints \item original: maximal constraint violation in original NLP \end{itemize} \paragraph{option\_file\_name:}\label{opt:option_file_name} File name of options file (to overwrite default). \\ By default, the name of the Ipopt options file is "ipopt.opt" - or something else if specified in the IpoptApplication::Initialize call. If this option is set by SetStringValue BEFORE the options file is read, it specifies the name of the options file. It does not make any sense to specify this option within the options file. The default value for this string option is "". \\ Possible values: \begin{itemize} \item *: Any acceptable standard file name \end{itemize} \paragraph{output\_file:}\label{opt:output_file} File name of desired output file (leave unset for no file output). \\ NOTE: This option only works when read from the ipopt.opt options file! An output file with this name will be written (leave unset for no file output). The verbosity level is by default set to "print\_level", but can be overridden with "file\_print\_level". The file name is changed to use only small letters. The default value for this string option is "". \\ Possible values: \begin{itemize} \item *: Any acceptable standard file name \end{itemize} \paragraph{print\_frequency\_iter:}\label{opt:print_frequency_iter} Determines at which iteration frequency the summarizing iteration output line should be printed. \\ Summarizing iteration output is printed every print\_frequency\_iter iterations, if at least print\_frequency\_time seconds have passed since last output. The valid range for this integer option is $1 \le {\tt print\_frequency\_iter } < {\tt +inf}$ and its default value is $1$. \paragraph{print\_frequency\_time:}\label{opt:print_frequency_time} Determines at which time frequency the summarizing iteration output line should be printed. \\ Summarizing iteration output is printed if at least print\_frequency\_time seconds have passed since last output and the iteration number is a multiple of print\_frequency\_iter. The valid range for this real option is $0 \le {\tt print\_frequency\_time } < {\tt +inf}$ and its default value is $0$. \paragraph{print\_info\_string:}\label{opt:print_info_string} Enables printing of additional info string at end of iteration output. \\ This string contains some insider information about the current iteration. For details, look for "Diagnostic Tags" in the Ipopt documentation. The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: don't print string \item yes: print string at end of each iteration output \end{itemize} \paragraph{print\_level:}\label{opt:print_level} Output verbosity level. \\ Sets the default verbosity level for console output. The larger this value the more detailed is the output. The valid range for this integer option is $0 \le {\tt print\_level } \le 12$ and its default value is $5$. \paragraph{print\_options\_documentation:}\label{opt:print_options_documentation} Switch to print all algorithmic options. \\ If selected, the algorithm will print the list of all available algorithmic options with some documentation before solving the optimization problem. The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: don't print list \item yes: print list \end{itemize} \paragraph{print\_timing\_statistics:}\label{opt:print_timing_statistics} Switch to print timing statistics. \\ If selected, the program will print the CPU usage (user time) for selected tasks. The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: don't print statistics \item yes: print all timing statistics \end{itemize} \paragraph{print\_user\_options:}\label{opt:print_user_options} Print all options set by the user. \\ If selected, the algorithm will print the list of all options set by the user including their values and whether they have been used. In some cases this information might be incorrect, due to the internal program flow. The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: don't print options \item yes: print options \end{itemize} \paragraph{replace\_bounds:}\label{opt:replace_bounds} Indicates if all variable bounds should be replaced by inequality constraints \\ This option must be set for the inexact algorithm The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: leave bounds on variables \item yes: replace variable bounds by inequality constraints \end{itemize} \paragraph{skip\_finalize\_solution\_call:}\label{opt:skip_finalize_solution_call} Indicates if call to NLP::FinalizeSolution after optimization should be suppressed \\ In some Ipopt applications, the user might want to call the FinalizeSolution method separately. Setting this option to "yes" will cause the IpoptApplication object to suppress the default call to that method. The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: call FinalizeSolution \item yes: do not call FinalizeSolution \end{itemize} \subsection{Pardiso Linear Solver} \label{sec:PardisoLinearSolver} \htmlanchor{sec:PardisoLinearSolver} \paragraph{pardiso\_iter\_coarse\_size:}\label{opt:pardiso_iter_coarse_size} Maximum Size of Coarse Grid Matrix \\ DPARM(3) The valid range for this integer option is $1 \le {\tt pardiso\_iter\_coarse\_size } < {\tt +inf}$ and its default value is $5000$. \paragraph{pardiso\_iter\_dropping\_factor:}\label{opt:pardiso_iter_dropping_factor} dropping value for incomplete factor \\ DPARM(5) The valid range for this real option is $0 < {\tt pardiso\_iter\_dropping\_factor } < 1$ and its default value is $0.5$. \paragraph{pardiso\_iter\_dropping\_schur:}\label{opt:pardiso_iter_dropping_schur} dropping value for sparsify schur complement factor \\ DPARM(6) The valid range for this real option is $0 < {\tt pardiso\_iter\_dropping\_schur } < 1$ and its default value is $0.1$. \paragraph{pardiso\_iter\_inverse\_norm\_factor:}\label{opt:pardiso_iter_inverse_norm_factor} ~ \\ DPARM(8) The valid range for this real option is $1 < {\tt pardiso\_iter\_inverse\_norm\_factor } < {\tt +inf}$ and its default value is $5 \cdot 10^{+06}$. \paragraph{pardiso\_iter\_max\_levels:}\label{opt:pardiso_iter_max_levels} Maximum Size of Grid Levels \\ DPARM(4) The valid range for this integer option is $1 \le {\tt pardiso\_iter\_max\_levels } < {\tt +inf}$ and its default value is $10$. \paragraph{pardiso\_iter\_max\_row\_fill:}\label{opt:pardiso_iter_max_row_fill} max fill for each row \\ DPARM(7) The valid range for this integer option is $1 \le {\tt pardiso\_iter\_max\_row\_fill } < {\tt +inf}$ and its default value is $10000000$. \paragraph{pardiso\_iter\_relative\_tol:}\label{opt:pardiso_iter_relative_tol} Relative Residual Convergence \\ DPARM(2) The valid range for this real option is $0 < {\tt pardiso\_iter\_relative\_tol } < 1$ and its default value is $1 \cdot 10^{-06}$. \paragraph{pardiso\_iterative:}\label{opt:pardiso_iterative} Switch on iterative solver in Pardiso library \\ The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no \item yes \end{itemize} \paragraph{pardiso\_matching\_strategy:}\label{opt:pardiso_matching_strategy} Matching strategy to be used by Pardiso \\ This is IPAR(13) in Pardiso manual. This option is only available if Ipopt has been compiled with Pardiso. The default value for this string option is "complete+2x2". \\ Possible values: \begin{itemize} \item complete: Match complete (IPAR(13)=1) \item complete+2x2: Match complete+2x2 (IPAR(13)=2) \item constraints: Match constraints (IPAR(13)=3) \end{itemize} \paragraph{pardiso\_max\_droptol\_corrections:}\label{opt:pardiso_max_droptol_corrections} Maximal number of decreases of drop tolerance during one solve. \\ This is relevant only for iterative Pardiso options. The valid range for this integer option is $1 \le {\tt pardiso\_max\_droptol\_corrections } < {\tt +inf}$ and its default value is $4$. \paragraph{pardiso\_max\_iter:}\label{opt:pardiso_max_iter} Maximum number of Krylov-Subspace Iteration \\ DPARM(1) The valid range for this integer option is $1 \le {\tt pardiso\_max\_iter } < {\tt +inf}$ and its default value is $500$. \paragraph{pardiso\_msglvl:}\label{opt:pardiso_msglvl} Pardiso message level \\ This determines the amount of analysis output from the Pardiso solver. This is MSGLVL in the Pardiso manual. The valid range for this integer option is $0 \le {\tt pardiso\_msglvl } < {\tt +inf}$ and its default value is $0$. \paragraph{pardiso\_out\_of\_core\_power:}\label{opt:pardiso_out_of_core_power} Enables out-of-core variant of Pardiso \\ Setting this option to a positive integer k makes Pardiso work in the out-of-core variant where the factor is split in 2\^k subdomains. This is IPARM(50) in the Pardiso manual. This option is only available if Ipopt has been compiled with Pardiso. The valid range for this integer option is $0 \le {\tt pardiso\_out\_of\_core\_power } < {\tt +inf}$ and its default value is $0$. \paragraph{pardiso\_redo\_symbolic\_fact\_only\_if\_inertia\_wrong:}\label{opt:pardiso_redo_symbolic_fact_only_if_inertia_wrong} Toggle for handling case when elements were perturbed by Pardiso. \\ This option is only available if Ipopt has been compiled with Pardiso. The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: Always redo symbolic factorization when elements were perturbed \item yes: Only redo symbolic factorization when elements were perturbed if also the inertia was wrong \end{itemize} \paragraph{pardiso\_repeated\_perturbation\_means\_singular:}\label{opt:pardiso_repeated_perturbation_means_singular} Interpretation of perturbed elements. \\ This option is only available if Ipopt has been compiled with Pardiso. The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: Don't assume that matrix is singular if elements were perturbed after recent symbolic factorization \item yes: Assume that matrix is singular if elements were perturbed after recent symbolic factorization \end{itemize} \paragraph{pardiso\_skip\_inertia\_check:}\label{opt:pardiso_skip_inertia_check} Always pretend inertia is correct. \\ Setting this option to "yes" essentially disables inertia check. This option makes the algorithm non-robust and easily fail, but it might give some insight into the necessity of inertia control. The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: check inertia \item yes: skip inertia check \end{itemize} \subsection{Restoration Phase} \label{sec:RestorationPhase} \htmlanchor{sec:RestorationPhase} \paragraph{bound\_mult\_reset\_threshold:}\label{opt:bound_mult_reset_threshold} Threshold for resetting bound multipliers after the restoration phase. \\ After returning from the restoration phase, the bound multipliers are updated with a Newton step for complementarity. Here, the change in the primal variables during the entire restoration phase is taken to be the corresponding primal Newton step. However, if after the update the largest bound multiplier exceeds the threshold specified by this option, the multipliers are all reset to 1. The valid range for this real option is $0 \le {\tt bound\_mult\_reset\_threshold } < {\tt +inf}$ and its default value is $1000$. \paragraph{constr\_mult\_reset\_threshold:}\label{opt:constr_mult_reset_threshold} Threshold for resetting equality and inequality multipliers after restoration phase. \\ After returning from the restoration phase, the constraint multipliers are recomputed by a least square estimate. This option triggers when those least-square estimates should be ignored. The valid range for this real option is $0 \le {\tt constr\_mult\_reset\_threshold } < {\tt +inf}$ and its default value is $0$. \paragraph{evaluate\_orig\_obj\_at\_resto\_trial:}\label{opt:evaluate_orig_obj_at_resto_trial} Determines if the original objective function should be evaluated at restoration phase trial points. \\ Setting this option to "yes" makes the restoration phase algorithm evaluate the objective function of the original problem at every trial point encountered during the restoration phase, even if this value is not required. In this way, it is guaranteed that the original objective function can be evaluated without error at all accepted iterates; otherwise the algorithm might fail at a point where the restoration phase accepts an iterate that is good for the restoration phase problem, but not the original problem. On the other hand, if the evaluation of the original objective is expensive, this might be costly. The default value for this string option is "yes". \\ Possible values: \begin{itemize} \item no: skip evaluation \item yes: evaluate at every trial point \end{itemize} \paragraph{expect\_infeasible\_problem:}\label{opt:expect_infeasible_problem} Enable heuristics to quickly detect an infeasible problem. \\ This options is meant to activate heuristics that may speed up the infeasibility determination if you expect that there is a good chance for the problem to be infeasible. In the filter line search procedure, the restoration phase is called more quickly than usually, and more reduction in the constraint violation is enforced before the restoration phase is left. If the problem is square, this option is enabled automatically. The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: the problem probably be feasible \item yes: the problem has a good chance to be infeasible \end{itemize} \paragraph{expect\_infeasible\_problem\_ctol:}\label{opt:expect_infeasible_problem_ctol} Threshold for disabling "expect\_infeasible\_problem" option. \\ If the constraint violation becomes smaller than this threshold, the "expect\_infeasible\_problem" heuristics in the filter line search are disabled. If the problem is square, this options is set to 0. The valid range for this real option is $0 \le {\tt expect\_infeasible\_problem\_ctol } < {\tt +inf}$ and its default value is $0.001$. \paragraph{expect\_infeasible\_problem\_ytol:}\label{opt:expect_infeasible_problem_ytol} Multiplier threshold for activating "expect\_infeasible\_problem" option. \\ If the max norm of the constraint multipliers becomes larger than this value and "expect\_infeasible\_problem" is chosen, then the restoration phase is entered. The valid range for this real option is $0 < {\tt expect\_infeasible\_problem\_ytol } < {\tt +inf}$ and its default value is $1 \cdot 10^{+08}$. \paragraph{max\_resto\_iter:}\label{opt:max_resto_iter} Maximum number of successive iterations in restoration phase. \\ The algorithm terminates with an error message if the number of iterations successively taken in the restoration phase exceeds this number. The valid range for this integer option is $0 \le {\tt max\_resto\_iter } < {\tt +inf}$ and its default value is $3000000$. \paragraph{max\_soft\_resto\_iters:}\label{opt:max_soft_resto_iters} Maximum number of iterations performed successively in soft restoration phase. \\ If the soft restoration phase is performed for more than so many iterations in a row, the regular restoration phase is called. The valid range for this integer option is $0 \le {\tt max\_soft\_resto\_iters } < {\tt +inf}$ and its default value is $10$. \paragraph{required\_infeasibility\_reduction:}\label{opt:required_infeasibility_reduction} Required reduction of infeasibility before leaving restoration phase. \\ The restoration phase algorithm is performed, until a point is found that is acceptable to the filter and the infeasibility has been reduced by at least the fraction given by this option. The valid range for this real option is $0 \le {\tt required\_infeasibility\_reduction } < 1$ and its default value is $0.9$. \paragraph{resto\_failure\_feasibility\_threshold:}\label{opt:resto_failure_feasibility_threshold} Threshold for primal infeasibility to declare failure of restoration phase. \\ If the restoration phase is terminated because of the "acceptable" termination criteria and the primal infeasibility is smaller than this value, the restoration phase is declared to have failed. The default value is 1e2*tol, where tol is the general termination tolerance. The valid range for this real option is $0 \le {\tt resto\_failure\_feasibility\_threshold } < {\tt +inf}$ and its default value is $0$. \paragraph{resto\_penalty\_parameter:}\label{opt:resto_penalty_parameter} Penalty parameter in the restoration phase objective function. \\ This is the parameter rho in equation (31a) in the Ipopt implementation paper. The valid range for this real option is $0 < {\tt resto\_penalty\_parameter } < {\tt +inf}$ and its default value is $1000$. \paragraph{resto\_proximity\_weight:}\label{opt:resto_proximity_weight} Weighting factor for the proximity term in restoration phase objective. \\ This determines how the parameter zera in equation (29a) in the implementation paper is computed. zeta here is resto\_proximity\_weight*sqrt(mu), where mu is the current barrier parameter. The valid range for this real option is $0 \le {\tt resto\_proximity\_weight } < {\tt +inf}$ and its default value is $1$. \paragraph{soft\_resto\_pderror\_reduction\_factor:}\label{opt:soft_resto_pderror_reduction_factor} Required reduction in primal-dual error in the soft restoration phase. \\ The soft restoration phase attempts to reduce the primal-dual error with regular steps. If the damped primal-dual step (damped only to satisfy the fraction-to-the-boundary rule) is not decreasing the primal-dual error by at least this factor, then the regular restoration phase is called. Choosing "0" here disables the soft restoration phase. The valid range for this real option is $0 \le {\tt soft\_resto\_pderror\_reduction\_factor } < {\tt +inf}$ and its default value is $0.9999$. \paragraph{start\_with\_resto:}\label{opt:start_with_resto} Tells algorithm to switch to restoration phase in first iteration. \\ Setting this option to "yes" forces the algorithm to switch to the feasibility restoration phase in the first iteration. If the initial point is feasible, the algorithm will abort with a failure. The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: don't force start in restoration phase \item yes: force start in restoration phase \end{itemize} \subsection{Step Calculation} \label{sec:StepCalculation} \htmlanchor{sec:StepCalculation} \paragraph{fast\_step\_computation:}\label{opt:fast_step_computation} Indicates if the linear system should be solved quickly. \\ If set to yes, the algorithm assumes that the linear system that is solved to obtain the search direction, is solved sufficiently well. In that case, no residuals are computed, and the computation of the search direction is a little faster. The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: Verify solution of linear system by computing residuals. \item yes: Trust that linear systems are solved well. \end{itemize} \paragraph{first\_hessian\_perturbation:}\label{opt:first_hessian_perturbation} Size of first x-s perturbation tried. \\ The first value tried for the x-s perturbation in the inertia correction scheme.(This is delta\_0 in the implementation paper.) The valid range for this real option is $0 < {\tt first\_hessian\_perturbation } < {\tt +inf}$ and its default value is $0.0001$. \paragraph{jacobian\_regularization\_exponent:}\label{opt:jacobian_regularization_exponent} Exponent for mu in the regularization for rank-deficient constraint Jacobians. \\ (This is kappa\_c in the implementation paper.) The valid range for this real option is $0 \le {\tt jacobian\_regularization\_exponent } < {\tt +inf}$ and its default value is $0.25$. \paragraph{jacobian\_regularization\_value:}\label{opt:jacobian_regularization_value} Size of the regularization for rank-deficient constraint Jacobians. \\ (This is bar delta\_c in the implementation paper.) The valid range for this real option is $0 \le {\tt jacobian\_regularization\_value } < {\tt +inf}$ and its default value is $1 \cdot 10^{-08}$. \paragraph{max\_hessian\_perturbation:}\label{opt:max_hessian_perturbation} Maximum value of regularization parameter for handling negative curvature. \\ In order to guarantee that the search directions are indeed proper descent directions, Ipopt requires that the inertia of the (augmented) linear system for the step computation has the correct number of negative and positive eigenvalues. The idea is that this guides the algorithm away from maximizers and makes Ipopt more likely converge to first order optimal points that are minimizers. If the inertia is not correct, a multiple of the identity matrix is added to the Hessian of the Lagrangian in the augmented system. This parameter gives the maximum value of the regularization parameter. If a regularization of that size is not enough, the algorithm skips this iteration and goes to the restoration phase. (This is delta\_w\^max in the implementation paper.) The valid range for this real option is $0 < {\tt max\_hessian\_perturbation } < {\tt +inf}$ and its default value is $1 \cdot 10^{+20}$. \paragraph{max\_refinement\_steps:}\label{opt:max_refinement_steps} Maximum number of iterative refinement steps per linear system solve. \\ Iterative refinement (on the full unsymmetric system) is performed for each right hand side. This option determines the maximum number of iterative refinement steps. The valid range for this integer option is $0 \le {\tt max\_refinement\_steps } < {\tt +inf}$ and its default value is $10$. \paragraph{mehrotra\_algorithm:}\label{opt:mehrotra_algorithm} Indicates if we want to do Mehrotra's algorithm. \\ If set to yes, Ipopt runs as Mehrotra's predictor-corrector algorithm. This works usually very well for LPs and convex QPs. This automatically disables the line search, and chooses the (unglobalized) adaptive mu strategy with the "probing" oracle, and uses "corrector\_type=affine" without any safeguards; you should not set any of those options explicitly in addition. Also, unless otherwise specified, the values of "bound\_push", "bound\_frac", and "bound\_mult\_init\_val" are set more aggressive, and sets "alpha\_for\_y=bound\_mult". The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: Do the usual Ipopt algorithm. \item yes: Do Mehrotra's predictor-corrector algorithm. \end{itemize} \paragraph{min\_hessian\_perturbation:}\label{opt:min_hessian_perturbation} Smallest perturbation of the Hessian block. \\ The size of the perturbation of the Hessian block is never selected smaller than this value, unless no perturbation is necessary. (This is delta\_w\^min in implementation paper.) The valid range for this real option is $0 \le {\tt min\_hessian\_perturbation } < {\tt +inf}$ and its default value is $1 \cdot 10^{-20}$. \paragraph{min\_refinement\_steps:}\label{opt:min_refinement_steps} Minimum number of iterative refinement steps per linear system solve. \\ Iterative refinement (on the full unsymmetric system) is performed for each right hand side. This option determines the minimum number of iterative refinements (i.e. at least "min\_refinement\_steps" iterative refinement steps are enforced per right hand side.) The valid range for this integer option is $0 \le {\tt min\_refinement\_steps } < {\tt +inf}$ and its default value is $1$. \paragraph{neg\_curv\_test\_tol:}\label{opt:neg_curv_test_tol} Tolerance for heuristic to ignore wrong inertia. \\ If positive, incorrect inertia in the augmented system is ignored, and we test if the direction is a direction of positive curvature. This tolerance determines when the direction is considered to be sufficiently positive. The valid range for this real option is $0 < {\tt neg\_curv\_test\_tol } < {\tt +inf}$ and its default value is $0$. \paragraph{perturb\_always\_cd:}\label{opt:perturb_always_cd} Active permanent perturbation of constraint linearization. \\ This options makes the delta\_c and delta\_d perturbation be used for the computation of every search direction. Usually, it is only used when the iteration matrix is singular. The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: perturbation only used when required \item yes: always use perturbation \end{itemize} \paragraph{perturb\_dec\_fact:}\label{opt:perturb_dec_fact} Decrease factor for x-s perturbation. \\ The factor by which the perturbation is decreased when a trial value is deduced from the size of the most recent successful perturbation. (This is kappa\_w\^- in the implementation paper.) The valid range for this real option is $0 < {\tt perturb\_dec\_fact } < 1$ and its default value is $0.333333$. \paragraph{perturb\_inc\_fact:}\label{opt:perturb_inc_fact} Increase factor for x-s perturbation. \\ The factor by which the perturbation is increased when a trial value was not sufficient - this value is used for the computation of all perturbations except for the first. (This is kappa\_w\^+ in the implementation paper.) The valid range for this real option is $1 < {\tt perturb\_inc\_fact } < {\tt +inf}$ and its default value is $8$. \paragraph{perturb\_inc\_fact\_first:}\label{opt:perturb_inc_fact_first} Increase factor for x-s perturbation for very first perturbation. \\ The factor by which the perturbation is increased when a trial value was not sufficient - this value is used for the computation of the very first perturbation and allows a different value for for the first perturbation than that used for the remaining perturbations. (This is bar\_kappa\_w\^+ in the implementation paper.) The valid range for this real option is $1 < {\tt perturb\_inc\_fact\_first } < {\tt +inf}$ and its default value is $100$. \paragraph{residual\_improvement\_factor:}\label{opt:residual_improvement_factor} Minimal required reduction of residual test ratio in iterative refinement. \\ If the improvement of the residual test ratio made by one iterative refinement step is not better than this factor, iterative refinement is aborted. The valid range for this real option is $0 < {\tt residual\_improvement\_factor } < {\tt +inf}$ and its default value is $1$. \paragraph{residual\_ratio\_max:}\label{opt:residual_ratio_max} Iterative refinement tolerance \\ Iterative refinement is performed until the residual test ratio is less than this tolerance (or until "max\_refinement\_steps" refinement steps are performed). The valid range for this real option is $0 < {\tt residual\_ratio\_max } < {\tt +inf}$ and its default value is $1 \cdot 10^{-10}$. \paragraph{residual\_ratio\_singular:}\label{opt:residual_ratio_singular} Threshold for declaring linear system singular after failed iterative refinement. \\ If the residual test ratio is larger than this value after failed iterative refinement, the algorithm pretends that the linear system is singular. The valid range for this real option is $0 < {\tt residual\_ratio\_singular } < {\tt +inf}$ and its default value is $1 \cdot 10^{-05}$. \subsection{Uncategorized} \label{sec:Uncategorized} \htmlanchor{sec:Uncategorized} \paragraph{warm\_start\_target\_mu:}\label{opt:warm_start_target_mu} Unsupported! \\ The valid range for this real option is ${\tt -inf} < {\tt warm\_start\_target\_mu } < {\tt +inf}$ and its default value is $0$. \subsection{Undocumented} \label{sec:Undocumented} \htmlanchor{sec:Undocumented} \paragraph{adaptive\_mu\_safeguard\_factor:}\label{opt:adaptive_mu_safeguard_factor} ~ \\ The valid range for this real option is $0 \le {\tt adaptive\_mu\_safeguard\_factor } < {\tt +inf}$ and its default value is $0$. \paragraph{chi\_cup:}\label{opt:chi_cup} LIFENG WRITES THIS. \\ The valid range for this real option is $0 < {\tt chi\_cup } < {\tt +inf}$ and its default value is $1.5$. \paragraph{chi\_hat:}\label{opt:chi_hat} LIFENG WRITES THIS. \\ The valid range for this real option is $0 < {\tt chi\_hat } < {\tt +inf}$ and its default value is $2$. \paragraph{chi\_tilde:}\label{opt:chi_tilde} LIFENG WRITES THIS. \\ The valid range for this real option is $0 < {\tt chi\_tilde } < {\tt +inf}$ and its default value is $5$. \paragraph{delta\_y\_max:}\label{opt:delta_y_max} a parameter used to check if the fast direction can be used asthe line search direction (for Chen-Goldfarb line search). \\ The valid range for this real option is $0 < {\tt delta\_y\_max } < {\tt +inf}$ and its default value is $1 \cdot 10^{+12}$. \paragraph{epsilon\_c:}\label{opt:epsilon_c} LIFENG WRITES THIS. \\ The valid range for this real option is $0 < {\tt epsilon\_c } < {\tt +inf}$ and its default value is $0.01$. \paragraph{eta\_min:}\label{opt:eta_min} LIFENG WRITES THIS. \\ The valid range for this real option is $0 < {\tt eta\_min } < {\tt +inf}$ and its default value is $10$. \paragraph{eta\_penalty:}\label{opt:eta_penalty} Relaxation factor in the Armijo condition for the penalty function. \\ The valid range for this real option is $0 < {\tt eta\_penalty } < 0.5$ and its default value is $1 \cdot 10^{-08}$. \paragraph{fast\_des\_fact:}\label{opt:fast_des_fact} a parameter used to check if the fast direction can be used asthe line search direction (for Chen-Goldfarb line search). \\ The valid range for this real option is $0 < {\tt fast\_des\_fact } < {\tt +inf}$ and its default value is $0.1$. \paragraph{gamma\_hat:}\label{opt:gamma_hat} LIFENG WRITES THIS. \\ The valid range for this real option is $0 < {\tt gamma\_hat } < {\tt +inf}$ and its default value is $0.04$. \paragraph{gamma\_tilde:}\label{opt:gamma_tilde} LIFENG WRITES THIS. \\ The valid range for this real option is $0 < {\tt gamma\_tilde } < {\tt +inf}$ and its default value is $4$. \paragraph{kappa\_x\_dis:}\label{opt:kappa_x_dis} a parameter used to check if the fast direction can be used asthe line search direction (for Chen-Goldfarb line search). \\ The valid range for this real option is $0 < {\tt kappa\_x\_dis } < {\tt +inf}$ and its default value is $100$. \paragraph{kappa\_y\_dis:}\label{opt:kappa_y_dis} a parameter used to check if the fast direction can be used asthe line search direction (for Chen-Goldfarb line search). \\ The valid range for this real option is $0 < {\tt kappa\_y\_dis } < {\tt +inf}$ and its default value is $10000$. \paragraph{magic\_steps:}\label{opt:magic_steps} Enables magic steps. \\ DOESN'T REALLY WORK YET! The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: don't take magic steps \item yes: take magic steps \end{itemize} \paragraph{min\_alpha\_primal:}\label{opt:min_alpha_primal} LIFENG WRITES THIS. \\ The valid range for this real option is $0 < {\tt min\_alpha\_primal } < {\tt +inf}$ and its default value is $1 \cdot 10^{-13}$. \paragraph{mult\_diverg\_feasibility\_tol:}\label{opt:mult_diverg_feasibility_tol} tolerance for deciding if the multipliers are diverging \\ The valid range for this real option is $0 < {\tt mult\_diverg\_feasibility\_tol } < {\tt +inf}$ and its default value is $1 \cdot 10^{-07}$. \paragraph{mult\_diverg\_y\_tol:}\label{opt:mult_diverg_y_tol} tolerance for deciding if the multipliers are diverging \\ The valid range for this real option is $0 < {\tt mult\_diverg\_y\_tol } < {\tt +inf}$ and its default value is $1 \cdot 10^{+08}$. \paragraph{never\_use\_fact\_cgpen\_direction:}\label{opt:never_use_fact_cgpen_direction} Toggle to switch off the fast Chen-Goldfarb direction \\ The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: always compute the fast direction \item yes: never compute the fast direction \end{itemize} \paragraph{never\_use\_piecewise\_penalty\_ls:}\label{opt:never_use_piecewise_penalty_ls} Toggle to switch off the piecewise penalty method \\ The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: always use the piecewise penalty method \item yes: never use the piecewise penalty method \end{itemize} \paragraph{pen\_des\_fact:}\label{opt:pen_des_fact} a parameter used in penalty parameter computation (for Chen-Goldfarb line search). \\ The valid range for this real option is $0 < {\tt pen\_des\_fact } < {\tt +inf}$ and its default value is $0.2$. \paragraph{pen\_init\_fac:}\label{opt:pen_init_fac} a parameter used to choose initial penalty parameterswhen the regularized Newton method is used. \\ The valid range for this real option is $0 < {\tt pen\_init\_fac } < {\tt +inf}$ and its default value is $50$. \paragraph{pen\_theta\_max\_fact:}\label{opt:pen_theta_max_fact} Determines upper bound for constraint violation in the filter. \\ The algorithmic parameter theta\_max is determined as theta\_max\_fact times the maximum of 1 and the constraint violation at initial point. Any point with a constraint violation larger than theta\_max is unacceptable to the filter (see Eqn. (21) in implementation paper). The valid range for this real option is $0 < {\tt pen\_theta\_max\_fact } < {\tt +inf}$ and its default value is $10000$. \paragraph{penalty\_init\_max:}\label{opt:penalty_init_max} Maximal value for the intial penalty parameter (for Chen-Goldfarb line search). \\ The valid range for this real option is $0 < {\tt penalty\_init\_max } < {\tt +inf}$ and its default value is $100000$. \paragraph{penalty\_init\_min:}\label{opt:penalty_init_min} Minimal value for the intial penalty parameter for line search(for Chen-Goldfarb line search). \\ The valid range for this real option is $0 < {\tt penalty\_init\_min } < {\tt +inf}$ and its default value is $1$. \paragraph{penalty\_max:}\label{opt:penalty_max} Maximal value for the penalty parameter (for Chen-Goldfarb line search). \\ The valid range for this real option is $0 < {\tt penalty\_max } < {\tt +inf}$ and its default value is $1 \cdot 10^{+30}$. \paragraph{penalty\_update\_compl\_tol:}\label{opt:penalty_update_compl_tol} LIFENG WRITES THIS. \\ The valid range for this real option is $0 < {\tt penalty\_update\_compl\_tol } < {\tt +inf}$ and its default value is $10$. \paragraph{penalty\_update\_infeasibility\_tol:}\label{opt:penalty_update_infeasibility_tol} Threshold for infeasibility in penalty parameter update test. \\ If the new constraint violation is smaller than this tolerance, the penalty parameter is not increased. The valid range for this real option is $0 < {\tt penalty\_update\_infeasibility\_tol } < {\tt +inf}$ and its default value is $1 \cdot 10^{-09}$. \paragraph{piecewisepenalty\_gamma\_infeasi:}\label{opt:piecewisepenalty_gamma_infeasi} LIFENG WRITES THIS. \\ The valid range for this real option is $0 < {\tt piecewisepenalty\_gamma\_infeasi } < {\tt +inf}$ and its default value is $1 \cdot 10^{-13}$. \paragraph{piecewisepenalty\_gamma\_obj:}\label{opt:piecewisepenalty_gamma_obj} LIFENG WRITES THIS. \\ The valid range for this real option is $0 < {\tt piecewisepenalty\_gamma\_obj } < {\tt +inf}$ and its default value is $1 \cdot 10^{-13}$. \paragraph{print\_options\_latex\_mode:}\label{opt:print_options_latex_mode} Undocumented \\ Undocumented The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: Undocumented \item yes: Undocumented \end{itemize} \paragraph{suppress\_all\_output:}\label{opt:suppress_all_output} Undocumented \\ Undocumented The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: Undocumented \item yes: Undocumented \end{itemize} \paragraph{theta\_min:}\label{opt:theta_min} LIFENG WRITES THIS. \\ The valid range for this real option is $0 < {\tt theta\_min } < {\tt +inf}$ and its default value is $1 \cdot 10^{-06}$. \paragraph{vartheta:}\label{opt:vartheta} a parameter used to check if the fast direction can be used asthe line search direction (for Chen-Goldfarb line search). \\ The valid range for this real option is $0 < {\tt vartheta } < {\tt +inf}$ and its default value is $0.5$. \paragraph{wsmp\_iterative:}\label{opt:wsmp_iterative} Switches to iterative solver in WSMP. \\ EXPERIMENTAL! The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: use direct solver \item yes: use iterative solver \end{itemize} \subsection{Warm Start} \label{sec:WarmStart} \htmlanchor{sec:WarmStart} \paragraph{warm\_start\_bound\_frac:}\label{opt:warm_start_bound_frac} same as bound\_frac for the regular initializer. \\ The valid range for this real option is $0 < {\tt warm\_start\_bound\_frac } \le 0.5$ and its default value is $0.001$. \paragraph{warm\_start\_bound\_push:}\label{opt:warm_start_bound_push} same as bound\_push for the regular initializer. \\ The valid range for this real option is $0 < {\tt warm\_start\_bound\_push } < {\tt +inf}$ and its default value is $0.001$. \paragraph{warm\_start\_entire\_iterate:}\label{opt:warm_start_entire_iterate} Tells algorithm whether to use the GetWarmStartIterate method in the NLP. \\ The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: call GetStartingPoint in the NLP \item yes: call GetWarmStartIterate in the NLP \end{itemize} \paragraph{warm\_start\_init\_point:}\label{opt:warm_start_init_point} Warm-start for initial point \\ Indicates whether this optimization should use a warm start initialization, where values of primal and dual variables are given (e.g., from a previous optimization of a related problem.) The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: do not use the warm start initialization \item yes: use the warm start initialization \end{itemize} \paragraph{warm\_start\_mult\_bound\_push:}\label{opt:warm_start_mult_bound_push} same as mult\_bound\_push for the regular initializer. \\ The valid range for this real option is $0 < {\tt warm\_start\_mult\_bound\_push } < {\tt +inf}$ and its default value is $0.001$. \paragraph{warm\_start\_mult\_init\_max:}\label{opt:warm_start_mult_init_max} Maximum initial value for the equality multipliers. \\ The valid range for this real option is ${\tt -inf} < {\tt warm\_start\_mult\_init\_max } < {\tt +inf}$ and its default value is $1 \cdot 10^{+06}$. \paragraph{warm\_start\_same\_structure:}\label{opt:warm_start_same_structure} Indicates whether a problem with a structure identical to the previous one is to be solved. \\ If "yes" is chosen, then the algorithm assumes that an NLP is now to be solved, whose structure is identical to one that already was considered (with the same NLP object). The default value for this string option is "no". \\ Possible values: \begin{itemize} \item no: Assume this is a new problem. \item yes: Assume this is problem has known structure \end{itemize} \paragraph{warm\_start\_slack\_bound\_frac:}\label{opt:warm_start_slack_bound_frac} same as slack\_bound\_frac for the regular initializer. \\ The valid range for this real option is $0 < {\tt warm\_start\_slack\_bound\_frac } \le 0.5$ and its default value is $0.001$. \paragraph{warm\_start\_slack\_bound\_push:}\label{opt:warm_start_slack_bound_push} same as slack\_bound\_push for the regular initializer. \\ The valid range for this real option is $0 < {\tt warm\_start\_slack\_bound\_push } < {\tt +inf}$ and its default value is $0.001$. Bonmin-releases-1.8.9/Bonmin/doc/options_set.tex000066400000000000000000000261321436575401300216470ustar00rootroot00000000000000 \begin{PageSummary} \PageName{Setting Options} \PageSection{Passing options to \Bonmin }{sec:opt_opt} \PageSection{List of options}{sec:options_list} \PageSection{Getting good solutions to nonconvex problems}{sec:opt_nonconv} \PageSection{Notes on \Ipopt\ options}{sec:opt_ipopt} \end{PageSummary} \PageTitle{Options}{sec:opt} \subsectionH{Passing options to \Bonmin}{sec:opt_opt} Options in \Bonmin\ can be set in several different ways. First, you can set options by putting them in a file called {\tt bonmin.opt} in the directory where {\tt bonmin} is executing. If you are familiar with the file \href{\IpoptDoc{34}}{\tt ipopt.opt} (formerly named {\tt PARAMS.DAT}) in {\tt Ipopt}, the syntax of the {\tt bonmin.opt} is similar. For those not familiar with {\tt ipopt.opt}, the syntax is simply to put the name of the option followed by its value, with no more than two options on a single line. Anything on a line after a \# symbol is ignored (i.e., treated as a comment). Note that \Bonmin\ sets options for {\tt Ipopt}. If you want to set options for {\tt Ipopt} (when used inside \Bonmin) you have to set them in the file {\tt bonmin.opt} (the standard {\tt Ipopt} option file {\tt ipopt.opt} is not read by \Bonmin.) For a list and a description of all the {\tt Ipopt} options, the reader may refer to the \footlink{\IpoptDoc{39}}{documentation of {\tt Ipopt}}. Since {\tt bonmin.opt} contains both {\tt Ipopt} and \Bonmin\ options, for clarity all \Bonmin\ options should be preceded with the prefix ``{\tt bonmin.}'' in {\tt bonmin.opt}~. Note that some options can also be passed to the MILP subsolver used by \Bonmin\ in the outer approximation decomposition and the hybrid (see Subsection \ref{sec:sub_solvers}). The most important option in \Bonmin\ is the choice of the solution algorithm. This can be set by using the option named {\tt bonmin.algorithm} which can be set to {\tt B-BB}, {\tt B-OA}, {\tt B-QG}, or {\tt B-Hyb} (it's default value is {\tt B-BB}). Depending on the value of this option, certain other options may be available or not. \latexhtml{Table \ref{tab:options} gives t}{T}he list of options together with their types, default values and availability in each of the four algorithms\latexhtml{}{ can be found \href{\OptListPage \#sec:options_list}{here}}. The column labeled `type' indicates the type of the parameter (`F' stands for float, `I' for integer, and `S' for string). The column labeled `default' indicates the global default value. Then for each of the algorithms {\tt B-BB}, {\tt B-OA}, {\tt B-QG}, {\tt B-Hyb}, {\tt B-Ecp}, and {\tt B-iFP} `$\surd$' indicates that the option is available for that particular algorithm while `$-$' indicates that it is not. An example of a {\tt bonmin.opt} file including all the options with their default values is located in the {\tt Test} sub-directory. A small example is as follows: \begin{verbatim} bonmin.bb_log_level 4 bonmin.algorithm B-BB print_level 6 \end{verbatim} This sets the level of output of the branch-and-bound in \Bonmin\ to $4$, the algorithm to branch-and-bound and the output level for {\tt Ipopt} to $6$. When \Bonmin\ is run from within {\tt AMPL}, another way to set an option is via the internal {\tt AMPL} command {\tt options}. For example \begin{verbatim} options bonmin_options "bonmin.bb_log-level 4 \ bonmin.algorithm B-BB print_level 6"; \end{verbatim} has the same affect as the {\tt bonmin.opt} example above. Note that any \Bonmin\ option specified in the file {\tt bonmin.opt} overrides any setting of that option from within {\tt AMPL}. A third way is to set options directly in the C/C++ code when running \Bonmin\ from inside a C/C++ program as is explained in the reference manual. A detailed description of all of the \Bonmin\ options is given \latexhtml{in Appendix \ref{sec:optList}}{\href{\OptListPage \#sec:options_list}{here}}. In the following, we give some more details on options for the MILP subsolver and on the options specifically designed for nonconvex problems. \latexhtml{ \include{options_table} }{ } \subsectionH{Passing options to local search based heuristics and oa generators}{sec:sub_solvers} %\label{sec:sub_solvers} Several parts of the algorithms in \Bonmin\ are based on solving a simplified version of the problem with another instance of \Bonmin: Outer Approximation Decomposition (called in {\tt B-Hyb} at the root node) and Feasibility Pump for MINLP (called in B-Hyb or B-BB at the root node), RINS, RENS, Local Branching. In all these cases, one can pass options to the sub-algorithm used through the bonmin.opt file. The basic principle is that the {\tt bonmin.} prefix is replaced with a prefix that identifies the sub-algorithm used: \begin{itemize} \item {\tt oa\_decomposition.} to pass options to Outer Approximation Decomposition, \item {\tt pump\_for\_minlp.} to pass options to Feasibility Pump for MINLP \item {\tt rins.} to pass options to RINS, \item {\tt rens.} to pass options to RENS, \item {\tt local\_branch.} to pass options to Local Branching. \end{itemize} For example, we may want to run a maximum of 60 seconds of the feasibility pump for MINLP until 6 solutions are found at the beginning of the hybrid algorithm. To do so we set the following option in {\tt bonmin.opt} \begin{verbatim} bonmin.algorithm B-Hyb bonmin.pump_for_minlp yes # tells to run fp for MINLP pump_for_minlp.time_limit 60 # set a time limit for the pump pump_for_minlp.solution_limit 6 # set a solution limit \end{verbatim} Note that the actual solution and time limit will be the minimum of the global limits set for \Bonmin. A slightly more complicated set of options may be used when using RINS. Say for example that we want to run RINS inside B-BB. Each time RINS is called we want to solve the small-size MINLP generated using B-QG (we may run any algorithm available in \Bonmin for solving an MINLP) and want to stop as soon as B-QG found 1 solution. We set the following options in bonmin.opt \begin{verbatim} bonmin.algorithm B-BB bonmin.rins yes rins.algorithm B-QG rins.solution_limit 1 \end{verbatim} This example shows that it is possible to set any option used in the sub-algorithm to be different than the one used for the main algorithm. In the context of OA and FP for MINLP, a standard MILP solver is used. Several option are available for configuring this MILP solver. \Bonmin\ allows a choice of different MILP solvers through the option {\tt bonmin.milp\_subsolver}. Values for this option are: {\tt Cbc\_D} which uses {\tt Cbc} with its default settings, {\tt Cplex} which uses {\tt Cplex} with its default settings, and {\tt Cbc\_Par} which uses a version of {\tt Cbc} that can be parametrized by the user. The options that can be set in {\tt Cbc\_Par} are the number of strong-branching candidates, the number of branches before pseudo costs are to be trusted, and the frequency of the various cut generators (these options are signaled in Table \ref{tab:options}). \subsectionH{Getting good solutions to nonconvex problems}{sec:opt_nonconv} \label{sec:non_convex} To solve a problem with non-convex constraints, one should only use the branch-and-bound algorithm {\tt B-BB}. A few options have been designed in \Bonmin\ specifically to treat problems that do not have a convex continuous relaxation. In such problems, the solutions obtained from {\tt Ipopt} are not necessarily globally optimal, but are only locally optimal. Also the outer-approximation constraints are not necessarily valid inequalities for the problem. No specific heuristic method for treating nonconvex problems is implemented yet within the OA framework. But for the pure branch-and-bound {\tt B-BB}, we implemented a few options having in mind that lower bounds provided by {\tt Ipopt} should not be trusted, and with the goal of trying to get good solutions. Such options are at a very experimental stage. First, in the context of nonconvex problems, {\tt Ipopt} may find different local optima when started from different starting points. The two options {\tt num\_re\-solve\_at\_root} and {\tt num\_resolve\_at\_node} allow for solving the root node or each node of the tree, respectively, with a user-specified number of different randomly-chosen starting points, saving the best solution found. Note that the function to generate a random starting point is very na\"{\i}ve: it chooses a random point (uniformly) between the bounds provided for the variable. In particular if there are some functions that can not be evaluated at some points of the domain, it may pick such points, and so it is not robust in that respect. Secondly, since the solution given by {\tt Ipopt} does not truly give a lower bound, we allow for changing the fathoming rule to continue branching even if the solution value to the current node is worse than the best-known solution. This is achieved by setting {\tt allowable\_gap} and {\tt allowable\_fraction\_gap} and {\tt cutoff\_decr} to negative values. \subsectionH{Notes on {\tt Ipopt} options}{sec:opt_ipopt} %\label{sec:opt_ipopt} \Ipopt\ has a very large number of options, to get a complete description of them, you should refer to the \Ipopt\ manual. Here we only mention and explain some of the options that have been more important to us, so far, in developing and using \Bonmin. \subsubsection{Default options changed by \Bonmin} \Ipopt\ has been tailored to be more efficient when used in the context of the solution of a MINLP problem. In particular, we have tried to improve \Ipopt's warm-starting capabilities and its ability to prove quickly that a subproblem is infeasible. For ordinary NLP problems, \Ipopt\ does not use these options by default, but \Bonmin\ automatically changes these options from their default values. Note that options set by the user in {\tt bonmin.opt} will override these settings. \paragraph{{\tt mu\_strategy} and {\tt mu\_oracle}} are set, respectively, to {\tt adaptive} and {\tt probing} by default (these are newly implemented strategies in \Ipopt\ for updating the barrier parameter \mycite{NocedalAdaptive}{Nocedal2004} which we have found to be more efficient in the context of MINLP). \paragraph{{\tt gamma\_phi} and {\tt gamma\_theta}} are set to $10^{-8}$ and $10^{-4}$ respectively. This has the effect of reducing the size of the filter in the line search performed by \Ipopt. \paragraph{\tt required\_infeasibility\_reduction} is set to $0.1$. This increases the required infeasibility reduction when \Ipopt\ enters the restoration phase and should thus help to detect infeasible problems faster. \paragraph{\tt expect\_infeasible\_problem} is set to {\tt yes}, which enables some heuristics to detect infeasible problems faster. \paragraph{\tt warm\_start\_init\_point} is set to {\tt yes} when a full primal/dual starting point is available (generally all the optimizations after the continuous relaxation has been solved). \paragraph{\tt print\_level} is set to $0$ by default to turn off \Ipopt\ output. \subsubsection{Some useful \Ipopt\ options} \paragraph{bound\_relax\_factor} is by default set to $10^{-8}$ in \Ipopt. All of the bounds of the problem are relaxed by this factor. This may cause some trouble when constraint functions can only be evaluated within their bounds. In such cases, this option should be set to 0. Bonmin-releases-1.8.9/Bonmin/doc/options_table.tex000066400000000000000000000215541436575401300221460ustar00rootroot00000000000000\topcaption{\label{tab:options} List of options and compatibility with the different algorithms. } \tablehead{\hline Option & type & {\tt B-BB} & {\tt B-OA} & {\tt B-QG} & {\tt B-Hyb} & {\tt B-Ecp} & {\tt B-iFP} & {\tt Cbc\_Par} \\ \hline \hline} \tabletail{\hline \multicolumn{9}{|c|}{continued on next page}\\\hline} \tablelasttail{\hline} {\footnotesize \begin{xtabular}{@{}|@{\;}l@{\;}|@{\;}r@{\;}|@{\;}c@{\;}|@{\;}c@{\;}|@{\;}c@{\;}|@{\;}c@{\;}|@{\;}c@{\;}|@{\;}c@{\;}|@{\;}c@{\;}|@{}} \hline \multicolumn{1}{|c}{} & \multicolumn{8}{l|}{Algorithm choice}\\ \hline algorithm& S& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ \hline \multicolumn{1}{|c}{} & \multicolumn{8}{l|}{Branch-and-bound options}\\ \hline allowable\_fraction\_gap& F& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ allowable\_gap& F& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ cutoff& F& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ cutoff\_decr& F& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ enable\_dynamic\_nlp& S& $\surd$& -& -& -& -& -& -\\ integer\_tolerance& F& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ iteration\_limit& I& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ nlp\_failure\_behavior& S& $\surd$& -& -& -& -& -& -\\ node\_comparison& S& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& -\\ node\_limit& I& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ num\_cut\_passes& I& -& -& $\surd$& $\surd$& $\surd$& -& -\\ num\_cut\_passes\_at\_root& I& -& -& $\surd$& $\surd$& $\surd$& -& -\\ number\_before\_trust& I& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ number\_strong\_branch& I& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ random\_generator\_seed& I& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ read\_solution\_file& S& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ solution\_limit& I& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ sos\_constraints& S& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& -\\ time\_limit& F& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ tree\_search\_strategy& S& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& -\\ variable\_selection& S& $\surd$& -& $\surd$& $\surd$& $\surd$& -& -\\ \hline \multicolumn{1}{|c}{} & \multicolumn{8}{l|}{ECP cuts generation}\\ \hline ecp\_abs\_tol& F& -& -& $\surd$& $\surd$& -& -& -\\ ecp\_max\_rounds& I& -& -& $\surd$& $\surd$& -& -& -\\ ecp\_probability\_factor& F& -& -& $\surd$& $\surd$& -& -& -\\ ecp\_rel\_tol& F& -& -& $\surd$& $\surd$& -& -& -\\ filmint\_ecp\_cuts& I& -& -& $\surd$& $\surd$& -& -& -\\ \hline \multicolumn{1}{|c}{} & \multicolumn{8}{l|}{Feasibility checker using OA cuts}\\ \hline feas\_check\_cut\_types& S& -& -& $\surd$& $\surd$& $\surd$& -& -\\ feas\_check\_discard\_policy& S& -& -& $\surd$& $\surd$& $\surd$& -& -\\ generate\_benders\_after\_so\_many\_oa& I& -& -& $\surd$& $\surd$& $\surd$& -& -\\ \hline \multicolumn{1}{|c}{} & \multicolumn{8}{l|}{MILP Solver}\\ \hline cpx\_parallel\_strategy& I& -& -& -& -& -& -& $\surd$\\ milp\_solver& S& -& -& -& -& -& -& $\surd$\\ milp\_strategy& S& -& -& -& -& -& -& $\surd$\\ number\_cpx\_threads& I& -& -& -& -& -& -& $\surd$\\ \hline \multicolumn{1}{|c}{} & \multicolumn{8}{l|}{MILP cutting planes in hybrid algorithm}\\ \hline 2mir\_cuts& I& -& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ Gomory\_cuts& I& -& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ clique\_cuts& I& -& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ cover\_cuts& I& -& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ flow\_cover\_cuts& I& -& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ lift\_and\_project\_cuts& I& -& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ mir\_cuts& I& -& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ reduce\_and\_split\_cuts& I& -& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ \hline \multicolumn{1}{|c}{} & \multicolumn{8}{l|}{NLP interface}\\ \hline nlp\_solver& S& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ warm\_start& S& $\surd$& -& -& -& -& -& -\\ \hline \multicolumn{1}{|c}{} & \multicolumn{8}{l|}{NLP solution robustness}\\ \hline max\_consecutive\_failures& I& $\surd$& -& -& -& -& -& -\\ max\_random\_point\_radius& F& $\surd$& -& -& -& -& -& -\\ num\_iterations\_suspect& I& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ num\_retry\_unsolved\_random\_point& I& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ random\_point\_perturbation\_interval& F& $\surd$& -& -& -& -& -& -\\ random\_point\_type& S& $\surd$& -& -& -& -& -& -\\ resolve\_on\_small\_infeasibility& F& $\surd$& -& -& -& -& -& -\\ \hline \multicolumn{1}{|c}{} & \multicolumn{8}{l|}{NLP solves in hybrid algorithm (B-Hyb)}\\ \hline nlp\_solve\_frequency& I& -& -& -& $\surd$& -& -& -\\ nlp\_solve\_max\_depth& I& -& -& -& $\surd$& -& -& -\\ nlp\_solves\_per\_depth& F& -& -& -& $\surd$& -& -& -\\ \hline \multicolumn{1}{|c}{} & \multicolumn{8}{l|}{Nonconvex problems}\\ \hline coeff\_var\_threshold& F& $\surd$& -& -& -& -& -& -\\ dynamic\_def\_cutoff\_decr& S& $\surd$& -& -& -& -& -& -\\ first\_perc\_for\_cutoff\_decr& F& $\surd$& -& -& -& -& -& -\\ max\_consecutive\_infeasible& I& $\surd$& -& -& -& -& -& -\\ num\_resolve\_at\_infeasibles& I& $\surd$& -& -& -& -& -& -\\ num\_resolve\_at\_node& I& $\surd$& -& -& -& -& -& -\\ num\_resolve\_at\_root& I& $\surd$& -& -& -& -& -& -\\ second\_perc\_for\_cutoff\_decr& F& $\surd$& -& -& -& -& -& -\\ \hline \multicolumn{1}{|c}{} & \multicolumn{8}{l|}{Outer Approximation Decomposition (B-OA)}\\ \hline oa\_decomposition& S& -& -& $\surd$& $\surd$& $\surd$& -& -\\ \hline \multicolumn{1}{|c}{} & \multicolumn{8}{l|}{Outer Approximation cuts generation}\\ \hline add\_only\_violated\_oa& S& -& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ oa\_cuts\_scope& S& -& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ oa\_rhs\_relax& F& -& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ tiny\_element& F& -& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ very\_tiny\_element& F& -& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ \hline \multicolumn{1}{|c}{} & \multicolumn{8}{l|}{Output and Loglevel}\\ \hline bb\_log\_interval& I& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ bb\_log\_level& I& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ file\_solution& S& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ fp\_log\_frequency& F& -& -& $\surd$& $\surd$& -& -& -\\ fp\_log\_level& I& -& -& $\surd$& $\surd$& -& -& -\\ lp\_log\_level& I& -& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ milp\_log\_level& I& -& -& -& -& -& -& $\surd$\\ nlp\_log\_at\_root& I& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& -\\ nlp\_log\_level& I& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ oa\_cuts\_log\_level& I& -& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ oa\_log\_frequency& F& $\surd$& -& -& $\surd$& $\surd$& -& -\\ oa\_log\_level& I& $\surd$& -& -& $\surd$& $\surd$& -& -\\ \hline \multicolumn{1}{|c}{} & \multicolumn{8}{l|}{Primal Heuristics}\\ \hline feasibility\_pump\_objective\_norm& I& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& -\\ fp\_pass\_infeasible& S& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$\\ heuristic\_RINS& S& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& -\\ heuristic\_dive\_MIP\_fractional& S& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& -\\ heuristic\_dive\_MIP\_vectorLength& S& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& -\\ heuristic\_dive\_fractional& S& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& -\\ heuristic\_dive\_vectorLength& S& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& -\\ heuristic\_feasibility\_pump& S& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& -\\ pump\_for\_minlp& S& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& -\\ \hline \multicolumn{1}{|c}{} & \multicolumn{8}{l|}{Strong branching setup}\\ \hline candidate\_sort\_criterion& S& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& -\\ maxmin\_crit\_have\_sol& F& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& -\\ maxmin\_crit\_no\_sol& F& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& -\\ min\_number\_strong\_branch& I& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& -\\ number\_before\_trust\_list& I& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& -\\ number\_look\_ahead& I& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& -& -\\ number\_strong\_branch\_root& I& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& -\\ setup\_pseudo\_frac& F& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& -\\ trust\_strong\_branching\_for\_pseudo\_cost& S& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& $\surd$& -\\ \hline \end{xtabular} } Bonmin-releases-1.8.9/Bonmin/doc/use.tex000066400000000000000000000151511436575401300200740ustar00rootroot00000000000000 \begin{PageSummary} \PageName{Running \Bonmin} \PageSection{On an .nl file}{sec:run_nl} \PageSection{From AMPL}{sec:run_ampl} \PageSection{priorities and SOS in AMPL}{sub_sec:prio} \PageSection{From GAMS}{sec:run_gams} \PageSection{From a C++ Program}{sec:run_cpp} \end{PageSummary} \begin{quickref} \quickcitation{Writing \texttt{\bf .nl} files. D.M.~Gay.}{\BibPage \#Gay} \quickcitation{AMPL: A Modeling Language for Mathematical Programming, Second Edition, Duxbury Press Brooks Cole Publishing Co., 2003. R.~Fourer and D.M.~Gay and B.W.~Kernighan.}{\BibPage \#AMPL} \end{quickref} \PageTitle{Running \Bonmin}{sec:run} \Bonmin\ can be run \begin{itemize} \item [(i)] from a command line on a {\tt .nl} file (see \mycite{Gay}{Gay2005}), \item [(ii)] from the modeling language \footlink{http://www.ampl.com}{\tt AMPL} (see \mycite{AMPL}{Fourer2003}), \item[(iii)] from the \footlink{http://www.gams.com/}{GAMS} modeling language, \item [(iv)] by invoking it from a C/C++ program, \item[(v)] remotely through the \footlink{http://neos.mcs.anl.gov/neos}{NEOS} web interface, \item[(vi)] via the \footlink{https://projects.coin-or.org/OS}{Optimization Services} project, \item[(vii)] via the MATLAB \footlink{http://www.i2c2.aut.ac.nz/Wiki/OPTI}{OPTI Toolbox}. \end{itemize} In \latexhtml{the subsections that follow}{this page}, we give some details about the various ways to run \Bonmin. \subsectionH{On a {\tt .nl} file}{sec:run_nl} \Bonmin\ can read a {\tt .nl} file which could be generated by {\tt AMPL} (for example {\tt mytoy.nl} in the {\tt Bonmin-dist/Bonmin/test} subdirectory). The command line takes just one argument which is the name of the {\tt .nl} file to be processed. For example, if you want to solve {\tt mytoy.nl}, from the {\tt Bonmin-dist} directory, issue the command: \begin{colorverb} \begin{verbatim} bonmin test/mytoy.nl \end{verbatim} \end{colorverb} \subsectionH{From {\tt AMPL}}{sec:run_ampl} To use \Bonmin\ from {\tt AMPL} you just need to have the directory where the {\tt bonmin} executable is in your {\tt \$PATH} and to issue the command \begin{colorverb} \begin{verbatim} option solver bonmin; \end{verbatim} \end{colorverb} in the {\tt AMPL} environment. Then the next {\tt solve} will use \Bonmin\ to solve the model loaded in {\tt AMPL}. After the optimization is finished, the values of the variables in the best-known or optimal solution can be accessed in {\tt AMPL}. If the optimization is interrupted with {\tt } the best known solution is accessible (this feature is not available in Cygwin). \subsubsectionH{Example {\tt AMPL} model}{} A simple {\tt AMPL} example model follows: \begin{colorverb} \begin{verbatim} # An AMPL version of toy reset; var x binary; var z integer >= 0 <= 5; var y{1..2} >=0; minimize cost: - x - y[1] - y[2] ; subject to c1: ( y[1] - 1/2 )^2 + (y[2] - 1/2)^2 <= 1/4 ; c2: x - y[1] <= 0 ; c3: x + y[2] + z <= 2; option solver bonmin; # Choose BONMIN as the solver (assuming # that bonmin is in your PATH) solve; # Solve the model display x; display y; \end{verbatim} \end{colorverb} (This example model can be found in the \Bonmin\ package in the subdirectory {\tt Bonmin/examples/amplExamples/}.) \subsubsectionH{Setting up branching priorities, directions and declaring SOS1 constraints in AMPL}{sub_sec:prio} Branching priorities, branching directions and pseudo-costs can be passed using {\tt AMPL} suffixes. The suffix for branching priorities is {\tt "priority"} (variables with a higher priority will be chosen first for branching), for branching direction is {\tt "direction"} (if direction is $1$ the $\geq$ branch is explored first, if direction is $-1$ the $\leq$ branch is explored first), for up and down pseudo costs {\tt "upPseudoCost"} and {\tt "downPseudoCost"} respectively (note that if only one of the up and down pseudo-costs is set in the {\tt AMPL} model it will be used for both up and down). For example, to give branching priorities of $10$ to variables {\tt y} and 1 to variable {\tt x} and to set the branching directions to explore the upper branch first for all variables in the simple example given, we add before the call to solve: \begin{colorverb} \begin{verbatim} suffix priority IN, integer, >=0, <= 9999; y[1].priority := 10; y[2].priority := 10; x.priority := 1; suffix direction IN, integer, >=-1, <=1; y[1].direction := 1; y[2].direction := 1; x.direction := 1; \end{verbatim} \end{colorverb} SOS Type-1 branching is also available in \Bonmin\ from {\tt AMPL}. We follow the conventional way of doing this with suffixes. Two type of suffixes should be declared: \begin{colorverb} \begin{verbatim} suffix sosno IN, integer, >=1; # Note that the solver assumes # that these values are positive # for SOS Type 1 suffix ref IN; \end{verbatim} \end{colorverb} Next, suppose that we wish to have variables \begin{colorverb} \begin{verbatim} var X {i in 1..M, j in 1..N} binary; \end{verbatim} \end{colorverb} and the ``convexity'' constraints: \begin{colorverb} \begin{verbatim} subject to Convexity {i in 1..M}: sum {j in 1..N} X[i,j] = 1; \end{verbatim} \end{colorverb} (note that we must explicitly include the convexity constraints in the {\tt AMPL} model). Then after reading in the data, we set the suffix values: \begin{colorverb} \begin{verbatim} # The numbers `val[i,j]' are chosen typically as # the values `represented' by the discrete choices. let {i in 1..M, j in 1..N} X[i,j].ref := val[i,j]; # These identify which SOS constraint each variable belongs to. let {i in 1..M, j in 1..N} X[i,j].sosno := i; \end{verbatim} \end{colorverb} \subsectionH{From {\tt GAMS}}{sec:run_gams} Thanks to the \footlink{http://projects.coin-or.org/GAMSlinks}{GAMSlinks} project, Bonmin is available in {\tt GAMS} since release 22.5 of the \footlink{http://www.gams.com/}{\tt GAMS} modeling system. The system is available for \footlink{http://download.gams.com/download}{download from GAMS}. Without buying a license it works as a demo with limited capabilities. Documentation for using \Bonmin\ in {\tt GAMS} is available \latexhtml{ at $$ \mbox{\tt http://www.gams.com/solvers/coin.pdf} $$ }{\href{http://www.gams.com/solvers/coin.pdf}{here}.} \subsectionH{From a C/C++ program}{sec:run_cpp} \Bonmin\ can also be run from within a C/C++ program if the user codes the functions to compute first- and second-order derivatives. An example of such a program is available in the subdirectory {\tt CppExample} of the {\tt examples} directory. For further explanations, please refer to this example and to the reference manual. Bonmin-releases-1.8.9/Bonmin/doxydoc/000077500000000000000000000000001436575401300174575ustar00rootroot00000000000000Bonmin-releases-1.8.9/Bonmin/doxydoc/doxygen.conf.in000066400000000000000000001743671436575401300224320ustar00rootroot00000000000000# 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_source_dir@/src += @abs_source_dir@/examples/CppExample/MyBonmin.cpp += @abs_source_dir@/doc/BONMIN_ReferenceManual.hpp += @abs_source_dir@/examples/CppExample/MyTMINLP.hpp += @abs_source_dir@/examples/CppExample/MyTMINLP.cpp # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = *.hpp \ *.h # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = */.svn* # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = YES # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 3 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = YES # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER # are set, an additional index file will be generated that can be used as input for # Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated # HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. # For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's # filter section matches. # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to YES, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). # Windows users are probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list. USE_INLINE_TREES = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 # When the SEARCHENGINE tag is enable doxygen will generate a search box for the HTML output. The underlying search engine uses javascript # and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP) or Qt help (GENERATE_QHP) # there is already a search function so this one should typically # be disabled. SEARCHENGINE = YES #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = YES # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = YES # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = letter # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO # If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER. LATEX_SOURCE_CODE = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = YES # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = YES # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = @coin_doxy_tagfiles@ # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = @coin_doxy_tagname@ # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = YES # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = @coin_doxy_usedot@ # By default doxygen will write a font called FreeSans.ttf to the output # directory and reference it in all dot files that doxygen generates. This # font does not include all possible unicode characters however, so when you need # these (or just want a differently looking font) you can specify the font name # using DOT_FONTNAME. You need need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = FreeSans # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = YES # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES Bonmin-releases-1.8.9/Bonmin/examples/000077500000000000000000000000001436575401300176245ustar00rootroot00000000000000Bonmin-releases-1.8.9/Bonmin/examples/CppExample/000077500000000000000000000000001436575401300216625ustar00rootroot00000000000000Bonmin-releases-1.8.9/Bonmin/examples/CppExample/Makefile.in000066400000000000000000000053671436575401300237420ustar00rootroot00000000000000# Copyright (C) 2006 International Business Machines. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # # Author: Andreas Waechter IBM 2006-03-14 # $Id: Makefile.in,v 1.1.2.1 2006/04/19 23:25:14 andreasw Exp $ ########################################################################## # You can modify this example makefile to fit for your own program. # # Usually, you only need to change the five CHANGEME entries below. # ########################################################################## # CHANGEME: This should be the name of your executable EXE = CppExample@EXEEXT@ # CHANGEME: Here is the name of all object files corresponding to the source # code that you wrote in order to define the problem statement OBJS = MyBonmin.@OBJEXT@ MyTMINLP.@OBJEXT@ # CHANGEME: Additional libraries ADDLIBS = # CHANGEME: Additional flags for compilation (e.g., include flags) ADDINCFLAGS = # CHANGEME: Directory to the sources for the (example) problem definition # files SRCDIR = @srcdir@ VPATH = @srcdir@ ########################################################################## # Usually, you don't have to change anything below. Note that if you # # change certain compiler options, you might have to recompile Bonmin. # ########################################################################## COIN_HAS_PKGCONFIG = @COIN_HAS_PKGCONFIG_TRUE@TRUE COIN_CXX_IS_CL = @COIN_CXX_IS_CL_TRUE@TRUE # C++ Compiler command CXX = @CXX@ # C++ Compiler options CXXFLAGS = @CXXFLAGS@ # additional C++ Compiler options for linking CXXLINKFLAGS = @RPATH_FLAGS@ # Include directories (we use the CYGPATH_W variables to allow compilation with Windows compilers) ifeq ($(COIN_HAS_PKGCONFIG), TRUE) INCL = `PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@ @PKG_CONFIG@ --cflags bonmin` else INCL = @BONMINLIB_CFLAGS_INSTALLED@ endif INCL += $(ADDINCFLAGS) # Linker flags ifeq ($(COIN_HAS_PKGCONFIG), TRUE) LIBS = `PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@ @PKG_CONFIG@ --libs bonmin` else ifeq ($(COIN_CXX_IS_CL), TRUE) LIBS = -link -libpath:`$(CYGPATH_W) @abs_lib_dir@` libbonmin.lib @BONMINLIB_LIBS_INSTALLED@ else LIBS = -L@abs_lib_dir@ -lbonmin @BONMINLIB_LIBS_INSTALLED@ endif endif # The following is necessary under cygwin, if native compilers are used CYGPATH_W = @CYGPATH_W@ all: $(EXE) .SUFFIXES: .cpp .c .o .obj $(EXE): $(OBJS) bla=;\ for file in $(OBJS); do bla="$$bla `$(CYGPATH_W) $$file`"; done; \ $(CXX) $(CXXLINKFLAGS) $(CXXFLAGS) -o $@ $$bla $(LIBS) $(ADDLIBS) clean: rm -rf $(EXE) $(OBJS) .cpp.o: $(CXX) $(CXXFLAGS) $(INCL) -c -o $@ `test -f '$<' || echo '$(SRCDIR)/'`$< .cpp.obj: $(CXX) $(CXXFLAGS) $(INCL) -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(SRCDIR)/$<'; fi` Bonmin-releases-1.8.9/Bonmin/examples/CppExample/MyBonmin.cpp000066400000000000000000000052761436575401300241300ustar00rootroot00000000000000// (C) Copyright Carnegie Mellon University 2006, 2007 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // P. Bonami, Carnegie Mellon University // // Date : 03/17/2006 #include #include #include "CoinPragma.hpp" #include "CoinTime.hpp" #include "CoinError.hpp" #include "BonOsiTMINLPInterface.hpp" #include "BonIpoptSolver.hpp" #include "MyTMINLP.hpp" #include "BonCbc.hpp" #include "BonBonminSetup.hpp" #include "BonOACutGenerator2.hpp" #include "BonEcpCuts.hpp" #include "BonOaNlpOptim.hpp" //#define REDIRECT int main (int argc, char *argv[]) { WindowsErrorPopupBlocker(); using namespace Ipopt; using namespace Bonmin; SmartPtr tminlp = new MyTMINLP; #ifdef REDIRECT FILE * fp = fopen("log.out","w"); CoinMessageHandler handler(fp); BonminSetup bonmin(&handler); #else BonminSetup bonmin; #endif bonmin.initializeOptionsAndJournalist(); //Register an additional option bonmin.roptions()->AddStringOption2("print_solution","Do we print the solution or not?", "yes", "no", "No, we don't.", "yes", "Yes, we do.", "A longer comment can be put here"); // Here we can change the default value of some Bonmin or Ipopt option bonmin.options()->SetNumericValue("bonmin.time_limit", 5); //changes bonmin's time limit bonmin.options()->SetStringValue("mu_oracle","loqo"); //Here we read several option files bonmin.readOptionsFile("Mybonmin.opt"); bonmin.readOptionsFile();// This reads the default file "bonmin.opt" // Options can also be set by using a string with a format similar to the bonmin.opt file bonmin.readOptionsString("bonmin.algorithm B-BB\n"); // Now we can obtain the value of the new option int printSolution; bonmin.options()->GetEnumValue("print_solution", printSolution,""); if(printSolution == 1){ tminlp->printSolutionAtEndOfAlgorithm(); } //Now initialize from tminlp bonmin.initialize(GetRawPtr(tminlp)); //Set up done, now let's branch and bound try { Bab bb; bb(bonmin);//process parameter file using Ipopt and do branch and bound using Cbc } catch(TNLPSolver::UnsolvedError *E) { //There has been a failure to solve a problem with Ipopt. std::cerr<<"Ipopt has failed to solve a problem"< #include #include "CoinPragma.hpp" #include "CoinTime.hpp" #include "BonOsiTMINLPInterface.hpp" #include "BonIpoptSolver.hpp" #include "MyTMINLP.hpp" #include "BonCbc.hpp" #include "BonBonminSetup.hpp" #include "BonOACutGenerator2.hpp" #include "BonEcpCuts.hpp" #include "BonOaNlpOptim.hpp" int main (int argc, char *argv[]) { using namespace Ipopt; using namespace Bonmin; SmartPtr tminlp = new MyTMINLP; BonminSetup bonmin; bonmin.initializeOptionsAndJournalist(); //Now initialize from tminlp bonmin.initialize(GetRawPtr(tminlp)); std::ofstream of("options_list_bonmin_content.tex"); bonmin.roptions()->writeLatexHtmlDoc(of, Bonmin::RegisteredOptions::BonminCategory); of.close(); of.open("options_list_ipopt_content.tex"); bonmin.roptions()->writeLatexHtmlDoc(of, Bonmin::RegisteredOptions::IpoptCategory); of.close(); of.open("options_list_filter_content.tex"); bonmin.roptions()->writeLatexHtmlDoc(of, Bonmin::RegisteredOptions::FilterCategory); of.close(); of.open("options_table.tex"); bonmin.roptions()->writeLatexOptionsTable(of, Bonmin::RegisteredOptions::BonminCategory); of.close(); of.open("bonmin.opt"); bonmin.roptions()->writeBonminOpt(of, Bonmin::RegisteredOptions::BonminCategory); return 0; } Bonmin-releases-1.8.9/Bonmin/examples/OptionDocGen/Makefile.in000066400000000000000000000053611436575401300242260ustar00rootroot00000000000000# Copyright (C) 2006 International Business Machines. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # # Author: Andreas Waechter IBM 2006-03-14 # $Id: Makefile.in,v 1.1.2.1 2006/04/19 23:25:14 andreasw Exp $ ########################################################################## # You can modify this example makefile to fit for your own program. # # Usually, you only need to change the five CHANGEME entries below. # ########################################################################## # CHANGEME: This should be the name of your executable EXE = DocGen@EXEEXT@ # CHANGEME: Here is the name of all object files corresponding to the source # code that you wrote in order to define the problem statement OBJS = DocGen.@OBJEXT@ MyTMINLP.@OBJEXT@ # CHANGEME: Additional libraries ADDLIBS = # CHANGEME: Additional flags for compilation (e.g., include flags) ADDINCFLAGS = # CHANGEME: Directory to the sources for the (example) problem definition # files SRCDIR = @srcdir@ VPATH = @srcdir@ ########################################################################## # Usually, you don't have to change anything below. Note that if you # # change certain compiler options, you might have to recompile Bonmin. # ########################################################################## COIN_HAS_PKGCONFIG = @COIN_HAS_PKGCONFIG_TRUE@TRUE COIN_CXX_IS_CL = @COIN_CXX_IS_CL_TRUE@TRUE # C++ Compiler command CXX = @CXX@ # C++ Compiler options CXXFLAGS = @CXXFLAGS@ # additional C++ Compiler options for linking CXXLINKFLAGS = @RPATH_FLAGS@ # Include directories (we use the CYGPATH_W variables to allow compilation with Windows compilers) ifeq ($(COIN_HAS_PKGCONFIG), TRUE) INCL = `PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@ @PKG_CONFIG@ --cflags bonmin` else INCL = @BONMINLIB_CFLAGS_INSTALLED@ endif INCL += $(ADDINCFLAGS) # Linker flags ifeq ($(COIN_HAS_PKGCONFIG), TRUE) LIBS = `PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@ @PKG_CONFIG@ --libs bonmin` else ifeq ($(COIN_CXX_IS_CL), TRUE) LIBS = -link -libpath:`$(CYGPATH_W) @abs_lib_dir@` libbonmin.lib @BONMINLIB_LIBS_INSTALLED@ else LIBS = -L@abs_lib_dir@ -lbonmin @BONMINLIB_LIBS_INSTALLED@ endif endif # The following is necessary under cygwin, if native compilers are used CYGPATH_W = @CYGPATH_W@ all: $(EXE) .SUFFIXES: .cpp .c .o .obj $(EXE): $(OBJS) bla=;\ for file in $(OBJS); do bla="$$bla `$(CYGPATH_W) $$file`"; done; \ $(CXX) $(CXXLINKFLAGS) $(CXXFLAGS) -o $@ $$bla $(LIBS) $(ADDLIBS) clean: rm -rf $(EXE) $(OBJS) .cpp.o: $(CXX) $(CXXFLAGS) $(INCL) -c -o $@ `test -f '$<' || echo '$(SRCDIR)/'`$< .cpp.obj: $(CXX) $(CXXFLAGS) $(INCL) -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(SRCDIR)/$<'; fi` Bonmin-releases-1.8.9/Bonmin/examples/OptionDocGen/MyTMINLP.cpp000066400000000000000000000105531436575401300241750ustar00rootroot00000000000000// (C) Copyright Carnegie Mellon University 2006 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // P. Bonami, Carnegie Mellon University // // Date : 03/17/2006 #include "MyTMINLP.hpp" #include "BonAmplInterface.hpp" bool MyTMINLP::get_variables_types(Index n, VariableType* var_types) { var_types[0] = BINARY; var_types[1] = CONTINUOUS; var_types[2] = CONTINUOUS; var_types[3] = INTEGER; return true; } bool MyTMINLP::get_variables_linearity(Index n, Ipopt::TNLP::LinearityType* var_types) { var_types[0] = Ipopt::TNLP::LINEAR; var_types[1] = Ipopt::TNLP::NON_LINEAR; var_types[2] = Ipopt::TNLP::NON_LINEAR; var_types[3] = Ipopt::TNLP::LINEAR; return true; } bool MyTMINLP::get_constraints_linearity(Index m, Ipopt::TNLP::LinearityType* const_types) { assert (m==3); const_types[0] = Ipopt::TNLP::NON_LINEAR; const_types[1] = Ipopt::TNLP::LINEAR; const_types[2] = Ipopt::TNLP::LINEAR; return true; } bool MyTMINLP::get_nlp_info(Index& n, Index&m, Index& nnz_jac_g, Index& nnz_h_lag, TNLP::IndexStyleEnum& index_style) { n = 4;//number of variable m = 3;//number of constraints nnz_jac_g = 7;//number of non zeroes in Jacobian nnz_h_lag = 2;//number of non zeroes in Hessian of Lagrangean index_style = TNLP::FORTRAN_STYLE; return true; } bool MyTMINLP::get_bounds_info(Index n, Number* x_l, Number* x_u, Index m, Number* g_l, Number* g_u) { assert(n==4); assert(m==3); x_l[0] = 0.; x_u[0] = 1.; x_l[1] = 0.; x_u[1] = DBL_MAX; x_l[2] =0.; x_u[2] = DBL_MAX; x_l[3] = 0; x_u[3] = 5; g_l[0] = -DBL_MAX; g_u[0] = 1./4.; g_l[1] = -DBL_MAX; g_u[1] = 0; g_l[2] = -DBL_MAX; g_u[2] = 2; return true; } bool MyTMINLP::get_starting_point(Index n, bool init_x, Number* x, bool init_z, Number* z_L, Number* z_U, Index m, bool init_lambda, Number* lambda) { assert(n==4); assert(m==3); assert(init_x); assert(!init_lambda); x[0] = 0; x[1] = 0; x[2] = 0; x[3] = 0; return true; } bool MyTMINLP::eval_f(Index n, const Number* x, bool new_x, Number& obj_value) { assert(n==4); obj_value = - x[0] - x[1] - x[2]; return true; } bool MyTMINLP::eval_grad_f(Index n, const Number* x, bool new_x, Number* grad_f) { assert(n==4); grad_f[0] = -1.; grad_f[1] = -1.; grad_f[2] = -1.; grad_f[3] = 0.; return true; } bool MyTMINLP::eval_g(Index n, const Number* x, bool new_x, Index m, Number* g) { assert(n==4); assert(m==3); g[0] = (x[1] - 1./2.)*(x[1] - 1./2.) + (x[2] - 1./2.)*(x[2] - 1./2.); g[1] = x[0] - x[1]; g[2] = x[0] + x[2] + x[3]; return true; } bool MyTMINLP::eval_jac_g(Index n, const Number* x, bool new_x, Index m, Index nnz_jac, Index* iRow, Index *jCol, Number* values) { assert(n==4); assert(nnz_jac == 7); if(values == NULL) { iRow[0] = 2; jCol[0] = 1; iRow[1] = 3; jCol[1] = 1; iRow[2] = 1; jCol[2] = 2; iRow[3] = 2; jCol[3] = 2; iRow[4] = 1; jCol[4] = 3; iRow[5] = 3; jCol[5] = 3; iRow[6] = 3; jCol[6] = 4; return true; } else { values[0] = 1.; values[1] = 1; values[2] = 2*x[1] - 1; values[3] = -1.; values[4] = 2*x[2] - 1; values[5] = 1.; values[6] = 1.; return true; } } bool MyTMINLP::eval_h(Index n, const Number* x, bool new_x, Number obj_factor, Index m, const Number* lambda, bool new_lambda, Index nele_hess, Index* iRow, Index* jCol, Number* values) { assert (n==4); assert (m==3); assert(nele_hess==2); if(values==NULL) { iRow[0] = 2; jCol[0] = 2; iRow[1] = 3; jCol[1] = 3; } else { values[0] = 2*lambda[0]; values[1] = 2*lambda[0]; } return true; } void MyTMINLP::finalize_solution(TMINLP::SolverReturn status, Index n, const Number* x, Number obj_value) { std::cout<<"Problem status: "<= 0 <= 5; var y{1..2} >=0; minimize cost: - x - y[1] - y[2] ; subject to c1: ( y[1] - 1/2 )^2 + (y[2] - 1/2)^2 <= 1/4 ; c2: x - y[1] <= 0 ; c3: x + y[2] + z <= 2; option solver bonmin; # Choose BONMIN as the solver (assuming # that bonmin is in your PATH) solve; # Solve the model display x; display y; Bonmin-releases-1.8.9/Bonmin/experimental/000077500000000000000000000000001436575401300205035ustar00rootroot00000000000000Bonmin-releases-1.8.9/Bonmin/experimental/Bcp/000077500000000000000000000000001436575401300212075ustar00rootroot00000000000000Bonmin-releases-1.8.9/Bonmin/experimental/Bcp/BB_cut.cpp000066400000000000000000000027241436575401300230560ustar00rootroot00000000000000// (C) Copyright International Business Machines Corporation 2006, 2007 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // Laszlo Ladanyi, International Business Machines Corporation // Pierre Bonami, Carnegie Mellon University #include "BCP_buffer.hpp" #include "BB_cut.hpp" /****************************************************************************/ void BB_cut::pack(BCP_buffer& buf) const { buf.pack(OsiRowCut::lb()) .pack(OsiRowCut::ub()); const CoinPackedVector& v = OsiRowCut::row(); const int numElem = v.getNumElements(); buf.pack(v.getIndices(), numElem) .pack(v.getElements(), numElem); } /****************************************************************************/ BB_cut::BB_cut(BCP_buffer& buf) : BCP_cut_algo(-1e40, 1e40), OsiRowCut() { double lb, ub; buf.unpack(lb) .unpack(ub); OsiRowCut::setLb(lb); OsiRowCut::setUb(ub); int numElem; int* indices; double* elements; buf.unpack(indices, numElem, true) .unpack(elements, numElem, true); OsiRowCut::setRow(numElem, indices, elements); if(numElem > 0) { delete[] indices; delete[] elements; } } /****************************************************************************/ BB_cut::BB_cut(const OsiRowCut& cut) : BCP_cut_algo(cut.lb(), cut.ub()), OsiRowCut(cut) {} /****************************************************************************/ BCP_MemPool BB_cut::memPool(sizeof(BB_cut)); Bonmin-releases-1.8.9/Bonmin/experimental/Bcp/BB_cut.hpp000066400000000000000000000022351436575401300230600ustar00rootroot00000000000000// (C) Copyright International Business Machines Corporation 2006, 2007 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // Laszlo Ladanyi, International Business Machines Corporation // Pierre Bonami, Carnegie Mellon University #ifndef _BB_CUT_H #define _BB_CUT_H #include "BCP_cut.hpp" #include "BCP_mempool.hpp" #include "OsiRowCut.hpp" class BCP_buffer; /** Simple representation of a cut by storing non zero coefficients only */ /****************************************************************************/ class BB_cut : public BCP_cut_algo, public OsiRowCut { private: static BCP_MemPool memPool; public: static inline void * operator new(size_t size) { return memPool.alloc(size); } static inline void operator delete(void *p, size_t size) { memPool.free(p, size); } /// Packing cut to a buffer void pack(BCP_buffer& buf) const; /**@name Constructors and destructors */ //@{ /// Constructor from content of buffer BB_cut(BCP_buffer& buf); /// Constructor from an OsiRowCut BB_cut(const OsiRowCut& cut); /// Destructor ~BB_cut() {} }; #endif Bonmin-releases-1.8.9/Bonmin/experimental/Bcp/BM.cpp000066400000000000000000000110211436575401300222040ustar00rootroot00000000000000// (C) Copyright International Business Machines Corporation and Carnegie Mellon University 2006, 2007 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // Laszlo Ladanyi, International Business Machines Corporation // Pierre Bonami, Carnegie Mellon University, // // Date : 03/15/2006 #include /* To get the cumulative time spent on a processor just use a gawk command like this below. Look at the output first; probably the process id needs to be prepended to the regexp and the procid may also change the $7 to some other word. gawk -e 'BEGIN {t=0} /^BCP_lp: Time spent in this node:/ {t+=$7} END {print t}' outfile */ #include "BM.hpp" using namespace std; //############################################################################# int main(int argc, char* argv[]) { CoinError::printErrors_ = true; BM_init user_init; int retcode = -1; #if 1 retcode = bcp_main(argc, argv, &user_init); #else try { retcode = bcp_main(argc, argv, &user_init); } catch(Bonmin::TNLPSolver::UnsolvedError &E) { // E.writeDiffFiles(); E.printError(std::cerr); } catch(Bonmin::OsiTMINLPInterface::SimpleError &E) { std::cerr< void BCP_parameter_set::create_keyword_list() { // Create the list of keywords for parameter file reading keys.push_back(make_pair(BCP_string("BM_DisregardPriorities"), BCP_parameter(BCP_CharPar, DisregardPriorities))); keys.push_back(make_pair(BCP_string("BM_PrintBranchingInfo"), BCP_parameter(BCP_CharPar, PrintBranchingInfo))); keys.push_back(make_pair(BCP_string("BM_UsePseudoCosts"), BCP_parameter(BCP_IntPar, UsePseudoCosts))); keys.push_back(make_pair(BCP_string("BM_DecreasingSortInSetupList"), BCP_parameter(BCP_IntPar, DecreasingSortInSetupList))); keys.push_back(make_pair(BCP_string("BM_PreferHighCombinationInBranching"), BCP_parameter(BCP_IntPar, PreferHighCombinationInBranching))); keys.push_back(make_pair(BCP_string("BM_NumNlpFailureMax"), BCP_parameter(BCP_IntPar, NumNlpFailureMax))); keys.push_back(make_pair(BCP_string("BM_NL_filename"), BCP_parameter(BCP_StringPar, NL_filename))); keys.push_back(make_pair(BCP_string("BM_IpoptParamfile"), BCP_parameter(BCP_StringPar, IpoptParamfile))); } /****************************************************************************/ template <> void BCP_parameter_set::set_default_entries() { set_entry(DisregardPriorities, false); set_entry(PrintBranchingInfo, true); set_entry(UsePseudoCosts, 1); set_entry(DecreasingSortInSetupList, 1); set_entry(PreferHighCombinationInBranching, 0); set_entry(NumNlpFailureMax, 5); set_entry(NL_filename, ""); set_entry(IpoptParamfile, ""); } //############################################################################# BCP_lp_user * BM_init::lp_init(BCP_lp_prob& p) { return new BM_lp; } /****************************************************************************/ BCP_tm_user * BM_init::tm_init(BCP_tm_prob& p, const int argnum, const char * const * arglist) { BM_tm* tm = new BM_tm; if (argnum == 2) { tm->par.read_from_file(arglist[1]); } else if (argnum == 1) { // work with defaults } else { tm->par.read_from_arglist(argnum, arglist); } tm->readIpopt(); return tm; } /****************************************************************************/ BCP_user_pack * BM_init::packer_init(BCP_user_class* p) { return new BM_pack; } /****************************************************************************/ BM_stats::~BM_stats() { // LACI: It would be nice to also print the process ID here, but I // wasn't sure how to get it... printf("Stats: #NodesSol = %d #SbSol = %d #Fixed = %d #SbDone = %d SumInd = %d SumPos = %e\n", numberNodeSolves_, numberSbSolves_, numberFixed_, numberStrongBranching_, sumStrongBranchingListIndices_, sumStrongBranchingListPositions_); } Bonmin-releases-1.8.9/Bonmin/experimental/Bcp/BM.hpp000066400000000000000000000327721436575401300222310ustar00rootroot00000000000000// (C) Copyright International Business Machines Corporation and Carnegie Mellon University 2006, 2007 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // Laszlo Ladanyi, International Business Machines Corporation // Pierre Bonami, Carnegie Mellon University, // // Date : 03/15/2006 #ifndef _BM_H #define _BM_H #include "BCP_USER.hpp" #include "BCP_parameters.hpp" #include "BCP_tm_user.hpp" #include "BCP_lp_user.hpp" #include "BB_cut.hpp" #include "BonIpoptWarmStart.hpp" #define BM_DISREGARD_SOS //############################################################################# class BM_node : public BCP_user_data { public: /** A counter for how many times in a row did the NLP code fail. When the NLP fails we branch; hopefully it'll be OK in the children. If it fails too many times in a row then we fathom the node: it's hopelessly difficult. */ int numNlpFailed_; public: BM_node() : numNlpFailed_(0) {} BM_node(BCP_buffer& buf) : numNlpFailed_(0) { buf.unpack(numNlpFailed_); } ~BM_node() {} inline void pack(BCP_buffer& buf) const { buf.pack(numNlpFailed_); } }; //############################################################################# enum BM_message { BM_StrongBranchRequest, BM_StrongBranchResult, BM_PseudoCostUpdate }; enum BM_BoundChange { BM_Var_DownBranch, BM_Var_UpBranch }; //############################################################################# class BM_par { public: enum chr_params { // DisregardPriorities, PrintBranchingInfo, end_of_chr_params }; enum int_params { // UsePseudoCosts, DecreasingSortInSetupList, PreferHighCombinationInBranching, NumNlpFailureMax, // twice the number of candidates if all candidates have 2 children. // We want to do SB on at least this many (if there are this many) SBNumBranchesInRoot, SBNumBranchesInTree, // The level where (and below) there are no min number of branches to // be considered and SB need not be done (we can use pseudo costs // instead) SBMaxLevel, end_of_int_params }; enum dbl_params { dummy_dbl_param, // end_of_dbl_params }; enum str_params { NL_filename, IpoptParamfile, // end_of_str_params }; enum str_array_params { dummy_str_array_param, // end_of_str_array_params }; }; //############################################################################# class BM_stats { public: BM_stats() : numberNodeSolves_(0), numberSbSolves_(0), numberFixed_(0), numberStrongBranching_(0), sumStrongBranchingListIndices_(0), sumStrongBranchingListPositions_(0.) {} ~BM_stats(); inline void incNumberNodeSolves() { numberNodeSolves_++; } inline void incNumberSbSolves(int cnt) { numberSbSolves_ += cnt; } inline void incNumberFixed() { numberFixed_++; } inline void updateStrongBrachingInfo(int chosenIndex, int listLength) { numberStrongBranching_++; sumStrongBranchingListIndices_ += chosenIndex; sumStrongBranchingListPositions_ += (double)(listLength-chosenIndex)/(double)listLength; } private: /** Total number of NLP solves as node solves */ int numberNodeSolves_; /** Total number of NLP solves for strong-branching */ int numberSbSolves_; /** Total number of times variables were fixed due to strong branching */ int numberFixed_; /** Total number of times this node did strong branching */ int numberStrongBranching_; /** Sum of all list indices */ int sumStrongBranchingListIndices_; /** Sum of all relative list positions */ double sumStrongBranchingListPositions_; }; //############################################################################# // Data needed to be sent off to do strong branching struct BM_BranchData { // These are the input for doing the branching int changeType; int objInd; int colInd; double solval; double bd; // These are the results of doing the branching int status; double objval; int iter; double time; }; //############################################################################# class BM_tm : public BCP_tm_user { public: /**@name Private data member */ BCP_string ipopt_file_content; BCP_string nl_file_content; BCP_parameter_set par; OsiPseudoCosts pseudoCosts_; public: /**@name Constructors and destructors */ //@{ /// Default constructor BM_tm() {} /// Default destructor virtual ~BM_tm() {} //@} /**@name Packing and unpacking methods */ //@{ virtual void pack_module_data(BCP_buffer& buf, BCP_process_t ptype); //@} /// Pass the core constraints and core variables to bcp virtual void initialize_core(BCP_vec& vars, BCP_vec& cuts, BCP_lp_relax*& matrix); /** Create the set of extra variables and cuts that should be added to the formulation in the root node. Also decide how variable pricing shuld be done, that is, if column generation is requested in the init_new_phase() method of this class then column generation should be performed according to \c pricing_status. */ virtual void create_root(BCP_vec& added_vars, BCP_vec& added_cuts, BCP_user_data*& user_data); /// Print a feasible solution virtual void display_feasible_solution(const BCP_solution* sol); /** Process a message that has been sent by another process' user part to this process' user part. */ virtual void process_message(BCP_buffer& buf); void receive_pseudo_cost_update(BCP_buffer& buf); void pack_pseudo_costs(BCP_buffer& buf); /// Output the final solution virtual void display_final_information(const BCP_lp_statistics& lp_stat); virtual void init_new_phase(int phase, BCP_column_generation& colgen, CoinSearchTreeBase*& candidates); void readIpopt(); private: /// auxilliary method for handling output for AMPL void write_AMPL_solution(const BCP_solution* sol, bool write_file, bool write_screen); }; //############################################################################# struct BM_SB_result { /** 0: Not done 1: Only down 2: only up 3: both ways */ int branchEval; int objInd; int colInd; int status[2]; int iter[2]; double objval[2]; double varChange[2]; double time[2]; }; //############################################################################# #include #include #include "CglGomory.hpp" #include "CglProbing.hpp" #include "CglKnapsackCover.hpp" #include "CglMixedIntegerRounding.hpp" #include "BonOaFeasChecker.hpp" #include "BonOaNlpOptim.hpp" #include "BonEcpCuts.hpp" #include "BonOACutGenerator2.hpp" #include "BCP_lp_user.hpp" #include "BonAmplSetup.hpp" #include "BonChooseVariable.hpp" class BM_lp : public BCP_lp_user { /* There's no totalTime_ and nodeTime_. Look at the top of BM.cpp */ // double totalTime_; // double nodeTime_; int in_strong; BCP_string ipopt_file_content; BCP_string nl_file_content; BCP_parameter_set par; BCP_buffer bm_buf; /** This contains the setup for running Bonmin in particular nlp solver, continuous solver, cut generators,...*/ Bonmin::BonminAmplSetup bonmin_; double integerTolerance_; /** A counter for how many times in a row did the NLP code fail. When the NLP fails we branch; hopefully it'll be OK in the children. If it fails too many times in a row then we fathom the node: it's hopelessly difficult. */ int numNlpFailed_; OsiCuts cuts_; /** These are the indices of the integral (i.e., things that can be branched on) objects in the solver, sorted based on the priority of the corresponding objects */ int* objInd_; int objNum_; /** Every time when branching decisions are to be made, we create 6 arrays, 3 for those objects that are infeasible and 3 for those that are feasible. infInd_ contains the indices of the objects (into the objects_ array of objects) that are not feasible, infUseful_ cointains their usefulness and infNum_ their number. They are ordered by their priority and within that by their usefulness (that depends on their pseudocosts, etc.). feasXXX_ contains the same for objects that are feasible, except that SOS objects are not listed there, nor variables that are fixed. */ int* infInd_; double* infUseful_; int infNum_; int* feasInd_; double* feasUseful_; int feasNum_; /** This is where we keep the results in case of distributed strong branching. The length of the array is objNum_ */ BM_SB_result* sbResult_; /** A pointer to the entry that got selected */ BM_SB_result* bestSbResult_; /** The time when we started to process the node */ double node_start_time; /** Class for collecting statistics */ BM_stats bm_stats; public: BM_lp(); virtual ~BM_lp(); inline int& numNlpFailed() { return (dynamic_cast(get_user_data()))->numNlpFailed_; } virtual void unpack_module_data(BCP_buffer& buf); /** Process a message that has been sent by another process' user part to this process' user part. */ virtual void process_message(BCP_buffer& buf); virtual OsiSolverInterface * initialize_solver_interface(); virtual void load_problem(OsiSolverInterface& osi, BCP_problem_core* core, BCP_var_set& vars, BCP_cut_set& cuts); virtual void modify_lp_parameters(OsiSolverInterface* lp, bool in_strong_branching); virtual BCP_solution* test_feasibility(const BCP_lp_result& lp_result, const BCP_vec& vars, const BCP_vec& cuts); BCP_solution* test_feasibility_BB(const BCP_lp_result& lp_result, const BCP_vec& vars); BCP_solution* test_feasibility_hybrid(const BCP_lp_result& lp_result, const BCP_vec& vars, const BCP_vec& cuts); virtual void generate_cuts_in_lp(const BCP_lp_result& lpres, const BCP_vec& vars, const BCP_vec& cuts, BCP_vec& new_cuts, BCP_vec& new_rows); virtual void cuts_to_rows(const BCP_vec& vars, // on what to expand BCP_vec& cuts, // what to expand BCP_vec& rows, // the expanded rows // things that the user can use for lifting cuts if allowed const BCP_lp_result& lpres, BCP_object_origin origin, bool allow_multiple); virtual double compute_lower_bound(const double old_lower_bound, const BCP_lp_result& lpres, const BCP_vec& vars, const BCP_vec& cuts); virtual void initialize_new_search_tree_node(const BCP_vec& vars, const BCP_vec& cuts, const BCP_vec& vs, const BCP_vec& cs, BCP_vec& var_changed_pos, BCP_vec& var_new_bd, BCP_vec& cut_changed_pos, BCP_vec& cut_new_bd); virtual BCP_branching_decision select_branching_candidates(const BCP_lp_result& lpres, const BCP_vec& vars, const BCP_vec& cuts, const BCP_lp_var_pool& local_var_pool, const BCP_lp_cut_pool& local_cut_pool, BCP_vec& cans, bool force_branch = false); BCP_branching_decision bbBranch(OsiBranchingInformation& brInfo, BCP_vec& cands); BCP_branching_decision hybridBranch(); /** Methods invoked from bbBranch() */ void send_pseudo_cost_update(OsiBranchingInformation& branchInfo); void unpack_pseudo_costs(BCP_buffer& buf); int sort_objects(OsiBranchingInformation& branchInfo, Bonmin::BonChooseVariable* choose, int& branchNum); void clear_SB_results(); void collect_branch_data(OsiBranchingInformation& branchInfo, OsiSolverInterface* solver, const int branchNum, BM_BranchData* branchData); void do_distributed_SB(OsiBranchingInformation& branchInfo, OsiSolverInterface* solver, const CoinWarmStart* cws, const int branchNum, const int* pids, const int pidNum); bool isBranchFathomable(int status, double obj); int process_SB_results(OsiBranchingInformation& branchInfo, OsiSolverInterface* solver, Bonmin::BonChooseVariable* choose, OsiBranchingObject*& branchObject); int try_to_branch(OsiBranchingInformation& branchInfo, OsiSolverInterface* solver, Bonmin::BonChooseVariable* choose, OsiBranchingObject*& branchObject, bool allowVarFix); virtual void set_user_data_for_children(BCP_presolved_lp_brobj* best, const int selected); }; //############################################################################# #include "BCP_USER.hpp" class BM_pack : public BCP_user_pack { public: virtual ~BM_pack() {} virtual void pack_user_data(const BCP_user_data* ud, BCP_buffer& buf); virtual BCP_user_data* unpack_user_data(BCP_buffer& buf); virtual void pack_cut_algo(const BCP_cut_algo* cut, BCP_buffer& buf); virtual BCP_cut_algo* unpack_cut_algo(BCP_buffer& buf); }; //############################################################################# class BM_init : public USER_initialize { public: virtual BCP_tm_user * tm_init(BCP_tm_prob& p, const int argnum, const char * const * arglist); virtual BCP_lp_user * lp_init(BCP_lp_prob& p); virtual BCP_user_pack * packer_init(BCP_user_class* p); }; #endif Bonmin-releases-1.8.9/Bonmin/experimental/Bcp/BM.par000066400000000000000000000014421436575401300222120ustar00rootroot00000000000000BCP_StrongBranch_CloseToHalfNum 1 BCP_StrongBranch_CloseToOneNum 0 // VERBOSITY: BCP_VerbosityShutUp 1 // 0: regular output BCP_ReportWhenDefaultIsExecuted 0 // 1: print a message when default // functions are called BCP_TmVerb_SingleLineInfoFrequency 1 // k: print the info line every // k nodes // Default : 0 (disabled) BCP_LpVerb_RelaxedSolution 1 // 1: display LP sol at each iter BCP_LpVerb_FinalRelaxedSolution 1 // 1: display LP sol of final iter BCP_TmVerb_BestFeasibleSolution 0 // 1: display best sol at the end BCP_TreeSearchStrategy 0 // 0: Best Bound BM_NL_filename batch.nl BM_IpoptParamfile bonmin.opt Bonmin-releases-1.8.9/Bonmin/experimental/Bcp/BM_lp.cpp000066400000000000000000000237331436575401300227140ustar00rootroot00000000000000// (C) Copyright International Business Machines Corporation 2006, 2007 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // Laszlo Ladanyi, International Business Machines Corporation // Pierre Bonami, Carnegie Mellon University #include "OsiClpSolverInterface.hpp" #include "BM.hpp" #include "BCP_message_mpi.hpp" #include "BCP_lp_node.hpp" #include "BCP_lp.hpp" #include "BonOACutGenerator2.hpp" #include "BonEcpCuts.hpp" #include "BonOaNlpOptim.hpp" // The following is included for "min" #include "CoinFinite.hpp" #ifndef BM_DEBUG_PRINT #define BM_DEBUG_PRINT 0 #endif static char prefix[100]; //############################################################################# BM_lp::BM_lp() : BCP_lp_user(), in_strong(0), bonmin_(), objInd_(NULL), objNum_(0), infInd_(NULL), infUseful_(NULL), infNum_(0), feasInd_(NULL), feasUseful_(NULL), feasNum_(0), sbResult_(NULL), bestSbResult_(NULL) { } /****************************************************************************/ BM_lp::~BM_lp() { delete[] objInd_; delete[] infInd_; delete[] infUseful_; delete[] feasInd_; delete[] feasUseful_; delete[] sbResult_; } /****************************************************************************/ OsiSolverInterface * BM_lp::initialize_solver_interface() { #ifdef COIN_HAS_MPI sprintf(prefix, "%i", getLpProblemPointer()->get_process_id()); #else prefix[0] = 0; #endif OsiSolverInterface* solver = NULL; if (bonmin_.getAlgorithm() == 0) { // Pure B&B solver = bonmin_.nonlinearSolver()->clone(); } else { OsiClpSolverInterface * clp = new OsiClpSolverInterface; OsiBabSolver babSolver(3); babSolver.setSolver(clp); clp->setAuxiliaryInfo(&babSolver); clp->messageHandler()->setLogLevel(0); setOsiBabSolver(dynamic_cast(clp->getAuxiliaryInfo())); solver = clp; } return solver; } /****************************************************************************/ void BM_lp::initialize_new_search_tree_node(const BCP_vec& vars, const BCP_vec& cuts, const BCP_vec& vs, const BCP_vec& cs, BCP_vec& var_changed_pos, BCP_vec& var_new_bd, BCP_vec& cut_changed_pos, BCP_vec& cut_new_bd) { node_start_time = CoinWallclockTime(); BM_node* data = dynamic_cast(get_user_data()); numNlpFailed_ = data->numNlpFailed_; if (bonmin_.getAlgorithm() != 0) { // Not pure BB, so an LP solver will be used. Now we have to... // First copy the bounds into nlp. That way all the branching decisions // will be transferred over. int i; OsiSolverInterface * osi = getLpProblemPointer()->lp_solver; Bonmin::OsiTMINLPInterface& nlp = *bonmin_.nonlinearSolver(); nlp.setColLower(osi->getColLower()); nlp.setColUpper(osi->getColUpper()); // Carry the changes over to the object lists in nlp const int numObj = nlp.numberObjects(); OsiObject** nlpObj = nlp.objects(); for (i = 0; i < numObj; ++i) { OsiSimpleInteger* io = dynamic_cast(nlpObj[i]); if (io) { io->resetBounds(&nlp); } else { // The rest is OsiSOS where we don't need to do anything break; } } // copy over the OsiObjects from the nlp solver osi->addObjects(nlp.numberObjects(), nlp.objects()); } in_strong = 0; } /************************************************************************/ void BM_lp::load_problem(OsiSolverInterface& osi, BCP_problem_core* core, BCP_var_set& vars, BCP_cut_set& cuts) { if (bonmin_.getAlgorithm() != 0) { // We are doing hybrid, so osi is an LP solver. Call the default. BCP_lp_user::load_problem(osi, core, vars, cuts); return; } // Otherwise we do B&B and osi is an NLP solver. // There is no need to fill it with the data from bonmin_.nonlinearSolver() // since osi is a clone() of the master_lp in the BCP_lp object, and the // master_lp is a clone() of bonmin_.nonlinearSolver(), and that clone() // copies the data as well. } /************************************************************************/ void BM_lp::modify_lp_parameters(OsiSolverInterface* lp, bool in_strong_branching) // Called each time the node LP is solved { if (in_strong_branching) { in_strong = 1; // lp->setIntParam(OsiMaxNumIterationHotStart, 50); } } /****************************************************************************/ BCP_solution* BM_lp::test_feasibility(const BCP_lp_result& lp_result, const BCP_vec& vars, const BCP_vec& cuts) { if (bonmin_.getAlgorithm() == 0) { // if pure B&B return test_feasibility_BB(lp_result, vars); } else { return test_feasibility_hybrid(lp_result, vars, cuts); } return NULL; // fake return to quiet gcc } /****************************************************************************/ BCP_solution* BM_lp::test_feasibility_BB(const BCP_lp_result& lpres, const BCP_vec& vars) { // We can just take the primal solution and test whether it satisfies // integrality requirements BCP_solution_generic* sol = test_full(lpres, vars, integerTolerance_); if (sol) { sol->set_objective_value(lpres.objval()); #if (BM_DEBUG_PRINT != 0) printf("LP %.3f: Solution found. node: %i depth: %i value: %f\n", CoinWallclockTime() - start_time(), current_index(), current_level(), lpres.objval()); #endif } return sol; } /****************************************************************************/ BCP_solution* BM_lp::test_feasibility_hybrid(const BCP_lp_result& lp_result, const BCP_vec& vars, const BCP_vec& cuts) { /* First test that the integrality requirements are met. */ BCP_solution_generic* gsol = test_full(lp_result, vars, integerTolerance_); if (! gsol) {} /* TODO: don't test feasibility in every node */ OsiSolverInterface * osi = getLpProblemPointer()->lp_solver; // Don't test feasibility if the node LP was infeasible if (osi->isProvenPrimalInfeasible() ) { return NULL; } // The babSolver info used is the one containted in osi OsiBabSolver * babSolver = dynamic_cast (osi->getAuxiliaryInfo()); babSolver->setSolver(*bonmin_.nonlinearSolver()); //Last cut generator is used to check feasibility bonmin_.cutGenerators().back().cgl->generateCuts(*osi, cuts_); const int numvar = vars.size(); double* solverSol = new double[numvar]; double objValue = 1e200; BCP_solution_generic* sol = NULL; if (babSolver->solution(objValue, solverSol, numvar)) { sol = new BCP_solution_generic(false); // Just copy the solution stored in solver to sol for (int i = 0 ; i < numvar ; i++) { if (solverSol[i] > lp_result.primalTolerance()) sol->add_entry(vars[i], solverSol[i]); } sol->set_objective_value(objValue); } delete[] solverSol; return sol; } /****************************************************************************/ void BM_lp::generate_cuts_in_lp(const BCP_lp_result& lpres, const BCP_vec& vars, const BCP_vec& cuts, BCP_vec& new_cuts, BCP_vec& new_rows) { if (bonmin_.getAlgorithm() > 0) { /* if not pure B&B */ /* TODO: don't invoke all of them, only the *good* ones. figure out some measurement of how good a generator is. */ OsiSolverInterface& si = *getLpProblemPointer()->lp_solver; double rand; Bonmin::BabSetupBase::CuttingMethods::const_iterator end = bonmin_.cutGenerators().end(); end--;//have to go back one element because last cut generator checks feasibility /* FIXME: fill out the tree info! */ CglTreeInfo info; for(Bonmin::BabSetupBase::CuttingMethods::const_iterator i = bonmin_.cutGenerators().begin() ; i != end ; i++){ rand = 1 - CoinDrand48(); if(i->frequency > rand){ i->cgl->generateCuts(si, cuts_, info); } } // fill cuts // eventually fill rows if not in strong branching int numCuts = cuts_.sizeRowCuts(); for(int i = 0 ; i < numCuts ; i++) { const OsiRowCut& cut = cuts_.rowCut(i); new_cuts.push_back(new BB_cut(cut)); const CoinPackedVector& row = cut.row(); new_rows.push_back(new BCP_row(row, cut.lb(), cut.ub())); } } cuts_.dumpCuts(); } /****************************************************************************/ void BM_lp::cuts_to_rows(const BCP_vec& vars, // on what to expand BCP_vec& cuts, // what to expand BCP_vec& rows, // the expanded rows // things that the user can use for lifting cuts if allowed const BCP_lp_result& lpres, BCP_object_origin origin, bool allow_multiple) { const int numCuts = cuts.size(); for (int i = 0; i < numCuts; ++i) { BB_cut* cut = dynamic_cast(cuts[i]); if (!cut) { throw BCP_fatal_error("Non-\"BB_cut\" in cuts_to_rows!\n"); } const CoinPackedVector& row = cut->row(); rows.push_back(new BCP_row(row, cuts[i]->lb(), cuts[i]->ub())); } cuts_.dumpCuts(); } /****************************************************************************/ double BM_lp::compute_lower_bound(const double old_lower_bound, const BCP_lp_result& lpres, const BCP_vec& vars, const BCP_vec& cuts) { double bd; if (bonmin_.getAlgorithm() == 0) { /* if pure B&B */ bd = lpres.objval(); } else { /* FIXME: what the heck was this... bd = CoinMax(babSolver_.mipBound(), lpres.objval()); */ } return CoinMax(bd, old_lower_bound); } /*---------------------------------------------------------------------------*/ Bonmin-releases-1.8.9/Bonmin/experimental/Bcp/BM_lp_branch.cpp000066400000000000000000001022301436575401300242170ustar00rootroot00000000000000// (C) Copyright International Business Machines Corporation 2006, 2007 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // Laszlo Ladanyi, International Business Machines Corporation // Pierre Bonami, Carnegie Mellon University #include "CoinHelperFunctions.hpp" #include "BCP_lp_node.hpp" #include "BCP_lp.hpp" #include "BCP_lp_functions.hpp" #include "BM.hpp" #include "BonChooseVariable.hpp" #include "BonCurvBranchingSolver.hpp" #include "BonQpBranchingSolver.hpp" #include "BonLpBranchingSolver.hpp" #include "BonOsiTMINLPInterface.hpp" #include "BonIpoptWarmStart.hpp" #ifndef BM_DEBUG_PRINT #define BM_DEBUG_PRINT 0 #endif static bool ifprint = true; static bool ifprint2 = false; //############################################################################# BCP_branching_decision BM_lp::select_branching_candidates(const BCP_lp_result& lpres, const BCP_vec& vars, const BCP_vec& cuts, const BCP_lp_var_pool& local_var_pool, const BCP_lp_cut_pool& local_cut_pool, BCP_vec& cands, bool force_branch) { /* FIXME: this is good only for BB and using NLP to solve a node */ bm_stats.incNumberNodeSolves(); Bonmin::OsiTMINLPInterface* nlp = dynamic_cast(getLpProblemPointer()->lp_solver); // If we are doing pure B&B then we have an nlp, and then we check for // consecutive failures. if (nlp) { if (lpres.termcode() & BCP_Abandoned) { if (nlp->isIterationLimitReached()) { print(ifprint, "\ BM_lp: At node %i : WARNING: nlp reached iter limit. Will force branching\n", current_index()); } else { print(ifprint, "\ BM_lp: At node %i : WARNING: nlp is abandoned. Will force branching\n", current_index()); } // nlp failed nlp->forceBranchable(); numNlpFailed_++; if (numNlpFailed_ >= par.entry(BM_par::NumNlpFailureMax)) { print(ifprint, "WARNING! Too many (%i) NLP failures in a row. Abandoning node.", numNlpFailed_); return BCP_DoNotBranch_Fathomed; } } else { numNlpFailed_ = 0; } } OsiBranchingInformation brInfo(nlp, false, true); brInfo.cutoff_ = upper_bound() + get_param(BCP_lp_par::Granularity); brInfo.objectiveValue_ = lpres.objval(); brInfo.integerTolerance_ = integerTolerance_; brInfo.timeRemaining_ = get_param(BCP_lp_par::MaxRunTime) - CoinCpuTime(); brInfo.numberSolutions_ = 0; /*FIXME*/ brInfo.numberBranchingSolutions_ = 0; /*FIXME numBranchingSolutions_;*/ brInfo.depth_ = current_level(); BCP_branching_decision brDecision; if (bonmin_.getAlgorithm() == 0) { /* if pure B&B */ brDecision = bbBranch(brInfo, cands); } else { brDecision = hybridBranch(); } return brDecision; } //----------------------------------------------------------------------------- BCP_branching_decision BM_lp::hybridBranch() { // FIXME: most of the pureBB stuff should work here. throw BCP_fatal_error("BM_lp: FIXME: make hybrid work..."); } /*****************************************************************************/ void BM_lp::unpack_pseudo_costs(BCP_buffer& buf) { Bonmin::BonChooseVariable* choose = dynamic_cast(bonmin_.branchingMethod()); OsiPseudoCosts& pseudoCosts = choose->pseudoCosts(); int numObj = pseudoCosts.numberObjects(); double* upTotalChange = pseudoCosts.upTotalChange(); int* upNumber = pseudoCosts.upNumber(); double* downTotalChange = pseudoCosts.downTotalChange(); int* downNumber = pseudoCosts.downNumber(); buf.unpack(upTotalChange, numObj, false); buf.unpack(upNumber, numObj, false); buf.unpack(downTotalChange, numObj, false); buf.unpack(downNumber, numObj, false); } //----------------------------------------------------------------------------- void BM_lp::send_pseudo_cost_update(OsiBranchingInformation& branchInfo) { bm_buf.clear(); int itmp; double objchange; itmp = BM_PseudoCostUpdate; bm_buf.pack(itmp); for (int i = 0; i < objNum_; ++i) { const BM_SB_result& sbres = sbResult_[i]; if ((sbres.branchEval & 1) != 0 && sbres.status[0] != BCP_Abandoned) { bm_buf.pack(sbres.objInd); itmp = 0; bm_buf.pack(itmp); if (sbres.status[0] == BCP_ProvenOptimal) { objchange = sbres.objval[0] - branchInfo.objectiveValue_; } else { // Must be BCP_ProvenPrimalInf if (branchInfo.cutoff_ < 1e50) { objchange = 2*(branchInfo.cutoff_-branchInfo.objectiveValue_); } else { objchange = 2*fabs(branchInfo.objectiveValue_); } } bm_buf.pack(objchange/sbres.varChange[0]); } if ((sbres.branchEval & 2) != 0 && sbres.status[1] != BCP_Abandoned) { bm_buf.pack(sbres.objInd); itmp = 1; bm_buf.pack(itmp); if (sbres.status[1] == BCP_ProvenOptimal) { objchange = sbres.objval[1] - branchInfo.objectiveValue_; } else { // Must be BCP_ProvenPrimalInf if (branchInfo.cutoff_ < 1e50) { objchange = 2*(branchInfo.cutoff_-branchInfo.objectiveValue_); } else { objchange = 2*fabs(branchInfo.objectiveValue_); } } bm_buf.pack(objchange/sbres.varChange[1]); } } itmp = -1; bm_buf.pack(itmp); send_message(parent(), bm_buf); } //----------------------------------------------------------------------------- int BM_lp::sort_objects(OsiBranchingInformation& branchInfo, Bonmin::BonChooseVariable* choose, int& branchNum) { const OsiObject* const * objects = branchInfo.solver_->objects(); double upMult, downMult; choose->computeMultipliers(upMult, downMult); const double MAXMIN = choose->maxminCrit(&branchInfo); /* Order all objects that can be branched on */ int lastPriority = objects[objInd_[0]]->priority(); int infBlockStart = 0; int feasBlockStart = 0; branchNum = 0; infNum_ = 0; feasNum_ = 0; const bool isRoot = (current_index() == 0); int way; const bool disregardPriorities = par.entry(BM_par::DisregardPriorities); const bool usePseudoCosts = par.entry(BM_par::UsePseudoCosts); for (int i = 0; i < objNum_; ++i) { const int ind = objInd_[i]; const OsiObject* object = objects[ind]; double value = object->infeasibility(&branchInfo, way); if (value > 0.0) { if (value >= 1e50) { // infeasible return -1; } if (! disregardPriorities) { int priorityLevel = object->priority(); if (lastPriority < priorityLevel) { // sort the entries based on their usefulness if (infBlockStart < infNum_) { if (par.entry(BM_par::DecreasingSortInSetupList)) { CoinSort_2(infUseful_ + infBlockStart, infUseful_ + infNum_, infInd_ + infBlockStart, CoinFirstGreater_2()); } else { CoinSort_2(infUseful_ + infBlockStart, infUseful_ + infNum_, infInd_ + infBlockStart); } infBlockStart = infNum_; } lastPriority = priorityLevel; } } double dummy; infInd_[infNum_] = ind; if (usePseudoCosts) { infUseful_[infNum_] = isRoot ? value : choose->computeUsefulness(MAXMIN, upMult, downMult, value, object, ind, dummy); } else { infUseful_[infNum_] = value; } ++infNum_; branchNum += 2; } else { /* value == 0.0 */ const OsiSOS* sos = dynamic_cast(object); if (sos) { // if an sos is feasible thne we don't do strong branching on it continue; } const int iCol = object->columnNumber(); const double lb = branchInfo.lower_[iCol]; const double ub = branchInfo.upper_[iCol]; if (fabs(ub - lb) < 0.1) { continue; } value = branchInfo.solution_[iCol]; ++branchNum; if (floor(value+0.5) > lb && ceil(value-0.5) < ub) { // The variable is integer, but neither at its lower nor at its upper // bound (the test accounts for tolerances) ++branchNum; } if (! disregardPriorities) { int priorityLevel = object->priority(); if (lastPriority < priorityLevel) { // sort the entries based on their usefulness if (feasBlockStart < feasNum_) { if (par.entry(BM_par::DecreasingSortInSetupList)) { CoinSort_2(feasUseful_ + feasBlockStart, feasUseful_ + feasNum_, feasInd_ + feasBlockStart, CoinFirstGreater_2()); } else { CoinSort_2(feasUseful_ + feasBlockStart, feasUseful_ + feasNum_, feasInd_ + feasBlockStart); } } lastPriority = priorityLevel; } } double dummy; feasInd_[feasNum_] = ind; feasUseful_[feasNum_] = choose->computeUsefulness(MAXMIN, upMult, downMult, value, object, ind, dummy); ++feasNum_; } } if (infBlockStart < infNum_) { if (par.entry(BM_par::DecreasingSortInSetupList)) { CoinSort_2(infUseful_ + infBlockStart, infUseful_ + infNum_, infInd_ + infBlockStart, CoinFirstGreater_2()); } else { CoinSort_2(infUseful_ + infBlockStart, infUseful_ + infNum_, infInd_ + infBlockStart); } } if (feasBlockStart < feasNum_) { if (par.entry(BM_par::DecreasingSortInSetupList)) { CoinSort_2(feasUseful_ + feasBlockStart, feasUseful_ + feasNum_, feasInd_ + feasBlockStart, CoinFirstGreater_2()); } else { CoinSort_2(feasUseful_ + feasBlockStart, feasUseful_ + feasNum_, feasInd_ + feasBlockStart); } } #if (BM_DEBUG_PRINT != 0) const double t = CoinWallclockTime(); printf("LP %.3f: node: %i depth: %i obj: %f infNum: %i feasNum: %i soltime: %.3f\n", t-start_time(), current_index(), current_level(), branchInfo.objectiveValue_, infNum_, feasNum_, t-node_start_time); node_start_time = t; #endif return infNum_; } //----------------------------------------------------------------------------- void BM_lp::clear_SB_results() { for (int i = 0; i < objNum_; ++i) { sbResult_[i].branchEval = 0; } bestSbResult_ = NULL; } //----------------------------------------------------------------------------- void BM_lp::collect_branch_data(OsiBranchingInformation& branchInfo, OsiSolverInterface* solver, const int branchNum, BM_BranchData* branchData) { int i; int b = 0; for (i = 0; i < infNum_; ++i) { /* FIXME: think about SOS */ const int objInd = infInd_[i]; const int colInd = solver->object(objInd)->columnNumber(); const double val = branchInfo.solution_[colInd]; branchData[b].changeType = BM_Var_DownBranch; branchData[b].objInd = objInd; branchData[b].colInd = colInd; branchData[b].solval = val; branchData[b].bd = floor(val); BM_SB_result& sbres = sbResult_[objInd]; sbres.objInd = objInd; sbres.varChange[0] = val - floor(val); ++b; if (b == branchNum) { return; } branchData[b].changeType = BM_Var_UpBranch; branchData[b].objInd = objInd; branchData[b].colInd = colInd; branchData[b].solval = val; branchData[b].bd = ceil(val); sbres.varChange[1] = ceil(val) - val; ++b; if (b == branchNum) { return; } } for (i = 0; i < feasNum_; ++i) { const int objInd = feasInd_[i]; const int colInd = solver->object(objInd)->columnNumber(); const double val = branchInfo.solution_[colInd]; const double lb = branchInfo.lower_[colInd]; const double ub = branchInfo.upper_[colInd]; if (floor(val+0.5) > lb) { // not at its lb branchData[b].changeType = BM_Var_DownBranch; branchData[b].objInd = objInd; branchData[b].colInd = colInd; branchData[b].solval = val; branchData[b].bd = floor(val - 0.5); ++b; if (b == branchNum) { return; } } if (ceil(val-0.5) < ub) { // not at its ub branchData[b].changeType = BM_Var_UpBranch; branchData[b].objInd = objInd; branchData[b].colInd = colInd; branchData[b].solval = val; branchData[b].bd = ceil(val + 0.5); ++b; if (b == branchNum) { return; } } } } //----------------------------------------------------------------------------- void BM_solve_branches(OsiSolverInterface* solver, const CoinWarmStart* cws, const int numBranch, BM_BranchData* bD) { for (int i = 0; i < numBranch; ++i) { double t = CoinWallclockTime(); const int ind = bD[i].colInd; const int field = bD[i].changeType == BM_Var_UpBranch ? 1 : 0; const double old_lb = solver->getColLower()[ind]; const double old_ub = solver->getColUpper()[ind]; if (field == 0) { solver->setColUpper(ind, bD[i].bd); } else { solver->setColLower(ind, bD[i].bd); } if (cws) { solver->setWarmStart(cws); solver->resolve(); } else { solver->initialSolve(); } bD[i].status = (solver->isAbandoned() ? BCP_Abandoned : 0) | (solver->isProvenOptimal() ? BCP_ProvenOptimal : 0) | (solver->isProvenPrimalInfeasible() ? BCP_ProvenPrimalInf : 0); bD[i].objval = (bD[i].status & BCP_ProvenOptimal) != 0 ? solver->getObjValue() : 0.0; bD[i].iter = solver->getIterationCount(); solver->setColBounds(ind, old_lb, old_ub); bD[i].time = CoinWallclockTime() - t; } } //----------------------------------------------------------------------------- void BM_register_branch_results(const int numBranch, const BM_BranchData* bD, BM_SB_result* sbResults) { for (int i = 0; i < numBranch; ++i) { const int field = bD[i].changeType == BM_Var_UpBranch ? 1 : 0; BM_SB_result& sbres = sbResults[bD[i].objInd]; sbres.objInd = bD[i].objInd; sbres.branchEval |= field == 0 ? 1 : 2; sbres.status[field] = bD[i].status; sbres.objval[field] = bD[i].objval; sbres.iter[field] = bD[i].iter; sbres.varChange[field] = fabs(bD[i].solval - bD[i].bd); } } //----------------------------------------------------------------------------- void BM_lp::do_distributed_SB(OsiBranchingInformation& branchInfo, OsiSolverInterface* solver, const CoinWarmStart* cws, const int branchNum, const int* pids, const int pidNum) { const double * clb = solver->getColLower(); const double * cub = solver->getColUpper(); const int numCols = solver->getNumCols(); bm_buf.clear(); int tag = BM_StrongBranchRequest; bm_buf.pack(tag); bm_buf.pack(clb, numCols); bm_buf.pack(cub, numCols); bm_buf.pack(branchInfo.objectiveValue_); bm_buf.pack(branchInfo.cutoff_); bool has_ws = cws != NULL; bm_buf.pack(has_ws); if (has_ws) { BCP_lp_prob* p = getLpProblemPointer(); CoinWarmStart* cws_tmp = cws->clone(); // the next call destroys it BCP_warmstart* ws = cws ? BCP_lp_convert_CoinWarmStart(*p, cws_tmp) : NULL; BCP_pack_warmstart(ws, bm_buf); delete ws; } const int fixed_size = bm_buf.size(); // collect what we'll need to send off data BM_BranchData* branchData = new BM_BranchData[branchNum]; collect_branch_data(branchInfo, solver, branchNum, branchData); // We have branchNum branches to process on pidNum+1 (the last is the local // process) processes. int branchLeft = branchNum; BM_BranchData* bD = branchData; for (int pidLeft = pidNum; pidLeft > 0; --pidLeft) { int numSend = branchLeft / pidLeft; if (numSend * pidLeft < branchLeft) { ++numSend; } bm_buf.set_size(fixed_size); // Now pack where we are in branchData and pack numSend branches int location = bD - branchData; bm_buf.pack(location); bm_buf.pack(numSend); for (int s = 0; s < numSend; ++s) { bm_buf.pack(bD[s].changeType); bm_buf.pack(bD[s].objInd); bm_buf.pack(bD[s].colInd); bm_buf.pack(bD[s].solval); bm_buf.pack(bD[s].bd); } send_message(pids[pidLeft-1], bm_buf); bD += numSend; branchLeft -= numSend; } assert(branchNum/(pidNum+1) == branchLeft); // Process the leftover branches locally /* FIXME: this assumes that the solver is the NLP solver. Maybe we should use the nlp solver in BM_lp */ BM_solve_branches(solver, cws, branchLeft, bD); bm_stats.incNumberSbSolves(branchLeft); BM_register_branch_results(branchLeft, bD, sbResult_); // Receive the results from the other processes int numResults = branchLeft; while (numResults < branchNum) { bm_buf.clear(); receive_message(BCP_AnyProcess, bm_buf, BCP_Msg_User); bm_buf.unpack(tag); assert(tag == BM_StrongBranchResult); int location; int numRes; bm_buf.unpack(location); bm_buf.unpack(numRes); BM_BranchData* bD = branchData + location; for (int i = 0; i < numRes; ++i) { bm_buf.unpack(bD[i].status); bm_buf.unpack(bD[i].objval); bm_buf.unpack(bD[i].iter); bm_buf.unpack(bD[i].time); } BM_register_branch_results(numRes, bD, sbResult_); numResults += numRes; } } //----------------------------------------------------------------------------- bool BM_lp::isBranchFathomable(int status, double obj) { return ( (status & BCP_ProvenPrimalInf) || ((status & BCP_ProvenOptimal) && over_ub(obj)) ); } //----------------------------------------------------------------------------- int BM_lp::process_SB_results(OsiBranchingInformation& branchInfo, OsiSolverInterface* solver, Bonmin::BonChooseVariable* choose, OsiBranchingObject*& branchObject) { int evaluated = 0; int i; #if defined(DEBUG_PRINT) const double t = CoinWallclockTime()-start_time(); #endif #if 0 // defined(DEBUG_PRINT) const double t = CoinWallclockTime()-start_time(); for (i = 0; i < infNum_; ++i) { const BM_SB_result& sbres = sbResult_[infInd_[i]]; if (sbres.branchEval == 0) { continue; } printf("LP %.3f: SB: node: %i inf col: %i stati: %i %i, obj: %f %f time: %.3f %.3f\n", t, current_index(), sbres.colInd, sbres.status[0], sbres.status[1], sbres.objval[0], sbres.objval[1], sbres.time[0], sbres.time[1]); } for (i = 0; i < feasNum_; ++i) { const BM_SB_result& sbres = sbResult_[feasInd_[i]]; if (sbres.branchEval == 0) { continue; } printf("LP %.3f: SB: node: %i feas col: %i stati: %i %i, obj: %f %f time: %.3f %.3f\n", t, current_index(), sbres.colInd, sbres.status[0], sbres.status[1], sbres.objval[0], sbres.objval[1], sbres.time[0], sbres.time[1]); } #endif // First check if we can fathom the node int listLen=0; // we want this for the bm_stats for (i = 0; i < infNum_; ++i) { const BM_SB_result& sbres = sbResult_[infInd_[i]]; if (sbres.branchEval == 0) { continue; } assert(sbres.branchEval == 3); if (isBranchFathomable(sbres.status[0], sbres.objval[0]) && isBranchFathomable(sbres.status[1], sbres.objval[1])) { #if (BM_DEBUG_PRINT != 0) const double wallclock = CoinWallclockTime(); #if 0 printf("LP %.3f: SBres: node: %i FATHOM inf/eval/cand: time: %.3f\n", wallclock-start_time(), current_index(), infNum_, wallclock-node_start_time); #else printf("LP %.3f: SBres: node: %i FATHOM time: %.3f\n", wallclock-start_time(), current_index(), wallclock-node_start_time); #endif #endif return -2; } ++listLen; } // Nope. Let's see if we can fix anything. // 0: nothing fixed bit 0: fixed but stayd feas bit 1: fixed and lost feas int fixedStat = 0; for (i = 0; i < infNum_; ++i) { const BM_SB_result& sbres = sbResult_[infInd_[i]]; if (sbres.branchEval == 0) { continue; } ++evaluated; if (isBranchFathomable(sbres.status[0], sbres.objval[0])) { const int colInd = sbres.colInd; solver->setColLower(colInd, ceil(branchInfo.solution_[colInd])); fixedStat |= 2; bm_stats.incNumberFixed(); } if (isBranchFathomable(sbres.status[1], sbres.objval[1])) { const int colInd = sbres.colInd; solver->setColUpper(colInd, floor(branchInfo.solution_[colInd])); fixedStat |= 2; bm_stats.incNumberFixed(); } } for (i = 0; i < feasNum_; ++i) { const BM_SB_result& sbres = sbResult_[feasInd_[i]]; if (sbres.branchEval == 0) { continue; } ++evaluated; if ( (sbres.branchEval & 1) && isBranchFathomable(sbres.status[0], sbres.objval[0]) ) { // Down branch evaluated and fathomable const int colInd = sbres.colInd; solver->setColLower(colInd, ceil(branchInfo.solution_[colInd] - 0.5)); fixedStat |= 1; bm_stats.incNumberFixed(); } if ( (sbres.branchEval & 2) && isBranchFathomable(sbres.status[1], sbres.objval[1]) ) { // Up branch evaluated and fathomable const int colInd = sbres.colInd; solver->setColUpper(colInd, floor(branchInfo.solution_[colInd] + 0.5)); fixedStat |= 1; bm_stats.incNumberFixed(); } } if ((fixedStat & 2) != 0) { #if (BM_DEBUG_PRINT != 0) printf("LP %.3f: SBres: node: %i RESOLVE time: %.3f\n", t - start_time(), current_index(), t-node_start_time); node_start_time = t; #endif return -1; } // OK, we may have fixed some, but we got to branch, nevertheless. // Try to choose something where both sides have finished properly. // Note: at this point all stati of the inf pieces is either abandoned, // optimal (if primal infeas then we fixed and lost feasibility) const bool preferHigh = par.entry(BM_par::PreferHighCombinationInBranching); int best = -1; int bestWhichWay = 1; double bestTrusted = preferHigh ? -COIN_DBL_MAX : COIN_DBL_MAX; const double MAXMIN = choose->maxminCrit(&branchInfo); for (i = 0; i < infNum_; ++i) { const int objInd = infInd_[i]; const BM_SB_result& sbres = sbResult_[objInd]; if (sbres.branchEval == 0) { // FIXME: Check the pseudocost continue; } if ((sbres.status[0]&BCP_Abandoned) || (sbres.status[1]&BCP_Abandoned)){ continue; } double upEst = sbres.objval[1] - branchInfo.objectiveValue_; double downEst = sbres.objval[0] - branchInfo.objectiveValue_; double value = MAXMIN*CoinMin(upEst,downEst) + (1.0-MAXMIN)*CoinMax(upEst,downEst); const bool better = ( ( preferHigh && (value > bestTrusted)) || ( !preferHigh && (value < bestTrusted)) ); if (better) { bestTrusted = value; best = i; bestWhichWay = upEst > downEst ? 0 : 1; // override if there is a preferred way const OsiObject* object = solver->object(objInd); if (object->preferredWay() >= 0 && object->infeasibility()) { bestWhichWay = object->preferredWay(); } } } if (best == -1) { // OMG... In *ALL* evaluated candidates at least one side was abandoned... // Oh well, pick the first one not evaluated, or if no such thing then the // first where only one side failed, or if no such thing then anything... // FIXME: this loop will not be needed when pseudocosts are used for (i = 0; i < infNum_; ++i) { const BM_SB_result& sbres = sbResult_[infInd_[i]]; if (sbres.branchEval == 0) { best = i; break; } } if (best == -1) { for (i = 0; i < infNum_; ++i) { const BM_SB_result& sbres = sbResult_[infInd_[i]]; if ((sbres.status[0] & BCP_Abandoned) == 0 || (sbres.status[1] & BCP_Abandoned) == 0) { // prefer something where at least one side was not abandoned... best = i; break; } best = i; } } } bm_stats.updateStrongBrachingInfo(best, listLen); // At this point best is not -1, create the branching object const OsiObject * object = solver->object(infInd_[best]); branchObject = object->createBranch(solver, &branchInfo, bestWhichWay); bestSbResult_ = sbResult_ + infInd_[best]; #if (BM_DEBUG_PRINT != 0) const int ind = object->columnNumber(); printf("LP %.3f: SBres: node: %i depth: %i BRANCH time: %.3f evaluated: %i bvar: %i val: %f obj0: %f obj1: %f way: %i\n", t-start_time(), current_index(), current_level(), t-node_start_time, evaluated, ind, branchInfo.solution_[ind], bestSbResult_->objval[0], bestSbResult_->objval[1], bestWhichWay); node_start_time = t; #endif return (fixedStat & 1) != 0 ? -1 : 0; } //----------------------------------------------------------------------------- int BM_lp::try_to_branch(OsiBranchingInformation& branchInfo, OsiSolverInterface* solver, Bonmin::BonChooseVariable* choose, OsiBranchingObject*& branchObject, bool allowVarFix) { int returnStatus = 0; int branchNum; sort_objects(branchInfo, choose, branchNum); if (infNum_ == 0) { return 0; } const bool do_distributed_branching = true; if (do_distributed_branching) { bm_buf.clear(); bm_buf.pack(branchNum-1); send_message(parent(), bm_buf, BCP_Msg_RequestProcessList); bm_buf.clear(); receive_message(parent(), bm_buf, BCP_Msg_ProcessList); int* pids = NULL; int pidNum; bm_buf.unpack(pids, pidNum); clear_SB_results(); // Get the warmstart information CoinWarmStart* cws = solver->getWarmStart(); Bonmin::IpoptWarmStart* iws = dynamic_cast(cws); if (iws && iws->empty()) { delete cws; cws = NULL; } const int nodeIndex = current_index(); if (nodeIndex == 0) { // we are in the root. We want to process all possible branches upto the // parameter value. branchNum = CoinMin(branchNum, par.entry(BM_par::SBNumBranchesInRoot)); } else { if (nodeIndex < par.entry(BM_par::SBMaxLevel)) { branchNum = CoinMin(branchNum, CoinMax(pidNum + 1, par.entry(BM_par::SBNumBranchesInTree))); } else { branchNum = pidNum > 0 ? pidNum + 1 : 0; } } if (branchNum > 0) { do_distributed_SB(branchInfo, solver, cws, branchNum, pids, pidNum); returnStatus = process_SB_results(branchInfo, solver, choose, branchObject); send_pseudo_cost_update(branchInfo); } else { // We are too deep in the tree, just do something locally (like // pseudocosts...) returnStatus = BCP_lp_user::try_to_branch(branchInfo, solver, choose, branchObject, allowVarFix); } delete[] pids; delete cws; } else { /* ! do_distributed_branching ===> Do something locally */ } return returnStatus; } //----------------------------------------------------------------------------- BCP_branching_decision BM_lp::bbBranch(OsiBranchingInformation& brInfo, BCP_vec& cands) { BCP_lp_prob* p = getLpProblemPointer(); OsiSolverInterface* osi = p->lp_solver; Bonmin::OsiTMINLPInterface* nlp = dynamic_cast(osi); assert(nlp); nlp->getDblParam(OsiPrimalTolerance, brInfo.integerTolerance_); BCP_branching_decision retCode; OsiBranchingObject* brObj = NULL; const int numCols = nlp->getNumCols(); double* clb_old = new double[numCols]; double* cub_old = new double[numCols]; CoinDisjointCopyN(nlp->getColLower(), numCols, clb_old); CoinDisjointCopyN(nlp->getColUpper(), numCols, cub_old); Ipopt::SmartPtr options = bonmin_.options(); int numSB = 0; //const bool sbIsSet = options->GetIntegerValue("number_strong_branch",numSB,"bonmin."); int numSBroot = 0; const bool sbRootIsSet = options->GetIntegerValue("number_strong_branch_root",numSBroot,"bonmin."); if (sbRootIsSet && brInfo.depth_ == 0) { bonmin_.branchingMethod()->setNumberStrong(numSBroot); } else { bonmin_.branchingMethod()->setNumberStrong(numSB); } Bonmin::BonChooseVariable* choose = dynamic_cast(bonmin_.branchingMethod()); const int brResult = BM_lp::try_to_branch(brInfo, nlp, choose, brObj, true); #if 0 if (choose->goodSolution()) { /* yipee! a feasible solution! Check that it's really */ const double* sol = choose->goodSolution(); BM_solution* bmsol = new BM_solution; //Just copy the solution stored in solver to sol double ptol = integerTolerance_; for (int i = 0 ; i < numCols ; i++) { if (fabs(sol[i]) > ptol) bmsol->add_entry(i, sol[i]); } bmsol->setObjective(choose->goodObjectiveValue()); choose->clearGoodSolution(); send_feasible_solution(bmsol); delete bmsol; } #endif switch (brResult) { case -2: // when doing strong branching a candidate has proved that the // problem is infeasible retCode = BCP_DoNotBranch_Fathomed; break; case -1: // OsiChooseVariable::chooseVariable() returned 2, 3, or 4 if (!brObj) { // just go back and resolve retCode = BCP_DoNotBranch; } else { // otherwise might as well branch. The forced variable is // unlikely to jump up one more (though who knows...) retCode = BCP_DoBranch; } break; case 0: if (!brObj) { // nothing got fixed, yet couldn't find something to branch on throw BCP_fatal_error("BM: Couldn't branch!\n"); } // we've got a branching object retCode = BCP_DoBranch; break; default: throw BCP_fatal_error("\ BM: BCP_lp_user::try_to_branch returned with unknown return code.\n"); } if (brResult < 0) { // If there were some fixings (brResult < 0) then propagate them // where needed // FIXME: This is not nice. Meddling w/ BCP internal data. The BCP // user interface should provide a way to change bounds regardless // whether branching is asked for or not. const double* clb = nlp->getColLower(); const double* cub = nlp->getColUpper(); BCP_vec& vars = getLpProblemPointer()->node->vars; for (int i = 0; i < numCols; ++i) { if (clb_old[i] != clb[i] || cub_old[i] != cub[i]) { vars[i]->change_bounds(clb[i], cub[i]); nlp->setColBounds(i, clb[i], cub[i]); } } } if (retCode == BCP_DoBranch) { // all possibilities are 2-way branches int order[2] = {0, 1}; // Now interpret the result (at this point we must have a brObj OsiIntegerBranchingObject* intBrObj = dynamic_cast(brObj); if (intBrObj) { if (intBrObj->firstBranch() == 1) { order[0] = 1; order[1] = 0; } BCP_lp_integer_branching_object o(intBrObj); cands.push_back(new BCP_lp_branching_object(o, order)); if (bestSbResult_) { BCP_vec lb(2, 0.0); lb[0] = bestSbResult_->objval[order[0]]; lb[1] = bestSbResult_->objval[order[1]]; BCP_vec tc(2, 0); tc[0] = bestSbResult_->status[order[0]]; tc[1] = bestSbResult_->status[order[1]]; cands.back()->set_presolve_result(lb, tc); } if (par.entry(BM_par::PrintBranchingInfo)) { print(ifprint2, "BM_lp: branching on variable %i value: %f\n", intBrObj->originalObject()->columnNumber(), intBrObj->value()); } } OsiSOSBranchingObject* sosBrObj = dynamic_cast(brObj); if (sosBrObj) { if (sosBrObj->firstBranch() == 1) { order[0] = 1; order[1] = 0; } BCP_lp_sos_branching_object o(sosBrObj); cands.push_back(new BCP_lp_branching_object(nlp, o, order)); if (bestSbResult_) { BCP_vec lb(2, 0.0); lb[0] = bestSbResult_->objval[order[0]]; lb[1] = bestSbResult_->objval[order[1]]; BCP_vec tc(2, 0); tc[0] = bestSbResult_->status[order[0]]; tc[1] = bestSbResult_->status[order[1]]; cands.back()->set_presolve_result(lb, tc); } if (par.entry(BM_par::PrintBranchingInfo)) { print(ifprint2, "BM_lp: branching on SOS %i value: %f\n", sosBrObj->originalObject()->columnNumber(), sosBrObj->value()); } } } delete brObj; delete[] clb_old; delete[] cub_old; return retCode; } /****************************************************************************/ void BM_lp::set_user_data_for_children(BCP_presolved_lp_brobj* best, const int selected) { BM_node* data = NULL; data = new BM_node; data->numNlpFailed_ = numNlpFailed_; best->user_data()[0] = data; data = new BM_node; data->numNlpFailed_ = numNlpFailed_; best->user_data()[1] = data; } //############################################################################# void BM_lp::process_message(BCP_buffer& buf) { int msgtag; buf.unpack(msgtag); assert(msgtag == BM_StrongBranchRequest); Bonmin::OsiTMINLPInterface* nlp = bonmin_.nonlinearSolver(); int numCols; double* clb; double* cub; double objvalOrig; double cutoff; buf.unpack(clb, numCols); assert(numCols == nlp->getNumCols()); buf.unpack(cub, numCols); assert(numCols == nlp->getNumCols()); buf.unpack(objvalOrig); buf.unpack(cutoff); bool has_ws; buf.unpack(has_ws); BCP_warmstart* ws = has_ws ? BCP_unpack_warmstart(buf) : NULL; CoinWarmStart* cws = ws ? ws->convert_to_CoinWarmStart() : NULL; int location; // just a marker that we'll send back int numBranch; buf.unpack(location); buf.unpack(numBranch); int i; BM_BranchData* branchData = new BM_BranchData[numBranch]; for (i = 0; i < numBranch; ++i) { buf.unpack(branchData[i].changeType); buf.unpack(branchData[i].objInd); buf.unpack(branchData[i].colInd); buf.unpack(branchData[i].solval); buf.unpack(branchData[i].bd); } nlp->setColLower(clb); nlp->setColUpper(cub); BM_solve_branches(nlp, cws, numBranch, branchData); bm_buf.clear(); msgtag = BM_StrongBranchResult; bm_buf.pack(msgtag); bm_buf.pack(location); bm_buf.pack(numBranch); for (i = 0; i < numBranch; ++i) { const BM_BranchData& bD = branchData[i]; bm_buf.pack(bD.status); bm_buf.pack(bD.objval); bm_buf.pack(bD.iter); bm_buf.pack(bD.time); } send_message(buf.sender(), bm_buf, BCP_Msg_User); bm_buf.clear(); send_message(parent(), bm_buf, BCP_Msg_SBnodeFinished); delete[] branchData; delete cws; delete ws; delete[] clb; delete[] cub; bm_stats.incNumberSbSolves(numBranch); } Bonmin-releases-1.8.9/Bonmin/experimental/Bcp/BM_pack.cpp000066400000000000000000000147241436575401300232170ustar00rootroot00000000000000// (C) Copyright International Business Machines Corporation and Carnegie Mellon University 2006, 2007 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // Laszlo Ladanyi, International Business Machines Corporation #include "BM.hpp" #include "BCP_lp.hpp" #include "BonAmplSetup.hpp" //############################################################################# void BM_tm::pack_module_data(BCP_buffer& buf, BCP_process_t ptype) { // possible process types looked up in BCP_enum_process_t.hpp switch (ptype) { case BCP_ProcessType_LP: par.pack(buf); buf.pack(nl_file_content); buf.pack(ipopt_file_content); break; case BCP_ProcessType_TS: break; default: abort(); } } /****************************************************************************/ void BM_lp::unpack_module_data(BCP_buffer& buf) { using namespace Bonmin; par.unpack(buf); buf.unpack(nl_file_content); buf.unpack(ipopt_file_content); char* argv_[3]; char** argv = argv_; argv[0] = NULL; argv[1] = strdup("dont_even_try_to_open_it.nl"); argv[2] = NULL; std::string ipopt_content(ipopt_file_content.c_str()); std::string nl_content(nl_file_content.c_str()); /* PIERRE create the setup for algorithm, last argument indicates that continuous relaxation should not be created.*/ bonmin_.initialize(argv, ipopt_content, nl_content, false); bonmin_.nonlinearSolver()->setExposeWarmStart(true); free(argv[1]); /* synchronize bonmin & BCP parameters */ Ipopt::SmartPtr options = bonmin_.options(); /** update getting options directly from setup and store them in vars local to the BM_lp object */ integerTolerance_ = bonmin_.getDoubleParameter(BabSetupBase::IntTol); // cutOffDecrement_ could be negative double cutOffDecrement = bonmin_.getDoubleParameter(BabSetupBase::CutoffDecr); BCP_lp_prob* bcp_lp = getLpProblemPointer(); const double bcp_intTol = bcp_lp->par.entry(BCP_lp_par::IntegerTolerance); const double bcp_cutoffIncr = bcp_lp->par.entry(BCP_lp_par::Granularity); if (fabs(integerTolerance_ - bcp_intTol) > 1e-10) { printf("WARNING!\n"); printf(" The integrality tolerance parameters are different for\n"); printf(" BCP (%f) and bonmin (%f). They should be identical.\n", bcp_intTol, integerTolerance_); printf(" For now both will be set to that of bonmin.\n"); } if (fabs(bcp_cutoffIncr - cutOffDecrement) > 1e-10) { printf("WARNING!\n"); printf(" The granularity (cutoff increment) parameters are different\n"); printf(" BCP (%f) and bonmin (%f). They should be identical.\n", bcp_cutoffIncr, cutOffDecrement); printf(" For now both will be set to that of bonmin.\n"); } bcp_lp->par.set_entry(BCP_lp_par::IntegerTolerance, integerTolerance_); bcp_lp->par.set_entry(BCP_lp_par::Granularity, cutOffDecrement); /* If pure BB is selected then a number of BCP parameters are changed */ if (bonmin_.getAlgorithm() == 0 /* pure B&B */) { /* disable strong branching */ bcp_lp->par.set_entry(BCP_lp_par::MaxPresolveIter, -1); /* disable a bunch of printing, all of which are meaningless, since the LP relaxation is meaningless */ bcp_lp->par.set_entry(BCP_lp_par::LpVerb_ReportLocalCutPoolSize, false); bcp_lp->par.set_entry(BCP_lp_par::LpVerb_ReportLocalVarPoolSize, false); bcp_lp->par.set_entry(BCP_lp_par::LpVerb_GeneratedCutCount, false); bcp_lp->par.set_entry(BCP_lp_par::LpVerb_GeneratedVarCount, false); bcp_lp->par.set_entry(BCP_lp_par::LpVerb_RowEffectivenessCount, false); } /* extract the sos constraints */ Bonmin::OsiTMINLPInterface& nlp = *bonmin_.nonlinearSolver(); const Bonmin::TMINLP::SosInfo * sos = nlp.model()->sosConstraints(); int i; const int numCols = nlp.getNumCols(); const double* clb = nlp.getColLower(); const double* cub = nlp.getColUpper(); const int* cPrio = nlp.getPriorities(); /* Find first the integer variables and then the SOS constraints */ int nObj = 0; OsiObject** osiObj = new OsiObject*[numCols + sos->num]; for (i = 0; i < numCols; ++i) { if (nlp.isInteger(i)) { osiObj[nObj] = new OsiSimpleInteger(i, clb[i], cub[i]); if (cPrio) { osiObj[nObj]->setPriority(cPrio[i]); } ++nObj; } } #if ! defined(BM_DISREGARD_SOS) const int* starts = sos->starts; for (i = 0; i < sos->num; ++i) { OsiSOS* so = new OsiSOS(NULL, /* FIXME: why does the constr need */ starts[i+1] - starts[i], sos->indices + starts[i], sos->weights + starts[i], sos->types[i]); so->setPriority(sos->priorities ? sos->priorities[i] : 1); osiObj[nObj++] = so; } #endif nlp.addObjects(nObj, osiObj); objNum_ = nObj; /* Allocate the storage arrays */ infInd_ = new int[objNum_]; infUseful_ = new double[objNum_]; feasInd_ = new int[objNum_]; feasUseful_ = new double[objNum_]; sbResult_ = new BM_SB_result[objNum_]; /* Sort the objects based on their priority */ int* prio = new int[objNum_]; objInd_ = new int[objNum_]; for (i = 0; i < objNum_; ++i) { sbResult_[i].colInd = osiObj[i]->columnNumber(); objInd_[i] = i; prio[i] = osiObj[i]->priority(); } CoinSort_2(prio, prio+objNum_, objInd_); delete[] prio; for (i = 0; i < nObj; ++i) { delete osiObj[i]; } delete[] osiObj; } //############################################################################# void BM_pack::pack_user_data(const BCP_user_data* ud, BCP_buffer& buf) { const BM_node* data = dynamic_cast(ud); data->pack(buf); BM_tm* tm = dynamic_cast(user_class); if (tm) { tm->pack_pseudo_costs(buf); } } /*---------------------------------------------------------------------------*/ BCP_user_data* BM_pack::unpack_user_data(BCP_buffer& buf) { BM_node* node = new BM_node(buf); BM_lp* lp = dynamic_cast(user_class); if (lp) { lp->unpack_pseudo_costs(buf); } return node; } /*---------------------------------------------------------------------------*/ void BM_pack::pack_cut_algo(const BCP_cut_algo* cut, BCP_buffer& buf) { const BB_cut* bb_cut = dynamic_cast(cut); if (!bb_cut) throw BCP_fatal_error("pack_cut_algo() : unknown cut type!\n"); bb_cut->pack(buf); } /*---------------------------------------------------------------------------*/ BCP_cut_algo* BM_pack::unpack_cut_algo(BCP_buffer& buf) { return new BB_cut(buf); } Bonmin-releases-1.8.9/Bonmin/experimental/Bcp/BM_tm.cpp000066400000000000000000000243061436575401300227160ustar00rootroot00000000000000// (C) Copyright International Business Machines Corporation 2006, 2007 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // Laszlo Ladanyi, International Business Machines Corporation // Pierre Bonami, Carnegie Mellon University #include "OsiClpSolverInterface.hpp" #include "BCP_problem_core.hpp" #include "BCP_tm.hpp" #include "BCP_lp.hpp" // #include "BonIpoptSolver.hpp" // #ifdef COIN_HAS_FILTERSQP // # include "BonFilterSolver.hpp" // #endif // #include "BonOACutGenerator2.hpp" // #include "BonEcpCuts.hpp" // #include "BonOaNlpOptim.hpp" #include "BonAmplSetup.hpp" #include "BM.hpp" //############################################################################# void BM_tm::readIpopt() { if (par.entry(BM_par::IpoptParamfile).length() != 0) { FILE* ipopt = fopen(par.entry(BM_par::IpoptParamfile).c_str(), "r"); if (!ipopt) { throw BCP_fatal_error("Non-existent IpoptParamfile\n"); } fseek(ipopt, 0, SEEK_END); int len = ftell(ipopt) + 1; fseek(ipopt, 0, SEEK_SET); char* ipopt_content = new char[len+1]; len = fread(ipopt_content, 1, len, ipopt); ipopt_file_content.assign(ipopt_content, len); delete[] ipopt_content; } FILE* nl = fopen(par.entry(BM_par::NL_filename).c_str(), "r"); if (!nl) { throw BCP_fatal_error("Non-existent NL_filename\n"); } fseek(nl, 0, SEEK_END); int len = ftell(nl) + 1; fseek(nl, 0, SEEK_SET); char* nl_content = new char[len+1]; len = fread(nl_content, 1, len, nl); nl_file_content.assign(nl_content, len); delete[] nl_content; } /****************************************************************************/ void BM_tm::initialize_core(BCP_vec& vars, BCP_vec& cuts, BCP_lp_relax*& matrix) { char* argv_[3]; char** argv = argv_; argv[0] = NULL; argv[1] = strdup(par.entry(BM_par::NL_filename).c_str()); argv[2] = NULL; /* Get the basic options. */ Bonmin::BonminAmplSetup bonmin; bonmin.readOptionsFile(par.entry(BM_par::IpoptParamfile).c_str()); bonmin.initialize(argv); free(argv[1]); Bonmin::OsiTMINLPInterface& nlp = *bonmin.nonlinearSolver(); #if defined(BM_DISREGARD_SOS) const Bonmin::TMINLP::SosInfo * sos = nlp.model()->sosConstraints(); if (sos->num > 0) { printf("There are SOS constraints... disregarding them...\n"); } #endif OsiSolverInterface& clp = *bonmin.continuousSolver(); const int numCols = clp.getNumCols(); const int numRows = clp.getNumRows(); const double* clb = clp.getColLower(); const double* cub = clp.getColUpper(); double* obj = new double[numCols]; if (bonmin.getAlgorithm() == Bonmin::B_BB /* pure B&B */) { std::cout<<"Doing branch and bound"<copyOf(*clp.getMatrixByCol(), obj, clb, cub, rlb, rub); } vars.reserve(numCols); for (int i = 0; i < numCols; ++i) { BCP_var_t type = BCP_ContinuousVar; if (clp.isBinary(i)) type = BCP_BinaryVar; if (clp.isInteger(i)) type = BCP_IntegerVar; vars.push_back(new BCP_var_core(type, obj[i], clb[i], cub[i])); } delete[] obj; /* Initialize pseudocosts */ int nObj = 0; for (int i = 0; i < numCols; ++i) { if (nlp.isInteger(i)) { ++nObj; } } #if ! defined(BM_DISREGARD_SOS) const Bonmin::TMINLP::SosInfo * sos = nlp.model()->sosConstraints(); nObj += sos->num; #endif pseudoCosts_.initialize(nObj); } /****************************************************************************/ void BM_tm::create_root(BCP_vec& added_vars, BCP_vec& added_cuts, BCP_user_data*& user_data) { BM_node* data = new BM_node; data->numNlpFailed_ = 0; user_data = data; } void BM_tm::write_AMPL_solution(const BCP_solution* sol, bool write_file, bool write_screen) { const BCP_solution_generic* bg = dynamic_cast(sol); /* Parse again the input file so that we have a nice and clean ampl setup */ char* argv_[3]; char** argv = argv_; argv[0] = NULL; argv[1] = strdup(par.entry(BM_par::NL_filename).c_str()); argv[2] = NULL; Bonmin::BonminAmplSetup bonmin; bonmin.initialize(argv); Bonmin::OsiTMINLPInterface& nlpSolver = *bonmin.nonlinearSolver(); free(argv[1]); OsiSolverInterface& clp = *bonmin.continuousSolver(); const int numCols = clp.getNumCols(); int i; /* Create a dense vector with the value of each variable. Round the integer vars (they were tested to be near enough to integrality) so in the printouts we won't have 9.99999991234, etc.) */ double* dsol = new double[numCols]; for (i = 0; i < numCols; ++i) { dsol[i] = 0.0; } const BCP_vec& vars = bg->_vars; const BCP_vec& values = bg->_values;; const int size = vars.size(); for (i = 0; i < size; ++i) { const int ind = vars[i]->bcpind(); const double v = values[i]; const BCP_var_t type = vars[i]->var_type(); dsol[ind] = (type == BCP_ContinuousVar) ? v : floor(v+0.5); } if (write_screen) { /* Display the solution on the screen */ printf("bonmin: feasible solution found. Objective value: %f\n", bg->objective_value()); for (i = 0; i < size; ++i) { printf(" index: %5i value: %f\n", vars[i]->bcpind(), dsol[vars[i]->bcpind()]); } printf("\n"); } if (write_file) { /* create the AMPL solfile */ nlpSolver.model()->finalize_solution(Bonmin::TMINLP::SUCCESS, nlpSolver.getNumCols(), dsol, bg->objective_value()); } delete[] dsol; } //############################################################################# void BM_tm::process_message(BCP_buffer& buf) { int msgtag; buf.unpack(msgtag); if (msgtag == BM_PseudoCostUpdate) { receive_pseudo_cost_update(buf); } } /****************************************************************************/ void BM_tm::display_final_information(const BCP_lp_statistics& lp_stat) { bool write_screen = false; BCP_tm_prob *p = getTmProblemPointer(); if (p->param(BCP_tm_par::TmVerb_FinalStatistics)) { printf("TM: Running time: %.3f\n", CoinWallclockTime() - p->start_time); printf("TM: search tree size: %i ( processed %i ) max depth: %i\n", int(p->search_tree.size()), int(p->search_tree.processed()), p->search_tree.maxdepth()); lp_stat.display(); if (! p->feas_sol) { printf("TM: No feasible solution is found\n"); } else { printf("TM: The best solution found has value %f\n", p->feas_sol->objective_value()); if (p->param(BCP_tm_par::TmVerb_BestFeasibleSolution)) { write_screen = true; } } } if (p->feas_sol) { write_AMPL_solution(p->feas_sol, true, write_screen); } } /****************************************************************************/ void BM_tm::display_feasible_solution(const BCP_solution* sol) { // For now, we want to write also the AMPL solution file...(?) // This needs to be changed though write_AMPL_solution(sol, true, true); } struct BMSearchTreeCompareBest { static const std::string compName; static inline const char* name() { return "BMSearchTreeCompareBest"; } inline bool operator()(const CoinTreeSiblings* x, const CoinTreeSiblings* y) const { double allowable_gap = 1e-8; const double xq = x->currentNode()->getQuality(); const double yq = y->currentNode()->getQuality(); const int xd = x->currentNode()->getDepth(); const int yd = y->currentNode()->getDepth(); return ((xq < yq-allowable_gap) || (xq <= yq+allowable_gap && xd > yd)); } }; const std::string BMSearchTreeCompareBest::compName("BMSearchTreeCompareBest"); void BM_tm::init_new_phase(int phase, BCP_column_generation& colgen, CoinSearchTreeBase*& candidates) { BCP_tm_prob* p = getTmProblemPointer(); colgen = BCP_DoNotGenerateColumns_Fathom; switch (p->param(BCP_tm_par::TreeSearchStrategy)) { case BCP_BestFirstSearch: candidates = new CoinSearchTree; printf("Creating candidate list with BMSearchTreeCompareBest\n"); break; case BCP_BreadthFirstSearch: candidates = new CoinSearchTree; printf("Creating candidate list with CoinSearchTreeCompareBreadth\n"); break; case BCP_DepthFirstSearch: candidates = new CoinSearchTree; printf("Creating candidate list with CoinSearchTreeCompareDepth\n"); break; case BCP_PreferredFirstSearch: candidates = new CoinSearchTree; printf("Creating candidate list with CoinSearchTreeComparePreferred\n"); break; } } //############################################################################# void BM_tm::receive_pseudo_cost_update(BCP_buffer& buf) { double* upTotalChange = pseudoCosts_.upTotalChange(); double* downTotalChange = pseudoCosts_.downTotalChange(); int* upNumber = pseudoCosts_.upNumber(); int* downNumber = pseudoCosts_.downNumber(); int objInd; int branch; double pcChange; while (true) { buf.unpack(objInd); if (objInd == -1) { break; } buf.unpack(branch); buf.unpack(pcChange); if (branch == 0) { downTotalChange[objInd] += pcChange; ++downNumber[objInd]; } else { upTotalChange[objInd] += pcChange; ++upNumber[objInd]; } } } //----------------------------------------------------------------------------- void BM_tm::pack_pseudo_costs(BCP_buffer& buf) { buf.pack(pseudoCosts_.upTotalChange(), pseudoCosts_.numberObjects()); buf.pack(pseudoCosts_.upNumber(), pseudoCosts_.numberObjects()); buf.pack(pseudoCosts_.downTotalChange(), pseudoCosts_.numberObjects()); buf.pack(pseudoCosts_.downNumber(), pseudoCosts_.numberObjects()); } Bonmin-releases-1.8.9/Bonmin/experimental/Bcp/Makefile.am000066400000000000000000000115131436575401300232440ustar00rootroot00000000000000# Copyright (C) 2006, 2007 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id$ AUTOMAKE_OPTIONS = foreign # What is done in this directory: if COIN_HAS_ASL bin_PROGRAMS = bonminbcp endif ######################################################################## COINLIBS = \ $(BCPOBJDIR)/src/libBcp.la \ $(CBCOBJDIR)/src/libCbc.la \ $(CGLOBJDIR)/src/libCgl.la \ $(OSIOBJDIR)/src/OsiClp/libOsiClp.la \ $(OSIOBJDIR)/src/libOsi.la \ $(CLPOBJDIR)/src/libClp.la \ $(COINUTILSOBJDIR)/src/libCoinUtils.la if COIN_HAS_CPX COINLIBS += \ $(OSIOBJDIR)/src/OsiCpx/libOsiCpx.la \ $(CPXLIB) endif IPOPTLIBS = \ $(IPOPTOBJDIR)/src/Interfaces/libipopt.la LIBS += `cat $(IPOPTOBJDIR)/src/Interfaces/ipopt_addlibs_cpp.txt` \ `cat $(BCPOBJDIR)/bcp_addlibs.txt` \ `cat $(CBCOBJDIR)/cbc_addlibs.txt` \ `cat $(CGLOBJDIR)/cgl_addlibs.txt` \ `cat $(OSIOBJDIR)/osi_addlibs.txt` \ `cat $(CLPOBJDIR)/clp_addlibs.txt` \ `cat $(COINUTILSOBJDIR)/coinutils_addlibs.txt` ######################################################################## # bonminbcp # ######################################################################## bonminbcp_SOURCES = BB_cut.hpp BM.hpp \ BB_cut.cpp BM.cpp BM_tm.cpp BM_lp.cpp BM_lp_branch.cpp BM_pack.cpp bonminbcp_DEPENDENCIES = \ ../../src/CbcBonmin/libbonminampl.la \ ../../src/CbcBonmin/libbonmin.la \ $(IPOPTOBJDIR)/src/Apps/AmplSolver/libamplinterface.la \ $(IPOPTLIBS) \ $(LIBCBCCOPY) \ $(COINLIBS) \ amplsolver.a AMPL_PATCHED_FILES = \ asl.h \ jac0dim.c \ misc.c \ pfg_read.c AMPL_SRC = $(abs_source_dir)/../ThirdParty/ASL/solvers amplsolver.a: rm -rf solvers mkdir -p solvers ; \ cd solvers ; \ for f in $(AMPL_SRC)/*.c* $(AMPL_SRC)/*.h* $(AMPL_SRC)/makefile.u; do \ $(LN_S) $$f ; \ done ; \ for f in $(AMPL_PATCHED_FILES); do \ rm $$f ; \ cp $(AMPL_SRC)/$$f . ; \ done ; \ patch -p1 < $(abs_source_dir)/experimental/Bcp/ampl_bcp.patch ; \ for f in `grep -l 'strtod' *.c *.h`; do \ mv $$f $$f.orig ; \ sed -e 's/strtod/ASLstrtod/g' -e 's/ASLASLstrtod/ASLstrtod/g' $$f.orig > $$f ; \ rm $$f.orig ; \ done ; \ for f in `grep -l 'atof(' *.c`; do \ mv $$f $$f.orig ; \ sed -e 's/atof/ASLatof/g' -e 's/ASLASLatof/ASLatof/g' $$f.orig > $$f ; \ rm $$f.orig ; \ done ; \ rm -f aslflags.txt ; \ grep ASLMAKEFLAGS ../../../../ThirdParty/ASL/config.log | tail -1 > aslflags.txt ; \ cat aslflags.txt ; \ eval `sed -e "s/ CFLAGS=\".*\"//" aslflags.txt`; \ eval `sed -e "s/.*CFLAGS=\"\(.*\)\".*/CFLAGS=\"-DNO_FUNCADD \1\"/" aslflags.txt` ; \ if test "$(EXEEXT)" = ".exe"; then \ sed -e 's/a.out/a.exe/' makefile.u > blabla ; \ mv blabla makefile.u ; \ fi ; \ $(MAKE) CC="$(CC)" $$ASLMAKEFLAGS CFLAGS="$$CFLAGS" -f makefile.u ; \ cp amplsolver.a .. rm -rf solvers bonminbcp_LDADD = $(bonminbcp_DEPENDENCIES) \ $(ADDLIBS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows AM_CPPFLAGS = \ -I`$(CYGPATH_W) $(srcdir)/../../src/Algorithms` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Algorithms/OaGenerators` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Algorithms/Branching` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Algorithms/Ampl` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Interfaces` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Interfaces/Ipopt` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Interfaces/Ampl` \ -I`$(CYGPATH_W) $(srcdir)/../../src/CbcBonmin` \ -I`$(CYGPATH_W) $(IPOPTOBJDIR)/inc` \ -I`$(CYGPATH_W) $(IPOPTSRCDIR)/src/Common` \ -I`$(CYGPATH_W) $(IPOPTSRCDIR)/src/Interfaces` \ -I`$(CYGPATH_W) $(IPOPTSRCDIR)/src/LinAlg` \ -I`$(CYGPATH_W) $(COINUTILSSRCDIR)/src` \ -I`$(CYGPATH_W) $(COINUTILSOBJDIR)/inc` \ -I`$(CYGPATH_W) $(CBCSRCDIR)/src` \ -I`$(CYGPATH_W) $(CBCOBJDIR)/inc` \ -I`$(CYGPATH_W) $(CLPSRCDIR)/src` \ -I`$(CYGPATH_W) $(CLPOBJDIR)/inc` \ -I`$(CYGPATH_W) $(OSISRCDIR)/src` \ -I`$(CYGPATH_W) $(OSISRCDIR)/src/OsiClp` \ -I`$(CYGPATH_W) $(CGLSRCDIR)/src` \ -I`$(CYGPATH_W) $(CGLSRCDIR)/src/CglProbing` \ -I`$(CYGPATH_W) $(CGLSRCDIR)/src/CglMixedIntegerRounding` \ -I`$(CYGPATH_W) $(CGLSRCDIR)/src/CglKnapsackCover` \ -I`$(CYGPATH_W) $(CGLSRCDIR)/src/CglGomory` \ -I`$(CYGPATH_W) $(BCPSRCDIR)/src/include` \ -I`$(CYGPATH_W) $(BCPOBJDIR)/inc` if COIN_HAS_CPX AM_CPPFLAGS += \ -I`$(CYGPATH_W) $(OSISRCDIR)/src/OsiCpx` \ -I`$(CYGPATH_W) $(CPXINCDIR)` endif # This line is necessary to allow VPATH compilation with MS compilers # on Cygwin DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/inc ######################################################################## # make distclean stuff # ######################################################################## CLEANFILES = $(LIBCBCCOPY) amplsolver.a DISTCLEANFILES = Bonmin-releases-1.8.9/Bonmin/experimental/Bcp/Makefile.in000066400000000000000000000612271436575401300232640ustar00rootroot00000000000000# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2006, 2007 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @COIN_HAS_ASL_TRUE@bin_PROGRAMS = bonminbcp$(EXEEXT) @COIN_HAS_CPX_TRUE@am__append_1 = \ @COIN_HAS_CPX_TRUE@ $(OSIOBJDIR)/src/OsiCpx/libOsiCpx.la \ @COIN_HAS_CPX_TRUE@ $(CPXLIB) @COIN_HAS_CPX_TRUE@am__append_2 = \ @COIN_HAS_CPX_TRUE@ -I`$(CYGPATH_W) $(OSISRCDIR)/src/OsiCpx` \ @COIN_HAS_CPX_TRUE@ -I`$(CYGPATH_W) $(CPXINCDIR)` subdir = experimental/Bcp DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/inc/config_bonmin.h CONFIG_CLEAN_FILES = am__installdirs = "$(DESTDIR)$(bindir)" binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) PROGRAMS = $(bin_PROGRAMS) am_bonminbcp_OBJECTS = BB_cut.$(OBJEXT) BM.$(OBJEXT) BM_tm.$(OBJEXT) \ BM_lp.$(OBJEXT) BM_lp_branch.$(OBJEXT) BM_pack.$(OBJEXT) bonminbcp_OBJECTS = $(am_bonminbcp_OBJECTS) am__DEPENDENCIES_1 = $(IPOPTOBJDIR)/src/Interfaces/libipopt.la am__DEPENDENCIES_2 = @COIN_HAS_CPX_TRUE@am__DEPENDENCIES_3 = \ @COIN_HAS_CPX_TRUE@ $(OSIOBJDIR)/src/OsiCpx/libOsiCpx.la \ @COIN_HAS_CPX_TRUE@ $(am__DEPENDENCIES_2) am__DEPENDENCIES_4 = $(BCPOBJDIR)/src/libBcp.la \ $(CBCOBJDIR)/src/libCbc.la $(CGLOBJDIR)/src/libCgl.la \ $(OSIOBJDIR)/src/OsiClp/libOsiClp.la \ $(OSIOBJDIR)/src/libOsi.la $(CLPOBJDIR)/src/libClp.la \ $(COINUTILSOBJDIR)/src/libCoinUtils.la $(am__DEPENDENCIES_3) am__DEPENDENCIES_5 = ../../src/CbcBonmin/libbonminampl.la \ ../../src/CbcBonmin/libbonmin.la \ $(IPOPTOBJDIR)/src/Apps/AmplSolver/libamplinterface.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4) amplsolver.a 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 = $(bonminbcp_SOURCES) DIST_SOURCES = $(bonminbcp_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADDLIBS = @ADDLIBS@ 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@ ASLLIB = @ASLLIB@ ASL_CPPFLAGS = @ASL_CPPFLAGS@ ASTYLE = @ASTYLE@ ASTYLEFLAGS = @ASTYLEFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BCPDOCDIR = @BCPDOCDIR@ BCPOBJDIR = @BCPOBJDIR@ BCPSRCDIR = @BCPSRCDIR@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ BUILD_FP_FALSE = @BUILD_FP_FALSE@ BUILD_FP_TRUE = @BUILD_FP_TRUE@ CBCDOCDIR = @CBCDOCDIR@ CBCOBJDIR = @CBCOBJDIR@ CBCSRCDIR = @CBCSRCDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ CGLDOCDIR = @CGLDOCDIR@ CGLOBJDIR = @CGLOBJDIR@ CGLSRCDIR = @CGLSRCDIR@ CLPDOCDIR = @CLPDOCDIR@ CLPOBJDIR = @CLPOBJDIR@ CLPSRCDIR = @CLPSRCDIR@ COINUTILSDOCDIR = @COINUTILSDOCDIR@ COINUTILSOBJDIR = @COINUTILSOBJDIR@ COINUTILSSRCDIR = @COINUTILSSRCDIR@ COIN_BUILD_GLPK_FALSE = @COIN_BUILD_GLPK_FALSE@ COIN_BUILD_GLPK_TRUE = @COIN_BUILD_GLPK_TRUE@ COIN_HAS_ASL_FALSE = @COIN_HAS_ASL_FALSE@ COIN_HAS_ASL_TRUE = @COIN_HAS_ASL_TRUE@ COIN_HAS_BCP_FALSE = @COIN_HAS_BCP_FALSE@ COIN_HAS_BCP_TRUE = @COIN_HAS_BCP_TRUE@ COIN_HAS_CBC_FALSE = @COIN_HAS_CBC_FALSE@ COIN_HAS_CBC_TRUE = @COIN_HAS_CBC_TRUE@ COIN_HAS_CGL_FALSE = @COIN_HAS_CGL_FALSE@ COIN_HAS_CGL_TRUE = @COIN_HAS_CGL_TRUE@ COIN_HAS_CLP_FALSE = @COIN_HAS_CLP_FALSE@ COIN_HAS_CLP_TRUE = @COIN_HAS_CLP_TRUE@ COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@ COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@ COIN_HAS_COUENNE_FALSE = @COIN_HAS_COUENNE_FALSE@ COIN_HAS_COUENNE_TRUE = @COIN_HAS_COUENNE_TRUE@ COIN_HAS_CPX_FALSE = @COIN_HAS_CPX_FALSE@ COIN_HAS_CPX_TRUE = @COIN_HAS_CPX_TRUE@ COIN_HAS_DYLP_FALSE = @COIN_HAS_DYLP_FALSE@ COIN_HAS_DYLP_TRUE = @COIN_HAS_DYLP_TRUE@ COIN_HAS_FILTERSQP_FALSE = @COIN_HAS_FILTERSQP_FALSE@ COIN_HAS_FILTERSQP_TRUE = @COIN_HAS_FILTERSQP_TRUE@ COIN_HAS_FMP_FALSE = @COIN_HAS_FMP_FALSE@ COIN_HAS_FMP_TRUE = @COIN_HAS_FMP_TRUE@ COIN_HAS_GLPK_FALSE = @COIN_HAS_GLPK_FALSE@ COIN_HAS_GLPK_TRUE = @COIN_HAS_GLPK_TRUE@ COIN_HAS_IPOPT_FALSE = @COIN_HAS_IPOPT_FALSE@ COIN_HAS_IPOPT_TRUE = @COIN_HAS_IPOPT_TRUE@ COIN_HAS_MSK_FALSE = @COIN_HAS_MSK_FALSE@ COIN_HAS_MSK_TRUE = @COIN_HAS_MSK_TRUE@ COIN_HAS_OSI_FALSE = @COIN_HAS_OSI_FALSE@ COIN_HAS_OSI_TRUE = @COIN_HAS_OSI_TRUE@ COIN_HAS_OSL_FALSE = @COIN_HAS_OSL_FALSE@ COIN_HAS_OSL_TRUE = @COIN_HAS_OSL_TRUE@ COIN_HAS_SPX_FALSE = @COIN_HAS_SPX_FALSE@ COIN_HAS_SPX_TRUE = @COIN_HAS_SPX_TRUE@ COIN_HAS_SYM_FALSE = @COIN_HAS_SYM_FALSE@ COIN_HAS_SYM_TRUE = @COIN_HAS_SYM_TRUE@ COIN_HAS_VOL_FALSE = @COIN_HAS_VOL_FALSE@ COIN_HAS_VOL_TRUE = @COIN_HAS_VOL_TRUE@ COIN_HAS_XPR_FALSE = @COIN_HAS_XPR_FALSE@ COIN_HAS_XPR_TRUE = @COIN_HAS_XPR_TRUE@ COMPILE_BONMINBCP_FALSE = @COMPILE_BONMINBCP_FALSE@ COMPILE_BONMINBCP_TRUE = @COMPILE_BONMINBCP_TRUE@ COUENNEDOCDIR = @COUENNEDOCDIR@ COUENNEOBJDIR = @COUENNEOBJDIR@ COUENNESRCDIR = @COUENNESRCDIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPXINCDIR = @CPXINCDIR@ CPXLIB = @CPXLIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DBG_FFLAGS = @DBG_FFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DYLPDOCDIR = @DYLPDOCDIR@ DYLPOBJDIR = @DYLPOBJDIR@ DYLPSRCDIR = @DYLPSRCDIR@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FADDLIBS = @FADDLIBS@ FFLAGS = @FFLAGS@ FILTERSQPLIBADD = @FILTERSQPLIBADD@ FLIBS = @FLIBS@ FMPINCDIR = @FMPINCDIR@ FMPLIB = @FMPLIB@ GLPKINCDIR = @GLPKINCDIR@ GLPKLIB = @GLPKLIB@ GLPKOBJDIR = @GLPKOBJDIR@ 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@ IPOPTDOCDIR = @IPOPTDOCDIR@ IPOPTOBJDIR = @IPOPTOBJDIR@ IPOPTSRCDIR = @IPOPTSRCDIR@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ `cat \ $(IPOPTOBJDIR)/src/Interfaces/ipopt_addlibs_cpp.txt` `cat \ $(BCPOBJDIR)/bcp_addlibs.txt` `cat \ $(CBCOBJDIR)/cbc_addlibs.txt` `cat \ $(CGLOBJDIR)/cgl_addlibs.txt` `cat \ $(OSIOBJDIR)/osi_addlibs.txt` `cat \ $(CLPOBJDIR)/clp_addlibs.txt` `cat \ $(COINUTILSOBJDIR)/coinutils_addlibs.txt` 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@ MSKINCDIR = @MSKINCDIR@ MSKLIB = @MSKLIB@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OPT_FFLAGS = @OPT_FFLAGS@ OSIDOCDIR = @OSIDOCDIR@ OSIOBJDIR = @OSIOBJDIR@ OSISRCDIR = @OSISRCDIR@ OSLINCDIR = @OSLINCDIR@ OSLLIB = @OSLLIB@ 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@ SPXINCDIR = @SPXINCDIR@ SPXLIB = @SPXLIB@ STRIP = @STRIP@ SYMDOCDIR = @SYMDOCDIR@ SYMOBJDIR = @SYMOBJDIR@ SYMSRCDIR = @SYMSRCDIR@ VERSION = @VERSION@ VOLDOCDIR = @VOLDOCDIR@ VOLOBJDIR = @VOLOBJDIR@ VOLSRCDIR = @VOLSRCDIR@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ XPRINCDIR = @XPRINCDIR@ XPRLIB = @XPRLIB@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_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@ 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@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign ######################################################################## COINLIBS = $(BCPOBJDIR)/src/libBcp.la $(CBCOBJDIR)/src/libCbc.la \ $(CGLOBJDIR)/src/libCgl.la \ $(OSIOBJDIR)/src/OsiClp/libOsiClp.la \ $(OSIOBJDIR)/src/libOsi.la $(CLPOBJDIR)/src/libClp.la \ $(COINUTILSOBJDIR)/src/libCoinUtils.la $(am__append_1) IPOPTLIBS = \ $(IPOPTOBJDIR)/src/Interfaces/libipopt.la ######################################################################## # bonminbcp # ######################################################################## bonminbcp_SOURCES = BB_cut.hpp BM.hpp \ BB_cut.cpp BM.cpp BM_tm.cpp BM_lp.cpp BM_lp_branch.cpp BM_pack.cpp bonminbcp_DEPENDENCIES = \ ../../src/CbcBonmin/libbonminampl.la \ ../../src/CbcBonmin/libbonmin.la \ $(IPOPTOBJDIR)/src/Apps/AmplSolver/libamplinterface.la \ $(IPOPTLIBS) \ $(LIBCBCCOPY) \ $(COINLIBS) \ amplsolver.a AMPL_PATCHED_FILES = \ asl.h \ jac0dim.c \ misc.c \ pfg_read.c AMPL_SRC = $(abs_source_dir)/../ThirdParty/ASL/solvers bonminbcp_LDADD = $(bonminbcp_DEPENDENCIES) \ $(ADDLIBS) # Finally, the -rpath flag is used by libtool to make sure that the shared # library is found (in the lib install directory) when we are using dynamic # libraries. bonminbcp_LDFLAGS = -rpath $(libdir) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows AM_CPPFLAGS = -I`$(CYGPATH_W) $(srcdir)/../../src/Algorithms` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Algorithms/OaGenerators` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Algorithms/Branching` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Algorithms/Ampl` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Interfaces` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Interfaces/Ipopt` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Interfaces/Ampl` \ -I`$(CYGPATH_W) $(srcdir)/../../src/CbcBonmin` -I`$(CYGPATH_W) \ $(IPOPTOBJDIR)/inc` -I`$(CYGPATH_W) $(IPOPTSRCDIR)/src/Common` \ -I`$(CYGPATH_W) $(IPOPTSRCDIR)/src/Interfaces` -I`$(CYGPATH_W) \ $(IPOPTSRCDIR)/src/LinAlg` -I`$(CYGPATH_W) \ $(COINUTILSSRCDIR)/src` -I`$(CYGPATH_W) \ $(COINUTILSOBJDIR)/inc` -I`$(CYGPATH_W) $(CBCSRCDIR)/src` \ -I`$(CYGPATH_W) $(CBCOBJDIR)/inc` -I`$(CYGPATH_W) \ $(CLPSRCDIR)/src` -I`$(CYGPATH_W) $(CLPOBJDIR)/inc` \ -I`$(CYGPATH_W) $(OSISRCDIR)/src` -I`$(CYGPATH_W) \ $(OSISRCDIR)/src/OsiClp` -I`$(CYGPATH_W) $(CGLSRCDIR)/src` \ -I`$(CYGPATH_W) $(CGLSRCDIR)/src/CglProbing` -I`$(CYGPATH_W) \ $(CGLSRCDIR)/src/CglMixedIntegerRounding` -I`$(CYGPATH_W) \ $(CGLSRCDIR)/src/CglKnapsackCover` -I`$(CYGPATH_W) \ $(CGLSRCDIR)/src/CglGomory` -I`$(CYGPATH_W) \ $(BCPSRCDIR)/src/include` -I`$(CYGPATH_W) $(BCPOBJDIR)/inc` \ $(am__append_2) # This line is necessary to allow VPATH compilation with MS compilers # on Cygwin DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/inc ######################################################################## # make distclean stuff # ######################################################################## CLEANFILES = $(LIBCBCCOPY) amplsolver.a DISTCLEANFILES = 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 experimental/Bcp/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign experimental/Bcp/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; for p in $$list; do \ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ if test -f $$p \ || test -f $$p1 \ ; then \ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ else :; fi; \ done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; for p in $$list; do \ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ rm -f "$(DESTDIR)$(bindir)/$$f"; \ done clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; for p in $$list; do \ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ echo " rm -f $$p $$f"; \ rm -f $$p $$f ; \ done bonminbcp$(EXEEXT): $(bonminbcp_OBJECTS) $(bonminbcp_DEPENDENCIES) @rm -f bonminbcp$(EXEEXT) $(CXXLINK) $(bonminbcp_LDFLAGS) $(bonminbcp_OBJECTS) $(bonminbcp_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BB_cut.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BM.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BM_lp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BM_lp_branch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BM_pack.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BM_tm.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: for dir in "$(DESTDIR)$(bindir)"; 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: -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-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-exec-am: install-binPROGRAMS 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-binPROGRAMS uninstall-info-am .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-libtool ctags distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-binPROGRAMS 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-binPROGRAMS uninstall-info-am amplsolver.a: rm -rf solvers mkdir -p solvers ; \ cd solvers ; \ for f in $(AMPL_SRC)/*.c* $(AMPL_SRC)/*.h* $(AMPL_SRC)/makefile.u; do \ $(LN_S) $$f ; \ done ; \ for f in $(AMPL_PATCHED_FILES); do \ rm $$f ; \ cp $(AMPL_SRC)/$$f . ; \ done ; \ patch -p1 < $(abs_source_dir)/experimental/Bcp/ampl_bcp.patch ; \ for f in `grep -l 'strtod' *.c *.h`; do \ mv $$f $$f.orig ; \ sed -e 's/strtod/ASLstrtod/g' -e 's/ASLASLstrtod/ASLstrtod/g' $$f.orig > $$f ; \ rm $$f.orig ; \ done ; \ for f in `grep -l 'atof(' *.c`; do \ mv $$f $$f.orig ; \ sed -e 's/atof/ASLatof/g' -e 's/ASLASLatof/ASLatof/g' $$f.orig > $$f ; \ rm $$f.orig ; \ done ; \ rm -f aslflags.txt ; \ grep ASLMAKEFLAGS ../../../../ThirdParty/ASL/config.log | tail -1 > aslflags.txt ; \ cat aslflags.txt ; \ eval `sed -e "s/ CFLAGS=\".*\"//" aslflags.txt`; \ eval `sed -e "s/.*CFLAGS=\"\(.*\)\".*/CFLAGS=\"-DNO_FUNCADD \1\"/" aslflags.txt` ; \ if test "$(EXEEXT)" = ".exe"; then \ sed -e 's/a.out/a.exe/' makefile.u > blabla ; \ mv blabla makefile.u ; \ fi ; \ $(MAKE) CC="$(CC)" $$ASLMAKEFLAGS CFLAGS="$$CFLAGS" -f makefile.u ; \ cp amplsolver.a .. rm -rf solvers # 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: Bonmin-releases-1.8.9/Bonmin/experimental/Bcp/README000066400000000000000000000001671436575401300220730ustar00rootroot00000000000000This is an experimental code to hook Bonmin to Bcp instead of Cbc. This code is not supported anymore (won't compile) Bonmin-releases-1.8.9/Bonmin/experimental/Bcp/ampl_bcp.patch000066400000000000000000000145311436575401300240110ustar00rootroot00000000000000diff -c --exclude=.depend --exclude='*.html*' -r -w solvers/asl.h /home/ladanyi/Ipopt.orig/Extern/ASL/solvers/asl.h *** solvers/asl.h 2005-06-25 12:56:47.000000000 -0400 --- /home/ladanyi/Ipopt.orig/Extern/ASL/solvers/asl.h 2006-03-03 14:50:03.000000000 -0500 *************** *** 200,205 **** --- 200,209 ---- char rl_buf[80]; void (*iadjfcn) ANSI((void*, unsigned long)); void (*dadjfcn) ANSI((void*, unsigned long)); + /* LL */ + char *snl; + int snl_pos; + int snl_len; } EdRead_ASL; #define EdRead EdRead_ASL *************** *** 542,547 **** --- 546,552 ---- ASL { Edagpars p; Edaginfo i; + EdRead_ASL Rbackup; }; typedef struct diff -c --exclude=.depend --exclude='*.html*' -r -w solvers/jac0dim.c /home/ladanyi/Ipopt.orig/Extern/ASL/solvers/jac0dim.c *** solvers/jac0dim.c 2003-12-13 16:23:55.000000000 -0500 --- /home/ladanyi/Ipopt.orig/Extern/ASL/solvers/jac0dim.c 2006-03-03 14:50:01.000000000 -0500 *************** *** 122,134 **** FILE *nl; int i, k, nlv; char *s, *se; ! EdRead ER, *R; if (!asl) badasl_ASL(asl,0,"jac0dim"); fpinit_ASL(); /* get IEEE arithmetic, if possible */ ! if (stub_len <= 0) for(i = 0; stub[i]; i++); else for(i = stub_len; stub[i-1] == ' ' && i > 0; --i); --- 122,142 ---- FILE *nl; int i, k, nlv; char *s, *se; ! EdRead *R; if (!asl) badasl_ASL(asl,0,"jac0dim"); fpinit_ASL(); /* get IEEE arithmetic, if possible */ ! R = EdReadInit_ASL(&asl->Rbackup, asl, NULL, 0); ! if (stub_len < 0) { ! /* Treat the stub as the content of the file */ ! R->snl = stub; ! R->snl_pos = 0; ! R->snl_len = -stub_len; ! nl = NULL; ! } else { ! if (stub_len == 0) for(i = 0; stub[i]; i++); else for(i = stub_len; stub[i-1] == ' ' && i > 0; --i); *************** *** 150,156 **** fprintf(Stderr, "can't open %s\n", filename); exit(1); } ! R = EdReadInit_ASL(&ER, asl, nl, 0); R->Line = 0; s = read_line(R); binary_nl = 0; --- 158,165 ---- fprintf(Stderr, "can't open %s\n", filename); exit(1); } ! } ! R->nl = nl; R->Line = 0; s = read_line(R); binary_nl = 0; *************** *** 285,291 **** { FILE *nl; ! if (nl = jac0dim_ASL(asl, stub, stub_len)) { *M = n_con; *N = n_var; *NO = n_obj; --- 294,303 ---- { FILE *nl; ! /* LL */ ! nl = jac0dim_ASL(asl, stub, stub_len); ! ! if (nl && stub_len < 0) { *M = n_con; *N = n_var; *NO = n_obj; diff -c --exclude=.depend --exclude='*.html*' -r -w solvers/misc.c /home/ladanyi/Ipopt.orig/Extern/ASL/solvers/misc.c *** solvers/misc.c 2005-05-09 00:34:50.000000000 -0400 --- /home/ladanyi/Ipopt.orig/Extern/ASL/solvers/misc.c 2006-03-02 19:38:28.000000000 -0500 *************** *** 44,49 **** --- 44,86 ---- static char anyedag[] = "fg_read (or one of its variants)"; static char psedag[] = "pfg_read, pfgh_read, or jacpdim"; + + int + #ifdef KR_headers + LL_getc(R) EdRead *R; + #else + LL_getc(EdRead *R) + #endif + { + int c; + if (R->nl) { + c = getc(R->nl); + } else { + if (R->snl_pos == R->snl_len) { + c = EOF; + } else { + c = R->snl[R->snl_pos++]; + } + } + return c; + } + + void + #ifdef KR_headers + LL_ungetc(c, R) int c; EdRead *R; + #else + LL_ungetc(int c, EdRead *R) + #endif + { + if (R->nl) { + ungetc(c, R->nl); + } else { + if (c != EOF) { + R->snl_pos--; + } + } + } + void #ifdef KR_headers exit_ASL(R, n) EdRead *R; int n; *************** *** 359,380 **** int c; R->Line++; R->lineinc = 0; ! R->rl_buf[0] = c = getc(R->nl); return c; } static void #ifdef KR_headers ! eatcr(nl) FILE *nl; #else ! eatcr(FILE *nl) #endif { int c; ! while((c = getc(nl)) == '\r'); if (c >= 0 && c != '\n') ! ungetc(c, nl); } char * --- 396,417 ---- int c; R->Line++; R->lineinc = 0; ! R->rl_buf[0] = c = LL_getc(R); return c; } static void #ifdef KR_headers ! eatcr(R) EdRead *R; #else ! eatcr(EdRead *R) #endif { int c; ! while((c = LL_getc(R)) == '\r'); if (c >= 0 && c != '\n') ! LL_ungetc(c, R); } char * *************** *** 399,405 **** } rv = s; for(;;) { ! x = getc(nl); if (x < ' ') { if (x < 0) { eof: --- 436,442 ---- } rv = s; for(;;) { ! x = LL_getc(R); if (x < ' ') { if (x < 0) { eof: *************** *** 413,428 **** if (x == '\n') break; if (x == '\r') { ! eatcr(nl); break; } } *s++ = x; if (s >= se) { for(;;) { ! x = getc(nl); if (x == '\r') { ! eatcr(nl); goto eol; } if (x == '\n') --- 450,465 ---- if (x == '\n') break; if (x == '\r') { ! eatcr(R); break; } } *s++ = x; if (s >= se) { for(;;) { ! x = LL_getc(R); if (x == '\r') { ! eatcr(R); goto eol; } if (x == '\n') *************** *** 848,853 **** --- 885,893 ---- R->can_end = 0; R->dadjfcn = asl->i.dadjfcn; R->iadjfcn = asl->i.iadjfcn; + R->snl = NULL; + R->snl_pos = 0; + R->snl_len = 0; return R; } diff -c --exclude=.depend --exclude='*.html*' -r -w solvers/pfg_read.c /home/ladanyi/Ipopt.orig/Extern/ASL/solvers/pfg_read.c *** solvers/pfg_read.c 2005-06-25 12:57:51.000000000 -0400 --- /home/ladanyi/Ipopt.orig/Extern/ASL/solvers/pfg_read.c 2006-03-03 14:56:07.000000000 -0500 *************** *** 4651,4657 **** #endif { ASLTYPE *asl; ! EdRead ER, *R; Jmp_buf JB; Static SS, *S; cgrad *cg, **cgp; --- 4651,4657 ---- #endif { ASLTYPE *asl; ! EdRead ER, *R, Rbackup; Jmp_buf JB; Static SS, *S; cgrad *cg, **cgp; *************** *** 4667,4674 **** --- 4667,4679 ---- ASL_CHECK(a, asltype, who); asl = (ASLTYPE*)a; S = S_init(&SS, asl); + Rbackup = a->Rbackup; ed_reset(asl); SS.R = R = EdReadInit_ASL(&ER, a, nl, S); + /* LL */ + R->snl = Rbackup.snl; + R->snl_pos = Rbackup.snl_pos; + R->snl_len = Rbackup.snl_len; if (flags & ASL_return_read_err) { a->i.err_jmp_ = &JB; i = setjmp(JB.jb); *************** *** 4796,4802 **** ER.can_end = 1; i = edag_peek(R); if (i == EOF) { ! fclose(nl); do_ewalk(S); if (imap) del_mblk(kimap, imap); --- 4801,4808 ---- ER.can_end = 1; i = edag_peek(R); if (i == EOF) { ! /* LL */ ! if (nl) fclose(nl); do_ewalk(S); if (imap) del_mblk(kimap, imap); Bonmin-releases-1.8.9/Bonmin/experimental/RobotBonmin/000077500000000000000000000000001436575401300227335ustar00rootroot00000000000000Bonmin-releases-1.8.9/Bonmin/experimental/RobotBonmin/BonNWayChoose.cpp000066400000000000000000000470751436575401300261320ustar00rootroot00000000000000// Copyright (C) 2006, 2008 International Business Machines // Corporation and others. All Rights Reserved. #include #include "CoinPragma.hpp" #include "BonNWayChoose.hpp" #include "BonNWayObject.hpp" #include "CoinTime.hpp" #ifndef NDEBUG #define ASSERTED_CAST static_cast #else #define ASSERTED_CAST dynamic_cast #endif namespace Bonmin { BonNWayChoose::BonNWayChoose(BabSetupBase &b, const OsiSolverInterface* solver): OsiChooseVariable(solver), br_depth_(0), bounds_(), unit_changes_(), num_ps_costs_(), num_eval_(), geo_means_(0) { Ipopt::SmartPtr options = b.options(); options->GetNumericValue("time_limit", time_limit_, b.prefix()); options->GetNumericValue("cutoff_multiplier", cutoff_multiplier_, b.prefix()); options->GetNumericValue("pseudocost_trust_value", pseudocost_trust_value_, b.prefix()); options->GetIntegerValue("strong_branch_depth", br_depth_, b.prefix()); options->GetIntegerValue("nway_branch_log_level", log_, b.prefix()); options->GetEnumValue("do_fixings", do_fixings_, b.prefix()); options->GetEnumValue("use_geo_means", geo_means_, b.prefix()); /** Set values of standard branching options.*/ int numberObjects = solver_->numberObjects(); std::cout<<"Number objects "<objects(); for (int i=0;i(object[i]); if(!nway) continue; start_nway_ = i; break; } numberObjects -= start_nway_; } BonNWayChoose::BonNWayChoose(const BonNWayChoose & rhs) : OsiChooseVariable(rhs), br_depth_(rhs.br_depth_), do_fixings_(rhs.do_fixings_), cutoff_multiplier_(rhs.cutoff_multiplier_), pseudocost_trust_value_(rhs.pseudocost_trust_value_), time_limit_(rhs.time_limit_), start_time_(rhs.start_time_), start_nway_(rhs.start_nway_), log_(rhs.log_), bounds_(rhs.bounds_), unit_changes_(rhs.unit_changes_), num_ps_costs_(rhs.num_ps_costs_), num_eval_(rhs.num_eval_), geo_means_(rhs.geo_means_) { } BonNWayChoose & BonNWayChoose::operator=(const BonNWayChoose & rhs) { if (this != &rhs) { br_depth_ = rhs.br_depth_; do_fixings_ = rhs.do_fixings_; cutoff_multiplier_ = rhs.cutoff_multiplier_; pseudocost_trust_value_ = rhs.pseudocost_trust_value_; time_limit_ = rhs.time_limit_; start_time_ = rhs.start_time_; log_ = rhs.log_; start_nway_ = rhs.start_nway_; OsiChooseVariable::operator=(rhs); bounds_ = rhs.bounds_; unit_changes_ = rhs.unit_changes_; num_ps_costs_ = rhs.num_ps_costs_; num_eval_ = rhs.num_eval_; geo_means_ = rhs.geo_means_; } return *this; } OsiChooseVariable * BonNWayChoose::clone() const { return new BonNWayChoose(*this); } BonNWayChoose::~BonNWayChoose () { } void BonNWayChoose::registerOptions(Ipopt::SmartPtr roptions) { roptions->SetRegisteringCategory("NWay Strong branching setup", RegisteredOptions::BonminCategory); roptions->AddLowerBoundedIntegerOption("nway_branch_log_level", "Log level for the branching on nways", 0,1, ""); roptions->AddLowerBoundedIntegerOption("strong_branch_depth", "To which level do we perform strong-branching", 0,0, ""); roptions->AddLowerBoundedNumberOption("cutoff_multiplier", "multiplier applied to cutoff_ for computing pseudo-cost of infeasible sub-problems", 1.,0,3., ""); roptions->AddLowerBoundedNumberOption("pseudocost_trust_value", "Trust pseudo cost of best nway object if it is above this value", 0.,0,0, ""); roptions->AddStringOption2("use_geo_means", "Use geometrical means to average pseudo-costs", "yes", "no", "Use artihmetical means", "yes", "Use geometrical means",""); roptions->AddStringOption4("do_fixings", "Do we fix variables in strong branching?", "all", "none", "Don't do any.", "in-tree", "Fix only variables in the tree", "strong-branching", "Fix variable in strong branching only", "all", "Fix whenever possible", ""); } double BonNWayChoose::compute_usefulness(int objectIndex, const OsiBranchingInformation * info) const { int nwayIndex = objectIndex - start_nway_; BonNWayObject * nway = ASSERTED_CAST(info->solver_->objects()[objectIndex]); assert(nway); size_t n = nway->numberMembers(); const int * vars = nway->members(); std::vector unit_changes(unit_changes_[nwayIndex]); if(geo_means_){ for(size_t k = 0 ; k < unit_changes.size() ; k++) unit_changes[k] = (num_ps_costs_[nwayIndex][k]) ? pow(unit_changes[k], 1./(double) num_ps_costs_[nwayIndex][k]): unit_changes[k]; } else { for(size_t k = 0 ; k < unit_changes.size() ; k++) unit_changes[k] = (num_ps_costs_[nwayIndex][k]) ? unit_changes[k]/(double) num_ps_costs_[nwayIndex][k]: unit_changes[k]; } double r_val = compute_usefulness(info, n, vars, bounds_[nwayIndex], unit_changes); return r_val; } double BonNWayChoose::compute_usefulness(const OsiBranchingInformation * info, size_t n, const int * vars,const std::vector &bounds, const std::vector &unit_changes) const { const double * solution = info->solution_; double obj_val = info->objectiveValue_; const double * lower = info->lower_; const double * upper = info->upper_; double integerTolerance = info->integerTolerance_; double cutoff = info->cutoff_*cutoff_multiplier_; double r_val = (geo_means_) ? 1 : 0; for(size_t i = 0 ; i < n ; i++){ int iCol = vars[i]; if(fabs(lower[iCol] - upper[iCol]) < integerTolerance) { //r_val *= (cutoff - obj_val); continue; //Variable is fixed } assert(lower[iCol] < upper[iCol]); double residual = upper[iCol] - solution[iCol]; double score = std::min(cutoff - obj_val, std::max(residual*unit_changes[i],bounds[i] - obj_val)); if(geo_means_) r_val*=score; else r_val += score; } return r_val; } int BonNWayChoose::setupList ( OsiBranchingInformation *info, bool initialize) { assert(initialize); if (initialize) { status_=-2; delete [] goodSolution_; bestObjectIndex_=-1; goodSolution_ = NULL; goodObjectiveValue_ = COIN_DBL_MAX; } numberOnList_=0; numberUnsatisfied_=0; int numberObjects = info->solver_->numberObjects() - start_nway_; double cutoff = info->cutoff_; if(info->depth_ == 0){ bounds_.resize(0); unit_changes_.resize(0); bounds_.resize(numberObjects, std::vector(numberObjects,cutoff)); unit_changes_.resize(numberObjects, std::vector(numberObjects,0)); num_eval_.resize(numberObjects, 0); num_ps_costs_.resize(numberObjects, std::vector(numberObjects,0)); } else { assert(unit_changes_.size() == numberObjects); assert(bounds_.size() == unit_changes_.size()); } //Always allow all objects on the list int maximumStrong = numberObjects; double check = -COIN_DBL_MAX; int checkIndex=0; int bestPriority=COIN_INT_MAX; int putOther = numberObjects; int i; for (i=0;isolver_->objects(); object += start_nway_; // Say feasible bool feasible = true; for ( i=0;iinfeasibility(info,way); if (value>0.0) { numberUnsatisfied_++; int priorityLevel = object[i]->priority(); // Better priority? Flush choices. if (priorityLevel=0;j--) { if (list_[j]>=0) { int iObject = list_[j]; list_[j]=-1; useful_[j]=0.0; list_[--putOther]=iObject; } } bestPriority = priorityLevel; check=-COIN_DBL_MAX; checkIndex=0; } if (priorityLevel==bestPriority) { // Modify value //Compute usefullness if(info->depth_ != 0){ value = compute_usefulness(i + start_nway_, info); } if (value>check) { //add to list int iObject = list_[checkIndex]; if (iObject>=0) { assert (list_[putOther-1]<0); list_[--putOther]=iObject; // to end } list_[checkIndex]= i + start_nway_; assert (checkIndex=0) { if (useful_[j]=0) { list_[numberOnList_]=list_[i]; useful_[numberOnList_++]=-useful_[i]; } } if (numberOnList_) { // Sort CoinSort_2(useful_,useful_+numberOnList_,list_); // move others i = numberOnList_; for (;putOtherdefaultDual_ = -1.0; // switch off delete [] info->usefulRegion_; delete [] info->indexRegion_; return numberUnsatisfied_; } /* Choose a variable Returns - -1 Node is infeasible 0 Normal termination - we have a candidate 1 All looks satisfied - no candidate 2 We can change the bound on a variable - but we also have a strong branching candidate 3 We can change the bound on a variable - but we have a non-strong branching candidate 4 We can change the bound on a variable - no other candidates We can pick up branch from whichObject() and whichWay() We can pick up a forced branch (can change bound) from whichForcedObject() and whichForcedWay() If we have a solution then we can pick up from goodObjectiveValue() and goodSolution() */ int BonNWayChoose::chooseVariable( OsiSolverInterface * solver, OsiBranchingInformation *info, bool fixVariables) { if(!numberUnsatisfied_) return 1;//Node is feasible double cutoff = info->cutoff_; double obj_val = info->objectiveValue_; if(info->depth_ > br_depth_ && ( (- useful_[0] > pseudocost_trust_value_ )|| num_eval_[list_[0] - start_nway_] >= 18) ){ const double * lower = info->lower_; const double * upper = info->upper_; // See if quick variable fixing can be done int n_fixed = 0; if(do_fixings_ > 1){ for(int i = 0 ; i < numberUnsatisfied_ ; i++){ int iObject = list_[i]; int nwayIndex = iObject - start_nway_; const BonNWayObject * nway = ASSERTED_CAST(solver->object(iObject)); size_t n = nway->numberMembers(); const int * vars = nway->members(); for(size_t j = 0 ; j < n ; j++){ int iCol = vars[j]; if(upper[iCol] < lower[iCol] + 0.5) continue;//variable already fixed to lower buund if(bounds_[nwayIndex][j] > cutoff){//It can be fixed solver->setColUpper(iCol, lower[iCol]); n_fixed ++; } } } if(n_fixed && log_ > 1) printf("NWAY: Fixed %i variables\n", n_fixed); } assert(bounds_.size() == unit_changes_.size()); assert(unit_changes_.size() == info->solver_->numberObjects() - start_nway_); //Just take the most usefull bestObjectIndex_ = list_[0]; bestWhichWay_ = 1; OsiObject * obj = solver->objects()[bestObjectIndex_]; obj->setWhichWay(bestWhichWay_); if(log_ > 1){ printf("level %i branch on %i bound %g usefullness %g.\n", info->depth_, bestObjectIndex_ - start_nway_, obj_val, - useful_[0]); } if(n_fixed) return 2; return 0; } if(log_ > 0) printf("Restarting strong branching loop....\n\n"); numberStrongIterations_ = 0; numberStrongDone_ = 0; int numberLeft = numberOnList_;//Always do full strong at root int returnCode=0; bestObjectIndex_ = -1; bestWhichWay_ = -1; firstForcedObjectIndex_ = -1; firstForcedWhichWay_ =-1; double best_score = -COIN_DBL_MAX; int bestPriority=0; int n = solver->getNumCols(); std::vector saveLower(n); std::vector saveUpper(n); std::copy(info->lower_, info->lower_ + n, saveLower.begin()); std::copy(info->upper_, info->upper_ + n, saveUpper.begin()); solver->markHotStart(); for (int i=0;iobject(iObject)->priority(); if (objectPriority >= bestPriority){ bestPriority = objectPriority; } else break; double score; int r_val = doStrongBranching(solver, info, iObject, saveLower.data(), saveUpper.data(), score); if(r_val == -1) { if(log_ > 0) std::cout<<"This is Infeasible"< 1 && r_val == 1 && info->depth_ == 0) returnCode=2; //Compute Score if(log_ > 0) printf("Usefullness from strong branching on %i : %g\n", iObject - start_nway_, score); if(score > best_score){//We have a winner best_score = score; bestObjectIndex_ = iObject; bestWhichWay_ = 0; } if (r_val==3) { returnCode = 3; // max time - just choose one if(bestObjectIndex_ < 0){ bestObjectIndex_ = list_[0]; bestWhichWay_ = 0; } break; } } solver->unmarkHotStart(); return returnCode; } /* This is a utility function which does strong branching on one nway object and stores the results in appropriate arrays of the class and maybe more. It returns - -1 - branch was infeasible both ways 0 - nothing can be fixed 1 - object can be fixed (returnCriterion==0) 3 - time limit */ int BonNWayChoose::doStrongBranching( OsiSolverInterface * solver, OsiBranchingInformation *info, int objectIndex, double * saveLower, double * saveUpper, double & score) { int nwayIndex = objectIndex - start_nway_; const double * lower = info->lower_; const double * upper = info->upper_; int numberColumns = solver->getNumCols(); double timeStart = CoinCpuTime(); int numberObjects = info->solver_->numberObjects(); const BonNWayObject * nway = ASSERTED_CAST(solver->object(objectIndex)); assert(nway); BonNWayBranchingObject * branch = ASSERTED_CAST(nway->createBranch(solver, info, 1)); int branches_left = branch->numberBranchesLeft(); int number_branches = branch->numberBranchesLeft(); int n_can_be_fixed = 0; double big_val = cutoff_multiplier_*info->cutoff_;// For infeasibles if(big_val > 1e10){ big_val = 10*info->objectiveValue_;} big_val += fabs(big_val)*1e-5; std::vector unit_changes(numberObjects - start_nway_, -DBL_MAX); //std::vector unit_changes(numberObjects - start_nway_, 0); while(branches_left){ branch->branch(solver); int v_br = branch->var_branched_on(); int s_br = branch->seq_branched_on(); double residual = upper[v_br] - info->solution_[v_br]; solver->solveFromHotStart() ; numberStrongIterations_ += solver->getIterationCount(); numberStrongDone_++; double obj_val = solver->getObjValue(); if(solver->isProvenPrimalInfeasible() || (solver->isProvenOptimal() && obj_val > info->cutoff_)){//infeasible if(info->depth_ == 0){ bounds_[nwayIndex][s_br] = big_val; } unit_changes[s_br] = (big_val - info->objectiveValue_)/residual; if(do_fixings_ > 1){ n_can_be_fixed++; if(log_ > 0) printf("Fixing variable %i to 0 the cutoff is %g\n", v_br, big_val); saveUpper[v_br] = saveLower[v_br]; } } else{ if(info->depth_ == 0){ bounds_[nwayIndex][s_br] = obj_val; } unit_changes[s_br] = (obj_val - info->objectiveValue_)/residual; } // Restore bounds for (int j=0;jsetColLower(j,saveLower[j]); if (saveUpper[j] != upper[j]) solver->setColUpper(j,saveUpper[j]); } branches_left = branch->numberBranchesLeft(); } score = compute_usefulness(info, nway->numberMembers(), nway->members(), bounds_[nwayIndex], unit_changes); if(info->depth_ == 0){//At root bounds contains valid bound on obj after branching, remember if(do_fixings_ == 1 || do_fixings_ == 3) nway->set_bounds(bounds_[nwayIndex]); for(size_t k = 0 ; k < unit_changes.size() ; k++){ num_ps_costs_[nwayIndex][k]=1; } unit_changes_[nwayIndex] = unit_changes; num_eval_[nwayIndex] = 1; } else if (n_can_be_fixed < number_branches -1){ num_eval_[nwayIndex]++; for(size_t k = 0 ; k < unit_changes.size() ; k++){ if(unit_changes[k] > 0.){ if(geo_means_) unit_changes_[nwayIndex][k] *= unit_changes[k]; else unit_changes_[nwayIndex][k] += unit_changes[k]; num_ps_costs_[nwayIndex][k]++; } } } if(n_can_be_fixed == number_branches){ return -1; } if(n_can_be_fixed){ return 1; } bool hitMaxTime = ( CoinCpuTime()-timeStart > info->timeRemaining_) || ( CoinCpuTime() - start_time_ > time_limit_); if (hitMaxTime) { return 3; } return 0; } }/* Ends Bonmin's namespace.*/ Bonmin-releases-1.8.9/Bonmin/experimental/RobotBonmin/BonNWayChoose.hpp000066400000000000000000000102741436575401300261260ustar00rootroot00000000000000// Copyright (C) 2006, 2008 International Business Machines // Corporation and others. All Rights Reserved. #ifndef BonNWayChoose_H #define BonNWayChoose_H #include "OsiChooseVariable.hpp" #include "BonBabSetupBase.hpp" #include "BonNWayObject.hpp" #define OLD_USEFULLNESS namespace Bonmin { /** This class chooses a variable to branch on This is the base class for the branching rules in Bonmin (inherits from OsiChooseVariable). This class implements a simple strong branching algorithm where the changes in the objective value induced by branching on a specific object are estimated with the pure virtual function fill_changes. */ class BonNWayChoose : public OsiChooseVariable { protected: public: /// Constructor from solver (so we can set up arrays etc) BonNWayChoose (BabSetupBase& b, const OsiSolverInterface* solver); /// Copy constructor BonNWayChoose (const BonNWayChoose &); /// Assignment operator BonNWayChoose & operator= (const BonNWayChoose& rhs); /// Clone virtual OsiChooseVariable * clone() const; /// Destructor virtual ~BonNWayChoose (); /** Helper function for setupList and chooseVariable, compute usefullness of an nway object */ double compute_usefulness(int objectIndex, const OsiBranchingInformation * info) const; double compute_usefulness(const OsiBranchingInformation * info, size_t n, const int * vars, const std::vector &bounds, const std::vector &unit_changes) const; /** Sets up strong list and clears all if initialize is true. Returns number of infeasibilities. */ virtual int setupList ( OsiBranchingInformation *info, bool initialize); /** Choose a variable Returns - -1 Node is infeasible 0 Normal termination - we have a candidate 1 All looks satisfied - no candidate 2 We can change the bound on a variable - but we also have a strong branching candidate 3 We can change the bound on a variable - but we have a non-strong branching candidate 4 We can change the bound on a variable - no other candidates We can pick up branch from bestObjectIndex() and bestWhichWay() We can pick up a forced branch (can change bound) from firstForcedObjectIndex() and firstForcedWhichWay() If we have a solution then we can pick up from goodObjectiveValue() and goodSolution() If fixVariables is true then 2,3,4 are all really same as problem changed */ virtual int chooseVariable( OsiSolverInterface * solver, OsiBranchingInformation *info, bool fixVariables); /** This is a utility function which does strong branching on a list of objects and stores the results in OsiHotInfo.objects. On entry the object sequence is stored in the OsiHotInfo object and maybe more. It returns - -1 - one branch was infeasible both ways 0 - all inspected - nothing can be fixed 1 - all inspected - some can be fixed (returnCriterion==0) 2 - may be returning early - one can be fixed (last one done) (returnCriterion==1) 3 - returning because max time */ virtual int doStrongBranching( OsiSolverInterface * solver, OsiBranchingInformation *info, int iObject, double * saveLow, double * saveUp, double &score); /** Register class options.*/ static void registerOptions(Ipopt::SmartPtr roptions); private: /** Default Constructor, forbiden for some reason.*/ BonNWayChoose (); /** depth of strong-branching.*/ int br_depth_; /** Do we fix?*.*/ Ipopt::Index do_fixings_; /** Cutoff multiplier for infeasibles*/ double cutoff_multiplier_; /** Trust value for the pseudo costs.*/ double pseudocost_trust_value_; /** Global time limit for algorithm. */ double time_limit_; /** Starting time of algorithm.*/ double start_time_; /// Start of nway objects in array int start_nway_; /// log level int log_; typedef std::vector< std::vector > full_mat; full_mat bounds_; full_mat unit_changes_; std::vector < std::vector > num_ps_costs_; std::vector num_eval_; int geo_means_; }; } #endif Bonmin-releases-1.8.9/Bonmin/experimental/RobotBonmin/BonNWayObject.cpp000066400000000000000000000251101436575401300261020ustar00rootroot00000000000000// $Id$ // 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). // Edwin 11/9/2009-- carved out of CbcBranchActual #include #include #include #include #include #include "CoinTypes.hpp" #include "OsiSolverInterface.hpp" #include "OsiSolverBranch.hpp" #include "BonNWayObject.hpp" #include "CoinSort.hpp" #include "CoinError.hpp" //#define FULL_PRINT namespace Bonmin { //############################################################################## // Default Constructor BonNWayObject::BonNWayObject () : OsiObject(), members_(), consequence_(NULL), quicky_(false), only_frac_branch_(0) { } // Useful constructor (which are integer indices) BonNWayObject::BonNWayObject (int numberMembers, const int * which, int identifier): OsiObject(), members_(numberMembers), quicky_(false), only_frac_branch_(0)//INT_MAX) { if (numberMembers) { memcpy(members_.data(), which, numberMembers*sizeof(int)); } else { } consequence_ = NULL; } // Copy constructor BonNWayObject::BonNWayObject ( const BonNWayObject & rhs) : OsiObject(rhs), members_(rhs.members_), quicky_(rhs.quicky_), only_frac_branch_(rhs.only_frac_branch_) { consequence_ = NULL; if (members_.size()) { if (rhs.consequence_) { consequence_ = new n_way_consequences* [members_.size()]; for (size_t i = 0; i < members_.size(); i++) { if (rhs.consequence_[i]) consequence_[i] = rhs.consequence_[i]->clone(); else consequence_[i] = NULL; } } } else { } } // Clone OsiObject * BonNWayObject::clone() const { return new BonNWayObject(*this); } // Assignment operator BonNWayObject & BonNWayObject::operator=( const BonNWayObject & rhs) { if (this != &rhs) { OsiObject::operator=(rhs); members_ = rhs.members_; quicky_ = rhs.quicky_; only_frac_branch_ = rhs.only_frac_branch_; if (consequence_) { for (size_t i = 0; i < members_.size(); i++) delete consequence_[i]; delete [] consequence_; consequence_ = NULL; } if (rhs.consequence_) { consequence_ = new n_way_consequences* [members_.size()]; for (size_t i = 0; i < members_.size(); i++) { if (rhs.consequence_[i]) consequence_[i] = rhs.consequence_[i]->clone(); else consequence_[i] = NULL; } } } return *this; } // Destructor BonNWayObject::~BonNWayObject () { if (consequence_) { for (size_t i = 0; i < members_.size(); i++) delete consequence_[i]; delete [] consequence_; } } // Set up a consequence for a single member void BonNWayObject::setConsequence(int iMember, const n_way_consequences& consequence) { if (!consequence_) { consequence_ = new n_way_consequences* [members_.size()]; for (size_t i = 0; i < members_.size(); i++) consequence_[i] = NULL; } consequence_[iMember] = consequence.clone(); } // Applies a consequence for a single member void BonNWayObject::applyConsequence(OsiSolverInterface * solver, int iSequence, int state) const { assert (state == -9999 || state == 9999); if (consequence_) { n_way_consequences* consequence = consequence_[iSequence]; if (consequence) consequence->applyToSolver(solver, state); } } double BonNWayObject::infeasibility(const OsiBranchingInformation * info, int &preferredWay) const { int numberUnsatis = 0; size_t j; const double * solution = info->solution_; const double * lower = info->lower_; const double * upper = info->upper_; double largestValue = 0.0; double integerTolerance = info->integerTolerance_; for (j = 0; j < members_.size(); j++) { int iColumn = members_[j]; double value = solution[iColumn]; value = CoinMax(value, lower[iColumn]); value = CoinMin(value, upper[iColumn]); double distance = CoinMin(value - lower[iColumn], upper[iColumn] - value); if (distance > integerTolerance) { numberUnsatis++; largestValue = CoinMax(distance, largestValue); } } preferredWay = 1; if (numberUnsatis) { return largestValue; } else { return 0.0; // satisfied } } // This looks at solution and sets bounds to contain solution double BonNWayObject::feasibleRegion(OsiSolverInterface * solver, const OsiBranchingInformation * info) const { size_t j; const double * solution = info->solution_; const double * lower = info->lower_; const double * upper = info->upper_; double integerTolerance = info->integerTolerance_; double r_val = 0; for (j = 0; j < members_.size(); j++) { int iColumn = members_[j]; double value = solution[iColumn]; value = CoinMax(value, lower[iColumn]); value = CoinMin(value, upper[iColumn]); if (value >= upper[iColumn] - integerTolerance) { r_val += value - upper[iColumn]; solver->setColLower(iColumn, upper[iColumn]); } else { assert (value <= lower[iColumn] + integerTolerance); r_val += value - lower[iColumn]; solver->setColUpper(iColumn, lower[iColumn]); } } return r_val; } OsiBranchingObject * BonNWayObject::createBranch(OsiSolverInterface * solver, const OsiBranchingInformation * info, int way) const { const double * solution = info->solution_; const double * lower = info->lower_; const double * upper = info->upper_; double integerTolerance = info->integerTolerance_; double cutoff = info->cutoff_; std::vector list; list.reserve(members_.size()); std::vector sort; sort.reserve(members_.size()); int n_skipped = 0; std::list skipped; for (size_t j = 0; j < members_.size(); j++) { const int& iColumn = members_[j]; double value = solution[iColumn]; value = CoinMax(value, lower[iColumn]); value = CoinMin(value, upper[iColumn]); if (upper[iColumn] > lower[iColumn]) { if(bounds_.size() && bounds_[j] > cutoff) { //printf("Fathom branch on bound %i : %g > %g\n", j, bounds_[j], cutoff); continue; } if( (quicky_ || info->depth_ > only_frac_branch_ ) && fabs(solution[iColumn] - lower[iColumn]) < integerTolerance){ if(info->depth_ > only_frac_branch_) { n_skipped++; //printf("Skipping variable %i\n", iColumn); skipped.push_back(static_cast(j)); continue; } } double distance = upper[iColumn] - value; list.push_back(static_cast(j)); sort.push_back(distance); } } if(n_skipped == 1) {//False subset put back the missing since branching up allows applying consequences const int& iColumn = members_[skipped.front()]; double value = solution[iColumn]; value = CoinMax(value, lower[iColumn]); value = CoinMin(value, upper[iColumn]); double distance = upper[iColumn] - value; list.push_back(skipped.front()); sort.push_back(distance); skipped.pop_front(); n_skipped --; } // sort CoinSort_2(sort.data(), sort.data() + sort.size(), list.data()); // create object OsiBranchingObject * branch; //if(n_skipped) printf("Creating branch n_skipped is %i numberFree %i\n", n_skipped, numberFree); branch = new BonNWayBranchingObject(solver, this, list, skipped); return branch; } // Default Constructor BonNWayBranchingObject::BonNWayBranchingObject() : OsiBranchingObject(), object_(NULL), order_(), skipped_() { } // Useful constructor BonNWayBranchingObject::BonNWayBranchingObject (OsiSolverInterface * solver, const BonNWayObject * nway, const std::vector& order, const std::list &skipped) : OsiBranchingObject(solver, 0.5), order_(order), skipped_(skipped) { numberBranches_ = static_cast(order_.size()) + (!skipped.empty()); object_ = nway; } // Copy constructor BonNWayBranchingObject::BonNWayBranchingObject ( const BonNWayBranchingObject & rhs) : OsiBranchingObject(rhs), object_(rhs.object_), order_(rhs.order_), skipped_(rhs.skipped_) { object_ = rhs.object_; } // Assignment operator BonNWayBranchingObject & BonNWayBranchingObject::operator=( const BonNWayBranchingObject & rhs) { if (this != &rhs) { OsiBranchingObject::operator=(rhs); object_ = rhs.object_; order_ = rhs.order_; skipped_ = rhs.skipped_; } return *this; } OsiBranchingObject * BonNWayBranchingObject::clone() const { return (new BonNWayBranchingObject(*this)); } // Destructor BonNWayBranchingObject::~BonNWayBranchingObject () { } double BonNWayBranchingObject::branch(OsiSolverInterface * solver) { int which = branchIndex_; branchIndex_++; if(!skipped_.empty() && branchIndex_ == static_cast(order_.size())){//We are branching on a subset last branch fixes all in subset to 0 which = -1; // Simply done by setting which to a dummy value; } return branch(solver, which); } double BonNWayBranchingObject::branch(OsiSolverInterface * solver, int which) { const double * lower = solver->getColLower(); const double * upper = solver->getColUpper(); const int * members = object_->members(); for (size_t j = 0; j < order_.size(); j++) { const int& iSequence = order_[j]; const int& iColumn = members[iSequence]; if (j != which) { solver->setColUpper(iColumn, lower[iColumn]); assert (lower[iColumn] > -1.0e20); } else { solver->setColLower(iColumn, upper[iColumn]); #ifdef FULL_PRINT printf("Up Fix %d to %g\n", iColumn, upper[iColumn]); #endif assert (upper[iColumn] < 1.0e20); // apply any consequences object_->applyConsequence(solver, iSequence, 9999); } } if(which != -1){ for(std::list::iterator k = skipped_.begin() ; k != skipped_.end() ; k++){ assert(upper[members[*k]] > lower[members[*k]] + 0.5); solver->setColUpper(members[*k], lower[members[*k]]); } } return 0.0; } } Bonmin-releases-1.8.9/Bonmin/experimental/RobotBonmin/BonNWayObject.hpp000066400000000000000000000130511436575401300261100ustar00rootroot00000000000000// $Id$ // 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). // Pierre Bonami 13/10/2011 copy and modify CbcNWay to adapt to use an OsiObject for Bonmin // // Edwin 11/9/2009-- carved out of CbcBranchActual /** Define an n-way class for variables. Only valid value is one at UB others at LB Normally 0-1 */ #ifndef BonNWayObject_H #define BonNWayObject_H #include "OsiBranchingObject.hpp" #include "CbcConsequence.hpp" #include namespace Bonmin { class n_way_consequences { public: std::vector indices; n_way_consequences(): indices(){ } n_way_consequences(const n_way_consequences& rhs): indices(rhs.indices){ } n_way_consequences& operator=(const n_way_consequences& rhs){ if(this != &rhs){ indices = rhs.indices; } return *this; } n_way_consequences * clone() const{ return new n_way_consequences(*this); } void applyToSolver(OsiSolverInterface * solver, int state) const{ if(state < 0) return; int num_one = 0; for(size_t i = 0 ; i < indices.size() ; i++){ if(solver->getColLower()[indices[i]] > 0.9) num_one++; solver->setColUpper(indices[i],solver->getColLower()[indices[i]]); } assert(num_one == 0); } }; class BonNWayObject : public OsiObject { public: // Default Constructor BonNWayObject (); /** Useful constructor (which are matrix indices) */ BonNWayObject (int numberMembers, const int * which, int identifier); // Copy constructor BonNWayObject ( const BonNWayObject &); /// Clone virtual OsiObject * clone() const; /// Assignment operator BonNWayObject & operator=( const BonNWayObject& rhs); /// Destructor virtual ~BonNWayObject (); /// Set up a consequence for a single member void setConsequence(int iMember, const n_way_consequences & consequence); /// Applies a consequence for a single member void applyConsequence(OsiSolverInterface * solver, int iSequence, int state) const; /// Infeasibility - large is 0.5 (and 0.5 will give this) virtual double infeasibility(const OsiBranchingInformation * info, int &preferredWay) const; /// This looks at solution and sets bounds to contain solution virtual double feasibleRegion(OsiSolverInterface * solver, const OsiBranchingInformation * info) const; /// Creates a branching object virtual OsiBranchingObject * createBranch(OsiSolverInterface * solver, const OsiBranchingInformation * info, int way) const; /// Number of members inline size_t numberMembers() const { return members_.size(); } /// Members (indices in range 0 ... numberColumns-1) inline const int * members() const { return members_.data(); } void set_bounds(std::vector & bounds) const{ bounds_ = bounds; } void make_quick(){quicky_ = true;} void set_only_frac_branches(int depth){ only_frac_branch_ = depth; } private: /// data /// Members (indices in range 0 ... numberColumns-1) std::vector members_; /// Consequences (normally NULL) n_way_consequences ** consequence_; /// Bounds on the members mutable std::vector bounds_; /// Quicky only branch up on variables with non zero value bool quicky_; /// Only branch on fractional variables (last branch puts all of them to 0) int only_frac_branch_; }; /** N way branching Object class. Variable is number of set. */ class BonNWayBranchingObject : public OsiBranchingObject { public: // Default Constructor BonNWayBranchingObject (); /** Useful constructor - order had matrix indices way_ -1 corresponds to setting first, +1 to second, +3 etc. this is so -1 and +1 have similarity to normal */ BonNWayBranchingObject (OsiSolverInterface * solver, const BonNWayObject * nway, const std::vector& order, const std::list& skipped); // Copy constructor BonNWayBranchingObject ( const BonNWayBranchingObject &); // Assignment operator BonNWayBranchingObject & operator=( const BonNWayBranchingObject& rhs); /// Clone virtual OsiBranchingObject * clone() const; // Destructor virtual ~BonNWayBranchingObject (); using OsiBranchingObject::branch ; /// Does next branch and updates state virtual double branch(OsiSolverInterface * solver); /// Branch on specified state virtual double branch(OsiSolverInterface * solver, int state); /** The number of branch arms created for this branching object */ virtual int numberBranches() const { return static_cast(order_.size()) + (!skipped_.empty()); } /// Is this a two way object (-1 down, +1 up) virtual bool twoWay() const { return false; } inline int var_branched_on(){ if(branchIndex_ > 0) return object_->members()[order_[branchIndex_ - 1]]; return -1; } inline int seq_branched_on(){ if(branchIndex_ > 0) return order_[branchIndex_ - 1]; return -1; } inline int state_branched_on(){ return branchIndex_ - 1; } private: /// Points back to object const BonNWayObject * object_; /// order of branching std::vector order_; /// Is only branching on a subset of variables (has to do a last branch with all variables in order set to 0) std::list skipped_; }; } #endif Bonmin-releases-1.8.9/Bonmin/experimental/RobotBonmin/Makefile.am000066400000000000000000000035671436575401300250020ustar00rootroot00000000000000# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 434 2007-03-28 12:58:54Z andreasw $ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign # What is done in this directory: bin_PROGRAMS = robotbonmin # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows AM_CPPFLAGS = \ -I`$(CYGPATH_W) $(srcdir)/../../src/Apps` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Algorithms` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Algorithms/Branching` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Algorithms/OaGenerators` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Algorithms/Ampl` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Interfaces` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Interfaces/Ipopt` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Interfaces/Ampl` \ -I`$(CYGPATH_W) $(srcdir)/../../src/CbcBonmin` \ -I`$(CYGPATH_W) $(srcdir)/../../src/CbcBonmin/Heuristics` \ $(BONMINLIB_CFLAGS) $(ASL_CFLAGS) ######################################################################## # robotbonmin # ######################################################################## robotbonmin_SOURCES = Robot-bonmin.cpp \ RobotSetup.cpp RobotSetup.hpp \ BonNWayChoose.cpp BonNWayChoose.hpp BonNWayObject.cpp BonNWayObject.hpp robotbonmin_LDADD = \ ../../src/Interfaces/Ampl/libbonamplinterface.la \ ../../src/CbcBonmin/libbonmin.la \ $(ASL_LIBS) \ $(BONMINLIB_LIBS) ######################################################################## # make distclean stuff # ######################################################################## CLEANFILES = DISTCLEANFILES = Bonmin-releases-1.8.9/Bonmin/experimental/RobotBonmin/Makefile.in000066400000000000000000000524621436575401300250110ustar00rootroot00000000000000# 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@ bin_PROGRAMS = robotbonmin$(EXEEXT) subdir = experimental/RobotBonmin 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/Interfaces/config.h \ $(top_builddir)/src/Interfaces/config_bonmin.h CONFIG_CLEAN_FILES = am__installdirs = "$(DESTDIR)$(bindir)" binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) PROGRAMS = $(bin_PROGRAMS) am_robotbonmin_OBJECTS = Robot-bonmin.$(OBJEXT) RobotSetup.$(OBJEXT) \ BonNWayChoose.$(OBJEXT) BonNWayObject.$(OBJEXT) robotbonmin_OBJECTS = $(am_robotbonmin_OBJECTS) am__DEPENDENCIES_1 = robotbonmin_DEPENDENCIES = \ ../../src/Interfaces/Ampl/libbonamplinterface.la \ ../../src/CbcBonmin/libbonmin.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/src/Interfaces -I$(top_builddir)/src/Interfaces 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 = $(robotbonmin_SOURCES) DIST_SOURCES = $(robotbonmin_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@ ASL_CFLAGS = @ASL_CFLAGS@ ASL_CFLAGS_INSTALLED = @ASL_CFLAGS_INSTALLED@ ASL_DATA = @ASL_DATA@ ASL_DATA_INSTALLED = @ASL_DATA_INSTALLED@ ASL_DEPENDENCIES = @ASL_DEPENDENCIES@ ASL_LIBS = @ASL_LIBS@ ASL_LIBS_INSTALLED = @ASL_LIBS_INSTALLED@ ASTYLE = @ASTYLE@ ASTYLEFLAGS = @ASTYLEFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BONMINAMPLINTERFACELIB_CFLAGS = @BONMINAMPLINTERFACELIB_CFLAGS@ BONMINAMPLINTERFACELIB_CFLAGS_INSTALLED = @BONMINAMPLINTERFACELIB_CFLAGS_INSTALLED@ BONMINAMPLINTERFACELIB_DEPENDENCIES = @BONMINAMPLINTERFACELIB_DEPENDENCIES@ BONMINAMPLINTERFACELIB_LIBS = @BONMINAMPLINTERFACELIB_LIBS@ BONMINAMPLINTERFACELIB_LIBS_INSTALLED = @BONMINAMPLINTERFACELIB_LIBS_INSTALLED@ BONMINAMPLINTERFACELIB_PCLIBS = @BONMINAMPLINTERFACELIB_PCLIBS@ BONMINAMPLINTERFACELIB_PCREQUIRES = @BONMINAMPLINTERFACELIB_PCREQUIRES@ BONMINLIB_CFLAGS = @BONMINLIB_CFLAGS@ BONMINLIB_CFLAGS_INSTALLED = @BONMINLIB_CFLAGS_INSTALLED@ BONMINLIB_DEPENDENCIES = @BONMINLIB_DEPENDENCIES@ BONMINLIB_LIBS = @BONMINLIB_LIBS@ BONMINLIB_LIBS_INSTALLED = @BONMINLIB_LIBS_INSTALLED@ BONMINLIB_PCLIBS = @BONMINLIB_PCLIBS@ BONMINLIB_PCREQUIRES = @BONMINLIB_PCREQUIRES@ BONMIN_SVN_REV = @BONMIN_SVN_REV@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINDEPEND_CFLAGS = @COINDEPEND_CFLAGS@ COINDEPEND_CFLAGS_INSTALLED = @COINDEPEND_CFLAGS_INSTALLED@ COINDEPEND_DATA = @COINDEPEND_DATA@ COINDEPEND_DATA_INSTALLED = @COINDEPEND_DATA_INSTALLED@ COINDEPEND_DEPENDENCIES = @COINDEPEND_DEPENDENCIES@ COINDEPEND_LIBS = @COINDEPEND_LIBS@ COINDEPEND_LIBS_INSTALLED = @COINDEPEND_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_ASL_FALSE = @COIN_HAS_ASL_FALSE@ COIN_HAS_ASL_TRUE = @COIN_HAS_ASL_TRUE@ COIN_HAS_COINDEPEND_FALSE = @COIN_HAS_COINDEPEND_FALSE@ COIN_HAS_COINDEPEND_TRUE = @COIN_HAS_COINDEPEND_TRUE@ COIN_HAS_CPX_FALSE = @COIN_HAS_CPX_FALSE@ COIN_HAS_CPX_TRUE = @COIN_HAS_CPX_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_FILTERSQP_FALSE = @COIN_HAS_FILTERSQP_FALSE@ COIN_HAS_FILTERSQP_TRUE = @COIN_HAS_FILTERSQP_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_OSICPX_FALSE = @COIN_HAS_OSICPX_FALSE@ COIN_HAS_OSICPX_TRUE = @COIN_HAS_OSICPX_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPXINCDIR = @CPXINCDIR@ CPXLIB = @CPXLIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ 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@ FILTERSQP_CFLAGS = @FILTERSQP_CFLAGS@ FILTERSQP_CFLAGS_INSTALLED = @FILTERSQP_CFLAGS_INSTALLED@ FILTERSQP_DATA = @FILTERSQP_DATA@ FILTERSQP_DATA_INSTALLED = @FILTERSQP_DATA_INSTALLED@ FILTERSQP_DEPENDENCIES = @FILTERSQP_DEPENDENCIES@ FILTERSQP_LIBS = @FILTERSQP_LIBS@ FILTERSQP_LIBS_INSTALLED = @FILTERSQP_LIBS_INSTALLED@ FLIBS = @FLIBS@ 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@ OSICPX_CFLAGS = @OSICPX_CFLAGS@ OSICPX_CFLAGS_INSTALLED = @OSICPX_CFLAGS_INSTALLED@ OSICPX_DATA = @OSICPX_DATA@ OSICPX_DATA_INSTALLED = @OSICPX_DATA_INSTALLED@ OSICPX_DEPENDENCIES = @OSICPX_DEPENDENCIES@ OSICPX_LIBS = @OSICPX_LIBS@ OSICPX_LIBS_INSTALLED = @OSICPX_LIBS_INSTALLED@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ 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@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ dos2unix = @dos2unix@ 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 # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows AM_CPPFLAGS = \ -I`$(CYGPATH_W) $(srcdir)/../../src/Apps` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Algorithms` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Algorithms/Branching` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Algorithms/OaGenerators` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Algorithms/Ampl` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Interfaces` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Interfaces/Ipopt` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Interfaces/Ampl` \ -I`$(CYGPATH_W) $(srcdir)/../../src/CbcBonmin` \ -I`$(CYGPATH_W) $(srcdir)/../../src/CbcBonmin/Heuristics` \ $(BONMINLIB_CFLAGS) $(ASL_CFLAGS) ######################################################################## # robotbonmin # ######################################################################## robotbonmin_SOURCES = Robot-bonmin.cpp \ RobotSetup.cpp RobotSetup.hpp \ BonNWayChoose.cpp BonNWayChoose.hpp BonNWayObject.cpp BonNWayObject.hpp robotbonmin_LDADD = \ ../../src/Interfaces/Ampl/libbonamplinterface.la \ ../../src/CbcBonmin/libbonmin.la \ $(ASL_LIBS) \ $(BONMINLIB_LIBS) ######################################################################## # make distclean stuff # ######################################################################## CLEANFILES = DISTCLEANFILES = 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 experimental/RobotBonmin/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign experimental/RobotBonmin/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; for p in $$list; do \ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ if test -f $$p \ || test -f $$p1 \ ; then \ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ else :; fi; \ done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; for p in $$list; do \ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ rm -f "$(DESTDIR)$(bindir)/$$f"; \ done clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; for p in $$list; do \ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ echo " rm -f $$p $$f"; \ rm -f $$p $$f ; \ done robotbonmin$(EXEEXT): $(robotbonmin_OBJECTS) $(robotbonmin_DEPENDENCIES) @rm -f robotbonmin$(EXEEXT) $(CXXLINK) $(robotbonmin_LDFLAGS) $(robotbonmin_OBJECTS) $(robotbonmin_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BonNWayChoose.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BonNWayObject.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Robot-bonmin.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RobotSetup.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: for dir in "$(DESTDIR)$(bindir)"; 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: -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-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-exec-am: install-binPROGRAMS 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-binPROGRAMS uninstall-info-am .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-libtool ctags distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-binPROGRAMS 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-binPROGRAMS uninstall-info-am # 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: Bonmin-releases-1.8.9/Bonmin/experimental/RobotBonmin/Robot-bonmin.cpp000066400000000000000000000041671436575401300260140ustar00rootroot00000000000000// (C) Copyright CNRS and others 2010 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // Pierre Bonami, Université de la Méditérannée // // Date : 05/22/2010 #include #include #include "CoinPragma.hpp" #include "BonminConfig.h" #include "IpoptConfig.h" #include "CbcConfig.h" #include "CoinTime.hpp" #include "RobotSetup.hpp" #include "BonCbc.hpp" #define CATCH_ERRORS using namespace Bonmin; int main (int argc, char *argv[]) { using namespace Ipopt; char * pbName = NULL; std::cout<<"Bonmin " < 1) { pbName = new char[strlen(argv[1])+1]; strcpy(pbName, argv[1]); } #ifdef CATCH_ERRORS try #endif { //FILE * fp = fopen("log","w"); RobotSetup bonmin; bonmin.initialize(argv); Bab bb; bb(bonmin);//do branch and bound } #ifdef CATCH_ERRORS catch(TNLPSolver::UnsolvedError *E) { E->writeDiffFiles(); E->printError(std::cerr); //There has been a failure to solve a problem with Ipopt. //And we will output file with information on what has been changed in the problem to make it fail. //Now depending on what algorithm has been called (B-BB or other) the failed problem may be at different place. // const OsiSolverInterface &si1 = (algo > 0) ? nlpSolver : *model.solver(); } catch(OsiTMINLPInterface::SimpleError &E) { std::cerr< #include "BonminConfig.h" #include "BonStrongBranchingSolver.hpp" #include "RobotSetup.hpp" #include "BonNWayObject.hpp" #include "BonNWayChoose.hpp" namespace Bonmin { RobotSetup::RobotSetup(const CoinMessageHandler * handler):BonminSetup(handler) {} RobotSetup::RobotSetup(const RobotSetup &other):BonminSetup(other) {} RobotSetup::RobotSetup(const RobotSetup &other, OsiTMINLPInterface &nlp): BonminSetup(other, nlp) { } RobotSetup::RobotSetup(const RobotSetup &other, OsiTMINLPInterface &nlp, const std::string &prefix): BonminSetup(other, nlp, prefix) { initializeRobot(); } void RobotSetup::registerAllOptions(Ipopt::SmartPtr roptions) { BonminSetup::registerAllOptions(roptions); BonNWayChoose::registerOptions(roptions); roptions->AddLowerBoundedIntegerOption("branch_on_frac_only", "Starting at given depth branch on the subset of fractional variables (and set the last branch that one of them is 1)", 0,INT_MAX,""); roptions->AddStringOption2("do_a_quick_one", "Do we try our luck?", "no", "no", "Don't (of course).", "yes", "Be crazy", ""); } /** Register all the Bonmin options.*/ void RobotSetup::registerOptions() { registerAllOptions(roptions_); } /** Initialize, read options and create appropriate bonmin setup using initialized tminlp.*/ void RobotSetup::initialize(Ipopt::SmartPtr tminlp, bool createContinuousSolver /*= false*/) { BonminSetup::initialize(tminlp,createContinuousSolver); initializeRobot(); } /** Initialize, read options and create appropriate bonmin setup using initialized tminlp.*/ void RobotSetup::initialize(const OsiTMINLPInterface &nlpSi, bool createContinuousSolver /*= false*/) { BonminSetup::initialize(nlpSi,createContinuousSolver); initializeRobot(); } void RobotSetup::initializeRobot() { assert(continuousSolver_ == nonlinearSolver_); delete branchingMethod_; continuousSolver_->deleteObjects(); continuousSolver_->findIntegersAndSOS(false); setPriorities(); addNWays(); Ipopt::SmartPtr strong_solver = NULL; nonlinearSolver_->SetStrongBrachingSolver(strong_solver); BonNWayChoose* chooseVariable = new BonNWayChoose(*this, nonlinearSolver_); branchingMethod_ = chooseVariable; branchingMethod_->setNumberStrong(intParam_[NumberStrong]); } void RobotSetup::addNWays() { int do_quick; options()->GetEnumValue("do_a_quick_one", do_quick, prefix()); int depth_frac; options()->GetIntegerValue("branch_on_frac_only", depth_frac, prefix()); // pass user set Sos constraints (code inspired from CoinSolve.cpp) const TMINLP::SosInfo * sos = nonlinearSolver()->model()->sosConstraints(); if (!getIntParameter(BabSetupBase::DisableSos) && sos && sos->num > 0) //we have some sos constraints { const int & numSos = sos->num; OsiObject ** objects = new OsiObject*[numSos]; const int * starts = sos->starts; const int * indices = sos->indices; //const char * types = sos->types; const double * weights = sos->weights; bool hasPriorities = false; const int * varPriorities = nonlinearSolver()->getPriorities(); int numberObjects = nonlinearSolver()->numberObjects(); if (varPriorities) { for (int i = 0 ; i < numberObjects ; i++) { if (varPriorities[i]) { hasPriorities = true; break; } } } const int * sosPriorities = sos->priorities; if (sosPriorities) { for (int i = 0 ; i < numSos ; i++) { if (sosPriorities[i]) { hasPriorities = true; break; } } } std::vector > groups(numSos + 1); for (int i = 0 ; i < numSos ; i++) { int start = starts[i]; int length = starts[i + 1] - start; for(int j = 0 ; j < length ; j++){ groups[(size_t) weights[j]].push_back(indices[start+j]); } } for (int i = 0 ; i < numSos ; i++) { int start = starts[i]; int length = starts[i + 1] - start; BonNWayObject * nway = new BonNWayObject(length, &indices[start],i); nway->setPriority(1); for(int j = 0 ; j < length ; j++){//Setup consequences n_way_consequences cons; std::vector& ids = cons.indices; int idx = (int) weights[j]; const std::list &to_add = groups[idx]; for(std::list::const_iterator k = to_add.begin() ; k != to_add.end() ; k++){ if(*k != indices[start+j]) ids.push_back(*k); } nway->setConsequence(j, cons); } objects[i] = nway; if(do_quick) nway->make_quick(); nway->set_only_frac_branches(depth_frac); if (hasPriorities && sosPriorities && sosPriorities[i]) { objects[i]->setPriority(sosPriorities[i]); } } nonlinearSolver()->addObjects(numSos, objects); for (int i = 0 ; i < numSos ; i++) delete objects[i]; delete [] objects; } } }/* end namespace Bonmin*/ Bonmin-releases-1.8.9/Bonmin/experimental/RobotBonmin/RobotSetup.hpp000066400000000000000000000054421436575401300255570ustar00rootroot00000000000000// (C) Copyright CNRS and others 2010 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // Pierre Bonami, Université de la Méditérannée // Hassan Hijazi, Orange Labs // // Date : 05/22/2010 #ifndef RobotSetup_H #define RobotSetup_H #include "BonBonminSetup.hpp" #include "BonAmplSetup.hpp" namespace Bonmin { /** algorithm setup. */ class RobotSetup : public BonminSetup { public: /** Default constructor. */ RobotSetup(const CoinMessageHandler * handler = NULL); /** Copy constructor. */ RobotSetup(const RobotSetup & other); /** Copy but uses an other nlp.*/ RobotSetup(const RobotSetup &setup, OsiTMINLPInterface &nlp); /** Copy but uses another nlp and algorithm.*/ RobotSetup(const RobotSetup &setup, OsiTMINLPInterface &nlp, const std::string & prefix); /** virtual copy constructor. */ virtual BonminSetup * clone() const { return new RobotSetup(*this); } /** Make a copy with solver replace by one passed .*/ // virtual BonminSetup *clone(OsiTMINLPInterface&nlp)const{ // return new RobotSetup(*this, nlp); // } /** Make a copy with solver replace by one passed .*/ RobotSetup *clone(OsiTMINLPInterface&nlp)const{ return new RobotSetup(*this, nlp); } /** Make a copy but take options with different prefix.*/ RobotSetup *clone(OsiTMINLPInterface &nlp, const std::string & prefix)const{ return new RobotSetup(*this, nlp, prefix); } virtual ~RobotSetup() {} /** @name Methods to instantiate: Registering and retrieving options and initializing everything. */ /** @{ */ /** Register all the options for this algorithm instance.*/ virtual void registerOptions(); /** @} */ /** Register all bonmin type executable options.*/ static void registerAllOptions(Ipopt::SmartPtr roptions); /** Initialize, read options and create appropriate bonmin setup.*/ void initialize(Ipopt::SmartPtr tminlp, bool createContinuousSolver = true); /** Initialize, read options and create appropriate bonmin setup.*/ void initialize(const OsiTMINLPInterface& nlpSi, bool createContinuousSolver = true); /** Ampl initialization*/ void initialize(char **& argv) { readOptionsFile(); /* Read the model.*/ Ipopt::SmartPtr model = new AmplTMINLP(ConstPtr(journalist()), roptions(), options(), argv, NULL, "bonmin", NULL); mayPrintDoc(); initialize(Ipopt::GetRawPtr(model), true); } protected: /** Add nway objects*/ void addNWays(); /** Initialize a branch-and-with robot nway.*/ void initializeRobot(); }; }/** end namespace Bonmin*/ #endif Bonmin-releases-1.8.9/Bonmin/experimental/Separable/000077500000000000000000000000001436575401300224015ustar00rootroot00000000000000Bonmin-releases-1.8.9/Bonmin/experimental/Separable/BonHeuristicInnerApproximation.cpp000066400000000000000000000340311436575401300312530ustar00rootroot00000000000000 // (C) Copyright CNRS and others 2010 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // Pierre Bonami, Université de la Méditérannée // Hassan Hijazi, Orange Labs // // Date : 05/22/2010 //Test MySVN #include "BonHeuristicInnerApproximation.hpp" #include "CoinHelperFunctions.hpp" #include "CbcModel.hpp" #include "BonSubMipSolver.hpp" #include "BonCbcLpStrategy.hpp" #ifdef COIN_HAS_CPX #include "OsiCpxSolverInterface.hpp" #endif #include "OsiClpSolverInterface.hpp" #include "OsiAuxInfo.hpp" #include "CoinTime.hpp" #include #include #include "CoinHelperFunctions.hpp" #define DEBUG_BON_HEURISTIC using namespace std; namespace Bonmin { HeuristicInnerApproximation::HeuristicInnerApproximation(BonminSetup * setup) : CbcHeuristic(), setup_(setup), howOften_(100), mip_(NULL), nbAp_(50) { Initialize(setup); } HeuristicInnerApproximation::HeuristicInnerApproximation( const HeuristicInnerApproximation ©) : CbcHeuristic(copy), setup_(copy.setup_), howOften_(copy.howOften_), mip_(new SubMipSolver(*copy.mip_)), nbAp_(copy.nbAp_) { } HeuristicInnerApproximation & HeuristicInnerApproximation::operator=(const HeuristicInnerApproximation& rhs) { if (this != &rhs) { CbcHeuristic::operator=(rhs); setup_ = rhs.setup_; howOften_ = rhs.howOften_; nbAp_ = rhs.nbAp_; delete mip_; if (rhs.mip_) mip_ = new SubMipSolver(*rhs.mip_); } return *this; } void HeuristicInnerApproximation::registerOptions(Ipopt::SmartPtr< Bonmin::RegisteredOptions> roptions) { roptions->SetRegisteringCategory("Initial Approximations descriptions", RegisteredOptions::UndocumentedCategory); roptions->AddStringOption2("heuristic_inner_approximation", "if yes runs the InnerApproximation heuristic", "yes", "no", "don't run it", "yes", "runs the heuristic", ""); roptions->setOptionExtraInfo("heuristic_inner_approximation", 63); } void HeuristicInnerApproximation::Initialize(BonminSetup * b) { delete mip_; mip_ = new SubMipSolver (*b, "inner_approximation"); b->options()->GetIntegerValue("number_approximations_initial_outer", nbAp_, b->prefix()); } HeuristicInnerApproximation::~HeuristicInnerApproximation() { delete mip_; } /** Returns a feasible solution to the MINLP * The heuristic constructs a MIP based approximating all univariate functions appearing in nonlinear constraints * The linear approximation is obtained by adding inner chords linking pairs of points until covering the range of each variable **/ int HeuristicInnerApproximation::solution(double &solutionValue, double *betterSolution) { if(model_->getNodeCount() || model_->getCurrentPassNumber() > 1) return 0; if ((model_->getNodeCount()%howOften_)!=0||model_->getCurrentPassNumber()>1) return 0; int returnCode = 0; // 0 means it didn't find a feasible solution OsiTMINLPInterface * nlp = NULL; if(setup_->getAlgorithm() == B_BB) nlp = dynamic_cast(model_->solver()->clone()); else nlp = dynamic_cast(setup_->nonlinearSolver()->clone()); TMINLP2TNLP* minlp = nlp->problem(); // set tolerances double integerTolerance = model_->getDblParam(CbcModel::CbcIntegerTolerance); int numberColumns; int numberRows; int nnz_jac_g; int nnz_h_lag; Ipopt::TNLP::IndexStyleEnum index_style; minlp->get_nlp_info(numberColumns, numberRows, nnz_jac_g, nnz_h_lag, index_style); const Bonmin::TMINLP::VariableType* variableType = minlp->var_types(); const double* x_sol = minlp->x_sol(); double* newSolution = new double [numberColumns]; memcpy(newSolution,x_sol,numberColumns*sizeof(double)); double* new_g_sol = new double [numberRows]; bool feasible = true; // load the problem to OSI #ifdef DEBUG_BON_HEURISTIC cout << "Loading the problem to OSI\n"; #endif OsiSolverInterface *si = mip_->solver(); // the MIP solver bool delete_si = false; if(si == NULL) { si = new OsiClpSolverInterface; mip_->setLpSolver(si); delete_si = true; } CoinMessageHandler * handler = model_->messageHandler()->clone(); si->passInMessageHandler(handler); si->messageHandler()->setLogLevel(2); #ifdef DEBUG_BON_HEURISTIC cout << "Loading problem into si\n"; #endif extractInnerApproximation(*nlp, *si, newSolution, true); // Call the function construncting the inner approximation description #ifdef DEBUG_BON_HEURISTIC cout << "problem loaded\n"; cout << "**** Running optimization ****\n"; #endif mip_->optimize(DBL_MAX, 2, 180); // Optimize the MIP #ifdef DEBUG_BON_HEURISTIC cout << "Optimization finished\n"; #endif if(mip_->getLastSolution()) { // if the MIP solver returns a feasible solution const double* solution = mip_->getLastSolution(); for (size_t iLCol=0;iLColx_l(); const double* x_u = minlp->x_u(); const double* g_l = minlp->g_l(); const double* g_u = minlp->g_u(); double primalTolerance = 1.0e-6; #if 1 if(feasible ) { std::vector memLow(numberColumns); std::vector memUpp(numberColumns); std::copy(minlp->x_l(), minlp->x_l() + numberColumns, memLow.begin()); std::copy(minlp->x_u(), minlp->x_u() + numberColumns, memUpp.begin()); // fix the integer variables and solve the NLP for (int iColumn=0;iColumnSetVariableUpperBound(iColumn, value); minlp->SetVariableLowerBound(iColumn, value); } } if(feasible) { nlp->initialSolve(); if(minlp->optimization_status() != Ipopt::SUCCESS) { feasible = false; } memcpy(newSolution,minlp->x_sol(),numberColumns*sizeof(double)); } for (int iColumn=0;iColumnSetVariableUpperBound(iColumn, memUpp[iColumn]); minlp->SetVariableLowerBound(iColumn, memLow[iColumn]); } } } #endif #endif if(feasible) { double newSolutionValue; minlp->eval_f(numberColumns, newSolution, true, newSolutionValue); if(newSolutionValue < solutionValue) { memcpy(betterSolution,newSolution,numberColumns*sizeof(double)); solutionValue = newSolutionValue; returnCode = 1; } } delete [] newSolution; delete [] new_g_sol; delete nlp; #ifdef DEBUG_BON_HEURISTIC std::cout<<"Inner approximation returnCode = "<get_nlp_info(n, m, nnz_jac_g, nnz_h_lag, index_style); CoinPackedVector cut; double lb = 0; double ub = 0; double infty = si.getInfinity(); lb = -infty; // we only compute <= constraints double g = 0; double g2 = 0; double diff = 0; double a = 0; problem->eval_gi(n, x, 1, ind, g); problem->eval_gi(n, x2, 1, ind, g2); vector jCol(n); int nnz; problem->eval_grad_gi(n, x2, 0, ind, nnz, jCol(), NULL); vector jValues(nnz); problem->eval_grad_gi(n, x2, 0, ind, nnz, NULL, jValues()); bool add = false; for (int i = 0; i < nnz; i++) { const int &colIdx = jCol[i]; if(index_style == Ipopt::TNLP::FORTRAN_STYLE) jCol[i]--; diff = x[colIdx] - x2[colIdx]; if (fabs(diff) >= 1e-8) { a = (g - g2) / diff; cut.insert(colIdx, a); ub = a * x[colIdx] - g; add = true; } else cut.insert(colIdx, jValues[i]); } if (add) { OsiRowCut newCut; newCut.setGloballyValidAsInteger(1); newCut.setLb(lb); //********* Perspective Extension ********// int* ids = problem->get_const_xtra_id(); // vector of indices corresponding to the binary variable activating the corresponding constraint int binary_id = (ids == NULL) ? -1 : ids[ind]; // Get the index of the corresponding indicator binary variable if(binary_id>0) {// If this hyperplane is a linearization of a disjunctive constraint, we link its righthand side to the corresponding indicator binary variable cut.insert(binary_id, -ub); // ∂x ≤ ub => ∂x - ub*z ≤ 0 newCut.setUb(0); } else newCut.setUb(ub); //********* Perspective Extension ********// newCut.setRow(cut); cs.insert(newCut); return true; } return false; } void HeuristicInnerApproximation::extractInnerApproximation(OsiTMINLPInterface & nlp, OsiSolverInterface &si, const double * x, bool getObj) { int n; int m; int nnz_jac_g; int nnz_h_lag; Ipopt::TNLP::IndexStyleEnum index_style; TMINLP2TNLP * problem = nlp.problem(); //Get problem information problem->get_nlp_info(n, m, nnz_jac_g, nnz_h_lag, index_style); vector jRow(nnz_jac_g); vector jCol(nnz_jac_g); vector jValues(nnz_jac_g); problem->eval_jac_g(n, NULL, 0, m, nnz_jac_g, jRow(), jCol(), NULL); if(index_style == Ipopt::TNLP::FORTRAN_STYLE)//put C-style { for(int i = 0 ; i < nnz_jac_g ; i++){ jRow[i]--; jCol[i]--; } } //get Jacobian problem->eval_jac_g(n, x, 1, m, nnz_jac_g, NULL, NULL, jValues()); vector g(m); problem->eval_g(n, x, 1, m, g()); vector nonLinear(m); //store non linear constraints (which are to be removed from IA) int numNonLinear = 0; const double * rowLower = nlp.getRowLower(); const double * rowUpper = nlp.getRowUpper(); const double * colLower = nlp.getColLower(); const double * colUpper = nlp.getColUpper(); assert(m == nlp.getNumRows()); double infty = si.getInfinity(); double nlp_infty = nlp.getInfinity(); vector constTypes(m); problem->get_constraints_linearity(m, constTypes()); for (int i = 0; i < m; i++) { if (constTypes[i] == Ipopt::TNLP::NON_LINEAR) { nonLinear[numNonLinear++] = i; } } vector rowLow(m - numNonLinear); vector rowUp(m - numNonLinear); int ind = 0; for (int i = 0; i < m; i++) { if (constTypes[i] != Ipopt::TNLP::NON_LINEAR) { if (rowLower[i] > -nlp_infty) { // printf("Lower %g ", rowLower[i]); rowLow[ind] = (rowLower[i]); } else rowLow[ind] = -infty; if (rowUpper[i] < nlp_infty) { // printf("Upper %g ", rowUpper[i]); rowUp[ind] = (rowUpper[i]); } else rowUp[ind] = infty; ind++; } } CoinPackedMatrix mat(true, jRow(), jCol(), jValues(), nnz_jac_g); mat.setDimensions(m, n); // In case matrix was empty, this should be enough //remove non-linear constraints mat.deleteRows(numNonLinear, nonLinear()); int numcols = nlp.getNumCols(); vector obj(numcols); for (int i = 0; i < numcols; i++) obj[i] = 0.; si.loadProblem(mat, nlp.getColLower(), nlp.getColUpper(), obj(), rowLow(), rowUp()); const Bonmin::TMINLP::VariableType* variableType = problem->var_types(); for (int i = 0; i < n; i++) { if ((variableType[i] == TMINLP::BINARY) || (variableType[i] == TMINLP::INTEGER)) si.setInteger(i); } if (getObj) { bool addObjVar = false; if (problem->hasLinearObjective()) { double zero; vector x0(n, 0.); problem->eval_f(n, x0(), 1, zero); si.setDblParam(OsiObjOffset, -zero); //Copy the linear objective and don't create a dummy variable. problem->eval_grad_f(n, x, 1, obj()); si.setObjective(obj()); } else { addObjVar = true; } if (addObjVar) { nlp.addObjectiveFunction(si, x); } } // Hassan IA initial description int InnerDesc = 1; if (InnerDesc == 1) { OsiCuts cs; double * p = CoinCopyOfArray(colLower, n); double * pp = CoinCopyOfArray(colLower, n); double * up = CoinCopyOfArray(colUpper, n); const int& nbAp = nbAp_; std::vector nbG(m, 0);// Number of generated points for each nonlinear constraint std::vector step(n); for (int i = 0; i < n; i++) { if (colUpper[i] > 1e08) { up[i] = 0; } if (colUpper[i] > 1e08 || colLower[i] < -1e08 || (variableType[i] == TMINLP::BINARY) || (variableType[i] == TMINLP::INTEGER)) { step[i] = 0; } else step[i] = (up[i] - colLower[i]) / (nbAp); if (colLower[i] < -1e08) { p[i] = 0; pp[i] = 0; } } vector g_p(m); vector g_pp(m); for (int j = 1; j <= nbAp; j++) { for (int i = 0; i < n; i++) { pp[i] += step[i]; } problem->eval_g(n, p, 1, m, g_p()); problem->eval_g(n, pp, 1, m, g_pp()); double diff = 0; int varInd = 0; for (int i = 0; (i < m && constTypes[i] == Ipopt::TNLP::NON_LINEAR); i++) { if (varInd == n - 1) varInd = 0; diff = std::abs(g_p[i] - g_pp[i]); if (nbG[i] < nbAp - 1) { getMyInnerApproximation(nlp, cs, i, p, pp);// Generate a chord connecting the two points p[varInd] = pp[varInd]; nbG[i]++; } varInd++; } } for(int i = 0; (i< m && constTypes[i] == Ipopt::TNLP::NON_LINEAR); i++) { // getConstraintOuterApproximation(cs, i, colUpper, NULL, true);// Generate Tangents at current point getMyInnerApproximation(nlp, cs, i, p, up);// Generate a chord connecting the two points } delete [] p; delete [] pp; delete [] up; si.applyCuts(cs); } } } Bonmin-releases-1.8.9/Bonmin/experimental/Separable/BonHeuristicInnerApproximation.hpp000066400000000000000000000037261436575401300312670ustar00rootroot00000000000000// (C) Copyright CNRS and others 2010 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // Pierre Bonami, Université de la Méditérannée // Hassan Hijazi, Orange Labs // // Date : 05/22/2010 #ifndef BonHeuristicInnerApproximation_HPP #define BonHeuristicInnerApproximation_HPP #include "BonOsiTMINLPInterface.hpp" #include "BonBonminSetup.hpp" #include "CbcHeuristic.hpp" #include "CbcStrategy.hpp" namespace Bonmin { class SubMipSolver; class HeuristicInnerApproximation: public CbcHeuristic { public: /// Constructor with setup HeuristicInnerApproximation(BonminSetup * setup); /// Copy constructor HeuristicInnerApproximation(const HeuristicInnerApproximation ©); /// Destructor ~HeuristicInnerApproximation(); /// Assignment operator HeuristicInnerApproximation & operator=( const HeuristicInnerApproximation & rhs); /// Clone virtual CbcHeuristic * clone() const { return new HeuristicInnerApproximation(*this); } /// Initialize method void Initialize(BonminSetup * setup); /// Resets stuff if model changes virtual void resetModel(CbcModel * model) { setModel(model); } /// Performs heuristic virtual int solution(double &solutionValue, double *betterSolution); /** Register the options common to all local search based heuristics.*/ static void registerOptions( Ipopt::SmartPtr roptions); protected: /** Setup to use for local searches (will make copies).*/ BonminSetup * setup_; private: /// How often to do (code can change) int howOften_; /// A subsolver for MIP SubMipSolver * mip_; /// Number of Approximation points int nbAp_; void extractInnerApproximation(OsiTMINLPInterface & nlp, OsiSolverInterface &si, const double * x, bool getObj); bool getMyInnerApproximation(OsiTMINLPInterface &si, OsiCuts &cs, int ind, const double * x, const double * x2); }; } #endif Bonmin-releases-1.8.9/Bonmin/experimental/Separable/BonOuterDescription.cpp000066400000000000000000000312711436575401300270520ustar00rootroot00000000000000// (C) Copyright CNRS and others 2010 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // Pierre Bonami, Université de la Méditérannée // Hassan Hijazi, Orange Labs // // Date : 05/22/2010 #include "BonOuterDescription.hpp" #include "BonOsiTMINLPInterface.hpp" namespace Bonmin{ //Copied from OsiTMINLPInterface //A procedure to try to remove small coefficients in OA cuts (or make it non small static inline bool cleanNnz(double &value, double colLower, double colUpper, double rowLower, double rowUpper, double colsol, double & lb, double &ub, double tiny, double veryTiny) { if(fabs(value)>= tiny) return 1; if(fabs(value) -10000; bool rowNotLoBounded = rowLower <= - infty; bool rowNotUpBounded = rowUpper >= infty; bool pos = value > 0; if(colLoBounded && pos && rowNotUpBounded) { lb += value * (colsol - colLower); return 0; } else if(colLoBounded && !pos && rowNotLoBounded) { ub += value * (colsol - colLower); return 0; } else if(colUpBounded && !pos && rowNotUpBounded) { lb += value * (colsol - colUpper); return 0; } else if(colUpBounded && pos && rowNotLoBounded) { ub += value * (colsol - colUpper); return 0; } //can not remove coefficient increase it to smallest non zero if(pos) value = tiny; else value = - tiny; return 1; } /** Get the outer approximation constraints at provided point and only for the specified constraint * (ind is the constraint or row number). * If x2 is different from NULL only add cuts violated by x2 by more than delta. **/ void getMyOuterApproximation( OsiTMINLPInterface &si, OsiCuts &cs, int ind, const double * x, int getObj, const double * x2, double theta, bool global) { int n, m, nnz_jac_g, nnz_h_lag; Ipopt::TNLP::IndexStyleEnum index_style; TMINLP2TNLP* problem = si.problem(); problem->get_nlp_info(n, m, nnz_jac_g, nnz_h_lag, index_style); double g_i = 0; problem->eval_gi(n, x, 1, ind, g_i); vector jCol(n); int nnz; problem->eval_grad_gi(n, x, 0, ind, nnz, jCol(), NULL); vector jValues(nnz); problem->eval_grad_gi(n, x, 0, ind, nnz, NULL, jValues()); //As jacobian is stored by cols fill OsiCuts with cuts CoinPackedVector cut; double lb; double ub; const double * rowLower = si.getRowLower(); const double * rowUpper = si.getRowUpper(); const double * colLower = si.getColLower(); const double * colUpper = si.getColUpper(); const double * duals = si.getRowPrice() + 2 * n; double infty = si.getInfinity(); double nlp_infty = infty; int rowIdx = ind; if (rowLower[rowIdx] > -nlp_infty) lb = rowLower[rowIdx] - g_i; else lb = -infty; if (rowUpper[rowIdx] < nlp_infty) ub = rowUpper[rowIdx] - g_i; else ub = infty; if (rowLower[rowIdx] > -infty && rowUpper[rowIdx] < infty) { if (duals[rowIdx] >= 0)// <= inequality lb = -infty; if (duals[rowIdx] <= 0)// >= inequality ub = infty; } double tiny = 1e-08; double veryTiny = 1e-20; for (int i = 0; i < nnz; i++) { if(index_style == Ipopt::TNLP::FORTRAN_STYLE) jCol[i]--; const int &colIdx = jCol[i]; //"clean" coefficient if (cleanNnz(jValues[i], colLower[colIdx], colUpper[colIdx], rowLower[rowIdx], rowUpper[rowIdx], x[colIdx], lb, ub, tiny, veryTiny)) { cut.insert(colIdx, jValues[i]); if (lb > -infty) lb += jValues[i] * x[colIdx]; if (ub < infty) ub += jValues[i] * x[colIdx]; } } bool add = true; //Compute cut violation if (x2 != NULL) { double rhs = cut.dotProduct(x2); double violation = 0.; if (ub < infty) violation = std::max(violation, fabs(rhs - ub)); if (lb > -infty) violation = std::max(violation, fabs(lb - rhs)); if (violation < theta) { add = false; } } OsiRowCut newCut; // if(lb[i]>-1e20) assert (ub[i]>1e20); if (add) { if (global) { newCut.setGloballyValidAsInteger(1); } //newCut.setEffectiveness(99.99e99); //********* Perspective Extension ********// const int* ids = problem->get_const_xtra_id(); // vector of indices corresponding to the binary variable activating the corresponding constraint // Get the index of the corresponding indicator binary variable int binary_id = (ids == NULL) ? -1 : ids[ind];// index corresponding to the binary variable activating the corresponding constraint if(binary_id>0) {// If this hyperplane is a linearization of a disjunctive constraint, we link its righthand (or lefthand) side to the corresponding indicator binary variable if (lb > -infty) { // ∂x ≥ lb => ∂x - lb*z ≥ 0 cut.insert(binary_id, -lb); newCut.setLb(0); newCut.setUb(ub); } if (ub < infty) { // ∂x ≤ ub => ∂x - ub*z ≤ 0 cut.insert(binary_id, -ub); newCut.setLb(lb); newCut.setUb(0); } } else { newCut.setLb(lb); newCut.setUb(ub); } //********* Perspective Extension ********// newCut.setRow(cut); //newCut.print(); cs.insert(newCut); } } /* Old Uniform sampling method void addOuterDescription(OsiTMINLPInterface &nlp, OsiSolverInterface &si, const double * x, int nbAp, bool getObj) { int n; int m; int nnz_jac_g; int nnz_h_lag; Ipopt::TNLP::IndexStyleEnum index_style; //Get problem information TMINLP2TNLP* problem = nlp.problem(); problem->get_nlp_info(n, m, nnz_jac_g, nnz_h_lag, index_style); const double * colLower = nlp.getColLower(); const double * colUpper = nlp.getColUpper(); const Bonmin::TMINLP::VariableType* variableType = problem->var_types(); vector constTypes(m); problem->get_constraints_linearity(m, constTypes()); // Hassan OA initial description int OuterDesc = 0; if (OuterDesc == 0) { OsiCuts cs; double * p = CoinCopyOfArray(nlp.getColLower(), n); double * pp = CoinCopyOfArray(nlp.getColLower(), n); double * up = CoinCopyOfArray(nlp.getColUpper(), n); //b->options()->GetIntegerValue("number_approximations_initial_outer",nbAp, b->prefix()); std::vector nbG(m, 0);// Number of generated points for each nonlinear constraint std::vector step(n); for (int i = 0; i < n; i++) { if (colUpper[i] > 1e08) { up[i] = 0; } if (colUpper[i] > 1e08 || colLower[i] < -1e08 || (variableType[i] == TMINLP::BINARY) || (variableType[i] == TMINLP::INTEGER)) { step[i] = 0; } else step[i] = (up[i] - colLower[i]) / (nbAp); if (colLower[i] < -1e08) { p[i] = 0; pp[i] = 0; } } vector g_p(m); vector g_pp(m); for (int i = 0; (i < m); i++) { if(constTypes[i] != Ipopt::TNLP::NON_LINEAR) continue; getMyOuterApproximation(nlp, cs, i, p, 0, NULL, 10000, true);// Generate Tangents at current point } for (int j = 1; j <= nbAp; j++) { for (int i = 0; i < n; i++) { pp[i] += step[i]; } problem->eval_g(n, p, 1, m, g_p()); problem->eval_g(n, pp, 1, m, g_pp()); double diff = 0; int varInd = 0; for (int i = 0; (i < m); i++) { if(constTypes[i] != Ipopt::TNLP::NON_LINEAR) continue; if (varInd == n - 1) varInd = 0; diff = std::abs(g_p[i] - g_pp[i]); if (nbG[i] < nbAp && diff ) { getMyOuterApproximation(nlp, cs, i, pp, 0, NULL, 10000, true);// Generate Tangents at current point p[varInd] = pp[varInd]; nbG[i]++; } varInd++; } } for (int i = 0; i < m ; i++) { if(constTypes[i] != Ipopt::TNLP::NON_LINEAR) continue; getMyOuterApproximation(nlp, cs, i, up, 0, NULL, 10000, true);// Generate Tangents at current point } si.applyCuts(cs); delete [] p; delete [] pp; delete [] up; } } */ // New curvature based sampling method void addOuterDescription(OsiTMINLPInterface &nlp, OsiSolverInterface &si, const double * x, int nbAp, bool getObj) { int n; int m; int nnz_jac_g; int nnz_h_lag; Ipopt::TNLP::IndexStyleEnum index_style; //Get problem information TMINLP2TNLP* problem = nlp.problem(); problem->get_nlp_info(n, m, nnz_jac_g, nnz_h_lag, index_style); const double * colLower = nlp.getColLower(); const double * colUpper = nlp.getColUpper(); const Bonmin::TMINLP::VariableType* variableType = problem->var_types(); vector constTypes(m); problem->get_constraints_linearity(m, constTypes()); // Hassan OA initial description int OuterDesc = 0; if (OuterDesc == 0) { OsiCuts cs; double * p = CoinCopyOfArray(nlp.getColLower(), n); double * pp = CoinCopyOfArray(nlp.getColLower(), n); double * up = CoinCopyOfArray(nlp.getColUpper(), n); //b->options()->GetIntegerValue("number_approximations_initial_outer",nbAp, b->prefix()); std::vector nbG(m, 2);// Number of generated points for each nonlinear constraint, we always generate two cuts at lower and upper bounds. std::vector step(n); for (int i = 0; i < n; i++) { if (colUpper[i] > 1e08) { up[i] = 0; } if (colUpper[i] > 1e08 || colLower[i] < -1e08 || (variableType[i] == TMINLP::BINARY) || (variableType[i] == TMINLP::INTEGER)) { step[i] = 0; } else step[i] = (up[i] - colLower[i]) / 2e02; // if step[i]!=0 then variable i appears in one univariate nonlinear function, a small step is computed in order to perform curavture based sampling if (colLower[i] < -1e08) { p[i] = 0; pp[i] = 0; } } vector g_p(m); double g_p_i, g_pp_i; problem->eval_g(n, p, 1, m, g_p()); // Evaluate function g at lowerbounds vector g_pp(m); vector g_up(m); problem->eval_g(n, up, 1, m, g_up()); // Evaluate function g at upperbounds for (int i = 0; (i < m); i++) { if(constTypes[i] != Ipopt::TNLP::NON_LINEAR) continue; getMyOuterApproximation(nlp, cs, i, p, 0, NULL, 10000, true);// Generate Tangents at lowerbounds } vector thr(m); // minimum threshold value for the variation of function g (curvature) for generating a cut at point pp for (int i = 0; i < m; i++) { thr[i] = std::abs(g_up[i]-g_p[i])/nbAp; } double diff = 0; for (int i = 0; (i < m); i++) { // Generate Outer-Approximation initial cuts for all nonlinear constraints if(constTypes[i] != Ipopt::TNLP::NON_LINEAR) continue; p = CoinCopyOfArray(nlp.getColLower(), n); // For each nonlinear constraint reset all points to lowerbounds pp = CoinCopyOfArray(nlp.getColLower(), n); while (nbG[i] < nbAp) { // Iterate untill the number of initial approximations is reached for each nonlinear constraint // Curvature sampling for (int j = 0; j < n; j++) { pp[j] += step[j]; } problem->eval_gi(n, p, 1, i, g_p_i); problem->eval_gi(n, pp, 1, i, g_pp_i); diff = std::abs(g_p_i - g_pp_i); if (diff>=thr[i] ) { getMyOuterApproximation(nlp, cs, i, pp, 0, NULL, 10000, true);// Generate Tangents at current point for (int j = 0; j < n; j++) { p[j] = pp[j]; // Move all previous points to the current one } nbG[i]++; } } } for (int i = 0; i < m ; i++) { if(constTypes[i] != Ipopt::TNLP::NON_LINEAR) continue; getMyOuterApproximation(nlp, cs, i, up, 0, NULL, 10000, true);// Generate Tangents at upperbounds } si.applyCuts(cs); delete [] p; delete [] pp; delete [] up; } } } Bonmin-releases-1.8.9/Bonmin/experimental/Separable/BonOuterDescription.hpp000066400000000000000000000021771436575401300270620ustar00rootroot00000000000000// (C) Copyright CNRS and others 2010 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // Pierre Bonami, Université de la Méditérannée // Hassan Hijazi, Orange Labs // // Date : 05/22/2010 #ifndef OuterDescription_H #define OuterDescription_H #define INT_BIAS 0e-8 #include #include #include "BonOsiTMINLPInterface.hpp" #include "CoinWarmStartBasis.hpp" #include "BonCutStrengthener.hpp" namespace Bonmin { /** Get the outer approximation constraints at provided point and only for the specified constraint (ind is the constraint or row number). If x2 is different from NULL only add cuts violated by x2 by more than delta. **/ void getMyOuterApproximation(OsiTMINLPInterface &si, OsiCuts &cs, int ind, const double * x, int getObj, const double * x2, double theta, bool global); /** Adds an outer description of problem to linear formulation.*/ void addOuterDescription(OsiTMINLPInterface &nlp, OsiSolverInterface &si, const double * x, int nbAp, bool getObj); } #endif Bonmin-releases-1.8.9/Bonmin/experimental/Separable/Makefile.am000066400000000000000000000037561436575401300244500ustar00rootroot00000000000000# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 434 2007-03-28 12:58:54Z andreasw $ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign # What is done in this directory: bin_PROGRAMS = sepa # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows AM_CPPFLAGS = \ -I`$(CYGPATH_W) $(srcdir)/../../src/Apps` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Algorithms` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Algorithms/Branching` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Algorithms/OaGenerators` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Algorithms/Ampl` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Interfaces` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Interfaces/Ipopt` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Interfaces/Ampl` \ -I`$(CYGPATH_W) $(srcdir)/../../src/CbcBonmin` \ -I`$(CYGPATH_W) $(srcdir)/../../src/CbcBonmin/Heuristics` \ $(BONMINLIB_CFLAGS) $(ASL_CFLAGS) ######################################################################## # sepa # ######################################################################## sepa_SOURCES = Sepa.cpp \ SepaSetup.cpp SepaSetup.hpp \ SepaTMINLP2OsiLP.cpp SepaTMINLP2OsiLP.hpp \ SepaHeuristicInnerApproximation.hpp \ SepaHeuristicInnerApproximation.cpp \ BonOuterDescription.cpp \ BonOuterDescription.hpp sepa_LDADD = \ ../../src/Interfaces/Ampl/libbonamplinterface.la \ ../../src/CbcBonmin/libbonmin.la \ $(ASL_LIBS) \ $(BONMINLIB_LIBS) ######################################################################## # make distclean stuff # ######################################################################## CLEANFILES = DISTCLEANFILES = Bonmin-releases-1.8.9/Bonmin/experimental/Separable/Makefile.in000066400000000000000000000527221436575401300244560ustar00rootroot00000000000000# 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@ bin_PROGRAMS = sepa$(EXEEXT) subdir = experimental/Separable 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/Interfaces/config.h \ $(top_builddir)/src/Interfaces/config_bonmin.h CONFIG_CLEAN_FILES = am__installdirs = "$(DESTDIR)$(bindir)" binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) PROGRAMS = $(bin_PROGRAMS) am_sepa_OBJECTS = Sepa.$(OBJEXT) SepaSetup.$(OBJEXT) \ SepaTMINLP2OsiLP.$(OBJEXT) \ SepaHeuristicInnerApproximation.$(OBJEXT) \ BonOuterDescription.$(OBJEXT) sepa_OBJECTS = $(am_sepa_OBJECTS) am__DEPENDENCIES_1 = sepa_DEPENDENCIES = ../../src/Interfaces/Ampl/libbonamplinterface.la \ ../../src/CbcBonmin/libbonmin.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/src/Interfaces -I$(top_builddir)/src/Interfaces 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 = $(sepa_SOURCES) DIST_SOURCES = $(sepa_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@ ASL_CFLAGS = @ASL_CFLAGS@ ASL_CFLAGS_INSTALLED = @ASL_CFLAGS_INSTALLED@ ASL_DATA = @ASL_DATA@ ASL_DATA_INSTALLED = @ASL_DATA_INSTALLED@ ASL_DEPENDENCIES = @ASL_DEPENDENCIES@ ASL_LIBS = @ASL_LIBS@ ASL_LIBS_INSTALLED = @ASL_LIBS_INSTALLED@ ASTYLE = @ASTYLE@ ASTYLEFLAGS = @ASTYLEFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BONMINAMPLINTERFACELIB_CFLAGS = @BONMINAMPLINTERFACELIB_CFLAGS@ BONMINAMPLINTERFACELIB_CFLAGS_INSTALLED = @BONMINAMPLINTERFACELIB_CFLAGS_INSTALLED@ BONMINAMPLINTERFACELIB_DEPENDENCIES = @BONMINAMPLINTERFACELIB_DEPENDENCIES@ BONMINAMPLINTERFACELIB_LIBS = @BONMINAMPLINTERFACELIB_LIBS@ BONMINAMPLINTERFACELIB_LIBS_INSTALLED = @BONMINAMPLINTERFACELIB_LIBS_INSTALLED@ BONMINAMPLINTERFACELIB_PCLIBS = @BONMINAMPLINTERFACELIB_PCLIBS@ BONMINAMPLINTERFACELIB_PCREQUIRES = @BONMINAMPLINTERFACELIB_PCREQUIRES@ BONMINLIB_CFLAGS = @BONMINLIB_CFLAGS@ BONMINLIB_CFLAGS_INSTALLED = @BONMINLIB_CFLAGS_INSTALLED@ BONMINLIB_DEPENDENCIES = @BONMINLIB_DEPENDENCIES@ BONMINLIB_LIBS = @BONMINLIB_LIBS@ BONMINLIB_LIBS_INSTALLED = @BONMINLIB_LIBS_INSTALLED@ BONMINLIB_PCLIBS = @BONMINLIB_PCLIBS@ BONMINLIB_PCREQUIRES = @BONMINLIB_PCREQUIRES@ BONMIN_SVN_REV = @BONMIN_SVN_REV@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINDEPEND_CFLAGS = @COINDEPEND_CFLAGS@ COINDEPEND_CFLAGS_INSTALLED = @COINDEPEND_CFLAGS_INSTALLED@ COINDEPEND_DATA = @COINDEPEND_DATA@ COINDEPEND_DATA_INSTALLED = @COINDEPEND_DATA_INSTALLED@ COINDEPEND_DEPENDENCIES = @COINDEPEND_DEPENDENCIES@ COINDEPEND_LIBS = @COINDEPEND_LIBS@ COINDEPEND_LIBS_INSTALLED = @COINDEPEND_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_ASL_FALSE = @COIN_HAS_ASL_FALSE@ COIN_HAS_ASL_TRUE = @COIN_HAS_ASL_TRUE@ COIN_HAS_COINDEPEND_FALSE = @COIN_HAS_COINDEPEND_FALSE@ COIN_HAS_COINDEPEND_TRUE = @COIN_HAS_COINDEPEND_TRUE@ COIN_HAS_CPX_FALSE = @COIN_HAS_CPX_FALSE@ COIN_HAS_CPX_TRUE = @COIN_HAS_CPX_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_FILTERSQP_FALSE = @COIN_HAS_FILTERSQP_FALSE@ COIN_HAS_FILTERSQP_TRUE = @COIN_HAS_FILTERSQP_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_OSICPX_FALSE = @COIN_HAS_OSICPX_FALSE@ COIN_HAS_OSICPX_TRUE = @COIN_HAS_OSICPX_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPXINCDIR = @CPXINCDIR@ CPXLIB = @CPXLIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ 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@ FILTERSQP_CFLAGS = @FILTERSQP_CFLAGS@ FILTERSQP_CFLAGS_INSTALLED = @FILTERSQP_CFLAGS_INSTALLED@ FILTERSQP_DATA = @FILTERSQP_DATA@ FILTERSQP_DATA_INSTALLED = @FILTERSQP_DATA_INSTALLED@ FILTERSQP_DEPENDENCIES = @FILTERSQP_DEPENDENCIES@ FILTERSQP_LIBS = @FILTERSQP_LIBS@ FILTERSQP_LIBS_INSTALLED = @FILTERSQP_LIBS_INSTALLED@ FLIBS = @FLIBS@ 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@ OSICPX_CFLAGS = @OSICPX_CFLAGS@ OSICPX_CFLAGS_INSTALLED = @OSICPX_CFLAGS_INSTALLED@ OSICPX_DATA = @OSICPX_DATA@ OSICPX_DATA_INSTALLED = @OSICPX_DATA_INSTALLED@ OSICPX_DEPENDENCIES = @OSICPX_DEPENDENCIES@ OSICPX_LIBS = @OSICPX_LIBS@ OSICPX_LIBS_INSTALLED = @OSICPX_LIBS_INSTALLED@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ 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@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ dos2unix = @dos2unix@ 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 # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows AM_CPPFLAGS = \ -I`$(CYGPATH_W) $(srcdir)/../../src/Apps` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Algorithms` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Algorithms/Branching` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Algorithms/OaGenerators` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Algorithms/Ampl` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Interfaces` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Interfaces/Ipopt` \ -I`$(CYGPATH_W) $(srcdir)/../../src/Interfaces/Ampl` \ -I`$(CYGPATH_W) $(srcdir)/../../src/CbcBonmin` \ -I`$(CYGPATH_W) $(srcdir)/../../src/CbcBonmin/Heuristics` \ $(BONMINLIB_CFLAGS) $(ASL_CFLAGS) ######################################################################## # sepa # ######################################################################## sepa_SOURCES = Sepa.cpp \ SepaSetup.cpp SepaSetup.hpp \ SepaTMINLP2OsiLP.cpp SepaTMINLP2OsiLP.hpp \ SepaHeuristicInnerApproximation.hpp \ SepaHeuristicInnerApproximation.cpp \ BonOuterDescription.cpp \ BonOuterDescription.hpp sepa_LDADD = \ ../../src/Interfaces/Ampl/libbonamplinterface.la \ ../../src/CbcBonmin/libbonmin.la \ $(ASL_LIBS) \ $(BONMINLIB_LIBS) ######################################################################## # make distclean stuff # ######################################################################## CLEANFILES = DISTCLEANFILES = 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 experimental/Separable/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign experimental/Separable/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; for p in $$list; do \ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ if test -f $$p \ || test -f $$p1 \ ; then \ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ else :; fi; \ done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; for p in $$list; do \ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ rm -f "$(DESTDIR)$(bindir)/$$f"; \ done clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; for p in $$list; do \ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ echo " rm -f $$p $$f"; \ rm -f $$p $$f ; \ done sepa$(EXEEXT): $(sepa_OBJECTS) $(sepa_DEPENDENCIES) @rm -f sepa$(EXEEXT) $(CXXLINK) $(sepa_LDFLAGS) $(sepa_OBJECTS) $(sepa_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BonOuterDescription.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Sepa.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SepaHeuristicInnerApproximation.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SepaSetup.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SepaTMINLP2OsiLP.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: for dir in "$(DESTDIR)$(bindir)"; 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: -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-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-exec-am: install-binPROGRAMS 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-binPROGRAMS uninstall-info-am .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-libtool ctags distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-binPROGRAMS 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-binPROGRAMS uninstall-info-am # 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: Bonmin-releases-1.8.9/Bonmin/experimental/Separable/Sepa.cpp000066400000000000000000000042571436575401300240050ustar00rootroot00000000000000// (C) Copyright CNRS and others 2010 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // Pierre Bonami, Université de la Méditérannée // Hassan Hijazi, Orange Labs // // Date : 05/22/2010 #include #include #include "CoinPragma.hpp" #include "BonminConfig.h" #include "IpoptConfig.h" #include "CbcConfig.h" #include "CoinTime.hpp" #include "SepaSetup.hpp" #include "BonCbc.hpp" #define CATCH_ERRORS int main (int argc, char *argv[]) { using namespace Ipopt; char * pbName = NULL; std::cout<<"Bonmin " < 1) { pbName = new char[strlen(argv[1])+1]; strcpy(pbName, argv[1]); } #define CATCH_ERRORS #ifdef CATCH_ERRORS try #endif { //FILE * fp = fopen("log","w"); Sepa::SepaSetup bonmin; bonmin.initialize(argv); Bonmin::Bab bb; bb(bonmin);//do branch and bound } #ifdef CATCH_ERRORS catch(Bonmin::TNLPSolver::UnsolvedError *E) { E->writeDiffFiles(); E->printError(std::cerr); //There has been a failure to solve a problem with Ipopt. //And we will output file with information on what has been changed in the problem to make it fail. //Now depending on what algorithm has been called (B-BB or other) the failed problem may be at different place. // const OsiSolverInterface &si1 = (algo > 0) ? nlpSolver : *model.solver(); } catch(Bonmin::OsiTMINLPInterface::SimpleError &E) { std::cerr< #include #include "CoinHelperFunctions.hpp" //#define DEBUG_BON_HEURISTIC namespace Sepa{ HeuristicInnerApproximation::HeuristicInnerApproximation(Bonmin::BonminSetup * setup) : CbcHeuristic(), setup_(setup), howOften_(100), mip_(NULL), nbAp_(50), time_limit_(10.) { Initialize(setup); } HeuristicInnerApproximation::HeuristicInnerApproximation( const HeuristicInnerApproximation ©) : CbcHeuristic(copy), setup_(copy.setup_), howOften_(copy.howOften_), mip_(new Bonmin::SubMipSolver(*copy.mip_)), nbAp_(copy.nbAp_), time_limit_(copy.time_limit_) { } HeuristicInnerApproximation & HeuristicInnerApproximation::operator=(const HeuristicInnerApproximation& rhs) { if (this != &rhs) { CbcHeuristic::operator=(rhs); setup_ = rhs.setup_; howOften_ = rhs.howOften_; nbAp_ = rhs.nbAp_; delete mip_; if (rhs.mip_) mip_ = new Bonmin::SubMipSolver(*rhs.mip_); } return *this; } void HeuristicInnerApproximation::registerOptions(Ipopt::SmartPtr< Bonmin::RegisteredOptions> roptions) { roptions->SetRegisteringCategory("Initial Approximations descriptions", Bonmin::RegisteredOptions::UndocumentedCategory); roptions->AddStringOption2("heuristic_inner_approximation", "if yes runs the InnerApproximation heuristic", "yes", "no", "don't run it", "yes", "runs the heuristic", ""); roptions->setOptionExtraInfo("heuristic_inner_approximation", 63); roptions->AddLowerBoundedIntegerOption("number_inner_approximation_points", "Set the number of points to use for linear inner approximation of nonlinear functions in heuristic", 1, 20); roptions->setOptionExtraInfo("number_inner_approximation_points", 63); roptions->AddLowerBoundedNumberOption("inner_time_limit", "Time limit for inner approximation", 0, true, 10, ""); roptions->setOptionExtraInfo("number_inner_approximation_points", 63); } void HeuristicInnerApproximation::Initialize(Bonmin::BonminSetup * b) { delete mip_; mip_ = new Bonmin::SubMipSolver (*b, "inner_approximation"); b->options()->GetIntegerValue("number_inner_approximation_points", nbAp_, b->prefix()); b->options()->GetNumericValue("inner_time_limit", time_limit_, b->prefix()); } HeuristicInnerApproximation::~HeuristicInnerApproximation() { delete mip_; } /** Returns a feasible solution to the MINLP * The heuristic constructs a MIP based approximating all univariate functions appearing in nonlinear constraints * The linear approximation is obtained by adding inner chords linking pairs of points until covering the range of each variable **/ int HeuristicInnerApproximation::solution(double &solutionValue, double *betterSolution) { if(model_->getNodeCount() || model_->getCurrentPassNumber() > 1) return 0; if ((model_->getNodeCount()%howOften_)!=0||model_->getCurrentPassNumber()>1) return 0; int returnCode = 0; // 0 means it didn't find a feasible solution Bonmin::OsiTMINLPInterface * nlp = NULL; if(setup_->getAlgorithm() == Bonmin::B_BB) nlp = dynamic_cast(model_->solver()->clone()); else nlp = dynamic_cast(setup_->nonlinearSolver()->clone()); Bonmin::TMINLP2TNLP* minlp = nlp->problem(); // set tolerances //double integerTolerance = model_->getDblParam(CbcModel::CbcIntegerTolerance); int numberColumns; int numberRows; int nnz_jac_g; int nnz_h_lag; Ipopt::TNLP::IndexStyleEnum index_style; minlp->get_nlp_info(numberColumns, numberRows, nnz_jac_g, nnz_h_lag, index_style); //const Bonmin::TMINLP::VariableType* variableType = minlp->var_types(); const double* x_sol = minlp->x_sol(); double* newSolution = new double [numberColumns]; memcpy(newSolution,x_sol,numberColumns*sizeof(double)); double* new_g_sol = new double [numberRows]; bool feasible = true; // load the problem to OSI #ifdef DEBUG_BON_HEURISTIC std::cout << "Loading the problem to OSI\n"; #endif OsiSolverInterface *si = mip_->solver(); // the MIP solver bool delete_si = false; if(si == NULL) { si = new OsiClpSolverInterface; mip_->setLpSolver(si); delete_si = true; } CoinMessageHandler * handler = model_->messageHandler()->clone(); si->passInMessageHandler(handler); si->messageHandler()->setLogLevel(2); #ifdef DEBUG_BON_HEURISTIC std::cout << "Loading problem into si\n"; #endif extractInnerApproximation(*nlp, *si, newSolution, true); // Call the function construncting the inner approximation description #ifdef DEBUG_BON_HEURISTIC std::cout << "problem loaded\n"; std::cout << "**** Running optimization ****\n"; #endif mip_->optimize(DBL_MAX, 2, time_limit_); // Optimize the MIP #ifdef DEBUG_BON_HEURISTIC std::cout << "Optimization finished\n"; #endif if(mip_->getLastSolution()) { // if the MIP solver returns a feasible solution const double* solution = mip_->getLastSolution(); std::copy(solution, solution + numberColumns, newSolution); } else feasible = false; if(delete_si) { delete si; } delete handler; #if 0 // Set to 1 if you need to test the feasibility of the returned solution const double* x_l = minlp->x_l(); const double* x_u = minlp->x_u(); const double* g_l = minlp->g_l(); const double* g_u = minlp->g_u(); double primalTolerance = 1.0e-6; Bonmin::vector constTypes(numberRows); minlp->get_constraints_linearity(numberRows, constTypes()); feasible = true; for (int iColumn=0;iColumn 1e-8) { std::cout<<"Solution found infeasible because: "<eval_f(numberColumns, newSolution, true, newSolutionValue); if(newSolutionValue < solutionValue) { memcpy(betterSolution,newSolution,numberColumns*sizeof(double)); solutionValue = newSolutionValue; returnCode = 1; } } delete [] newSolution; delete [] new_g_sol; delete nlp; #ifdef DEBUG_BON_HEURISTIC std::cout<<"Inner approximation returnCode = "<get_nlp_info(n, m, nnz_jac_g, nnz_h_lag, index_style); double infty = si.getInfinity(); CoinPackedVector cut; double lb = -infty; double ub = 0; double g = 0; double g2 = 0; double diff = 0; double a = 0; problem->eval_gi(n, x, 1, ind, g); problem->eval_gi(n, x2, 1, ind, g2); Bonmin::vector jCol(n); int nnz; problem->eval_grad_gi(n, x2, 0, ind, nnz, jCol(), NULL); Bonmin::vector jValues(nnz); problem->eval_grad_gi(n, x2, 0, ind, nnz, NULL, jValues()); bool add = false; //printf("const %i nnz %i\n", ind, nnz); for (int i = 0; i < nnz; i++) { const int &colIdx = jCol[i]; if(index_style == Ipopt::TNLP::FORTRAN_STYLE) jCol[i]--; diff = x[colIdx] - x2[colIdx]; if (fabs(diff) >= 1e-8) { a = (g - g2) / diff; cut.insert(colIdx, a); ub = (a * x[colIdx] - g) - fabs(a * x[colIdx] - g)*1e-6; //printf("const %i col %i p[col] %g pp[col] %g g %g g2 %g diff %g\n",ind, colIdx, x[colIdx], x2[colIdx], g, g2, diff); add = true; } else { cut.insert(colIdx, jValues[i]); //printf("const %i col %i val %g\n",ind, colIdx, jValues[i]); } } if (add) { OsiRowCut newCut; newCut.setGloballyValidAsInteger(1); newCut.setLb(lb); //********* Perspective Extension ********// int binary_id = 0; // index corresponding to the binary variable activating the corresponding constraint const int* ids = problem->get_const_xtra_id(); // vector of indices corresponding to the binary variable activating the corresponding constraint // Get the index of the corresponding indicator binary variable binary_id = (ids == NULL) ? -1 : ids[ind]; if(binary_id>0) {// If this hyperplane is a linearization of a disjunctive constraint, we link its righthand side to the corresponding indicator binary variable cut.insert(binary_id, -ub); // ∂x ≤ ub => ∂x - ub*z ≤ 0 newCut.setUb(0); } else newCut.setUb(ub); //********* Perspective Extension ********// newCut.setRow(cut); cs.insert(newCut); //newCut.print(); return true; } return false; } void HeuristicInnerApproximation::extractInnerApproximation(Bonmin::OsiTMINLPInterface & nlp, OsiSolverInterface &si, const double * x, bool getObj) { printf("************ Start extracting inner approx"); int n; int m; int nnz_jac_g; int nnz_h_lag; Ipopt::TNLP::IndexStyleEnum index_style; Bonmin::TMINLP2TNLP * problem = nlp.problem(); //Get problem information problem->get_nlp_info(n, m, nnz_jac_g, nnz_h_lag, index_style); Bonmin::vector jRow(nnz_jac_g); Bonmin::vector jCol(nnz_jac_g); Bonmin::vector jValues(nnz_jac_g); problem->eval_jac_g(n, NULL, 0, m, nnz_jac_g, jRow(), jCol(), NULL); if(index_style == Ipopt::TNLP::FORTRAN_STYLE)//put C-style { for(int i = 0 ; i < nnz_jac_g ; i++){ jRow[i]--; jCol[i]--; } } //get Jacobian problem->eval_jac_g(n, x, 1, m, nnz_jac_g, NULL, NULL, jValues()); Bonmin::vector g(m); problem->eval_g(n, x, 1, m, g()); Bonmin::vector nonLinear(m); //store non linear constraints (which are to be removed from IA) int numNonLinear = 0; const double * rowLower = nlp.getRowLower(); const double * rowUpper = nlp.getRowUpper(); const double * colLower = nlp.getColLower(); const double * colUpper = nlp.getColUpper(); assert(m == nlp.getNumRows()); double infty = si.getInfinity(); double nlp_infty = nlp.getInfinity(); Bonmin::vector constTypes(m); Bonmin::vector varTypes(n); problem->get_constraints_linearity(m, constTypes()); problem->get_variables_linearity(n, varTypes()); for (int i = 0; i < m; i++) { if (constTypes[i] == Ipopt::TNLP::NON_LINEAR) { nonLinear[numNonLinear++] = i; } } Bonmin::vector rowLow(m - numNonLinear); Bonmin::vector rowUp(m - numNonLinear); int ind = 0; for (int i = 0; i < m; i++) { if (constTypes[i] != Ipopt::TNLP::NON_LINEAR) { if (rowLower[i] > -nlp_infty) { // printf("Lower %g ", rowLower[i]); rowLow[ind] = (rowLower[i]); } else rowLow[ind] = -infty; if (rowUpper[i] < nlp_infty) { // printf("Upper %g ", rowUpper[i]); rowUp[ind] = (rowUpper[i]); } else rowUp[ind] = infty; ind++; } } CoinPackedMatrix mat(true, jRow(), jCol(), jValues(), nnz_jac_g); mat.setDimensions(m, n); // In case matrix was empty, this should be enough //remove non-linear constraints mat.deleteRows(numNonLinear, nonLinear()); int numcols = nlp.getNumCols(); Bonmin::vector obj(numcols); for (int i = 0; i < numcols; i++) obj[i] = 0.; si.loadProblem(mat, nlp.getColLower(), nlp.getColUpper(), obj(), rowLow(), rowUp()); const Bonmin::TMINLP::VariableType* variableType = problem->var_types(); for (int i = 0; i < n; i++) { if ((variableType[i] == Bonmin::TMINLP::BINARY) || (variableType[i] == Bonmin::TMINLP::INTEGER)) si.setInteger(i); } if (getObj) { bool addObjVar = false; if (problem->hasLinearObjective()) { double zero; Bonmin::vector x0(n, 0.); problem->eval_f(n, x0(), 1, zero); si.setDblParam(OsiObjOffset, -zero); //Copy the linear objective and don't create a dummy variable. problem->eval_grad_f(n, x, 1, obj()); si.setObjective(obj()); } else { addObjVar = true; } if (addObjVar) { nlp.addObjectiveFunction(si, x); } } // Hassan IA initial description int InnerDesc = 1; if (InnerDesc == 1) { OsiCuts cs; double * p = CoinCopyOfArray(colLower, n); double * pp = CoinCopyOfArray(colLower, n); double * up = CoinCopyOfArray(colUpper, n); for (int i = 0; i < n; i++) { if (p[i] < -1e3){ p[i] = pp[i] = -1e3; } if (up[i] > 1e2){ up[i] = 1e2; } } const int& nbAp = nbAp_; printf("Generating approximation with %i points.\n", nbAp); std::vector step(n); int n_lin = 0; for (int i = 0; i < n; i++) { //if ((variableType[i] == Bonmin::TMINLP::BINARY) || (variableType[i] == Bonmin::TMINLP::INTEGER)) { if (varTypes[i] == Ipopt::TNLP::LINEAR) { n_lin ++; step[i] = 0; p[i] = pp[i] = up[i] = 0; } else { step[i] = (up[i] - p[i]) / (nbAp); } } printf("Number of linears %i\n", n_lin); for (int j = 1; j < nbAp; j++) { for (int i = 0; i < n; i++) { pp[i] += step[i]; } for (int i = 0; (i < m ); i++) { if (constTypes[i] == Ipopt::TNLP::LINEAR) continue; bool status = getMyInnerApproximation(nlp, cs, i, p, pp);// Generate a chord connecting the two points if(status == false){ printf("Error in generating inner approximation\n"); exit(1); } } std::copy(pp, pp+n, p); } for(int i = 0; (i< m); i++) { if (constTypes[i] == Ipopt::TNLP::LINEAR) continue; getMyInnerApproximation(nlp, cs, i, p, up);// Generate a chord connecting the two points } delete [] p; delete [] pp; delete [] up; si.applyCuts(cs); } printf("************ Done extracting inner approx ********"); } } Bonmin-releases-1.8.9/Bonmin/experimental/Separable/SepaHeuristicInnerApproximation.hpp000066400000000000000000000041251436575401300314330ustar00rootroot00000000000000// (C) Copyright CNRS and others 2010 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // Pierre Bonami, Université de la Méditérannée // Hassan Hijazi, Orange Labs // // Date : 05/22/2010 #ifndef BonHeuristicInnerApproximation_HPP #define BonHeuristicInnerApproximation_HPP #include "BonOsiTMINLPInterface.hpp" #include "BonBonminSetup.hpp" #include "CbcHeuristic.hpp" #include "CbcStrategy.hpp" namespace Bonmin { class SubMipSolver; } namespace Sepa{ class HeuristicInnerApproximation: public CbcHeuristic { public: /// Constructor with setup HeuristicInnerApproximation(Bonmin::BonminSetup * setup); /// Copy constructor HeuristicInnerApproximation(const HeuristicInnerApproximation ©); /// Destructor ~HeuristicInnerApproximation(); /// Assignment operator HeuristicInnerApproximation & operator=( const HeuristicInnerApproximation & rhs); /// Clone virtual CbcHeuristic * clone() const { return new HeuristicInnerApproximation(*this); } /// Initialize method void Initialize(Bonmin::BonminSetup * setup); /// Resets stuff if model changes virtual void resetModel(CbcModel * model) { setModel(model); } /// Performs heuristic virtual int solution(double &solutionValue, double *betterSolution); /** Register the options common to all local search based heuristics.*/ static void registerOptions( Ipopt::SmartPtr roptions); protected: /** Setup to use for local searches (will make copies).*/ Bonmin::BonminSetup * setup_; private: /// How often to do (code can change) int howOften_; /// A subsolver for MIP Bonmin::SubMipSolver * mip_; /// Number of Approximation points int nbAp_; /// Time limit for mip double time_limit_; void extractInnerApproximation(Bonmin::OsiTMINLPInterface & nlp, OsiSolverInterface &si, const double * x, bool getObj); bool getMyInnerApproximation(Bonmin::OsiTMINLPInterface &si, OsiCuts &cs, int ind, const double * x, const double * x2); }; } #endif Bonmin-releases-1.8.9/Bonmin/experimental/Separable/SepaSetup.cpp000066400000000000000000000112021436575401300250120ustar00rootroot00000000000000// (C) Copyright CNRS and others 2010 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // Pierre Bonami, Université de la Méditérannée // Hassan Hijazi, Orange Labs // // Date : 05/22/2010 #include "BonminConfig.h" #include "OsiClpSolverInterface.hpp" #include "SepaSetup.hpp" #include "SepaTMINLP2OsiLP.hpp" #include "SepaHeuristicInnerApproximation.hpp" #include "BonOuterDescription.hpp" namespace Sepa { SepaSetup::SepaSetup(const CoinMessageHandler * handler):BonminSetup(handler) { } SepaSetup::SepaSetup(const SepaSetup &other):BonminSetup(other) {} SepaSetup::SepaSetup(const SepaSetup &other, Bonmin::OsiTMINLPInterface &nlp): BonminSetup(other, nlp) { } SepaSetup::SepaSetup(const SepaSetup &other, Bonmin::OsiTMINLPInterface &nlp, const std::string &prefix): BonminSetup(other, nlp, prefix) { Bonmin::Algorithm algo = getAlgorithm(); if (algo == Bonmin::B_OA) initializeSepa(); } void SepaSetup::registerAllOptions(Ipopt::SmartPtr roptions) { Bonmin::BonminSetup::registerAllOptions(roptions); Sepa::HeuristicInnerApproximation::registerOptions(roptions); roptions->SetRegisteringCategory("Initial Approximations descriptions", Bonmin::RegisteredOptions::UndocumentedCategory); roptions->AddStringOption2("initial_outer_description", "Do we add all Outer Approximation constraints defining the initial Outer Approximation " "description of the MINLP. See the number_approximations_initial_outer option for fixing the " "number of approximation points", "yes", "no","Do not generate the description", "yes","Generate the description", ""); roptions->AddUpperBoundedIntegerOption("number_approximations_initial_outer", "Number of Outer Approximation points needed for generating the initial Outer Approximation description, maximum value = 500, default value = 50", 500, 50, ""); } /** Register all the Bonmin options.*/ void SepaSetup::registerOptions() { registerAllOptions(roptions_); } /** Initialize, read options and create appropriate bonmin setup using initialized tminlp.*/ void SepaSetup::initialize(Ipopt::SmartPtr tminlp, bool createContinuousSolver /*= false*/) { int do_outer; int n_approx; options()->GetEnumValue("initial_outer_description", do_outer, prefix_.c_str()); options()->GetIntegerValue("number_approximations_initial_outer", n_approx, prefix_.c_str()); SepaTMINLP2OsiLP* linearizer = new SepaTMINLP2OsiLP; linearizer_ = linearizer; if(do_outer) linearizer->set_num_approx(n_approx); Bonmin::BonminSetup::initialize(tminlp, createContinuousSolver); if (getAlgorithm() == Bonmin::B_OA) initializeSepa(); } /** Initialize, read options and create appropriate bonmin setup using initialized tminlp.*/ void SepaSetup::initialize(const Bonmin::OsiTMINLPInterface &nlpSi, bool createContinuousSolver /*= false*/) { int do_outer; int n_approx; options()->GetEnumValue("initial_outer_description", do_outer, prefix_.c_str()); options()->GetIntegerValue("number_approximations_initial_outer", n_approx, prefix_.c_str()); SepaTMINLP2OsiLP* linearizer = new SepaTMINLP2OsiLP; linearizer_ = linearizer; if(do_outer) linearizer->set_num_approx(n_approx); BonminSetup::initialize(nlpSi, createContinuousSolver); if (getAlgorithm() == Bonmin::B_OA) initializeSepa(); } void SepaSetup::initializeSepa() { int doOuter; int nbAp = 10; options()->GetEnumValue("initial_outer_description", doOuter, prefix_.c_str()); options()->GetIntegerValue("number_approximations_initial_outer", nbAp, prefix_.c_str()); #ifdef USE_OLD_FUNC if(doOuter) addOuterDescription(*nonlinearSolver(), *continuousSolver(), nonlinearSolver()->getColSolution(), nbAp, false); #endif int doInner; options()->GetEnumValue("heuristic_inner_approximation", doInner, prefix_.c_str()); if(doInner){ Sepa::HeuristicInnerApproximation * inner = new Sepa::HeuristicInnerApproximation(this); HeuristicMethod h; h.heuristic = inner; h.id = "InnerApproximation"; heuristics_.push_back(h); } } }/* end namespace Bonmin*/ Bonmin-releases-1.8.9/Bonmin/experimental/Separable/SepaSetup.hpp000066400000000000000000000054511436575401300250300ustar00rootroot00000000000000// (C) Copyright CNRS and others 2010 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // Pierre Bonami, Université de la Méditérannée // Hassan Hijazi, Orange Labs // // Date : 05/22/2010 #ifndef SepaSetup_H #define SepaSetup_H #include "BonBonminSetup.hpp" #include "BonAmplSetup.hpp" namespace Sepa { /** algorithm setup. */ class SepaSetup : public Bonmin::BonminSetup { public: /** Default constructor. */ SepaSetup(const CoinMessageHandler * handler = NULL); /** Copy constructor. */ SepaSetup(const SepaSetup & other); /** Copy but uses an other nlp.*/ SepaSetup(const SepaSetup &setup, Bonmin::OsiTMINLPInterface &nlp); /** Copy but uses another nlp and algorithm.*/ SepaSetup(const SepaSetup &setup, Bonmin::OsiTMINLPInterface &nlp, const std::string & prefix); /** virtual copy constructor. */ virtual BabSetupBase * clone() const { return new SepaSetup(*this); } /** Make a copy with solver replace by one passed .*/ // virtual BabSetupBase *clone(OsiTMINLPInterface&nlp)const{ // return new SepaSetup(*this, nlp); // } /** Make a copy with solver replace by one passed .*/ SepaSetup *clone(Bonmin::OsiTMINLPInterface&nlp)const{ return new SepaSetup(*this, nlp); } /** Make a copy but take options with different prefix.*/ SepaSetup *clone(Bonmin::OsiTMINLPInterface &nlp, const std::string & prefix)const{ return new SepaSetup(*this, nlp, prefix); } virtual ~SepaSetup() {} /** @name Methods to instantiate: Registering and retrieving options and initializing everything. */ /** @{ */ /** Register all the options for this algorithm instance.*/ virtual void registerOptions(); /** @} */ /** Register all bonmin type executable options.*/ static void registerAllOptions(Ipopt::SmartPtr roptions); /** Initialize, read options and create appropriate bonmin setup.*/ void initialize(Ipopt::SmartPtr tminlp, bool createContinuousSolver = true); /** Initialize, read options and create appropriate bonmin setup.*/ void initialize(const Bonmin::OsiTMINLPInterface& nlpSi, bool createContinuousSolver = true); /** Ampl initialization*/ void initialize(char **& argv) { readOptionsFile(); /* Read the model.*/ Ipopt::SmartPtr model = new Bonmin::AmplTMINLP(ConstPtr(journalist()), roptions(), options(), argv, NULL, "bonmin", NULL); mayPrintDoc(); initialize(Ipopt::GetRawPtr(model), true); } protected: /** Initialize a branch-and-cut with some OA.*/ void initializeSepa(); }; }/** end namespace Bonmin*/ #endif Bonmin-releases-1.8.9/Bonmin/experimental/Separable/SepaTMINLP2OsiLP.cpp000066400000000000000000000356411436575401300257230ustar00rootroot00000000000000// (C) Copyright International Business Machines Corporation 2007 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // Pierre Bonami, International Business Machines Corporation // // Date : 10/16/2007 #include "SepaTMINLP2OsiLP.hpp" #include "BonTypes.hpp" #include "OsiSolverInterface.hpp" #include "BonTMINLP2TNLP.hpp" #include "CoinPackedMatrix.hpp" #include #include #include using namespace Ipopt; namespace Sepa { void SepaTMINLP2OsiLP::extract(OsiSolverInterface *si, const double * x, bool getObj) { assert(IsValid(model_)); int n; int m; int nnz_jac_g; int nnz_h_lag; TNLP::IndexStyleEnum index_style; //Get problem information model_->get_nlp_info( n, m, nnz_jac_g, nnz_h_lag, index_style); //get Jacobian model_->eval_jac_g(n, x, 1, m, nnz_jac_g, NULL, NULL, value_()); Bonmin::vector g(m); model_->eval_g(n, x, 1, m, g()); Bonmin::vector rowLow(m); Bonmin::vector rowUp(m); const double * rowLower = model_->g_l(); const double * rowUpper = model_->g_u(); const double * colLower = model_->x_l(); const double * colUpper = model_->x_u(); double nlp_infty = si->getInfinity(); double infty = DBL_MAX; for(int i = 0 ; i < m ; i++) { if(const_types_[i] == Ipopt::TNLP::NON_LINEAR) { if(rowLower[i] > - nlp_infty){ rowLow[i] = (rowLower[i] - g[i]) - 1e-07; } else rowLow[i] = - infty; if(rowUpper[i] < nlp_infty) rowUp[i] = (rowUpper[i] - g[i]) + 1e-07; else rowUp[i] = infty; } else { if(rowLower[i] > -nlp_infty){ rowLow[i] = (rowLower[i]); } else rowLow[i] = - infty; if(rowUpper[i] < nlp_infty){ rowUp[i] = (rowUpper[i]); } else rowUp[i] = infty; } } //Then convert everything to a CoinPackedMatrix //Go through values, clean coefficients and fix bounds for(int i = 0 ; i < nnz_jac_g ; i++) { if(const_types_[iRow_[i]] != TNLP::LINEAR){//For linear just copy is fine. if(//For other clean tinys cleanNnz(value_[i],colLower[jCol_[i]], colUpper[jCol_[i]], rowLower[iRow_[i]], rowUpper[iRow_[i]], x[jCol_[i]], rowLow[iRow_[i]], rowUp[iRow_[i]], tiny_, very_tiny_)) { if(rowLow[iRow_[i]] > -infty) rowLow[iRow_[i]] += value_[i] * x[jCol_[i]]; if(rowUp[iRow_[i]] < infty) rowUp[iRow_[i]] += value_[i] *x[jCol_[i]]; } } } CoinPackedMatrix mat(true, iRow_(), jCol_(), value_(), nnz_jac_g); mat.setDimensions(m,n); // In case matrix was empty, this should be enough #if 0 vector act(m); mat.times(x, act()); for(int j = 0 ; j < m ; j++){ if(j==10 && fabs(x[0] - 4.73032) < 1e-4) assert(act[j] + 1e-5 > rowLow[j] && act[j] - 1e-5 < rowUp[j] + g[j]); } #endif Bonmin::vector obj(n); for(int i = 0 ; i < n; i++) obj[i] = 0.; si->loadProblem(mat, colLower, colUpper, obj(), rowLow(), rowUp()); for(int i = 0 ; i < n ; i++) { if(model_->var_types()[i] == Bonmin::TMINLP::BINARY || model_->var_types()[i] == Bonmin::TMINLP::INTEGER ) si->setInteger(i); } if(getObj) { if(model_->hasLinearObjective()){ double zero; Bonmin::vector x0(n,0.); model_->eval_f(n, x0(), 1, zero); si->setDblParam(OsiObjOffset, -zero); //Copy the linear objective and don't create a dummy variable. model_->eval_grad_f(n, x, 1,obj()); si->setObjective(obj()); } else { throw -1; } } OsiCuts cs; get_oas(cs, x, 0, 1); si->applyCuts(cs); } void SepaTMINLP2OsiLP::get_oas(OsiCuts &cs, const double *x, bool getObj, bool global) const { int n,m, nnz_jac_g, nnz_h_lag; TNLP::IndexStyleEnum index_style; model_->get_nlp_info( n, m, nnz_jac_g, nnz_h_lag, index_style); Bonmin::vector g(m); model_->eval_jac_g(n, x, 1, m, nnz_jac_g, NULL, NULL, value_()); model_->eval_g(n,x,0,m,g()); //As jacobian is stored by cols fill OsiCuts with cuts Bonmin::vector lb(m + 1); Bonmin::vector ub(m + 1); Bonmin::vector row2cutIdx(m,-1);//store correspondance between index of row and index of cut (some cuts are not generated for rows because linear, or not binding). -1 if constraint does not generate a cut, otherwise index in cuts. std::vector cut2rowIdx; int numCuts = 0; const double * rowLower = model_->g_l(); const double * rowUpper = model_->g_u(); const double * colLower = model_->x_l(); const double * colUpper = model_->x_u(); double nlp_infty = infty_; double infty = DBL_MAX; for(int rowIdx = 0; rowIdx < m ; rowIdx++) { if(const_types_[rowIdx] == TNLP::NON_LINEAR) { row2cutIdx[rowIdx] = numCuts; cut2rowIdx.push_back(rowIdx); if(rowLower[rowIdx] > - nlp_infty) lb[numCuts] = rowLower[rowIdx] - g[rowIdx]; else lb[numCuts] = - infty; if(rowUpper[rowIdx] < nlp_infty) ub[numCuts] = rowUpper[rowIdx] - g[rowIdx]; else ub[numCuts] = infty; numCuts++; } } lb.resize(numCuts); ub.resize(numCuts); Bonmin::vector cuts(numCuts); for(int i = 0 ; i < nnz_jac_g ; i++) { const int &rowIdx = iRow_[i]; const int & cutIdx = row2cutIdx[ rowIdx ]; if(cutIdx != -1) { const int &colIdx = jCol_[i]; //"clean" coefficient if(cleanNnz(value_[i],colLower[colIdx], colUpper[colIdx], rowLower[rowIdx], rowUpper[rowIdx], x[colIdx], lb[cutIdx], ub[cutIdx], tiny_, very_tiny_)) { if(fabs(value_[i]) > 1e15) { printf("Not generating cut because of big coefficient %g col %i x[%i] = %g\n", value_[i], colIdx, colIdx, x[colIdx]); return; } cuts[cutIdx].insert(colIdx,value_[i]); if(lb[cutIdx] > - infty) lb[cutIdx] += value_[i] * x[colIdx]; if(ub[cutIdx] < infty) ub[cutIdx] += value_[i] * x[colIdx]; } } } for(int cutIdx = 0; cutIdx < numCuts; cutIdx++) { OsiRowCut newCut; if(global) newCut.setGloballyValidAsInteger(1); //********* Perspective Extension ********// const int* ids = model_->get_const_xtra_id(); // vector of indices corresponding to the binary variable activating the corresponding constraint // Get the index of the corresponding indicator binary variable int binary_id = (ids == NULL) ? -1 : ids[cut2rowIdx[cutIdx]];// index corresponding to the binary variable activating the corresponding constraint if(binary_id>0) {// If this hyperplane is a linearization of a disjunctive constraint, we link its righthand (or lefthand) side to the corresponding indicator binary variable //printf("Using perspectives\n"); if (lb[cutIdx] > -infty) { // ∂x ≥ lb => ∂x - lb*z ≥ 0 cuts[cutIdx].insert(binary_id, -lb[cutIdx]); newCut.setLb(0); newCut.setUb(ub[cutIdx]); } if (ub[cutIdx] < infty) { // ∂x ≤ ub => ∂x - ub*z ≤ 0 cuts[cutIdx].insert(binary_id, -ub[cutIdx]); newCut.setLb(lb[cutIdx]); newCut.setUb(0); } } else { newCut.setLb(lb[cutIdx]); newCut.setUb(ub[cutIdx]); } //********* Perspective Extension ********// newCut.setRow(cuts[cutIdx]); cs.insert(newCut); } printf("++++++++ I have generated %i cuts +++++++++\n", numCuts); return; } void SepaTMINLP2OsiLP::get_oa(int rowIdx, OsiCuts &cs, const double *x, bool getObj, bool global) const { int n,m, nnz_jac_g, nnz_h_lag; TNLP::IndexStyleEnum index_style; model_->get_nlp_info( n, m, nnz_jac_g, nnz_h_lag, index_style); double gi; model_->eval_gi(n,x,1, rowIdx,gi); Bonmin::vector jCol(n); int nnz; model_->eval_grad_gi(n, x, 0, rowIdx, nnz, jCol(), NULL); model_->eval_grad_gi(n, x, 0, rowIdx, nnz, NULL, value_()); //As jacobian is stored by cols fill OsiCuts with cuts double lb; double ub; const double * rowLower = model_->g_l(); const double * rowUpper = model_->g_u(); const double * colLower = model_->x_l(); const double * colUpper = model_->x_u(); double nlp_infty = infty_; double infty = DBL_MAX; if (rowLower[rowIdx] > -nlp_infty) lb = rowLower[rowIdx] - gi; else lb = -infty; if (rowUpper[rowIdx] < nlp_infty) ub = rowUpper[rowIdx] - gi; else ub = infty; CoinPackedVector cut; for(int i = 0 ; i < nnz ; i++) { if(index_style == Ipopt::TNLP::FORTRAN_STYLE) jCol[i]--; const int &colIdx = jCol[i]; //"clean" coefficient if(cleanNnz(value_[i],colLower[colIdx], colUpper[colIdx], rowLower[rowIdx], rowUpper[rowIdx], x[colIdx], lb, ub, tiny_, very_tiny_)) { if(fabs(value_[i]) > 1e15) { printf("Not generating cut because of big coefficient %g col %i x[%i] = %g\n", value_[i], colIdx, colIdx, x[colIdx]); return; } cut.insert(colIdx,value_[i]); if(lb > - infty) lb += value_[i] * x[colIdx]; if(ub < infty) ub += value_[i] * x[colIdx]; } } OsiRowCut newCut; if(global) newCut.setGloballyValidAsInteger(1); //********* Perspective Extension ********// const int* ids = model_->get_const_xtra_id(); // vector of indices corresponding to the binary variable activating the corresponding constraint // Get the index of the corresponding indicator binary variable int binary_id = (ids == NULL) ? -1 : ids[rowIdx];// index corresponding to the binary variable activating the corresponding constraint if(binary_id>0) {// If this hyperplane is a linearization of a disjunctive constraint, we link its righthand (or lefthand) side to the corresponding indicator binary variable //printf("Using perspectives\n"); if (lb > -infty) { // ∂x ≥ lb => ∂x - lb*z ≥ 0 cut.insert(binary_id, -lb); newCut.setLb(0); newCut.setUb(ub); } if (ub < infty) { // ∂x ≤ ub => ∂x - ub*z ≤ 0 cut.insert(binary_id, -ub); newCut.setLb(lb); newCut.setUb(0); } } else { newCut.setLb(lb); newCut.setUb(ub); } //********* Perspective Extension ********// newCut.setRow(cut); cs.insert(newCut); return; } void SepaTMINLP2OsiLP::get_refined_oa(OsiCuts & cs) const{ if(num_approx_ <= 0) return; int n; int m; int nnz_jac_g; int nnz_h_lag; Ipopt::TNLP::IndexStyleEnum index_style; //Get problem information model_->get_nlp_info(n, m, nnz_jac_g, nnz_h_lag, index_style); //const double * rowLower = model_->g_l(); //const double * rowUpper = model_->g_u(); const double * colLower = model_->x_l(); const double * colUpper = model_->x_u(); Bonmin::vector varTypes(n); model_->get_variables_linearity(n, varTypes()); //const Bonmin::TMINLP::VariableType* variableType = model_->var_types(); // Hassan OA initial description double * p = CoinCopyOfArray(colLower, n); double * pp = CoinCopyOfArray(colLower, n); double * up = CoinCopyOfArray(colUpper, n); std::vector step(n); for (int i = 0; i < n; i++) { if (p[i] < -1e4){ p[i] = pp[i] = -1e4; } if (up[i] > 1e4){ up[i] = 1e4; } } //Step step for (int i = 0; i < n; i++) { if (varTypes[i] == Ipopt::TNLP::LINEAR) { step[i] = 0; p[i] = pp[i] = up[i] = 0; } else step[i] = (up[i] - p[i]) / (num_approx_); } get_oas(cs, p, 0, true);// Generate Tangents at current point for (int j = 1; j <= num_approx_; j++) { for (int i = 0; i < n; i++) { pp[i] += step[i]; } get_oas(cs, pp, 0, true);// Generate Tangents at current point } get_oas(cs, up, 0, true);// Generate Tangents at current point delete [] p; delete [] pp; delete [] up; } void SepaTMINLP2OsiLP::add_outer_description_function_values(OsiSolverInterface &si) { int n; int m; int nnz_jac_g; int nnz_h_lag; Ipopt::TNLP::IndexStyleEnum index_style; //Get problem information model_->get_nlp_info(n, m, nnz_jac_g, nnz_h_lag, index_style); //const double * rowLower = model_->g_l(); //const double * rowUpper = model_->g_u(); const double * colLower = model_->x_l(); const double * colUpper = model_->x_u(); Bonmin::vector varTypes(n); model_->get_variables_linearity(n, varTypes()); const Bonmin::TMINLP::VariableType* variableType = model_->var_types(); // Hassan OA initial description OsiCuts cs; double * p = CoinCopyOfArray(colLower, n); double * pp = CoinCopyOfArray(colLower, n); double * up = CoinCopyOfArray(colUpper, n); double * low = CoinCopyOfArray(colLower, n); Bonmin::vector step(n); Bonmin::vector nbG(m,2); for (int i = 0; i < n; i++) { if (low[i] < -1e4){ low[i] = -1e4; } if (up[i] > 1e4){ up[i] = 1e4; } } for (int i = 0; i < n; i++) { if (varTypes[i] == Ipopt::TNLP::LINEAR) { step[i] = 0; low[i] = p[i] = pp[i] = up[i] = 0; } else step[i] = (up[i] - low[i]) / (num_approx_*20); } get_oas(cs, low, 0, true);// Generate Tangents at start point get_oas(cs, up, 0, true);// Generate Tangents at end point Bonmin::vector g_p(m); Bonmin::vector g_pp(m); model_->eval_g(n, low, 1, m, g_p()); // Evaluate function g at lowerbounds model_->eval_g(n, up, 1, m, g_pp()); // Evaluate function g at upperbounds for (int i = 0; (i < m); i++) { // Generate Outer-Approximation initial cuts for all nonlinear constraints if(const_types_[i] != Ipopt::TNLP::NON_LINEAR) continue; double thresh = std::abs(g_pp[i] - g_p[i])/(num_approx_-1); printf("Constraint %i threshold is %g lower val %g upper %g\n",i, thresh, g_p[i], g_pp[i]); std::copy(low, low + n, p); std::copy(low, low + n, pp); double g_p_i, g_pp_i; g_p_i = g_p[i]; int n_steps = 0; while (nbG[i] < num_approx_) { // Iterate untill increase is sufficient n_steps++; // Curvature sampling for (int j = 0; j < n; j++) { pp[j] += step[j]; } model_->eval_gi(n, pp, 1, i, g_pp_i); // printf("Difference in function value: %g\n", std::abs(g_p_i - g_pp_i)); if (std::abs(g_p_i - g_pp_i)>=thresh ) { printf("Function value after %i steps %g\n", n_steps, g_pp_i); get_oa(i, cs, pp, 0, true);// Generate Tangents at current point for (int j = 0; j < n; j++) { p[j] = pp[j]; // Move all previous points to the current one } g_p_i = g_pp_i; nbG[i]++; } } } si.applyCuts(cs); delete [] p; delete [] pp; delete [] up; } } Bonmin-releases-1.8.9/Bonmin/experimental/Separable/SepaTMINLP2OsiLP.hpp000066400000000000000000000037471436575401300257320ustar00rootroot00000000000000// (C) Copyright International Business Machines Corporation 2007 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // Pierre Bonami, International Business Machines Corporation // // Date : 10/16/2007 #ifndef SepaSepaTMINLP2OsiLP_H #define SepaSepaTMINLP2OsiLP_H #include #include #include "IpSmartPtr.hpp" #include "IpTNLP.hpp" #include "BonTypes.hpp" #include "BonTMINLP2OsiLP.hpp" namespace Sepa { /** A transformer class to build outer approximations i.e. transfomrs nonlinear programs into linear programs.*/ class SepaTMINLP2OsiLP: public Bonmin::TMINLP2OsiLP { public: /** Default constructor.*/ SepaTMINLP2OsiLP(): TMINLP2OsiLP(), num_approx_(0) {} /** Copy constructor.*/ SepaTMINLP2OsiLP(const SepaTMINLP2OsiLP & other): TMINLP2OsiLP(other), num_approx_(other.num_approx_){ } TMINLP2OsiLP * clone() const{ return new SepaTMINLP2OsiLP(*this); } /** Assignment operator.*/ SepaTMINLP2OsiLP & operator=(const SepaTMINLP2OsiLP& rhs){ if(this != & rhs){ TMINLP2OsiLP::operator=(rhs); num_approx_ = rhs.num_approx_; } return (*this); } void set_num_approx(int v){ num_approx_ = v; } /** Destructor.*/ ~SepaTMINLP2OsiLP(){} /** Build the Outer approximation of model_ in x and put it in si.*/ virtual void extract(OsiSolverInterface *si, const double * x, bool getObj) ; /** Get OAs of nonlinear constraints in x.*/ virtual void get_oas(OsiCuts & cs, const double * x, bool getObj, bool global) const; virtual void get_refined_oa(OsiCuts & cs) const; /** Get OA of one constraints in x.*/ virtual void get_oa(int iRow, OsiCuts & cs, const double * x, bool getObj, bool global) const; void add_outer_description(OsiSolverInterface &si) ; void add_outer_description_function_values(OsiSolverInterface &si) ; private: int num_approx_; }; } #endif Bonmin-releases-1.8.9/Bonmin/install-sh000077500000000000000000000220211436575401300200070ustar00rootroot00000000000000#!/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: Bonmin-releases-1.8.9/Bonmin/ltmain.sh000077500000000000000000005775301436575401300176520ustar00rootroot00000000000000# 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: Bonmin-releases-1.8.9/Bonmin/missing000077500000000000000000000254061436575401300174140ustar00rootroot00000000000000#! /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: Bonmin-releases-1.8.9/Bonmin/src/000077500000000000000000000000001436575401300165755ustar00rootroot00000000000000Bonmin-releases-1.8.9/Bonmin/src/Algorithms/000077500000000000000000000000001436575401300207065ustar00rootroot00000000000000Bonmin-releases-1.8.9/Bonmin/src/Algorithms/Ampl/000077500000000000000000000000001436575401300215775ustar00rootroot00000000000000Bonmin-releases-1.8.9/Bonmin/src/Algorithms/Ampl/BonAmplSetup.cpp000066400000000000000000000072531436575401300246630ustar00rootroot00000000000000// (C) Copyright International Business Machines Corporation 2007 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // Pierre Bonami, International Business Machines Corporation // // Date : 04/15/2007 #include "BonAmplSetup.hpp" #include "BonSolReader.hpp" namespace Bonmin { void BonminAmplSetup::initialize(char **& argv) { readOptionsFile(); /* Read the model.*/ Ipopt::SmartPtr model = new AmplTMINLP(ConstPtr(journalist()), roptions(), options(), argv, NULL, "bonmin", NULL); mayPrintDoc(); BonminSetup::initialize(GetRawPtr(model), true); #if 1 int ival; options()->GetEnumValue("read_solution_file", ival, "bonmin."); if(ival){ printf("Reading solution file"); SolReader read(argv[1], ".dbg_sol"); read.set_n_cols(nonlinearSolver()->getNumCols()); read.readFile(); nonlinearSolver()->activateRowCutDebugger(read.x()); } #endif } void BonminAmplSetup::initialize(AmplInterface &toFill, char **& argv) { Ipopt::SmartPtr solver = toFill.solver(); setOptionsAndJournalist(solver->roptions(), solver->options(), solver->journalist()); /* Get the basic options. */ readOptionsFile(); /* Read the model.*/ Ipopt::SmartPtr model = new AmplTMINLP(ConstPtr(journalist()), roptions(), options(), argv, NULL, "bonmin", NULL); mayPrintDoc(); toFill.initialize(roptions_, options_, journalist_, prefix(), GetRawPtr(model)); BonminSetup::initialize(toFill, true); } /** initialize bonmin with ampl model using the command line arguments reading options and nl file from strings.*/ void BonminAmplSetup::initialize(char **& argv, std::string& opt_file_content, std::string& nl_file_content, bool createContinuousSolver /*= false*/) { /* Get the basic options. */ readOptionsString(opt_file_content); /* read nl file by creating AmplTMINLP.*/ Ipopt::SmartPtr model = new AmplTMINLP(ConstPtr(journalist()), roptions(), options(), argv, NULL, "bonmin", &nl_file_content); mayPrintDoc(); BonminSetup::initialize(GetRawPtr(model), createContinuousSolver); } /** initialize bonmin with ampl model using the command line arguments and an existing OsiTMINLPInterface reading options and nl file from strings.*/ void BonminAmplSetup::initialize(AmplInterface &toFill, char **& argv, std::string& opt_file_content, std::string& nl_file_content, bool createContinuousSolver /*= false*/ ) { /* Get the basic options. */ readOptionsString(opt_file_content); /* read nl file by creating AmplTMINLP.*/ Ipopt::SmartPtr model = new AmplTMINLP(ConstPtr(journalist()), roptions(), options(), argv, NULL, "bonmin", &nl_file_content); mayPrintDoc(); toFill.initialize(roptions_, options_, journalist_, prefix(), GetRawPtr(model)); BonminSetup::initialize(toFill, createContinuousSolver); } /** Usefull for Bcp */ void BonminAmplSetup::fillOsiInterface(AmplInterface &toFill, char ** &argv, std::string & options, std::string & nl, bool createContinuousSolver /*= false*/) { /* Get the basic options. */ readOptionsString(options); /* Read the model.*/ Ipopt::SmartPtr model = new AmplTMINLP(ConstPtr(journalist_), roptions_, options_, argv, NULL, "bonmin", &nl); toFill.initialize(roptions(), options_, journalist(), prefix(), GetRawPtr(model)); } } Bonmin-releases-1.8.9/Bonmin/src/Algorithms/Ampl/BonAmplSetup.hpp000066400000000000000000000030561436575401300246650ustar00rootroot00000000000000// (C) Copyright International Business Machines Corporation 2007 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // Pierre Bonami, International Business Machines Corporation // // Date : 04/15/2007 #ifndef BonAmplSetup_H #define BonAmplSetup_H #include "BonBonminSetup.hpp" #include "BonAmplInterface.hpp" namespace Bonmin { class BonminAmplSetup: public BonminSetup { public: /** initialize bonmin with ampl model using the command line arguments.*/ void initialize(char **& argv); /** initialize bonmin with ampl model using the command line arguments and an existing OsiTMINLPInterface.*/ void initialize(AmplInterface &toFill, char **& argv); /** initialize bonmin with ampl model using the command line arguments reading options and nl file from strings.*/ void initialize(char **& argv, std::string& opt_file_content, std::string& nl_file_content, bool createContinuousSolver /*= false*/); /** initialize bonmin with ampl model using the command line arguments and an existing OsiTMINLPInterface reading options and nl file from strings.*/ void initialize(AmplInterface &toFill, char **& argv, std::string& opt_file_content, std::string& nl_file_content, bool createContinuousSolver = true); /** For Bcp. Initialize the passed OsiTMINLP interface with ampl model using the options and nl files contained in two strings.*/ void fillOsiInterface(AmplInterface &toFill, char **& argv, std::string & options, std::string & nl, bool createContinuousSolver = true); }; } #endif Bonmin-releases-1.8.9/Bonmin/src/Algorithms/Ampl/Makefile.am000066400000000000000000000046301436575401300236360ustar00rootroot00000000000000# Copyright (C) 2006, 2007 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 433 2007-03-28 05:01:22Z andreasw $ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign # Name of the library in this directory noinst_LTLIBRARIES = libbonamplsetup.la ######################################################################## # bonmin library # ######################################################################## # List all source files, including headers libbonamplsetup_la_SOURCES = BonAmplSetup.cpp BonAmplSetup.hpp # This is for libtool libbonamplsetup_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows AM_CPPFLAGS = \ -I`$(CYGPATH_W) $(srcdir)/../OaGenerators` \ -I`$(CYGPATH_W) $(srcdir)/../Branching` \ -I`$(CYGPATH_W) $(srcdir)/..` \ -I`$(CYGPATH_W) $(srcdir)/../../Interfaces` \ -I`$(CYGPATH_W) $(srcdir)/../../Interfaces/Ipopt` \ -I`$(CYGPATH_W) $(srcdir)/../../Interfaces/Filter` \ -I`$(CYGPATH_W) $(srcdir)/../../Interfaces/Ampl` \ $(BONMINLIB_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Interfaces ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = BonAmplSetup.hpp ######################################################################## # Astyle stuff # ######################################################################## # Here repeat all source files, with "bak" appended ASTYLE_FILES = \ BonAmplSetup.cppbak BonAmplSetup.hppbak ASTYLE = @ASTYLE@ ASTYLEFLAGS = @ASTYLEFLAGS@ CLEANFILES = $(ASTYLE_FILES) SUFFIXES = .cppbak .hppbak astyle: $(ASTYLE_FILES) .hpp.hppbak: mv $< $@ $(ASTYLE) $(ASTYLEFLAGS) < $@ > $< touch $@ .cpp.cppbak: mv $< $@ $(ASTYLE) $(ASTYLEFLAGS) < $@ > $< touch $@ Bonmin-releases-1.8.9/Bonmin/src/Algorithms/Ampl/Makefile.in000066400000000000000000000531651436575401300236560ustar00rootroot00000000000000# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2006, 2007 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/Algorithms/Ampl DIST_COMMON = $(includecoin_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/Interfaces/config.h \ $(top_builddir)/src/Interfaces/config_bonmin.h CONFIG_CLEAN_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libbonamplsetup_la_LIBADD = am_libbonamplsetup_la_OBJECTS = BonAmplSetup.lo libbonamplsetup_la_OBJECTS = $(am_libbonamplsetup_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 = $(libbonamplsetup_la_SOURCES) DIST_SOURCES = $(libbonamplsetup_la_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)$(includecoindir)" 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@ ASL_CFLAGS = @ASL_CFLAGS@ ASL_CFLAGS_INSTALLED = @ASL_CFLAGS_INSTALLED@ ASL_DATA = @ASL_DATA@ ASL_DATA_INSTALLED = @ASL_DATA_INSTALLED@ ASL_DEPENDENCIES = @ASL_DEPENDENCIES@ ASL_LIBS = @ASL_LIBS@ ASL_LIBS_INSTALLED = @ASL_LIBS_INSTALLED@ ASTYLE = @ASTYLE@ ASTYLEFLAGS = @ASTYLEFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BONMINAMPLINTERFACELIB_CFLAGS = @BONMINAMPLINTERFACELIB_CFLAGS@ BONMINAMPLINTERFACELIB_CFLAGS_INSTALLED = @BONMINAMPLINTERFACELIB_CFLAGS_INSTALLED@ BONMINAMPLINTERFACELIB_DEPENDENCIES = @BONMINAMPLINTERFACELIB_DEPENDENCIES@ BONMINAMPLINTERFACELIB_LIBS = @BONMINAMPLINTERFACELIB_LIBS@ BONMINAMPLINTERFACELIB_LIBS_INSTALLED = @BONMINAMPLINTERFACELIB_LIBS_INSTALLED@ BONMINAMPLINTERFACELIB_PCLIBS = @BONMINAMPLINTERFACELIB_PCLIBS@ BONMINAMPLINTERFACELIB_PCREQUIRES = @BONMINAMPLINTERFACELIB_PCREQUIRES@ BONMINLIB_CFLAGS = @BONMINLIB_CFLAGS@ BONMINLIB_CFLAGS_INSTALLED = @BONMINLIB_CFLAGS_INSTALLED@ BONMINLIB_DEPENDENCIES = @BONMINLIB_DEPENDENCIES@ BONMINLIB_LIBS = @BONMINLIB_LIBS@ BONMINLIB_LIBS_INSTALLED = @BONMINLIB_LIBS_INSTALLED@ BONMINLIB_PCLIBS = @BONMINLIB_PCLIBS@ BONMINLIB_PCREQUIRES = @BONMINLIB_PCREQUIRES@ BONMIN_SVN_REV = @BONMIN_SVN_REV@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINDEPEND_CFLAGS = @COINDEPEND_CFLAGS@ COINDEPEND_CFLAGS_INSTALLED = @COINDEPEND_CFLAGS_INSTALLED@ COINDEPEND_DATA = @COINDEPEND_DATA@ COINDEPEND_DATA_INSTALLED = @COINDEPEND_DATA_INSTALLED@ COINDEPEND_DEPENDENCIES = @COINDEPEND_DEPENDENCIES@ COINDEPEND_LIBS = @COINDEPEND_LIBS@ COINDEPEND_LIBS_INSTALLED = @COINDEPEND_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_ASL_FALSE = @COIN_HAS_ASL_FALSE@ COIN_HAS_ASL_TRUE = @COIN_HAS_ASL_TRUE@ COIN_HAS_COINDEPEND_FALSE = @COIN_HAS_COINDEPEND_FALSE@ COIN_HAS_COINDEPEND_TRUE = @COIN_HAS_COINDEPEND_TRUE@ COIN_HAS_CPX_FALSE = @COIN_HAS_CPX_FALSE@ COIN_HAS_CPX_TRUE = @COIN_HAS_CPX_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_FILTERSQP_FALSE = @COIN_HAS_FILTERSQP_FALSE@ COIN_HAS_FILTERSQP_TRUE = @COIN_HAS_FILTERSQP_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_OSICPX_FALSE = @COIN_HAS_OSICPX_FALSE@ COIN_HAS_OSICPX_TRUE = @COIN_HAS_OSICPX_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPXINCDIR = @CPXINCDIR@ CPXLIB = @CPXLIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ 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@ FILTERSQP_CFLAGS = @FILTERSQP_CFLAGS@ FILTERSQP_CFLAGS_INSTALLED = @FILTERSQP_CFLAGS_INSTALLED@ FILTERSQP_DATA = @FILTERSQP_DATA@ FILTERSQP_DATA_INSTALLED = @FILTERSQP_DATA_INSTALLED@ FILTERSQP_DEPENDENCIES = @FILTERSQP_DEPENDENCIES@ FILTERSQP_LIBS = @FILTERSQP_LIBS@ FILTERSQP_LIBS_INSTALLED = @FILTERSQP_LIBS_INSTALLED@ FLIBS = @FLIBS@ 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@ OSICPX_CFLAGS = @OSICPX_CFLAGS@ OSICPX_CFLAGS_INSTALLED = @OSICPX_CFLAGS_INSTALLED@ OSICPX_DATA = @OSICPX_DATA@ OSICPX_DATA_INSTALLED = @OSICPX_DATA_INSTALLED@ OSICPX_DEPENDENCIES = @OSICPX_DEPENDENCIES@ OSICPX_LIBS = @OSICPX_LIBS@ OSICPX_LIBS_INSTALLED = @OSICPX_LIBS_INSTALLED@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ 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@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ dos2unix = @dos2unix@ 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 # Name of the library in this directory noinst_LTLIBRARIES = libbonamplsetup.la ######################################################################## # bonmin library # ######################################################################## # List all source files, including headers libbonamplsetup_la_SOURCES = BonAmplSetup.cpp BonAmplSetup.hpp # This is for libtool libbonamplsetup_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows AM_CPPFLAGS = \ -I`$(CYGPATH_W) $(srcdir)/../OaGenerators` \ -I`$(CYGPATH_W) $(srcdir)/../Branching` \ -I`$(CYGPATH_W) $(srcdir)/..` \ -I`$(CYGPATH_W) $(srcdir)/../../Interfaces` \ -I`$(CYGPATH_W) $(srcdir)/../../Interfaces/Ipopt` \ -I`$(CYGPATH_W) $(srcdir)/../../Interfaces/Filter` \ -I`$(CYGPATH_W) $(srcdir)/../../Interfaces/Ampl` \ $(BONMINLIB_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Interfaces ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = BonAmplSetup.hpp ######################################################################## # Astyle stuff # ######################################################################## # Here repeat all source files, with "bak" appended ASTYLE_FILES = \ BonAmplSetup.cppbak BonAmplSetup.hppbak CLEANFILES = $(ASTYLE_FILES) SUFFIXES = .cppbak .hppbak all: all-am .SUFFIXES: .SUFFIXES: .cppbak .hppbak .cpp .hpp .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/Algorithms/Ampl/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign src/Algorithms/Ampl/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-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_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 libbonamplsetup.la: $(libbonamplsetup_la_OBJECTS) $(libbonamplsetup_la_DEPENDENCIES) $(CXXLINK) $(libbonamplsetup_la_LDFLAGS) $(libbonamplsetup_la_OBJECTS) $(libbonamplsetup_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BonAmplSetup.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: install-includecoinHEADERS: $(includecoin_HEADERS) @$(NORMAL_INSTALL) test -z "$(includecoindir)" || $(mkdir_p) "$(DESTDIR)$(includecoindir)" @list='$(includecoin_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(includecoinHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includecoindir)/$$f'"; \ $(includecoinHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includecoindir)/$$f"; \ done uninstall-includecoinHEADERS: @$(NORMAL_UNINSTALL) @list='$(includecoin_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(includecoindir)/$$f'"; \ rm -f "$(DESTDIR)$(includecoindir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(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: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) 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-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-includecoinHEADERS install-exec-am: install-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 .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-exec \ install-exec-am install-includecoinHEADERS install-info \ install-info-am install-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 astyle: $(ASTYLE_FILES) .hpp.hppbak: mv $< $@ $(ASTYLE) $(ASTYLEFLAGS) < $@ > $< touch $@ .cpp.cppbak: mv $< $@ $(ASTYLE) $(ASTYLEFLAGS) < $@ > $< touch $@ # 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: Bonmin-releases-1.8.9/Bonmin/src/Algorithms/BonBabSetupBase.cpp000066400000000000000000001000341436575401300243470ustar00rootroot00000000000000// (C) Copyright International Business Machines Corporation 2007 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // Pierre Bonami, International Business Machines Corporation // // Date : 04/12/2007 #include "BonminConfig.h" #ifdef COIN_HAS_FILTERSQP # include "BonFilterSolver.hpp" #endif #include "BonBabSetupBase.hpp" #include #include #include #include "BonDiver.hpp" #include "BonQpBranchingSolver.hpp" #include "BonLpBranchingSolver.hpp" #include "BonChooseVariable.hpp" #include "BonTMINLP2Quad.hpp" #include "BonTMINLPLinObj.hpp" namespace Bonmin { int BabSetupBase::defaultIntParam_[BabSetupBase::NumberIntParam] = { 1 /* BabLogLevel*/, 100 /* BabLogInterval*/, 2 /* MaxFailures.*/, 0 /* FailureBehavior.*/, 0 /* MaxInfeasible*/, 5 /*NumberStrong*/, 2 /* MinReliability*/, COIN_INT_MAX /* MaxNodes*/, COIN_INT_MAX /* MaxSolutions*/, COIN_INT_MAX /* MaxIterations*/, 0 /* SpecialOption*/, 0 /* DisableSos.*/, 1 /* numCutPasses.*/, 20 /* numCutPassesAtRoot.*/, 0 /* log level at root.*/ }; double BabSetupBase::defaultDoubleParam_[BabSetupBase::NumberDoubleParam] = { 0 /* CutoffDecr*/, COIN_DBL_MAX /* Cutoff*/, 0 /* AllowableGap*/, 0 /*AllowableFractionGap*/, 1e-09 /*IntTol*/, COIN_DBL_MAX /* MaxTime*/, }; BabSetupBase::BabSetupBase(const CoinMessageHandler * handler): nonlinearSolver_(NULL), continuousSolver_(NULL), linearizer_(NULL), cutGenerators_(), heuristics_(), branchingMethod_(NULL), nodeComparisonMethod_(), treeTraversalMethod_(), objects_(0), journalist_(NULL), options_(NULL), roptions_(NULL), readOptions_(false), messageHandler_(NULL), prefix_("bonmin.") { CoinCopyN(defaultIntParam_, NumberIntParam, intParam_); CoinCopyN(defaultDoubleParam_, NumberDoubleParam, doubleParam_); if(handler) messageHandler_ = handler->clone(); } /** Copy constructor. */ BabSetupBase::BabSetupBase(const BabSetupBase & other): nonlinearSolver_(NULL), continuousSolver_(NULL), linearizer_(other.linearizer_), cutGenerators_(), heuristics_(), branchingMethod_(NULL), nodeComparisonMethod_(other.nodeComparisonMethod_), treeTraversalMethod_(other.treeTraversalMethod_), objects_(other.objects_), journalist_(other.journalist_), options_(NULL), roptions_(other.roptions_), readOptions_(other.readOptions_), messageHandler_(NULL), prefix_(other.prefix_) { if (other.nonlinearSolver_) { nonlinearSolver_ = static_cast(other.nonlinearSolver_->clone()); } if (other.continuousSolver_) { continuousSolver_ = other.continuousSolver_->clone(); } if (other.messageHandler_) { messageHandler_ = other.messageHandler_->clone(); continuousSolver_->passInMessageHandler(messageHandler_); } for (CuttingMethods::const_iterator i = other.cutGenerators_.begin() ; i != other.cutGenerators_.end() ; i++) { cutGenerators_.push_back(*i); cutGenerators_.back().cgl = cutGenerators_.back().cgl->clone(); } for (HeuristicMethods::iterator i = heuristics_.begin() ; i != heuristics_.end() ; i++) { heuristics_.push_back(*i); heuristics_.back().heuristic = i->heuristic->clone(); } if(other.branchingMethod_ != NULL) branchingMethod_ = other.branchingMethod_->clone(); if (IsValid(other.options_)) { options_ = new Ipopt::OptionsList; *options_ = *other.options_; } CoinCopyN(other.intParam_, NumberIntParam, intParam_); CoinCopyN(other.doubleParam_, NumberDoubleParam, doubleParam_); for (unsigned int i = 0 ; i < objects_.size() ; i++) { objects_[i]->clone(); } } /** Copy constructor with change of nlp. */ BabSetupBase::BabSetupBase(const BabSetupBase & other, OsiTMINLPInterface &nlp): nonlinearSolver_(NULL), continuousSolver_(NULL), linearizer_(other.linearizer_), cutGenerators_(), heuristics_(), branchingMethod_(NULL), nodeComparisonMethod_(other.nodeComparisonMethod_), treeTraversalMethod_(other.treeTraversalMethod_), objects_(other.objects_), journalist_(other.journalist_), options_(NULL), roptions_(other.roptions_), readOptions_(other.readOptions_), messageHandler_(NULL), prefix_(other.prefix_) { nonlinearSolver_ = &nlp; if (other.continuousSolver_ != other.nonlinearSolver_) { continuousSolver_ = NULL; } else continuousSolver_ = nonlinearSolver_; if (other.messageHandler_) { messageHandler_ = other.messageHandler_->clone(); continuousSolver_->passInMessageHandler(messageHandler_); } for (CuttingMethods::const_iterator i = other.cutGenerators_.begin() ; i != other.cutGenerators_.end() ; i++) { cutGenerators_.push_back(*i); cutGenerators_.back().cgl = cutGenerators_.back().cgl->clone(); } for (HeuristicMethods::iterator i = heuristics_.begin() ; i != heuristics_.end() ; i++) { heuristics_.push_back(*i); heuristics_.back().heuristic = i->heuristic->clone(); } if(other.branchingMethod_ != NULL) branchingMethod_ = other.branchingMethod_->clone(); if (IsValid(other.options_)) { options_ = new Ipopt::OptionsList; *options_ = *other.options_; } CoinCopyN(other.intParam_, NumberIntParam, intParam_); CoinCopyN(other.doubleParam_, NumberDoubleParam, doubleParam_); for (unsigned int i = 0 ; i < objects_.size() ; i++) { objects_[i]->clone(); } } /** Copy constructor with change of nlp. */ BabSetupBase::BabSetupBase(const BabSetupBase & other, OsiTMINLPInterface &nlp, const std::string & prefix): nonlinearSolver_(other.nonlinearSolver_), continuousSolver_(NULL), linearizer_(other.linearizer_), cutGenerators_(), heuristics_(), branchingMethod_(NULL), nodeComparisonMethod_(), treeTraversalMethod_(), objects_(other.objects_), journalist_(other.journalist_), options_(NULL), roptions_(other.roptions_), readOptions_(other.readOptions_), messageHandler_(NULL), prefix_(prefix) { nonlinearSolver_ = &nlp; if (IsValid(other.options_)) { options_ = new Ipopt::OptionsList; *options_ = *other.options_; } if (other.messageHandler_) { messageHandler_ = other.messageHandler_->clone(); nonlinearSolver_->passInMessageHandler(messageHandler_); } CoinCopyN(defaultIntParam_, NumberIntParam, intParam_); CoinCopyN(defaultDoubleParam_, NumberDoubleParam, doubleParam_); gatherParametersValues(options_); for (unsigned int i = 0 ; i < objects_.size() ; i++) { objects_[i]->clone(); } } BabSetupBase::BabSetupBase(Ipopt::SmartPtr tminlp, const CoinMessageHandler * handler): nonlinearSolver_(NULL), continuousSolver_(NULL), linearizer_(NULL), cutGenerators_(), heuristics_(), branchingMethod_(NULL), nodeComparisonMethod_(), treeTraversalMethod_(), objects_(0), readOptions_(false), messageHandler_(NULL), prefix_("bonmin.") { CoinCopyN(defaultIntParam_, NumberIntParam, intParam_); CoinCopyN(defaultDoubleParam_, NumberDoubleParam, doubleParam_); if(handler) messageHandler_ = handler->clone(); use(tminlp); } /** Make a copy with solver replace by one passed .*/ BabSetupBase * BabSetupBase::clone(OsiTMINLPInterface&nlp)const { throw(CoinError("BabSetupBase", "CloneWithOtherNlp","Not implemented")); } void BabSetupBase::use(Ipopt::SmartPtr tminlp) { readOptionsFile(); assert(IsValid(tminlp)); nonlinearSolver_ = new OsiTMINLPInterface; int ival; options_->GetEnumValue("enable_dynamic_nlp", ival, "bonmin."); if(ival && ! tminlp->hasLinearObjective()){ Ipopt::SmartPtr linObj = new Bonmin::TMINLPLinObj; linObj->setTminlp(GetRawPtr(tminlp)); tminlp = GetRawPtr(linObj); } nonlinearSolver_->initialize(roptions_, options_, journalist_, prefix(), tminlp); if(messageHandler_ != NULL) nonlinearSolver_->passInMessageHandler(messageHandler_); else messageHandler_ = nonlinearSolver_->messageHandler()->clone(); if (ival){ nonlinearSolver_->use(new Bonmin::TMINLP2TNLPQuadCuts(tminlp)); } } BabSetupBase::BabSetupBase(const OsiTMINLPInterface& nlp): nonlinearSolver_(NULL), continuousSolver_(NULL), linearizer_(NULL), cutGenerators_(), heuristics_(), branchingMethod_(NULL), nodeComparisonMethod_(), treeTraversalMethod_(), objects_(0), journalist_(NULL), options_(NULL), roptions_(NULL), readOptions_(false), messageHandler_(NULL), prefix_("bonmin.") { CoinCopyN(defaultIntParam_, NumberIntParam, intParam_); CoinCopyN(defaultDoubleParam_, NumberDoubleParam, doubleParam_); use(nlp); } void BabSetupBase::use(const OsiTMINLPInterface& nlp) { nonlinearSolver_ = dynamic_cast(nlp.clone()); options_ = nonlinearSolver_->solver()->options(); roptions_ = nonlinearSolver_->solver()->roptions(); journalist_ = nonlinearSolver_->solver()->journalist(); if(messageHandler_ != NULL ) delete messageHandler_; messageHandler_ = nlp.messageHandler()->clone(); readOptions_ = true; } BabSetupBase::BabSetupBase( Ipopt::SmartPtr app): nonlinearSolver_(NULL), continuousSolver_(NULL), linearizer_(NULL), cutGenerators_(), heuristics_(), branchingMethod_(NULL), nodeComparisonMethod_(), treeTraversalMethod_(), objects_(0), journalist_(app->journalist()), options_(app->options()), roptions_(app->roptions()), readOptions_(true), messageHandler_(NULL), prefix_("bonmin.") { CoinCopyN(defaultIntParam_, NumberIntParam, intParam_); CoinCopyN(defaultDoubleParam_, NumberDoubleParam, doubleParam_); } BabSetupBase::~BabSetupBase() { if (nonlinearSolver_ != continuousSolver_) { delete nonlinearSolver_; } delete continuousSolver_; delete branchingMethod_; for (CuttingMethods::iterator i = cutGenerators_.begin() ; i != cutGenerators_.end() ; i++) { delete i->cgl; i->cgl = NULL; } for (HeuristicMethods::iterator i = heuristics_.begin() ; i != heuristics_.end() ; i++) { delete i->heuristic; } for (unsigned int i = 0 ; i < objects_.size() ; i++) { delete objects_[i]; } if(messageHandler_) delete messageHandler_; } void BabSetupBase::gatherParametersValues(Ipopt::SmartPtr options) { options->GetIntegerValue("bb_log_level",intParam_[BabLogLevel],prefix_.c_str()); options->GetIntegerValue("bb_log_interval",intParam_[BabLogInterval],prefix_.c_str()); options->GetIntegerValue("max_consecutive_failures",intParam_[MaxFailures],prefix_.c_str()); options->GetEnumValue("nlp_failure_behavior",intParam_[FailureBehavior],prefix_.c_str()); options->GetIntegerValue("max_consecutive_infeasible",intParam_[MaxInfeasible],prefix_.c_str()); options->GetIntegerValue("number_strong_branch",intParam_[NumberStrong],prefix_.c_str()); options->GetIntegerValue("number_before_trust",intParam_[MinReliability],prefix_.c_str()); options->GetIntegerValue("node_limit",intParam_[MaxNodes],prefix_.c_str()); options->GetIntegerValue("solution_limit",intParam_[MaxSolutions],prefix_.c_str()); options->GetIntegerValue("iteration_limit",intParam_[MaxIterations],prefix_.c_str()); options->GetEnumValue("sos_constraints",intParam_[DisableSos],prefix_.c_str()); options->GetIntegerValue("num_cut_passes",intParam_[NumCutPasses],prefix_.c_str()); options->GetIntegerValue("num_cut_passes_at_root",intParam_[NumCutPassesAtRoot],prefix_.c_str()); options->GetIntegerValue("nlp_log_at_root",intParam_[RootLogLevel],prefix_.c_str()); options->GetNumericValue("cutoff_decr",doubleParam_[CutoffDecr],prefix_.c_str()); options->GetNumericValue("cutoff",doubleParam_[Cutoff],prefix_.c_str()); options->GetNumericValue("allowable_gap",doubleParam_[AllowableGap],prefix_.c_str()); options->GetNumericValue("allowable_fraction_gap",doubleParam_[AllowableFractionGap],prefix_.c_str()); options->GetNumericValue("integer_tolerance",doubleParam_[IntTol],prefix_.c_str()); options->GetNumericValue("time_limit", doubleParam_[MaxTime],prefix_.c_str()); int ival; int seed = 0; ival = options->GetIntegerValue("random_generator_seed",seed,prefix_.c_str()); if(seed == -1) CoinSeedRandom((int)CoinGetTimeOfDay()); else if (ival != 0) CoinSeedRandom(seed); options->GetEnumValue("node_comparison",ival,prefix_.c_str()); nodeComparisonMethod_ = NodeComparison(ival); options->GetEnumValue("tree_search_strategy", ival, prefix_.c_str()); treeTraversalMethod_ = TreeTraversal(ival); int varSelection; options->GetEnumValue("variable_selection",varSelection,prefix_.c_str()); // Set branching strategy if (varSelection == MOST_FRACTIONAL) { intParam_[NumberStrong] = 0; intParam_[MinReliability] = 0; options_->SetIntegerValue("bonmin.number_strong_branch",intParam_[BabSetupBase::NumberStrong],true,true); options_->SetIntegerValue("bonmin.number_before_trust",intParam_[BabSetupBase::MinReliability],true,true); } else if (varSelection == RELIABILITY_BRANCHING) { intParam_[MinReliability] = 10; options_->SetIntegerValue("bonmin.number_before_trust",intParam_[BabSetupBase::MinReliability],true,true); } } void BabSetupBase::registerOptions() { registerAllOptions(roptions_); } void BabSetupBase::registerAllOptions(Ipopt::SmartPtr roptions) { OsiTMINLPInterface::registerOptions(roptions); /* BabSetup options.*/ roptions->SetRegisteringCategory("Output and Loglevel", RegisteredOptions::BonminCategory); roptions->AddBoundedIntegerOption("bb_log_level", "specify main branch-and-bound log level.", 0,5,1, "Set the level of output of the branch-and-bound : " "0 - none, 1 - minimal, 2 - normal low, 3 - normal high" ); roptions->setOptionExtraInfo("bb_log_level", 127); roptions->AddLowerBoundedIntegerOption("bb_log_interval", "Interval at which node level output is printed.", 0,100, "Set the interval (in terms of number of nodes) at which " "a log on node resolutions (consisting of lower and upper bounds) is given."); roptions->setOptionExtraInfo("bb_log_interval", 127); roptions->AddBoundedIntegerOption("lp_log_level", "specify LP log level.", 0,4,0, "Set the level of output of the linear programming sub-solver in B-Hyb or B-QG : " "0 - none, 1 - minimal, 2 - normal low, 3 - normal high, 4 - verbose" ); roptions->setOptionExtraInfo("lp_log_level", 119); roptions->AddBoundedIntegerOption("nlp_log_at_root","specify a different log level " "for root relaxation.", 0,12,0, ""); roptions->setOptionExtraInfo("nlp_log_at_root",63); roptions->SetRegisteringCategory("Branch-and-bound options", RegisteredOptions::BonminCategory); roptions->AddLowerBoundedIntegerOption ("random_generator_seed", "Set seed for random number generator (a value of -1 sets seeds to time since Epoch).", -1,0, ""); roptions->setOptionExtraInfo("random_generator_seed",127); roptions->AddLowerBoundedNumberOption("time_limit", "Set the global maximum computation time (in secs) for the algorithm.", 0.,0,1e10, ""); roptions->setOptionExtraInfo("time_limit", 127); roptions->AddLowerBoundedIntegerOption("node_limit", "Set the maximum number of nodes explored in the branch-and-bound search.", 0,COIN_INT_MAX, ""); roptions->setOptionExtraInfo("node_limit", 127); roptions->AddLowerBoundedIntegerOption("iteration_limit", "Set the cumulative maximum number of iteration in the algorithm used to process nodes continuous relaxations in the branch-and-bound.", 0,COIN_INT_MAX, "value 0 deactivates option."); roptions->setOptionExtraInfo("iteration_limit", 127); roptions->AddLowerBoundedIntegerOption("solution_limit", "Abort after that much integer feasible solution have been found by algorithm", 0,COIN_INT_MAX, "value 0 deactivates option"); roptions->setOptionExtraInfo("solution_limit", 127); roptions->AddLowerBoundedNumberOption("integer_tolerance", "Set integer tolerance.", 0.,1,1e-06, "Any number within that value of an integer is considered integer."); roptions->setOptionExtraInfo("integer_tolerance", 127); roptions->AddBoundedNumberOption("allowable_gap", "Specify the value of absolute gap under which the algorithm stops.", -1.e20,0,1.e20,0,0., "Stop the tree search when the gap between the objective value of the best known solution" " and the best bound on the objective of any solution is less than this."); roptions->setOptionExtraInfo("allowable_gap", 127); roptions->AddBoundedNumberOption("allowable_fraction_gap", "Specify the value of relative gap under which the algorithm stops.", -1.e20,0,1.e20,0,0.0, "Stop the tree search when the gap between the objective value of the best known solution " "and the best bound on the objective of any solution is less than this " "fraction of the absolute value of the best known solution value."); roptions->setOptionExtraInfo("allowable_fraction_gap", 127); roptions->AddBoundedNumberOption("cutoff", "Specify cutoff value.", -1e100,0,1e100,0,1e100, "cutoff should be the value of a feasible solution known by the user " "(if any). The algorithm will only look for solutions better than cutoff."); roptions->setOptionExtraInfo("cutoff", 127); roptions->AddBoundedNumberOption("cutoff_decr", "Specify cutoff decrement.", -1e10,0,1e10,0,1e-05, "Specify the amount by which cutoff is decremented below " "a new best upper-bound" " (usually a small positive value but in non-convex problems it may be a negative value)."); roptions->setOptionExtraInfo("cutoff_decr", 127); roptions->AddStringOption5("node_comparison", "Choose the node selection strategy.", "best-bound", "best-bound", "choose node with the smallest bound,", "depth-first", "Perform depth first search,", "breadth-first", "Perform breadth first search,", "dynamic", "Cbc dynamic strategy (starts with a depth first search and turn to best bound after 3 " "integer feasible solutions have been found).", "best-guess", "choose node with smallest guessed integer solution", "Choose the strategy for selecting the next node to be processed."); roptions->setOptionExtraInfo("node_comparison", 63); roptions->AddStringOption5("tree_search_strategy", "Pick a strategy for traversing the tree", "probed-dive", "top-node"," Always pick the top node as sorted by the node comparison function", "dive","Dive in the tree if possible, otherwise pick top node as sorted by the tree comparison function.", "probed-dive","Dive in the tree exploring two children before continuing the dive at each level.", "dfs-dive","Dive in the tree if possible doing a depth first search. " "Backtrack on leaves or when a prescribed depth is attained or " "when estimate of best possible integer feasible solution in subtree " "is worst than cutoff. " "Once a prescribed limit of backtracks is attained pick top node " "as sorted by the tree comparison function", "dfs-dive-dynamic","Same as dfs-dive but once enough solution are found switch to best-bound and if too many nodes switch to depth-first.", "All strategies can be used in conjunction with any of the node comparison functions. " "Options which affect dfs-dive are max-backtracks-in-dive and max-dive-depth. " "The dfs-dive won't work in a non-convex problem where objective does not decrease down branches." ); roptions->setOptionExtraInfo("tree_search_strategy", 63); roptions->AddLowerBoundedIntegerOption("number_strong_branch", "Choose the maximum number of variables considered for strong branching.", 0,20, "Set the number of variables on which to do strong branching."); roptions->setOptionExtraInfo("number_strong_branch", 127); roptions->AddLowerBoundedIntegerOption ("number_before_trust", "Set the number of branches on a variable before its pseudo costs are to be believed " "in dynamic strong branching.", 0,8, "A value of 0 disables pseudo costs."); roptions->setOptionExtraInfo("number_before_trust", 127); roptions->AddStringOption2("nlp_failure_behavior", "Set the behavior when an NLP or a series of NLP are unsolved by Ipopt (we call unsolved an NLP for which Ipopt is not " "able to guarantee optimality within the specified tolerances).", "stop", "stop", "Stop when failure happens.", "fathom", "Continue when failure happens.", "If set to \"fathom\", the algorithm will fathom the node when Ipopt fails to find a solution to the nlp " "at that node within the specified tolerances. " "The algorithm then becomes a heuristic, and the user will be warned that the solution might not be optimal."); roptions->setOptionExtraInfo("nlp_failure_behavior", 8); roptions->AddStringOption2("sos_constraints", "Whether or not to activate SOS constraints.", "enable", "enable","", "disable","", "(only type 1 SOS are supported at the moment)"); roptions->setOptionExtraInfo("sos_constraints", 63); #ifdef BONMIN_CURVATURE_BRANCHING roptions->AddStringOption10("variable_selection", #else roptions->AddStringOption9("variable_selection", #endif "Chooses variable selection strategy", "strong-branching", "most-fractional", "Choose most fractional variable", "strong-branching", "Perform strong branching", "reliability-branching", "Use reliability branching", #ifdef BONMIN_CURVATURE_BRANCHING "curvature-estimator", "Use curvature estimation to select branching variable", #endif "qp-strong-branching", "Perform strong branching with QP approximation", "lp-strong-branching", "Perform strong branching with LP approximation", "nlp-strong-branching", "Perform strong branching with NLP approximation", "osi-simple", "Osi method to do simple branching", "osi-strong", "Osi method to do strong branching", "random", "Method to choose branching variable randomly"); roptions->setOptionExtraInfo("variable_selection", 27); roptions->AddLowerBoundedIntegerOption("num_cut_passes", "Set the maximum number of cut passes at regular nodes of the branch-and-cut.", 0,1, ""); roptions->setOptionExtraInfo("num_cut_passes", 19); roptions->AddLowerBoundedIntegerOption("num_cut_passes_at_root", "Set the maximum number of cut passes at regular nodes of the branch-and-cut.", 0,20, ""); roptions->setOptionExtraInfo("num_cut_passes_at_root", 19); roptions->AddStringOption2("enable_dynamic_nlp", "Enable dynamic linear and quadratic rows addition in nlp", "no", "no", "", "yes", "", ""); roptions->setOptionExtraInfo("enable_dynamic_nlp", 19); //roptions->SetRegisteringCategory("Debugging",RegisteredOptions::UndocumentedCategory); roptions->AddStringOption2("read_solution_file", "Read a file with the optimal solution to test if algorithms cuts it.", "no", "no","", "yes","", "For Debugging purposes only."); roptions->setOptionExtraInfo("enable_dynamic_nlp", 8); /* Branching options.*/ LpBranchingSolver::registerOptions(roptions); #ifdef COIN_HAS_FILTERSQP FilterSolver::registerOptions(roptions); BqpdSolver::registerOptions(roptions); #endif CbcDiver::registerOptions(roptions); CbcDfsDiver::registerOptions(roptions); BonChooseVariable::registerOptions(roptions); } /** Initialize the options and the journalist.*/ void BabSetupBase::initializeOptionsAndJournalist() { options_ = new Ipopt::OptionsList(); journalist_= new Ipopt::Journalist(); roptions_ = new Bonmin::RegisteredOptions(); try { Ipopt::SmartPtr stdout_journal = journalist_->AddFileJournal("console", "stdout", Ipopt::J_ITERSUMMARY); options_->SetJournalist(journalist_); options_->SetRegisteredOptions(GetRawPtr(roptions_)); } catch (Ipopt::IpoptException &E) { E.ReportException(*journalist_); throw E; } catch (const std::bad_alloc &) { journalist_->Printf(Ipopt::J_ERROR, Ipopt::J_MAIN, "\n Not enough memory .... EXIT\n"); throw -1; } #ifndef NO_CATCH_ALL catch (...) { Ipopt::IpoptException E("Uncaught exception in FilterSolver::FilterSolver()", "BonFilterSolver.cpp",-1); throw E; } #endif registerOptions(); } /** Get the options from given fileName */ void BabSetupBase::readOptionsFile(std::string fileName) { if (GetRawPtr(options_) == NULL || GetRawPtr(roptions_) == NULL || GetRawPtr(journalist_) == NULL) initializeOptionsAndJournalist(); std::ifstream is; if (fileName != "") { try { is.open(fileName.c_str()); } catch (const std::bad_alloc &) { journalist_->Printf(Ipopt::J_SUMMARY, Ipopt::J_MAIN, "\nEXIT: Not enough memory.\n"); throw -1; } #ifndef NO_CATCH_ALL catch (...) { Ipopt::IpoptException E("Unknown Exception caught in ipopt", "Unknown File", -1); E.ReportException(*journalist_); throw -1; } #endif } readOptionsStream(is); if (is) { is.close(); } } /** Get the options from long string containing all.*/ void BabSetupBase::readOptionsString(std::string opt_string) { if (GetRawPtr(options_) == NULL || GetRawPtr(roptions_) == NULL || GetRawPtr(journalist_) == NULL) initializeOptionsAndJournalist(); std::stringstream is(opt_string.c_str()); readOptionsStream(is); } void BabSetupBase::readOptionsStream(std::istream& is) { if (GetRawPtr(options_) == NULL || GetRawPtr(roptions_) == NULL || GetRawPtr(journalist_) == NULL) initializeOptionsAndJournalist(); if (is.good()) { try { options_->ReadFromStream(*journalist_, is); } catch (Ipopt::IpoptException &E) { E.ReportException(*journalist_); throw E; } } mayPrintDoc(); readOptions_=true; } /** May print documentation of options if options print_options_documentation is set to yes.*/ void BabSetupBase::mayPrintDoc() { bool print_options_documentation; options_->GetBoolValue("print_options_documentation", print_options_documentation, ""); if (print_options_documentation) { std::list categories; categories.push_back("Algorithm choice"); categories.push_back("Branch-and-bound options"); categories.push_back("ECP cuts generation"); categories.push_back("Feasibility checker using OA cuts"); categories.push_back("MILP Solver"); categories.push_back("MILP cutting planes in hybrid algorithm"); categories.push_back("Primal Heuristics"); categories.push_back("NLP interface"); categories.push_back("NLP solution robustness"); categories.push_back("NLP solves in hybrid algorithm"); categories.push_back("Nonconvex problems"); categories.push_back("Outer Approximation Decomposition (B-OA)"); categories.push_back("Outer Approximation cuts generation"); categories.push_back("Output and Loglevel"); categories.push_back("Strong branching setup"); // Undocumented categories categories.push_back("Diving options"); categories.push_back("ECP based strong branching"); categories.push_back("Primal Heuristics (undocumented)"); categories.push_back("Outer Approximation strengthening"); #ifdef COIN_HAS_FILTERSQP categories.push_back("FilterSQP options"); #endif // roptions->OutputLatexOptionDocumentation2(*app_->Jnlst(),categories); roptions_->OutputOptionDocumentation(*(journalist_),categories); } } void BabSetupBase::setPriorities() { const int * priorities = nonlinearSolver()->getPriorities(); const double * upPsCosts = nonlinearSolver()->getUpPsCosts(); const int * directions = nonlinearSolver()->getBranchingDirections(); bool hasPseudo = (upPsCosts!=NULL); if (priorities == NULL && directions && NULL && hasPseudo) return; int n = nonlinearSolver()->numberObjects(); OsiObject ** objects = nonlinearSolver()->objects(); for (int i = 0 ; i < n; i++) { OsiObject2 * object = dynamic_cast(objects[i]); int iCol = objects[i]->columnNumber(); if (iCol < 0) { throw CoinError("BabSetupBase","setPriorities", "Don't know how to set priority for non-column object."); } if (priorities) { objects[i]->setPriority(priorities[iCol]); } if (directions) { if (object == NULL) { throw CoinError("BabSetupBase","setPriorities", "Don't know how to set preferred way for object."); } object->setPreferredWay(directions[iCol]); } if (upPsCosts) { throw CoinError("BabSetupBase","setPriorities", "Can not handle user set pseudo-costs with OsiObjects\n" "You should use one of the Cbc branching rules:\n" "most-fractional or strong-branching."); } } } void BabSetupBase::addSos() { // pass user set Sos constraints (code inspired from CoinSolve.cpp) const TMINLP::SosInfo * sos = nonlinearSolver()->model()->sosConstraints(); if (!getIntParameter(BabSetupBase::DisableSos) && sos && sos->num > 0) //we have some sos constraints { const int & numSos = sos->num; OsiObject ** objects = new OsiObject*[numSos]; const int * starts = sos->starts; const int * indices = sos->indices; const char * types = sos->types; const double * weights = sos->weights; bool hasPriorities = false; const int * varPriorities = nonlinearSolver()->getPriorities(); int numberObjects = nonlinearSolver()->numberObjects(); if (varPriorities) { for (int i = 0 ; i < numberObjects ; i++) { if (varPriorities[i]) { hasPriorities = true; break; } } } const int * sosPriorities = sos->priorities; if (sosPriorities) { for (int i = 0 ; i < numSos ; i++) { if (sosPriorities[i]) { hasPriorities = true; break; } } } for (int i = 0 ; i < numSos ; i++) { int start = starts[i]; int length = starts[i + 1] - start; objects[i] = new OsiSOS(nonlinearSolver(), length, &indices[start], &weights[start], (int) types[i]); objects[i]->setPriority(10); if (hasPriorities && sosPriorities && sosPriorities[i]) { objects[i]->setPriority(sosPriorities[i]); } } nonlinearSolver()->addObjects(numSos, objects); for (int i = 0 ; i < numSos ; i++) delete objects[i]; delete [] objects; } } }/* End namespace Bonmin.*/ Bonmin-releases-1.8.9/Bonmin/src/Algorithms/BonBabSetupBase.hpp000066400000000000000000000304621436575401300243630ustar00rootroot00000000000000// (C) Copyright International Business Machines Corporation 2007 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // Pierre Bonami, International Business Machines Corporation // // Date : 04/12/2007 #ifndef BabSetupBase_H #define BabSetupBase_H #include #include #include "CglCutGenerator.hpp" #include "CbcHeuristic.hpp" #include "OsiChooseVariable.hpp" #include "BonOsiTMINLPInterface.hpp" #include "IpSmartPtr.hpp" #include "BonTMINLP2OsiLP.hpp" namespace Bonmin { /** A class to have all elements necessary to setup a branch-and-bound.*/ class BabSetupBase { public: /** Type for cut generation method with its frequency and string identification. */ struct CuttingMethod { int frequency; std::string id; CglCutGenerator * cgl; bool atSolution; bool normal; bool always; CuttingMethod(): atSolution(false), normal(true), always(false) {} CuttingMethod(const CuttingMethod & other): frequency(other.frequency), id(other.id), cgl(other.cgl), atSolution(other.atSolution), normal(other.normal), always(other.always) {} }; /** Type for heuristic method with its string identification. */ struct HeuristicMethod { std::string id; CbcHeuristic* heuristic; HeuristicMethod() {} HeuristicMethod(const HeuristicMethod & other): id(other.id), heuristic(other.heuristic) {} }; typedef std::list CuttingMethods; typedef std::list HeuristicMethods; /** Strategies for comparing the nodes on the heap. */ enum NodeComparison { bestBound = 0 /** Best bound*/, DFS /** Depth First Search*/, BFS /** Best First Search */, dynamic /** Dynamic strategy, see CbcBranchActual.hpp for explanations.*/, bestGuess /** Best guessed integer solution is subtree below, based on pseudo costs */ }; /** Strategies for traversing the tree.*/ enum TreeTraversal { HeapOnly=0 /** Only using the heap, uses CbcTree.*/, DiveFromBest /** dive from top node of the heap untill it gets to a leaf of the tree. Uses Bonmin::CbcDiver.*/, ProbedDive /** Eplore two kids before following on dive.*/, DfsDiveFromBest /** dive from top node of the heap with more elaborate strategy (see options doc). Uses Bonmin::CbcDfsDiver.*/, DfsDiveDynamic /** Same as DfsDiveFromBest, but after a prescribed number of integer solution are found switch to best-bound and if too many node switches to depth-first. Uses Bonmin::CbcDfsDiver.*/ }; /** @name Enums for optionslist parameters */ enum VarSelectStra_Enum { MOST_FRACTIONAL=0, STRONG_BRANCHING, RELIABILITY_BRANCHING, #ifdef BONMIN_CURVATURE_BRANCHING CURVATURE_ESTIMATOR, #endif QP_STRONG_BRANCHING, LP_STRONG_BRANCHING, NLP_STRONG_BRANCHING, OSI_SIMPLE, OSI_STRONG, RANDOM }; /** Parameters represented by an integer. */ enum IntParameter{ BabLogLevel = 0 /** Log level of main branch-and-bound*/, BabLogInterval/** Display information every logIntervval nodes.*/, MaxFailures /** Max number of failures in a branch.*/, FailureBehavior /** Behavior of the algorithm in the case of a failure.*/, MaxInfeasible /** Max number of consecutive infeasible problem in a branch before fathoming.*/, NumberStrong /** Number of candidates for strong branching.*/, MinReliability /** Minimum reliability before trust pseudo-costs.*/, MaxNodes /** Global node limit.*/, MaxSolutions /** limit on number of integer feasible solution.*/, MaxIterations /** Global iteration limit. */, SpecialOption /** Spetial option in particular for Cbc. */, DisableSos /** Consider or not SOS constraints.*/, NumCutPasses/** Number of cut passes at nodes.*/, NumCutPassesAtRoot/** Number of cut passes at nodes.*/, RootLogLevel/** Log level for root relaxation.*/, NumberIntParam /** Dummy end to size table*/ }; /** Parameters represented by a double.*/ enum DoubleParameter{ CutoffDecr = 0 /** Amount by which cutoff is incremented */, Cutoff /** cutoff value */, AllowableGap /** Stop if absolute gap is less than this. */, AllowableFractionGap /** Stop if relative gap is less than this.*/, IntTol /** Integer tolerance.*/, MaxTime /** Global time limit. */, NumberDoubleParam /** Dummy end to size table*/ }; /** Default constructor. */ BabSetupBase(const CoinMessageHandler * handler = NULL); /** Construct from existing tminlp. */ BabSetupBase(Ipopt::SmartPtr tminlp, const CoinMessageHandler * handler = NULL); /** Construct from existing application.*/ BabSetupBase(Ipopt::SmartPtr app); /** Construct from existing TMINLP interface.*/ BabSetupBase(const OsiTMINLPInterface& nlp); /** Copy but uses an other nlp.*/ BabSetupBase(const BabSetupBase &setup, OsiTMINLPInterface &nlp); /** Copy but uses an other nlp.*/ BabSetupBase(const BabSetupBase &setup, OsiTMINLPInterface &nlp, const std::string &prefix); /** Copy constructor. */ BabSetupBase(const BabSetupBase & other); /** virtual copy constructor. */ virtual BabSetupBase * clone() const = 0; /** Make a copy with solver replace by one passed .*/ virtual BabSetupBase *clone(OsiTMINLPInterface&nlp)const; /** Virtual destructor. */ virtual ~BabSetupBase(); /** @name Methods to initialize algorithm with various inputs. */ /** @{ */ /** use existing TMINLP interface (containing the options).*/ void use(const OsiTMINLPInterface& nlp); /** Read options (if not done before) and create interface using tminlp.*/ void use(Ipopt::SmartPtr tminlp ); /** use specific instanciation of a TMINLP2TNLP.*/ void use(Ipopt::SmartPtr prob); /** Set the non-linear solver used */ void setNonlinearSolver(OsiTMINLPInterface * s) { nonlinearSolver_ = s; } /** @} */ /** @name Methods to manipulate options. */ /** @{ */ /** Register all the options for this algorithm instance.*/ virtual void registerOptions(); /** Setup the defaults options for this algorithm. */ virtual void setBabDefaultOptions(Ipopt::SmartPtr roptions) {} /** Register all the options for this algorithm instance.*/ static void registerAllOptions(Ipopt::SmartPtr roptions); /** Get the options from default text file (bonmin.opt) if don't already have them.*/ virtual void readOptionsFile() { if (readOptions_) return; readOptionsFile("bonmin.opt"); } /** Get the options from given fileName */ void readOptionsFile(std::string fileName); /** Get the options from long string containing all.*/ void readOptionsString(std::string opt_string); /** Get the options from stream.*/ void readOptionsStream(std::istream& is); /** May print documentation of options if options print_options_documentation is set to yes.*/ void mayPrintDoc(); /** Get prefix to use for options.*/ const char * prefix() const { return prefix_.c_str(); } /** Set the value for options, output...*/ void setOptionsAndJournalist(Ipopt::SmartPtr roptions, Ipopt::SmartPtr options, Ipopt::SmartPtr journalist) { options_ = options; roptions_ = roptions; journalist_ = journalist; } /** Initialize the options and the journalist.*/ void initializeOptionsAndJournalist(); /** @} */ /** @name Elements of the branch-and-bound setup.*/ /** @{ */ /** Pointer to the non-linear solver used.*/ OsiTMINLPInterface * nonlinearSolver() { return nonlinearSolver_; } /** Pointer to the continuous solver to use for relaxations. */ OsiSolverInterface * continuousSolver() { return continuousSolver_; } /** list of cutting planes methods to apply with their frequencies. */ CuttingMethods& cutGenerators() { return cutGenerators_; } /** list of Heuristic methods to use. */ HeuristicMethods& heuristics() { return heuristics_; } /** branching method to use. */ OsiChooseVariable * branchingMethod() { return branchingMethod_; } /** Method used to compare nodes. */ NodeComparison& nodeComparisonMethod() { return nodeComparisonMethod_; } /** Method used to traverse tree.*/ TreeTraversal treeTraversalMethod() { return treeTraversalMethod_; } /** Return value of integer parameter. */ int getIntParameter(const IntParameter &p) const { return intParam_[p]; } /** Return value of double parameter.*/ double getDoubleParameter(const DoubleParameter &p) const { return doubleParam_[p]; } /** Return value of integer parameter. */ void setIntParameter(const IntParameter &p, const int v) { intParam_[p] = v; } /** Return value of double parameter.*/ void setDoubleParameter(const DoubleParameter &p, const double v) { doubleParam_[p] = v; } /** @} */ /** Get the values of base parameters from the options stored.*/ void gatherParametersValues() { gatherParametersValues(options_); } /** Get the values of the base parameters from the passed options.*/ void gatherParametersValues(Ipopt::SmartPtr options); /** Acces storage of Journalist for output */ Ipopt::SmartPtr journalist() { return journalist_; } /** Acces list of Options */ Ipopt::SmartPtr options() { return options_; } /** Access registered Options */ Ipopt::SmartPtr roptions() { return roptions_; } /** Access to extra objects.*/ const vector& objects() const { return objects_; } /** Access to extra objects.*/ vector& objects() { return objects_; } void addCutGenerator(CuttingMethod & cg){ cutGenerators_.push_back(cg); } void set_linearizer(TMINLP2OsiLP * linearizer){ linearizer_ = linearizer; } protected: /** Set the priorities into OsiTMINLPInterface when needed.*/ void setPriorities(); /** Add SOS constraints to OsiTMINLPInterface when needed.*/ void addSos(); /** storage of integer parameters.*/ int intParam_[NumberIntParam]; /** default values for int parameters.*/ static int defaultIntParam_[NumberIntParam]; /** storage of double parameters. */ double doubleParam_[NumberDoubleParam]; /** default values for double parameters. */ static double defaultDoubleParam_[NumberDoubleParam]; /** Storage of the non-linear solver used.*/ OsiTMINLPInterface * nonlinearSolver_; /** Storage of continuous solver.*/ OsiSolverInterface * continuousSolver_; /** Method to linearize MINLPs */ Ipopt::SmartPtr linearizer_; /** Cut generation methods. */ CuttingMethods cutGenerators_; /** Heuristic methods. */ HeuristicMethods heuristics_; /** Branching method.*/ OsiChooseVariable * branchingMethod_; /** Node comparison method.*/ NodeComparison nodeComparisonMethod_; /** Tree traversal method.*/ TreeTraversal treeTraversalMethod_; /** Extra object to add to Cbc (not OsiObjects).*/ vector objects_; /** Storage of Journalist for output */ Ipopt::SmartPtr journalist_; /** List of Options */ Ipopt::SmartPtr options_; /** Registered Options */ Ipopt::SmartPtr roptions_; /** flag to say if option file was read.*/ bool readOptions_; /** separate message handler.*/ CoinMessageHandler * messageHandler_; /** Prefix to use when reading options.*/ std::string prefix_; }; }/* End namespace Bonmin. */ #endif Bonmin-releases-1.8.9/Bonmin/src/Algorithms/BonBonminSetup.cpp000066400000000000000000001025671436575401300243270ustar00rootroot00000000000000// (C) Copyright International Business Machines Corporation 2007 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // Pierre Bonami, International Business Machines Corporation // // Date : 04/13/2007 #include "BonminConfig.h" #include "OsiClpSolverInterface.hpp" #include "BonBonminSetup.hpp" #ifdef BONMIN_CURVATURE_BRANCHING #include "BonCurvBranchingSolver.hpp" #endif #include "BonChooseVariable.hpp" #include "BonRandomChoice.hpp" #include "BonDiver.hpp" #include "BonQpBranchingSolver.hpp" #include "BonLpBranchingSolver.hpp" //OA machinery #include "BonDummyHeuristic.hpp" #include "BonOACutGenerator2.hpp" #include "BonFpForMinlp.hpp" #include "BonOaFeasChecker.hpp" #include "BonOaNlpOptim.hpp" #include "BonEcpCuts.hpp" #include "BonCbcNode.hpp" #ifdef COIN_HAS_FILTERSQP # include "BonFilterSolver.hpp" #endif //MILP cuts #include "CglGomory.hpp" #include "CglProbing.hpp" #include "CglKnapsackCover.hpp" #include "CglOddHole.hpp" #include "CglClique.hpp" #include "CglFlowCover.hpp" #include "CglMixedIntegerRounding2.hpp" #include "CglTwomir.hpp" #include "CglPreProcess.hpp" #include "CglLandP.hpp" #include "CglRedSplit.hpp" #include "BonLinearCutsGenerator.hpp" #include "BonFixAndSolveHeuristic.hpp" #include "BonDummyPump.hpp" #include "BonPumpForMinlp.hpp" #include "BonHeuristicRINS.hpp" #include "BonHeuristicLocalBranching.hpp" #include "BonHeuristicFPump.hpp" #include "BonHeuristicDiveFractional.hpp" #include "BonHeuristicDiveVectorLength.hpp" #include "BonHeuristicDiveMIPFractional.hpp" #include "BonHeuristicDiveMIPVectorLength.hpp" #include "BonMilpRounding.hpp" //#include "BonInnerApproximation.hpp" namespace Bonmin { BonminSetup::BonminSetup(const CoinMessageHandler * handler):BabSetupBase(handler),algo_(Dummy) {} BonminSetup::BonminSetup(const BonminSetup &other):BabSetupBase(other), algo_(other.algo_) {} BonminSetup::BonminSetup(const BonminSetup &other, OsiTMINLPInterface &nlp): BabSetupBase(other, nlp), algo_(other.algo_) { if(algo_ != B_BB){ assert(continuousSolver_ == NULL); continuousSolver_ = new OsiClpSolverInterface; int lpLogLevel; options_->GetIntegerValue("lp_log_level",lpLogLevel,prefix_.c_str()); if(messageHandler_) continuousSolver_->passInMessageHandler(messageHandler_); continuousSolver_->messageHandler()->setLogLevel(lpLogLevel); nonlinearSolver_->extractLinearRelaxation(*continuousSolver_); // say bound dubious, does cuts at solution OsiBabSolver * extraStuff = new OsiBabSolver(3); continuousSolver_->setAuxiliaryInfo(extraStuff); delete extraStuff; } } BonminSetup::BonminSetup(const BonminSetup &other, OsiTMINLPInterface &nlp, const std::string &prefix): BabSetupBase(other, nlp, prefix), algo_(Dummy) { algo_ = getAlgorithm(); if (algo_ == B_BB) initializeBBB(); else initializeBHyb(true); } void BonminSetup::registerAllOptions(Ipopt::SmartPtr roptions) { BabSetupBase::registerAllOptions(roptions); /* Outer Approximation options.*/ OACutGenerator2::registerOptions(roptions); OaFeasibilityChecker::registerOptions(roptions); MinlpFeasPump::registerOptions(roptions); EcpCuts::registerOptions(roptions); OaNlpOptim::registerOptions(roptions); SubMipSolver::registerOptions(roptions); BonCbcFullNodeInfo::registerOptions(roptions); registerMilpCutGenerators(roptions); /** Heursitics.*/ LocalSolverBasedHeuristic::registerOptions(roptions); FixAndSolveHeuristic::registerOptions(roptions); DummyPump::registerOptions(roptions); MilpRounding::registerOptions(roptions); PumpForMinlp::registerOptions(roptions); HeuristicRINS::registerOptions(roptions); HeuristicLocalBranching::registerOptions(roptions); HeuristicFPump::registerOptions(roptions); HeuristicDiveFractional::registerOptions(roptions); HeuristicDiveVectorLength::registerOptions(roptions); HeuristicDiveMIPFractional::registerOptions(roptions); HeuristicDiveMIPVectorLength::registerOptions(roptions); roptions->SetRegisteringCategory("Algorithm choice", RegisteredOptions::BonminCategory); roptions->AddStringOption6("algorithm", "Choice of the algorithm.", "B-BB", "B-BB","simple branch-and-bound algorithm,", "B-OA","OA Decomposition algorithm,", "B-QG","Quesada and Grossmann branch-and-cut algorithm,", "B-Hyb","hybrid outer approximation based branch-and-cut,", "B-Ecp","ECP cuts based branch-and-cut a la FilMINT.", "B-iFP","Iterated Feasibility Pump for MINLP.", "This will preset some of the options of bonmin depending on the algorithm choice." ); roptions->setOptionExtraInfo("algorithm",127); } /** Register all the Bonmin options.*/ void BonminSetup::registerOptions() { registerAllOptions(roptions_); } /** Initialize, read options and create appropriate bonmin setup using initialized tminlp.*/ void BonminSetup::initialize(Ipopt::SmartPtr tminlp, bool createContinuousSolver /*= false*/) { use(tminlp); BabSetupBase::gatherParametersValues(options_); algo_ = getAlgorithm(); if (algo_ == B_BB) initializeBBB(); else initializeBHyb(createContinuousSolver); } /** Initialize, read options and create appropriate bonmin setup using initialized tminlp.*/ void BonminSetup::initialize(const OsiTMINLPInterface &nlpSi, bool createContinuousSolver /*= false*/) { use(nlpSi); BabSetupBase::gatherParametersValues(options_); Algorithm algo = getAlgorithm(); if (algo == B_BB) initializeBBB(); else initializeBHyb(createContinuousSolver); } /** Register standard MILP cut generators. */ void BonminSetup::registerMilpCutGenerators(Ipopt::SmartPtr roptions) { roptions->SetRegisteringCategory("MILP cutting planes in hybrid algorithm", RegisteredOptions::BonminCategory); roptions->AddLowerBoundedIntegerOption("Gomory_cuts", "Frequency (in terms of nodes) for generating Gomory cuts in branch-and-cut.", -100,-5, "If $k > 0$, cuts are generated every $k$ nodes, if $-99 < k < 0$ cuts are generated every $-k$ nodes but " "Cbc may decide to stop generating cuts, if not enough are generated at the root node, " "if $k=-99$ generate cuts only at the root node, if $k=0$ or $100$ do not generate cuts."); roptions->setOptionExtraInfo("Gomory_cuts",119); #if 0 roptions->AddBoundedIntegerOption("probing_cuts", "Frequency (in terms of nodes) for generating probing cuts in branch-and-cut", 0,0,0, "If $k > 0$, cuts are generated every $k$ nodes, if $-99 < k < 0$ cuts are generated every $-k$ nodes but " "Cbc may decide to stop generating cuts, if not enough are generated at the root node, " "if $k=-99$ generate cuts only at the root node, if $k=0$ or $100$ do not generate cuts."); roptions->setOptionExtraInfo("probing_cuts",0); #endif roptions->AddLowerBoundedIntegerOption("cover_cuts", "Frequency (in terms of nodes) for generating cover cuts in branch-and-cut", -100,0, "If $k > 0$, cuts are generated every $k$ nodes, if $-99 < k < 0$ cuts are generated every $-k$ nodes but " "Cbc may decide to stop generating cuts, if not enough are generated at the root node, " "if $k=-99$ generate cuts only at the root node, if $k=0$ or $100$ do not generate cuts."); roptions->setOptionExtraInfo("cover_cuts",119); roptions->AddLowerBoundedIntegerOption("mir_cuts", "Frequency (in terms of nodes) for generating MIR cuts in branch-and-cut", -100,-5, "If $k > 0$, cuts are generated every $k$ nodes, if $-99 < k < 0$ cuts are generated every $-k$ nodes but " "Cbc may decide to stop generating cuts, if not enough are generated at the root node, " "if $k=-99$ generate cuts only at the root node, if $k=0$ or $100$ do not generate cuts."); roptions->setOptionExtraInfo("mir_cuts",119); roptions->AddLowerBoundedIntegerOption("2mir_cuts", "Frequency (in terms of nodes) for generating 2-MIR cuts in branch-and-cut", -100,0, "If $k > 0$, cuts are generated every $k$ nodes, if $-99 < k < 0$ cuts are generated every $-k$ nodes but " "Cbc may decide to stop generating cuts, if not enough are generated at the root node, " "if $k=-99$ generate cuts only at the root node, if $k=0$ or $100$ do not generate cuts."); roptions->setOptionExtraInfo("2mir_cuts",119); roptions->AddLowerBoundedIntegerOption("flow_cover_cuts", "Frequency (in terms of nodes) for generating flow cover cuts in branch-and-cut", -100,-5, "If $k > 0$, cuts are generated every $k$ nodes, if $-99 < k < 0$ cuts are generated every $-k$ nodes but " "Cbc may decide to stop generating cuts, if not enough are generated at the root node, " "if $k=-99$ generate cuts only at the root node, if $k=0$ or $100$ do not generate cuts."); roptions->setOptionExtraInfo("flow_cover_cuts",119); roptions->AddLowerBoundedIntegerOption("lift_and_project_cuts", "Frequency (in terms of nodes) for generating lift-and-project cuts in branch-and-cut", -100,0, "If $k > 0$, cuts are generated every $k$ nodes, if $-99 < k < 0$ cuts are generated every $-k$ nodes but " "Cbc may decide to stop generating cuts, if not enough are generated at the root node, " "if $k=-99$ generate cuts only at the root node, if $k=0$ or $100$ do not generate cuts."); roptions->setOptionExtraInfo("lift_and_project_cuts", 119); roptions->AddLowerBoundedIntegerOption("reduce_and_split_cuts", "Frequency (in terms of nodes) for generating reduce-and-split cuts in branch-and-cut", -100,0, "If $k > 0$, cuts are generated every $k$ nodes, if $-99 < k < 0$ cuts are generated every $-k$ nodes but " "Cbc may decide to stop generating cuts, if not enough are generated at the root node, " "if $k=-99$ generate cuts only at the root node, if $k=0$ or $100$ do not generate cuts."); roptions->setOptionExtraInfo("reduce_and_split_cuts", 119); roptions->AddLowerBoundedIntegerOption("clique_cuts", "Frequency (in terms of nodes) for generating clique cuts in branch-and-cut", -100,-5, "If $k > 0$, cuts are generated every $k$ nodes, if $-99 < k < 0$ cuts are generated every $-k$ nodes but " "Cbc may decide to stop generating cuts, if not enough are generated at the root node, " "if $k=-99$ generate cuts only at the root node, if $k=0$ or $100$ do not generate cuts."); roptions->setOptionExtraInfo("clique_cuts", 119); } /** Add milp cut generators according to options.*/ void BonminSetup::addMilpCutGenerators() { int freq; options_->GetIntegerValue("Gomory_cuts", freq,prefix_.c_str()); if (freq) { CuttingMethod cg; cg.frequency = freq; CglGomory * gom = new CglGomory; cg.cgl = gom; gom->setLimitAtRoot(5000); gom->setLimit(500); gom->setLargestFactorMultiplier(1e-08); cg.id = "Mixed Integer Gomory"; cutGenerators_.push_back(cg); } #if 0 options_->GetIntegerValue("probing_cuts",freq,prefix_.c_str()); if (freq) { CuttingMethod cg; cg.frequency = freq; CglProbing * probe = new CglProbing; cg.cgl = probe; probe->setUsingObjective(1); probe->setMaxPass(3); probe->setMaxPassRoot(3); // Number of unsatisfied variables to look at probe->setMaxProbe(10); probe->setMaxProbeRoot(50); // How far to follow the consequences probe->setMaxLook(10); probe->setMaxLookRoot(50); probe->setMaxLookRoot(10); // Only look at rows with fewer than this number of elements probe->setMaxElements(200); probe->setRowCuts(3); cg.id = "Probing"; cutGenerators_.push_back(cg); } #endif options_->GetIntegerValue("mir_cuts",freq,prefix_.c_str()); if (freq) { CuttingMethod cg; cg.frequency = freq; CglMixedIntegerRounding2 * mir = new CglMixedIntegerRounding2; //CglMixedIntegerRounding2 * mir = new CglMixedIntegerRounding2(1, true, 1); cg.cgl = mir; cg.id = "Mixed Integer Rounding"; cutGenerators_.push_back(cg); } options_->GetIntegerValue("2mir_cuts",freq,prefix_.c_str()); if (freq) { CuttingMethod cg; cg.frequency = freq; CglTwomir * mir2 = new CglTwomir; cg.cgl = mir2; cg.id = "2-MIR"; cutGenerators_.push_back(cg); } options_->GetIntegerValue("cover_cuts",freq,prefix_.c_str()); if (freq) { CuttingMethod cg; cg.frequency = freq; CglKnapsackCover * cover = new CglKnapsackCover; cg.cgl = cover; cg.id = "Cover"; cutGenerators_.push_back(cg); } options_->GetIntegerValue("clique_cuts",freq,prefix_.c_str()); if (freq) { CuttingMethod cg; cg.frequency = freq; CglClique * clique = new CglClique; clique->setStarCliqueReport(false); clique->setRowCliqueReport(false); clique->setMinViolation(0.1); cg.cgl = clique; cg.id = "Clique"; cutGenerators_.push_back(cg); } options_->GetIntegerValue("flow_cover_cuts",freq,prefix_.c_str()); if (freq) { CuttingMethod cg; cg.frequency = freq; CglFlowCover * flow = new CglFlowCover; cg.cgl = flow; cg.id = "Flow Covers"; cutGenerators_.push_back(cg); } options_->GetIntegerValue("lift_and_project_cuts",freq,prefix_.c_str()); if (freq) { CuttingMethod cg; cg.frequency = freq; CglLandP * landp = new CglLandP; cg.cgl = landp; cg.id = "Lift-and-Project"; cutGenerators_.push_back(cg); } options_->GetIntegerValue("reduce_and_split_cuts",freq,prefix_.c_str()); if (freq) { CuttingMethod cg; cg.frequency = freq; CglRedSplit * rands = new CglRedSplit; cg.cgl = rands; cg.id = "Reduce-and-Split"; cutGenerators_.push_back(cg); } } void BonminSetup::initializeBBB() { continuousSolver_ = nonlinearSolver_; nonlinearSolver_->ignoreFailures(); OsiBabSolver extraStuff(2); continuousSolver_->setAuxiliaryInfo(&extraStuff); intParam_[BabSetupBase::SpecialOption] = 16; if (!options_->GetIntegerValue("number_before_trust",intParam_[BabSetupBase::MinReliability],prefix_.c_str())) { intParam_[BabSetupBase::MinReliability] = 1; std::string o_name = prefix_ + "number_before_trust"; options_->SetIntegerValue(o_name.c_str(),intParam_[BabSetupBase::MinReliability],true,true); } if (!options_->GetIntegerValue("number_strong_branch",intParam_[BabSetupBase::NumberStrong],prefix_.c_str())) { intParam_[BabSetupBase::NumberStrong] = 1000; std::string o_name = prefix_ + "number_strong_branch"; options_->SetIntegerValue(o_name.c_str(),intParam_[BabSetupBase::NumberStrong],true,true); } int varSelection; bool val = options_->GetEnumValue("variable_selection",varSelection,prefix_.c_str()); if (!val){// || varSelection == STRONG_BRANCHING || varSelection == RELIABILITY_BRANCHING ) { std::string o_name = prefix_ + "variable_selection"; options_->SetStringValue(o_name.c_str(), "nlp-strong-branching",true,true); varSelection = NLP_STRONG_BRANCHING; } switch (varSelection) { #ifdef BONMIN_CURVATURE_BRANCHING case CURVATURE_ESTIMATOR: #endif case QP_STRONG_BRANCHING: case LP_STRONG_BRANCHING: case NLP_STRONG_BRANCHING: { continuousSolver_->findIntegersAndSOS(false); setPriorities(); addSos(); Ipopt::SmartPtr strong_solver = NULL; BonChooseVariable * chooseVariable = new BonChooseVariable(*this, nonlinearSolver_); chooseVariable->passInMessageHandler(nonlinearSolver_->messageHandler()); switch (varSelection) { #ifdef BONMIN_CURVATURE_BRANCHING case CURVATURE_ESTIMATOR: strong_solver = new CurvBranchingSolver(nonlinearSolver_); chooseVariable->setTrustStrongForSolution(false); chooseVariable->setTrustStrongForBound(false); //chooseVariable->setOnlyPseudoWhenTrusted(true); chooseVariable->setOnlyPseudoWhenTrusted(false); break; #endif case QP_STRONG_BRANCHING: chooseVariable->setTrustStrongForSolution(false); strong_solver = new QpBranchingSolver(nonlinearSolver_); // The bound returned from the QP can be wrong, since the // objective is not guaranteed to be an underestimator: chooseVariable->setTrustStrongForBound(false); //chooseVariable->setOnlyPseudoWhenTrusted(true); chooseVariable->setOnlyPseudoWhenTrusted(false); break; case LP_STRONG_BRANCHING: chooseVariable->setTrustStrongForSolution(false); strong_solver = new LpBranchingSolver(this); //chooseVariable->setOnlyPseudoWhenTrusted(true); chooseVariable->setOnlyPseudoWhenTrusted(false); break; case NLP_STRONG_BRANCHING: chooseVariable->setTrustStrongForSolution(false); chooseVariable->setTrustStrongForBound(true); chooseVariable->setOnlyPseudoWhenTrusted(false); break; } nonlinearSolver_->SetStrongBrachingSolver(strong_solver); branchingMethod_ = chooseVariable; } break; case OSI_SIMPLE: continuousSolver_->findIntegersAndSOS(false); setPriorities(); addSos(); branchingMethod_ = new OsiChooseVariable(nonlinearSolver_); break; case OSI_STRONG: continuousSolver_->findIntegersAndSOS(false); setPriorities(); addSos(); branchingMethod_ = new OsiChooseStrong(nonlinearSolver_); break; case RANDOM: continuousSolver_->findIntegersAndSOS(false); setPriorities(); addSos(); branchingMethod_ = new BonRandomChoice(nonlinearSolver_); break; //default: //abort(); } if (branchingMethod_ != NULL) { branchingMethod_->setNumberStrong(intParam_[NumberStrong]); } Ipopt::Index doHeuristicDiveFractional = false; options()->GetEnumValue("heuristic_dive_fractional",doHeuristicDiveFractional,prefix_.c_str()); if(doHeuristicDiveFractional){ HeuristicDiveFractional* dive_fractional = new HeuristicDiveFractional(this); HeuristicMethod h; h.heuristic = dive_fractional; h.id = "DiveFractional"; heuristics_.push_back(h); } Ipopt::Index doHeuristicDiveVectorLength = false; options()->GetEnumValue("heuristic_dive_vectorLength",doHeuristicDiveVectorLength,prefix_.c_str()); if(doHeuristicDiveVectorLength){ HeuristicDiveVectorLength* dive_vectorLength = new HeuristicDiveVectorLength(this); HeuristicMethod h; h.heuristic = dive_vectorLength; h.id = "DiveVectorLength"; heuristics_.push_back(h); } Ipopt::Index doHeuristicDiveMIPFractional = false; if(!options()->GetEnumValue("heuristic_dive_MIP_fractional",doHeuristicDiveMIPFractional,prefix_.c_str())){ doHeuristicDiveMIPFractional = true; std::string o_name = prefix_ + "heuristic_dive_MIP_fractional"; options_->SetStringValue(o_name.c_str(), "yes",true,true); } if(doHeuristicDiveMIPFractional){ HeuristicDiveMIPFractional* dive_MIP_fractional = new HeuristicDiveMIPFractional(this); HeuristicMethod h; h.heuristic = dive_MIP_fractional; h.id = "DiveMIPFractional"; heuristics_.push_back(h); } Ipopt::Index doHeuristicDiveMIPVectorLength = false; options()->GetEnumValue("heuristic_dive_MIP_vectorLength",doHeuristicDiveMIPVectorLength,prefix_.c_str()); if(doHeuristicDiveMIPVectorLength){ HeuristicDiveMIPVectorLength* dive_MIP_vectorLength = new HeuristicDiveMIPVectorLength(this); HeuristicMethod h; h.heuristic = dive_MIP_vectorLength; h.id = "DiveMIPVectorLength"; heuristics_.push_back(h); } Ipopt::Index doHeuristicFPump = false; if(!nonlinearSolver_->model()->hasGeneralInteger() && !options()->GetEnumValue("heuristic_feasibility_pump",doHeuristicFPump,prefix_.c_str())){ doHeuristicFPump = true; std::string o_name = prefix_ + "heuristic_feasibility_pump"; options_->SetStringValue(o_name.c_str(), "yes",true,true); } if(doHeuristicFPump){ HeuristicFPump* feasibility_pump = new HeuristicFPump(this); HeuristicMethod h; h.heuristic = feasibility_pump; h.id = "FPump"; heuristics_.push_back(h); } Ipopt::Index doFixAndSolve = false; options()->GetEnumValue("fix_and_solve_heuristic",doFixAndSolve,prefix_.c_str()); if(doFixAndSolve){ FixAndSolveHeuristic* fix_and_solve = new FixAndSolveHeuristic(this); HeuristicMethod h; h.heuristic = fix_and_solve; h.id = "Fix and Solve"; heuristics_.push_back(h); } Ipopt::Index doDummyPump = false; options()->GetEnumValue("dummy_pump_heuristic",doDummyPump,prefix_.c_str()); if(doDummyPump){ DummyPump* fix_and_solve = new DummyPump(this); HeuristicMethod h; h.heuristic = fix_and_solve; h.id = "Dummy pump"; heuristics_.push_back(h); } Ipopt::Index doHeuristicRINS = false; options()->GetEnumValue("heuristic_RINS",doHeuristicRINS,prefix_.c_str()); if(doHeuristicRINS){ HeuristicRINS* rins = new HeuristicRINS(this); HeuristicMethod h; h.heuristic = rins; h.id = "RINS"; heuristics_.push_back(h); } Ipopt::Index doHeuristicLocalBranching = false; options()->GetEnumValue("heuristic_local_branching",doHeuristicLocalBranching,prefix_.c_str()); if(doHeuristicLocalBranching){ HeuristicLocalBranching* local_branching = new HeuristicLocalBranching(this); HeuristicMethod h; h.heuristic = local_branching; h.id = "LocalBranching"; heuristics_.push_back(h); } Ipopt::Index doHeuristicPumpForMinlp = false; options()->GetEnumValue("pump_for_minlp",doHeuristicPumpForMinlp,prefix_.c_str()); if(doHeuristicPumpForMinlp){ PumpForMinlp * pump = new PumpForMinlp(this); HeuristicMethod h; h.heuristic = pump; h.id = "Pump for MINLP"; heuristics_.push_back(h); } Ipopt::Index doHeuristicMilpRounding = false; options()->GetEnumValue("MILP_rounding_heuristic",doHeuristicMilpRounding,prefix_.c_str()); if(doHeuristicMilpRounding){ MilpRounding * round = new MilpRounding(this); HeuristicMethod h; h.heuristic = round; h.id = "MILP Rounding"; heuristics_.push_back(h); } } void BonminSetup::initializeBHyb(bool createContinuousSolver /*= false*/) { double setup_time = -CoinCpuTime(); if (createContinuousSolver) { /* Create linear solver */ continuousSolver_ = new OsiClpSolverInterface; int lpLogLevel; options_->GetIntegerValue("lp_log_level",lpLogLevel,prefix_.c_str()); if(messageHandler_) continuousSolver_->passInMessageHandler(messageHandler_); continuousSolver_->messageHandler()->setLogLevel(lpLogLevel); nonlinearSolver_->forceSolverOutput(intParam_[RootLogLevel]); if(IsValid(linearizer_))//Use user provided linearizer nonlinearSolver_->set_linearizer(linearizer_); nonlinearSolver_->extractLinearRelaxation(*continuousSolver_); nonlinearSolver_->setSolverOutputToDefault(); // say bound dubious, does cuts at solution OsiBabSolver * extraStuff = new OsiBabSolver(3); continuousSolver_->setAuxiliaryInfo(extraStuff); delete extraStuff; } Algorithm algo = getAlgorithm(); std::string prefix = (prefix_ == "bonmin.") ? "" : prefix_; if (algo == B_Hyb) { std::string o_name = prefix_ + "oa_decomposition"; options_->SetStringValue(o_name.c_str(),"no", true, true); o_name = prefix_ + "pump_for_minlp"; options_->SetStringValue(o_name.c_str(),"yes", true, true); o_name = prefix + "pump_for_minlp.time_limit"; options_->SetNumericValue(o_name.c_str(),10, true, true); o_name = prefix + "pump_for_minlp.solution_limit"; options_->SetIntegerValue(o_name.c_str(),3, true, true); } else if (algo == B_OA) { std::string o_name = prefix_ + "oa_decomposition"; options_->SetStringValue(o_name.c_str(),"yes", true, true); o_name = prefix + "oa_decomposition.time_limit"; options_->SetNumericValue(o_name.c_str(),DBL_MAX, true, true); o_name = prefix_ + "pump_for_minlp"; options_->SetStringValue(o_name.c_str(),"no", true, true); o_name = prefix + "nlp_solve_frequency"; options_->SetIntegerValue(o_name.c_str(), 0, true, true); o_name = prefix + "bb_log_level"; options_->SetIntegerValue(o_name.c_str(), 0, true, true); } else if (algo == B_IFP) { std::string o_name = prefix_ + "oa_decomposition"; options_->SetStringValue(o_name.c_str(),"no", true, true); o_name = prefix_ + "pump_for_minlp"; options_->SetStringValue(o_name.c_str(),"yes", true, true); o_name = prefix + "pump_for_minlp.time_limit"; options_->SetNumericValue(o_name.c_str(),DBL_MAX, true, true); o_name = prefix_ + "nlp_solve_frequency"; options_->SetIntegerValue(o_name.c_str(), 0, true, true); o_name = prefix_ + "fp_pass_infeasible"; options_->SetStringValue(o_name.c_str(), "yes", true, true); //o_name = prefix_ + "cutoff_decr"; //options_->SetNumericValue(o_name.c_str(), 1e-02, true, true); intParam_[BabLogLevel] = 0; } else if (algo==B_QG) { std::string o_name = prefix_ + "oa_decomposition"; options_->SetStringValue(o_name.c_str(),"no", true, true); o_name = prefix_ + "pump_for_minlp"; options_->SetStringValue(o_name.c_str(),"no", true, true); o_name = prefix_ + "nlp_solve_frequency"; options_->SetIntegerValue(o_name.c_str(), 0, true, true); } else if (algo==B_Ecp) { std::string o_name = prefix_ + "oa_decomposition"; options_->SetStringValue(o_name.c_str(),"no", true, true); o_name = prefix_ + "pump_for_minlp"; options_->SetStringValue(o_name.c_str(),"no", true, true); o_name = prefix_ + "nlp_solve_frequency"; options_->SetIntegerValue(o_name.c_str(), 0, true, true); o_name = prefix_ + "filmint_ecp_cuts"; options_->SetIntegerValue(o_name.c_str(), 1, true, true); } //#define GREAT_STUFF_FOR_ANDREAS #ifdef GREAT_STUFF_FOR_ANDREAS printf("ToDo: Clean me up in Bab::branchAndBound\n"); OsiCuts cuts; nonlinearSolver_->getOuterApproximation(cuts, true, NULL, true); continuousSolver_->applyCuts(cuts); #endif int varSelection; options_->GetEnumValue("variable_selection",varSelection,prefix_.c_str()); if (varSelection > RELIABILITY_BRANCHING) { switch (varSelection){ case OSI_SIMPLE: continuousSolver_->findIntegersAndSOS(false); setPriorities(); addSos(); branchingMethod_ = new OsiChooseVariable(nonlinearSolver_); break; case OSI_STRONG: { continuousSolver_->findIntegersAndSOS(false); setPriorities(); addSos(); OsiChooseStrong * chooser = new OsiChooseStrong(nonlinearSolver_); branchingMethod_ = chooser; chooser->setNumberStrong(intParam_[NumberStrong]); chooser->setTrustStrongForSolution(false); chooser->setNumberBeforeTrusted(intParam_[MinReliability]); } break; default: std::cout<<"Variable selection stragey not available with oa branch-and-cut."<GetIntegerValue("nlp_solve_frequency",ival,prefix_.c_str()); if (ival != 0) { CuttingMethod cg; cg.frequency = ival; OaNlpOptim * nlpsol = new OaNlpOptim(*this); nlpsol->passInMessageHandler(messageHandler_); cg.cgl = nlpsol; cg.id="NLP solution based oa cuts"; cutGenerators_.push_back(cg); } options_->GetIntegerValue("filmint_ecp_cuts",ival, prefix_.c_str()); if (ival != 0) { CuttingMethod cg; cg.frequency = ival; EcpCuts * ecp = new EcpCuts(*this); ecp->passInMessageHandler(messageHandler_); cg.cgl = ecp; cg.id = "Ecp cuts"; cutGenerators_.push_back(cg); } if (algo == B_Hyb || algo == B_Ecp) addMilpCutGenerators(); int doFp; options_->GetEnumValue("pump_for_minlp",doFp,prefix_.c_str()); if (doFp) { CuttingMethod cg; cg.frequency = -99; MinlpFeasPump * oa = new MinlpFeasPump(*this); oa->passInMessageHandler(messageHandler_); cg.cgl = oa; cg.id = "Feasibility Pump for MINLP."; cutGenerators_.push_back(cg); } int doOa; options_->GetEnumValue("oa_decomposition",doOa,prefix_.c_str()); if (doOa) { CuttingMethod cg; cg.frequency = -99; OACutGenerator2 * oa = new OACutGenerator2(*this); oa->passInMessageHandler(messageHandler_); cg.cgl = oa; cg.id = "Outer Approximation decomposition."; cutGenerators_.push_back(cg); } { CuttingMethod cg; cg.frequency = 1; OaFeasibilityChecker * oa = new OaFeasibilityChecker(*this); oa->passInMessageHandler(messageHandler_); oa->setReassignLpSolver(false); cg.cgl = oa; cg.id = "Outer Approximation feasibility check."; cg.atSolution = false; cg.normal = true; cg.always = true; cutGenerators_.push_back(cg); } { CuttingMethod cg; cg.frequency = 1; OaFeasibilityChecker * oa = new OaFeasibilityChecker(*this); oa->passInMessageHandler(messageHandler_); oa->setReassignLpSolver(true); cg.cgl = oa; cg.id = "Outer Approximation strong branching solution check."; cg.atSolution = true; cg.normal = false; cutGenerators_.push_back(cg); } DummyHeuristic * oaHeu = new DummyHeuristic; oaHeu->setNlp(nonlinearSolver_); HeuristicMethod h; h.heuristic = oaHeu; h.id = "nonlinear program"; heuristics_.push_back(h); Ipopt::Index doHeuristicRINS = false; options()->GetEnumValue("heuristic_RINS",doHeuristicRINS,prefix_.c_str()); if(doHeuristicRINS){ HeuristicRINS* rins = new HeuristicRINS(this); HeuristicMethod h; h.heuristic = rins; h.id = "RINS"; heuristics_.push_back(h); } Ipopt::Index doHeuristicLocalBranching = false; options()->GetEnumValue("heuristic_local_branching",doHeuristicLocalBranching,prefix_.c_str()); if(doHeuristicLocalBranching){ HeuristicLocalBranching* local_branching = new HeuristicLocalBranching(this); HeuristicMethod h; h.heuristic = local_branching; h.id = "LocalBranching"; heuristics_.push_back(h); } Ipopt::Index doHeuristicFPump = false; options()->GetEnumValue("heuristic_feasibility_pump",doHeuristicFPump,prefix_.c_str()); if(doHeuristicFPump){ HeuristicFPump* feasibility_pump = new HeuristicFPump(this); HeuristicMethod h; h.heuristic = feasibility_pump; h.id = "FPump"; heuristics_.push_back(h); } Ipopt::Index doHeuristicDiveFractional = false; options()->GetEnumValue("heuristic_dive_fractional",doHeuristicDiveFractional,prefix_.c_str()); if(doHeuristicDiveFractional){ HeuristicDiveFractional* dive_fractional = new HeuristicDiveFractional(this); HeuristicMethod h; h.heuristic = dive_fractional; h.id = "DiveFractional"; heuristics_.push_back(h); } Ipopt::Index doHeuristicDiveVectorLength = false; options()->GetEnumValue("heuristic_dive_vectorLength",doHeuristicDiveVectorLength,prefix_.c_str()); if(doHeuristicDiveVectorLength){ HeuristicDiveVectorLength* dive_vectorLength = new HeuristicDiveVectorLength(this); HeuristicMethod h; h.heuristic = dive_vectorLength; h.id = "DiveVectorLength"; heuristics_.push_back(h); } Ipopt::Index doHeuristicDiveMIPFractional = false; options()->GetEnumValue("heuristic_dive_MIP_fractional",doHeuristicDiveMIPFractional,prefix_.c_str()); if(doHeuristicDiveMIPFractional){ HeuristicDiveMIPFractional* dive_MIP_fractional = new HeuristicDiveMIPFractional(this); HeuristicMethod h; h.heuristic = dive_MIP_fractional; h.id = "DiveMIPFractional"; heuristics_.push_back(h); } Ipopt::Index doHeuristicDiveMIPVectorLength = false; options()->GetEnumValue("heuristic_dive_MIP_vectorLength",doHeuristicDiveMIPVectorLength,prefix_.c_str()); if(doHeuristicDiveMIPVectorLength){ HeuristicDiveMIPVectorLength* dive_MIP_vectorLength = new HeuristicDiveMIPVectorLength(this); HeuristicMethod h; h.heuristic = dive_MIP_vectorLength; h.id = "DiveMIPVectorLength"; heuristics_.push_back(h); } #if 0 if(true){ InnerApproximation * inner = new InnerApproximation(this); HeuristicMethod h; h.heuristic = inner; h.id = "InnerApproximation"; heuristics_.push_back(h); } #endif setup_time += CoinCpuTime(); doubleParam_[MaxTime] -= setup_time; } Algorithm BonminSetup::getAlgorithm() { if (algo_ != Dummy) return algo_; if (IsValid(options_)) { int ival; options_->GetEnumValue("algorithm", ival,prefix_.c_str()); return Algorithm(ival); } else return Algorithm(3); } }/* end namespace Bonmin*/ Bonmin-releases-1.8.9/Bonmin/src/Algorithms/BonBonminSetup.hpp000066400000000000000000000071061436575401300243250ustar00rootroot00000000000000// (C) Copyright International Business Machines Corporation 2007 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // Pierre Bonami, International Business Machines Corporation // // Date : 04/13/2007 #ifndef BonminSetup_H #define BonminSetup_H #include "BonBabSetupBase.hpp" namespace Bonmin { /** Type of algorithms which can be used.*/ enum Algorithm{ Dummy=-1/** Dummy value before initialization.*/, B_BB=0/** Bonmin's Branch-and-bound.*/, B_OA=1/** Bonmin's Outer Approximation Decomposition.*/, B_QG=2/** Bonmin's Quesada & Grossmann branch-and-cut.*/, B_Hyb=3/** Bonmin's hybrid outer approximation.*/, B_Ecp=4/** Bonmin's implemantation of ecp cuts based branch-and-cut a la FilMINT.*/, B_IFP=5/** Bonmin's implemantation of iterated feasibility pump for MINLP.*/ }; /* Bonmin algorithm setup. */ class BonminSetup : public BabSetupBase { public: /** Default constructor. */ BonminSetup(const CoinMessageHandler * handler = NULL); /** Copy constructor. */ BonminSetup(const BonminSetup & other); /** Copy but uses an other nlp.*/ BonminSetup(const BonminSetup &setup, OsiTMINLPInterface &nlp); /** Copy but uses another nlp and algorithm.*/ BonminSetup(const BonminSetup &setup, OsiTMINLPInterface &nlp, const std::string & prefix); /** virtual copy constructor. */ virtual BabSetupBase * clone() const { return new BonminSetup(*this); } /** Make a copy with solver replace by one passed .*/ // virtual BabSetupBase *clone(OsiTMINLPInterface&nlp)const{ // return new BonminSetup(*this, nlp); // } /** Make a copy with solver replace by one passed .*/ BonminSetup *clone(OsiTMINLPInterface&nlp)const{ return new BonminSetup(*this, nlp); } /** Make a copy but take options with different prefix.*/ BonminSetup *clone(OsiTMINLPInterface &nlp, const std::string & prefix)const{ return new BonminSetup(*this, nlp, prefix); } virtual ~BonminSetup() {} /** @name Methods to instantiate: Registering and retrieving options and initializing everything. */ /** @{ */ /** Register all the options for this algorithm instance.*/ virtual void registerOptions(); /** Setup the defaults options for this algorithm. */ virtual void setBabDefaultOptions(Ipopt::SmartPtr roptions) {} /** @} */ /** Register all bonmin type executable options.*/ static void registerAllOptions(Ipopt::SmartPtr roptions); /** Initialize, read options and create appropriate bonmin setup.*/ void initialize(Ipopt::SmartPtr tminlp, bool createContinuousSolver = true); /** Initialize, read options and create appropriate bonmin setup.*/ void initialize(const OsiTMINLPInterface& nlpSi, bool createContinuousSolver = true); /** Get the algorithm used.*/ Bonmin::Algorithm getAlgorithm(); void addCutGenerator(CuttingMethod & cg){ BabSetupBase::addCutGenerator(cg); } protected: /** Register standard MILP cut generators. */ static void registerMilpCutGenerators(Ipopt::SmartPtr roptions); /** Add milp cut generators according to options.*/ void addMilpCutGenerators(); /** Initialize a plain branch-and-bound.*/ void initializeBBB(); /** Initialize a branch-and-cut with some OA.*/ void initializeBHyb(bool createContinuousSolver = false); private: Algorithm algo_; }; }/** end namespace Bonmin*/ #endif Bonmin-releases-1.8.9/Bonmin/src/Algorithms/BonCbcLpStrategy.cpp000066400000000000000000000103051436575401300245560ustar00rootroot00000000000000// (C) Copyright Carnegie Mellon University 2006 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // Pierre Bonami, Carnegie Mellon University, // // Date : 03/15/2006 #include "BonCbcLpStrategy.hpp" // Cut generators #include "CglGomory.hpp" #include "CglProbing.hpp" #include "CglKnapsackCover.hpp" #include "CglOddHole.hpp" #include "CglClique.hpp" #include "CglFlowCover.hpp" #include "CglMixedIntegerRounding2.hpp" #include "CglTwomir.hpp" #include "CglPreProcess.hpp" #include "CbcCutGenerator.hpp" // Node selection #include "CbcCompareActual.hpp" #include "CbcBranchActual.hpp" namespace Bonmin { CbcStrategyChooseCuts::CbcStrategyChooseCuts(): CbcStrategyDefault(), genFlag_(63) { CoinFillN(gen_freqs_,6,-99); } CbcStrategyChooseCuts::CbcStrategyChooseCuts(const CbcStrategyChooseCuts &other): CbcStrategyDefault(other), genFlag_(other.genFlag_) { CoinCopyN(other.gen_freqs_,6,gen_freqs_); } CbcStrategyChooseCuts::CbcStrategyChooseCuts(BabSetupBase &s, const std::string &prefix): CbcStrategyDefault(), genFlag_(0) { setup(s, prefix); } void CbcStrategyChooseCuts::setup(BabSetupBase &s, const std::string &prefix){ s.options()->GetIntegerValue("number_strong_branch", numberStrong_, prefix); s.options()->GetIntegerValue("number_before_trust", numberBeforeTrust_, prefix); int k = 0; bool set = s.options()->GetIntegerValue("probing_cuts", gen_freqs_[k], prefix); if(set==0) gen_freqs_[k] = -99; k++; set = s.options()->GetIntegerValue("Gomory_cuts", gen_freqs_[k], prefix); if(set==0) gen_freqs_[k] = -99; k++; set = s.options()->GetIntegerValue("cover_cuts", gen_freqs_[k], prefix); if(set==0) gen_freqs_[k] = -99; k++; set = s.options()->GetIntegerValue("clique_cuts", gen_freqs_[k], prefix); if(set==0) gen_freqs_[k] = -99; k++; set = s.options()->GetIntegerValue("flow_cover_cuts", gen_freqs_[k], prefix); if(set==0) gen_freqs_[k] = -99; k++; set = s.options()->GetIntegerValue("mir_cuts", gen_freqs_[k], prefix); if(set==0) gen_freqs_[k] = -99; k++; } template bool has_cg(CbcModel &model, const X& gen){ int numberGenerators = model.numberCutGenerators(); for (int iGenerator=0;iGeneratorgenerator(); X * cgl = dynamic_cast(generator); if (cgl) { return true; } } return false; } #define ADD_CG(model, gen, setting, name) model.addCutGenerator(&gen,setting, name) void CbcStrategyChooseCuts::setupCutGenerators(CbcModel &model){ CglProbing probing; probing.setUsingObjective(true); probing.setMaxPass(1); probing.setMaxPassRoot(1); // Number of unsatisfied variables to look at probing.setMaxProbe(10); // How far to follow the consequences probing.setMaxLook(10); // Only look at rows with fewer than this number of elements probing.setMaxElements(200); probing.setMaxElementsRoot(300); //generator1.setRowCuts(3); CglGomory miG; // try larger limit miG.setLimit(300); CglKnapsackCover cover; CglClique clique; clique.setStarCliqueReport(false); clique.setRowCliqueReport(false); CglMixedIntegerRounding2 mixedGen; CglFlowCover flowGen; int k = 0; if(gen_freqs_[k]!= 0 && !has_cg(model, probing)){ ADD_CG(model, probing, gen_freqs_[k], "Probing"); } k++; if(gen_freqs_[k]!= 0 && !has_cg(model, miG)){ ADD_CG(model, miG, gen_freqs_[k], "Gomory"); } k++; if(gen_freqs_[k] != 0 && !has_cg(model, cover)){ ADD_CG(model, cover, gen_freqs_[k], "Knapsack"); } k++; if(gen_freqs_[k] != 0 && !has_cg(model, clique)){ ADD_CG(model, clique, gen_freqs_[k], "Clique"); } k++; if(gen_freqs_[k] != 0 && !has_cg(model, flowGen)){ ADD_CG(model, flowGen, gen_freqs_[k], "FlowCover"); } k++; if(gen_freqs_[k] != 0 && !has_cg(model, mixedGen)){ ADD_CG(model, mixedGen, gen_freqs_[k], "MixedIntegerRounding2"); } } } Bonmin-releases-1.8.9/Bonmin/src/Algorithms/BonCbcLpStrategy.hpp000066400000000000000000000023621436575401300245670ustar00rootroot00000000000000// (C) Copyright Carnegie Mellon University 2006 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // Pierre Bonami, Carnegie Mellon University, // // Date : 03/15/2006 #ifndef CbcOaStrategy_HPP #define CbcOaStrategy_HPP #include "CbcStrategy.hpp" #include #include "BonBabSetupBase.hpp" namespace Bonmin { /** A class to setup default strategy for Cbc specifying which cut generators to use.*/ class CbcStrategyChooseCuts : public CbcStrategyDefault { public: /** Default constructor.*/ CbcStrategyChooseCuts(); /** Constructor with a setup. */ CbcStrategyChooseCuts(BabSetupBase &s, const std::string & prefix); /** Copy constructor.*/ CbcStrategyChooseCuts(const CbcStrategyChooseCuts &other); /** Virtual copy constructor.*/ CbcStrategy * clone() const{ return new CbcStrategyChooseCuts(*this); } /** Setup strategy.*/ void setup(BabSetupBase &s, const std::string &prefix); /// Setup cut generators virtual void setupCutGenerators(CbcModel & model); private: /** Generators frequencies.*/ int gen_freqs_[6]; /** Flag to say which cut generators to use.*/ int genFlag_; }; } #endif Bonmin-releases-1.8.9/Bonmin/src/Algorithms/BonSolverHelp.cpp000066400000000000000000000154371436575401300241460ustar00rootroot00000000000000// (C) Copyright International Business Machines (IBM) 2006 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // P. Bonami, International Business Machines // // Date : 12/07/2006 // Code separated from BonOaDecBase to try to clarify OAs #include #include "BonSolverHelp.hpp" #include "OsiSolverInterface.hpp" #include "OsiBranchingObject.hpp" #include "OsiCuts.hpp" #include "CoinWarmStartBasis.hpp" namespace Bonmin { /// Check for integer feasibility of a solution return 1 if it is bool integerFeasible(OsiSolverInterface & si, const OsiBranchingInformation & info, double integer_tolerance, OsiObject ** objects, int nObjects) { if (objects) { int dummy; for (int i = 0 ; i < nObjects ; i++) { double infeasibility = objects[i]->infeasibility(&info, dummy); if (infeasibility > 1000*integer_tolerance) return false; } } else { const double * sol = info.solution_; int numcols = si.getNumCols(); for (int i = 0 ; i < numcols ; i++) { if (si.isInteger(i)) { if (fabs(sol[i] - floor(sol[i] + 0.5)) > integer_tolerance) { return false; } } } } return true; } /** Fix integer variables in si to their values in colsol. */ void fixIntegers(OsiSolverInterface & si, const OsiBranchingInformation & info, double integer_tolerance, OsiObject ** objects, int nObjects) { if (objects) { for (int i = 0 ; i < nObjects ; i++) { objects[i]->feasibleRegion(&si, &info); } } else { const double * colsol = info.solution_; for (int i = 0; i < info.numberColumns_; i++) { if (si.isInteger(i)) { double value = colsol[i]; #ifndef NDEBUG if (fabs(value - floor(value+0.5)) > integer_tolerance) { std::stringstream stream; stream<<"Error not integer valued solution"< 1e10) { std::stringstream stream; stream<<"Can not fix variable in nlp because it has too big a value ("<getColLower()[i], // nlp_->getColUpper()[i]); std::cout<<(int)value; #endif si.setColLower(i,value); si.setColUpper(i,value); } } #ifdef OA_DEBUG std::cout<(objects[i]); int colNumber = obj->columnNumber(); si.setColLower(colNumber, si.getColLower()[colNumber] - integer_tolerance); si.setColUpper(colNumber, si.getColUpper()[colNumber] + integer_tolerance); } } else { for (int i = 0; i < info.numberColumns_; i++) { if (si.isInteger(i)) { const int &colNumber = i; si.setColLower(colNumber, si.getColLower()[colNumber] - integer_tolerance); si.setColUpper(colNumber, si.getColUpper()[colNumber] + integer_tolerance); } } } } bool refixIntegers(OsiSolverInterface & si, const OsiBranchingInformation & info, double integer_tolerance, OsiObject ** objects, int nObjects) { if(!si.isProvenOptimal()) return false; if (objects) { for (int i = 0 ; i < nObjects ; i++) { OsiSimpleInteger * obj = dynamic_cast(objects[i]); int colNumber = obj->columnNumber(); si.setColLower(colNumber, si.getColLower()[colNumber] - integer_tolerance); si.setColUpper(colNumber, si.getColUpper()[colNumber] + integer_tolerance); } } else { for (int i = 0; i < info.numberColumns_; i++) { if (si.isInteger(i)) { const int &colNumber = i; si.setColLower(colNumber, si.getColLower()[colNumber] - integer_tolerance); si.setColUpper(colNumber, si.getColUpper()[colNumber] + integer_tolerance); } } } return true; } /** Install cuts in solver. */ void installCuts(OsiSolverInterface &si, const OsiCuts& cs, int numberCuts){ int numberCutsBefore = cs.sizeRowCuts() - numberCuts; CoinWarmStartBasis * basis = dynamic_cast(si.getWarmStart()) ; assert(basis != NULL); // make sure not volume int numrows = si.getNumRows(); basis->resize(numrows + numberCuts,si.getNumCols()); for (int i = 0 ; i < numberCuts ; i++) { basis->setArtifStatus(numrows + i, CoinWarmStartBasis::basic) ; } const OsiRowCut ** addCuts = new const OsiRowCut * [numberCuts] ; for (int i = 0 ; i < numberCuts ; i++) { addCuts[i] = &cs.rowCut(i + numberCutsBefore) ; } si.applyRowCuts(numberCuts,addCuts) ; delete [] addCuts ; if (si.setWarmStart(basis) == false) { delete basis; throw CoinError("Fail setWarmStart() after cut installation.", "generateCuts","OACutGenerator2") ; } delete basis; } /** Check if two solutions are the same on integer variables. */ bool isDifferentOnIntegers(OsiSolverInterface &si, OsiObject ** objects, int nObjects, double integer_tolerance, const double * colsol, const double *otherSol) { if (objects) { for (int i = 0 ; i < nObjects ; i++) { OsiObject * obj = objects[i]; int colnum = obj->columnNumber(); if (colnum >= 0) {//Variable branching object if (fabs(otherSol[colnum] - colsol[colnum]) > integer_tolerance) { return true; } } else {//It is a sos branching object OsiSOS * sos = dynamic_cast(obj); assert(sos); const int * members = sos->members(); int end = sos->numberMembers(); for (int k = 0 ; k < end ; k++) { if (fabs(otherSol[members[k]] - colsol[members[k]]) > integer_tolerance) { return true; } } } } } else { int numcols = si.getNumCols(); for (int i = 0; i < numcols ; i++) { if (si.isInteger(i) && fabs(otherSol[i] - colsol[i])>integer_tolerance) return true; } } return false; } } Bonmin-releases-1.8.9/Bonmin/src/Algorithms/BonSolverHelp.hpp000066400000000000000000000035041436575401300241430ustar00rootroot00000000000000// (C) Copyright International Business Machines (IBM) 2006 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // P. Bonami, International Business Machines // // Date : 12/07/2006 // Code separated from BonOaDecBase to try to clarify OAs // A number of utility to manipulate models used in OA and FP #ifndef BonSolverHelp_H #define BonSolverHelp_H class OsiSolverInterface; class OsiBranchingInformation; class OsiObject; class OsiCuts; namespace Bonmin { /** Check for integer feasibility of a solution return true if it is feasible.*/ bool integerFeasible(OsiSolverInterface & si, const OsiBranchingInformation & info, double integer_tolerance, OsiObject ** objects = 0, int nObjects = -1); /** Fix integer variables in si to their values in colsol. \remark colsol is assumed to be integer on the integer constrained variables. */ void fixIntegers(OsiSolverInterface & si, const OsiBranchingInformation & info, double integer_tolerance, OsiObject ** objects = 0, int nObjects = -1); /** Relax integer variables in si. */ void relaxIntegers(OsiSolverInterface & si, const OsiBranchingInformation & info, double integer_tolerance, OsiObject ** objects = 0, int nObjects = -1); /** Check if two solutions are the same on integer variables. */ bool isDifferentOnIntegers(OsiSolverInterface &si, OsiObject ** objects, int nObjects, double integer_tolerance, const double * colsol, const double * other); /** Install cuts in solver. */ void installCuts(OsiSolverInterface &si, const OsiCuts& cs, int numberCuts); } #endif Bonmin-releases-1.8.9/Bonmin/src/Algorithms/BonSubMipSolver.cpp000066400000000000000000000476241436575401300244600ustar00rootroot00000000000000// (C) Copyright International Business Machines (IBM) 2006 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // P. Bonami, International Business Machines // // Date : 12/07/2006 // Code separated from BonOaDecBase to try to clarify OAs #include "BonSubMipSolver.hpp" #include "BonminConfig.h" #include "CbcModel.hpp" #include "CbcStrategy.hpp" #include "OsiAuxInfo.hpp" #include "OsiClpSolverInterface.hpp" #include #ifdef COIN_HAS_CPX #include "OsiCpxSolverInterface.hpp" #include "cplex.h" void throw_error(const std::string &s, const std::string &f, const std::string &func){ throw CoinError(s,f,func); } #define CHECK_CPX_STAT(a,b) if(b) throw_error("Error in CPLEX call",__FILE__,a); #endif #include "BonRegisteredOptions.hpp" #include "BonBabSetupBase.hpp" #include "BonCbcLpStrategy.hpp" namespace Bonmin { /** Constructor */ SubMipSolver::SubMipSolver(BabSetupBase &b, const std::string &prefix): clp_(NULL), cpx_(NULL), lowBound_(-DBL_MAX), optimal_(false), integerSolution_(NULL), strategy_(NULL), ownClp_(false) { int logLevel; b.options()->GetIntegerValue("milp_log_level", logLevel, prefix); int ivalue; b.options()->GetEnumValue("milp_solver",ivalue,prefix); if (ivalue <= 0) {//uses cbc strategy_ = new CbcStrategyDefault; clp_ = new OsiClpSolverInterface; ownClp_ = true; clp_->messageHandler()->setLogLevel(logLevel); } else if (ivalue == 1) { CbcStrategyChooseCuts strategy(b, prefix); strategy_ = new CbcStrategyChooseCuts(b, prefix); clp_ = new OsiClpSolverInterface; ownClp_ = true; clp_->messageHandler()->setLogLevel(logLevel); } else if (ivalue == 2) { #ifdef COIN_HAS_CPX OsiCpxSolverInterface * cpxSolver = new OsiCpxSolverInterface; #if 1 b.options()->GetIntegerValue("number_cpx_threads",ivalue,prefix); CPXsetintparam(cpxSolver->getEnvironmentPtr(), CPX_PARAM_THREADS, ivalue); b.options()->GetIntegerValue("cpx_parallel_strategy",ivalue,prefix); CPXsetintparam(cpxSolver->getEnvironmentPtr(), CPX_PARAM_PARALLELMODE, ivalue); #endif cpx_ = cpxSolver; cpx_->messageHandler()->setLogLevel(logLevel); #else std::cerr << "You have set an option to use CPLEX as the milp\n" << "subsolver in oa decomposition. However, apparently\n" << "CPLEX is not configured to be used in bonmin.\n" << "See the manual for configuring CPLEX\n"; throw -1; #endif } b.options()->GetEnumValue("milp_strategy",ivalue,prefix); if(ivalue == 0){ milp_strat_ = FindGoodSolution; } else { milp_strat_ = GetOptimum; } b.options()->GetNumericValue("allowable_fraction_gap", gap_tol_, prefix); } SubMipSolver::SubMipSolver(const SubMipSolver ©): clp_(NULL), cpx_(NULL), lowBound_(-DBL_MAX), optimal_(false), integerSolution_(NULL), strategy_(NULL), milp_strat_(copy.milp_strat_), gap_tol_(copy.gap_tol_), ownClp_(copy.ownClp_) { #ifdef COIN_HAS_CPX if(copy.cpx_ != NULL){ cpx_ = new OsiCpxSolverInterface(*copy.cpx_); int ival; CPXgetintparam(copy.cpx_->getEnvironmentPtr(), CPX_PARAM_THREADS, &ival); CPXsetintparam(cpx_->getEnvironmentPtr(), CPX_PARAM_THREADS, ival); CPXgetintparam(copy.cpx_->getEnvironmentPtr(), CPX_PARAM_PARALLELMODE, &ival); CPXsetintparam(cpx_->getEnvironmentPtr(), CPX_PARAM_PARALLELMODE, ival); } #endif if(copy.clp_ != NULL){ if(ownClp_) clp_ = new OsiClpSolverInterface(*copy.clp_); else clp_ = copy.clp_; } if(copy.strategy_){ strategy_ = dynamic_cast(copy.strategy_->clone()); assert(strategy_); } } SubMipSolver::~SubMipSolver() { if (strategy_) delete strategy_; if (integerSolution_) delete [] integerSolution_; #ifdef COIN_HAS_CPX if(cpx_) delete cpx_; #endif if(ownClp_) delete clp_; } /** Assign lp solver. */ void SubMipSolver::setLpSolver(OsiSolverInterface * lp) { #ifdef COIN_HAS_CPX if(cpx_){ clp_ = NULL; cpx_->loadProblem(*lp->getMatrixByCol(), lp->getColLower(), lp->getColUpper(), lp->getObjCoefficients(), lp->getRowLower(), lp->getRowUpper()); int ncols = lp->getNumCols(); for(int i = 0 ; i < ncols ; i++){ if(lp->isInteger(i) || lp->isBinary(i)) cpx_->setInteger(i); else cpx_->setContinuous(i); } } else { #endif if(ownClp_) delete clp_; ownClp_ = false; clp_ = (lp == NULL) ? NULL : dynamic_cast(lp); assert(clp_); #ifdef COIN_HAS_CPX } #endif lowBound_ = -COIN_DBL_MAX; optimal_ = false; if (integerSolution_) { delete [] integerSolution_; integerSolution_ = NULL; } } OsiSolverInterface * SubMipSolver::solver(){ if(clp_ != NULL) return clp_; else #ifdef COIN_HAS_CPX return cpx_; #else return NULL; #endif } void SubMipSolver::find_good_sol(double cutoff, int loglevel, double max_time){ if(clp_){ CbcStrategyDefault * strat_default = NULL; if (!strategy_){ strat_default = new CbcStrategyDefault(1,5,5, loglevel); strat_default->setupPreProcessing(); strategy_ = strat_default; } OsiBabSolver empty; CbcModel cbc(*clp_); cbc.solver()->setAuxiliaryInfo(&empty); //Change Cbc messages prefixes strcpy(cbc.messagesPointer()->source_,"OCbc"); cbc.setLogLevel(loglevel); cbc.solver()->messageHandler()->setLogLevel(0); clp_->resolve(); cbc.setStrategy(*strategy_); cbc.setLogLevel(loglevel); cbc.solver()->messageHandler()->setLogLevel(0); cbc.setMaximumSeconds(max_time); cbc.setMaximumSolutions(1); cbc.setCutoff(cutoff); cbc.branchAndBound(); lowBound_ = cbc.getBestPossibleObjValue(); if (cbc.isProvenOptimal() || cbc.isProvenInfeasible()) optimal_ = true; else optimal_ = false; if (cbc.getSolutionCount()) { if (!integerSolution_) integerSolution_ = new double[clp_->getNumCols()]; CoinCopyN(cbc.bestSolution(), clp_->getNumCols(), integerSolution_); } else if (integerSolution_) { delete [] integerSolution_; integerSolution_ = NULL; } nodeCount_ = cbc.getNodeCount(); iterationCount_ = cbc.getIterationCount(); if(strat_default != NULL){ delete strat_default; strategy_ = NULL; } } else if (cpx_){ #ifndef COIN_HAS_CPX throw CoinError("Unsupported solver, for local searches you should use clp or cplex", "performLocalSearch", "OaDecompositionBase::SubMipSolver"); #else cpx_->messageHandler()->setLogLevel(loglevel); cpx_->switchToMIP(); CPXENVptr env = cpx_->getEnvironmentPtr(); CPXLPptr cpxlp = cpx_->getLpPtr(OsiCpxSolverInterface::KEEPCACHED_ALL); CPXsetdblparam(env, CPX_PARAM_TILIM, max_time); CPXsetintparam(env, CPX_PARAM_CLOCKTYPE, 1); CPXsetdblparam(env, CPX_PARAM_EPINT, 1e-08); CPXsetdblparam(env, CPX_PARAM_CUTUP, cutoff); CPXsetdblparam(env, CPX_PARAM_EPGAP, gap_tol_); double start_time = CoinCpuTime(); CPXsetintparam(env,CPX_PARAM_INTSOLLIM, 10); CPXsetintparam(env,CPX_PARAM_NODELIM, 1000); nodeCount_ = 0; iterationCount_ = 0; int status = CPXmipopt(env,cpxlp); CHECK_CPX_STAT("mipopt",status) status = CPXgetbestobjval(env, cpxlp, &lowBound_); CHECK_CPX_STAT("bestobjvalue",status) int stat = CPXgetstat( env, cpxlp); optimal_ = (stat == CPXMIP_INFEASIBLE) || (stat == CPXMIP_OPTIMAL) || (stat == CPXMIP_OPTIMAL_TOL) || (stat == CPXMIP_INForUNBD) ; nodeCount_ = CPXgetnodecnt(env , cpxlp); iterationCount_ = CPXgetmipitcnt(env , cpxlp); int type; status = CPXsolninfo(env, cpxlp, NULL, &type, NULL, NULL); CHECK_CPX_STAT("solninfo", status); while(!optimal_ && type == CPX_NO_SOLN && stat != CPXMIP_SOL_LIM && stat != CPXMIP_TIME_LIM_INFEAS && stat != CPXMIP_TIME_LIM_FEAS && (CoinCpuTime() - start_time) <= max_time){ CPXsetintparam(env, CPX_PARAM_INTSOLLIM, 1); CPXsetdblparam(env, CPX_PARAM_TILIM, max_time - CoinCpuTime() + start_time); CPXsetintparam(env,CPX_PARAM_NODELIM, 2100000000); status = CPXmipopt(env,cpxlp); CHECK_CPX_STAT("mipopt",status) stat = CPXgetstat( env, cpxlp); optimal_ = (stat == CPXMIP_INFEASIBLE) || (stat == CPXMIP_OPTIMAL) || (stat == CPXMIP_OPTIMAL_TOL) || (stat == CPXMIP_INForUNBD) ; nodeCount_ = CPXgetnodecnt(env , cpxlp); iterationCount_ = CPXgetmipitcnt(env , cpxlp); } bool infeasible = (stat == CPXMIP_INFEASIBLE) || (stat == CPXMIP_ABORT_INFEAS) || (stat == CPXMIP_TIME_LIM_INFEAS) || (stat == CPXMIP_NODE_LIM_INFEAS) || (stat == CPXMIP_FAIL_INFEAS) || (stat == CPXMIP_MEM_LIM_INFEAS) || (stat == CPXMIP_INForUNBD); status = CPXgetbestobjval(env, cpxlp, &lowBound_); CHECK_CPX_STAT("getbestobjval",status) if(!infeasible){ nodeCount_ += CPXgetnodecnt(env, cpxlp); //iterationCount_ += CPXgetitcnt(env, cpxlp); if(!integerSolution_){ integerSolution_ = new double[cpx_->getNumCols()]; } CPXgetmipx(env, cpxlp, integerSolution_, 0, cpx_->getNumCols() -1); CHECK_CPX_STAT("getmipx",status) } else { if (integerSolution_) { delete [] integerSolution_; integerSolution_ = NULL; } } cpx_->switchToLP(); #endif } else { throw CoinError("Unsupported solver, for local searches you should use clp or cplex", "performLocalSearch", "OaDecompositionBase::SubMipSolver"); } } void SubMipSolver::optimize(double cutoff, int loglevel, double maxTime) { if (clp_) { assert(strategy_); CbcStrategyDefault * strat_default = dynamic_cast(strategy_->clone()); assert(strat_default); strat_default->setupPreProcessing(); OsiBabSolver empty; CbcModel cbc(*clp_); cbc.solver()->setAuxiliaryInfo(&empty); //Change Cbc messages prefixes strcpy(cbc.messagesPointer()->source_,"OCbc"); cbc.setLogLevel(loglevel); cbc.solver()->messageHandler()->setLogLevel(0); clp_->resolve(); cbc.setStrategy(*strategy_); cbc.setLogLevel(loglevel); cbc.solver()->messageHandler()->setLogLevel(0); cbc.setMaximumSeconds(maxTime); cbc.setCutoff(cutoff); cbc.setDblParam( CbcModel::CbcAllowableFractionGap, gap_tol_); //cbc.solver()->writeMpsNative("FP.mps", NULL, NULL, 1); cbc.branchAndBound(); lowBound_ = cbc.getBestPossibleObjValue(); if (cbc.isProvenOptimal() || cbc.isProvenInfeasible()) optimal_ = true; else optimal_ = false; if (cbc.getSolutionCount()) { if (!integerSolution_) integerSolution_ = new double[clp_->getNumCols()]; CoinCopyN(cbc.bestSolution(), clp_->getNumCols(), integerSolution_); } else if (integerSolution_) { delete [] integerSolution_; integerSolution_ = NULL; } nodeCount_ = cbc.getNodeCount(); iterationCount_ = cbc.getIterationCount(); delete strat_default; } else #ifdef COIN_HAS_CPX if (cpx_) { cpx_->switchToMIP(); CPXENVptr env = cpx_->getEnvironmentPtr(); CPXLPptr orig_lp = cpx_->getLpPtr(OsiCpxSolverInterface::KEEPCACHED_ALL); int s; CPXLPptr cpxlp = CPXcloneprob(env, orig_lp, &s); double gap_tol = std::max(0.,gap_tol_- gap_tol_*(1e-01)); #ifdef SHIFT_CUTOFF if(cutoff < 1e20){ cutoff = cutoff-fabs(cutoff)*gap_tol_*0.2; gap_tol = gap_tol_*0.8; } #endif CPXsetdblparam(env, CPX_PARAM_TILIM, maxTime); CPXsetintparam(env, CPX_PARAM_CLOCKTYPE, 1); CPXsetdblparam(env, CPX_PARAM_CUTUP, cutoff); CPXsetdblparam(env, CPX_PARAM_EPGAP, gap_tol); CPXsetintparam( env, CPX_PARAM_PREIND, CPX_ON ); //CPXwriteprob(env, cpxlp, "OA_trunk","MPS"); //CPXwriteparam(env, "params.txt"); cpx_->messageHandler()->setLogLevel(loglevel); int status = CPXmipopt(env,cpxlp); CHECK_CPX_STAT("mipopt",status) int stat = CPXgetstat( env, cpxlp); bool infeasible = (stat == CPXMIP_INFEASIBLE) || (stat == CPXMIP_ABORT_INFEAS) || (stat == CPXMIP_TIME_LIM_INFEAS) || (stat == CPXMIP_NODE_LIM_INFEAS) || (stat == CPXMIP_FAIL_INFEAS) || (stat == CPXMIP_MEM_LIM_INFEAS) || (stat == CPXMIP_INForUNBD); optimal_ = (stat == CPXMIP_INFEASIBLE) || (stat == CPXMIP_OPTIMAL) || (stat == CPXMIP_OPTIMAL_TOL) || (stat == CPXMIP_INForUNBD); nodeCount_ = CPXgetnodecnt(env , cpxlp); iterationCount_ = CPXgetmipitcnt(env , cpxlp); status = CPXgetbestobjval(env, cpxlp, &lowBound_); CHECK_CPX_STAT("getbestobjval",status) if(!infeasible){ if(!integerSolution_){ integerSolution_ = new double[cpx_->getNumCols()]; } CPXgetmipx(env, cpxlp, integerSolution_, 0, cpx_->getNumCols() -1); CHECK_CPX_STAT("getmipx",status) } else { if (integerSolution_) { delete [] integerSolution_; integerSolution_ = NULL; } } CPXfreeprob(env, &cpxlp); cpx_->switchToLP(); } else { #else { #endif throw CoinError("Unsupported solver, for local searches you should use clp or cplex", "performLocalSearch", "OaDecompositionBase::SubMipSolver"); } } void SubMipSolver::optimize_with_lazy_constraints(double cutoff, int loglevel, double maxTime, const OsiCuts &cs) { if (clp_) { fprintf(stderr, "Function optimize_with_lazy_constraints can only be used with CPLEX\n"); optimize(cutoff,loglevel, maxTime); } else #ifdef COIN_HAS_CPX if (cpx_) { cpx_->switchToMIP(); CPXENVptr env = cpx_->getEnvironmentPtr(); CPXLPptr cpxlp = cpx_->getLpPtr(OsiCpxSolverInterface::KEEPCACHED_ALL); // Remove all the cuts and declare them as lazy constraints int orig_nrows = CPXgetnumrows(env, cpxlp) - cs.sizeRowCuts(); /* printf("Number of rows %i\n", cs.sizeRowCuts()); */ CPXdelrows(env, cpxlp, orig_nrows, CPXgetnumrows(env, cpxlp) - 1); int rcnt = cs.sizeRowCuts(), nzcnt = 0; vector rhs(rcnt); vector sense(rcnt); vector beg(rcnt); vector ind; vector val; double infty = cpx_->getInfinity(); for(int i =0 ; i < rcnt ; i++){ const OsiRowCut &r = cs.rowCut(i); const double lb = r.lb(), ub=r.ub(); if(ub >= infty) { sense[i] = 'G'; rhs[i] = lb; } else if (lb <= infty) { sense[i] = 'L'; rhs[i] = ub; } else { assert(lb == ub); sense[i] = 'E'; rhs[i] = ub; } beg[i] = nzcnt; nzcnt += r.row().getNumElements(); } ind.resize(nzcnt); val.resize(nzcnt); for(int i =0 ; i < rcnt ; i++){ const OsiRowCut &r = cs.rowCut(i); const double * el = r.row().getElements(); const int * id = r.row().getIndices(); int nz = r.row().getNumElements(); std::copy(el, el + nz, val() + beg[i]); std::copy(id, id + nz, ind() + beg[i]); } CPXaddlazyconstraints(env, cpxlp, rcnt, nzcnt, rhs(), sense(), beg(), ind(), val(), NULL); CPXsetintparam(env, CPX_PARAM_REDUCE, CPX_PREREDUCE_PRIMALONLY); CPXsetdblparam(env, CPX_PARAM_TILIM, maxTime); CPXsetintparam(env, CPX_PARAM_CLOCKTYPE, 1); CPXsetdblparam(env, CPX_PARAM_CUTUP, cutoff); CPXsetdblparam(env, CPX_PARAM_EPGAP, gap_tol_); cpx_->messageHandler()->setLogLevel(loglevel); int status = CPXmipopt(env,cpxlp); CHECK_CPX_STAT("mipopt",status) int stat = CPXgetstat( env, cpxlp); bool infeasible = (stat == CPXMIP_INFEASIBLE) || (stat == CPXMIP_ABORT_INFEAS) || (stat == CPXMIP_TIME_LIM_INFEAS) || (stat == CPXMIP_NODE_LIM_INFEAS) || (stat == CPXMIP_FAIL_INFEAS) || (stat == CPXMIP_MEM_LIM_INFEAS) || (stat == CPXMIP_INForUNBD); optimal_ = (stat == CPXMIP_INFEASIBLE) || (stat == CPXMIP_OPTIMAL) || (stat == CPXMIP_OPTIMAL_TOL) || (stat == CPXMIP_INForUNBD); nodeCount_ = CPXgetnodecnt(env , cpxlp); iterationCount_ = CPXgetmipitcnt(env , cpxlp); status = CPXgetbestobjval(env, cpxlp, &lowBound_); CHECK_CPX_STAT("getbestobjval",status) if(!infeasible){ if(!integerSolution_){ integerSolution_ = new double[cpx_->getNumCols()]; } CPXgetmipx(env, cpxlp, integerSolution_, 0, cpx_->getNumCols() -1); CHECK_CPX_STAT("getmipx",status) } else { if (integerSolution_) { delete [] integerSolution_; integerSolution_ = NULL; } } cpx_->switchToLP(); CPXfreelazyconstraints(env, cpxlp); CPXaddrows(env, cpxlp, 0, rcnt, nzcnt, rhs(), sense(), beg(), ind(), val(), NULL, NULL); } else { #else { #endif throw CoinError("Unsupported solver, for local searches you should use clp or cplex", "performLocalSearch", "OaDecompositionBase::SubMipSolver"); } } /** Assign a strategy. */ void SubMipSolver::setStrategy(CbcStrategyDefault * strategy) { if (strategy_) delete strategy_; strategy_ = dynamic_cast(strategy->clone()); assert(strategy_); } /** Register options.*/ void SubMipSolver::registerOptions(Ipopt::SmartPtr roptions) { roptions->SetRegisteringCategory("MILP Solver", RegisteredOptions::BonminCategory); roptions->AddStringOption3("milp_solver", "Choose the subsolver to solve MILP sub-problems in OA decompositions.", "Cbc_D", "Cbc_D","Coin Branch and Cut with its default", "Cbc_Par", "Coin Branch and Cut with passed parameters", "Cplex","IBM Cplex", " To use Cplex, a valid license is required and you should have compiled OsiCpx in COIN-OR (see Osi documentation)."); roptions->setOptionExtraInfo("milp_solver",64); roptions->AddBoundedIntegerOption("cpx_parallel_strategy", "Strategy of parallel search mode in CPLEX.", -1, 1, 0, "-1 = opportunistic, 0 = automatic, 1 = deterministic (refer to CPLEX documentation)" ); roptions->setOptionExtraInfo("cpx_parallel_strategy",64); roptions->AddLowerBoundedIntegerOption("number_cpx_threads", "Set number of threads to use with cplex.", 0, 0, "(refer to CPLEX documentation)" ); roptions->setOptionExtraInfo("number_cpx_threads",64); roptions->AddStringOption2("milp_strategy", "Choose a strategy for MILPs.", "solve_to_optimality", "find_good_sol","Stop sub milps when a solution improving the incumbent is found", "solve_to_optimality", "Solve MILPs to optimality", ""); roptions->setOptionExtraInfo("milp_strategy",64); roptions->SetRegisteringCategory("Output and Loglevel", RegisteredOptions::BonminCategory); roptions->AddBoundedIntegerOption("milp_log_level", "specify MILP solver log level.", 0,4,0, "Set the level of output of the MILP subsolver in OA : " "0 - none, 1 - minimal, 2 - normal low, 3 - normal high" ); roptions->setOptionExtraInfo("milp_log_level",64); } }/* Ends Bonmin namespace.*/ Bonmin-releases-1.8.9/Bonmin/src/Algorithms/BonSubMipSolver.hpp000066400000000000000000000073411436575401300244550ustar00rootroot00000000000000// (C) Copyright International Business Machines (IBM) 2006 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // P. Bonami, International Business Machines // // Date : 12/07/2006 // Code separated from BonOaDecBase to try to clarify OAs #ifndef BonSubMipSolver_HPP #define BonSubMipSolver_HPP #include "IpSmartPtr.hpp" #include /* forward declarations.*/ class OsiSolverInterface; class OsiClpSolverInterface; class OsiCpxSolverInterface; class CbcStrategy; class CbcStrategyDefault; #include "OsiCuts.hpp" namespace Bonmin { class RegisteredOptions; class BabSetupBase; /** A very simple class to provide a common interface for solving MIPs with Cplex and Cbc.*/ class SubMipSolver { public: enum MILP_solve_strategy{ FindGoodSolution, GetOptimum}; /** Constructor */ SubMipSolver(BabSetupBase &b, const std::string &prefix); /** Copy Constructor */ SubMipSolver(const SubMipSolver ©); ~SubMipSolver(); /** Assign lp solver. */ void setLpSolver(OsiSolverInterface * lp); /** Assign a strategy. */ void setStrategy(CbcStrategyDefault * strategy); /** get the solution found in last local search (return NULL if no solution). */ const double * getLastSolution() { return integerSolution_; } double getLowerBound() { return lowBound_; } void solve(double cutoff, int loglevel, double maxTime){ if(milp_strat_ == FindGoodSolution){ find_good_sol(cutoff, loglevel, maxTime); } else optimize(cutoff, loglevel, maxTime); } /** update cutoff and perform a local search to a good solution. */ void find_good_sol(double cutoff, int loglevel, double maxTime); /** update cutoff and optimize MIP. */ void optimize(double cutoff, int loglevel, double maxTime); /** update cutoff, put OA constraints in cs as lazy constraints and optimize MIP. */ void optimize_with_lazy_constraints(double cutoff, int loglevel, double maxTime, const OsiCuts & cs); /** Returns lower bound. */ inline double lowBound() { return lowBound_; } /** returns optimality status. */ inline bool optimal() { return optimal_; } /** Returns number of nodes in last solve.*/ inline int nodeCount() { return nodeCount_; } /** Returns number of simplex iterations in last solve.*/ inline int iterationCount() { return iterationCount_; } OsiSolverInterface * solver(); /** Register options for that Oa based cut generation method. */ static void registerOptions(Ipopt::SmartPtr roptions); private: /** If lp solver is clp (then have to use Cbc) (not owned).*/ OsiClpSolverInterface *clp_; /** If mip solver is cpx this is it (owned). */ OsiCpxSolverInterface * cpx_; /** lower bound obtained */ double lowBound_; /** Is optimality proven? */ bool optimal_; /** Has an integer solution? then it is here*/ double * integerSolution_; /** Strategy for solving sub mips with cbc. */ CbcStrategyDefault * strategy_; /** number of nodes in last mip solved.*/ int nodeCount_; /** number of simplex iteration in last mip solved.*/ int iterationCount_; /** MILP search strategy.*/ MILP_solve_strategy milp_strat_; /** setting for gap tolerance.*/ double gap_tol_; /** say if owns copy of clp_.*/ bool ownClp_; }; } #endif Bonmin-releases-1.8.9/Bonmin/src/Algorithms/Branching/000077500000000000000000000000001436575401300226015ustar00rootroot00000000000000Bonmin-releases-1.8.9/Bonmin/src/Algorithms/Branching/BonChooseVariable.cpp000066400000000000000000001236321436575401300266410ustar00rootroot00000000000000// Copyright (C) 2006, 2008 International Business Machines // Corporation and others. All Rights Reserved. #include #include "CoinPragma.hpp" #include "BonChooseVariable.hpp" #include "CoinTime.hpp" #include "IpBlas.hpp" #include "BonMsgUtils.hpp" // This couples Cbc code into Bonmin code... #include "CbcModel.hpp" namespace Bonmin { BonChooseVariable::Messages::Messages(): CoinMessages((int) BON_CHOOSE_MESSAGES_DUMMY_END) { strcpy(source_,"BON"); ADD_MSG(PS_COST_HISTORY,std_m,6,"%3d up %3d %.8e down %3d %.8e"); ADD_MSG(PS_COST_MULT,std_m, 6, "upMultiplier = %e downMultiplier = %e"); ADD_MSG(PS_COST_ESTIMATES, std_m, 6, "%3d value = %e upEstimate = %e downEstimate = %e infeas = %e value2 = %e"); ADD_MSG(CANDIDATE_LIST,std_m,6, "list_[%5d] = %5d, usefull_[%5d] = %.16e %.16e"); ADD_MSG(CANDIDATE_LIST2, std_m, 6, "list_[%3d] = %3d useful_[%3d] = %e"); ADD_MSG(CANDIDATE_LIST3, std_m, 6, "list2[%3d] = %3d useful2[%3d] = %e"); ADD_MSG(SB_START, std_m,5, " Starting strong branching. Obj. val = %g\n"); ADD_MSG(SB_HEADER, std_m,5, " Var Value DownStat DownChange UpStat UpChange"); ADD_MSG(SB_RES, std_m, 5, " %3d %3d %.6e %6s %.6e %6s %.6e"); ADD_MSG(BRANCH_VAR, std_m, 4, "Branched on variable %i, bestWhichWay: %i"); ADD_MSG(CHOSEN_VAR, std_m, 4," Choosing %d"); ADD_MSG(UPDATE_PS_COST, std_m, 4,"update %3d %3d %e %e %3d"); } const std::string BonChooseVariable::CNAME = "BonChooseVariable"; BonChooseVariable::BonChooseVariable(BabSetupBase &b, const OsiSolverInterface* solver): OsiChooseVariable(solver), results_(), cbc_model_(NULL), only_pseudo_when_trusted_(false), pseudoCosts_() { jnlst_ = b.journalist(); Ipopt::SmartPtr options = b.options(); handler_ = new CoinMessageHandler; options->GetIntegerValue("bb_log_level", bb_log_level_, b.prefix()); handler_->setLogLevel(bb_log_level_); options->GetNumericValue("time_limit", time_limit_, b.prefix()); options->GetNumericValue("setup_pseudo_frac", setup_pseudo_frac_, b.prefix()); options->GetNumericValue("maxmin_crit_no_sol", maxmin_crit_no_sol_, b.prefix()); options->GetNumericValue("maxmin_crit_have_sol", maxmin_crit_have_sol_, b.prefix()); options->GetEnumValue("trust_strong_branching_for_pseudo_cost",trustStrongForPseudoCosts_ , b.prefix()); int sortCrit; options->GetEnumValue("candidate_sort_criterion", sortCrit, b.prefix()); #ifndef OLD_USEFULLNESS sortCrit_ = (CandidateSortCriterion) sortCrit; #endif /** Set values of standard branching options.*/ int numberObjects = solver_->numberObjects(); //std::cout<<"Number objects "<GetIntegerValue("number_before_trust_list", numberBeforeTrustedList_, b.prefix())) { // default is to use the same value as for numberBeforeTrusted numberBeforeTrustedList_ = numberBeforeTrusted; } options->GetIntegerValue("number_strong_branch_root", numberStrongRoot_, b.prefix()); options->GetIntegerValue("min_number_strong_branch", minNumberStrongBranch_, b.prefix()); options->GetIntegerValue("number_look_ahead", numberLookAhead_, b.prefix()); start_time_ = CoinCpuTime(); } BonChooseVariable::BonChooseVariable(const BonChooseVariable & rhs) : OsiChooseVariable(rhs), results_(rhs.results_), time_limit_(rhs.time_limit_), start_time_(CoinCpuTime()), cbc_model_(rhs.cbc_model_), only_pseudo_when_trusted_(rhs.only_pseudo_when_trusted_), maxmin_crit_no_sol_(rhs.maxmin_crit_no_sol_), maxmin_crit_have_sol_(rhs.maxmin_crit_have_sol_), setup_pseudo_frac_(rhs.setup_pseudo_frac_), numberBeforeTrustedList_(rhs.numberBeforeTrustedList_), numberStrongRoot_(rhs.numberStrongRoot_), #ifndef OLD_USEFULLNESS sortCrit_(rhs.sortCrit_), #endif numberLookAhead_(rhs.numberLookAhead_), minNumberStrongBranch_(rhs.minNumberStrongBranch_), pseudoCosts_(rhs.pseudoCosts_), trustStrongForPseudoCosts_(rhs.trustStrongForPseudoCosts_) { jnlst_ = rhs.jnlst_; handler_ = rhs.handler_->clone(); bb_log_level_ = rhs.bb_log_level_; DBG_ASSERT(IsValid(jnlst_)); } BonChooseVariable & BonChooseVariable::operator=(const BonChooseVariable & rhs) { if (this != &rhs) { OsiChooseVariable::operator=(rhs); delete handler_; handler_ = rhs.handler_->clone(); jnlst_ = rhs.jnlst_; bb_log_level_ = rhs.bb_log_level_; cbc_model_ = rhs.cbc_model_; only_pseudo_when_trusted_ = rhs.only_pseudo_when_trusted_; maxmin_crit_no_sol_ = rhs.maxmin_crit_no_sol_; maxmin_crit_have_sol_ = rhs.maxmin_crit_have_sol_; setup_pseudo_frac_ = rhs.setup_pseudo_frac_; numberBeforeTrustedList_ = rhs.numberBeforeTrustedList_; numberStrongRoot_ = rhs.numberStrongRoot_; #ifndef OLD_USEFULLNESS sortCrit_ = rhs.sortCrit_; #endif minNumberStrongBranch_ = rhs.minNumberStrongBranch_; pseudoCosts_ = rhs.pseudoCosts_; trustStrongForPseudoCosts_ = rhs.trustStrongForPseudoCosts_; numberLookAhead_ = rhs.numberLookAhead_; results_ = rhs.results_; } return *this; } OsiChooseVariable * BonChooseVariable::clone() const { return new BonChooseVariable(*this); } BonChooseVariable::~BonChooseVariable () { delete handler_; } void BonChooseVariable::registerOptions( Ipopt::SmartPtr roptions) { roptions->SetRegisteringCategory("Strong branching setup", RegisteredOptions::BonminCategory); roptions->AddStringOption4("candidate_sort_criterion", "Choice of the criterion to choose candidates in strong-branching", "best-ps-cost", "best-ps-cost","Sort by decreasing pseudo-cost", "worst-ps-cost", "Sort by increasing pseudo-cost", "most-fractional", "Sort by decreasing integer infeasibility", "least-fractional", "Sort by increasing integer infeasibility",""); roptions->setOptionExtraInfo("candidate_sort_criterion",63); roptions->AddBoundedNumberOption("setup_pseudo_frac", "Proportion of strong branching list that has to be taken from most-integer-infeasible list.", 0., false, 1., false, 0.5); roptions->setOptionExtraInfo("setup_pseudo_frac",63); roptions->AddBoundedNumberOption("maxmin_crit_no_sol", "Weight towards minimum in of lower and upper branching estimates when no solution has been found yet.", 0., false, 1., false, 0.7); roptions->setOptionExtraInfo("maxmin_crit_no_sol",63); roptions->AddBoundedNumberOption("maxmin_crit_have_sol", "Weight towards minimum in of lower and upper branching estimates when a solution has been found.", 0., false, 1., false, 0.1); roptions->setOptionExtraInfo("maxmin_crit_have_sol",63); roptions->AddLowerBoundedIntegerOption("number_before_trust_list", "Set the number of branches on a variable before its pseudo costs are to be believed during setup of strong branching candidate list.", -1, 0, "The default value is that of \"number_before_trust\""); roptions->setOptionExtraInfo("number_before_trust_list",63); roptions->AddLowerBoundedIntegerOption("number_strong_branch_root", "Maximum number of variables considered for strong branching in root node.", 0, COIN_INT_MAX, ""); roptions->setOptionExtraInfo("number_strong_branch_root",63); roptions->AddLowerBoundedIntegerOption("min_number_strong_branch", "Sets minimum number of variables for strong branching (overriding trust)", 0, 0,""); roptions->setOptionExtraInfo("min_number_strong_branch",63); roptions->AddStringOption2("trust_strong_branching_for_pseudo_cost", "Whether or not to trust strong branching results for updating pseudo costs.", "yes", "no","", "yes","", "" ); roptions->setOptionExtraInfo("trust_strong_branching_for_pseudo_cost", 63); roptions->AddLowerBoundedIntegerOption("number_look_ahead", "Sets limit of look-ahead strong-branching trials", 0, 0,""); roptions->setOptionExtraInfo("number_look_ahead", 31); } void BonChooseVariable::computeMultipliers(double& upMult, double& downMult) const { const double* upTotalChange = pseudoCosts_.upTotalChange(); const double* downTotalChange = pseudoCosts_.downTotalChange(); const int* upNumber = pseudoCosts_.upNumber(); const int* downNumber = pseudoCosts_.downNumber(); double sumUp=0.0; double numberUp=0.0; double sumDown=0.0; double numberDown=0.0; for (int i=pseudoCosts_.numberObjects() - 1; i >= 0; --i) { sumUp += upTotalChange[i]; numberUp += upNumber[i]; sumDown += downTotalChange[i]; numberDown += downNumber[i]; message(PS_COST_HISTORY) <upEstimate(); double downEst = object->downEstimate(); upEst = numberUp ? ((upEst*sumUp)/numberUp) : (upEst*upMult); //if (numberUp= DecrPs && sortCrit_ <= IncrPs) {//Using pseudo costs double sumUp = pseudoCosts_.upTotalChange()[i]+1.0e-30; double sumDown = pseudoCosts_.downTotalChange()[i]+1.0e-30; double upEst = object->upEstimate(); double downEst = object->downEstimate(); upEst = numberUp ? ((upEst*sumUp)/numberUp) : (upEst*upMult); //if (numberUp= 0.5)//Sort on max infeasibility useful = CoinMin(upEst, downEst); else {//Do min infeasibility useful = CoinMax(upEst, downEst); } } value2 = -COIN_DBL_MAX; if (numberUp < numberBeforeTrustedList_ || numberDown < numberBeforeTrustedList_) { value2 = value; } #endif message(PS_COST_ESTIMATES) <= DecrInfeas && sortCrit_ <= IncrInfeas) {//Just return infeasibility double usefull = value; value2 = value; return usefull; } else { throw CoinError("BonChooseVariable", "computeUsefullnee", "Unknown criterion for soring candidates"); return COIN_DBL_MAX; } } #endif int BonChooseVariable::setupList ( OsiBranchingInformation *info, bool initialize) { if (numberBeforeTrustedList_ < 0) { number_not_trusted_ = 1; return OsiChooseVariable::setupList(info, initialize); } if (initialize) { status_=-2; delete [] goodSolution_; bestObjectIndex_=-1; numberStrongDone_=0; numberStrongIterations_ = 0; numberStrongFixed_ = 0; goodSolution_ = NULL; goodObjectiveValue_ = COIN_DBL_MAX; number_not_trusted_=0; } else { throw CoinError(CNAME,"setupList","Should not be called with initialize==false"); } numberOnList_=0; numberUnsatisfied_=0; int numberObjects = solver_->numberObjects(); assert (numberObjects); if (numberObjects>pseudoCosts_.numberObjects()) { //std::cout<<"Number objects "< 0. ? (int)floor(setup_pseudo_frac_*(double)maximumStrong): 0; if (setup_pseudo_frac_ > 0.) { max_most_fra = CoinMax(1, max_most_fra); } if (max_most_fra) { list2 = new int[max_most_fra]; useful2 = new double[max_most_fra]; for (i=0;isolver_->objects(); double upMultiplier, downMultiplier; computeMultipliers(upMultiplier, downMultiplier); // Say feasible bool feasible = true; const double MAXMIN_CRITERION = maxminCrit(info); for ( i=0;iinfeasibility(info,way); if (value>0.0) { numberUnsatisfied_++; if (value>=1e50) { // infeasible feasible=false; break; } int priorityLevel = object[i]->priority(); // Better priority? Flush choices. if (priorityLevel=0;j--) { if (list_[j]>=0) { int iObject = list_[j]; list_[j]=-1; useful_[j]=0.0; list_[--putOther]=iObject; } } maximumStrong = CoinMin(maximumStrong,putOther); bestPriority = priorityLevel; check=-COIN_DBL_MAX; checkIndex=0; check2=-COIN_DBL_MAX; checkIndex2=0; number_not_trusted_=0; if (max_most_fra>0) { for (int j=0;jcheck) { //add to list int iObject = list_[checkIndex]; if (iObject>=0) { assert (list_[putOther-1]<0); list_[--putOther]=iObject; // to end } list_[checkIndex]=i; assert (checkIndex=0) { if (useful_[j] 0 && value2>check2) { // add to list of integer infeasibilities number_not_trusted_++; list2[checkIndex2]=i; useful2[checkIndex2]=value2; // find worst check2=COIN_DBL_MAX; for (int j=0;j=0) { if (useful2[j]infeasibility(info,way) <=0) { #ifdef OLD_USEFULLNESS list_[numberOnList_]=list_[i]; useful_[numberOnList_++]=-useful_[i]; #else list_[numberOnList_]=list_[i]; if ((sortCrit_ & 1) == 0) { useful_[numberOnList_++]=-useful_[i]; } else useful_[numberOnList_++] = useful_[i]; #endif message(CANDIDATE_LIST2)< 0 && numberOnList_ >= maximumStrong) { // If we want to force non-trusted in the list, give them huge // weight here number_not_trusted_=0; for (i=0;i=0) { list2[number_not_trusted_] = list2[i]; useful2[number_not_trusted_++] = useful2[i]; message(CANDIDATE_LIST3)<= 0) { list_[numberOnList_+tmp_on_list] = list2[i]; useful_[numberOnList_+tmp_on_list] = -1e150*(1.+useful2[i]); tmp_on_list++; } } } } // Sort CoinSort_2(useful_,useful_+numberOnList_+tmp_on_list,list_); // move others i = numberOnList_; for (;putOtherdefaultDual_ = -1.0; // switch off delete [] info->usefulRegion_; delete [] info->indexRegion_; delete [] list2; delete [] useful2; int way; if (bb_log_level_>3) { //for (int i=0; iinfeasibility(info,way) < save_sol; if (bb_log_level_>=3) { save_sol.resize(info->numberColumns_); std::copy(info->solution_, info->solution_ + info->numberColumns_ , save_sol.begin()); } if (numberUnsatisfied_) { const double* upTotalChange = pseudoCosts_.upTotalChange(); const double* downTotalChange = pseudoCosts_.downTotalChange(); const int* upNumber = pseudoCosts_.upNumber(); const int* downNumber = pseudoCosts_.downNumber(); int numberBeforeTrusted = pseudoCosts_.numberBeforeTrusted(); int numberLeft = CoinMin(numberStrong -numberStrongDone_,numberUnsatisfied_); results_.clear(); int returnCode=0; bestObjectIndex_ = -1; bestWhichWay_ = -1; firstForcedObjectIndex_ = -1; firstForcedWhichWay_ =-1; double bestTrusted=-COIN_DBL_MAX; for (int i=0;i0 ) || ( !isRoot && (upNumber[iObject]objects(), iObject)); } else { const OsiObject * obj = solver->object(iObject); double upEstimate = (upTotalChange[iObject]*obj->upEstimate())/upNumber[iObject]; double downEstimate = (downTotalChange[iObject]*obj->downEstimate())/downNumber[iObject]; double MAXMIN_CRITERION = maxminCrit(info); double value = MAXMIN_CRITERION*CoinMin(upEstimate,downEstimate) + (1.0-MAXMIN_CRITERION)*CoinMax(upEstimate,downEstimate); if (value > bestTrusted) { bestObjectIndex_=iObject; bestWhichWay_ = upEstimate>downEstimate ? 0 : 1; bestTrusted = value; } } } int numberFixed=0; if (results_.size() > 0) { returnCode = doStrongBranching(solver, info, (int)results_.size(), 1); if (bb_log_level_>=3) { OsiObject ** obj = solver->objects(); const char* stat_msg[] = {"NOTDON", "FEAS", "INFEAS", "NOFINI"}; message(SB_START)<objectiveValue_<columnNumber(); double val = save_sol[icol]; message(SB_RES)<<(int) i<=0&&returnCode<=2) { if (returnCode) { returnCode=4; if (bestObjectIndex_>=0) returnCode=3; } for (unsigned int i=0;i < results_.size();i++) { int iObject = results_[i].whichObject(); double upEstimate; if (results_[i].downStatus()== 2 || results_[i].upStatus()==2) { //continue; } if (results_[i].upStatus()!=1) { assert (results_[i].upStatus()>=0); upEstimate = results_[i].upChange(); } else { // infeasible - just say expensive if (info->cutoff_<1.0e50) upEstimate = 2.0*(info->cutoff_-info->objectiveValue_); else upEstimate = 2.0*fabs(info->objectiveValue_); if (firstForcedObjectIndex_ <0) { // first fixed variable firstForcedObjectIndex_ = iObject; firstForcedWhichWay_ =0; } numberFixed++; if (fixVariables) { const OsiObject * obj = solver->object(iObject); OsiBranchingObject * branch = obj->createBranch(solver,info,0); branch->branch(solver); delete branch; } } double downEstimate; if (results_[i].downStatus()!=1) { assert (results_[i].downStatus()>=0); downEstimate = results_[i].downChange(); } else { // infeasible - just say expensive if (info->cutoff_<1.0e50) downEstimate = 2.0*(info->cutoff_-info->objectiveValue_); else downEstimate = 2.0*fabs(info->objectiveValue_); if (firstForcedObjectIndex_ <0) { firstForcedObjectIndex_ = iObject; firstForcedWhichWay_ =1; } numberFixed++; if (fixVariables) { const OsiObject * obj = solver->object(iObject); OsiBranchingObject * branch = obj->createBranch(solver,info,1); branch->branch(solver); delete branch; } } double MAXMIN_CRITERION = maxminCrit(info); double value = MAXMIN_CRITERION*CoinMin(upEstimate,downEstimate) + (1.0-MAXMIN_CRITERION)*CoinMax(upEstimate,downEstimate); if (value>bestTrusted) { bestTrusted = value; bestObjectIndex_ = iObject; bestWhichWay_ = upEstimate>downEstimate ? 0 : 1; // but override if there is a preferred way const OsiObject * obj = solver->object(iObject); if (obj->preferredWay()>=0&&obj->infeasibility()) bestWhichWay_ = obj->preferredWay(); if (returnCode) returnCode=2; } } } else if (returnCode==3) { // max time - just choose one bestObjectIndex_ = list_[0]; bestWhichWay_ = 0; returnCode=0; } } else { bestObjectIndex_=list_[0]; } if ( bestObjectIndex_ >=0 ) { OsiObject * obj = solver->objects()[bestObjectIndex_]; obj->setWhichWay(bestWhichWay_); message(BRANCH_VAR)<columnNumber()<< bestWhichWay_ <getNumCols(); solver->markHotStart(); const double * lower = info->lower_; const double * upper = info->upper_; saveLower = CoinCopyOfArray(info->lower_,numberColumns); saveUpper = CoinCopyOfArray(info->upper_,numberColumns); int returnCode=0; double timeStart = CoinCpuTime(); int iDo = 0; for (;iDobranchingObject(); assert (branch->numberBranches()==2); /* Try the first direction. Each subsequent call to branch() performs the specified branch and advances the branch object state to the next branch alternative.) */ OsiSolverInterface * thisSolver = solver; if (branch->boundBranch()) { // ordinary branch->branch(solver); // maybe we should check bounds for stupidities here? solver->solveFromHotStart() ; } else { // adding cuts or something thisSolver = solver->clone(); branch->branch(thisSolver); // set hot start iterations int limit; thisSolver->getIntParam(OsiMaxNumIterationHotStart,limit); thisSolver->setIntParam(OsiMaxNumIteration,limit); thisSolver->resolve(); } // can check if we got solution // status is 0 finished, 1 infeasible and 2 unfinished and 3 is solution int status0 = result->updateInformation(thisSolver,info,this); if (status0==3) { // new solution already saved if (trustStrongForSolution_) { info->cutoff_ = goodObjectiveValue_; status0=0; } } if(solver->getRowCutDebugger() && status0 == 1 ){ OsiTMINLPInterface * tminlp_solver = dynamic_cast (solver); throw tminlp_solver->newUnsolvedError(1, tminlp_solver->problem(), "SB"); } numberStrongIterations_ += thisSolver->getIterationCount(); if (solver!=thisSolver) delete thisSolver; // Restore bounds for (int j=0;jsetColLower(j,saveLower[j]); if (saveUpper[j] != upper[j]) solver->setColUpper(j,saveUpper[j]); } /* Try the next direction */ thisSolver = solver; if (branch->boundBranch()) { // ordinary branch->branch(solver); // maybe we should check bounds for stupidities here? fflush(stdout); solver->solveFromHotStart() ; } else { // adding cuts or something thisSolver = solver->clone(); branch->branch(thisSolver); // set hot start iterations int limit; thisSolver->getIntParam(OsiMaxNumIterationHotStart,limit); thisSolver->setIntParam(OsiMaxNumIteration,limit); thisSolver->resolve(); } // can check if we got solution // status is 0 finished, 1 infeasible and 2 unfinished and 3 is solution int status1 = result->updateInformation(thisSolver,info,this); numberStrongDone_++; if (status1==3) { // new solution already saved if (trustStrongForSolution_) { info->cutoff_ = goodObjectiveValue_; status1=0; } } if(solver->getRowCutDebugger() && status1 == 1){ OsiTMINLPInterface * tminlp_solver = dynamic_cast (solver); throw tminlp_solver->newUnsolvedError(1, tminlp_solver->problem(), "SB"); } numberStrongIterations_ += thisSolver->getIterationCount(); if (solver!=thisSolver) delete thisSolver; // Restore bounds for (int j=0;jsetColLower(j,saveLower[j]); if (saveUpper[j] != upper[j]) solver->setColUpper(j,saveUpper[j]); } /* End of evaluation for this candidate variable. Possibilities are: * Both sides below cutoff; this variable is a candidate for branching. * Both sides infeasible or above the objective cutoff: no further action here. Break from the evaluation loop and assume the node will be purged by the caller. * One side below cutoff: Install the branch (i.e., fix the variable). Possibly break from the evaluation loop and assume the node will be reoptimised by the caller. */ if (status0==1&&status1==1) { // infeasible returnCode=-1; //break; // exit loop } else if (status0==1||status1==1) { numberStrongFixed_++; returnCode=1; } bool hitMaxTime = ( CoinCpuTime()-timeStart > info->timeRemaining_) || ( CoinCpuTime() - start_time_ > time_limit_); if (hitMaxTime) { returnCode=3; break; } // stop if look ahead heuristic tells us so if (!isRoot && numberLookAhead_) { assert(status0==0 && status1==0); double upEstimate = result->upChange(); double downEstimate = result->downChange(); double MAXMIN_CRITERION = maxminCrit(info); double value = MAXMIN_CRITERION*CoinMin(upEstimate,downEstimate) + (1.0-MAXMIN_CRITERION)*CoinMax(upEstimate,downEstimate); if (value > bestLookAhead_) { bestLookAhead_ = value; trialsSinceBest_ = 0; } else { trialsSinceBest_++; if (trialsSinceBest_ >= numberLookAhead_) { break; } } } } if(iDo < numberToDo) iDo++; assert(iDo <= (int) results_.size()); results_.resize(iDo); delete [] saveLower; delete [] saveUpper; // Delete the snapshot solver->unmarkHotStart(); return returnCode; } bool BonChooseVariable::isRootNode(const OsiBranchingInformation *info) const { return info->depth_ == 0; } double BonChooseVariable::maxminCrit(const OsiBranchingInformation *info) const { double retval = maxmin_crit_no_sol_; if (cbc_model_) { // FIXME: should be replaced by info->stateOfSearch_ const int stateOfSearch = cbc_model_->stateOfSearch(); const int depth = info->depth_; if (stateOfSearch>1 && depth>10) { retval = maxmin_crit_have_sol_; } } return retval; } // Given a candidate fill in useful information e.g. estimates void BonChooseVariable::updateInformation(const OsiBranchingInformation *info, int branch, OsiHotInfo * hotInfo) { if(!trustStrongForPseudoCosts_) return; int index = hotInfo->whichObject(); assert (indexnumberObjects()); const OsiObject * object = info->solver_->object(index); assert (object->upEstimate()>0.0&&object->downEstimate()>0.0); assert (branch<2); double* upTotalChange = pseudoCosts_.upTotalChange(); double* downTotalChange = pseudoCosts_.downTotalChange(); int* upNumber = pseudoCosts_.upNumber(); int* downNumber = pseudoCosts_.downNumber(); if (branch) { //if (hotInfo->upStatus()!=1) // AW: Let's update the pseudo costs only if the strong branching // problem was marked as "solved" if (hotInfo->upStatus()==0) { assert (hotInfo->upStatus()>=0); upTotalChange[index] += hotInfo->upChange()/object->upEstimate(); upNumber[index]++; } else if (hotInfo->upStatus()==1) { // infeasible - just say expensive upNumber[index]++; if (info->cutoff_<1.0e50) upTotalChange[index] += 2.0*(info->cutoff_-info->objectiveValue_)/object->upEstimate(); else upTotalChange[index] += 2.0*fabs(info->objectiveValue_)/object->upEstimate(); } } else { if (hotInfo->downStatus()==0) { assert (hotInfo->downStatus()>=0); downTotalChange[index] += hotInfo->downChange()/object->downEstimate(); downNumber[index]++; } else if (hotInfo->downStatus()==1) { downNumber[index]++; // infeasible - just say expensive if (info->cutoff_<1.0e50) downTotalChange[index] += 2.0*(info->cutoff_-info->objectiveValue_)/object->downEstimate(); else downTotalChange[index] += 2.0*fabs(info->objectiveValue_)/object->downEstimate(); } } } // Given a branch fill in useful information e.g. estimates void BonChooseVariable::updateInformation( int index, int branch, double changeInObjective, double changeInValue, int status) { if(cbc_model_ == NULL) return; assert (indexnumberObjects()); assert (branch<2); if(fabs(changeInValue) < 1e-6) return; double* upTotalChange = pseudoCosts_.upTotalChange(); double* downTotalChange = pseudoCosts_.downTotalChange(); int* upNumber = pseudoCosts_.upNumber(); int* downNumber = pseudoCosts_.downNumber(); message(UPDATE_PS_COST)<=0); upTotalChange[index] += changeInObjective/changeInValue; upNumber[index]++; } else { // infeasible - just say expensive upNumber[index]++; assert(cbc_model_); // Later, we need to get this information in a different way... double cutoff = cbc_model_->getCutoff(); double objectiveValue = cbc_model_->getCurrentObjValue(); if (cutoff<1.0e50) upTotalChange[index] += 2.0*(cutoff-objectiveValue)/changeInValue; else upTotalChange[index] += 2.0*fabs(objectiveValue)/changeInValue; } } else { if (status!=1) { assert (status>=0); downTotalChange[index] += changeInObjective/changeInValue; downNumber[index]++; } else { assert(cbc_model_); // infeasible - just say expensive downNumber[index]++; double cutoff = cbc_model_->getCutoff(); double objectiveValue = cbc_model_->getCurrentObjValue(); if (cutoff<1.0e50) downTotalChange[index] += 2.0*(cutoff-objectiveValue)/changeInValue; else downTotalChange[index] += 2.0*fabs(objectiveValue)/changeInValue; } } } HotInfo::HotInfo(): OsiHotInfo(), infeasibilities_(){ } HotInfo::HotInfo( OsiSolverInterface * solver, const OsiBranchingInformation *info, const OsiObject * const * objects, int whichObject): OsiHotInfo(solver, info, objects, whichObject), infeasibilities_(){ infeasibilities_.resize(branchingObject_->numberBranches()); } HotInfo::HotInfo(const HotInfo& other): OsiHotInfo(other), infeasibilities_(other.infeasibilities_){ } OsiHotInfo * HotInfo::clone() const { return new HotInfo(*this); } HotInfo & HotInfo::operator=(const HotInfo &rhs){ if(this != &rhs){ OsiHotInfo::operator=(rhs); infeasibilities_ = rhs.infeasibilities_; } return (*this); } HotInfo::~HotInfo(){ } int HotInfo::updateInformation(const OsiSolverInterface * solver, const OsiBranchingInformation * info, OsiChooseVariable * choose){ //printf("in HotInfo::updateInformation\n"); int iBranch = branchingObject_->branchIndex()-1; double & infeasibility = infeasibilities_[iBranch] = 0.; OsiObject ** objects = solver->objects(); int numObject = solver->numberObjects(); for(int i = 0 ; i < numObject ; i++){ infeasibility += objects[i]->checkInfeasibility(info); } int status = OsiHotInfo::updateInformation(solver, info, choose); #if 1 if(!solver->isProvenPrimalInfeasible() && !solver->isProvenOptimal()){ status = 2; statuses_[iBranch] = status; } else if(solver->isProvenPrimalInfeasible() && fabs(solver->getObjValue()) < 1e-06) { assert(solver->messageHandler() != NULL); *solver->messageHandler() << "Very small infeasibility: " << solver->getObjValue() << CoinMessageEol; status = 2; statuses_[iBranch] = status; } #endif return status; } }/* Ends Bonmin's namespace.*/ Bonmin-releases-1.8.9/Bonmin/src/Algorithms/Branching/BonChooseVariable.hpp000066400000000000000000000263521436575401300266470ustar00rootroot00000000000000// Copyright (C) 2006, 2008 International Business Machines // Corporation and others. All Rights Reserved. #ifndef BonChooseVariable_H #define BonChooseVariable_H #include "OsiChooseVariable.hpp" #ifdef BONMIN_CURVATURE_BRANCHING #include "BonCurvatureEstimator.hpp" #endif #include "BonOsiTMINLPInterface.hpp" #include "CoinMessageHandler.hpp" #include "BonBabSetupBase.hpp" // Forward declaration class CbcModel; #define OLD_USEFULLNESS namespace Bonmin { class HotInfo : public OsiHotInfo { public: /// Default constructor HotInfo(); /// Constructor from usefull information HotInfo( OsiSolverInterface * solver, const OsiBranchingInformation *info, const OsiObject * const * objects, int whichObject); /// Copy constructor HotInfo(const HotInfo & other); /// Assignment operator HotInfo & operator=(const HotInfo & rhs); /// Clone virtual OsiHotInfo * clone() const; /// Destructor virtual ~HotInfo(); /// Fill in some usefull information after a strong branching is done: int updateInformation( const OsiSolverInterface * solver, const OsiBranchingInformation * info, OsiChooseVariable * choose); /// up infeasibility double upInfeasibility() const{ return infeasibilities_[1]; } /// down infeasibility double downInfeasibility() const{ return infeasibilities_[0]; } /// Set the down infeasibility void setUpInfeasibility(double x){ assert(branchingObject_->numberBranches()==2); infeasibilities_[1] = x; } /// Set the down infeasibility void setDownInfeasibility(double x){ assert(branchingObject_->numberBranches()==2); infeasibilities_[0] = x; } private: /// infeasibilities of children vector infeasibilities_; }; /** This class chooses a variable to branch on This is the base class for the branching rules in Bonmin (inherits from OsiChooseVariable). This class implements a simple strong branching algorithm where the changes in the objective value induced by branching on a specific object are estimated with the pure virtual function fill_changes. */ class BonChooseVariable : public OsiChooseVariable { protected: /** This is a utility function which does strong branching on a list of objects and stores the results in OsiHotInfo.objects. On entry the object sequence is stored in the OsiHotInfo object and maybe more. It returns - -1 - one branch was infeasible both ways 0 - all inspected - nothing can be fixed 1 - all inspected - some can be fixed (returnCriterion==0) 2 - may be returning early - one can be fixed (last one done) (returnCriterion==1) 3 - returning because max time */ virtual int doStrongBranching( OsiSolverInterface * solver, OsiBranchingInformation *info, int numberToDo, int returnCriterion); #ifndef OLD_USEFULLNESS /** Criterion applied to sort candidates.*/ enum CandidateSortCriterion { DecrPs = 0, IncrPs, DecrInfeas, IncrInfeas}; #endif /** Statuses for strong branching candidates.*/ enum StrongStatus{ NotDone=-1, Feasible/** Child is proven feasible.*/, Infeasible /** Child is proven infeasible.*/, NotFinished /** Child is not finished.*/}; public: /** \name Message handling.*/ /** @{ */ enum Messages_Types { PS_COST_HISTORY = 0, PS_COST_MULT, PS_COST_ESTIMATES, CANDIDATE_LIST, CANDIDATE_LIST2, CANDIDATE_LIST3, SB_START, SB_HEADER, SB_RES, BRANCH_VAR, CHOSEN_VAR, UPDATE_PS_COST, BON_CHOOSE_MESSAGES_DUMMY_END }; class Messages : public CoinMessages { public: Messages(); }; void passInMessageHandler(CoinMessageHandler * handler) { int logLevel = handler_->logLevel(); delete handler_; handler_ = handler->clone(); handler_->setLogLevel(logLevel); } CoinMessageHandler& message(Messages_Types type) const { return handler_->message(type, messages_); } /** @} */ enum DoStrongReturnStatuses{ provenInfeasible = -1 /** One branch has two infeasible children.*/, doneNoFixing /** All done no variable can be fixed.*/, doneCanFix /** Several variable can be fixed.*/, interuptedCanFix /** Interrupted and found a variable to fix.*/, maxTime /** Interrupted because of time limit.*/}; /** Return statuses for chooseVariable.*/ enum chooseVariableReturnStatuses{ infeasibleNode = -1/** Node has been proven infeasible.*/, hasCandidate /** Normal termination, found a variable to branch on.*/, feasibleNode /** All variable are feasible, the node is feasible.*/, canFixAndStrongBranch /** Found variable to fix and also has remaining candidate for strong branching.*/, canFixAndBranch/** Found variable to fix and also has a (non-strong) branching candidate.*/, canFixNoCandidate /** Can fix variables but does not have strong branching candidates.*/ }; /// Constructor from solver (so we can set up arrays etc) BonChooseVariable (BabSetupBase& b, const OsiSolverInterface* solver); /// Copy constructor BonChooseVariable (const BonChooseVariable &); /// Assignment operator BonChooseVariable & operator= (const BonChooseVariable& rhs); /// Clone virtual OsiChooseVariable * clone() const; /// Destructor virtual ~BonChooseVariable (); static void registerOptions(Ipopt::SmartPtr roptions); /** Helper functions for setupList and chooseVariable */ double maxminCrit(const OsiBranchingInformation* info) const; void computeMultipliers(double& upMult, double& downMult) const; double computeUsefulness(const double MAXMIN_CRITERION, const double upMult, const double dowMult, const double value, const OsiObject* object, int i, double& value2) const; /** Sets up strong list and clears all if initialize is true. Returns number of infeasibilities. */ virtual int setupList ( OsiBranchingInformation *info, bool initialize); /** Choose a variable Returns - -1 Node is infeasible 0 Normal termination - we have a candidate 1 All looks satisfied - no candidate 2 We can change the bound on a variable - but we also have a strong branching candidate 3 We can change the bound on a variable - but we have a non-strong branching candidate 4 We can change the bound on a variable - no other candidates We can pick up branch from bestObjectIndex() and bestWhichWay() We can pick up a forced branch (can change bound) from firstForcedObjectIndex() and firstForcedWhichWay() If we have a solution then we can pick up from goodObjectiveValue() and goodSolution() If fixVariables is true then 2,3,4 are all really same as problem changed */ virtual int chooseVariable( OsiSolverInterface * solver, OsiBranchingInformation *info, bool fixVariables); /** This is a utility function which does strong branching on a list of objects and stores the results in OsiHotInfo.objects. On entry the object sequence is stored in the OsiHotInfo object and maybe more. It returns - -1 - one branch was infeasible both ways 0 - all inspected - nothing can be fixed 1 - all inspected - some can be fixed (returnCriterion==0) 2 - may be returning early - one can be fixed (last one done) (returnCriterion==1) 3 - returning because max time */ /// Given a candidate fill in useful information e.g. estimates virtual void updateInformation(const OsiBranchingInformation *info, int branch, OsiHotInfo * hotInfo); #if 1 /// Given a branch fill in useful information e.g. estimates virtual void updateInformation( int whichObject, int branch, double changeInObjective, double changeInValue, int status); #endif /** Method for setting CbcModel, which is used to get statusOfSearch */ void setCbcModel(CbcModel* cbc_model) { cbc_model_ = cbc_model; } void setOnlyPseudoWhenTrusted(bool only_pseudo_when_trusted) { only_pseudo_when_trusted_ = only_pseudo_when_trusted; } /** Access to pseudo costs storage.*/ const OsiPseudoCosts & pseudoCosts() const{ return pseudoCosts_;} /** Access to pseudo costs storage.*/ OsiPseudoCosts & pseudoCosts() { return pseudoCosts_;} protected: /// Holding on the a pointer to the journalist Ipopt::SmartPtr jnlst_; /// verbosity level int bb_log_level_; /** Stores strong branching results.*/ vector results_; /** Determine status of strong branching solution.*/ int determineStatus(OsiSolverInterface * solver) const { if (solver->isProvenOptimal()) return 0; // optimal else if (solver->isIterationLimitReached() &&!solver->isDualObjectiveLimitReached()) return 2; // unknown else return 1; // infeasible } private: /** Default Constructor, forbiden for some reason.*/ BonChooseVariable (); /** Global time limit for algorithm. */ double time_limit_; /** Starting time of algorithm.*/ double start_time_; protected: /// CbcModel, used to get status of search CbcModel* cbc_model_; /** Flag indicating whether we don't want to mix strong branching * and pseudo costs during the decision which variable to branch * on */ bool only_pseudo_when_trusted_; /** Number of variables put into the list because there were not * trusted */ int number_not_trusted_; /** Message handler.*/ CoinMessageHandler * handler_; /** Messages.*/ Messages messages_; // ToDo: Make this options /** @name Algoirithmic options */ //@{ /** maxmin weight in branching decision when no solution has been * found yet */ double maxmin_crit_no_sol_; /** maxmin weight in branching decision when no solution has been * found yet */ double maxmin_crit_have_sol_; /** fraction of branching candidates that are not trusted yet */ double setup_pseudo_frac_; /** number of times a branch has to happen so that it is trusted in * setupList */ int numberBeforeTrustedList_; /** number of strong branching points at root node */ int numberStrongRoot_; /** backup of numberStrong_ before Root node solve */ int numberStrongBackup_; /** number of look-ahead strong-branching steps */ int numberLookAhead_; #ifndef OLD_USEFULLNESS /** Criterion to use in setup list.*/ CandidateSortCriterion sortCrit_; #endif /** Always strong branch that many first candidate in the list regardless of numberTrusted.*/ int minNumberStrongBranch_; /** Stores the pseudo costs. */ OsiPseudoCosts pseudoCosts_; /** Wether or not to trust strong branching results for updating pseudo costs.*/ int trustStrongForPseudoCosts_; //@} /** detecting if this is root node */ bool isRootNode(const OsiBranchingInformation *info) const; /** Stores the class name for throwing errors.*/ static const std::string CNAME; }; } #endif Bonmin-releases-1.8.9/Bonmin/src/Algorithms/Branching/BonCurvBranchingSolver.cpp000066400000000000000000000114631436575401300276770ustar00rootroot00000000000000// Copyright (C) 2006, 2007 International Business Machines // Corporation and others. All Rights Reserved. #include "CoinPragma.hpp" #include "BonCurvBranchingSolver.hpp" namespace Bonmin { CurvBranchingSolver::CurvBranchingSolver(OsiTMINLPInterface * solver) : StrongBranchingSolver(solver), orig_d_(NULL), projected_d_(NULL), x_l_orig_(NULL), x_u_orig_(NULL), g_l_orig_(NULL), g_u_orig_(NULL), solution_(NULL), duals_(NULL) {} CurvBranchingSolver::CurvBranchingSolver(const CurvBranchingSolver & rhs) : StrongBranchingSolver(rhs), orig_d_(NULL), projected_d_(NULL), x_l_orig_(NULL), x_u_orig_(NULL), g_l_orig_(NULL), g_u_orig_(NULL), solution_(NULL), duals_(NULL) {} CurvBranchingSolver & CurvBranchingSolver::operator=(const CurvBranchingSolver & rhs) { assert(!x_l_orig_); if (this != &rhs) { StrongBranchingSolver::operator=(rhs); } return *this; } CurvBranchingSolver::~CurvBranchingSolver () { delete [] orig_d_; delete [] projected_d_; delete [] x_l_orig_; delete [] x_u_orig_; delete [] g_l_orig_; delete [] g_u_orig_; delete [] solution_; delete [] duals_; } void CurvBranchingSolver:: markHotStart(OsiTMINLPInterface* tminlp_interface) { if (IsNull(cur_estimator_)) { // Get a curvature estimator cur_estimator_ = new CurvatureEstimator(Jnlst(), Options(), tminlp_interface->problem()); } new_bounds_ = true; new_x_ = true; new_mults_ = true; delete [] solution_; delete [] duals_; solution_ = NULL; duals_ = NULL; numCols_ = tminlp_interface->getNumCols(); numRows_ = tminlp_interface->getNumRows(); solution_ = CoinCopyOfArray(tminlp_interface->problem()->x_sol(), numCols_); duals_ = CoinCopyOfArray(tminlp_interface->problem()->duals_sol(), numRows_ + 2*numCols_); obj_value_ = tminlp_interface->problem()->obj_value(); delete [] orig_d_; delete [] projected_d_; orig_d_ = NULL; projected_d_ = NULL; orig_d_ = new double[numCols_]; projected_d_ = new double[numCols_]; // Get a copy of the current bounds delete [] x_l_orig_; delete [] x_u_orig_; delete [] g_l_orig_; delete [] g_u_orig_; x_l_orig_ = NULL; x_u_orig_ = NULL; g_l_orig_ = NULL; g_u_orig_ = NULL; x_l_orig_ = new Number[numCols_]; x_u_orig_ = new Number[numCols_]; g_l_orig_ = new Number[numRows_]; g_u_orig_ = new Number[numRows_]; #ifndef NDEBUG bool retval = #endif tminlp_interface->problem()-> get_bounds_info(numCols_, x_l_orig_, x_u_orig_, numRows_, g_l_orig_, g_u_orig_); assert(retval); } void CurvBranchingSolver:: unmarkHotStart(OsiTMINLPInterface* tminlp_interface) { // Free memory delete [] solution_; delete [] duals_; solution_ = NULL; duals_ = NULL; delete [] orig_d_; delete [] projected_d_; orig_d_ = NULL; projected_d_ = NULL; delete [] x_l_orig_; delete [] x_u_orig_; delete [] g_l_orig_; delete [] g_u_orig_; x_l_orig_ = NULL; x_u_orig_ = NULL; g_l_orig_ = NULL; g_u_orig_ = NULL; } TNLPSolver::ReturnStatus CurvBranchingSolver:: solveFromHotStart(OsiTMINLPInterface* tminlp_interface) { // return iteration limit reached as status, so that it is // clear we don't have a feasible point TNLPSolver::ReturnStatus retstatus = TNLPSolver::iterationLimit; const double* z_L = duals_; const double* z_U = z_L + numCols_; const double* lam = z_U + numCols_; // get the current points const double* b_L = tminlp_interface->getColLower(); const double* b_U = tminlp_interface->getColUpper(); // Compute the step from the current point to the solution // ToDo: If we know what changes, we can be more efficient for (int i=0; isolution_[i]) { orig_d_[i] = solution_[i]-b_L[i]; } else if (b_U[i]ComputeNullSpaceCurvature( numCols_, solution_, new_x_, x_l_orig_, x_u_orig_, g_l_orig_, g_u_orig_, new_bounds_, z_L, z_U, numRows_, lam, new_mults_, orig_d_, projected_d_, gradLagTd, dTHLagd); if (!retval) { retstatus = TNLPSolver::computationError; } else { new_bounds_ = false; new_x_ = false; new_mults_ = false; const double alpha = 1.0; // Think about this double new_obj_value = obj_value_ + alpha*gradLagTd + 0.5*alpha*alpha*dTHLagd; tminlp_interface->problem()->set_obj_value(new_obj_value); } return retstatus; } } Bonmin-releases-1.8.9/Bonmin/src/Algorithms/Branching/BonCurvBranchingSolver.hpp000066400000000000000000000035331436575401300277030ustar00rootroot00000000000000// Copyright (C) 2006, 2007 International Business Machines // Corporation and others. All Rights Reserved. // // #error "BonCurvBranchingSolver not supported anymore" #ifndef BonCurvBranchingSolver_H #define BonCurvBranchingSolver_H #include "BonStrongBranchingSolver.hpp" #include "BonCurvatureEstimator.hpp" namespace Bonmin { /** Implementation of BonChooseVariable for curvature-based braching. */ class CurvBranchingSolver : public StrongBranchingSolver { public: /// Constructor from solver (so we can set up arrays etc) CurvBranchingSolver (OsiTMINLPInterface * solver); /// Copy constructor CurvBranchingSolver (const CurvBranchingSolver &); /// Assignment operator CurvBranchingSolver & operator= (const CurvBranchingSolver& rhs); /// Destructor virtual ~CurvBranchingSolver (); /// Called to initialize solver before a bunch of strong branching /// solves virtual void markHotStart(OsiTMINLPInterface* tminlp_interface); /// Called to solve the current TMINLP (with changed bound information) virtual TNLPSolver::ReturnStatus solveFromHotStart(OsiTMINLPInterface* tminlp_interface); /// Called after all strong branching solves in a node virtual void unmarkHotStart(OsiTMINLPInterface* tminlp_interface); private: /// Default Constructor CurvBranchingSolver (); SmartPtr cur_estimator_; /** @name Stuff for the curvature estimator */ //@{ bool new_bounds_; bool new_x_; bool new_mults_; double* orig_d_; double* projected_d_; Number* x_l_orig_; Number* x_u_orig_; Number* g_l_orig_; Number* g_u_orig_; //@} /** @name Information about the problem */ //@{ int numCols_; int numRows_; const double* solution_; const double* duals_; double obj_value_; //@} }; } #endif Bonmin-releases-1.8.9/Bonmin/src/Algorithms/Branching/BonLpBranchingSolver.cpp000066400000000000000000000166031436575401300273340ustar00rootroot00000000000000// Copyright (C) 2006, 2007 International Business Machines // Corporation and others. All Rights Reserved. #include "CoinPragma.hpp" #include "BonLpBranchingSolver.hpp" #include "OsiClpSolverInterface.hpp" #include namespace Bonmin { LpBranchingSolver::LpBranchingSolver(BabSetupBase * b) : StrongBranchingSolver(b->nonlinearSolver()), lin_(NULL), warm_(NULL), ecp_(NULL) { Ipopt::SmartPtr tnlp_solver = static_cast (b->nonlinearSolver()->solver()); Ipopt::SmartPtr options = tnlp_solver->options(); options->GetIntegerValue("ecp_max_rounds_strong", maxCuttingPlaneIterations_, b->nonlinearSolver()->prefix()); options->GetNumericValue("ecp_abs_tol_strong", abs_ecp_tol_, b->nonlinearSolver()->prefix()); options->GetNumericValue("ecp_rel_tol_strong", rel_ecp_tol_, b->nonlinearSolver()->prefix()); int dummy; options->GetEnumValue("lp_strong_warmstart_method", dummy, b->nonlinearSolver()->prefix()); warm_start_mode_ = (WarmStartMethod) dummy; } LpBranchingSolver::LpBranchingSolver(const LpBranchingSolver & rhs) : StrongBranchingSolver(rhs), lin_(NULL), warm_(NULL), ecp_(NULL), maxCuttingPlaneIterations_(rhs.maxCuttingPlaneIterations_), abs_ecp_tol_(rhs.abs_ecp_tol_), rel_ecp_tol_(rhs.rel_ecp_tol_), warm_start_mode_(rhs.warm_start_mode_) {} LpBranchingSolver & LpBranchingSolver::operator=(const LpBranchingSolver & rhs) { if (this != &rhs) { StrongBranchingSolver::operator=(rhs); } maxCuttingPlaneIterations_ = rhs.maxCuttingPlaneIterations_; abs_ecp_tol_ = rhs.abs_ecp_tol_; rel_ecp_tol_ = rhs.rel_ecp_tol_; warm_start_mode_ = rhs.warm_start_mode_; // I assume that no LP solver information is ever copied delete lin_; delete warm_; delete ecp_; lin_ = NULL; warm_ = NULL; ecp_ = NULL; return *this; } LpBranchingSolver::~LpBranchingSolver () { delete lin_; delete warm_; delete ecp_; } void LpBranchingSolver:: markHotStart(OsiTMINLPInterface* tminlp_interface) { lin_ = new OsiClpSolverInterface(); tminlp_interface->extractLinearRelaxation(*lin_, tminlp_interface->getColSolution(), true); double cutoff = -DBL_MAX; tminlp_interface->getDblParam(OsiDualObjectiveLimit, cutoff); lin_->setDblParam(OsiDualObjectiveLimit, cutoff); //printf("Cutoff %g # ecp iteration %i\n",cutoff, maxCuttingPlaneIterations_); lin_->messageHandler()->setLogLevel(0); lin_->resolve(); warm_ = lin_->getWarmStart(); //if (maxCuttingPlaneIterations_) // ecp_ = new EcpCuts(tminlp_interface, maxCuttingPlaneIterations_, // abs_ecp_tol_, rel_ecp_tol_, -1.); } void LpBranchingSolver:: unmarkHotStart(OsiTMINLPInterface* tminlp_interface) { // Free memory delete lin_; delete warm_; delete ecp_; lin_ = NULL; warm_ = NULL; ecp_ = NULL; } TNLPSolver::ReturnStatus LpBranchingSolver:: solveFromHotStart(OsiTMINLPInterface* tminlp_interface) { TNLPSolver::ReturnStatus retstatus = TNLPSolver::solvedOptimal; // updated the bounds of the linear solver std::vector diff_low_bnd_index; std::vector diff_low_bnd_value; std::vector diff_up_bnd_index; std::vector diff_up_bnd_value; // Get the bounds. We assume that the bounds in the linear solver // are always the original ones const int numCols = tminlp_interface->getNumCols(); const double* colLow_orig = lin_->getColLower(); const double* colUp_orig = lin_->getColUpper(); const double* colLow = tminlp_interface->getColLower(); const double* colUp = tminlp_interface->getColUpper(); OsiSolverInterface * lin = lin_; // eventualy clone lin_ if(warm_start_mode_ == Clone){ lin = lin_->clone(); // std::cout<<"Cloning it"<setColLower(i,lo); } const double& up = colUp[i]; if (colUp_orig[i] > up) { if(warm_start_mode_ == Basis){ diff_up_bnd_index.push_back(i); diff_up_bnd_value.push_back(colUp_orig[i]); } lin->setColUpper(i,lo); } } if(warm_start_mode_ == Basis){ lin->setWarmStart(warm_); } lin->resolve(); double obj = lin->getObjValue(); bool go_on = true; if (lin->isProvenPrimalInfeasible() || lin->isDualObjectiveLimitReached()) { retstatus = TNLPSolver::provenInfeasible; go_on = false; } else if (lin->isIterationLimitReached()) { retstatus = TNLPSolver::iterationLimit; go_on = false; } else { if (maxCuttingPlaneIterations_ > 0 && go_on) { double violation; obj = ecp_->doEcpRounds(*lin, true, &violation); if (obj == COIN_DBL_MAX) { retstatus = TNLPSolver::provenInfeasible; } else if (violation <= 1e-8) { retstatus = TNLPSolver::solvedOptimal; } } } tminlp_interface->problem()->set_obj_value(obj); tminlp_interface->problem()->Set_x_sol(numCols, lin_->getColSolution()); //restore the original bounds if(warm_start_mode_ == Basis){ for (unsigned int i = 0; i < diff_low_bnd_index.size(); i++) { lin_->setColLower(diff_low_bnd_index[i],diff_low_bnd_value[i]); } for (unsigned int i = 0; i < diff_up_bnd_index.size(); i++) { lin_->setColUpper(diff_up_bnd_index[i],diff_up_bnd_value[i]); } } else { delete lin; } return retstatus; } void LpBranchingSolver::registerOptions(Ipopt::SmartPtr roptions) { roptions->SetRegisteringCategory("ECP based strong branching",RegisteredOptions::UndocumentedCategory); roptions->AddLowerBoundedIntegerOption ("ecp_max_rounds_strong", "Set the maximal number of rounds of ECP cuts in strong branching.", 0,0, ""); roptions->setOptionExtraInfo("ecp_max_rounds_strong",63); roptions->AddLowerBoundedNumberOption ("ecp_abs_tol_strong", "Set the absolute termination tolerance for ECP rounds in strong branching.", 0,false,1e-6, ""); roptions->setOptionExtraInfo("ecp_abs_tol_strong",63); roptions->AddLowerBoundedNumberOption ("ecp_rel_tol_strong", "Set the relative termination tolerance for ECP rounds in strong branching.", 0,false,1e-1, ""); roptions->setOptionExtraInfo("ecp_rel_tol_strong",63); roptions->AddStringOption2 ("lp_strong_warmstart_method", "Choose method to use for warm starting lp in strong branching", "Basis", "Basis", "Use optimal basis of node", "Clone", "Clone optimal problem of node", "(Advanced stuff)"); roptions->setOptionExtraInfo("lp_strong_warmstart_method",63); } } Bonmin-releases-1.8.9/Bonmin/src/Algorithms/Branching/BonLpBranchingSolver.hpp000066400000000000000000000036631436575401300273430ustar00rootroot00000000000000// Copyright (C) 2006, 2007 International Business Machines // Corporation and others. All Rights Reserved. #ifndef BonLpBranchingSolver_H #define BonLpBranchingSolver_H #include "BonStrongBranchingSolver.hpp" #include "BonEcpCuts.hpp" namespace Bonmin { /** Implementation of BonChooseVariable for curvature-based braching. */ class LpBranchingSolver : public StrongBranchingSolver { public: /// Constructor from setup LpBranchingSolver (BabSetupBase *b); /// Copy constructor LpBranchingSolver (const LpBranchingSolver &); /// Assignment operator LpBranchingSolver & operator= (const LpBranchingSolver& rhs); /// Destructor virtual ~LpBranchingSolver (); /// Called to initialize solver before a bunch of strong branching /// solves virtual void markHotStart(OsiTMINLPInterface* tminlp_interface); /// Called to solve the current TMINLP (with changed bound information) virtual TNLPSolver::ReturnStatus solveFromHotStart(OsiTMINLPInterface* tminlp_interface); /// Called after all strong branching solves in a node virtual void unmarkHotStart(OsiTMINLPInterface* tminlp_interface); void setMaxCuttingPlaneIter(int num) { maxCuttingPlaneIterations_ = num; } static void registerOptions(Ipopt::SmartPtr roptions); private: /// Default Constructor LpBranchingSolver (); /// Linear solver OsiSolverInterface* lin_; /// Warm start object for linear solver CoinWarmStart* warm_; /// Ecp cut generate EcpCuts* ecp_; /// Number of maximal ECP cuts int maxCuttingPlaneIterations_; /// absolute tolerance for ECP cuts double abs_ecp_tol_; /// relative tolerance for ECP cuts double rel_ecp_tol_; enum WarmStartMethod { Basis=0 /** Use basis*/, Clone /** clone problem*/ }; /// Way problems are warm started WarmStartMethod warm_start_mode_; }; } #endif Bonmin-releases-1.8.9/Bonmin/src/Algorithms/Branching/BonPseudoCosts.cpp000066400000000000000000000013061436575401300262170ustar00rootroot00000000000000// (C) Copyright International Business Machines Corporation 2007 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // Pierre Bonami, International Business Machines Corporation // // Date : 04/12/2007 #include "BonPseudoCosts.hpp" namespace Bonmin { PseudoCosts::PseudoCosts(): OsiPseudoCosts() { } /** Copy constructor.*/ PseudoCosts::PseudoCosts(const PseudoCosts & rhs): OsiPseudoCosts(rhs) { } /** Assignment operator const version.*/ PseudoCosts & PseudoCosts::operator=(const PseudoCosts&rhs) { if (this != &rhs) { OsiPseudoCosts::operator=(rhs); } return *this; } }/* End Bonmin namespace.*/ Bonmin-releases-1.8.9/Bonmin/src/Algorithms/Branching/BonPseudoCosts.hpp000066400000000000000000000034541436575401300262320ustar00rootroot00000000000000// (C) Copyright International Business Machines Corporation 2007 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // Pierre Bonami, International Business Machines Corporation // // Date : 04/12/2007 #ifndef BonPseudoCosts_H #define BonPseudoCosts_H #include "OsiChooseVariable.hpp" namespace Bonmin { class PseudoCosts: public OsiPseudoCosts { public: /** Default constructor.*/ PseudoCosts(); /** Copy constructor.*/ PseudoCosts(const PseudoCosts & rhs); /** Assignment operator const version.*/ PseudoCosts & operator=(const PseudoCosts&rhs); #if 0 /** Acces upTotalChange.*/ inline double * upTotalChange() { return upTotalChange_; } /** Acces downTotalChange.*/ inline double * downTotalChange() { return downTotalChange_; } /** Acces upNumber.*/ inline int * upNumber() { return upNumber_; } /** Acces downNumber.*/ inline int * downNumber() { return downNumber_; } /** Acces upTotalChange.*/ inline const double * upTotalChange() const { return upTotalChange_; } /** Acces downTotalChange.*/ inline const double * downTotalChange() const { return downTotalChange_; } /** Acces upNumber.*/ inline const int * upNumber() const { return upNumber_; } /** Acces downNumber.*/ inline const int * downNumber() const { return downNumber_; } /** Access number objects.*/ inline int numberObjects() const { return numberObjects_; } #endif /** Add a pseudo cost information.*/ void addInfo(int way, double originalObj, double originalInfeas, double newObj, double newInfeas, int status); }; }/* End Bonmin namespace.*/ #endif Bonmin-releases-1.8.9/Bonmin/src/Algorithms/Branching/BonQpBranchingSolver.cpp000066400000000000000000000064751436575401300273470ustar00rootroot00000000000000// Copyright (C) 2006, 2008 International Business Machines // Corporation and others. All Rights Reserved. // Authors: Andreas Waechter, Pierre Bonami #include "BonminConfig.h" #include "CoinPragma.hpp" #define Verbose #include "BonQpBranchingSolver.hpp" #ifdef COIN_HAS_FILTERSQP #include "BonFilterSolver.hpp" #include "BonBqpdSolver.hpp" #endif namespace Bonmin { QpBranchingSolver::QpBranchingSolver(OsiTMINLPInterface * solver) : StrongBranchingSolver(solver) {} QpBranchingSolver::QpBranchingSolver(const QpBranchingSolver & rhs) : StrongBranchingSolver(rhs) {} QpBranchingSolver & QpBranchingSolver::operator=(const QpBranchingSolver & rhs) { if (this != &rhs) { StrongBranchingSolver::operator=(rhs); } return *this; } QpBranchingSolver::~QpBranchingSolver () { #ifdef TIME_BQPD printf("QPBRANCH Timings for %i sbs\n", times_.numsolve); printf("QPBRANCH %i pivots\n", times_.pivots); printf("QPBRANCH Creating : %g\n", times_.create); printf("QPBRANCH Solving : %g\n", times_.solve); printf("QPBRANCH Warming : %g\n", times_.warm_start); printf("QPBRANCH Resolving : %g\n", times_.resolve); #endif } void QpBranchingSolver:: markHotStart(OsiTMINLPInterface* tminlp_interface) { TMINLP2TNLP* tminlp2tnlp = tminlp_interface->problem(); branching_tqp_ = new BranchingTQP(tminlp2tnlp); first_solve_ = true; #ifdef COIN_HAS_FILTERSQP FilterSolver* filter_solver = dynamic_cast (tminlp_interface->solver()); if (filter_solver) { Ipopt::SmartPtr qp_solver = new BqpdSolver(RegOptions(), Options(), Jnlst(), tminlp_interface->prefix()); #if 1 // Solve the QP with the original bounds and set the hot start // information TNLPSolver::ReturnStatus retstatus; retstatus = qp_solver->OptimizeTNLP(GetRawPtr(branching_tqp_)); if (retstatus == TNLPSolver::solvedOptimal || retstatus == TNLPSolver::solvedOptimalTol) { first_solve_ = false; qp_solver->markHotStart(); } #endif tqp_solver_ = GetRawPtr(qp_solver); //tqp_solver_ = new FilterSolver(RegOptions(), Options(), Jnlst()); } #endif if (IsNull(tqp_solver_)) { tqp_solver_ = tminlp_interface->solver()->clone(); } tqp_solver_->enableWarmStart(); } void QpBranchingSolver:: unmarkHotStart(OsiTMINLPInterface* tminlp_interface) { // Free memory #ifdef TIME_BQPD BqpdSolver * qp_solver = dynamic_cast(GetRawPtr(tqp_solver_)); if(qp_solver) times_ += qp_solver->times(); #endif branching_tqp_ = NULL; tqp_solver_ = NULL; } TNLPSolver::ReturnStatus QpBranchingSolver:: solveFromHotStart(OsiTMINLPInterface* tminlp_interface) { TNLPSolver::ReturnStatus retstatus; if (first_solve_) { retstatus = tqp_solver_->OptimizeTNLP(GetRawPtr(branching_tqp_)); } else { retstatus = tqp_solver_->ReOptimizeTNLP(GetRawPtr(branching_tqp_)); } if (retstatus == TNLPSolver::solvedOptimal || retstatus == TNLPSolver::solvedOptimalTol) { // don't way we solve the problem, since otherwise the pseudo costs // are updated and that is maybe not so good??? //retstatus = TNLPSolver::iterationLimit; first_solve_ = false; } //retstatus = TNLPSolver::iterationLimit; return retstatus; } } Bonmin-releases-1.8.9/Bonmin/src/Algorithms/Branching/BonQpBranchingSolver.hpp000066400000000000000000000031751436575401300273460ustar00rootroot00000000000000// Copyright (C) 2007, International Business Machines // Corporation and others. All Rights Reserved. #ifndef BonQpBranchingSolver_H #define BonQpBranchingSolver_H #include "BonminConfig.h" #include "BonStrongBranchingSolver.hpp" #include "BonBranchingTQP.hpp" #ifdef COIN_HAS_FILTERSQP #include "BonFilterSolver.hpp" #include "BonBqpdSolver.hpp" #endif namespace Bonmin { /** This class chooses a variable to branch on This implementation solves the Qp model for different branches (strong branching). */ class QpBranchingSolver : public StrongBranchingSolver { public: /// Constructor from solver (so we can set up arrays etc) QpBranchingSolver (OsiTMINLPInterface * solver); /// Copy constructor QpBranchingSolver (const QpBranchingSolver &); /// Assignment operator QpBranchingSolver & operator= (const QpBranchingSolver& rhs); /// Destructor virtual ~QpBranchingSolver (); /// Called to initialize solver before a bunch of strong branching /// solves virtual void markHotStart(OsiTMINLPInterface* tminlp_interface); /// Called to solve the current TMINLP (with changed bound information) virtual TNLPSolver::ReturnStatus solveFromHotStart(OsiTMINLPInterface* tminlp_interface); /// Called after all strong branching solves in a node virtual void unmarkHotStart(OsiTMINLPInterface* tminlp_interface); private: /// Default Constructor QpBranchingSolver (); Ipopt::SmartPtr branching_tqp_; Ipopt::SmartPtr tqp_solver_; #ifdef TIME_BQPD BqpdSolver::Times times_; #endif bool first_solve_; }; } #endif Bonmin-releases-1.8.9/Bonmin/src/Algorithms/Branching/BonRandomChoice.cpp000066400000000000000000000030301436575401300262730ustar00rootroot00000000000000// (C) Copyright CNRS 2008 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // Pierre Bonami, LIF, CNRS-Marseille Universites. // // Date : 03/17/2008 #include "BonRandomChoice.hpp" #include "BonminConfig.h" #include "CoinFinite.hpp" int BonRandomChoice::setupList(OsiBranchingInformation * info, bool initialize){ if (initialize) { status_=-2; delete [] goodSolution_; bestObjectIndex_=-1; numberStrongDone_=0; numberStrongIterations_ = 0; numberStrongFixed_ = 0; goodSolution_ = NULL; goodObjectiveValue_ = COIN_DBL_MAX; numberOnList_=0; } numberUnsatisfied_=0; int numberObjects = solver_->numberObjects(); assert (numberObjects); int bestPriority=COIN_INT_MAX; std::fill(list_, list_+numberObjects, -1); OsiObject ** object = info->solver_->objects(); // Say feasible //bool feasible = true; for (int i=0;iinfeasibility(info,way); if (value>0.0) { if (value==COIN_DBL_MAX) { // infeasible //feasible=false; break; } int priorityLevel = object[i]->priority(); // Better priority? Flush choices. if (priorityLevel #include class BonRandomChoice : public OsiChooseVariable { public: ///Default constructor BonRandomChoice(): OsiChooseVariable(){ } //Constructor from solver BonRandomChoice(const OsiSolverInterface * solver): OsiChooseVariable(solver){ } // Copy constructor BonRandomChoice(const BonRandomChoice &other): OsiChooseVariable(other){ } // Assignment operator BonRandomChoice & operator=(const BonRandomChoice &rhs){ OsiChooseVariable::operator=(rhs); return (*this); } // Virtual copy virtual OsiChooseVariable * clone() const{ return new BonRandomChoice(*this); } /// Destructor virtual ~BonRandomChoice(){ } /** Own version of setupList since Osi version is broken and what we want to do here is anyway much simpler.*/ virtual int setupList(OsiBranchingInformation * info, bool initialize); virtual int chooseVariable( OsiSolverInterface * solver, OsiBranchingInformation * info, bool fixVariables){ if(numberUnsatisfied_){ int chosen = (int) (floor(CoinDrand48() * (numberUnsatisfied_))); bestObjectIndex_ = list_[chosen]; bestWhichWay_ = solver->object(bestObjectIndex_)->whichWay(); firstForcedObjectIndex_ = -1; firstForcedWhichWay_ =-1; return 0; } else { return 1; } } }; #endif Bonmin-releases-1.8.9/Bonmin/src/Algorithms/Branching/Makefile.am000066400000000000000000000061361436575401300246430ustar00rootroot00000000000000# Copyright (C) 2006, 2007 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 433 2007-03-28 05:01:22Z andreasw $ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign # Name of the library in this directory noinst_LTLIBRARIES = libbonbranching.la ######################################################################## # bonmin library # ######################################################################## # List all source files, including headers libbonbranching_la_SOURCES = \ BonChooseVariable.cpp BonChooseVariable.hpp \ BonRandomChoice.cpp BonRandomChoice.hpp \ BonPseudoCosts.cpp BonPseudoCosts.hpp \ BonLpBranchingSolver.cpp BonLpBranchingSolver.hpp \ BonQpBranchingSolver.cpp BonQpBranchingSolver.hpp # This is for libtool libbonbranching_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows AM_CPPFLAGS = \ -I`$(CYGPATH_W) $(srcdir)/../OaGenerators` \ -I`$(CYGPATH_W) $(srcdir)/..` \ -I`$(CYGPATH_W) $(srcdir)/../../CbcBonmin` \ -I`$(CYGPATH_W) $(srcdir)/../../Interfaces` \ -I`$(CYGPATH_W) $(srcdir)/../../Interfaces/Ipopt` \ -I`$(CYGPATH_W) $(srcdir)/../../Interfaces/Filter` \ $(BONMINLIB_CFLAGS) # Currently, the following has to be included for BonChooseVariable.hpp, but # we should try to unmangle the connection to Cbc #AM_CPPFLAGS += -I`$(CYGPATH_W) $(srcdir)/../../CbcBonmin` # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Interfaces ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = \ BonChooseVariable.hpp \ BonPseudoCosts.hpp \ BonCurvBranchingSolver.hpp \ BonLpBranchingSolver.hpp ######################################################################## # Astyle stuff # ######################################################################## # Here repeat all source files, with "bak" appended ASTYLE_FILES = \ BonChooseVariable.cppbak BonChooseVariable.hppbak \ BonPseudoCosts.cppbak BonPseudoCosts.hppbak \ BonQpBranchingSolver.cppbak BonQpBranchingSolver.hppbak \ BonCurvBranchingSolver.cppbak BonCurvBranchingSolver.hppbak \ BonLpBranchingSolver.hppbak BonLpBranchingSolver.cppbak ASTYLE = @ASTYLE@ ASTYLEFLAGS = @ASTYLEFLAGS@ CLEANFILES = $(ASTYLE_FILES) SUFFIXES = .cppbak .hppbak astyle: $(ASTYLE_FILES) .hpp.hppbak: mv $< $@ $(ASTYLE) $(ASTYLEFLAGS) < $@ > $< touch $@ .cpp.cppbak: mv $< $@ $(ASTYLE) $(ASTYLEFLAGS) < $@ > $< touch $@ Bonmin-releases-1.8.9/Bonmin/src/Algorithms/Branching/Makefile.in000066400000000000000000000553711436575401300246610ustar00rootroot00000000000000# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2006, 2007 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/Algorithms/Branching DIST_COMMON = $(includecoin_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/Interfaces/config.h \ $(top_builddir)/src/Interfaces/config_bonmin.h CONFIG_CLEAN_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libbonbranching_la_LIBADD = am_libbonbranching_la_OBJECTS = BonChooseVariable.lo \ BonRandomChoice.lo BonPseudoCosts.lo BonLpBranchingSolver.lo \ BonQpBranchingSolver.lo libbonbranching_la_OBJECTS = $(am_libbonbranching_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 = $(libbonbranching_la_SOURCES) DIST_SOURCES = $(libbonbranching_la_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)$(includecoindir)" 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@ ASL_CFLAGS = @ASL_CFLAGS@ ASL_CFLAGS_INSTALLED = @ASL_CFLAGS_INSTALLED@ ASL_DATA = @ASL_DATA@ ASL_DATA_INSTALLED = @ASL_DATA_INSTALLED@ ASL_DEPENDENCIES = @ASL_DEPENDENCIES@ ASL_LIBS = @ASL_LIBS@ ASL_LIBS_INSTALLED = @ASL_LIBS_INSTALLED@ ASTYLE = @ASTYLE@ ASTYLEFLAGS = @ASTYLEFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BONMINAMPLINTERFACELIB_CFLAGS = @BONMINAMPLINTERFACELIB_CFLAGS@ BONMINAMPLINTERFACELIB_CFLAGS_INSTALLED = @BONMINAMPLINTERFACELIB_CFLAGS_INSTALLED@ BONMINAMPLINTERFACELIB_DEPENDENCIES = @BONMINAMPLINTERFACELIB_DEPENDENCIES@ BONMINAMPLINTERFACELIB_LIBS = @BONMINAMPLINTERFACELIB_LIBS@ BONMINAMPLINTERFACELIB_LIBS_INSTALLED = @BONMINAMPLINTERFACELIB_LIBS_INSTALLED@ BONMINAMPLINTERFACELIB_PCLIBS = @BONMINAMPLINTERFACELIB_PCLIBS@ BONMINAMPLINTERFACELIB_PCREQUIRES = @BONMINAMPLINTERFACELIB_PCREQUIRES@ BONMINLIB_CFLAGS = @BONMINLIB_CFLAGS@ BONMINLIB_CFLAGS_INSTALLED = @BONMINLIB_CFLAGS_INSTALLED@ BONMINLIB_DEPENDENCIES = @BONMINLIB_DEPENDENCIES@ BONMINLIB_LIBS = @BONMINLIB_LIBS@ BONMINLIB_LIBS_INSTALLED = @BONMINLIB_LIBS_INSTALLED@ BONMINLIB_PCLIBS = @BONMINLIB_PCLIBS@ BONMINLIB_PCREQUIRES = @BONMINLIB_PCREQUIRES@ BONMIN_SVN_REV = @BONMIN_SVN_REV@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINDEPEND_CFLAGS = @COINDEPEND_CFLAGS@ COINDEPEND_CFLAGS_INSTALLED = @COINDEPEND_CFLAGS_INSTALLED@ COINDEPEND_DATA = @COINDEPEND_DATA@ COINDEPEND_DATA_INSTALLED = @COINDEPEND_DATA_INSTALLED@ COINDEPEND_DEPENDENCIES = @COINDEPEND_DEPENDENCIES@ COINDEPEND_LIBS = @COINDEPEND_LIBS@ COINDEPEND_LIBS_INSTALLED = @COINDEPEND_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_ASL_FALSE = @COIN_HAS_ASL_FALSE@ COIN_HAS_ASL_TRUE = @COIN_HAS_ASL_TRUE@ COIN_HAS_COINDEPEND_FALSE = @COIN_HAS_COINDEPEND_FALSE@ COIN_HAS_COINDEPEND_TRUE = @COIN_HAS_COINDEPEND_TRUE@ COIN_HAS_CPX_FALSE = @COIN_HAS_CPX_FALSE@ COIN_HAS_CPX_TRUE = @COIN_HAS_CPX_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_FILTERSQP_FALSE = @COIN_HAS_FILTERSQP_FALSE@ COIN_HAS_FILTERSQP_TRUE = @COIN_HAS_FILTERSQP_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_OSICPX_FALSE = @COIN_HAS_OSICPX_FALSE@ COIN_HAS_OSICPX_TRUE = @COIN_HAS_OSICPX_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPXINCDIR = @CPXINCDIR@ CPXLIB = @CPXLIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ 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@ FILTERSQP_CFLAGS = @FILTERSQP_CFLAGS@ FILTERSQP_CFLAGS_INSTALLED = @FILTERSQP_CFLAGS_INSTALLED@ FILTERSQP_DATA = @FILTERSQP_DATA@ FILTERSQP_DATA_INSTALLED = @FILTERSQP_DATA_INSTALLED@ FILTERSQP_DEPENDENCIES = @FILTERSQP_DEPENDENCIES@ FILTERSQP_LIBS = @FILTERSQP_LIBS@ FILTERSQP_LIBS_INSTALLED = @FILTERSQP_LIBS_INSTALLED@ FLIBS = @FLIBS@ 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@ OSICPX_CFLAGS = @OSICPX_CFLAGS@ OSICPX_CFLAGS_INSTALLED = @OSICPX_CFLAGS_INSTALLED@ OSICPX_DATA = @OSICPX_DATA@ OSICPX_DATA_INSTALLED = @OSICPX_DATA_INSTALLED@ OSICPX_DEPENDENCIES = @OSICPX_DEPENDENCIES@ OSICPX_LIBS = @OSICPX_LIBS@ OSICPX_LIBS_INSTALLED = @OSICPX_LIBS_INSTALLED@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ 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@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ dos2unix = @dos2unix@ 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 # Name of the library in this directory noinst_LTLIBRARIES = libbonbranching.la ######################################################################## # bonmin library # ######################################################################## # List all source files, including headers libbonbranching_la_SOURCES = \ BonChooseVariable.cpp BonChooseVariable.hpp \ BonRandomChoice.cpp BonRandomChoice.hpp \ BonPseudoCosts.cpp BonPseudoCosts.hpp \ BonLpBranchingSolver.cpp BonLpBranchingSolver.hpp \ BonQpBranchingSolver.cpp BonQpBranchingSolver.hpp # This is for libtool libbonbranching_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows AM_CPPFLAGS = \ -I`$(CYGPATH_W) $(srcdir)/../OaGenerators` \ -I`$(CYGPATH_W) $(srcdir)/..` \ -I`$(CYGPATH_W) $(srcdir)/../../CbcBonmin` \ -I`$(CYGPATH_W) $(srcdir)/../../Interfaces` \ -I`$(CYGPATH_W) $(srcdir)/../../Interfaces/Ipopt` \ -I`$(CYGPATH_W) $(srcdir)/../../Interfaces/Filter` \ $(BONMINLIB_CFLAGS) # Currently, the following has to be included for BonChooseVariable.hpp, but # we should try to unmangle the connection to Cbc #AM_CPPFLAGS += -I`$(CYGPATH_W) $(srcdir)/../../CbcBonmin` # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Interfaces ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = \ BonChooseVariable.hpp \ BonPseudoCosts.hpp \ BonCurvBranchingSolver.hpp \ BonLpBranchingSolver.hpp ######################################################################## # Astyle stuff # ######################################################################## # Here repeat all source files, with "bak" appended ASTYLE_FILES = \ BonChooseVariable.cppbak BonChooseVariable.hppbak \ BonPseudoCosts.cppbak BonPseudoCosts.hppbak \ BonQpBranchingSolver.cppbak BonQpBranchingSolver.hppbak \ BonCurvBranchingSolver.cppbak BonCurvBranchingSolver.hppbak \ BonLpBranchingSolver.hppbak BonLpBranchingSolver.cppbak CLEANFILES = $(ASTYLE_FILES) SUFFIXES = .cppbak .hppbak all: all-am .SUFFIXES: .SUFFIXES: .cppbak .hppbak .cpp .hpp .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/Algorithms/Branching/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign src/Algorithms/Branching/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-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_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 libbonbranching.la: $(libbonbranching_la_OBJECTS) $(libbonbranching_la_DEPENDENCIES) $(CXXLINK) $(libbonbranching_la_LDFLAGS) $(libbonbranching_la_OBJECTS) $(libbonbranching_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BonChooseVariable.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BonLpBranchingSolver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BonPseudoCosts.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BonQpBranchingSolver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BonRandomChoice.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: install-includecoinHEADERS: $(includecoin_HEADERS) @$(NORMAL_INSTALL) test -z "$(includecoindir)" || $(mkdir_p) "$(DESTDIR)$(includecoindir)" @list='$(includecoin_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(includecoinHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includecoindir)/$$f'"; \ $(includecoinHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includecoindir)/$$f"; \ done uninstall-includecoinHEADERS: @$(NORMAL_UNINSTALL) @list='$(includecoin_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(includecoindir)/$$f'"; \ rm -f "$(DESTDIR)$(includecoindir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(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: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) 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-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-includecoinHEADERS install-exec-am: install-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 .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-exec \ install-exec-am install-includecoinHEADERS install-info \ install-info-am install-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 astyle: $(ASTYLE_FILES) .hpp.hppbak: mv $< $@ $(ASTYLE) $(ASTYLEFLAGS) < $@ > $< touch $@ .cpp.cppbak: mv $< $@ $(ASTYLE) $(ASTYLEFLAGS) < $@ > $< touch $@ # 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: Bonmin-releases-1.8.9/Bonmin/src/Algorithms/Makefile.am000066400000000000000000000066271436575401300227550ustar00rootroot00000000000000# Copyright (C) 2006, 2007 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 433 2007-03-28 05:01:22Z andreasw $ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign # Name of the library in this directory SUBDIRS = \ OaGenerators \ Branching \ QuadCuts if COIN_HAS_ASL SUBDIRS += Ampl endif noinst_LTLIBRARIES = libbonalgorithms.la ######################################################################## # bonmin library # ######################################################################## # List all source files, including headers libbonalgorithms_la_SOURCES = \ BonBabSetupBase.cpp BonBabSetupBase.hpp \ BonBonminSetup.cpp BonBonminSetup.hpp \ BonSubMipSolver.cpp BonSubMipSolver.hpp \ BonCbcLpStrategy.cpp BonCbcLpStrategy.hpp \ BonSolverHelp.cpp BonSolverHelp.hpp libbonalgorithms_la_LIBADD = Branching/libbonbranching.la libbonalgorithms_la_LIBADD += OaGenerators/libbonoagenerators.la libbonalgorithms_la_LIBADD += QuadCuts/libbonquadcuts.la libbonalgorithms_la_DEPENDENCIES = $(libbonalgorithms_la_LIBADD) # This is for libtool libbonalgorithms_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows AM_CPPFLAGS = \ -I`$(CYGPATH_W) $(srcdir)/Branching` \ -I`$(CYGPATH_W) $(srcdir)/QuadCuts` \ -I`$(CYGPATH_W) $(srcdir)/OaGenerators` \ -I`$(CYGPATH_W) $(srcdir)/../CbcBonmin` \ -I`$(CYGPATH_W) $(srcdir)/../CbcBonmin/Heuristics` \ -I`$(CYGPATH_W) $(srcdir)/../Interfaces` \ -I`$(CYGPATH_W) $(srcdir)/../Interfaces/Ipopt` \ -I`$(CYGPATH_W) $(srcdir)/../Interfaces/Filter` \ $(BONMINLIB_CFLAGS) # BonSubMipSolver.cpp needs to include cplex.h if COIN_HAS_CPX AM_CPPFLAGS += -I`$(CYGPATH_W) $(CPXINCDIR)` endif # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Interfaces ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = \ BonBabSetupBase.hpp \ BonSubMipSolver.hpp \ BonCbcLpStrategy.hpp \ BonBonminSetup.hpp ######################################################################## # Astyle stuff # ######################################################################## # Here repeat all source files, with "bak" appended ASTYLE_FILES = \ BonBabSetupBase.cppbak \ BonBabSetupBase.hppbak \ BonBonminSetup.cppbak \ BonCbcLpStrategy.cppbak BonCbcLpStrategy.hppbak \ BonBonminSetup.hppbak ASTYLE = @ASTYLE@ ASTYLEFLAGS = @ASTYLEFLAGS@ CLEANFILES = $(ASTYLE_FILES) SUFFIXES = .cppbak .hppbak astyle: $(ASTYLE_FILES) .hpp.hppbak: mv $< $@ $(ASTYLE) $(ASTYLEFLAGS) < $@ > $< touch $@ .cpp.cppbak: mv $< $@ $(ASTYLE) $(ASTYLEFLAGS) < $@ > $< touch $@ Bonmin-releases-1.8.9/Bonmin/src/Algorithms/Makefile.in000066400000000000000000000652601436575401300227640ustar00rootroot00000000000000# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2006, 2007 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @COIN_HAS_ASL_TRUE@am__append_1 = Ampl # BonSubMipSolver.cpp needs to include cplex.h @COIN_HAS_CPX_TRUE@am__append_2 = -I`$(CYGPATH_W) $(CPXINCDIR)` subdir = src/Algorithms DIST_COMMON = $(includecoin_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/Interfaces/config.h \ $(top_builddir)/src/Interfaces/config_bonmin.h CONFIG_CLEAN_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) am_libbonalgorithms_la_OBJECTS = BonBabSetupBase.lo BonBonminSetup.lo \ BonSubMipSolver.lo BonCbcLpStrategy.lo BonSolverHelp.lo libbonalgorithms_la_OBJECTS = $(am_libbonalgorithms_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 = $(libbonalgorithms_la_SOURCES) DIST_SOURCES = $(libbonalgorithms_la_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)$(includecoindir)" includecoinHEADERS_INSTALL = $(INSTALL_HEADER) HEADERS = $(includecoin_HEADERS) ETAGS = etags CTAGS = ctags DIST_SUBDIRS = OaGenerators Branching QuadCuts Ampl 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@ ASL_CFLAGS = @ASL_CFLAGS@ ASL_CFLAGS_INSTALLED = @ASL_CFLAGS_INSTALLED@ ASL_DATA = @ASL_DATA@ ASL_DATA_INSTALLED = @ASL_DATA_INSTALLED@ ASL_DEPENDENCIES = @ASL_DEPENDENCIES@ ASL_LIBS = @ASL_LIBS@ ASL_LIBS_INSTALLED = @ASL_LIBS_INSTALLED@ ASTYLE = @ASTYLE@ ASTYLEFLAGS = @ASTYLEFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BONMINAMPLINTERFACELIB_CFLAGS = @BONMINAMPLINTERFACELIB_CFLAGS@ BONMINAMPLINTERFACELIB_CFLAGS_INSTALLED = @BONMINAMPLINTERFACELIB_CFLAGS_INSTALLED@ BONMINAMPLINTERFACELIB_DEPENDENCIES = @BONMINAMPLINTERFACELIB_DEPENDENCIES@ BONMINAMPLINTERFACELIB_LIBS = @BONMINAMPLINTERFACELIB_LIBS@ BONMINAMPLINTERFACELIB_LIBS_INSTALLED = @BONMINAMPLINTERFACELIB_LIBS_INSTALLED@ BONMINAMPLINTERFACELIB_PCLIBS = @BONMINAMPLINTERFACELIB_PCLIBS@ BONMINAMPLINTERFACELIB_PCREQUIRES = @BONMINAMPLINTERFACELIB_PCREQUIRES@ BONMINLIB_CFLAGS = @BONMINLIB_CFLAGS@ BONMINLIB_CFLAGS_INSTALLED = @BONMINLIB_CFLAGS_INSTALLED@ BONMINLIB_DEPENDENCIES = @BONMINLIB_DEPENDENCIES@ BONMINLIB_LIBS = @BONMINLIB_LIBS@ BONMINLIB_LIBS_INSTALLED = @BONMINLIB_LIBS_INSTALLED@ BONMINLIB_PCLIBS = @BONMINLIB_PCLIBS@ BONMINLIB_PCREQUIRES = @BONMINLIB_PCREQUIRES@ BONMIN_SVN_REV = @BONMIN_SVN_REV@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINDEPEND_CFLAGS = @COINDEPEND_CFLAGS@ COINDEPEND_CFLAGS_INSTALLED = @COINDEPEND_CFLAGS_INSTALLED@ COINDEPEND_DATA = @COINDEPEND_DATA@ COINDEPEND_DATA_INSTALLED = @COINDEPEND_DATA_INSTALLED@ COINDEPEND_DEPENDENCIES = @COINDEPEND_DEPENDENCIES@ COINDEPEND_LIBS = @COINDEPEND_LIBS@ COINDEPEND_LIBS_INSTALLED = @COINDEPEND_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_ASL_FALSE = @COIN_HAS_ASL_FALSE@ COIN_HAS_ASL_TRUE = @COIN_HAS_ASL_TRUE@ COIN_HAS_COINDEPEND_FALSE = @COIN_HAS_COINDEPEND_FALSE@ COIN_HAS_COINDEPEND_TRUE = @COIN_HAS_COINDEPEND_TRUE@ COIN_HAS_CPX_FALSE = @COIN_HAS_CPX_FALSE@ COIN_HAS_CPX_TRUE = @COIN_HAS_CPX_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_FILTERSQP_FALSE = @COIN_HAS_FILTERSQP_FALSE@ COIN_HAS_FILTERSQP_TRUE = @COIN_HAS_FILTERSQP_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_OSICPX_FALSE = @COIN_HAS_OSICPX_FALSE@ COIN_HAS_OSICPX_TRUE = @COIN_HAS_OSICPX_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPXINCDIR = @CPXINCDIR@ CPXLIB = @CPXLIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ 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@ FILTERSQP_CFLAGS = @FILTERSQP_CFLAGS@ FILTERSQP_CFLAGS_INSTALLED = @FILTERSQP_CFLAGS_INSTALLED@ FILTERSQP_DATA = @FILTERSQP_DATA@ FILTERSQP_DATA_INSTALLED = @FILTERSQP_DATA_INSTALLED@ FILTERSQP_DEPENDENCIES = @FILTERSQP_DEPENDENCIES@ FILTERSQP_LIBS = @FILTERSQP_LIBS@ FILTERSQP_LIBS_INSTALLED = @FILTERSQP_LIBS_INSTALLED@ FLIBS = @FLIBS@ 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@ OSICPX_CFLAGS = @OSICPX_CFLAGS@ OSICPX_CFLAGS_INSTALLED = @OSICPX_CFLAGS_INSTALLED@ OSICPX_DATA = @OSICPX_DATA@ OSICPX_DATA_INSTALLED = @OSICPX_DATA_INSTALLED@ OSICPX_DEPENDENCIES = @OSICPX_DEPENDENCIES@ OSICPX_LIBS = @OSICPX_LIBS@ OSICPX_LIBS_INSTALLED = @OSICPX_LIBS_INSTALLED@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ 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@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ dos2unix = @dos2unix@ 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 # Name of the library in this directory SUBDIRS = OaGenerators Branching QuadCuts $(am__append_1) noinst_LTLIBRARIES = libbonalgorithms.la ######################################################################## # bonmin library # ######################################################################## # List all source files, including headers libbonalgorithms_la_SOURCES = \ BonBabSetupBase.cpp BonBabSetupBase.hpp \ BonBonminSetup.cpp BonBonminSetup.hpp \ BonSubMipSolver.cpp BonSubMipSolver.hpp \ BonCbcLpStrategy.cpp BonCbcLpStrategy.hpp \ BonSolverHelp.cpp BonSolverHelp.hpp libbonalgorithms_la_LIBADD = Branching/libbonbranching.la \ OaGenerators/libbonoagenerators.la QuadCuts/libbonquadcuts.la libbonalgorithms_la_DEPENDENCIES = $(libbonalgorithms_la_LIBADD) # This is for libtool libbonalgorithms_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows AM_CPPFLAGS = -I`$(CYGPATH_W) $(srcdir)/Branching` -I`$(CYGPATH_W) \ $(srcdir)/QuadCuts` -I`$(CYGPATH_W) $(srcdir)/OaGenerators` \ -I`$(CYGPATH_W) $(srcdir)/../CbcBonmin` -I`$(CYGPATH_W) \ $(srcdir)/../CbcBonmin/Heuristics` -I`$(CYGPATH_W) \ $(srcdir)/../Interfaces` -I`$(CYGPATH_W) \ $(srcdir)/../Interfaces/Ipopt` -I`$(CYGPATH_W) \ $(srcdir)/../Interfaces/Filter` $(BONMINLIB_CFLAGS) \ $(am__append_2) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Interfaces ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = \ BonBabSetupBase.hpp \ BonSubMipSolver.hpp \ BonCbcLpStrategy.hpp \ BonBonminSetup.hpp ######################################################################## # Astyle stuff # ######################################################################## # Here repeat all source files, with "bak" appended ASTYLE_FILES = \ BonBabSetupBase.cppbak \ BonBabSetupBase.hppbak \ BonBonminSetup.cppbak \ BonCbcLpStrategy.cppbak BonCbcLpStrategy.hppbak \ BonBonminSetup.hppbak CLEANFILES = $(ASTYLE_FILES) SUFFIXES = .cppbak .hppbak all: all-recursive .SUFFIXES: .SUFFIXES: .cppbak .hppbak .cpp .hpp .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/Algorithms/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign src/Algorithms/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-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_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 libbonalgorithms.la: $(libbonalgorithms_la_OBJECTS) $(libbonalgorithms_la_DEPENDENCIES) $(CXXLINK) $(libbonalgorithms_la_LDFLAGS) $(libbonalgorithms_la_OBJECTS) $(libbonalgorithms_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BonBabSetupBase.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BonBonminSetup.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BonCbcLpStrategy.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BonSolverHelp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BonSubMipSolver.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 # 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) @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 check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(includecoindir)"; 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) 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-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive info: info-recursive info-am: install-data-am: install-includecoinHEADERS install-exec-am: install-info: install-info-recursive install-man: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-includecoinHEADERS uninstall-info-am uninstall-info: uninstall-info-recursive .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ clean clean-generic clean-libtool clean-noinstLTLIBRARIES \ clean-recursive ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-recursive distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-exec install-exec-am \ install-includecoinHEADERS install-info install-info-am \ install-man install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic maintainer-clean-recursive \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \ tags tags-recursive uninstall uninstall-am \ uninstall-includecoinHEADERS uninstall-info-am astyle: $(ASTYLE_FILES) .hpp.hppbak: mv $< $@ $(ASTYLE) $(ASTYLEFLAGS) < $@ > $< touch $@ .cpp.cppbak: mv $< $@ $(ASTYLE) $(ASTYLEFLAGS) < $@ > $< touch $@ # 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: Bonmin-releases-1.8.9/Bonmin/src/Algorithms/OaGenerators/000077500000000000000000000000001436575401300232775ustar00rootroot00000000000000Bonmin-releases-1.8.9/Bonmin/src/Algorithms/OaGenerators/BonDummyHeuristic.cpp000066400000000000000000000022471436575401300274220ustar00rootroot00000000000000// (C) Copyright Carnegie Mellon University 2005 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // P. Bonami, Carnegie Mellon University // // Date : 05/26/2005 #include "BonDummyHeuristic.hpp" #include "CoinHelperFunctions.hpp" #include "CbcModel.hpp" #include "OsiAuxInfo.hpp" namespace Bonmin { /// Default constructor DummyHeuristic::DummyHeuristic(CbcModel &model, OsiTMINLPInterface * si) : CbcHeuristic(model), nlp_(si), knowsSolution(false) {} DummyHeuristic::DummyHeuristic(OsiTMINLPInterface * si) : CbcHeuristic(), nlp_(si), knowsSolution(false) {} /// Assign an OsiTMINLPInterface void DummyHeuristic::setNlp(OsiTMINLPInterface * si) { nlp_ = si; } /// heuristic method int DummyHeuristic::solution(double &solutionValue, double *betterSolution) { OsiBabSolver * babSolver = dynamic_cast (model_->solver()->getAuxiliaryInfo()); // double bestKnown = getObjValue(); if (babSolver) { return babSolver->solution(solutionValue, betterSolution, model_->getNumCols()); } return 0; } } Bonmin-releases-1.8.9/Bonmin/src/Algorithms/OaGenerators/BonDummyHeuristic.hpp000066400000000000000000000026311436575401300274240ustar00rootroot00000000000000// (C) Copyright Carnegie Mellon University 2005 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // P. Bonami, Carnegie Mellon University // // Date : 05/26/2005 #ifndef BonDummyHeuristic_HPP #define BonDummyHeuristic_HPP #include "BonOsiTMINLPInterface.hpp" #include "CbcHeuristic.hpp" namespace Bonmin { class DummyHeuristic : public CbcHeuristic { public: /// Default constructor DummyHeuristic(OsiTMINLPInterface * si = NULL); /// Usefull constructor DummyHeuristic(CbcModel &model, OsiTMINLPInterface * si = NULL); ///Copy constructor DummyHeuristic( const DummyHeuristic ©): CbcHeuristic(copy), nlp_(copy.nlp_), knowsSolution(copy.knowsSolution) {} /// Set nlp_ void setNlp(OsiTMINLPInterface * si); /// heuristic method virtual int solution(double &solutionValue, double *betterSolution); virtual int solution(double &solutionValue, double *betterSolution, OsiCuts & cs) { return solution(solutionValue, betterSolution); } virtual CbcHeuristic * clone()const { return new DummyHeuristic(*this); } virtual void resetModel(CbcModel*) {} virtual bool shouldHeurRun(int whereFrom){ return true;} private: /// Pointer to the Ipopt interface OsiTMINLPInterface * nlp_; /// Do I have a solution? bool knowsSolution; }; } #endif Bonmin-releases-1.8.9/Bonmin/src/Algorithms/OaGenerators/BonEcpCuts.cpp000066400000000000000000000134751436575401300260220ustar00rootroot00000000000000// (C) Copyright International Business Machines (IBM) 2006, 2007 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // P. Bonami, International Business Machines // // Date : 12/20/2006 //#define ECP_DEBUG #include "BonEcpCuts.hpp" #include "BonSolverHelp.hpp" #include "BonBabInfos.hpp" #include "BonCbc.hpp" namespace Bonmin { EcpCuts::EcpCuts(BabSetupBase & b): OaDecompositionBase(b,false, false) { assignLpInterface(NULL); b.options()->GetIntegerValue("ecp_max_rounds", numRounds_,b.prefix()); b.options()->GetNumericValue("ecp_abs_tol", abs_violation_tol_,b.prefix()); b.options()->GetNumericValue("ecp_rel_tol", rel_violation_tol_,b.prefix()); b.options()->GetNumericValue("ecp_probability_factor", beta_,b.prefix()); } double EcpCuts::doEcpRounds(OsiSolverInterface &si, bool leaveSiUnchanged, double* violation) { OsiSolverInterface * saveLp = lp_; lp_ = &si; OsiCuts cs; bool saveLeaveSi = leaveSiUnchanged_; leaveSiUnchanged_ = leaveSiUnchanged; generateCuts(si, cs); lp_ = saveLp; leaveSiUnchanged_ = saveLeaveSi; if (violation) *violation = violation_; return objValue_; } void EcpCuts::generateCuts(const OsiSolverInterface &si, OsiCuts & cs, const CglTreeInfo info) { if (beta_ >=0) { BabInfo * babInfo = dynamic_cast (si.getAuxiliaryInfo()); assert(babInfo); assert(babInfo->babPtr()); const CbcNode * node = babInfo->babPtr()->model().currentNode(); int level = (node == NULL) ? 0 : babInfo->babPtr()->model().currentNode()->depth(); double rand = CoinDrand48(); double score = pow(2.,-level)*beta_; //printf("depth %i, score %g , rand %g\n", level, score, rand); if (score <= rand) return; } double orig_violation = nlp_->getNonLinearitiesViolation( si.getColSolution(), si.getObjValue()); //#define ECP_DEBUG #ifdef ECP_DEBUG std::cout<<"Initial Constraint violation: "< abs_violation_tol_ && violation_ > rel_violation_tol_*orig_violation) { int numberCuts = - cs.sizeRowCuts(); const double * toCut = parameter().addOnlyViolated_ ? si.getColSolution():NULL; const OsiSolverInterface &localSi = (lpManip == NULL) ? si : *(lpManip->si()); nlp_->getOuterApproximation(cs, localSi.getColSolution(), 1, toCut, parameter().global_); numberCuts += cs.sizeRowCuts(); if (numberCuts > 0 && i + 1 < numRounds_ ) { if (lpManip==NULL) { assert(lp_ == NULL); if (lp_ == NULL) lpManip = new solverManip(si); else lpManip = new solverManip(lp_, true,true, false,false); } installCuts(*lpManip->si(), cs,numberCuts); #ifdef ECP_DEBUG std::cerr<<"Installed "<si()->resolve(); #ifdef ECP_DEBUG std::cerr<<"New objective "<si()->getObjValue()<si()->isProvenPrimalInfeasible()) { infeasible = true; #ifdef ECP_DEBUG std::cout<<"Stopping Ecp generation because problem became infeasible"<getNonLinearitiesViolation( lpManip->si()->getColSolution(), lpManip->si()->getObjValue()); #ifdef ECP_DEBUG std::cout<<"Constraint violation: "<si()->resolve(); if (lpManip->si()->isProvenPrimalInfeasible()) objValue_ = COIN_DBL_MAX; else objValue_ = lpManip->si()->getObjValue(); } } else objValue_ = COIN_DBL_MAX; if (lpManip) { if (lp_ != NULL && lpManip != NULL) { lpManip->restore(); } delete lpManip; } #ifdef ECP_DEBUG std::cout<<"End ecp cut generation"< roptions) { roptions->SetRegisteringCategory("ECP cuts generation", RegisteredOptions::BonminCategory); roptions->AddLowerBoundedIntegerOption("filmint_ecp_cuts", "Specify the frequency (in terms of nodes) at which some a la filmint ecp cuts are generated.", 0,0, "A frequency of 0 amounts to to never solve the NLP relaxation."); roptions->setOptionExtraInfo("filmint_ecp_cuts",3); roptions->AddLowerBoundedIntegerOption ("ecp_max_rounds", "Set the maximal number of rounds of ECP cuts.", 0,5, ""); roptions->setOptionExtraInfo("ecp_max_rounds",3); roptions->AddLowerBoundedNumberOption ("ecp_abs_tol", "Set the absolute termination tolerance for ECP rounds.", 0,false,1e-6, ""); roptions->setOptionExtraInfo("ecp_abs_tol",3); roptions->AddLowerBoundedNumberOption ("ecp_rel_tol", "Set the relative termination tolerance for ECP rounds.", 0,false,0., ""); roptions->setOptionExtraInfo("ecp_rel_tol",3); roptions->AddNumberOption ("ecp_probability_factor", "Factor appearing in formula for skipping ECP cuts.", 10., "Choosing -1 disables the skipping."); roptions->setOptionExtraInfo("ecp_probability_factor",3); } } // end namespace bonmin. Bonmin-releases-1.8.9/Bonmin/src/Algorithms/OaGenerators/BonEcpCuts.hpp000066400000000000000000000051341436575401300260200ustar00rootroot00000000000000// (C) Copyright International Business Machines (IBM) 2006, 2007 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // P. Bonami, International Business Machines // // Date : 12/20/2006 #ifndef BonECPCuts_HPP #define BonECPCuts_HPP #include "BonOaDecBase.hpp" #include "CglCutGenerator.hpp" namespace Bonmin { class EcpCuts: public OaDecompositionBase { public: EcpCuts(BabSetupBase & b); /// Copy constructor EcpCuts(const EcpCuts & copy): OaDecompositionBase(copy), objValue_(copy.objValue_), numRounds_(copy.numRounds_), abs_violation_tol_(copy.abs_violation_tol_), rel_violation_tol_(copy.rel_violation_tol_), beta_(copy.beta_) {} /// clone CglCutGenerator * clone() const { return new EcpCuts(*this); } /// Destructor virtual ~EcpCuts() {} /** Standard cut generation methods. */ virtual void generateCuts(const OsiSolverInterface &si, OsiCuts & cs, const CglTreeInfo info = CglTreeInfo()); double doEcpRounds(OsiSolverInterface &si, bool leaveSiUnchanged, double* violation = NULL); void setNumRounds(int value) { numRounds_ = value; } void setPropabilityFactor(double value) { beta_ = value; } void setAbsViolationTolerance(double value) { abs_violation_tol_ = value; } void setRelViolationTolerance(double value) { rel_violation_tol_ = value; } /** Register ecp cuts options.*/ static void registerOptions(Ipopt::SmartPtr roptions); protected: /// virtual method which performs the OA algorithm by modifying lp and nlp. virtual double performOa(OsiCuts & cs, solverManip &lpManip, BabInfo * babInfo, double &cutoff, const CglTreeInfo &info) const { throw -1; } /// virutal method to decide if local search is performed virtual bool doLocalSearch(BabInfo * babInfo) const { return 0; } private: /** Record obj value at final point of Ecp. */ mutable double objValue_; /** Record NLP infeasibility at final point of Ecp */ mutable double violation_; /** maximum number of iterations of generation. */ int numRounds_; /** absolute tolerance for NLP constraint violation to stop ECP rounds */ double abs_violation_tol_; /** relative tolerance for NLP constraint violation to stop ECP rounds */ double rel_violation_tol_; /** Factor for probability for skipping cuts */ double beta_; }; } /* end namespace Bonmin.*/ #endif Bonmin-releases-1.8.9/Bonmin/src/Algorithms/OaGenerators/BonFpForMinlp.cpp000066400000000000000000000243421436575401300264630ustar00rootroot00000000000000// (C) Copyright CNRS 2008 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // P. Bonami, CNRS // // Date : 02/13/2009 #include "BonFpForMinlp.hpp" #include "BonminConfig.h" #include "OsiClpSolverInterface.hpp" #include "CbcModel.hpp" #include "BonCbcLpStrategy.hpp" #ifdef COIN_HAS_CPX #include "OsiCpxSolverInterface.hpp" #endif #include "OsiAuxInfo.hpp" #include "BonSolverHelp.hpp" #include namespace Bonmin { static const char * txt_id = "FP for MINLP"; /// Constructor with basic setup MinlpFeasPump::MinlpFeasPump(BabSetupBase & b): OaDecompositionBase(b, true, false), subMip_(NULL) { std::string bonmin="bonmin."; std::string prefix = (b.prefix() == bonmin) ? "" : b.prefix(); prefix += "pump_for_minlp."; subMip_ = new SubMipSolver(b, prefix); double oaTime; b.options()->GetNumericValue("time_limit",oaTime,prefix); parameter().maxLocalSearch_ = INT_MAX; b.options()->GetIntegerValue("solution_limit", parameter().maxSols_,prefix); parameter().maxLocalSearchTime_ = std::min(b.getDoubleParameter(BabSetupBase::MaxTime), oaTime); if(parameter().maxSols_ > b.getIntParameter(BabSetupBase::MaxSolutions)) parameter().maxSols_ = b.getIntParameter(BabSetupBase::MaxSolutions); b.options()->GetEnumValue("fp_pass_infeasible", passBound_, prefix); } MinlpFeasPump::~MinlpFeasPump() { delete subMip_; } /// virutal method to decide if local search is performed bool MinlpFeasPump::doLocalSearch(BabInfo * babInfo) const { return (nLocalSearch_getNumCols(); vector savedColLower(nlp_->getNumCols()); CoinCopyN(nlp_->getColLower(), nlp_->getNumCols(), savedColLower()); vector savedColUpper(nlp_->getNumCols()); CoinCopyN(nlp_->getColUpper(), nlp_->getNumCols(), savedColUpper()); subMip_->setLpSolver(lpManip.si()); OsiSolverInterface * lp = subMip_->solver(); assert(lp); vector indices; for(int i = 0; i < numcols ; i++) { lp->setObjCoeff(i,0); if(!lp->isInteger(i)) { } else { indices.push_back(i);} } // If objective is linear need to add to lp constraint for objective const double * colsol = NULL; lp->resolve(); OsiBranchingInformation branch_info(lp, false); branch_info.lower_ = savedColLower(); branch_info.upper_ = savedColUpper(); if(lp->getNumCols() == nlp_->getNumCols()) nlp_->addObjectiveFunction(*lp, nlp_->getColSolution()); lp->setObjCoeff(numcols,0); bool milpOptimal = false; nlp_->resolve(txt_id); set_fp_objective(*lp, nlp_->getColSolution()); lp->initialSolve(); lp->setColUpper(numcols, cutoff); subMip_->solve(DBL_MAX, parameters_.subMilpLogLevel_, //subMip_->optimize(DBL_MAX, parameters_.subMilpLogLevel_, (parameters_.maxLocalSearchTime_ + timeBegin_ - CoinCpuTime()) /* time limit */); milpOptimal = subMip_ -> optimal(); colsol = subMip_->getLastSolution(); nLocalSearch_++; if(milpOptimal) handler_->message(SOLVED_LOCAL_SEARCH, messages_) <nodeCount()<iterationCount()<message(LOCAL_SEARCH_ABORT, messages_) <nodeCount()<iterationCount()< x_bar(indices.size()); for(unsigned int i = 0 ; i < indices.size() ; i++){ assert(fabs(colsol[indices[i]] - floor(colsol[indices[i]] + 0.5)) < 1e-5); x_bar[i] = colsol[indices[i]]; } double dist = nlp_->solveFeasibilityProblem(indices.size(), x_bar(), indices(), 1, 0, 2); handler_->message(FP_DISTANCE, messages_) <resolve(txt_id); if(!nlp_->isProvenOptimal()){ relaxIntegers(*nlp_,branch_info, parameters_.cbcIntegerTolerance_, objects_, nObjects_); nlp_->resolve(txt_id); } bool restart = false; if (post_nlp_solve(babInfo, cutoff)) { restart = true; //nlp is solved and feasible // Update the cutoff ub = std::min(ub, nlp_->getObjValue()); cutoff = ub > 0 ? ub * (1 - parameters_.cbcCutoffIncrement_): ub * (1 + parameters_.cbcCutoffIncrement_); assert(cutoff < ub); numSols_++; } else{ //nlp_->setColLower(savedColLower()); //nlp_->setColUpper(savedColUpper()); //dist = nlp_->solveFeasibilityProblem(indices.size(), x_bar(), indices(), 1, 0, 2); } nlpSol = const_cast(nlp_->getColSolution()); nlp_->getOuterApproximation(cs, nlpSol, 1, NULL, parameter().global_); //if(restart){ nlp_->setColLower(savedColLower()); nlp_->setColUpper(savedColUpper()); if(restart){ major_iteration++; handler_->message(FP_MAJOR_ITERATION, messages_) <resolve(txt_id); } //} } else { nlpSol = const_cast(nlp_->getColSolution()); nlp_->getOuterApproximation(cs, nlpSol, 1, NULL, parameter().global_); } #if 0 handler_->message(FP_MINOR_ITERATION, messages_) < parameters_.maxLocalSearchTime_){ colsol = NULL; break; } //do we perform a new local search ? if (nLocalSearch_ < parameters_.maxLocalSearch_ && numSols_ < parameters_.maxSols_) { nLocalSearch_++; set_fp_objective(*lp, nlp_->getColSolution()); lp->setColUpper(numcols, cutoff); subMip_->solve(DBL_MAX, parameters_.subMilpLogLevel_, // subMip_->optimize(DBL_MAX, parameters_.subMilpLogLevel_, parameters_.maxLocalSearchTime_ + timeBegin_ - CoinCpuTime()); milpOptimal = subMip_ -> optimal(); colsol = subMip_->getLastSolution(); if(milpOptimal) handler_->message(SOLVED_LOCAL_SEARCH, messages_)<nodeCount()<iterationCount()<message(LOCAL_SEARCH_ABORT, messages_)<nodeCount()<iterationCount()<message(FP_MILP_VAL, messages_) <getNumCols()]<message(OASUCCESS, messages_)<<"FP"< roptions) { roptions->SetRegisteringCategory("Primal Heuristics", RegisteredOptions::BonminCategory); roptions->AddStringOption2("fp_pass_infeasible", "Say whether feasibility pump should claim to converge or not", "no", "no", "When master MILP is infeasible just bail out (don't stop all algorithm). This is the option for using in B-Hyb.", "yes", "Claim convergence, numerically dangerous.",""); roptions->SetRegisteringCategory("Output and Loglevel", RegisteredOptions::BonminCategory); roptions->AddBoundedIntegerOption("fp_log_level", "specify FP iterations log level.", 0,2,1, "Set the level of output of OA decomposition solver : " "0 - none, 1 - normal, 2 - verbose" ); roptions->setOptionExtraInfo("fp_log_level",3); roptions->AddLowerBoundedNumberOption("fp_log_frequency", "display an update on lower and upper bounds in FP every n seconds", 0.,1.,100., ""); roptions->setOptionExtraInfo("fp_log_frequency",3); } /** Put objective of MIP according to FP scheme. */ void MinlpFeasPump::set_fp_objective(OsiSolverInterface &si, const double * colsol) const{ if (objects_) { for (int i = 0 ; i < nObjects_ ; i++) { OsiObject * obj = objects_[i]; int colnum = obj->columnNumber(); if (colnum >= 0) {//Variable branching object double round = floor(colsol[colnum] + 0.5); double coeff = (colsol[colnum] - round ) < 0; si.setObjCoeff(colnum, 1 - 2 * coeff); } else { throw CoinError("OaDecompositionBase::solverManip", "setFpObjective", "Can not use FP on problem with SOS constraints"); } } } else { int numcols = nlp_->getNumCols(); for (int i = 0; i < numcols ; i++) { if (nlp_->isInteger(i)){ double round = floor(colsol[i] + 0.5); double coeff = (colsol[i] - round ) < 0; si.setObjCoeff(i, 1 - 2*coeff); } } } si.initialSolve(); } }/* End namespace Bonmin. */ Bonmin-releases-1.8.9/Bonmin/src/Algorithms/OaGenerators/BonFpForMinlp.hpp000066400000000000000000000031401436575401300264610ustar00rootroot00000000000000// (C) Copyright CNRS 2008 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // P. Bonami, CNRS // // Date : 02/13/2009 #ifndef BonFpForMinlp_H #define BonFpForMinlp_H #include "BonOaDecBase.hpp" namespace Bonmin{ class MinlpFeasPump : public OaDecompositionBase{ public: /// Constructor with basic setup MinlpFeasPump(BabSetupBase & b); /// Copy constructor MinlpFeasPump(const MinlpFeasPump ©) : OaDecompositionBase(copy), subMip_(new SubMipSolver(*copy.subMip_)), passBound_(copy.passBound_) {} /// Destructor ~MinlpFeasPump(); void setStrategy(const CbcStrategy & strategy) { parameters_.setStrategy(strategy); } virtual CglCutGenerator * clone() const { return new MinlpFeasPump(*this); } /** Register OA options.*/ static void registerOptions(Ipopt::SmartPtr roptions); protected: /// virtual method which performs the OA algorithm by modifying lp and nlp. virtual double performOa(OsiCuts & cs, solverManip &lpManip, BabInfo * babInfo, double &cutoff, const CglTreeInfo & info) const; /// virutal method to decide if local search is performed virtual bool doLocalSearch(BabInfo * babInfo) const; /** Put objective of MIP according to FP scheme. */ void set_fp_objective(OsiSolverInterface &si, const double * colsol) const; private: SubMipSolver * subMip_; /** Wether or not to pass bound to master algorithm.*/ int passBound_; }; }/* End Namespace.*/ #endif Bonmin-releases-1.8.9/Bonmin/src/Algorithms/OaGenerators/BonOACutGenerator2.cpp000066400000000000000000000240421436575401300273500ustar00rootroot00000000000000// (C) Copyright Carnegie Mellon University 2005, 2006 // All Rights Reserved. // This code is published under the Eclipse Public License. // // Authors : // P. Bonami, Carnegie Mellon University // // Date : 05/26/2005 #include "BonOACutGenerator2.hpp" #include "BonminConfig.h" #include "OsiClpSolverInterface.hpp" #include "CbcModel.hpp" #include "BonCbcLpStrategy.hpp" #ifdef COIN_HAS_CPX #include "OsiCpxSolverInterface.hpp" #endif #include "OsiAuxInfo.hpp" #include "BonSolverHelp.hpp" #include namespace Bonmin { static const char * txt_id = "OA decomposition"; /// Constructor with basic setup OACutGenerator2::OACutGenerator2(BabSetupBase & b): OaDecompositionBase(b, true, false) { std::string bonmin="bonmin."; std::string prefix = (b.prefix() == bonmin) ? "" : b.prefix(); prefix += "oa_decomposition."; subMip_ = new SubMipSolver(b, prefix); double oaTime; b.options()->GetNumericValue("time_limit",oaTime,prefix); parameter().maxLocalSearch_ = INT_MAX; b.options()->GetIntegerValue("solution_limit", parameter().maxSols_,prefix); parameter().maxLocalSearchTime_ = std::min(b.getDoubleParameter(BabSetupBase::MaxTime), oaTime); if(parameter().maxSols_ > b.getIntParameter(BabSetupBase::MaxSolutions)) parameter().maxSols_ = b.getIntParameter(BabSetupBase::MaxSolutions); } OACutGenerator2::~OACutGenerator2() { delete subMip_; } /// virutal method to decide if local search is performed bool OACutGenerator2::doLocalSearch(BabInfo * babInfo) const { return (nLocalSearch_getNumCols(); double gap_tol = this->parameter().gap_tol_; bool isInteger = false; subMip_->setLpSolver(lpManip.si()); OsiSolverInterface * lp = subMip_->solver(); lp->resolve(); if(IsValid(nlp_->linearizer())){ nlp_->linearizer()->get_refined_oa(cs); installCuts(*lp, cs, cs.sizeRowCuts()); } lp->resolve(); OsiBranchingInformation branch_info(lp, false); bool milpOptimal = 1; double milpBound = -COIN_DBL_MAX; //bool milpFeasible = 1; bool feasible = 1; subMip_->solve(cutoff, parameters_.subMilpLogLevel_, parameters_.maxLocalSearchTime_ + timeBegin_ - CoinCpuTime()); milpBound = std::max(milpBound, subMip_->lowBound()); milpOptimal = subMip_->optimal(); feasible = milpBound < cutoff; //milpFeasible = feasible; isInteger = (subMip_->getLastSolution() != NULL); nLocalSearch_++; if (milpOptimal) handler_->message(SOLVED_LOCAL_SEARCH, messages_)<nodeCount()<iterationCount()<message(LOCAL_SEARCH_ABORT, messages_)<nodeCount()<iterationCount()<nodeCount(); int numberPasses = 0; #ifdef OA_DEBUG bool foundSolution = 0; #endif double * nlpSol = NULL; double ub = cutoff; double gap = 1; while (isInteger && feasible) { numberPasses++; //after a prescribed elapsed time give some information to user double time = CoinCpuTime(); if (time - lastPeriodicLog > parameters_.logFrequency_) { handler_->message(PERIODIC_MSG,messages_) <