Archived changelogs
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 - Utility::
String:: beginsWith() and Utility:: String:: endsWith() overloads taking just a single char
- Utility::
String:: ltrimInPlace(), Utility:: String:: rtrimInPlace() and Utility:: String:: trimInPlace() for easier operation on mutable strings. The Utility:: String:: ltrim(), Utility:: String:: rtrim() and Utility:: String:: trim() functions are now implemented using these. - Utility::
String:: stripPrefix() and Utility:: 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
andContainers::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()
andUtility::Directory::toNativeSeparators()
- Added
Utility::Directory::map()
andUtility::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()
andUtility::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 returnsfalse
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::Debug::noNewlineAtTheEnd()
is deprecated, use Utility::Debug:: Flag:: NoNewlineAtTheEnd instead 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:: Flag:: 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)
2015.05
Released 2015-05-09, tagged as v2015.05. See the release announcement for a high-level overview.
Dependency changes
No dependency changes in this release.
New features
- Support for plugin aliases in PluginManager library.
- Range-based-for support in Containers::
LinkedList. - Added convenience PluginManager::
Manager:: loadAndInstantiate() function. - Added Containers::
*Array:: slice() and friends. - Utility::
Debug is able to reuse existing operator<<
overloads for std::ostream (see mosra/ corrade#12) - Added Utility::
String:: beginsWith() and Utility:: String:: endsWith().
Changes
- TestSuite::
Compare:: Container is now able to compare non-copyable containers such as Containers:: Array (see mosra/ corrade#9). - Using
const char
instead ofconst unsigned char
for raw binary data. - Better algorithm for comparing floating-point values in TestSuite.
Build system
- CMake now always installs
FindCorrade.cmake
to library-specific location, making it usable without providing own copy of the file in depending projects. TheWITH_FIND_MODULE
option is no longer needed. See mosra/corrade#17. - Displaying all header files, plugin metadata files and resource files in project view to make use of some IDEs less painful (such as QtCreator)
- Properly checking for C++ standard compiler flags to avoid adding conflicting ones (see mosra/
corrade#10) - Gentoo ebuild (see mosra/
corrade#16) - Better handling of RPATH on macOS (see mosra/
corrade#18)
Bug fixes
- Removed static initializers to avoid memory corruption in static builds (see mosra/
magnum#90). - Plugin manager now correctly folows dependency order when unloading plugins.
- Fixed issues with plugin manager having multiple global instances in static builds (see mosra/
corrade#15) - Fixed a crash in Clang caused by overly clever code (see mosra/
magnum#84)
Deprecated APIs
No API was deprecated in this release.
Potential compatibility breakages, removed APIs
- Removed unused plugin replacement feature, as it had questionable benefits and no real use.
- All functionality deprecated in 2014.01 has been removed, namely:
- Removed deprecated ability to use relative includes (e.g.
#include <Utility/Debug.h>
), use absolute paths (#include <Corrade/Utility/Debug.h>
) instead. - Removed deprecated
Utility::String::split()
overload, use either split() or splitWithoutEmptyParts() instead.
- Removed deprecated ability to use relative includes (e.g.
2014.06
Released 2014-06-30, tagged as v2014.06. See the release announcement for a high-level overview.
Dependency changes
- Minimal required GCC version is now 4.7. Support for GCC 4.6 has been moved to
compatibility
branch.
New features
- Initial Android support, see building documentation for more information.
- Utility::
AndroidLogStreamBuffer class for sending messages to Android system log - CORRADE_
TARGET_ ANDROID and CORRADE_ TARGET_ APPLE CMake and preprocessor variables
Changes
- Libraries and plugins in debug build configuration are installed to different locations, making it possible to have debug and release libraries installed alongside each other
- Compiler compatibility mode is now automatically detected by CMake to make the building easier
- It's no longer needed to explicitly test validity of pointer returned from
PluginManager::Manager::instance()
- Improved error reporting in PluginManager library
- Thorough documentation review, fixes and improvements
Bug fixes
- Fixed corner case when Utility::
Resource:: getRaw() could unexpectedly return nullptr
.
Deprecated APIs
No API was deprecated in this release.
Potential compatibility breakages, removed APIs
- All functionality deprecated in 2013.10 has been removed. In particular the deprecated
Interconnect::Emitter::connect()
was removed, use Interconnect::connect() instead.
2014.01
Released 2014-01-21, tagged as v2014.01. See the release announcement for a high-level overview.
Dependency changes
No dependency changes in this release.
New features
- MSVC 2013 support in the
compatibility
branch - Ability to create Containers::
Array from initializer list - Containers::
Array:: release() function to release ownership of the data, similar to std:: unique_ptr:: release() - Containers::
Array[Reference]:: data() function for easier explicit data access and also disallowing pointer conversion of rvalue Array as it would result in access to deleted memory (GCC 4.8.1/Clang only). - Improved state change signals in Interconnect::
StateMachine - Support for multiple template arguments in CORRADE_
COMPARE_ AS() macro in TestSuite library. - Utility::
String:: join() and Utility:: String:: joinWithoutEmptyParts() functions. - Utility::
String:: fromArray() convenience functions to create std:: string from either character array or nullptr
- Ability to retrieve list of all compiled-in resources in given group using Utility::
Resource:: list() - Added
read()
,readString()
,write()
andwriteString()
functions toUtility::Directory
- New CORRADE_
HAS_ TYPE() type traits macro, which now allows to use Utility:: Debug to print any container that is iterable with C++11 range-based for. - New CORRADE_
TARGET_ WINDOWS and CORRADE_ TARGET_ UNIX preprocessor definitions and CMake variables. - All classes in documentation are now shown with corresponding
#include
path
Changes
- TestSuite tests now display
?: <unknown>()
in test output for test cases without any checks to make them more discoverable - Skipped test cases in TestSuite tests are displayed without useless file/line information (unlike failed test cases, where the information is needed)
- All deprecated functions and types are now emitting compiler warnings to encourage updating the code
- Various documentation and example updates and improvements
Bug fixes
- TestSuite::
Compare:: *File* is comparing the files in binary mode to avoid platform-dependent EOL issues. - Utility::
Resource now properly handles empty files when compiling resources. Utility::Directory
is now working properly under Windows.- Fixed compilation issues with Clang and libc++
- Fixed various compilation issues under MSVC (and worked around a much larger amount of compiler bugs)
- Adapted Utility::
Configuration test to work under MinGW (see mosra/ corrade#7)
Deprecated APIs
Utility::String::split(..., bool)
is deprecated, use separate functions split() and splitWithoutEmptyParts() instead.
Potential compatibility breakages, removed APIs
- Removed
Utility::log2()
andUtility::pow2()
utility functions, as they weren't used anywhere anymore (and the latter one was a bad joke) - Removed useless metadata from PluginManager::
PluginMetadata class (author name, version, description), as they don't fit current use case anymore (they were used back in 2007 when Corrade was part of Kompas). These metadata can be easily added back as custom configuration values. - Removed now useless
Utility::Translator
class, it was used only for plugin metadata and was prime example of bad design (exposing unguarded naked pointers)
Internal changes
- Using Jenkins Continuous Integration to maintain compilable and bug-free state of the project more easily. Currently GCC 4.8, 4.7, 4.6, 4.5, 4.4, Clang 3.3, Clang 3.3 with libc++, Emscripten, x86-32/x86-64 Native Client and MinGW32 compilers are tested with both shared and static libraries. Separately testing builds with deprecated features enabled and disabled.
- All files from
src/
directory were moved tosrc/Corrade
,examples/
directory was moved tosrc/examples
(required to make inter-project includes absolute, as mentioned above)
2013.10
Released 2013-10-30, tagged as v2013.10. See the release annoucement for a high-level overview.
Dependency changes
No dependency changes in this release.
New features
- macOS port (thanks to David Lin, see mosra/
corrade#4) - Fixed and updated Emscripten (HTML5) port
- Interconnect library can now connect signals to non-member functions and C++11 lambdas. See Interconnect::
connect() for more information. - Added simple StateMachine implementation into Interconnect library.
Changes
- Returning std::
unique_ptr instead of naked pointer from PluginManager::Manager::instance()
for better usability and to avoid accidental memory leaks - Documentation updates and improvements to make the library more accessible for newcomers
- Various build system updates for better compile times and easier installation
Build system
- Added a
WITH_FIND_MODULE
CMake option to install Find modules for Corrade into a system location (see mosra/corrade#2) GCC*_COMPATIBILITY
is sometimes needed to be set explicitly (see mosra/corrade#1) - Installing
*.dll
and*.lib
files to pproper locations on Windows (see mosra/corrade#5)
Bug fixes
- CORRADE_
VERIFY() macro in TestSuite can now be conveniently used also on classes with explicit operator bool()
- Fixed assertion failure on
-long-arguments
parsing in Utility::Arguments
Deprecated APIs
Interconnect::Emitter::connect()
is deprecated, use Interconnect::connect() instead.
Potential compatibility breakages, removed APIs
No deprecated API was removed in this release.
2013.08
Released 2013-08-30, tagged as v2013.08. See the Magnum project announcement for a high-level overview.
2012.02
Released 2012-02-08, tagged as v2012.02. See the project announcement for a high-level overview.