diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000..6cf6bc7
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,23 @@
+
+# Note:
+# - libnabo cmake install require that the README.md file exist in the docker image
+# - libnaboer-CI doc related step require that .svg, .png and .md be copied in the docker image
+
+# Graphic/image related
+*.svg
+*.svgz
+*.png
+*.drawio
+
+# Text related
+*.pdf
+
+# Files
+
+
+# Directories
+drawio/*
+visual/*
+
+# IDE
+.run/*
diff --git a/.env.libnabo b/.env.libnabo
new file mode 100644
index 0000000..7909792
--- /dev/null
+++ b/.env.libnabo
@@ -0,0 +1,35 @@
+# =================================================================================================
+#
+# Set project related environment variables. Those are available for convenience
+# and are also required by 'norlab-shell-script-tools' library.
+#
+# Usage:
+#
+# Important! Source this file from 'libnabo' repository root
+# $ cd
+# $ set -o allexport && source .env.libnabo && set +o allexport
+#
+# =================================================================================================
+
+PROJECT_PROMPT_NAME='NABO'
+
+# ....Programaticaly fetch source code information.................................................
+PROJECT_GIT_REMOTE_URL="/~https://github.com/norlab-ulaval/libnabo"
+PROJECT_GIT_NAME=$( basename "${PROJECT_GIT_REMOTE_URL}" .git )
+PROJECT_PATH=$( git rev-parse --show-toplevel )
+PROJECT_SRC_NAME="$( basename ${PROJECT_PATH} )"
+
+# ....Set NABO related environment variable with their own prefix..................................
+# Note: Those with "PROJECT_" prefix will get eventualy overiden in the case where N2ST is used
+# as a library. Using generic testing logic require that environment variables with
+# "PROJECT_" prefix be available.
+NABO_PROMPT_NAME="${PROJECT_PROMPT_NAME}"
+NABO_GIT_REMOTE_URL="${PROJECT_GIT_REMOTE_URL}"
+NABO_GIT_NAME="${PROJECT_GIT_NAME}"
+NABO_PATH="${PROJECT_PATH}"
+NABO_SRC_NAME="${PROJECT_SRC_NAME}"
+
+# ....Set dependencies path........................................................................
+NABO_BUILD_SYSTEM_PATH="${PROJECT_PATH}/build_system"
+N2ST_PATH="${PROJECT_PATH}/build_system/utilities/norlab-shell-script-tools"
+NBS_PATH="${PROJECT_PATH}/build_system/utilities/norlab-build-system"
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
new file mode 100644
index 0000000..b843f29
--- /dev/null
+++ b/.github/CODEOWNERS
@@ -0,0 +1,37 @@
+# =================================================================================================
+# Files or directories with designated code owner.
+#
+# Note:
+# - Each line is a file pattern followed by one or more owners.
+# - Branch with branch protection rule "Require review from Code Owners"
+# will automaticaly trigger a request to a designated code owner
+# =================================================================================================
+
+# ....Repository wide code owner...................................................................
+# These owners will be the default owners for everything in the repo.
+#* @pomerlef
+
+
+# ....High level files.............................................................................
+/README.md @pomerlef
+/LICENSE @pomerlef
+
+# ....Core directories and files...................................................................
+/examples @boxanm @simonpierredeschenes
+/nabo @boxanm @simonpierredeschenes
+/python @boxanm @simonpierredeschenes
+/tests @boxanm @simonpierredeschenes
+/contributing @RedLeader962
+
+# ....User install tools...........................................................................
+/.env.libnabo @RedLeader962
+/libnabo_dependencies_installer.bash @RedLeader962
+/libnabo_installer.bash @RedLeader962
+
+# ....DevOps related...............................................................................
+/.github/ @RedLeader962
+/build_system/ @RedLeader962
+/.gitmodules @RedLeader962
+/.gitignore @RedLeader962
+/.dockerignore @RedLeader962
+
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
new file mode 100644
index 0000000..f62a0c8
--- /dev/null
+++ b/.github/pull_request_template.md
@@ -0,0 +1,39 @@
+# Description
+
+### Summary:
+
+### Changes and type of changes (quick overview):
+
+-
+-
+-
+
+---
+
+# Checklist:
+
+### Code related
+
+- [ ] I have made corresponding changes to the documentation
+ (i.e.: function, class, script header, README.md)
+- [ ] I have commented hard-to-understand code
+- [ ] I have added tests that prove my fix is effective or that my feature works
+- [ ] All tests pass locally with my changes
+ (Check [contributing/contributing_instructions.md](/contributing/contributing_instructions.md) for local testing procedure using _libnabo-build-system_)
+
+
+### PR creation related
+
+- [ ] My pull request `base ref` branch is set to the `develop` branch
+ (the _build-system_ won't be triggered otherwise)
+- [ ] My pull request branch is up-to-date with the `develop` branch
+ (the _build-system_ will reject it otherwise)
+
+### PR description related
+
+- [ ] I have included a quick summary of the changes
+- [ ] I have indicated the related issue's id with `# ` if changes are of type `fix`
+- [ ] I have included a high-level list of changes and their corresponding types
+ (See [contributing/commit_msg_reference.md](/contributing/commit_msg_reference.md) for details)
+
+---
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..56c23ad
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,6 @@
+[submodule "build_system/utilities/norlab-build-system"]
+ path = build_system/utilities/norlab-build-system
+ url = /~https://github.com/norlab-ulaval/norlab-build-system.git
+[submodule "utilities/norlab-shell-script-tools"]
+ path = build_system/utilities/norlab-shell-script-tools
+ url = /~https://github.com/norlab-ulaval/norlab-shell-script-tools.git
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c0061df..7ba5fb7 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,4 +1,6 @@
-cmake_minimum_required(VERSION 3.8)
+cmake_minimum_required(VERSION 3.10.2)
+
+include(CMakePackageConfigHelpers)
if (NOT CMAKE_VERSION VERSION_LESS "3.1")
cmake_policy(SET CMP0054 NEW)
@@ -84,6 +86,8 @@ else ()
set (CMAKE_CXX_STANDARD 11)
endif ()
+#======================== External Dependencies ===============================
+
include(GNUInstallDirs)
# eigen 2 or 3
@@ -243,35 +247,35 @@ export(
# Create variable with the library location
-set(libnabo_library $)
+set(libnabo_library $)
# Create variable for the local build tree
get_property(libnabo_include_dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
# Configure & generate config file for local build tree
-configure_file(libnaboConfig.cmake.in
- "${PROJECT_BINARY_DIR}/libnaboConfig.cmake.conf" @ONLY)
-file(GENERATE
- OUTPUT "${PROJECT_BINARY_DIR}/libnaboConfig.cmake"
- INPUT "${PROJECT_BINARY_DIR}/libnaboConfig.cmake.conf")
+configure_package_config_file(libnaboConfig.cmake.in
+ "${PROJECT_BINARY_DIR}/libnaboConfig.cmake"
+ INSTALL_DESTINATION share/libnabo/cmake
+ PATH_VARS PROJECT_NAME
+ )
# 2- installation build #
# Change the library location for an install location
-set(libnabo_library ${CMAKE_INSTALL_PREFIX}/lib/$)
+set(libnabo_library $)
# Change the include location for the case of an install location
set(libnabo_include_dirs ${CMAKE_INSTALL_PREFIX}/include)
# We put the generated file for installation in a different repository (i.e., ./CMakeFiles/)
-configure_file(libnaboConfig.cmake.in
- "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/libnaboConfig.cmake.conf" @ONLY)
-file(GENERATE
- OUTPUT "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/libnaboConfig.cmake"
- INPUT "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/libnaboConfig.cmake.conf")
+configure_package_config_file(libnaboConfig.cmake.in
+ "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/libnaboConfig.cmake"
+ INSTALL_DESTINATION share/libnabo/cmake
+ PATH_VARS PROJECT_NAME
+ )
# The same versioning file can be used for both cases
-configure_file(libnaboConfigVersion.cmake.in
- "${PROJECT_BINARY_DIR}/libnaboConfigVersion.cmake" @ONLY)
+write_basic_package_version_file(libnaboConfigVersion.cmake
+ COMPATIBILITY AnyNewerVersion)
install(FILES
"${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/libnaboConfig.cmake"
diff --git a/README.md b/README.md
index 2cf9e00..6d111f7 100644
--- a/README.md
+++ b/README.md
@@ -1,73 +1,180 @@
-libnabo is a fast K Nearest Neighbour library for low-dimensional spaces.
-It provides a clean, legacy-free, scalar-type–agnostic API thanks to C++ templates.
-Its current CPU implementation is strongly inspired by [ANN], but with more compact data types.
-On the average, libnabo is 5% to 20% faster than [ANN].
+