summaryrefslogtreecommitdiff
path: root/Makefile.in
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile.in')
-rw-r--r--Makefile.in225
1 files changed, 168 insertions, 57 deletions
diff --git a/Makefile.in b/Makefile.in
index 3cf1817..006594a 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -44,12 +44,14 @@ LDLIBS = @LIBS@
CXX = @CXX@
CXXFLAGS = @CXXFLAGS@
GTEST_DIR = @GTEST_DIR@
+GDB = @GDB@
ENABLE_WARNINGS = @ENABLE_WARNINGS@
ENABLE_ABI6 = @ENABLE_ABI6@
ENABLE_CYGWIN_HACKS = @ENABLE_CYGWIN_HACKS@
ENABLE_DEBUG = @ENABLE_DEBUG@
ENABLE_RPATH = @ENABLE_RPATH@
+ENABLE_SHARED = @ENABLE_SHARED@
TESTER =
TEST_ARGS =
@@ -150,6 +152,18 @@ $(info The Road goes ever on and on ...)
endif
endif
+include ${SRC_DIR}/version.make
+
+ifeq (${ENABLE_SHARED},yes)
+LIB_SUFFIX_FAKE := so
+LIB_SUFFIX_SHORT := ${SO_SHORT}
+LIB_SUFFIX_LONG := ${SO_LONG}
+else
+LIB_SUFFIX_FAKE := a
+LIB_SUFFIX_SHORT := a
+LIB_SUFFIX_LONG := a
+endif
+
c = @colorize 6: 2:$< 3:$@ :
ifneq '$c' ''
l = @colorize 6: $(patsubst %,2:%,$^) 3:$@ :
@@ -171,7 +185,7 @@ SHELL=bash
# need to generate source files before path lists
$(shell make -f ${SRC_DIR}/generate.make >&2)
-obj/generated.stamp:
+stamp/generated.stamp:
# if you get here, the shell above failed
false
@@ -182,10 +196,16 @@ PIES := $(shell cd ${SRC_DIR}; find src/ -name '*.py')
PIES := $(filter-out src/main-gdb-%.py,${PIES})
SOURCES := ${REAL_SOURCES}
HEADERS := ${REAL_HEADERS}
+CHECK_HEADERS := $(patsubst src/%.hpp,stamp/%.hpp.check,$(filter %.hpp,${REAL_HEADERS}))
+CHECK_RANK_FWDS := $(patsubst src/%,stamp/%.rank,${REAL_HEADERS} $(filter-out %_test.cpp,${REAL_SOURCES}))
+CHECK_FWDS := $(patsubst src/%/fwd.hpp,stamp/%.fwdcheck,$(filter %/fwd.hpp,${REAL_HEADERS}))
PATTERN_ROOTS := $(patsubst src/%.cpp,%,${SOURCES})
+PATTERN_PIES := $(patsubst src/%.py,%,${PIES})
PATTERN_MAINS := $(patsubst %/main,%,$(filter %/main,${PATTERN_ROOTS}))
PATTERN_LIBS := $(patsubst %/lib,%,$(filter %/lib,${PATTERN_ROOTS}))
PATTERN_TESTS := $(patsubst %/test,%,$(filter %/test,${PATTERN_ROOTS}))
+PATTERN_GTESTS := $(subst /,--,$(patsubst %_test,%,$(filter %_test,${PATTERN_ROOTS})))
+PATTERN_DTESTS := $(patsubst debug-debug/%,%,$(filter debug-debug/%,${PATTERN_ROOTS}))
DEPENDS := $(patsubst src/%.cpp,obj/%.d,${SOURCES})
PREPROCESSED := $(patsubst %.d,%.ii,${DEPENDS})
IRS := $(patsubst %.d,%.ll,${DEPENDS})
@@ -196,9 +216,18 @@ PIC_OBJECTS := $(patsubst %.d,%.pic.o,${DEPENDS})
MAIN_SOURCES := $(filter %/main.cpp,${SOURCES})
LIB_SOURCES := $(filter %/lib.cpp,${SOURCES})
TEST_SOURCES := $(filter %/test.cpp,${SOURCES})
-BINARIES := $(patsubst src/%/main.cpp,bin/${tmwa}-%,${MAIN_SOURCES})
-LIBRARIES := $(patsubst src/%/lib.cpp,lib/lib${tmwa}-%.so,${LIB_SOURCES})
-TEST_BINARIES := $(patsubst src/%/test.cpp,bin/test-%,${TEST_SOURCES})
+GTEST_SOURCES := $(filter %_test.cpp,${SOURCES})
+DTEST_SOURCES := $(filter src/debug-debug/%.cpp,${SOURCES})
+BINARIES := $(patsubst src/%/main.cpp,bin/${tmwa}-%.elf,${MAIN_SOURCES})
+LIBRARIES := $(patsubst src/%/lib.cpp,lib/lib${tmwa}-%.${LIB_SUFFIX_FAKE},${LIB_SOURCES})
+TEST_BINARIES := $(patsubst src/%/test.cpp,bin/tests/test-%.elf,${TEST_SOURCES})
+GTEST_BINARIES := $(patsubst src--%_test.cpp,bin/tests/gtest-%.elf,$(subst /,--,${GTEST_SOURCES}))
+DTEST_BINARIES := $(patsubst src/debug-debug/%.cpp,bin/tests/dtest-%.elf,${DTEST_SOURCES})
+
+DOC_DOTS := $(shell cd ${SRC_DIR}; find doc-gen/ -name '*.gv')
+DOC_PNGS := $(patsubst %.gv,${SRC_DIR}/%.png,${DOC_DOTS})
+DOC_OBSOLETE :=
+DOC_OBSOLETE += $(filter-out ${DOC_PNGS},$(wildcard ${SRC_DIR}/doc-gen/*.png))
# tricky part
@@ -213,8 +242,8 @@ TEST_BINARIES := $(patsubst src/%/test.cpp,bin/test-%,${TEST_SOURCES})
define RECURSIVE_DEPS_IMPL
$(eval more_deps := $(value ${1}))
$(eval more_deps := $(patsubst src/%.hpp,%,${more_deps}))
-$(eval lib_deps += $(patsubst include/${tmwa}/%.hpp,lib/lib${tmwa}-%.${SO_LONG},$(filter include/${tmwa}/%.hpp,${more_deps})))
-$(eval more_deps := $(filter ${PATTERN_ROOTS},${more_deps}))
+$(eval lib_deps += $(patsubst include/${tmwa}/%.hpp,lib/lib${tmwa}-%.${LIB_SUFFIX_LONG},$(filter include/${tmwa}/%.hpp,${more_deps})))
+$(eval more_deps := $(filter ${PATTERN_ROOTS} ${PATTERN_PIES},${more_deps}))
$(eval more_deps := $(filter-out ${cur_deps},${more_deps}))
$(eval cur_deps += ${more_deps})
$(foreach dep,${more_deps},${call RECURSIVE_DEPS_IMPL,${dep}})
@@ -229,8 +258,9 @@ define RECURSIVE_DEPS
$(eval cur_deps := ${1})
$(eval lib_deps :=)
$(call RECURSIVE_DEPS_IMPL,${1})
+$(eval py_deps := $(filter ${PATTERN_PIES},${cur_deps}))
-${cur_deps}
+$(filter ${PATTERN_ROOTS},${cur_deps})
endef
# Apply the rules to all the main.cpp files
@@ -302,9 +332,6 @@ else
include ${DEPENDS}
endif
-include ${SRC_DIR}/version.make
-
-
thisdir := $(abspath .)
#$(foreach root,${PATTERN_ROOTS},$(info pre-root: ${root} := $(value ${root}))$(info ))
# can't do $(filter %.hpp yet)
@@ -320,37 +347,59 @@ $(foreach root,${PATTERN_ROOTS},$(eval obj/${root}.ii obj/${root}.ll obj/${root}
$(foreach test,tests,$(eval ${test}/test += $(patsubst %,src/%.hpp,$(filter %_test,${PATTERN_ROOTS}))))
-$(foreach main,${PATTERN_MAINS},$(eval main-${main} := $(strip $(call RECURSIVE_DEPS,${main}/main))) $(eval main-${main}-libs := ${lib_deps}))
+$(foreach it,${PATTERN_MAINS},$(eval main-${it} := $(strip $(call RECURSIVE_DEPS,${it}/main))) $(eval main-${it}-libs := ${lib_deps}) $(eval main-${it}-pies := ${py_deps}))
+# actual rule deps
+$(foreach it,${PATTERN_MAINS},$(eval bin/${tmwa}-${it}.elf : $(patsubst %,obj/%.pdc.o,$(value main-${it})) $(value main-${it}-libs)))
+$(foreach it,${PATTERN_MAINS},$(eval bin/${tmwa}-${it}-gdb.py : $(patsubst %,src/%.py,$(value main-${it}-pies))))
+#$(foreach it,${PATTERN_MAINS},$(info post-main: main-${it}: $(value main-${it})) $(info post-main: main-${it}-libs: $(value main-${it}-libs)) $(info ))
+
+$(foreach it,${PATTERN_LIBS},$(eval lib-${it} := $(strip $(call RECURSIVE_DEPS,${it}/lib))) $(eval lib-${it}-libs := ${lib_deps}) $(eval lib-${it}-pies := ${py_deps}))
+# actual rule deps
+$(foreach it,${PATTERN_LIBS},$(eval lib/lib${tmwa}-${it}.a : $(patsubst %,obj/%.pdc.o,$(value lib-${it})) $(filter-out lib/lib${tmwa}-${it}.a,$(value lib-${it}-libs))))
+# no -gdb.py for static libs
+$(foreach it,${PATTERN_LIBS},$(eval lib/lib${tmwa}-${it}.${SO_LONG} : $(patsubst %,obj/%.pic.o,$(value lib-${it})) $(filter-out lib/lib${tmwa}-${it}.${SO_LONG},$(value lib-${it}-libs))))
+$(foreach it,${PATTERN_LIBS},$(eval lib/lib${tmwa}-${it}.${SO_LONG}-gdb.py : $(patsubst %,src/%.py,$(value lib-${it}-pies))))
+#$(foreach it,${PATTERN_LIBS},$(info post-lib: lib-${it}: $(value lib-${it})) $(info post-lib: lib-${it}-libs: $(value lib-${it}-libs)) $(info ))
+
+$(foreach it,${PATTERN_TESTS},$(eval test-${it} := $(strip $(call RECURSIVE_DEPS,${it}/test))) $(eval test-${it}-libs := ${lib_deps}) $(eval test-${it}-pies := ${py_deps}))
# actual rule deps
-$(foreach main,${PATTERN_MAINS},$(eval bin/${tmwa}-${main} : $(patsubst %,obj/%.pdc.o,$(value main-${main})) $(value main-${main}-libs)))
-$(foreach main,${PATTERN_MAINS},$(eval bin/${tmwa}-${main}-gdb.py : $(filter ${PIES},$(patsubst %,src/%.py,$(value main-${main})))))
-#$(foreach main,${PATTERN_MAINS},$(info post-main: main-${main}: $(value main-${main})) $(info post-main: main-${main}-libs: $(value main-${main}-libs)) $(info ))
+$(foreach it,${PATTERN_TESTS},$(eval bin/tests/test-${it}.elf : $(patsubst %,obj/%.pdc.o,$(value test-${it})) $(value test-${it}-libs)))
+$(foreach it,${PATTERN_TESTS},$(eval bin/tests/test-${it}-gdb.py : $(patsubst %,src/%.py,$(value test-${it}-pies))))
+#$(foreach it,${PATTERN_TESTS},$(info post-test: test-${it}: $(value test-${it})) $(info post-test: test-${it}-libs: $(value test-${it}-libs)) $(info ))
-$(foreach lib,${PATTERN_LIBS},$(eval lib-${lib} := $(strip $(call RECURSIVE_DEPS,${lib}/lib))) $(eval lib-${lib}-libs := ${lib_deps}))
+$(foreach it,${PATTERN_GTESTS},$(eval gtest-${it} := $(strip $(call RECURSIVE_DEPS,$(subst --,/,${it})_test))) $(eval gtest-${it}-libs := ${lib_deps}) $(eval gtest-${it}-pies := ${py_deps}))
# actual rule deps
-$(foreach lib,${PATTERN_LIBS},$(eval lib/lib${tmwa}-${lib}.${SO_LONG} : $(patsubst %,obj/%.pic.o,$(value lib-${lib})) $(filter-out lib/lib${tmwa}-${lib}.${SO_LONG},$(value lib-${lib}-libs))))
-$(foreach lib,${PATTERN_LIBS},$(eval lib/lib${tmwa}-${lib}.${SO_LONG}-gdb.py : $(filter ${PIES},$(patsubst %,src/%.py,$(value lib-${lib})))))
-#$(foreach lib,${PATTERN_LIBS},$(info post-lib: lib-${lib}: $(value lib-${lib})) $(info post-lib: lib-${lib}-libs: $(value lib-${lib}-libs)) $(info ))
+$(foreach it,${PATTERN_GTESTS},$(eval bin/tests/gtest-${it}.elf : $(patsubst %,obj/%.pdc.o,$(value gtest-${it})) $(value gtest-${it}-libs)))
+$(foreach it,${PATTERN_GTESTS},$(eval bin/tests/gtest-${it}-gdb.py : $(patsubst %,src/%.py,$(value gtest-${it}-pies))))
+#$(foreach it,${PATTERN_GTESTS},$(info post-gtest: gtest-${it}: $(value gtest-${it})) $(info post-gtest: gtest-${it}-libs: $(value gtest-${it}-libs)) $(info ))
-$(foreach test,${PATTERN_TESTS},$(eval test-${test} := $(strip $(call RECURSIVE_DEPS,${test}/test))) $(eval test-${test}-libs := ${lib_deps}))
+$(foreach it,${PATTERN_DTESTS},$(eval dtest-${it} := $(strip $(call RECURSIVE_DEPS,debug-debug/${it}))) $(eval dtest-${it}-libs := ${lib_deps}) $(eval dtest-${it}-pies := ${py_deps}))
# actual rule deps
-$(foreach test,${PATTERN_TESTS},$(eval bin/test-${test} : $(patsubst %,obj/%.pdc.o,$(value test-${test})) $(value test-${test}-libs)))
-$(foreach test,${PATTERN_TESTS},$(eval bin/test-${test}-gdb.py : $(filter ${PIES},$(patsubst %,src/%.py,$(value test-${test})))))
-#$(foreach test,${PATTERN_TESTS},$(info post-test: test-${test}: $(value test-${test})) $(info post-test: test-${test}-libs: $(value test-${test}-libs)) $(info ))
+$(foreach it,${PATTERN_DTESTS},$(eval bin/tests/dtest-${it}.elf : $(patsubst %,obj/%.pdc.o,$(value dtest-${it})) $(value dtest-${it}-libs)))
+$(foreach it,${PATTERN_DTESTS},$(eval bin/tests/dtest-${it}-gdb.py : $(patsubst %,src/%.py,$(value dtest-${it}-pies))))
+#$(foreach it,${PATTERN_DTESTS},$(info post-dtest: dtest-${it}: $(value dtest-${it})) $(info post-dtest: dtest-${it}-libs: $(value dtest-${it}-libs)) $(info ))
-vpath %.cpp ${SRC_DIR}
-vpath %.hpp ${SRC_DIR}
-vpath %.tcc ${SRC_DIR}
+vpath src/%.cpp ${SRC_DIR}
+vpath src/%.hpp ${SRC_DIR}
+vpath include/%.hpp ${SRC_DIR}
+vpath src/%.tcc ${SRC_DIR}
vpath tools/% ${SRC_DIR}
-vpath %.py ${SRC_DIR}
+vpath src/%.py ${SRC_DIR}
.DELETE_ON_ERROR:
.DEFAULT_GOAL := all
# main goals
all: bin lib
+.PHONY: bin lib
bin: ${BINARIES}
-lib: $(patsubst %.so,%.${SO_LONG},${LIBRARIES})
+ifeq (${ENABLE_SHARED},yes)
+lib: sharedlib
+else
+lib: staticlib
+endif
+sharedlib: $(patsubst %.${LIB_SUFFIX_FAKE},%.${SO_LONG},${LIBRARIES})
+staticlib: $(patsubst %.${LIB_SUFFIX_FAKE},%.a,${LIBRARIES})
ii: ${PREPROCESSED}
ll: ${IRS}
bc: ${BITCODES}
@@ -361,7 +410,7 @@ o: ${PDC_OBJECTS}
# currently defined for PDC
clean-stamp:
- -$l find obj -name '*.stamp' -delete
+ $l rm -rf stamp
clean-deps:
-$l find obj -name '*.d' -delete
clean-format:
@@ -371,17 +420,18 @@ clean-obj:
clean-conf:
$l rm -rf conf-raw
mostlyclean: clean-conf
- $l rm -rf obj
+ $l rm -rf obj stamp
clean: mostlyclean
$l rm -rf bin lib
distclean: clean gen-clean
gen-clean:
- $l rm -f obj/generated.stamp
+ $l rm -f stamp/generate*.stamp
$l rm -rf ${SRC_DIR}/src/proto2/
$l rm -rf ${SRC_DIR}/src/debug-debug/
+ $l rm -rf ${SRC_DIR}/src/*/*_conf.[ch]pp
ifndef MAKE_RESTARTS
-obj/%.d: src/%.cpp | obj/generated.stamp
+obj/%.d: src/%.cpp | stamp/generated.stamp
$(MKDIR_FIRST)
# Not using $c because it's slow and this should be fast
${CXX} ${CPPFLAGS} -DGENERATING_DEPENDENCIES ${CXXFLAGS} -MG -MM \
@@ -407,6 +457,10 @@ obj/%.pdc.o: src/%.cpp
obj/%.pic.o: src/%.cpp
$(MKDIR_FIRST)
$c ${CXX} ${CPPFLAGS} ${CXXFLAGS} -fPIC -c -o $@ $<
+stamp/%.hpp.check: src/%.hpp
+ $(MKDIR_FIRST)
+ ${CXX} ${CPPFLAGS} ${CXXFLAGS} -x c++ -fsyntax-only - <<< '#include "$<"'
+ touch $@
bin/%-gdb.py: src/main-gdb-head.py src/main-gdb-tail.py
$(MKDIR_FIRST)
@@ -414,7 +468,9 @@ bin/%-gdb.py: src/main-gdb-head.py src/main-gdb-tail.py
$(filter-out %/main-gdb-head.py %/main-gdb-tail.py,$^) \
$(filter %/main-gdb-tail.py,$^) \
> $@
-bin/%: bin/%-gdb.py
+ @# aliases to let in-place execution work
+ ln -sf $(notdir $@) $(patsubst %-gdb.py,%.elf-gdb.py,$@)
+bin/%.elf: bin/%-gdb.py
$(MKDIR_FIRST)
$l ${CXX} ${LDFLAGS} $(filter-out bin/%-gdb.py,$^) ${LDLIBS} -o $@
@@ -427,33 +483,74 @@ lib/%.${SO_LONG}-gdb.py:
lib/%.${SO_LONG}: lib/%.${SO_LONG}-gdb.py
$(MKDIR_FIRST)
$l ${CXX} -shared -Wl,-soname=$*.${SO_SHORT} ${LDFLAGS} $(filter-out lib/%-gdb.py,$^) ${LDLIBS} -o $@
- $c ln -sf $*.${SO_LONG} lib/$*.${SO_SHORT}
- $c ln -sf $*.${SO_SHORT} lib/$*.so
+ $c ln -sfT $*.${SO_LONG} lib/$*.${SO_SHORT}
+ $c ln -sfT $*.${SO_SHORT} lib/$*.so
+lib/%.a:
+ $(MKDIR_FIRST)
+ rm -f $@
+ ar cr $@ $^
-#${TEST_BINARIES}: obj/gtest-all.pdc.o
-bin/test-tests: obj/gtest-all.pdc.o
+${GTEST_BINARIES}: obj/gtest_main.pdc.o obj/gtest-all.pdc.o
# This isn't perfect.
-$(filter %_test.pdc.o,${PDC_OBJECTS}) obj/gtest-all.pdc.o: override CPPFLAGS += -DGTEST_HAS_PTHREAD=0 -I${GTEST_DIR}
-obj/gtest-all.pdc.o: override WARNINGS :=
-obj/gtest-all.pdc.o: ${GTEST_DIR}/src/gtest-all.cc
+$(filter %_test.pdc.o,${PDC_OBJECTS}) obj/gtest_main.pdc.o obj/gtest-all.pdc.o: override CPPFLAGS += -DGTEST_HAS_PTHREAD=0 -I${GTEST_DIR}
+obj/gtest-all.pdc.o obj/gtest_main.pdc.o: override WARNINGS :=
+obj/gtest%.pdc.o: ${GTEST_DIR}/src/gtest%.cc
$(MKDIR_FIRST)
$c ${CXX} ${CPPFLAGS} ${CXXFLAGS} -c -o $@ $<
-obj/debug-debug/test.pdc.o: override CXXFLAGS += -g -O0 -gdwarf-3
-obj/run-test-debug-debug.stamp: override TESTER=gdb -return-child-result -nx -batch -x ${SRC_DIR}/tools/debug-debug.gdb --args false
-obj/run-test-debug-debug.stamp: tools/debug-debug.gdb
+DTEST_OBJS := $(filter obj/debug-debug/%.pdc.o,${PDC_OBJECTS})
+DTEST_STAMPS := $(patsubst bin/tests/%.elf,stamp/run-%.stamp,${DTEST_BINARIES})
+${DTEST_OBJS}: override CXXFLAGS += -g -O0 -gdwarf-3
+${DTEST_STAMPS}: override TESTER=${GDB} -return-child-result -nx -batch -ex 'python file_to_load = "$<"' -x ${SRC_DIR}/tools/debug-debug.gdb --args false
+${DTEST_STAMPS}: tools/debug-debug.gdb
ifeq '$(findstring clang,${CXX})' 'clang'
-obj/run-test-debug-debug.stamp:
+${DTEST_STAMPS}:
@echo "Error: sorry, but clang can't be used with gdb"
-false
endif
-test: $(patsubst bin/%,obj/run-%.stamp,${TEST_BINARIES})
-obj/run-%.stamp: bin/%
+test: test-direct
+test-direct: $(patsubst bin/tests/%.elf,stamp/run-%.stamp,${TEST_BINARIES})
+
+test: test-gtest
+test-gtest: $(patsubst bin/tests/%.elf,stamp/run-%.stamp,${GTEST_BINARIES})
+
+test: test-dtest
+test-dtest: $(patsubst bin/tests/%.elf,stamp/run-%.stamp,${DTEST_BINARIES})
+
+$(patsubst bin/tests/%.elf,stamp/run-%.stamp,${TEST_BINARIES} ${GTEST_BINARIES} ${DTEST_BINARIES}): stamp/symlink-test-lib-dir.stamp
+stamp/symlink-test-lib-dir.stamp:
+ @mkdir -p bin
+ ln -sfT ../lib bin/lib
+ touch $@
+
+stamp/run-%.stamp: bin/tests/%.elf
+ $(MKDIR_FIRST)
${TESTER} $< ${TEST_ARGS}
touch $@
+test: test-headers
+test-headers: ${CHECK_HEADERS}
+
+test: test-rank-fwd
+test-rank-fwd: ${CHECK_RANK_FWDS}
+stamp/%.rank: src/%
+ $(MKDIR_FIRST)
+ includes=$$(grep '#include.*".*/.*"' $< | sed 's/^[^"]*"//;s/"[^"]*$$//;s:/[^/]*$$::' | sort -u | fgrep -vx -e '..' -e 'conf-raw' -e '../conf'); \
+ for inc in $$includes; do if ! test -f ${<D}/fwd.hpp; then continue; fi; echo fgrep -q $${inc}/fwd.hpp ${<D}/fwd.hpp; fgrep -q $${inc}/fwd.hpp ${<D}/fwd.hpp || { echo ${<D}/fwd.hpp:''23: error: No $${inc}/fwd.hpp; exit 1; }; done
+ touch $@
+
+test: test-check-fwd
+test-check-fwd: ${CHECK_FWDS}
+stamp/%.fwdcheck: src/%/fwd.hpp
+ $(MKDIR_FIRST)
+ types=$$(grep -o '\(enum \|class \| struct \|union \)\+[A-Za-z_0-9]\+;$$' $< | sed 's/\(;\|enum \|class \|struct \|union \)//g'); \
+ for t in $$types; do echo grep -q $$t $(filter-out %/fwd.hpp,$(wildcard ${<D}/*.hpp)); grep -qw '\(enum \|class \|struct \|union \)'$$t $(filter-out %/fwd.hpp,$(wildcard ${<D}/*.hpp)) || { grep -Hnw $$t';$$' $<; exit 1; }; done
+ includes=$$(grep -o '#include.*".*/fwd\.hpp"' $< | sed 's:^[^"]*"::;s:/[^/]*"$$:/:'); \
+ for inc in $$includes; do echo fgrep -q $$inc $(filter-out %/fwd.hpp,$(wildcard ${<D}/*.hpp ${<D}/*.tcc ${<D}/*.cpp)); fgrep -q $$inc $(filter-out %/fwd.hpp,$(wildcard ${<D}/*.hpp ${<D}/*.tcc ${<D}/*.cpp)) || { grep -Hn $$inc $<; exit 1; }; done
+ touch $@
+
install := install
install_exe := ${install}
install_dir := ${install} -d
@@ -468,8 +565,9 @@ install: install-bin
install-bin:
@echo + Installing binaries
${install_dir} ${DESTDIR}${BINDIR}
- ${install_exe} -t ${DESTDIR}${BINDIR} \
- ${BINARIES}
+ for exe in $(patsubst bin/%.elf,%,${BINARIES}); do \
+ ${install_exe} -T bin/$${exe}.elf ${DESTDIR}${BINDIR}/$${exe}; \
+ done
uninstall: uninstall-bin
uninstall-bin:
@echo - Uninstalling binaries
@@ -479,12 +577,17 @@ install: install-lib
install-lib:
@echo + Installing libraries
${install_dir} ${DESTDIR}${LIBDIR}
+ifeq (${ENABLE_SHARED},yes)
${install_data} -t ${DESTDIR}${LIBDIR} \
$(patsubst %.so,%.${SO_LONG},${LIBRARIES})
for lib in $(patsubst lib/%.so,%,${LIBRARIES}); do \
- ln -sf $$lib.${SO_LONG} ${DESTDIR}${LIBDIR}/$$lib.${SO_SHORT}; \
- ln -sf $$lib.${SO_SHORT} ${DESTDIR}${LIBDIR}/$$lib.so; \
+ ln -sfT $$lib.${SO_LONG} ${DESTDIR}${LIBDIR}/$$lib.${SO_SHORT}; \
+ ln -sfT $$lib.${SO_SHORT} ${DESTDIR}${LIBDIR}/$$lib.so; \
done
+else
+ ${install_data} -t ${DESTDIR}${LIBDIR} \
+ ${LIBRARIES}
+endif
uninstall: uninstall-lib
uninstall-lib:
@echo - Uninstalling libraries
@@ -496,7 +599,7 @@ ifeq (${ENABLE_DEBUG},yes)
@echo + Installing debug files
${install_dir} ${DESTDIR}${DEBUGDIR}${BINDIR}
${install_data} -t ${DESTDIR}${DEBUGDIR}${BINDIR} \
- $(patsubst %,%-gdb.py,${BINARIES})
+ $(patsubst %.elf,%-gdb.py,${BINARIES})
${install_dir} ${DESTDIR}${DEBUGDIR}${LIBDIR}
${install_data} -t ${DESTDIR}${DEBUGDIR}${LIBDIR} \
$(patsubst %.so,%.${SO_LONG}-gdb.py,${LIBRARIES})
@@ -622,9 +725,9 @@ endif
.PHONY: dist
format: format-cpp format-hpp
-format-cpp: $(patsubst src/%,obj/%.formatted,${REAL_SOURCES})
-format-hpp: $(patsubst src/%,obj/%.formatted,${REAL_HEADERS})
-obj/%.cpp.formatted: src/%.cpp tools/indenter
+format-cpp: $(patsubst src/%,stamp/%.formatted,${REAL_SOURCES})
+format-hpp: $(patsubst src/%,stamp/%.formatted,${REAL_HEADERS})
+stamp/%.cpp.formatted: src/%.cpp tools/indenter
$(MKDIR_FIRST)
apply-filter 'indenter -cpp' $<
fgrep -q Copyright $<
@@ -633,7 +736,7 @@ obj/%.cpp.formatted: src/%.cpp tools/indenter
grep -q '^namespace tmwa$$' $<
grep -q '^} // namespace tmwa$$' $<
touch $@
-obj/%.hpp.formatted: src/%.hpp tools/indenter
+stamp/%.hpp.formatted: src/%.hpp tools/indenter
$(MKDIR_FIRST)
apply-filter 'indenter -cpp' $<
fgrep -q Copyright $<
@@ -644,7 +747,7 @@ obj/%.hpp.formatted: src/%.hpp tools/indenter
grep -q '^} // namespace tmwa$$' $<
grep -q '^#pragma once$$' $<
touch $@
-obj/%.tcc.formatted: src/%.tcc tools/indenter
+stamp/%.tcc.formatted: src/%.tcc tools/indenter
$(MKDIR_FIRST)
apply-filter 'indenter -cpp' $<
fgrep -q Copyright $<
@@ -654,6 +757,14 @@ obj/%.tcc.formatted: src/%.tcc tools/indenter
touch $@
.PHONY: format format-cpp format-hpp
-most: $(filter-out bin/${tmwa}-map,${BINARIES})
+vpath doc-gen/%.gv ${SRC_DIR}
+${SRC_DIR}/doc-gen/%.png: doc-gen/%.gv
+ dot -Tpng $< -o $@
+doc: ${DOC_PNGS}
+ test -e ${SRC_DIR}/doc-gen/.git
+ rm -f ${DOC_OBSOLETE}
+.PHONY: doc
+
+most: $(filter-out bin/${tmwa}-map.elf,${BINARIES})
magic: $(filter obj/map/magic%,${PDC_OBJECTS})
-common: $(filter-out %/lib.pdc.o %_test.pdc.o obj/login/% obj/char/% obj/map/% obj/admin/% obj/monitor/%,${PDC_OBJECTS})
+common: $(filter-out %/lib.pdc.o obj/debug-debug/% %_test.pdc.o obj/login/% obj/char/% obj/map/% obj/admin/%,${PDC_OBJECTS})