summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Griffis <pgriffis@igalia.com>2022-10-19 11:56:03 -0500
committerPatrick Griffis <pgriffis@igalia.com>2022-10-19 11:59:27 -0500
commit6de99cf344aee817176494451a995366fe020f76 (patch)
tree3ea5725e2ee2384622acd34dd93ebbfc259721b6
parent22fd15e680e332508929218a99b8ff85b5568ad2 (diff)
downloadlibsoup-wip/pkg-config-tweaks.tar.gz
Use Requires.internal in pkg-config filewip/pkg-config-tweaks
The Requires.private field in pkg-config is vague and does not express what these dependencies are well. They are internal dependencies that are not part of our public API.
-rw-r--r--examples/meson.build11
-rw-r--r--libsoup/libsoup-3.0.pc.in14
-rw-r--r--libsoup/meson.build55
-rw-r--r--meson.build6
4 files changed, 62 insertions, 24 deletions
diff --git a/examples/meson.build b/examples/meson.build
index 189616b2..f1eeab1a 100644
--- a/examples/meson.build
+++ b/examples/meson.build
@@ -1,7 +1,4 @@
-deps = [
- glib_deps,
- libsoup_dep
-]
+example_deps = [libsoup_dep]
examples = [
'get',
@@ -12,9 +9,11 @@ examples = [
if unix_socket_dep.found()
examples += [ 'unix-socket-client' ]
examples += [ 'unix-socket-server' ]
- deps += [ unix_socket_dep ]
+ example_deps += [ unix_socket_dep ]
endif
foreach example: examples
- executable(example, example + '.c', dependencies: deps)
+ executable(example, example + '.c',
+ dependencies: example_deps,
+ )
endforeach
diff --git a/libsoup/libsoup-3.0.pc.in b/libsoup/libsoup-3.0.pc.in
new file mode 100644
index 00000000..bea1cd58
--- /dev/null
+++ b/libsoup/libsoup-3.0.pc.in
@@ -0,0 +1,14 @@
+prefix=@PREFIX@
+includedir=@INCLUDEDIR@
+libdir=@LIBDIR@
+exec_prefix=${prefix}
+
+Name: libsoup
+Description: A glib-based HTTP library
+Version: @VERSION@
+URL: https://libsoup.org
+Conflicts: libsoup-2.4
+Requires: @REQUIRES@
+Requires.internal: @REQUIRES_INTERNAL@
+Libs: -L${libdir} -lsoup-3.0
+Cflags: -I${includedir}/libsoup-3.0
diff --git a/libsoup/meson.build b/libsoup/meson.build
index d920b522..309dd9d4 100644
--- a/libsoup/meson.build
+++ b/libsoup/meson.build
@@ -1,8 +1,6 @@
includedir = join_paths(libsoup_api_name, meson.project_name())
subdir('include')
-pkg = import('pkgconfig')
-
soup_sources = [
'auth/soup-auth.c',
'auth/soup-auth-basic.c',
@@ -182,16 +180,24 @@ libsoup_c_args = [
'-DLIBSOUP_COMPILATION'
]
-deps = [
+# These are dependencies that are *not* part of our public API
+internal_deps = [
libsysprof_capture_dep,
- glib_deps,
sqlite_dep,
libpsl_dep,
brotlidec_dep,
- platform_deps,
gssapi_dep,
libz_dep,
libnghttp2_dep,
+ gmodule_dep,
+]
+
+deps = [
+ glib_dep,
+ gobject_dep,
+ gio_dep,
+ platform_deps,
+ internal_deps,
]
libsoup_includes = [
@@ -236,18 +242,39 @@ libsoup_static = static_library('soup-@0@-static'.format(apiversion),
dependencies : deps,
)
-pkg.generate(libsoup,
- libraries : glib_deps,
- name : meson.project_name(),
- description : 'A glib-based HTTP library',
- filebase : libsoup_api_name,
- subdirs: libsoup_api_name,
- variables: 'exec_prefix=${prefix}')
+# We generate our own pkg-config file instead of using the pkgconfig module
+# to set the Requires.internal property instead of Requires.private.
+# This is supported by `pkgconf` and correctly expresses what these
+# dependencies are since we do not actually depend on them for public
+# API and they are only ever necessary for static linking.
+pkgconfig_data = configuration_data()
+
+required_internal_deps = []
+foreach dep : internal_deps
+ if dep.found()
+ required_internal_deps += '@0@ >= @1@'.format(dep.name(), dep.version())
+ endif
+endforeach
+
+pkgconfig_data.set('REQUIRES', 'gio-2.0 @0@'.format(glib_required_version))
+pkgconfig_data.set('REQUIRES_INTERNAL', ', '.join(required_internal_deps))
+pkgconfig_data.set('VERSION', meson.project_version())
+pkgconfig_data.set('PREFIX', get_option('prefix'))
+pkgconfig_data.set('LIBDIR', get_option('prefix') / get_option('libdir'))
+pkgconfig_data.set('INCLUDEDIR', get_option('prefix') / get_option('includedir'))
+
+configure_file(
+ input: 'libsoup-3.0.pc.in',
+ output: 'libsoup-3.0.pc',
+ configuration: pkgconfig_data,
+ install: true,
+ install_dir: get_option('libdir') / 'pkgconfig'
+)
libsoup_dep = declare_dependency(link_with : libsoup,
include_directories : libsoup_includes,
sources : soup_enum_h,
- dependencies : [ platform_deps, gssapi_dep, glib_deps ]
+ dependencies : [ platform_deps, glib_dep, gobject_dep, gio_dep ]
)
meson.override_dependency('libsoup-3.0', libsoup_dep)
@@ -255,7 +282,7 @@ meson.override_dependency('libsoup-3.0', libsoup_dep)
libsoup_static_dep = declare_dependency(link_with : libsoup_static,
include_directories : libsoup_includes,
sources : soup_enum_h,
- dependencies : [ platform_deps, gssapi_dep, glib_deps ]
+ dependencies : [ platform_deps, glib_dep, gobject_dep, gio_dep ]
)
if enable_introspection or enable_vapi
diff --git a/meson.build b/meson.build
index 0487fbc1..bc265c01 100644
--- a/meson.build
+++ b/meson.build
@@ -98,7 +98,7 @@ endif
add_project_arguments(common_flags, language : 'c')
-glib_required_version = '>= 2.69.1'
+glib_required_version = '>= 2.69.1' # Note this string is included in the pkg-config file.
glib_dep = dependency('glib-2.0', version : glib_required_version,
fallback: ['glib', 'libglib_dep'])
gmodule_dep = dependency('gmodule-2.0', version : glib_required_version,
@@ -108,8 +108,6 @@ gobject_dep = dependency('gobject-2.0', version : glib_required_version,
gio_dep = dependency('gio-2.0', version : glib_required_version,
fallback: ['glib', 'libgio_dep'])
-glib_deps = [glib_dep, gmodule_dep, gobject_dep, gio_dep]
-
cdata = configuration_data()
libnghttp2_dep = dependency('libnghttp2')
@@ -193,7 +191,7 @@ if enable_tls_check
}
'''
- rres = cc.run(check_gio_tls_src, name : 'GIO has real TLS support', dependencies : glib_deps)
+ rres = cc.run(check_gio_tls_src, name : 'GIO has real TLS support', dependencies : gio_dep)
assert(rres.compiled() and rres.returncode() == 0, 'libsoup requires glib-networking for TLS support')
endif
endif