mirror of https://github.com/BOINC/boinc.git
[vcpkg][linux] Add custom gdk-pixbuf and librsvg vcpkg ports
When BOINC for Linux is built with vcpkg, and links all the dependencies statically, gdk-pixbuf cannot load dynamically loaded modules (like SVG loader) during runtime. To fix thism we need to modify gdk-pixbuf in a way that it uses librsvg as a built-in format. However, librsvg internally requires gdk-pixbuf during build stage, that makes a circular dependency. To avoid this, we have to include necessary librsvg symbols into boincmgr binary manually and do some dummy calls to them to force linker to include them into the final binary. This fixes: #5563. Signed-off-by: Vitalii Koshura <lestat.de.lionkur@gmail.com>
This commit is contained in:
parent
f0fed141d0
commit
a77d43c260
|
@ -16,6 +16,12 @@
|
|||
"name": "wxwidgets",
|
||||
"default-features": false
|
||||
},
|
||||
"freetype"
|
||||
"freetype",
|
||||
"librsvg",
|
||||
{
|
||||
"name": "gdk-pixbuf",
|
||||
"features": ["jpeg", "png", "svg", "tiff", "others"],
|
||||
"default-features": false
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -0,0 +1,75 @@
|
|||
diff --git a/gdk-pixbuf/gdk-pixbuf-io.c b/gdk-pixbuf/gdk-pixbuf-io.c
|
||||
index e1df5900f..d7018da6e 100644
|
||||
--- a/gdk-pixbuf/gdk-pixbuf-io.c
|
||||
+++ b/gdk-pixbuf/gdk-pixbuf-io.c
|
||||
@@ -592,7 +592,10 @@ gdk_pixbuf_init_modules (const char *path,
|
||||
g_free (filename);
|
||||
return ret;
|
||||
}
|
||||
-
|
||||
+#ifdef INCLUDE_svg
|
||||
+extern void _gdk_pixbuf__svg_fill_info (GdkPixbufFormat *info) __attribute__((weak));
|
||||
+extern void _gdk_pixbuf__svg_fill_vtable (GdkPixbufModule *module) __attribute__((weak));
|
||||
+#endif
|
||||
static void
|
||||
gdk_pixbuf_io_init_builtin (void)
|
||||
{
|
||||
@@ -659,6 +662,10 @@ gdk_pixbuf_io_init_builtin (void)
|
||||
/* Except the gdip-png loader which normally isn't built at all even */
|
||||
load_one_builtin_module (png);
|
||||
#endif
|
||||
+#ifdef INCLUDE_svg
|
||||
+ if (_gdk_pixbuf__svg_fill_info && _gdk_pixbuf__svg_fill_vtable)
|
||||
+ load_one_builtin_module (svg);
|
||||
+#endif
|
||||
|
||||
#undef load_one_builtin_module
|
||||
}
|
||||
@@ -777,6 +784,15 @@ gdk_pixbuf_load_module_unlocked (GdkPixbufModule *image_module,
|
||||
#ifdef INCLUDE_qtif
|
||||
try_module (qtif,qtif);
|
||||
#endif
|
||||
+#ifdef INCLUDE_svg
|
||||
+if (fill_info == NULL &&
|
||||
+ strcmp (image_module->module_name, "svg") == 0) {
|
||||
+ if (_gdk_pixbuf__svg_fill_info && _gdk_pixbuf__svg_fill_vtable) {
|
||||
+ fill_info = _gdk_pixbuf__svg_fill_info;
|
||||
+ fill_vtable = _gdk_pixbuf__svg_fill_vtable;
|
||||
+ }
|
||||
+ }
|
||||
+#endif
|
||||
|
||||
#undef try_module
|
||||
|
||||
diff --git a/meson.build b/meson.build
|
||||
index 3eb3fcc15..b11331239 100644
|
||||
--- a/meson.build
|
||||
+++ b/meson.build
|
||||
@@ -280,6 +280,12 @@ if not gif_opt.disabled()
|
||||
enabled_loaders += 'gif'
|
||||
endif
|
||||
|
||||
+svg_opt = get_option('svg')
|
||||
+if not svg_opt.disabled()
|
||||
+ enabled_loaders += 'svg'
|
||||
+ add_project_arguments([ '-DINCLUDE_svg' ], language: 'c')
|
||||
+endif
|
||||
+
|
||||
others_opt = get_option('others')
|
||||
if not others_opt.disabled()
|
||||
# Keep sorted alphabetically
|
||||
diff --git a/meson_options.txt b/meson_options.txt
|
||||
index 74830154a..6961c9530 100644
|
||||
--- a/meson_options.txt
|
||||
+++ b/meson_options.txt
|
||||
@@ -18,6 +18,10 @@ option('others',
|
||||
description: 'Enable other loaders, which are weakly maintained',
|
||||
type: 'feature',
|
||||
value: 'disabled')
|
||||
+option('svg',
|
||||
+ description: 'Enable SVG loader',
|
||||
+ type: 'feature',
|
||||
+ value: 'disabled')
|
||||
option('builtin_loaders',
|
||||
description: 'Comma-separated list of loaders to build into gdk-pixbuf',
|
||||
type: 'array',
|
|
@ -0,0 +1,12 @@
|
|||
diff --git a/gdk-pixbuf/meson.build b/gdk-pixbuf/meson.build
|
||||
index d7aa127b48..c313dc272d 100644
|
||||
--- a/gdk-pixbuf/meson.build
|
||||
+++ b/gdk-pixbuf/meson.build
|
||||
@@ -214,6 +214,7 @@ gdkpixbuf = library('gdk_pixbuf-2.0',
|
||||
dependencies: [
|
||||
gdk_pixbuf_deps,
|
||||
included_loaders_deps,
|
||||
+ loaders_deps
|
||||
],
|
||||
install: true)
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
--- a/meson.build
|
||||
+++ b/meson.build
|
||||
@@ -90,8 +90,14 @@
|
||||
gdk_pixbuf_conf.set('HAVE_ROUND', 1)
|
||||
endif
|
||||
|
||||
-if cc.has_function('lrint', dependencies: mathlib_dep)
|
||||
- gdk_pixbuf_conf.set('HAVE_LRINT', 1)
|
||||
+if cc.get_id() == 'msvc'
|
||||
+ if cc.has_function('lrint', dependencies: mathlib_dep, args: '-Oi-')
|
||||
+ gdk_pixbuf_conf.set('HAVE_LRINT', 1)
|
||||
+ endif
|
||||
+else
|
||||
+ if cc.has_function('lrint', dependencies: mathlib_dep)
|
||||
+ gdk_pixbuf_conf.set('HAVE_LRINT', 1)
|
||||
+ endif
|
||||
endif
|
||||
|
||||
intl_dep = cc.find_library('intl', required: false)
|
|
@ -0,0 +1,20 @@
|
|||
diff --git a/gdk-pixbuf/meson.build b/gdk-pixbuf/meson.build
|
||||
index 54ff9dd..27f8512 100644
|
||||
--- a/gdk-pixbuf/meson.build
|
||||
+++ b/gdk-pixbuf/meson.build
|
||||
@@ -348,7 +348,14 @@ foreach bin: gdkpixbuf_bin
|
||||
set_variable(bin_name.underscorify(), bin)
|
||||
endforeach
|
||||
|
||||
-if not meson.is_cross_build()
|
||||
+if dynamic_loaders.length() == 0
|
||||
+ # skip tool invocation
|
||||
+ cmake = find_program('cmake', required : true)
|
||||
+ loaders_cache = custom_target('loaders.cache', output: 'loaders.cache', capture: true,
|
||||
+ command: [ cmake, '-E', 'echo', '# No dynamic loaders enabled at build time' ],
|
||||
+ build_by_default: true)
|
||||
+ loaders_dep = declare_dependency(sources: [ loaders_cache ])
|
||||
+elif not meson.is_cross_build()
|
||||
# The 'loaders.cache' used for testing, so we don't accidentally
|
||||
# load the installed cache; we always build it by default
|
||||
loaders_cache = custom_target('loaders.cache',
|
|
@ -0,0 +1,105 @@
|
|||
vcpkg_from_gitlab(
|
||||
GITLAB_URL https://gitlab.gnome.org/
|
||||
OUT_SOURCE_PATH SOURCE_PATH
|
||||
REPO GNOME/gdk-pixbuf
|
||||
REF "${VERSION}"
|
||||
SHA512 f95c92974ed6efac9845790ef5c4ed74dd6e28b182ea3732013c46b016166e92f8bc10c1994358d79ff53e988c615c43cb1a2130c6ef531ef9d84c2fdcc87e52
|
||||
HEAD_REF master
|
||||
PATCHES
|
||||
fix_build_error_windows.patch
|
||||
loaders-cache.patch
|
||||
use-libtiff-4-pkgconfig.patch
|
||||
fix-static-deps.patch
|
||||
add_optional_svg_support.patch
|
||||
)
|
||||
|
||||
if("introspection" IN_LIST FEATURES)
|
||||
list(APPEND OPTIONS_DEBUG -Dintrospection=disabled)
|
||||
list(APPEND OPTIONS_RELEASE -Dintrospection=enabled)
|
||||
else()
|
||||
list(APPEND OPTIONS -Dintrospection=disabled)
|
||||
endif()
|
||||
|
||||
if("png" IN_LIST FEATURES)
|
||||
list(APPEND OPTIONS -Dpng=enabled)
|
||||
else()
|
||||
list(APPEND OPTIONS -Dpng=disabled)
|
||||
endif()
|
||||
|
||||
if("tiff" IN_LIST FEATURES)
|
||||
list(APPEND OPTIONS -Dtiff=enabled)
|
||||
else()
|
||||
list(APPEND OPTIONS -Dtiff=disabled)
|
||||
endif()
|
||||
|
||||
if("jpeg" IN_LIST FEATURES)
|
||||
list(APPEND OPTIONS -Djpeg=enabled)
|
||||
else()
|
||||
list(APPEND OPTIONS -Djpeg=disabled)
|
||||
endif()
|
||||
|
||||
if("others" IN_LIST FEATURES)
|
||||
list(APPEND OPTIONS -Dothers=enabled)
|
||||
else()
|
||||
list(APPEND OPTIONS -Dothers=disabled)
|
||||
endif()
|
||||
|
||||
if("svg" IN_LIST FEATURES)
|
||||
list(APPEND OPTIONS -Dsvg=enabled)
|
||||
else()
|
||||
list(APPEND OPTIONS -Dsvg=disabled)
|
||||
endif()
|
||||
|
||||
if(CMAKE_HOST_WIN32 AND VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
|
||||
set(GIR_TOOL_DIR ${CURRENT_INSTALLED_DIR})
|
||||
else()
|
||||
set(GIR_TOOL_DIR ${CURRENT_HOST_INSTALLED_DIR})
|
||||
endif()
|
||||
|
||||
if(VCPKG_TARGET_IS_WINDOWS)
|
||||
#list(APPEND OPTIONS -Dnative_windows_loaders=true) # Use Windows system components to handle BMP, EMF, GIF, ICO, JPEG, TIFF and WMF images, overriding jpeg and tiff. To build this into gdk-pixbuf, pass in windows" with the other loaders to build in or use "all" with the builtin_loaders option
|
||||
endif()
|
||||
vcpkg_configure_meson(
|
||||
SOURCE_PATH "${SOURCE_PATH}"
|
||||
OPTIONS
|
||||
-Dman=false # Whether to generate man pages (requires xlstproc)
|
||||
-Dgtk_doc=false # Whether to generate the API reference (requires GTK-Doc)
|
||||
-Ddocs=false
|
||||
-Drelocatable=true # Whether to enable application bundle relocation support
|
||||
-Dtests=false
|
||||
-Dinstalled_tests=false
|
||||
-Dgio_sniffing=false # Perform file type detection using GIO (Unused on MacOS and Windows)
|
||||
-Dbuiltin_loaders=all # since it is unclear where loadable plugins should be located;
|
||||
# Comma-separated list of loaders to build into gdk-pixbuf, or "none", or "all" to build all buildable loaders into gdk-pixbuf
|
||||
${OPTIONS}
|
||||
OPTIONS_DEBUG
|
||||
${OPTIONS_DEBUG}
|
||||
OPTIONS_RELEASE
|
||||
${OPTIONS_RELEASE}
|
||||
ADDITIONAL_BINARIES
|
||||
glib-compile-resources='${CURRENT_HOST_INSTALLED_DIR}/tools/glib/glib-compile-resources'
|
||||
glib-genmarshal='${CURRENT_HOST_INSTALLED_DIR}/tools/glib/glib-genmarshal'
|
||||
glib-mkenums='${CURRENT_HOST_INSTALLED_DIR}/tools/glib/glib-mkenums'
|
||||
g-ir-compiler='${CURRENT_HOST_INSTALLED_DIR}/tools/gobject-introspection/g-ir-compiler${VCPKG_HOST_EXECUTABLE_SUFFIX}'
|
||||
g-ir-scanner='${GIR_TOOL_DIR}/tools/gobject-introspection/g-ir-scanner'
|
||||
)
|
||||
vcpkg_install_meson(ADD_BIN_TO_PATH)
|
||||
|
||||
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/lib/pkgconfig/gdk-pixbuf-2.0.pc" [[${bindir}]] "\${prefix}/tools/${PORT}")
|
||||
if(NOT VCPKG_BUILD_TYPE)
|
||||
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/gdk-pixbuf-2.0.pc" [[${bindir}]] "\${prefix}/../tools/${PORT}")
|
||||
endif()
|
||||
vcpkg_fixup_pkgconfig()
|
||||
|
||||
set(TOOL_NAMES gdk-pixbuf-csource gdk-pixbuf-pixdata gdk-pixbuf-query-loaders)
|
||||
# gdk-pixbuf-thumbnailer is not compiled for cross-compiling
|
||||
# vcpkg-meson cross-build configuration differs from VCPKG_CROSSCOMPILING
|
||||
if(EXISTS "${CURRENT_PACKAGES_DIR}/bin/gdk-pixbuf-thumbnailer${VCPKG_TARGET_EXECUTABLE_SUFFIX}")
|
||||
list(APPEND TOOL_NAMES gdk-pixbuf-thumbnailer)
|
||||
endif()
|
||||
vcpkg_copy_pdbs()
|
||||
vcpkg_copy_tools(TOOL_NAMES ${TOOL_NAMES} AUTO_CLEAN)
|
||||
|
||||
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/share")
|
||||
|
||||
vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/COPYING")
|
|
@ -0,0 +1,13 @@
|
|||
diff --git a/meson.build b/meson.build
|
||||
index b5280f3..4927ed5 100644
|
||||
--- a/meson.build
|
||||
+++ b/meson.build
|
||||
@@ -333,7 +333,7 @@ tiff_opt = get_option('tiff')
|
||||
if not tiff_opt.disabled() and not native_windows_loaders
|
||||
# We currently don't have a fallback subproject, but this handles error
|
||||
# reporting if tiff_opt is enabled.
|
||||
- tiff_dep = dependency(is_msvc_like ? 'tiff' : 'libtiff-4', required: tiff_opt)
|
||||
+ tiff_dep = dependency(false ? 'tiff' : 'libtiff-4', required: tiff_opt)
|
||||
|
||||
if tiff_dep.found()
|
||||
enabled_loaders += 'tiff'
|
|
@ -0,0 +1,68 @@
|
|||
{
|
||||
"name": "gdk-pixbuf",
|
||||
"version": "2.42.12",
|
||||
"description": "Image loading library.",
|
||||
"homepage": "https://gitlab.gnome.org/GNOME/gdk-pixbuf",
|
||||
"license": "LGPL-2.1-or-later",
|
||||
"supports": "!xbox",
|
||||
"dependencies": [
|
||||
{
|
||||
"name": "gettext",
|
||||
"host": true,
|
||||
"features": [
|
||||
"tools"
|
||||
]
|
||||
},
|
||||
"gettext-libintl",
|
||||
"glib",
|
||||
{
|
||||
"name": "glib",
|
||||
"host": true
|
||||
},
|
||||
{
|
||||
"name": "vcpkg-tool-meson",
|
||||
"host": true
|
||||
}
|
||||
],
|
||||
"default-features": [
|
||||
"jpeg",
|
||||
"png",
|
||||
"tiff"
|
||||
],
|
||||
"features": {
|
||||
"introspection": {
|
||||
"description": "build with introspection",
|
||||
"dependencies": [
|
||||
"gobject-introspection"
|
||||
]
|
||||
},
|
||||
"jpeg": {
|
||||
"description": "Enable JPEG loader (requires libjpeg)",
|
||||
"dependencies": [
|
||||
"libjpeg-turbo"
|
||||
]
|
||||
},
|
||||
"others": {
|
||||
"description": "Enable other loaders, which are weakly maintained (ani, bmp, icns, ico, pnm, qtif, tga, xbm, xpm)"
|
||||
},
|
||||
"png": {
|
||||
"description": "Enable PNG loader (requires libpng)",
|
||||
"dependencies": [
|
||||
"libpng"
|
||||
]
|
||||
},
|
||||
"svg": {
|
||||
"description": "Enable SVG loader",
|
||||
"supports": "!windows"
|
||||
},
|
||||
"tiff": {
|
||||
"description": "Enable TIFF loader (requires libtiff)",
|
||||
"dependencies": [
|
||||
{
|
||||
"name": "tiff",
|
||||
"default-features": false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,214 @@
|
|||
cmake_minimum_required(VERSION 3.11)
|
||||
project(librsvg C)
|
||||
|
||||
find_package(PkgConfig REQUIRED)
|
||||
pkg_check_modules(LIBCROCO libcroco-0.6 IMPORTED_TARGET)
|
||||
pkg_check_modules(GLIB2 glib-2.0 gobject-2.0 gmodule-2.0 gio-2.0 IMPORTED_TARGET)
|
||||
pkg_check_modules(CAIRO cairo IMPORTED_TARGET)
|
||||
pkg_check_modules(GDK_PIXBUF gdk-pixbuf-2.0 IMPORTED_TARGET)
|
||||
pkg_check_modules(PANGO pango pangocairo IMPORTED_TARGET)
|
||||
find_package(LibXml2 REQUIRED)
|
||||
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||
else()
|
||||
pkg_check_modules(PANGO2 pangoft2 pangofc IMPORTED_TARGET)
|
||||
set(PANGO_FT2_LIB PkgConfig::PANGO2)
|
||||
endif()
|
||||
|
||||
set(RSVG_API_MAJOR_VERSION 2)
|
||||
set(RSVG_API_VERSION "2.0")
|
||||
Set(VERSION "2.40.20")
|
||||
set(LIBRSVG_TARGET "rsvg-${RSVG_API_MAJOR_VERSION}")
|
||||
|
||||
Set(prefix "${CMAKE_INSTALL_PREFIX}")
|
||||
Set(exec_prefix "\${prefix}")
|
||||
Set(libdir "\${prefix}/lib")
|
||||
Set(includedir "\${prefix}/include")
|
||||
|
||||
# Public required modules (cf. headers and librsvg.pc)
|
||||
set(librsvg_pc_requires glib-2.0 gio-2.0 gdk-pixbuf-2.0 cairo)
|
||||
# Other required modules from configure.ac
|
||||
set(librsvg_pc_requires_private
|
||||
libxml-2.0
|
||||
pangocairo
|
||||
pangoft2
|
||||
cairo-png
|
||||
libcroco-0.6
|
||||
gthread-2.0
|
||||
gmodule-2.0
|
||||
gobject-2.0
|
||||
gio-unix-2.0
|
||||
fontconfig
|
||||
)
|
||||
if(WIN32)
|
||||
string(REPLACE "gio-unix" "gio-windows" librsvg_pc_requires_private "${librsvg_pc_requires_private}")
|
||||
endif()
|
||||
|
||||
find_package(PkgConfig REQUIRED)
|
||||
pkg_check_modules(LIBRSVG_LINK_PUBLIC ${librsvg_pc_requires} IMPORTED_TARGET REQUIRED)
|
||||
pkg_check_modules(LIBRSVG_LINK_PRIVATE ${librsvg_pc_requires_private} IMPORTED_TARGET REQUIRED)
|
||||
|
||||
set(LIBRSVG_SOURCES
|
||||
librsvg-features.c
|
||||
rsvg-css.c
|
||||
rsvg-css.h
|
||||
rsvg-compat.h
|
||||
rsvg-defs.c
|
||||
rsvg-defs.h
|
||||
rsvg-image.c
|
||||
rsvg-image.h
|
||||
rsvg-io.c
|
||||
rsvg-io.h
|
||||
rsvg-paint-server.c
|
||||
rsvg-paint-server.h
|
||||
rsvg-path.c
|
||||
rsvg-path.h
|
||||
rsvg-private.h
|
||||
rsvg-base-file-util.c
|
||||
rsvg-filter.c
|
||||
rsvg-filter.h
|
||||
rsvg-marker.c
|
||||
rsvg-marker.h
|
||||
rsvg-mask.c
|
||||
rsvg-mask.h
|
||||
rsvg-shapes.c
|
||||
rsvg-shapes.h
|
||||
rsvg-structure.c
|
||||
rsvg-structure.h
|
||||
rsvg-styles.c
|
||||
rsvg-styles.h
|
||||
rsvg-text.c
|
||||
rsvg-text.h
|
||||
rsvg-cond.c
|
||||
rsvg-base.c
|
||||
librsvg-enum-types.c
|
||||
rsvg-cairo-draw.c
|
||||
rsvg-cairo-draw.h
|
||||
rsvg-cairo-render.c
|
||||
rsvg-cairo-render.h
|
||||
rsvg-cairo-clip.h
|
||||
rsvg-cairo-clip.c
|
||||
rsvg.c
|
||||
rsvg-gobject.c
|
||||
rsvg-file-util.c
|
||||
rsvg-size-callback.c
|
||||
rsvg-size-callback.h
|
||||
rsvg-xml.c
|
||||
rsvg-xml.h
|
||||
rsvg.h
|
||||
rsvg-cairo.h
|
||||
librsvg-features.h
|
||||
librsvg-enum-types.h
|
||||
)
|
||||
|
||||
if(WIN32)
|
||||
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/config.h.win32" "${CMAKE_CURRENT_BINARY_DIR}/config.h" COPYONLY)
|
||||
file(READ "${CMAKE_CURRENT_SOURCE_DIR}/rsvg.symbols" rsvg_symbols)
|
||||
string(REGEX REPLACE "/[*][^*]*[*]/" "" rsvg_symbols "${rsvg_symbols}")
|
||||
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/rsvg.def" "EXPORTS\n${rsvg_symbols}")
|
||||
list(APPEND LIBRSVG_SOURCES "${CMAKE_CURRENT_BINARY_DIR}/rsvg.def")
|
||||
else()
|
||||
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/config.h.linux" "${CMAKE_CURRENT_BINARY_DIR}/config.h" COPYONLY)
|
||||
list(APPEND LIBRSVG_SOURCES rsvg.symbols)
|
||||
endif()
|
||||
|
||||
add_library(${LIBRSVG_TARGET} ${LIBRSVG_SOURCES})
|
||||
target_compile_definitions(${LIBRSVG_TARGET} PRIVATE
|
||||
-DRSVG_COMPILATION
|
||||
-D_CRT_SECURE_NO_WARNINGS
|
||||
-DSRCDIR="${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
-DGDK_PIXBUF_ENABLE_BACKEND
|
||||
-DG_LOG_DOMAIN="libpixbufloader-svg"
|
||||
-DSRCDIR=""
|
||||
$<$<BOOL:${MINGW}>:HAVE_STRTOK_R>
|
||||
)
|
||||
|
||||
target_link_libraries(${LIBRSVG_TARGET} PRIVATE
|
||||
PkgConfig::GLIB2
|
||||
${LIBXML2_LIBRARIES}
|
||||
PkgConfig::PANGO
|
||||
PkgConfig::GDK_PIXBUF
|
||||
${PANGO_FT2_LIB}
|
||||
PkgConfig::LIBCROCO
|
||||
)
|
||||
|
||||
target_include_directories(${LIBRSVG_TARGET}
|
||||
PRIVATE
|
||||
"${CMAKE_CURRENT_BINARY_DIR}"
|
||||
PUBLIC
|
||||
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
|
||||
"$<INSTALL_INTERFACE:include/librsvg-${RSVG_API_VERSION}>"
|
||||
)
|
||||
target_link_libraries(${LIBRSVG_TARGET}
|
||||
PUBLIC
|
||||
PkgConfig::LIBRSVG_LINK_PUBLIC
|
||||
PRIVATE
|
||||
PkgConfig::LIBRSVG_LINK_PRIVATE
|
||||
)
|
||||
install(TARGETS ${LIBRSVG_TARGET}
|
||||
RUNTIME DESTINATION bin
|
||||
LIBRARY DESTINATION lib
|
||||
ARCHIVE DESTINATION lib
|
||||
)
|
||||
install(
|
||||
FILES
|
||||
rsvg.h
|
||||
rsvg-cairo.h
|
||||
librsvg-features.h
|
||||
librsvg-enum-types.h
|
||||
DESTINATION include/librsvg-${RSVG_API_VERSION}/librsvg
|
||||
)
|
||||
|
||||
set(gdk_pixbuf_pc_requires_private gdk-pixbuf-2.0)
|
||||
pkg_check_modules(GDK_PIXBUF ${gdk_pixbuf_pc_requires_private} IMPORTED_TARGET REQUIRED)
|
||||
pkg_get_variable(GDK_PIXBUF_MODULEDIR ${gdk_pixbuf_pc_requires_private} gdk_pixbuf_moduledir)
|
||||
|
||||
set(PIXBUFLOADERSVG_SOURCES
|
||||
gdk-pixbuf-loader/io-svg.c
|
||||
)
|
||||
|
||||
if (BUILD_SHARED_LIBS)
|
||||
add_library(pixbufloader-svg MODULE ${PIXBUFLOADERSVG_SOURCES})
|
||||
else()
|
||||
add_library(pixbufloader-svg ${PIXBUFLOADERSVG_SOURCES})
|
||||
endif()
|
||||
target_include_directories(pixbufloader-svg
|
||||
PRIVATE
|
||||
"${CMAKE_CURRENT_BINARY_DIR}"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
)
|
||||
target_compile_definitions(pixbufloader-svg PRIVATE
|
||||
-DRSVG_COMPILATION
|
||||
-D_CRT_SECURE_NO_WARNINGS
|
||||
-DSRCDIR=""
|
||||
-DGDK_PIXBUF_ENABLE_BACKEND
|
||||
-DG_LOG_DOMAIN="libpixbufloader-svg"
|
||||
)
|
||||
target_link_libraries(pixbufloader-svg
|
||||
PRIVATE
|
||||
${LIBRSVG_TARGET}
|
||||
PkgConfig::GDK_PIXBUF
|
||||
)
|
||||
if (BUILD_SHARED_LIBS)
|
||||
install(TARGETS pixbufloader-svg
|
||||
RUNTIME DESTINATION "${GDK_PIXBUF_MODULEDIR}"
|
||||
LIBRARY DESTINATION "${GDK_PIXBUF_MODULEDIR}"
|
||||
)
|
||||
else()
|
||||
install(TARGETS pixbufloader-svg
|
||||
RUNTIME DESTINATION bin
|
||||
LIBRARY DESTINATION lib
|
||||
ARCHIVE DESTINATION lib
|
||||
)
|
||||
endif()
|
||||
|
||||
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/librsvg.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/librsvg.pc" @ONLY)
|
||||
file(READ "${CMAKE_CURRENT_BINARY_DIR}/librsvg.pc" librsvg_pc)
|
||||
list(JOIN librsvg_pc_requires_private " " requires_private)
|
||||
string(REPLACE "Requires.private:" "Requires.private: ${requires_private}" librsvg_pc "${librsvg_pc}")
|
||||
if (NOT BUILD_SHARED_LIBS)
|
||||
string(REPLACE "-lm" "-lpixbufloader-svg -lm" librsvg_pc "${librsvg_pc}")
|
||||
endif()
|
||||
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/librsvg.pc" "${librsvg_pc}")
|
||||
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/librsvg.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig" RENAME "librsvg-${RSVG_API_VERSION}.pc")
|
|
@ -0,0 +1,89 @@
|
|||
/* config.h. Generated from config.h.in by configure. */
|
||||
/* config.h.in. Generated from configure.ac by autoheader. */
|
||||
|
||||
/* Define if building universal (internal helper macro) */
|
||||
/* #undef AC_APPLE_UNIVERSAL_BUILD */
|
||||
|
||||
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||
#define HAVE_DLFCN_H 1
|
||||
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||
#define HAVE_INTTYPES_H 1
|
||||
|
||||
/* Define if your <locale.h> file defines LC_MESSAGES. */
|
||||
#define HAVE_LC_MESSAGES 1
|
||||
|
||||
/* Define to 1 if you have the <locale.h> header file. */
|
||||
#define HAVE_LOCALE_H 1
|
||||
|
||||
/* Define to 1 if you have the <memory.h> header file. */
|
||||
#define HAVE_MEMORY_H 1
|
||||
|
||||
/* Have the pangoft2 library */
|
||||
#define HAVE_PANGOFT2 1
|
||||
|
||||
/* Define to 1 if you have the <stdint.h> header file. */
|
||||
#define HAVE_STDINT_H 1
|
||||
|
||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||
#define HAVE_STDLIB_H 1
|
||||
|
||||
/* Define to 1 if you have the <strings.h> header file. */
|
||||
#define HAVE_STRINGS_H 1
|
||||
|
||||
/* Define to 1 if you have the <string.h> header file. */
|
||||
#define HAVE_STRING_H 1
|
||||
|
||||
/* Define to 1 if you have the `strtok_r' function. */
|
||||
#define HAVE_STRTOK_R 1
|
||||
|
||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||
#define HAVE_SYS_STAT_H 1
|
||||
|
||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||
#define HAVE_SYS_TYPES_H 1
|
||||
|
||||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#define HAVE_UNISTD_H 1
|
||||
|
||||
/* Define to the sub-directory where libtool stores uninstalled libraries. */
|
||||
#define LT_OBJDIR ".libs/"
|
||||
|
||||
/* Name of package */
|
||||
#define PACKAGE "librsvg"
|
||||
|
||||
/* Define to the address where bug reports for this package should be sent. */
|
||||
#define PACKAGE_BUGREPORT "https://bugzilla.gnome.org/enter_bug.cgi?product=librsvg"
|
||||
|
||||
/* Define to the full name of this package. */
|
||||
#define PACKAGE_NAME "RSVG"
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#define PACKAGE_STRING "RSVG 2.40.20"
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#define PACKAGE_TARNAME "librsvg"
|
||||
|
||||
/* Define to the home page for this package. */
|
||||
#define PACKAGE_URL ""
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#define PACKAGE_VERSION "2.40.20"
|
||||
|
||||
/* Define to 1 if you have the ANSI C header files. */
|
||||
#define STDC_HEADERS 1
|
||||
|
||||
/* Version number of package */
|
||||
#define VERSION "2.40.20"
|
||||
|
||||
/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
|
||||
significant byte first (like Motorola and SPARC, unlike Intel). */
|
||||
#if defined AC_APPLE_UNIVERSAL_BUILD
|
||||
# if defined __BIG_ENDIAN__
|
||||
# define WORDS_BIGENDIAN 1
|
||||
# endif
|
||||
#else
|
||||
# ifndef WORDS_BIGENDIAN
|
||||
/* # undef WORDS_BIGENDIAN */
|
||||
# endif
|
||||
#endif
|
|
@ -0,0 +1,43 @@
|
|||
diff --git a/gdk-pixbuf-loader/io-svg.c b/gdk-pixbuf-loader/io-svg.c
|
||||
index bcdfd0bb..4e8ede6d 100644
|
||||
--- a/gdk-pixbuf-loader/io-svg.c
|
||||
+++ b/gdk-pixbuf-loader/io-svg.c
|
||||
@@ -43,8 +43,8 @@ typedef struct {
|
||||
gpointer user_data;
|
||||
} SvgContext;
|
||||
|
||||
-G_MODULE_EXPORT void fill_vtable (GdkPixbufModule *module);
|
||||
-G_MODULE_EXPORT void fill_info (GdkPixbufFormat *info);
|
||||
+// G_MODULE_EXPORT void fill_vtable (GdkPixbufModule *module);
|
||||
+// G_MODULE_EXPORT void fill_info (GdkPixbufFormat *info);
|
||||
|
||||
enum {
|
||||
ERROR_WRITING = 1,
|
||||
@@ -173,17 +173,23 @@ gdk_pixbuf__svg_image_stop_load (gpointer data, GError **error)
|
||||
return result;
|
||||
}
|
||||
|
||||
-void
|
||||
-fill_vtable (GdkPixbufModule *module)
|
||||
+#ifdef BUILD_SHARED_LIBS
|
||||
+#define MODULE_ENTRY(function) G_MODULE_EXPORT void function
|
||||
+#else
|
||||
+#define MODULE_ENTRY(function) void _gdk_pixbuf__svg_ ## function
|
||||
+#endif
|
||||
+
|
||||
+MODULE_ENTRY (fill_vtable) (GdkPixbufModule *module)
|
||||
{
|
||||
+ if (module == NULL) return;
|
||||
module->begin_load = gdk_pixbuf__svg_image_begin_load;
|
||||
module->stop_load = gdk_pixbuf__svg_image_stop_load;
|
||||
module->load_increment = gdk_pixbuf__svg_image_load_increment;
|
||||
}
|
||||
|
||||
-void
|
||||
-fill_info (GdkPixbufFormat *info)
|
||||
+MODULE_ENTRY (fill_info) (GdkPixbufFormat *info)
|
||||
{
|
||||
+ if (info == NULL) return;
|
||||
static const GdkPixbufModulePattern signature[] = {
|
||||
{ " <svg", "* ", 100 },
|
||||
{ " <!DOCTYPE svg", "* ", 100 },
|
|
@ -0,0 +1,42 @@
|
|||
# port update requires rust/cargo
|
||||
|
||||
string(REGEX REPLACE "^([0-9]*[.][0-9]*)[.].*" "\\1" MAJOR_MINOR "${VERSION}")
|
||||
vcpkg_download_distfile(ARCHIVE
|
||||
URLS "https://download.gnome.org/sources/librsvg/${MAJOR_MINOR}/librsvg-${VERSION}.tar.xz"
|
||||
"https://www.mirrorservice.org/sites/ftp.gnome.org/pub/GNOME/sources/librsvg/${MAJOR_MINOR}/librsvg-${VERSION}.tar.xz"
|
||||
FILENAME "librsvg-${VERSION}.tar.xz"
|
||||
SHA512 cdd8224deb4c3786e29f48ed02c32ed9dff5cb15aba574a5ef845801ad3669cfcc3eedb9d359c22213dc7a29de24c363248825adad5877c40abf73b3688ff12f
|
||||
)
|
||||
|
||||
vcpkg_extract_source_archive(
|
||||
SOURCE_PATH
|
||||
ARCHIVE "${ARCHIVE}"
|
||||
PATCHES
|
||||
fix_io_svg_for_static_build.patch
|
||||
)
|
||||
|
||||
file(COPY "${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt" "${CMAKE_CURRENT_LIST_DIR}/config.h.linux" DESTINATION "${SOURCE_PATH}")
|
||||
|
||||
vcpkg_find_acquire_program(PKGCONFIG)
|
||||
vcpkg_cmake_configure(
|
||||
SOURCE_PATH "${SOURCE_PATH}"
|
||||
OPTIONS
|
||||
"-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}"
|
||||
)
|
||||
|
||||
vcpkg_cmake_install()
|
||||
vcpkg_copy_pdbs()
|
||||
vcpkg_fixup_pkgconfig()
|
||||
|
||||
if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW)
|
||||
file(GLOB_RECURSE pc_files "${CURRENT_PACKAGES_DIR}/*.pc")
|
||||
foreach(pc_file IN LISTS pc_files)
|
||||
vcpkg_replace_string("${pc_file}" " -lm" "")
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include")
|
||||
|
||||
file(COPY "${CURRENT_PORT_DIR}/unofficial-librsvg-config.cmake" DESTINATION "${CURRENT_PACKAGES_DIR}/share/unofficial-librsvg")
|
||||
file(COPY "${CURRENT_PORT_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
|
||||
vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/COPYING")
|
|
@ -0,0 +1,14 @@
|
|||
file(READ "${CMAKE_CURRENT_LIST_DIR}/../librsvg/usage" usage)
|
||||
message(WARNING "find_package(unofficial-librsvg) is deprecated.\n${usage}")
|
||||
|
||||
include(CMakeFindDependencyMacro)
|
||||
find_dependency(PkgConfig)
|
||||
pkg_check_modules(VCPKG_LIBRSVG librsvg-2.0 IMPORTED_TARGET)
|
||||
if(NOT VCPKG_LIBRSVG_FOUND)
|
||||
set(${CMAKE_FIND_PACKAGE_NAME}_FOUND 0)
|
||||
elseif(NOT TARGET unofficial::librsvg::rsvg-2)
|
||||
add_library(unofficial::librsvg::rsvg-2 INTERFACE IMPORTED)
|
||||
set_target_properties(unofficial::librsvg::rsvg-2 PROPERTIES
|
||||
INTERFACE_LINK_LIBRARIES PkgConfig::VCPKG_LIBRSVG
|
||||
)
|
||||
endif()
|
|
@ -0,0 +1,5 @@
|
|||
librsvg can be imported via CMake FindPkgConfig module:
|
||||
|
||||
find_package(PkgConfig REQUIRED)
|
||||
pkg_check_modules(LIBRSVG librsvg-2.0 IMPORTED_TARGET REQUIRED)
|
||||
target_link_libraries(main PRIVATE PkgConfig::LIBRSVG)
|
|
@ -0,0 +1,24 @@
|
|||
{
|
||||
"name": "librsvg",
|
||||
"version": "2.40.20",
|
||||
"port-version": 11,
|
||||
"description": "A small library to render Scalable Vector Graphics (SVG)",
|
||||
"homepage": "https://gitlab.gnome.org/GNOME/librsvg",
|
||||
"license": "LGPL-2.0-or-later",
|
||||
"dependencies": [
|
||||
"cairo",
|
||||
"fontconfig",
|
||||
"gdk-pixbuf",
|
||||
"glib",
|
||||
"libcroco",
|
||||
{
|
||||
"name": "libxml2",
|
||||
"default-features": false
|
||||
},
|
||||
"pango",
|
||||
{
|
||||
"name": "vcpkg-cmake",
|
||||
"host": true
|
||||
}
|
||||
]
|
||||
}
|
|
@ -69,7 +69,33 @@ BEGIN_EVENT_TABLE (CBOINCGUIApp, wxApp)
|
|||
#endif
|
||||
END_EVENT_TABLE ()
|
||||
|
||||
#if defined(__WXGTK__) && defined(BUILD_WITH_VCPKG)
|
||||
extern "C" {
|
||||
void _gdk_pixbuf__svg_fill_info (void*);
|
||||
void _gdk_pixbuf__svg_fill_vtable (void*);
|
||||
unsigned int rsvg_error_quark (void);
|
||||
void rsvg_handle_get_pixbuf (void*);
|
||||
}
|
||||
|
||||
typedef void (*GdkPixbufFillInfo) (void*);
|
||||
typedef void (*GdkPixbufFillVtable) (void*);
|
||||
typedef unsigned int (*RsvgErrorQuark) (void);
|
||||
typedef void (*RsvgHandleGetPixbuf) (void*);
|
||||
#endif
|
||||
|
||||
bool CBOINCGUIApp::OnInit() {
|
||||
#if defined(__WXGTK__) && defined(BUILD_WITH_VCPKG)
|
||||
try {
|
||||
GdkPixbufFillInfo fi = _gdk_pixbuf__svg_fill_info;
|
||||
GdkPixbufFillVtable fv = _gdk_pixbuf__svg_fill_vtable;
|
||||
RsvgErrorQuark eq = rsvg_error_quark;
|
||||
RsvgHandleGetPixbuf hp = rsvg_handle_get_pixbuf;
|
||||
fi(NULL);
|
||||
fv(NULL);
|
||||
eq();
|
||||
hp(NULL);
|
||||
} catch (...) {}
|
||||
#endif
|
||||
// Initialize globals
|
||||
#ifdef SANDBOX
|
||||
g_use_sandbox = true;
|
||||
|
|
|
@ -50,4 +50,4 @@ linux/update_vcpkg_manager.sh
|
|||
export _libcurl_pc="$VCPKG_DIR/lib/pkgconfig/libcurl.pc"
|
||||
export PKG_CONFIG_PATH=$VCPKG_DIR/lib/pkgconfig/
|
||||
|
||||
./configure --enable-vcpkg --disable-server --disable-client --with-wx-config=$VCPKG_DIR/tools/wxwidgets/wx-config CPPFLAGS="-DwxDEBUG_LEVEL=0" GTK_LIBS="$(pkg-config --libs gtk+-3.0)" $exec_prefix
|
||||
./configure --disable-server --disable-client --with-wx-config=$VCPKG_DIR/tools/wxwidgets/wx-config CPPFLAGS="-DwxDEBUG_LEVEL=0 -DBUILD_WITH_VCPKG=1" GTK_LIBS="$(pkg-config --libs gtk+-3.0 librsvg-2.0)" $exec_prefix
|
||||
|
|
Loading…
Reference in New Issue