141 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/////////////////////////////////////////////////////////////////////////////
 | 
						|
// 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.
 | 
						|
 */
 |