1
0
mirror of https://gitlab.com/fdroid/fdroidserver.git synced 2024-11-10 01:10:11 +01:00

Add extra build commands that can run after scan/tarball

Commands used in the 'build' section are for actual building that
produces binary output. Some existing stuff will need to move from
'prebuild' to this. See manual for more information.
This commit is contained in:
Ciaran Gultnieks 2013-03-20 09:30:56 +00:00
parent 4b472aed5a
commit 64729ba9fe
4 changed files with 37 additions and 5 deletions

View File

@ -772,6 +772,11 @@ insert literal commas, or as the last character on a line to join that
line with the next. It has no special meaning in other contexts; in line with the next. It has no special meaning in other contexts; in
particular, literal backslashes should not be escaped. particular, literal backslashes should not be escaped.
Note that nothing should be build during this prebuild phase - scanning
of the code and building of the source tarball, for example, take place
after this. For custom actions that actually build things, use 'build'
instead.
You can use $$name$$ to substitute the path to a referenced srclib - see You can use $$name$$ to substitute the path to a referenced srclib - see
the @code{srclib} directory for details of this. the @code{srclib} directory for details of this.
@ -785,6 +790,15 @@ takes place.
You can use $$SDK$$, $$NDK$$ and $$MVN3$$ to substitute the paths to the You can use $$SDK$$, $$NDK$$ and $$MVN3$$ to substitute the paths to the
android SDK and NDK directories, and maven 3 executable respectively. android SDK and NDK directories, and maven 3 executable respectively.
@item build=xxxx
As for 'prebuild', but runs during the actual build phase (but before the
main ant/maven build). Use this only for actions that do actual building.
Any prepartion of the source code should be done using 'init' or 'prebuild'.
You can use $$SDK$$, $$NDK$$ and $$MVN3$$ to substitute the paths to the
android SDK and NDK directories, and maven 3 executable respectively.
@item novcheck=yes @item novcheck=yes
Don't check that the version name and code in the resulting apk are Don't check that the version name and code in the resulting apk are
correct by looking at the build output - assume the metadata is correct by looking at the build output - assume the metadata is

View File

@ -265,7 +265,7 @@ def build_local(app, thisbuild, vcs, build_dir, output_dir, extlib_dir, tmp_dir,
"""Do a build locally.""" """Do a build locally."""
# Prepare the source code... # Prepare the source code...
root_dir = common.prepare_source(vcs, app, thisbuild, root_dir, srclibpaths = common.prepare_source(vcs, app, thisbuild,
build_dir, extlib_dir, sdk_path, ndk_path, build_dir, extlib_dir, sdk_path, ndk_path,
javacc_path, mvn3, verbose) javacc_path, mvn3, verbose)
@ -291,6 +291,22 @@ def build_local(app, thisbuild, vcs, build_dir, output_dir, extlib_dir, tmp_dir,
tarball.add(build_dir, tarname, exclude=tarexc) tarball.add(build_dir, tarname, exclude=tarexc)
tarball.close() tarball.close()
# Run a build command if one is required...
if 'build' in thisbuild:
prebuild = build['build']
# Substitute source library paths into prebuild commands...
for name, libpath in srclibpaths:
libpath = os.path.relpath(libpath, root_dir)
prebuild = prebuild.replace('$$' + name + '$$', libpath)
prebuild = prebuild.replace('$$SDK$$', sdk_path)
prebuild = prebuild.replace('$$NDK$$', ndk_path)
prebuild = prebuild.replace('$$MVN3$$', mvn3)
p = subprocess.Popen(prebuild, cwd=root_dir, shell=True,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate()
if p.returncode != 0:
raise BuildException("Error running build command", out, err)
# Build native stuff if required... # Build native stuff if required...
if thisbuild.get('buildjni') not in (None, 'no'): if thisbuild.get('buildjni') not in (None, 'no'):
jni_components = thisbuild.get('buildjni') jni_components = thisbuild.get('buildjni')

View File

@ -1642,8 +1642,10 @@ def getsrclib(spec, extlib_dir, sdk_path, basepath=False):
# 'javacc_path' - the path to javacc # 'javacc_path' - the path to javacc
# 'mvn3' - the path to the maven 3 executable # 'mvn3' - the path to the maven 3 executable
# 'verbose' - optional: verbose or not (default=False) # 'verbose' - optional: verbose or not (default=False)
# Returns the root directory, which may be the same as 'build_dir' or may # Returns the (root, srclibpaths) where:
# be a subdirectory of it. # 'root' is the root directory, which may be the same as 'build_dir' or may
# be a subdirectory of it.
# 'srclibpaths' is information on the srclibs being used
def prepare_source(vcs, app, build, build_dir, extlib_dir, sdk_path, ndk_path, javacc_path, mvn3, verbose=False): def prepare_source(vcs, app, build, build_dir, extlib_dir, sdk_path, ndk_path, javacc_path, mvn3, verbose=False):
# Optionally, the actual app source can be in a subdirectory... # Optionally, the actual app source can be in a subdirectory...
@ -1970,7 +1972,7 @@ def prepare_source(vcs, app, build, build_dir, extlib_dir, sdk_path, ndk_path, j
'build.properties'], cwd=root_dir) !=0: 'build.properties'], cwd=root_dir) !=0:
raise BuildException("Failed to amend build.properties") raise BuildException("Failed to amend build.properties")
return root_dir return (root_dir, srclibpaths)
# Scan the source code in the given directory (and all subdirectories) # Scan the source code in the given directory (and all subdirectories)

View File

@ -98,7 +98,7 @@ def main():
print "..scanning version " + thisbuild['version'] print "..scanning version " + thisbuild['version']
# Prepare the source code... # Prepare the source code...
root_dir = common.prepare_source(vcs, app, thisbuild, root_dir, _ = common.prepare_source(vcs, app, thisbuild,
build_dir, extlib_dir, sdk_path, ndk_path, javacc_path, mvn3, options.verbose) build_dir, extlib_dir, sdk_path, ndk_path, javacc_path, mvn3, options.verbose)
# Do the scan... # Do the scan...