Commit Graph

83 Commits

Author SHA1 Message Date
Xavier Claessens 83964f64fa pkgconfig: Fix flag deduplication
This is a regression introduced by 2cbf7caf5, generated pkg-config files
have many duplicated '-pthread' flags.
2019-01-05 21:44:53 +02:00
Niklas Haas 261ab9b214 pkgconfig: Fix link order of library dependencies
Since `_process_libs` appends the lib's dependencies this list already,
the final return value of `_process_libs` will end up after its
dependencies, which is the wrong way around. (The lib must come first,
then its dependencies)

The easiest solution is to simply pre-pend the return value of
`_process_libs` rather than appending it, so that its dependencies come
after the library itself.

Closes #4091.
2018-12-12 10:42:32 -05:00
Xavier Claessens 8612f1543f pkgconfig: Improve and document generator behaviour
- Add libraries from InternalDependency.libraries
- Deprecate association of libraries from the "libraries" keyword
argument to the generated pkg-config file.
2018-12-04 06:49:02 -05:00
Luca Boccassi 80ac40b7e7 pkgconfig: do not generated dependency on itself
If a project generates a single pc file but multiple shared libraries
with dependencies on each other, the generated pc name will be used to
generate a Requires.private dependency, which means the project will
depend on itself. This breaks at least some versions of pkg-config
(0.27 in RHEL7) which cannot handle the recursion and error out.

When adding the dependency using the pc name, check that it's not
on the project itself.

Fixes #4583
2018-12-03 14:58:43 -05:00
Marcel Hollerbach 443a4a8c78 pkgconfig: add support for pkgconfig generation for c#
this adds support for generating pkgconfig files for c#.

The difference to c and cpp is that the -I flag is not known to the c#
compiler, but rather the -r flag which is used to link a .dll file into
the compiled library.

However this opens the question of validating which pkgconfig files can
be generated (depending on the language).

This implements 4409.
2018-11-21 21:36:39 +02:00
Nirbheek Chauhan a1d9adba09 FeatureNew: Make all checks subproject-specific
We now pass the current subproject to every FeatureNew and
FeatureDeprecated call. This requires a bunch of rework to:

1. Ensure that we have access to the subproject in the list of
   arguments when used as a decorator (see _get_callee_args).
2. Pass the subproject to .use() when it's called manually.
3. We also can't do feature checks for new features in
   meson_options.txt because that's parsed before we know the
   meson_version from project()
