2.34.2

  * Fix WINEPREFIX initialisation in corner cases.
  * Fix handling of optional archives with multiple valid MD5 hashes.
  * Prevent too broad fallback values for localisation packages.
  * Improve errors handling when computing the path to a game binary.

2.34.1

  * Fix ./play.it uninstallation if shell completions were not installed.
  * Improve zsh completion.
  * DOSBox: Fix deprecation warnings related to disk images.
  * DOSBox: Fix fetching image type from legacy variable.
  * Debian: Fix dependencies on Mono libraries.
  * Web games: Fix initial paths setting.
  * Web games: Prevent Firefox extensions from loading in game windows.
  * Web games: Drop calls to retired functions:
    - application_exe_escaped
    - launcher_prefix_symlinks_functions

2.34.0

  * Deprecation notices:
    * --package egentoo is no longer supported.
      See "New .gpkg.tar package format for Gentoo" for information about the supported --package gentoo option.
    * --package gentoo + --compression auto can no longer be used together.
      The new default for --package gentoo is --compression none.
    * The legacy dependency system relying on PKG_xxx_DEPS variables can now only be used to set dependencies on sibling packages.
      The following dependencies variables should be used instead of PKG_xxx_DEPS:
      - PKG_xxx_DEPENDENCIES_LIBRARIES, to list native libraries (./play.it ≥ 2.18)
      - PKG_xxx_DEPENDENCIES_MONO_LIBRARIES, to list Mono libraries (./play.it ≥ 2.21)
      - PKG_xxx_DEPENDENCIES_GSTREAMER_PLUGINS, to list GStreamer decoders (./play.it ≥ 2.23)
      - PKG_xxx_DEPENDENCIES_COMMANDS, to list commands (./play.it ≥ 2.25)
      - PKG_xxx_DEPENDENCIES_SIBLINGS, to list sibling packages (./play.it ≥ 2.30)
    * Support for legacy APP_REGEDIT variable is dropped.
      WINE_REGISTRY_INIT, introduced with ./play.it 2.33, should be used instead.

  * New .gpkg.tar package format for Gentoo:
    * Generation of packages using ebuild is replaced with .gpkg.tar packages,
      relying only on coreutils, tar and compressors.
    * Packages for Gentoo can now be generated from systems not providing ebuild.

  * Improved support for Web games:
    * Web games are no longer run using the shipped Google Chrome build,
      but with a local Web server (using the server built into Python)
      and Firefox to provide the graphical interface.

  * Improved support for Unreal Engine 3 games:
    * Inputs related problems are avoided:
      - ignored keyboard inputs
      - broken mouse camera control

  * Improved support for GameMaker games:
    * A crash on Mesa is avoided.
    * Broken support for non-US locales is worked around.
    * The following variables can be omitted:
      - APPLICATIONS_LIST
      - APP_xxx_EXE
      - APP_xxx_ICON
      - CONTENT_GAME_BIN_FILES
      - CONTENT_GAME_DATA_FILES
      - PACKAGES_LIST
      - PKG_BIN_DEPENDENCIES_SIBLINGS
      - PKG_BIN_DEPENDENCIES_LIBRARIES
      - PKG_DATA_ID
      - PKG_DATA_DESCRIPTION

  * Archives with multiple valid MD5 hashes:
    * ARCHIVE_xxx_MD5 is expanded to support multiple values.
      Multiple valid values should be separated by line breaks, empty lines are ignored.
      Here is an example usage:
      ARCHIVE_BASE_2_NAME='setup_jazz_jackrabbit_2_1.24hf_(16886).exe'
      ARCHIVE_BASE_2_MD5='
      25a730c0813eb006555e6bbaf9613487
      45be80bad040ea821bc6096abe6f3196
      48a48258ed60b24068cbbb2f110b049b'

  * Improvements to menu entries for desktop environments:
    * Support is added for SVG icons.
    * The value set through APP_xxx_CAT is checked against a set list of valid values,
      and a warning is triggered if an unknown value has been set.

  * Improvements to WINE registry support:
    * WINE_REGISTRY_INIT now has support for contextual values (package-specific or archive-specific).
    * Only the key name is used when generating a regedit dump. This should avoid problems with dump paths going over the length limit for regedit.
      Old dumps are not automatically migrated to the new path. This can be done manually by running the following commands:
      DUMPS_PATH=~/.local/share/games/${game_name}/wine/regedit/
      find $DUMPS_PATH -name \*.reg -exec mv --target-directory=$DUMPS_PATH {} +
      find $DUMPS_PATH -type d -empty -delete

  * Rework of package dependencies listing:
    * This update reduces the difference between distinct dependencies listing systems
      (commands, GStreamer decoders, Mono libraries, native libraries, sibling packages)
      as well as between distinct target package formats (Arch Linux, Debian, Gentoo).

2.33.4

  * Fix package context setting from several functions:
    - icons_inclusion_single_application
    - content_inclusion
  * Debian: Fix dependency on libQt5Core.so.5 / libQt5Gui.so.5.

2.33.3

  * Drop obsolete function application_exe_escaped.
  * Reduce code duplication when fetching the type of the default application.
  * Remove shebang from fish completion file.
  * Fix config file path in manpage and zsh-completion.
  * Add --list-packages option to zsh completion.
  * Add support for multiple Qt 5 native libraries:
    - libQt5Core.so.5
    - libQt5Gui.so.5
    - libQt5Widgets.so.5

2.33.2

  * Include shell completion files in the release tarball.
  * Improve current system automatic identification.
  * Only try to identify the current system if a default package format is not already set.
  * Visionaire games: Add explicit dependency on SDL2.
  * AppImage archives: Add missing early requirements check.
  * Arch Linux: Fix generation of WINE prefixes.
  * Debian: Prevent a leak of forced gzip compression when going over .deb size limit.
  * Debian: Display an explicit error when dpkg-deb version can not be found.

2.33.1

  * Prevent default values for LD_PRELOAD_SOURCE from overriding maintainer-set ones.
  * Add support for completion with some interactive shells:
    - fish
    - zsh
  * DOSBox games: Fix detection of MS-DOS binaries through file/libmagic.
  * UNity3D games: Improve error message when no binary is found.
  * WINE games: Fix inclusion of the winetricks wrapper when using a non-default Direct3D renderer.
  * WINE games: Prevent the creation of an empty registry-scripts directory.

2.33.0

  * Deprecation notices:
    * --package egentoo setting is deprecated,
      --package gentoo should be used instead.
    * Support for SCRIPT_DEPS and check_deps is dropped,
      REQUIREMENTS_LIST and requirements_check, introduced with ./play.it 2.31, must be used instead.
    * Support for ARCHIVE global variable is dropped,
      set_current_archive, introduced with ./play.it 2.27, must be used instead.
    * The following variables are no longer exposed from generated launchers:
      - APP_EXE
      - SCUMMVM_ID
    * The following native libraries are no longer provided by current distributions,
      and can no longer be set as package dependencies:
      - libboost_locale.so.1.74.0
      - libminiupnpc.so.17
    * The previous system for LD_PRELOAD shim support is deprecated,
      the following variables should no longer be used from game scripts:
      - PRELOAD_HACKS_LIST
      - HACK_xxx_NAME
      - HACK_xxx_DESCRIPTION
      - HACK_xxx_PACKAGE
      - HACK_xxx_SOURCE
      See "New system for LD_PRELOAD hacks" below for details.
    * The following variables used to set a disk image loaded by DOSBox are deprecated:
      - GAME_IMAGE
      - GAME_IMAGE_TYPE
      See "Reworked DOSBox disk images support" below for details.
    * The following functions are deprecated:
      - prefix_generate_links_farm
      - launcher_prefix_symlinks_build
      See "Launchers clean-up" below for details.

  * New system for LD_PRELOAD hacks:
    * A new single variable LD_PRELOAD_SOURCE is exposed to game scripts,
      to set a C snippet that should be built into a .so loaded through LD_PRELOAD.

  * Reworked DOSBox disk images support:
    * The path to a DOSBox disk image should be set with DOSBOX_DISK_IMAGE_PATH,
      a path relative to the game root.
    * The type of a DOSBox disk image should be set with DOSBOX_DISK_IMAGE_TYPE,
      supported types are "iso" and "cdrom". If omitted it defaults to "iso".

  * Launchers clean-up:
    * The launcher snippet creating a symlinks farm prefix is now printed using a single function: prefix_symlinks_generate
      This function replaces both previous functions prefix_generate_links_farm and launcher_prefix_symlinks_build.

  * Improved support for Adventure Game Studio games:
    * An Adventure Game Studio game is identified by the AGS_NAME variable being set.
      It should be set to the ScummVM identifier, excluding the engine prefix.
    * The following variables can be omitted from game scripts for Adventure Game Studio games:
      - APP_MAIN_SCUMMID
      - CONTENT_GAME_MAIN_FILES

  * Archive selection improvements:
    * Ensure that archive_initialize_optional checks all candidates if required,
      instead of stopping at the first one with the expected name.
    * Initialising an archive through archive_initialize_required / archive_initialize_optional
      sets the version string on the new archive.

  * Expanded context support:
    * Support for contextual values (archive-specific or package-specific)
      is added for the following variables:
      - APP_xxx_DOSBOX_PRERUN
      - APP_xxx_DOSBOX_POSTRUN
      - REQUIREMENTS_LIST
      - WINE_WINEPREFIX_TWEAKS

  * Package properties fallback values:
    * Fallback values are supported for some package properties:
      - PKG_xxx_ID
      - PKG_xxx_DESCRIPTION
      - PKG_xxx_PROVIDES
      - PKG_xxx_DEPENDENCIES_SIBLINGS
      - PKG_xxx_DEPENDENCIES_LIBRARIES
    * If a value is not set for one of the following common package identifiers,
      a fallback value can used instead if it is set:
      current package         → fallback package
      PKG_BIN64 / PKG_BIN32   → PKG_BIN
      PKG_LIBS64 / PKG_LIBS32 → PKG_LIBS
      PKG_L10N_xxx            → PKG_L10N

  * Improvements specific to WINE games:
    * Improve the ability to set custom WINEPREFIX actions from game scripts,
      by relying on a new function exposed to game scripts: wineprefix_init_custom
      By default this function does nothing, but if overridden from a game script
      its output is included in the list of actions to run on WINEPREFIX initialisation.
    * A variable WINE_REGISTRY_INIT is exposed to game scripts,
      allowing to list registry keys that should be set on WINE prefix initialisation.

2.32.8

  * Fix the ability to require multiple ./play.it-provided old libraries.
  * Fix help message for --package option.
  * Add support for extra native libraries:
    - libSDL2_net-2.0.so.0
  * Add support for extra GStreamer decoders:
    - audio/x-wma
    - video/x-wmv

2.32.7

  * Restore late icons requirements check.

2.32.6

  * Allow early icons requirement check to fail for Unity3D games.

2.32.5

  * Fix support for package-specific APP_xxx_SCUMMID during launcher generation checks.
  * Fix early detection of icons for WINE and Mono games.
  * Drop late icons requirements check.
  * Prevent some ignored errors from being shown if /bin/sh = bash.
  * New package dependencies on native commands:
    - pidwait
  * New package dependencies on native libraries:
    - alleg-alsadigi.so
    - alleg-alsamidi.so
    - libaldmb.so.1
    - liballeg.so.4.4
    - libdumb.so.1

2.32.4

  * Fix the free space check against the working directory.

2.32.3

  * Fix warnings for features deprecated with ./play.it 2.31.
  * Drop a call to deprecated function check_deps.
  * Improve the clean up of Unity3D plugins directory.
  * Add the ability to set a dependency on julius, the free engine for Caesar 3.
  * Add the ability to set dependencies on extra native libraries:
    - libcrypto.so.3
    - libssl.so.3

2.32.2

  * Do not override SDL_DYNAMIC_API if already set by the environment.
  * Fix the error message on missing files from multi-parts installers.
  * Fix application type detection with file ≥ 5.46.
  * Fix calls to persistent_path_diversion from launchers when the destination does not exist yet.
  * Fix the ability to use the --list-requirements switch.
  * When listing supported games, prevent a leak of the compatibility level.

2.32.1

  * Visionaire games - Add a missing dependency on SDL 2.
  * Linux native Unity3D games - Add an implicit dependency on SDL2.
  * Ren'Py games - Fix the generation of launchers.
  * Update huge files handling to no longer rely on inherited variables.
  * Gentoo (egentoo variant) - Hardcode some package metadata instead of relying on a broken function.

