[libvirt] [PATCH] Quieten build & ensure API build scripts exit with non-zero status

From: "Daniel P. Berrange" <berrange@redhat.com> The current API build scripts will continue and exit with a zero status even if they find problems. This has been the cause of many build problems, or hidden build errors, in the past. Change the scripts so they always exit with a non-zero status for any problems they do not understand. Also turn off all debug output by default so they respect $(AM_V_GEN) * docs/Makefile.am: Use $(AM_V_GEN) for API/HTML scripts * docs/apibuild.py, python/generator.py: Exit with non-zero status if problems are found. Also be silent, not outputting any debug messages. * src/Makefile.am: Use $(AM_V_GEN) for ESX generator * python/Makefile.am: Tweak rule --- docs/Makefile.am | 11 ++---- docs/apibuild.py | 95 ++++++++++++++++++++++++++++++-------------------- python/Makefile.am | 6 ++-- python/generator.py | 16 +++++--- src/Makefile.am | 2 +- 5 files changed, 75 insertions(+), 55 deletions(-) diff --git a/docs/Makefile.am b/docs/Makefile.am index 7ff94a0..4ba6b9d 100644 --- a/docs/Makefile.am +++ b/docs/Makefile.am @@ -153,21 +153,18 @@ internals/%.html.tmp: internals/%.html.in subsite.xsl page.xsl sitemap.html.in html/index.html: libvirt-api.xml newapi.xsl page.xsl sitemap.html.in - -@if [ -x $(XSLTPROC) ] ; then \ - echo "Rebuilding the HTML pages from the XML API" ; \ + $(AM_V_GEN)if [ -x $(XSLTPROC) ] ; then \ $(XSLTPROC) --nonet -o $(srcdir)/ \ - $(srcdir)/newapi.xsl $(srcdir)/libvirt-api.xml ; fi - -@if test -x $(XMLLINT) && test -x $(XMLCATALOG) ; then \ + $(srcdir)/newapi.xsl $(srcdir)/libvirt-api.xml ; fi ; \ + if test -x $(XMLLINT) && test -x $(XMLCATALOG) ; then \ if $(XMLCATALOG) '$(XML_CATALOG_FILE)' "-//W3C//DTD XHTML 1.0 Strict//EN" \ > /dev/null ; then \ - echo "Validating the resulting XHTML pages" ; \ SGML_CATALOG_FILES='$(XML_CATALOG_FILE)' \ $(XMLLINT) --catalogs --nonet --valid --noout $(srcdir)/html/*.html ; \ else echo "missing XHTML1 DTD" ; fi ; fi $(addprefix $(srcdir)/,$(devhelphtml)): $(srcdir)/libvirt-api.xml $(devhelpxsl) - -@echo Rebuilding devhelp files - -@if [ -x $(XSLTPROC) ] ; then \ + $(AM_V_GEN)if [ -x $(XSLTPROC) ] ; then \ $(XSLTPROC) --nonet -o $(srcdir)/devhelp/ \ $(top_srcdir)/docs/devhelp/devhelp.xsl $(srcdir)/libvirt-api.xml ; fi diff --git a/docs/apibuild.py b/docs/apibuild.py index f31a853..cb273dc 100755 --- a/docs/apibuild.py +++ b/docs/apibuild.py @@ -11,6 +11,8 @@ import os, sys import string import glob +quiet=1 +warnings=0 debug=0 debugsym=None @@ -95,7 +97,7 @@ class identifier: self.conditionals = None else: self.conditionals = conditionals[:] - if self.name == debugsym: + if self.name == debugsym and not quiet: print "=> define %s : %s" % (debugsym, (module, type, info, extra, conditionals)) @@ -155,7 +157,7 @@ class identifier: def update(self, header, module, type = None, info = None, extra=None, conditionals=None): - if self.name == debugsym: + if self.name == debugsym and not quiet: print "=> update %s : %s" % (debugsym, (module, type, info, extra, conditionals)) if header != None and self.header == None: @@ -203,7 +205,7 @@ class index: if d != None and name != None and type != None: self.references[name] = d - if name == debugsym: + if name == debugsym and not quiet: print "New ref: %s" % (d) return d @@ -244,9 +246,9 @@ class index: elif type == "macro": self.macros[name] = d else: - print "Unable to register type ", type + self.warning("Unable to register type ", type) - if name == debugsym: + if name == debugsym and not quiet: print "New symbol: %s" % (d) return d @@ -260,8 +262,8 @@ class index: if self.macros.has_key(id): del self.macros[id] if self.functions.has_key(id): - print "function %s from %s redeclared in %s" % ( - id, self.functions[id].header, idx.functions[id].header) + self.warning("function %s from %s redeclared in %s" % ( + id, self.functions[id].header, idx.functions[id].header)) else: self.functions[id] = idx.functions[id] self.identifiers[id] = idx.functions[id] @@ -273,15 +275,15 @@ class index: if self.macros.has_key(id): del self.macros[id] if self.variables.has_key(id): - print "variable %s from %s redeclared in %s" % ( - id, self.variables[id].header, idx.variables[id].header) + self.warning("variable %s from %s redeclared in %s" % ( + id, self.variables[id].header, idx.variables[id].header)) else: self.variables[id] = idx.variables[id] self.identifiers[id] = idx.variables[id] for id in idx.structs.keys(): if self.structs.has_key(id): - print "struct %s from %s redeclared in %s" % ( - id, self.structs[id].header, idx.structs[id].header) + self.warning("struct %s from %s redeclared in %s" % ( + id, self.structs[id].header, idx.structs[id].header)) else: self.structs[id] = idx.structs[id] self.identifiers[id] = idx.structs[id] @@ -294,8 +296,8 @@ class index: self.identifiers[id] = idx.unions[id] for id in idx.typedefs.keys(): if self.typedefs.has_key(id): - print "typedef %s from %s redeclared in %s" % ( - id, self.typedefs[id].header, idx.typedefs[id].header) + self.warning("typedef %s from %s redeclared in %s" % ( + id, self.typedefs[id].header, idx.typedefs[id].header)) else: self.typedefs[id] = idx.typedefs[id] self.identifiers[id] = idx.typedefs[id] @@ -311,15 +313,15 @@ class index: if self.enums.has_key(id): continue if self.macros.has_key(id): - print "macro %s from %s redeclared in %s" % ( - id, self.macros[id].header, idx.macros[id].header) + self.warning("macro %s from %s redeclared in %s" % ( + id, self.macros[id].header, idx.macros[id].header)) else: self.macros[id] = idx.macros[id] self.identifiers[id] = idx.macros[id] for id in idx.enums.keys(): if self.enums.has_key(id): - print "enum %s from %s redeclared in %s" % ( - id, self.enums[id].header, idx.enums[id].header) + self.warning("enum %s from %s redeclared in %s" % ( + id, self.enums[id].header, idx.enums[id].header)) else: self.enums[id] = idx.enums[id] self.identifiers[id] = idx.enums[id] @@ -330,10 +332,10 @@ class index: # check that function condition agrees with header if idx.functions[id].conditionals != \ self.functions[id].conditionals: - print "Header condition differs from Function for %s:" \ - % id - print " H: %s" % self.functions[id].conditionals - print " C: %s" % idx.functions[id].conditionals + self.warning("Header condition differs from Function for %s:" \ + % id) + self.warning(" H: %s" % self.functions[id].conditionals) + self.warning(" C: %s" % idx.functions[id].conditionals) up = idx.functions[id] self.functions[id].update(None, up.module, up.type, up.info, up.extra) # else: @@ -356,12 +358,13 @@ class index: def analyze(self): - self.analyze_dict("functions", self.functions) - self.analyze_dict("variables", self.variables) - self.analyze_dict("structs", self.structs) - self.analyze_dict("unions", self.unions) - self.analyze_dict("typedefs", self.typedefs) - self.analyze_dict("macros", self.macros) + if not quiet: + self.analyze_dict("functions", self.functions) + self.analyze_dict("variables", self.variables) + self.analyze_dict("structs", self.structs) + self.analyze_dict("unions", self.unions) + self.analyze_dict("typedefs", self.typedefs) + self.analyze_dict("macros", self.macros) class CLexer: """A lexer for the C language, tokenize the input by reading and @@ -621,6 +624,8 @@ class CParser: info, extra, self.conditionals) def warning(self, msg): + global warnings + warnings = warnings + 1 if self.no_error: return print msg @@ -1802,7 +1807,8 @@ class CParser: return token def parse(self): - self.warning("Parsing %s" % (self.filename)) + if not quiet: + print "Parsing %s" % (self.filename) token = self.token() while token != None: if token[0] == 'name': @@ -1869,7 +1875,8 @@ class docBuilder: pass def analyze(self): - print "Project %s : %d headers, %d modules" % (self.name, len(self.headers.keys()), len(self.modules.keys())) + if not quiet: + print "Project %s : %d headers, %d modules" % (self.name, len(self.headers.keys()), len(self.modules.keys())) self.idx.analyze() def scanHeaders(self): @@ -1995,7 +2002,7 @@ class docBuilder: else: output.write(" <field name='%s' type='%s' info='%s'/>\n" % (field[1] , field[0], desc)) except: - print "Failed to serialize struct %s" % (name) + self.warning("Failed to serialize struct %s" % (name)) output.write(" </struct>\n") else: output.write("/>\n"); @@ -2023,7 +2030,7 @@ class docBuilder: def serialize_function(self, output, name): id = self.idx.functions[name] - if name == debugsym: + if name == debugsym and not quiet: print "=>", id output.write(" <%s name='%s' file='%s' module='%s'>\n" % (id.type, @@ -2059,7 +2066,7 @@ class docBuilder: output.write(" <arg name='%s' type='%s' info='%s'/>\n" % (param[1], param[0], escape(param[2]))) self.indexString(name, param[2]) except: - print "Failed to save function %s info: " % name, `id.info` + self.warning("Failed to save function %s info: " % name, `id.info`) output.write(" </%s>\n" % (id.type)) def serialize_exports(self, output, file): @@ -2074,7 +2081,7 @@ class docBuilder: escape(dict.info[data]), string.lower(data))) except: - print "Header %s lacks a %s description" % (module, data) + self.warning("Header %s lacks a %s description" % (module, data)) if dict.info.has_key('Description'): desc = dict.info['Description'] if string.find(desc, "DEPRECATED") != -1: @@ -2287,7 +2294,8 @@ class docBuilder: def serialize(self): filename = "%s/%s-api.xml" % (self.path, self.name) - print "Saving XML description %s" % (filename) + if not quiet: + print "Saving XML description %s" % (filename) output = open(filename, "w") output.write('<?xml version="1.0" encoding="ISO-8859-1"?>\n') output.write("<api name='%s'>\n" % self.name) @@ -2323,7 +2331,8 @@ class docBuilder: output.close() filename = "%s/%s-refs.xml" % (self.path, self.name) - print "Saving XML Cross References %s" % (filename) + if not quiet: + print "Saving XML Cross References %s" % (filename) output = open(filename, "w") output.write('<?xml version="1.0" encoding="ISO-8859-1"?>\n') output.write("<apirefs name='%s'>\n" % self.name) @@ -2336,7 +2345,8 @@ def rebuild(): builder = None srcdir = os.environ["srcdir"] if glob.glob(srcdir + "/../src/libvirt.c") != [] : - print "Rebuilding API description for libvirt" + if not quiet: + print "Rebuilding API description for libvirt" dirs = [srcdir + "/../src", srcdir + "/../src/util", srcdir + "/../include/libvirt"] @@ -2344,12 +2354,13 @@ def rebuild(): dirs.append("../include/libvirt") builder = docBuilder("libvirt", srcdir, dirs, []) elif glob.glob("src/libvirt.c") != [] : - print "Rebuilding API description for libvirt" + if not quiet: + print "Rebuilding API description for libvirt" builder = docBuilder("libvirt", srcdir, ["src", "src/util", "include/libvirt"], []) else: - print "rebuild() failed, unable to guess the module" + self.warning("rebuild() failed, unable to guess the module") return None builder.scan() builder.analyze() @@ -2368,5 +2379,13 @@ if __name__ == "__main__": if len(sys.argv) > 1: debug = 1 parse(sys.argv[1]) + if warnings > 0: + sys.exit(2) + else: + sys.exit(0) else: rebuild() + if warnings > 0: + sys.exit(2) + else: + sys.exit(0) diff --git a/python/Makefile.am b/python/Makefile.am index 0edb3e4..a4c9a6b 100644 --- a/python/Makefile.am +++ b/python/Makefile.am @@ -53,11 +53,11 @@ GENERATED= libvirt-export.c \ libvirt.h \ libvirt.py -generated.stamp: $(srcdir)/$(GENERATE) $(API_DESC) - $(PYTHON) $(srcdir)/$(GENERATE) $(PYTHON) +$(GENERATE).stamp: $(srcdir)/$(GENERATE) $(API_DESC) + $(AM_V_GEN)$(PYTHON) $(srcdir)/$(GENERATE) $(PYTHON) && \ touch $@ -$(GENERATED): generated.stamp +$(GENERATED): $(GENERATE).stamp $(libvirtmod_la_OBJECTS): $(GENERATED) diff --git a/python/generator.py b/python/generator.py index c27ff73..d3a3616 100755 --- a/python/generator.py +++ b/python/generator.py @@ -11,6 +11,8 @@ import sys import string import re +quiet=1 + if __name__ == "__main__": # launched as a script srcPref = os.path.dirname(sys.argv[0]) @@ -617,7 +619,8 @@ def buildStubs(): sys.exit(1) n = len(functions.keys()) - print "Found %d functions in libvirt-api.xml" % (n) + if not quiet: + print "Found %d functions in libvirt-api.xml" % (n) py_types['pythonObject'] = ('O', "pythonObject", "pythonObject", "pythonObject") try: @@ -629,8 +632,8 @@ def buildStubs(): except IOError, msg: print file, ":", msg - - print "Found %d functions in libvirt-override-api.xml" % ( + if not quiet: + print "Found %d functions in libvirt-override-api.xml" % ( len(functions.keys()) - n) nb_wrap = 0 failed = 0 @@ -662,20 +665,21 @@ def buildStubs(): export.close() wrapper.close() - print "Generated %d wrapper functions" % nb_wrap + if not quiet: + print "Generated %d wrapper functions" % nb_wrap if unknown_types: print "Missing type converters: " for type in unknown_types.keys(): print "%s:%d " % (type, len(unknown_types[type])), - print - for f in functions_failed: print "ERROR: failed %s" % f if failed > 0: return -1 + if len(unknown_types) > 0: + return -1 return 0 ####################################################################### diff --git a/src/Makefile.am b/src/Makefile.am index 54b1ca0..875a43d 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -796,7 +796,7 @@ endif BUILT_SOURCES += $(ESX_DRIVER_GENERATED) $(ESX_DRIVER_GENERATED): $(srcdir)/esx/esx_vi_generator.input $(srcdir)/esx/esx_vi_generator.py - -srcdir=$(srcdir) $(srcdir)/esx/esx_vi_generator.py + $(AM_V_GEN)srcdir=$(srcdir) $(srcdir)/esx/esx_vi_generator.py if WITH_ESX if WITH_DRIVER_MODULES -- 1.7.6

2011/7/19 Daniel P. Berrange <berrange@redhat.com>:
From: "Daniel P. Berrange" <berrange@redhat.com>
The current API build scripts will continue and exit with a zero status even if they find problems. This has been the cause of many build problems, or hidden build errors, in the past. Change the scripts so they always exit with a non-zero status for any problems they do not understand. Also turn off all debug output by default so they respect $(AM_V_GEN)
* docs/Makefile.am: Use $(AM_V_GEN) for API/HTML scripts * docs/apibuild.py, python/generator.py: Exit with non-zero status if problems are found. Also be silent, not outputting any debug messages. * src/Makefile.am: Use $(AM_V_GEN) for ESX generator * python/Makefile.am: Tweak rule --- docs/Makefile.am | 11 ++---- docs/apibuild.py | 95 ++++++++++++++++++++++++++++++-------------------- python/Makefile.am | 6 ++-- python/generator.py | 16 +++++--- src/Makefile.am | 2 +- 5 files changed, 75 insertions(+), 55 deletions(-)
My first review still applies https://www.redhat.com/archives/libvir-list/2011-July/msg00139.html which said ACK with comments on some stylistic things. -- Matthias Bolte http://photron.blogspot.com

On Tue, Jul 19, 2011 at 02:29:04PM +0200, Matthias Bolte wrote:
2011/7/19 Daniel P. Berrange <berrange@redhat.com>:
From: "Daniel P. Berrange" <berrange@redhat.com>
The current API build scripts will continue and exit with a zero status even if they find problems. This has been the cause of many build problems, or hidden build errors, in the past. Change the scripts so they always exit with a non-zero status for any problems they do not understand. Also turn off all debug output by default so they respect $(AM_V_GEN)
* docs/Makefile.am: Use $(AM_V_GEN) for API/HTML scripts * docs/apibuild.py, python/generator.py: Exit with non-zero status if problems are found. Also be silent, not outputting any debug messages. * src/Makefile.am: Use $(AM_V_GEN) for ESX generator * python/Makefile.am: Tweak rule --- docs/Makefile.am | 11 ++---- docs/apibuild.py | 95 ++++++++++++++++++++++++++++++-------------------- python/Makefile.am | 6 ++-- python/generator.py | 16 +++++--- src/Makefile.am | 2 +- 5 files changed, 75 insertions(+), 55 deletions(-)
My first review still applies
https://www.redhat.com/archives/libvir-list/2011-July/msg00139.html
which said ACK with comments on some stylistic things.
Opps, missed that. I have pushed with the style changes you suggested Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|

On 07/19/2011 06:20 AM, Daniel P. Berrange wrote:
* docs/Makefile.am: Use $(AM_V_GEN) for API/HTML scripts * docs/apibuild.py, python/generator.py: Exit with non-zero status if problems are found. Also be silent, not outputting any debug messages. * src/Makefile.am: Use $(AM_V_GEN) for ESX generator * python/Makefile.am: Tweak rule --- docs/Makefile.am | 11 ++---- docs/apibuild.py | 95 ++++++++++++++++++++++++++++++-------------------- python/Makefile.am | 6 ++-- python/generator.py | 16 +++++--- src/Makefile.am | 2 +- 5 files changed, 75 insertions(+), 55 deletions(-)
diff --git a/docs/Makefile.am b/docs/Makefile.am index 7ff94a0..4ba6b9d 100644 --- a/docs/Makefile.am +++ b/docs/Makefile.am @@ -153,21 +153,18 @@ internals/%.html.tmp: internals/%.html.in subsite.xsl page.xsl sitemap.html.in
html/index.html: libvirt-api.xml newapi.xsl page.xsl sitemap.html.in - -@if [ -x $(XSLTPROC) ] ; then \ - echo "Rebuilding the HTML pages from the XML API" ; \ + $(AM_V_GEN)if [ -x $(XSLTPROC) ] ; then \ $(XSLTPROC) --nonet -o $(srcdir)/ \ - $(srcdir)/newapi.xsl $(srcdir)/libvirt-api.xml ; fi - -@if test -x $(XMLLINT)&& test -x $(XMLCATALOG) ; then \ + $(srcdir)/newapi.xsl $(srcdir)/libvirt-api.xml ; fi ; \ + if test -x $(XMLLINT)&& test -x $(XMLCATALOG) ; then \
This is a subtle semantic change. Previously, if the first $(XSLTPROC) run failed with non-zero status, the second run wasn't even attempted (make quits as soon as it encounters a complete failing command, and since there was no ; after the fi, the first if was complete). Now, the XMLLINT action is attempted no matter whether the XSLTPROC failed. Do we need this followup to restore original semantics? diff --git i/docs/Makefile.am w/docs/Makefile.am index 4ba6b9d..de649fe 100644 --- i/docs/Makefile.am +++ w/docs/Makefile.am @@ -155,7 +155,7 @@ internals/%.html.tmp: internals/%.html.in subsite.xsl page.xsl sitemap.html.in html/index.html: libvirt-api.xml newapi.xsl page.xsl sitemap.html.in $(AM_V_GEN)if [ -x $(XSLTPROC) ] ; then \ $(XSLTPROC) --nonet -o $(srcdir)/ \ - $(srcdir)/newapi.xsl $(srcdir)/libvirt-api.xml ; fi ; \ + $(srcdir)/newapi.xsl $(srcdir)/libvirt-api.xml ; fi && \ if test -x $(XMLLINT) && test -x $(XMLCATALOG) ; then \ if $(XMLCATALOG) '$(XML_CATALOG_FILE)' "-//W3C//DTD XHTML 1.0 Strict//EN" \ > /dev/null ; then \ -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org

On Tue, Jul 19, 2011 at 07:13:46AM -0600, Eric Blake wrote:
On 07/19/2011 06:20 AM, Daniel P. Berrange wrote:
* docs/Makefile.am: Use $(AM_V_GEN) for API/HTML scripts * docs/apibuild.py, python/generator.py: Exit with non-zero status if problems are found. Also be silent, not outputting any debug messages. * src/Makefile.am: Use $(AM_V_GEN) for ESX generator * python/Makefile.am: Tweak rule --- docs/Makefile.am | 11 ++---- docs/apibuild.py | 95 ++++++++++++++++++++++++++++++-------------------- python/Makefile.am | 6 ++-- python/generator.py | 16 +++++--- src/Makefile.am | 2 +- 5 files changed, 75 insertions(+), 55 deletions(-)
diff --git a/docs/Makefile.am b/docs/Makefile.am index 7ff94a0..4ba6b9d 100644 --- a/docs/Makefile.am +++ b/docs/Makefile.am @@ -153,21 +153,18 @@ internals/%.html.tmp: internals/%.html.in subsite.xsl page.xsl sitemap.html.in
html/index.html: libvirt-api.xml newapi.xsl page.xsl sitemap.html.in - -@if [ -x $(XSLTPROC) ] ; then \ - echo "Rebuilding the HTML pages from the XML API" ; \ + $(AM_V_GEN)if [ -x $(XSLTPROC) ] ; then \ $(XSLTPROC) --nonet -o $(srcdir)/ \ - $(srcdir)/newapi.xsl $(srcdir)/libvirt-api.xml ; fi - -@if test -x $(XMLLINT)&& test -x $(XMLCATALOG) ; then \ + $(srcdir)/newapi.xsl $(srcdir)/libvirt-api.xml ; fi ; \ + if test -x $(XMLLINT)&& test -x $(XMLCATALOG) ; then \
This is a subtle semantic change.
Previously, if the first $(XSLTPROC) run failed with non-zero status, the second run wasn't even attempted (make quits as soon as it encounters a complete failing command, and since there was no ; after the fi, the first if was complete). Now, the XMLLINT action is attempted no matter whether the XSLTPROC failed.
Do we need this followup to restore original semantics?
diff --git i/docs/Makefile.am w/docs/Makefile.am index 4ba6b9d..de649fe 100644 --- i/docs/Makefile.am +++ w/docs/Makefile.am @@ -155,7 +155,7 @@ internals/%.html.tmp: internals/%.html.in subsite.xsl page.xsl sitemap.html.in html/index.html: libvirt-api.xml newapi.xsl page.xsl sitemap.html.in $(AM_V_GEN)if [ -x $(XSLTPROC) ] ; then \ $(XSLTPROC) --nonet -o $(srcdir)/ \ - $(srcdir)/newapi.xsl $(srcdir)/libvirt-api.xml ; fi ; \ + $(srcdir)/newapi.xsl $(srcdir)/libvirt-api.xml ; fi && \ if test -x $(XMLLINT) && test -x $(XMLCATALOG) ; then \ if $(XMLCATALOG) '$(XML_CATALOG_FILE)' "-//W3C//DTD XHTML 1.0 Strict//EN" \ > /dev/null ; then \
ACK. Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|

On 07/19/2011 07:23 AM, Daniel P. Berrange wrote:
- $(srcdir)/newapi.xsl $(srcdir)/libvirt-api.xml ; fi - -@if test -x $(XMLLINT)&& test -x $(XMLCATALOG) ; then \ + $(srcdir)/newapi.xsl $(srcdir)/libvirt-api.xml ; fi ; \ + if test -x $(XMLLINT)&& test -x $(XMLCATALOG) ; then \
This is a subtle semantic change.
+++ w/docs/Makefile.am @@ -155,7 +155,7 @@ internals/%.html.tmp: internals/%.html.in subsite.xsl page.xsl sitemap.html.in html/index.html: libvirt-api.xml newapi.xsl page.xsl sitemap.html.in $(AM_V_GEN)if [ -x $(XSLTPROC) ] ; then \ $(XSLTPROC) --nonet -o $(srcdir)/ \ - $(srcdir)/newapi.xsl $(srcdir)/libvirt-api.xml ; fi ; \ + $(srcdir)/newapi.xsl $(srcdir)/libvirt-api.xml ; fi&& \ if test -x $(XMLLINT)&& test -x $(XMLCATALOG) ; then \ if $(XMLCATALOG) '$(XML_CATALOG_FILE)' "-//W3C//DTD XHTML 1.0 Strict//EN" \
/dev/null ; then \
ACK.
Pushed, along with a .gitignore update to cover the fact that the .stamp file in the python directory changed names. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org
participants (3)
-
Daniel P. Berrange
-
Eric Blake
-
Matthias Bolte