elib is a personal C++ library and an excuse to learn/practice more parts of C++. It can be found at http://github.com/efcs/elib. The homepage for elib is http://elib.efcs.ca/.
Warning: This file is updated very infrequently. Last updated on 2014-06-17.
Note: elib uses git submodules! If this is a new working directory, please
run git submodule update --init
.
The get and build Elib run the following commands:
git clone https://github.com/efcs/elib.git
cd elib
git submodule update --init
make configure
make elib
After building Elib it is recommended that you run the testsuite. You can do so using:
make check
If do not have python or would rather use the CTest testsuite you can use:
make check-ctest
Elib currently only supports Linux, OS X, and Cygwin.
Most libraries will build on Windows (See Library Summary for specifics); however, the build system has no support for MSVC.
Elib supports the following compiler/library configurations:
- GCC 4.8
- GCC 4.9
- Clang 3.4 (with/without libc++)
- Clang 3.5 trunk (with/without libc++)
- GCC 4.8.3 (Cygwin)
Note: A non-trivial but easy to make workaround is required to compile elib
in Cygwin. It requires editing <cstdio>
so that it provides std::vsnprintf
in C++11 mode.
-
Any: A variant container. It provides an implementation of the
std::any
proposal. -
Aux: (Header only) Miscellaneous functionality that is frequently needed. It includes:
forward
,move
,declval
integral_constant
,true_
,false_
,int_
,size_type
not_
,and_
,or_
,if_
,enable_if
- a
type_traits
implementation (C++11 or C++14) invoke
ELIB_ASSERT
-
Config: A compiler/library/platform configuration system.
-
Compressed Pair: A pair class that utilizes the empty base class optimization. It is very handy for storing allocators.
-
Fmt: A set of tools for formatting strings and printing.
-
Lexical Cast: Provides a lexical type-conversion function.
-
Optional: An implementation of the
std::optional
proposal. -
Params: A set of meta-functions for working with C++ typelists.
-
Scope Guard: A utility library that provides the ability to invoke a function on scope exit.
-
Container: (Header only) Provides containers not found in the standard library. It currently includes:
flat_map
linear_flat_map
-
Enumeration: (Header only) Provides tools to deal with C++11 scoped enumerations, including checked casting, string casting, iteration, and non-default operators.
-
Except: (Header only) Similar to
boost::exception
; allows exceptions to store arbitrary data. -
Filesystem: (No Windows support) An implementation of the C++14 filesystem library.
-
Iter: Utility library that provides creation and manipulation of iterators and views.
-
Logging: A basic message logging and formatting library, intended for use with log files.
-
Memory: Utility functions and classes for working with memory and allocators. It currently includes:
allocator_destructor
: for destroying allocated memory that hasn't been initializedmake_unique
: An implementation of the proposal forstd::make_unique
-
MP: (Header only) A meta-programming library, generally using the same structure, file names, and interface as
boost::mpl
, which it draws inspiration from.
PP: Library of macros for working with the C++ preprocessor.
Web: (No windows support) Various network utilities, including a C++ socket class and HTTP parsing.
Note: Requirements marked with (Unit Testing Only) are only required to build the unit tests.
General requirements:
- C++11 compiler (GCC >= 4.8.1)
- Native library used by
<mutex>
header (pthread on Linux) - Python 3.x (Unit Testing Only)
- CMake >= 2.8.8
Note: elib will compile with GCC 4.8.0 but some features have been disabled.
Requirements (library specific):
-
Filesystem:
- POSIX-compatible compiler and execution environment
-
Web:
- POSIX-compatible compiler and execution environment
- Support for the
<regex>
header
-
configure: Run the CMake configuration. This only needs to be done once.
-
redep: Re-run partial configuration. Detects new source files.
-
all: Build libraries and unit tests.
-
clean: Clean build files.
-
distclean: Clean all generated files.
-
install: Install using the generated CMake buildsystem's target directory.
-
everything: A helper command. Equivalent to
make distclean make configure make
-
check: Run the unit tests (using LIT).
-
test: Run the unit tests (using CTest).
-
valgrind-check: Run unit tests with valgrind.
-
scan-build: Run clang's scan-build over the build.
-
coverage: Generate code coverage data.
These are the options currently supported by make configure
. For example
make BUILD=RELEASE configure
.
-
ELIB_CMAKE_OPTIONS
: This is a list of CMake build options. It is passed directly to CMake. This is useful when selecting what libraries to build. -
BUILD
: Configure the build type.- Values:
DEBUG
,RELEASE
- Default:
DEBUG
- Values:
-
CXX1Y
: Compile using the-std=c++1y
flag.- Default:
OFF
- Note: c++1y support is experimental
- Default:
-
PYTHON3
: Use Python3 as the python interpreter.- Default:
OFF
- Default:
-
ALL_WARNINGS
: Turn on all warnings for the compiler.- Default:
ON
- Default:
-
ASSERT_CONFIG
: Make the config library fail to compile if it cannot deduce the compiler/library/platform information.- Default:
OFF
- Default:
-
ENABLE_EXPERIMENTAL
: Build the experimental libraries.- Default:
ON
- Default:
-
UNIT_TESTS
: Build the unit tests.- Default:
ON
- Default:
-
ELIB_AUX
: Build the utility library.- Default: ON
-
ELIB_CONFIG
: Build configuration library.- Default: ON
-
ELIB_CONTAINER
: Build containers library.- Default: ON
-
ELIB_ENUMERATION
: Build enumeration library.- Default: ON
-
ELIB_EXCEPT
: Build exception library.- Default: ON
-
ELIB_FILESYSTEM
: Build the filesystem library.- Default: ON
-
ELIB_FUNCTIONAL
: Build functional source.- Default: ON
-
ELIB_ITERATOR
: Build iterator source.- Default: ON
-
ELIB_LOGGING
: Build logging library.- Default: ON
-
ELIB_MEMORY
: Build memory library.- Default: ON
-
ELIB_MP
: Build the MPL.- Default: ON
-
ELIB_PREPROCESSOR
: Build preprocessor library.- Default: ON
-
ELIB_WEB
: Build web library.- Default: ON when compiling with GCC >= 4.8.3 or clang with libc++. Off otherwise.
Elib was written by Eric Fiselier.