1file=$objdir/Makefile
2
3echo Extracting $file
4rm -f $file
5
6# Path to directories
7cfg=../$config_dir
8data=../$data_dir
9doc=../$doc_dir
10desc=../$desc_dir
11ex=../$examples_dir
12misc=../$misc_dir
13src=../$src_dir
14
15knone=$src/kernel/none
16kern0=$src/kernel/$kernlvl0
17kern1=$src/kernel/$kernlvl1
18
19if test -n "$add_funclist"; then
20  add_funclist=$src/funclist
21fi
22
23#
24# File lists
25#
26kernel="mpker mpinl"
27gp=`ls $src_dir/gp/*.c | sed 's,.*/\(.*\)\.c,\1,'`
28language=`ls $src_dir/language/*.c | sed 's,.*/\(.*\)\.c,\1,'`
29basemath=`ls $src_dir/basemath/*.c | sed 's,.*/\(.*\)\.c,\1,'`
30modules=`ls $src_dir/modules/*.c   | sed 's,.*/\(.*\)\.c,\1,'`
31mt="mt $thread_engine"
32
33systems=
34if test -d "$src_dir/systems/$osname"; then
35  systems=`ls $src_dir/systems/$osname/*.c | sed 's,.*/\(.*\)\.c,\1,'`
36fi
37# remove paridecl: no general recompilation when only changing a prototype
38hlist=`ls $src_dir/headers/*.h | grep -v paridecl | grep -v paripriv |\
39       sed 's,.*/\(.*\)\.h,\1,'`
40# for installation put paridecl back. Remove \n otherwise make will choke.
41headerlist="paridecl paripriv `echo $hlist| tr '\n' ' '`"
42
43#Add src/language/parse.c if it is not yet generated
44case $language in *parse*);; *) language="$language parse";; esac
45
46# special systems (OS/2 for now)
47shortlib_prefix=lib
48lib_prefix=lib
49dllib_prefix=lib
50case "$osname" in
51  os2)  shortlib_prefix= # 8.3 filenames
52        dllib_prefix= # != lib_prefix to allow gp-dyn link with DLL
53	export_lib_create=emximp; export_lib='$(DLLIBPARI)$(_A)'
54	export_file=pari.def; export_create="emxexp -u"
55	# Actually, the build will fail until the switch to -Zomf
56	dlld_ignore=- ;;
57  mingw)
58    export_file='$(LIBPARI).def';
59    export_exe='$(LIBPARI)_exe.def';;
60  darwin)
61    ld_install_name="-Wl,-install_name -Wl,\"$libdir\"/\$(LIBPARI_DYN)";;
62esac
63case "$osname" in
64  mingw|cygwin)
65    install_implib="\$(INSTALL_DATA) \$(LIBPARI_SO)\$(_A) \$(LIBDIR)/\$(LIBPARI_SO)\$(_A)";;
66  *)
67    install_implib="";;
68esac
69
70PLOTCFLAGS=
71PLOTLIBS=
72postconfig=:
73plotrunpath=
74case "$which_graphic_lib" in
75ps|svg|none)
76  graph=plot$which_graphic_lib;;
77Qt4)
78  PLOTCFLAGS="\$(QTINC)"
79  PLOTLIBS="\$(QTLIB) $QTLIBS"
80  graph=plotQt4;;
81fltk)
82  PLOTCFLAGS=
83  PLOTLIBS="$FLTK_LIBS"
84  postconfig='fltk-config --post '
85  graph=plotfltk;;
86win32)
87  PLOTLIBS="-lgdi32"
88  graph=plotWin32;;
89X11)
90  PLOTCFLAGS="$PLOTCFLAGS $X11_INC"
91  PLOTLIBS="$PLOTLIBS $X11_LIBS"
92  plotrunpath=$X11
93  graph=plotX;;
94*)
95  echo >&2 "### Unrecognized graphic library '$which_graphic_lib'."
96  exit 1;;
97esac
98libgraph="plotport plottty"
99
100KERNOBJS=
101for f in $kernel; do
102  KERNOBJS="$KERNOBJS $f\$(_O)"
103done
104OBJS=$KERNOBJS
105for f in $basemath $language $modules $systems $mt $libgraph; do
106  OBJS="$OBJS $f\$(_O)"
107done
108OBJSGP=
109for f in $gp $graph; do
110  OBJSGP="$OBJSGP $f\$(_O)"
111done
112HEADERS="mpinl.h parimt.h"
113for f in $hlist; do
114  HEADERS="$HEADERS $src/headers/$f.h";
115done
116
117graph="$graph $libgraph"
118
119# runpath
120tmp=$runpath
121for d in "$plotrunpath" "$gmp" "$readline"; do
122  case "$d" in
123    ""|yes) ;;
124    *) case "$tmp" in
125        $d|*$dir_sep$d|*$dir_sep$d$dir_sep*);;
126        *) tmp="$tmp$dir_sep$d";;
127       esac ;;
128  esac
129done
130RUNPTH_FINAL=
131RUNPTH=
132if test -n "$runpathprefix"; then
133  RUNPTH_FINAL=`$config_dir/ldflags "$LDneedsWl" $runpathprefix"$tmp"`
134  RUNPTH=`$config_dir/ldflags "$LDneedsWl" $runpathprefix\\\$\(TOPDIR\)/$objdir$dir_sep"$tmp"`
135fi
136
137if test -z "$DLLD"; then
138  exec="gp-sta$exe_suff"; static=y
139else
140  exec="gp-sta$exe_suff gp-dyn$exe_suff"
141fi
142case "$sizeof_long" in
143  4) numbits=32;;
144  8) numbits=64;;
145esac
146dotest="env \"RUNTEST=\$(RUNTEST)\" \"LD_LIBRARY_PATH=.$dir_sep\$\$LD_LIBRARY_PATH\" \$(SHELL) ../src/test/dotest $numbits \"$exe_suff\""
147case "$static" in
148  n) dft=dyn; libdft=lib-dyn; dfttarget="gp-dyn gp-sta";;
149  y) dft=sta; libdft= ; dfttarget="gp-sta";;
150esac
151
152CPPFLAGS="-I. -I$src/headers"
153if test "$has_dlopen" = builtin; then
154  CPPFLAGS="$CPPFLAGS -I$src/systems/$osname"
155fi
156
157case "$ln_s" in
158  *cp*) ln_objdir=".";;
159  *)    ln_objdir="$objdir"
160esac
161
162cat > $file << EOT
163# Makefile for Pari/GP -- $pretty
164#
165#  This file was created by Configure. Any change made to it will be
166#  lost when Configure is run.
167#
168TOPDIR="$TOP"
169
170SHELL      = $make_sh
171PERL       = $perl
172BISON      = bison
173AR         = ar
174RANLIB     = ranlib
175
176SIZEOF_LONG= $sizeof_long
177
178CC_FLAVOR  =
179CC         = $CC \$(CC_FLAVOR)
180CPPFLAGS   = $CPPFLAGS
181CFLAGS     = $CFLAGS
182DLCFLAGS   = $DLCFLAGS
183KERNELCFLAGS  = $KERNELCFLAGS
184LD_FLAVOR  = \$(CC_FLAVOR)
185LD         = $LD \$(LD_FLAVOR)
186LDFLAGS    = $LDFLAGS
187DLLD_FLAVOR  = \$(LD_FLAVOR)
188DLLD       = $DLLD \$(DLLD_FLAVOR)
189DLLDFLAGS  = $DLLDFLAGS
190EXTRADLLDFLAGS = $EXTRADLLDFLAGS
191RUNTEST    = $RUNTEST
192
193# HIGHLY EXPERIMENTAL (only tested with gmp-4.0 on ix86 and Ultra).
194# If you've configured and compiled GMP and would like to tune PARI using
195# the nice cycle counting functions in GMP, uncomment the 4 lines below
196# (correct the first one to the path to your gmp source tree).
197#
198#GMP     = /some/directory/gmp-4.0/tune
199#GMPFLAGS= -DGMP_TIMER
200#GMPO1 = \$(GMP)/time.o \$(GMP)/freq.o
201#GMPOBJS=\$(GMPO1) \$(GMPO2)
202#
203#You may need to add a few object files to GMPOBJS. On UltraSparc, uncomment
204#the following line
205#GMPO2 = \$(GMP)/sparcv9.o
206
207_O	   = .o
208_A	   = .a
209LIB_PREFIX = $lib_prefix
210DLLIB_PREFIX = $dllib_prefix
211LIBPARI_BASE = $libpari_base
212LIBPARI      = \$(LIB_PREFIX)pari
213DLLIBPARI    = \$(DLLIB_PREFIX)pari
214LIBPARI_STA  = \$(LIBPARI)\$(_A)
215LIBPARI_SO   = \$(DLLIBPARI).$DLSUFFIX
216SOLIBPARI    = \$(DLLIB_PREFIX)\$(LIBPARI_BASE).$DLSUFFIX
217LIBPARI_DYN   = \$(SOLIBPARI)$sodest
218LIBPARI_SONAME= \$(SOLIBPARI)$soname
219DL_DFLT_NAME = $DL_DFLT_NAME
220
221LD_INSTALL_NAME  = $ld_install_name
222
223EXPORT_FILE   = $export_file
224EXPORT_EXE    = $export_exe
225EXPORT_CREATE = $export_create
226EXPORT_LIB    = $export_lib
227EXPORT_LIB_CREATE = $export_lib_create
228DLLD_IGNORE   = $dlld_ignore
229DLLTOOL = $DLLTOOL
230
231RUNPTH       = $RUNPTH
232RUNPTH_FINAL = $RUNPTH_FINAL
233LDDYN        = $LDDYN
234LIBS         = $LIBS
235GMPLIBS      = $GMPLIBS
236MT_LIBS      = $MT_LIBS
237RT_LIBS      = $RT_LIBS
238DL_LIBS      = $DL_LIBS
239DYN_LIBS     = \$(GMPLIBS) \$(DL_LIBS) \$(RT_LIBS) \$(MT_LIBS) \$(LIBS)
240STA_LIBS     = \$(GMPLIBS) \$(DL_LIBS) \$(RT_LIBS) \$(MT_LIBS) \$(LIBS)
241
242RM = rm -f
243MV = mv -f
244LN = $ln_s
245CP_F = cp -f
246STRIP      = strip
247STRIPFLAGS =
248
249# Change these installation directories to suit your needs.
250# DESTDIR is used to install to a false hierachy (to build a Debian package)
251INCLUDEDIR= "\$(DESTDIR)$includedir"
252LIBDIR    = "\$(DESTDIR)$libdir"
253BINDIR    = "\$(DESTDIR)$bindir"
254MANDIR    = "\$(DESTDIR)$mandir"
255DATADIR   = "\$(DESTDIR)$datadir"
256SYSDATADIR= "\$(DESTDIR)$sysdatadir"
257
258EXDIR     = \$(DATADIR)/examples
259MISCDIR   = \$(DATADIR)/misc
260DOCDIR    = \$(DATADIR)/doc
261
262INSTALL = $cfg/install
263INSTALL_PROGRAM = \$(INSTALL)
264INSTALL_DATA = \$(INSTALL) -m 644
265TAR = tar
266
267# Readline
268RLINCLUDE = $RLINCLUDE
269RLLIBS    = $RLLIBS
270# GMP
271GMPINCLUDE = $GMPINCLUDE
272# Graphic library.
273QTMOC      = $QTMOC
274QTINC      = $QTINC
275QTLIB      = $QTLIB
276PLOTCFLAGS = $PLOTCFLAGS
277PLOTLIBS   = $PLOTLIBS
278CXX        = g++
279
280TOPLDDYN   = "$TOP/$objdir"
281# Description system
282DESC          = pari.desc
283DESC_HELP_GEN = $desc/gen_proto $desc/PARI/822.pm
284TMPSUF        = $osname-$arch.tmp
285
286DOTEST=$dotest
287
288OBJS   = $OBJS
289OBJSGP = $OBJSGP
290
291TESTS  = $test_extra
292
293.PHONY: gp dft clean
294
295dft: $dfttarget ../gp$suffix$exe_suff $libdft
296
297gp: gp-$dft ../gp$suffix$exe_suff $libdft
298
299../gp$suffix$exe_suff: gp-$dft$exe_suff
300	-\$(RM) \$@
301	-\$(LN) $ln_objdir/gp-$dft$exe_suff \$@
302
303all: $exec lib-sta
304
305lib-sta: \$(LIBPARI_STA)
306lib-dyn: \$(LIBPARI_DYN)
307
308\$(LIBPARI_STA): $add_funclist \$(OBJS)
309	-\$(RM) \$@
310	\$(AR) r \$@ \$(OBJS)
311	-\$(RANLIB) \$@
312
313kerntest\$(_O): $src/test/kerntest.c
314	\$(CC) -c -I$src/language \$(CPPFLAGS) \$(CFLAGS) -o \$@ $src/test/kerntest.c
315
316dummy\$(_O): $src/test/dummy.c
317	\$(CC) -c \$(CPPFLAGS) \$(CFLAGS) -o \$@ $src/test/dummy.c
318
319kerntest: $KERNOBJS dummy\$(_O) kerntest\$(_O)
320	\$(CC) \$(CPPFLAGS) \$(CFLAGS) -o \$@ $KERNOBJS dummy\$(_O) kerntest\$(_O) \$(STA_LIBS)
321
322mpinl\$(_O): .headers parilvl0.h parilvl1.h $knone/mpinl.c
323	\$(CC) -c \$(CPPFLAGS) \$(CFLAGS) \$(DLCFLAGS) -o mpinl\$(_O) $knone/mpinl.c
324
325test-kernel:: kerntest
326	@./kerntest > gp.out;\
327	diff -c gp.out $src/test/32/kernel > kern.dif;\
328	if test -s kern.dif; then echo "KERNEL BUG"; else echo OK; fi
329
330tune\$(_O): .headers $src/test/tune.c
331	\$(CC) \$(GMPFLAGS) \$(CPPFLAGS) \$(CFLAGS) -o \$@ $src/test/tune.c -c
332
333tune: mpinl.h tune-sta
334	-\$(RM) tune ../tune
335	-\$(LN) tune-sta tune
336	-\$(LN) $ln_objdir/tune ../tune
337
338tune-dyn: tune\$(_O) \$(LIBPARI_DYN)
339	\$(LD) -L. \$(LDFLAGS) \$(RUNPTH) -o \$@ \$< \$(GMPOBJS) \$(LDDYN) \$(STA_LIBS)
340tune-sta: tune\$(_O) \$(LIBPARI_STA)
341	\$(LD) \$(LDFLAGS) \$(RUNPTH) -o \$@ \$< \$(GMPOBJS) ./\$(LIBPARI_STA) \$(STA_LIBS)
342
343gp-sta$exe_suff: $add_funclist \$(OBJS) \$(OBJSGP) \$(EXPORT_EXE)
344	\$(RM) \$@
345	\$(LD) -o \$@ \$(LDFLAGS) \$(OBJS) \$(OBJSGP) \$(RUNPTH) \$(RLLIBS) \$(PLOTLIBS) \$(STA_LIBS) \$(EXPORT_EXE)
346	$postconfig gp-sta$exe_suff
347
348clean_pari_ps::
349	@-\$(RM) pari.ps
350cleantest:
351	\$(RM) *.dif gp.out io-testfile pari.ps
352cleanobj:
353	-\$(RM) *\$(_O) mpker.c *.s parimt.h mpinl.h parilvl0.h parilvl1.h libpari* $exec kerntest
354	-\$(RM) gmon.out
355	-\$(RM) *.gcno *.gcda
356cleandesc:
357	-\$(RM) $desc/\$(DESC) *\$(TMPSUF)
358cleantune:
359	-\$(RM) tune tune-sta tune\$(_O)
360
361cleanall: cleanobj cleantune cleantest cleandesc
362
363clean: cleanall
364
365
366# Use this version to avoid problems with NFS and slightly out of synch
367# fileserver/host. We are recompiling everything anyway. Not on by default:
368# 3s is slower than the whole compilation on our development server :-)
369# .headers: $HEADERS
370#	@sleep 3; touch \$@
371.headers: $HEADERS
372	@touch \$@
373
374install-nodata: install-lib-$dft install-include install-bin install-man install-misc install-examples install-cfg
375
376install: install-doc install-nodata install-data
377
378install-include:
379	-mkdir -p \$(INCLUDEDIR)/pari
380	-for i in paricfg.h mpinl.h parimt.h; do \\
381	  \$(INSTALL_DATA) \$\$i \$(INCLUDEDIR)/pari; done
382	-for i in $headerlist; do \\
383	   \$(INSTALL_DATA) $src/headers/\$\$i.h  \$(INCLUDEDIR)/pari; done
384	-\$(RM) \$(INCLUDEDIR)/pari/genpari.h
385	-\$(LN) pari.h \$(INCLUDEDIR)/pari/genpari.h
386
387install-bin: install-bin-$dft
388
389install-bin-dyn: gp-dyn$exe_suff install-lib-dyn
390	-mkdir -p \$(BINDIR)
391	-\$(RM) \$(BINDIR)/gp-$version$exe_suff \$(BINDIR)/gp$exe_suff
392	\$(LD) -o \$(BINDIR)/gp-$version$exe_suff -L\$(LIBDIR) \$(LDFLAGS) \$(OBJSGP) \$(RUNPTH_FINAL) \$(LDDYN) \$(RLLIBS) \$(PLOTLIBS) \$(LIBS)
393	-\$(STRIP) \$(STRIPFLAGS) \$(BINDIR)/gp-$version$exe_suff
394	-cd \$(BINDIR); $postconfig gp-$version$exe_suff
395	-\$(LN) gp-$version$exe_suff \$(BINDIR)/gp$exe_suff
396
397install-bin-sta: gp-sta$exe_suff
398	-mkdir -p \$(BINDIR)
399	-\$(RM) \$(BINDIR)/gp-$version$exe_suff \$(BINDIR)/gp$exe_suff
400	\$(INSTALL_PROGRAM) gp-sta$exe_suff \$(BINDIR)/gp-$version$exe_suff
401	-\$(LN) gp-$version$exe_suff \$(BINDIR)/gp$exe_suff
402# Can't strip it if we want install() to work on OSF.
403#	-\$(STRIP) \$(STRIPFLAGS)  \$(BINDIR)/gp-$version
404	-cd \$(BINDIR); $postconfig gp-$version$exe_suff
405
406install-man::
407	-mkdir -p \$(MANDIR)
408	-\$(RM) \$(MANDIR)/pari.1 \$(MANDIR)/gp.1 \$(MANDIR)/gp-$version.1
409	\$(INSTALL_DATA) $doc/gphelp.1 \$(MANDIR)
410	\$(INSTALL_DATA) $doc/gp.1 \$(MANDIR)/gp-$version.1
411	-\$(LN) gp.1 \$(MANDIR)/pari.1
412	-\$(LN) gp-$version.1 \$(MANDIR)/gp.1
413
414install-misc:
415	-mkdir -p \$(MISCDIR) \$(BINDIR)
416	\$(INSTALL_PROGRAM) $misc/tex2mail \$(BINDIR)
417	\$(INSTALL_DATA) $doc/tex2mail.1 \$(MANDIR)
418	\$(INSTALL_DATA) $misc/README    \$(MISCDIR)
419	\$(INSTALL_DATA) $misc/color.dft \$(MISCDIR)
420	\$(INSTALL_DATA) $misc/gpalias   \$(MISCDIR)
421	\$(INSTALL_PROGRAM) $misc/gpflog \$(MISCDIR)
422	\$(INSTALL_DATA) $misc/gprc.dft  \$(MISCDIR)
423	\$(INSTALL_PROGRAM) $misc/xgp    \$(MISCDIR)
424
425install-cfg::
426	-mkdir -p \$(SYSDATADIR)
427	-\$(INSTALL_DATA) pari.cfg \$(SYSDATADIR)
428	-if test -n "$add_funclist"; then\
429	   mkdir -p \$(DATADIR)/PARI;\
430	   \$(INSTALL_DATA) $desc/PARI/822.pm \$(DATADIR)/PARI;\
431	   \$(INSTALL_DATA) $desc/\$(DESC) \$(DATADIR); fi
432
433install-doc: install-docdvi install-doctex
434
435install-doctex:
436	-mkdir -p \$(BINDIR) \$(DOCDIR)
437	-\$(INSTALL_DATA) $doc/translations \$(DOCDIR)
438	-\$(INSTALL_PROGRAM) $doc/gphelp    \$(BINDIR)
439	-cd $doc; \$(MAKE) usersch3.tex
440	-\$(INSTALL_DATA) $doc/appa.tex     \$(DOCDIR)
441	-\$(INSTALL_DATA) $doc/appb.tex     \$(DOCDIR)
442	-\$(INSTALL_DATA) $doc/appd.tex     \$(DOCDIR)
443	-\$(INSTALL_DATA) $doc/parimacro.tex \$(DOCDIR)
444	-\$(INSTALL_DATA) $doc/pdfmacs.tex  \$(DOCDIR)
445	-\$(INSTALL_DATA) $doc/develop.tex  \$(DOCDIR)
446	-\$(INSTALL_DATA) $doc/refcard.tex  \$(DOCDIR)
447	-\$(INSTALL_DATA) $doc/tutorial.tex \$(DOCDIR)
448	-\$(INSTALL_DATA) $doc/tutorial-mf.tex \$(DOCDIR)
449	-\$(INSTALL_DATA) $doc/users.tex    \$(DOCDIR)
450	-\$(INSTALL_DATA) $doc/usersch1.tex \$(DOCDIR)
451	-\$(INSTALL_DATA) $doc/usersch2.tex \$(DOCDIR)
452	-\$(INSTALL_DATA) $doc/usersch3.tex \$(DOCDIR)
453	-\$(INSTALL_DATA) $doc/usersch4.tex \$(DOCDIR)
454	-\$(INSTALL_DATA) $doc/usersch5.tex \$(DOCDIR)
455	-\$(INSTALL_DATA) $doc/usersch6.tex \$(DOCDIR)
456	-\$(INSTALL_DATA) $doc/usersch7.tex \$(DOCDIR)
457	-\$(INSTALL_DATA) $doc/usersch8.tex \$(DOCDIR)
458	-\$(INSTALL_DATA) $doc/paricfg.tex  \$(DOCDIR)
459
460install-docdvi::
461	-mkdir -p \$(DOCDIR)
462	-cd $doc; \$(MAKE) doc; for f in *.dvi; do \
463	  \$(INSTALL_DATA) \$\$f \$(DOCDIR); \
464          done
465
466install-docpdf::
467	-mkdir -p \$(DOCDIR)
468	-cd $doc; \$(MAKE) docpdf; for f in *.pdf; do \
469	  \$(INSTALL_DATA) \$\$f \$(DOCDIR); \
470          done
471
472install-examples:
473	-mkdir -p \$(EXDIR)
474	-\$(INSTALL_DATA) $ex/EXPLAIN     \$(EXDIR)
475	-\$(INSTALL_DATA) $ex/Inputrc     \$(EXDIR)
476	-\$(INSTALL_DATA) Makefile.examples   \$(EXDIR)/Makefile
477	-\$(INSTALL_DATA) $ex/bench.gp    \$(EXDIR)
478	-\$(INSTALL_DATA) $ex/cl.gp       \$(EXDIR)
479	-\$(INSTALL_DATA) $ex/classno.gp  \$(EXDIR)
480	-\$(INSTALL_DATA) $ex/contfrac.gp \$(EXDIR)
481	-\$(INSTALL_DATA) $ex/lucas.gp    \$(EXDIR)
482	-\$(INSTALL_DATA) $ex/extgcd.c    \$(EXDIR)
483	-\$(INSTALL_DATA) $ex/rho.gp      \$(EXDIR)
484	-\$(INSTALL_DATA) $ex/squfof.gp   \$(EXDIR)
485	-\$(INSTALL_DATA) $ex/taylor.gp   \$(EXDIR)
486
487install-data:
488	mkdir -p \$(DATADIR); \
489	if test -d $data; then cd $data; \
490	  for d in \`ls\`; do \
491            test -d "\$\$d" && (\$(TAR) c \$\$d | (cd \$(DATADIR) && \$(TAR) xo )); \
492	  done; \
493	fi;
494
495link-data:
496	mkdir -p \$(DATADIR); \
497	if test -d $data; then cd $data; \
498	  for d in \`ls\`; do \
499	    \$(LN) \$(TOPDIR)/$data_dir/\$\$d \$(DATADIR)/; \
500	  done; \
501	fi;
502
503install-lib-sta: \$(LIBPARI_STA)
504	-mkdir -p \$(LIBDIR)
505	-\$(RM) \$(LIBDIR)/\$(LIBPARI_STA)
506	\$(INSTALL_DATA) \$(LIBPARI_STA) \$(LIBDIR)/\$(LIBPARI_STA)
507
508install-lib-dyn-base:
509	-mkdir -p \$(LIBDIR)
510	-\$(RM) \$(LIBDIR)/\$(LIBPARI_DYN) \$(LIBDIR)/\$(LIBPARI_SONAME) \$(LIBDIR)/\$(LIBPARI_SO)
511	\$(DLLD_IGNORE)\$(DLLD) -o \$(LIBDIR)/\$(LIBPARI_DYN) \$(DLLDFLAGS) \$(OBJS) \$(EXTRADLLDFLAGS) \$(DYN_LIBS) \$(EXPORT_FILE) \$(LD_INSTALL_NAME)
512	$install_implib
513
514install-lib-dyn-link: install-lib-dyn-base
515	-if test "\$(LIBPARI_DYN)" != "\$(LIBDIR)/\$(LIBPARI_SO)"; then \
516          \$(LN) \$(LIBPARI_DYN) \$(LIBDIR)/\$(LIBPARI_SO); fi
517	-if test "\$(LIBPARI_SONAME)" != "\$(LIBPARI_SO)"; then \
518	  \$(LN) \$(LIBPARI_DYN) \$(LIBDIR)/\$(LIBPARI_SONAME); fi
519install-lib-dyn: \$(LIBPARI_DYN) install-lib-dyn-link
520
521nsis: gp
522	-cd $doc; \$(MAKE) docpdf
523	makensis pari.nsi
524
525parimt.h: $src/mt/$thread_engine.h
526	cat $src/mt/$thread_engine.h > parimt.h
527
528mpinl.h: parilvl0.h parilvl1.h
529	cat parilvl0.h parilvl1.h > mpinl.h
530
531bench: $exec clean_pari_ps
532	@\$(DOTEST) $test_basic
533dobench:: clean_pari_ps
534	@\$(DOTEST) $test_basic
535test-all: $exec clean_pari_ps
536	@\$(DOTEST) \$(TESTS)
537dotest-all:: clean_pari_ps
538	@\$(DOTEST) \$(TESTS)
539dyntest-all: gp-dyn$exe_suff clean_pari_ps
540	@env dotestSUF=dyn \$(DOTEST) \$(TESTS)
541statest-all: gp-sta$exe_suff clean_pari_ps
542	@env dotestSUF=sta \$(DOTEST) \$(TESTS)
543
544dotest-env::
545	@export AAA=XXX BBB=YYY; \$(DOTEST) env
546EOT
547
548for i in $test_extra $test_extra_out $test_extra_OUT; do
549  echo "test-$i: $exec dotest-$i" >>$file
550done
551for i in $test_extra $test_extra_out; do
552  cat >> $file << EOT
553dotest-$i::
554	@\$(DOTEST) $i
555EOT
556done
557
558if test "$optimization" = gcov; then
559  cat >> $file << EOT
560
561.PHONY: lcov-report lcov-reset
562LCOV_TRACE = lcov.info
563LCOV_REPORT= lcov-report
564LCOV_FLAGS=
565GENHTML_FLAGS=
566LCOV_TITLE="PARI/GP v$version.$patch lcov report ($status)"
567
568lcov-report:
569	\$(RM) \$(LCOV_TRACE)
570	rm -rf \$(LCOV_REPORT)
571	lcov -c \$(LCOV_FLAGS) -d . -b . -o \$(LCOV_TRACE)
572	genhtml \$(GENHTML_FLAGS) --legend -t \$(LCOV_TITLE) -o \$(LCOV_REPORT) \$(LCOV_TRACE)
573
574lcov-reset:
575	\$(RM) *.gcda
576EOT
577fi
578
579if test -n "$exe_suff"; then
580cat >> $file << EOT
581gp-sta: gp-sta$exe_suff
582gp-dyn: gp-dyn$exe_suff
583EOT
584fi
585
586if test -z "$DLLD"; then
587  cat >> $file << EOT
588
589\$(LIBPARI_DYN)::
590	@echo "Configure could not find a way to build a shared library on this machine"
591
592EOT
593else
594  if test -n "$export_file"; then
595    case "$osname" in
596    os2)
597    cat >> $file << EOT
598
599EXPORT_FILE_BASE = $src/systems/os2/pari.def.base
600VERSION_VERBOSE = $pari_release_verbose
601
602\$(EXPORT_FILE): \$(OBJS) \$(EXPORT_FILE_BASE)
603	cat \$(EXPORT_FILE_BASE) | sed 's/<DLL_BASE>/\$(DLLIBPARI)/' | sed 's/<VENDOR>/pari.math.u-bordeaux.fr\//' | sed 's/<VERSION>/\$(VERSION_VERBOSE)/' | sed 's/<DESCR>/GP\/PARI compiled with \$(CFLAGS)/' > \$@
604	\$(EXPORT_CREATE) \$(OBJS) >> \$@
605
606\$(DLLIBPARI)\$(_A): \$(EXPORT_FILE)
607	\$(EXPORT_LIB_CREATE) -o \$@ \$(EXPORT_FILE)
608
609EOT
610    ;;
611    mingw)
612    cat >> $file << EOT
613
614\$(EXPORT_EXE): \$(OBJS)
615	\$(DLLTOOL) --export-all-symbols -k -z \$@.tmp \$(OBJS)
616	echo "NAME \$(LIBPARI)_exe" > \$@ && cat \$@.tmp >> \$@
617	rm \$@.tmp
618
619\$(EXPORT_FILE): \$(OBJS)
620	\$(DLLTOOL) --export-all-symbols -k -z \$@.tmp \$(OBJS)
621	echo "LIBRARY \$(LIBPARI)" > \$@ && cat \$@.tmp >> \$@
622	rm \$@.tmp
623EOT
624    ;;
625    esac
626  fi
627  cat >> $file << EOT
628
629gp-dyn$exe_suff: $add_funclist \$(OBJSGP) \$(LIBPARI_DYN) \$(EXPORT_LIB)
630	\$(RM) \$@
631	\$(LD) -o \$@ -L\$(TOPLDDYN) \$(LDFLAGS) \$(OBJSGP) \$(RUNPTH) \$(RLLIBS) \$(LDDYN) \$(PLOTLIBS) \$(LIBS)
632	$postconfig gp-dyn$exe_suff
633
634\$(LIBPARI_DYN): $add_funclist \$(OBJS) \$(EXPORT_FILE)
635	-\$(RM) \$(LIBPARI_DYN)
636	\$(DLLD_IGNORE)\$(DLLD) -o \$(TOPLDDYN)/\$(LIBPARI_DYN) \$(DLLDFLAGS) \$(OBJS) \$(EXTRADLLDFLAGS) \$(DYN_LIBS) \$(EXPORT_FILE)
637	-if test "\$(LIBPARI_DYN)" != "\$(LIBPARI_SO)"; then \
638	  \$(RM) \$(LIBPARI_SO);\
639	  \$(LN) \$(LIBPARI_DYN) \$(LIBPARI_SO); fi
640	-if test "\$(LIBPARI_DYN)" != "\$(LIBPARI_SONAME)"; then \
641	  \$(RM) \$(LIBPARI_SONAME);\
642	  \$(LN) \$(LIBPARI_DYN) \$(LIBPARI_SONAME); fi
643EOT
644fi
645
646cat >> $file << EOT
647$src/language/parse.c $src/language/parse.h: $src/language/parse.y
648	\$(BISON) -d $src/language/parse.y -o $src/language/parse.c
649EOT
650
651if test -n "$add_funclist"; then
652# files generated using external scripts
653HUGELINE="
654$src/funclist::
655	@-$cfg/genfunclist $src/funclist $desc"
656suffix='$$$$-$(TMPSUF)'
657list="funclist init default gp_init"
658for name in $list; do
659  case $name in
660  funclist)
661    target="$desc/\$(DESC)"
662    depend="$src/funclist $desc/merge_822 $desc/PARI/822.pm"
663    script="merge_822 ../$src/funclist"
664  ;;
665  init)
666    target=$src/language/init.h
667    depend="$desc/\$(DESC) \$(DESC_HELP_GEN)"
668    script="gen_proto basic \$(DESC)"
669  ;;
670  default)
671    target=$src/language/default.h
672    depend="$desc/\$(DESC) \$(DESC_HELP_GEN)"
673    script="gen_proto default \$(DESC)"
674  ;;
675  gp_init)
676    target=$src/gp/gp_init.h
677    depend="$desc/\$(DESC) \$(DESC_HELP_GEN)"
678    script="gen_proto gp \$(DESC)"
679  ;;
680  esac
681HUGELINE="$HUGELINE
682$target: $depend
683	f=$name-$suffix; (cd $desc && \$(PERL) $script > \$\$f) && mv $desc/\$\$f \$@"
684done
685echo "$HUGELINE" >> $file
686
687fi
688
689# Level 0
690f=src/kernel/$kernlvl0/MakeLVL0.SH
691if test -s $f; then
692  . $f
693else
694  cat >> $file <<EOT
695L0MODS=$kern0/asm0.h $knone/addll.h $knone/mulll.h $knone/bfffo.h $knone/divll.h $knone/divll_pre.h
696parilvl0.h: \$(L0MODS)
697	$cfg/genkernel $src $kern0/asm0.h > parilvl0.h
698EOT
699fi
700
701if test -f "$TOP/.git/index"; then
702  vcfile="../.git/index"
703  cat >> $file <<EOT
704paricfg.h: $vcfile $cfg/version
705	-sh $cfg/setversion
706EOT
707fi
708
709# Level 1
710f=src/kernel/$kernlvl1/MakeLVL1.SH
711if test -s $f; then . $f; fi
712
713ANAL_H=$src/language/anal.h
714RECT_H=$src/graph/rect.h
715HUGELINE=
716for dir in basemath modules language gp graph systems mt; do
717  eval list='$'$dir
718  case "$dir" in
719    systems)  SRC=$src/$dir/$osname;;
720    *)        SRC=$src/$dir;;
721  esac
722  for f in $list; do
723
724  source="$SRC/$f.c"
725  f=`basename $f`
726  depend=
727  cflags="\$(CPPFLAGS)"
728  compile='$(CC)'
729  case "$f" in
730  gp)
731    cflags="$cflags -I$src/language -DDL_DFLT_NAME=\$(DL_DFLT_NAME)"
732    depend="$src/gp/gp.h $src/gp/gp_init.h"
733    ;;
734  gp_rl|texmacs)
735    cflags="$cflags -I$src/language \$(RLINCLUDE)"
736    depend="$src/gp/gp.h"
737    ;;
738  paricfg)
739    depend="./paricfg.h"
740    cflags="$cflags \$(DLCFLAGS)"
741    ;;
742  plotport)
743    cflags="$cflags \$(DLCFLAGS)"
744    depend="$RECT_H"
745    ;;
746  plotsvg|plotps)
747    ;;
748  plotQt4)
749    cflags="$cflags \$(PLOTCFLAGS)"
750    depend="$RECT_H"
751    compile="\$(QTMOC) \$(PLOTCFLAGS) -o plotQt4.moc.cpp $src/graph/plotQt4.c && \$(CXX)"
752    ;;
753  plotfltk)
754    cflags="$cflags \$(PLOTCFLAGS)"
755    depend="$RECT_H"
756    compile="\$(CXX)"
757    ;;
758  plotX)
759    cflags="$cflags \$(PLOTCFLAGS)"
760    depend="$RECT_H"
761    ;;
762  es)
763    cflags="$cflags \$(DLCFLAGS)"
764    depend="$ANAL_H"
765    ;;
766  whatnow)
767    depend="$src/gp/whatnow.h"
768    ;;
769  init)
770    depend="$ANAL_H $src/language/init.h $src/language/default.h"
771    cflags="$cflags \$(DLCFLAGS)"
772    ;;
773  anal)
774    depend="$ANAL_H $src/language/parse.h"
775    cflags="$cflags \$(DLCFLAGS)"
776    ;;
777  parse)
778    depend="$ANAL_H $src/language/parse.h $src/language/parsec.h $src/language/tree.h"
779    cflags="$cflags \$(DLCFLAGS)"
780    ;;
781  compile)
782    depend="$ANAL_H $src/language/tree.h $src/language/opcode.h"
783    cflags="$cflags \$(DLCFLAGS)"
784    ;;
785  eval)
786    depend="$ANAL_H $src/language/opcode.h"
787    cflags="$cflags \$(DLCFLAGS)"
788    ;;
789  mpqs)
790    depend="$src/modules/mpqs.h"
791    cflags="$cflags \$(DLCFLAGS)"
792    ;;
793  ratpoints)
794    cflags="$cflags \$(DLCFLAGS) \$(KERNELCFLAGS)"
795    ;;
796  *)
797    cflags="$cflags \$(DLCFLAGS)"
798    ;;
799  esac
800cflags="$cflags \$(CFLAGS)"
801HUGELINE="$HUGELINE
802$f\$(_O): .headers $depend $source
803	$compile -c $cflags -o $f\$(_O) $source"
804  done
805done
806# avoid execing too many "cat". MS-DOS can't handle it
807echo "$HUGELINE" >> $file
808