SHELL = /bin/bash USE_RAMDISK ?= 0 APPPATH = /usr/bin LIBPATH = /usr/lib BINFOLDER = bin RUN_TESTS ?= 1 # can be queued from version 4.2 via MAKEFLAGS sice there is the number of jobs as well MAKE_PID := $(shell echo $$PPID) JOB_FLAG := $(filter -j%, $(subst -j ,-j,$(shell ps T | grep "^\s*$(MAKE_PID).*$(MAKE)"))) JOBS := $(subst -j,,$(JOB_FLAG)) ifndef JOBS JOBS := 1 endif SUBDIRS_LIBS = alib2std \ alib2common \ alib2data \ alib2data_experimental \ alib2str \ alib2str_experimental \ alib2raw \ alib2algo \ alib2algo_experimental \ alib2elgo \ alib2measurepp \ SUBDIRS_BINS = aecho2 \ aarbology2 \ acast2 \ aconversions2 \ aconvert2 \ acompaction2 \ aderivation2 \ adeterminize2 \ acompare2 \ aepsilon2 \ agenerate2 \ aintegral2 \ alangop2 \ ameasure2 \ ameasurep2 \ aminimize2 \ anormalize2 \ araw2 \ arand2 \ arename2 \ areverse2 \ arun2 \ astat2 \ aaccess2 \ astringology2 \ aquery2 \ atrim2 \ tniceprint \ define NEW_LINE endef export NEW_LINE ifneq (3.81, $(firstword $(sort $(MAKE_VERSION) 3.81))) $(error version $(MAKE_VERSION) is not supported. You need at least 3.82 is needed for make to work) endif TCLAP_EXISTS = $(shell $(CXX) -c -o /dev/null -xc++ - <<< $$'\#include <tclap/CmdLine.h>'; echo $$?) ifneq (0, $(TCLAP_EXISTS)) $(error You need tclap installed) endif CPPUNIT_EXISTS = $(shell $(CXX) -o /dev/null -lcppunit -xc++ - <<< $$'\#include <cppunit/Test.h>\nint main() {\nreturn 0;\n}'; echo $$?) ifneq (0, $(CPPUNIT_EXISTS)) $(error You need cppunit installed) endif LIBXML2_EXISTS = $(shell $(CXX) -o /dev/null -I/usr/include/libxml2/ -lxml2 -xc++ - <<< $$'\#include <libxml/xmlreader.h>\nint main() {\nreturn 0;\n}'; echo $$?) ifneq (0, $(LIBXML2_EXISTS)) $(error You need libxml2 installed) endif SUBDIRS_WITH_MAKE = $(dir $(wildcard */makefile)) .PHONY: build-debug clean-debug \ build-release clean-release \ debug release clean doc all all: @echo "What to do master?" debug build-debug: for dir in $(SUBDIRS_LIBS); do \ $(MAKE) $@ -C $$dir || exit 1; \ done for dir in $(SUBDIRS_BINS); do \ $(MAKE) debug -C $$dir || exit 1; \ done if [ ! -w $(addsuffix -debug, $(BINFOLDER)) ] && [ $(USE_RAMDISK) -eq 1 ]; then\ ln -s /tmp/`date +'%s%N'`-$(addsuffix -debug, $(BINFOLDER)) $(subst /, , $(addsuffix -debug, $(BINFOLDER))) 2>/dev/null;\ fi;\ if [ -L $(subst /, , $(addsuffix -debug, $(BINFOLDER))) ]; then\ mkdir -p `readlink $(subst /, , $(addsuffix -debug, $(BINFOLDER)))`;\ else\ mkdir -p $(addsuffix -debug, $(BINFOLDER));\ fi rm -rf $(addsuffix -debug, $(BINFOLDER))/* for dir in $(SUBDIRS_LIBS); do \ cp $$dir/lib-debug/* $(addsuffix -debug, $(BINFOLDER)); \ done for dir in $(SUBDIRS_BINS); do \ cp $$dir/bin-debug/* $(addsuffix -debug, $(BINFOLDER)); \ done cp translateAddresses $(addsuffix -debug, $(BINFOLDER)); \ cp xmlFormat $(addsuffix -debug, $(BINFOLDER)); \ if [ "$@" == "debug" ] && [ $(RUN_TESTS) -eq 1 ]; then for test in $(wildcard tests.*.sh); do \ ./$$test debug $(JOBS); \ done; fi release build-release: for dir in $(SUBDIRS_LIBS); do \ $(MAKE) $@ -C $$dir || exit 1; \ done for dir in $(SUBDIRS_BINS); do \ $(MAKE) release -C $$dir || exit 1; \ done if [ ! -w $(addsuffix -release, $(BINFOLDER)) ] && [ $(USE_RAMDISK) -eq 1 ]; then\ ln -s /tmp/`date +'%s%N'`-$(addsuffix -release, $(BINFOLDER)) $(subst /, , $(addsuffix -release, $(BINFOLDER))) 2>/dev/null;\ fi;\ if [ -L $(subst /, , $(addsuffix -release, $(BINFOLDER))) ]; then\ mkdir -p `readlink $(subst /, , $(addsuffix -release, $(BINFOLDER)))`;\ else\ mkdir -p $(addsuffix -release, $(BINFOLDER));\ fi rm -rf $(addsuffix -release, $(BINFOLDER))/* for dir in $(SUBDIRS_LIBS); do \ cp $$dir/lib-release/* $(addsuffix -release, $(BINFOLDER)); \ done for dir in $(SUBDIRS_BINS); do \ cp $$dir/bin-release/* $(addsuffix -release, $(BINFOLDER)); \ done cp translateAddresses $(addsuffix -release, $(BINFOLDER)); \ cp xmlFormat $(addsuffix -release, $(BINFOLDER)); \ if [ "$@" == "release" ] && [ $(RUN_TESTS) -eq 1 ]; then for test in $(wildcard tests.*.sh); do \ ./$$test release $(JOBS); \ done; fi clean: clean-debug clean-release $(RM) -r bin-debug bin-release clean-debug: for dir in $(SUBDIRS_WITH_MAKE); do \ $(MAKE) clean-debug -C $$dir; \ done clean-release: for dir in $(SUBDIRS_WITH_MAKE); do \ $(MAKE) clean-release -C $$dir; \ done doc: $(MAKE) doc -C alib2std $(MAKE) doc -C alib2data $(MAKE) doc -C alib2common $(MAKE) doc -C alib2str $(MAKE) doc -C alib2raw $(MAKE) doc -C alib2algo $(MAKE) doc -C alib2elgo $(MAKE) doc -C alib2measurepp