\label{doc_news_2018-11-18_0_8_25_md_md_doc_news_2018_11_18_0_8_25}%
\Hypertarget{doc_news_2018-11-18_0_8_25_md_md_doc_news_2018_11_18_0_8_25}%
 We are proud to present Elektra 0.\+8.\+25.\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3483}{}\doxysection{What is Elektra?}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3483}
Elektra serves as a universal and secure framework to access configuration settings in a global, hierarchical key database. For more information, visit \href{https://libelektra.org}{\texttt{ https\+://libelektra.\+org}}.

For a small demo see here\+:

\href{https://asciinema.org/a/cantr04assr4jkv8v34uz9b8r}{\texttt{ }}

You can also read the news \href{https://www.libelektra.org/news/0.8.25-release}{\texttt{ on our website}}\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3484}{}\doxysection{Metadata}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3484}

\begin{DoxyItemize}
\item guid\+: 472392e0-\/cc4f-\/4826-\/a0a9-\/2764d90c5f89
\item author\+: Markus Raab
\item pub\+Date\+: Sun, 18 Nov 2018 21\+:24\+:34 +0100
\item short\+Desc\+: faster storage and lookup
\end{DoxyItemize}\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3485}{}\doxysection{Highlight}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3485}
This release is dedicated to drastically improve the speed of Elektra. Two non-\/trivial features facilitate most of the improvement\+:


\begin{DoxyItemize}
\item mmap storage for very fast retrieval of configuration
\item Hybrid Search Algorithm for {\ttfamily ks\+Lookup (...)} for very fast access of configuration
\end{DoxyItemize}\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3486}{}\doxysubsection{mmap storage}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3486}
We added a new, binary and fast storage plugin called \href{https://libelektra.org/plugins/mmapstorage}{\texttt{ {\ttfamily mmapstorage}}}. It leverages the {\ttfamily mmap()} syscall and supports full Elektra semantics. We provide two compile variants\+: {\ttfamily mmapstorage} and {\ttfamily mmapstorage\+\_\+crc}. The {\ttfamily mmapstorage\+\_\+crc} variant enables CRC32 checksums for critical data, while the {\ttfamily mmapstorage} variant omits the checksum for maximum performance.

We ran a synthetic benchmark with 257 iterations using 40k keys in a keyset, and compared the performance to the {\ttfamily dump} storage plugin.

Median write time in microseconds\+:

\tabulinesep=1mm
\begin{longtabu}spread 0pt [c]{*{2}{|X[-1]}|}
\hline
\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Plugin   }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Time    }\\\cline{1-2}
\endfirsthead
\hline
\endfoot
\hline
\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Plugin   }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Time    }\\\cline{1-2}
\endhead
{\ttfamily dump}   &71079    \\\cline{1-2}
{\ttfamily mmapstorage}   &2964    \\\cline{1-2}
{\ttfamily mmapstorage\+\_\+crc}   &7644   \\\cline{1-2}
\end{longtabu}


Median read time in microseconds\+:

\tabulinesep=1mm
\begin{longtabu}spread 0pt [c]{*{2}{|X[-1]}|}
\hline
\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Plugin   }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Time    }\\\cline{1-2}
\endfirsthead
\hline
\endfoot
\hline
\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Plugin   }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Time    }\\\cline{1-2}
\endhead
{\ttfamily dump}   &82737    \\\cline{1-2}
{\ttfamily mmapstorage}   &1145    \\\cline{1-2}
{\ttfamily mmapstorage\+\_\+crc}   &5744   \\\cline{1-2}
\end{longtabu}


In our benchmark, the {\ttfamily mmapstorage} plugin writes more than 23x faster, and reads more than 72x faster than the {\ttfamily dump} storage plugin.

