Changelog

2019.10

Released 2019-10-24, tagged as v2019.10.

Dependency changes

  • Minimal supported CMake version is now 3.4. Older versions are not supported anymore and all workarounds for them were removed. Download a prebuilt release of a newer version if you need to use Corrade on older systems (such as Ubuntu 14.04 or Debian 8). This is a conservative change that shouldn't affect any additional distribution compared to the CMake 3.1 requirement in 2019.01.

New features

Containers library

PluginManager library

TestSuite library

  • Custom TestSuite comparators can now optionally save diagnostic files as well as print formatted messages to the output. See Saving diagnostic files for more information.
  • Added TestSuite::Tester::setTestCaseTemplateName() for convenient distinction of different specializations of templated test cases
  • TestSuite::Tester now warns when dynamic CPU scaling is used on Linux and benchmarks are being run, as that makes the measurements rather noisy. With the --verbose command-line option it prints further information.

Utility library

Changes and improvements

Containers library

Interconnect library

  • The Interconnect library internals got reworked with less allocations, better memory usage, improved signal emitting performance and support for connecting to arbitrary function objects along with std::function. See also mosra/corrade#63 for more information.

PluginManager library

  • Instantiating a PluginManager::Manager without an explicit plugin directory will only print a warning about no dynamic plugins found if there's no statically linked plugin either. That makes it behave better on setups where all plugins are always linked statically.
  • PluginManager::Manager now explicitly checks for presence of a plugin metadata file for dynamic plugins and fails with PluginManager::LoadState::WrongMetadataFile if it's not found. Previously it was silently ignoring missing metadata files, often resulting in a runtime linker error due to a dependency not being loaded.
  • CORRADE_PLUGIN_REGISTER() now operates completely without heap access, making it safe to run in restricted phases of application execution
  • PluginManager::AbstractPlugin now implements a destructive move constructor

TestSuite library

Utility library

