Skip to content
Merged
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
95 changes: 63 additions & 32 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -30,58 +30,89 @@ 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
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:include>
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"
)

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
Expand Down
37 changes: 37 additions & 0 deletions ports/megamimes/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)

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
)
22 changes: 22 additions & 0 deletions ports/megamimes/portfile.cmake
Original file line number Diff line number Diff line change
@@ -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")
4 changes: 4 additions & 0 deletions ports/megamimes/usage
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
The package megamimes provides CMake targets:

find_package(megamimes CONFIG REQUIRED)
target_link_libraries(main PRIVATE megamimes::megamimes)
17 changes: 17 additions & 0 deletions ports/megamimes/vcpkg.json
Original file line number Diff line number Diff line change
@@ -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
}
]
}
26 changes: 21 additions & 5 deletions tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,27 +18,39 @@
# 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
GIT_TAG master
)
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)
Expand All @@ -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 $<TARGET_FILE_DIR:unit>)
Expand Down
5 changes: 5 additions & 0 deletions vcpkg-configuration.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"overlay-ports": [
"./ports"
]
}
10 changes: 10 additions & 0 deletions vcpkg.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"name": "hyperpage",
"version": "1.0.0",
"dependencies": [
"argparse",
"megamimes",
"mio",
"sqlite3"
]
}