55f4c779eb17df9724d0be0e36c086ac93dbb649
[cvc5.git] / contrib / build-cudd-with-libtool.sh
1 #!/bin/bash
2 #
3 # Patch to cudd build system to build everything with libtool, supporting
4 # shared libraries. Also all libraries are combined into a single one.
5 #
6 # This script applies the patch, builds cudd, and, assuming there are no
7 # errors, reverses the patch.
8 #
9 # -- Morgan Deters <mdeters@cs.nyu.edu> Wed, 13 Jul 2011 18:03:11 -0400
10 #
11
12 cd "$(dirname "$0")"
13 if [ $# -ne 1 -o "$1" = -h -o "$1" = -help -o "$1" = --help ]; then
14 echo "usage: $(basename "$0") cudd-dir" >&2
15 exit 1
16 fi
17
18 patch="$(pwd)/$(basename "$0")"
19 if [ ! -r "$patch" ]; then
20 echo "error: can't read patch at \`$patch'" >&2
21 exit 1
22 fi
23 cudd_dir="$1"
24
25 arch=$(../config/config.guess | cut -f1 -d-)
26 case "$arch" in
27 i?86) XCFLAGS='-mtune=pentium4 -malign-double -DHAVE_IEEE_754 -DBSD' ;;
28 x86_64) XCFLAGS='-mtune=native -DHAVE_IEEE_754 -DBSD -DSIZEOF_VOID_P=8 -DSIZEOF_LONG=8' ;;
29 *) XCFLAGS= ;;
30 esac
31
32 set -ex
33
34 XCFLAGS="$XCFLAGS"
35
36 version_info=0:0:0
37
38 prefix="$cudd_dir"
39 eprefix="$prefix"
40 bindir="$eprefix/bin"
41 datadir="$prefix/share"
42 includedir="$prefix/include"
43 libdir="$prefix/lib"
44 mandir="$datadir/man/man1"
45 docdir="$datadir/doc"
46
47 cd "$cudd_dir"
48 patch -p1 < "$patch"
49 make "XCFLAGS=$XCFLAGS" "CC=libtool --mode=compile gcc" "CPP=libtool --mode=compile g++" libdir="$libdir" version_info="$version_info" DDDEBUG= MTRDEBUG= ICFLAGS=-O2
50 mkdir -p "$libdir"
51 libtool --mode=install cp libcudd.la "$libdir/libcudd.la"
52 libtool --mode=install cp libcuddxx.la "$libdir/libcuddxx.la"
53 libtool --mode=install cp libdddmp.la "$libdir/libdddmp.la"
54 libtool --finish "$libdir"
55 patch -p1 -R < "$patch"
56 exit
57
58 # patch follows
59
60 --- a/Makefile
61 +++ b/Makefile
62 @@ -221,11 +221,16 @@
63
64 build:
65 sh ./setup.sh
66 - @for dir in $(DIRS); do \
67 + +@for dir in $(BDIRS) obj; do \
68 (cd $$dir; \
69 echo Making $$dir ...; \
70 - make CC=$(CC) RANLIB=$(RANLIB) MFLAG= MNEMLIB= ICFLAGS="$(ICFLAGS)" XCFLAGS="$(XCFLAGS)" DDDEBUG="$(DDDEBUG)" MTRDEBUG="$(MTRDEBUG)" LDFLAGS="$(LDFLAGS)" PURE="$(PURE)" EXE="$(EXE)" )\
71 + make CC="$(CC)" RANLIB="$(RANLIB)" MFLAG= MNEMLIB= ICFLAGS="$(ICFLAGS)" XCFLAGS="$(XCFLAGS)" DDDEBUG="$(DDDEBUG)" MTRDEBUG="$(MTRDEBUG)" LDFLAGS="$(LDFLAGS)" PURE="$(PURE)" EXE="$(EXE)" )\
72 done
73 + libtool --mode=link gcc -rpath "$(libdir)" -version-info "$(version_info)" -o libcudd.la cudd/libcudd.la mtr/libmtr.la epd/libepd.la util/libutil.la st/libst.la -lm
74 + libtool --mode=link gcc -rpath "${libdir}" -version-info "$(version_info)" -o libdddmp.la dddmp/libdddmp.la
75 + libtool --mode=link g++ -rpath "$(libdir)" -version-info "$(version_info)" -o libcuddxx.la obj/libobj.la -lcudd
76 + +@(cd nanotrav; \
77 + make CC="$(CC)" RANLIB="$(RANLIB)" MFLAG= MNEMLIB= ICFLAGS="$(ICFLAGS)" XCFLAGS="$(XCFLAGS)" DDDEBUG="$(DDDEBUG)" MTRDEBUG="$(MTRDEBUG)" LDFLAGS="$(LDFLAGS)" PURE="$(PURE)" EXE="$(EXE)" )
78
79 nanotrav: build
80
81 @@ -319,4 +324,6 @@
82 echo Cleaning $$dir ...; \
83 make -s EXE="$(EXE)" distclean ) \
84 done
85 + rm -f libcudd* libdddmp*
86 + rm -fr .libs
87 sh ./shutdown.sh
88 --- a/cudd/Makefile
89 +++ b/cudd/Makefile
90 @@ -59,7 +59,7 @@
91 cuddZddPort.c cuddZddReord.c cuddZddSetop.c cuddZddSymm.c \
92 cuddZddUtil.c
93 PHDR = cudd.h cuddInt.h
94 -POBJ = $(PSRC:.c=.o)
95 +POBJ = $(PSRC:.c=.lo)
96 PUBJ = $(PSRC:.c=.u)
97 TARGET = test$(P)$(EXE)
98 TARGETu = test$(P)-u
99 @@ -71,12 +71,11 @@
100
101 #------------------------------------------------------
102
103 -lib$(P).a: $(POBJ)
104 - ar rv $@ $?
105 - $(RANLIB) $@
106 +lib$(P).la: $(POBJ)
107 + libtool --mode=link gcc -o $@ $?
108
109 -.c.o: $(PSRC) $(PHDR)
110 - $(CC) -c $< -I$(INCLUDE) $(CFLAGS) $(DDDEBUG)
111 +%.lo: %.c
112 + $(CC) -c -o $@ $< -I$(INCLUDE) $(CFLAGS) $(DDDEBUG)
113
114 optimize_dec: lib$(P).b
115
116 @@ -116,9 +115,10 @@
117 programs: $(TARGET) $(TARGETu) lintpgm
118
119 clean:
120 - rm -f *.o *.u mon.out gmon.out *.pixie *.Addrs *.Counts mnem.* \
121 + rm -f *.o *.lo *.u mon.out gmon.out *.pixie *.Addrs *.Counts mnem.* \
122 .pure core *.warnings
123
124 distclean: clean
125 - rm -f $(TARGET) $(TARGETu) lib*.a lib$(P).b llib-l$(P).ln \
126 + rm -f $(TARGET) $(TARGETu) lib*.a lib*.la lib$(P).b llib-l$(P).ln \
127 *.bak *~ tags .gdb_history *.qv *.qx
128 + rm -fr .libs
129 --- a/dddmp/Makefile
130 +++ b/dddmp/Makefile
131 @@ -148,7 +148,7 @@
132 dddmpStoreMisc.c dddmpUtil.c dddmpBinary.c dddmpConvert.c \
133 dddmpDbg.c
134 PHDR = dddmp.h dddmpInt.h $(INCLUDE)/cudd.h $(INCLUDE)/cuddInt.h
135 -POBJ = $(PSRC:.c=.o)
136 +POBJ = $(PSRC:.c=.lo)
137 PUBJ = $(PSRC:.c=.u)
138 TARGET = test$(P)$(EXE)
139 TARGETu = test$(P)-u
140 @@ -182,12 +182,11 @@
141 $(WHERE)/mtr/llib-lmtr.ln $(WHERE)/st/llib-lst.ln \
142 $(WHERE)/util/llib-lutil.ln
143
144 -lib$(P).a: $(POBJ)
145 - ar rv $@ $?
146 - $(RANLIB) $@
147 +lib$(P).la: $(POBJ)
148 + libtool --mode=link gcc -o $@ $?
149
150 -.c.o: $(PHDR)
151 - $(CC) -c $< -I$(INCLUDE) $(ICFLAGS) $(XCFLAGS) $(DDDEBUG) $(MTRDEBUG) $(DDDMPDEBUG) $(LDFLAGS)
152 +%.lo: %.c
153 + $(CC) -c -o $@ $< -I$(INCLUDE) $(ICFLAGS) $(XCFLAGS) $(DDDEBUG) $(MTRDEBUG) $(DDDMPDEBUG) $(LDFLAGS)
154
155 optimize_dec: lib$(P).b
156
157 @@ -231,12 +230,13 @@
158 #----------------------------------------------------------------------------#
159
160 clean:
161 - rm -f *.o *.u mon.out gmon.out *.pixie *.Addrs *.Counts mnem.* \
162 + rm -f *.o *.lo *.u mon.out gmon.out *.pixie *.Addrs *.Counts mnem.* \
163 .pure core *.warnings
164
165 distclean: clean
166 - rm -f $(TARGET) $(TARGETu) lib*.a lib$(P).b llib-l$(P).ln \
167 + rm -f $(TARGET) $(TARGETu) lib*.a lib*.la lib$(P).b llib-l$(P).ln \
168 *.bak *~ tags .gdb_history *.qv *.qx
169 + rm -fr .libs
170
171
172
173 --- a/epd/Makefile
174 +++ b/epd/Makefile
175 @@ -19,7 +19,7 @@
176 P = epd
177 PSRC = epd.c
178 PHDR = epd.h
179 -POBJ = $(PSRC:.c=.o)
180 +POBJ = $(PSRC:.c=.lo)
181 PUBJ = $(PSRC:.c=.u)
182
183 WHERE = ..
184 @@ -27,12 +27,11 @@
185
186 #---------------------------
187
188 -lib$(P).a: $(POBJ)
189 - ar rv $@ $?
190 - $(RANLIB) $@
191 +lib$(P).la: $(POBJ)
192 + libtool --mode=link gcc -o $@ $?
193
194 -.c.o: $(PSRC) $(PHDR)
195 - $(CC) -c $< -I$(INCLUDE) $(CFLAGS)
196 +%.lo: %.c
197 + $(CC) -c -o $@ $< -I$(INCLUDE) $(CFLAGS)
198
199 optimize_dec: lib$(P).b
200
201 @@ -58,7 +57,8 @@
202 all: lib$(P).a lib$(P).b llib-l$(P).ln tags
203
204 clean:
205 - rm -f *.o *.u .pure *.warnings
206 + rm -f *.o *.lo *.u .pure *.warnings
207
208 distclean: clean
209 - rm -f lib*.a lib$(P).b llib-l$(P).ln tags *~ *.bak *.qv *.qx
210 + rm -f lib*.a lib*.la lib$(P).b llib-l$(P).ln tags *~ *.bak *.qv *.qx
211 + rm -fr .libs
212 --- a/mtr/Makefile
213 +++ b/mtr/Makefile
214 @@ -30,7 +30,7 @@
215 P = mtr
216 PSRC = mtrBasic.c mtrGroup.c
217 PHDR = mtr.h
218 -POBJ = $(PSRC:.c=.o)
219 +POBJ = $(PSRC:.c=.lo)
220 PUBJ = $(PSRC:.c=.u)
221 SRC = test$(P).c
222 HDR =
223 @@ -49,12 +49,11 @@
224
225 #---------------------------
226
227 -lib$(P).a: $(POBJ)
228 - ar rv $@ $?
229 - $(RANLIB) $@
230 +lib$(P).la: $(POBJ)
231 + libtool --mode=link gcc -o $@ $?
232
233 -.c.o: $(PSRC) $(PHDR)
234 - $(CC) -c $< -I$(INCLUDE) $(CFLAGS) $(MTRDEBUG)
235 +%.lo: %.c
236 + $(CC) -c -o $@ $< -I$(INCLUDE) $(CFLAGS) $(MTRDEBUG)
237
238 optimize_dec: lib$(P).b
239
240 @@ -88,9 +87,10 @@
241 cc -O3 $(XCFLAGS) $(LDFLAGS) -o $@ $(UBJ) $(BLIBS) -lm
242
243 clean:
244 - rm -f *.o *.u mon.out gmon.out *.pixie *.Addrs *.Counts mnem.* \
245 + rm -f *.o *.lo *.u mon.out gmon.out *.pixie *.Addrs *.Counts mnem.* \
246 .pure core *.warnings
247
248 distclean: clean
249 - rm -f $(TARGET) $(TARGETu) lib*.a lib$(P).b llib-l$(P).ln \
250 + rm -f $(TARGET) $(TARGETu) lib*.a lib*.la lib$(P).b llib-l$(P).ln \
251 *.bak *~ tags *.qv *.qx
252 + rm -fr .libs
253 --- a/nanotrav/Makefile
254 +++ b/nanotrav/Makefile
255 @@ -19,9 +19,7 @@
256
257 INCLUDE = $(WHERE)/include
258
259 -LIBS = $(WHERE)/dddmp/libdddmp.a $(WHERE)/cudd/libcudd.a \
260 - $(WHERE)/mtr/libmtr.a $(WHERE)/st/libst.a $(WHERE)/util/libutil.a \
261 - $(WHERE)/epd/libepd.a
262 +LIBS = $(WHERE)/libcudd.la $(WHERE)/libdddmp.la
263
264 MNEMLIB =
265 #MNEMLIB = $(WHERE)/mnemosyne/libmnem.a
266 @@ -39,7 +37,7 @@
267 HDR = bnet.h ntr.h $(WHERE)/include/dddmp.h $(WHERE)/include/cudd.h \
268 $(WHERE)/include/cuddInt.h
269
270 -OBJ = $(SRC:.c=.o)
271 +OBJ = $(SRC:.c=.lo)
272 UBJ = $(SRC:.c=.u)
273
274 MFLAG =
275 @@ -61,10 +59,10 @@
276 #------------------------------------------------------
277
278 $(TARGET): $(SRC) $(OBJ) $(HDR) $(LIBS) $(MNEMLIB)
279 - $(PURE) $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJ) $(LIBS) $(MNEMLIB) -lm
280 + libtool --mode=link gcc $(CFLAGS) $(LDFLAGS) -o $@ $(OBJ) $(LIBS) $(MNEMLIB) -lm
281
282 -.c.o: $(HDR)
283 - $(CC) -c $< -I$(INCLUDE) $(CFLAGS) $(DDDEBUG)
284 +%.lo: %.c
285 + $(CC) -c -o $@ $< -I$(INCLUDE) $(CFLAGS) $(DDDEBUG)
286
287 # if the header files change, recompile
288 $(OBJ): $(HDR)
289 @@ -91,8 +89,9 @@
290 pixie $(TARGETu)
291
292 clean:
293 - rm -f *.o *.u mon.out gmon.out *.pixie *.Addrs *.Counts mnem.* \
294 + rm -f *.o *.lo *.u mon.out gmon.out *.pixie *.Addrs *.Counts mnem.* \
295 .pure core *.warnings
296
297 distclean: clean
298 rm -f $(TARGET) $(TARGETu) *.bak *~ .gdb_history *.qv *.qx
299 + rm -fr .libs
300 --- a/obj/Makefile
301 +++ b/obj/Makefile
302 @@ -45,7 +45,7 @@
303 P = obj
304 PSRC = cuddObj.cc
305 PHDR = cuddObj.hh $(INCLUDE)/cudd.h
306 -POBJ = $(PSRC:.cc=.o)
307 +POBJ = $(PSRC:.cc=.lo)
308 PUBJ = $(PSRC:.cc=.u)
309 TARGET = test$(P)$(EXE)
310 TARGETu = test$(P)-u
311 @@ -57,12 +57,11 @@
312
313 #------------------------------------------------------
314
315 -lib$(P).a: $(POBJ)
316 - ar rv $@ $?
317 - $(RANLIB) $@
318 +lib$(P).la: $(POBJ)
319 + libtool --mode=link g++ -o $@ $?
320
321 -.cc.o: $(PHDR)
322 - $(CPP) -c $< -I$(INCLUDE) $(CFLAGS) $(DDDEBUG)
323 +%.lo: %.cc
324 + $(CPP) -c -o $@ $< -I$(INCLUDE) $(CFLAGS) $(DDDEBUG)
325
326 optimize_dec: lib$(P).b
327
328 @@ -102,9 +101,10 @@
329 programs: $(TARGET) $(TARGETu) lintpgm
330
331 clean:
332 - rm -f *.o *.u mon.out gmon.out *.pixie *.Addrs *.Counts mnem.* \
333 + rm -f *.o *.lo *.u mon.out gmon.out *.pixie *.Addrs *.Counts mnem.* \
334 .pure core *.warnings
335
336 distclean: clean
337 - rm -f $(TARGET) $(TARGETu) lib*.a lib$(P).b llib-l$(P).ln \
338 + rm -f $(TARGET) $(TARGETu) lib*.a lib*.la lib$(P).b llib-l$(P).ln \
339 *.bak *~ tags .gdb_history *.qv *.qx
340 + rm -fr .libs
341 --- a/st/Makefile
342 +++ b/st/Makefile
343 @@ -19,7 +19,7 @@
344 P = st
345 PSRC = st.c
346 PHDR = st.h
347 -POBJ = $(PSRC:.c=.o)
348 +POBJ = $(PSRC:.c=.lo)
349 PUBJ = $(PSRC:.c=.u)
350
351 WHERE = ..
352 @@ -27,12 +27,11 @@
353
354 #---------------------------
355
356 -lib$(P).a: $(POBJ)
357 - ar rv $@ $?
358 - $(RANLIB) $@
359 +lib$(P).la: $(POBJ)
360 + libtool --mode=link gcc -o $@ $?
361
362 -.c.o: $(PHDR)
363 - $(CC) -c $< -I$(INCLUDE) $(CFLAGS)
364 +%.lo: %.c
365 + $(CC) -c -o $@ $< -I$(INCLUDE) $(CFLAGS)
366
367 optimize_dec: lib$(P).b
368
369 @@ -58,7 +57,8 @@
370 all: lib$(P).a lib$(P).b llib-l$(P).ln tags
371
372 clean:
373 - rm -f *.o *.u .pure *.warnings
374 + rm -f *.o *.lo *.u .pure *.warnings
375
376 distclean: clean
377 - rm -f lib*.a lib$(P).b llib-l$(P).ln tags *~ *.bak *.qv *.qx
378 + rm -f lib*.a lib*.la lib$(P).b llib-l$(P).ln tags *~ *.bak *.qv *.qx
379 + rm -fr .libs
380 --- a/util/Makefile
381 +++ b/util/Makefile
382 @@ -21,19 +21,18 @@
383 PSRC = cpu_time.c cpu_stats.c getopt.c safe_mem.c strsav.c texpand.c \
384 ptime.c prtime.c pipefork.c pathsearch.c stub.c \
385 tmpfile.c datalimit.c
386 -POBJ = $(PSRC:.c=.o)
387 +POBJ = $(PSRC:.c=.lo)
388 PUBJ = $(PSRC:.c=.u)
389 PHDR = util.h
390
391 WHERE = ..
392 INCLUDE = $(WHERE)/include
393
394 -lib$(P).a: $(POBJ)
395 - ar rv $@ $?
396 - $(RANLIB) $@
397 +lib$(P).la: $(POBJ)
398 + libtool --mode=link gcc -o $@ $?
399
400 -.c.o: $(PHDR)
401 - $(CC) -c $< -I$(INCLUDE) $(FLAGS) $(CFLAGS)
402 +%.lo: %.c
403 + $(CC) -c -o $@ $< -I$(INCLUDE) $(FLAGS) $(CFLAGS)
404
405 optimize_dec: lib$(P).b
406
407 @@ -59,7 +58,8 @@
408 all: lib$(P).a lib$(P).b llib-l$(P).ln tags
409
410 clean:
411 - rm -f *.o *.u core *.warnings
412 + rm -f *.o *.lo *.u core *.warnings
413
414 distclean: clean
415 - rm -f lib$(P).a lib$(P).b llib-l$(P).ln tags *.bak *~ .pure
416 + rm -f lib$(P).a lib$(P).la lib$(P).b llib-l$(P).ln tags *.bak *~ .pure
417 + rm -fr .libs