# Makefile written by Jerry James <loganjerry@gmail.com>
# and released into the public domain.

version = @version@
major = @major@
minor = @minor@

INCLUDES = -Ilib-src -Ilib-src-reg -Iwrap-gmp-gmpxx -I/usr/include/cddlib
CPPFLAGS = $(INCLUDES) -DPACKAGE=\"TOPCOM\" -DVERSION=\"$(version)\" \
 -DVERBOSE -DSTL_SYMMETRIES -DSTL_CONTAINERS -DSTL_FLIPS -DSTL_CHIROTOPE \
 -DGMPRATIONAL -DPERMLIB_DOMAIN_INT -DUSE_LEXORDER -DHAVE_LIBQSOPTEX \
 -DHAVE_LIBSOPLEX -ftemplate-depth=100
CFLAGS = $(CPPFLAGS) @RPM_OPT_FLAGS@
LIB_LDFLAGS = @RPM_LD_FLAGS@ -lsoplex -lclusol -lqsopt_ex -lcddgmp -ltbb -lmpfr -lgmpxx -lgmp -lz-ng
LDFLAGS = @RPM_LD_FLAGS@ -L. -lTOPCOM -lsoplex -lclusol -lqsopt_ex -lcddgmp -ltbb -lmpfr -lgmpxx -lgmp -lz-ng
SHFLAGS = -shared -Wl,-h,libTOPCOM.so.$(major)
bindir = @bindir@
libdir = @libdir@
includedir = @includedir@/TOPCOM

library_sources = \
	lib-src-reg/LPinterface.cc \
	lib-src-reg/QSOinterface.cc \
	lib-src-reg/RegularityCheck.cc \
	lib-src-reg/SPXinterface.cc \
	lib-src/Admissibles.cc \
	lib-src/CheckTriang.cc \
	lib-src/Circuits.cc \
	lib-src/ClassifiedExtensionSymmetries.cc \
	lib-src/ClassifiedSubsetSymmetries.cc \
	lib-src/Cocircuits.cc \
	lib-src/CommandlineOptions.cc \
	lib-src/CompressedIntegerSet.cc \
	lib-src/ComputeCircuits.cc \
	lib-src/ComputeCocircuits.cc \
	lib-src/ComputeTriangs.cc \
	lib-src/ContainerIO.cc \
	lib-src/Facets.cc \
	lib-src/FastSimplicialComplex.cc \
	lib-src/Field.cc \
	lib-src/FineTriang.cc \
	lib-src/Flip.cc \
	lib-src/Graphics.cc \
	lib-src/Incidences.cc \
	lib-src/IndexTableArray.cc \
	lib-src/IntegerSet.cc \
	lib-src/IntegerSet64.cc \
	lib-src/InteriorFacets.cc \
	lib-src/MarkedFlips.cc \
	lib-src/Matrix.cc \
	lib-src/Permutation.cc \
	lib-src/PermutationPartialComparator.cc \
	lib-src/PlacingTriang.cc \
	lib-src/PointConfiguration.cc \
	lib-src/RealChiro.cc \
	lib-src/SimplicialComplex.cc \
	lib-src/SimplicialComplexTemplate.cc \
	lib-src/SparseIntegerSet.cc \
	lib-src/SparseSimplicialComplex.cc \
	lib-src/StairCaseMatrix.cc \
	lib-src/Statistics.cc \
	lib-src/StrictStairCaseMatrix.cc \
	lib-src/StrictStairCaseMatrixTrans.cc \
	lib-src/SwitchTable.cc \
	lib-src/SymmetricExtensionGraph.cc \
	lib-src/SymmetricExtensionGraphMaster.cc \
	lib-src/SymmetricExtensionGraphNode.cc \
	lib-src/SymmetricFlipGraph.cc \
	lib-src/Symmetry.cc \
	lib-src/TriangFlips.cc \
	lib-src/TriangNode.cc \
	lib-src/Vector.cc \
	lib-src/VertexFacetTable.cc \
	lib-src/VertexFacetTableArray.cc \
	lib-src/Vertices.cc \
	lib-src/VirtualChiro.cc \
	lib-src/Volumes.cc
library_objs = $(library_sources:%.cc=%.o)

