1#!/bin/sh
2#
3# Copyright {c} 2014-2018 Carsten Sonne Larsen  <cs@innolan.net>
4# All rights reserved.
5#
6# Redistribution and use in source and binary forms, with or without
7# modification, are permitted provided that the following conditions
8# are met:
9# 1. Redistributions of source code must retain the above copyright
10#    notice, this list of conditions and the following disclaimer.
11# 2. Redistributions in binary form must reproduce the above copyright
12#    notice, this list of conditions and the following disclaimer in the
13#    documentation and/or other materials provided with the distribution.
14#
15# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18# ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
19# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20# DAMAGES {INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION}
22# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23# LIABILITY, OR TORT {INCLUDING NEGLIGENCE OR OTHERWISE} ARISING IN ANY WAY
24# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25# SUCH DAMAGE.
26#
27
28set -e
29
30version="1.8.5"
31
32clang=false
33debugsym=false
34regtest=true
35openlibm=false
36stdlibm=false
37stdlibc=false
38useldconfig=false
39fpic=false
40
41prefix="/usr"
42pkgconfigdir="lib/pkgconfig"
43mandir="share/man"
44cflags=""
45cxxflags=""
46ldflags=""
47gcclib="-lstdc++"
48libm=""
49libc=""
50
51for arg in "$@"; do
52	unknown=true
53	case "$arg" in
54	--prefix=*)
55		prefix=`echo $arg | sed 's/--prefix=//'`
56		unknown=false
57		;;
58
59	--pkgconfig=*)
60		pkgconfigdir=`echo $arg | sed 's/--pkgconfig=//'`
61		unknown=false
62		;;
63
64	--mandir=*)
65		mandir=`echo $arg | sed 's/--mandir=//'`
66		unknown=false
67		;;
68
69	--man-dir=*)
70		mandir=`echo $arg | sed 's/--mandir=//'`
71		unknown=false
72		;;
73
74	--doc-dir=*)
75		unknown=false
76		;;
77
78	--cross-compile=*)
79		crosscompile=`echo $arg | sed 's/--cross-compile=//'`
80		crosscompile="${crosscompile}-"
81		unknown=false
82		;;
83
84	CFLAGS=*)
85		cflags=`echo $arg | sed 's/CFLAGS=//'`
86		cflags="${cflags} "
87		unknown=false
88		;;
89
90	CXXFLAGS=*)
91		cxxflags=`echo $arg | sed 's/CXXFLAGS=//'`
92		cxxflags="${cxxflags} "
93		unknown=false
94		;;
95
96	LDFLAGS=*)
97		ldflags=`echo $arg | sed 's/LDFLAGS=//'`
98		ldflags="${ldflags} "
99		unknown=false
100		;;
101
102	--enable-clang)
103		clang=true
104		unknown=false
105		;;
106
107	--disable-clang)
108		clang=false
109		unknown=false
110		;;
111
112	--enable-ldconfig)
113		useldconfig=true
114		unknown=false
115		;;
116
117	--disable-ldconfig)
118		useldconfig=false
119		unknown=false
120		;;
121
122	--enable-pic)
123		fpic=true
124		unknown=false
125		;;
126
127	--disable-pic)
128		fpic=false
129		unknown=false
130		;;
131
132	--enable-debug)
133		debugsym=true
134		unknown=false
135		;;
136
137	--disable-debug)
138		debugsym=false
139		unknown=false
140		;;
141
142	--enable-test)
143		regtest=true
144		unknown=false
145		;;
146
147	--disable-test)
148		regtest=false
149		unknown=false
150		;;
151
152	--with-libm)
153		stdlibm=true
154		unknown=false
155		;;
156
157	--without-libm)
158		stdlibm=false
159		unknown=false
160		;;
161
162	--with-openlibm)
163		openlibm=true
164		unknown=false
165		;;
166
167	--without-openlibm)
168		openlibm=false
169		unknown=false
170		;;
171
172	--with-stdc++)
173		gcclib="-lstdc++"
174		unknown=false
175		;;
176
177	--without-stdc++)
178		gcclib=""
179		unknown=false
180		;;
181
182	--with-libc)
183		stdlibc=true
184		unknown=false
185		;;
186
187	--without-libc)
188		stdlibc=false
189		unknown=false
190		;;
191
192	--help)
193		echo "amath configure script ${version}"
194		echo
195		echo 'usage: ./configure [options]'
196		echo 'options:'
197		echo '  --prefix=<path>: installation prefix'
198		echo '  --pkgconfig=<path>: pkg-config path (without prefix)'
199		echo '  --mandir=<path>: manpage path (without prefix)'
200		echo '  --cross-compile=<prefix>: cross compiler prefix'
201		echo '  --enable-debug: include debug symbols'
202		echo '  --disable-debug: do not include debug symbols'
203		echo '  --enable-test: build code with regression tests'
204		echo '  --disable-test: do not include regression test'
205		echo '  --enable-clang: build explicit with clang compiler'
206		echo '  --disable-clang: do not explicit build with clang compiler'
207		echo '  --enable-ldconfig: use ldconfig to registre libraries'
208		echo '  --disable-ldconfig: do not use ldconfig to registre libraries'
209		echo '  --enable-pic: build with Position Independent Code (-fPIC)'
210		echo '  --disable-pic: do not build static libraries with Position Independent Code'
211		echo '  --with-libm: link with libm library (-lm)'
212		echo '  --without-libm: do not link with libm library'
213		echo '  --with-openlibm: link with openlibm library (-lopenlibm)'
214		echo '  --without-openlibm: do not link with openlibm library'
215		echo '  --with-stdc++: link with stdc++ library (-lstdc++)'
216		echo '  --without-stdc++: do not link with stdc++ library'
217		echo '  --with-libc: explicit link with libc library (-lc)'
218		echo '  --without-libc: do not link with libc library'
219		echo
220		echo '  CFLAGS=<flags>: additional compiler flags'
221		echo '  CXXFLAGS=<flags>: additional compiler flags'
222		echo '  LDFLAGS=<flags>: additional linker flags'
223		echo
224		exit 0
225		;;
226	esac
227
228	if $unknown; then
229		echo "Invalid option $arg"
230		exit 1
231	fi
232done
233
234if $clang; then
235	ccompiler="clang"
236	cxxcompiler="clang++"
237else
238	ccompiler="gcc"
239	cxxcompiler="g++"
240fi
241
242if $regtest; then
243	options=" -DWITHTEST"
244else
245	options=" "
246fi
247
248if $debugsym; then
249	appop="-O0 -g"
250	libop="-O0 -g"
251	exestrip=""
252	debugflag="-DDEBUG "
253else
254	appop="-O2"
255	libop="-O3"
256	exestrip="-s"
257	debugflag=""
258fi
259
260dlibm=false
261mflags=""
262if $stdlibm; then
263	libm="-lm "
264	mflags="-DLIBM "
265	dlibm=true
266fi
267
268if $openlibm; then
269	libm="-lopenlibm "
270	mflags="-DLIBM "
271	dlibm=true
272fi
273
274if $useldconfig; then
275	soverion=".${version}"
276else
277	soverion=""
278fi
279
280if $stdlibc; then
281	gcclib="${gcclib} -lc"
282	libc="-lc"
283fi
284
285if $fpic; then
286	fPIC=" -fPIC"
287else
288	fPIC=""
289fi
290
291cflags="${cflags}${debugflag}${mflags}"
292cxxflags="${cflags} ${cxxflags}"
293
294APPSRCS='
295evaluator.cpp
296functionlist.cpp
297fgrid.cpp
298lexer.cpp
299nodes.cpp
300operators.cpp
301optimizer.cpp
302parser.cpp
303token.cpp
304userfunction.cpp
305values.cpp
306viewer.cpp
307'
308SYSSRCS='
309console.cpp
310console_amiga.cpp
311console_stdc.cpp
312console_termios.cpp
313console_windows.cpp
314filesystem_amiga.cpp
315filesystem_stdc.cpp
316language.cpp
317language_amiga.cpp
318language_stdc.cpp
319preferences.cpp
320preferences_amiga.cpp
321preferences_stdc.cpp
322program.cpp
323program_amiga.cpp
324program_haiku.cpp
325program_stdc.cpp
326program_test.cpp
327window_amiga.cpp
328window_haiku.cpp
329'
330FUNCTIONSRC='
331absolute.cpp
332aexcosecant.cpp
333aexsecant.cpp
334arcchord.cpp
335arccos.cpp
336arcsin.cpp
337arctan.cpp
338arccosecant.cpp
339arccotangent.cpp
340arcsecant.cpp
341arccovercosine.cpp
342arccoversine.cpp
343archacovercosine.cpp
344archacoversine.cpp
345archavercosine.cpp
346archaversine.cpp
347arcvercosine.cpp
348arcversine.cpp
349ceil.cpp
350chord.cpp
351cosecant.cpp
352cosine.cpp
353cotangent.cpp
354covercos.cpp
355coversin.cpp
356cube.cpp
357excosecant.cpp
358exsecant.cpp
359floor.cpp
360hacovercos.cpp
361hacoversin.cpp
362havercos.cpp
363haversin.cpp
364hyparccosecant.cpp
365hyparccosine.cpp
366hyparccotangent.cpp
367hyparcsecant.cpp
368hyparcsine.cpp
369hyparctangent.cpp
370hypcosecant.cpp
371hypcosine.cpp
372hypcotangent.cpp
373hypsecant.cpp
374hypsine.cpp
375hyptangent.cpp
376ln.cpp
377log10.cpp
378log2.cpp
379node.cpp
380round.cpp
381secant.cpp
382signum.cpp
383sine.cpp
384square.cpp
385tangent.cpp
386trunc.cpp
387user.cpp
388vercos.cpp
389versin.cpp
390'
391STATEMENTSRCS='
392about.cpp
393clear.cpp
394delete.cpp
395digits.cpp
396draw.cpp
397empty.cpp
398eval.cpp
399execute.cpp
400exit.cpp
401funcdef.cpp
402funclist.cpp
403help.cpp
404input.cpp
405license.cpp
406list.cpp
407load.cpp
408memory.cpp
409node.cpp
410output.cpp
411plot.cpp
412prefs.cpp
413prompt.cpp
414save.cpp
415show.cpp
416silent.cpp
417version.cpp
418'
419LIBAPPSRCS='
420aengine.cpp
421bigint.cpp
422charbuf.cpp
423cplex.cpp
424nnumb.cpp
425ntext.cpp
426ntextd.cpp
427ntextp.cpp
428real.cpp
429'
430LIBREALSRCS='
431acos.c
432acosh.c
433asin.c
434asinh.c
435atan.c
436atan2.c
437atanh.c
438cbrt.c
439ceil.c
440csign.c
441cos.c
442cosh.c
443exp.c
444expm1.c
445fabs.c
446floor.c
447fmod.c
448hypot.c
449kcos.c
450kremp2.c
451ksin.c
452ktan.c
453log.c
454log10.c
455log1p.c
456pow.c
457remp2.c
458round.c
459scalbn.c
460sin.c
461sinh.c
462sqrt.c
463tan.c
464tanh.c
465trunc.c
466'
467LIBREAL2SRCS='
468acot.c
469acoth.c
470acrd.c
471acsc.c
472acsch.c
473acvc.c
474acvs.c
475aexc.c
476aexs.c
477ahcc.c
478ahcv.c
479ahv.c
480ahvc.c
481asec.c
482asech.c
483avcs.c
484aver.c
485cot.c
486coth.c
487crd.c
488csc.c
489csch.c
490cvc.c
491cvs.c
492exc.c
493exs.c
494hcc.c
495hcv.c
496hv.c
497hvc.c
498log2i.c
499log2p.c
500sec.c
501sech.c
502vcs.c
503ver.c
504'
505LIBCPLEXSRCS='
506cacos.c
507cacosh.c
508casin.c
509casinh.c
510catan.c
511catanh.c
512ccos.c
513ccosh.c
514cexp.c
515csin.c
516csinh.c
517csqrt.c
518ctan.c
519ctanh.c
520'
521LIBCPLEX2SRCS='
522cacot.c
523cacoth.c
524cacsc.c
525cacsch.c
526casec.c
527casech.c
528ccbrt.c
529ccot.c
530ccoth.c
531ccsc.c
532ccsch.c
533clog.c
534cpow.c
535clogb.c
536clog10.c
537csec.c
538csech.c
539csgn.c
540prim.c
541'
542LIBC1SRCS='
543alloccpy.c
544mem.c
545memcpy.c
546memset.c
547strcmp.c
548strlen.c
549untag.c
550'
551FLXSRCS='
552asprintf.c
553createcat.c
554createcatsrc.c
555createct.c
556globals.c
557locale_other.c
558main.c
559openlibs.c
560readprefs.c
561scancd.c
562scanct.c
563scanpo.c
564showfuncs.c
565strptime.c
566swapfuncs.c
567utils.c
568vastubs.c
569'
570
571if $dlibm; then
572	LIBREALSRCS="${LIBREAL2SRCS}"
573else
574	LIBREALSRCS="${LIBREALSRCS}${LIBREAL2SRCS}"
575fi
576
577if $dlibm; then
578	LIBCPLEXSRCS="${LIBCPLEX2SRCS}"
579else
580	LIBCPLEXSRCS="${LIBCPLEXSRCS}${LIBCPLEX2SRCS}"
581fi
582
583amathc="amathc"
584amath="amath"
585amathcplex="amathcplex"
586amathapp="amathapp"
587
588appmain="appmain"
589appfunction="functions"
590appstatement="statement"
591appsystem="appsystem"
592program="src/main"
593
594ldsysflags="-l${appsystem} -l${appfunction} -l${appstatement} -l${appmain} -l${appfunction} -l${appstatement} -l${appmain} "
595ldlibflags="-l${amathapp} ${libm}-l${amathcplex} ${libm}-l${amath} -l${amathc} ${gcclib}"
596
597############################ Main Application ###########################
598{
599echo "CXX      = ${crosscompile}${cxxcompiler}"
600echo "CXXFLAGS = ${appop}${options} ${cxxflags}${fPIC} -I. -I.. -Wall"
601echo "AR       = ${crosscompile}ar"
602echo "RANLIB   = ${crosscompile}ranlib"
603echo "DEL      = rm -f"
604echo
605echo "all: lib"
606echo "static: lib"
607echo
608
609files=""
610for f in ${APPSRCS}
611do
612	b=`basename $f .cpp`
613	echo "${b}.o:	${f}"
614	echo "	\${CXX} \${CXXFLAGS} -c ${f}"
615	echo
616	files="${files} ${b}.o"
617done
618
619echo "lib:	${files}"
620echo "	\${AR} rcs lib${appmain}.a ${files}"
621echo "	\${RANLIB} lib${appmain}.a"
622echo
623echo "clean:"
624echo "	\${DEL} lib${appmain}.a ${files}"
625echo
626} > src/main/Makefile
627#########################################################################
628
629########################### Functions Library ###########################
630{
631echo "CXX      = ${crosscompile}${cxxcompiler}"
632echo "CXXFLAGS = ${appop}${options} ${cxxflags}${fPIC} -I. -I../.. -Wall"
633echo "AR       = ${crosscompile}ar"
634echo "RANLIB   = ${crosscompile}ranlib"
635echo "DEL      = rm -f"
636echo
637echo "all: lib"
638echo "static: lib"
639echo
640
641files=""
642for f in ${FUNCTIONSRC}
643do
644	b=`basename $f .cpp`
645	echo "${b}.o:	${f}"
646	echo "	\${CXX} \${CXXFLAGS} -c ${f}"
647	echo
648	files="${files} ${b}.o"
649done
650
651echo "lib:	${files}"
652echo "	\${AR} rcs lib${appfunction}.a ${files}"
653echo "	\${RANLIB} lib${appfunction}.a"
654echo
655echo "clean:"
656echo "	\${DEL} lib${appfunction}.a ${files}"
657echo
658} > src/main/function/Makefile
659#########################################################################
660
661########################### Statement Library ###########################
662{
663echo "CXX      = ${crosscompile}${cxxcompiler}"
664echo "CXXFLAGS = ${appop}${options} ${cxxflags}${fPIC} -I. -I../.. -Wall"
665echo "AR       = ${crosscompile}ar"
666echo "RANLIB   = ${crosscompile}ranlib"
667echo "DEL      = rm -f"
668echo
669echo "all: lib"
670echo "static: lib"
671echo
672
673files=""
674for f in ${STATEMENTSRCS}
675do
676	b=`basename $f .cpp`
677	echo "${b}.o:	${f}"
678	echo "	\${CXX} \${CXXFLAGS} -c ${f}"
679	echo
680	files="${files} ${b}.o"
681done
682
683echo "lib:	${files}"
684echo "	\${AR} rcs lib${appstatement}.a ${files}"
685echo "	\${RANLIB} lib${appstatement}.a"
686echo
687echo "clean:"
688echo "	\${DEL} lib${appstatement}.a ${files}"
689echo
690} > src/main/statement/Makefile
691#########################################################################
692
693############################ System Library #############################
694{
695echo "CXX      = ${crosscompile}${cxxcompiler}"
696echo "CXXFLAGS = ${appop}${options} ${cxxflags}${fPIC} -I. -I.. -Wall"
697echo "AR       = ${crosscompile}ar"
698echo "RANLIB   = ${crosscompile}ranlib"
699echo "DEL      = rm -f"
700echo
701echo "all: lib"
702echo "static: lib"
703echo
704
705files=""
706for f in ${SYSSRCS}
707do
708	b=`basename $f .cpp`
709	echo "${b}.o:	${f}"
710	echo "	\${CXX} \${CXXFLAGS} -c ${f}"
711	echo
712	files="${files} ${b}.o"
713done
714
715echo "lib:	${files}"
716echo "	\${AR} rcs lib${appsystem}.a ${files}"
717echo "	\${RANLIB} lib${appsystem}.a"
718echo
719echo "clean:"
720echo "	\${DEL} lib${appsystem}.a ${files}"
721echo
722} > src/system/Makefile
723#########################################################################
724
725########################## Application Library ##########################
726{
727echo "CXX       = ${crosscompile}${cxxcompiler}"
728echo "CXXFLAGS  = ${libop}${options} ${cxxflags}-I. -I.. -Wall"
729echo "AR        = ${crosscompile}ar"
730echo "RANLIB    = ${crosscompile}ranlib"
731echo "MKDIR     = mkdir -p"
732echo "RMDIR     = rm -Rf"
733echo "DEL       = rm -f"
734echo "INSTALL   = install -m 0644"
735echo "LDCONFIG  = ldconfig"
736echo "DOXYGEN   = doxygen"
737echo "PREFIX    = ${prefix}"
738echo "INSTDIR   = \${DESTDIR}\${PREFIX}/lib/amath"
739echo "INSTDIRI  = \${DESTDIR}\${PREFIX}/include/amath"
740echo "INSTDIRPC = \${DESTDIR}\${PREFIX}/${pkgconfigdir}"
741echo "alib      = lib${amathapp}.a"
742echo "solib     = lib${amathapp}.so"
743echo "pkgconfig = amatha.pc"
744echo
745echo "all: static shared"
746echo
747echo "static: \${alib}"
748echo
749echo "shared: \${solib}"
750echo
751
752files=""
753files2=""
754for f in ${LIBAPPSRCS}
755do
756	b=`basename $f .cpp`
757	echo "static/${b}.o:	${f}"
758	echo "	\${CXX} \${CXXFLAGS}${fPIC} -c ${f} -o static/${b}.o"
759	echo
760	echo "shared/${b}.o:	${f}"
761	echo "	\${CXX} \${CXXFLAGS} -fPIC -c ${f} -o shared/${b}.o"
762	echo
763	files="${files} static/${b}.o"
764	files2="${files2} shared/${b}.o"
765done
766
767echo ".PHONY: build"
768echo "build:"
769echo "	\${MKDIR} static"
770echo "	\${MKDIR} shared"
771echo
772echo "\${solib}:	build ${files2}"
773echo "	\${CXX} \${CXXFLAGS} -shared ${exestrip} -fPIC -Wl,-soname,\${solib}${soverion} -o \${solib} ${files2}"
774echo
775echo "\${alib}:	build ${files}"
776echo "	\${AR} rcs static/\${alib} ${files}"
777echo "	\${RANLIB} static/\${alib}"
778echo
779echo ".PHONY: doc"
780echo "doc:"
781echo "	\${DOXYGEN} amatha.dox"
782echo
783echo ".PHONY: install"
784echo "install:"
785echo "	\${MKDIR} \${INSTDIR}"
786echo "	\${MKDIR} \${INSTDIRPC}"
787echo "	\${MKDIR} \${INSTDIRI}"
788echo "	\${INSTALL} static/\${alib} \${INSTDIR}/\${alib}"
789echo "	\${INSTALL} \${solib} \${INSTDIR}/\${solib}"
790echo "	\${INSTALL} \${pkgconfig} \${INSTDIRPC}/\${pkgconfig}"
791echo "	\${INSTALL} aengine.h \${INSTDIRI}/aengine.h"
792echo "	\${INSTALL} bigint.h \${INSTDIRI}/bigint.h"
793echo "	\${INSTALL} charbuf.h \${INSTDIRI}/charbuf.h"
794echo "	\${INSTALL} cplex.h \${INSTDIRI}/cplex.h"
795echo "	\${INSTALL} nnumb.h \${INSTDIRI}/nnumb.h"
796echo "	\${INSTALL} ntext.h \${INSTDIRI}/ntext.h"
797echo "	\${INSTALL} ntext.h \${INSTDIRI}/ntextd.h"
798echo "	\${INSTALL} ntext.h \${INSTDIRI}/ntextp.h"
799echo "	\${INSTALL} numb.h \${INSTDIRI}/numb.h"
800echo "	\${INSTALL} real.h \${INSTDIRI}/real.h"
801if ${useldconfig}; then
802echo "	\${LDCONFIG} \${INSTDIR}"
803fi
804echo
805echo ".PHONY:	uninstall"
806echo "uninstall:"
807echo "	\${DEL} \${INSTDIR}/\${alib}"
808echo "	\${DEL} \${INSTDIR}/\${solib}"
809echo "	\${DEL} \${INSTDIRPC}/\${pkgconfig}"
810echo "	\${DEL} \${INSTDIRI}/aengine.h"
811echo "	\${DEL} \${INSTDIRI}/charbuf.h"
812echo "	\${DEL} \${INSTDIRI}/cplex.h"
813echo "	\${DEL} \${INSTDIRI}/integer.h"
814echo "	\${DEL} \${INSTDIRI}/nnumb.h"
815echo "	\${DEL} \${INSTDIRI}/ntext.h"
816echo "	\${DEL} \${INSTDIRI}/numb.h"
817echo "	\${DEL} \${INSTDIRI}/real.h"
818if ${useldconfig}; then
819echo "	\${LDCONFIG}"
820fi
821echo
822echo "clean:"
823echo "	\${DEL} static/\${alib} \${solib} ${files} ${files2}"
824echo
825echo "very-clean: clean"
826echo "	\${DEL} doxygen.warn"
827echo "	\${RMDIR} man"
828echo "	\${RMDIR} static"
829echo "	\${RMDIR} shared"
830echo
831} >  src/lib/Makefile
832#########################################################################
833
834############################### C Library ###############################
835{
836echo "CC        = ${crosscompile}${ccompiler}"
837echo "CFLAGS    = -std=c9x ${libop}${options} ${cflags}-I. -I.. -Wall"
838echo "AR        = ${crosscompile}ar"
839echo "RANLIB    = ${crosscompile}ranlib"
840echo "MKDIR     = mkdir -p"
841echo "RMDIR     = rm -Rf"
842echo "DEL       = rm -f"
843echo "INSTALL   = install -m 0644"
844echo "LDCONFIG  = ldconfig"
845echo "DOXYGEN   = doxygen"
846echo "PREFIX    = ${prefix}"
847echo "INSTDIR   = \${DESTDIR}\${PREFIX}/lib/amath"
848echo "INSTDIRI  = \${DESTDIR}\${PREFIX}/include/amath"
849echo "INSTDIRPC = \${DESTDIR}\${PREFIX}/${pkgconfigdir}"
850echo "INSTDIRM  = \${DESTDIR}\${PREFIX}/${mandir}/man3"
851echo "alib      = lib${amathc}.a"
852echo "solib     = lib${amathc}.so"
853echo "pkgconfig = amathc.pc"
854echo "manpage   = amathc.3"
855echo
856echo "all: static shared"
857echo
858echo "static: \${alib}"
859echo
860echo "shared: \${solib}"
861echo
862
863libc=""
864libcs=""
865for f in ${LIBC1SRCS}
866do
867	b=`basename $f .c`
868	echo "static/${b}.o:	${f}"
869	echo "	\${CC} \${CFLAGS}${fPIC} -fno-builtin -c ${f} -o static/${b}.o"
870	echo
871	echo "shared/${b}.o:	${f}"
872	echo "	\${CC} \${CFLAGS} -fPIC -fno-builtin -c ${f} -o shared/${b}.o"
873	echo
874	libc="${libc} static/${b}.o"
875	libcs="${libcs} shared/${b}.o"
876done
877
878echo ".PHONY: build"
879echo "build:"
880echo "	\${MKDIR} static"
881echo "	\${MKDIR} shared"
882echo
883echo "\${solib}:	build ${libcs}"
884echo "	\${CC} \${CFLAGS} -shared ${exestrip} -fPIC -Wl,-soname,\${solib}${soverion} -o \${solib} ${libcs}"
885echo
886echo "\${alib}:	build ${libc}"
887echo "	\${AR} rcs static/\${alib} ${libc}"
888echo "	\${RANLIB} static/\${alib}"
889echo
890echo ".PHONY: doc"
891echo "doc:"
892echo "	\${DOXYGEN} amathc.dox"
893echo
894echo ".PHONY: install"
895echo "install:"
896echo "	\${MKDIR} \${INSTDIR}"
897echo "	\${MKDIR} \${INSTDIRPC}"
898echo "	\${MKDIR} \${INSTDIRI}"
899echo "	\${INSTALL} static/\${alib} \${INSTDIR}/\${alib}"
900echo "	\${INSTALL} \${solib} \${INSTDIR}/\${solib}"
901echo "	\${INSTALL} \${pkgconfig} \${INSTDIRPC}/\${pkgconfig}"
902echo "	\${INSTALL} \${manpage} \${INSTDIRM}/\${manpage}"
903echo "	\${INSTALL} ../amath.h \${INSTDIRI}"
904echo "	\${INSTALL} ../amathc.h \${INSTDIRI}"
905if ${useldconfig}; then
906echo "	\${LDCONFIG} \${INSTDIR}"
907fi
908echo
909echo ".PHONY:	uninstall"
910echo "uninstall:"
911echo "	\${DEL} \${INSTDIR}/\${alib}"
912echo "	\${DEL} \${INSTDIR}/\${solib}"
913echo "	\${DEL} \${INSTDIRPC}/\${pkgconfig}"
914echo "	\${DEL} \${INSTDIRM}/\${manpage}"
915echo "	\${DEL} \${INSTDIRI}/amath.h"
916echo "	\${DEL} \${INSTDIRI}/amathc.h"
917if ${useldconfig}; then
918echo "	\${LDCONFIG}"
919fi
920echo
921echo "clean:"
922echo "	\${DEL} static/\${alib} \${solib} ${libc} ${libcs}"
923echo
924echo "very-clean: clean"
925echo "	\${DEL} doxygen.warn"
926echo "	\${RMDIR} man"
927echo "	\${RMDIR} static"
928echo "	\${RMDIR} shared"
929echo
930} >  src/clib/Makefile
931#########################################################################
932
933############################# Real Numbers ##############################
934{
935echo "CC        = ${crosscompile}${ccompiler}"
936echo "CFLAGS    = -std=c9x ${libop}${options} ${cflags}-I. -I.. -Wall"
937echo "AR        = ${crosscompile}ar"
938echo "RANLIB    = ${crosscompile}ranlib"
939echo "MKDIR     = mkdir -p"
940echo "RMDIR     = rm -Rf"
941echo "DEL       = rm -f"
942echo "INSTALL   = install -m 0644"
943echo "LDCONFIG  = ldconfig"
944echo "DOXYGEN   = doxygen"
945echo "PREFIX    = ${prefix}"
946echo "INSTDIR   = \${DESTDIR}\${PREFIX}/lib/amath"
947echo "INSTDIRI  = \${DESTDIR}\${PREFIX}/include/amath"
948echo "INSTDIRPC = \${DESTDIR}\${PREFIX}/${pkgconfigdir}"
949echo "INSTDIRM  = \${DESTDIR}\${PREFIX}/${mandir}/man3"
950echo "alib      = lib${amath}.a"
951echo "solib     = lib${amath}.so"
952echo "pkgconfig = amathr.pc"
953echo "manpage   = amathr.3"
954echo
955echo "all: static shared"
956echo
957echo "static: \${alib}"
958echo
959echo "shared: \${solib}"
960echo
961
962libamath=""
963libamaths=""
964for f in ${LIBREALSRCS}
965do
966	b=`basename $f .c`
967	echo "static/${b}.o:	${f}"
968	echo "	\${CC} \${CFLAGS}${fPIC} -fno-builtin -c ${f} -o static/${b}.o"
969	echo
970	echo "shared/${b}.o:	${f}"
971	echo "	\${CC} \${CFLAGS} -fPIC -fno-builtin -c ${f} -o shared/${b}.o"
972	echo
973	libamath="${libamath} static/${b}.o"
974	libamaths="${libamaths} shared/${b}.o"
975done
976
977echo ".PHONY: build"
978echo "build:"
979echo "	\${MKDIR} static"
980echo "	\${MKDIR} shared"
981echo
982echo "\${solib}:	build ${libamaths}"
983echo "	\${CC} \${CFLAGS} -shared ${exestrip} -fPIC -Wl,-soname,\${solib}${soverion} -o \${solib} ${libamaths}"
984echo
985echo "\${alib}:	build ${libamath}"
986echo "	\${AR} rcs static/\${alib} ${libamath}"
987echo "	\${RANLIB} static/\${alib}"
988echo
989echo ".PHONY: doc"
990echo "doc:"
991echo "	\${DOXYGEN} amathr.dox"
992echo
993echo ".PHONY: install"
994echo "install:	\${solib}"
995echo "	\${MKDIR} \${INSTDIR}"
996echo "	\${MKDIR} \${INSTDIRPC}"
997echo "	\${MKDIR} \${INSTDIRI}"
998echo "	\${INSTALL} static/\${alib} \${INSTDIR}/\${alib}"
999echo "	\${INSTALL} \${solib} \${INSTDIR}/\${solib}"
1000echo "	\${INSTALL} \${pkgconfig} \${INSTDIRPC}/\${pkgconfig}"
1001echo "	\${INSTALL} \${manpage} \${INSTDIRM}/\${manpage}"
1002echo "	\${INSTALL} ../mathr.h \${INSTDIRI}/mathr.h"
1003if ${useldconfig}; then
1004echo "	\${LDCONFIG} \${INSTDIR}"
1005fi
1006echo
1007echo ".PHONY:	uninstall"
1008echo "uninstall:"
1009echo "	\${DEL} \${INSTDIR}/\${alib}"
1010echo "	\${DEL} \${INSTDIR}/\${solib}"
1011echo "	\${DEL} \${INSTDIRPC}/\${pkgconfig}"
1012echo "	\${DEL} \${INSTDIRM}/\${manpage}"
1013echo "	\${DEL} \${INSTDIRI}/mathr.h"
1014if ${useldconfig}; then
1015echo "	\${LDCONFIG}"
1016fi
1017echo
1018echo "clean:"
1019echo "	\${DEL} static/\${alib} \${solib} ${libamath} ${libamaths}"
1020echo
1021echo "very-clean: clean"
1022echo "	\${DEL} doxygen.warn"
1023echo "	\${RMDIR} man"
1024echo "	\${RMDIR} static"
1025echo "	\${RMDIR} shared"
1026echo
1027} >  src/real/Makefile
1028#########################################################################
1029
1030############################ Complex Numbers ############################
1031{
1032echo "CC        = ${crosscompile}${ccompiler}"
1033echo "CFLAGS    = -std=c9x ${libop}${options} ${cxxflags}-I. -I.. -Wall"
1034echo "AR        = ${crosscompile}ar"
1035echo "RANLIB    = ${crosscompile}ranlib"
1036echo "MKDIR     = mkdir -p"
1037echo "RMDIR     = rm -Rf"
1038echo "DEL       = rm -f"
1039echo "INSTALL   = install -m 0644"
1040echo "LDCONFIG  = ldconfig"
1041echo "DOXYGEN   = doxygen"
1042echo "PREFIX    = ${prefix}"
1043echo "INSTDIR   = \${DESTDIR}\${PREFIX}/lib/amath"
1044echo "INSTDIRI  = \${DESTDIR}\${PREFIX}/include/amath"
1045echo "INSTDIRPC = \${DESTDIR}\${PREFIX}/${pkgconfigdir}"
1046echo "INSTDIRM  = \${DESTDIR}\${PREFIX}/${mandir}/man3"
1047echo "alib      = lib${amathcplex}.a"
1048echo "solib     = lib${amathcplex}.so"
1049echo "pkgconfig = amathi.pc"
1050echo "manpage   = amathi.3"
1051echo
1052echo "all: static shared"
1053echo
1054echo "static: \${alib}"
1055echo
1056echo "shared: \${solib}"
1057echo
1058
1059libcomplex=""
1060libcomplexs=""
1061for f in ${LIBCPLEXSRCS}
1062do
1063	b=`basename $f .c`
1064	echo "static/${b}.o:	${f}"
1065	echo "	\${CC} \${CFLAGS}${fPIC} -fno-builtin -c ${f} -o static/${b}.o"
1066	echo
1067	echo "shared/${b}.o:	${f}"
1068	echo "	\${CC} \${CFLAGS} -fPIC -fno-builtin -c ${f} -o shared/${b}.o"
1069	echo
1070	libcomplex="${libcomplex} static/${b}.o"
1071	libcomplexs="${libcomplexs} shared/${b}.o"
1072done
1073
1074echo ".PHONY: build"
1075echo "build:"
1076echo "	\${MKDIR} static"
1077echo "	\${MKDIR} shared"
1078echo
1079echo "\${solib}:	build ${libcomplexs}"
1080echo "	\${CC} \${CFLAGS} -shared ${exestrip} -fPIC -Wl,-soname,\${solib}${soverion} -o \${solib} ${libcomplexs}"
1081echo
1082echo "\${alib}:	build ${libcomplex}"
1083echo "	\${AR} rcs static/\${alib} ${libcomplex}"
1084echo "	\${RANLIB} static/\${alib}"
1085echo
1086echo ".PHONY: doc"
1087echo "doc:"
1088echo "	\${DOXYGEN} amathi.dox"
1089echo
1090echo ".PHONY: install"
1091echo "install:"
1092echo "	\${MKDIR} \${INSTDIR}"
1093echo "	\${MKDIR} \${INSTDIRPC}"
1094echo "	\${MKDIR} \${INSTDIRI}"
1095echo "	\${INSTALL} static/\${alib} \${INSTDIR}/\${alib}"
1096echo "	\${INSTALL} \${solib} \${INSTDIR}/\${solib}"
1097echo "	\${INSTALL} \${pkgconfig} \${INSTDIRPC}/\${pkgconfig}"
1098echo "	\${INSTALL} \${manpage} \${INSTDIRM}/\${manpage}"
1099echo "	\${INSTALL} ../mathi.h \${INSTDIRI}/mathi.h"
1100if ${useldconfig}; then
1101echo "	\${LDCONFIG} \${INSTDIR}"
1102fi
1103echo
1104echo ".PHONY: uninstall"
1105echo "uninstall:"
1106echo "	\${DEL} \${INSTDIR}/\${alib}"
1107echo "	\${DEL} \${INSTDIR}/\${solib}"
1108echo "	\${DEL} \${INSTDIRPC}/\${pkgconfig}"
1109echo "	\${DEL} \${INSTDIRM}/\${manpage}"
1110echo "	\${DEL} \${INSTDIRPC}/amathi.pc"
1111echo "	\${DEL} \${INSTDIRI}/mathi.h"
1112if ${useldconfig}; then
1113echo "	\${LDCONFIG}"
1114fi
1115echo
1116echo "clean:"
1117echo "	\${DEL} static/\${alib} \${solib} ${libcomplex} ${libcomplexs}"
1118echo
1119echo "very-clean: clean"
1120echo "	\${DEL} doxygen.warn"
1121echo "	\${RMDIR} man"
1122echo "	\${RMDIR} static"
1123echo "	\${RMDIR} shared"
1124echo
1125} >  src/cplex/Makefile
1126#########################################################################
1127
1128################################# Main ##################################
1129{
1130echo
1131echo "CC       = ${crosscompile}${ccompiler}"
1132echo "CXX      = ${crosscompile}${cxxcompiler}"
1133echo "CFLAGS   = ${appop}${options} ${cflags}-Wall -Isrc -Isrc/main"
1134echo "CXXFLAGS = ${appop}${options} ${cxxflags}-Wall -Isrc -Isrc/main"
1135echo "AR       = ${crosscompile}ar"
1136echo "RANLIB   = ${crosscompile}ranlib"
1137echo "LFLAGS   = ${ldflags}${ldsysflags}${ldlibflags}"
1138echo "LPATH    = -Lsrc/lib -Lsrc/clib -Lsrc/real -Lsrc/cplex -Lsrc/main/function -Lsrc/main/statement -Lsrc/main -Lsrc/system"
1139echo "LPATHS   = -Lsrc/lib/static -Lsrc/clib/static -Lsrc/real/static -Lsrc/cplex/static -Lsrc/main/function -Lsrc/main/statement -Lsrc/main -Lsrc/system"
1140echo "FLXCAT   = build/flexcat/flexcat"
1141echo "MKDIR    = mkdir -p"
1142echo "DEL      = rm -f"
1143echo "INSTALLP = install -m 0755"
1144echo "INSTALLM = install -m 0644"
1145echo "PREFIX   = ${prefix}"
1146echo "INSTDIRP  = \${DESTDIR}\${PREFIX}/bin"
1147echo "INSTDIRM  = \${DESTDIR}\${PREFIX}/${mandir}/man1"
1148echo
1149echo "all:	shared-libs static-libs static-app"
1150echo "amath:	shared-libs static-libs shared-app"
1151echo "static:	static-app"
1152echo "app:	${appmain} ${appfunction} ${appstatement} ${appsystem}"
1153echo "libs:	${amathapp} ${amath} ${amathc} ${amathcplex}"
1154echo
1155echo "${program}.o:	${program}.cpp"
1156echo "	\${CXX} \${CXXFLAGS} -c ${program}.cpp -o ${program}.o"
1157echo
1158echo "${appmain}:"
1159echo "	cd src/main && \${MAKE}"
1160echo
1161echo "${appsystem}:"
1162echo "	cd src/system && \${MAKE}"
1163echo
1164echo "${appfunction}:"
1165echo "	cd src/main/function && \${MAKE}"
1166echo
1167echo "${appstatement}:"
1168echo "	cd src/main/statement && \${MAKE}"
1169echo
1170echo "${amathapp}:"
1171echo "	cd src/lib && \${MAKE}"
1172echo
1173echo "${amath}:"
1174echo "	cd src/real && \${MAKE}"
1175echo
1176echo "${amathc}:"
1177echo "	cd src/clib && \${MAKE}"
1178echo
1179echo "${amathcplex}:"
1180echo "	cd src/cplex && \${MAKE}"
1181echo
1182echo "locale:"
1183echo "	cd build/flexcat && \${MAKE}"
1184echo "	\${FLXCAT} text/keyword.cd src/loc/kword.h=text/keyword.sd"
1185echo "	\${FLXCAT} text/help.cd src/loc/help.h=text/help.sd"
1186echo "	\${FLXCAT} text/ident.cd src/loc/ident.h=text/ident.sd"
1187echo "	\${FLXCAT} text/text.cd src/loc/text.h=text/text.sd"
1188echo
1189echo "doc:"
1190echo "	cd src/clib && \${MAKE} doc"
1191echo "	cd src/real && \${MAKE} doc"
1192echo "	cd src/cplex && \${MAKE} doc"
1193echo
1194echo "catalogs:"
1195echo "	cd build/flexcat && \${MAKE}"
1196echo "	\${MKDIR}  dist/catalog/english"
1197echo "	\${FLXCAT} text/help.cd catalog/english/amath-help.ct CATALOG dist/catalog/english/amath-help.catalog"
1198echo "	\${FLXCAT} text/ident.cd catalog/english/amath-ident.ct CATALOG dist/catalog/english/amath-ident.catalog"
1199echo "	\${FLXCAT} text/text.cd catalog/english/amath-text.ct CATALOG dist/catalog/english/amath-text.catalog"
1200echo
1201echo "shared-libs:"
1202echo "	cd src/lib && \${MAKE} shared"
1203echo "	cd src/clib && \${MAKE} shared"
1204echo "	cd src/real && \${MAKE} shared"
1205echo "	cd src/cplex && \${MAKE} shared"
1206echo
1207echo "static-libs:"
1208echo "	cd src/lib && \${MAKE} static"
1209echo "	cd src/clib && \${MAKE} static"
1210echo "	cd src/real && \${MAKE} static"
1211echo "	cd src/cplex && \${MAKE} static"
1212echo
1213echo "shared-app:	app shared-libs ${program}.o"
1214echo "	\${CC} \${CFLAGS} ${exestrip} ${program}.o -o amath \${LPATH} \${LFLAGS}"
1215echo
1216echo "static-app:	app static-libs ${program}.o"
1217echo "	\${CC} \${CFLAGS} ${exestrip} ${program}.o -o amath \${LPATHS} \${LFLAGS}"
1218echo
1219echo ".PHONY: test"
1220echo "test: amath"
1221echo "	LD_LIBRARY_PATH=src/clib/:src/lib:src/cplex:scr/real"
1222echo "	./amath --test"
1223echo
1224echo ".PHONY: install"
1225echo "install:"
1226echo "	cd src/lib && \${MAKE} install"
1227echo "	cd src/clib && \${MAKE} install"
1228echo "	cd src/real && \${MAKE} install"
1229echo "	cd src/cplex && \${MAKE} install"
1230echo "	\${INSTALLP} amath \${INSTDIRP}/amath"
1231echo "	\${INSTALLM} amath.1 \${INSTDIRM}/amath.1"
1232echo
1233echo ".PHONY: uninstall"
1234echo "uninstall:"
1235echo "	cd src/lib && \${MAKE} uninstall"
1236echo "	cd src/clib && \${MAKE} uninstall"
1237echo "	cd src/real && \${MAKE} uninstall"
1238echo "	cd src/cplex && \${MAKE} uninstall"
1239echo "	\${DEL} \${INSTDIRP}/amath"
1240echo "	\${DEL} \${INSTDIRM}/amath.1"
1241echo
1242echo ".PHONY: clean"
1243echo "clean:"
1244echo "	cd src/lib && \${MAKE} clean"
1245echo "	cd src/clib && \${MAKE} clean"
1246echo "	cd src/real && \${MAKE} clean"
1247echo "	cd src/cplex && \${MAKE} clean"
1248echo "	cd src/main && \${MAKE} clean"
1249echo "	cd src/system && \${MAKE} clean"
1250echo "	cd src/main/function && \${MAKE} clean"
1251echo "	cd src/main/statement && \${MAKE} clean"
1252echo "	cd build/flexcat && \${MAKE} clean"
1253echo "	\${DEL} ${program}.o amath"
1254echo
1255echo ".PHONY: very-clean"
1256echo "very-clean: clean"
1257echo "	cd src/lib && \${MAKE} very-clean"
1258echo "	cd src/clib && \${MAKE} very-clean"
1259echo "	cd src/real && \${MAKE} very-clean"
1260echo "	cd src/cplex && \${MAKE} very-clean"
1261echo
1262} > Makefile
1263#########################################################################
1264
1265################################ Flexcat ################################
1266{
1267echo 'all:	flexcat'
1268echo ''
1269echo "CFLAGS += -I. -Wall"
1270echo ''
1271
1272l=""
1273for f in ${FLXSRCS}
1274do
1275	b=`basename $f .c`
1276	echo "${b}.o:	${f}"
1277	echo "	\${CC} \${CFLAGS} -c ${f}"
1278	echo
1279	l="${l} ${b}.o"
1280done
1281
1282echo
1283echo "flexcat:	${l}"
1284echo "	\${CC} \${CFLAGS} -o flexcat ${l} -lm"
1285echo
1286echo "clean:"
1287echo "	rm -f ${l} flexcat"
1288echo
1289} > build/flexcat/Makefile
1290#########################################################################
1291
1292echo "Makefile generated"
1293