Most of the tests are contained in the runtest
executable which
generally reads test cases from the test
directory and compares output
to files in the result
directory.
You can simply add new test cases and run runtest -u
to update the
results. If you debug test failures, it's also useful to execute
runtest -u
and then git diff result
to get a diff between actual and
expected results. You can restore the original results by running
git restore result
and git clean -xd result
.
The documentation and other generated files can be rebuilt by running
make -C doc rebuild
This requires xsltproc
, the DocBook stylesheets in your XML Catalog
and the libxml2 Python bindings to be installed, so it's best done on a
Linux system. On Debian/Ubuntu, try
apt install xsltproc python3-libxml2 docbook-xsl docbook-xml
doc/apibuild.py generates doc/libxml2-api.xml which is used to generate
- API documentation with XSLT stylesheets
- testapi.c with gentest.py
- Python bindings with python/generator.py
Man pages and HTML documentation for xmllint and xmlcatalog are generated with xsltproc and DocBook stylesheets.
See above for details and run make -C doc rebuild
.
Look for new warning messages and inspect changes for correctness before committing.
You can get started by running
git log --format='- %s (%an)' [previous-release-tag]..
Edit the version number in configure.ac
if you haven't done so already.
I'd recommend to build the tarball by running
make distcheck
which performs some useful checks as well.
Follow the instructions at https://wiki.gnome.org/MaintainersCorner/Releasing:
scp libxml2-[version].tar.xz master.gnome.org:
ssh master.gnome.org ftpadmin install libxml2-[version].tar.xz
Create an annotated tag and push it:
git tag -a [version] -m 'Release [version]'
git push origin [version]
Create a new GitLab release on https://gitlab.gnome.org/GNOME/libxml2/-/releases.
Announce the release on https://discourse.gnome.org under topics 'libxml2' and 'announcements'.
Unfortunately, libxml2 exposes many internal structs which makes some beneficial changes impossible without breaking the ABI.
The following changes are allowed (after careful consideration):
-
Appending members to structs which client code should never allocate directly. A notable example is xmlParserCtxt. Other structs like xmlError are allocated directly by client code and must not be changed.
-
Making a void function return a value.
-
Making functions accept const pointers unless it's a typedef for a callback.
-
Changing signedness of struct members or function arguments.
Note that the CI image is used for libxslt as well. First create a
GitLab access token with read_registry
and write_registry
permissions. Then run the following commands with the Dockerfile in the
.gitlab-ci directory:
docker login -u <username> -p <access_token> \
registry.gitlab.gnome.org
docker build -t registry.gitlab.gnome.org/gnome/libxml2 - \
< .gitlab-ci/Dockerfile
docker push registry.gitlab.gnome.org/gnome/libxml2