bin_sources = \
	src-reg/checkregularity.cc \
	src/B_A.cc \
	src/B_A_center.cc \
	src/B_D.cc \
	src/B_D_center.cc \
	src/B_S.cc \
	src/B_S_center.cc \
	src/binomial.cc \
	src/check.cc \
	src/chiro2allfinetriangs.cc \
	src/chiro2alltriangs.cc \
	src/chiro2circuits.cc \
	src/chiro2cocircuits.cc \
	src/chiro2dual.cc \
	src/chiro2finetriang.cc \
	src/chiro2finetriangs.cc \
	src/chiro2mintriang.cc \
	src/chiro2nallfinetriangs.cc \
	src/chiro2nalltriangs.cc \
	src/chiro2ncircuits.cc \
	src/chiro2ncocircuits.cc \
	src/chiro2nfinetriangs.cc \
	src/chiro2ntriangs.cc \
	src/chiro2placingtriang.cc \
	src/chiro2triangs.cc \
	src/cocircuits2facets.cc \
	src/cross.cc \
	src/cube.cc \
	src/cyclic.cc \
	src/Dnxk.cc \
	src/hypersimplex.cc \
	src/kDn.cc \
	src/lattice.cc \
	src/permutahedron.cc \
	src/points2allfinetriangs.cc \
	src/points2alltriangs.cc \
	src/points2chiro.cc \
	src/points2circuits.cc \
	src/points2cocircuits.cc \
	src/points2facets.cc \
	src/points2finetriang.cc \
	src/points2finetriangs.cc \
	src/points2flips.cc \
	src/points2gale.cc \
	src/points2mintriang.cc \
	src/points2nallfinetriangs.cc \
	src/points2nalltriangs.cc \
	src/points2ncircuits.cc \
	src/points2ncocircuits.cc \
	src/points2nfinetriangs.cc \
	src/points2nflips.cc \
	src/points2ntriangs.cc \
	src/points2placingtriang.cc \
	src/points2prettyprint.cc \
	src/points2symmetries.cc \
	src/points2triangs.cc \
	src/points2vertices.cc \
	src/points2volume.cc \
	src/santos_22_triang.cc \
	src/santos_dim4_triang.cc \
	src/santos_triang.cc
bin_exes = $(bin_sources:%.cc=%)

all: $(bin_exes)

libTOPCOM.so.$(major).$(minor): $(library_objs)
	$(CXX) $(CFLAGS) $(SHFLAGS) -o $@ $^ $(LIB_LDFLAGS)
	ln -s libTOPCOM.so.$(major).$(minor) libTOPCOM.so.$(major)
	ln -s libTOPCOM.so.$(major) libTOPCOM.so

lib-src-reg/%.o: lib-src-reg/%.cc
	$(CXX) $(CFLAGS) -fPIC -c -o $@ $^

lib-src/%.o: lib-src/%.cc
	$(CXX) $(CFLAGS) -fPIC -c -o $@ $^

src-reg/%: src-reg/%.cc libTOPCOM.so.$(major).$(minor)
	$(CXX) $(CFLAGS) -o $@ $< $(LDFLAGS)

src/%: src/%.cc libTOPCOM.so.$(major).$(minor)
	$(CXX) $(CFLAGS) -o $@ $< $(LDFLAGS)

install: $(bin_exes)
	install -d $(DESTDIR)$(libdir) $(DESTDIR)$(bindir) $(DESTDIR)$(includedir)
	install -p -m 0755 libTOPCOM.so.$(major).$(minor) $(DESTDIR)$(libdir)
	ln -s libTOPCOM.so.$(major).$(minor) $(DESTDIR)$(libdir)/libTOPCOM.so.$(major)
	ln -s libTOPCOM.so.$(major) $(DESTDIR)$(libdir)/libTOPCOM.so
	install -p -m 0755 $(bin_exes) $(DESTDIR)$(bindir)
	install -p -m 0644 wrap-gmp-gmpxx/*.h $(DESTDIR)$(includedir)
	install -p -m 0644 lib-src-reg/*.hh $(DESTDIR)$(includedir)
	install -p -m 0644 lib-src/*.hh $(DESTDIR)$(includedir)
