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/12 21:23:25 UTC
svn commit: r1502662 - in /subversion/trunk/build/generator: gen_win.py
gen_win_dependencies.py
Author: rhuijben
Date: Fri Jul 12 19:23:25 2013
New Revision: 1502662
URL: http://svn.apache.org/r1502662
Log:
In the Windows project file generator: update openssl and serf to the new
dependency framework. The serf in-tree build needs openssl and we need
openssl for running the tests.
* build/generator/gen_win.py
(get_install_targets): Don't build a serf project if we use an installed
serf.
(get_external_project): Update check to avoid .serf_lib
(get_win_defines): Use modern checks for library availability.
(get_win_includes,
get_win_lib_dirs,
get_win_libs): Remove hardcoded serf handling.
(write_serf_project_file): Use modern check.
* build/generator/gen_win_dependencies.py
(GenDependenciesBase): Remove now unused variable.
(find_libraries): Organize library find calls. Avoid 2 lines for openssl.
(_find_zlib): Find ml from here.
(_find_db): Remove unneeded '\n'
(_find_openssl): New function.
(_get_serf_version): Add include dir argument to allow probing in more
locations.
(_find_serf): Fill library object.
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=1502662&r1=1502661&r2=1502662&view=diff
==============================================================================
--- subversion/trunk/build/generator/gen_win.py (original)
+++ subversion/trunk/build/generator/gen_win.py Fri Jul 12 19:23:25 2013
@@ -193,10 +193,12 @@ class WinGeneratorBase(gen_win_dependenc
install_targets = [x for x in install_targets if not (isinstance(x, gen_base.TargetExe)
and x.install == 'bdb-test')]
- # Drop the serf target if we don't have both serf and openssl
- if not self.serf_lib:
- install_targets = [x for x in install_targets if x.name != 'serf']
+ # Drop the ra_serf target if we don't have serf
+ if 'serf' not in self._libraries:
install_targets = [x for x in install_targets if x.name != 'libsvn_ra_serf']
+ # Drop the serf target if we don't build serf ourselves
+ if 'serf' not in self._libraries or not self._libraries['serf'].is_src:
+ install_targets = [x for x in install_targets if x.name != 'serf']
# Drop the swig targets if we don't have swig
if not self.swig_path and not self.swig_libdir:
@@ -521,7 +523,7 @@ class WinGeneratorBase(gen_win_dependenc
and target.external_project):
return None
- if target.external_project[:5] == 'serf/' and self.serf_lib:
+ if target.external_project[:5] == 'serf/' and 'serf' in self._libraries:
path = self.serf_path + target.external_project[4:]
elif target.external_project.find('/') != -1:
path = target.external_project
@@ -718,7 +720,7 @@ class WinGeneratorBase(gen_win_dependenc
# 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 self.bdb_lib:
+ if 'db' in self._libraries:
fakedefines.append("APU_HAVE_DB=1")
fakedefines.append("SVN_LIBSVN_FS_LINKS_FS_BASE=1")
@@ -726,7 +728,7 @@ class WinGeneratorBase(gen_win_dependenc
if self.enable_nls:
fakedefines.append("ENABLE_NLS")
- if self.serf_lib:
+ if 'serf' in self._libraries:
fakedefines.append("SVN_HAVE_SERF")
fakedefines.append("SVN_LIBSVN_CLIENT_LINKS_RA_SERF")
@@ -782,9 +784,6 @@ class WinGeneratorBase(gen_win_dependenc
if self.libintl_path:
fakeincludes.append(self.apath(self.libintl_path, 'inc'))
- if self.serf_lib:
- fakeincludes.append(self.apath(self.serf_path))
-
if self.swig_libdir \
and (isinstance(target, gen_base.TargetSWIG)
or isinstance(target, gen_base.TargetSWIGLib)):
@@ -851,8 +850,6 @@ class WinGeneratorBase(gen_win_dependenc
if self.sasl_path:
fakelibdirs.append(self.apath(self.sasl_path, "lib"))
- if self.serf_lib:
- fakelibdirs.append(self.apath(msvc_path_join(self.serf_path, cfg)))
if isinstance(target, gen_base.TargetApacheMod):
fakelibdirs.append(self.apath(self.httpd_path, cfg))
@@ -880,12 +877,6 @@ class WinGeneratorBase(gen_win_dependenc
if self.bdb_lib:
dblib = self.bdb_lib+(debug and 'd.lib' or '.lib')
- if self.serf_lib:
- if self.serf_ver_maj != 0:
- serflib = 'serf-%d.lib' % self.serf_ver_maj
- else:
- serflib = 'serf.lib'
-
sasllib = None
if self.sasl_path:
sasllib = 'libsasl.lib'
@@ -940,11 +931,6 @@ class WinGeneratorBase(gen_win_dependenc
nondeplibs.append('sqlite3.lib')
# else: # Is not a linkable library
- elif external_lib == 'serf':
-
- if self.serf_lib:
- nondeplibs.append(serflib)
-
elif external_lib == 'sasl':
if sasllib:
@@ -1033,8 +1019,13 @@ class WinGeneratorBase(gen_win_dependenc
))
def write_serf_project_file(self, name):
- if not self.serf_lib:
+ if 'serf' not in self._libraries:
return
+
+ serf = self._libraries['serf']
+
+ if not serf.is_src:
+ return # Using an installed library
serf_path = os.path.abspath(self.serf_path)
serf_sources = map(lambda x : os.path.relpath(x, self.serf_path),
@@ -1046,10 +1037,6 @@ class WinGeneratorBase(gen_win_dependenc
glob.glob(os.path.join(serf_path, '*.h'))
+ glob.glob(os.path.join(serf_path, 'auth', '*.h'))
+ glob.glob(os.path.join(serf_path, 'buckets', '*.h')))
- if self.serf_ver_maj != 0:
- serflib = 'serf-%d.lib' % self.serf_ver_maj
- else:
- serflib = 'serf.lib'
apr_static = self.static_apr and 'APR_STATIC=1' or ''
openssl_static = self.static_openssl and 'OPENSSL_STATIC=1' or ''
@@ -1067,7 +1054,7 @@ class WinGeneratorBase(gen_win_dependenc
('project_guid', self.makeguid('serf')),
('apr_static', apr_static),
('openssl_static', openssl_static),
- ('serf_lib', serflib),
+ ('serf_lib', serf.lib_name),
))
def move_proj_file(self, path, name, params=()):
Modified: subversion/trunk/build/generator/gen_win_dependencies.py
URL: http://svn.apache.org/viewvc/subversion/trunk/build/generator/gen_win_dependencies.py?rev=1502662&r1=1502661&r2=1502662&view=diff
==============================================================================
--- subversion/trunk/build/generator/gen_win_dependencies.py (original)
+++ subversion/trunk/build/generator/gen_win_dependencies.py Fri Jul 12 19:23:25 2013
@@ -111,7 +111,6 @@ class GenDependenciesBase(gen_base.Gener
self.apr_util_path = 'apr-util'
self.apr_iconv_path = 'apr-iconv'
self.serf_path = None
- self.serf_lib = None
self.bdb_path = 'db4-win32'
self.httpd_path = None
self.libintl_path = None
@@ -256,11 +255,17 @@ class GenDependenciesBase(gen_base.Gener
self.find_libraries(False)
def find_libraries(self, show_warnings):
-
+
+ # Required dependencies
self._find_apr()
self._find_apr_util_and_expat()
- # Find Berkeley DB
+ self._find_zlib()
+
+ # Optional dependencies
self._find_bdb(show_warnings)
+ self._find_openssl(show_warnings)
+ self._find_serf(show_warnings)
+
if show_warnings:
# Find the right Ruby include and libraries dirs and
@@ -282,17 +287,13 @@ class GenDependenciesBase(gen_base.Gener
# Find Sqlite
self._find_sqlite()
- # Look for ZLib and ML
- if self.zlib_path:
- self._find_zlib()
- self._find_ml()
-
- # Find serf and its dependencies
- if self.serf_path:
- self._find_serf()
if show_warnings:
+ printed = []
for lib in self._libraries.values():
+ if lib.name in printed:
+ continue
+ printed.append(lib.name)
print('Found %s %s' % (lib.name, lib.version))
def _find_apr(self):
@@ -551,6 +552,8 @@ class GenDependenciesBase(gen_base.Gener
self.zlib_version,
debug_lib_name=debug_lib_name,
is_src=is_src)
+ if is_src:
+ self._find_ml()
def _find_bdb(self, show_warnings):
"Find the Berkeley DB library and version"
@@ -564,7 +567,7 @@ class GenDependenciesBase(gen_base.Gener
if not self.bdb_path or not os.path.isfile(db_h_path):
if show_warnings and self.bdb_path:
print('WARNING: \'%s\' not found' % (db_h_path,))
- print("Use '--with-berkeley-db' to configure BDB location.\n");
+ print("Use '--with-berkeley-db' to configure BDB location.");
return
# Obtain bdb version from db.h
@@ -626,6 +629,61 @@ class GenDependenciesBase(gen_base.Gener
# For compatibility with old code
self.bdb_lib = self._libraries['db'].lib_name
+ def _find_openssl(self, show_warnings):
+ "Find openssl"
+
+ if not self.openssl_path:
+ return
+
+ version_path = os.path.join(self.openssl_path, 'inc32/openssl/opensslv.h')
+ if os.path.isfile(version_path):
+ # We have an OpenSSL Source location
+ # For legacy reason
+ inc_dir = os.path.join(self.openssl_path, 'inc32')
+ if self.static_openssl:
+ lib_dir = os.path.join(self.openssl_path, 'out32')
+ else:
+ lib_dir = os.path.join(self.openssl_path, 'out32dll')
+ bin_dir = os.path.join(self.openssl_path, 'out32dll')
+ elif os.path.isfile(os.path.join(self.openssl_path,
+ 'include/openssl/opensslv.h')):
+ version_path = os.path.join(self.openssl_path,
+ 'include/openssl/opensslv.h')
+ inc_dir = os.path.join(self.openssl_path, 'include')
+ lib_dir = os.path.join(self.openssl_path, 'lib')
+ if self.static_openss:
+ self.bin_dir = None
+ else:
+ self.bin_dir = os.path.join(self.openssl_path, 'bin')
+ else:
+ if show_warning:
+ print('WARNING: \'opensslv.h\' not found')
+ print("Use '--with-openssl' to configure openssl location.");
+ return
+
+ txt = open(version_path).read()
+
+ vermatch = re.search(
+ r'#define OPENSSL_VERSION_TEXT "OpenSSL\s+((\d+)\.(\d+).(\d+)([^ -]*))',
+ txt)
+
+ version = (int(vermatch.group(2)),
+ int(vermatch.group(3)),
+ int(vermatch.group(4)))
+ openssl_version = vermatch.group(1)
+
+ self._libraries['ssleay32'] = SVNCommonLibrary('openssl', inc_dir, lib_dir,
+ 'ssleay32.lib',
+ openssl_version,
+ dll_name='ssleay32.dll',
+ dll_dir=bin_dir)
+
+ self._libraries['libeay32'] = SVNCommonLibrary('openssl', inc_dir, lib_dir,
+ 'libeay32.lib',
+ openssl_version,
+ dll_name='libeay32.dll',
+ dll_dir=bin_dir)
+
def _find_perl(self):
"Find the right perl library name to link swig bindings with"
self.perl_includes = []
@@ -820,21 +878,21 @@ class GenDependenciesBase(gen_base.Gener
finally:
fp.close()
- def _get_serf_version(self):
+ def _get_serf_version(self, inc_dir):
"Retrieves the serf version from serf.h"
# shouldn't be called unless serf is there
- assert self.serf_path and os.path.exists(self.serf_path)
+ assert inc_dir and os.path.exists(inc_dir)
self.serf_ver_maj = None
self.serf_ver_min = None
self.serf_ver_patch = None
# serf.h should be present
- if not os.path.exists(os.path.join(self.serf_path, 'serf.h')):
+ if not os.path.exists(os.path.join(inc_dir, 'serf.h')):
return None, None, None
- txt = open(os.path.join(self.serf_path, 'serf.h')).read()
+ txt = open(os.path.join(inc_dir, 'serf.h')).read()
maj_match = re.search(r'SERF_MAJOR_VERSION\s+(\d+)', txt)
min_match = re.search(r'SERF_MINOR_VERSION\s+(\d+)', txt)
@@ -848,31 +906,60 @@ class GenDependenciesBase(gen_base.Gener
return self.serf_ver_maj, self.serf_ver_min, self.serf_ver_patch
- def _find_serf(self):
+ def _find_serf(self, show_warning):
"Check if serf and its dependencies are available"
minimal_serf_version = (1, 2, 1)
- self.serf_lib = None
- if self.serf_path and os.path.exists(self.serf_path):
- if self.openssl_path and os.path.exists(self.openssl_path):
- self.serf_lib = 'serf'
- version = self._get_serf_version()
- if None in version:
- msg = 'Unknown serf version found; but, will try to build ' \
- 'ra_serf.'
- else:
- self.serf_ver = '.'.join(str(v) for v in version)
- if version < minimal_serf_version:
- self.serf_lib = None
- msg = 'Found serf %s, but >= %s is required. ra_serf will not be built.\n' % \
- (self.serf_ver, '.'.join(str(v) for v in minimal_serf_version))
- else:
- msg = 'Found serf %s' % self.serf_ver
- print(msg)
+
+ if not self.serf_path:
+ return
+
+ inc_dir = self.serf_path
+
+ if os.path.isfile(os.path.join(inc_dir, 'serf.h')):
+ # Source layout
+ version = self._get_serf_version(inc_dir)
+
+ if version < (1, 3, 0):
+ lib_dir = os.path.join(self.serf_path, 'Release')
+ debug_lib_dir = os.path.join(self.serf_path, 'Debug')
else:
- print('openssl not found, ra_serf will not be built\n')
+ lib_dir = self.serf_path
+ debug_lib_dir = None
+ is_src = True
+ elif os.path.isfile(os.path.join(self.serf_path, 'include/serf-1/serf.h')):
+ # Install layout
+ inc_dir = os.path.join(self.serf_path, 'include/serf-1')
+ version = self._get_serf_version(inc_dir)
+ lib_dir = os.path.join(inc_dir, 'lib')
+ debug_lib_dir = None
+ is_src = False
+ else:
+ if show_warning:
+ print('WARNING: \'serf.h\' not found')
+ print("Use '--with-serf' to configure serf location.");
+ return
+
+ if is_src and 'ssleay32' not in self._libraries:
+ if show_warning:
+ print('openssl not found, serf and ra_serf will not be built')
+ return
+
+ if version < minimal_serf_version:
+ msg = 'Found serf %s, but >= %s is required. ra_serf will not be built.\n' % \
+ (self.serf_ver, '.'.join(str(v) for v in minimal_serf_version))
+ return
+
+ if self.serf_ver_maj > 0:
+ lib_name = 'serf-%d.lib' % (self.serf_ver_maj,)
else:
- print('serf not found, ra_serf will not be built\n')
+ lib_name = 'serf.lib'
+
+ serf_version = '.'.join(str(v) for v in version)
+ self._libraries['serf'] = SVNCommonLibrary('serf', inc_dir, lib_dir,
+ lib_name, serf_version,
+ debug_lib_dir=debug_lib_dir,
+ is_src=is_src)
def _find_sqlite(self):
"Find the Sqlite library and version"