source: ThirdParty/ASL/trunk/ @ 2507

Last change on this file since 2507 was 1871, checked in by stefan, 11 years ago

rename ampl solver library to have standard format, and to be the same for MS and other compilers

  • Property svn:executable set to *
File size: 3.6 KB
3set -e
5# Script to compile the Ampl Solver Library on Unix systems. Why this approach?
6# Well, we don't want to get into the business of creating (and maintaining)
7# the full set of autotools source files for the ASL. This approach tries to
8# leverage makefile.u, which comes with ASL.
10# To support VPATH builds, the strategy is to copy the sources to the build
11# directory, build, and then erase the sources when we're done. Start by
12# copying the sources.
14# set -x
15mkinstalldirs="@install_sh@ -d"
19# Remove the old compilation directory, if present, and create a new one. Then
20# copy the sources. The wildcards given to ls will produce duplicates, which
21# may result in a warning as the files are linked or copied.
23rm -rf $compdir
24$mkinstalldirs $compdir
25files=`cd $abs_source_dir/solvers ; ls *.[chs] *.[ch]0 *.hd arith.* makefile* *.bat amplsolv.lbc`
27cd $compdir
28for file in $files ; do
29  rm -f $file
30  @LN_S@ $abs_source_dir/solvers/$file $file
33# Acquire the system details. On some systems (Cygwin, for example), this
34# string will contain '/' characters, so escape them properly.
36sys_details=`uname -sr | sed -e 's/\\//\\\\\\//g'`
38sed -e "/sysdetails_ASL/s/System_details/$sys_details/" details.c0 > details.c
40# Adjust solvers/makefile.u for the system at hand. Really all we're doing
41# is trying to automate the instructions in makefile.u. If you have build
42# problems, a good thing to do is compare the shell code here with makefile.u,
43# to see if it contains instructions that are not automated here. The final
44# result is left in makefile.coin
46# Allow make to decide the name of the archive program and the appropriate
47# flags. makefile.u hardwires `ar' and sets ARFLAGS = ruv. Since we trash the
48# entire build and start from scratch, the `u' in ruv stands for `useless'.
50sed -e 's/ ar / @AR@ /g' \
51    -e 's/^ARFLAGS =/# ARFLAGS =/' < makefile.u > makefile.coin
53# If we're in a fake unix environment on a Windows box, the default compiler
54# output file is a.exe, not a.out.
56if test "x@EXEEXT@" = "x.exe" ; then
57  sed -e 's/a\.out/a.exe/' < makefile.coin > makefile.coin.tmp
58  mv makefile.coin.tmp makefile.coin
61# System-specific tweaks.  On Solaris x86, we need to build fpsetprec.s
62# (fpsetprec64.s for 64-bit builds). Add it to the dependency list for
63# amplsolver.a. The 64-bit question here is how to reliably recognise a 64-bit
64# build. For GCC, -m64 should do it. For Sun Studio, it's more difficult.
65# Studio 12 and later recognises -m64. Earlier versions require
66# -xarch=<something>, where something can be any of generic64, native64, amd64,
67# or amd64a (and perhaps others). So ... let's go out on a limb and hope that
68# -xarch=*64* will not pick up anything it shouldn't. Force leading and
69# trailing spaces in the string we're matching, in case the 64-bit flag is the
70# only content in CFLAGS.
72case "@build@" in
73  *86-*-solaris*)
74    case " @CFLAGS@ " in
75      *" "-m64" "* | *" "-xarch=*64*" "*)
76        sed -e 's/^amplsolver.a:/amplsolver.a: fpsetprec64.s/' \
77          < makefile.coin > makefile.coin.tmp
78        ;;
79      *)
80        sed -e 's/^amplsolver.a:/amplsolver.a: fpsetprec.s/' \
81          < makefile.coin > makefile.coin.tmp
82        ;;
83    esac
84    mv makefile.coin.tmp makefile.coin
85    ;;
88# That's it, we can do the build.
89# A last detail: makefile.u will try to force CC=cc. We need to make sure
90# that we stay with our chosen compiler. It will try and force CFLAGS, too, but
91# configure has already put the appropriate information into ASLMAKEFLAGS.
94make -f makefile.coin @ASLMAKEFLAGS@ CC="@CC@"
95mv amplsolver.a ../$libampl
96mv stdio1.h arith.h funcadd0.@OBJEXT@ ..
97cd ..
98rm -rf $compdir
Note: See TracBrowser for help on using the repository browser.