On 06.03.2014 10:13, Bert Huijben wrote: > >> -----Original Message----- >> From: s...@apache.org [mailto:s...@apache.org] >> Sent: woensdag 5 maart 2014 23:46 >> To: comm...@subversion.apache.org >> Subject: svn commit: r1574710 - in /subversion/trunk: ./ build/generator/ >> build/generator/templates/ subversion/libsvn_auth_gnome_keyring/ >> subversion/libsvn_auth_kwallet/ subversion/libsvn_client/ >> subversion/libsvn_delta/ subversion/libsvn_diff/ subversion/libs... >> >> Author: stsp >> Date: Wed Mar 5 22:45:48 2014 >> New Revision: 1574710 >> >> URL: http://svn.apache.org/r1574710 >> Log: >> Kick off work on pkg-config support (issue #738, and also #4435). >> >> pkg-config support allows API consumers on UNIX-like systems to link >> to Subversion libraries without having to manually specify the correct >> set of linker flags, including the particular flags for dependencies >> required by a particular build of Subversion (bdb, serf, etc.). >> pkg-config uses libsvn_foo.pc files which describe the set of flags >> required to link to libsvn_foo. >> See http://www.freedesktop.org/wiki/Software/pkg-config/ for more >> information. >> >> Make gen-make.py produce .pc.in files for all Subversion libraries, >> and make the configure script produce .pc files from these .pc.in files. >> Dependency declarations and linker flags are based on information >> parsed from build.conf. >> >> Dependencies of Subversion which support pkg-config can be marked >> as such in build.conf, allowing pkg-config to resolve them. The >> name of the dependency's pkg-config script has to be specified >> without the .pc extension, e.g.: >> >> [gnome-keyring] >> type = lib >> external-lib = $(SVN_GNOME_KEYRING_LIBS) >> pkg-config = gnome-keyring-1 >> >> Dependencies not aware of pkg-config are added to linker flags directly. >> >> To illustrate, the generated libsvn_client.pc file on my system contains: >> >> [[[ >> prefix=/home/stsp/svn/prefix/svn-trunk >> exec_prefix=${prefix} >> libdir=${exec_prefix}/lib >> includedir=${prefix}/include >> >> Name: libsvn_client >> Description: Subversion Client Library >> Version: 1.9.0 >> Required: apr-1 >> Required.private: >> Libs: -L${libdir} -lsvn_wc -lsvn_ra -lsvn_delta -lsvn_diff -lsvn_subr >> Cflags: -I${includedir} >> ]]] >> >> There is no support for optional dependencies between Subversion libraries >> yet, however. For instance, libsvn_client might or might not be linked to >> libsvn_ra_serf. Such dependencies are currently omitted. Also, I'm not >> sure yet what to do in cases where a dependency might be statically or >> dynamically linked, e.g. sqlite. >> >> The .pc files are not being installed yet. I don't want to expose these >> files to systems using pkg-config until all outstanding issues are resolved. >> >> * build/generator/gen_make.py >> (Generator.write): Generate .pc.in files. >> (Generator.write_pkg_config_dot_in_files): New helper function. >> >> * build/generator/templates/pkg-config.in.ezt: New file, the .pc.in template. >> >> * build.conf: apr, apr-util, serf, gnome-keyring, and sqlite support >> pkg-config. >> There may be others (kwallet?) but I haven't investiged more yet. >> I also haven't checked yet if all versions of these dependencies support >> pkg-config. The most recent versions do support it. >> >> * configure.ac >> (SVN_APR_MAJOR_VERSION): Declare. APR's major version number is >> needed >> to select the correct pkg-config script name (e.g. apr-1 or apr-2). >> Generate .pc files from pc.in files. >> >> * subversion/libsvn_auth_gnome_keyring, subversion/libsvn_auth_kwallet, >> subversion/libsvn_client, subversion/libsvn_delta, subversion/libsvn_diff, >> subversion/libsvn_fs, subversion/libsvn_fs_base, subversion/libsvn_fs_fs, >> subversion/libsvn_fs_util, subversion/libsvn_fs_x, subversion/libsvn_ra, >> subversion/libsvn_ra_local, subversion/libsvn_ra_serf, >> subversion/libsvn_ra_svn, subversion/libsvn_repos, >> subversion/libsvn_subr, >> subversion/libsvn_wc: Ignore generated .pc and .pc.in files. >> >> Added: >> subversion/trunk/build/generator/templates/pkg-config.in.ezt (with >> props) >> Modified: >> subversion/trunk/build.conf >> subversion/trunk/build/generator/gen_make.py >> subversion/trunk/configure.ac >> subversion/trunk/subversion/libsvn_auth_gnome_keyring/ (props >> changed) >> subversion/trunk/subversion/libsvn_auth_kwallet/ (props changed) >> subversion/trunk/subversion/libsvn_client/ (props changed) >> subversion/trunk/subversion/libsvn_delta/ (props changed) >> subversion/trunk/subversion/libsvn_diff/ (props changed) >> subversion/trunk/subversion/libsvn_fs/ (props changed) >> subversion/trunk/subversion/libsvn_fs_base/ (props changed) >> subversion/trunk/subversion/libsvn_fs_fs/ (props changed) >> subversion/trunk/subversion/libsvn_fs_util/ (props changed) >> subversion/trunk/subversion/libsvn_fs_x/ (props changed) >> subversion/trunk/subversion/libsvn_ra/ (props changed) >> subversion/trunk/subversion/libsvn_ra_local/ (props changed) >> subversion/trunk/subversion/libsvn_ra_serf/ (props changed) >> subversion/trunk/subversion/libsvn_ra_svn/ (props changed) >> subversion/trunk/subversion/libsvn_repos/ (props changed) >> subversion/trunk/subversion/libsvn_subr/ (props changed) >> subversion/trunk/subversion/libsvn_wc/ (props changed) >> >> Modified: subversion/trunk/build.conf >> URL: >> http://svn.apache.org/viewvc/subversion/trunk/build.conf?rev=1574710&r1 >> =1574709&r2=1574710&view=diff >> ========================================================== >> ==================== >> --- subversion/trunk/build.conf (original) >> +++ subversion/trunk/build.conf Wed Mar 5 22:45:48 2014 >> @@ -1303,10 +1303,12 @@ testing = skip >> type = lib >> external-lib = $(SVN_APR_LIBS) >> msvc-libs = ws2_32.lib rpcrt4.lib mswsock.lib >> +pkg-config = apr-@SVN_APR_MAJOR_VERSION@ >> >> [aprutil] >> type = lib >> external-lib = $(SVN_APRUTIL_LIBS) >> +pkg-config = apr-util-@SVN_APR_MAJOR_VERSION@ >> >> [apriconv] >> type = lib >> @@ -1327,6 +1329,7 @@ external-lib = $(SVN_DB_LIBS) >> [gnome-keyring] >> type = lib >> external-lib = $(SVN_GNOME_KEYRING_LIBS) >> +pkg-config = gnome-keyring-1 >> >> [kwallet] >> type = lib >> @@ -1363,10 +1366,14 @@ type = lib >> external-lib = $(SVN_SERF_LIBS) >> libs = apr aprutil openssl xml zlib >> msvc-libs = secur32.lib >> +pkg-config = serf-1 >> +pkg-config-private = yes >> >> [sqlite] >> type = lib >> external-lib = $(SVN_SQLITE_LIBS) >> +pkg-config = sqlite3 >> +pkg-config-private = yes >> >> [xml] >> type = lib >> >> Modified: subversion/trunk/build/generator/gen_make.py >> URL: >> http://svn.apache.org/viewvc/subversion/trunk/build/generator/gen_make >> .py?rev=1574710&r1=1574709&r2=1574710&view=diff >> ========================================================== >> ==================== >> --- subversion/trunk/build/generator/gen_make.py (original) >> +++ subversion/trunk/build/generator/gen_make.py Wed Mar 5 22:45:48 >> 2014 >> @@ -472,6 +472,8 @@ class Generator(gen_base.GeneratorBase): >> >> self.write_transform_libtool_scripts(install_sources) >> >> + self.write_pkg_config_dot_in_files(install_sources) >> + >> def write_standalone(self): >> """Write autogen-standalone.mk""" >> >> @@ -583,6 +585,64 @@ DIR=`pwd` >> libdep_cache[target_name] = sorted(libs) >> return libdep_cache[target_name] >> >> + def write_pkg_config_dot_in_files(self, install_sources): >> + """Write pkg-config .pc.in files for Subversion libraries.""" >> + for target_ob in install_sources: >> + if not (isinstance(target_ob, gen_base.TargetLib) and >> + target_ob.path.startswith('subversion/libsvn_')): >> + continue >> + >> + lib_name = target_ob.name >> + lib_path = self.sections[lib_name].options.get('path') >> + lib_deps = self.sections[lib_name].options.get('libs') >> + lib_desc = self.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=[], >> + ) >> + for lib_dep in lib_deps.split(): >> + if lib_dep == 'apriconv': >> + # apriconv is part of apr-util, skip it >> + continue >> + if lib_dep == 'intl': >> + # this library seems to be used only by the windows build, skip it >> + continue > I would guess this is also used on unix when NLS is enabled? > > Or is it assumed that gettext is part of the system libraries?
Of course we use libintl on Unix, and we can't assume it's a system library. It's not on OSX, which is very much Unix, for example. -- Brane -- Branko Čibej | Director of Subversion WANdisco // Non-Stop Data e. br...@wandisco.com