Document how to build wxWidgets with liblzma support
Explain what needs to be done under MSW in order to use LZMA compression classes.
This commit is contained in:
		@@ -148,6 +148,7 @@ library:
 | 
				
			|||||||
@itemdef{wxUSE_IPV6, Use experimental wxIPV6address and related classes.}
 | 
					@itemdef{wxUSE_IPV6, Use experimental wxIPV6address and related classes.}
 | 
				
			||||||
@itemdef{wxUSE_JOYSTICK, Use wxJoystick class.}
 | 
					@itemdef{wxUSE_JOYSTICK, Use wxJoystick class.}
 | 
				
			||||||
@itemdef{wxUSE_LIBJPEG, Enables JPEG format support (requires libjpeg).}
 | 
					@itemdef{wxUSE_LIBJPEG, Enables JPEG format support (requires libjpeg).}
 | 
				
			||||||
 | 
					@itemdef{wxUSE_LIBLZMA, Enables LZMA compression support (see @ref page_build_liblzma).}
 | 
				
			||||||
@itemdef{wxUSE_LIBPNG, Enables PNG format support (requires libpng). Also requires wxUSE_ZLIB.}
 | 
					@itemdef{wxUSE_LIBPNG, Enables PNG format support (requires libpng). Also requires wxUSE_ZLIB.}
 | 
				
			||||||
@itemdef{wxUSE_LIBTIFF, Enables TIFF format support (requires libtiff).}
 | 
					@itemdef{wxUSE_LIBTIFF, Enables TIFF format support (requires libtiff).}
 | 
				
			||||||