For this release the plugin is marked as experimental, even though it is already used as default storage plugin in a build job on our \href{https://build.libelektra.org}{\texttt{ build server}}.

Thanks to Mihael Pranjić for this improvement.\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3487}{}\doxysubsection{Hybrid Search Algorithm for $<$tt$>$ks\+Lookup (...)$<$/tt$>$}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3487}
The hybrid search algorithm is now implemented, this concludes the extension of the {\ttfamily ks\+Lookup (...)} search with the \href{https://master.libelektra.org/doc/dev/data-structures.md\#order-preserving-minimal-perfect-hash-map-aka-opmphm}{\texttt{ order preserving minimal perfect hash map (OPMPHM)}}. The hybrid search combines the best properties of the binary search and the \href{https://master.libelektra.org/doc/dev/data-structures.md\#order-preserving-minimal-perfect-hash-map-aka-opmphm}{\texttt{ OPMPHM}}. The hybrid search decides dynamically which search algorithm to use.

Because of the automatic decision, usually nothing needs to be done by API users to take advantage of this improvement. Advanced API user, however, can overrule the hybrid search by passing {\ttfamily KDB\+\_\+\+O\+\_\+\+OPMPHM} or {\ttfamily KDB\+\_\+\+O\+\_\+\+BINSEARCH} to {\ttfamily ks\+Lookup (...)}. The constants are defined in \href{https://master.libelektra.org/src/include/kdbproposal.h}{\texttt{ kdbproposal.\+h}}. For low-\/memory systems the building of the hash map can be disabled altogether at build-\/time by disabling the CMake variable {\ttfamily ENABLE\+\_\+\+OPTIMIZATIONS} (by default enabled now).

The implemented randomized \href{https://master.libelektra.org/doc/dev/data-structures.md\#order-preserving-minimal-perfect-hash-map-aka-opmphm}{\texttt{ OPMPHM}} algorithm is in 99.\+5\% of the measured random cases optimal. However the randomization property of the algorithm leaves an uncertainty.

The results made with random cases had shown that the hybrid search is, except for small keyset sizes, almost always faster compared to the standalone binary search. The performance increase strongly depended on the measured hardware. In the random cases where the hybrid search is faster, on average $\sim$8.53\% to $\sim$20.92\% of time was saved. The implemented hybrid search works only above a keyset size of {\ttfamily 599} to exclude the small keyset sizes.

Thanks to Kurt Micheli for this improvement.\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3488}{}\doxysection{Plugins}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3488}
The following section lists news about the \href{https://www.libelektra.org/plugins/readme}{\texttt{ plugins}} we updated in this release.\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3489}{}\doxysubsection{Directory Value}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3489}
We improved the performance of the \href{https://libelektra.org/plugins/directoryvalue}{\texttt{ directoryvalue plugin}}. \+\_\+(René Schwaiger)\+\_\+ This plugin is used for configuration file formats that do not support that directories contain values, like it is the case in JSON. A program manipulating a 13 MB JSON file which first did not succeed within 10 hours is now finished in 44 seconds.\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3490}{}\doxysubsection{Process}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3490}
There is a new, experimental plugin called \href{https://libelektra.org/plugins/process}{\texttt{ process}}. This plugin utilizes the pluginprocess library in order to execute arbitrary other plugins in an own process, acting as a proxy itself. Therefore it is not required to explicitly change a plugin\textquotesingle{}s implementation if it shall be executed in an own process. This plugin is not completely finished yet, as currently there is no way for it to mimic the proxied plugin\textquotesingle{}s contract in Elektra. It can be used with simple plugins like {\ttfamily dump} however, check the limitations in the readme for more details. \+\_\+(\+Armin Wurzinger)\+\_\+\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3491}{}\doxysubsection{FSTab}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3491}
The detection of the {\ttfamily mntent} functions now also works correctly, if you use the compiler switch {\ttfamily -\/Werror}. \+\_\+(René Schwaiger)\+\_\+\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3492}{}\doxysubsection{passwd}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3492}
We fixed an issue with the passwd plugin not properly setting compile flags. This resolves a problem with undefined functions when building with musl. \+\_\+(\+Lukas Winkler)\+\_\+\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3493}{}\doxysubsection{gpgme}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3493}
The experimental \href{https://libelektra.org/plugins/gpgme}{\texttt{ gpgme plugin}} was brought into existence to provide cryptographic functions using Gnu\+GP via the {\ttfamily libgpgme} library. \+\_\+(\+Peter Nirschl)\+\_\+\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3494}{}\doxysubsection{network}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3494}
The {\ttfamily network} plugin now also allows for non-\/numerical hosts (i.\+e. \char`\"{}localhost\char`\"{}) to be set and tries to resolve it via DNS. \+\_\+(\+Michael Zronek)\+\_\+\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3495}{}\doxysubsection{YAMBi}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3495}
This new plugin parses a subset of YAML using a parser generated by \href{https://www.gnu.org/software/bison}{\texttt{ Bison}}. \+\_\+(René Schwaiger)\+\_\+\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3496}{}\doxysubsection{YAML CPP}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3496}
The build system now disables the plugin automatically, if you use a GCC compiler ({\ttfamily 6.\+x} or earlier) and enable the option {\ttfamily ENABLE\+\_\+\+ASAN}. We updated the behavior, since otherwise the plugin will report memory leaks at runtime. \+\_\+(René Schwaiger)\+\_\+\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3497}{}\doxysubsection{Yan LR}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3497}

\begin{DoxyItemize}
\item The plugin does not modify the (original) parent key. As a consequence, setting values at the root of a mountpoint\+:
\end{DoxyItemize}


\begin{DoxyCode}{0}
\DoxyCodeLine{sudo kdb mount config.yaml user/tests/yambi yambi}
\DoxyCodeLine{kdb set user/tests/yanlr 'Mount Point Value'}
\DoxyCodeLine{kdb get user/tests/yanlr}
\DoxyCodeLine{\#> Mount Point Value}

\end{DoxyCode}


now works correctly. \+\_\+(René Schwaiger)\+\_\+


\begin{DoxyItemize}
\item We now use C++ code to test the plugin. \+\_\+(René Schwaiger)\+\_\+
\item The CMake code of the plugin now also recognizes {\ttfamily antlr} as ANTLR executable, if {\ttfamily antlr4} is not available. \+\_\+(René Schwaiger)\+\_\+
\item The build system now disables the unit test for the plugin, if you use GCC ({\ttfamily 6.\+x} or earlier) to translate Elektra. We introduced this behavior, since the code generated by ANTLR ({\ttfamily YAML.\+h}) seems to contain a double free that causes a segmentation fault on systems that use the GNU C library. \+\_\+(René Schwaiger)\+\_\+
\item The build system now disables the plugin automatically, if you use a GCC compiler ({\ttfamily 6.\+x} or earlier) and enable the option {\ttfamily ENABLE\+\_\+\+ASAN}. \+\_\+(René Schwaiger)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3498}{}\doxysubsection{YAwn}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3498}
This new plugin parses a subset of YAML using the Earley Parser library YAEP. \+\_\+(René Schwaiger)\+\_\+\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3499}{}\doxysubsection{Reference}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3499}
This new plugin can be used to validate that the value of a key is a reference to another key. \+\_\+(Klemens Böswirth)\+\_\+\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3500}{}\doxysection{Libraries}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3500}
The text below summarizes updates to the \href{https://www.libelektra.org/libraries/readme}{\texttt{ C (and C++)-\/based libraries}} of Elektra.\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3501}{}\doxysubsection{Compatibility}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3501}
As always, the ABI and API of kdb.\+h is fully compatible, i.\+e. programs compiled against an older 0.\+8 version of Elektra will continue to work (ABI) and you will be able to recompile programs without errors (API).

This is the last release for which we have built Jessie packages\+:


\begin{DoxyCode}{0}
\DoxyCodeLine{deb     [trusted=yes] https://debian-\/stable.libelektra.org/elektra-\/stable/ jessie main}
\DoxyCodeLine{deb-\/src [trusted=yes] https://debian-\/stable.libelektra.org/elektra-\/stable/ jessie main}

\end{DoxyCode}


Obviously, we will continue to update the stretch package\+:


\begin{DoxyCode}{0}
\DoxyCodeLine{deb     [trusted=yes] https://debian-\/stretch-\/repo.libelektra.org/ stretch main}
\DoxyCodeLine{deb-\/src [trusted=yes] https://debian-\/stretch-\/repo.libelektra.org/ stretch main}

\end{DoxyCode}
\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3502}{}\doxysubsection{Infos for Package Maintainers}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3502}
Following plugins got added\+:


\begin{DoxyItemize}
\item libelektra-\/gpgme.\+so
\item libelektra-\/mmapstorage\+\_\+crc.\+so
\item libelektra-\/mmapstorage.\+so
\item libelektra-\/process.\+so
\item libelektra-\/reference.\+so
\item libelektra-\/yambi.\+so
\end{DoxyItemize}

A new library got added (should be packaged privately for now)\+:


\begin{DoxyItemize}
\item libelektra-\/globbing.\+so
\end{DoxyItemize}\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3503}{}\doxysubsection{Core}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3503}
Optimize elektra\+Ks\+Filter to not duplicate keys \+\_\+(\+Markus Raab)\+\_\+\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3504}{}\doxysubsection{Globbing}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3504}
A new library which can be used to match keys against globbing patterns was introduced. \+\_\+(Klemens Böswirth)\+\_\+

