diff options
| author | Xavier Claessens <xavier.claessens@collabora.com> | 2018-01-19 11:32:14 -0500 |
|---|---|---|
| committer | Xavier Claessens <xavier.claessens@collabora.com> | 2018-01-19 13:45:14 -0500 |
| commit | 6e2e94c6452c12af224515e70aa88a63fb5adc65 (patch) | |
| tree | 22df3360a0cd4d34a5129b99afe6c4c095eb9647 | |
| parent | ec37f625c7ffd5b3470ac6990f856f485c04af5e (diff) | |
| download | meson-6e2e94c6452c12af224515e70aa88a63fb5adc65.tar.gz | |
pkgconfig: Also ignore not found deps passed directly to pc generator
Currently only not found deps implicitly pulled from a Library object
are ignored. We should also ignore not found deps passed directly to
generate() method.
This makes the unit testing more complicated because libfoo pkgconfig
dependency cannot be found when generated from the within the same
meson.build.
| -rw-r--r-- | mesonbuild/modules/pkgconfig.py | 13 | ||||
| -rwxr-xr-x | run_unittests.py | 10 | ||||
| -rw-r--r-- | test cases/common/51 pkgconfig-gen/dependencies/exposed.c | 3 | ||||
| -rw-r--r-- | test cases/common/51 pkgconfig-gen/dependencies/internal.c | 3 | ||||
| -rw-r--r-- | test cases/common/51 pkgconfig-gen/dependencies/meson.build | 38 | ||||
| -rw-r--r-- | test cases/common/51 pkgconfig-gen/meson.build | 33 |
6 files changed, 58 insertions, 42 deletions
diff --git a/mesonbuild/modules/pkgconfig.py b/mesonbuild/modules/pkgconfig.py index c95192003..5573a2e41 100644 --- a/mesonbuild/modules/pkgconfig.py +++ b/mesonbuild/modules/pkgconfig.py @@ -66,20 +66,22 @@ class DependenciesHelper: elif hasattr(obj, 'generated_pc'): processed_reqs.append(obj.generated_pc) elif isinstance(obj, dependencies.PkgConfigDependency): - processed_reqs.append(obj.name) + if obj.found(): + processed_reqs.append(obj.name) elif isinstance(obj, dependencies.ThreadDependency): processed_libs += obj.get_compiler().thread_link_flags(obj.env) processed_cflags += obj.get_compiler().thread_flags(obj.env) elif isinstance(obj, dependencies.Dependency): - processed_libs += obj.get_link_args() - processed_cflags += obj.get_compile_args() + if obj.found(): + processed_libs += obj.get_link_args() + processed_cflags += obj.get_compile_args() elif isinstance(obj, (build.SharedLibrary, build.StaticLibrary)): processed_libs.append(obj) if public: if not hasattr(obj, 'generated_pc'): obj.generated_pc = self.name self.add_priv_libs(obj.get_dependencies()) - self.add_priv_libs(self.strip_unfound(obj.get_external_deps())) + self.add_priv_libs(obj.get_external_deps()) elif isinstance(obj, str): processed_libs.append(obj) else: @@ -87,9 +89,6 @@ class DependenciesHelper: return processed_libs, processed_reqs, processed_cflags - def strip_unfound(self, deps): - return [x for x in deps if not hasattr(x, 'found') or x.found()] - def remove_dups(self): self.pub_libs = list(set(self.pub_libs)) self.pub_reqs = list(set(self.pub_reqs)) diff --git a/run_unittests.py b/run_unittests.py index 536c0f927..7abbe6ceb 100755 --- a/run_unittests.py +++ b/run_unittests.py @@ -2067,11 +2067,17 @@ class LinuxlikeTests(BasePlatformTests): ''' Test that generated pkg-config files correctly handle dependencies ''' - testdir = os.path.join(self.common_test_dir, '51 pkgconfig-gen') self.init(testdir) + privatedir1 = self.privatedir - os.environ['PKG_CONFIG_LIBDIR'] = self.privatedir + self.new_builddir() + os.environ['PKG_CONFIG_LIBDIR'] = privatedir1 + testdir = os.path.join(self.common_test_dir, '51 pkgconfig-gen', 'dependencies') + self.init(testdir) + privatedir2 = self.privatedir + + os.environ['PKG_CONFIG_LIBDIR'] = os.pathsep.join([privatedir1, privatedir2]) cmd = ['pkg-config', 'dependency-test'] out = self._run(cmd + ['--print-requires']).strip().split() diff --git a/test cases/common/51 pkgconfig-gen/dependencies/exposed.c b/test cases/common/51 pkgconfig-gen/dependencies/exposed.c new file mode 100644 index 000000000..005202e67 --- /dev/null +++ b/test cases/common/51 pkgconfig-gen/dependencies/exposed.c @@ -0,0 +1,3 @@ +int exposed_function() { + return 42; +} diff --git a/test cases/common/51 pkgconfig-gen/dependencies/internal.c b/test cases/common/51 pkgconfig-gen/dependencies/internal.c new file mode 100644 index 000000000..1a41b11c8 --- /dev/null +++ b/test cases/common/51 pkgconfig-gen/dependencies/internal.c @@ -0,0 +1,3 @@ +int internal_function() { + return 42; +} diff --git a/test cases/common/51 pkgconfig-gen/dependencies/meson.build b/test cases/common/51 pkgconfig-gen/dependencies/meson.build new file mode 100644 index 000000000..a767eb545 --- /dev/null +++ b/test cases/common/51 pkgconfig-gen/dependencies/meson.build @@ -0,0 +1,38 @@ +project('pkgconfig-gen-dependencies', 'c') + +pkgg = import('pkgconfig') + +# libmain internally use libinternal and expose libexpose in its API +exposed_lib = shared_library('libexposed', 'exposed.c') +internal_lib = shared_library('libinternal', 'internal.c') +main_lib = shared_library('libmain', link_with : [exposed_lib, internal_lib]) + +pkgg.generate(libraries : exposed_lib, + version : '1.0', + name : 'libexposed', + description : 'An exposed library in dependency test.' +) + +# Declare a few different Dependency objects +pc_dep = dependency('libfoo') +notfound_dep = dependency('notfound', required : false) +threads_dep = dependency('threads') +custom_dep = declare_dependency(link_args : ['-lcustom'], compile_args : ['-DCUSTOM']) +custom2_dep = declare_dependency(link_args : ['-lcustom2'], compile_args : ['-DCUSTOM2']) + +# Generate a PC file: +# - Having libmain in libraries should pull implicitely libexposed and libinternal in Libs.private +# - Having libexposed in libraries should remove it from Libs.private +# - We generated a pc file for libexposed so it should be in Requires instead of Libs +# - Having threads_dep in libraries should add '-pthread' in both Libs and Cflags +# - Having custom_dep in libraries and libraries_private should only add it in Libs +# - Having custom2_dep in libraries_private should not add its Cflags +# - Having pc_dep in libraries_private should add it in Requires.private +# - notfound_dep is not required so it shouldn't appear in the pc file. +pkgg.generate(libraries : [main_lib, exposed_lib, threads_dep , custom_dep], + libraries_private : [custom_dep, custom2_dep, pc_dep, notfound_dep], + version : '1.0', + name : 'dependency-test', + filebase : 'dependency-test', + description : 'A dependency test.' +) diff --git a/test cases/common/51 pkgconfig-gen/meson.build b/test cases/common/51 pkgconfig-gen/meson.build index a8dd09275..f9d7f7fd1 100644 --- a/test cases/common/51 pkgconfig-gen/meson.build +++ b/test cases/common/51 pkgconfig-gen/meson.build @@ -46,36 +46,3 @@ pkgg.generate( description : 'A foo library.', variables : ['foo=bar', 'datadir=${prefix}/data'] ) - -# libmain internally use libinternal and expose libexpose in its API -exposed_lib = shared_library('libexposed', 'simple.c') -internal_lib = shared_library('libinternal', 'simple.c') -main_lib = shared_library('libmain', link_with : [exposed_lib, internal_lib]) - -pkgg.generate(libraries : exposed_lib, - version : libver, - name : 'libexposed', - description : 'An exposed library in dependency test.' -) - -# Declare a few different Dependency objects -pc_dep = dependency('libfoo', required : false) -threads_dep = dependency('threads', required : false) -custom_dep = declare_dependency(link_args : ['-lcustom'], compile_args : ['-DCUSTOM']) -custom2_dep = declare_dependency(link_args : ['-lcustom2'], compile_args : ['-DCUSTOM2']) - -# Generate a PC file: -# - Having libmain in libraries should pull implicitely libexposed and libinternal in Libs.private -# - Having libexposed in libraries should remove it from Libs.private -# - We generated a pc file for libexposed so it should be in Requires instead of Libs -# - Having threads_dep in libraries should add '-pthread' in both Libs and Cflags -# - Having custom_dep in libraries and libraries_private should only add it in Libs -# - Having custom2_dep in libraries_private should not add its Cflags -# - Having pc_dep in libraries_private should add it in Requires.private -pkgg.generate(libraries : [main_lib, exposed_lib, threads_dep , custom_dep], - libraries_private : [custom_dep, custom2_dep, pc_dep], - version : libver, - name : 'dependency-test', - filebase : 'dependency-test', - description : 'A dependency test.' -) |
