Skip to content

Commit

Permalink
vcpkgize
Browse files Browse the repository at this point in the history
  • Loading branch information
igagis committed Nov 26, 2024
1 parent 3cc6c64 commit 0e68fd7
Show file tree
Hide file tree
Showing 9 changed files with 225 additions and 0 deletions.
52 changes: 52 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -410,6 +410,58 @@ jobs:
filename: '.\nuget\*.nupkg'
api-key: ${{ secrets.NUGET_DOT_ORG_API_KEY }}
if: startsWith(github.ref, 'refs/tags/')
##### vcpkg #####
vcpkg:
strategy:
fail-fast: false
matrix:
include:
- {os: debian, codename: bookworm, image_owner: }
# - {os: debian, codename: bookworm, image_owner: i386/, labels: [i386,docker]}
# - {os: debian, codename: bookworm, image_owner: , labels: [arm32,docker]}
# - {os: debian, codename: bookworm, image_owner: , labels: [arm64,docker]}
runs-on: ${{ (matrix.labels == '' && 'ubuntu-latest') || matrix.labels }}
container: ${{ matrix.image_owner }}${{ matrix.os }}:${{ matrix.codename }}
name: vcpkg - linux | ${{ matrix.labels[0] }}
steps:
- name: add cppfw deb repo
uses: myci-actions/add-deb-repo@main
with:
repo: deb https://gagis.hopto.org/repo/cppfw/${{ matrix.os }} ${{ matrix.codename }} main
repo-name: cppfw
keys-asc: https://gagis.hopto.org/repo/cppfw/pubkey.gpg
install: myci cmake git curl zip unzip tar nodejs pkg-config
- name: git clone
uses: myci-actions/checkout@main
- name: install vcpkg
run: |
git clone https://github.com/microsoft/vcpkg.git vcpkg-installation
(cd vcpkg-installation; ./bootstrap-vcpkg.sh)
- name: set VCPKG_ROOT
uses: myci-actions/export-env-var@main
with: {name: VCPKG_ROOT, value: "$(pwd)/vcpkg-installation"}
- name: add VCPKG_ROOT to PATH
uses: myci-actions/export-env-var@main
with: {name: PATH, value: "$PATH:$VCPKG_ROOT"}
- name: prepare vcpkg port
run: |
myci-vcpkg-prepare.sh --git-ref ${{ github.sha }}
- name: test vcpkg port
run: |
cd vcpkg/test
cmake .
make
./test
- name: upload vcpkg logs to artifacts
if: always() # even if previous steps fail, this one needs to be run
uses: actions/upload-artifact@v4
with:
name: vcpkg_logs
path: vcpkg-installation/buildtrees/${{ env.PACKAGE_NAME }}/
- name: deploy vcpkg port
run: |
myci-deploy-vcpkg.sh --repo cppfw/vcpkg-repo --port-dir vcpkg/overlay/${PACKAGE_NAME}
if: startsWith(github.ref, 'refs/tags/')
##### conan - linux #####
conan-linux:
strategy:
Expand Down
71 changes: 71 additions & 0 deletions cmake/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
cmake_minimum_required(VERSION 3.10)

include(GNUInstallDirs)

set(name rasterimage)

project(${name})

find_package(utki CONFIG REQUIRED)
find_package(papki CONFIG REQUIRED)
find_package(ZLIB REQUIRED)
find_package(r4 CONFIG REQUIRED)
find_package(PNG REQUIRED)
find_package(JPEG REQUIRED)

file(GLOB_RECURSE srcs "../src/${name}/*.cpp")

add_library(
${name}
STATIC
${srcs}
)

target_compile_features(${name} PUBLIC cxx_std_17)
set_target_properties(${name} PROPERTIES CXX_STANDARD_REQUIRED ON)
set_target_properties(${name} PROPERTIES CXX_EXTENSIONS OFF)

target_include_directories(
${name}
INTERFACE
$<BUILD_INTERFACE:>
$<INSTALL_INTERFACE:include>
)

