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).
 |