2.32.0

  * Deprecation notices:
    * The debug system is fully dropped: the library can no longer be built in "debug mode" and the --debug option is no longer supported.
    * Support for the obsolete compatibility wrapper extract_data_from is dropped.
      In most cases game scripts should use archive_extraction_default, introduced with ./play.it 2.25.
      In some specific cases archive_extraction should be used instead, introduced with ./play.it 2.16.
    * Support for the obsolete compatibility wrapper icons_get_from_package is dropped.
      Game scripts should use content_inclusion_icons instead, introduced with ./play.it 2.28.
    * Support for the obsolete compatibility wrapper prepare_package_layout is dropped.
      Game scripts should use content_inclusion_default instead, introduced with ./play.it 2.18.
    * The variables ARCHIVE_xxx_PATH and ARCHIVE_xxx_FILES can no longer be used to list archive contents.
      Game scripts should use the CONTENT_xxx_PATH (or CONTENT_PATH_DEFAULT) and CONTENT_xxx_FILES variables introduced with ./play.it 2.18.
    * The variable APP_WINE_LINK_DIRS can no longer be used to divert paths from the WINE prefix to the game prefix.
      Game scripts should use the WINE_PERSISTENT_DIRECTORIES variable instead, introduced with ./play.it 2.23.
    * Support for the obsolete APP_WINETRICKS variable is dropped.
      The variable WINE_WINETRICKS_VERBS, introduced with ./play.it 2.25, should be used instead.

  * Improvements to MD5 hashes caching:
    * Prior to this update, the MD5 hash computation of an archive could happen multiple times,
      if this archive name was shared between multiple supported archives and a MD5 hash was required to identify the correct one.
    * As a side effect of PLAYIT_WORKDIR being set earlier in the process, it no longer always include the game identifier in its path.
    * Users can once again set a custom working directory path by setting PLAYIT_WORKDIR in their environment.
      Beware that running parallel ./play.it calls with a same value for PLAYIT_WORKDIR will inevitably lead to failures.

  * Predictable ordering for archives list:
    * The order of archive identifiers returned by archives_list is now predictable, with the most recent archives at the top.

  * New default paths for game scripts collections:
    * The new default paths are, in priority order:
      - ~/.local/share/play.it/collections
      - /usr/local/share/games/play.it/collections
      - /usr/local/share/play.it/collections
      - /usr/share/games/play.it/collections
      - /usr/share/play.it/collections
    * The legacy paths are still supported, with a lower priority:
      - ~/.local/share/play.it/games
      - /usr/local/share/games/play.it/games
      - /usr/local/share/play.it/games
      - /usr/share/games/play.it/games
      - /usr/share/play.it/games

  * Graphical terminal spawning from launchers:
    * The function "terminal_wrapper" is made available in a launcher by:
      1. Including the output of launcher_wrapper_terminal in the launcher
      2. Add a dependency on the command "terminal_wrapper"
    * On Debian it uses x-terminal-emulator by default, and falls back to xterm.
    * On Arch Linux and Gentoo it uses xterm.

  * Improved support for Debian-provided DXVK:
    * The code handling DXVK installation in WINE prefixes is updated to work with the recent dxvk 2.5.1-1 update that reached Debian unstable.
    * If the Debian-provided dxvk package is available, winetricks is no longer a requirement.
      If this package is not installed winetricks is still used as a fallback.

  * Improvements to winetricks handling:
    * On Debian, x-terminal-emulator is used instead of xterm when winetricks needs to spawn in a terminal.

  * Expanded context support for GAME_ID:
    * The package specific value of GAME_ID is used if provided when fetching it through one of the following functions:
      - path_documentation
	  - path_game_data
      - path_fonts_ttf
      - path_libraries

  * Ren'Py write access to the game directory:
    * Ren'Py games can be run from a symlinks farm prefix instead of the read-only system path, allowing them to write files in the game directory.

  * Case-insensitive archives content:
    * The paths listed in CONTENT_xxx_FILES variables are now case-insensitive.
    * The paths listed in CONTENT_xxx_PATH are still case-sensitive.

2.31.1

  * Work around a loss of input on loss of focus with Unity3D games run through WINE.
  * Display the message about icons inclusion only once.
  * Failure to guess an application type from its MIME information due to CONTENT_PATH_DEFAULT being unset should now trigger an error explicit about the missing variable.
  * Failure to guess an application type from its MIME information due to APP_xxx_EXE being set to a wrong value should now trigger an error explicit about the wrong path.
  * Drop the reliance on a deprecated dependencies system when handling huge files that need to be split.
  * Fix the error thrown when a required archive is missing.

2.31.0

  * Deprecation notices:
    * The variable GAME_ID is no longer set in generated launcher scripts.
    * The ability to set a dependency against liballeg.so.4.4 is dropped.
    * For game scripts targeting a compatibility level ≥ 2.31, sourcing the library no longer automatically run some actions.
      See the "Improved library sourcing" section below for more details.
    * Deleting the temporary path $PLAYIT_WORKDIR should be done using the new dedicated function: working_directory_cleanup
      See the "Working directory clean up" section below for more details.
    * SCRIPT_DEPS should no longer be used to set the list of commands required by the game script.
      See the "Requirements check rework" section below for more details.
    * check_deps should no longer be used to check for the presence of required commands.
      See the "Requirements check rework" section below for more details.
    * The following runtime variables are no longer supported:
      - PLAYIT_PERSISTENT_USER_PATH
      - PLAYIT_PREFIX_PATH
      - PLAYIT_FAKE_HOME_PATH
      See the "Custom paths in launchers" section below for more details.
    * The following variables used to list persistent paths are no longer supported:
      - CONFIG_DIRS
      - CONFIG_FILES
      - DATA_DIRS
      - DATA_FILES
      The following variables (introduced with ./play.it 2.17) must be used instead:
      - USER_PERSISTENT_DIRECTORIES
      - USER_PERSISTENT_FILES

  * Improved library sourcing:
    * The initialization process must now be explicitly started by calling the new dedicated function: initialization_default
      No action is run implicitly on library sourcing, unless a game script is targeting a compatibility level ≤ 2.30.
      Disabling the actions when a compatibility level ≤ 2.30 is targeted can still be done by setting the environment variable $LIB_ONLY to a non-null value.
    * Most steps of the initialization process can be tweaked from game scripts, by overriding the following functions:
      - init_fail_as_root
      - init_shell_options
      - init_games_list
      - init_environment
      - init_compatibility_level_check
      - init_options
      - init_early_actions
      - init_options_validity_check
      - init_archive
      - init_package
      - init_working_directory
      - init_noop_actions
      - init_packages_already_built
      - init_requirements_check
      - init_extra_archives_required
      - init_extra_archives_optional
      - init_archives_integrity_check

  * Working directory clean up:
    * A new dedicated function is provided for deleting the temporary working directory: working_directory_cleanup
      It should be used instead of a direct call to rm.

  * Support for partial context:
    * context_value should not fail even if the current archive, the current package or the default package are not set.

  * Requirements check rework:
    * A new variable is available to list the commands required by the current game script: REQUIREMENTS_LIST.
      It should be used instead of SCRIPT_DEPS in game scripts targeting a compatibility level ≥ 2.31. Unlike SCRIPT_DEPS, it uses line breaks as a separator.
      This legacy requirements list declaration:
      SCRIPT_DEPS="${SCRIPT_DEPS:-} ffmpeg mplex"
      should be replaced with:
      REQUIREMENTS_LIST="${REQUIREMENTS_LIST:-}
      ffmpeg
      mplex"
    * A new command is provided to check for the presence of required commands: requirements_check
      A compatibility wrapper for game scripts relying on check_deps is provided, but it will trigger a deprecation warning when targeting a compatibility level ≥ 2.31.

  * Support for multiple archives with identical name:
    * The name of an archive is no longer assumed to be unique between all supported games collections.
    * If multiple archives share a same name and are supported by distinct scripts, an extra identification step relying on the archive MD5 hash is run.

  * Support for AppImage archives:
    * Extracting game data from AppImage is now supported, relying on binwalk and unsquashfs.

  * Custom paths in launchers:
    * The paths are set early in the generated launchers, using overrideable functions.
    * The following paths are included:
      - PATH_GAME_DATA (the path to the root of the read-only game data)
      - PATH_PERSISTENT (the path to the persistent user data)
      - PATH_PREFIX (the path to the volatile game prefix)
      - PATH_FAKE_HOME (the path to the volatile fake $HOME)
      - PATH_LIBRARIES_SYSTEM (the path to libraries provided by the package)
      - PATH_LIBRARIES_USER (the path to libraries provided by the user)
      - PATH_WINE_REGISTRY (the path to persistent WINE registry dumps)
      - PATH_WINEPREFIX (the path to the WINE prefix)
    * The following functions can be overriden from game scripts to use non-default paths:
      - launcher_path_persistent
      - launcher_path_prefix
      - launcher_path_fake_home
      - launcher_paths_libraries
      - java_init_paths
      - mono_init_paths
      - native_init_paths
      - wine_init_paths
    * Some paths can be overriden at runtime by exporting the following variables:
      - PLAYIT_PATH_PERSISTENT (the path to persistent user data)
      - PLAYIT_PATH_PREFIX (the path to the volatile game prefix)
      - PLAYIT_PATH_FAKE_HOME (the path to the fake $HOME)
      - PLAYIT_PATH_LIBRARIES_USER (the path to user-provided native libraries)
      - WINEPREFIX (the path to the WINE prefix)

  * Custom WINE prefix actions:
    * Game scripts can override the actions run during the WINE prefix initial generation by overriding the following function: wine_wineprefix_init_actions.
    * Linking the game prefix directory into the WINE prefix is included in the default actions, so that step can be skipped by overriding wine_wineprefix_init_actions.

  * Extra option to set archive inner paths:
    * Game script have the ability to set an archive inner path relative to the base path, using the new variable CONTENT_xxx_RELATIVE_PATH.

  * Collection path:
    * A new option is provided, limiting the search path for game scripts: --collection-path
      Usage: --collection-path path
      When a path is provided through this option, game scripts outside of this path are ignored.

2.30.1

  * Fix the detection of the dpkg-deb version in environments where LC_ALL is set.
  * Fix the handling of dependencies on siblings packages for Arch Linux.
  * Display a warning when $target_version is used from a game script targeting ./play.it ≥ 2.26.
  * Improve the error shown during launchers generation if a binary is missing.
  * Throw an explicit error if the obsolete archives naming scheme is used.
  * Throw an explicit error when failing to fetch the header length from a Makeself installer.
  * Throw an explicit error when trying to query the system libraries path for an unsupported architecture.
  * Add the ability to set dependencies on more commands:
    - 7za
    - godot3-runner
  * Add the ability to set dependencies on more native libraries:
    - libatk-bridge-2.0.so.0
    - libdrm.so.2
    - libgbm.so.1
    - libxkbcommon.so.0

2.30.0

  * Deprecation notices:
    * Game scripts targeting a compatibility level ≥ 2.30 should not set dependencies using "PKG_xxx_DEPS".
    * Support for the legacy archive naming convention "ARCHIVE_xxx" is dropped.
      All game scripts must now use the naming convention introduced with ./play.it 2.13 for the main archives: "ARCHIVE_BASE_xxx".
    * Support for the following obsolete compatibility wrappers is dropped:
      - context_archive
      - icons_get_from_workdir
      - icons_move_to
      - launcher_desktop_exec
      - launcher_write
    * Support for the following obsolete variable is dropped:
      - PKG_xxx_PROVIDE
    * Support for setting distribution-specific dependencies using the following variables is dropped:
      - PKG_xxx_DEPS_ARCH
      - PKG_xxx_DEPS_DEB
      - PKG_xxx_DEPS_GENTOO
      The "PKG_DEPENDENCIES_xxx" variables should be used instead.

  * Increased verbosity:
    * Each of these functions now displays a message when it starts its actions:
      - content_inclusion_icons
      - content_inclusion_default / content_inclusion
      - launchers_generation
      - packages_generation

  * Performance improvements:
    * A default package is set early, to be used by the context system when no current package is explicitly set.

  * Improvements to files inclusion:
    * The functions called from "content_inclusion" have been reworked to reduce the number of calls to external commands (find, cp, rm).
      A slight improvement of the time spent on files inclusion can be noticed.
    * Support for the following legacy variables is restored:
      - ARCHIVE_GAME_xxx_FILES
      - ARCHIVE_DOC_xxx_FILES
      Setting any of these in a game script targeting a compatibility level ≥ 2.18 now triggers a deprecation warning,
      instead of being silently ignored (that could cause empty packages to be generated).

  * Improvements to launchers generation:
    * All checks that should be run prior to a launcher generation are now run early, before taking any real action, and only once.

  * New dependency system: sibling packages:
    * A "sibling" package is a package that is built from the current game script, in contrast to packages available from the distribution repositories.
      This old style dependencies list:
      PKG_BIN_DEPS="$PKG_L10N_ID $PKG_DATA_ID"
      should be converted to:
      PKG_BIN_DEPENDENCIES_SIBLINGS='
      PKG_L10N
      PKG_DATA'