The API is still experimental, so it should not be used externally for now.\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3505}{}\doxysubsection{Ease}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3505}
{\ttfamily libease} provides the function {\ttfamily elektra\+Array\+Validate\+Base\+Name\+String}, which can be used to validate that a given string is an Elektra array name. \+\_\+(Klemens Böswirth)\+\_\+\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3506}{}\doxysection{Bindings}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3506}
Bindings allow you to utilize Elektra using \href{https://www.libelektra.org/bindings/readme}{\texttt{ various programming languages}}. This section keeps you up-\/to-\/date with the multi-\/language support provided by Elektra.\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3507}{}\doxysubsection{Ruby}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3507}
Do not use private Elektra headers for Ruby bindings as preparation for a Ruby {\ttfamily libelektra} gem. \+\_\+(\+Bernhard Denner)\+\_\+\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3508}{}\doxysection{Tools}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3508}

\begin{DoxyItemize}
\item Added benchmarks for storage plugins. The currently benchmarked plugins are {\ttfamily dump} and {\ttfamily mmapstorage}. \+\_\+(Mihael Pranjić)\+\_\+
\item Avoid raw pointers in KDB tools. \+\_\+(\+Markus Raab)\+\_\+
\item Improved error text of KDB tool {\ttfamily cp}. \+\_\+(\+Markus Raab)\+\_\+
\item Document hidden feature of KDB tool {\ttfamily mount}. \+\_\+(\+Markus Raab)\+\_\+
\item Add more tags to the KDB tools to be used with {\ttfamily kdb find-\/tools}. \+\_\+(\+Markus Raab)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3509}{}\doxysection{Scripts}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3509}

\begin{DoxyItemize}
\item We now require \href{https://clang.llvm.org/docs/ClangFormat.html}{\texttt{ {\ttfamily clang-\/format}}} 6.\+0 for formatting C and C++ code. \+\_\+(René Schwaiger)\+\_\+
\item The command {\ttfamily reformat-\/source} now displays information about the installed version of {\ttfamily clang-\/format}, if it is unable to locate a supported version of the tool. \+\_\+(René Schwaiger)\+\_\+
\item We now also check the POSIX compatibility of our scripts with \href{https://github.com/mvdan/sh}{\texttt{ {\ttfamily shfmt}}}. \+\_\+(René Schwaiger)\+\_\+
\item The new command {\ttfamily reformat-\/shfmt} reformats Shell scripts using the tool \href{https://github.com/mvdan/sh}{\texttt{ {\ttfamily shfmt}}}. \+\_\+(René Schwaiger)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3510}{}\doxysection{Documentation}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3510}

\begin{DoxyItemize}
\item We fixed some minor spelling mistakes in the documentation. \+\_\+(René Schwaiger)\+\_\+
\item Improved the plugins documentation. \+\_\+(\+Michael Zronek)\+\_\+
\item The Read\+Me now includes two badges that show the latest released version of Elektra and the status of the Travis build. \+\_\+(René Schwaiger)\+\_\+
\item Fixed documenation error on Ruby plugin Readme. \+\_\+(\+Bernhard Denner)\+\_\+
\item Go into more detail in \href{https://master.libelektra.org/doc/BUILDSERVER.md}{\texttt{ BUILDSERVER.\+md}}. \+\_\+(\+Lukas Winkler)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3511}{}\doxysection{Tests}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3511}

\begin{DoxyItemize}
\item Fix potential parallel execution of maven tests, which write to KDB. \+\_\+(\+Markus Raab)\+\_\+
\item The unit test for the \href{https://www.libelektra.org/plugins/dbus}{\texttt{ {\ttfamily dbus} plugin}} does not leak memory anymore, if it fails on mac\+OS. \+\_\+(\+Thomas Wahringer)\+\_\+
\item The tests {\ttfamily testkdb\+\_\+allplugins} and {\ttfamily testscr\+\_\+check\+\_\+kdb\+\_\+internal\+\_\+check} do not test a plugin on an ASAN enabled build anymore, if you specify the status tag {\ttfamily memleak} in the plugin contract. \+\_\+(René Schwaiger)\+\_\+
\item The \href{https://master.libelektra.org/doc/TESTING.md}{\texttt{ CFramework}} macro {\ttfamily compare\+\_\+key} now also checks if the meta values of keys are equal. \+\_\+(René Schwaiger)\+\_\+
\item The test {\ttfamily testscr\+\_\+check\+\_\+bashisms} does not print warnings about skipped files anymore. \+\_\+(René Schwaiger)\+\_\+
\item We added a \href{https://master.libelektra.org/tests/shell/shell_recorder/tutorial_wrapper}{\texttt{ Markdown Shell Recorder}} test for the \href{https://www.libelektra.org/plugins/shell}{\texttt{ {\ttfamily shell} plugin}}. \+\_\+(René Schwaiger)\+\_\+
\item Added many storage plugin tests. Most tests use the keyset, key name and value APIs. Currently, the tests are only active for {\ttfamily dump} and {\ttfamily mmapstorage}. \+\_\+(Mihael Pranjić)\+\_\+
\item The test {\ttfamily testcpp\+\_\+contextual\+\_\+basic} now compiles without warnings, if we use Clang 7 as compiler. \+\_\+(René Schwaiger)\+\_\+
\item crypto, fcrypt and gpgme properly shut down the gpg-\/agent after the unit test is done. See \#1973 . \+\_\+(\+Peter Nirschl)\+\_\+
\item minor refactoring of the unit tests for crypto, fcrypt, gpgme\+: moved shared code to separate module in order to avoid code duplication. \+\_\+(\+Peter Nirschl)\+\_\+
\item The CMake targets for plugin tests ({\ttfamily testmod\+\_\+\mbox{[}plugin\mbox{]}}) now depend on the respective CMake targets for the plugins themselves ({\ttfamily elektra-\/\mbox{[}plugin\mbox{]}}). \+\_\+(Klemens Böswirth)\+\_\+
\item Fixed bug in CMake plugin tests, if only {\ttfamily BUILD\+\_\+\+FULL} but not {\ttfamily BUILD\+\_\+\+SHARED} is used. \+\_\+(Klemens Böswirth)\+\_\+
\item The test \href{https://master.libelektra.org/tests/shell/check_formatting.sh}{\texttt{ {\ttfamily testscr\+\_\+check\+\_\+formatting}}} now also checks the formatting of Shell code. \+\_\+(René Schwaiger)\+\_\+
\item We pumped version numbers in XML-\/test files. \+\_\+(\+Markus Raab)\+\_\+
\item We fixed a crash in the unit test of the \href{https://www.libelektra.org/bindings/jna}{\texttt{ JNA}} binding. \+\_\+(René Schwaiger)\+\_\+
\item The command \href{https://master.libelektra.org/tests/README.md}{\texttt{ {\ttfamily kdb run\+\_\+all}}} now only prints the output of tests that failed. To print the full output of all test, please use the option {\ttfamily -\/v}. \+\_\+(René Schwaiger)\+\_\+
\item The \href{https://master.libelektra.org/tests/shell/shell_recorder}{\texttt{ Shell Recorder}} does not use the non-\/\+POSIX grep option {\ttfamily -\/-\/text} any more. \+\_\+(René Schwaiger)\+\_\+
\item The test suite now uses \href{https://github.com/google/googletest}{\texttt{ Google Test}} {\ttfamily 1.\+8.\+1}. \+\_\+(René Schwaiger)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3512}{}\doxysection{Build}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3512}
\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3513}{}\doxysubsection{CMake}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3513}

\begin{DoxyItemize}
\item We improved the detection of Python 2 and Python 3 in the CMake code of the Python bindings/plugins. \+\_\+(René Schwaiger)\+\_\+
\item We restructured the code of the CMake module we use to detect Haskell tools . \+\_\+(René Schwaiger)\+\_\+
\item Building the Haskell binding should now work again. \+\_\+(René Schwaiger)\+\_\+
\item The CMake configuration step now displays less debug messages about found libraries. \+\_\+(René Schwaiger)\+\_\+
\item Provide a wrapper around {\ttfamily check\+\_\+symbol\+\_\+exists} that handles issues with {\ttfamily -\/Werror -\/Wpedantic}. \+\_\+(\+Lukas Winkler)\+\_\+
\item The argument {\ttfamily INCLUDE\+\_\+\+SYSTEM\+\_\+\+DIRECTORIES} of the function {\ttfamily add\+\_\+plugin} now supports multiple include directories. \+\_\+(René Schwaiger)\+\_\+
\item We reformatted all CMake source files with cmake-\/format 0.\+4.\+3. \+\_\+(René Schwaiger)\+\_\+
\item Generating coverage data ({\ttfamily ENABLE\+\_\+\+COVERAGE=ON}) should now also work on mac\+OS. \+\_\+(René Schwaiger)\+\_\+
\item You can use the new target {\ttfamily run\+\_\+checkshell} to run all shell checks ({\ttfamily testscr\+\_\+check.$\ast$}). \+\_\+(René Schwaiger)\+\_\+
\item The new target {\ttfamily run\+\_\+nocheckshell} runs all tests except for shell checks. \+\_\+(René Schwaiger)\+\_\+
\item The target {\ttfamily run\+\_\+all} now runs tests that do not modify the key database in parallel. \+\_\+(René Schwaiger)\+\_\+
\item Fix CMake inclusion logic for GLib/\+Gi \+\_\+(\+Markus Raab)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3514}{}\doxysubsection{Docker}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3514}

\begin{DoxyItemize}
\item The Docker image for Debian stretch now contains all (optional) dependencies for Elektra. \+\_\+(René Schwaiger)\+\_\+
\item The docker images used by our build system are now available to download from our systems without authentication. Try it out and list available images via {\ttfamily docker run -\/-\/rm anoxis/registry-\/cli -\/r \href{https://hub-public.libelektra.org}{\texttt{ https\+://hub-\/public.\+libelektra.\+org}}}. You can search for images using {\ttfamily -\/-\/images-\/like}, for example\+: {\ttfamily docker run -\/-\/rm anoxis/registry-\/cli -\/r \href{https://hub-public.libelektra.org}{\texttt{ https\+://hub-\/public.\+libelektra.\+org}} -\/-\/images-\/like alpine}. Afterwards pull your desired image as you would do from any public registry, for example\+: {\ttfamily docker pull hub-\/public.\+libelektra.\+org/build-\/elektra-\/alpine\+:201811-\/37597a34fed4988639cdaf4d6a2c54754d09918586f53389e4fde5fd3b3a7180}. \+\_\+(\+Lukas Winkler)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3515}{}\doxysubsection{Vagrant}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3515}

\begin{DoxyItemize}
\item Added Vagrantfile for Ubuntu artful 32-\/bit. \+\_\+(Mihael Pranjić)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3516}{}\doxysection{Infrastructure}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3516}
\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3517}{}\doxysubsection{Jenkins}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3517}

\begin{DoxyItemize}
\item We enabled tests that write to the hard disk on the build job {\ttfamily alpine}. \+\_\+(René Schwaiger)\+\_\+
\item The build jobs now print less non-\/relevant output. \+\_\+(René Schwaiger)\+\_\+
\item Enable {\ttfamily -\/Werror} in {\ttfamily debian-\/stable-\/full}. \+\_\+(\+Lukas Winkler)\+\_\+
\item We added the compiler switch {\ttfamily -\/Werror} to the build jobs\+:
\begin{DoxyItemize}
\item {\ttfamily alpine},
\item {\ttfamily debian-\/stable-\/full-\/i386},
\item {\ttfamily debian-\/stable-\/full-\/mmap-\/asan},
\item {\ttfamily debian-\/stable-\/full-\/mmap},
\item {\ttfamily debian-\/stable-\/full-\/optimizations-\/off},
\item {\ttfamily debian-\/stable-\/full-\/xdg},
\item {\ttfamily debian-\/stable-\/minimal},
\item {\ttfamily debian-\/stable-\/multiconf},
\item {\ttfamily debian-\/unstable-\/clang-\/asan},
\item {\ttfamily debian-\/unstable-\/full-\/clang},
\item {\ttfamily debian-\/unstable-\/full},
\item {\ttfamily ubuntu-\/xenial}, and
\item {\ttfamily debian-\/stable-\/asan}. \+\_\+(René Schwaiger)\+\_\+
\end{DoxyItemize}
\item Build Artifacts for all PR\textquotesingle{}s to detect issues before merging \+\_\+(\+Lukas Winkler)\+\_\+
\item Stricter removal of temporary docker images on docker nodes \+\_\+(\+Lukas Winkler)\+\_\+
\item Added jenkins build jobs {\ttfamily debian-\/stable-\/full-\/mmap} and {\ttfamily debian-\/stable-\/full-\/mmap-\/asan} with {\ttfamily mmapstorage} as the default storage. \+\_\+(Mihael Pranjić)\+\_\+
\item We added basic support for coverage analysis via \href{http://coveralls.io}{\texttt{ Coveralls}}. \+\_\+(René Schwaiger)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3518}{}\doxysubsection{Travis}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3518}

\begin{DoxyItemize}
\item Travis now also checks the code for memory leaks in the build job {\ttfamily 🍏 Clang ASAN}. \+\_\+(René Schwaiger)\+\_\+
\item The Travis build jobs {\ttfamily 🍏 Clang ASAN} and {\ttfamily 🐧 GCC ASAN} now only translates a minimal set of plugins, since we had various timeout problems with these jobs before. We explicitly excluded plugins, to make sure that the build jobs still test newly added plugins. \+\_\+(René Schwaiger)\+\_\+
\item Added travis build job {\ttfamily 🍏 mmap} on mac\+OS with {\ttfamily mmapstorage} as the default storage. \+\_\+(Mihael Pranjić)\+\_\+
\item Travis now prints the CMake configuration for each build job. \+\_\+(René Schwaiger)\+\_\+
\item We now test Elektra using the latest version of Xcode ({\ttfamily 10.\+0}). \+\_\+(René Schwaiger)\+\_\+
\item We added the build job {\ttfamily 🍏 Check Shell}, which only runs shell checks such as {\ttfamily testscr\+\_\+check\+\_\+oclint}. This update allows us to remove the shell checks from the jobs {\ttfamily 🍏 MMap} and {\ttfamily 🍏 Clang}, which sometimes hit the \href{https://docs.travis-ci.com/user/customizing-the-build\#build-timeouts}{\texttt{ timeout limit for public repositories}} before. \+\_\+(René Schwaiger)\+\_\+
\item All Travis build jobs now use the compiler switch {\ttfamily -\/Werror}. \+\_\+(René Schwaiger)\+\_\+
\item The new job {\ttfamily 🍏 FULL} and the build job {\ttfamily 🐧 FULL} build Elektra using the CMake options {\ttfamily BUILD\+\_\+\+FULL=ON} and {\ttfamily BUILD\+\_\+\+SHARED=OFF}. \+\_\+(René Schwaiger)\+\_\+
\item The {\ttfamily script} stage of the build jobs print less non-\/relevant output. Usually the commands in this stage should now only print verbose output if a test fails. \+\_\+(René Schwaiger)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3519}{}\doxysection{Website}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3519}
The website is generated from the repository, so all information about plugins, bindings and tools are always up-\/to-\/date.\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3520}{}\doxysection{Outlook}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3520}
We are currently working on following topics\+:


\begin{DoxyItemize}
\item Global mmap cache\+: This feature will enable Elektra to return configuration without parsing configuration files or executing other plugins as long as the configuration files are not changed. \+\_\+(Mihael Pranjić)\+\_\+
\item Finish high-\/level API. \+\_\+(Klemens Böswirth)\+\_\+
\item Validation improvements. \+\_\+(\+Michael Zronek)\+\_\+
\item Improve YAML plugins. \+\_\+(René Schwaiger)\+\_\+
\end{DoxyItemize}\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3521}{}\doxysection{Statistics}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3521}
Following authors made this release possible\+:

\tabulinesep=1mm
\begin{longtabu}spread 0pt [c]{*{2}{|X[-1]}|}
\hline
\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Commits   }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Author    }\\\cline{1-2}
\endfirsthead
\hline
\endfoot
\hline
\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Commits   }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Author    }\\\cline{1-2}
\endhead
1   &Thomas Wahringer \href{mailto:thomas.wahringer@libelektra.org}{\texttt{ thomas.\+wahringer@libelektra.\+org}}    \\\cline{1-2}
2   &Bernhard Denner \href{mailto:bernhard.denner@gmail.com}{\texttt{ bernhard.\+denner@gmail.\+com}}    \\\cline{1-2}
7   &Kurt Micheli \href{mailto:e1026558@student.tuwien.ac.at}{\texttt{ e1026558@student.\+tuwien.\+ac.\+at}}    \\\cline{1-2}
12   &Michael Zronek \href{mailto:michael.zronek@gmail.com}{\texttt{ michael.\+zronek@gmail.\+com}}    \\\cline{1-2}
33   &Lukas Winkler \href{mailto:derwinlu+git@gmail.com}{\texttt{ derwinlu+git@gmail.\+com}}    \\\cline{1-2}
28   &Klemens Böswirth \href{mailto:k.boeswirth+git@gmail.com}{\texttt{ k.\+boeswirth+git@gmail.\+com}}    \\\cline{1-2}
30   &Armin Wurzinger \href{mailto:e1528532@student.tuwien.ac.at}{\texttt{ e1528532@student.\+tuwien.\+ac.\+at}}    \\\cline{1-2}
38   &Peter Nirschl \href{mailto:peter.nirschl@gmail.com}{\texttt{ peter.\+nirschl@gmail.\+com}}    \\\cline{1-2}
100   &Markus Raab \href{mailto:markus@libelektra.org}{\texttt{ markus@libelektra.\+org}}    \\\cline{1-2}
180   &Mihael Pranjic \href{mailto:mpranj@limun.org}{\texttt{ mpranj@limun.\+org}}    \\\cline{1-2}
418   &René Schwaiger \href{mailto:sanssecours@me.com}{\texttt{ sanssecours@me.\+com}}   \\\cline{1-2}
\end{longtabu}


