Thread: Change draft gmake control
I had to change the draft flag for SGML from 'gmake draft html' to 'gmake DRAFT=Y html'. Internally the code used to recurse with DRAFT=Y, but I found there is no way to exit the makefile after the recursion returned, so I had to use this new syntax. Though more cumbersome, it is more logical because DRAFT is really a modifier, not a rule itself. For example, 'gmake html draft' would never have worked. Patch attached and applied. -- Bruce Momjian bruce@momjian.us EnterpriseDB http://www.enterprisedb.com + If your life is a hard drive, Christ can be your backup. + Index: Makefile =================================================================== RCS file: /cvsroot/pgsql/doc/src/sgml/Makefile,v retrieving revision 1.91 diff -c -r1.91 Makefile *** Makefile 11 Jan 2007 00:02:39 -0000 1.91 --- Makefile 26 Jan 2007 22:19:58 -0000 *************** *** 64,70 **** ## Man pages ## ! .PHONY: man draft DEFAULTSECTION := $(sqlmansect_dummy) --- 64,70 ---- ## Man pages ## ! .PHONY: html man draft clean DEFAULTSECTION := $(sqlmansect_dummy) *************** *** 86,93 **** all: html - .PHONY: html - # This is run for all output formats because we need bookindex.sgml html: postgres.sgml $(ALLSGML) stylesheet.dsl @rm -f *.html --- 86,91 ---- *************** *** 95,101 **** ifeq ($(vpath_build), yes) @cp $(srcdir)/stylesheet.css . endif ! ifndef DRAFT # If not draft, re-run the this rule until HTML.index does not change @cmp -s HTML.index.start HTML.index || $(MAKE) $@ endif --- 93,99 ---- ifeq ($(vpath_build), yes) @cp $(srcdir)/stylesheet.css . endif ! ifneq ($(DRAFT), Y) # If not draft, re-run the this rule until HTML.index does not change @cmp -s HTML.index.start HTML.index || $(MAKE) $@ endif *************** *** 103,120 **** COLLATEINDEX := LC_ALL=C $(PERL) $(COLLATEINDEX) -f -g - # The draft rule calls gmake again and sets the DRAFT variable. - # This seems to be the only way to set gmake variables in a rule. - draft: - ifndef DRAFT - ifneq ($(MAKECMDGOALS), draft) - @$(MAKE) DRAFT="Y" $(MAKECMDGOALS) - else - # simulate $(MAKE) with no arguments - @$(MAKE) DRAFT="Y" all - endif - endif - # bookindex.sgml is required so there is a proper index for all output formats bookindex.sgml: HTML.index # create a dummy bookindex.html --- 101,106 ---- Index: docguide.sgml =================================================================== RCS file: /cvsroot/pgsql/doc/src/sgml/docguide.sgml,v retrieving revision 1.65 diff -c -r1.65 docguide.sgml *** docguide.sgml 11 Jan 2007 00:02:39 -0000 1.65 --- docguide.sgml 26 Jan 2007 22:19:59 -0000 *************** *** 546,552 **** stages. If you do not care about the index, and just want to proof-read the output, use <literal>draft</>: <screen> ! <prompt>doc/src/sgml$ </prompt><userinput>gmake draft html</userinput> </screen> </para> --- 546,552 ---- stages. If you do not care about the index, and just want to proof-read the output, use <literal>draft</>: <screen> ! <prompt>doc/src/sgml$ </prompt><userinput>gmake DRAFT=Y html</userinput> </screen> </para>
Bruce Momjian wrote: > I had to change the draft flag for SGML from 'gmake draft html' to > 'gmake DRAFT=Y html'. Internally the code used to recurse with > DRAFT=Y, but I found there is no way to exit the makefile after the > recursion returned, exit 0 ? > so I had to use this new syntax. Though more > cumbersome, it is more logical because DRAFT is really a modifier, > not a rule itself. For example, 'gmake html draft' would never have > worked. What would have been the meaning of that command? Anyway, certainly you could write this to preserve the target: draft: $(MAKE) html DRAFT=Y -- Peter Eisentraut http://developer.postgresql.org/~petere/
Peter Eisentraut wrote: > Bruce Momjian wrote: > > I had to change the draft flag for SGML from 'gmake draft html' to > > 'gmake DRAFT=Y html'. Internally the code used to recurse with > > DRAFT=Y, but I found there is no way to exit the makefile after the > > recursion returned, > > exit 0 ? I tried that, but it did nothing. Of course exit 1 works, but throws an error, and exec exit 0 doesn't work either, throws an error. > > so I had to use this new syntax. Though more > > cumbersome, it is more logical because DRAFT is really a modifier, > > not a rule itself. For example, 'gmake html draft' would never have > > worked. > > What would have been the meaning of that command? Nothing, but the point is that draft is a modifier and it isn't clear from that syntax that draft is a modifier and not a target. > Anyway, certainly you could write this to preserve the target: > > draft: > $(MAKE) html DRAFT=Y The problem is that the 'gmake' recursion is done, but then returns and runs the hhml again, so 'gmake draft html' calls "$(MAKE) html DRAFT=Y" and on return from that, the html is called again and rebuilds, so it isn't really draft. -- Bruce Momjian bruce@momjian.us EnterpriseDB http://www.enterprisedb.com + If your life is a hard drive, Christ can be your backup. +
Bruce Momjian wrote: > Nothing, but the point is that draft is a modifier and it isn't clear > > >from that syntax that draft is a modifier and not a target. > > > > Anyway, certainly you could write this to preserve the target: > > > > draft: > > $(MAKE) html DRAFT=Y > > The problem is that the 'gmake' recursion is done, but then returns > and runs the hhml again, so 'gmake draft html' calls "$(MAKE) html > DRAFT=Y" and on return from that, the html is called again and > rebuilds, so it isn't really draft. Well, "gmake draft html" doesn't make any sense anyway, but "gmake draft" by itself does and the new way of writing it is significantly more cumbersome, so I request that this be fixed. -- Peter Eisentraut http://developer.postgresql.org/~petere/
Bruce Momjian <bruce@momjian.us> writes: > Peter Eisentraut wrote: >> Anyway, certainly you could write this to preserve the target: >> >> draft: >> $(MAKE) html DRAFT=Y > The problem is that the 'gmake' recursion is done, but then returns and > runs the hhml again, so 'gmake draft html' calls "$(MAKE) html DRAFT=Y" > and on return from that, the html is called again and rebuilds, so it > isn't really draft. No, the point is that "gmake draft" ought to work. I'm not sure where you came up with the idea that "gmake draft html" was a sane command, but it certainly wasn't what was proposed initially. regards, tom lane
Peter Eisentraut wrote: > Bruce Momjian wrote: > > Nothing, but the point is that draft is a modifier and it isn't clear > > > > >from that syntax that draft is a modifier and not a target. > > > > > > Anyway, certainly you could write this to preserve the target: > > > > > > draft: > > > $(MAKE) html DRAFT=Y > > > > The problem is that the 'gmake' recursion is done, but then returns > > and runs the hhml again, so 'gmake draft html' calls "$(MAKE) html > > DRAFT=Y" and on return from that, the html is called again and > > rebuilds, so it isn't really draft. > > Well, "gmake draft html" doesn't make any sense anyway, but "gmake > draft" by itself does and the new way of writing it is significantly > more cumbersome, so I request that this be fixed. Well, if 'draft' was only for html, I could see suggesting just 'gmake draft', but 'draft' can be used for Postscript and PDF too. -- Bruce Momjian bruce@momjian.us EnterpriseDB http://www.enterprisedb.com + If your life is a hard drive, Christ can be your backup. +
Bruce Momjian wrote: > > > Well, if 'draft' was only for html, I could see suggesting just 'gmake > draft', but 'draft' can be used for Postscript and PDF too. > The maybe have targets draft-html, draft-postscript and draft-pdf ? cheers andrew
Bruce Momjian <bruce@momjian.us> writes: > Well, if 'draft' was only for html, I could see suggesting just 'gmake > draft', but 'draft' can be used for Postscript and PDF too. But those aren't cases where saving some typing is useful (in fact, I'd bet money that no one will ever use them). Draft runs with html output are highly useful, and like Peter I think "make draft" ought to work for that. regards, tom lane
Tom Lane wrote: > Bruce Momjian <bruce@momjian.us> writes: > > Well, if 'draft' was only for html, I could see suggesting just 'gmake > > draft', but 'draft' can be used for Postscript and PDF too. > > But those aren't cases where saving some typing is useful (in fact, > I'd bet money that no one will ever use them). Draft runs with html > output are highly useful, and like Peter I think "make draft" ought > to work for that. OK, if that's what people want. Patch attached and applied, docs updated. -- Bruce Momjian bruce@momjian.us EnterpriseDB http://www.enterprisedb.com + If your life is a hard drive, Christ can be your backup. + Index: sgml/Makefile =================================================================== RCS file: /cvsroot/pgsql/doc/src/sgml/Makefile,v retrieving revision 1.93 diff -c -r1.93 Makefile *** sgml/Makefile 26 Jan 2007 23:51:39 -0000 1.93 --- sgml/Makefile 27 Jan 2007 22:33:17 -0000 *************** *** 99,104 **** --- 99,110 ---- endif + # The draft rule calls gmake again and sets the DRAFT variable. + # This seems to be the only way to set gmake variables in a rule. + draft: + @$(MAKE) DRAFT="Y" html + + COLLATEINDEX := LC_ALL=C $(PERL) $(COLLATEINDEX) -f -g # bookindex.sgml is required so there is a proper index for all output formats Index: sgml/docguide.sgml =================================================================== RCS file: /cvsroot/pgsql/doc/src/sgml/docguide.sgml,v retrieving revision 1.66 diff -c -r1.66 docguide.sgml *** sgml/docguide.sgml 26 Jan 2007 22:23:50 -0000 1.66 --- sgml/docguide.sgml 27 Jan 2007 22:33:17 -0000 *************** *** 546,552 **** stages. If you do not care about the index, and just want to proof-read the output, use <literal>draft</>: <screen> ! <prompt>doc/src/sgml$ </prompt><userinput>gmake DRAFT=Y html</userinput> </screen> </para> --- 546,552 ---- stages. If you do not care about the index, and just want to proof-read the output, use <literal>draft</>: <screen> ! <prompt>doc/src/sgml$ </prompt><userinput>gmake draft</userinput> </screen> </para>