X-Git-Url: http://git.tuebingen.mpg.de/?p=lopsub.git;a=blobdiff_plain;f=Makefile;h=548c96ff0e6298e29d8f247940a4f446e6757d35;hp=d1f89b1714df4065ef3c2b93b24123f6bd26715a;hb=HEAD;hpb=ef6396807288ea0f635ab50bc789a162b84c67ba diff --git a/Makefile b/Makefile index d1f89b1..89cbc2e 100644 --- a/Makefile +++ b/Makefile @@ -9,6 +9,13 @@ endif .ONESHELL: .SHELLFLAGS := -ec +# Recipes which redirect stdout to the target of the rule (i.e., constructs +# like cmd > $@) create empty or incomplete output files if the command fails, +# for example when cmd was not found. Since the target exists and is uptodate +# in this case, this may lead to all sorts of problems. The following target +# makes sure that such files are removed. +.DELETE_ON_ERROR: + PREFIX ?= /usr/local M4 := m4 LN := ln -f @@ -18,9 +25,20 @@ AR := ar GROFF := groff CP := cp INSTALL := install -GZIP := gzip -f9 +GZIP := gzip -fn9 ZCAT := zcat +CC += -ffile-prefix-map=$(CURDIR)=. + +dummy != $(M4) /dev/null || printf 'failed' +ifeq ($(dummy), failed) +$(error m4 is required to build this package) +endif +dummy != printf '%%%%\n' | $(LEX) -o /dev/null || printf 'failed' +ifeq ($(dummy), failed) +$(error (f)lex is required to build this package) +endif + DATE_FMT := +%B %Y # To get a reproducible build, we use $(SOURCE_DATE_EPOCH) instead of the # current time if this variable is set. @@ -79,13 +97,17 @@ 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 $(liblopsub_objs) +LLS_CFLAGS := -g -fPIC +STRICT_CFLAGS := -Wall +STRICT_CFLAGS += -Werror-implicit-function-declaration + $(lsg_objs) $(liblopsub_objs) $(lopsubex_objs): %.o: %.c lopsubgen.o config_file.o: - $(CC) -g -c -fPIC -o $@ ${@:.o=.c} + $(CC) $(CPPFLAGS) $(LLS_CFLAGS) $(CFLAGS) -c -o $@ ${@:.o=.c} lsg1.o: lsg.c lsg.h - $(CC) -g -DSTAGE1 -Wall -g -c $< -o $@ + $(CC) $(CPPFLAGS) $(LLS_CFLAGS) $(STRICT_CFLAGS) $(CFLAGS) -DSTAGE1 -c -o $@ $< %.o: %.c - $(CC) -Wall -I. -g -c -fPIC -o $@ $< + $(CC) -I. $(CPPFLAGS) $(LLS_CFLAGS) $(STRICT_CFLAGS) $(CFLAGS) -c -o $@ $< # linking lopsubgen-stage1: $(lsg1_objs) @@ -94,22 +116,22 @@ lopsubgen: $(lsg_objs) $(CC) -Wall -g -o $@ $(lsg_objs) $(REALNAME): $(liblopsub_objs) $(CC) --shared -Wl,-soname,liblopsub.so.$(MAJOR_VERSION) -o $@ $^ +liblopsub.a: $(liblopsub_objs) + $(AR) -rcs $@ $^ + 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: %.gz +web/%.html: %.gz web/header.html $(CP) web/header.html $@ $(ZCAT) $< | $(GROFF) -m man -Thtml | sed -e '1,/^/d' >> $@ @@ -132,4 +154,4 @@ clean: distclean: clean $(RM) *.lsg.c *.lsg.h lopsubgen.c config_file.c lopsubgen-stage1 \ lopsub.h lopsub.7 lopsub-suite.5 version.c - +-include Makefile.local