Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download

build open-axiom

54514 views
## ---------------------------------
## -- Standard Autoconf variables --
## ---------------------------------

SHELL = /bin/bash
VPATH = ../../../open-axiom/src/lisp

prefix = /projects/77750c71-ec7b-4962-bf55-a49ff5065fb6
exec_prefix = ${prefix}
bindir = ${exec_prefix}/bin
sbindir = ${exec_prefix}/sbin
libexecdir = ${exec_prefix}/libexec
datarootdir = ${prefix}/share
datadir = ${datarootdir}
sysconfdir = ${prefix}/etc
sharedstatedir = ${prefix}/com
localstatedir = ${prefix}/var
includedir = ${prefix}/include
oldincludedir = /usr/include
docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
infodir = ${datarootdir}/info
htmldir = ${docdir}
dvidir = ${docdir}
pdfdir = ${docdir}
psdir = ${docdir}
libdir = ${exec_prefix}/lib
lispdir = @lispdir@
localedir = ${datarootdir}/locale

host = x86_64-unknown-linux-gnu
host_alias = 
build = x86_64-unknown-linux-gnu
build_alias = 
target = x86_64-unknown-linux-gnu
target_alias = 

srcdir = ../../../open-axiom/src/lisp
abs_srcdir = /projects/77750c71-ec7b-4962-bf55-a49ff5065fb6/open-axiom-build/../open-axiom/src/lisp
top_srcdir = ../../../open-axiom
abs_top_srcdir = /projects/77750c71-ec7b-4962-bf55-a49ff5065fb6/open-axiom-build/../open-axiom
top_confdir = $(top_srcdir)/config

# Notice that there is a bug in Autoconf 2.59 whereby the variable
# top_builddir is not defined.  So avoid to use it directly.  Use
# abs_top_builddir.
builddir = .
abs_builddir = /projects/77750c71-ec7b-4962-bf55-a49ff5065fb6/open-axiom-build/src/lisp
top_builddir = ../..
abs_top_builddir = /projects/77750c71-ec7b-4962-bf55-a49ff5065fb6/open-axiom-build
datadir = ${datarootdir}

PACKAGE_VERSION = 1.5.0-2016-01-24

AR = ar
CC = gcc
CXX = g++
LD = /usr/bin/ld -m elf_x86_64
CPPFLAGS =  -m64 -D_GNU_SOURCE
CFLAGS = -g -O2 -O2 -Wall
CXXFLAGS = -std=c++11 -g -O2 -O2 -Wall
LDFLAGS =  -m64
OBJEXT = o
EXEEXT = 
# this includes leading period
SHREXT = .so
# extension of the archive library; this does not include period
LIBEXT = a

PACKAGE_STRING = OpenAxiom 1.5.0-2016-01-24

LIBTOOL_DEPS = ../open-axiom/config/ltmain.sh
LIBTOOL = $(top_builddir)/libtool

## Command used to compile a C++ program 
COMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) -c $(CPPFLAGS) $(CXXFLAGS)

## Sadly, at the moment, the C parts of the OpenAxiom system is not
## well structured enough to allow for clean dynamic libraries
## and dynamic linking.  So, we build static programs.
## This situation is to be fixed when I have time.
LINK = $(LIBTOOL) --tag=CXX --mode=link $(CXX) -static $(LDFLAGS)

## Libtool is a disaster for building DLLs on Cygwin, and insists
## on adding silly extensions where it should not on MinGW, so we have
## to be very selective about when and where to use.  Sadly, that ends
## up negating the whole point of having Libtool in the first place.
ifeq (no,no)
LINK_SHRLIB = $(CC) $(LDFLAGS)
CXXLINK_SHRLIB = $(CXX) $(LDFLAGS)
else
LINK_SHRLIB = $(LIBTOOL) --tag=CC --mode=link $(CC) $(LDFLAGS)
CXXLINK_SHRLIB = $(LIBTOOL) --tag=CXX --mode=link $(CC) $(LDFLAGS)
endif


oa_shrobj_flags = -prefer-pic
oa_shrlib_flags = -shared

AWK = gawk
INSTALL = /usr/bin/install -c
install_sh = ${SHELL} /projects/77750c71-ec7b-4962-bf55-a49ff5065fb6/open-axiom/config/install-sh
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_script = $(install_sh) -c
INSTALL_DATA = ${INSTALL} -m 644
INSTALL_PROGRAM = ${INSTALL}
INSTALL_SCRIPT = ${INSTALL}
## FIXME:  The test done with Autoconf-2.60 and later concludes
##         that "ln -s" is unusable on msys, and therefore defaults to
##         "cp -p", but that default is unusable for us.  For our
##         purpose "ln -s" is just fine on that platform.  Consequently
##         we are explicitly overrding that value here.
LN_S = ln -s
mkinstalldirs = $(top_srcdir)/config/mkinstalldirs
RANLIB = ranlib
TOUCH = touch