2.29.2

  * Ensure that the commands required for icons extraction are available.

2.29.1

  * Throw an error when trying to include an icon for an application with no icon set.
  * Prevent packages_generation from running twice, when called with no argument.
  * Unity3D games: Improve the automatic detection of the game binary.
  * Mono games: Prevent a failure on unknown Mono libraries set as dependencies.
  * Mono games: Add support for setting dependencies on extra Mono libraries:
    - System.Configuration.Install.dll

2.29.0

  * Deprecation notices:
    * The obsolete function package_architecture_string has been dropped.
    * Support for the legacy PKG_xxx_PATH variables is dropped.
      Game scripts should rely on the package_path function instead.
    * The special behaviour of APP_xxx_PRERUN / APP_xxx_POSTRUN for DOSBox is dropped.
      The actions listed in these variables are now always executed before/after calling DOSBox.
    * The following variables are no longer exported:
      - PATH_BIN
      - PATH_DESK
      - PATH_DOC
      - PATH_GAME
      - PATH_ICON_BASE
      The following functions should be used instead:
      - path_binaries
      - path_xdg_desktop
      - path_documentation
      - path_game_data
      - path_icons
    * The following compatibility wrappers are no longer in use by game scripts, and have been removed:
      - archive_get_type
      - context_archive_suffix
      - context_package
      - packages_get_list

  * Codebase improvements:
    * APPLICATIONS_LIST can now be omitted if APP_xxx_TYPE is set.
    * hacks_inclusion_default no longer relies on the package context.
      It loops over the full list of packages, then build and include the hacks for all relevant packages.
    * launcher_write_desktop is updated to no longer rely on the package context.
      The launcher_write_desktop function now expects two arguments:
      USAGE: launcher_write_desktop $package $application
    * Some tar decompression options are explicitly set based on the archive type.
      This prevents tar from failing to extract the content of archives using a non-standard extension.
      The following archive types are included:
      - "tar.bz2" → add "--bunzip2"
      - "tar.gz"  → add "--gzip"
      - "tar.xz"  → add "--xz"
    * A new function is provided to clean-up snippets: snippet_clean.
      The following operation is done on the function input:
      - convert the series of 4 spaces to tabulations.
    * A new function is provided to clean-up lists: list_clean.
      The following operations are done on the function input:
      - remove leading and trailing spaces (including tabs);
      - sort the list and merge duplicate entries;
      - remove empty lines.

  * Optional icons archives:
    * An optional archive providing icons for the current game can be included in a game script by setting the following variables:
      - ARCHIVE_OPTIONAL_ICONS_NAME
      - ARCHIVE_OPTIONAL_ICONS_MD5
      - ARCHIVE_OPTIONAL_ICONS_URL
      - CONTENT_ICONS_PATH
      - CONTENT_ICONS_FILES
      The inclusion is done from the archive, if provided, when the icons inclusion function is called: content_inclusion_icons.
      If the archive is not provided, the inclusion is done from the icon shipped in the game installer (if such an icon is available).

  * Better integration of shipped fonts:
    * A new function is provided to print the install path for TrueType fonts: path_fonts_ttf.
    * A list of TTF font files to include can be set using CONTENT_FONTS_xxx_PATH + CONTENT_FONTS_xxx_FILES.

  * Improved Ren'Py support:
    * Game scripts can rely on system-provided Ren'Py by setting:
      APP_xxx_TYPE='renpy'
      Such game scripts do not rely on APP_xxx_EXE.
      The game content should be available at the root of the game install path. Shipped binaries and libraries should all be excluded from the package.

  * Improved support for custom launchers:
    * Custom launchers can be generated by setting:
      APP_xxx_TYPE='custom'
      and a "custom_launcher" function.
      This function should output the full content of the launcher script that is to be included in the package.

  * More supported dependencies:
    * Support is added for "audioconvert" GStreamer decoder.

  * Changes specific to DOSBox games:
    * The detection of DOS binaries is improved to include .com files in addition to .exe ones.

  * Changes specific to WINE games:
    * Game scripts can require the installation of Mono in the WINE prefix by setting:
      WINE_WINEPREFIX_TWEAKS='mono'
      When Mono is to be installed, the "wine-mono-8.0.0-x86.msi" archive downloadable from the following URL is required:
      https://dl.winehq.org/wine/wine-mono/8.0.0/

  * Changes specific to Debian:
    * The generation of the following metadata files has been reworked:
      - DEBIAN/control
      - DEBIAN/postinst
      - DEBIAN/prerm
    * The fields in DEBIAN/control are now all filled using dedicated functions.

  * Changes specific to Arch Linux:
    * The generation of the following metadata files has been reworked:
      - .PKGINFO
      - .INSTALL
    * The fields in .PKGINFO are now all filled using dedicated functions.

  * Changes specific to Gentoo:
    * The generation of the ebuild has been reworked, and most of it is now filled using dedicated functions.
      This change has been done for both the "gentoo" variant (binary packages) and the "egentoo" variant (source packages).

2.28.1

  * Check the validity of game scripts compatibility level declaration.
  * Fix typos in several messages.
  * Display an explicit error when no .ico file is extracted from a given .exe.
  * Fix icons inclusion using legacy functions.
    The following functions should no longer trigger an error:
    - icons_get_from_package
    - icons_get_from_workdir

2.28.0

  * Deprecation notices:
    * The function icons_inclusion is deprecated, content_inclusion_icons should be used instead.
      cf. "Icons system" below.
    * The functions launchers_write and launcher_write are deprecated, launchers_generation should be used instead.
      cf. "Launchers system" below.
    * The function launcher_desktop_exec is deprecated, desktop_field_exec should be used instead.
      cf. "Launchers system" below.
    * Support for the following deprecated archive types is dropped:
      - mojosetup_unzip
      - zip_unclean
    * Support for the following deprecated functions is dropped:
      - archive_find_path
      - get_context_specific_value
      - launcher_native_libraries_paths
      - launcher_write_script_headers
      - package_get_path
      - packages_get_version
    * Support for the following deprecated variables is dropped:
      - APP_xxx_ICON_ID
      - APP_xxx_LIBS
      - OPTION_xxx
    * Declaring dependencies on the following native libraries is no longer supported:
      - libavcodec.so.58
      - libavformat.so.58
      - libavutil.so.56

  * Codebase improvements:
    * A package-specific contextual value can now be set for GAME_ID.
    * The environment language detection now honours LC_ALL and LC_MESSAGES, in addition to LANG.

  * Icons system:
    * A new function is provided to include game icons: content_inclusion_icons
      USAGE: content_inclusion_icons [$package [$application…]]

  * Launchers system:
    * The game execution command-line can now be overridden from game scripts by redefining the function game_exec_line.
    * New functions are provided to easily fetch or override the value of fields in XDG desktop files:
      - desktop_field_exec
      - desktop_field_icon
    * A new function is provided to generate launchers: launchers_generation
      USAGE: launchers_generation [$package [$application…]]

  * Dependencies system:
    * Support for the following native library is updated to rely on a downloadable archive:
      - libgconf-2.so.4

  * Changes specific to game engines:
    * Unity3D: A more targeted list of libraries is included for Windows builds.
    * ScummVM: Hyphen-minus is now allowed in ScummVM ids, like in the following valid example: "ags:gobliiins5-1".
    * WINE: A virtual desktop can be set from game scripts, using the following variable: WINE_VIRTUAL_DESKTOP.
      WINE_VIRTUAL_DESKTOP can take the following values:
      - none (default if no value is set)
      - auto (use the current screen resolution when the game is launched for the first time)
      - some specific resolution (example: 1280x1024)

  * Changes specific to Debian:
    * dpkg-deb ≥ 1.19.0 is required.
    * fakeroot is no longer required.

  * Changes specific to Gentoo:
    * Several use flags are added to scummvm.

2.27.4

  * An explicit error message is shown if the compilation of a preload shim failed.
  * Support for dependencies on several native libraries is added:
    - libboost_locale.so.1.74.0
    - libdbus-glib-1.so.2
    - libnotify.so.4
    - libtheoraenc.so.1

2.27.3

  * Prevent the current umask value to mess with permissions on packaged paths.
  * Ensure the package context is always set when fetching the path to install libraries into.
  * Debian - Drop the chmod calls made obsolete by the explicit umask setting.
  * Gentoo - Drop an obsolete check that would always fail.
  * Gentoo - Prevent a call to egentoo_package_name when using the gentoo variant.
  * Gentoo - Fix copying of symbolic links during installation.

2.27.2

  * application_type - Ensure errors always stop the execution.
  * error_archive_not_found - Improve the message shown when a required archive is missing.
  * gentoo_package_build_single - Display an explicit error if the `ebuild (…) manifest` call failed.
  * package_archlinux_create_mtree - Fix the message severity level.
  * path_libraries - Ensure the value is always coherent with the package architecture.
  * temporary_directory_checks - Skip all checks if no file operation is going to take place.
  * Add support for dependencies on several commands:
    - corsix-th
    - sed
    - setxkbmap
  * Add support for dependencies on several native libraries:
    - libEGL.so.1
    - libfribidi.so.0
    - libminizip.so.1
    - libtcmalloc_minimal.so.4
    - libwayland-client.so.0

2.27.1

  * Ensure that a missing required extra archive stops the script execution.
  * error_icon_path_empty - Fix showing the error message when LANG is not set to "fr_*" or "en_*".
  * launcher_target_presence_check - Ensure that the script execution stops if the binary path is not set.
  * unity3d_icon_path - Throw an error if no application type is found.
  * unity3d_application_exe_default - Throw an error if no binary could be found.

2.27.0

  * Deprecation notices:
    * Support for the following deprecated functions is dropped:
      - context_specific_value
      - icons_linking_postinst
      - organize_data
      - use_archive_specific_value
    * Support for the following message functions is dropped:
      - print_warning
      - print_error
      See "New wrapper for messages display" for more details.
    * archive_get_type is deprecated, archive_type should be used instead. See "Changes related to archives" for more details.
    * The legacy global variables ARCHIVE and PKG should no longer be used. See "Improvements of the context system" for more details.
    * The functions context_archive and context_package are deprecated. See "Improvements of the context system" for more details.
    * The variable APP_xxx_TYPE_VARIANT is no longer supported, GAME_ENGINE should be used instead. It can usually be omitted, like with APP_xxx_TYPE_VARIANT.
    * The packages_get_list function is deprecated, packages_list should be used instead.

  * New wrapper for messages display:
    * A new function is provided to display all messages: print_message
      It expects a priority level as its first argument:
      - `print_message 'error' $message` replaces `print_error ; printf $message`
      - `print_message 'warning' $message` replaces `print_warning ; printf $message`
      - `print_message 'info' $message` replaces `printf $message`

  * Changes related to archives:
    * The presence of an optional archive can be checked using a dedicated function: archive_is_available
    * The type of an archive is retrieved using a new function: archive_type
      Unlike the previous function (archive_get_type), this will not trigger an error if no type is set for the given archive.

  * Improvements related to icons extraction:
    * A new function is provided to get the full path to an icon file: icon_full_path
    * Most functions related to icons extraction now take an icon identifier instead of the path to an icon file.
    * Reliance on the global variable WRESTOOL_OPTIONS is dropped.

  * Improvements of the context system:
    * A new function is provided to set the current archive: set_current_archive
    * A new function is provided to set the current package: set_current_package
    * The functions used to get the current context have been renamed:
      - context_archive → current_archive
      - context_package → current_package

  * Support for Visionaire engine:
    * A game script can rely on Visionaire engine support by setting GAME_ENGINE='visionaire' or by setting a value to VISIONAIRE_NAME. Since the engine value falls back to "visionaire" when VISIONAIRE_NAME is set, GAME_ENGINE can usually be omitted.
    * Default values are set for multiple variables:
      - APPLICATIONS_LIST
      - APP_xxx_EXE
      - CONTENT_LIBS_BIN_PATH
      - CONTENT_LIBS_BIN_FILES
      - CONTENT_GAME_BIN_FILES
      - CONTENT_GAME_DATA_FILES
      - CONTENT_DOC_DATA_PATH
      - CONTENT_DOC_DATA_FILES
      - PACKAGES_LIST
      - PKG_DATA_ID
      - PKG_DATA_DESCRIPTION
      - PKG_BIN_DEPS
      - PKG_BIN_DEPENDENCIES_LIBRARIES
    * For native Linux games, the used of system SDL is forced.
    * For WINE games, SDL_VIDEODRIVER is prevented from taking the value "wayland".

  * Improvements specific to WINE games:
    * A new compatibility link is added in the WINE user directory: "Local Settings/Application Data" → "AppData/Local".

  * Improvements specific to Unity3D games:
    * For native Linux games, the use of system SDL is forced.

