# Implicit rules are implemented in make as suffix rules. The following rule # empties the suffix list to disable the predefined implicit rules. This # increases performance and avoids hard-to-debug behaviour. .SUFFIXES: MAKEFLAGS += -Rr ifeq ("$(origin CC)", "default") CC := cc endif PREFIX ?= /usr/local M4 := m4 LN := ln -f LEX := lex RM := rm -f AR := ar GROFF := groff CP := cp INSTALL := install DATE := $(shell date '+%B %Y') 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 all: $(all) # deps lopsubgen.o: lsg.h lopsub.o lsg.o: lopsub.h lopsub-internal.h lsg.o: lopsubgen.lsg.h lopsub-internal.h lopsubex.o: lopsubex.lsg.h lopsub.h config_file.c: lopsub-internal.h lopsub.h version.o: version.c # m4 stuff 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)" $< > $@ # flex %.c: %.l $(LEX) -o $@ $< # lopsubgen lopsubgen.lsg.c lopsubgen.lsg.h: lopsubgen.suite lopsubgen-stage1 \ lopsub-internal.h ./lopsubgen-stage1 < $< %.lsg.c: %.suite lopsubgen ./lopsubgen --gen-c < $< %.lsg.h: %.suite lopsubgen ./lopsubgen --gen-header < $< %.1: %.suite lopsubgen ./lopsubgen --gen-man=$@ --version-string $(GIT_VERSION) < $< # 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 $(lsg_objs) $(liblopsub_objs) $(lopsubex_objs): %.o: %.c lopsubgen.o config_file.o: $(CC) -g -c -o $@ ${@:.o=.c} lsg1.o: lsg.c lsg.h $(CC) -g -DSTAGE1 -Wall -g -c $< -o $@ %.o: %.c $(CC) -Wall -I. -g -c -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 $@ $^ # web html := $(addprefix web/, $(addsuffix .html, \ index lopsub-api lopsubgen.1 lopsubex.1 $(m4_man_pages))) $(html): $(addprefix web/, $(addsuffix .html, header footer)) www: $(html) web/lopsub-api.html: lopsub.h.m4 $(M4) -DOUTPUT_MODE=HTML web/header.html $(gendoc) \ $< web/footer.html > $@ web/index.html: web/lopsub.7.html $(LN) -s $(notdir $<) $@ web/%.html: % $(CP) web/header.html $@ $(GROFF) -m man -Thtml $< | sed -e '1,/^/d' >> $@ install: liblopsub.a lopsub.7 $(INSTALL) -d $(PREFIX)/lib $(PREFIX)/include $(PREFIX)/man/man1 \ $(PREFIX)/man/man5 $(PREFIX)/man/man7 $(PREFIX)/bin $(INSTALL) -m 755 liblopsub.a $(PREFIX)/lib $(INSTALL) -m 755 lopsubgen $(PREFIX)/bin $(INSTALL) -m 644 lopsub.h $(PREFIX)/include $(INSTALL) -m 644 lopsub-internal.h $(PREFIX)/include $(INSTALL) -m 644 lopsubgen.1 $(PREFIX)/man/man1 $(INSTALL) -m 644 lopsub-suite.5 $(PREFIX)/man/man5 $(INSTALL) -m 644 lopsub.7 $(PREFIX)/man/man7 clean: $(RM) $(all) $(html) *.o *.man *.lsg.c *.lsg.h \ lopsubgen.c config_file.c lopsubgen-stage1 \ lopsub.h lopsub.7 lopsub-suite.5 version.c