| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- 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. Vendor branches
- ------------------
- Normally all third party libraries should be managed using Subversion vendor
- branches. I.e. we should have the latest version of the library under
- /wx/wxWidgets/vendor directory in the repository. Currently only expat, libpng
- and libtiff are handled like this, while libjpeg and zlib are not. Hopefully
- these exceptions will disappear soon, the rest of this note assumes that we
- are using a vendor branch for the library $(LIB).
- We also use $(OLD_VERSION) and $(VERSION) below for the current version of the
- library and the version we are upgrading to. $(OLD_VERSION) can be determined
- by doing
- svn ls https://svn.wxwidgets.org/svn/wx/wxWidgets/vendor/$(LIB)
- as normally it's the latest version present in this directory. You can, of
- course, also look at the library sources currently in the trunk to find out
- its version.
- NB: the instructions here are based on the Subversion documentation, see
- http://svnbook.red-bean.com/en/1.6/svn.advanced.vendorbr.html for more
- information about vendor branches.
- 2. Updating the current branch
- ------------------------------
- The first thing to do is to checkout a pristine copy of the version currently
- being used, e.g.
- cd /some/temp/directory
- svn checkout https://svn.wxwidgets.org/svn/wx/wxWidgets/vendor/$(LIB)/current $(LIB)
- Now delete all the old files:
- cd $(LIB)
- find . -type f -not -path '*/.svn/*' -exec rm {} \;
- or, if you are using zsh, just
- rm **/*(.)
- Next, get the version of the library you are updating to and unpack it into
- the same directory. Examine "svn status" output and add all the files with "?"
- in the first column using "svn add" and delete all the files with "!" in the
- first column using "svn rm".
- Finally commit and tag the new version:
- svn commit -m 'Update $(LIB) to $(VERSION).'
- svn cp https://svn.wxwidgets.org/svn/wx/wxWidgets/vendor/$(LIB)/current \
- https://svn.wxwidgets.org/svn/wx/wxWidgets/vendor/$(LIB)/$(VERSION) \
- -m 'Tagging $(LIB) $(VERSION).'
- You can now do
- rm -rf /some/temp/directory/$(LIB)
- as it won't be needed any longer.
- 3. Merging the current branch
- -----------------------------
- Now switch to wxWidgets checkout and run
- svn merge ^/wxWidgets/vendor/$(LIB)/$(OLD_VERSION) ^/wxWidgets/vendor/$(LIB)/current src/$(LIBDIR)
- Notice that you may need to escape the circumflexes with backslashes if they
- are special for your shell. Also notice that the directory of the library may
- be different from its name, e.g. we use libpng for the vendor branch but just
- png for the name of the directory.
- Unless you are very lucky, the merge will result in conflicts and you will
- need to resolve them by examining the differences -- this is the difficult
- part.
- Once everything was resolved, test your changes. As building the third party
- libraries is quite different between Unix and Windows, please do it under both
- platforms. Under Windows it's enough to just build everything as usual as the
- built-in libraries are used by default. Please build both static and dynamic
- wxWidgets libraries as some problems arise only in one of those configurations.
- Under Unix you need to configure with --with-$(LIB)=builtin option to ensure
- that the newly updated built-in version of the library is used and not the
- system version. If upgrading an image format library, please build and run the
- image sample. In any case, run the unit tests to check that everything still
- works.
- After testing and correcting the problems, simply commit your changes:
- svn commit -m 'Update $(LIB) to $(VERSION).' src/$(LIBDIR)
- 4. 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" (actually just "make png.lo"
- is sufficient as we don't really need to build the library) to create
- pnglibconf.h and pngprefix.h files in the build directory. And 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).
|