# shlublu / ShlubluLib

ShlubluLib is a lightweight, modular, general purpose, open-source C++ library for Linux and Windows.

https://shlublulib.shlublu.org

Geek Repo

Github PK Tool

ShlubluLib is a lightweight, modular, general purpose, open-source C++ library for Linux and Windows.
The current version is v0.5.

This library is designed to be simple to use. It is intended to cover frequent use cases in a simple way without preventing or hindering the development of more advanced features when needed. It actually consists of code that I wrote for my own use and that could be useful to others.

## Modules and documentation

This library currently consists in the following modules:

The Doxygen documentation of these modules is available at shlublulib.shlublu.org/v0.5/.

Some of these modules require external libraries such as Boost or Python. Such requirements are specified in their documentation.

Changes since former versions are tracked in the file CHANGELOG.md.

## C++ version

This is a C++17 library.

The deprecated class template std::codecvt is still used though as it has no standardized replacement so far.

## Installation from binaries

Should you just wish to use Shlublulib as a development tool, the binary distribution can be downloaded from our website.

### Content

These archives are signed with this PGP key so that you can check their integrity. They contain:

• the include directory to add to your include path
• the CHANGELOG.md file
• the license file LICENSE.txt applicable to this library

## Installation from sources

Should you wish to contribute, to play with the code, or should you prefer not to download binaries, this method is for you.

### Prerequisites

#### External libraries

The following libraries are required for ShlubluLib to compile:

Those version numbers correspond to my testing. Lower version numbers may work but this has not been tested yet.

#### Development environment

This library is developed under Microsoft Visual Studio 2019 using the following features and extensions:

Visual Studio is not an absolute prerequisite. The modules codebase compiles with GCC 5.4 or above. Only makefiles and unit tests are specific to Visual Studio. They can be quite easily rewritten for other tools if needed. Should you plan to do that please let me know and I'll provide you with the g++ and ar command lines I use for Linux.

The same way, depending on what you would like to do, you do not need all of the above:

• Microsoft Python - C++ projects debugging support is optional. You can build and use Shlublulib as long as you already have a compatible Python library installed (see External Libraries above).
• Microsoft CppUnitTest is only needed if you would like to build and run the unit tests suite.
• Microsoft Linux Development for Visual Studio is only needed if you would like to remotely build the Linux version of the library from the Visual Studio GUI.
• Doxygen is only needed it if you would like to generate a local version of the documentation.

You can either:

### Files system

The repository is organized as follows on the files system:

|
|____doc/
|	|____notice.txt
|
|____include/
|	|____shlublu/
|		|____(module A)/
|		|	|____(feature X.h)
|		|	|____(feature Y.h)
|		|
|		|____(module B)/
|			|____(...)
|
|____src/
|	|____(module A)/
|	|	|____(feature X.cpp)
|	|	|____(feature Y.cpp)
|	|
|	|____(module B)/
|		|____(...)
|
|____tests/
|	|____(module A)/
|	|	|____(tests feature X.cpp)
|	|
|	|____(module B)/
|		|____(...)
|
|____ShlubluLib.sln
|
|____(VS unit tests subproject files)
|____(VS Linux subproject files)
|____(VS Windows subproject files)
|
|____CHANGELOG.md
|____doxygen.conf
|____doxygen-structure.txt


The main project file to open with Visual Studio is ShlubluLib.sln.

### Visual Studio projects structure

The Visual Studio projects structure looks like this:

ShlubluLib
|
|____CHANGELOG.md
|____doxygen.conf
|____doxygen-structure.txt
|
|____00tests-shlublu
|	|____tests/
|		|____(module A)
|		|	|____(tests X.cpp)
|		|	|____(tests Y.cpp)
|		|
|		|____(module B)
|			|____(...)
|
|____shlublu
|	|____include/
|	|	|____(module A)
|	|	|	|____(feature X.h)
|	|	|	|____(feature Y.h)
|	|	|
|	|	|____(module B)
|	|		|____(...)
|	|
|	|____src/
|		|____(module A)
|		|	|____(feature X.cpp)
|		|	|____(feature Y.cpp)
|		|
|		|____(module B)
|			|____(...)
|
|____shlublu-linux
|____include/
|	|____(module A)
|	|	|____(feature X.h)
|	|	|____(feature Y.h)
|	|
|	|____(module B)
|		|____(...)
|
|____src/
|____(module A)
|	|____(feature X.cpp)
|	|____(feature Y.cpp)
|
|____(module B)
|____(...)


The projects shlublu (Windows) and shlublu-linux (Linux) can be built independantly of each other. You can decide to only build those you are interested in.

The unit tests project 00tests-shlublu, on its end, depends on shlublu. Building it is optional.

### Build configuration

Projects you plan to use need their settings to be modified according to your local environment:

• 00tests-shlublu:
• VC++ directories:
• Includes: paths to the Boost and C-Python include files of your local Windows environment
• Libraries: path to the Boost library files of your Windows environment
• Build events:
• Pre-build: Doxygen generation command-line takes place here and can be removed if you prefer
• shlublu:
• VC++ directories:
• Includes: paths to the Boost and C-Python include files of your local Windows environment
• shlublu-linux:
• VC++ directories:
• Includes: paths to the Boost and C-Python include files of your remote Linux environment

I am working on making this cleaner and easier to use. I hope it's ok for now.

### Build outputs

• 00tests-shlublu creates a test suite that can be used from the Test Explorer tab of Visual Studio
• shlublu outputs to:
• your local Windows environment: <\path\to\ShlubluLib>\x64\<Debug|Release>\shlublu.lib
• shlublu-linux outputs to:
• your local Windows environment: <\path\to\ShlubluLib>\bin\x64\<Debug|Release>\libshlublu-linux.a
• your remote Linux environment: ~/projects/shlublu-linux/bin/x64/<Debug|Release>\libshlublu-linux.a

Your client projects should also add the following directory to their include path:

• Windows: <\path\to>\ShlubluLib\include\
• Linux: ~/projects/shlublu-linux/include

## Unit tests

Unit tests are only available for Windows currently.

My name is Vincent Poulain.

You can find me there (user ID: @shlublu):

PGP public key: 0x1412f1e42222f90d

Many thanks to: