diff options
-rw-r--r-- | mesonbuild/modules/pkgconfig.py | 48 |
1 files changed, 26 insertions, 22 deletions
diff --git a/mesonbuild/modules/pkgconfig.py b/mesonbuild/modules/pkgconfig.py index 883f2c4..e7646c9 100644 --- a/mesonbuild/modules/pkgconfig.py +++ b/mesonbuild/modules/pkgconfig.py @@ -63,23 +63,25 @@ class PkgConfigModule: 'Requires.private: {}\n'.format(' '.join(priv_reqs))) if len(conflicts) > 0: ofile.write('Conflicts: {}\n'.format(' '.join(conflicts))) - ofile.write('Libs: -L${libdir}') - msg = 'Library target {0!r} has {1!r} set. Compilers ' \ - 'may not find it from its \'-l{2}\' linker flag in the ' \ - '{3!r} pkg-config file.' - for l in libraries: - if l.custom_install_dir: - ofile.write(' -L${prefix}/%s ' % l.custom_install_dir) - lname = self._get_lname(l, msg, pcfile) - # If using a custom suffix, the compiler may not be able to - # find the library - if l.name_suffix_set: - mlog.log(mlog.red('WARNING:'), msg.format(l.name, 'name_suffix', lname, pcfile)) - ofile.write(' -l{} '.format(lname)) - ofile.write('\n') + def generate_libs_flags(libs): + msg = 'Library target {0!r} has {1!r} set. Compilers ' \ + 'may not find it from its \'-l{2}\' linker flag in the ' \ + '{3!r} pkg-config file.' + for l in libs: + if l.custom_install_dir: + yield '-L${prefix}/%s ' % l.custom_install_dir + else: + yield '-L${libdir}' + lname = self._get_lname(l, msg, pcfile) + # If using a custom suffix, the compiler may not be able to + # find the library + if l.name_suffix_set: + mlog.log(mlog.red('WARNING:'), msg.format(l.name, 'name_suffix', lname, pcfile)) + yield '-l%s' % lname + if len(libraries) > 0: + ofile.write('Libs: {}\n'.format(' '.join(generate_libs_flags(libraries)))) if len(priv_libs) > 0: - ofile.write( - 'Libs.private: -L${libdir} {}\n'.format(' '.join(priv_libs))) + ofile.write('Libs.private: {}\n'.format(' '.join(generate_libs_flags(priv_libs)))) ofile.write('Cflags:') for h in subdirs: if h == '.': @@ -88,10 +90,7 @@ class PkgConfigModule: ofile.write(os.path.join('-I${includedir}', h)) ofile.write('\n') - def generate(self, state, args, kwargs): - if len(args) > 0: - raise mesonlib.MesonException('Pkgconfig_gen takes no positional arguments.') - libs = kwargs.get('libraries', []) + def process_libs(self, libs): if not isinstance(libs, list): libs = [libs] processed_libs = [] @@ -101,7 +100,13 @@ class PkgConfigModule: if not isinstance(l, (build.SharedLibrary, build.StaticLibrary)): raise mesonlib.MesonException('Library argument not a library object.') processed_libs.append(l) - libs = processed_libs + return processed_libs + + def generate(self, state, args, kwargs): + if len(args) > 0: + raise mesonlib.MesonException('Pkgconfig_gen takes no positional arguments.') + libs = self.process_libs(kwargs.get('libraries', [])) + priv_libs = self.process_libs(kwargs.get('libraries_private', [])) subdirs = mesonlib.stringlistify(kwargs.get('subdirs', ['.'])) version = kwargs.get('version', '') if not isinstance(version, str): @@ -121,7 +126,6 @@ class PkgConfigModule: pub_reqs = mesonlib.stringlistify(kwargs.get('requires', [])) priv_reqs = mesonlib.stringlistify(kwargs.get('requires_private', [])) conflicts = mesonlib.stringlistify(kwargs.get('conflicts', [])) - priv_libs = mesonlib.stringlistify(kwargs.get('libraries_private', [])) pcfile = filebase + '.pc' pkgroot = kwargs.get('install_dir',None) if pkgroot is None: |