blob: f76ec3559bc81b1dd08415dca6777939eff91d26 [file]
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
# gen_pkgconfig.py -- writes libname.pc.in files
#
import os
import ezt
from gen_base import build_path_join, TargetLib
def write_pkg_config_dot_in_files(version, sections, install_sources):
"""Write pkg-config .pc.in files for Subversion libraries."""
for target_ob in install_sources:
if not (isinstance(target_ob, TargetLib) and
target_ob.path.startswith('subversion/libsvn_')):
continue
lib_name = target_ob.name
lib_path = sections[lib_name].options.get('path')
lib_deps = sections[lib_name].options.get('libs')
lib_desc = sections[lib_name].options.get('description')
output_path = build_path_join(lib_path, lib_name + '.pc.in')
template = ezt.Template(os.path.join('build', 'generator', 'templates',
'pkg-config.in.ezt'),
compress_whitespace=False)
class _eztdata(object):
def __init__(self, **kw):
vars(self).update(kw)
data = _eztdata(
lib_name=lib_name,
lib_desc=lib_desc,
lib_deps=[],
lib_required=[],
lib_required_private=[],
version=version,
)
# libsvn_foo -> -lsvn_foo-1
data.lib_deps.append('-l%s-%s' % (lib_name.replace('lib', '', 1), data.version))
for lib_dep in lib_deps.split():
if lib_dep == 'apriconv':
# apriconv is part of apr-util, skip it
continue
external_lib = sections[lib_dep].options.get('external-lib')
if external_lib:
### Some of Subversion's internal libraries can appear as external
### libs to handle conditional compilation. Skip these for now.
if external_lib in ['$(SVN_RA_LIB_LINK)', '$(SVN_FS_LIB_LINK)']:
continue
# If the external library is known to support pkg-config,
# add it to the Required: or Required.private: section.
# Otherwise, add the external library to linker flags.
pkg_config = sections[lib_dep].options.get('pkg-config')
if pkg_config:
private = sections[lib_dep].options.get('pkg-config-private')
if private:
data.lib_required_private.append(pkg_config)
else:
data.lib_required.append(pkg_config)
else:
# $(EXTERNAL_LIB) -> @EXTERNAL_LIB@
data.lib_deps.append('@%s@' % external_lib[2:-1])
else:
data.lib_required_private.append(lib_dep)
template.generate(open(output_path, 'w'), data)