Re: [xml] Availability of libxm2-2.9.0 release candidate 1



On Tue, 14 Aug 2012, Daniel Veillard wrote:

 Okay, thanks ! seems to work fine.
My last annoyance ATM with makefiles is devhelp files being rebuilt
systematically, even on a just built tree or if running "make check"

 Any idea what might have introduced this ;-) ?

I believe some of my changes may be responsible, specifically the replacement of plain wildcards in the dependencies for libxml2-api.xml to GNU Make constructs that actually work :>

The problem there is that with an in-source build, one of the files matched by

        $(wildcard $(top_srcdir)/include/libxml/*.h)

is xmlversion.h, which is generated at configure time. Whoops!

I've rewritten that bit to filter out that particular file (and depend on xmlversion.h.in instead), but there's another problem:

If you regenerate libxml2-api.xml in an out-of-source build, apibuild.py does not see xmlversion.h, because the script runs in srcdir and that header only exists in builddir. So libxml2-api.xml then does not include anything about xmlversion.h.

Then, when you go to doc/devhelp/ and regenerate the HTML files, no libxml2-xmlversion.html file is generated. Whatever old one existed previously sticks around.

And when you go to install, it sees that libxml2-xmlversion.html is out of date (or missing), so it regenerates the HTML files.

Repeat ad infinitum :(

Two patches are attached to this message. The first one is another round of fixes/clean-up for the documentation build (including the above issue), as well as the tests under doc/examples/. The second one is an update of my earlier Autotools-obsolete-constructs patch.

This should make the devhelp rebuilds go away for in-source builds---let me know if not---but apibuild.py really needs to be updated so that it does the right thing in out-of-source builds.


Walk-through for libxml2-doc-example-fixes.patch:

doc/Makefile.am:

* Build what's in doc/ before doc/devhelp/, as the dependency graph flows
  that way

* Add "--path $(srcdir)" so that xsltproc can find DTDs in srcdir

* Replaced $(top_srcdir)/doc with an equivalent $(srcdir)

* Qualified libxml2-api.xml with $(srcdir) as it's always generated there

* Rewrote the dependencies for libxml2-api.xml so that xmlversion.h
  doesn't throw everything off

doc/devhelp/Makefile.am:

* Use Automake constructs to install the HTML files instead of an
  install-data-local rule

* Reorganized the file a bit (hello whitespace!)

* EXTRA_DIST doesn't need to list so many files now that dist_devhelp_DATA
  is being used

* Only print "Rebuilding devhelp files" if rebuilding is actually
  occurring

doc/examples/index.py:

* Make the "this file is auto-generated" banner more prominent

* Autotools updates: Use AM_CPPFLAGS/AM_CFLAGS instead of INCLUDES

* Got rid of DEPS as it's not needed (Automake already sees the dependency
  on libxml2.la by way of LDADD(S))

* Replaced LDADDS with LDADD, which is applied to all programs listed
  in the file. Since all the test programs have the same link
  dependencies, this way is more concise yet equivalent.

* Remove the *.tmp files via "make clean" instead of having the test
  programs do it themselves (more on this later)

* Invoke index.py in srcdir, as it pretty much needs to run there

* Restructured the index.html rule so that only the xmllint invocation is
  allowed to fail

* Use $(MKDIR_P) instead of $(mkinstalldirs), $(VAR) instead of @VAR@

* Remove symlinks for test?.xml in an out-of-source build

* Sort lists for neatness

* Better formatting for EXTRA_DIST and noinst_PROGRAMS variables

* Simplified the Automake bits printed for each program: *_LDFLAGS doesn't
  need to be specified as it's empty anyway, *_DEPENDENCIES is redundant,
  *_LDADD isn't needed due to the global LDADD

* Added a bit that symlinks in test?.xml from srcdir in out-of-source
  builds. This allows the reader4 test to read these files in the current
  directory, which ensures that the output always looks the same (i.e.
  does not contain references to srcdir)

* Don't hide the test program invocation (or else it's hard to tell which
  test failed), and don't use superfluous parentheses

* NOTE: If you check in these changes, be sure to run this script and also
  check in the updated files that it generates!

doc/examples/*.c:

* Updated the test: lines so that

  + "&&" is used to separate commands instead of ";" so that errors are
    not masked

  + reference files are qualified with $(srcdir)/

  + no "rm" takes place -- these are a problem because (1) if a test
    fails, it's useful to have the output file ready for inspection; (2)
    the "rm" invocation masks a potential non-zero exit status from diff

    (This is why I added the CLEANFILES line above)

doc/examples/io1.res:

* Updated this ref file so that the test passes. (This is correct, right?)

doc/examples/reader4.res:

* Changed this back to its original form, as the symlinking of test?.xml
  means this file no longer has to contain path prefixes on the filenames

doc/examples/testWriter.c:

* Changed the output filenames to *.tmp instead of *.res, partly for
  consistency, partly to not have to add special cases to CLEANFILES

doc/examples/xpath1.c:

* Removed the "./" prefix on the test invocation, which is redundant as
  index.py already adds one


Walk-through for libxml2-autotools-updates-2.patch:

Makefile.am, example/Makefile.am:

* Replaced the obsolete INCLUDES variable with AM_CPPFLAGS/AM_CFLAGS

acinclude.m4:

* autoupdate replaced AC_FD_CC with AS_MESSAGE_LOG_FD

autogen.sh:

* Added -Wall to the autoreconf invocation, which turned up a whole slew
  of warnings that are fixed by this patch

configure.in:

* Most of the changes are due to autoupdate, with subsequent manual
  tidying

* Note that autoupdate bumped the AC_PREREQ version from 2.59 to 2.68. If
  you normally use an older version of Autoconf, and everything works fine
  if you comment out that directive, feel free to bump down the version
  accordingly.

* Ensure that #include directives in C fragments always have no whitespace
  to the left of the '#' mark, as some preprocessors need that to be in
  the first column

example/Makefile.am:

* Don't need DEPS

* Use plain LDADD instead of LDADDS; if all programs in this file need to
  link against the same set of libraries, then this is all you need


--Daniel


--
Daniel Richard G. || danielg teragram com || Software Developer
Teragram Linguistic Technologies (a division of SAS)
http://www.teragram.com/

Attachment: libxml2-doc-example-fixes.patch
Description: Patch against git master

Attachment: libxml2-autotools-updates-2.patch
Description: Updated patch against git master



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]