2.26.3

  * archive_path - Ensure that the output is always empty when the archive is not set.
  * icon_application - Print an explicit error if no application identifier could be found for the given icon.
  * launcher_target_presence_check - Do not display an error when no application type is set.
  * launcher_write_script - Check for the binary presence early.
  * Arch Linux: Fix .INSTALL metadata file generation when post-installation messages are set.

2.26.2

  * archive_dependencies_check - Ensure that a failure to get the archive type triggers a fatal error.
  * archive_name - Add ability to compute the archive name from ARCHIVE_xxx_PATH.
  * archive_path - Ensure that the output is always empty when the archive is not set.
  * archives_integrity_check_md5 - Prevent an unexpected hashsum mismatch error for archives with no expected MD5 hash set.
  * icon_application - Prevent a mix up between applications sharing a similar prefix.
  * Arch Linux - Fix broken .PKGINFO "conflict" / "provides" fields.

2.26.1

  * Fix archive integrity check when using extra archives providing native libraries.
  * Always use an absolute path for the archive path.
  * Store a cached value of the archive path the first time it is computed.
  * Ensure that archive content extraction using unzip overwrites files.
  * Debian - Ensure that dpkg-deb follows the custom TMPDIR value.

2.26.0

  * Deprecation notices:
    * ./play.it can no longer be run by the root account, unless PLAYIT_OPTION_RUN_AS_ROOT=1 is set.
    * ${PLAYIT_WORKDIR}/gamedata is deleted automatically at the end of the content_inclusion_default execution for game scripts targeting a compatibility level ≥ 2.26, so a manual deletion attempt after that would fail.
    * target_version should no longer be set for game scripts targeting ./play.it ≥ 2.26. See "New way to set the compatibility level from a game script".
    * The legacy variable SOURCE_ARCHIVE should no longer be used from game scripts. See "Improvements to archives content extraction".
    * The legacy variable ARCHIVE_xxx should no longer be used to set neither the archive name nor the archive path. See "New archives properties".

  * New way to set the compatibility level from a game script:
    * Setting the compatibility level should be done using a new variable: PLAYIT_COMPATIBILITY_LEVEL.
    * Setting a compatibility level is no longer required. It is still very strongly recommended. Game scripts with no compatibility level set will break.
    * New functions are provided to work with the compatibility level:
      - compatibility_level: Get the compatibility level that has been requested.
      - compatibility_level_is_at_least: Check the compatibility level against a given version.

  * Improvements to archives content extraction:
    * A new function is provided to extract content from the current archive: archive_extraction_default. Unlike archive_extraction, it does not take any argument and will automatically pick the current archive (the one passed on the command line or found in the current directory).

  * New archives properties:
    * A new variable is exposed to set an archive name: ARCHIVE_xxx_NAME.
    * A new variable is exposed to set an archive path: ARCHIVE_xxx_PATH.
    * The presence of archive extra parts is checked automatically up to ARCHIVE_xxx_PART99.

  * Support for obsolete native libraries provided through downloadable archives:
    * Support for the following native libraries is added:
      - libcurl.so.4+CURL_OPENSSL_3 (libcurl.so.3 and libcurl.so.4 including the CURL_OPENSSL_3 symbol)
      - libFLAC.so.8
      - libidn.so.11
      - libpng12.so.0
      - libssl.so.1.0.0
      - libssl.so.1.1
    * Adding a dependency on one of these libraries is done by including it in PKG_xxx_DEPENDENCIES_LIBRARIES, like it is done for system-provided packages.
    * The extra archive is required only when building packages for a system that does not provided the expected library from its repositories.
    * To be able to use these dependencies, the new function "archive_extraction_default" must be used. See "Improvements to archives content extraction".

  * Provide the ability to use a fake $HOME path, to prevent cluttering of the real $HOME:
    * The fake $HOME path is automatically enabled if FAKE_HOME_PERSISTENT_DIRECTORIES is set by the game script. Paths listed in this variable are diverted to persistent storage. The default fake $HOME path is ${XDG_CACHE_HOME}/play.it/home/${GAME_ID}, this path can be overridden at runtime by exporting the variable PLAYIT_FAKE_HOME_PATH.
    * XDG basedir paths from the fake $HOME are automatically diverted to the same paths in the real $HOME.

  * Support for LD_PRELOAD hacks:
    * A list of hacks can be provided by PRELOAD_HACKS_LIST, one per line.
    * Each hack must set the following properties:
      - HACK_xxx_NAME
      - HACK_xxx_DESCRIPTION
      - HACK_xxx_PACKAGE (can be omitted, probably not a good idea)
      - HACK_xxx_SOURCE
    * The following new function should be called from the game script to build and include the hacks: hacks_inclusion_default.

  * Improvements to the handling of packages metadata:
    * The "package_description" function now only returns the value of PKG_xxx_DESCRIPTION, without extra formatting. In addition, it triggers an error if this description includes line breaks.

  * Expansion of the context system:
    * The following variables got support for contextual values:
      - APPLICATIONS_PREFIX_TYPE
      - APP_xxx_PREFIX_TYPE
      - APP_xxx_PRERUN
      - APP_xxx_POSTRUN
      - USER_PERSISTENT_FILES
      - USER_PERSISTENT_DIRECTORIES

  * Rework packages post-installation and pre-removal actions:
    * A new variable can be set to a list of warnings that are displayed post-installation, one per line: PKG_xxx_POSTINST_WARNINGS.

2.25.6

  * content_inclusion_chunk_single - Fix behaviour when PACKAGES_LIST has a contextual value set.
  * error_package_does_not_exist - Fix French translation.
  * Gentoo - Fix the definition of the postinst/prerm package scripts.

2.25.5

  * Gentoo - Fix the function call used to fill the DESCRIPTION ebuild field.
  * Gentoo - Fix the function call used to fill the RDEPEND ebuild field.
  * Gentoo - Drop unwanted "$" at the beginning of the version string.
  * Gentoo - Fix a typo in the variable setting the compression command.
  * Gentoo - Fix ebuild settings through environment variables.
  * Gentoo - Drop broken support for --compression none.
  * Gentoo - Move the generated packages to the output directory, instead of deleting them.

2.25.4

  * Add support for extra native libraries.
  * Trigger a warning if APP_xxx_LIBS is set from a game script targeting a compatibility level ≥ 2.19.
  * content_path - Prevent a failure if CONTENT_PATH_DEFAULT is empty.
  * games_find_script_for_archive - Prevent a broken pipe non-blocking error.

2.25.3

  * application_type_guess_from_file - Prevent failure when APP_xxx_EXE is not set.
  * archive_extraction_makeself - Decrease the time spent on files extraction.
  * archive_extraction_mojosetup - Decrease the time spent on files extraction.
  * content_path_default - Throw an explicit error if no path is set.

2.25.2

  * persistent_list_directories / persistent_list_files - Reduce reliance on variable_is_empty.

2.25.1

  * archive_get_type - Fix archive type detection using file headers.
  * debian_package_build_single - Fix usage of $dpkg_options variable.

2.25.0

  * Deprecation notices:
    * Support for the legacy compression options is dropped. See "Compression methods rework" in 2.22.0 release notes for more details.
    * The variable APP_WINETRICKS is deprecated, and will be ignored for game scripts targeting ./play.it ≥ 2.26. See "Improvements to support for WINE games" below for more details.

  * New command line options:
    * --list-available-scripts — Print the list of game scripts available on this system.
    * --list-supported-games — Print the list of supported games. The output of this option can take up to several minutes to be generated, depending on the number of available game scripts.

  * New make actions:
    * make shunit2 - Run a series of unit tests based on shUnit2.
    * make shunit2-coverage - Display a coverage report for shUnit2 tests.
    * make check - This command is extended to include the shUnit2 tests and their coverage report.

  * New dependencies system for commands required at runtime:
    * A new variable is exposed to game scripts: PKG_xxx_DEPENDENCIES_COMMANDS
      It can be set to a list of commands that are required by the game at runtime, one per line.

  * Improvements to support for WINE games:
    * Add ability to set the default value for WINEDLLOVERRIDES, using a new variables: WINE_DLLOVERRIDES_DEFAULT.
      If this variable is not set, the generic default value is used:
      WINEDLLOVERRIDES='winemenubuilder.exe,mscoree,mshtml='
    * A new variable is exposed for listing required winetricks verbs: WINE_WINETRICKS_VERBS.
      The old variable name APP_WINETRICKS is still supported for game scripts targeting ./play.it < 2.26.

  * Improved support for Unity3D games, the following variables can be omitted and will fall back on default values:
    - APP_MAIN_EXE (including for Windows games)
    - CONTENT_GAME_BIN_FILES
    - CONTENT_GAME_BIN32_FILES
    - CONTENT_GAME_BIN64_FILES
    - CONTENT_GAME_DATA_FILES

  * Improved support for Unreal Engine 4, the following variables can be omitted and will fall back on default values:
    - APP_MAIN_ICON_WRESTOOL_OPTIONS
    - CONTENT_GAME_BIN_FILES
    - CONTENT_GAME_DATA_FILES
    - PKG_BIN_DEPENDENCIES_GSTREAMER_PLUGINS
    - WINE_DIRECT3D_RENDERER
    - WINE_PERSISTENT_DIRECTORIES
    - WINE_WINETRICKS_VERBS

2.24.1

  * application_options - Fix test preventing line breaks in application options string.
  * archive_guess_type_from_name - Ensure that an empty string is returned if no type could be guessed.
  * content_inclusion - Check that the given package identifier is valid.
  * content_inclusion_chunks - Drop declaration of unused variable.
  * Prevent incompatibility between old .deb format 0.939000 and xz compression.
  * Do not tweak shell options from inside functions.
  * Add support for extra native libraries.

2.24.0

  * Deprecation notices:
    * The following functions are deprecated:
      - launcher_native_libraries_paths
      - launcher_write_script_headers
    * The following functions are deprecated for game scripts targeting ./play.it ≥ 2.14:
      - write_metadata
      - build_pkg
      See the section "Changes related to packages generation" below for more details.
    * Support for the following application types is dropped:
      - renpy
      - residualvm
    * Ignoring errors during calls to archive_extraction can no longer be done using `set +o errexit`,
      because `set -o errexit` is forced after the call to external tools used to handle the archives.
      The recommended snippet to use instead is:
      archive_extraction 'SOURCE_ARCHIVE' 2>/dev/null || true
    * Support for the unused variable PREFIX_PREPARE is dropped.
    * DOSBox games: The "userdir_toupper_files" function is no longer included in launchers.
    * Mono games: Support for "APP_xxx_MONO_OPTIONS" is dropped.

  * Improved support for game expansions:
    * The expansion id is appended to the package id by default.
      Explicit PKG_xxx_ID declaration is no longer required for expansions.

  * Changes related to packages generation:
    * A new function is provided for packages generation: packages_generation
      It replaces the two following functions:
      - write_metadata
      - build_pkg

  * Changes related to files extraction from archives:
    * An extraction log is stored at: ${PLAYIT_WORKDIR}/logs/archive-extraction.log
    * Minimal permissions are always applied on extracted files.
    * MojoSetup archives: unzip is used instead of unar to handle the inner archive.

  * Changes specific to ScummVM games:
    * Allow omitting APPLICATION_xxx_TYPE for ScummVM applications.

  * Changes specific to WINE games:
    * Throw an explicit error if a required registry script could not be loaded.

2.23.6

  * Fix error displayed when an unkown archive type is set.
  * WINE: Fix automatic dependencies addition based on WineD3D renderer.

2.23.5

  * MojoSetup archives: Fix the extraction of the inner .zip archive.

2.23.4

  * Prevent output redirection from leaking after error messages.
  * Add support for dependencies on extra native libraries.

