pax_global_header00006660000000000000000000000064136076277270014533gustar00rootroot0000000000000052 comment=ebd0066b8d4a9601ec7e94cadfe348af75027dc5 innoextract-1.8/000077500000000000000000000000001360762772700137415ustar00rootroot00000000000000innoextract-1.8/CHANGELOG000066400000000000000000000170451360762772700151620ustar00rootroot00000000000000 innoextract 1.8 (2019-09-15) - Added support for Inno Setup 6.0.0 installers - Added support for pre-release Inno Setup 5.6.2 installers used by GOG - Added support for two modified Inno Setup 5.5.7 variants - Added support for Inno Setup 1.3.0 to 1.3.23 - Added support for My Inno Setup Extensions installers older than 3.0.6.1 - Added support for modified Inno Setup variants using an alternative setup loader magic - Added support for using boost_{zlib,bzip2} when statically linking Boost - Added support for automatically reading external setup.0 files - Encoding for non-Unicode installers is now determined from the languages supported by the installer, overridable using the --codepage option - Implemented parsing of GOG Galaxy architecture constraints - The architecture-specific suffixes @32bit and @64bit are now used to disambiguate colliding files - Fixed extracting files from slices larger than 2 GiB with 32-bit builds - Fixed output path for files with absolute paths (canonicalization now strips all unsafe characters) - Fixed output directory being created even when not extracting files - Fixed a hang when using the --language option - Improved checksum verification for files reconstructed from GOG Galaxy file parts - Changed header parsing to select the first version without warnings and failing that the first without errors - Changed filesystem and output encoding to WTF-8 (extended UTF-8) to represent broken UTF-16 data innoextract 1.7 (2018-06-12) - Added support for Inno Setup 5.6.0 installers - Added support for new GOG installers with GOG Galaxy file parts - Added support for encrypted installers with the --password (-P) and --password-file options - Added a --show-password option to print password check information - Added a --check-password option to abort if the provided password does not match the stored checksum - Added a --info (-i) convenience option to print information about the installer - Added a --list-sizes option to print file sizes even with --quiet or --silent - Added a --list-checksums option to print file checksums - Added a --data-version (-V) option to print the data version and exit - Added a --no-extract-unknown (-n) option to abort on unknown Inno Setup data versions - Fixed building in paths that contain regex expressions - Fixed case-sensitivity in parent directory when creating subdirectories - Fixed .bin slice file names used with Inno Setup versions older than 4.1.7 - Fixed build with newer libc++ versions - Made loading of .bin slice files case-insensitive - The --test option can now be combined with --extract to abort on file checksum errors - Now compiles in C++17 mode if supported innoextract 1.6 (2016-03-24) - Added support for Inno Setup 5.5.7 (and 5.5.8) installers - Added a --collisions=rename-all option - Changed --collisions=rename to omit the suffix for the file that would have been extracted with --collisions=overwrite instead of the first encountered file - Fixed @lang suffix sometimes missing for the first file with the --collisions=rename option - Fixed build error with CMake 3.5 - Now compiles in C++14 mode if supported - Unsafe characters in special constant strings (ie ':' in {code:…}) are now replaced with '$' - Windows: Fixed error message if the source file could not be opened - Windows: Fixed progress bar flickering while printing extracted filenames - Windows binaries: Fixed crash on platforms without AVX support innoextract 1.5 (2015-09-24) - Added support for Inno Setup 5.5.6 installers - Added support for a modified Inno Setup 5.5.0 variant - Added support for building without iconv (Windows-1252 and UTF-16LE only) - Added warnings for .bin files that are not part of the installer - Added a simple --include (-I) option to filter files thanks to Alexandre Detiste - Added a --list-languages option to list available languages - Added a --exclude-temp (-m) option to not extract temporary files - Added a --language-only option to skip language-independent files - Added a --collisions option to abort or rename files on collision - Added a --default-language option to prefer a language in case of file collisions - Added a --gog-game-id option to print the GOG.com game ID for Galaxy-ready installers - Added a --gog (-g) option to extract additional .bin files using unrar or unar - Fixed handling of spaces in the --data-dir option - Fixed an infinite loop with truncated LZMA streams - Fixed handling of forward slashes in stored file paths - Fixed size display for powers of 1024 - Fixed loading headers if there are encrypted chunks - Fixed file collisions not being handled case-insensitively - Files will now be extracted into the same directory even if the stored case differs - Empty directories are now created correctly when extracting - Skipped files in encrypted chunks are now listed individually - Temporary files are now marked in file listings - Error summary is now written to stderr when using --quiet - Colors are now only enabled automatically if $TERM is set to something other than "dumb" - Improved error and warning messages - Build system improvements - Debug output can now be enabled separately from debug builds - Windows: Added support for using the Win32 API for string encoding conversion - Windows: Fixed unicode console output innoextract 1.4-windows-r2 (2014-04-17) - This is a Windows-specific hotfix release, no other platforms are affected - Fixed running innoextract under Windows XP innoextract 1.4-windows-r1 (2013-05-14) - This is a Windows-specific hotfix release, no other platforms are affected - Fixed a crash on startup under Windows - Reduced progress bar flickering under Windows - Fixed original console text color not being restored under Windows innoextract 1.4 (2013-03-11) - Fixed build on non-Linux platforms with a separate libiconv (Windows™, macOS) - Fixed build on systems with non-standard iconv function prototypes (FreeBSD) - Fixed MSVC build - Fixed build with older glibc versions - Fixed issues with the progress bar in sandbox environments - Fixed string conversion on systems where libiconv defaults to big-endian variants - Fixed extracting very large installers with 32-bit innoextract builds - Improved handling of invalid encoded strings - Improved error messages when input or output files could not be opened - The --list command-line option can now combined with --test or --extract - The --version command-line option can now be modified with --quiet or --silent - Added color output and progress bar support for Windows™ - Added support for Unicode filenames under Windows™ - Added support for preserving timestamps of extracted files (enabled by default) - Added a --timestamps (-T) command-line options to control or disable file timestamps - Added an --output-dir (-d) command-line option to control where files are extracted - Added various CMake options to fine-tune the build process - Various bug fixes and tweaks innoextract 1.3 (2012-07-03) - Fixed --quiet and --silent flags being ignored for some multi-file installers output - Now compiles in C++11 mode if supported - Added a warning when extracting unsupported setup data versions - Added support for Inno Setup 5.5.0 installers innoextract 1.2 (2012-04-01) - Fixed compile errors with older versions of Boost or GCC. - Prevented linking against libraries that aren't actually needed. innoextract 1.1 (2012-03-19) - Added support to extract files for a specific language. - Fixed a bug in the setup header parsing code. innoextract 1.0 (2012-03-01) - Initial release. - Can list and extract files but not much more. innoextract-1.8/CMakeLists.txt000066400000000000000000000364221360762772700165100ustar00rootroot00000000000000project(innoextract) cmake_minimum_required(VERSION 2.8) if(CMAKE_VERSION VERSION_GREATER 3.15) cmake_policy(VERSION 3.15) else() cmake_policy(VERSION ${CMAKE_VERSION}) endif() # Define configuration options if(CMAKE_SYSTEM_NAME MATCHES "Darwin") set(MACOS 1) else() set(MACOS 0) endif() macro(suboption _var _comment _type _default) if(NOT DEFINED ${_var}) set(${_var} "${_default}") else() set(${_var} "${${_var}}" CACHE ${_type} "${_comment}") endif() endmacro() option(DEVELOPER "Use build settings suitable for developers" OFF) option(CONTINUOUS_INTEGRATION "Use build settings suitable for CI" OFF) # Components option(USE_ARC4 "Build ARC4 decryption support" ON) # Optional dependencies option(USE_LZMA "Build LZMA decompression support" ON) option(USE_DYNAMIC_UTIMENSAT "Dynamically load utimensat if not available at compile time" OFF) # Alternative dependencies set(WITH_CONV CACHE STRING "The library to use for charset conversions") # Build types option(DEBUG_EXTRA "Expensive debug options" OFF) option(SET_WARNING_FLAGS "Adjust compiler warning flags" ON) option(SET_NOISY_WARNING_FLAGS "Enable noisy compiler warnings" OFF) option(SET_OPTIMIZATION_FLAGS "Adjust compiler optimization flags" ON) suboption(USE_LDGOLD "Use the Gold linker" BOOL ${SET_OPTIMIZATION_FLAGS}) set(default_FASTLINK OFF) if(DEVELOPER OR CONTINUOUS_INTEGRATION) set(default_FASTLINK ON) endif() suboption(FASTLINK "Optimize (incremental) linking speed" BOOL ${default_FASTLINK}) set(default_USE_LTO OFF) if(SET_OPTIMIZATION_FLAGS AND NOT FASTLINK) set(default_USE_LTO ON) endif() suboption(USE_LTO "Use link-time code generation" BOOL ${default_USE_LTO}) suboption(WERROR "Turn warnings into errors" BOOL ${CONTINUOUS_INTEGRATION}) suboption(CXX_STD_VERSION "Maximum C++ standard version to enable" STRING 2017) if(DEVELOPER OR CMAKE_BUILD_TYPE STREQUAL "Debug") set(default_DEBUG ON) else() set(default_DEBUG OFF) endif() suboption(DEBUG "Build with debug output" BOOL ${default_DEBUG}) if(DEBUG) add_definitions(-DDEBUG=1) endif() set(default_USE_STATIC_LIBS OFF) if(WIN32) set(default_USE_STATIC_LIBS ON) endif() option(USE_STATIC_LIBS "Statically link libraries" ${default_USE_STATIC_LIBS}) option(LZMA_USE_STATIC_LIBS "Statically link liblzma" ${USE_STATIC_LIBS}) option(ZLIB_USE_STATIC_LIBS "Statically link libz" ${USE_STATIC_LIBS}) option(BZip2_USE_STATIC_LIBS "Statically link libbz2" ${USE_STATIC_LIBS}) option(Boost_USE_STATIC_LIBS "Statically link Boost" ${USE_STATIC_LIBS}) option(iconv_USE_STATIC_LIBS "Statically link libiconv" ${USE_STATIC_LIBS}) # Make optional dependencies required suboption(STRICT_USE "Abort if there are missing optional dependencies" BOOL ${CONTINUOUS_INTEGRATION}) if(STRICT_USE) set(OPTIONAL_DEPENDENCY REQUIRED) else() set(OPTIONAL_DEPENDENCY) endif() # Install destinations if(CMAKE_VERSION VERSION_LESS 2.8.5) set(CMAKE_INSTALL_DATAROOTDIR "share" CACHE STRING "read-only architecture-independent data root (share) (relative to prefix).") set(CMAKE_INSTALL_BINDIR "bin" CACHE STRING "user executables (bin) (relative to prefix).") set(CMAKE_INSTALL_MANDIR "${CMAKE_INSTALL_DATAROOTDIR}/man" CACHE STRING "man documentation (DATAROOTDIR/man) (relative to prefix).") mark_as_advanced( CMAKE_INSTALL_DATAROOTDIR CMAKE_INSTALL_BINDIR CMAKE_INSTALL_MANDIR ) else() include(GNUInstallDirs) endif() # Helper scrips include(CheckSymbolExists) set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") # For custom cmake modules include(BuildType) include(CompileCheck) include(CreateSourceGroups) include(CXXVersionCheck) include(Doxygen) include(FilterList) include(PrintConfiguration) include(StyleCheck) include(UseStaticLibs) include(VersionString) # Find required libraries # Win32 API if(WIN32) # Ensure we aren't using functionalities not found under Window XP SP1 add_definitions(-D_WIN32_WINNT=0x0502) add_definitions(-DNOMINMAX) add_definitions(-DWIN32_LEAN_AND_MEAN) endif() if(USE_STATIC_LIBS AND NOT MSVC) add_ldflag("-static-libstdc++") add_ldflag("-static-libgcc") endif() # Force re-checking libraries if the compiler or compiler flags change if((NOT LAST_CMAKE_CXX_FLAGS STREQUAL CMAKE_CXX_FLAGS) OR (NOT LAST_CMAKE_CXX_COMPILER STREQUAL CMAKE_CXX_COMPILER)) force_recheck_library(LZMA) force_recheck_library(Boost) force_recheck_library(ZLIB) force_recheck_library(BZip2) force_recheck_library(iconv) unset(Boost_INCLUDE_DIR CACHE) set(LAST_CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE INTERNAL "The last C++ compiler flags") set(LAST_CMAKE_CXX_COMPILER "${CMAKE_CXX_COMPILER}" CACHE INTERNAL "The last C++ compiler") endif() unset(LIBRARIES) if(USE_ARC4) set(INNOEXTRACT_HAVE_ARC4 1) endif() if(USE_LZMA) find_package(LZMA REQUIRED) check_link_library(LZMA LZMA_LIBRARIES) list(APPEND LIBRARIES ${LZMA_LIBRARIES}) include_directories(SYSTEM ${LZMA_INCLUDE_DIR}) add_definitions(${LZMA_DEFINITIONS}) set(INNOEXTRACT_HAVE_LZMA 1) else() message(WARNING "\nDisabling LZMA decompression support.\n" "You won't be able to extract most newer Inno Setup installers.") set(INNOEXTRACT_HAVE_LZMA 0) endif() find_package(Boost REQUIRED COMPONENTS iostreams filesystem date_time system program_options ) check_link_library(Boost Boost_LIBRARIES) list(APPEND LIBRARIES ${Boost_LIBRARIES}) link_directories(${Boost_LIBRARY_DIRS}) include_directories(SYSTEM ${Boost_INCLUDE_DIR}) if(NOT Boost_VERSION_MACRO) # CMP0093 changed Boost_VERSION to x.y.z format and provide the old format in Boost_VERSION_MACRO set(Boost_VERSION_MACRO ${Boost_VERSION}) endif() has_static_libs(Boost Boost_LIBRARIES) if(Boost_HAS_STATIC_LIBS) foreach(Lib IN ITEMS ZLIB BZip2) string(TOUPPER ${Lib} LIB) string(TOLOWER ${Lib} lib) foreach(static IN ITEMS 1 0) if(static) use_static_libs(${Lib}) endif() if(WIN32) find_package(Boost COMPONENTS ${lib} QUIET) endif() if(Boost_${LIB}_FOUND) message (STATUS "Found boost_${lib}") set(${LIB}_LIBRARIES ${Boost_${LIB}_LIBRARY}) else() find_package(${Lib} REQUIRED) endif() if(static) use_static_libs_restore() endif() if(${LIB}_LIBRARIES OR STRICT_USE) break() endif() endforeach() check_link_library(${Lib} ${LIB}_LIBRARIES) list(APPEND LIBRARIES ${${LIB}_LIBRARIES}) endforeach() endif() set(INNOEXTRACT_HAVE_ICONV 0) set(INNOEXTRACT_HAVE_WIN32_CONV 0) if(WIN32 AND (NOT WITH_CONV OR WITH_CONV STREQUAL "win32")) set(INNOEXTRACT_HAVE_WIN32_CONV 1) elseif(NOT WITH_CONV OR WITH_CONV STREQUAL "iconv") if(STRICT_USE) set(ICONV_REQUIRED REQUIRED) else() set(ICONV_REQUIRED) endif() find_package(iconv ${ICONV_REQUIRED}) if(ICONV_FOUND) check_link_library(iconv iconv_LIBRARIES) list(APPEND LIBRARIES ${iconv_LIBRARIES}) include_directories(SYSTEM ${iconv_INCLUDE_DIR}) add_definitions(${iconv_DEFINITIONS}) set(INNOEXTRACT_HAVE_ICONV 1) endif() elseif(WITH_CONV AND NOT WITH_CONV STREQUAL "builtin") message(FATAL_ERROR "Invalid WITH_CONV option: ${WITH_CONV}") endif() # Set compiler flags if(Boost_VERSION_MACRO LESS 104800) # Older Boost versions don't work with C++11 elseif(NOT CXX_STD_VERSION LESS 2011) enable_cxx_version(${CXX_STD_VERSION}) check_cxx11("alignof" INNOEXTRACT_HAVE_ALIGNOF) if(WIN32) check_cxx11("std::codecvt_utf8_utf16" INNOEXTRACT_HAVE_STD_CODECVT_UTF8_UTF16 1600) endif() check_cxx11("std::unique_ptr" INNOEXTRACT_HAVE_STD_UNIQUE_PTR 1600) endif() # Don't expose internal symbols to the outside world by default if(NOT MSVC) add_cxxflag("-fvisibility=hidden") add_cxxflag("-fvisibility-inlines-hidden") endif() # Older glibc versions won't provide some useful symbols by default - request them # This flag is currently also set by gcc when compiling C++, but not for plain C if(NOT WIN32) check_symbol_exists(__GLIBC__ "features.h" HAVE_GLIBC) if(HAVE_GLIBC) set(CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE=1") add_definitions(-D_GNU_SOURCE=1) endif() endif() if(WIN32) # Define this so that we don't accitenally use ANSI functions add_definitions(-DUNICODE) add_definitions(-D_UNICODE) endif() # Check for optional functionality and system configuration if(NOT WIN32) check_symbol_exists(isatty "unistd.h" INNOEXTRACT_HAVE_ISATTY) check_symbol_exists(ioctl "sys/ioctl.h" INNOEXTRACT_HAVE_IOCTL) check_symbol_exists(timegm "time.h" INNOEXTRACT_HAVE_TIMEGM) check_symbol_exists(gmtime_r "time.h" INNOEXTRACT_HAVE_GMTIME_R) check_symbol_exists(AT_FDCWD "fcntl.h" INNOEXTRACT_HAVE_AT_FDCWD) if(INNOEXTRACT_HAVE_AT_FDCWD) check_symbol_exists(utimensat "sys/stat.h" INNOEXTRACT_HAVE_UTIMENSAT) endif() if(INNOEXTRACT_HAVE_UTIMENSAT AND INNOEXTRACT_HAVE_AT_FDCWD) set(INNOEXTRACT_HAVE_UTIMENSAT_d 1) else() if(USE_DYNAMIC_UTIMENSAT AND INNOEXTRACT_HAVE_AT_FDCWD) set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_DL_LIBS}) check_symbol_exists(dlsym "dlfcn.h" INNOEXTRACT_HAVE_DLSYM) check_symbol_exists(RTLD_DEFAULT "dlfcn.h" INNOEXTRACT_HAVE_RTLD_DEFAULT) unset(CMAKE_REQUIRED_LIBRARIES) if(INNOEXTRACT_HAVE_DLSYM AND INNOEXTRACT_HAVE_RTLD_DEFAULT) set(INNOEXTRACT_HAVE_DYNAMIC_UTIMENSAT 1) if(CMAKE_DL_LIBS) list(APPEND LIBRARIES ${CMAKE_DL_LIBS}) endif() endif() endif() check_symbol_exists(utimes "sys/time.h" INNOEXTRACT_HAVE_UTIMES) endif() check_symbol_exists(posix_spawnp "spawn.h" INNOEXTRACT_HAVE_POSIX_SPAWNP) if(INNOEXTRACT_HAVE_POSIX_SPAWNP) check_symbol_exists(environ "unistd.h" INNOEXTRACT_HAVE_UNISTD_ENVIRON) else() check_symbol_exists(fork "unistd.h" INNOEXTRACT_HAVE_FORK) check_symbol_exists(execvp "unistd.h" INNOEXTRACT_HAVE_EXECVP) endif() if(INNOEXTRACT_HAVE_POSIX_SPAWNP OR (INNOEXTRACT_HAVE_FORK AND INNOEXTRACT_HAVE_EXECVP)) check_symbol_exists(waitpid "sys/wait.h" INNOEXTRACT_HAVE_WAITPID) endif() endif() if(NOT MSVC) if(CMAKE_CXX_COMPILER_ID STREQUAL "PathScale") # EKOPath recognizes these but then fails to link else() check_builtin(INNOEXTRACT_HAVE_BUILTIN_BSWAP16 "__builtin_bswap16(0)") check_builtin(INNOEXTRACT_HAVE_BUILTIN_BSWAP32 "__builtin_bswap32(0)") check_builtin(INNOEXTRACT_HAVE_BUILTIN_BSWAP64 "__builtin_bswap64(0)") endif() if(NOT INNOEXTRACT_HAVE_BUILTIN_BSWAP16) check_symbol_exists(bswap_16 "byteswap.h" INNOEXTRACT_HAVE_BSWAP_16) endif() if(NOT INNOEXTRACT_HAVE_BUILTIN_BSWAP32) check_symbol_exists(bswap_32 "byteswap.h" INNOEXTRACT_HAVE_BSWAP_32) endif() if(NOT INNOEXTRACT_HAVE_BUILTIN_BSWAP64) check_symbol_exists(bswap_64 "byteswap.h" INNOEXTRACT_HAVE_BSWAP_64) endif() endif() # All sources: set(DOCUMENTATION 0) # never build these set(INNOEXTRACT_SOURCES src/index.hpp if DOCUMENTATION src/release.hpp src/cli/debug.hpp src/cli/debug.cpp if DEBUG src/cli/extract.hpp src/cli/extract.cpp src/cli/gog.hpp src/cli/gog.cpp src/cli/goggalaxy.hpp src/cli/goggalaxy.cpp src/cli/main.cpp src/crypto/adler32.hpp src/crypto/adler32.cpp src/crypto/arc4.hpp if INNOEXTRACT_HAVE_ARC4 src/crypto/arc4.cpp if INNOEXTRACT_HAVE_ARC4 src/crypto/checksum.hpp src/crypto/checksum.cpp src/crypto/crc32.hpp src/crypto/crc32.cpp src/crypto/hasher.cpp src/crypto/hasher.cpp src/crypto/iteratedhash.hpp src/crypto/md5.hpp src/crypto/md5.cpp src/crypto/sha1.hpp src/crypto/sha1.cpp src/loader/exereader.hpp src/loader/exereader.cpp src/loader/offsets.hpp src/loader/offsets.cpp src/setup/component.hpp src/setup/component.cpp src/setup/data.hpp src/setup/data.cpp src/setup/delete.hpp src/setup/delete.cpp src/setup/directory.hpp src/setup/directory.cpp src/setup/expression.hpp src/setup/expression.cpp src/setup/file.hpp src/setup/file.cpp src/setup/filename.hpp src/setup/filename.cpp src/setup/header.hpp src/setup/header.cpp src/setup/icon.hpp src/setup/icon.cpp src/setup/info.hpp src/setup/info.cpp src/setup/ini.hpp src/setup/ini.cpp src/setup/item.hpp src/setup/item.cpp src/setup/language.hpp src/setup/language.cpp src/setup/message.hpp src/setup/message.cpp src/setup/permission.hpp src/setup/permission.cpp src/setup/registry.hpp src/setup/registry.cpp src/setup/run.hpp src/setup/run.cpp src/setup/task.hpp src/setup/task.cpp src/setup/type.hpp src/setup/type.cpp src/setup/version.hpp src/setup/version.cpp src/setup/windows.hpp src/setup/windows.cpp src/stream/block.hpp src/stream/block.cpp src/stream/checksum.hpp src/stream/chunk.hpp src/stream/chunk.cpp src/stream/exefilter.hpp src/stream/file.hpp src/stream/file.cpp src/stream/lzma.hpp src/stream/lzma.cpp if INNOEXTRACT_HAVE_LZMA src/stream/restrict.hpp src/stream/slice.hpp src/stream/slice.cpp src/util/align.hpp src/util/ansi.hpp src/util/boostfs_compat.hpp src/util/console.hpp src/util/console.cpp src/util/encoding.hpp src/util/encoding.cpp src/util/endian.hpp src/util/enum.hpp src/util/flags.hpp src/util/fstream.hpp src/util/load.hpp src/util/load.cpp src/util/log.hpp src/util/log.cpp src/util/math.hpp src/util/output.hpp src/util/process.hpp src/util/process.cpp src/util/storedenum.hpp src/util/time.hpp src/util/time.cpp src/util/types.hpp src/util/unique_ptr.hpp src/util/windows.hpp src/util/windows.cpp if WIN32 ) filter_list(INNOEXTRACT_SOURCES ALL_INNOEXTRACT_SOURCES) create_source_groups(ALL_INNOEXTRACT_SOURCES) # Prepare generated files include_directories(src ${CMAKE_CURRENT_BINARY_DIR}) configure_file("src/configure.hpp.in" "configure.hpp") set(VERSION_FILE "${PROJECT_BINARY_DIR}/release.cpp") set(VERSION_SOURCES VERSION "VERSION" LICENSE "LICENSE") version_file("src/release.cpp.in" ${VERSION_FILE} "${VERSION_SOURCES}" ".git") list(APPEND INNOEXTRACT_SOURCES ${VERSION_FILE}) set(MAN_INPUT "doc/innoextract.1.in") set(MAN_FILE "${PROJECT_BINARY_DIR}/innoextract.1") set(MAN_SOURCES VERSION "VERSION" CHANGELOG "CHANGELOG") version_file(${MAN_INPUT} ${MAN_FILE} "${MAN_SOURCES}" ".git") add_custom_target(manpage ALL DEPENDS ${MAN_FILE}) # Main targets add_executable(innoextract ${INNOEXTRACT_SOURCES}) target_link_libraries(innoextract ${LIBRARIES}) install(TARGETS innoextract RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) install(FILES ${MAN_FILE} DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 OPTIONAL) # Additional targets. add_style_check_target(style "${ALL_INNOEXTRACT_SOURCES}" innoextract) add_doxygen_target(doc "doc/Doxyfile.in" "VERSION" ".git" "${PROJECT_BINARY_DIR}/doc") # Print a configuration summary message("") message("Configuration:") set(BUILD_TYPE_SUFFIX "") if(DEBUG AND NOT CMAKE_BUILD_TYPE STREQUAL "Debug") set(BUILD_TYPE_SUFFIX "${BUILD_TYPE_SUFFIX} with debug output") elseif(NOT DEBUG AND NOT CMAKE_BUILD_TYPE STREQUAL "Release") set(BUILD_TYPE_SUFFIX "${BUILD_TYPE_SUFFIX} without debug output") endif() message(" - Build type: ${CMAKE_BUILD_TYPE}${BUILD_TYPE_SUFFIX}") print_configuration("ARC4 decryption" FIRST INNOEXTRACT_HAVE_ARC4 "enabled" 1 "disabled" ) print_configuration("LZMA decompression" FIRST INNOEXTRACT_HAVE_LZMA "enabled" 1 "disabled" ) if(INNOEXTRACT_HAVE_DYNAMIC_UTIMENSAT) set(time_prefix "nanoseconds if supported, ") set(time_suffix " otherwise") endif() print_configuration("File time precision" FIRST INNOEXTRACT_HAVE_UTIMENSAT_d "nanoseconds" WIN32 "100-nanoseconds" INNOEXTRACT_HAVE_UTIMES "${time_prefix}microseconds${time_suffix}" 1 "${time_prefix}seconds${time_suffix}" ) print_configuration("Charset conversion" INNOEXTRACT_HAVE_ICONV "iconv" INNOEXTRACT_HAVE_WIN32_CONV "Win32" 1 "builtin" ) message("") innoextract-1.8/CONTRIBUTING.md000066400000000000000000000013151360762772700161720ustar00rootroot00000000000000 Contributions of all kinds are welcome as [GitHub pull requests](https://github.com/dscharrer/innoextract/pulls) or as patches mailed to daniel@constexpr.org. If you are planning to implement a larger feature and intend to get it merged, please contact me **first** at daniel@constexpr.org or on the [GitHub issue tracker](https://github.com/dscharrer/innoextract/issues) to discuss the planned changes in order to avoid duplicating work or having to re-do the changes in a way that fits with the project. There is no official code style guide, but please try to match the style of the existing code and git commit messages. All contributions must be licensed under the zlib license detailed in the LICENSE file. innoextract-1.8/LICENSE000066400000000000000000000015661360762772700147560ustar00rootroot00000000000000 Copyright (C) 2011-2019 Daniel Scharrer This software is provided 'as-is', without any express or implied warranty. In no event will the author(s) be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. innoextract-1.8/README.md000066400000000000000000000154711360762772700152300ustar00rootroot00000000000000 # innoextract - A tool to unpack installers created by Inno Setup [Inno Setup](http://www.jrsoftware.org/isinfo.php) is a tool to create installers for Microsoft Windows applications. innoextract allows to extract such installers under non-Windows systems without running the actual installer using wine. innoextract currently supports installers created by Inno Setup 1.2.10 to 5.6.0. In addition to standard Inno Setup installers, innoextract also supports some modified Inno Setup variants including Martijn Laan's My Inno Setup Extensions 3.0.6.1 as well as GOG.com's Inno Setup-based game installers. innoextract is available under the ZLIB license - see the LICENSE file. See the website for [Linux packages](http://constexpr.org/innoextract/#packages). ## Contact [Website](http://constexpr.org/innoextract/) Author: [Daniel Scharrer](http://constexpr.org/) ## Dependencies * **[Boost](http://www.boost.org/) 1.37** or newer * **liblzma** from [xz-utils](http://tukaani.org/xz/) *(optional)* * **iconv** (*optional*, either as part of the system libc, as is the case with [glibc](http://www.gnu.org/software/libc/) and [uClibc](http://www.uclibc.org/), or as a separate [libiconv](http://www.gnu.org/software/libiconv/)) For Boost you will need the headers as well as the `iostreams`, `filesystem`, `date_time`, `system` and `program_options` libraries. Older Boost version may work but are not actively supported. The boost `iostreams` library needs to be build with zlib and bzip2 support. While innoextract can be built without liblzma by manually setting `-DUSE_LZMA=OFF`, it is highly recommended and you won't be able to extract most installers created by newer Inno Setup versions without it. To build innoextract you will also need **[CMake](http://cmake.org/) 2.8** and a working C++ compiler, as well as the development headers for liblzma and boost. See the Website for [operating system-specific instructions](http://constexpr.org/innoextract/install). ## Compile and install To compile innoextract, run: $ mkdir -p build && cd build $ cmake .. $ make To install the binaries system-wide, run as root: # make install The default build settings are tuned for users - if you plan to make changes to Arx Libertatis you should append the `-DDEVELOPER=1` option to the `cmake` command to enable debug output and fast incremental builds. ### Build options: | Option | Default | Description | |:------------------------- |:---------:|:----------- | | `USE_ARC4` | `ON` | Build ARC4 decryption support. | `USE_LZMA` | `ON` | Use `liblzma`. | `WITH_CONV` | *not set* | The charset conversion library to use. Valid values are `iconv`, `win32` and `builtin`¹. If not set, a library appropriate for the target platform will be chosen. | `CMAKE_BUILD_TYPE` | `Release` | Set to `Debug` to enable debug output. | `DEBUG` | `OFF`² | Enable debug output and runtime checks. | `DEBUG_EXTRA` | `OFF` | Expensive debug options. | `SET_WARNING_FLAGS` | `ON` | Adjust compiler warning flags. This should not affect the produced binaries but is useful to catch potential problems. | `SET_NOISY_WARNING_FLAGS` | `OFF` | Enable warnings with false positives many cases that still need to be fixed. | `SET_OPTIMIZATION_FLAGS` | `ON` | Adjust compiler optimization flags. | `CXX_STD_VERSION` | `2017` | Maximum C++ standard version to enable. | `USE_DYNAMIC_UTIMENSAT` | `OFF` | Dynamically load utimensat(2) if not available at compile time. | `USE_STATIC_LIBS` | `OFF`³ | Turns on static linking for all libraries, including `-static-libgcc` and `-static-libstdc++`. You can also use the individual options below: | `LZMA_USE_STATIC_LIBS` | `OFF`⁴ | Statically link `liblzma`. | `Boost_USE_STATIC_LIBS` | `OFF`⁴ | Statically link Boost. See also `FindBoost.cmake`. | `ZLIB_USE_STATIC_LIBS` | `OFF`⁴ | Statically link `libz`. (used via Boost) | `BZip2_USE_STATIC_LIBS` | `OFF`⁴ | Statically link `libbz2`. (used via Boost) | `iconv_USE_STATIC_LIBS` | `OFF`⁴ | Statically link `libiconv`. | `STRICT_USE` | `OFF` | Abort if there are missing optional dependencies. | `DEVELOPER` | `OFF` | Enable build options suitable for developers⁵. | `FASTLINK` | `OFF`⁶ | Optimize for link speed. | `USE_LTO` | `ON`² | Use link-time code generation. 1. The builtin charset conversion only supports Windows-1252 and UTF-16LE. This is normally enough for filenames, but custom message strings (which can be included in filenames) may use arbitrary encodings. 2. Enabled automatically if `CMAKE_BUILD_TYPE` is set to `Debug`. 3. Under Windows, the default is `ON`. 4. Default is `ON` if `USE_STATIC_LIBS` is enabled. 5. Currently this and enables `DEBUG` and `FASTLINK` for faster incremental builds and improved debug output, unless those options have been explicitly specified by the user. 6. Enabled automatically if `DEVELOPER` is enabled. 7. Disabled automatically if `SET_OPTIMIZATION_FLAGS` is disabled or `FASTLINK` is enabled. Install options: | Option | Default | Description | |:--------------------------- |:--------------------:|:----------- | | `CMAKE_INSTALL_PREFIX` | `/usr/local` | Where to install innoextract. | `CMAKE_INSTALL_BINDIR` | `bin` | Location for binaries (relative to prefix). | `CMAKE_INSTALL_DATAROOTDIR` | `share` | Location for data files (relative to prefix). | `CMAKE_INSTALL_MANDIR` | `${DATAROOTDIR}/man` | Location for man pages (relative to prefix). Set options by passing `-D