diff --git a/CMakeLists.txt b/CMakeLists.txt index 45012bd..4959c90 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,6 +8,17 @@ project(sframe option(TESTING "Build tests" OFF) option(CLANG_TIDY "Perform linting with clang-tidy" OFF) option(SANITIZERS "Enable sanitizers" OFF) +option(NAMESPACE_SUFFIX "Namespace Suffix for CXX and CMake Export") + +if(NAMESPACE_SUFFIX) + set(SFRAME_CXX_NAMESPACE "sframe_${NAMESPACE_SUFFIX}" CACHE STRING "Top-level Namespace for CXX") + set(SFRAME_EXPORT_NAMESPACE "SFrame${NAMESPACE_SUFFIX}" CACHE STRING "Namespace for CMake Export") +else() + set(SFRAME_CXX_NAMESPACE "sframe" CACHE STRING "Top-level Namespace for CXX") + set(SFRAME_EXPORT_NAMESPACE "SFrame" CACHE STRING "Namespace for CMake Export") +endif() +message(STATUS "CXX Namespace: ${SFRAME_CXX_NAMESPACE}") +message(STATUS "CMake Export Namespace: ${SFRAME_EXPORT_NAMESPACE}") # Use -DCRYPTO=(OPENSSL_1_1 | OPENSSL_3 | BORINGSSL) to configure crypto if(NOT DEFINED CRYPTO) @@ -19,6 +30,12 @@ endif() ### set_property(GLOBAL PROPERTY USE_FOLDERS ON) +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/namespace.h.in" + "${CMAKE_CURRENT_BINARY_DIR}/include/namespace.h" + @ONLY +) + set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU") @@ -104,14 +121,16 @@ target_include_directories( gsl INTERFACE ${GSL_LITE_INCLUDE_DIR} ) set(LIB_NAME "${PROJECT_NAME}") file(GLOB_RECURSE LIB_HEADERS CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/include/*.h") +file(GLOB_RECURSE LIB_GENERATED_HEADERS CONFIGURE_DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/include/*.h") file(GLOB_RECURSE LIB_SOURCES CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp") -add_library(${LIB_NAME} ${LIB_HEADERS} ${LIB_SOURCES}) +add_library(${LIB_NAME} ${LIB_HEADERS} ${LIB_GENERATED_HEADERS} ${LIB_SOURCES}) add_dependencies(${LIB_NAME} gsl) target_link_libraries(${LIB_NAME} PRIVATE gsl OpenSSL::Crypto) target_include_directories(${LIB_NAME} PUBLIC $ + $ $ ) diff --git a/cmake/namespace.h.in b/cmake/namespace.h.in new file mode 100644 index 0000000..d4a9f3c --- /dev/null +++ b/cmake/namespace.h.in @@ -0,0 +1,4 @@ +#pragma once + +// Configurable top-level namespace +#define SFRAME_NAMESPACE @SFRAME_CXX_NAMESPACE@ \ No newline at end of file diff --git a/include/sframe/sframe.h b/include/sframe/sframe.h index d570076..98dd8ad 100644 --- a/include/sframe/sframe.h +++ b/include/sframe/sframe.h @@ -5,9 +5,10 @@ #include #include +#include #include -namespace sframe { +namespace SFRAME_NAMESPACE { struct openssl_error : std::runtime_error { @@ -147,4 +148,4 @@ class MLSContext : public SFrame KeyState& get_state(KeyID key_id) override; }; -} // namespace sframe +} // namespace SFRAME_NAMESPACE diff --git a/src/crypto.cpp b/src/crypto.cpp index fdd40e9..ee950c9 100644 --- a/src/crypto.cpp +++ b/src/crypto.cpp @@ -1,6 +1,6 @@ #include "crypto.h" -namespace sframe { +namespace SFRAME_NAMESPACE { /// /// Information about algorithms @@ -91,4 +91,4 @@ cipher_overhead(CipherSuite suite) } } -} // namespace sframe +} // namespace SFRAME_NAMESPACE diff --git a/src/crypto.h b/src/crypto.h index 22636f3..f31c0be 100644 --- a/src/crypto.h +++ b/src/crypto.h @@ -4,7 +4,7 @@ #include -namespace sframe { +namespace SFRAME_NAMESPACE { /// /// Information about algorithms @@ -54,4 +54,4 @@ open(CipherSuite suite, input_bytes aad, input_bytes ct); -} // namespace sframe +} // namespace SFRAME_NAMESPACE diff --git a/src/crypto_boringssl.cpp b/src/crypto_boringssl.cpp index 16f3a29..60b44cd 100644 --- a/src/crypto_boringssl.cpp +++ b/src/crypto_boringssl.cpp @@ -9,7 +9,7 @@ #include #include -namespace sframe { +namespace SFRAME_NAMESPACE { /// /// Convert between native identifiers / errors and OpenSSL ones @@ -409,6 +409,6 @@ open(CipherSuite suite, throw unsupported_ciphersuite_error(); } -} // namespace sframe +} // namespace SFRAME_NAMESPACE #endif // defined(OPENSSL_3) diff --git a/src/crypto_openssl11.cpp b/src/crypto_openssl11.cpp index 1e3c722..6b0dd14 100644 --- a/src/crypto_openssl11.cpp +++ b/src/crypto_openssl11.cpp @@ -6,7 +6,7 @@ #include #include -namespace sframe { +namespace SFRAME_NAMESPACE { /// /// Scoped pointers for OpenSSL objects @@ -468,6 +468,6 @@ open(CipherSuite suite, throw unsupported_ciphersuite_error(); } -} // namespace sframe +} // namespace SFRAME_NAMESPACE #endif // defined(OPENSSL_1_1) diff --git a/src/crypto_openssl3.cpp b/src/crypto_openssl3.cpp index b2ca9f7..26de861 100644 --- a/src/crypto_openssl3.cpp +++ b/src/crypto_openssl3.cpp @@ -9,7 +9,7 @@ #include #include -namespace sframe { +namespace SFRAME_NAMESPACE { /// /// Convert between native identifiers / errors and OpenSSL ones @@ -448,6 +448,6 @@ open(CipherSuite suite, throw unsupported_ciphersuite_error(); } -} // namespace sframe +} // namespace SFRAME_NAMESPACE #endif // defined(OPENSSL_3) diff --git a/src/header.cpp b/src/header.cpp index 1cbab0e..0609cfa 100644 --- a/src/header.cpp +++ b/src/header.cpp @@ -1,6 +1,6 @@ #include "header.h" -namespace sframe { +namespace SFRAME_NAMESPACE { static size_t uint_size(uint64_t val) @@ -109,4 +109,4 @@ Header::encode(output_bytes buffer) const return 1 + kid_size + ctr_size; } -} // namespace sframe +} // namespace SFRAME_NAMESPACE diff --git a/src/header.h b/src/header.h index b1a6968..55ac232 100644 --- a/src/header.h +++ b/src/header.h @@ -2,7 +2,7 @@ #include -namespace sframe { +namespace SFRAME_NAMESPACE { void encode_uint(uint64_t val, output_bytes buffer); @@ -21,4 +21,4 @@ struct Header static constexpr size_t max_size = 1 + 7 + 7; }; -} // namespace sframe +} // namespace SFRAME_NAMESPACE diff --git a/src/sframe.cpp b/src/sframe.cpp index 4290f6b..ed4a3c6 100644 --- a/src/sframe.cpp +++ b/src/sframe.cpp @@ -10,7 +10,7 @@ #include #include -namespace sframe { +namespace SFRAME_NAMESPACE { std::ostream& operator<<(std::ostream& str, const input_bytes data) @@ -294,4 +294,4 @@ MLSContext::get_state(KeyID key_id) return epoch->get(suite, sender_id); } -} // namespace sframe +} // namespace SFRAME_NAMESPACE diff --git a/test/sframe.cpp b/test/sframe.cpp index 0db35b2..f6f5ff8 100644 --- a/test/sframe.cpp +++ b/test/sframe.cpp @@ -8,7 +8,7 @@ #include // for invalid_argument #include // for basic_string, operator== -using namespace sframe; +using namespace SFRAME_NAMESPACE; static bytes from_hex(const std::string& hex)