# The list of make targets made recursively, by walking sub-directories
# Normally, this is a template generated by Automake, but we don't
# use Automake yet; so, we must do it the hard way.  
# See the corresponding rules in setup-dep.mk
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
		html-recursive info-recursive install-data-recursive \
		install-exec-recursive install-info-recursive \
		install-recursive installcheck-recursive \
		installdirs-recursive pdf-recursive ps-recursive \
		uninstall-info-recursive uninstall-recursive


## Normally, Automake will substitute the value for this variable.
## But, we don't have Automake yet.  So we punt on it.
mkdir_p = mkdir -p

STAMP = echo timestamp >

## -------------------------
## -- OpenAxiom variables --
## -------------------------

quiet_flags = --noinform --noprint
eval_flags = --no-sysinit --no-userinit --disable-debugger --eval
oa_standard_linking = no


## Absolute path to the toplevel source directory for OpenAxiom.  This is
## almost like Autoconf-standard abs_top_srcdir except that, it retains 
## the same syntactic values in subdirectories.

## Where The OpenAxiom distribution main source files are kept.
## Notice, this is the src/ directory within the toplevel source
## directory 

oa_src_srcdir = $(top_srcdir)/src
oa_src_docdir = $(oa_src_srcdir)/doc
oa_src_datadir = $(oa_src_srcdir)/share
oa_src_algdir = $(oa_src_srcdir)/algebra
oa_src_texdir = $(oa_src_datadir)/tex

oa_configdir = $(top_builddir)/config
oa_c_macros = $(oa_configdir)/axiom-c-macros.h

LATEX = 

## Staging directory for the target DESTDIR
oa_targetdir = $(top_builddir)/$(target)
oa_target_bindir = $(oa_targetdir)/bin
oa_target_libdir = $(oa_targetdir)/lib
oa_target_srcdir = $(oa_targetdir)/src
oa_target_docdir = $(oa_targetdir)/doc
oa_target_datadir = $(oa_targetdir)/share
oa_target_texdir = $(oa_target_datadir)/texmf/tex
oa_target_includedir = $(oa_targetdir)/include


## The final directory where OpenAxiom is installed.  This is usually
## the directory deduced or specified at configuration time.
open_axiom_installdir = ${exec_prefix}/lib/open-axiom/x86_64-unknown-linux-gnu/1.5.0-2016-01-24

INC=$(top_srcdir)/src/include
oa_c_runtime_extra = -lutil   -lm
oa_c_libs = -lopen-axiom-core $(oa_c_runtime_extra) -lm

oa_yesno_to_lisp_boolean = $(subst yes,t,$(subst no,nil,$(1)))

oa_enable_profiling = no
oa_enable_lisp_profiling = \
	$(call oa_yesno_to_lisp_boolean,$(oa_enable_profiling))

oa_enable_threads = no

oa_use_x = yes
AXIOM_X11_CFLAGS =  
AXIOM_X11_LDFLAGS =  -lXpm  -lSM -lICE -lX11 

oa_includes = -I$(oa_src_srcdir)/include -I$(oa_configdir)

## Where the staging build directory is found
AXIOM = $(top_builddir)/$(target)

## Where to find OpenAxiom data bases.
DAASE = $(oa_src_datadir)

## -------------------------------------------
## -- Files generated for the build machine --
## -------------------------------------------
oa_hammer = $(top_builddir)/src/utils/hammer$(EXEEXT)

OA_LISP = sbcl
# Extension of the output file name returned by compile-file
FASLEXT = fasl

# Extension of compiled FASLs appropriate for linking into executable
# programs.  For most Lisp systems, it is the same as FASLEXT because
# they build programs by dumping images.
ifeq (sbcl,ecl)
LNKEXT = $(OBJEXT)
else
LNKEXT = $(FASLEXT)
endif


# Qt utilities
OA_QT_MOC = moc
OA_QT_QMAKE = qmake

## Clear suffix-based implicit rule table.
.SUFFIXES:
# Copyright (C) 2007-2014, Gabriel Dos Reis.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
#     - Redistributions of source code must retain the above copyright
#       notice, this list of conditions and the following disclaimer.
#
#     - Redistributions in binary form must reproduce the above copyright
#       notice, this list of conditions and the following disclaimer in
#       the documentation and/or other materials provided with the
#       distribution.
#
#     - Neither the name of The Numerical Algorithms Group Ltd. nor the
#       names of its contributors may be used to endorse or promote products
#       derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


