discuss@mandoc.bsd.lv
 help / color / mirror / Atom feed
From: Kristaps Dzonsons <kristaps@bsd.lv>
To: discuss@mdocml.bsd.lv, Ingo Schwarze <schwarze@usta.de>
Subject: Re: mdocml: Switch to autogenerated dependency rules; they are less
Date: Tue, 05 Aug 2014 11:50:23 +0200	[thread overview]
Message-ID: <53E0A8DF.3000003@bsd.lv> (raw)
In-Reply-To: <201408050527.s755RG1I009029@krisdoz.my.domain>

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

       reply	other threads:[~2014-08-05  9:50 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <201408050527.s755RG1I009029@krisdoz.my.domain>
2014-08-05  9:50 ` Kristaps Dzonsons [this message]
2014-08-05  9:56   ` Kristaps Dzonsons
2014-08-05 11:32   ` Ingo Schwarze

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=53E0A8DF.3000003@bsd.lv \
    --to=kristaps@bsd.lv \
    --cc=discuss@mdocml.bsd.lv \
    --cc=schwarze@usta.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).