target_link_libraries(
${name}
PUBLIC
utki::utki
papki::papki
PNG::PNG
JPEG::JPEG
)

# install library header files preserving directory hierarchy
install(
DIRECTORY
"${CMAKE_CURRENT_SOURCE_DIR}/../src/${name}"
DESTINATION
"${CMAKE_INSTALL_INCLUDEDIR}"
FILES_MATCHING PATTERN
"*.hpp"
)

install(
TARGETS
${name}
EXPORT # generate cmake configs
${name}-config
)

# install cmake configs
install(
EXPORT
${name}-config
FILE
${name}-config.cmake
DESTINATION
${CMAKE_INSTALL_DATAROOTDIR}/${name}
NAMESPACE
${name}::
)
26 changes: 26 additions & 0 deletions vcpkg/portfile.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
vcpkg_check_linkage(ONLY_STATIC_LIBRARY)

vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO cppfw/${PORT}
REF $(git_ref)
SHA512 $(archive_hash)
HEAD_REF main
)

vcpkg_cmake_configure(
SOURCE_PATH "${SOURCE_PATH}/cmake"
)

vcpkg_cmake_install()

vcpkg_cmake_config_fixup()

# Delete the include directory from the debug installation to prevent overlap.
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include")

# Install the LICENSE file to the package's share directory and rename it to copyright.
file(INSTALL "${SOURCE_PATH}/LICENSE" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright)

# Copy the usage instruction file to the package's share directory.
configure_file("${CMAKE_CURRENT_LIST_DIR}/usage" "${CURRENT_PACKAGES_DIR}/share/${PORT}/usage" COPYONLY)
17 changes: 17 additions & 0 deletions vcpkg/test/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
cmake_minimum_required(VERSION 3.10)

set(CMAKE_TOOLCHAIN_FILE $ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake)

project(test)

find_package(utki CONFIG REQUIRED)
find_package(papki CONFIG REQUIRED)
find_package(ZLIB REQUIRED)
find_package(PNG REQUIRED)
find_package(JPEG REQUIRED)
find_package(r4 CONFIG REQUIRED)
find_package(rasterimage CONFIG REQUIRED)

add_executable(test main.cpp)

target_link_libraries(test PRIVATE rasterimage::rasterimage)
9 changes: 9 additions & 0 deletions vcpkg/test/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#include <rasterimage/image_variant.hpp>

int main(int argc, const char** argv){
rasterimage::image_variant im(10, 20);

std::cout << "im.dims() = " << im.dims() << std::endl;

return 0;
}
19 changes: 19 additions & 0 deletions vcpkg/test/vcpkg-configuration.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"default-registry": {
"kind": "git",
"baseline": "5e5d0e1cd7785623065e77eff011afdeec1a3574",
"repository": "https://github.com/microsoft/vcpkg"
},
"registries": [
{
"kind": "git",
"repository": "https://github.com/cppfw/vcpkg-repo/",
"baseline": "",
"reference": "main",
"packages": [ "utki", "papki", "r4" ]
}
],
"overlay-ports": [
"../overlay"
]
}
5 changes: 5 additions & 0 deletions vcpkg/test/vcpkg.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"dependencies": [
"rasterimage"
]
}
4 changes: 4 additions & 0 deletions vcpkg/usage
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
rasterimage provides CMake targets:

find_package(rasterimage CONFIG REQUIRED)
target_link_libraries(main PRIVATE rasterimage::rasterimage)
22 changes: 22 additions & 0 deletions vcpkg/vcpkg.json.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"name": "rasterimage",
"version": "$(version)",
"homepage": "https://github.com/cppfw/rasterimage",
"description": "raster image library in C++",
"license": "MIT",
"dependencies": [
{
"name" : "vcpkg-cmake",
"host" : true
},
{
"name" : "vcpkg-cmake-config",
"host" : true
},
"utki",
"papki",
"r4",
"libjpeg-turbo",
"libpng"
]
}

0 comments on commit 0e68fd7

Please sign in to comment.