You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rh...@apache.org on 2013/07/20 15:47:27 UTC
svn commit: r1505131 - in /subversion/trunk/build/generator: gen_win.py
gen_win_dependencies.py
Author: rhuijben
Date: Sat Jul 20 13:47:27 2013
New Revision: 1505131
URL: http://svn.apache.org/r1505131
Log:
Extend the dependency handling in the Windows project generator by allowing
dependencies to define multiple defines and include directories.
The defines allow major code cleanup and the multiple include directories
will be necessary to switch the jdk/javahl detection.
* build/generator/gen_win.py
(get_win_defines): Include defines from external dependencies. Remove all
custom defines that should be handled by the dependencies.
(get_win_includes): Handle multiple includes. Handle the path normalization
in one place instead of everywhere except a few others.
(get_win_lib_dirs): Remove sqlite_inline reference.
* build/generator/gen_win_dependencies.py
(SVNCommonLibrary): Support multiple include directories and defines.
(_find_apr,
_find_apr_util_and_expat): Handle defines for static apr.
(_find_bdb): Publish that we have BDB.
(_find_ruby): Provide ruby define.
(_find_serf): Provide serf defines.
(_find_sasl): Publish that we have sasl.
(_find_sqlite): Handle inline define for amalgamation support.
Modified:
subversion/trunk/build/generator/gen_win.py
subversion/trunk/build/generator/gen_win_dependencies.py
Modified: subversion/trunk/build/generator/gen_win.py
URL: http://svn.apache.org/viewvc/subversion/trunk/build/generator/gen_win.py?rev=1505131&r1=1505130&r2=1505131&view=diff
==============================================================================
--- subversion/trunk/build/generator/gen_win.py (original)
+++ subversion/trunk/build/generator/gen_win.py Sat Jul 20 13:47:27 2013
@@ -720,62 +720,39 @@ class WinGeneratorBase(gen_win_dependenc
elif cfg == 'Release':
fakedefines.append("NDEBUG")
- if self.sqlite_inline:
- fakedefines.append("SVN_SQLITE_INLINE")
-
if isinstance(target, gen_base.TargetApacheMod):
if target.name == 'mod_dav_svn':
fakedefines.extend(["AP_DECLARE_EXPORT"])
- if target.name.find('ruby') == -1:
- fakedefines.append("snprintf=_snprintf")
-
if isinstance(target, gen_base.TargetSWIG):
fakedefines.append("SWIG_GLOBAL")
- # Expect rb_errinfo() to be available in Ruby 1.9+,
- # rather than ruby_errinfo.
- if isinstance(target, gen_base.TargetSWIGLib) and target.lang == 'ruby':
- ver = self._libraries['ruby'].version.split('.')
- ver = tuple(map(int, ver))
- if ver > (1, 8, 0):
- fakedefines.extend(["HAVE_RB_ERRINFO"])
-
- if self.static_apr:
- fakedefines.extend(["APR_DECLARE_STATIC", "APU_DECLARE_STATIC"])
-
- # XXX: Check if db is present, and if so, let apr-util know
- # XXX: This is a hack until the apr build system is improved to
- # XXX: know these things for itself.
- if 'db' in self._libraries:
- fakedefines.append("APU_HAVE_DB=1")
- fakedefines.append("SVN_LIBSVN_FS_LINKS_FS_BASE=1")
+ for dep in self.get_win_depends(target, FILTER_EXTERNALLIBS):
+ if dep.external_lib:
+ for elib in re.findall('\$\(SVN_([^\)]*)_LIBS\)', dep.external_lib):
+ external_lib = elib.lower()
+
+ if external_lib in self._libraries:
+ lib = self._libraries[external_lib]
+
+ if lib.defines:
+ fakedefines.extend(lib.defines)
# check if they wanted nls
if self.enable_nls:
fakedefines.append("ENABLE_NLS")
- if 'serf' in self._libraries:
- fakedefines.append("SVN_HAVE_SERF")
- fakedefines.append("SVN_LIBSVN_CLIENT_LINKS_RA_SERF")
-
# check we have sasl
- if 'sasl' in self._libraries:
- fakedefines.append("SVN_HAVE_SASL")
-
if target.name.endswith('svn_subr'):
fakedefines.append("SVN_USE_WIN32_CRASHHANDLER")
- # use static linking to Expat
- fakedefines.append("XML_STATIC")
-
return fakedefines
def get_win_includes(self, target):
"Return the list of include directories for target"
- fakeincludes = [ self.apath("subversion/include"),
- self.apath("subversion") ]
+ fakeincludes = [ "subversion/include",
+ "subversion" ]
for dep in self.get_win_depends(target, FILTER_EXTERNALLIBS):
if dep.external_lib:
@@ -785,23 +762,24 @@ class WinGeneratorBase(gen_win_dependenc
if external_lib in self._libraries:
lib = self._libraries[external_lib]
- fakeincludes.append(self.apath(lib.include_dir))
+ fakeincludes.extend(lib.include_dirs)
if target.name == 'mod_authz_svn':
- fakeincludes.extend([ self.apath(self.httpd_path, "modules/aaa") ])
+ fakeincludes.extend([ os.path.join(self.httpd_path, "modules/aaa") ])
if isinstance(target, gen_base.TargetApacheMod):
- fakeincludes.extend([ self.apath(self.httpd_path, "include") ])
+ fakeincludes.extend([ os.path.join(self.httpd_path, "include") ])
elif isinstance(target, gen_base.TargetSWIG):
util_includes = "subversion/bindings/swig/%s/libsvn_swig_%s" \
% (target.lang,
gen_base.lang_utillib_suffix[target.lang])
- fakeincludes.extend([ self.path("subversion/bindings/swig"),
- self.path("subversion/bindings/swig/proxy"),
- self.path("subversion/bindings/swig/include"),
- self.path(util_includes) ])
+ fakeincludes.extend([ "subversion/bindings/swig",
+ "subversion/bindings/swig/proxy",
+ "subversion/bindings/swig/include",
+ util_includes
+ ])
else:
- fakeincludes.extend([ self.path("subversion/bindings/swig/proxy") ])
+ fakeincludes.extend(["subversion/bindings/swig/proxy"])
if (isinstance(target, gen_base.TargetSWIG)
or isinstance(target, gen_base.TargetSWIGLib)):
@@ -817,7 +795,7 @@ class WinGeneratorBase(gen_win_dependenc
# After the language specific includes include the generic libdir,
# to allow overriding a generic with a per language include
- fakeincludes.append(self.apath(self.swig_libdir, lang_subdir))
+ fakeincludes.append(os.path.join(self.swig_libdir, lang_subdir))
fakeincludes.append(self.swig_libdir)
if target.name == "libsvnjavahl" and self.jdk_path:
@@ -827,7 +805,7 @@ class WinGeneratorBase(gen_win_dependenc
if target.name.find('cxxhl') != -1:
fakeincludes.append(self.path("subversion/bindings/cxxhl/include"))
- return gen_base.unique(fakeincludes)
+ return gen_base.unique(map(self.apath, fakeincludes))
def get_win_lib_dirs(self, target, cfg):
"Return the list of library directories for target"
@@ -853,9 +831,6 @@ class WinGeneratorBase(gen_win_dependenc
fakelibdirs.append(lib_dir)
- if not self.sqlite_inline:
- fakelibdirs.append(self.apath(self.sqlite_path, "lib"))
-
if isinstance(target, gen_base.TargetApacheMod):
fakelibdirs.append(self.apath(self.httpd_path, cfg))
if target.name == 'mod_dav_svn':
Modified: subversion/trunk/build/generator/gen_win_dependencies.py
URL: http://svn.apache.org/viewvc/subversion/trunk/build/generator/gen_win_dependencies.py?rev=1505131&r1=1505130&r2=1505131&view=diff
==============================================================================
--- subversion/trunk/build/generator/gen_win_dependencies.py (original)
+++ subversion/trunk/build/generator/gen_win_dependencies.py Sat Jul 20 13:47:27 2013
@@ -52,12 +52,17 @@ import ezt
class SVNCommonLibrary:
- def __init__(self, name, include_dir, lib_dir, lib_name, version=None,
+ def __init__(self, name, include_dirs, lib_dir, lib_name, version=None,
debug_lib_dir=None, debug_lib_name=None, dll_dir=None,
dll_name=None, debug_dll_dir=None, debug_dll_name=None,
- is_src=False):
+ is_src=False, defines=[]):
self.name = name
- self.include_dir = include_dir
+ if include_dirs:
+ self.include_dirs = include_dirs if isinstance(include_dirs, list) \
+ else [include_dirs]
+ else:
+ self.include_dirs = []
+ self.defines = defines if not defines or isinstance(defines, list) else [defines]
self.lib_dir = lib_dir
self.lib_name = lib_name
self.version = version
@@ -336,12 +341,14 @@ class GenDependenciesBase(gen_base.Gener
if major > 0:
suffix = '-%d' % major
+ defines = []
if self.static_apr:
lib_name = 'apr%s.lib' % suffix
lib_dir = os.path.join(self.apr_path, 'LibR')
dll_dir = None
debug_dll_dir = None
-
+ defines.extend(["APR_DECLARE_STATIC"])
+
if not os.path.isdir(lib_dir) and \
os.path.isfile(os.path.join(self.apr_path, 'lib', lib_name)):
# Installed APR instead of APR-Source
@@ -374,7 +381,8 @@ class GenDependenciesBase(gen_base.Gener
debug_lib_dir=debug_lib_dir,
dll_dir=dll_dir,
dll_name=dll_name,
- debug_dll_dir=debug_dll_dir)
+ debug_dll_dir=debug_dll_dir,
+ defines=defines)
def _find_apr_util_and_expat(self):
"Find the APR-util library and version"
@@ -424,11 +432,13 @@ class GenDependenciesBase(gen_base.Gener
if major > 0:
suffix = '-%d' % major
+ defines = []
if self.static_apr:
lib_name = 'aprutil%s.lib' % suffix
lib_dir = os.path.join(self.apr_util_path, 'LibR')
dll_dir = None
debug_dll_dir = None
+ defines.extend(["APR_DECLARE_STATIC"])
if not os.path.isdir(lib_dir) and \
os.path.isfile(os.path.join(self.apr_util_path, 'lib', lib_name)):
@@ -463,7 +473,8 @@ class GenDependenciesBase(gen_base.Gener
debug_lib_dir=debug_lib_dir,
dll_dir=dll_dir,
dll_name=dll_name,
- debug_dll_dir=debug_dll_dir)
+ debug_dll_dir=debug_dll_dir,
+ defines=defines)
# And now find expat
# If we have apr-util as a source location, it is in a subdir.
@@ -500,7 +511,8 @@ class GenDependenciesBase(gen_base.Gener
self._libraries['xml'] = SVNCommonLibrary('expat', inc_path, lib_dir,
'xml.lib', xml_version,
- debug_lib_dir = debug_lib_dir)
+ debug_lib_dir = debug_lib_dir,
+ defines=['XML_STATIC'])
def _find_zlib(self):
"Find the ZLib library and version"
@@ -626,12 +638,17 @@ class GenDependenciesBase(gen_base.Gener
else:
debug_dll_name = None
+ # Usually apr-util doesn't find BDB on Windows, so we help apr-util
+ # by defining the value ourselves (Legacy behavior)
+ defines = ['APU_HAVE_DB=1', 'SVN_LIBSVN_FS_LINKS_FS_BASE']
+
self._libraries['db'] = SVNCommonLibrary('db', inc_path, lib_dir, lib_name,
version,
debug_lib_name=debug_lib_name,
dll_dir=dll_dir,
dll_name=dll_name,
- debug_dll_name=debug_dll_name)
+ debug_dll_name=debug_dll_name,
+ defines=defines)
# For compatibility with old code
self.bdb_lib = self._libraries['db'].lib_name
@@ -752,8 +769,18 @@ class GenDependenciesBase(gen_base.Gener
if not lib_dir:
return
+ # Visual C++ doesn't have a standard compliant snprintf yet
+ # (Will probably be added in VS2013 + 1)
+ defines = ['snprintf=_snprintf']
+
+ ver = ruby_version.split('.')
+ ver = tuple(map(int, ver))
+ if ver > (1, 8, 0):
+ defines.extend(["HAVE_RB_ERRINFO"])
+
self._libraries['ruby'] = SVNCommonLibrary('ruby', inc_dir, lib_dir,
- ruby_lib, ruby_version)
+ ruby_lib, ruby_version,
+ defines=defines)
def _find_python(self, show_warnings):
"Find the appropriate options for creating SWIG-based Python modules"
@@ -969,10 +996,13 @@ class GenDependenciesBase(gen_base.Gener
else:
lib_name = 'serf.lib'
+ defines = ['SVN_HAVE_SERF', 'SVN_LIBSVN_CLIENT_LINKS_RA_SERF']
+
self._libraries['serf'] = SVNCommonLibrary('serf', inc_dir, lib_dir,
lib_name, serf_version,
debug_lib_dir=debug_lib_dir,
- is_src=is_src)
+ is_src=is_src,
+ defines=defines)
def _find_sasl(self, show_warning):
"Check if sals is available"
@@ -1027,7 +1057,8 @@ class GenDependenciesBase(gen_base.Gener
self._libraries['sasl'] = SVNCommonLibrary('sasl', inc_dir, lib_dir,
'libsasl.lib', sasl_version,
dll_dir=dll_dir,
- dll_name=dll_name)
+ dll_name=dll_name,
+ defines=['SVN_HAVE_SASL'])
def _find_libintl(self, show_warning):
"Find gettext support"
@@ -1097,7 +1128,8 @@ class GenDependenciesBase(gen_base.Gener
lib_dir = None
dll_dir = None
dll_name = None
- amalgamation = False
+ defines = []
+
lib_name = 'sqlite3.lib'
if os.path.isfile(os.path.join(sqlite_base, 'include/sqlite3.h')):
@@ -1124,7 +1156,7 @@ class GenDependenciesBase(gen_base.Gener
inc_dir = sqlite_base
lib_dir = None
lib_name = None
- amalgamation = True
+ defines.append('SVN_SQLITE_INLINE')
else:
sys.stderr.write("ERROR: SQLite not found\n" % self.sqlite_path)
sys.stderr.write("Use '--with-sqlite' option to configure sqlite location.\n");
@@ -1153,11 +1185,11 @@ class GenDependenciesBase(gen_base.Gener
sqlite_version))
sys.exit(1)
- self.sqlite_inline = amalgamation
self._libraries['sqlite'] = SVNCommonLibrary('sqlite', inc_dir, lib_dir,
lib_name, sqlite_version,
dll_dir=dll_dir,
- dll_name=dll_name)
+ dll_name=dll_name,
+ defines=defines)
# ============================================================================
# This is a cut-down and modified version of code from: