Author: hwright
Date: Mon Jun 13 15:07:32 2011
New Revision: 1135127
URL: http://svn.apache.org/viewvc?rev=1135127&view=rev
Log:
In release.py, handle the fetching of libtool, autoconf and swig independently,
rather than as part of a big jumble. It's probably possible to introduce a
bit of code reuse here, but this is a general architecture improvement (as
will be demonstrated in a bit).
* tools/dist/release.py
(download_file): New.
(prep_autoconf, prep_libtool, prep_swig): New.
(build_env): Tease out the above functions, and use them.
Modified:
subversion/trunk/tools/dist/release.py
Modified: subversion/trunk/tools/dist/release.py
URL:
http://svn.apache.org/viewvc/subversion/trunk/tools/dist/release.py?rev=1135127&r1=1135126&r2=1135127&view=diff
==============================================================================
--- subversion/trunk/tools/dist/release.py (original)
+++ subversion/trunk/tools/dist/release.py Mon Jun 13 15:07:32 2011
@@ -67,6 +67,13 @@ def run_script(verbose, script):
for l in script.split('\n'):
subprocess.check_call(l.split(), stdout=stdout, stderr=stderr)
+def download_file(url, target):
+ response = urllib2.urlopen(url)
+ target_file = open(target, 'w')
+ target_file.write(response.read())
+
+#----------------------------------------------------------------------
+# Cleaning up the environment
def cleanup(base_dir, args):
'Remove generated files and folders.'
@@ -78,73 +85,89 @@ def cleanup(base_dir, args):
#----------------------------------------------------------------------
# Creating and environment to roll the release
-def build_env(base_dir, args):
- 'Download prerequisites for a release and prepare the environment.'
- logging.info('Creating release environment')
-
- # Versions of our environment
- params = { 'autoconf' : 'autoconf-2.68',
- 'libtool' : 'libtool-2.4',
- 'swig' : 'swig-2.0.4',
- 'sf_mirror' : args.sf_mirror,
- }
-
- prefix = get_prefix(base_dir)
- if os.path.exists(prefix):
- raise RuntimeError("Directory exists: '%s'" % prefix)
- os.mkdir(prefix)
-
- tempdir = get_tempdir(base_dir)
- if os.path.exists(tempdir):
- raise RuntimeError("Directory exists: '%s'" % tempdir)
- os.mkdir(tempdir)
-
- objects = { 'autoconf' :
'http://ftp.gnu.org/gnu/autoconf/%(autoconf)s.tar.gz',
- 'libtool' :
'http://ftp.gnu.org/gnu/libtool/%(libtool)s.tar.gz',
- 'swig' :
'http://sourceforge.net/projects/swig/files/swig/%(swig)s/%(swig)s.tar.gz/download?use_mirror=%(sf_mirror)s'
- }
-
- # Grab each of the prerequisite tarballs
- for key, value in objects.items():
- url = value % params
- response = urllib2.urlopen(url)
- target = open(os.path.join(get_tempdir(base_dir), key + '.tar.gz'),
'w')
- target.write(response.read())
- target.close()
-
- target = tarfile.open(os.path.join(get_tempdir(base_dir),
- key + '.tar.gz'))
- target.extractall(get_tempdir(base_dir))
-
+def prep_autoconf(base_dir, args):
+ 'Download and build autoconf'
cwd = os.getcwd()
+ filebase = 'autoconf-2.68'
+ url = 'http://ftp.gnu.org/gnu/autoconf/%s.tar.gz' % filebase
+ tarball = os.path.join(get_tempdir(base_dir), filebase + '.tar.gz')
+
+ logging.info('Fetching %s' % filebase)
+ download_file(url, tarball)
+ tarfile.open(tarball).extractall(get_tempdir(base_dir))
- # build autoconf
logging.info('Building autoconf')
- os.chdir(os.path.join(get_tempdir(base_dir), params['autoconf']))
+ os.chdir(os.path.join(get_tempdir(base_dir), filebase))
run_script(args.verbose,
'''./configure --prefix=%s
make
make install''' % get_prefix(base_dir))
- # build libtool
+ os.chdir(cwd)
+
+
+def prep_libtool(base_dir, args):
+ 'Download and build libtool'
+ cwd = os.getcwd()
+ filebase = 'libtool-2.4'
+ url = 'http://ftp.gnu.org/gnu/libtool/%s.tar.gz' % filebase
+ tarball = os.path.join(get_tempdir(base_dir), filebase + '.tar.gz')
+
+ logging.info('Fetching %s' % filebase)
+ download_file(url, tarball)
+ tarfile.open(tarball).extractall(get_tempdir(base_dir))
+
logging.info('Building libtool')
- os.chdir(os.path.join(get_tempdir(base_dir), params['libtool']))
+ os.chdir(os.path.join(get_tempdir(base_dir), filebase))
run_script(args.verbose,
'''./configure --prefix=%s
make
make install''' % get_prefix(base_dir))
- # build swig
+ os.chdir(cwd)
+
+def prep_swig(base_dir, args):
+ 'Download and build swig'
+ cwd = os.getcwd()
+ filebase = 'swig-2.0.4'
+ url =
'http://sourceforge.net/projects/swig/files/swig/%(swig)s/%(swig)s.tar.gz/download?use_mirror=%(sf_mirror)s'
% \
+ { 'swig' : filebase,
+ 'sf_mirror' : args.sf_mirror }
+ tarball = os.path.join(get_tempdir(base_dir), filebase + '.tar.gz')
+
+ logging.info('Fetching %s' % filebase)
+ download_file(url, tarball)
+ tarfile.open(tarball).extractall(get_tempdir(base_dir))
+
logging.info('Building swig')
- os.chdir(os.path.join(get_tempdir(base_dir), params['swig']))
+ os.chdir(os.path.join(get_tempdir(base_dir), filebase))
run_script(args.verbose,
- '''./configure --prefix=%s --without-pcre
+ '''./configure --prefix=%s
make
make install''' % get_prefix(base_dir))
os.chdir(cwd)
+def build_env(base_dir, args):
+ 'Download prerequisites for a release and prepare the environment.'
+ logging.info('Creating release environment')
+
+ prefix = get_prefix(base_dir)
+ if os.path.exists(prefix):
+ raise RuntimeError("Directory exists: '%s'" % prefix)
+ os.mkdir(prefix)
+
+ tempdir = get_tempdir(base_dir)
+ if os.path.exists(tempdir):
+ raise RuntimeError("Directory exists: '%s'" % tempdir)
+ os.mkdir(tempdir)
+
+ prep_autoconf(base_dir, args)
+ prep_libtool(base_dir, args)
+ prep_swig(base_dir, args)
+
+
def roll_tarballs(base_dir, args):
'Create the release artifacts.'