diff options
author | Patrick Griffis <pgriffis@igalia.com> | 2022-10-19 11:56:03 -0500 |
---|---|---|
committer | Patrick Griffis <pgriffis@igalia.com> | 2022-10-19 11:59:27 -0500 |
commit | 6de99cf344aee817176494451a995366fe020f76 (patch) | |
tree | 3ea5725e2ee2384622acd34dd93ebbfc259721b6 | |
parent | 22fd15e680e332508929218a99b8ff85b5568ad2 (diff) | |
download | libsoup-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.build | 11 | ||||
-rw-r--r-- | libsoup/libsoup-3.0.pc.in | 14 | ||||
-rw-r--r-- | libsoup/meson.build | 55 | ||||
-rw-r--r-- | meson.build | 6 |
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 |