2.23.3

  * Add support for extra native libraries.
  * Unity3D: Prevent plugins inclusion failure if no architecture-specific directory is shipped.
  * Unity3D: Prevent a crash on Linux 6.1 by disabling the MAP_32BIT flag with some Unity3D builds.

2.23.2

  * Fix warning displayed on unsupported GStreamer media format.
  * Fix content inclusion when using legacy ARCHIVE_xxx_FILES variables.
  * Do not generate an empty list of unsupported GStreamer decoders.
  * Add support for extra GStreamer decoders.
  * Add support for extra native libraries.
  * Avoid querying unset variables.

2.23.1

  * Display an explicit error on package building failure.
  * Fix install path for native libraries.
  * Add support for more native libraries dependencies.
  * Arch Linux: Fix filling "conflict" and "provides" in package metadata.
  * Gentoo: Fix setting the list of dependencies on native libraries.

2.23.0

  * Deprecation notices:
    * Game scripts targeting ./play.it ≥ 2.23 can no longer use the legacy compression values, see "Compression methods rework" in the 2.22.0 section for more details.
    * Trying to expand an unset variable triggers an error, for game scripts targeting ./play.it ≥ 2.23.
    * APP_WINE_LINK_DIRS is deprecated, setting it from a game script targeting ./play.it ≥ 2.23 triggers a warning. For games scripts targeting ./play.it ≥ 2.24, it will by ignored silently. See "Improved support for WINE games" below for more details.
    * PKG_xxx_PROVIDE is deprecated, setting it from a game script targeting ./play.it ≥ 2.23 triggers a warning. For games scripts targeting ./play.it ≥ 2.24, it will by ignored silently. See "Packages metadata improvements" below for more details.

  * Dependencies handling improvements:
    * The generation of a launcher for the following application types automatically adds the required dependency to the current package:
      - dosbox
      - java
      - mono
      - renpy
      - residualvm
      - scummvm
      - wine
    * Dependencies on media formats decoded by GStreamer can be listed using a new variable: PKG_xxx_DEPENDENCIES_GSTREAMER_PLUGINS.
      The following formats are supported:
      - avidemux
      - decodebin
      - deinterlace
      - audio/x-wma, wmaversion=(int)1
      - video/quicktime, variant=(string)iso
      - video/x-ms-asf
      - video/x-msvideo
      - video/x-wmv, wmvversion=(int)1

  * Application type improvements:
    * The application type can be guessed from the game binary even if it is not in the current package.

  * Packages generation improvements:
    * A package can now provide/conflict with multiple package names, using a new variable PKG_xxx_PROVIDES
      One provided name should be written on each line, using line breaks as the list separator.
    * If all packages are already built, the execution stops early to avoid unnecessary resources and time usage.
    * Debian: Automatically use old .deb format (0.939000) to avoid size limits.

  * Improved support for Unity3D games:
    * Shipped plugins for Unity3D games can now be listed using a new dedicated variable: UNITY3D_PLUGINS.
      If it is set to a non-empty value, it is used during the call to "content_inclusion_default" to include the listed plugins into the path dedicated to shipped libraries. Plugins that are not listed are removed to ensure they are not included later by some "CONTENT_xxx_FILES" greedy pattern.

  * Improved support for WINE games:
    * A new variable is used to list the paths that should be diverted from the WINE prefix: WINE_PERSISTENT_DIRECTORIES
      Its value is a list of paths relative to $WINEPREFIX/drive_c, one per line.

  * Improved handling of huge files (>9GB):
    * Files that are bigger than 9GB should be listed using a dedicated variable: HUGE_FILES_xxx
      "xxx" is the suffix of the package that includes these files by default, so a list for PKG_DATA would be named HUGE_FILES_DATA.
    * The files split is done only when building .deb packages, as Arch Linux and Gentoo packages have no size limit.

  * Improved support for Makeself and MojoSetup archives:
    * The type declaration can be omitted for MojoSetup archives.
    * Support is added for Makeself archives.

2.22.5

  * Use a single function to handle the copy of the game binary into the prefix.
  * Fix permissions on the manual pages.
  * Add support for more native libraries dependencies:
    - libc++.so.1
    - libc++abi.so.1
    - libpcre.so.3
  * Arch Linux: Improve listing of packages providing generic dependencies.
  * Arch Linux: Prevent querying of unset variables.

2.22.4

  * Arch Linux: Fix fetching the maintainer name from /etc/makepkg.conf.
  * Arch Linux: Fix adding multiple dependencies for a single generic keyword.
  * Gentoo: Fix support for PKG_xxx_PROVIDE.
  * Gentoo: Prevent querying of unset variables.

2.22.3

  * Ensure function return codes are never hidden behind cat calls.
  * Ensure package architecture is always fetched using the dedicated function.
  * Run a late requirements check for icons extraction.
  * Add support for missing native libraries dependencies:
    - libutil.so.1
    - libXmu.so.6
  * Arch Linux: Rework packages metadata generation to no longer rely on a variable leak.
  * Arch Linux: Fix libvulkan.so.1 dependency.

2.22.2

  * Improve automatic detection of DOS executables.
  * Display a list of unknown Mono libraries if some have been required.
  * Prevent functions failures to be hidden by while loops.

2.22.1

  * Fix inclusion of pre-run/post-run actions in launchers for WINE games.
  * Improve handling of pre-run/post-run actions in launchers for native games.
  * Add support for libbz2.so.1 native library dependency.

2.22.0

  * Deprecation notices:
    * Multiple options are dropped, here are the replacements that should be used:
      - --icons yes (no replacement, this is the default behaviour)
      - --icons no → --no-icons
      - --skip-free-space-check → --no-free-space-check
      - -c → --config-file
      - -h → --help
      - -v → --version
    * Functions used to fetch packages metadata have been renamed:
      - packages_get_maintainer → package_maintainer
      - packages_get_version → package_version (a compatibility alias is provided)
      - package_get_architecture → package_architecture
      - package_get_architecture_string → package_architecture_string
      - package_get_description → package_description
      - package_get_id → package_id
    * "launcher_write_script_wine_run" is obsolete, "wine_launcher_run" should be used instead. A compatibility wrapper is provided for game scripts targeting ./play.it < 2.22.
    * Legacy environment variables (usually "OPTION_xxx") are still exported only for game scripts targeting ./play.it ≤ 2.22. See "Options system rework" below for more details.
    * The legacy values for --compression are still valid only for game scripts targeting ./play.it ≤ 2.22. See "Compression methods rework" below for more details.
    * "unity3d" is no longer a full blown application type, but a variant of the application type "native". See "New application type variant system" below for more details.
    * The internal test "variable_is_set" is dropped. "get_value" no longer throws an error when trying to query an unset variable, it returns an empty value instead.

  * Options system rework:
    * A new function is provided to fetch the current value of a given option:
      option_value $option_name
      As an example, instead of a direct use of the value of the deprecated variable $OPTION_COMPRESSION, the following function call should be used:
      option_value 'compression'
    * The game archive is no longer the first mandatory argument when calling the "play.it" command. It can now be provided anywhere on the command line.
    * All options can be set using environment variables, here is the full list of command line arguments and for each one the equivalent environment variable:
      - --checksum → PLAYIT_OPTION_CHECKSUM
      - --compression → PLAYIT_OPTION_COMPRESSION
      - --config-file → PLAYIT_OPTION_CONFIG_FILE
      - --debug → PLAYIT_OPTION_DEBUG
      - --help → PLAYIT_OPTION_HELP
      - --list-packages → PLAYIT_OPTION_LIST_PACKAGES
      - --list-requirements → PLAYIT_OPTION_LIST_REQUIREMENTS
      - --no-free-space-check → PLAYIT_OPTION_FREE_SPACE_CHECK
      - --no-icons → PLAYIT_OPTION_ICONS
      - --no-mtree → PLAYIT_OPTION_MTREE
      - --overwrite → PLAYIT_OPTION_OVERWRITE
      - --output-dir → PLAYIT_OPTION_OUTPUT_DIR
      - --package → PLAYIT_OPTION_PACKAGE
      - --prefix → PLAYIT_OPTION_PREFIX
      - --show-game-script → PLAYIT_OPTION_SHOW_GAME_SCRIPT
      - --tmpdir → PLAYIT_OPTION_TMPDIR
      - --version → PLAYIT_OPTION_VERSION
      If a same option is set using both an environment variable and a command line argument, the command line argument is ignored.

  * Compression methods rework:
    * Compression options are no longer specific to the target package format, the same four values are available:
      - "none":  no compression (default value)
      - "speed": compression method focusing on compression speed
      - "size":  compression method focusing on size reduction
      - "auto":  use the current defaults for the packages generation tool (not supported when building packages for Arch Linux)
      The legacy values are still available for game scripts targeting ./play.it ≤ 2.22, but their use triggers a deprecation warning. For game scripts targeting ./play.it > 2.22, an error is thrown.

  * New application type variant system:
    * The application type variant can be set from a game script using the variable "APP_xxx_TYPE_VARIANT". There is only one accepted value for now: "unity3d".
    * Unity3D games for Windows are no longer wrongly identified as native Linux games if they set "UNITY3D_NAME" but not "APP_xxx_TYPE".
    * A dedicated per-session log file is used for Unity3D games running through WINE.

  * Changes related to packages:
    * Environment variables set for Debian tools are followed when trying to get the maintainer name and e-mail.

  * Changes specific to Debian:
    * The generation of the DEBIAN/control file is moved to a dedicated function.
    * The package metadata generation is updated to no longer rely on implicit variable inheritance.

  * Dead code removals:
    * Support is dropped for unused compatibility wrappers:
      - package_get_current
    * Support is dropped for unused messages:
      - error_archive_unset
      - error_context_invalid
      - error_no_valid_temp_dir_found
      - error_obsolete_function
      - print_ok
      - warning_missing_library
    * Support is dropped for unused generic dependency keywords:
      - bzip2
      - gconf
      - libcurl
      - libcurl-gnutls
      - sdl1.2
      - sdl2_image
      - sdl2_mixer
      - theora
      - vorbis
      - wine-staging / wine32-staging / wine64-staging
      - xft

2.21.2

  * Display an explicit error when a game script seems to support no archive.
  * Use dpkg for version strings comparison.
  * Ensure the pre-run and post-run actions strings always end with a line break.
  * Add missing native library dependency: libIL.so.1
  * Gentoo: Add the opengl USE flag to relevant SDL packages.

2.21.1

  * Fix Make rule used to build the library.
  * Run syntax checks from the Makefile.
  * Add ability to build release tarballs from Make.
  * Add support for dependencies on more native libraries:
    - libaudio.so.2
    - libcrypt.so.1
    - libFAudio.so.0
    - libgomp.so.1
    - liblcms2.so.2
    - libpixman-1.so.0
    - libSDL_kitchensink.so.1
    - libSDL_sound-1.0.so.1
    - libsigc-2.0.so.0
    - libvorbisenc.so.2
    - libX11-xcb.so.1
    - libxcb.so.1
    - libxcb-randr.so.0
  * Add support for dependencies on more Mono libraries:
    - OpenTK.dll
    - OpenTK.Compatibility.dll
    - OpenTK.GLControl.dll
  * Prevent non-fatal errors when listing package dependencies.
  * Fix the error displayed when no supported archive is found.
  * Add support for "image/x-xpixmap" MIME type for icons.

