Markus Raab
2014-11-04 10:16:18 UTC
Hello,
Again we managed to do an amazing feature release in just two month.
In 416 commits we modified 393 files with 23462 insertions(+) and
9046 deletions(-).
## Most awaited
The most awaited feature in this release is certainly the qt-gui
developed by Raffael Pancheri. It includes a rich feature set including
searching, unmounting, importing and exporting. A lot of functionality
is quite stable now, even though its version is 0.0.1 alpha. If you find
any bugs or want to give general feedback, feel free to use the issue
tracker of the Elektra project. A screenshot can be found at:
https://github.com/ElektraInitiative/libelektra/blob/master/doc/images/screenshot-
qt-gui.png
To compile it (together with Elektra), see the README in:
https://github.com/ElektraInitiative/libelektra/tree/master/src/tools/qt-gui
Manuel Mausz also has been very active and developed glib+gi bindings.
These bindings make Elektra more friendly to the glib/gtk/gnome world.
Using the gobject introspection python3 and lua bindings were developed.
Additionally he got rid of all clang warnings.
Felix Berlakovich also made progress: ini now supports multiline and
which can be dynamically turned on and off, i.e. during mounting
(thanks to Felix)
Last, but not least, Kai-Uwe ported Elektra to Windows7. MinGW is now
one more supported compiler (tested on build-server, see later).
Astonishingly, it was only little effort necessary:
Basically we only needed a new implementation of the resolver, which
is now called "wresolver". Different from the "resolver" it lacks the
sophisticated multi-process and multi-thread atomicity properties. On
the plus side we now have a resolver that is very easy to study and
understand and still works as file resolver ("noresolver" does not).
## Interfaces
ABI/API of the C-API is still completely stable even though under the
hood a lot was changed. All testcases compiled against the previous
version still run against Elektra 0.8.9.
This is, however, not the case for libtools. For MinGW porting it was
necessary to rename an enum related to merging because it conflicted
with an already defined MACRO.
For maintainers also some changes are necessary. For MinGW and to
actually use the flexibility of the new resolver variants two new CMake
Variables are introduced: KDB_DEFAULT_RESOLVER and KDB_DEFAULT_STORAGE.
More importantly for maintainers the CMake variables regarding SWIG
bindings are now abandoned in favour to the new variable BINDINGS that
works like PLUGINS and TOOLS. Just start with
-DBINDINGS=ALL
and CMake should remove the bindings that have missing dependencies
on your system. Remember that glib and gi (i.e. "gi_python3" and
"gi_lua") bindings were introduced, too. Additionally, the "cpp"
binding can now be deactivated if not added to BINDINGS.
Finally, the "gen" tool added a Python package called "support".
## Other Bits
A proof of concept storage plugin "regexstore" was added. It allows to
capture individual configuration options within an otherwise not
understood configuration file (e.g. for vimrc or emacs where
the configuration file may contain programming constructs).
Most tests now also work with the BUILD_SHARED variant (from our
knowledge all would work now, but some are still excluded if
BUILD_FULL and BUILD_STATIC is disabled. Please report issues
if you want to use uncommon CMake combinations).
A small but very important step towards specifying configuration files
is the new proposed API method ksLookupBySpec (and ksLookup implementing
cascading search). It introduces a "logical view" of
configuration that in difference to the "physical view" of
configuration does not have namespaces, but everything is below the root
"/". Additionally, contextual values now allow to be compile-time
configured using C++-Policies. These are small puzzle pieces that will
fit into a greater picture at a later time.
A (data) race detection tool was implemented. Using it a configurable
number of processes and threads it tries to kdbSet() a different
configuration at (nearly) the same time.
With this tool the resolver could be greatly be improved (again). It now
uses stat with nanosecond precision that will be updated for every
successful kdbSet(). Even if the configuration file was modified
manually (not using Elektra) the next kdbSet() then is much more likely
to fail. Additionally a recursive mutex now protects the file locking
mechanism.
The build server now additionally has following build jobs:
- http://build.libelektra.org:8080/job/elektra-gcc-i386/
Because we had an i386 regression and none of the developers
seems to use i386.
- http://build.libelektra.org:8080/job/elektra-gcc-configure-debian/
Calls the scripts/configure-debian(-wheezy).
- http://build.libelektra.org:8080/job/elektra-local-installation/
We had an regression that local installation was not possible because
of a bash completion file installed to /etc. This build tests if it is
possible to install Elektra in your home directory (and calls kdb
run_all afterwards)
- http://build.libelektra.org:8080/job/elektra-test-bindings/
Compiles and tests ALL bindings.
- http://build.libelektra.org:8080/job/elektra-gcc-configure-mingw/
Compiles Elektra using mingw.
Many more examples were written and are used within doxygen. Most
snippets now can also be found in compilable files:
https://github.com/ElektraInitiative/libelektra/tree/master/examples
- keyNew examples (keyNew.c)
- keyCopy examples (keyCopy.c)
https://github.com/ElektraInitiative/libelektra/tree/master/src/bindings/cpp/examples
- C++ deep dup (cpp_example_dup.cpp)
- How to put Key in different data structures (cpp_example_ordering.cpp)
https://github.com/ElektraInitiative/libelektra/tree/master/scripts
- mount-augeas
- mount-info
Most plugins now internally use the same CMake function "add_plugin"
which makes plugin handling more consistent.
Felix converted the METADATA spec to ini files and added a proposal
how comments can be improved.
Refactoring:
- reuse of utilities in gen code generator
- the gen support library is now in its own package ("support")
- refactor array handling
- internal comparision functions (keyCompareByName)
Optimization:
- lookupByName does not need to allocate two keys
- lookups in generated code
- prefer to use allocation on stack
Fixes:
- disable cast that segfaults on i386 (only testing code was affected)
- fix keyAddBaseName in xmltool and testing code
- support non-system installation (e.g. in home directory)
- rewrote test cases to use succeed_if_same to avoid crashes on
null pointers
- allow to use python 2.6 for kdb gen
- improve exception messages
- use memcasecmp (fix lookup ignoring case)
- fix memory leaks (ini)
- text messages for some warnings/errors
- fix many issues regarding CMake, more variants of setting CMake
options are now allowed.
- cmake policies fixes allow us to use cmake version > 3
## Get It! ##
You can download the release from:
http://www.markus-raab.org/ftp/elektra/releases/elektra-0.8.9.tar.gz
- size: 1936524
- md5sum: 001c4ec67229046509a0cb9eda223dc6
- sha1: 79ea9b83c08ed4c347ed0100b5e0e2d3309b9d04
- sha256: e0895bba28a27fb37f36f59ef77c95235f3a9c54fb71aa6f648566774d276568
already built API-Docu can be found here:
http://doc.libelektra.org/api/0.8.9/html/
For more information, see http://www.libelektra.org
Best regards,
Markus
Again we managed to do an amazing feature release in just two month.
In 416 commits we modified 393 files with 23462 insertions(+) and
9046 deletions(-).
## Most awaited
The most awaited feature in this release is certainly the qt-gui
developed by Raffael Pancheri. It includes a rich feature set including
searching, unmounting, importing and exporting. A lot of functionality
is quite stable now, even though its version is 0.0.1 alpha. If you find
any bugs or want to give general feedback, feel free to use the issue
tracker of the Elektra project. A screenshot can be found at:
https://github.com/ElektraInitiative/libelektra/blob/master/doc/images/screenshot-
qt-gui.png
To compile it (together with Elektra), see the README in:
https://github.com/ElektraInitiative/libelektra/tree/master/src/tools/qt-gui
Manuel Mausz also has been very active and developed glib+gi bindings.
These bindings make Elektra more friendly to the glib/gtk/gnome world.
Using the gobject introspection python3 and lua bindings were developed.
Additionally he got rid of all clang warnings.
Felix Berlakovich also made progress: ini now supports multiline and
which can be dynamically turned on and off, i.e. during mounting
(thanks to Felix)
Last, but not least, Kai-Uwe ported Elektra to Windows7. MinGW is now
one more supported compiler (tested on build-server, see later).
Astonishingly, it was only little effort necessary:
Basically we only needed a new implementation of the resolver, which
is now called "wresolver". Different from the "resolver" it lacks the
sophisticated multi-process and multi-thread atomicity properties. On
the plus side we now have a resolver that is very easy to study and
understand and still works as file resolver ("noresolver" does not).
## Interfaces
ABI/API of the C-API is still completely stable even though under the
hood a lot was changed. All testcases compiled against the previous
version still run against Elektra 0.8.9.
This is, however, not the case for libtools. For MinGW porting it was
necessary to rename an enum related to merging because it conflicted
with an already defined MACRO.
For maintainers also some changes are necessary. For MinGW and to
actually use the flexibility of the new resolver variants two new CMake
Variables are introduced: KDB_DEFAULT_RESOLVER and KDB_DEFAULT_STORAGE.
More importantly for maintainers the CMake variables regarding SWIG
bindings are now abandoned in favour to the new variable BINDINGS that
works like PLUGINS and TOOLS. Just start with
-DBINDINGS=ALL
and CMake should remove the bindings that have missing dependencies
on your system. Remember that glib and gi (i.e. "gi_python3" and
"gi_lua") bindings were introduced, too. Additionally, the "cpp"
binding can now be deactivated if not added to BINDINGS.
Finally, the "gen" tool added a Python package called "support".
## Other Bits
A proof of concept storage plugin "regexstore" was added. It allows to
capture individual configuration options within an otherwise not
understood configuration file (e.g. for vimrc or emacs where
the configuration file may contain programming constructs).
Most tests now also work with the BUILD_SHARED variant (from our
knowledge all would work now, but some are still excluded if
BUILD_FULL and BUILD_STATIC is disabled. Please report issues
if you want to use uncommon CMake combinations).
A small but very important step towards specifying configuration files
is the new proposed API method ksLookupBySpec (and ksLookup implementing
cascading search). It introduces a "logical view" of
configuration that in difference to the "physical view" of
configuration does not have namespaces, but everything is below the root
"/". Additionally, contextual values now allow to be compile-time
configured using C++-Policies. These are small puzzle pieces that will
fit into a greater picture at a later time.
A (data) race detection tool was implemented. Using it a configurable
number of processes and threads it tries to kdbSet() a different
configuration at (nearly) the same time.
With this tool the resolver could be greatly be improved (again). It now
uses stat with nanosecond precision that will be updated for every
successful kdbSet(). Even if the configuration file was modified
manually (not using Elektra) the next kdbSet() then is much more likely
to fail. Additionally a recursive mutex now protects the file locking
mechanism.
The build server now additionally has following build jobs:
- http://build.libelektra.org:8080/job/elektra-gcc-i386/
Because we had an i386 regression and none of the developers
seems to use i386.
- http://build.libelektra.org:8080/job/elektra-gcc-configure-debian/
Calls the scripts/configure-debian(-wheezy).
- http://build.libelektra.org:8080/job/elektra-local-installation/
We had an regression that local installation was not possible because
of a bash completion file installed to /etc. This build tests if it is
possible to install Elektra in your home directory (and calls kdb
run_all afterwards)
- http://build.libelektra.org:8080/job/elektra-test-bindings/
Compiles and tests ALL bindings.
- http://build.libelektra.org:8080/job/elektra-gcc-configure-mingw/
Compiles Elektra using mingw.
Many more examples were written and are used within doxygen. Most
snippets now can also be found in compilable files:
https://github.com/ElektraInitiative/libelektra/tree/master/examples
- keyNew examples (keyNew.c)
- keyCopy examples (keyCopy.c)
https://github.com/ElektraInitiative/libelektra/tree/master/src/bindings/cpp/examples
- C++ deep dup (cpp_example_dup.cpp)
- How to put Key in different data structures (cpp_example_ordering.cpp)
https://github.com/ElektraInitiative/libelektra/tree/master/scripts
- mount-augeas
- mount-info
Most plugins now internally use the same CMake function "add_plugin"
which makes plugin handling more consistent.
Felix converted the METADATA spec to ini files and added a proposal
how comments can be improved.
Refactoring:
- reuse of utilities in gen code generator
- the gen support library is now in its own package ("support")
- refactor array handling
- internal comparision functions (keyCompareByName)
Optimization:
- lookupByName does not need to allocate two keys
- lookups in generated code
- prefer to use allocation on stack
Fixes:
- disable cast that segfaults on i386 (only testing code was affected)
- fix keyAddBaseName in xmltool and testing code
- support non-system installation (e.g. in home directory)
- rewrote test cases to use succeed_if_same to avoid crashes on
null pointers
- allow to use python 2.6 for kdb gen
- improve exception messages
- use memcasecmp (fix lookup ignoring case)
- fix memory leaks (ini)
- text messages for some warnings/errors
- fix many issues regarding CMake, more variants of setting CMake
options are now allowed.
- cmake policies fixes allow us to use cmake version > 3
## Get It! ##
You can download the release from:
http://www.markus-raab.org/ftp/elektra/releases/elektra-0.8.9.tar.gz
- size: 1936524
- md5sum: 001c4ec67229046509a0cb9eda223dc6
- sha1: 79ea9b83c08ed4c347ed0100b5e0e2d3309b9d04
- sha256: e0895bba28a27fb37f36f59ef77c95235f3a9c54fb71aa6f648566774d276568
already built API-Docu can be found here:
http://doc.libelektra.org/api/0.8.9/html/
For more information, see http://www.libelektra.org
Best regards,
Markus
--
Markus Raab http://www.libelektra.org
Technische UniversitÀt Wien ***@markus-raab.org
Institut fÃŒr Computersprachen Phone: (+431) 58801/185185
Argentinierstr. 8, 1040 Wien, Austria FAX: (+431) 58801/18598
DVR 0005886
Markus Raab http://www.libelektra.org
Technische UniversitÀt Wien ***@markus-raab.org
Institut fÃŒr Computersprachen Phone: (+431) 58801/185185
Argentinierstr. 8, 1040 Wien, Austria FAX: (+431) 58801/18598
DVR 0005886