add missing original makefile

This commit is contained in:
Christian Grothoff 2023-04-22 18:33:17 +02:00
parent 5d17c9c909
commit 88a69ac7f2
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC

View File

@ -0,0 +1,301 @@
# version
MAJOR := 1
MINOR := 2
REVIS := 4
# installation settings
DESTDIR ?=
PREFIX ?= /usr/local
BINDIR ?= $(PREFIX)/bin
LIBDIR ?= $(PREFIX)/lib
INCLUDEDIR ?= $(PREFIX)/include
MANDIR ?= $(PREFIX)/share/man
PKGDIR ?= $(LIBDIR)/pkgconfig
# Tools (sed must be GNU sed)
SED ?= sed
INSTALL ?= install
# initial settings
VERSION := $(MAJOR).$(MINOR).$(REVIS)
SOVER := .$(MAJOR)
SOVEREV := .$(MAJOR).$(MINOR)
HEADERS := mustach.h mustach-wrap.h
SPLITLIB := libmustach-core.so$(SOVEREV)
SPLITPC := libmustach-core.pc
COREOBJS := mustach.o mustach-wrap.o
SINGLEOBJS := $(COREOBJS)
SINGLEFLAGS :=
SINGLELIBS :=
TESTSPECS :=
ALL := manuals
# availability of CJSON
ifneq ($(cjson),no)
cjson_cflags := $(shell pkg-config --silence-errors --cflags libcjson)
cjson_libs := $(shell pkg-config --silence-errors --libs libcjson)
ifdef cjson_libs
cjson := yes
tool ?= cjson
HEADERS += mustach-cjson.h
SPLITLIB += libmustach-cjson.so$(SOVEREV)
SPLITPC += libmustach-cjson.pc
SINGLEOBJS += mustach-cjson.o
SINGLEFLAGS += ${cjson_cflags}
SINGLELIBS += ${cjson_libs}
TESTSPECS += test-specs/test-specs-cjson
else
ifeq ($(cjson),yes)
$(error Can't find required library cjson)
endif
cjson := no
endif
endif
# availability of JSON-C
ifneq ($(jsonc),no)
jsonc_cflags := $(shell pkg-config --silence-errors --cflags json-c)
jsonc_libs := $(shell pkg-config --silence-errors --libs json-c)
ifdef jsonc_libs
jsonc := yes
tool ?= jsonc
HEADERS += mustach-json-c.h
SPLITLIB += libmustach-json-c.so$(SOVEREV)
SPLITPC += libmustach-json-c.pc
SINGLEOBJS += mustach-json-c.o
SINGLEFLAGS += ${jsonc_cflags}
SINGLELIBS += ${jsonc_libs}
TESTSPECS += test-specs/test-specs-json-c
else
ifeq ($(jsonc),yes)
$(error Can't find required library json-c)
endif
jsonc := no
endif
endif
# availability of JANSSON
ifneq ($(jansson),no)
jansson_cflags := $(shell pkg-config --silence-errors --cflags jansson)
jansson_libs := $(shell pkg-config --silence-errors --libs jansson)
ifdef jansson_libs
jansson := yes
tool ?= jansson
HEADERS += mustach-jansson.h
SPLITLIB += libmustach-jansson.so$(SOVEREV)
SPLITPC += libmustach-jansson.pc
SINGLEOBJS += mustach-jansson.o
SINGLEFLAGS += ${jansson_cflags}
SINGLELIBS += ${jansson_libs}
TESTSPECS += test-specs/test-specs-jansson
else
ifeq ($(jansson),yes)
$(error Can't find required library jansson)
endif
jansson := no
endif
endif
# tool
TOOLOBJS = mustach-tool.o $(COREOBJS)
tool ?= none
ifneq ($(tool),none)
ifeq ($(tool),cjson)
TOOLOBJS += mustach-cjson.o
TOOLFLAGS := ${cjson_cflags} -DTOOL=MUSTACH_TOOL_CJSON
TOOLLIBS := ${cjson_libs}
TOOLDEP := mustach-cjson.h
else ifeq ($(tool),jsonc)
TOOLOBJS += mustach-json-c.o
TOOLFLAGS := ${jsonc_cflags} -DTOOL=MUSTACH_TOOL_JSON_C
TOOLLIBS := ${jsonc_libs}
TOOLDEP := mustach-json-c.h
else ifeq ($(tool),jansson)
TOOLOBJS += mustach-jansson.o
TOOLFLAGS := ${jansson_cflags} -DTOOL=MUSTACH_TOOL_JANSSON
TOOLLIBS := ${jansson_libs}
TOOLDEP := mustach-jansson.h
else
$(error Unknown library $(tool) for tool)
endif
ifneq ($($(tool)),yes)
$(error No library found for tool $(tool))
endif
ALL += mustach
endif
# compute targets
libs ?= all
ifeq (${libs},split)
ALL += ${SPLITLIB} ${SPLITPC}
else ifeq (${libs},single)
ALL += libmustach.so$(SOVEREV) libmustach.pc
else ifeq (${libs},all)
ALL += libmustach.so$(SOVEREV) libmustach.pc ${SPLITLIB} ${SPLITPC}
else ifneq (${libs},none)
$(error Unknown libs $(libs))
endif
# display target
$(info tool = ${tool})
$(info libs = ${libs})
$(info jsonc = ${jsonc})
$(info jansson = ${jansson})
$(info cjson = ${cjson})
# settings
EFLAGS = -fPIC -Wall -Wextra -DVERSION=${VERSION}
ifeq ($(shell uname),Darwin)
LDFLAGS_single += -install_name $(LIBDIR)/libmustach.so$(SOVEREV)
LDFLAGS_core += -install_name $(LIBDIR)/libmustach-core.so$(SOVEREV)
LDFLAGS_cjson += -install_name $(LIBDIR)/libmustach-cjson.so$(SOVEREV)
LDFLAGS_jsonc += -install_name $(LIBDIR)/libmustach-json-c.so$(SOVEREV)
LDFLAGS_jansson += -install_name $(LIBDIR)/libmustach-jansson.so$(SOVEREV)
else
LDFLAGS_single += -Wl,-soname,libmustach.so$(SOVER)
LDFLAGS_core += -Wl,-soname,libmustach-core.so$(SOVER)
LDFLAGS_cjson += -Wl,-soname,libmustach-cjson.so$(SOVER)
LDFLAGS_jsonc += -Wl,-soname,libmustach-json-c.so$(SOVER)
LDFLAGS_jansson += -Wl,-soname,libmustach-jansson.so$(SOVER)
endif
# targets
.PHONY: all
all: ${ALL}
mustach: $(TOOLOBJS)
$(CC) $(LDFLAGS) $(TOOLFLAGS) -o mustach $(TOOLOBJS) $(TOOLLIBS)
libmustach.so$(SOVEREV): $(SINGLEOBJS)
$(CC) -shared $(LDFLAGS) $(LDFLAGS_single) -o $@ $^ $(SINGLELIBS)
libmustach-core.so$(SOVEREV): $(COREOBJS)
$(CC) -shared $(LDFLAGS) $(LDFLAGS_core) -o $@ $(COREOBJS) $(lib_OBJ)
libmustach-cjson.so$(SOVEREV): $(COREOBJS) mustach-cjson.o
$(CC) -shared $(LDFLAGS) $(LDFLAGS_cjson) -o $@ $^ $(cjson_libs)
libmustach-json-c.so$(SOVEREV): $(COREOBJS) mustach-json-c.o
$(CC) -shared $(LDFLAGS) $(LDFLAGS_jsonc) -o $@ $^ $(jsonc_libs)
libmustach-jansson.so$(SOVEREV): $(COREOBJS) mustach-jansson.o
$(CC) -shared $(LDFLAGS) $(LDFLAGS_jansson) -o $@ $^ $(jansson_libs)
# pkgconfigs
%.pc: pkgcfgs
$(SED) -E '/^==.*==$$/{h;d};x;/==$@==/{x;s/VERSION/$(VERSION)/;p;d};x;d' $< > $@
# objects
mustach.o: mustach.c mustach.h
$(CC) -c $(EFLAGS) $(CFLAGS) -o $@ $<
mustach-wrap.o: mustach-wrap.c mustach.h mustach-wrap.h
$(CC) -c $(EFLAGS) $(CFLAGS) -o $@ $<
mustach-tool.o: mustach-tool.c mustach.h mustach-json-c.h $(TOOLDEP)
$(CC) -c $(EFLAGS) $(CFLAGS) $(TOOLFLAGS) -o $@ $<
mustach-cjson.o: mustach-cjson.c mustach.h mustach-wrap.h mustach-cjson.h
$(CC) -c $(EFLAGS) $(CFLAGS) $(cjson_cflags) -o $@ $<
mustach-json-c.o: mustach-json-c.c mustach.h mustach-wrap.h mustach-json-c.h
$(CC) -c $(EFLAGS) $(CFLAGS) $(jsonc_cflags) -o $@ $<
mustach-jansson.o: mustach-jansson.c mustach.h mustach-wrap.h mustach-jansson.h
$(CC) -c $(EFLAGS) $(CFLAGS) $(jansson_cflags) -o $@ $<
# installing
.PHONY: install
install: all
$(INSTALL) -d $(DESTDIR)$(BINDIR)
$(INSTALL) -m0755 mustach $(DESTDIR)$(BINDIR)/
$(INSTALL) -d $(DESTDIR)$(INCLUDEDIR)/mustach
$(INSTALL) -m0644 $(HEADERS) $(DESTDIR)$(INCLUDEDIR)/mustach
$(INSTALL) -d $(DESTDIR)$(LIBDIR)
for x in libmustach*.so$(SOVEREV); do \
$(INSTALL) -m0755 $$x $(DESTDIR)$(LIBDIR)/ ;\
ln -sf $$x $(DESTDIR)$(LIBDIR)/$${x%.so.*}.so$(SOVER) ;\
ln -sf $$x $(DESTDIR)$(LIBDIR)/$${x%.so.*}.so ;\
done
$(INSTALL) -d $(DESTDIR)/$(PKGDIR)
$(INSTALL) -m0644 libmustach*.pc $(DESTDIR)/$(PKGDIR)
$(INSTALL) -d $(DESTDIR)/$(MANDIR)/man1
$(INSTALL) -m0644 mustach.1.gz $(DESTDIR)/$(MANDIR)/man1
# deinstalling
.PHONY: uninstall
uninstall:
rm -f $(DESTDIR)$(BINDIR)/mustach
rm -f $(DESTDIR)$(LIBDIR)/libmustach*.so*
rm -rf $(DESTDIR)$(INCLUDEDIR)/mustach
# testing
.PHONY: test test-basic test-specs
test: basic-tests spec-tests
basic-tests: mustach
@$(MAKE) -C test1 test
@$(MAKE) -C test2 test
@$(MAKE) -C test3 test
@$(MAKE) -C test4 test
@$(MAKE) -C test5 test
@$(MAKE) -C test6 test
spec-tests: $(TESTSPECS)
test-specs/test-specs-%: test-specs/%-test-specs test-specs/specs
./$< test-specs/spec/specs/[a-z]*.json > $@.last || true
diff $@.ref $@.last
test-specs/cjson-test-specs.o: test-specs/test-specs.c mustach.h mustach-wrap.h mustach-cjson.h
$(CC) -I. -c $(EFLAGS) $(CFLAGS) $(cjson_cflags) -DTEST=TEST_CJSON -o $@ $<
test-specs/cjson-test-specs: test-specs/cjson-test-specs.o mustach-cjson.o $(COREOBJS)
$(CC) $(LDFLAGS) -o $@ $^ $(cjson_libs)
test-specs/json-c-test-specs.o: test-specs/test-specs.c mustach.h mustach-wrap.h mustach-json-c.h
$(CC) -I. -c $(EFLAGS) $(CFLAGS) $(jsonc_cflags) -DTEST=TEST_JSON_C -o $@ $<
test-specs/json-c-test-specs: test-specs/json-c-test-specs.o mustach-json-c.o $(COREOBJS)
$(CC) $(LDFLAGS) -o $@ $^ $(jsonc_libs)
test-specs/jansson-test-specs.o: test-specs/test-specs.c mustach.h mustach-wrap.h mustach-jansson.h
$(CC) -I. -c $(EFLAGS) $(CFLAGS) $(jansson_cflags) -DTEST=TEST_JANSSON -o $@ $<
test-specs/jansson-test-specs: test-specs/jansson-test-specs.o mustach-jansson.o $(COREOBJS)
$(CC) $(LDFLAGS) -o $@ $^ $(jansson_libs)
.PHONY: test-specs/specs
test-specs/specs:
if test -d test-specs/spec; then \
git -C test-specs/spec pull; \
else \
git -C test-specs clone https://github.com/mustache/spec.git; \
fi
#cleaning
.PHONY: clean
clean:
rm -f mustach libmustach*.so* *.o *.pc
rm -f test-specs/*-test-specs test-specs/test-specs-*.last
rm -rf *.gcno *.gcda coverage.info gcov-latest
@$(MAKE) -C test1 clean
@$(MAKE) -C test2 clean
@$(MAKE) -C test3 clean
@$(MAKE) -C test4 clean
@$(MAKE) -C test5 clean
@$(MAKE) -C test6 clean
# manpage
.PHONY: manuals
manuals: mustach.1.gz
mustach.1.gz: mustach.1.scd
if which scdoc >/dev/null 2>&1; then scdoc < mustach.1.scd | gzip > mustach.1.gz; fi