2.21.0

  * Deprecation notices:
    * Support is dropped for --icons auto. The only valid values are --icon yes|no, defaulting to --icons yes.
    * Support for application type "native_no-prefix" is dropped.
    * For game scripts targeting ./play.it ≥ 2.21, the main archives identifiers must start with "ARCHIVE_BASE". Game scripts targeting an older version can still use the prefix "ARCHIVE" instead.
    * The following functions are deprecated, but still available through compatibility aliases:
      - context_specific_value
      - get_context_specific_value
      - package_get_current
    * The following old functions are dropped, with no compatibility alias:
      - get_context_suffix_archive
      - get_context_suffix_package
      - context_specific_name
      - test_var
    * Up to ./play.it 2.20, all of these content identifiers were tested when calling "content_inclusion_default" (or "prepare_package_layout" for older game scripts):
      - LIBS_xxx
      - LIBS0_xxx
      - (…)
      - LIBS9_xxx
      - GAME_xxx
      - GAME0_xxx
      - (…)
      - GAME9_xxx
      - DOC_xxx
      - DOC0_xxx
      - (…)
      - DOC9_xxx
      Starting with ./play.it 2.21, the search stops at the first unset numbered identifier. So if "GAME1_xxx" is not set, "GAME2_xxx" up to "GAME9_xxx" will be skipped.
      No legacy behaviour is provided for old game scripts.
    * For WINE games, winecfg launchers are no longer generated.
      To spawn winecfg using the prefix for a given name, you can run the following command:
      WINEPREFIX=~/.cache/play.it/wine/${game_id} winecfg

  * New options:
    * --list-packages: List the packages that would be built from the given archive.
    * --list-requirements: List the game script requirements for the given archive.

  * Improvements of file type detection based on MIME:
    * Exclude charset information from "file" output.
    * Add support for "application/x-sharedlib" MIME type.
    * Improve detection of PE32 executables.

  * Reworked context system
    * The following commonly used variables now have context support:
      - APP_xxx_ID
      - APP_xxx_NAME
      - APP_xxx_ICONS_LIST
      - APP_xxx_SCUMMID
    * New functions are provided:
      - context_value: Print the context-sensitive value for the given variable.
      - context_name: Print the name of the variable containing the context-specific value of the given variable.
      - context_archive: Print the identifier of the current archive.
      - context_package: Print the identifier of the current package.

  * Changes related to launchers:
    * Provide a new function printing the path to a launcher script: launcher_path.

  * Changes related to icons:
    * Rework "icons_list_all" to include implicit icons (like the ones from Unity3D or WINE games).

  * Changes specific to Mono games:
    * Dependencies on a list of Mono libraries can be declared with a new dedicated variable: PKG_xxx_DEPENDENCIES_MONO_LIBRARIES.

  * Changes specific to Gentoo:
    * Use PKG_xxx_DEPS_GENTOO with no transformation, allowing to pass more complex dependency constraints.

  * Other changes:
    * Provide new warnings and errors to be used when deprecated/obsolete functions are called:
      - warning_deprecated_function
      - error_obsolete_function
    * If EXPANSION_NAME is set, it is automatically included in the output of game_name.

2.20.3

  * Fix usage of pkg_set_deps_gentoo.

2.20.2

  * Display an error when a DOSBox image disk was not found.
  * Gentoo (egentoo variant): Install data files only if present.
  * Gentoo: Use correct documentation paths.
  * Add support for more native libraries.
  * New generic dependencies:
    - residualvm
    - scummvm

2.20.1

  * Drop duplicate declaration of message function "error_variable_not_set".
  * Update documentation with the "--config-file" option.
  * application_icons_list - Fix support for archive context.
  * applications_list - When parsing the game script, avoid printing duplicates.
  * debian_dependencies_full_list - Fix listing when both PKG_xxx_DEPS_DEB and PKG_xxx_DEPENDENCIES_LIBRARIES are set.
  * Add support for MIME type "application/vnd.microsoft.portable-executable".

2.20.0

  * Deprecation warnings:
    * APP_xxx_PRERUN/APP_xxx_POSTRUN behaviour is changed for DOSBox game scripts targeting ./play.it ≥ 2.20. See "Changes specific to DOSBox" below for more details.
    * "package_get_path" is now a compatibility wrapper around "package_path". See "Changes related to packages" below for more details

  * Codebase improvements:
    * Provide new variable manipulation helpers:
      - variable_is_set
      - variable_is_empty
    * Rework multiple functions to avoid querying unset variables.

  * Changes related to packages:
    * A new function "package_name" is provided, returning the file name of a given package.
    * Packages are prepared in "${PLAYIT_WORKDIR}/packages" instead of the root of "$PLAYIT_WORKDIR".
    * The function returning the path to the directory where a given package is prepared is renamed from "package_get_path" to "package_path".

  * Changes specific to DOSBox:
    * Drop special behaviour when using APP_xxx_PRERUN/APP_xxx_POSTRUN.
      Game scripts targeting ./play.it < 2.20 are unaffected, commands set using APP_xxx_PRERUN/APP_xxx_POSTRUN are still run from inside DOSBox.
      For games scripts targeting ./play.it ≥ 2.20, commands set using APP_xxx_PRERUN are run before spawning DOSBox, and commands set using APP_xxx_POSTRUN are run after exiting DOSBox.
      Two new variables are provided to set commands that should be run inside DOSBox:
      - APP_xxx_DOSBOX_PRERUN
      - APP_xxx_DOSBOX_POSTRUN

  * Changes specific to Mono:
    * Add ability to run games without a local user prefix.

  * Changes specific to Gentoo:
    * Change egentoo output paths. Instead of making packages in data, amd64 and x86 directories, ebuilds are now created in an overlay/games-playit directory and packages in a packages directory.
    * With egentoo variant, generate only one ebuild and one tar archive, with a bit more complexity in the ebuild, in order to decide which content to install.

2.19.1

  * Ensure errors during calls to "game_id" are always blocking.
  * Gentoo: Fix dependencies handling.
  * Gentoo: Ensure libstdc++.so.6 is provided by the correct package.

2.19.0

  * Deprecation warnings:
    * The legacy variables for content inclusion are no longer supported for game scripts targeting ./play.it ≥ 2.19:
      - ARCHIVE_xxx_PATH
      - ARCHIVE_xxx_FILES
      The new variables introduced with ./play.it 2.18 must be used instead:
      - CONTENT_xxx_PATH
      - CONTENT_xxx_FILES
      The legacy ones can still be used only from game scripts targeting ./play.it ≤ 2.18.
    * The following global variables are still available, but are deprecated:
      - PATH_BIN
      - PATH_DESK
      - PATH_DOC
      - PATH_GAME
      - PATH_ICON_BASE
    * "APP_xxx_LIBS" is deprecated, game scripts should no longer rely on it.
      Libraries installed under /usr/lib/games/${GAME_ID} are automatically added to LD_LIBRARY_PATH.
    * The following internal functions are dropped:
      - launcher_write_script_dosbox_application_variables
      - launcher_write_script_dosbox_run
      - launcher_write_script_java_application_variables
      - launcher_write_script_java_run
      - launcher_write_script_mono_application_variables
      - launcher_write_script_mono_run
      - launcher_write_script_native_application_variables
      - launcher_write_script_native_run
      - launcher_write_script_nativenoprefix_run
      - launcher_write_script_native_run_common
      - launcher_write_script_renpy_run
      - launcher_write_script_residualvm_application_variables
      - launcher_write_script_residualvm_run
      - launcher_write_script_scummvm_application_variables
      - launcher_write_script_scummvm_run
    * "application_type" no longer fails if no type could be found.
      Support for the special fallback value "unknown" is dropped, as its only purpose was to avoid the error on empty application type.
    * "package_get_current" no longer falls back on "PKG_MAIN", see "Changes related to packages" below for more details.

  * Improved integration of shipped libraries
    * In addition to standard system paths, libraries are loaded from the following paths, ordered from lower priority to higher priority:
      - APP_xxx_LIBS (deprecated)
      - /usr/lib/games/${GAME_ID} (/usr is replaced by the custom install prefix)
      - ${HOME}/.local/lib/games/${GAME_ID}
    * In addition to game data files and documentation files, "content_inclusion_default" now automatically fetches listed native libraries and put them into a specific install path.
      The native libraries can be listed using global variables similar to the ones already in use:
      - CONTENT_LIBS_xxx_PATH
      - CONTENT_LIBS_xxx_FILES
      As with game data files and documentation files, as single-digit number can be appended to "LIBS":
      - CONTENT_LIBS0_xxx_FILES
      - CONTENT_LIBS1_xxx_FILES
      - (…)
      - CONTENT_LIBS9_xxx_FILES

  * New dedicated functions printing install paths are available:
    - path_binaries
    - path_xdg_desktop
    - path_documentation
    - path_game_data
    - path_icons
    - path_libraries
    These should be used instead of the deprecated "PATH_xxx" variables.

  * Rework launchers generation
    * Game execution failure no longer prevents the execution of post-run actions.
    * The late extra eval step of JAVA_OPTIONS and MONO_OPTIONS is dropped, no current game script was relying on these.
    * APP_xxx_OPTIONS support is added to ResidualVM and ScummVM launchers.

  * Changes related to icons integration:
    * Rework icons requirement check to no longer rely on applications.
    * Add support for archive context to application_icons_list.
    * If no icon is set for a WINE application, try to extract one from the game binary.

  * Changes related to applications:
    * Update applications_list to follow the archive context.
    * Add automatic application type detection based on file type, APP_xxx_TYPE declaration is now optional in more cases.

  * Changes related to packages:
    * Extend the list of supported native libraries for packages dependencies declarations.
    * package_get_current returns the first package of the list of packages to build if no value is explicitly set, instead of the previously hardcoded value "PKG_MAIN".

  * Other changes:
    * Drop system-specific install prefix. The default install prefix is now the same for all supported systems: /usr
    * Do not run a full dependencies check when initializing an archive, only the presence of the dependencies required to handle the current archive is tested.
    * Set working directory path as soon as the archive is found.
    * Automatically add dependency on winetricks if APP_WINETRICKS is set.

2.18.3

  * content_path_default - Do not throw an error if no default path is set.
  * Extend the list of supported native libraries for packages dependencies declarations.
  * Add a format check for package id.
  * WINE: Fix APP_WINE_LINK_DIRS failure on non-empty target.

2.18.2

  * Add ability to get the name of a context-specific variable, using a new dedicated function: context_specific_name.
    This new function should not be used from game scripts before ./play.it 2.19 release.
  * Fix dependencies addition using dedicated functions.
  * Extend the list of supported native libraries for packages dependencies declarations.

2.18.1

  * Identify SteamOS as an Arch Linux derivative.
  * Extend the list of supported native libraries for packages dependencies declarations.
  * archive_dependencies_check - Include archive extra parts during extraction dependencies check.
  * icons_inclusion - Fail explicitly if called with no argument and no applications list can be guessed.
  * launcher_write_script - Throw an explicit error if called with an empty argument.
  * print_instructions - Clear the list of unknown libraries after it has been displayed once.

2.18.0

  * Changes related to archive contents inclusion:
    * CONTENT_xxx_PATH is a new variable replacing ARCHIVE_xxx_PATH.
    * CONTENT_xxx_FILES is a new variable replacing ARCHIVE_xxx_FILES.
    * content_inclusion is a new function replacing organize_data.
    * content_inclusion_default is a new function replacing prepare_package_layout.

  * Changes related to packages:
    * Provide a new dependency system for native libraries, using a new variable:
      PKG_xxx_DEPENDENCIES_LIBRARIES
    * Support is added for extra native libraries.

  * Changes specific to WINE:
    * WINEDLLOVERRIDES can be overridden at runtime.
    * Provide persistent storage for registry keys, using a new dedicated variable:
      WINE_REGEDIT_PERSISTENT_KEYS
    * Add ability to set the Direct3D renderer using WINE_DIRECT3D_RENDERER.

  * Other changes:
    * Drop messages on completion of long tasks.

  * Codebase improvements:
    * Rework prefix generation for WINE games.

2.17.2

  * Prefixes - Fix handling of symbolic links in read-only game data
  * icons_move_to (deprecated) - Drop declaration of unused variable
  * Improve automatic package format setting
  * Identify Artix as an Arch Linux derivative

2.17.1

  * icons_get_from_legacy_path - Fix clean-up step, to avoid an error from rmdir.

2.17.0

  * Changes related to launchers:
    * Prefix type can be set at the application level (using APP_xxx_PREFIX_TYPE)
      or for all applications (using APPLICATIONS_PREFIX_TYPE), with the following valid values:
      - symlinks: generate our usual symbolic links farm, the default for most application types
      - none: the game is run from the read-only system directory, the default for ScummVM and ResidualVM
    * Prefix path can be overridden for the current game session by setting PLAYIT_PREFIX_PATH
      The default value is: ~/.cache/play.it/prefixes/${GAME_ID}
    * WINE prefix path follows WINEPREFIX if it is set. If the variable is unset, it defaults to:
      ~/.cache/play.it/wine/${GAME_ID}
    * A single directory is used for persistent storage of user data.
      It can be set using PLAYIT_PERSISTENT_USER_PATH, and defaults to:
      ~/.local/share/games/${GAME_ID}
    * The undocumented runtime variable PREFIX_ID is no longer supported.

  * Changes related to archives:
    * New archive type "tar.bz2".
    * For multi-part archives, type is optional for extra parts.
    * Allow use of unzip for data extraction from mojosetup archives, if bsdtar is not available.
    * Force the use of a specific tool for content extraction:
      - An archive extractor can be set with ARCHIVE_xxx_EXTRACTOR
      - An options strings can be set with ARCHIVE_xxx_EXTRACTOR_OPTIONS

  * Changes related to icons:
    * Icons inclusion is now done using a single function, icons_inclusion.
    * The following functions are deprecated:
      - icons_get_from_package
      - icons_get_from_workdir
      - icons_move_to

  * Other changes:
    * Drop option to do partial runs with no actual disk write.
      (--dry-run option)
    * New option provided to change ./play.it working path: --tmpdir
      The default value is $TMPDIR, falling back on /tmp

  * Codebase improvements:
    * New layout for source files.
    * Use a dedicated check to detect unexpected empty variables.

