X-Git-Url: http://git.tuebingen.mpg.de/?p=lopsub.git;a=blobdiff_plain;f=Makefile;h=200a7c0d411b5e8cc90c354576d36759a9c63028;hp=2ff12faaa56c945180f72014aa3b40e6ac5bab5d;hb=d6f28609ba3b250079ac0c55422dafdabb6c0c71;hpb=ea2bd7286bd8eae90513f19f1e2eef39f6315447 diff --git a/Makefile b/Makefile index 2ff12fa..200a7c0 100644 --- a/Makefile +++ b/Makefile @@ -18,13 +18,28 @@ AR := ar GROFF := groff CP := cp INSTALL := install - -DATE := $(shell date '+%B %Y') +GZIP := gzip -fn9 +ZCAT := zcat + +DATE_FMT := +%B %Y +# To get a reproducible build, we use $(SOURCE_DATE_EPOCH) instead of the +# current time if this variable is set. +ifdef SOURCE_DATE_EPOCH + DATE := $(shell LC_ALL=C date -u -d '@$(SOURCE_DATE_EPOCH)' \ + '$(DATE_FMT)' 2>/dev/null || LC_ALL=C date -u '$(DATE_FMT)') +else + DATE := $(shell date '$(DATE_FMT)') +endif GIT_VERSION := $(shell ./version-gen.sh) - -m4_man_pages := lopsub-suite.5 lopsub.7 -all := $(m4_man_pages) liblopsub.a lopsubgen lopsubgen.1 \ - lopsubex lopsubex.1 +PLAIN_VERSION := $(firstword $(subst -, , $(GIT_VERSION))) +MAJOR_VERSION := $(firstword $(subst ., , $(PLAIN_VERSION))) +SONAME := liblopsub.so.$(MAJOR_VERSION) +REALNAME := liblopsub.so.$(PLAIN_VERSION) +LINKERNAME:=liblopsub.so + +m4_man_pages := lopsub-suite.5.gz lopsub.7.gz +all := $(m4_man_pages) $(REALNAME) lopsubgen lopsubgen.1.gz \ + lopsubex lopsubex.1.gz all: $(all) # deps @@ -39,8 +54,8 @@ version.o: version.c gendoc := gendoc/gendoc.m4 %.h: %.h.m4 $(gendoc) $(M4) -DOUTPUT_MODE=C $(gendoc) $< > $@ -$(m4_man_pages): %: %.m4 version.c - $(M4) -DGIT_VERSION=$(GIT_VERSION) -DDATE="$(DATE)" $< > $@ +$(m4_man_pages): %.gz: %.m4 version.c + $(M4) -DGIT_VERSION=$(GIT_VERSION) -DDATE="$(DATE)" $< | $(GZIP) > $@ # flex %.c: %.l @@ -54,60 +69,60 @@ lopsubgen.lsg.c lopsubgen.lsg.h: lopsubgen.suite lopsubgen-stage1 \ ./lopsubgen --gen-c < $< %.lsg.h: %.suite lopsubgen ./lopsubgen --gen-header < $< -%.1: %.suite lopsubgen - ./lopsubgen --gen-man=$@ --version-string $(GIT_VERSION) < $< +%.1.gz: %.suite lopsubgen + ./lopsubgen --gen-man=${@:.gz=} --version-string $(GIT_VERSION) < $< + $(GZIP) ${@:.gz=} # compiling lsg1_objs := lopsubgen.o lsg1.o version.o lsg_objs := lopsubgen.o lsg.o lopsubgen.lsg.o lopsub.o version.o liblopsub_objs := config_file.o lopsub.o version.o -lopsubex_objs := lopsubex.o lopsubex.lsg.o version.o +lopsubex_objs := lopsubex.o lopsubex.lsg.o $(liblopsub_objs) $(lsg_objs) $(liblopsub_objs) $(lopsubex_objs): %.o: %.c lopsubgen.o config_file.o: - $(CC) -g -c -o $@ ${@:.o=.c} + $(CC) -g -c -fPIC -o $@ ${@:.o=.c} lsg1.o: lsg.c lsg.h - $(CC) -g -DSTAGE1 -Wall -g -c $< -o $@ + $(CC) -g -DSTAGE1 -Wall -c $< -o $@ %.o: %.c - $(CC) -Wall -I. -g -c -o $@ $< + $(CC) -Wall -I. -g -c -fPIC -o $@ $< # linking lopsubgen-stage1: $(lsg1_objs) $(CC) -Wall -g $(lsg1_objs) -o $@ lopsubgen: $(lsg_objs) $(CC) -Wall -g -o $@ $(lsg_objs) -liblopsub.a: $(liblopsub_objs) - $(AR) -rcs $@ $^ -lopsubex: $(lopsubex_objs) liblopsub.a - $(CC) -Wall -g -o $@ $^ +$(REALNAME): $(liblopsub_objs) + $(CC) --shared -Wl,-soname,liblopsub.so.$(MAJOR_VERSION) -o $@ $^ +lopsubex: $(lopsubex_objs) $(REALNAME) + $(CC) -Wall -g -o $@ $(lopsubex_objs) # web html := $(addprefix web/, $(addsuffix .html, \ - index lopsub-api lopsubgen.1 lopsubex.1 $(m4_man_pages))) -$(html): $(addprefix web/, $(addsuffix .html, header footer)) - + index lopsub-api lopsubgen.1 lopsubex.1 $(m4_man_pages:.gz=))) www: $(html) - -web/lopsub-api.html: lopsub.h.m4 +web/lopsub-api.html: lopsub.h.m4 web/header.html web/footer.html $(M4) -DOUTPUT_MODE=HTML web/header.html $(gendoc) \ $< web/footer.html > $@ web/index.html: web/lopsub.7.html $(LN) -s $(notdir $<) $@ -web/%.html: % +web/%.html: %.gz web/header.html $(CP) web/header.html $@ - $(GROFF) -m man -Thtml $< | sed -e '1,/^/d' >> $@ + $(ZCAT) $< | $(GROFF) -m man -Thtml | sed -e '1,/^/d' >> $@ -install: liblopsub.a lopsub.7 +install: $(all) $(INSTALL) -d $(DESTDIR)$(PREFIX)/lib $(DESTDIR)$(PREFIX)/include \ - $(DESTDIR)$(PREFIX)/man/man1 $(DESTDIR)$(PREFIX)/man/man5 \ - $(DESTDIR)$(PREFIX)/man/man7 $(DESTDIR)$(PREFIX)/bin - $(INSTALL) -m 755 liblopsub.a $(DESTDIR)$(PREFIX)/lib + $(DESTDIR)$(PREFIX)/share/man/man1 $(DESTDIR)$(PREFIX)/share/man/man5 \ + $(DESTDIR)$(PREFIX)/share/man/man7 $(DESTDIR)$(PREFIX)/bin + $(INSTALL) -m 644 $(REALNAME) $(DESTDIR)$(PREFIX)/lib + $(LN) -s $(REALNAME) $(DESTDIR)$(PREFIX)/lib/$(SONAME) + $(LN) -s $(SONAME) $(DESTDIR)$(PREFIX)/lib/$(LINKERNAME) $(INSTALL) -m 755 lopsubgen $(DESTDIR)$(PREFIX)/bin $(INSTALL) -m 644 lopsub.h $(DESTDIR)$(PREFIX)/include $(INSTALL) -m 644 lopsub-internal.h $(DESTDIR)$(PREFIX)/include - $(INSTALL) -m 644 lopsubgen.1 $(DESTDIR)$(PREFIX)/man/man1 - $(INSTALL) -m 644 lopsub-suite.5 $(DESTDIR)$(PREFIX)/man/man5 - $(INSTALL) -m 644 lopsub.7 $(DESTDIR)$(PREFIX)/man/man7 + $(INSTALL) -m 644 lopsubgen.1.gz $(DESTDIR)$(PREFIX)/share/man/man1 + $(INSTALL) -m 644 lopsub-suite.5.gz $(DESTDIR)$(PREFIX)/share/man/man5 + $(INSTALL) -m 644 lopsub.7.gz $(DESTDIR)$(PREFIX)/share/man/man7 clean: $(RM) $(all) $(html) *.o *.man