From 030ab23024b68dcce2b018b2441af9df01090129 Mon Sep 17 00:00:00 2001 From: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com> Date: Fri, 3 Jul 2026 11:10:54 -0400 Subject: [PATCH] build(cmake): Add opt-in install/export switch Introduce `LIBVIRTUALHID_INSTALL` to control whether install rules and CMake package exports are generated, defaulting to ON for top-level builds and OFF when vendored. Packaging and Windows driver install/package checks are now conditioned on install being enabled, and the README documents the new behavior and override flags. --- CMakeLists.txt | 42 +++++++++-------- README.md | 6 +++ src/CMakeLists.txt | 22 +++++---- src/platform/windows/driver/CMakeLists.txt | 55 ++++++++++++---------- 4 files changed, 70 insertions(+), 55 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 519120c..1af5407 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -38,7 +38,9 @@ option(BUILD_TESTS "Build tests" ${LIBVIRTUALHID_IS_TOP_LEVEL}) option(BUILD_EXAMPLES "Build examples" ${LIBVIRTUALHID_IS_TOP_LEVEL}) option(LIBVIRTUALHID_ENABLE_XTEST "Enable X11/XTest keyboard and mouse fallback on Linux" ON) option(LIBVIRTUALHID_BUILD_WINDOWS_DRIVER "Build the Windows UMDF2 driver package with the WDK/MSVC toolchain" OFF) -option(LIBVIRTUALHID_ENABLE_PACKAGING "Enable CPack package metadata" ${LIBVIRTUALHID_IS_TOP_LEVEL}) +option(LIBVIRTUALHID_INSTALL + "Install libvirtualhid targets, headers, and CMake package files" ${LIBVIRTUALHID_IS_TOP_LEVEL}) +option(LIBVIRTUALHID_ENABLE_PACKAGING "Enable CPack package metadata" ${LIBVIRTUALHID_INSTALL}) option(LIBVIRTUALHID_WARNINGS_AS_ERRORS "Treat libvirtualhid warnings as errors" ${LIBVIRTUALHID_IS_TOP_LEVEL}) set(CMAKE_COLOR_MAKEFILE ON) @@ -114,23 +116,25 @@ endif() # # Package config # -configure_package_config_file( - "${CMAKE_CURRENT_SOURCE_DIR}/cmake/libvirtualhid-config.cmake.in" - "${CMAKE_CURRENT_BINARY_DIR}/libvirtualhid-config.cmake" - INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/libvirtualhid" -) - -write_basic_package_version_file( - "${CMAKE_CURRENT_BINARY_DIR}/libvirtualhid-config-version.cmake" - VERSION ${PROJECT_VERSION} - COMPATIBILITY SameMajorVersion -) - -install(FILES - "${CMAKE_CURRENT_BINARY_DIR}/libvirtualhid-config.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/libvirtualhid-config-version.cmake" - DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/libvirtualhid") - -if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME AND LIBVIRTUALHID_ENABLE_PACKAGING) +if(LIBVIRTUALHID_INSTALL) + configure_package_config_file( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/libvirtualhid-config.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/libvirtualhid-config.cmake" + INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/libvirtualhid") + + write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/libvirtualhid-config-version.cmake" + VERSION ${PROJECT_VERSION} + COMPATIBILITY SameMajorVersion) + + install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/libvirtualhid-config.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/libvirtualhid-config-version.cmake" + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/libvirtualhid") +endif() + +if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME + AND LIBVIRTUALHID_ENABLE_PACKAGING + AND LIBVIRTUALHID_INSTALL) include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/packaging/common.cmake") endif() diff --git a/README.md b/README.md index 316cc02..3458b9a 100644 --- a/README.md +++ b/README.md @@ -419,6 +419,12 @@ target unless they explicitly enable additional options. Linux consumers still need the development packages used by the backend, such as `libevdev` and `pkg-config`. +Install rules follow the same top-level default. `LIBVIRTUALHID_INSTALL` +defaults to `ON` when configuring libvirtualhid directly and `OFF` when it is +added by another project. Consumers that want vendored install rules can opt in +with `-DLIBVIRTUALHID_INSTALL=ON`; direct builds can skip install/export rules +with `-DLIBVIRTUALHID_INSTALL=OFF`. + ## 📖 Proposed Public API Shape The exact names may change during implementation, but the API should center on diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ca21f0e..51542ff 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -95,15 +95,17 @@ else() endif() endif() -install(TARGETS ${PROJECT_NAME} - EXPORT libvirtualhid-targets - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") +if(LIBVIRTUALHID_INSTALL) + install(TARGETS ${PROJECT_NAME} + EXPORT libvirtualhid-targets + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") -install(DIRECTORY "${PROJECT_SOURCE_DIR}/src/include/" - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") + install(DIRECTORY "${PROJECT_SOURCE_DIR}/src/include/" + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") -install(EXPORT libvirtualhid-targets - NAMESPACE libvirtualhid:: - DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/libvirtualhid") + install(EXPORT libvirtualhid-targets + NAMESPACE libvirtualhid:: + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/libvirtualhid") +endif() diff --git a/src/platform/windows/driver/CMakeLists.txt b/src/platform/windows/driver/CMakeLists.txt index f1eff88..8535505 100644 --- a/src/platform/windows/driver/CMakeLists.txt +++ b/src/platform/windows/driver/CMakeLists.txt @@ -7,6 +7,7 @@ if(NOT MSVC) endif() if(LIBVIRTUALHID_ENABLE_PACKAGING + AND LIBVIRTUALHID_INSTALL AND NOT CMAKE_CONFIGURATION_TYPES AND CMAKE_BUILD_TYPE STREQUAL "Debug") message(FATAL_ERROR @@ -247,29 +248,31 @@ add_custom_target(libvirtualhid_windows_catalog COMMENT "Generating libvirtualhid driver catalog" VERBATIM) -install(TARGETS libvirtualhid_umdf - RUNTIME DESTINATION "drivers/windows" - COMPONENT driver) -install(CODE - " - set(lvh_driver_dll \"$\") - set(lvh_driver_inf \"$/libvirtualhid.inf\") - set(lvh_driver_cat \"$/libvirtualhid.cat\") - foreach(lvh_driver_file IN ITEMS \"\${lvh_driver_dll}\" \"\${lvh_driver_inf}\" \"\${lvh_driver_cat}\") - if(NOT EXISTS \"\${lvh_driver_file}\") - message(FATAL_ERROR \"Windows driver package file is missing: \${lvh_driver_file}\") - endif() - endforeach() - if(\"\${lvh_driver_dll}\" IS_NEWER_THAN \"\${lvh_driver_cat}\" - OR \"\${lvh_driver_inf}\" IS_NEWER_THAN \"\${lvh_driver_cat}\") - message(FATAL_ERROR - \"Windows driver catalog is stale; build libvirtualhid_windows_catalog \" - \"and sign libvirtualhid.cat before packaging.\") - endif() - " - COMPONENT driver) -install(FILES - "$/libvirtualhid.inf" - "$/libvirtualhid.cat" - DESTINATION "drivers/windows" - COMPONENT driver) +if(LIBVIRTUALHID_INSTALL) + install(TARGETS libvirtualhid_umdf + RUNTIME DESTINATION "drivers/windows" + COMPONENT driver) + install(CODE + " + set(lvh_driver_dll \"$\") + set(lvh_driver_inf \"$/libvirtualhid.inf\") + set(lvh_driver_cat \"$/libvirtualhid.cat\") + foreach(lvh_driver_file IN ITEMS \"\${lvh_driver_dll}\" \"\${lvh_driver_inf}\" \"\${lvh_driver_cat}\") + if(NOT EXISTS \"\${lvh_driver_file}\") + message(FATAL_ERROR \"Windows driver package file is missing: \${lvh_driver_file}\") + endif() + endforeach() + if(\"\${lvh_driver_dll}\" IS_NEWER_THAN \"\${lvh_driver_cat}\" + OR \"\${lvh_driver_inf}\" IS_NEWER_THAN \"\${lvh_driver_cat}\") + message(FATAL_ERROR + \"Windows driver catalog is stale; build libvirtualhid_windows_catalog \" + \"and sign libvirtualhid.cat before packaging.\") + endif() + " + COMPONENT driver) + install(FILES + "$/libvirtualhid.inf" + "$/libvirtualhid.cat" + DESTINATION "drivers/windows" + COMPONENT driver) +endif()