2018-07-02 19:52:53 +05:30
Nirbheek Chauhan 2cbf7caf5c
Nirbheek/fix pkgconfig library dedup (#3813)
* Add a test case for bad de-dup of -framework args

https://github.com/mesonbuild/meson/issues/3800

* pkgconfig: Don't naively de-dup all arguments

Honestly don't know what I was smoking. Of course the `Libs:` field in
a pkg-config file can have arguments other than -l and -L

Closes https://github.com/mesonbuild/meson/issues/3800

* pkgconfig module: Fix needlessly aggressive de-dup
2018-07-01 12:31:31 +00:00
Salamandar 2fb6018763 Add 0.46.0 features 2018-06-01 14:23:24 +02:00
Salamandar 4741f1e243 Add 0.42.0 features 2018-06-01 14:23:24 +02:00
Salamandar d5207e1c4f Add 0.41.0 features 2018-06-01 14:23:24 +02:00
Nirbheek Chauhan badbfa125c pkgconfig: Don't expose internal libraries in .pc files
Libraries that have been linked with link_whole: are internal
implementation details and should never be exposed to the outside
world in either Libs: or Libs.private:

Closes https://github.com/mesonbuild/meson/issues/3509
2018-05-02 11:46:47 +00:00
Jussi Pakkanen 2b5766980b Keep separator spaces in pkg-config declarations. Closes #3479. 2018-05-02 11:46:47 +00:00
Martin Hostettler 247b1a598a regression: pkgconfig module: Fix Fix regression in Requires.private generation.
The fix for Requires generation in #3406 missed a second code path with the same
problem.

Passing a pkgconfig dependency to requires would produce Q, t, 5, C, o,r, e'
instead of 'Qt5Core'.

This was introduced in 8efd940.
2018-04-20 00:59:06 +03:00
Jussi Pakkanen 998892ed29 Updated all modules to work with the new API. 2018-04-15 13:32:38 +05:30
Martin Hostettler 3f7c6cf3d6 Improve generation of pkg-config files for static only libraries.
Previously pkg-config files generated by the pkgconfig modules for static libraries
with dependencies could only be used in a dependencies with `static: true`.

This was caused by the dependencies only appearing in Libs.private even
if they are needed in the default linking mode. But a user of a
dependency should not have to know if the default linking mode is static
or dynamic; A dependency('somelib') call should always pull in all
needed pieces into the build.

Now for meson build static libraries passed via `libraries` to the generate
method automatically promote dependencies to public.
2018-04-14 23:43:29 +03:00
textshell 0535f38af9 pkgconfig module: Fix regression that Requires.private is generated as 'Q, t, 5, C, o, r, e' instead of Qt5Core. (#3406) 2018-04-14 21:57:12 +03:00
Xavier Claessens da0f0f02e5 pkgconfig generator: Remove duplicates in required versions 2018-04-07 21:35:47 -04:00
Xavier Claessens 142f51a7b5 pkgconfig generator: Fix crash when passing a SharedModule 2018-04-06 21:05:53 -04:00
Xavier Claessens 5eef325ab6 pkgconfig generator: Only skip dependencies when using shared_library()
It is weird and inconsistent to have different pc file depending on
default_library value when using library() or build_target(). We should
skip dependencies only when user explicitly want shared library only.
2018-04-03 15:20:19 -04:00
Matthias Klumpp 6146353f45 Don't crash when using d_module_versions for pkg-config 2018-03-29 20:28:33 +03:00
Xavier Claessens b4aee4675a pkgconfig: Add a simple version of the generator (#3284) 2018-03-29 01:19:42 +03:00
Xavier Claessens 8efd940092 pkgconfig generator: Add required version 2018-03-25 23:20:09 +03:00
Chris Lamb 979eaa804a Make the generated pkgconfig files reproducible.
Whilst working on the Reproducible Builds effort [0], we noticed
that meson creates non-reproducible pkgconfig files as it relies
on Python set ordering.

This was originally filed in Debian as #892515 [1].

 [0] https://reproducible-builds.org/
 [1] https://bugs.debian.org/892515
2018-03-25 18:35:40 +03:00
Jussi Pakkanen e984e1072b
Merge pull request #3251 from mesonbuild/fixpkgconfigdeps
Fix pkg-config dependencies leaking out (debbug 892956)
2018-03-19 23:43:35 +02:00
Jussi Pakkanen cf5f1a83d5 Fix existing tests. 2018-03-19 23:21:56 +02:00
Jussi Pakkanen c385f79737 Do not leak out private dependencies for shared libraries. 2018-03-17 00:44:56 +02:00
Aleksey Filippov 552916d2d2 pkgconfig: allow any non-found dependency requires arguments
On some platforms such as OSX external dependency falls back
to different dependency types if it is not found.
2018-03-13 19:20:40 +02:00
Aleksey Filippov 6e83e41af7 pkgconfig: print requires argument type on error 2018-03-13 19:20:40 +02:00
Aleksey Filippov d6b5d7fe9f Add library with generated_pc and PkgConfigDependency support to pkgconfig.generate() 2018-02-24 23:41:08 +00:00
Aleksey Filippov be6cedb491 Use listify(unholder=True) instead of manual unwrapping 2018-02-24 21:22:04 +00:00
Aleksey Filippov 02bd4be0e6 Fix misprint in pkgconfig comment 2018-02-23 00:24:16 +00:00
Xavier Claessens 6e2e94c645 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.
2018-01-19 13:45:14 -05:00
Jussi Pakkanen 5e4538fe63 Add external dependencies to pc files only if found. Closes #2911. 2018-01-19 15:49:49 +02:00
Xavier Claessens 68eedc8b71 pkgconfig: Rename DepsHolder to DependenciesHelper 2017-12-21 16:45:36 -05:00
Xavier Claessens 49977686b5 pkgconfig: Use the pc file we generated for libraries 2017-12-20 19:09:08 -05:00
Xavier Claessens 9e541a0fff pkgconfig: Avoid duplicated -L flags 2017-12-20 19:09:08 -05:00
Xavier Claessens 1c0570906c pkgconfig: Allow passing Dependency objects to library(_private)
Special case ThreadDependency by taking compiler's flags and
PkgConfigDependency by adding them in requires(.private) instead. For
other Dependency objects just take their link_args and compile_args.

Closes #2725
2017-12-20 19:09:08 -05:00
Iñigo Martínez 638077181a pkgconfig: Handle prefix in library path
The install_dir parameter of the libraries can also contain the
prefix path, which creates wrong library paths in the .pc file.

This patch detects if prefix is contained in the library path
and creates a relative path.

Fixes #2469
2017-11-19 18:20:21 +02:00
Nirbheek Chauhan 4fb978e1f7 pkgconfig module: Escape all paths while generating
Without this, we produce unusable pkg-config files when
prefix/libdir/etc contain spaces, which is very common on Windows.
2017-11-11 23:06:49 +05:30
getzze 6ce42e2ec5 Error for Libs in package_config function
Without specifying a custom install directory string, get_custom_install_dir() returns True. So for the `Libs` entry I was getting this:

  Libs: -L${prefix}/True -lfoo

Now it behaves as expected:

  Libs: -L${libdir} -lfoo
2017-10-19 20:22:32 +03:00
Luke Shumaker 4dbbb4884c flake8: Clean up complained-about unused imports
This also adds a "# noqa: F401" comment on an unused "import lzma",
which we are using it in a try/except block that is being used to
check if the lzma module is importable; of course it is unused.

v2: This turned out to be a little tricky.

    mesonbuild/modules/__init__.py had the "unused" import:

        from ..interpreterbase import permittedKwargs, noKwargs

    However, that meant that the various modules could do things like:

        from . import noKwargs # "." is "mesonbuild.modules"

    Which breaks when you remove __init__.py's "unused" import.  I
    could have tagged that import with "# noqa: F401", but instead I
    chose to have each of the module import directly from
    "..interpreterbase" instead of ".".
2017-09-21 13:41:03 -04:00
Alexis Jeandet bf64cf569b Gnome, pkgconfig, Qt4, Qt5 and windows modules slightly refactored.
Signed-off-by: Alexis Jeandet <alexis.jeandet@member.fsf.org>
2017-09-18 22:21:22 +02:00
Matthias Klumpp 61db415d7f d: Make feature names less verbose 2017-09-17 21:36:13 +02:00
Matthias Klumpp 75fdf413e4 Drop feature_args call in favor of letting pkgconfig do this directly 2017-09-12 17:33:22 +02:00
Patrick Griffis 2acf737b4b pkgconfig: Document url keyword
Closes #2272
2017-09-03 13:23:37 +03:00
Emmanuele Bassi 381e8313ed Make error message more informative
It's easier to identify a malformed variable assignment if we print it
out.
2017-07-21 19:38:55 +03:00
Laurent Carlier 0283a2fb41 pkgconfig: avoid appending slash at Cflags
otherwise it can break some compilations, see https://bugs.archlinux.org/task/54763
2017-07-13 16:28:32 +02:00
Bruce Richardson f12ece4547 pkgconfig: add support for extra_cflags
Allow the user to pass in arbitrary cflags for putting into the generated
pkgconfig file.
2017-06-29 11:03:20 -04:00
Jussi Pakkanen 3262be23dc Fixed issues raised in review. 2017-06-26 23:29:42 +03:00
Jussi Pakkanen 80d665e8de Converted some modules. 2017-06-26 21:10:27 +03:00