diff --git a/Makefile b/Makefile index 3eaa6f5..f7026f1 100644 --- a/Makefile +++ b/Makefile @@ -21,21 +21,20 @@ STATICLIB := $(LIBNAME).a BUILDDIR := build/intermediates/ PREFIX ?= /usr/local BINDIR ?= $(PREFIX)/bin +MANDIR ?= $(PREFIX)/man CONFIGDIR ?= $(PREFIX)/etc INCLUDEDIR ?= $(PREFIX)/include LIBDIR ?= $(PREFIX)/lib DATADIR ?= $(PREFIX)/share -MANDIR ?= $(DATADIR)/man DOCDIR ?= $(DATADIR)/$(LIBNAME)/doc SRCS := $(notdir $(wildcard src/*.cpp)) OBJS := $(SRCS:.cpp=.o) -DEPS := $(SRCS:.cpp=.d) -HDRS := $(wildcard src/*.hpp) +HDRS ?= $(wildcard src/*.hpp) CXX ?= g++ -CXXFLAGS += -Wshadow -Wall -Wpedantic -Wextra -g -fno-strict-aliasing -std=c++17 -fPIC +CXXFLAGS += -Wshadow -Wall -Wpedantic -Wextra -g -std=c++17 -fPIC ifeq ($(DEBUG),1) CXXFLAGS += -D DEBUG -O0 CONFIG := debug @@ -59,7 +58,7 @@ all: prebuild $(OUTDIR)$(REALNAME) $(OUTDIR)$(STATICLIB) prebuild: @mkdir -p $(BUILDDIR) $(OUTDIR) -$(OUTDIR)$(REALNAME): $(OBJS) $(DEPS) +$(OUTDIR)$(REALNAME): $(OBJS) ifeq ($(UNAME_S),Darwin) $(CXX) -dynamiclib -o $(OUTDIR)$(REALNAME) -current_version $(MAJOR) -compatibility_version $(MINOR) $(LDFLAGS) $(LDLIBS) $(addprefix $(BUILDDIR),$(OBJS)) endif @@ -70,24 +69,27 @@ ifeq ($(UNAME_S),Linux) $(CXX) -g -shared -Wl,-soname,$(SONAME) -o $(OUTDIR)$(REALNAME) $(LDFLAGS) $(LDLIBS) $(addprefix $(BUILDDIR),$(OBJS)) endif -%.o: %.cpp %.d +%.o %.d: %.cpp $(CXX) $(CXXFLAGS) -MMD -MP -MT $@ -MF $*.d -c $< @mv $@ $*.d $(BUILDDIR) --include $(BUILDDIR)*.d - -%.d: ; +-include $(BUILDDIR)$(SRCS:.cpp=.d) $(OUTDIR)$(STATICLIB): $(OBJS) ar r $(OUTDIR)$(STATICLIB) $(addprefix $(BUILDDIR),$(OBJS)) +ifeq ($(GENERATELIBHEADER),1) $(LIBNAME).hpp: $(HDRS) @echo updating build/$(LIBNAME).hpp @cp /dev/null build/$(LIBNAME).hpp @for h in $(HDRS); \ do \ - cat $$h >> build/$(LIBNAME).hpp; \ + sed '/@exclude/d' $$h >> build/$(LIBNAME).hpp; \ done +HEADERSRCDIR := build +else +HEADERSRCDIR := src +endif test: $(MAKE) -C tests && tests/tests @@ -96,11 +98,15 @@ clean: $(RM) build $(MAKE) -C tests clean -install: $(OUTDIR)$(REALNAME) $(LIBNAME).hpp +ifeq ($(GENERATELIBHEADER),1) +install: $(LIBNAME).hpp +else +install: +endif $(INSTALL) -d $(LIBDIR) $(INSTALL) -m 644 $(OUTDIR)$(REALNAME) $(LIBDIR) - $(INSTALL) -d $(INCLUDEDIR) - $(INSTALL) -m 644 build/$(LIBNAME).hpp $(INCLUDEDIR) + $(INSTALL) -d $(INCLUDEDIR)/$(LIBNAME) + $(INSTALL) -m 644 $(HEADERSRCDIR)/$(LIBNAME).hpp $(INCLUDEDIR) ifeq ($(UNAME_S),Darwin) cd $(LIBDIR) && ln -sf $(REALNAME) $(SONAME) endif diff --git a/premake.make b/premake.make index a1b06b2..44de995 100644 --- a/premake.make +++ b/premake.make @@ -3,3 +3,5 @@ LDLIBS := -lscerror -lunistring MAJOR := 1 MINOR := 2 PATCH := 0 + +GENERATELIBHEADER := 1