Build system

  • MSYS2 packages are now in official repositories, installable directly via pacman
  • The CORRADE_CXX_STANDARD preprocessor macro learned support for the upcoming C++2a standard. The equivalent CMake property can now be set to 20 to pass the -std=c++2a flag to GCC and Clang and /std:c++latest to MSVC.
  • It's now possible to use the TestSuite library via CMake subprojects also on Android, iOS and Emscripten
  • Explicitly disabling a MSVC linker optimization that causes seemingly similar signals to be conflated together, causing erratic behavior. This is done automatically for CMake-based projects, see the Interconnect::Emitter documentation for more information when using custom buildsystems, see also mosra/corrade#51.
  • Fixed compilation with Clang and -std=gnu++14 (see mosra/corrade#62
  • CORRADE_VISIBILITY_STATIC no longer exports symbols in static libraries to be consistent with hidden visibility by default, additionally -fvisibility-inlines-hidden is passed along with -fvisibility=hidden when CORRADE_USE_PEDANTIC_FLAGS property is enabled in CMake on GCC and Clang to avoid linker warnings on macOS (see mosra/corrade#53)
  • The Emscripten CMake toolchain now sets the EMSCRIPTEN variable to help 3rd party projects (see mosra/toolchains#7)
  • The Emscripten CMake toolchain now looks for emcc on $PATH as a last resort and then uses the parent directory as EMSCRIPTEN_PREFIX (see mosra/toolchains#8)
  • On Windows, if the Emscripten toolchain detects Visual Studio being used as a generator, it'll fail with an error suggesting to use a different generator instead. Previously, CMake silently fell back to using Visual Studio as a C++ compiler, resulting in seemingly impossible errors. See mosra/corrade#78.
  • Clarified interaction of -fvisibility-inlines-hidden and/or -Wl,-Bsymbolic-functions GCC/Clang flags and Interconnect::Emitter
  • The TestSuite library and all tests created with corrade_add_test() are now built with -s DISABLE_EXCEPTION_CATCHING=0 being explicitly specified both for the compiler and linker to work correctly on Emscripten 1.38.36 and newer
  • Emscripten builds now have the -fPIC option disabled by default as it causes linker errors related to __memory_base on 1.38.36 (see also emscripten-core/emscripten#8761)
  • Fixed dynamic plugin metadata location when CMAKE_LIBRARY_OUTPUT_DIRECTORY is set (see mosra/corrade#74)
  • With CMake 3.15 there's an unfortunate collision between CORRADE_CXX_STANDARD and CMake's own COMPILE_FEATURES target property, where a request to use C++14 from a 3rd party library would get ignored with C++11 being used instead. To fix that, the CORRADE_CXX_STANDARD property does nothing if the COMPILE_FEATURES property is set on the target as well. See Using Corrade with CMake for more information.
  • Fixed corrade_add_test() when library output path is set in CMake (see mosra/corrade#77)
  • Plugin metadata are now copied next to the binary as a post-build command instead of only during a full build
  • Updated the iOS toolchain to make find_package(Threads) work correctly

Bug fixes

  • The TestSuite::Comparator class by mistake did not have fuzzy comparison for long double
  • Fixed TestSuite::Compare::around() for types that don't have a total ordering (for example, for Magnum matrix and vector types, !(a < b) might not neccesarily imply that a >= b).
  • Fixed build on big-endian platforms (see mosra/corrade#58)
  • Fixed Utility::Sha1 calculation on big-endian platforms (see mosra/corrade#60)
  • Fixed Utility::Directory::read() to not use ftello() on 32-bit Android and API levels below 24
  • Fixed Utility::Directory::read() to work with files that report an early EOF (such as stuff from /sys on Linux)
  • Fixed Interconnect::Emitter::emit() for signals from multiply-inherited base classes on MSVC — it was due to an insufficiently tested workaround for a template deduction limitation in the compiler (see mosra/corrade#51)
  • Interconnect::Emitter::emit() now works correctly on MSVC for signals from classes where multiple and/or virtual inheritance is involved (see mosra/corrade#51)
  • Fixed CORRADE_COMPARE_WITH() to be callable with expressions such as *comparator
  • Fixed Utility::Tweakable to work correctly with buildsystems using absolute paths for __FILE__ macros (such as Makefiles, Ninja is using relative paths). See mosra/corrade#61.
  • In some corner cases, automatic registering / unregistering of Utility::Resource data happens more than once. While this was allowed for registration, the unregistration caused an assert to be fired. Fixed this to be allowed on both.
  • Utility::Directory::copy() wasn't properly freeing both opened files if one of them failed to open (see mosra/corrade#70)
  • Interconnect::Emitter::emit() (and signal/slot connections in general) now work correctly with non-copyable arguments
  • Fixed Utility::Debug::isTty() (and thus also TestSuite colored output) to reliably work on macOS. Because Xcode output window doesn't support ANSI color escape codes, tt was relying on an undocumented $XPC_SERVICE_NAME variable that was always defined inside Xcode to disable colored output. Nowadays this variable is sometimes defined outside as well, making the check unreliable. Fixed by testing for $TERM instead, see mosra/corrade#73 for more information.

Deprecated APIs

  • Single-argument Utility::Arguments::setHelp() is now deprecated in favor of Utility::Arguments::setGlobalHelp() to avoid it being used for documenting named arguments by accident.
  • Utility::Directory::fileExists() is now deprecated in favor of Utility::Directory::exists(). It was named like this to prevent it from looking like it works on directories only, but such name then caused people to ask if it works on directories as well, not helping anything.
  • Interconnect::Connection::isConnected() and Interconnect::Connection::disconnect() are deprecated and print a warning at runtime as the redesigned internals of the Interconnect library now make it impossible to check that the original Interconnect::Emitter object still exists. Use Interconnect::Emitter::isConnected() and Interconnect::disconnect() instead.
  • Re-connecting a disconnected signal using Interconnect::Connection::isConnectionPossible() and Interconnect::Connection::connect() is not possible anymore in order to make the Interconnect library more efficient. These two functions are now deprecated and just returningthe value of (also deprecated) isConnected().
  • Signatures of TestSuite::Comparator methods were changed in order to support new features. The old variant with operator()() returning a bool and printErrorMessage() instead of printMessage() is still supported for backwards compatibility but custom comparators are strongly advised to upgrade

Potential compatibility breakages, removed APIs

Documentation

2019.01

Released 2019-02-04, tagged as v2019.01.

Dependency changes

  • Minimal supported GCC version is now 4.8.1, GCC 4.7 is not supported anymore. Minimal Clang version is now 3.3, since that's the first version with a complete C++11 support. See also mosra/magnum#274.
  • Minimal supported CMake version is now 3.1. Older versions are not supported anymore and all workarounds for them were removed. Download a prebuilt release of a newer version if you need to use Corrade on older systems (such as Ubuntu 14.04 or Debian 8). See also mosra/magnum#274.

New features

  • Various Corrade features are now being available also as single-header libraries for easier integration into your projects. See Single-header libraries for more information.

Containers library

Utility library

Changes and improvements

Containers library

PluginManager library

Utility library

  • Prefixed or prefix-ignoring Utility::Arguments now work better with 3rd party argument parsers which may be less restrictive about argument name format; arguments that are ignored are not checked for key validity anymore (see mosra/magnum#305)

Build system

Bug fixes

Deprecated APIs

Potential compatibility breakages, removed APIs

Documentation

2018.10

Released 2018-10-23, tagged as v2018.10.

New features

Containers library

PluginManager library

Utility library

Changes and improvements

Containers library

PluginManager library

  • Plugins are now loaded from the filesystem in an alphabetical order for predictable behavior across different systems

TestSuite library

  • Adapted Emscripten test runner markup for consistency with the m.css theme used in Magnum
  • It's now possible to have non-copyable and non-moveable TestSuite::Comparator specializations

Utility library

Build system

  • There's now a PPA for Ubuntu packages. See Packages for Debian, Ubuntu and derivatives for more information.
  • The Resource compiler utility is now fully standalone even with shared builds to minimize annoying first-time-use issues. It's also possible to build just this utility without anything else for example for crosscompiling, by enabling only WITH_RC and disabling all other CMake options.
  • Due to changes in Xcode 10, CMake before 3.12 would fail during the build of Corrade. To prevent that, when Xcode 10 is detected, the build aborts with a clear message upfront, telling the user to upgrade to CMake 3.12. See mosra/corrade#52 and cmake/cmake#18099.

Bug fixes

Documentation

  • All code snippets are now compiled, ensuring no deprecated APIs are used and no accidental compile errors are present
  • TestSuite::Comparator documentation mistakenly stated that it's possible to have multiple operator()() overloads for a single pseudo-type. Due to implementation limitations it's not.

2018.04

Released 2018-05-01, tagged as v2018.04.

Dependency changes

  • Building for Android now requires CMake 3.7 with builtin Android crosscompilation support, the old toolchains were removed. Only the Clang and libc++ toolchain is now supported, support for GCC and libstdc++ was dropped, as it was still missing some important C++11 functionality. See Cross-compiling for Android for more information.

New features

PluginManager library

TestSuite library

Utility library

Build system

  • Stable version of Corrade is now available as a binary package in the ArchLinux [community] repo
  • Homebrew macOS packages were updated to install the stable version by default
  • Fixed the Debian package to not include a revision. While just a warning on Ubuntu, it's a hard error on Debian. (See mosra/corrade#44.)

Bug fixes

  • The Android ADB test runner was not correctly propagating TestSuite CORRADE_TEST_* environment variables to the executable
  • Wrong destruction order of PluginManager::Manager instances could lead to an infinite loop if cross-manager plugin dependencies were involved. Now an assertion fires instead.
  • Fixed usage of Utility::ConfigurationValue specializations to support types without default constructors and be able to return non-default-constructed instances for empty values.

Deprecated APIs

Potential compatibility breakages, removed APIs

Documentation

  • A new Developers guide page containing step-by-step checklists for maintainers and core developers
  • Updating the docs with compiled code snippets to ensure they don't get out of sync with the code
  • Various documentation updates, clarifications and fixes

2018.02

Released 2018-02-15, tagged as v2018.02. See the release announcement for a high-level overview.

Dependency changes

New features

  • MSVC 2015 and 2017 support in master branch. It needs some workarounds, thus the compatibility is controlled using MSVC2015_COMPATIBILITY / MSVC2017_COMPATIBILITY CMake option, which is then exposed as CORRADE_MSVC2015_COMPATIBILITY / CORRADE_MSVC2017_COMPATIBILITY CMake variable and preprocessor macro. See mosra/corrade#34.
  • Windows RT (Store/Phone) support. Builds for that platform have CORRADE_TARGET_WINDOWS_RT CMake variable and preprocessor macro defined.
  • iOS support, integration of TestSuite with Xcode XCTest
  • WebAssembly support when building for Emscripten

Containers library

PluginManager library

  • Name passed to plugin constructors is now the aliased name instead of the actual name, allowing the plugins to have different functionality based on name with which they are loaded (for example an image converter plugin can export different file format if it's loaded as JpegImageConverter or PngImageConverter). New PluginManager::AbstractPlugin::plugin() function returns the aliased name.

TestSuite library

Utility library

Changes and improvements

Containers library

PluginManager library

TestSuite library

Utility library

Build system

  • Continuous testing for Linux, OSX, Windows MSVC, Windows MinGW, Windows RT, iOS, Android and Emscripten on Travis CI and AppVeyor CI, with code coverage on codecov.io; replacing the unmaintained and outdated Jenkins configuration
  • Support for CMake subprojects. You can now clone Corrade into a subdirectory in your project and add it using add_subdirectory(). The find_package() command will then use the CMake subproject instead of looking for it in system-wide locations.
  • Reworked CMake buildsystem to use the new imported target workflow, see Using Corrade with CMake for more information
  • CMake targets are now organized in folders for better development experience in IDEs such as Visual Studio or Xcode
  • Enabling -Wmissing-prototypes warning on Clang when CORRADE_USE_PEDANTIC_FLAGS property is enabled
  • It's now possible to build only parts of the library using WITH_* CMake options and find_package() needs to request particular parts of the library that are used; see Downloading and building Corrade and Using Corrade with CMake for more information
  • corrade_add_plugin() now properly installs plugin *.dll to bin/ and *.lib to lib/ on Windows
  • Added Homebrew package (see mosra/corrade#22)
  • Added corrade_find_dlls_for_libs() CMake macro
  • MACOSX_RPATH is now enabled by default on CMake 3.0+
  • Enabling only C++ in CMake project() call, if possible, to speed up initial CMake run
  • Fixed building on TDM-GCC (see mosra/corrade#35)
  • Fixed various MSVC compilation issues (see mosra/corrade#28)
  • Various fixes for builds without deprecated features enabled (see mosra/corrade#24, mosra/corrade#32)
  • Properly passing /std:c++14 or /std:c++14 when CORRADE_CXX_STANDARD is set to 14 or 17

Bug fixes

Deprecated APIs

Potential compatibility breakages, removed APIs

Documentation

  • New documentation theme powered by m.css and related massive updates of everything
  • Various updates and clarifications to the Coding style page
  • All example code is put into public domain (or UNLICENSE) to free you from any legal obstacles when reusing the code in your apps.
  • The Downloading and building Corrade documentation now prefers package installation instead of manual build
  • Documented how to use Vcpkg packages
  • Various other updates (see mosra/corrade#26, mosra/corrade#30)

Changelogs for previous versions are available in Archived changelogs.