diff options
Diffstat (limited to 'Makefile.in')
-rw-r--r-- | Makefile.in | 225 |
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}) |