OUT = $(oa_target_bindir)
oa_target_lispdir = $(oa_targetdir)/lisp

subdir = src/lisp/

build_libdir = ./$(top_builddir)/src/lib

## Ideally, we would like to use Libtool for producing, and linking with,
## object files from C codes.  That means any C source code
## explicitly included in OpenAxiom, or produced internally by a Lisp
## compiler.  However, the SYSTEM calls by GCL on Windows is very tricky
## to convince to properly resolve path names to executables.
## Consequently we temporarily give up here, e.g., we don't
## instruct GCL to use Libtool on Windows.
GCL_LTCC = $(if $(findstring mingw, $(target)),"","$(LIBTOOL) --tag=CC --mode=compile ")
GCL_LTLD = $(if $(findstring mingw, $(target)),"$(CXX) $(LDFLAGS) ","$(LINK) ")

## Again, ideally, we would like GCL to link with the compiled Lisp
## code from core.lisp.  However, the general interface compiler::link
## that GCL provides for that task is unsupported on Windows platforms.
## So, we instruct GCL so load the source file instead.
fasl_ext = $(if $(findstring mingw, $(target)),.lisp,.$(FASLEXT))
FASLS = $(patsubst %,"%", $(addsuffix $(fasl_ext),core))


ifeq (sbcl,ecl)
base_lisp_objects = ("core.$(LNKEXT)")
oa_base_lisp_linkset = $(oa_target_lispdir)/linkset
else
base_lisp_objects = nil
oa_base_lisp_linkset =
endif


.PHONY: all all-lisp
all: all-ax all-lisp

all-ax all-lisp: stamp

stamp: $(OUT)/lisp$(EXEEXT)
	@rm -f stamp
	$(STAMP) $@

$(oa_target_lispdir)/core.$(LNKEXT): core.$(LNKEXT)
	$(mkdir_p) $(oa_target_lispdir)/
	cp $< $@


## Create a fresh image for building interpsys and AXIOMsys
## These objects files are the C runtime support
## and must be compiled into the Lisp image,
## as they must be present in the final interpreter
## and image.
lisp_c_objects = \
		$(build_libdir)/bsdsignal.$(OBJEXT) \
		$(build_libdir)/cfuns-c.$(OBJEXT) \
		$(build_libdir)/sockio-c.$(OBJEXT)

## The splitting shenaningan below about GCL's COMPILER::*LD* is because
## GCL does not -- currently -- separate the linker proper from arguments,
## therefore forcing us to use brittle tricks to guess what the linker is.

$(OUT)/lisp$(EXEEXT): base-lisp$(EXEEXT)
ifeq (sbcl,gcl)
	echo '(let* ((sys-cc compiler::*cc*) ' \
	     '       (sys-ld compiler::*ld*) ' \
	     '      (compiler::*cc* (concatenate (quote string) ' \
	     '                                   $(GCL_LTCC)    ' \
	     '                                   sys-cc))       ' \
	     '      (compiler::*ld*                             ' \
	     '         (concatenate (quote string)              ' \
	     '            $(GCL_LTLD)                           ' \
	     '            (subseq sys-ld                        ' \
	     '            (position (character " ") sys-ld))))) ' \
             '(compiler::link (quote ($(FASLS))) "lisp$(EXEEXT)" ' \
             ' (format nil "(progn (let ((*load-path* (cons ~S *load-path*))'\
                                        ' (si::*load-types* ~S)))' \
                                  ' (when (fboundp (quote si::sgc-on))' \
                                        ' (si::sgc-on nil))' \
				  ' (setq si::*top-level-hook* (read-from-string \"|AxiomCore|::|topLevel|\")))"' \
                      ' si::*system-directory* (quote (list ".lsp")))' \
               '  "$(lisp_c_objects) $(oa_c_runtime_extra)"))' \
            | ./base-lisp$(EXEEXT)
	$(mkdir_p) $(OUT)
	cp -p lisp$(EXEEXT) $(OUT)
else
	$(mkdir_p) $(OUT)
	cp -p $< $@ && cp -p $< lisp$(EXEEXT)
endif

base-lisp$(EXEEXT): core.$(FASLEXT)  $(oa_base_lisp_linkset)
	$(OA_LISP) \
		$(eval_flags) '(load "core")' \
		$(eval_flags) '(|AxiomCore|::|link| "$@" (quote $(base_lisp_objects)) "|AxiomCore|::|topLevel|")'

