Makefile 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. INTERACTIVE:=$(shell [ -t 0 ] && echo 1)
  2. ifdef INTERACTIVE
  3. CLEAN_ANSI=
  4. else
  5. CLEAN_ANSI=| sed -r 's/\x1B\[([0-9]{1,3}(;[0-9]{1,2};?)?)?[mGK]//g'
  6. endif
  7. CXX := clang++
  8. CXX_FLAGS := -Wall -Wextra -Werror -std=c++20 -isystem include/ -DJVALIDATE_USE_EXCEPTIONS
  9. TEST_DIR := tests/
  10. INCLUDE_DIR := include/
  11. HEADERS := $(shell find $(INCLUDE_DIR) -name *.h)
  12. TEST_HEADERS := $(wildcard $(TEST_DIR)*.h)
  13. TEST_SOURCES := $(wildcard $(TEST_DIR)*.cxx)
  14. TEST_OBJECTS := $(patsubst %.cxx, .build/%.o, $(TEST_SOURCES))
  15. TEST_BINARIES := .build/bin/selfvalidate
  16. all: run-test
  17. debug: CXX_FLAGS := $(CXX_FLAGS) -g
  18. debug: all
  19. clean:
  20. @ rm -rf .build
  21. test: $(TEST_BINARIES)
  22. run-test: test
  23. run-test:
  24. .build/bin/selfvalidate --gtest_filter=-*date:*json_pointer:*idn_hostname:*uri:*uri_template:*iri_reference:*iri:*ipv4:*uri_reference:*time:*ipv6:*hostname:*email:*relative_json_pointer:*date_time:*idn_email $(CLEAN_ANSI)
  25. .build/tests/%.o: tests/%.cxx $(HEADERS) $(TEST_HEADERS)
  26. @ mkdir -p .build/tests
  27. $(CXX) $(CXX_FLAGS) -c $< -o $@
  28. .build/bin/selfvalidate: .build/tests/selfvalidate_test.o
  29. @ mkdir -p .build/bin
  30. $(CXX) $< -o $@ -L/opt/local/lib -ljsoncpp -lgmock -lcurl -lgtest