# @configure_input@
ARCH = unix
POLL = poll
ASYGLVERSION = @ASYGLVERSION@
GCVERSION = @GCVERSION@
GC = gc-$(GCVERSION)
LIBATOMIC = libatomic_ops-@ATOMICVERSION@
GCOPTIONS = @GCOPTIONS@
GCLIB = @GCLIB@
GCPPLIB = @GCPPLIB@
GCLIBS = $(GCPPLIB) $(GCLIB)
LFLAGS = @LDFLAGS@ -LLspCpp -LLspCpp/third_party/uri/src
LIBS = $(LFLAGS) @PTHREAD_LIBS@ @GLEW@ @LIBS@ $(GCLIBS) @LSPLIBS@
DOSLIBS = $(subst -lncurses, -ltermcap, $(LIBS)) -lwolfssl -lgdi32 -lwinmm -s -static
CMAKE ?= cmake
PERL ?= perl
PYTHON ?= python3
BISON ?= bison
PYRCC ?= pyrcc5
PYUIC ?= pyuic5
# Libraries needed to make asymptote.so.
# We have to remove OpenGL, threading, GC, etc from this.
SHAREDLIBS = $(filter-out -lglut -GL -pthread $(GCLIBS), $(LIBS))
vpath %.cc prc
vpath %.ui GUI/windows
vpath %.py GUI/pyUIClass
CAMP = camperror path drawpath drawlabel picture psfile texfile util settings \
guide flatguide knot drawfill path3 drawpath3 drawsurface \
beziercurve bezierpatch pen pipestream
RUNTIME_FILES = runtime runbacktrace runpicture runlabel runhistory runarray \
runfile runsystem runpair runtriple runpath runpath3d runstring \
runmath
# Files to be scanned for pre-translated symbols defined by SYM(name).
SYMBOL_FILES = types builtin gsl $(RUNTIME_FILES)
PRC = PRCbitStream oPRCFile PRCdouble writePRC
COREFILES = $(CAMP) $(SYMBOL_FILES) env genv stm dec errormsg \
callable name symbol entry exp newexp stack camp.tab lex.yy \
access virtualfieldaccess absyn record interact fileio \
fftw++asy simpson coder coenv impdatum \
@getopt@ locate parser program application varinit fundec refaccess \
envcompleter process constructor array Delaunay predicates \
$(PRC) glrender tr shaders jsfile v3dfile tinyexr EXRFiles GLTextures \
lspserv symbolmaps
FILES = $(COREFILES) main
SYMBOLSH = opsymbols.h allsymbols.h $(SYMBOL_FILES:=.symbols.h)
UIFILES = $(wildcard GUI/windows/*.ui)
PYFILES = $(wildcard GUI/pyUIClass/*.py) GUI/icons_rc.py
GENERATEDENUMS=v3dtypes v3dheadertypes
ASYGENERATEDENUMS=$(addprefix base/,$(GENERATEDENUMS:=.asy))
PYGENERATEDENUMS=$(GENERATEDENUMS:=.py)
DIST = camp.tab.h camp.tab.cc lex.yy.cc runtime.cc keywords.cc \
asy-keywords.el $(RUNTIME_FILES:=.cc) $(RUNTIME_FILES:=.h) asy.list \
$(SYMBOLSH) $(PYFILES) $(GENERATEDENUMS:=.h) $(ASYGENERATEDENUMS)
NAME = asy
XNAME = x$(NAME)
CLEAN = camp.output base/version.asy doc/version.texi \
GUI/xasyVersion.py GUI/icons_rc.py $(XNAME) doc/asy-latex.pdf \
$(SYMBOLSH)
EXTRA = asy-mode.el asy-init.el asy.vim asy_filetype.vim asy-kate.sh \
asymptote.py reload.js nopapersize.ps
EXEXTRA = piicon.png 100d.pdb1 *.views *.dat *.bib
DOCEXTRA = *.asy *.csv *.dat latexusage.tex externalprc.tex pixel.pdf
KEYWORDS = base $(ASYMPTOTE_SITEDIR)
LATEXFILES = asymptote.sty asycolors.sty latexmkrc
CONTEXTFILES = colo-asy.tex
ASY = ./asy -dir base -config "" -render=0
DEFS = @DEFS@ @OPTIONS@ @PTHREAD_CFLAGS@ -DFFTWPP_SINGLE_THREAD -Wall
CFLAGS = @CFLAGS@
OPTS = $(DEFS) @CPPFLAGS@ @CXXFLAGS@ $(CFLAGS) -ILspCpp/include
GLEWOPTS = $(DEFS) @CPPFLAGS@ $(CFLAGS) -DGLEW_NO_GLU -DGLEW_BUILD -O1 -fPIC
# Options for compiling the object files for the shared library.
# gc has to be configured with the option --disable-threads in order to make a
# shared library that doesn't seg fault. For now, just disable gc in the
# shared library.
SHAREDOPTS = $(filter-out -DUSEGC, $(OPTS)) -fPIC -DFOR_SHARED
CXX = @CXX@
CC = @CC@
MAKEDEPEND = $(OPTS) -O0 -M -MG -DDEPEND
LEX = @LEX@
prefix = @prefix@
exec_prefix = @exec_prefix@
datarootdir = @datarootdir@
bindir = $(DESTDIR)@bindir@
mandir = $(DESTDIR)@mandir@
infodir = $(DESTDIR)@infodir@
datadir = $(DESTDIR)@datadir@
asydir = $(datadir)/asymptote
GUIdir = $(asydir)/GUI
shaderdir = $(asydir)/shaders
webgldir = $(asydir)/webgl
docdir = $(DESTDIR)@docdir@
exampledir = $(docdir)/examples
animationsdir = $(exampledir)/animations
latexdir = $(DESTDIR)@latexdir@
contextdir = $(DESTDIR)@contextdir@
INSTALL = @INSTALL@
REVISION = "const char *REVISION="
last = $(shell head -1 revision.cc | sed -e 's/.*\"\(.*\)\";/\1/')
usinggit = $(shell if test -d ".git"; then echo yes; fi)
ifeq ($(usinggit),yes)
revision = $(shell LC_ALL="C" git describe --long | \
sed -e 's/git-\([0-9]*\)-g.*/-\1/' | sed -e 's/-0-g.*//')
else
revision = @VERSION@
endif
export prefix docdir exampledir mandir infodir INSTALL MAKE DESTDIR TEXI2DVI
asy: version glew.o @LSPLIB@
if test -n "$(MSDOS)"; then \
$(CXX) $(OPTS) -o $(NAME) $(FILES:=.o) revision.o asy.o $(DOSLIBS); \
else \
ln -sf GUI/xasy.py $(XNAME); \
$(CXX) $(OPTS) -o $(NAME) $(FILES:=.o) revision.o $(LIBS); \
fi
version: $(GCLIB) $(FILES:=.o) $(notdir $(UIFILES:.ui=.py)) GUI/icons_rc.py $(ASYGENERATEDENUMS) $(PYGENERATEDENUMS)
if test ! -s revision.cc || test "$(revision)" != "$(last)"; then \
echo $(REVISION)\"$(revision)\"\; > revision.cc; \
echo const char *AsyGLVersion=\"$(ASYGLVERSION)\"\; >> revision.cc; \
if test ! -e base/webgl/asygl.js; then \
cp base/webgl/asygl-$(ASYGLVERSION).js base/webgl/asygl.js; \
fi \
fi
$(CXX) $(OPTS) -o revision.o -c revision.cc;
echo string VERSION=\"$(revision)\"\; > base/version.asy
echo @set VERSION $(revision) > doc/version.texi
echo @set Datadir @datadir@ >> doc/version.texi
echo @set Docdir @docdir@ >> doc/version.texi
echo "#!/usr/bin/env python3" > GUI/xasyVersion.py
echo xasyVersion = \"$(revision)\" >> GUI/xasyVersion.py
if test -n "$(MSDOS)"; then \
cat asy.rc | sed -e "s/ASYMPTOTE_VERSION/$(revision)/" | \
windres -o asy.o; \
fi
asymptote.so: $(COREFILES:=.pic.o) glew.o
$(CXX) $(OPTS) -shared -o asymptote.so revision.o $(COREFILES:=.pic.o) $(SHAREDLIBS)
liblspcpp.a:
cd LspCpp && $(CMAKE) -DCMAKE_CXX_FLAGS="-fPIE @OPTIONS@ -I../$(GC)/include" CMakeLists.txt && $(MAKE)
all: asy sty man faq asy-keywords.el
$(GCLIB): $(GC).tar.gz
gunzip -c $(GC).tar.gz > $(GC).tar
tar -xf $(GC).tar
rm -f $(GC).tar
if test -r $(LIBATOMIC).tar.gz; then \
gunzip -c $(LIBATOMIC).tar.gz > $(LIBATOMIC).tar; \
tar -xf $(LIBATOMIC).tar; \
rm -f $(LIBATOMIC).tar; \
mv $(LIBATOMIC) $(GC)/libatomic_ops; \
fi
if test "$(GC)" = "gc-7.0"; then \
cd $(GC)/include/private && \
patch < ../../../patches/gc-7.0nomem.patch; \
fi
if test "$(GC)" = "gc-7.2b"; then \
mv gc-7.2 gc-7.2b; \
fi
if test "$(GC)" = "gc-7.2c"; then \
mv gc-7.2 gc-7.2c; \
fi
if test "$(GC)" = "gc-7.2d"; then \
mv gc-7.2 gc-7.2d; \
fi
cd $(GC) && \
./configure CC="$(CC)" CXX="$(CXX)" $(GCOPTIONS); \
$(MAKE) check
$(GCPPLIB): $(GCLIB)
sty:
cd doc && $(MAKE) asy-latex.pdf
dvi: asy sty
cd doc && $(MAKE) dvi
html: asy sty
cd doc && $(MAKE) doc
man: asy sty
cd doc && $(MAKE) man
faq: asy sty
cd doc && $(MAKE) faq
$(RUNTIME_FILES:=.cc): %.cc: runtime.pl opsymbols.h runtimebase.in %.in
$(PERL) ./runtime.pl $(@:.cc=)
$(SYMBOL_FILES:=.symbols.h): %.symbols.h: findsym.pl %.cc
$(CXX) -E -DNOSYM $(OPTS) $(@:.symbols.h=.cc) | \
$(PERL) ./findsym.pl $@ -
$(SYMBOL_FILES:=.o): %.o: %.symbols.h
allsymbols.h: findsym.pl $(SYMBOL_FILES:=.cc)
$(CXX) -E -DNOSYM $(OPTS) $(SYMBOL_FILES:=.cc) | \
$(PERL) ./findsym.pl $@ -
symbol.o: $(SYMBOLSH)
GUI/icons_rc.py: GUI/res/icons.qrc
-$(PYRCC) GUI/res/icons.qrc -o GUI/icons_rc.py
camp.tab.cc: camp.y
$(BISON) -dvt -b camp camp.y && mv camp.tab.c camp.tab.cc
camp.tab.h: camp.tab.cc
lex.yy.cc: camp.l
$(LEX) -d -olex.yy.cc camp.l
lex.yy.d: $(GCLIB) lex.yy.cc camp.tab.h
keywords.cc: keywords.pl camp.l process.cc
$(PERL) ./keywords.pl
opsymbols.h: opsymbols.pl camp.l
$(PERL) ./opsymbols.pl
envcompleter.d: keywords.cc
asy-keywords.el: asy
@echo Creating $@;
$(ASY) -l > asy.list
ls $(addsuffix /*.asy,$(KEYWORDS)) | grep -v plain\* | \
grep -v three_\* | grep -v featpost3D | xargs $(ASY) -l >> asy.list
$(PERL) ./asy-list.pl asy.list $(revision)
install-notexhash: asy-keywords.el install-asy install-man
install: install-notexhash install-texhash
install-all: install install-html
install-texhash: install-asy
-if test -z "$(DESTDIR)"; then \
texhash; \
fi
install-asy: asy sty
${INSTALL} -d $(bindir) $(asydir) $(exampledir) $(animationsdir)
${INSTALL} -d $(GUIdir) $(GUIdir)/pyUIClass $(GUIdir)/configs \
$(GUIdir)/res $(GUIdir)/res/icons $(shaderdir) \
$(webgldir)
-${INSTALL} -d $(latexdir)
-${INSTALL} -d $(contextdir)
${INSTALL} -p -m 755 $(NAME) $(bindir)
${INSTALL} -p -m 644 base/*.asy $(addprefix base/,$(EXTRA)) \
asy-keywords.el $(asydir)
${INSTALL} -p -m 755 GUI/*.py $(GUIdir)
${INSTALL} -p -m 755 base/shaders/*.glsl $(shaderdir)
${INSTALL} -p -m 644 base/webgl/asygl.js \
$(webgldir)
-${INSTALL} -p -m 644 GUI/pyUIClass/*.py $(GUIdir)/pyUIClass
${INSTALL} -p -m 644 GUI/configs/*.cson $(GUIdir)/configs
${INSTALL} -p -m 644 GUI/res/icons.qrc $(GUIdir)/res
${INSTALL} -p -m 644 GUI/res/icons/*.svg $(GUIdir)/res/icons
ln -sf @datadir@/asymptote/GUI/xasy.py $(bindir)/$(XNAME)
${INSTALL} -p -m 644 examples/*.asy $(addprefix examples/,$(EXEXTRA)) \
doc/extra/*.asy $(addprefix doc/,$(DOCEXTRA)) $(exampledir)
${INSTALL} -p -m 644 examples/animations/*.asy \
examples/animations/inlinemovie.tex \
examples/animations/inlinemovie3.tex $(animationsdir)
-${INSTALL} -p -m 644 $(addprefix doc/,$(LATEXFILES)) $(latexdir)
-${INSTALL} -p -m 644 $(addprefix doc/,$(CONTEXTFILES)) $(contextdir)
install-html: html
cd doc && $(MAKE) install-all
install-man: man
cd doc && $(MAKE) install
install-prebuilt: install-asy
cd doc && $(MAKE) install-prebuilt
uninstall: uninstall-all
uninstall-all: uninstall-man uninstall-asy uninstall-docdir
uninstall-asy:
-cd $(animationsdir) && rm -f *.asy *.tex
-rmdir $(animationsdir)
-cd $(exampledir) && rm -f $(EXEXTRA) $(DOCEXTRA)
-rmdir $(exampledir)
-cd $(GUIdir) && rm -f *.py
-cd $(GUIdir)/pyUIClass && rm -f *.py
-rmdir $(GUIdir)/pyUIClass
-cd $(GUIdir)/configs && rm -f *.cson
-rmdir $(GUIdir)/configs
-cd $(GUIdir)/res/icons && rm -f *.svg
-rmdir $(GUIdir)/res/icons
-cd $(GUIdir)/res && rm -f icons.qrc
-rmdir $(GUIdir)/res
-rmdir $(GUIdir)
-cd $(shaderdir) && rm -f *.glsl
-rmdir $(shaderdir)
-cd $(webgldir) && rm -f *.html *.js
-rmdir $(webgldir)
-cd $(asydir) && rm -f asy-keywords.el *.asy $(EXTRA)
-rmdir $(asydir)
-cd $(latexdir) && rm -f $(LATEXFILES)
-rmdir $(latexdir)
-cd $(contextdir) && rm -f $(CONTEXTFILES)
-rmdir $(contextdir)
-cd $(bindir) && rm -f $(NAME) $(XNAME)
uninstall-man:
cd doc && $(MAKE) uninstall
uninstall-docdir:
-rmdir $(docdir)
clean: FORCE
-rm -f asy asymptote.so *.pic.o *.o *.d *mon.out $(CLEAN)
-cd LspCpp && $(MAKE) clean
gc-clean: FORCE clean
-if test -d $(GC); then \
$(MAKE) -C $(GC) clean; \
fi
cleaner: FORCE clean
-if test -d $(GC); then \
rm -rf $(GC); \
fi
-rm -f Makefile config.h config.log config.status errors.temp
cd doc && $(MAKE) clean
cd tests && $(MAKE) distclean
distclean: FORCE cleaner
cd doc && $(MAKE) distclean
cd LspCpp && rm -rf CMakeCache.txt CMakeDoxyfile.in \
CMakeDoxygenDefaults.cmake CMakeFiles Makefile cmake_install.cmake \
third_party/uri/src/CMakeFiles/network-uri.dir/detail
cleanest: FORCE maintainer-clean
maintainer-clean: FORCE distclean
-rm -f configure config.h.in $(DIST)
-rm -rf autom4te.cache
-rm -rf GUI/pyUIClass
test: asy FORCE
./wce
$(MAKE) -C tests
check: test
check-all: asy FORCE
./wce
$(MAKE) -C tests all
glew.o: glew.c GL/glew.h GL/glew.c config.h
$(CC) -I. $(GLEWOPTS) -o glew.o -c glew.c
.SUFFIXES: .c .cc .o .d .ui .py
%.o: %.cc $(GENERATEDENUMS:=.h)
$(CXX) $(OPTS) -o $@ -c $<
%.d: %.cc $(GENERATEDENUMS:=.h) $(GCLIB)
@echo Creating $@; \
rm -f $@; \
${CXX} $(MAKEDEPEND) $(MDOPTS) $< > $@.$$$$ 2>/dev/null && \
sed 's,\($*\)\.o[ :]*,\1.o \1.pic.o $@ : ,g' < $@.$$$$ > $@; \
rm -f $@.$$$$
%.d: %.c
@echo Creating $@; \
rm -f $@; \
${CC} $(MAKEDEPEND) $(MDOPTS) $< > $@.$$$$ 2>/dev/null && \
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
rm -f $@.$$$$
%.py: %.ui
mkdir -p GUI/pyUIClass
-$(PYUIC) -o GUI/pyUIClass/$(notdir $@) $<
# Compile for the shared library. OpenGL must be disabled as it causes
# crashes inside a shared library.
%.pic.o: %.cc
$(CXX) $(SHAREDOPTS) -o $@ -c $<
# Generate V3D headers
%.h: %.csv generate_enums.py $(GENERATEDENUMS:=.csv)
$(PYTHON) generate_enums.py -language cxx -o $@ -i $< -name $(notdir $*) -xopt namespace=camp
base/%.asy: %.csv generate_enums.py $(GENERATEDENUMS:=.csv)
$(PYTHON) generate_enums.py -language asy -o $@ -i $< -name $(notdir $*)
%.py: %.csv generate_enums.py $(GENERATEDENUMS:=.csv)
$(PYTHON) generate_enums.py -language python -o $@ -i $< -name $(notdir $*)
ifeq (,$(findstring clean,${MAKECMDGOALS}))
-include $(FILES:=.d)
endif
FORCE:
configure: configure.ac
autoheader && autoconf
Makefile: Makefile.in config.status
./config.status
config.status: configure
./config.status --recheck