$(oa_target_lispdir)/linkset: $(oa_target_lispdir)/core.$(LNKEXT)
	rm -f $@
	echo '$(base_lisp_objects)' > $@

oa_optimize_options = speed
oa_delay_ffi = yes
oa_use_llvm = yes

oa_editor = /usr/bin/vi

void_type = void
char_type = char
int_type = int
float_type = float
double_type = double
string_type = c-string

oa_comma =,

oa_keep_files = $(patsubst %,|%|,$(subst $(oa_comma), ,))

edit = sed \
	-e 's|@open_axiom_installdir[@]|$(open_axiom_installdir)|g' \
	-e 's|@oa_optimize_options[@]|$(oa_optimize_options)|g' \
	-e 's|@CXX[@]|$(CXX)|g' \
	-e 's|@LDFLAGS[@]|$(LDFLAGS)|g' \
	-e 's|@oa_editor[@]|$(oa_editor)|g' \
	-e 's/@oa_keep_files[@]/$(oa_keep_files)/g' \
	-e 's|@host[@]|$(host)|g' \
	-e 's|@build[@]|$(build)|g' \
	-e 's|@target[@]|$(target)|g' \
	-e 's|@SHREXT[@]|$(SHREXT)|g' \
	-e 's|@LIBEXT[@]|$(LIBEXT)|g' \
	-e 's|@oa_c_runtime_extra[@]|$(patsubst %,"%",$(oa_c_runtime_extra))|g' \
	-e 's|@oa_standard_linking[@]|$(oa_standard_linking)|g' \
	-e 's|@oa_enable_profiling[@]|$(oa_enable_lisp_profiling)|g' \
	-e 's|@oa_delay_ffi[@]|$(oa_delay_ffi)|g' \
	-e 's|@oa_use_llvm[@]|$(oa_use_llvm)|g' \
	-e 's|@void_type[@]|$(void_type)|g' \
	-e 's|@char_type[@]|$(char_type)|g' \
	-e 's|@int_type[@]|$(int_type)|g' \
	-e 's|@float_type[@]|$(float_type)|g' \
	-e 's|@double_type[@]|$(double_type)|g' \
	-e 's|@string_type[@]|$(string_type)|g'

core.lisp: $(srcdir)/core.lisp.in
	@echo "oa_enable_lisp_profiling= ${oa_enable_lisp_profiling}"
	$(edit) $< > [email protected]
	$(top_srcdir)/config/move-if-change [email protected] $@

core.$(FASLEXT): core.lisp
ifeq (sbcl,ecl)
	$(OA_LISP) $(quiet_flags) \
		$(eval_flags) '(require (quote cmp))' \
		$(eval_flags) '(compile-file "$<" :system-p t)' \
		$(eval_flags) '(c::build-fasl "$@" :lisp-files (quote ("core.$(LNKEXT)")))' \
		$(eval_flags) '(quit)'
else
	$(OA_LISP) $(quiet_flags) \
		$(eval_flags) '(progn (compile-file "$<") (quit))'
endif


mostlyclean-local:
	rm -f core.$(FASLEXT) core.$(OBJEXT) core.lisp 
	@if test -n "$(oa_base_lisp_linkset)"; then \
		rm -f $(oa_base_lisp_linkset); fi
	@rm -f $(OUT)/lisp$(EXEEXT) lisp$(EXEEXT) base-lisp$(EXEEXT)
	rm -rf $(oa_target_lispdir)
	@rm -f stamp

clean-local: mostlyclean

distclean-local: clean-local
	@rm -f Makefile
## ---------------------------------------
## -- Standard boilerplate dependencies --
## ---------------------------------------

# Recursive rules, usually automatically generated by Automake.
# Since we do not use (yet) Automake, we mimic the behaviour as
# close as possible.
# Recursive wall of sub-directories is based on the variable
# SUBDIRS.  That variable usually contains the of sub-directories
# to be made in depth-first postfix.  However, that order can
# be changed to depth-first prefix by explicitly including "."
# in SUBDIRS.  Rules ending with '-ax' are those specific to the
# the current directory.  Notice that the '-ax' rules are similar 
# to Automake generated '-am'.
.PHONY: $(RECURSIVE_TARGETS)
$(RECURSIVE_TARGETS):
	failcmd='exit 1'; \
	for f in $$MAKEFLAGS; do \
	   case $$f in \
	      *=* | --[!k]*) ;; \
	      *k*) failcmd='fail=yes';; \
	   esac; \
	done; \
	dot_seen=no; \
	target=`echo $@ | sed s/-recursive//`; list='$(SUBDIRS)'; \
	for subdir in $$list; do \
	   echo "Making $$target in $$subdir"; \
	   if test "$$subdir" = "."; then \
	      dot_seen=yes; \
	      local_target="$$target-ax"; \
	   else \
	      local_target="$$target"; \
	   fi; \
	   (cd $$subdir && $(MAKE) $$local_target) || eval $$failcmd; \
	done; \
	if test "$$dot_seen" = "no"; then \
	   $(MAKE) "$$target-ax" || exit 1; \
	fi; test -z "$$fail"

