Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
101 changes: 101 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
$<INSTALL_INTERFACE:include>
)

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
)
2 changes: 1 addition & 1 deletion buildfile
Original file line number Diff line number Diff line change
@@ -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.
#
Expand Down
3 changes: 3 additions & 0 deletions cmake/stud-uuid-config.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
@PACKAGE_INIT@

include("${CMAKE_CURRENT_LIST_DIR}/stud-uuid-targets.cmake")
33 changes: 33 additions & 0 deletions libstud/uuid/version.hxx.cmake.in
Original file line number Diff line number Diff line change
@@ -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 ""