* Re: mdocml: Switch to autogenerated dependency rules; they are less
[not found] <201408050527.s755RG1I009029@krisdoz.my.domain>
@ 2014-08-05 9:50 ` Kristaps Dzonsons
2014-08-05 9:56 ` Kristaps Dzonsons
2014-08-05 11:32 ` Ingo Schwarze
0 siblings, 2 replies; 3+ messages in thread
From: Kristaps Dzonsons @ 2014-08-05 9:50 UTC (permalink / raw)
To: discuss, Ingo Schwarze
On 05/08/2014 07:27, schwarze@mdocml.bsd.lv wrote:
> Log Message:
> -----------
> Switch to autogenerated dependency rules; they are less error-prone.
> Provide a maintainer target to regenerate them.
>
> Modified Files:
> --------------
> mdocml:
> Makefile
>
> Added Files:
> -----------
> mdocml:
> Makefile.depend
>
Ingo,
I'm afraid this breaks the build for gmake systems (Linux, Mac, etc.),
which have different "include" syntax. To GNU-ify it, one would need to
patch the Makefile as follows (the dash before "include" can be omitted
entirely, as well):
Index: Makefile
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/Makefile,v
retrieving revision 1.430
diff -u -p -u -r1.430 Makefile
--- Makefile 5 Aug 2014 05:48:56 -0000 1.430
+++ Makefile 5 Aug 2014 08:49:41 -0000
@@ -369,7 +369,7 @@ install: base-install $(INSTALL_TARGETS)
www: $(WWW_OBJS) $(WWW_MANS)
-.include "Makefile.depend"
+-include "Makefile.depend"
# === TARGETS CONTAINING SHELL COMMANDS ================================
Unfortunately, there's no portable way to do this. The POSIX document
for make only says that "include" is a vendor extension.
http://pubs.opengroup.org/onlinepubs/009695399/utilities/make.html
In the interests of history, I couldn't find the "include" statement in
V7 UNIX's "make" utility:
http://minnie.tuhs.org/cgi-bin/utree.pl?file=V7/usr/src/cmd/make
However, NetBSD's earliest inclusion of de Boor's pmake from 386BSD did:
http://cvsweb.netbsd.org/bsdweb.cgi/src/usr.bin/make/?only_with_tag=netbsd-0-8
Neat. Unfortunately, I can't find the original version of GNU make.
(Where are the originals for any GNU system?)
Since the Makefile.depend target would only be built in changing files,
which hopefully isn't often, and it already uses non-standard tools, and
moreover Makefile.depend is only 68 lines long, it might be best to just
inline it at the bottom of the file. This would, yes, clutter the
Makefile a bit, but would make things a lot easier for portability's sake.
(Apropos nothing, in looking at OpenBSD's make sources, it seems pretty
easy to add support for "-include", though the base "include" wouldn't
be: see the parse_as_special_line function. That still wouldn't solve
the problem for the other BSDs, unfortunately...)
Thoughts?
Best,
Kristaps
> Revision Data
> -------------
> --- /dev/null
> +++ Makefile.depend
> @@ -0,0 +1,68 @@
> +apropos.o: apropos.c config.h manpath.h mansearch.h
> +arch.o: arch.c config.h mdoc.h libmdoc.h arch.in
> +att.o: att.c config.h mdoc.h libmdoc.h att.in
> +cgi.o: cgi.c config.h mandoc.h mandoc_aux.h main.h manpath.h mansearch.h cgi.h
> +chars.o: chars.c config.h mandoc.h mandoc_aux.h libmandoc.h chars.in
> +compat_fgetln.o: compat_fgetln.c config.h
> +compat_getsubopt.o: compat_getsubopt.c config.h
> +compat_ohash.o: compat_ohash.c config.h
> +compat_reallocarray.o: compat_reallocarray.c config.h
> +compat_strcasestr.o: compat_strcasestr.c config.h
> +compat_strlcat.o: compat_strlcat.c config.h
> +compat_strlcpy.o: compat_strlcpy.c config.h
> +compat_strsep.o: compat_strsep.c config.h
> +demandoc.o: demandoc.c config.h man.h mdoc.h mandoc.h
> +eqn.o: eqn.c config.h mandoc.h mandoc_aux.h libmandoc.h libroff.h
> +eqn_html.o: eqn_html.c config.h mandoc.h out.h html.h
> +eqn_term.o: eqn_term.c config.h mandoc.h out.h term.h
> +html.o: html.c config.h mandoc.h mandoc_aux.h libmandoc.h out.h html.h main.h
> +lib.o: lib.c config.h mdoc.h libmdoc.h lib.in
> +main.o: main.c config.h mandoc.h mandoc_aux.h main.h mdoc.h man.h
> +man.o: man.c config.h man.h mandoc.h mandoc_aux.h libman.h libmandoc.h
> +man_hash.o: man_hash.c config.h man.h mandoc.h libman.h
> +man_html.o: man_html.c config.h mandoc.h mandoc_aux.h out.h html.h man.h main.h
> +man_macro.o: man_macro.c config.h man.h mandoc.h libmandoc.h libman.h
> +man_term.o: man_term.c config.h mandoc.h mandoc_aux.h out.h man.h term.h main.h
> +man_validate.o: man_validate.c config.h man.h mandoc.h mandoc_aux.h libman.h libmandoc.h
> +mandoc.o: mandoc.c config.h mandoc.h mandoc_aux.h libmandoc.h
> +mandoc_aux.o: mandoc_aux.c config.h mandoc.h mandoc_aux.h
> +mandocdb.o: mandocdb.c config.h mdoc.h man.h mandoc.h mandoc_aux.h manpath.h mansearch.h
> +manpage.o: manpage.c config.h manpath.h mansearch.h
> +manpath.o: manpath.c config.h mandoc_aux.h manpath.h
> +mansearch.o: mansearch.c config.h mandoc.h mandoc_aux.h manpath.h mansearch.h
> +mansearch_const.o: mansearch_const.c manpath.h mansearch.h
> +mdoc.o: mdoc.c config.h mdoc.h mandoc.h mandoc_aux.h libmdoc.h libmandoc.h
> +mdoc_argv.o: mdoc_argv.c config.h mdoc.h mandoc.h mandoc_aux.h libmdoc.h libmandoc.h
> +mdoc_hash.o: mdoc_hash.c config.h mdoc.h libmdoc.h
> +mdoc_html.o: mdoc_html.c config.h mandoc.h mandoc_aux.h out.h html.h mdoc.h main.h
> +mdoc_macro.o: mdoc_macro.c config.h mdoc.h mandoc.h libmdoc.h libmandoc.h
> +mdoc_man.o: mdoc_man.c config.h mandoc.h mandoc_aux.h out.h man.h mdoc.h main.h
> +mdoc_term.o: mdoc_term.c config.h mandoc.h mandoc_aux.h out.h term.h mdoc.h main.h
> +mdoc_validate.o: mdoc_validate.c config.h mdoc.h mandoc.h mandoc_aux.h libmdoc.h libmandoc.h
> +msec.o: msec.c config.h mandoc.h libmandoc.h msec.in
> +out.o: out.c config.h mandoc_aux.h mandoc.h out.h
> +preconv.o: preconv.c config.h
> +read.o: read.c config.h mandoc.h mandoc_aux.h libmandoc.h mdoc.h man.h main.h
> +roff.o: roff.c config.h mandoc.h mandoc_aux.h libroff.h libmandoc.h predefs.in
> +st.o: st.c config.h mdoc.h libmdoc.h st.in
> +tbl.o: tbl.c config.h mandoc.h mandoc_aux.h libmandoc.h libroff.h
> +tbl_data.o: tbl_data.c config.h mandoc.h mandoc_aux.h libmandoc.h libroff.h
> +tbl_html.o: tbl_html.c config.h mandoc.h out.h html.h
> +tbl_layout.o: tbl_layout.c config.h mandoc.h mandoc_aux.h libmandoc.h libroff.h
> +tbl_opts.o: tbl_opts.c config.h mandoc.h libmandoc.h libroff.h
> +tbl_term.o: tbl_term.c config.h mandoc.h out.h term.h
> +term.o: term.c config.h mandoc.h mandoc_aux.h out.h term.h main.h
> +term_ascii.o: term_ascii.c config.h mandoc.h mandoc_aux.h out.h term.h main.h
> +term_ps.o: term_ps.c config.h mandoc.h mandoc_aux.h out.h main.h term.h
> +tree.o: tree.c config.h mandoc.h mdoc.h man.h main.h
> +vol.o: vol.c config.h mdoc.h libmdoc.h vol.in
> +test-fgetln.o: test-fgetln.c
> +test-getsubopt.o: test-getsubopt.c
> +test-mmap.o: test-mmap.c
> +test-ohash.o: test-ohash.c
> +test-reallocarray.o: test-reallocarray.c
> +test-strcasestr.o: test-strcasestr.c
> +test-strlcat.o: test-strlcat.c
> +test-strlcpy.o: test-strlcpy.c
> +test-strptime.o: test-strptime.c
> +test-strsep.o: test-strsep.c
> Index: Makefile
> ===================================================================
> RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/Makefile,v
> retrieving revision 1.428
> retrieving revision 1.429
> diff -LMakefile -LMakefile -u -p -r1.428 -r1.429
> --- Makefile
> +++ Makefile
> @@ -127,81 +127,40 @@ TESTSRCS = test-fgetln.c \
> test-strptime.c \
> test-strsep.c
>
> -SRCS = LICENSE \
> - Makefile \
> - NEWS \
> - TODO \
> - apropos.1 \
> - apropos.c \
> +SRCS = apropos.c \
> arch.c \
> - arch.in \
> att.c \
> - att.in \
> cgi.c \
> - cgi.h.example \
> chars.c \
> - chars.in \
> compat_fgetln.c \
> compat_getsubopt.c \
> compat_ohash.c \
> - compat_ohash.h \
> compat_reallocarray.c \
> compat_strcasestr.c \
> compat_strlcat.c \
> compat_strlcpy.c \
> compat_strsep.c \
> - config.h.post \
> - config.h.pre \
> - configure \
> - demandoc.1 \
> demandoc.c \
> - eqn.7 \
> eqn.c \
> eqn_html.c \
> eqn_term.c \
> - example.style.css \
> - gmdiff \
> html.c \
> - html.h \
> lib.c \
> - lib.in \
> - libman.h \
> - libmandoc.h \
> - libmdoc.h \
> - libroff.h \
> main.c \
> - main.h \
> - makewhatis.8 \
> - man.7 \
> man.c \
> - man.cgi.8 \
> - man-cgi.css \
> - man.h \
> man_hash.c \
> man_html.c \
> man_macro.c \
> man_term.c \
> man_validate.c \
> - mandoc.1 \
> - mandoc.3 \
> mandoc.c \
> - mandoc.db.5 \
> - mandoc.h \
> mandoc_aux.c \
> - mandoc_aux.h \
> - mandoc_char.7 \
> - mandoc_html.3 \
> mandocdb.c \
> manpage.c \
> manpath.c \
> - manpath.h \
> - mansearch.3 \
> mansearch.c \
> - mansearch.h \
> mansearch_const.c \
> - mdoc.7 \
> mdoc.c \
> - mdoc.h \
> mdoc_argv.c \
> mdoc_hash.c \
> mdoc_html.c \
> @@ -210,20 +169,11 @@ SRCS = LICENSE \
> mdoc_term.c \
> mdoc_validate.c \
> msec.c \
> - msec.in \
> out.c \
> - out.h \
> - preconv.1 \
> preconv.c \
> - predefs.in \
> read.c \
> - roff.7 \
> roff.c \
> st.c \
> - st.in \
> - style.css \
> - tbl.3 \
> - tbl.7 \
> tbl.c \
> tbl_data.c \
> tbl_html.c \
> @@ -231,14 +181,67 @@ SRCS = LICENSE \
> tbl_opts.c \
> tbl_term.c \
> term.c \
> - term.h \
> term_ascii.c \
> term_ps.c \
> tree.c \
> vol.c \
> - vol.in \
> $(TESTSRCS)
>
> +DISTFILES = LICENSE \
> + Makefile \
> + Makefile.depend \
> + NEWS \
> + TODO \
> + apropos.1 \
> + arch.in \
> + att.in \
> + cgi.h.example \
> + chars.in \
> + compat_ohash.h \
> + config.h.post \
> + config.h.pre \
> + configure \
> + demandoc.1 \
> + eqn.7 \
> + example.style.css \
> + gmdiff \
> + html.h \
> + lib.in \
> + libman.h \
> + libmandoc.h \
> + libmdoc.h \
> + libroff.h \
> + main.h \
> + makewhatis.8 \
> + man-cgi.css \
> + man.7 \
> + man.cgi.8 \
> + man.h \
> + mandoc.1 \
> + mandoc.3 \
> + mandoc.db.5 \
> + mandoc.h \
> + mandoc_aux.h \
> + mandoc_char.7 \
> + mandoc_html.3 \
> + manpath.h \
> + mansearch.3 \
> + mansearch.h \
> + mdoc.7 \
> + mdoc.h \
> + msec.in \
> + out.h \
> + preconv.1 \
> + predefs.in \
> + roff.7 \
> + st.in \
> + style.css \
> + tbl.3 \
> + tbl.7 \
> + term.h \
> + vol.in \
> + $(SRCS)
> +
> LIBMAN_OBJS = man.o \
> man_hash.o \
> man_macro.o \
> @@ -280,40 +283,11 @@ COMPAT_OBJS = compat_fgetln.o \
> compat_strlcpy.o \
> compat_strsep.o
>
> -# === DEPENDENCY HANDLING ==============================================
> -
> -all: base-build $(BUILD_TARGETS)
> -
> -base-build: $(BASEBIN)
> -
> -db-build: $(DBBIN)
> -
> -cgi-build: $(CGIBIN)
> -
> -install: base-install $(INSTALL_TARGETS)
> -
> -arch.o: arch.in
> -att.o: att.in
> -chars.o: chars.in
> -lib.o: lib.in
> -msec.o: msec.in
> -roff.o: predefs.in
> -st.o: st.in
> -vol.o: vol.in
> -cgi.o: cgi.h
> -
> -$(LIBMAN_OBJS): libman.h
> -$(LIBMDOC_OBJS): libmdoc.h
> -$(LIBROFF_OBJS): libroff.h
> -$(LIBMANDOC_OBJS): mandoc.h mandoc_aux.h mdoc.h man.h libmandoc.h config.h
> -$(COMPAT_OBJS): config.h compat_ohash.h
> -
> MANDOC_HTML_OBJS = eqn_html.o \
> html.o \
> man_html.o \
> mdoc_html.o \
> tbl_html.o
> -$(MANDOC_HTML_OBJS): html.h
>
> MANDOC_MAN_OBJS = mdoc_man.o
>
> @@ -324,7 +298,6 @@ MANDOC_TERM_OBJS = eqn_term.o \
> term_ascii.o \
> term_ps.o \
> tbl_term.o
> -$(MANDOC_TERM_OBJS): term.h
>
> MANDOC_OBJS = $(MANDOC_HTML_OBJS) \
> $(MANDOC_MAN_OBJS) \
> @@ -332,31 +305,22 @@ MANDOC_OBJS = $(MANDOC_HTML_OBJS) \
> main.o \
> out.o \
> tree.o
> -$(MANDOC_OBJS): main.h mandoc.h mandoc_aux.h mdoc.h man.h config.h out.h
>
> MAKEWHATIS_OBJS = mandocdb.o mansearch_const.o manpath.o
> -$(MAKEWHATIS_OBJS): mansearch.h mandoc.h mandoc_aux.h \
> - mdoc.h man.h config.h manpath.h
>
> PRECONV_OBJS = preconv.o
> -$(PRECONV_OBJS): config.h
>
> APROPOS_OBJS = apropos.o mansearch.o mansearch_const.o manpath.o
> -$(APROPOS_OBJS): config.h mandoc.h mandoc_aux.h manpath.h mansearch.h
>
> CGI_OBJS = $(MANDOC_HTML_OBJS) \
> cgi.o \
> mansearch.o \
> mansearch_const.o \
> out.o
> -$(CGI_OBJS): main.h out.h config.h mandoc.h mandoc_aux.h \
> - manpath.h mansearch.h
>
> MANPAGE_OBJS = manpage.o mansearch.o mansearch_const.o manpath.o
> -$(MANPAGE_OBJS): config.h mandoc.h mandoc_aux.h manpath.h mansearch.h
>
> DEMANDOC_OBJS = demandoc.o
> -$(DEMANDOC_OBJS): config.h mandoc.h man.h mdoc.h
>
> WWW_MANS = apropos.1.html \
> demandoc.1.html \
> @@ -385,8 +349,22 @@ WWW_MANS = apropos.1.html \
> WWW_OBJS = mdocml.tar.gz \
> mdocml.sha256
>
> +# === DEPENDENCY HANDLING ==============================================
> +
> +all: base-build $(BUILD_TARGETS)
> +
> +base-build: $(BASEBIN)
> +
> +db-build: $(DBBIN)
> +
> +cgi-build: $(CGIBIN)
> +
> +install: base-install $(INSTALL_TARGETS)
> +
> www: $(WWW_OBJS) $(WWW_MANS)
>
> +.include "Makefile.depend"
> +
> # === TARGETS CONTAINING SHELL COMMANDS ================================
>
> clean:
> @@ -457,6 +435,12 @@ www-install: www
> $(INSTALL_DATA) mdocml.sha256 \
> $(DESTDIR)$(HTDOCDIR)/snapshots/mdocml-$(VERSION).sha256
>
> +Makefile.depend: $(SRCS) config.h Makefile
> + mkdep -f Makefile.depend $(CFLAGS) $(SRCS)
> + perl -e 'undef $$/; $$_ = <>; s|/usr/include/\S+||g; \
> + s|\\\n||g; s| +| |g; print;' Makefile.depend > Makefile.tmp
> + mv Makefile.tmp Makefile.depend
> +
> libmandoc.a: $(COMPAT_OBJS) $(LIBMANDOC_OBJS)
> $(AR) rs $@ $(COMPAT_OBJS) $(LIBMANDOC_OBJS)
>
> @@ -484,9 +468,9 @@ demandoc: $(DEMANDOC_OBJS) libmandoc.a
> mdocml.sha256: mdocml.tar.gz
> sha256 mdocml.tar.gz > $@
>
> -mdocml.tar.gz: $(SRCS)
> +mdocml.tar.gz: $(DISTFILES)
> mkdir -p .dist/mdocml-$(VERSION)/
> - $(INSTALL_SOURCE) $(SRCS) .dist/mdocml-$(VERSION)
> + $(INSTALL_SOURCE) $(DISTFILES) .dist/mdocml-$(VERSION)
> chmod 755 .dist/mdocml-$(VERSION)/configure
> ( cd .dist/ && tar zcf ../$@ mdocml-$(VERSION) )
> rm -rf .dist/
> --
> To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv
>
--
To unsubscribe send an email to discuss+unsubscribe@mdocml.bsd.lv
^ permalink raw reply [flat|nested] 3+ messages in thread