849 commits, 581 files changed, 18503 insertions(+), 3192 deletions(-\/)

We welcome new contributors!\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3522}{}\doxysection{Finished Thesis}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3522}

\begin{DoxyItemize}
\item \href{https://www.libelektra.org/ftp/elektra/publications/bugl2018web.pdf}{\texttt{ Daniel Bugl}}, see also \href{https://webdemo.libelektra.org/}{\texttt{ the web demo}}.
\item \href{https://www.libelektra.org/ftp/elektra/publications/wahringer2018notification.pdf}{\texttt{ Thomas Wahringer}}.
\item \href{https://www.libelektra.org/ftp/elektra/publications/micheli2018hybrid.pdf}{\texttt{ Kurt Micheli}}
\item \href{http://repositum.tuwien.ac.at/urn:nbn:at:at-ubtuw:1-115452}{\texttt{ Armin Wurzinger}}
\end{DoxyItemize}\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3523}{}\doxysection{Get It!}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3523}
You can download the release from \href{https://www.libelektra.org/ftp/elektra/releases/elektra-0.8.25.tar.gz}{\texttt{ here}} or \href{https://github.com/ElektraInitiative/ftp/blob/master/releases/elektra-0.8.25.tar.gz?raw=true}{\texttt{ Git\+Hub}}

The \href{https://github.com/ElektraInitiative/ftp/blob/master/releases/elektra-0.8.25.tar.gz.hashsum?raw=true}{\texttt{ hashsums are\+:}}


\begin{DoxyItemize}
\item name\+: elektra-\/0.\+8.\+25.\+tar.\+gz
\item size\+: 6233918
\item md5sum\+: d5614b2049fb8431a80842a4909b140e
\item sha1\+: c7dfb5fa87284d8f5ba4d4753e0e47a0e362c733
\item sha256\+: 37829256e102e967fe3d58613a036d9fb9b8f9658e20c23fa787eac0bfbb8a79
\end{DoxyItemize}

The release tarball is also available signed by Markus Raab using Gnu\+PG from \href{https://www.libelektra.org/ftp/elektra/releases/elektra-0.8.25.tar.gz.gpg}{\texttt{ here}} or \href{https://github.com/ElektraInitiative/ftp/blob/master/releases//elektra-0.8.25.tar.gz.gpg?raw=true}{\texttt{ Git\+Hub}}

Already built API documentation can be found \href{https://doc.libelektra.org/api/0.8.25/html/}{\texttt{ here}} or \href{https://github.com/ElektraInitiative/doc/tree/master/api/0.8.25}{\texttt{ Git\+Hub}}.\hypertarget{doc_news_2018-11-18_0_8_25_md_autotoc_md3524}{}\doxysection{Stay tuned!}\label{doc_news_2018-11-18_0_8_25_md_autotoc_md3524}
Subscribe to the \href{https://www.libelektra.org/news/feed.rss}{\texttt{ RSS feed}} to always get the release notifications.

If you also want to participate, or for any questions and comments please contact us via the issue tracker \href{http://issues.libelektra.org}{\texttt{ on Git\+Hub}}.

\href{https://www.libelektra.org/news/0.8.25-release}{\texttt{ Permalink to this NEWS entry}}

For more information, see \href{https://libelektra.org}{\texttt{ https\+://libelektra.\+org}}

Best regards, \href{https://www.libelektra.org/developers/authors}{\texttt{ Elektra Initiative}} 