4ddd4cc68d
Add a section about updating the build files.
84 lines
3.3 KiB
Markdown
84 lines
3.3 KiB
Markdown
How to update a third party library to a newer version
|
|
======================================================
|
|
|
|
0. Introduction
|
|
---------------
|
|
|
|
wxWidgets includes several third party libraries, i.e. libraries which are
|
|
used by wxWidgets and distributed with it but which we don't maintain nor even
|
|
modify, inasmuch as possible, ourselves. These libraries are developed by
|
|
their maintainers and from time to time we need to replace the versions used
|
|
by wxWidgets with newer versions.
|
|
|
|
|
|
1. Submodules
|
|
-------------
|
|
|
|
All third party libraries are managed using Git submodules. This includes
|
|
3rdparty/catch and expat, jpeg, png, tiff and zlib subdirectories of src.
|
|
|
|
As always with submodules, updating a library involves updating its sources in
|
|
the submodule, pushing this submodule out and then committing the changes in
|
|
the top-level repository.
|
|
|
|
|
|
2. Updating the submodule
|
|
-------------------------
|
|
|
|
All submodules use `master` branch for the upstream master and `wx` for the
|
|
version used by wxWidgets. To update the latter, just merge the appropriate
|
|
commit from master into `wx`, e.g.
|
|
|
|
$ cd src/expat
|
|
$ git checkout wx
|
|
$ git merge R_x_y_z # For the latest x.y.z release
|
|
|
|
After resolving any conflicts, commit the result, test the build under MSW and
|
|
under Unix using `--disable-sys-libs` configure option, and push the updated
|
|
branch out. Notice that you may want to use the ssh GitHub repository URL
|
|
instead of the default (because more convenient for checking them out) HTTPS
|
|
one:
|
|
|
|
$ git push --set-upstream git@github.com:wxWidgets/libexpat.git wx
|
|
|
|
|
|
3. Generating build files (libexpat, libtiff)
|
|
---------------------------------------------
|
|
|
|
We include the generated build files of libexpat and libtiff. For libexpat run
|
|
`buildconf.sh`. For libtiff run `autogen.sh`. Commit the changes.
|
|
|
|
|
|
4. Updating the main repository
|
|
-------------------------------
|
|
|
|
If there are any changes to the source files used by the library, update the
|
|
corresponding `build/bakefiles/$lib.bkl` file (e.g. `expat.bkl` for Expat) and
|
|
rerun bakefile to regenerate most of the makefiles and project files. Currently
|
|
you will need to update `build/msw/wx_wx$lib.vcxproj{,.filters}` files
|
|
manually.
|
|
|
|
Commit these changes and the submodule and create a PR to test them as usual.
|
|
|
|
|
|
5. Special instructions for libpng
|
|
----------------------------------
|
|
|
|
We use a special hack for libpng as we want to prefix all its symbols with
|
|
`wx_` but don't want to use its build system which makes this easily possible
|
|
(perhaps we should, but for now we don't). So, when upgrading libpng, you need
|
|
to perform an extra step after merging the new version (and before committing
|
|
your changes):
|
|
|
|
Create a temporary build directory and run libpng configure from it using
|
|
`--with-libpng-prefix=wx_` option. Then run `make pnglibconf.h pngprefix.h`
|
|
to create these files in the build directory. Next, search for the line
|
|
containing `PNG_ZLIB_VERNUM` in the `pnglibconf.h` and set it to 0 to disable
|
|
zlib version checks (this looks dangerous but seems to be unavoidable with the
|
|
current build system). And then, finally, copy these files to src/png
|
|
subdirectory of the wxWidgets source tree, overwriting the versions there.
|
|
|
|
Notice that config.h generated by libpng configure is not used, we build it
|
|
without `-DHAVE_CONFIG_H` as it works just fine without it on any ANSI C system
|
|
(i.e. anywhere by now).
|