Changelog
Contents
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
- New CORRADE_
PLUGINMANAGER_ NO_ DYNAMIC_ PLUGIN_ SUPPORT preprocessor #define
and CMake variable for easier distinction of platforms without dynamic plugin loading support
PluginManager library
- New PluginManager::
AbstractPlugin:: pluginSearchPaths() interface allowing plugin interfaces to specify plugin search paths to make life simpler for the end user - Added PluginManager::
AbstractManager:: aliasList() for listing all available plugin aliases - Ability to control what plugin is used for given alias using PluginManager::
AbstractManager:: setPreferredPlugins() (see mosra/ magnum-plugins#25) - Ability to configure extra plugin functionality via PluginManager::
AbstractPlugin:: configuration() - Ability to load plugins outside of the plugin directory by supplying a file path to PluginManager::
AbstractManager:: load()
TestSuite library
- When compiling for Emscripten, the corrade_
add_ test() macro now generates a HTML runner for running each test case in a web browser. See Running Emscripten tests in a browser for more information. - corrade_
add_ test() learned a new ARGUMENTS
option for passing additional arguments to test executables
Utility library
- Ability to query current scoped output stream using Utility::
Debug:: output(), Utility:: Warning:: output() and Utility:: Error:: output() - New CORRADE_
DEPRECATED_ NAMESPACE() and CORRADE_ DEPRECATED_ FILE() macros - New CORRADE_
IGNORE_ DEPRECATED_ PUSH and CORRADE_ IGNORE_ DEPRECATED_ POP macros useful for writing and testing APIs that need to use deprecated functionality - New CORRADE_
ASSERT_ OUTPUT() macro as an user-friendly counterpart to CORRADE_ INTERNAL_ ASSERT_ OUTPUT() - New CORRADE_
CONSTEXPR_ ASSERT() and CORRADE_ INTERNAL_ CONSTEXPR_ ASSERT() macros for use in C++11 constexpr functions - String::
beginsWith() and String:: endsWith() overloads taking just a single char
- String::
ltrimInPlace(), String:: rtrimInPlace() and String:: trimInPlace() for easier operation on mutable strings. The String:: ltrim(), String:: rtrim() and String:: trim() functions are now implemented using these. - String::
stripPrefix() and String:: stripSuffix() for checked prefix and suffix stripping
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
- The
Corrade/Utility/AndroidStreamBuffer.h
header is deprecated, use Corrade/Utility/ AndroidLogStreamBuffer.h instead PluginManager::Manager::instance()
is deprecated as it has a confusing naming, use PluginManager::Manager:: instantiate() instead
Potential compatibility breakages, removed APIs
- Removed the unnecessarily opaque
CORRADE_PLUGIN_INTERFACE()
macro. Define apublic
static std::string pluginInterface()
function instead. See PluginManager::AbstractPlugin for more information. - Moved the CORRADE_
PLUGIN_ REGISTER() macro to Corrade/ PluginManager/ AbstractManager.h from Corrade/ PluginManager/ AbstractPlugin.h to reduce header dependencies
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
- Completely removed NaCl support (see https:/
/ blog.chromium.org/ 2017/ 05/ goodbye-pnacl-hello-webassembly.html) - Dropped support for the old MinGW32 (only MinGW-w64 is supported now)
- Bumped minimal CMake version to 2.8.12
- Removed support for OSX 10.8 and older
- Dropped the
compatibility
branch and all support for MSVC 2013 and GCC < 4.7
New features
- MSVC 2015 and 2017 support in
master
branch. It needs some workarounds, thus the compatibility is controlled usingMSVC2015_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
- New Containers::
StaticArray class, similar to Containers:: Array but with stack-allocated storage of compile-time size - New Containers::
StaticArrayView class, similar to Containers:: ArrayView but with compile-time size information - New Containers::
Optional class, providing a subset of functionality from C++17 std::optional
(see mosra/corrade#36) - Added Containers::
NoInit, Containers:: DirectInit, Containers:: DefaultInit, Containers:: ValueInit and Containers:: InPlaceInit tags for better control over initialization of Containers:: Array and Containers:: StaticArray - Added Containers::
Array:: Array(InPlaceInitT, std:: initializer_list<T>) to create Containers:: Array from an initializer list - New Containers::
Array:: Array(T*, std:: size_t, D) constructor that allows wrapping externally allocated array with custom deleter function (see mosra/ magnum-examples#20) - New Containers::
arrayView() and Containers:: staticArrayView() helper functions to make Containers:: ArrayView / Containers:: StaticArrayView instances without needing to fully specify the type (similarly to what std:: make_tuple() is to std:: tuple) - New Containers::
arrayCast() function to reinterpret_cast
arrays with correct size recalculation - New Containers::
arraySize() helper function for easier size queries on array-like types - Added XOR operators to Containers::
EnumSet - New Containers::
enumSetDebugOutput() utility to help with implementing debug operators for Containers:: EnumSet types
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
orPngImageConverter
). New PluginManager::AbstractPlugin:: plugin() function returns the aliased name.
TestSuite library
- Major update of TestSuite library including colored output for more readable output, command-line arguments for fine-grained control, setup/teardown functions, instanced and repeated tests, benchmarks for wall and CPU time, CPU clock, custom benchmarks, ability to override test case name and description and more. See TestSuite::
Tester documentation for more information. - Ability to run TestSuite tests on Android using ADB, with all relevant environment variables propagated to the device/emulator
- Ability to run TestSuite tests from within Xcode via XCTest
- Added TestSuite::
Compare:: Less, TestSuite:: Compare:: LessOrEqual, TestSuite:: Compare:: Greater, TestSuite:: Compare:: GreaterOrEqual and TestSuite:: Compare:: Around - Added TestSuite::
Tester:: setTestName() - Ability to bundle files with corrade_
add_ test() CMake macro for Android and Emscripten tests
Utility library
- Added Utility::
Arguments:: setFromEnvironment(), making it possible to pass options via environment variables. List of all environment options is also available through Utility:: Arguments:: environment() for debugging purposes, environment values are UTF-8 encoded on all platforms - Scoped output redirection in Utility::
Debug - Colored output in Utility::
Debug with scoping and both ANSI and Windows console API support (see mosra/ corrade#21); Utility:: Debug:: isTty() for detecting whether colored output can be used - Added Utility::
Fatal output. Similar to Utility:: Error but exits with defined return code right after printing the message. - Added Utility::
Directory:: isSandboxed(), Utility:: Directory:: executableLocation(), Utility:: Directory:: tmp(), Utility:: Directory:: fromNativeSeparators() and Utility:: Directory:: toNativeSeparators() - Added Utility::
Directory:: map() and Utility:: mapRead() for mapping files into memory, works on non-RT Windows and all Unix-like systems (see mosra/ corrade#27 - Added Utility::
Resource:: hasGroup() - Added Utility::
Unicode:: prevChar(), Utility:: Unicode:: utf8() - Added Utility::
Unicode:: widen() and Utility:: Unicode:: narrow() helpers for interacting with Unicode Windows APIs - Added CORRADE_
TARGET_ IOS and CORRADE_ TARGET_ IOS_ SIMULATOR macros and CMake variables - Added CORRADE_
TARGET_ X86 and CORRADE_ TARGET_ ARM macros - Added CORRADE_
DEPRECATED_ FILE(), CORRADE_ DEPRECATED_ ALIAS(), CORRADE_ ALIGNAS(), CORRADE_ NORETURN and CORRADE_ CXX_ STANDARD macros
Changes and improvements
- Various updates and code modernization (see mosra/
corrade#33)
Containers library
- Containers::
EnumSet now can take a Containers:: NoInit tag to create an uninitialized value - Exposed Containers::
EnumSet:: FullValue constant
PluginManager library
- PluginManager::
Manager now properly loads plugins from UTF-8 encoded paths also on Windows - PluginManager::
Manager can now be constructed without specifying plugin directory
TestSuite library
- TestSuite::
Compare:: Container now prints contents of whole container instead of just the first difference - TestSuite::
Compare:: File, TestSuite:: Compare:: FileToString and TestSuite:: Compare:: StringToFile now properly handles UTF-8 encoded filenames also on Windows - CORRADE_
EXPECT_ FAIL_ IF() now works also on types with explicit bool conversion
Utility library
- Utility::
Arguments:: parse() can now be called with zero/null arguments - Utility::
Arguments:: value() now takes Utility:: ConfigurationValueFlags for easier parsing of hexadecimal and other values - Utility::
Configuration is now able to properly load and save configuration files from UTF-8 encoded filenames also on Windows - Simpler implementation of Utility::
Debug operators, they now take the class by reference instead of by value - Ensuring that pointer values are printed by Utility::
Debug consistently on all platforms - Ensuring that floating-point values printed by Utility::
Debug have enough digits of precision based on their type - All Utility::
Directory functions now properly take and return UTF-8 encoded paths on Windows (see mosra/ corrade#31) - Implemented Utility::
Directory:: configurationDir() and Utility:: Directory:: home() on Emscripten, OSX and iOS with proper handling of sandboxed apps (see mosra/ corrade#6) - Utility::
Resource and corrade_ add_ resource() CMake macro now properly handle UTF-8 filenames on all platforms - Removed global constructors from Utility::
String internals - Added Utility::
Unicode:: nextChar() overload that takes a char array view instead of a std:: string
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()
. Thefind_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 whenCORRADE_USE_PEDANTIC_FLAGS
property is enabled - It's now possible to build only parts of the library using
WITH_*
CMake options andfind_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 tolib/
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
whenCORRADE_CXX_STANDARD
is set to14
or17
Bug fixes
- Containers::
ArrayView:: data() on non-const data now properly returns non-const pointer - Worked around function template merging on MSVC, which caused different signals being merged into one in Interconnect library
- Added a workaround to
interface
macro defined bywindows.h
that broke PluginManager headers - Calling CORRADE_
EXPECT_ FAIL() more than once in a single block caused multiple definition errors - Second row in Utility::
Arguments help output was not properly indented for named arguments - Prefixed Utility::
Arguments failed on encountering value starting with -
- Utility::
Directory:: mkpath() now properly returns false
if path creation fails - Fixed Utility::
Directory:: rm() for directories on Emscripten - Fixed unaligned reads and iterative digesting in Utility::
Sha1 - Properly re-running CMake and updating dependencies when resource configuration file added by corrade_
add_ resource() changes - Fixed Containers::
LinkedList:: move() called on an item itself
Deprecated APIs
- Containers::
ArrayReference is deprecated, use the shorter Containers:: ArrayView name instead - Containers::
Array:: zeroInitialized() is deprecated, use Containers:: Array:: Array(ValueInitT, std:: size_t) instead - Containers::
Array:: from() is deprecated, use Containers:: Array:: Array(InPlaceInitT, std:: initializer_list<T>) instead - Utility::
Arguments:: setHelpKey() is deprecated as its functionality was merged into Utility:: Arguments:: setHelp() - Utility::
Debug:: setOutput() is deprecated and superseded by scoped output, see Utility:: Debug class documentation for more information - Utility::
sleep() is deprecated, use Utility:: System:: sleep() instead CORRADE_*_LIBRARIES
,CORRADE_*_INCLUDE_DIRS
andCORRADE_RC_EXECUTABLE
CMake variables are deprecated in favor ofCorrade::*
imported targets,CORRADE_CXX_FLAGS
is deprecated in favor ofCORRADE_CXX_STANDARD
andCORRADE_USE_PEDANTIC_FLAGS
properties. See Using Corrade with CMake for more information.
Potential compatibility breakages, removed APIs
- PluginManager::
AbstractPlugin now takes plugin name via const&
instead of by-value - Reversed parameter order of CORRADE_
EXPECT_ FAIL_ IF() to be more intuitive - The
Utility::Debug::setFlags()
function was removed, use Utility::Debug:: nospace and Utility:: Debug:: noNewlineAtTheEnd() instead - The Utility::
Directory, Utility:: String and Utility:: Unicode classes are now a namespace (might break using
declarations, but otherwise it's fully source-compatible) - corrade_
add_ test() CMake macro now calls target_link_libraries()
with explicitPRIVATE
keyword, meaning the users also have to specifyPUBLIC
/PRIVATE
/INTERFACE
when callingtarget_link_libraries()
on a test - All path handling functions in Utility::
Directory consistently return and expect only forward slashes as directory separators
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.