diff options
Diffstat (limited to 'configure.ac')
-rw-r--r-- | configure.ac | 504 |
1 files changed, 504 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac new file mode 100644 index 00000000..5b51f5ed --- /dev/null +++ b/configure.ac @@ -0,0 +1,504 @@ +sinclude(config/open-axiom.m4) +sinclude(config/aclocal.m4) +AC_INIT([OpenAxiom 1.0.0 (experimental)], [2007-08-23], + [open-axiom-devel@lists.sf.org]) +AC_CONFIG_AUX_DIR(config) +AC_CONFIG_MACRO_DIR(config) +AC_CONFIG_HEADERS([config/axiom-c-macros.h]) +# AM_INIT_AUTOMAKE([foreign]) +AC_PREREQ([2.60]) + +AC_CONFIG_SRCDIR(src/Makefile.pamphlet) + +AC_PROG_LIBTOOL +AC_SUBST(LIBTOOL_DEPS) + +## Shall we proclaim safety? +axiom_enable_checking=no # don't turn on checking by default. +AC_ARG_ENABLE([checking], [ --enable-checking turn runtime checking on], + [case $enableval in + yes|no) axiom_enable_checking=$enableval ;; + *) AC_MSG_ERROR([erroneous value for --enable-checking]) ;; + esac]) +if test x"axiom_enable_checking" = xyes; then + AC_MSG_NOTICE([runtime checking may increase compilation time]) +fi +AC_SUBST(axiom_enable_checking) + +axiom_src_subdirs="lib lisp boot interp share algebra input etc doc" +AC_SUBST(axiom_src_subdirs) + +AC_CANONICAL_SYSTEM +if test $build != $target; then + AC_MSG_WARN([Cross build is not supported.]) + AC_MSG_WARN([Please notify axiom-developer@nongnu.org if you succeed.]) +fi +## Where tools for the build platform are sequestered +axiom_build_sharedir=$axiom_builddir/share + +## Accumulate list of utils needed for the build platform +## It is vital that noweb is present in the build environement. +axiom_all_prerequisites= + +case $build in + *linux*) + # GNU/Linux systems come equipped with GNU Make, called `make' + AC_CHECK_PROGS([MAKE], [make], + [AC_MSG_ERROR([Make utility missing.])]) + ;; + *) + # Other systems tend to spell it `gmake' and such + AC_CHECK_PROGS([MAKE], [gmake make], + [AC_MSG_ERROR([Make utility missing.])]) + if ! $MAKE --version | grep 'GNU' 2>/dev/null; then + AC_MSG_ERROR([OpenAxiom build system needs GNU Make.]) + fi + ;; +esac + +## Make sure the C compiler is from GCC +AC_PROG_CC +if test x$GCC != xyes; then + AC_MSG_ERROR([We need a C compiler from GCC]) +fi +axiom_cflags="-O2 -fno-strength-reduce -Wall -D_GNU_SOURCE" +AC_SUBST(axiom_cflags) + +## What is the extension of object files on this platform? +AC_OBJEXT + +AC_PROG_INSTALL +# AC_PROG_LN_S +AC_CHECK_PROG([TOUCH], [touch], + [touch], [AC_MSG_ERROR(['touch' program is missing.])]) +AC_CHECK_PROGS([MKTEMP], [mktemp]) + +case $build in + *-solaris9) + AC_CHECK_PROG([AWK], [gawk], + [gawk], [AC_MSG_ERROR([OpenAxiom needs gawk])]) + + AC_CHECK_PROG([PATCH], [gpatch], + [gptach], [AC_MSG_ERROR([OpenAxiom needs gpatch])]) + ;; + + *) + AC_PROG_AWK + + AC_CHECK_PROGS([PATCH], [gpatch patch], + [AC_MSG_ERROR([OpenAxiom needs a patch program])]) + ;; +esac + +AC_CHECK_PROG([AR], [ar], [ar], [AC_MSG_ERROR([program 'ar' is missing])]) + +AC_PATH_PROG([LATEX], [latex]) +AC_CHECK_PROG([MAKEINDEX], [makeindex]) +if test -n "$LATEX"; then \ + axiom_src_all="$axiom_src_all all-book" + axiom_src_subdirs="$axiom_src_subdirs booklets" + AXIOM_MAKEFILE([src/booklets/Makefile]) +else + AC_MSG_NOTICE([Documentation is disabled.]) +fi + +## --------------------------------------- +## Make sure noweb executable is available +## --------------------------------------- +AC_CHECK_PROGS([NOTANGLE], [notangle]) +AC_CHECK_PROGS([NOWEAVE], [noweave]) + +## In case noweb is missing we need to build our own. +if test -z $NOTANGLE -o -z $NOWEAVE ; then + AC_MSG_NOTICE([OpenAxiom requires noweb utilties]) + AC_MSG_ERROR([Please install noweb and reconfigure]) +fi + +## ------------------------ +## -- Which Lisp to use? -- +## ------------------------ +## +## We will default to GCL later, if no lisp implementation is specified. +axiom_lisp= +axiom_lisp_flavor=unknown +AC_ARG_WITH([lisp], [ --with-lisp=L use L as Lisp platform], + [axiom_lisp=$withval]) +## If --enable-gcl is specified, we need to check for coonsistency +axiom_include_gcl= +if test -z $axiom_lisp; then + AC_ARG_ENABLE([gcl], [ --enable-gcl build GCL from OpenAxiom source], + [case $enableval in + yes|no) axiom_include_gcl=$enableval ;; + *) AC_MSG_ERROR([erroneous value for --enable-gcl]) ;; + esac]) +fi +## We need to build our own GCL is none is avalaible +if test -z $axiom_lisp; then + AC_PATH_PROG([AXIOM_LISP], [gcl]) + axiom_lisp=$AXIOM_LISP +else + ## Honor use of Lisp image specified on command line + AXIOM_LISP=$axiom_lisp + AC_SUBST(AXIOM_LISP) + : +fi +## Coherence check for GCL inclusion. +case $axiom_include_gcl,$axiom_lisp in + ,|no,|yes*) + ## It doesn't make sense not to include GCL when no Lisp image + ## is available. Give up. + if test $axiom_include_gcl,$AXIOM_LISP = no,; then + AC_MSG_ERROR([--disable-gcl specified but no GCL image found]) + fi + + ## No Lisp image was specified and none was available from + ## the build environment; build GCL from OpenAxiom source. + AXIOM_LISP='$(axiom_build_bindir)/gcl' + axiom_all_prerequisites="$axiom_all_prerequisites all-gcl" + axiom_include_gcl=yes + axiom_lisp_flavor=gcl + axiom_fasl_type=o + ;; + yes,*) + AC_MSG_ERROR([--with-lisp=$axiom_lisp conflicts with --enable-gcl]) + ;; + *) + ## As of this writting, the Lisp systems ECL, GCL, and SBCL all + ## understands the command line option --help, though they do + ## behave very differently. Some of them just print out the + ## help information and exits. Others, such as GCL, think they + ## must enter a read-eval-print loop (which isn't very helpful). + AC_MSG_CHECKING([which flavor of Lisp]) + what=`echo '(quit)' | $axiom_lisp --help` + case $what in + *GCL*) + axiom_lisp_flavor=gcl + ;; + *ecl*) + axiom_lisp_flavor=ecl + ;; + *sbcl*) + axiom_lisp_flavor=sbcl + ;; + *CLISP*) + axiom_lisp_flavor=clisp + ;; + esac + AC_MSG_RESULT([$axiom_lisp_flavor]) +esac +AC_SUBST(axiom_include_gcl) +AC_SUBST(axiom_lisp_flavor) + +## The following is a horrible to arrange for GCL to successfully +## rebuild symbol tables with "rsym" on Windows platform. It should +## go away as soon as GCL upstream is fixed. +case $axiom_lisp_flavor,$target in + gcl,*mingw*) + axiom_gcl_rsym_hack='d=`echo "(format nil \"~a\" si::*system-directory*)" | $(AXIOM_LISP) | grep "/gcl.*/" | sed -e "s,\",,g"`; cp $$d/rsym$(EXEEXT) .' + ;; + *) + axiom_gcl_rsym_hack=':' + ;; +esac +AC_SUBST(axiom_gcl_rsym_hack) +## How are we supposed to tell the Lisp system to eval an expression +## in batch mode? What is the extension of a compiled Lisp file? +case $axiom_lisp_flavor in + gcl) + axiom_quiet_flags='-batch' + axiom_eval_flags='-eval' + ;; + ecl) + axiom_quiet_flags= + axiom_eval_flags='-eval' + ;; + sbcl) + axiom_quiet_flags='--noinform --noprint' + axiom_eval_flags='--eval' + ;; + clisp) + axiom_quiet_flags='--quiet' + axiom_eval_flags='-x' + ;; + *) AC_MSG_ERROR([We do not know how to build OpenAxiom this $axiom_lisp]) ;; +esac +AC_SUBST(axiom_quiet_flags) +AC_SUBST(axiom_eval_flags) +if test -z $axiom_fasl_type; then + AC_MSG_CHECKING([compiled Lisp file extension]) + ## We set the IFS to <space> as we don't want automatic + ## replacement of <newline> by <space>. + axiom_save_IFS=$IFS + IFS=' ' + axiom_fasl_type=`$axiom_lisp $axiom_quiet_flags $axiom_eval_flags '(progn (format t "axiom_fasl_type=~a" (pathname-type (compile-file-pathname "foo.lisp #+:ecl :type #+:ecl :object"))) (quit))'` + + ## Now pull out the fasl type. ECL has the habit of spitting noise + ## about internal loading. Therefore, we must look only for a line that + ## begins with axiom_fasl_type. + axiom_fasl_type=`echo $axiom_fasl_type | grep '^axiom_fasl_type'` + IFS=$axiom_save_IFS + axiom_fasl_type=`echo $axiom_fasl_type | sed -e 's/axiom_fasl_type=//'` + if test -z $axiom_fasl_type; then + AC_MSG_ERROR([Could not determine extension for compiled Lisp files]) + fi + AC_MSG_RESULT([$axiom_fasl_type]) +fi +AC_SUBST(axiom_fasl_type) + +AC_SUBST(axiom_all_prerequisites) + +# FIXME: Move this out of here. +# The core runtime is always built. +axiom_c_runtime=core +AC_SUBST(axiom_c_runtime) + +AC_CHECK_HEADERS([signal.h], + [], + [AC_MSG_ERROR([OpenAxiom needs signal support.])]) +AC_CHECK_DECLS([sigaction], [], [], + [#include <signal.h>]) +AC_CHECK_HEADERS([sys/stat.h], + [], + [AC_MSG_ERROR([OpenAxiom needs <sys/stat.h>.])]) +AC_CHECK_HEADERS([unistd.h], [], + [AC_MSG_ERROR([OpenAxiom needs <unistd.h>])]) +AC_CHECK_DECLS([getuid, geteuid, getgid, getegid], [], [], + [#include <unistd.h>]) + +AC_CHECK_DECLS([kill], [], [], + [#include <signal.h>]) +case $host in + *mingw*) + AC_CHECK_HEADERS([winsock2.h], + [axiom_host_has_socket=yes], + []) + axiom_c_runtime_extra="-lwsock32" + ;; + *) + AC_CHECK_HEADERS([sys/socket.h], + [axiom_host_has_socket=yes], + []) + ;; +esac +if test x$axiom_host_has_socket != xyes; then \ + AC_MSG_ERROR([OpenAxiom needs suport for sockets.]) +fi +## solaris-based systems tend to hide the socket library. +case $host in + *solaris*) + AC_SEARCH_LIBS([accept], [socket], + [axiom_c_runtime_extra="-lsocket"], + [AC_MSG_ERROR([socket library not found])]) + ;; + *) ;; +esac + +AC_SUBST(axiom_c_runtime_extra) + +AC_EGREP_HEADER([has_af_local], + [#if HAVE_SYS_SOCKET_H + # include <sys/socket.h> + #else + # include <winsock2.h> + #endif + #ifdef AF_LOCAL + has_af_local + #endif], + [AC_DEFINE([HAVE_AF_LOCAL], [1], [Host has AF_LOCAL])]) + + +AC_EGREP_HEADER([has_af_unix], + [#if HAVE_SYS_SOCKET_H + # include <sys/socket.h> + #else + # include <winsock2.h> + #endif + #ifdef AF_UNIX + has_af_unix + #endif], + [AC_DEFINE([HAVE_AF_UNIX], [1], [Host has AF_UNIX])]) + +AC_CHECK_HEADERS([sys/wait.h]) + +if test x"$ac_cv_header_sys_wait_h" = xyes; then \ + AC_CHECK_DECLS([wait], + [], + [], + [#include <sys/wait.h>]) +fi + +AC_CHECK_DECLS([fork], + [], + [], + [#include <unistd.h>]) + +axiom_use_sman=yes +if test x"$ac_cv_have_decl_fork" = xyes \ + -a x"$ac_cv_have_decl_wait" = xyes; then \ + axiom_c_runtime="$axiom_c_runtime terminal_io" + axiom_src_all="$axiom_src_all all-sman all-clef" + axiom_src_subdirs="$axiom_src_subdirs clef sman" + AXIOM_MAKEFILE([src/clef/Makefile]) + AXIOM_MAKEFILE([src/sman/Makefile]) +else + axiom_use_sman=no + AC_MSG_NOTICE([Superman component is disabled.]) +fi + +axiom_src_all="all-input $axiom_src_all" +AC_SUBST(axiom_use_sman) +AC_CHECK_HEADER([regex.h], + [axiom_src_all="$axiom_src_all all-hyper" + axiom_src_subdirs="$axiom_src_subdirs hyper" + AXIOM_MAKEFILE([src/hyper/Makefile])], + [AC_MSG_NOTICE([HyperDoc is disabled.])]) +AC_PATH_XTRA +## Output directives for the C compiler +AC_SUBST(X_CLFAGS) +## Output directives for the linker +AC_SUBST(X_LIBS) +## Output any extra libraries required by X11 +AC_SUBST(X_EXTRA_LIBS) + +## Finally, output the list of libraries that need to appear before -lX11 +## Some part of OpenAxiom depends on Xpm. That library has kind uncertain +## future. At some point in the past, it was deprecated, to be +## replaced by xpm-nox; then came back again. So, its support may +## vary from system to system. For the moment, we assume that if X11 +## is found then, Xpm is already present. Though, clearly that is a +## very optimistic assumption. Long term, OpenAxiom should get rid of +## dependence on Xpm. A nearly fool-proof test would be probably +## inspired by AC_PATH_XTRA. I don't have time to get to that +## complication right now. Will fix later. +X_PRE_LIBS="-lXpm $X_PRE_LIBS" +AC_SUBST(X_PRE_LIBS) + +## If the system supports X11, then build graphics +axiom_use_x=no +if test -z $no_x; then + axiom_use_x=yes + axiom_c_runtime="$axiom_c_runtime graphics" + axiom_src_all="$axiom_src_all all-graph" + axiom_src_subdirs="$axiom_src_subdirs graph" + AXIOM_MAKEFILE([src/graph/Makefile]) + AXIOM_MAKEFILE([src/graph/Gdraws/Makefile]) + AXIOM_MAKEFILE([src/graph/view2D/Makefile]) + AXIOM_MAKEFILE([src/graph/view3D/Makefile]) + AXIOM_MAKEFILE([src/graph/viewAlone/Makefile]) + AXIOM_MAKEFILE([src/graph/viewman/Makefile]) +else + AC_MSG_NOTICE([The Garphics component is disabled.]) +fi +AC_SUBST(axiom_src_all) +AC_SUBST(axiom_use_x) + +axiom_host_has_libbfd= +AC_CHECK_HEADER([bfd.h]) +AC_HAVE_LIBRARY([bfd], [axiom_host_has_libbfd=yes]) + +axiom_gcl_bfd_option= +if test x"$ac_cv_header_bfd_h" = xyes \ + && test x"$axiom_host_has_libbfd" = xyes; then + axiom_gcl_bfd_option="--disable-dynsysbfd" +else + axiom_gcl_bfd_option="--disable-statsysbfd --enable-locbfd" +fi +# axiom_gcl_mm_option="--enable-maxpage=256*1024" +axiom_gcl_x_option="--disable-tkconfig --disable-x --disable-xgcl" +axiom_gcl_emacs="--enable-emacs=correct" + +PFL= +CCF="-O2 -fno-strength-reduce -Wall -D_GNU_SOURCE" +LDF= +LISP=lsp + +case $target in + *bsd*) + AC_DEFINE([BSDplatform], [], [BSD flavour]) + CCF="-O2 -pipe -fno-strength-reduce -Wall -D_GNU_SOURCE -I/usr/local/include" + LDF="-L/usr/local/lib" + ;; + windows) + AC_DEFINE([MSYSplatform], [], [MS]) + SRCDIRS=bootdir interpdir sharedir algebradir etcdir docdir inputdir + ;; + *linux*) + AC_DEFINE([LINUXplatform], [], [Linux flavour]) + ;; + *solaris*) + AC_DEFINE([SUNplatform], [], [SunOS flavour]) + ;; + powerpc*darwin*) + AC_DEFINE([MACOSXplatform], [], [MACOX flavour]) + CCF="-O2 -fno-strength-reduce -Wall -D_GNU_SOURCE \ + -I/usr/include -I/usr/include/sys" + axiom_gcl_bfd_option="--disable-statsysbfd \ + --enable-machine=powerpc-macosx" + axiom_gcl_mm_option="--enable-vssize=65536*2" + ;; +esac + +GCLOPTS="$axiom_gcl_emacs $axiom_gcl_bfd_option $axiom_gcl_mm_option $axiom_gcl_x_option" + +AC_SUBST(PLF) +AC_SUBST(CCF) +AC_SUBST(LDF) +AC_SUBST(LISP) +AC_SUBST(GCLOPTS) +AXIOM_MAKEFILE([Makefile]) +AXIOM_MAKEFILE([src/Makefile]) +AXIOM_MAKEFILE([src/lib/Makefile]) +AXIOM_MAKEFILE([src/lisp/Makefile]) +AXIOM_MAKEFILE([src/boot/Makefile]) +AXIOM_MAKEFILE([src/interp/Makefile]) +AXIOM_MAKEFILE([src/share/Makefile]) +AXIOM_MAKEFILE([src/algebra/Makefile]) +AXIOM_MAKEFILE([src/input/Makefile]) +AXIOM_MAKEFILE([src/etc/Makefile]) +AXIOM_MAKEFILE([src/doc/Makefile]) +AC_CONFIG_FILES([src/scripts/axiom], [chmod +x src/scripts/axiom]) + + +## We now generate the "document" script and support files at configure time. +## We put them in the build directory because they are intended to be +## build support utils only. +AC_CONFIG_FILES(build/scripts/document:$srcdir/src/scripts/document.in, \ + [chmod +x build/scripts/document]) + +AC_OUTPUT + +## Generate rules for Algebra bootstrap files. +echo -n "building list of Algebra bootstrap files..." +egrep ".*BOOTSTRAP>>=" $srcdir/src/algebra/*.spad.pamphlet \ + | sort | uniq | \ + while IFS=':' read spad_file chunk_desc; do + chunk_desc=`echo $chunk_desc | sed -e 's,<<,,' -e 's,>>=,,'` + set $chunk_desc; bootstrap_file=$1 + cat >> src/algebra/tmp-extract-lisp-files.mk <<EOF +$bootstrap_file: \$(srcdir)/`basename $spad_file`; \ + \$(EXTRACT_BOOTSTRAP_FILE) +EOF + done +echo done +$srcdir/config/move-if-change \ + src/algebra/tmp-extract-lisp-files.mk \ + src/algebra/extract-lisp-files.mk + +## Generate rules to extrad SPAD type definitions from pamphlets. +echo -n "extracting list of SPAD type definitions..." +egrep '<<(category|domain|package) .*>>=' \ + $srcdir/src/algebra/*.spad.pamphlet \ + | sort | uniq | \ + while IFS=':' read spad_file chunk_desc; do + chunk_desc=`echo $chunk_desc | sed -e 's,<<,,' -e 's,>>=,,'` + set $chunk_desc; spad_abbrev=$2 + cat >> src/algebra/tmp-extract-spad.mk <<EOF +$spad_abbrev.spad: \$(srcdir)/`basename $spad_file` ; \ + @\$(axiom_build_document) --output=\$@ --tangle="$chunk_desc" \$< +EOF + done +echo done +$srcdir/config/move-if-change \ + src/algebra/tmp-extract-spad.mk src/algebra/extract-spad.mk + +echo "Type '${MAKE}' (without quotes) to build OpenAxiom" |