1# BEGIN LICENSE BLOCK
2# Version: CMPL 1.1
3#
4# The contents of this file are subject to the Cisco-style Mozilla Public
5# License Version 1.1 (the "License"); you may not use this file except
6# in compliance with the License.  You may obtain a copy of the License
7# at www.eclipse-clp.org/license.
8# 
9# Software distributed under the License is distributed on an "AS IS"
10# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See
11# the License for the specific language governing rights and limitations
12# under the License. 
13# 
14# The Original Code is  The ECLiPSe Constraint Logic Programming System. 
15# The Initial Developer of the Original Code is  Cisco Systems, Inc. 
16# Portions created by the Initial Developer are
17# Copyright (C) 2006 Cisco Systems, Inc.  All Rights Reserved.
18# 
19# Contributor(s): 
20# 
21# END LICENSE BLOCK
22#
23# Makefile for icparc_solvers
24# $Id: Makefile.in,v 1.11 2014/10/25 04:11:53 kish_shen Exp $
25#
26
27# The location of third party software releases, e.g. Cplex, Xpress
28THIRDPARTY=@ECLIPSETHIRDPARTY@
29
30# Which eplex interface versions to build
31XPRESS_VERSIONS = @XPRESS_VERSIONS@
32CPLEX_VERSIONS = @CPLEX_VERSIONS@
33OSI_VERSIONS = @OSI_VERSIONS@
34GUROBI_VERSION = @GUROBI_VERSION@
35GUROBIDIR = @GUROBIDIR@
36
37ARCH = @ARCH@
38top_srcdir = @top_srcdir@
39PREFIX = @prefix@
40ECLIPSEDIR = $(PREFIX)
41MAKEFILE = Makefile.$(ARCH)
42OSCLASS = @OSCLASS@
43
44CC = @CC@
45CXX = @CXX@
46AR = @AR@
47CFLAGS = @CFLAGS@ @OPT_FLAGS@
48OS_INCLUDES = @OS_INCLUDES@
49LIB_PREFIX = @LIB_PREFIX@
50OBJ_SUFFIX = @OBJECTS_SUFFIX@
51DLIBDIR = @DLIBDIR@
52DYNLDFLAGS = @DYNLDFLAGS@
53DYLD = @DYLD@
54EXEEXT = @EXEEXT@
55GMP_LD = @GMP_LD@
56FLOAT_ROUND_FLAGS = @FLOAT_ROUND_FLAGS@
57
58CPPFLAGS  = -I. -I$(ECLIPSEDIR)/include/$(ARCH) -I$(ECLIPSEDIR)/Kernel/src $(OS_INCLUDES)
59STDCXXLIB = @STDCXXLIB@
60ECLIBS	= -L$(ECLIPSEDIR)/lib/$(ARCH) -leclipse @LIBS@
61
62
63PERM = a+r,u+w,go-w
64DIRPERM = 2755
65
66.SUFFIXES:	$(SUFFIXES) .$(OBJ_SUFFIX)
67
68.c.o:
69	$(CC) $(CFLAGS) $(CPPFLAGS) -c $<
70
71
72# List of shared libraries to build
73
74OBJ_FILES =	\
75	$(OSI_VERSIONS:%=$(ARCH)/seosi%.$(OBJ_SUFFIX)) \
76	$(XPRESS_VERSIONS:%=$(ARCH)/sexpress%.$(OBJ_SUFFIX)) \
77	$(CPLEX_VERSIONS:%=$(ARCH)/secplex%.$(OBJ_SUFFIX)) \
78	$(GUROBI_VERSION:%=$(ARCH)/segurobi%.$(OBJ_SUFFIX))
79
80
81# install is configured as either install_eplex or nothing
82install:	@INSTALL_EPLEX@
83
84# install_eplex is configured as install_all or install_cross
85install_eplex:	@MAKE_TARGET@
86
87# Objects
88all:	$(OBJ_FILES)
89
90
91#----------------------------------------------------------------------
92# EPLEX/OSI
93#----------------------------------------------------------------------
94
95CLPCBCDIR = @CLPCBCDIR@
96SYMCLPDIR = @SYMCLPDIR@
97OSIGLPKDIR = @OSIGLPKDIR@
98
99CLPCBCARCHDIR = $(CLPCBCDIR)/$(ARCH)
100SYMCLPARCHDIR = $(SYMCLPDIR)/$(ARCH)
101OSIGLPKARCHDIR = $(OSIGLPKDIR)/$(ARCH)
102
103COINOSILIBS = -lOsi -lCoinUtils
104COINCLPLIBS = -lOsiClp -lCgl -lClp 
105COINCBCLIBS = -lCbcSolver -lCbc
106
107$(ARCH)/seosiclpcbc.$(OBJ_SUFFIX): eplex.c coinplex.cpp eplex_coin.h eplex_coin.c eplex.h coinplex_params.h 
108	$(CXX) -DCOIN -DCOIN_USE_CLP @OSICLP_ADDDEF@ $(CPPFLAGS) $(CFLAGS) -I$(CLPCBCARCHDIR)/include -c coinplex.cpp
109	$(CC) -DCOIN -DCOIN_USE_CLP -DC_TO_COIN $(CPPFLAGS) $(CFLAGS) -c eplex.c
110	$(DYLD) $(DYNLDFLAGS) eplex.o coinplex.o $(CLPCBCARCHDIR)/lib/CbcBranchUser.o $(CLPCBCARCHDIR)/lib/CbcCompareUser.o -L$(CLPCBCARCHDIR)/lib  $(COINCBCLIBS) $(COINCLPLIBS) @OSICLP_ADDLIB@ $(COINOSILIBS) $(STDCXXLIB) $(ECLIBS) $(GMP_LD) -o seosiclpcbc.$(OBJ_SUFFIX)
111	[ -d $(ARCH) ] || mkdir $(ARCH)
112	mv seosiclpcbc.$(OBJ_SUFFIX) $(ARCH)/seosiclpcbc.$(OBJ_SUFFIX)
113
114$(ARCH)/seosisymclp.$(OBJ_SUFFIX): eplex.c coinplex.cpp eplex_coin.h eplex_coin.c eplex.h 
115	$(CXX) -DCOIN -DCOIN_USE_SYM $(CPPFLAGS) $(CFLAGS) -I$(SYMCLPARCHDIR)/include -c coinplex.cpp
116	$(CC) -DCOIN -DC_TO_COIN $(CPPFLAGS) $(CFLAGS) -c eplex.c
117	$(DYLD) $(DYNLDFLAGS) eplex.o coinplex.o -L$(SYMCLPARCHDIR)/lib -lOsiSym -lSym $(COINCLPLIBS) $(COINOSILIBS) $(STDCXXLIB) $(ECLIBS) $(GMP_LD) -o seosisymclp.$(OBJ_SUFFIX)
118	[ -d $(ARCH) ] || mkdir $(ARCH)
119	mv seosisymclp.$(OBJ_SUFFIX) $(ARCH)/seosisymclp.$(OBJ_SUFFIX)
120
121$(ARCH)/seosiglpk.$(OBJ_SUFFIX): eplex.c coinplex.cpp eplex_coin.h eplex_coin.c eplex.h 
122	$(CXX) -DCOIN -DCOIN_USE_GLPK $(CPPFLAGS) $(CFLAGS) -I$(OSIGLPKARCHDIR)/include -c coinplex.cpp
123	$(CC) -DCOIN -DC_TO_COIN $(CPPFLAGS) $(CFLAGS) -c eplex.c
124	$(DYLD) $(DYNLDFLAGS) eplex.o coinplex.o -L$(OSIGLPKARCHDIR)/lib -lOsiGlpk -lglpk  $(COINOSILIBS) $(STDCXXLIB) $(ECLIBS) $(GMP_LD) -o seosiglpk.$(OBJ_SUFFIX)
125	[ -d $(ARCH) ] || mkdir $(ARCH)
126	mv seosiglpk.$(OBJ_SUFFIX) $(ARCH)/seosiglpk.$(OBJ_SUFFIX)
127
128#----------------------------------------------------------------------
129# EPLEX/CPLEX
130#----------------------------------------------------------------------
131
132CPLEX90_SUPPORT_i386_nt = $(THIRDPARTY)/cplex90/bin/i386_nt/cplex90.dll
133CPLEX102_SUPPORT_i386_nt = $(THIRDPARTY)/cplex102/bin/i386_nt/cplex102.dll
134CPLEX110_SUPPORT_i386_nt = $(THIRDPARTY)/cplex110/bin/i386_nt/cplex110.dll
135CPLEX121_SUPPORT_i386_nt = $(THIRDPARTY)/cplex121/bin/x86_win32/cplex121.dll
136CPLEX121_SUPPORT_x86_64_nt = $(THIRDPARTY)/cplex121/bin/x64_win64/cplex121.dll
137CPLEX122_SUPPORT_x86_64_nt = $(THIRDPARTY)/cplex122/bin/x64_win64/cplex122.dll
138CPLEX124_SUPPORT_x86_64_nt = $(THIRDPARTY)/cplex124/bin/x64_win64/cplex124.dll
139CPLEX1251_SUPPORT_x86_64_nt = $(THIRDPARTY)/cplex1251/bin/x64_win64/cplex1251.dll
140
141
142sparc_sunos5/secplex65.so: eplex.c eplex_cplex.h eplex_cplex.c eplex.h
143	$(CC) -DCPLEX=6 -DCPLEXMINOR=5 $(CPPFLAGS) $(CFLAGS) -I/usr/local/cplex65 -c eplex.c
144	$(CC) -G eplex.o /usr/local/cplex65/libcplex.a $(ECLIBS) -o secplex.so
145	[ -d sparc_sunos5 ] || mkdir sparc_sunos5
146	mv secplex.so sparc_sunos5/secplex65.so
147
148sparc_sunos5/secplex75.so: eplex.c eplex_cplex.h eplex_cplex.c eplex.h
149	$(CC) -DCPLEX=7 -DCPLEXMINOR=5 $(CPPFLAGS) $(CFLAGS) -I$(THIRDPARTY)/cplex75/include/ilcplex -c eplex.c
150	$(CC) -G eplex.o $(THIRDPARTY)/cplex75/lib/sparc_sunos5/static_pic_mt/libcplex.a $(ECLIBS) -o secplex.so
151	[ -d sparc_sunos5 ] || mkdir sparc_sunos5
152	mv secplex.so sparc_sunos5/secplex75.so
153
154sparc_sunos5/secplex81.so: eplex.c eplex_cplex.h eplex_cplex.c eplex.h
155	$(CC) -DCPLEX=8 -DCPLEXMINOR=1 $(CPPFLAGS) $(CFLAGS) -I$(THIRDPARTY)/cplex81/include/ilcplex -c eplex.c
156	$(CC) -G eplex.o $(THIRDPARTY)/cplex811/lib/sparc_sunos5/static_pic_mt/libcplex.a $(ECLIBS) -lpthread -o secplex.so
157	[ -d sparc_sunos5 ] || mkdir sparc_sunos5
158	mv secplex.so sparc_sunos5/secplex81.so
159
160sparc_sunos5/secplex90.so: eplex.c eplex_cplex.h eplex_cplex.c eplex.h
161	$(CC) -DCPLEX=9 -DCPLEXMINOR=0 $(CPPFLAGS) $(CFLAGS) -I$(THIRDPARTY)/cplex90/include/ilcplex -c eplex.c
162	$(CC) -G eplex.o $(THIRDPARTY)/cplex90/lib/sparc_sunos5/static_pic_mt/libcplex.a $(ECLIBS) -lpthread -o secplex.so
163	[ -d sparc_sunos5 ] || mkdir sparc_sunos5
164	mv secplex.so sparc_sunos5/secplex90.so
165
166sparc_sunos5/secplex102.so: eplex.c eplex_cplex.h eplex_cplex.c eplex.h
167	$(CC) -DCPLEX=10 -DCPLEXMINOR=2 $(CPPFLAGS) $(CFLAGS) -I$(THIRDPARTY)/cplex102/include/ilcplex -c eplex.c
168	$(CC) -G eplex.o $(THIRDPARTY)/cplex102/lib/sparc_sunos5/static_pic_mt/libcplex.a $(ECLIBS) -lpthread -o secplex.so
169	[ -d sparc_sunos5 ] || mkdir sparc_sunos5
170	mv secplex.so sparc_sunos5/secplex102.so
171
172sparc_sunos5/secplex110.so: eplex.c eplex_cplex.h eplex_cplex.c eplex.h
173	$(CC) -DCPLEX=11 -DCPLEXMINOR=0 $(CPPFLAGS) $(CFLAGS) -I$(THIRDPARTY)/cplex110/include/ilcplex -c eplex.c
174	$(CC) -G eplex.o $(THIRDPARTY)/cplex110/lib/sparc_sunos5/static_pic_mt/libcplex.a $(ECLIBS) -lpthread -o secplex.so
175	[ -d sparc_sunos5 ] || mkdir sparc_sunos5
176	mv secplex.so sparc_sunos5/secplex110.so
177
178sparc_sunos5/secplex121.so: eplex.c eplex_cplex.h eplex_cplex.c eplex.h
179	$(CC) -DCPLEX=12 -DCPLEXMINOR=1 $(CPPFLAGS) $(CFLAGS) -I$(THIRDPARTY)/cplex121/include/ilcplex -c eplex.c
180	$(CC) -G eplex.o $(THIRDPARTY)/cplex121/lib/sparc_sunos5/static_pic_mt/libcplex.a $(ECLIBS) -lpthread -o secplex.so
181	[ -d sparc_sunos5 ] || mkdir sparc_sunos5
182	mv secplex.so sparc_sunos5/secplex121.so
183
184sparc_sunos5/secplex122.so: eplex.c eplex_cplex.h eplex_cplex.c eplex.h
185	$(CC) -DCPLEX=12 -DCPLEXMINOR=2 $(CPPFLAGS) $(CFLAGS) -I$(THIRDPARTY)/cplex122/include/ilcplex -c eplex.c
186	$(CC) -G eplex.o $(THIRDPARTY)/cplex122/lib/sparc_sunos5/static_pic_mt/libcplex.a $(ECLIBS) -lpthread -o secplex.so
187	[ -d sparc_sunos5 ] || mkdir sparc_sunos5
188	mv secplex.so sparc_sunos5/secplex122.so
189
190i386_linux/secplex65.so: eplex.c eplex_cplex.h eplex_cplex.c eplex.h
191	$(CC) -DCPLEX=6 -DCPLEXMINOR=5 $(CPPFLAGS) $(CFLAGS) -I/usr/local/cplex -c eplex.c
192	$(DYLD) $(DYNLDFLAGS) eplex.o /usr/local/cplex/libcplex.a $(ECLIBS) -o secplex.so
193	[ -d i386_linux ] || mkdir i386_linux
194	mv secplex.so i386_linux/secplex65.so
195
196i386_linux/secplex75.so: eplex.c eplex_cplex.h eplex_cplex.c eplex.h
197	$(CC) -DCPLEX=7 -DCPLEXMINOR=5 $(CPPFLAGS) $(CFLAGS) -I$(THIRDPARTY)/cplex75/include/ilcplex -c eplex.c
198	$(DYLD) $(DYNLDFLAGS) eplex.o $(THIRDPARTY)/cplex75/lib/i386_linux/static_pic_mt/libcplex.a -lpthread $(ECLIBS) -o secplex.so
199	[ -d i386_linux ] || mkdir i386_linux
200	mv secplex.so i386_linux/secplex75.so
201
202i386_linux/secplex81.so: eplex.c eplex_cplex.h eplex_cplex.c eplex.h
203	$(CC) -DCPLEX=8 -DCPLEXMINOR=1 $(CPPFLAGS) $(CFLAGS) -I$(THIRDPARTY)/cplex811/include/ilcplex -c eplex.c
204	$(DYLD) $(DYNLDFLAGS) eplex.o $(THIRDPARTY)/cplex811/lib/i386_linux/static_pic_mt/libcplex.a $(ECLIBS) -lpthread -o secplex.so
205	[ -d i386_linux ] || mkdir i386_linux
206	mv secplex.so i386_linux/secplex81.so
207
208i386_linux/secplex90.so: eplex.c eplex_cplex.h eplex_cplex.c eplex.h
209	$(CC) -DCPLEX=9 -DCPLEXMINOR=0 $(CPPFLAGS) $(CFLAGS) -I$(THIRDPARTY)/cplex90/include/ilcplex -c eplex.c
210	$(DYLD) $(DYNLDFLAGS) eplex.o $(THIRDPARTY)/cplex90/lib/i386_linux/static_pic/libcplex.a $(ECLIBS) -lpthread -o secplex.so
211	[ -d i386_linux ] || mkdir i386_linux
212	mv secplex.so i386_linux/secplex90.so
213
214
215i386_linux/secplex102.so: eplex.c eplex_cplex.h eplex_cplex.c eplex.h
216	$(CC) -DCPLEX=10 -DCPLEXMINOR=2 $(CPPFLAGS) $(CFLAGS) -I$(THIRDPARTY)/cplex102/include/ilcplex -c eplex.c
217	$(DYLD) $(DYNLDFLAGS) eplex.o $(THIRDPARTY)/cplex102/lib/i386_linux/static_pic/libcplex.a $(ECLIBS) -lpthread -o secplex.so
218	[ -d i386_linux ] || mkdir i386_linux
219	mv secplex.so i386_linux/secplex102.so
220
221i386_linux/secplex110.so: eplex.c eplex_cplex.h eplex_cplex.c eplex.h
222	$(CC) -DCPLEX=11 -DCPLEXMINOR=0 $(CPPFLAGS) $(CFLAGS) -I$(THIRDPARTY)/cplex110/include/ilcplex -c eplex.c
223	$(DYLD) $(DYNLDFLAGS) eplex.o $(THIRDPARTY)/cplex110/lib/i386_linux/static_pic/libcplex.a $(ECLIBS) -lpthread -o secplex.so
224	[ -d i386_linux ] || mkdir i386_linux
225	mv secplex.so i386_linux/secplex110.so
226
227i386_linux/secplex121.so: eplex.c eplex_cplex.h eplex_cplex.c eplex.h
228	$(CC) -DCPLEX=12 -DCPLEXMINOR=1 $(CPPFLAGS) $(CFLAGS) -I$(THIRDPARTY)/cplex121/include/ilcplex -c eplex.c
229	$(DYLD) $(DYNLDFLAGS) eplex.o $(THIRDPARTY)/cplex121/lib/i386_linux/static_pic/libcplex.a $(ECLIBS) -lpthread -o secplex.so
230	[ -d i386_linux ] || mkdir i386_linux
231	mv secplex.so i386_linux/secplex121.so
232
233i386_linux/secplex122.so: eplex.c eplex_cplex.h eplex_cplex.c eplex.h
234	$(CC) -DCPLEX=12 -DCPLEXMINOR=2 $(CPPFLAGS) $(CFLAGS) -I$(THIRDPARTY)/cplex122/include/ilcplex -c eplex.c
235	$(DYLD) $(DYNLDFLAGS) eplex.o $(THIRDPARTY)/cplex122/lib/i386_linux/static_pic/libcplex.a $(ECLIBS) -lpthread -o secplex.so
236	[ -d i386_linux ] || mkdir i386_linux
237	mv secplex.so i386_linux/secplex122.so
238
239i386_nt/secplex90.dll: eplex.c eplex_cplex.h eplex_cplex.c eplex.h
240	$(CC) -DCPLEX=9 -DCPLEXMINOR=0 $(CPPFLAGS) $(CFLAGS) -I$(THIRDPARTY)/cplex90/include/ilcplex -c eplex.c
241	$(DYLD) $(DYNLDFLAGS)  eplex.o $(THIRDPARTY)/cplex90/lib/i386_nt/stat_mda/cplex90.lib $(ECLIBS) -o secplex.dll
242	[ -d i386_nt ] || mkdir i386_nt
243	mv secplex.dll i386_nt/secplex90.dll
244	cp $(CPLEX90_SUPPORT_i386_nt) i386_nt/
245	cp $(CPLEX90_SUPPORT_i386_nt) ../lib/i386_nt/
246
247i386_nt/secplex102.dll: eplex.c eplex_cplex.h eplex_cplex.c eplex.h
248	$(CC) -DCPLEX=10 -DCPLEXMINOR=2 $(CPPFLAGS) $(CFLAGS) -I$(THIRDPARTY)/cplex102/include/ilcplex -c eplex.c
249	$(DYLD) $(DYNLDFLAGS)  eplex.o $(THIRDPARTY)/cplex102/lib/i386_nt/cplex102.lib $(ECLIBS) -o secplex.dll
250	[ -d i386_nt ] || mkdir i386_nt
251	mv secplex.dll i386_nt/secplex102.dll
252	cp $(CPLEX102_SUPPORT_i386_nt) i386_nt/
253	cp $(CPLEX102_SUPPORT_i386_nt) ../lib/i386_nt/
254
255i386_nt/secplex110.dll: eplex.c eplex_cplex.h eplex_cplex.c eplex.h
256	$(CC) -DCPLEX=11 -DCPLEXMINOR=0 $(CPPFLAGS) $(CFLAGS) -I$(THIRDPARTY)/cplex110/include/ilcplex -c eplex.c
257	$(DYLD) $(DYNLDFLAGS)  eplex.o $(THIRDPARTY)/cplex110/lib/i386_nt/cplex110.lib $(ECLIBS) -o secplex.dll
258	[ -d i386_nt ] || mkdir i386_nt
259	mv secplex.dll i386_nt/secplex110.dll
260	cp $(CPLEX110_SUPPORT_i386_nt) i386_nt/
261	cp $(CPLEX110_SUPPORT_i386_nt) ../lib/i386_nt/
262
263i386_nt/secplex121.dll: eplex.c eplex_cplex.h eplex_cplex.c eplex.h
264	$(CC) -DCPLEX=12 -DCPLEXMINOR=1 $(CPPFLAGS) $(CFLAGS) -I$(THIRDPARTY)/cplex121/include/ilcplex -c eplex.c
265	$(DYLD) $(DYNLDFLAGS)  eplex.o $(THIRDPARTY)/cplex121/lib/x86_windows_vs2008/stat_mda/cplex121.lib $(ECLIBS) -o secplex.dll
266	[ -d i386_nt ] || mkdir i386_nt
267	mv secplex.dll i386_nt/secplex121.dll
268	cp $(CPLEX121_SUPPORT_i386_nt) i386_nt/
269	cp $(CPLEX121_SUPPORT_i386_nt) ../lib/i386_nt/
270
271i386_nt/secplex122.dll: eplex.c eplex_cplex.h eplex_cplex.c eplex.h
272	$(CC) -DCPLEX=12 -DCPLEXMINOR=2 $(CPPFLAGS) $(CFLAGS) -I$(THIRDPARTY)/cplex122/include/ilcplex -c eplex.c
273	$(DYLD) $(DYNLDFLAGS)  eplex.o $(THIRDPARTY)/cplex122/lib/x86_windows_vs2008/stat_mda/cplex122.lib $(ECLIBS) -o secplex.dll
274	[ -d i386_nt ] || mkdir i386_nt
275	mv secplex.dll i386_nt/secplex122.dll
276	cp $(CPLEX122_SUPPORT_i386_nt) i386_nt/
277	cp $(CPLEX122_SUPPORT_i386_nt) ../lib/i386_nt/
278
279x86_64_nt/secplex121.dll: eplex.c eplex_cplex.h eplex_cplex.c eplex.h
280	$(CC) -DCPLEX=12 -DCPLEXMINOR=1 $(CPPFLAGS) $(CFLAGS) -I$(THIRDPARTY)/cplex121/include/ilcplex -c eplex.c
281	$(DYLD) $(DYNLDFLAGS)  eplex.o $(THIRDPARTY)/cplex121/bin/x64_win64/cplex121.dll $(ECLIBS) -o secplex.dll
282	[ -d x86_64_nt ] || mkdir x86_64_nt
283	mv secplex.dll x86_64_nt/secplex121.dll
284	cp $(CPLEX121_SUPPORT_x86_64_nt) x86_64_nt/
285	cp $(CPLEX121_SUPPORT_x86_64_nt) ../lib/x86_64_nt/
286
287x86_64_nt/secplex122.dll: eplex.c eplex_cplex.h eplex_cplex.c eplex.h
288	$(CC) -DCPLEX=12 -DCPLEXMINOR=2 $(CPPFLAGS) $(CFLAGS) -I$(THIRDPARTY)/cplex122/include/ilcplex -c eplex.c
289	$(DYLD) $(DYNLDFLAGS)  eplex.o $(THIRDPARTY)/cplex122/bin/x64_win64/cplex122.dll $(ECLIBS) -o secplex.dll
290	[ -d x86_64_nt ] || mkdir x86_64_nt
291	mv secplex.dll x86_64_nt/secplex122.dll
292	cp $(CPLEX122_SUPPORT_x86_64_nt) x86_64_nt/
293	cp $(CPLEX122_SUPPORT_x86_64_nt) ../lib/x86_64_nt/
294
295x86_64_nt/secplex124.dll: eplex.c eplex_cplex.h eplex_cplex.c eplex.h
296	$(CC) -DCPLEX=12 -DCPLEXMINOR=4 $(CPPFLAGS) $(CFLAGS) -I$(THIRDPARTY)/cplex124/include/ilcplex -c eplex.c
297	$(DYLD) $(DYNLDFLAGS) eplex.o $(THIRDPARTY)/cplex124/bin/x64_win64/cplex124.dll $(ECLIBS) -o secplex.dll
298	[ -d x86_64_nt ] || mkdir x86_64_nt
299	mv secplex.dll x86_64_nt/secplex124.dll
300	cp $(CPLEX124_SUPPORT_x86_64_nt) x86_64_nt/
301	cp $(CPLEX124_SUPPORT_x86_64_nt) ../lib/x86_64_nt/
302
303x86_64_nt/secplex1251.dll: eplex.c eplex_cplex.h eplex_cplex.c eplex.h
304	$(CC) -DCPLEX=12 -DCPLEXMINOR=5 $(CPPFLAGS) $(CFLAGS) -I$(THIRDPARTY)/cplex1251/include/ilcplex -c eplex.c
305	$(DYLD) $(DYNLDFLAGS) eplex.o $(THIRDPARTY)/cplex1251/bin/x64_win64/cplex1251.dll $(ECLIBS) -o secplex.dll
306	[ -d x86_64_nt ] || mkdir x86_64_nt
307	mv secplex.dll x86_64_nt/secplex1251.dll
308	cp $(CPLEX1251_SUPPORT_x86_64_nt) x86_64_nt/
309	cp $(CPLEX1251_SUPPORT_x86_64_nt) ../lib/x86_64_nt/
310
311x86_64_linux/secplex90.so: eplex.c eplex_cplex.h eplex_cplex.c eplex.h
312	$(CC) -DCPLEX=9 -DCPLEXMINOR=0 $(CPPFLAGS) $(CFLAGS) -I$(THIRDPARTY)/cplex90/include/ilcplex -c eplex.c
313	$(DYLD) $(DYNLDFLAGS) eplex.o $(THIRDPARTY)/cplex90/lib/x86_64_linux/static_pic/libcplex.a $(ECLIBS) -lpthread -o secplex.so
314	[ -d x86_64_linux ] || mkdir x86_64_linux
315	mv secplex.so x86_64_linux/secplex90.so
316
317x86_64_linux/secplex102.so: eplex.c eplex_cplex.h eplex_cplex.c eplex.h
318	$(CC) -DCPLEX=10 -DCPLEXMINOR=2 $(CPPFLAGS) $(CFLAGS) -I$(THIRDPARTY)/cplex102/include/ilcplex -c eplex.c
319	$(DYLD) $(DYNLDFLAGS) eplex.o $(THIRDPARTY)/cplex102/lib/x86_64_linux/static_pic/libcplex.a $(ECLIBS) -lpthread -o secplex.so
320	[ -d x86_64_linux ] || mkdir x86_64_linux
321	mv secplex.so x86_64_linux/secplex102.so
322
323x86_64_linux/secplex110.so: eplex.c eplex_cplex.h eplex_cplex.c eplex.h
324	$(CC) -DCPLEX=11 -DCPLEXMINOR=0 $(CPPFLAGS) $(CFLAGS) -I$(THIRDPARTY)/cplex110/include/ilcplex -c eplex.c
325	$(DYLD) $(DYNLDFLAGS)  eplex.o $(THIRDPARTY)/cplex110/lib/x86_64_linux/static_pic/libcplex.a $(ECLIBS) -lpthread -o secplex.so
326	[ -d x86_64_linux ] || mkdir x86_64_linux
327	mv secplex.so x86_64_linux/secplex110.so
328
329x86_64_linux/secplex121.so: eplex.c eplex_cplex.h eplex_cplex.c eplex.h
330	$(CC) -DCPLEX=12 -DCPLEXMINOR=1 $(CPPFLAGS) $(CFLAGS) -I$(THIRDPARTY)/cplex121/include/ilcplex -c eplex.c
331	$(DYLD) $(DYNLDFLAGS) eplex.o $(THIRDPARTY)/cplex121/lib/x86_64_linux/static_pic/libcplex.a $(ECLIBS) -lpthread -o secplex.so
332	[ -d x86_64_linux ] || mkdir x86_64_linux
333	mv secplex.so x86_64_linux/secplex121.so
334
335x86_64_linux/secplex122.so: eplex.c eplex_cplex.h eplex_cplex.c eplex.h
336	$(CC) -DCPLEX=12 -DCPLEXMINOR=2 $(CPPFLAGS) $(CFLAGS) -I$(THIRDPARTY)/cplex122/include/ilcplex -c eplex.c
337	$(DYLD) $(DYNLDFLAGS) eplex.o $(THIRDPARTY)/cplex122/lib/x86_64_linux/static_pic/libcplex.a $(ECLIBS) -lpthread -o secplex.so
338	[ -d x86_64_linux ] || mkdir x86_64_linux
339	mv secplex.so x86_64_linux/secplex122.so
340
341x86_64_linux/secplex124.so: eplex.c eplex_cplex.h eplex_cplex.c eplex.h
342	$(CC) -DCPLEX=12 -DCPLEXMINOR=4 $(CPPFLAGS) $(CFLAGS) -I$(THIRDPARTY)/cplex124/include/ilcplex -c eplex.c
343	$(CC) -shared eplex.o $(THIRDPARTY)/cplex124/lib/x86_64_linux/static_pic/libcplex.a $(ECLIBS) -lpthread -o secplex.so
344	[ -d x86_64_linux ] || mkdir x86_64_linux
345	mv secplex.so x86_64_linux/secplex124.so
346
347x86_64_linux/secplex126.so: eplex.c eplex_cplex.h eplex_cplex.c eplex.h
348	$(CC) -DCPLEX=12 -DCPLEXMINOR=6 $(CPPFLAGS) $(CFLAGS) -I$(THIRDPARTY)/cplex126/include/ilcplex -c eplex.c
349	$(CC) -shared eplex.o $(THIRDPARTY)/cplex126/lib/x86_64_linux/static_pic/libcplex.a $(ECLIBS) -lpthread -o secplex.so
350	[ -d x86_64_linux ] || mkdir x86_64_linux
351	mv secplex.so x86_64_linux/secplex126.so
352
353i386_macosx/secplex110.dylib: eplex.c eplex_cplex.h eplex_cplex.c eplex.h
354	$(CC) -DCPLEX=11 -DCPLEXMINOR=0 $(CPPFLAGS) $(CFLAGS) -I$(THIRDPARTY)/cplex110/include/ilcplex -c eplex.c
355	$(DYLD) $(DYNLDFLAGS) eplex.o $(THIRDPARTY)/cplex110/lib/i386_macosx/static_pic/libcplex.a $(ECLIBS) $(GMP_LD) -lIOKit -lpthread -o secplex.dylib
356	[ -d i386_macosx ] || mkdir i386_macosx
357	mv secplex.dylib i386_macosx/secplex110.dylib
358
359i386_macosx/secplex121.dylib: eplex.c eplex_cplex.h eplex_cplex.c eplex.h
360	$(CC) -DCPLEX=12 -DCPLEXMINOR=1 $(CPPFLAGS) $(CFLAGS) -I$(THIRDPARTY)/cplex121/include/ilcplex -c eplex.c
361	$(DYLD) $(DYNLDFLAGS) eplex.o $(THIRDPARTY)/cplex121/lib/i386_macosx/static_pic/libcplex.a $(ECLIBS) $(GMP_LD) -lIOKit -lpthread -o secplex.dylib
362	[ -d i386_macosx ] || mkdir i386_macosx
363	mv secplex.dylib i386_macosx/secplex121.dylib
364
365i386_macosx/secplex122.dylib: eplex.c eplex_cplex.h eplex_cplex.c eplex.h
366	$(CC) -DCPLEX=12 -DCPLEXMINOR=2 $(CPPFLAGS) $(CFLAGS) -I$(THIRDPARTY)/cplex122/include/ilcplex -c eplex.c
367	$(DYLD) $(DYNLDFLAGS) eplex.o $(THIRDPARTY)/cplex122/lib/i386_macosx/static_pic/libcplex.a $(ECLIBS) $(GMP_LD) -lIOKit -lpthread -o secplex.dylib
368	[ -d i386_macosx ] || mkdir i386_macosx
369	mv secplex.dylib i386_macosx/secplex122.dylib
370
371#----------------------------------------------------------------------
372# EPLEX/XPRESS
373#----------------------------------------------------------------------
374
375XPRESS_VERSION_NAMES = $(XPRESS_VERSIONS:%=express%)
376XPRESS_WORKING_DIRS = $(XPRESS_VERSION_NAMES:%=$(ARCH)/%)
377XPRESS_DEST_DIRS = $(XPRESS_WORKING_DIRS:%=$(PREFIX)/lib/%)
378
379
380# Locations of XPRESS versions, list of support files, and
381# rules to copy them to their destination.
382#
383# For adding a new version:
384#    - add new version number in toplevel configure.ac
385#    - for XPRESS, add XPRESS<version>, SUPPORT_* below, and add
386#      rules for copying the SUPPORT_* files from their actual location
387#    - write the rules for compiling the eplex C code for each version
388
389# XPRESS 13
390XPRESS13 = $(THIRDPARTY)/xosl13
391XPRESS1326 = $(THIRDPARTY)/xosl1326
392XPRESS1326icp = $(THIRDPARTY)/xosl1326icp
393
394
395# XPRESS 14
396# the version of libxprs.so we link against has to be in the form .so.X.Y
397# for Solaris as Xpress always look for this name when loading
398XPRESS14 = $(THIRDPARTY)/xosl14
399XPRESS1427 = $(THIRDPARTY)/xosl1427
400XPRESS1427_SUPPORT_i386_nt = \
401	$(XPRESS1427)/$(ARCH)/bin/xprs.dll \
402	$(XPRESS1427)/$(ARCH)/bin/xprl.dll
403XPRESS1427_SUPPORT_sparc_sunos5 = \
404	$(XPRESS1427)/$(ARCH)/lib/libxprs.so.14.27 \
405	$(XPRESS1427)/$(ARCH)/lib/libxprl.so.1.1
406XPRESS1427_SUPPORT_i386_linux = \
407	$(XPRESS1427_SUPPORT_sparc_sunos5)
408
409$(ARCH)/express1427:	$(XPRESS1427)
410	mkdir -p $@
411	@/bin/chmod $(DIRPERM) $@
412	/bin/cp $(XPRESS1427_SUPPORT_$(ARCH)) $(XPRESS1427_SUPPORT) $@
413	-@/bin/chmod $(PERM) $@/*
414
415$(PREFIX)/lib/$(ARCH)/express1427:	$(ARCH)/express1427
416	mkdir -p $@
417	@/bin/chmod $(DIRPERM) $@
418	/bin/cp -pr $</* $@
419	-@/bin/chmod $(PERM) $@
420
421
422# XPRESS 14icp
423XPRESS1427icp = $(THIRDPARTY)/xosl1427icp
424XPRESS1427icp_SUPPORT = \
425	$(XPRESS14)/lic_icp/xpress.lic
426XPRESS1427icp_SUPPORT_sparc_sunos5 = \
427	$(XPRESS1427icp)/$(ARCH)/lib/libxprs.so.14.27 \
428	$(XPRESS1427icp)/$(ARCH)/lib/libxprl.so.1.1
429XPRESS1427icp_SUPPORT_i386_linux = \
430	$(XPRESS1427icp_SUPPORT_sparc_sunos5)
431
432$(ARCH)/express1427icp:	$(XPRESS1427icp)
433	mkdir -p $@
434	@/bin/chmod $(DIRPERM) $@
435	/bin/cp $(XPRESS1427icp_SUPPORT_$(ARCH)) $(XPRESS1427icp_SUPPORT) $@
436	-@/bin/chmod $(PERM) $@/*
437
438$(PREFIX)/lib/$(ARCH)/express1427icp:	$(ARCH)/express1427icp
439	mkdir -p $@
440	@/bin/chmod $(DIRPERM) $@
441	/bin/cp -pr $</* $@
442	-@/bin/chmod $(PERM) $@
443
444
445# XPRESS 15
446XPRESS15 = $(THIRDPARTY)/xosl15
447XPRESS1525 = $(THIRDPARTY)/xosl1525
448XPRESS1525_SUPPORT = \
449	$(XPRESS1525)/$(ARCH)/bin/dash$(EXEEXT) \
450	$(XPRESS1525)/$(ARCH)/bin/lmgrd$(EXEEXT)
451XPRESS1525_SUPPORT_i386_nt = \
452	$(XPRESS1525)/$(ARCH)/bin/xprs.dll \
453	$(XPRESS1525)/$(ARCH)/bin/xprl.dll
454XPRESS1525_SUPPORT_sparc_sunos5 = \
455	$(XPRESS1525)/$(ARCH)/lib/libxprs.so.15.25 \
456	$(XPRESS1525)/$(ARCH)/lib/libxprl.so.2004
457XPRESS1525_SUPPORT_i386_linux = \
458	$(XPRESS1525_SUPPORT_sparc_sunos5)
459
460$(ARCH)/express1525:	$(XPRESS1525)
461	mkdir -p $@
462	@/bin/chmod $(DIRPERM) $@
463	/bin/cp $(XPRESS1525_SUPPORT_$(ARCH)) $(XPRESS1525_SUPPORT) $@
464	-@/bin/chmod $(PERM) $@/*
465
466$(PREFIX)/lib/$(ARCH)/express1525:	$(ARCH)/express1525
467	mkdir -p $@
468	@/bin/chmod $(DIRPERM) $@
469	/bin/cp -pr $</* $@
470	-@/bin/chmod $(PERM) $@
471
472
473# XPRESS 16
474XPRESS16 = $(THIRDPARTY)/xosl16
475XPRESS1601 = $(THIRDPARTY)/xosl1601
476XPRESS1601_SUPPORT = \
477	$(XPRESS1601)/$(ARCH)/bin/dash$(EXEEXT) \
478	$(XPRESS1601)/$(ARCH)/bin/lmgrd$(EXEEXT)
479XPRESS1601_SUPPORT_i386_nt = \
480	$(XPRESS1601)/$(ARCH)/lib/xprs.dll \
481	$(XPRESS1601)/$(ARCH)/lib/xprl.dll
482XPRESS1601_SUPPORT_sparc_sunos5 = \
483	$(XPRESS1601)/$(ARCH)/lib/libxprs.so.16.01 \
484	$(XPRESS1601)/$(ARCH)/lib/libxprl.so.2005
485XPRESS1601_SUPPORT_i386_linux = \
486	$(XPRESS1601_SUPPORT_sparc_sunos5)
487
488$(ARCH)/express1601:	$(XPRESS1601)
489	mkdir -p $@
490	@/bin/chmod $(DIRPERM) $@
491	/bin/cp $(XPRESS1601_SUPPORT_$(ARCH)) $(XPRESS1601_SUPPORT) $@
492	-@/bin/chmod $(PERM) $@/*
493
494$(PREFIX)/lib/$(ARCH)/express1601:	$(ARCH)/express1601
495	mkdir -p $@
496	@/bin/chmod $(DIRPERM) $@
497	/bin/cp -pr $</* $@
498	-@/bin/chmod $(PERM) $@
499
500
501# XPRESS 20
502XPRESS2000 = $(THIRDPARTY)/xosl2000
503XPRESS2000_SUPPORT=
504XPRESS2000_SUPPORT_x86_64_linux = \
505	$(XPRESS2000)/$(ARCH)/lib/libxprs.so \
506	$(XPRESS2000)/$(ARCH)/lib/libxprl.so
507
508$(ARCH)/express2000:	$(XPRESS2000)
509	mkdir -p $@
510	@/bin/chmod $(DIRPERM) $@
511	/bin/cp $(XPRESS2000_SUPPORT_$(ARCH)) $(XPRESS2000_SUPPORT) $@
512	-@/bin/chmod $(PERM) $@/*
513
514$(PREFIX)/lib/$(ARCH)/express2000:	$(ARCH)/express2000
515	mkdir -p $@
516	@/bin/chmod $(DIRPERM) $@
517	/bin/cp -pr $</* $@
518	-@/bin/chmod $(PERM) $@
519
520
521# compile rules
522sparc_sunos5/sexpress1525.so: eplex.c $(ARCH)/express1525
523	$(CC) -DXPRESS=15  $(CPPFLAGS) $(CFLAGS) -I$(XPRESS1525)/$(ARCH)/include -c eplex.c
524	$(CC) -G eplex.o $(ARCH)/express1525/libxprs.so.15.25  $(ECLIBS) -o sexpress.so
525	[ -d sparc_sunos5 ] || mkdir sparc_sunos5
526	mv sexpress.so sparc_sunos5/sexpress1525.so
527
528sparc_sunos5/sexpress1427icp.so: eplex.c $(ARCH)/express1427icp
529	$(CC) -DXPRESS=14  -DXPRESS_OEM_ICPARC_2002 $(CPPFLAGS) $(CFLAGS) -I$(XPRESS1427)/$(ARCH)/include -c eplex.c
530	$(CC) -G eplex.o $(ARCH)/express1427icp/libxprs.so.14.27 $(ARCH)/express1427icp/libxprl.so.1.1 $(ECLIBS) -lpthread -o sexpress.so
531	[ -d sparc_sunos5 ] || mkdir sparc_sunos5
532	mv sexpress.so sparc_sunos5/sexpress1427icp.so
533
534sparc_sunos5/sexpress1427.so: eplex.c $(ARCH)/express1427
535	$(CC) -DXPRESS=14  $(CPPFLAGS) $(CFLAGS) -I$(XPRESS1427)/$(ARCH)/include -c eplex.c
536	$(CC) -G eplex.o $(ARCH)/express1427/libxprs.so.14.27  $(ECLIBS) -o sexpress.so
537	[ -d sparc_sunos5 ] || mkdir sparc_sunos5
538	mv sexpress.so sparc_sunos5/sexpress1427.so
539
540sparc_sunos5/sexpress1326icp.so: eplex.c
541	$(CC) -DXPRESS=13 -DXPRESS_OEM_ICPARC_2002  $(CPPFLAGS) $(CFLAGS) -I$(XPRESS1326icp)/$(ARCH)/include -c eplex.c
542	$(CC) -G eplex.o $(XPRESS1326icp)/$(ARCH)/lib/libxprs.a $(ECLIBS) -o sexpress.so
543	[ -d sparc_sunos5 ] || mkdir sparc_sunos5
544	mv sexpress.so sparc_sunos5/sexpress1326icp.so
545
546i386_linux/sexpress1326icp.so: eplex.c
547	$(CC) -DXPRESS=13  -DXPRESS_OEM_ICPARC_2002 $(CPPFLAGS) $(CFLAGS) -I$(XPRESS1326icp)/$(ARCH)/include -c eplex.c
548	$(DYLD) $(DYNLDFLAGS)  eplex.o $(XPRESS1326icp)/$(ARCH)/lib/libxprs.a $(ECLIBS) -o sexpress.so
549	[ -d i386_linux ] || mkdir i386_linux
550	mv sexpress.so i386_linux/sexpress1326icp.so
551
552i386_linux/sexpress1427.so: eplex.c $(ARCH)/express1427
553	$(CC) -DXPRESS=14  $(CPPFLAGS) $(CFLAGS) -I$(XPRESS1427)/$(ARCH)/include -c eplex.c
554	$(DYLD) $(DYNLDFLAGS)  eplex.o $(ARCH)/express1427/libxprs.so.14.27  $(ECLIBS) -o sexpress.so
555	[ -d i386_linux ] || mkdir i386_linux
556	mv sexpress.so i386_linux/sexpress1427.so
557
558i386_linux/sexpress1427icp.so: eplex.c $(ARCH)/express1427icp
559	$(CC) -DXPRESS=14  -DXPRESS_OEM_ICPARC_2002 $(CPPFLAGS) $(CFLAGS) -I$(XPRESS1427)/$(ARCH)/include -c eplex.c
560	$(DYLD) $(DYNLDFLAGS) eplex.o $(ARCH)/express1427icp/libxprs.so.14.27  $(ECLIBS) -o sexpress.so
561	[ -d i386_linux ] || mkdir i386_linux
562	mv sexpress.so i386_linux/sexpress1427icp.so
563
564i386_linux/sexpress1525.so: eplex.c $(ARCH)/express1525
565	$(CC) -DXPRESS=15  $(CPPFLAGS) $(CFLAGS) -I$(XPRESS1525)/$(ARCH)/include -c eplex.c
566	$(DYLD) $(DYNLDFLAGS)  eplex.o $(ARCH)/express1525/libxprs.so.15.25  $(ECLIBS) -o sexpress.so
567	[ -d i386_linux ] || mkdir i386_linux
568	mv sexpress.so i386_linux/sexpress1525.so
569
570i386_linux/sexpress1601.so: eplex.c $(ARCH)/express1601
571	$(CC) -DXPRESS=16  $(CPPFLAGS) $(CFLAGS) -I$(XPRESS1601)/$(ARCH)/include -c eplex.c
572	$(DYLD) $(DYNLDFLAGS)  eplex.o $(ARCH)/express1601/libxprs.so.16.01  $(ECLIBS) -o sexpress.so
573	[ -d i386_linux ] || mkdir i386_linux
574	mv sexpress.so i386_linux/sexpress1601.so
575
576x86_64_linux/sexpress2000.so: eplex.c $(ARCH)/express2000
577	$(CC) -DXPRESS=20  $(CPPFLAGS) $(CFLAGS) -I$(XPRESS2000)/$(ARCH)/include -c eplex.c
578	$(DYLD) $(DYNLDFLAGS)  eplex.o $(ARCH)/express2000/libxprs.so  $(ECLIBS) -o sexpress.so
579	[ -d x86_64_linux ] || mkdir x86_64_linux
580	mv sexpress.so x86_64_linux/sexpress2000.so
581
582
583i386_nt/sexpress1427.dll: eplex.c $(ARCH)/express1427
584	[ -d $(ARCH) ] || mkdir $(ARCH)
585	$(CC) -DXPRESS=14  $(CPPFLAGS) $(CFLAGS) \
586		-I$(XPRESS1427)/$(ARCH)/include \
587		-shared -o $@ \
588		eplex.c \
589		-L$(XPRESS1427)/$(ARCH)/lib -lxprs $(ECLIBS)
590
591i386_nt/sexpress1525.dll: eplex.c $(ARCH)/express1525
592	[ -d $(ARCH) ] || mkdir $(ARCH)
593	$(CC) -DXPRESS=15  $(CPPFLAGS) $(CFLAGS) \
594		-I$(XPRESS1525)/$(ARCH)/include \
595		-shared -o $@ \
596		eplex.c \
597		-L$(XPRESS1525)/$(ARCH)/lib -lxprs $(ECLIBS)
598
599
600# to compile bug reports for Dash
601bug14: bug.c
602	$(CC) -g -DXPRESS=14 $(CPPFLAGS) $(CFLAGS) -I$(XPRESS1427)/$(ARCH)/include bug.c $(XPRESS1427)/$(ARCH)/lib/libxprs.so  -lm -o bug14
603
604bug65: bug.c 
605	$(CC) -g -DCPLEX=6 -DCPLEXMINOR=5 $(CPPFLAGS) $(CFLAGS) -I/usr/local/cplex bug.c /usr/local/cplex/libcplex.a  -lm -o bug65
606
607bugclp: bug.c
608	$(CXX) -g -DCOIN -DCOIN_USE_CLP @OSICLP_ADDDEF@ -DNOECLIPSE $(CPPFLAGS) $(CFLAGS) -I$(CLPCBCARCHDIR)/include -c coinplex.cpp
609	$(CC) -DCOIN -DC_TO_COIN $(CPPFLAGS) $(CFLAGS) -DNOECLIPSE -c bug.c
610	$(CC) -g coinplex.o bug.o $(CLPCBCARCHDIR)/lib/CbcBranchUser.o $(CLPCBCARCHDIR)/lib/CbcCompareUser.o -L$(CLPCBCARCHDIR)/lib $(COINCBCLIBS) $(COINCLPLIBS) @OSICLP_ADDLIB@ $(COINOSILIBS) $(STDCXXLIB) -DCOIN -o bugclp
611
612
613#----------------------------------------------------------------------
614# EPLEX/Gurobi
615#----------------------------------------------------------------------
616
617$(ARCH)/segurobi$(GUROBI_VERSION).$(OBJ_SUFFIX): eplex.c eplex.h eplex_gurobi.h eplex_gurobi.c
618	[ -d $(ARCH) ] || mkdir $(ARCH)
619	$(CC) -DGUROBI $(CPPFLAGS) $(CFLAGS) -I$(GUROBIDIR)/include -c eplex.c
620	$(DYLD) $(DYNLDFLAGS)  eplex.o $(GUROBIDIR)/$(DLIBDIR)/$(LIB_PREFIX)gurobi$(GUROBI_VERSION).$(OBJ_SUFFIX) $(ECLIBS) -o $@
621	cp $(GUROBIDIR)/$(DLIBDIR)/$(LIB_PREFIX)gurobi$(GUROBI_VERSION).$(OBJ_SUFFIX) $(ARCH)
622	cp $(GUROBIDIR)/$(DLIBDIR)/$(LIB_PREFIX)gurobi$(GUROBI_VERSION).$(OBJ_SUFFIX) ../lib/$(ARCH)
623
624
625#----------------------------------------------------------------------
626# Installation
627#----------------------------------------------------------------------
628
629ECLIPSE = $(ECLIPSEDIR)/bin/$(ARCH)/eclipse
630
631EXAMPLE_FILES =
632ECL_ECO_FILES =	empty_language.ecl \
633		bfs.ecl colgen.ecl dual_var.ecl \
634		b_trees.ecl n_trees.ecl \
635		eplex.ecl eplex_cplex.ecl eplex_xpress.ecl \
636		eplex_gurobi.ecl eplex_osi.ecl eplex_osi_clpcbc.ecl \
637		eplex_osi_symclp.ecl  eplex_osi_glpk.ecl mip.ecl
638ECL_ONLY_FILES = eplex_lic_info.ecl
639INCLUDE_ONLY_FILES = colgen_.ecl eplex_.ecl
640ECL_ECI_FILES =	bfs.ecl colgen.ecl \
641		eplex.ecl eplex_xpress.ecl eplex_cplex.ecl \
642		eplex_gurobi.ecl eplex_osi.ecl eplex_osi_clpcbc.ecl \
643		eplex_osi_symclp.ecl  eplex_osi_glpk.ecl mip.ecl
644
645EXAMPLE_DEST =	$(EXAMPLE_FILES:%=$(PREFIX)/doc/examples/tutorial/%) 
646ECO_DEST =	$(ECL_ECO_FILES:%.ecl=$(PREFIX)/lib/%.eco)
647SOURCE_DEST =	$(ECL_ECO_FILES:%.ecl=$(PREFIX)/lib/%.ecl) \
648		$(ECL_ONLY_FILES:%=$(PREFIX)/lib/%) \
649		$(INCLUDE_ONLY_FILES:%=$(PREFIX)/lib/%)
650ECI_DEST =      $(ECL_ECI_FILES:%.ecl=$(PREFIX)/lib/%.eci) 
651OBJ_DEST =	$(OBJ_FILES:%=$(PREFIX)/lib/%)
652
653clean:	archclean ecoclean
654	rm -f $(EXAMPLE_DEST) $(ECH_EXAMPLE_DEST) $(ECI_DEST) 
655
656archclean:
657	rm -rf $(ARCH) $(OBJ_DEST) $(XPRESS_DEST_DIRS)
658
659ecoclean:
660	rm -rf *.eco $(ECO_DEST)
661
662install_all:	install_cross $(ECO_DEST) $(ECI_DEST)
663
664install_cross:	$(XPRESS_DEST_DIRS) $(OBJ_DEST) $(SOURCE_DEST) \
665	        $(EXAMPLE_DEST) $(ECH_EXAMPLE_DEST) 
666
667
668%/.stamp:
669	mkdir -p $(@D)
670	@/bin/chmod $(DIRPERM) $(@D)
671	@touch $@; /bin/chmod $(PERM) $@
672
673
674# general installation rules
675#
676# Note:
677# - before making eci/eco we recursively make the objects. One could have
678#   precise dependencies on the relevant objects, but in fact eci/eco don't
679#   really depend on the actual external object contents: a change in the
680#   object does not require the eco/eci to be rebuilt, this is only necessary
681#   if the ecl/pl file changed.
682# - we add . to the library path because some libraries might not yet
683#   be installed in ECLIPSEDIR/lib at [fi]compile time
684
685objects:	$(OBJ_FILES)
686
687$(PREFIX)/doc/examples/tutorial/%.ecl:	%.ecl $(PREFIX)/doc/examples/tutorial/.stamp
688	/bin/cp $< $@
689	-@/bin/chmod $(PERM) $@
690
691$(PREFIX)/lib/%.eco:	%.pl $(PREFIX)/lib/.stamp
692	@$(MAKE) -f $(MAKEFILE) objects
693	$(ECLIPSE) -e 'get_flag(library_path,P),set_flag(library_path,["."|P]),lib(fcompile), set_flag(variable_names,off), fcompile("$(*F)", [outdir:"$(@D)"])'
694	-@/bin/chmod $(PERM) $@
695
696$(PREFIX)/lib/%.eco:	%.ecl $(PREFIX)/lib/.stamp
697	@$(MAKE) -f $(MAKEFILE) objects
698	LD_LIBRARY_PATH=$(COINARCHDIR)/lib:$(LD_LIBRARY_PATH) $(ECLIPSE) -e 'get_flag(library_path,P),set_flag(library_path,["."|P]),lib(fcompile), set_flag(variable_names,off), fcompile("$(*F)", [outdir:"$(@D)"])'
699	-@/bin/chmod $(PERM) $@
700
701$(PREFIX)/lib/%.eci:	%.ecl $(PREFIX)/lib/.stamp
702	@$(MAKE) -f $(MAKEFILE) objects
703	LD_LIBRARY_PATH=$(COINARCHDIR)/lib:$(LD_LIBRARY_PATH) $(ECLIPSE) -e 'get_flag(library_path,P),set_flag(library_path,["."|P]),lib(document),icompile("$(*F)","$(@D)")'
704	-@/bin/chmod $(PERM) $@
705
706$(PREFIX)/lib/%.ecl:	%.ecl $(PREFIX)/lib/.stamp
707	/bin/cp $< $@
708	-@/bin/chmod $(PERM) $@
709
710$(PREFIX)/lib/$(ARCH)/%.$(OBJ_SUFFIX):	$(ARCH)/%.$(OBJ_SUFFIX) $(PREFIX)/lib/$(ARCH)/.stamp
711	/bin/cp $< $@
712	-@/bin/chmod $(PERM) $@
713
714$(PREFIX)/lib/$(ARCH)/%.dll.a:	$(ARCH)/%.dll $(PREFIX)/lib/$(ARCH)/.stamp
715	/bin/cp $< $@
716	-@/bin/chmod $(PERM) $@
717
718$(PREFIX)/lib/$(ARCH)/%.def:	%.def $(PREFIX)/lib/$(ARCH)/.stamp
719	/bin/cp $< $@
720	-@/bin/chmod $(PERM) $@
721
722$(PREFIX)/lib/$(ARCH)/%.def:	$(ARCH)/%.def $(PREFIX)/lib/$(ARCH)/.stamp
723	/bin/cp $< $@
724	-@/bin/chmod $(PERM) $@
725
726
727#
728# Pretty-print the sources
729#
730
731PRETTY_DIR =	$(PREFIX)/doc_internal/lib
732
733HTML_DEST =	$(ECL_ECO_FILES:%.ecl=$(PRETTY_DIR)/%.html) \
734		$(ECL_ONLY_FILES:%.ecl=$(PRETTY_DIR)/%.html)
735
736pretty:		$(PRETTY_DIR)/.stamp $(HTML_DEST)
737
738
739$(PRETTY_DIR)/%.html:	%.ecl $(PRETTY_DIR)/.stamp
740	-@$(PREFIX)/bin/$(ARCH)/eclipse -e \
741	    "lib(pretty_printer),argv(all,[_,O|F]),pretty_print(F,[outdir:O])" \
742	    -- "$(PRETTY_DIR)" $<
743
744
745
746# additional dependencies for eplex
747
748$(PREFIX)/lib/eplex.eco:	eplex.ecl eplex_.ecl
749
750$(PREFIX)/lib/eplex.eci:	eplex.ecl eplex_.ecl eplex_comments.ecl
751
752$(PREFIX)/lib/colgen.eco:	colgen.ecl colgen_.ecl
753$(PREFIX)/lib/colgen.eci:	colgen.ecl colgen_.ecl colgen_comments.ecl
754
755$(PREFIX)/lib/bfs.eci:		bfs.ecl bfs_comments.ecl
756
757
758#----------------------------------------------------------------------
759# Rebuild configured files
760#----------------------------------------------------------------------
761
762config.h:	stamp-h
763stamp-h:	config.h.in
764	@( cd $(top_srcdir); \
765	  if grep "hostname = `hostname`" config.log ; then \
766	    ./config.status ; \
767	  else \
768	    echo === Please re-run configure on this host ; \
769	  fi )
770
771$(MAKEFILE):	Makefile.in
772	@( cd $(top_srcdir); \
773	  if grep "hostname = `hostname`" config.log ; then \
774	    ./config.status ; \
775	  else \
776	    echo === Please re-run configure on this host ; \
777	  fi )
778
779#----------------------------------------------------------------------
780# Some helpful rules to build COIN-OR Cbc/SYMPHONY in $(THIRDPARTY)
781# We only build static libraries!
782#----------------------------------------------------------------------
783
784ifeq ($(OSCLASS),win)
785
786# must use absolute path as there are configures for each COIN component
787CONFIG_PREFIX=CONFIG_SITE=$(shell pwd)/../config.$(ARCH)
788
789else
790
791CONFIG_PREFIX=
792
793endif
794
795
796COIN_CBC_VERSION=2.8
797THIRDPARTY_CBC_DEST=$(THIRDPARTY)/coinclpcbc$(COIN_CBC_VERSION)/$(ARCH)
798
799install_cbc:    all_cbc
800	mkdir -p $(THIRDPARTY_CBC_DEST)/include
801	mkdir -p $(THIRDPARTY_CBC_DEST)/lib
802	/bin/cp -pr Cbc/$(ARCH)/include/coin/* $(THIRDPARTY_CBC_DEST)/include
803	/bin/cp -pr Cbc/$(ARCH)/lib/* $(THIRDPARTY_CBC_DEST)/lib
804
805all_cbc:	basic_cbc 
806	make -f Makefile.$(ARCH) Cbc/$(ARCH)/include/coin/CbcBranchUser.hpp 
807	make -f Makefile.$(ARCH) Cbc/$(ARCH)/include/coin/CbcCompareUser.hpp
808	make -f Makefile.$(ARCH) Cbc/$(ARCH)/lib/CbcBranchUser.o 
809	make -f Makefile.$(ARCH) Cbc/$(ARCH)/lib/CbcCompareUser.o
810
811basic_cbc:	Cbc/$(ARCH)/Makefile
812	( cd Cbc/$(ARCH) ; make install )
813
814Cbc/$(ARCH)/Makefile:	Cbc/configure
815	mkdir -p Cbc/$(ARCH)
816	( cd Cbc/$(ARCH) ; $(CONFIG_PREFIX) ../configure --host=@host@ --enable-static --disable-shared --disable-zlib --disable-bzlib ADD_CXXFLAGS="$(CFLAGS) -DGENERAL_HANDLER_PRINTING" ADD_CFLAGS="$(CFLAGS) -DGENRAL_HANDLER_PRINTING" F77=unavailable )
817
818Cbc/configure:
819	svn co https://projects.coin-or.org/svn/Cbc/stable/$(COIN_CBC_VERSION) Cbc
820
821Cbc/$(ARCH)/include/coin/%.hpp:  Cbc/Cbc/examples/%.hpp basic_cbc
822	mkdir -p $(@D)
823	/bin/cp $< $@
824
825Cbc/$(ARCH)/lib/%.o:  Cbc/$(ARCH)/Cbc/examples/%.o
826	mkdir -p $(@D)
827	/bin/cp $< $@
828
829Cbc/$(ARCH)/Cbc/examples/%.o:  Cbc/Cbc/examples/%.cpp basic_cbc
830	( cd $(@D) ; make $(@F) )
831
832
833
834COIN_SYM_VERSION=5.3
835THIRDPARTY_SYM_DEST=$(THIRDPARTY)/coinsymclp$(COIN_SYM_VERSION)/$(ARCH)
836
837install_sym:    all_sym
838	mkdir -p $(THIRDPARTY_SYM_DEST)/include
839	mkdir -p $(THIRDPARTY_SYM_DEST)/lib
840	/bin/cp -pr SYMPHONY/$(ARCH)/include/coin/* $(THIRDPARTY_SYM_DEST)/include
841	/bin/cp -pr SYMPHONY/$(ARCH)/lib/* $(THIRDPARTY_SYM_DEST)/lib
842
843all_sym:	SYMPHONY/$(ARCH)/Makefile
844	( cd SYMPHONY/$(ARCH) ; make install )
845
846SYMPHONY/$(ARCH)/Makefile:	SYMPHONY/configure
847	mkdir -p SYMPHONY/$(ARCH)
848	( cd SYMPHONY/$(ARCH) ; $(CONFIG_PREFIX) ../configure --host=@host@ --enable-static --disable-shared ADD_CXXFLAGS="$(CFLAGS)" ADD_CFLAGS="$(CFLAGS)" F77=unavailable )
849
850SYMPHONY/configure:
851	svn co https://projects.coin-or.org/svn/SYMPHONY/stable/$(COIN_SYM_VERSION) SYMPHONY
852
853
854