header_only_lib 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. INSTALL_INCLUDE ?= include
  2. INSTALL_SOURCE ?= source
  3. COPYRIGHT_FILE ?= ./COPYRIGHT
  4. ifneq ($(shell cat $(COPYRIGHT_FILE) 2> /dev/null),)
  5. COPYRIGHT ?= $(COPYRIGHT_FILE)
  6. COPYRIGHT_DEP = $(COPYRIGHT_FILE)
  7. else
  8. COPYRIGHT ?= /dev/null
  9. endif
  10. PREFIX ?= $(DESTDIR)/usr/local
  11. INCDIR := $(PREFIX)/$(INSTALL_INCLUDE)
  12. SRCDIR ?= ./source
  13. HEADERS := $(shell find -wholename "$(SRCDIR)/*.hpp" && find -wholename "$(SRCDIR)/*.h")
  14. INCLUDE := $(HEADERS:$(SRCDIR)/%=$(INCDIR)/%)
  15. INCDIRS := $(shell dirname $(INCLUDE))
  16. INSTALL_SRCDIR := $(PREFIX)/$(INSTALL_SOURCE)
  17. INSTALL_SOURCES := $(INCLUDE:$(INCDIR)/%=$(INSTALL_SRCDIR)/%)
  18. INSTALL_SRCDIRS := $(shell dirname $(INSTALL_SOURCES))
  19. default:
  20. @echo This is a pure header library, so there is nothing to build. You can still install/uninstall or test.
  21. install_all: install install_source
  22. install: $(INCLUDE)
  23. @echo Install complete!
  24. $(INCDIR)/%.h: $(SRCDIR)/%.h $(COPYRIGHT_DEP)
  25. @mkdir -p $(@D)
  26. cat $(COPYRIGHT) > $@
  27. cat $< >> $@
  28. $(INCDIR)/%.hpp: $(SRCDIR)/%.hpp $(COPYRIGHT_DEP)
  29. @mkdir -p $(@D)
  30. cat $(COPYRIGHT) > $@
  31. cat $< >> $@
  32. install_source: $(INSTALL_SOURCES)
  33. $(INSTALL_SRCDIR)/%: $(SRCDIR)/% $(COPYRIGHT_DEP)
  34. @mkdir -p $(@D)
  35. cat $(COPYRIGHT) > $@
  36. cat $< >> $@
  37. uninstall:
  38. -rm $(INCLUDE)
  39. @rmdir -p $(INCDIRS) 2> /dev/null || true
  40. @echo Includes uninstalled!
  41. uninstall_source:
  42. -rm $(INSTALL_SOURCES)
  43. @rmdir -p $(INSTALL_SRCDIRS) 2> /dev/null || true
  44. @echo Source code uninstalled!
  45. uninstall_all: uninstall uninstall_source
  46. @echo Everything uninstalled!
  47. ifneq ($(shell cat unit_tests/Makefile 2> /dev/null),)
  48. TESTMAKE = +@$(MAKE) --no-print-directory -C unit_tests/
  49. else
  50. TESTMAKE = -@true
  51. endif
  52. test:
  53. @$(TESTMAKE)
  54. test-clean:
  55. @$(TESTMAKE) clean
  56. test-cleanrun:
  57. @$(TESTMAKE) cleanrun
  58. @$(TESTMAKE) run
  59. test-all: test-clean test
  60. clean: test-clean
  61. .PHONY : clean uninstall test test-clean test-cleanrun test-all