configure.ac: mention development file packages
Upgrade WIM mounting support from fuse2 to fuse3 fuse2 is no longer maintained, and the various Linux distros want all packages to move to fuse3. So, let's add fuse3 support. Moreover, as it's been over 5 years since fuse3 was released, it doesn't seem worth it to support both fuse2 and fuse3. So, remove support for fuse2, and just support fuse3. Note: as before, WIM mounting support can still be disabled by configuring --without-fuse. That removes the dependency.
configure.ac: explicitly call PKG_PROG_PKG_CONFIG Without this, pkg-config only worked if the first PKG_CHECK_MODULES that appears *in the file* was executed, i.e. only if WITH_NTFS_3G=yes.
tools: make all shell scripts have the .sh extension
Eliminate the dependency on libxml2 libxml2 is the only remaining third-party library that Windows builds of wimlib need. It's a bit of a pain to have to download it, build it, and trick libtool into linking it into the resulting DLL. It then constitutes a significant part of the size of the resulting DLL, even with the minimal libxml2 configuration options being used. In reality, WIM files only use a small subset of XML containing the most commonly used XML features. Using a full-featured XML library (that supports "features" like External Entities that we have to remember to disable) is a bit dangerous and not actually necessary. 7-Zip's WIM support, for example, just uses a very minimal home-brew XML processor. Another issue is that the libxml2 API always uses UTF-8, which causes the conversion UTF-16LE => UTF-8 => UTF-16LE to be needed on Windows. This isn't really an "issue", per se, but it shouldn't be necessary. Finally, wimlib was integrating with libxml2 at a low level via the tree API, and it overlooked some things. For example, libxml2 trees have separate CDATA and TEXT nodes, but wimlib was only looking at TEXT, so CDATA was ignored. It was also possible for wimlib to create a document containing control characters, which is not valid XML so it could not be read. These weren't very important issues, but the point is, just using an XML library doesn't solve quite as many problems as one would hope... Therefore, just add a simple XML 1.0 processor directly in the source code. It handles all XML features that are used in WIM files, plus a bit more for futureproofing. It's also faster than libxml2.
Simplify check for __NR_getrandom There is no need for the configure script to check whether __NR_getrandom is defined, as the source code can just use #ifdef.
Use native Windows threads on Windows This makes building wimlib for Windows easier, as it no longer depends on winpthreads.
Explicitly define _WIN32_WINNT Explicitly define _WIN32_WINNT to correspond to the minimum Windows version we are supporting (currently Windows Vista).
SHA-1 rework First, add new SHA-1 implementations that use the x86 and ARM SHA-1 intrinsics, so that these can be taken advantage of in Windows builds. Second, replace sha1-ssse3.asm with an easier-to-maintain implementation using intrinsics, and build a copy of it with AVX+BMI2 enabled. Finally, now that better SHA-1 implementations are included, support for OpenSSL's SHA-1 is no longer very useful, so remove it. I considered going in the other direction: removing all SHA-1 code and relying completely on external libraries. Some issues with that are: - Statically linking OpenSSL into libwim.dll on Windows increases the binary size by over 4x, even when using "no-autoalginit". - OpenSSL has deprecated its easy-to-use SHA-1 API in favor of the EVP API, which is harder to use (everything can fail) and slower. - Windows CryptoAPI is Windows-only (duh) and also has a complex, slow API where every function can fail, so that's not great either. - SHA-1 is considered insecure these days, so it may be unwise to count on its continued support in crypto libraries into the future. So, let's just do it ourselves...
Remove some unnecessary configure options Remove support for the following options which aren't really useful and probably aren't being used by anyone: * --disable-assertions * --disable-error-messages * --disable-multithreaded-compression
configure.ac: fix trailing newline issue Reported at https://wimlib.net/forums/viewtopic.php?f=1&t=562. m4_esyscmd() needs to be m4_esyscmd_s(), so that the version string doesn't get a trailing newline. It works for me either way, but that's probably because in autoconf 2.70, AC_INIT started trimming extra whitespace from its arguments (as per the release notes at https://lists.gnu.org/archive/html/autotools-announce/2020-12/msg00001.html). So presumably this fix is needed for older versions of autoconf.
configure.ac: generate version number from git commit and tags This should hopefully make it less confusing when building from the git repository. Previously, when doing so the version number would always be that of the last official release.
v1.13.5-BETA1
v1.13.4
v1.13.4-BETA2
v1.13.4-BETA1
v1.13.3
Consistently use forums as bug report location
v1.13.3-BETA1
v1.13.2