From 9ae41cc1fffd0ae8f7c2ce6988172f040abdc0ba Mon Sep 17 00:00:00 2001 From: Marcus Hoffmann Date: Mon, 23 Dec 2019 02:02:28 +0100 Subject: [PATCH] add support for gradle kotlin scripts https://guides.gradle.org/migrating-build-logic-from-groovy-to-kotlin/ Closes fdroid/fdroidserver#613 cherry-picked from Bubu/fdroidserver@7d2e9f9c --- fdroidserver/build.py | 2 +- fdroidserver/checkupdates.py | 2 +- fdroidserver/common.py | 21 ++++++++++++++++----- fdroidserver/import.py | 3 ++- gradlew-fdroid | 2 +- 5 files changed, 21 insertions(+), 9 deletions(-) diff --git a/fdroidserver/build.py b/fdroidserver/build.py index a03fb2f3..6d8a1ce8 100644 --- a/fdroidserver/build.py +++ b/fdroidserver/build.py @@ -468,7 +468,7 @@ def build_local(app, build, vcs, build_dir, output_dir, log_dir, srclib_dir, ext if f in files: os.remove(os.path.join(root, f)) - if any(f in files for f in ['build.gradle', 'settings.gradle']): + if any(f in files for f in ['build.gradle', 'build.gradle.kts', 'settings.gradle', 'settings.gradle.kts']): # Even when running clean, gradle stores task/artifact caches in # .gradle/ as binary files. To avoid overcomplicating the scanner, # manually delete them, just like `gradle clean` should have removed diff --git a/fdroidserver/checkupdates.py b/fdroidserver/checkupdates.py index 871ec98c..881f9f48 100644 --- a/fdroidserver/checkupdates.py +++ b/fdroidserver/checkupdates.py @@ -334,7 +334,7 @@ def try_init_submodules(app, last_build, vcs): def dirs_with_manifest(startdir): for root, dirs, files in os.walk(startdir): if any(m in files for m in [ - 'AndroidManifest.xml', 'pom.xml', 'build.gradle']): + 'AndroidManifest.xml', 'pom.xml', 'build.gradle', 'build.gradle.kts']): yield root diff --git a/fdroidserver/common.py b/fdroidserver/common.py index d94c995b..4fe72fdf 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -1301,7 +1301,8 @@ def manifest_paths(app_dir, flavours): [os.path.join(app_dir, 'AndroidManifest.xml'), os.path.join(app_dir, 'src', 'main', 'AndroidManifest.xml'), os.path.join(app_dir, 'src', 'AndroidManifest.xml'), - os.path.join(app_dir, 'build.gradle')] + os.path.join(app_dir, 'build.gradle'), + os.path.join(app_dir, 'build.gradle.kts')] for flavour in flavours: if flavour == 'yes': @@ -1788,9 +1789,15 @@ def prepare_source(vcs, app, build, build_dir, srclib_dir, extlib_dir, onserver= if build.target: n = build.target.split('-')[1] + build_gradle = os.path.join(root_dir, "build.gradle") + build_gradle_kts = build_gradle + ".kts" + if os.path.exists(build_gradle): + gradlefile = build_gradle + elif os.path.exist(build_gradle_kts): + gradlefile = build_gradle_kts regsub_file(r'compileSdkVersion[ =]+[0-9]+', r'compileSdkVersion %s' % n, - os.path.join(root_dir, 'build.gradle')) + gradlefile) # Remove forced debuggable flags remove_debuggable_flags(root_dir) @@ -2381,9 +2388,13 @@ gradle_line_matches = [ def remove_signing_keys(build_dir): for root, dirs, files in os.walk(build_dir): + gradlefile = None if 'build.gradle' in files: - path = os.path.join(root, 'build.gradle') - + gradlefile = "build.gradle" + elif 'build.gradle.kts' in files: + gradlefile = "build.gradle.kts" + if gradlefile: + path = os.path.join(root, gradlefile) with open(path, "r") as o: lines = o.readlines() @@ -2421,7 +2432,7 @@ def remove_signing_keys(build_dir): o.write(line) if changed: - logging.info("Cleaned build.gradle of keysigning configs at %s" % path) + logging.info("Cleaned %s of keysigning configs at %s" % (gradlefile, path)) for propfile in [ 'project.properties', diff --git a/fdroidserver/import.py b/fdroidserver/import.py index 1fbf9a5f..e1d6ceda 100644 --- a/fdroidserver/import.py +++ b/fdroidserver/import.py @@ -299,7 +299,8 @@ def main(): app.Categories = options.categories.split(',') if os.path.exists(os.path.join(subdir, 'jni')): build.buildjni = ['yes'] - if os.path.exists(os.path.join(subdir, 'build.gradle')): + if os.path.exists(os.path.join(subdir, 'build.gradle')) \ + or os.path.exists(os.path.join(subdir, 'build.gradle')): build.gradle = ['yes'] package_json = os.path.join(build_dir, 'package.json') # react-native diff --git a/gradlew-fdroid b/gradlew-fdroid index c2f8955e..c42f1db0 100755 --- a/gradlew-fdroid +++ b/gradlew-fdroid @@ -174,7 +174,7 @@ if [[ -n $wrapper_ver ]]; then fi # Earliest takes priority -for f in {.,..}/build.gradle; do +for f in {.,..}/build.gradle{,.kts}; do [[ -f $f ]] || continue while IFS='' read -r line || [ -n "$line" ]; do if [[ -z "$plugin_pver" && $line == *'com.android.tools.build:gradle:'* ]]; then