diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..58d60b7 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,101 @@ +cmake_minimum_required(VERSION 3.13) +project(stud-uuid VERSION 1.0.7 LANGUAGES CXX) + +set(CMAKE_CXX_STANDARD 14) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libstud/uuid/version.hxx.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/libstud/uuid/version.hxx @ONLY) + +include_directories(${CMAKE_CURRENT_BINARY_DIR}) + +# Header not needed for build only for install +set(MAIN_HEADER libstud/uuid.hxx) + +set(HEADERS + libstud/uuid/uuid.hxx + libstud/uuid/uuid-io.hxx + libstud/uuid/export.hxx + libstud/uuid/uuid.ixx + ${CMAKE_CURRENT_BINARY_DIR}/libstud/uuid/version.hxx +) + +set(SOURCES + libstud/uuid/uuid.cxx + libstud/uuid/uuid-io.cxx +) + +add_library(stud-uuid STATIC ${sources}) +add_library(stud::uuid ALIAS stud-uuid) + +target_include_directories(stud-uuid + PUBLIC + $ + $ + $ +) + +set_target_properties(stud-uuid PROPERTIES + OUTPUT_NAME stud-uuid + VERSION ${PROJECT_VERSION} + PUBLIC_HEADER "${HEADERS}" +) + +if (LINUX) + target_sources(stud-uuid PRIVATE libstud/uuid/uuid-linux.cxx) +elseif (WIN32) + target_sources(stud-uuid PRIVATE libstud/uuid/uuid-windows.cxx) + target_link_libraries(stud-uuid rpcrt4.lib) +elseif (APPLE) + target_sources(stud-uuid PRIVATE libstud/uuid/uuid-macos.cxx) + target_link_libraries(stud-uuid "-framework CoreFoundation") +elseif (EMSCRIPTEN) + target_sources(stud-uuid PRIVATE libstud/uuid/uuid-emscripten.cxx) +elseif (CMAKE_SYSTEM_NAME MATCHES "FreeBSD" OR CMAKE_SYSTEM_NAME MATCHES "NetBSD") + target_sources(stud-uuid PRIVATE libstud/uuid/uuid-freebsd.cxx) +elseif (CMAKE_SYSTEM_NAME MATCHES "OpenBSD") + target_sources(stud-uuid PRIVATE libstud/uuid/uuid-openbsd.cxx) +else() + message(FATAL_ERROR "Unknown target platform.") +endif() + + +# Installation +include(GNUInstallDirs) + +install(TARGETS stud-uuid + EXPORT stud-uuid-targets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libstud/uuid +) + +install(FILES ${MAIN_HEADER} + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libstud +) + +# Export targets +install(EXPORT stud-uuid-targets + FILE stud-uuid-targets.cmake + NAMESPACE stud:: + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/stud-uuid +) + +# Create and install config file +include(CMakePackageConfigHelpers) + +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/stud-uuid-config-version.cmake" + VERSION ${PROJECT_VERSION} + COMPATIBILITY SameMajorVersion +) + +configure_package_config_file( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/stud-uuid-config.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/stud-uuid-config.cmake" + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/stud-uuid +) + +install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/stud-uuid-config.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/stud-uuid-config-version.cmake" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/stud-uuid +) diff --git a/buildfile b/buildfile index 2ff9c53..fe7cf40 100644 --- a/buildfile +++ b/buildfile @@ -1,4 +1,4 @@ -./: {*/ -build/} doc{README.md NEWS} legal{LICENSE AUTHORS} manifest +./: {*/ -{build/ cmake/ cmake-build/}} doc{README.md NEWS} legal{LICENSE AUTHORS} manifest # Don't install tests. # diff --git a/cmake/stud-uuid-config.cmake.in b/cmake/stud-uuid-config.cmake.in new file mode 100644 index 0000000..6d05a12 --- /dev/null +++ b/cmake/stud-uuid-config.cmake.in @@ -0,0 +1,3 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/stud-uuid-targets.cmake") diff --git a/libstud/uuid/version.hxx.cmake.in b/libstud/uuid/version.hxx.cmake.in new file mode 100644 index 0000000..975f767 --- /dev/null +++ b/libstud/uuid/version.hxx.cmake.in @@ -0,0 +1,33 @@ +#pragma once + +// The numeric version format is AAAAABBBBBCCCCCDDDE where: +// +// AAAAA - major version number +// BBBBB - minor version number +// CCCCC - bugfix version number +// DDD - alpha / beta (DDD + 500) version number +// E - final (0) / snapshot (1) +// +// When DDDE is not 0, 1 is subtracted from AAAAABBBBBCCCCC. For example: +// +// Version AAAAABBBBBCCCCCDDDE +// +// 0.1.0 0000000001000000000 +// 0.1.2 0000000001000020000 +// 1.2.3 0000100002000030000 +// 2.2.0-a.1 0000200001999990010 +// 3.0.0-b.2 0000299999999995020 +// 2.2.0-a.1.z 0000200001999990011 +// +#define LIBSTUD_UUID_VERSION @PROJECT_VERSION_MAJOR@0000@PROJECT_VERSION_MINOR@0000@PROJECT_VERSION_PATCH@0000ULL +#define LIBSTUD_UUID_VERSION_STR "@PROJECT_VERSION@" +#define LIBSTUD_UUID_VERSION_ID "@PROJECT_VERSION@" + +#define LIBSTUD_UUID_VERSION_MAJOR @PROJECT_VERSION_MAJOR@ +#define LIBSTUD_UUID_VERSION_MINOR @PROJECT_VERSION_MINOR@ +#define LIBSTUD_UUID_VERSION_PATCH @PROJECT_VERSION_PATCH@ + +#define LIBSTUD_UUID_PRE_RELEASE false + +#define LIBSTUD_UUID_SNAPSHOT_SN 0ULL +#define LIBSTUD_UUID_SNAPSHOT_ID ""