2.16.2

  * applications_list - Throw an explicit error on unexpected empty list.
  * prepare_package_layout - Prevent PKG value changes to leak outside of the current function call.

2.16.1

  * icons_list_dependencies - Rely on application_icons_list to get the list of icons.
  * launcher_write_desktop - Drop requirement on APP_xxx_TYPE.
  * get_context_specific_value:
    - Do not try to guess a package identifier if none is set.
    - Do not look for an archive-specific value before an archive is set.
  * Check for dependencies only after the main archive is set.

2.16.0

  * Major changes:
    * Game scripts are no longer provided by this repository,
      they should instead be fetched from dedicated collections.
      The main official game scripts collection is available from
      https://forge.dotslashplay.it/play.it/games
    * Drop support for selective architecture building
      (--architecture option)
    * Disable debug support by default,
      its inclusion is now done through a build flag.
    * A new extended man page is provided,
      available in both English and French.

  * Codebase improvements
    * Rewrite the code used to generate and update the volatile game prefixes.
    * Rework the code handling data extraction from archives.
    * Launchers: Escape single quotes in binary file name.
    * Applications: Allow setting package-specific versions of several
      application properties.

  * Changes specific to WINE:
    * Add ability to set a custom path to `wine` command,
      using a new environment variable: PLAYIT_WINE_CMD

  * Changes specific to ScummVM:
    * Improve ScummVM ID validation.

  * Changes specific to Debian:
    * Drop support for installation instructions relying on dpkg
      (useful only for apt versions older than 1.1)

  * Changes specific to Arch Linux:
    * Restore the generation of the .MTREE package metadata file.
      Its generation can be skipped with --no-mtree.

  * Changes specific to Gentoo:
    * Ensure the directory used to prepare packages allows files execution.
    * Append script revision to package version number.

2.15.1

  * WINE: Set compatibility links to legacy user paths
  * Drop direct calls to PACKAGES_LIST environment variable
  * Fix behaviour of archive_find_path when the archive variable contains
    an absolute path

2.15.0

  * New features:
    * All command line options can now be set through a configuration file,
      its path can be set with --config-file some_path and defaults to:
      $XDG_CONFIG_HOME/play.it/config
    * --show-game-script - display the path to the game script that would be
      used for a given archive, but take no action

  * General improvements:
    * New functions used to fetch game-related values:
      * game_id   - print the id of the current game
      * game_name - print the display name of the current game
    * Provide a new variable CONTENT_PATH_DEFAULT, used as a default value for
      ARCHIVE_xxx_PATH
    * Setting the current package to a value that is not included in the list
      of packages to build triggers an error
    * Rely on MIME type for icon type detection, instead of file extension
    * application_type can now be passed a fallback value

  * Changes specific to Debian:
    * Improve handling of dependency to WINE

  * Changes specific to Gentoo:
    * Use unpacker eclass when using a non-standard compression option
    * Drop support for lzop compression
    * Replace spaces by tabulations and linefeeds in pkg_deps
    * Refactor compression handling

2.14.4

  * Fix ambiguous quoting when using prefix/suffix pattern removal

2.14.3

  * Fix ability to call the wrapper with --help
  * WINE: Fix a failure to get the path to current package when generating the
    .desktop launcher for winecfg
  * Gentoo: Update icon cache after installation and removal
  * Gentoo: Fix "provides" fields for ebuild generation

2.14.2

  * Ensure all errors related to fetching the path where a package is prepared
    are blocking
  * Fix fetching current package when getting the path where a .desktop file
    should be written
  * Fall back on guessed value for game binary only if no value has been
    explicitely set
  * Improve handling of failure state on errors

2.14.1

  * Only use application type guessing if none is explicitely set
  * Drop ShellCheck "disable" directives for non-POSIX local usage
  * Ensure invalid application type always throws blocking errors
  * Fix fetching application type
  * Show an explicit error when tolower/toupper is given an invalid target

2.14.0

  * New features:
    * Archives: Add support for tar.xz archives
    * Engines: Improve support for Unity3D games, with a new dedicated application type
    * Launchers: Provide new functions used to display localized messages
    * Launchers: Add a new hook for commands to run before the initialization of the game prefix
    * Launchers: Provide a new function used to convert filenames case
    * Icons: Add support for X PixMap icons (.xpm)

  * General improvements:
    * Improve the validity tests run when setting temporary directories

  * Packages-related improvements:
    * Always use the archive-specific list of packages when available
    * Add several new dependency keywords

  * Installation:
    * The default path for installing the "play.it" command as a non root user
      is now "$HOME/.local/bin", instead of "$HOME/bin"
    * The path for installing game scripts is now $(datadir)/play.it/games/50_core,
      where $(datadir) defaults to:
      - /usr/local/share/games for installation as root
      - $XDG_DATA_HOME for installation as a non-privileged user

  * Code maintenance:
    * A new source file is used for functions dedicated to variable manipulations
    * A new function is provided for getting context-specific variable values
    * Provide new helper functions easing the manipulation of applications and icons
    * Launchers: Rework the generation of the XDG desktop files

  * Deprecation notices:
    * get_archive_specific_value is no longer available
    * use_archive_specific_value and use_package_specific_value are now
      compatibility aliases around the new function get_context_specific_value

2.13.3

  * Redirect all debug messages to /dev/stderr
  * Gentoo: Stop emerge on errors
  * Arch Linux: Drop generation of .MTREE metadata file

2.13.2

  * Fix getting icon path for pre-2.8 game scripts with globs expanding to spaces
  * Improve the search for a proper working directory
  * Improve function descriptions in the icons source file
  * Gentoo: Use fakeroot (≥1.25.1) instead of fakeroot-ng

2.13.1

  * Fix data migration from volatile prefix to persistent paths
  * Fix filenames case conversion failure on non-ascii characters
  * Fix wrapper installation path
  * Gentoo: Ensure sdl2-image is built with png and jpeg support

2.13.0

  * New features:
    * New option --version (or -v), displaying the library version
    * Debug notices, disabled by default, enabled with --debug
    * Archives: Add support for InstallShield installers
    * Engines: Add ability to use system-provided Ren'Py
    * Packages: Add support for extra compression methods: lz4, lzip, lzop and zstd
    * Packages: Add an alternative output format targeting Gentoo

  * The installation process GNU Make has been improved to allow targeted actions:
    install-library, install-games, install-wrapper and install-manpage

  * Archive-related fixes and improvements:
    * Use a new archives naming convention, more robust, see our documentation for details:
      https://forge.dotslashplay.it/play.it/doc/-/wikis/dev/scripts/variables#base-archives
    * Rewrite functions related to archives initialization
    * .deb archives: Extract data without relying on dpkg-deb only
    * Fix the error shown when an archive type is not set and could not be guessed
    * Fix the error shown when an unknown archive type is used

  * WINE-specific improvements:
    * Do not override WINEDEBUG if it is already set by the user
    * Provide a standard method to divert arbitrary files from the WINE prefix
      to persistent user-writable paths

  * Packages-related changes:
    * Provide wrapper functions to get package-related informations, including
      packages metadata
    * New generic dependency keywords
    * Improve handling of supported compression methods based on the target
      package format
    * Debian: Update dependency on libgdk_pixbuf-2.0.so.0
    * Gentoo: Change default installation prefix to /usr from /usr/local

  * Environment checks:
    * Run early filesystem checks, allowing to detect failure that would
      happen only at the packages building step
    * New function version_is_at_least comparing two version strings using
      the "x.y.z" format

  * Deprecation notices:
    * icons_linking_postinst is now a compatibility wrapper around standard
      icons extraction functions

2.12.2

  * Archives-related improvements:
    * Improve compatibility check for InnoSetup archives

  * Icons-related fixes:
    * Avoid a potential infinite loop in the icons resolution guessing
      function
    * Fix compatibility with GraphicksMagic compatibility wrapper for
      ImageMagick

  * Package-related fixes and improvements:
    * Arch Linux: Add support for EndeavourOS as an Arch Linux derivative
    * Fix getting hostname on systems without /etc/hostname

  * Errors handling:
    * Fix error message displayed when passing an invalid value to a supported
      option
    * Improve handling of error cases related to empty variables
    * Fix error message shown when there was not enough disk space in tested
      temporary directory candidates

  * Codebase improvements:
    * Use grep --quiet instead of output redirection

2.12.1

  * Wrapper fixes:
    * Fix script detection from archive name

  * Archive-related fixes:
    * .zip archives: Drop selected files extraction using unzip

  * Package-related improvements:
    * Arch Linux: Use multithreaded xz compression by default
    * Arch Linux: Fix packages building failure when using --output-dir with a
      relative path
    * Arch Linux: Generate a .MTREE metadata file
    * Debian: Improve APT version detection

  * Dependencies-related improvements:
    * Show a more explicit message if icotool or wrestool is required but
      missing

  * Launchers-related fixes
    * Avoid broken .desktop Exec field when using spaces in the install prefix

  * Icons-related fixes:
    * Fix icons_move_to failure when targeting a non-empty directory

  * Codebase improvements:
    * Drop the dependency on hostname
    * Unset variables that we do not want to import from the user environment

2.12.0

  * New options:
    * --output-dir: Set the output directory for generated packages
    * --overwrite: Replace packages if they already exist
    * --icons: Allow including icons only if dependencies are present

  * Wrapper changes:
    * Drop $XDG_RUNTIME_DIR from the candidates for temporary directories
    * Prevent scan of unneeded directories
    * Drop script identification by MD5 hash

  * Archive-related changes:
    * Only extract needed files when using unzip
    * Allow to use renamed installers
    * Add support for LHA archives extraction

  * Engines-related changes:
    * New engine: ResidualVM
    * New engine: System-provided Mono runtime
    * DOSBox: Use PLAYIT_DOSBOX_BINARY in launchers if defined

  * Packages-related changes:
    * Add ability to set variables for package-specific postinst and prerm
      scripts
    * Arch Linux: Improve consistence of 32-bit packages naming

  * New helper functions:
    * version_target_is_older_than: Check if the game script target version is
      older than a given one
    * toupper: Convert files name to upper case

  * New generic dependency keywords:
    * libgdk_pixbuf-2.0.so.0
    * libglib-2.0.so.0 / libgobject-2.0.so.0
    * libmbedtls.so.12
    * libpng16.so.16
    * libopenal.so.1 (alias for "openal")
    * libSDL2-2.0.so.0 (alias for "sdl2")
    * libturbojpeg.so.0
    * libuv.so.1
    * libvorbisfile.so.3 (alias for "vorbis")
    * libz.so.1

  * Codebase clean-up and improvements:
    * Massive rework of all message-related functions
    * Drop hardcoded paths for icons and .desktop launchers
    * Use system-specific default installation prefix for generated packages
    * Forcefully set errexit setting on library initialization
    * Use dirname/basename instead of built-in shell patterns

2.11.4

  * Throw an explicit error when trying to write a launcher for a missing
    binary

  * Use safer `find | while read` constructs in prefix functions

  * Drop unrequired spawning of subshell by organize_data

  * Drop unrequired spawning of subshell by move_icons_to

  * Ensure $PLAYIT_WORKDIR is always an absolute path

  * Arch Linux: Fix bugs in dependencies handling

  * Debian: Fix APT version detection with APT ≥ 2.0.0

  * Debian: Enforce correct permissions for packages metadata

  * Gentoo: Update download link for quickunpkg

2.11.3

  * Fix cdrom type (file or directory) detection for DOSBox games

  * Use -eq instead of = for arithmetic comparisons

  * Update link to issues tracker

  * Improve handling of 7z archives extraction

  * Improve error messages shown when a required script dependency is missing

  * Spawn a terminal when calling winetricks, so its actions are no longer
    hidden from users not running their games from a terminal

  * Use convmv when available for converting file names to lower case, as it
    has better performances than our custom-made function

  * Fix argument usage for check_option_validity, and move it outside of
    play.it-2/src/99_init.sh

  * Arch Linux: Advertise ./play.it in the generated packages metadata

  * Arch Linux: Fix builddate entry in the generated packages metadata

  * Arch Linux: Improve support for libarchive implementation of tar
   ("bsdtar") when building packages

  * Debian: Improve handling of WINE dependency, thanks to Jens Reyer for the
    help on debian-wine mailing list

  * Gentoo: Fix default compression method for generated packages

  * Gentoo: Drop abi_x86_32 abi_x86_32 USE flag for app-emulation/winetricks
    dependency