@itemdef{wxUSE_LISTBOOK, Use wxListbook class.}
 | 
					@itemdef{wxUSE_LISTBOOK, Use wxListbook class.}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										140
									
								
								docs/doxygen/mainpages/liblzma.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										140
									
								
								docs/doxygen/mainpages/liblzma.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,140 @@
 | 
				
			|||||||
 | 
					/////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					// Name:        liblzma.h
 | 
				
			||||||
 | 
					// Purpose:     Documentation of the use of liblzma with wxWidgets
 | 
				
			||||||
 | 
					// Author:      Vadim Zeitlin <vadim@wxwidgets.org>
 | 
				
			||||||
 | 
					// Licence:     wxWindows licence
 | 
				
			||||||
 | 
					/////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@page page_build_liblzma Using LZMA compression with liblzma
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To use wxLZMAInputStream and wxLZMAOutputStream classes, a public domain
 | 
				
			||||||
 | 
					liblzma library is required when building wxWidgets. This guide explains how to
 | 
				
			||||||
 | 
					make liblzma available and let wxWidgets build system use it. The exact steps
 | 
				
			||||||
 | 
					depend on the operating system and compiler used, please refer to the
 | 
				
			||||||
 | 
					section appropriate for your environment below.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@section page_build_liblzma_unix Unix-like operating system (including Cygwin)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Under many Unix or Unix-like (including Cygwin) systems, liblzma is available
 | 
				
			||||||
 | 
					as a system package and the simplest thing to do is to just install it using
 | 
				
			||||||
 | 
					the system-specific tool (apt, yum, ...). Just note that you need to install
 | 
				
			||||||
 | 
					the liblzma-dev or liblzma-devel package in order to obtain the library headers
 | 
				
			||||||
 | 
					and not just the library itself.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If your system doesn't provide such package or you need to use a newer version
 | 
				
			||||||
 | 
					than is available in the system repositories, it is also simple to build
 | 
				
			||||||
 | 
					liblzma from sources: basically, just download the library sources from
 | 
				
			||||||
 | 
					https://tukaani.org/xz/ or clone its repository and perform the usual
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@code
 | 
				
			||||||
 | 
					    $ ./configure
 | 
				
			||||||
 | 
					    $ make
 | 
				
			||||||
 | 
					    $ make install
 | 
				
			||||||
 | 
					@endcode
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					commands sequence.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					As wxWidgets is built using either configure or CMake under Unix-like systems,
 | 
				
			||||||
 | 
					there is nothing special to do to let wxWidgets use liblzma, as it will be
 | 
				
			||||||
 | 
					detected automatically -- just check the end of configure or CMake output to
 | 
				
			||||||
 | 
					confirm that it was found. If this is not the case because the library was
 | 
				
			||||||
 | 
					installed in some non-default location, you need to provide @c CPPFLAGS and @c
 | 
				
			||||||
 | 
					LDFLAGS on configure command line, e.g.:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@code
 | 
				
			||||||
 | 
					    $ ../configure CPPFLAGS=-I/opt/liblzma/include LDFLAGS=-L/opt/liblzma/lib
 | 
				
			||||||
 | 
					@endcode
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@section page_build_liblzma_msw MSW not using configure
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					When not using configure, you must edit @c wx/msw/setup.h file and change the
 | 
				
			||||||
 | 
					value of @c wxUSE_LIBLZMA option to @c 1 manually in order to enable LZMA
 | 
				
			||||||
 | 
					support, which is disabled by default.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Next, you need to actually ensure that the library is available to be able to
 | 
				
			||||||
 | 
					build wxWidgets:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@subsection page_build_liblzma_msw_vcpkg MSW using MSVS 2015 with Vcpkg
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you build wxWidgets with Microsoft Visual Studio 2015.3 or later, you can
 | 
				
			||||||
 | 
					use Microsoft vcpkg tool (see https://github.com/Microsoft/vcpkg) to install
 | 
				
			||||||
 | 
					liblzma as any other library and integrate it with Microsoft Visual Studio
 | 
				
			||||||
 | 
					automatically. Please see vcpkg documentation for details, but, basically, it's
 | 
				
			||||||
 | 
					as simple as executing the following commands:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@code
 | 
				
			||||||
 | 
					    > git clone https://github.com/Microsoft/vcpkg.git
 | 
				
			||||||
 | 
					    > cd vcpkg
 | 
				
			||||||
 | 
					    > .\bootstrap-vcpkg.bat
 | 
				
			||||||
 | 
					    > .\vcpkg integrate install
 | 
				
			||||||
 | 
					    > .\vcpkg install liblzma
 | 
				
			||||||
 | 
					@endcode
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Afterwards, liblzma headers and libraries (in DLL form) will be available to
 | 
				
			||||||
 | 
					all C++ Visual Studio projects, including wxWidgets, so you just need to build
 | 
				
			||||||
 | 
					it as usual, i.e. by opening @c build/msw/wx_vcXX.sln file and building it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@section page_build_liblzma_msw_manual MSW manual setup
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					First of all, you need to either build or download liblzma binaries. Building
 | 
				
			||||||
 | 
					the library from source with gcc requires configure, and as you don't use an
 | 
				
			||||||
 | 
					environment capable of running it (if you're, you're reading the wrong section
 | 
				
			||||||
 | 
					of this guide, please go to the first one instead), it might be simpler to just
 | 
				
			||||||
 | 
					download the binaries from https://tukaani.org/xz/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					However these binaries don't provide import libraries for MSVC, so you may
 | 
				
			||||||
 | 
					prefer building from source when using this compiler, provided it is at least
 | 
				
			||||||
 | 
					2013.2 or later (otherwise, you must use the binaries and create the import
 | 
				
			||||||
 | 
					library from the DLL). To do it, simply open the MSVS solution provided under
 | 
				
			||||||
 | 
					@c windows directory of the source archive corresponding to your compiler
 | 
				
			||||||
 | 
					version and build all the relevant configurations. Notice that you may build it
 | 
				
			||||||
 | 
					as either a static or a dynamic library, but if you choose the former, you must
 | 
				
			||||||
 | 
					also predefine @c LZMA_API_STATIC when building wxWidgets.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Second, you need to let wxWidgets build system know about the liblzma headers
 | 
				
			||||||
 | 
					and libraries location. When using makefiles, with either gcc or MSVC compiler,
 | 
				
			||||||
 | 
					this can be done simply by specifying @c CPPFLAGS and @c LDFLAGS on make
 | 
				
			||||||
 | 
					command line, e.g.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@code
 | 
				
			||||||
 | 
					    > make -f makefile.gcc CPPFLAGS=-Ic:/dev/include LDFLAGS=-Lc:/dev/lib
 | 
				
			||||||
 | 
					@endcode
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you built liblzma as a static library, change @c CPPFLAGS to also include @c
 | 
				
			||||||
 | 
					-DLZMA_API_STATIC.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					When building wxWidgets with MSVC project files, you must update them to use
 | 
				
			||||||
 | 
					liblzma. For this, start by copying build\\msw\\wx_setup.props file to
 | 
				
			||||||
 | 
					build\\msw\\wx_local.props, if you don't have the latter file yet. Then open
 | 
				
			||||||
 | 
					this file in your favourite editor and locate the @c Link tag inside an @c
 | 
				
			||||||
 | 
					ItemDefinitionGroup tag and add a new @c AdditionalIncludeDirectories line
 | 
				
			||||||
 | 
					inside the @c ClCompile tag as well as add @c liblzma.lib to the @c
 | 
				
			||||||
 | 
					AdditionalDependencies tag under @c Link itself. The result should look like
 | 
				
			||||||
 | 
					the following, assuming liblzma sources are in c:\\src\\liblzma:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@code
 | 
				
			||||||
 | 
					  <ItemDefinitionGroup>
 | 
				
			||||||
 | 
					    <ClCompile>
 | 
				
			||||||
 | 
					      ... any existing lines here ...
 | 
				
			||||||
 | 
					      <AdditionalIncludeDirectories>c:\src\liblzma\src\liblzma\api;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
				
			||||||
 | 
					      <!--
 | 
				
			||||||
 | 
					        Uncomment this line if, and only if, you link with liblzma statically.
 | 
				
			||||||
 | 
					      <PreprocessorDefinitions>LZMA_API_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
				
			||||||
 | 
					        -->
 | 
				
			||||||
 | 
					    </ClCompile>
 | 
				
			||||||
 | 
					    <Link>
 | 
				
			||||||
 | 
					      <AdditionalDependencies>... all the previously listed libraries;c:\src\liblzma\windows\vs2017\$(Configuration)\$(Platform)\liblzma_dll\liblzma.lib;%(AdditionalDependencies)</AdditionalDependencies>
 | 
				
			||||||
 | 
					    </Link>
 | 
				
			||||||
 | 
					  </ItemDefinitionGroup>
 | 
				
			||||||
 | 
					@endcode
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Afterwards, build wxWidgets as usual and don't forget to provide @c liblzma.dll
 | 
				
			||||||
 | 
					when distributing your application unless you have decided to link it
 | 
				
			||||||
 | 
					statically.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
@@ -30,6 +30,9 @@
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    @endcode
 | 
					    @endcode
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    See @ref page_build_liblzma for information about liblzma, required in
 | 
				
			||||||
 | 
					    order to use this class.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @library{wxbase}
 | 
					    @library{wxbase}
 | 
				
			||||||
    @category{archive,streams}
 | 
					    @category{archive,streams}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -69,6 +72,9 @@ public:
 | 
				
			|||||||
    is compatible with xz utilities working with .xz files and also supported
 | 
					    is compatible with xz utilities working with .xz files and also supported
 | 
				
			||||||
    by 7-Zip program, even though it is different from its native .7z format.
 | 
					    by 7-Zip program, even though it is different from its native .7z format.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    See @ref page_build_liblzma for information about liblzma, required in
 | 
				
			||||||
 | 
					    order to use this class.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @library{wxbase}
 | 
					    @library{wxbase}
 | 
				
			||||||
    @category{archive,streams}
 | 
					    @category{archive,streams}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user