# Recursive cleanup is done in reverse, postfix order of ordinary build.
.PHONY: mostlyclean-recursive
.PHONY: clean-recursive
.PHONY: distclean-recursive
.PHONY: maintainer-clean-recursive
mostlyclean-recursive clean-recursive distclean-recursive \
maintainer-clean-recursive:
	@failcmd='exit 1'; \
	for f in $$MAKEFLAGS; do \
	   case $$f in \
	      *=* | --[!k]*) ;; \
	      *k*) failcmd='fail=yes';; \
	   esac; \
	done; \
	dot_seen=no; \
	case "$@" in \
	   distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
	   *) list='$(SUBDIRS)' ;; \
	esac; \
	rev=''; \
	for subdir in $$list; do \
	   if test "$$subdir" != "."; then \
	      rev="$$subdir $$rev"; \
	   fi; \
	done; \
	rev="$$rev ."; \
	target=`echo $@ | sed s/-recursive//`; \
	for subdir in $$rev; do \
	   echo "Making $$target in $$subdir"; \
	   if test "$$subdir" = "."; then \
	      local_target="$$target-ax"; \
	   else \
	      local_target="$$target"; \
	   fi; \
	   (cd $$subdir && $(MAKE) $$local_target) || eval $$failcmd; \
	done && test -z "$$fail"

## Rules to make DVI files from pamphlets

.PRECIOUS: %.tex
.PRECIOUS: %.dvi

DVI_FILES = $(addprefix $(oa_target_docdir)/$(subdir), \
		$(pamphlets:.pamphlet=.dvi))

pamphlets_SOURCES = $(addprefix $(srcdir)/, $(pamphlets))

.PHONY: dvi dvi-ax
dvi: dvi-recursive
dvi-ax: $(oa_build_texdir)/axiom.sty $(DVI_FILES)

$(oa_target_docdir)/$(subdir)%.dvi: $(builddir)/%.dvi
	$(mkinstalldirs) $(oa_target_docdir)/$(subdir)
	$(INSTALL_DATA) $< $@

%.dvi: %.tex $(oa_build_texdir)/axiom.sty
	TEXINPUTS=".:$(oa_build_texdir):$${TEXINPUTS}"; \
	export TEXINPUTS; \
	BIBINPUTS=".:$(oa_build_texdir):$${TEXINPUTS}"; \
	export BIBINPUTS; \
	$(oa_hammer) --latex $<

%.tex: $(srcdir)/%.pamphlet
	$(oa_hammer) --weave --output=$@ $<


.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_srcdir)/config/var-def.mk \
	  $(top_srcdir)/config/setup-dep.mk \
	  $(abs_top_builddir)/config.status
	cd $(abs_top_builddir) && $(SHELL) ./config.status $(subdir)$@

$(top_builddir)/src/lisp/core.lisp: \
	$(top_srcdir)/src/lisp/core.lisp.in \
	$(top_builddir)/config.status
	cd $(top_builddir) && \
	$(SHELL) ./config.status src/lisp/core.lisp

## Cleanup.
##   Each Makefile is responsible of defining targets named
##   mostlyclean-local, clean-local, and distclean-local.
.PHONY: mostlyclean-generic mostlyclean-local mostlyclean mostlyclean-ax
mostlyclean-generic:
	@-rm -f *~
	@-rm -f *.log *.aux *.toc

mostlyclean: mostlyclean-recursive
mostlyclean-ax: mostlyclean-generic mostlyclean-local

.PHONY: clean-generic clean-local clean clean-ax
clean-generic: mostlyclean-generic
	@-rm -f *.tex *.dvi

clean: clean-recursive
clean-ax: clean-generic clean-local

.PHONY: distclean-generic distclean-local distclean distclean-ax
distclean-generic: clean-generic
	@-rm -rf $(oa_target_docdir)/$(subdir)

distclean: distclean-recursive
distclean-ax: distclean-generic distclean-local