Commit ae3a7237 authored by jan.koester's avatar jan.koester
Browse files

windows fixes

parent 4ec4186b
Loading
Loading
Loading
Loading
+79 −58
Original line number Diff line number Diff line
include(GenerateExportHeader)
cmake_minimum_required(VERSION 3.21)
project(libuuidp VERSION 1.0.0 LANGUAGES CXX)

set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
include(GenerateExportHeader)
include(CMakePackageConfigHelpers)

# ----------- Library -----------
add_library(uuidp SHARED uuidp.cpp)
# Export all symbols on MSVC if you don’t annotate every function
set_target_properties(uuidp PROPERTIES
  WINDOWS_EXPORT_ALL_SYMBOLS ON
  OUTPUT_NAME "uuidp"
  VERSION ${PROJECT_VERSION}
  SOVERSION ${PROJECT_VERSION_MAJOR}
)
# Export header (defines UUIDP_EXPORT macro)
generate_export_header(uuidp
  EXPORT_FILE_NAME "${CMAKE_CURRENT_BINARY_DIR}/uuidp_export.h"
)

generate_export_header(uuidp)
# Public headers for consumers (build + install)
target_include_directories(uuidp
  PUBLIC
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
    $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
    $<INSTALL_INTERFACE:include>
)
# Optional: Debug postfix on MSVC
set_target_properties(uuidp PROPERTIES DEBUG_POSTFIX "d")

# ----------- Tool -----------
add_executable(uuid-gen uuid-gen.cpp)
target_link_libraries(uuid-gen PRIVATE uuidp)

target_link_libraries(uuid-gen uuidp)
# ----------- Install (runtime/import lib/headers) -----------
include(GNUInstallDirs)

install(
    TARGETS uuidp
# Install the DLL/EXE to bin, the import lib (.lib) to lib
install(TARGETS uuidp
  EXPORT uuidpTargets
    LIBRARY DESTINATION lib
    RUNTIME DESTINATION bin
  RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}          # .dll (Windows)
  LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}          # .so/.dylib (posix)
  ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}          # .lib (import/static)
  INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)

include(CMakePackageConfigHelpers)

set_property(TARGET uuidp APPEND PROPERTY INCLUDE_DIRECTORIES "${CMAKE_INSTALL_INCLUDEDIR}")

write_basic_package_version_file(
  "${CMAKE_CURRENT_BINARY_DIR}/libuuidpConfigVersion.cmake"
  VERSION ${Upstream_VERSION}
  COMPATIBILITY AnyNewerVersion
install(TARGETS uuid-gen
  RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

configure_file("${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt" "${CMAKE_CURRENT_BINARY_DIR}/uuidp_config.cmake" @ONLY)

# Headers (yours + generated export header)
install(FILES
        uuidp.h
        "${CMAKE_CURRENT_BINARY_DIR}/uuidp_config.cmake"
  "${CMAKE_CURRENT_SOURCE_DIR}/uuidp.h"
  "${CMAKE_CURRENT_BINARY_DIR}/uuidp_export.h"
        DESTINATION include
        COMPONENT Devel
  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)

# ----------- CMake package (find_package support) -----------
# Where to place the package config
set(ConfigPackageLocation "${CMAKE_INSTALL_LIBDIR}/cmake/libuuidp")

# Export the targets file
install(EXPORT uuidpTargets
  FILE libuuidpTargets.cmake
  NAMESPACE uuidp::
  DESTINATION "${ConfigPackageLocation}"
)

# Config + version files
configure_package_config_file(
  "${CMAKE_SOURCE_DIR}/uuid.cmake.in"
  "${CMAKE_CURRENT_SOURCE_DIR}/uuid.cmake.in"
  "${CMAKE_CURRENT_BINARY_DIR}/libuuidpConfig.cmake"
     INSTALL_DESTINATION ${ConfigPackageLocation}
  @ONLY
  INSTALL_DESTINATION "${ConfigPackageLocation}"
  NO_CHECK_REQUIRED_COMPONENTS_MACRO
)

install(EXPORT uuidpTargets
  FILE
    libuuidpTargets.cmake
  NAMESPACE
    uuidp::
  DESTINATION
    "lib/cmake/libuuidp"
write_basic_package_version_file(
  "${CMAKE_CURRENT_BINARY_DIR}/libuuidpConfigVersion.cmake"
  VERSION ${PROJECT_VERSION}
  COMPATIBILITY AnyNewerVersion
)

install(
  FILES
install(FILES
  "${CMAKE_CURRENT_BINARY_DIR}/libuuidpConfig.cmake"
  "${CMAKE_CURRENT_BINARY_DIR}/libuuidpConfigVersion.cmake"
  DESTINATION
    "lib/cmake/libuuidp"
  COMPONENT
    Devel
  DESTINATION "${ConfigPackageLocation}"
)

install(TARGETS uuid-gen RUNTIME_DEPENDENCY_SET DESTINATION bin)

if(${CMAKE_HOST_SYSTEM_NAME} MATCHES "Windows")
    set(CPACK_GENERATOR WIX)
    set(CPACK_WIX_UPGRADE_GUID "fdedd700-d2a1-5dbe-8157-640d83d42577")
# ----------- CPack (WiX) -----------
if(WIN32)
  set(CPACK_GENERATOR "WIX")
  set(CPACK_PACKAGE_NAME "uuidp")
  set(CPACK_PACKAGE_VENDOR "tuxist.de")
    set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE.txt")
  set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "uuidp - A C++ uuid Library")
    set(CPACK_PACKAGE_VERSION "1.0.0")
    set(CPACK_PACKAGE_VERSION_MAJOR "1")
    set(CPACK_PACKAGE_VERSION_MINOR "0")
    set(CPACK_PACKAGE_VERSION_PATCH "0")
  set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION})
  set(CPACK_PACKAGE_INSTALL_DIRECTORY "libuuidp")
    INCLUDE(CPack)
  # WiX expects an .rtf license typically; provide an RTF if possible
  set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE.rtf")
  # Stable, product-wide GUID (do not change between versions)
  set(CPACK_WIX_UPGRADE_GUID "fdedd700-d2a1-5dbe-8157-640d83d42577")
  include(CPack)
endif()