2.11.2

  * Do not throw an error when a script has been called with --dry-run and an
    icon file is not found

  * Move all compatibility aliases to a dedicated source file

  * glx meta-dependency do not install a transitional package anymore on
    recent Debian versions

  * Allow to skip control of InnoSetup version used in archive passed to
    innoextract

  * New test: Run a single game script in dry mode once for each supported
    archive

  * Check for file existence when an archive is given as argument to a
    game-specific script

  * Display an error when an unknown application type is used

  * When extracting multiple icons at once, ensure that they won’t override
    the ones extracted before them

  * Fix get_archive_specific_value / get_package_specific_value on corner
    cases, by dropping avoidable calls to eval

  * Use cabextract’s -L option to extract files as lowercase

  * Gentoo packages: bump EAPI version to 7

2.11.1

  * Fix apt version detection on old versions of apt

2.11.0

  * Add ability to generate packages for Gentoo, using --package=gentoo

  * Rewrite of launchers-related functions. Compatibility wrappers still
    exist for old functions

  * archive_guess_type: Automatically set ARCHIVE_TYPE for 7-zip archives

  * Nixstaller archives: Guess header length instead of using hardcoded value

  * Improve support for Java games

  * pkg_write_*: Reliably use archive-specific dependencies list when
    available

  * New option --skip-free-space-check: Bypass free space check, create
    temporary directories under $TMPDIR, defaults to /tmp

  * Fix issue with pre-2.8 compatibility code in icons_linking_postinst

  * move_icons_to: Fix crash when --prefix is set to a custom value

2.10.5

  * select_package_architecture: Fix bug when using --architecture=64 (or
    --architecture=auto on 64-bit systems) on an archive providing 32-bit
    binaries only

2.10.4

  * Improve ShellCheck tests coverage

  * Do not let empty dirs lingering after uninstallation using make

  * main script: Fix wrong usage of 'return' instead of 'exit'

  * main script: Update search paths for library and game scripts

  * help: Fix usage instructions when called from main script

  * packages_guess_format: Fix falling back on default package format value
    when host OS couldn’t be guessed

  * icons_get_from_path: Fail with an explicit error message if called with an
    empty icon path

  * print_instructions: Improve message readability

  * write_bin - init_prefix_dirs: Fix use of globbing when setting the paths to
    user directories

2.10.3

  * write_bin - init_prefix_files: Do not ignore symbolic links in
    $CONFIG_PATH / $DATA_PATH when generating or updating prefix

  * pkg_write_deb: Always set "Multi-Arch: foreign" in packages meta-data,
    fixes issues when trying to install DLC for 32-bit games on 64-bit systems

2.10.2

  * write_bin_run_native: Restore pre-2.10.1 version, as the 2.10.1 fix has
    unexpected side effects

2.10.1

  * Drop pre-built library from repository

  * make install: Use different default paths if not run as root

  * Arch Linux: Add missing package to generic dependency 'gcc32'

  * archive_extraction_innosetup: Hide innoextract warnings during extraction

  * write_bin_build_wine: Always sleep 1 second after using winetricks, as
    some tweaks won’t apply directly if the game is called to quickly

  * Set input field separator to default value (space, tab, newline)

  * write_bin_run_native: Remove unneeded duplicated code

2.10.0

  * get_tmp_dir: New function allowing to set a temporary working directory by
    setting $TMPDIR

  * New archive type 'iso', using bsdtar for data extraction

  * get_value: New helper function allowing to get the value of a variable
    using a dynamically generated name

  * New meta-dependencies 'libudev1' and 'theora' respectively providing
    libudev.so.1 and libtheora.so.0

  * New archive type 'innosetup1.7', allowing to ensure that InnoExtract >= 1.7
    is available

  * icon_file_not_found_error: New function displaying an error if some
    function should work on an icon file that could not be found

  * write_bin_run_dosbox: Improve handling of CD-ROM images for DOSBox games

  * Add support for bzip2 compression

  * Set all application-specific variables even for ScummVM games

2.9.2

  * set_temp_directories: Improve the generation of the temporary work
    directory, dropping "mktemp --dry-run" usage

2.9.1

  * extract_data_from: Do not print "OK" after innosetup variants extraction
    (progress already has a visual feedback)

  * Better handling of game updates and DLC (un)installation by automatically
    updating the user prefix on each game launch

  * meta-script: if called without argument, show usage instructions

  * icon_get_resolution_from_file: Fix a bug with pre 2.8 scripts where the
    resolution value of the first analyzed file would be kept for all files

2.9.0

  * Update license file to keep track of all authors

  * New generic dependency: libcurl

  * Remove shebang from library, as it is always meant to be sourced, never
    directly executed

  * Makefile: Add ability to choose the installation path, now defaulting to
    /usr/local/share/games/play.it for library and scripts, and
    /usr/local/games for meta-script

  * Makefile: Do not install play.it 1.x scripts and library anymore

  * meta-script: Add manpage

2.8.3

  * Fix typo in help(), that led to suboptimal wording when called on a script
    with a single supported archive (previous 2.8.2 fix was incomplete)

  * Add automated shellcheck tests based on GitLab CI

  * Improve syntax based on shellcheck 0.5.0 report

2.8.2

  * icon_extract_ico_from_exe: Suppress wrestool error output

  * icon_get_resolution_from_file: Fix compatibility with scripts targeting
    library version 2.7 or older in a more robust way than what has been done
    in 2.8.1

  * Fix typo in help(), that led to suboptimal wording when called on a script
    with a single supported archive

2.8.1

  * Fix icon_get_resolution_from_file and icons_linking_postinst compatibility
    with scripts targeting library version 2.7 or older

  * WINE: Do not remove links to $HOME for scripts targeting library version
    2.7 or older

2.8.0

  * Greatly reduce time taken by play.it meta-script to identify the correct
    script for an archive, by using file name before falling back on MD5 hash
    sum

  * WINE: Remove most links pointing outside of the WINE prefix, to reduce
    $HOME clutter

  * Rework most icon-related code for easier understanding and maintenance

  * Use ImageMagick to extract .png files from .ico containers

  * Update dependencies automatic detection based on new icon extraction
    methods

2.7.5

  * Fix sort_icons behaviour when icon extraction produced a single file

  * meta-script: Fix broken support for ./play.it 1 scripts

2.7.4

  * Fix write_bin_winecfg breaking init_prefix_dirs in winecfg launcher

2.7.3

  * archive_extraction_innosetup: Fix InnoSetup version test

  * Fix archives_get_list not detecting archives named ARCHIVE_(…)_OLD

  * Fix error message displayed by write_metadata when called on an unknown
    package

2.7.2

  * Fix an inverted test in archive_get_infos that broke the MD5 integrity
    check again, the 2.6.2 fix having been accidentally reverted on 2.7.0
    release

2.7.1

  * Fix variable leak during multi-parts archive automatic handling

2.7.0

  * InnoSetup archives: Check ability of available innoextract version to
    extract the target archive before trying to proceed with extraction

  * Try to guess the value of ARCHIVES_LIST if it is not set by the script

  * Use 'APP_ICON' as a fallback value for APP_ICONS_LIST if it is not set

  * Add automatic detection of multi-parts archives

  * New function get_package_version allowing a reliable way to use different
    version values for multiple packages generated from a single archive

2.6.2

  * Fix an inverted test in archive_get_infos that broke the MD5 integrity
    check

2.6.1

  * Fix postinst_icons_linking not working on more than one single app

  * Rework most archive-related code for easier understanding and maintenance

2.6.0

  * Add ability to build only packages for a given architecture

  * Add automatic architecture handling to print_instructions

  * New function prepare_package_layout providing a wrapper for organize_data

  * Improve sort_icons so it can be used on single .png file produced by
    convert

  * Add --dry-run switch, running tests but not extracting data nor building
    packages

  * Use a dedicated function to guess package format to build from host OS

2.5.3

  * When no supported archive is provided, add download URL to archives list

  * Fix variable leaking function scope when calling print_instructions

  * Follow symblic links when copying native game binary in user prefix

2.5.2

  * Fix init_prefix_files crashing when some files exist in PATH_DATA or
    PATH_CONFIG with no equivalent in PATH_PREFIX

2.5.1

  * Add a patch allowing to chose wether or not the desktop files should
    include the full path to the launcher script (default includes it and does
    not use $PATH, so custom values for installation prefix can be used
    without further tweaking)

  * Improve patches syntax following ShellCheck feedback

  * Display an error when using an invalid value for PKG

  * Fix error displayed if calling extract_icon_from on an unsupported file
    type

  * Improve user prefix generation

  * Improve library syntax following ShellCheck feedback

2.5.0

  * Add support for games requiring wine-staging patches

  * Add support for 64-bit WINE games

  * Add support for Windows MSI installers

  * Add support for Microsoft cabinet archives

  * New archive type 'nullsoft-installer'

  * New archive type value 'innosetup_nolowercase' allowing to skip files
    names conversion to lower case

  * New archive type 'zip_unclean'

  * New function use_package_specific_value allowing to get package-specific
    value for a given variable name (if such value exists)

  * New function use_archive_specific_value allowing to get archive-specific
    value for a given variable name (if such value exists)

  * Add 'xrandr' and 'xgamma' to the generic dependencies

  * Add automatic dependencies detection for archive types 'mojosetup_unzip'
    and 'tar'

2.4.2

  * Fix handling by init_prefix_files of files created after the first game
    launch

2.4.1

  * Fix messed up icon path when using get_icon_from_temp_dir

2.4.0

  * Add option to load regedit files on WINE prefix initialization

  * New function get_icon_from_temp_dir, to get an icon in .png format
    directly from the source archive

2.3.2

  * Fix launchers broken in 2.3.1

2.3.1

  * Use full path to game binary in launchers, to avoid issues when using
    non-default install path

  * Do not store temporary files outside of prefix

  * Drop post-run user directories clean-up, redundant with another function

2.3.0

  * Improve handling of MojoSetup extraction with unzip ending with an error
    code

  * Improve handling of user directories

  * Add new packages to the list of generic dependencies

  * Add a patch allowing to change the default package compression method

  * Remove the need to manually clean-up package scripts

  * Preserve symbolic links when copying files

2.2.0

  * Automatically detect archive type for *.rar files

  * Allow to use multiple fallback values for $ARCHIVE_PATH and $ARCHIVE_FILES

  * Make /tmp/play.it world-writable to allow using ./play.it more easily on
    shared systems

  * Allow to set package-specific values for $APP_OPTIONS, $APP_PRERUN and
    $APP_POSTRUN

  * Add $APP_POSTRUN support to WINE launchers

  * Skip building already existing packages

  * New distro-agnostic method to declare dependencies

2.1.1

  * Fails gracefully if organize_data() is called before setting $PKG

  * Fix a bug where postinst_icons_linking() would erase the prerm/postinst
    prior content instead of appending to it

  * Fix a bug with wrestool, where calling it once with the --name option
    would have this option been carried out to all subsequent invocations

2.1.0

  * First fully installable version of ./play.it

  * New script 'play.it' automatically loading the adequate game-specific
    script for the archive given in argument

  * Display an error when calling a script with unsupported arguments

  * New function easing the management of icons provided by post-installation
    links

  * New application type allowing to run native games without using a
    ./play.it prefix

  * The library can now be loaded without implying that it has been called by
    a ./play.it script, making it easier to use by third-party projects

2.0.3

  * Fix error displayed when building .deb packages on systems without apt

  * Better handling of spaces in directories names when displaying
    installation instructions

  * Work around WINE bug 41639

2.0.2

  * Fix a bug with the copy of the game binary in the user prefix for some
    native games

  * Work around WINE bug 29661 for WINE versions prior to 1.9.20

2.0.1

  * Test the validity of options values early in the script execution to throw
    an error before any potentially long task

  * Print 'OK' on potentially long tasks completion without a visual
    progression indicator

  * If host OS auto-detection failed, display a warning before falling back on
    deb format

  * On all distributions providing apt >= 1.1, installation instructions show
    apt usage instead of dpkg + apt-get
