From b75b6b3405c8792e42169b7896b3b63e5e64d70f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 28 Feb 2026 23:06:31 +0000 Subject: [PATCH 1/2] Initial plan From 037c17972375d100f22aa152ea83aee8f702a530 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 28 Feb 2026 23:21:01 +0000 Subject: [PATCH 2/2] Add vcpkg support with megamimes overlay port Co-authored-by: johnpatek <31934875+johnpatek@users.noreply.github.com> --- CMakeLists.txt | 95 ++++++++++++++++++++++------------ ports/megamimes/CMakeLists.txt | 37 +++++++++++++ ports/megamimes/portfile.cmake | 22 ++++++++ ports/megamimes/usage | 4 ++ ports/megamimes/vcpkg.json | 17 ++++++ tests/CMakeLists.txt | 26 ++++++++-- vcpkg-configuration.json | 5 ++ vcpkg.json | 10 ++++ 8 files changed, 179 insertions(+), 37 deletions(-) create mode 100644 ports/megamimes/CMakeLists.txt create mode 100644 ports/megamimes/portfile.cmake create mode 100644 ports/megamimes/usage create mode 100644 ports/megamimes/vcpkg.json create mode 100644 vcpkg-configuration.json create mode 100644 vcpkg.json diff --git a/CMakeLists.txt b/CMakeLists.txt index 2b914dd..a1e97a9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,50 +30,81 @@ option(HYPERPAGE_COVER "Enable code coverage" OFF) option(HYPERPAGE_EXAMPLE "Build example" OFF) option(HYPERPAGE_DOCS "Build documentation" OFF) -include(FetchContent) -FetchContent_Declare( - MegaMimes - GIT_REPOSITORY https://github.com/kobbyowen/MegaMimes.git - GIT_TAG b839068db99cbfcff1af8df1229bd7e41701fe96 -) -FetchContent_MakeAvailable(MegaMimes) +# Check if CMAKE_TOOLCHAIN_FILE is set +if(DEFINED CMAKE_TOOLCHAIN_FILE) + message(STATUS "CMAKE_TOOLCHAIN_FILE is set to: ${CMAKE_TOOLCHAIN_FILE}") + + # Check if the path points to the vcpkg toolchain file + if("${CMAKE_TOOLCHAIN_FILE}" MATCHES ".*[/\\]scripts[/\\]buildsystems[/\\]vcpkg.cmake$") + message(STATUS "vcpkg toolchain file detected via path matching.") + set(VCPKG_TOOLCHAIN_ACTIVE TRUE) + endif() +endif() -FetchContent_Declare( - sqlite3 - GIT_REPOSITORY https://github.com/sjinks/sqlite3-cmake.git - GIT_TAG master -) -FetchContent_MakeAvailable(sqlite3) +if(VCPKG_TOOLCHAIN_ACTIVE) + find_package(megamimes CONFIG REQUIRED) + find_package(unofficial-sqlite3 CONFIG REQUIRED) + find_package(argparse CONFIG REQUIRED) + find_package(mio CONFIG REQUIRED) + + set(HYPERPAGE_EXTRA_SOURCES "") + set(HYPERPAGE_PRIVATE_INCLUDES "") + set(HYPERPAGE_SQLITE_TARGET unofficial::sqlite3::sqlite3) +else() + include(FetchContent) + FetchContent_Declare( + MegaMimes + GIT_REPOSITORY https://github.com/kobbyowen/MegaMimes.git + GIT_TAG b839068db99cbfcff1af8df1229bd7e41701fe96 + ) + FetchContent_MakeAvailable(MegaMimes) -FetchContent_Declare( - argparse - GIT_REPOSITORY https://github.com/p-ranav/argparse.git - GIT_TAG master -) -FetchContent_MakeAvailable(argparse) -FetchContent_Declare( - mio - GIT_REPOSITORY https://github.com/maxtek6/mio.git - GIT_TAG master -) -FetchContent_MakeAvailable(mio) + FetchContent_Declare( + sqlite3 + GIT_REPOSITORY https://github.com/sjinks/sqlite3-cmake.git + GIT_TAG master + ) + FetchContent_MakeAvailable(sqlite3) + + FetchContent_Declare( + argparse + GIT_REPOSITORY https://github.com/p-ranav/argparse.git + GIT_TAG master + ) + FetchContent_MakeAvailable(argparse) + + FetchContent_Declare( + mio + GIT_REPOSITORY https://github.com/maxtek6/mio.git + GIT_TAG master + ) + FetchContent_MakeAvailable(mio) + + set(HYPERPAGE_EXTRA_SOURCES ${megamimes_SOURCE_DIR}/src/MegaMimes.c) + set(HYPERPAGE_PRIVATE_INCLUDES ${megamimes_SOURCE_DIR}/src) + set(HYPERPAGE_SQLITE_TARGET SQLite::SQLite3) +endif() add_library( - hyperpage + hyperpage STATIC ${CMAKE_CURRENT_SOURCE_DIR}/hyperpage.cpp - ${megamimes_SOURCE_DIR}/src/MegaMimes.c + ${HYPERPAGE_EXTRA_SOURCES} ) target_include_directories( - hyperpage - PUBLIC + hyperpage + PUBLIC $ $ PRIVATE - ${megamimes_SOURCE_DIR}/src) + ${HYPERPAGE_PRIVATE_INCLUDES} +) -target_link_libraries(hyperpage PUBLIC SQLite::SQLite3) +target_link_libraries(hyperpage PUBLIC ${HYPERPAGE_SQLITE_TARGET}) +if(VCPKG_TOOLCHAIN_ACTIVE) + target_link_libraries(hyperpage PUBLIC megamimes::megamimes) +endif() set_target_properties(hyperpage PROPERTIES PUBLIC_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/hyperpage.hpp" @@ -81,7 +112,7 @@ set_target_properties(hyperpage PROPERTIES add_executable(hyperpack ${CMAKE_CURRENT_SOURCE_DIR}/hyperpack.cpp) target_include_directories(hyperpack PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) -target_link_libraries(hyperpack PRIVATE argparse hyperpage mio::mio) +target_link_libraries(hyperpack PRIVATE argparse::argparse hyperpage mio::mio) # CMake function for creating hyperpack archives diff --git a/ports/megamimes/CMakeLists.txt b/ports/megamimes/CMakeLists.txt new file mode 100644 index 0000000..f81f8bc --- /dev/null +++ b/ports/megamimes/CMakeLists.txt @@ -0,0 +1,37 @@ +cmake_minimum_required(VERSION 3.15) +project(megamimes VERSION 1.0.0 LANGUAGES C) + +include(GNUInstallDirs) +include(CMakePackageConfigHelpers) + +add_library(megamimes STATIC src/MegaMimes.c) +add_library(megamimes::megamimes ALIAS megamimes) + +target_include_directories(megamimes + PUBLIC + $ + $ +) + +install(TARGETS megamimes + EXPORT megamimes-targets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} +) + +install(FILES src/MegaMimes.h + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} +) + +install(EXPORT megamimes-targets + FILE megamimes-targets.cmake + NAMESPACE megamimes:: + DESTINATION share/cmake/megamimes +) + +file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/megamimes-config.cmake" + "include(\"\${CMAKE_CURRENT_LIST_DIR}/megamimes-targets.cmake\")\n" +) + +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/megamimes-config.cmake" + DESTINATION share/cmake/megamimes +) diff --git a/ports/megamimes/portfile.cmake b/ports/megamimes/portfile.cmake new file mode 100644 index 0000000..c3a764f --- /dev/null +++ b/ports/megamimes/portfile.cmake @@ -0,0 +1,22 @@ +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO kobbyowen/MegaMimes + REF b839068db99cbfcff1af8df1229bd7e41701fe96 + SHA512 1581ddb6e85929ce7ec1e97578ad77fadd3f6ac82a1e4a379772dfa90b048a9c508059cc63525feef73a7a08e8553789830ef48e28ebc0e6a1123f1b0fb69889 + HEAD_REF master +) + +# MegaMimes does not include a CMakeLists.txt, so provide one +file(COPY "${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt" DESTINATION "${SOURCE_PATH}") + +vcpkg_cmake_configure( + SOURCE_PATH "${SOURCE_PATH}" +) + +vcpkg_cmake_install() + +vcpkg_cmake_config_fixup(CONFIG_PATH share/cmake/megamimes) + +file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include") + +vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE") diff --git a/ports/megamimes/usage b/ports/megamimes/usage new file mode 100644 index 0000000..a028d94 --- /dev/null +++ b/ports/megamimes/usage @@ -0,0 +1,4 @@ +The package megamimes provides CMake targets: + + find_package(megamimes CONFIG REQUIRED) + target_link_libraries(main PRIVATE megamimes::megamimes) diff --git a/ports/megamimes/vcpkg.json b/ports/megamimes/vcpkg.json new file mode 100644 index 0000000..8fece5c --- /dev/null +++ b/ports/megamimes/vcpkg.json @@ -0,0 +1,17 @@ +{ + "name": "megamimes", + "version-date": "2021-12-01", + "description": "A simple C library to get MIME type information about a file", + "homepage": "https://github.com/kobbyowen/MegaMimes", + "license": "MIT", + "dependencies": [ + { + "name": "vcpkg-cmake", + "host": true + }, + { + "name": "vcpkg-cmake-config", + "host": true + } + ] +} diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index d6f1b38..e745318 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -18,6 +18,8 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. +include(FetchContent) + FetchContent_Declare( Maxtest GIT_REPOSITORY https://github.com/maxtek6/maxtest.git @@ -25,20 +27,30 @@ FetchContent_Declare( ) FetchContent_MakeAvailable(Maxtest) +if(VCPKG_TOOLCHAIN_ACTIVE) + set(HYPERTEST_EXTRA_SOURCES "") + set(HYPERTEST_EXTRA_INCLUDES "") + set(HYPERTEST_SQLITE_TARGET unofficial::sqlite3::sqlite3) +else() + set(HYPERTEST_EXTRA_SOURCES ${megamimes_SOURCE_DIR}/src/MegaMimes.c) + set(HYPERTEST_EXTRA_INCLUDES ${megamimes_SOURCE_DIR}/src) + set(HYPERTEST_SQLITE_TARGET SQLite::SQLite3) +endif() + maxtest_add_executable( unit ${CMAKE_CURRENT_SOURCE_DIR}/unit.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../hyperpage.cpp - ${megamimes_SOURCE_DIR}/src/MegaMimes.c) + ${HYPERTEST_EXTRA_SOURCES}) -target_include_directories(unit PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../ ${megamimes_SOURCE_DIR}/src) +target_include_directories(unit PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../ ${HYPERTEST_EXTRA_INCLUDES}) if(HYPERPAGE_COVER) if(WIN32) message("skipping code coverage for windows") - target_link_libraries(unit PRIVATE SQLite::SQLite3) + target_link_libraries(unit PRIVATE ${HYPERTEST_SQLITE_TARGET}) else() target_compile_options(unit PRIVATE -fprofile-arcs -ftest-coverage -g -O0) - target_link_libraries(unit PRIVATE SQLite::SQLite3 gcov "--coverage") + target_link_libraries(unit PRIVATE ${HYPERTEST_SQLITE_TARGET} gcov "--coverage") add_custom_target( cover DEPENDS unit) @@ -47,7 +59,11 @@ if(HYPERPAGE_COVER) COMMAND gcovr -r ${CMAKE_CURRENT_SOURCE_DIR}/.. -e ${CMAKE_CURRENT_SOURCE_DIR}) endif() else() - target_link_libraries(unit PRIVATE SQLite::SQLite3) + target_link_libraries(unit PRIVATE ${HYPERTEST_SQLITE_TARGET}) +endif() + +if(VCPKG_TOOLCHAIN_ACTIVE) + target_link_libraries(unit PRIVATE megamimes::megamimes) endif() maxtest_add_test(unit store_load $) diff --git a/vcpkg-configuration.json b/vcpkg-configuration.json new file mode 100644 index 0000000..7699f3f --- /dev/null +++ b/vcpkg-configuration.json @@ -0,0 +1,5 @@ +{ + "overlay-ports": [ + "./ports" + ] +} diff --git a/vcpkg.json b/vcpkg.json new file mode 100644 index 0000000..9d718e0 --- /dev/null +++ b/vcpkg.json @@ -0,0 +1,10 @@ +{ + "name": "hyperpage", + "version": "1.0.0", + "dependencies": [ + "argparse", + "megamimes", + "mio", + "sqlite3" + ] +}