cmake_minimum_required(VERSION 3.15) project(libnextcloud VERSION 0.1.0 LANGUAGES CXX) # C++17 required set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) # Options option(BUILD_SHARED_LIBS "Build shared libraries" OFF) option(BUILD_TESTING "Build tests" ON) option(BUILD_EXAMPLES "Build examples" OFF) # Library sources (currently empty, will be populated as we implement components) set(NEXTCLOUD_SOURCES # src/webdav_client.cpp # Will be added in future # src/auth.cpp # Will be added in future # src/upload_manager.cpp # Will be added in future # src/folder_manager.cpp # Will be added in future # src/config.cpp # Will be added in future ) # Create library target # For now, it's header-only (version.hpp and types.hpp) # We'll add sources when we implement components add_library(nextcloud INTERFACE) # Include directories target_include_directories(nextcloud INTERFACE $ $ ) # Require C++17 for consumers target_compile_features(nextcloud INTERFACE cxx_std_17) # Dependencies (will be uncommented as we add implementation) # find_package(CURL REQUIRED) # find_package(MbedTLS REQUIRED) # find_package(tinyxml2 REQUIRED) # Link libraries (commented out until we have actual implementation) # target_link_libraries(nextcloud # PUBLIC # CURL::libcurl # MbedTLS::mbedtls # tinyxml2::tinyxml2 # ) # Compiler warnings if(MSVC) target_compile_options(nextcloud INTERFACE /W4) else() target_compile_options(nextcloud INTERFACE -Wall -Wextra -Wpedantic) endif() # Testing if(BUILD_TESTING) enable_testing() add_subdirectory(tests) endif() # Examples if(BUILD_EXAMPLES) add_subdirectory(examples) endif() # Install rules install(TARGETS nextcloud EXPORT nextcloudTargets LIBRARY DESTINATION lib ARCHIVE DESTINATION lib RUNTIME DESTINATION bin INCLUDES DESTINATION include ) install(DIRECTORY include/ DESTINATION include FILES_MATCHING PATTERN "*.hpp" ) # Generate and install CMake config files include(CMakePackageConfigHelpers) write_basic_package_version_file( "${CMAKE_CURRENT_BINARY_DIR}/nextcloudConfigVersion.cmake" VERSION ${PROJECT_VERSION} COMPATIBILITY AnyNewerVersion ) configure_package_config_file( "${CMAKE_CURRENT_SOURCE_DIR}/nextcloudConfig.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/nextcloudConfig.cmake" INSTALL_DESTINATION lib/cmake/nextcloud ) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/nextcloudConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/nextcloudConfigVersion.cmake" DESTINATION lib/cmake/nextcloud ) install(EXPORT nextcloudTargets FILE nextcloudTargets.cmake NAMESPACE nextcloud:: DESTINATION lib/cmake/nextcloud ) # pkg-config file configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/libnextcloud.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/libnextcloud.pc" @ONLY ) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libnextcloud.pc" DESTINATION lib/pkgconfig ) # Print configuration summary message(STATUS "") message(STATUS "libnextcloud Configuration Summary:") message(STATUS " Version: ${PROJECT_VERSION}") message(STATUS " Build type: ${CMAKE_BUILD_TYPE}") message(STATUS " C++ standard: C++${CMAKE_CXX_STANDARD}") message(STATUS " Shared libraries: ${BUILD_SHARED_LIBS}") message(STATUS " Build tests: ${BUILD_TESTING}") message(STATUS " Build examples: ${BUILD_EXAMPLES}") message(STATUS " Install prefix: ${CMAKE_INSTALL_PREFIX}") message(STATUS "")