d778fb52f49d13b688ddb0a214b75dd7f36e24aa
[wimlib] / README.WINDOWS
1
2                                   INTRODUCTION
3
4 wimlib is free and open source software that is available on both UNIX-like
5 systems and Windows.  This file provides additional information specifically
6 about the Windows version of wimlib and the command line tool "wimlib-imagex"
7 that is distributed with it.  It does not obsolete the generic README.txt, which
8 you should read too.
9
10                               WINDOWS DISTRIBUTION
11
12 The Windows distribution of wimlib is a ZIP file containing the following items:
13
14   * wimlib-imagex.exe, a command-line tool to deal with WIM (.wim), split WIM
15     (.swm), and ESD (.esd) files that is inspired by Microsoft's ImageX and
16     DISM.  This is a ready-to-run executable and not an installer.
17
18   * Very short batch scripts (e.g. wimapply.cmd) which are shortcuts to the
19     corresponding wimlib-imagex commands (e.g. `wimlib-imagex apply').
20
21   * The library itself in DLL format (libwim-15.dll).  wimlib-imagex.exe
22     requires this to run.
23
24   * The documentation, including this file, the generic README.txt, and
25     PDF documentation for wimlib-imagex in the 'doc' directory.
26
27   * License files for all software included.  These are all free software
28     licenses.  COPYING.txt is the main license, and it refers to
29     COPYING.GPLv3.txt and COPYING.LGPLv3.txt.  The other licenses are for
30     third-party software included in the library.
31
32   * Development files in the 'devel' directory.  These are only needed if you
33     are developing C or C++ applications that use wimlib.
34
35 Note that there are separate ZIP files for 32-bit (i686) and 64-bit (x86_64)
36 binaries.  They are both fully supported, but you should prefer the 64-bit
37 binaries when possible as they can be noticeably faster.
38
39                                  WIMLIB-IMAGEX
40
41 wimlib-imagex supports most features of Microsoft's ImageX as well as some
42 features that are supported by DISM but not by ImageX.  wimlib-imagex also
43 supports some features that neither ImageX nor DISM support.  Some of the
44 advantages of wimlib-imagex compared to ImageX and DISM are:
45
46   * wimlib-imagex provides "extract" and "update" commands which allow
47     you to quickly work with WIM images without mounting them.
48
49   * wimlib-imagex provides an easy-to-use "optimize" command which removes
50     wasted space from a WIM file and optionally recompresses it with stronger
51     compression.
52
53   * wimlib includes advanced implementations of all compression algorithms used
54     in WIM files.  They usually outperform and outcompress their Microsoft
55     equivalents.
56
57   * wimlib-imagex supports solid WIM files and LZMS compression, for example as
58     used in ESD (.esd) files.  (These are partially supported by recent DISM
59     versions but not by ImageX.)
60
61   * wimlib-imagex supports imaging a live Windows system.  Just use the
62     --snapshot option.
63
64   * In many cases, wimlib-imagex has simpler command-line syntax than either
65     ImageX or DISM.
66
67   * Whenever possible, wimlib-imagex includes improved documentation and
68     informational output compared to Microsoft's software.
69
70   * wimlib and wimlib-imagex are free software, so you can modify and/or audit
71     the source code.
72
73 However, some limitations of wimlib-imagex compared to ImageX and DISM are:
74
75   * On Windows, wimlib-imagex does not support mounting WIM images.
76
77   * wimlib-imagex has no awareness of Windows "packages".
78
79                                 ADDITIONAL NOTES
80
81 It's recommended to use wimlib-imagex in scripts to avoid having to
82 interactively enter commands.  However, note that wimlib-imagex is largely just
83 a command-line front-end for wimlib, and it's possible to use wimlib's API in
84 other front-ends or applications.  Currently there is no official graphical user
85 interface available for wimlib or wimlib-imagex.  However, an unofficial, beta,
86 Windows-only graphical user interface that provides a thin wrapper around
87 wimlib-imagex can be downloaded at
88 http://reboot.pro/files/file/485-wimlib-imagex-command-line-compiler/.
89
90                               BUILDING FROM SOURCE
91
92 As with other open source software, advanced users may choose to build wimlib
93 from source, potentially with customizations.  Although wimlib's build system is
94 designed for UNIX-like systems and is easiest to use on Linux, it's possible to
95 build Windows binaries on Windows using Cygwin with MinGW.  To do this, follow
96 the instructions below.  For the sake of example, I'll assume you are building a
97 64-bit version of wimlib v1.13.0.
98
99 Run the Cygwin installer, available from https://www.cygwin.com/setup-x86.exe.
100 When you get to the package selection screen, choose the following additional
101 packages from category "Devel":
102
103     - make
104     - mingw64-x86_64-binutils
105     - mingw64-x86_64-gcc-g++
106     - mingw64-x86_64-libxml2
107     - mingw64-x86_64-pkg-config
108     - mingw64-x86_64-winpthreads
109
110 Download wimlib's source code from https://wimlib.net/downloads/wimlib-1.13.0.tar.gz.
111
112 Start a Cygwin terminal and run the following commands:
113
114     cd /cygdrive/c/Users/example/Downloads # (or wherever you downloaded the source to)
115     tar xf wimlib-1.13.0.tar.gz
116     cd wimlib-1.13.0
117     ./configure --host=x86_64-w64-mingw32
118     make
119
120 If successful, the new binaries "libwim-15.dll" and "wimlib-imagex.exe" will
121 have been produced in the .libs directory.
122
123 By default the binaries are built with debug symbols.  If desired, you can use
124 x86_64-w64-mingw32-strip to strip them.
125
126 libwim-15.dll will be linked to several other DLLs which you will need as well:
127
128     - libwinpthread-1.dll
129     - libxml2-2.dll, which also requires:
130         - iconv.dll
131         - liblzma-5.dll
132         - zlib1.dll
133
134 These DLLs can be found in "C:\cygwin\usr\x86_64-w64-mingw32\sys-root\mingw\bin"
135 and must be placed alongside libwim-15.dll for it to run portably.  But see
136 below for an alternative.
137
138 Building 32-bit binaries is very similar, but you'll need to replace "x86_64"
139 with "i686" everywhere in the above instructions, and libwim-15.dll will also
140 depend on libgcc_s_sjlj-1.dll.  Note that you can build both 32-bit and 64-bit
141 binaries from the same Cygwin installation, provided that you install both the
142 mingw64-i686-* and mingw64-x86_64-* packages; and you can run the Cygwin setup
143 program to install more packages at any time.
144
145 In the official binary releases from wimlib.net, libwim-15.dll's dependent
146 libraries are linked in statically rather than dynamically, so it does not
147 depend on any DLLs other than standard Windows DLLs.  If you want to do this,
148 install the following additional Cygwin packages:
149
150     - p7zip         (category "Archiver")
151     - autoconf      (category "Devel")
152     - automake      (category "Devel")
153     - git           (category "Devel")
154     - libtool       (category "Devel")
155     - nasm          (category "Devel")
156     - pkg-config    (category "Devel")
157     - ghostscript   (category "Graphics")
158     - wget          (category "Web")
159
160 Then, in a Cygwin terminal, clone the git repository, checkout the wimlib
161 version you want, bootstrap the repository, and run the Windows release script:
162
163     git clone git://wimlib.net/wimlib
164     cd wimlib
165     git checkout v1.13.0
166     ./bootstrap
167     ./tools/make-windows-release x86_64
168
169 The release script will download and build libxml2 and winpthreads as static
170 libraries, then build wimlib, then do some final tasks and bundle the resulting
171 files up into a ZIP archive.  If successful you'll end up with a file like
172 "wimlib-1.13.0-windows-x86_64-bin.zip", just like the official releases.  For
173 32-bit binaries just use "i686" instead of "x86_64".