1
0
mirror of https://gitlab.com/fdroid/fdroidserver.git synced 2024-07-14 13:00:08 +02:00

Support for source libraries

This commit is contained in:
Ciaran Gultnieks 2012-01-28 00:05:30 +00:00
parent 9c140d126c
commit c33903cf14
4 changed files with 52 additions and 15 deletions

10
README
View File

@ -204,6 +204,16 @@ configuration to the build. These are:
files within a directory below the metadata, with the same
name as the metadata file but without the extension. Each of
these patches is applied to the code in turn.
extlibs=a;b;c Specifies a list of external libraries (jar files) from the
build/extlib library, which will be placed in the libs
directory of the project. Separate items with semicolons.
srclibs=a@r;b@r1 Specifies a list of source libraries (kept up to date using
version control) from a predefined set. Separate items with
semicolons, and each item is of the form name@rev where name
is the predefined source library name and rev is the
revision in source control to use. You can then also use
$$name$$ in the prebuild command to substitute the relative
path to the library directory.
Another example, using extra parameters:

View File

@ -78,16 +78,6 @@ if not os.path.isdir(build_dir):
os.makedirs(build_dir)
extlib_dir = os.path.join(build_dir, 'extlib')
# Update extlib directory...
if False: # Don't need this yet!
greendroid_dir = os.path.join(extlib_dir, 'GreenDroid')
greendroid_vcs = common.getvcs('git',
'https://github.com/cyrilmottier/GreenDroid.git', greendroid_dir)
greendroid_vcs.gotorevision('5f92227c959d51e1d7220199135c2c239eabd4d2')
subprocess.call(['android', 'update', 'project', '-p',
os.path.join(greendroid_dir, 'GreenDroid')])
# Build applications...
for app in apps:
@ -290,7 +280,7 @@ for app in apps:
# Move the source tarball into the output directory...
if output_dir != tmp_dir:
shutil.movefile(os.path.join(tmp_dir, tarname + '.tar.gz'),
shutil.move(os.path.join(tmp_dir, tarname + '.tar.gz'),
os.path.join(output_dir, tarname + '.tar.gz'))
build_succeeded.append(app)

View File

@ -1,2 +1,3 @@
!*/
GreenDroid/
ActionBarSherlock/

View File

@ -540,6 +540,32 @@ class MetaDataException(Exception):
return repr(self.value)
# Get the specified source library.
# Returns the path to it.
def getsrclib(spec, extlib_dir):
name, ref = spec.split('@')
if name == 'GreenDroid':
sdir = os.path.join(extlib_dir, 'GreenDroid')
vcs = getvcs('git',
'https://github.com/cyrilmottier/GreenDroid.git', sdir)
vcs.gotorevision(ref)
return os.path.join(sdir, 'GreenDroid')
if name == 'ActionBarSherlock':
sdir = os.path.join(extlib_dir, 'ActionBarSherlock')
vcs = getvcs('git',
'https://github.com/JakeWharton/ActionBarSherlock.git', sdir)
vcs.gotorevision(ref)
libdir = os.path.join(sdir, 'library')
if subprocess.call(['android', 'update', 'project', '-p',
libdir]) != 0:
raise BuildException('Error updating ActionBarSherlock project')
return libdir
raise BuildException('Unknown srclib ' + name)
# Prepare the source code for a particular build
# 'vcs' - the appropriate vcs object for the application
# 'app' - the application details from the metadata
@ -696,16 +722,26 @@ def prepare_source(vcs, app, build, build_dir, extlib_dir, sdk_path, ndk_path, j
libsdir = os.path.join(root_dir, 'libs')
if not os.path.exists(libsdir):
os.mkdir(libsdir)
libs = build['extlibs'].split(';')
for lib in libs:
for lib in build['extlibs'].split(';'):
libf = os.path.basename(lib)
shutil.copyfile(os.path.join(extlib_dir, lib),
os.path.join(libsdir, libf))
# Get required source libraries...
srclibpaths = []
if build.has_key('srclibs'):
for lib in build['srclibs'].split(';'):
name, _ = lib.split('@')
srclibpaths.append((name, getsrclib(lib, extlib_dir)))
# Run a pre-build command if one is required...
if build.has_key('prebuild'):
if subprocess.call(build['prebuild'],
cwd=root_dir, shell=True) != 0:
prebuild = build['prebuild']
# Substitute source library paths into prebuild commands...
for name, libpath in srclibpaths:
libpath = os.path.relpath(libpath, root_dir)
prebuild = prebuild.replace('$$' + name + '$$', libpath)
if subprocess.call(prebuild, cwd=root_dir, shell=True) != 0:
raise BuildException("Error running pre-build command")
# Apply patches if any