blob: ff90779f4104c166dab47dea63ceb10d65b775a7 [file] [log] [blame]
Mads Ager418d1ca2017-05-22 09:35:49 +02001#!/usr/bin/env python
2# Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
3# for details. All rights reserved. Use of this source code is governed by a
4# BSD-style license that can be found in the LICENSE file.
5
6# Wrapper script for running gradle.
7# Will make sure we pulled down gradle before running, and will use the pulled
8# down version to have a consistent developer experience.
9
10import os
11import subprocess
12import sys
13import utils
14
15GRADLE_DIR = os.path.join(utils.REPO_ROOT, 'third_party', 'gradle')
16GRADLE_SHA1 = os.path.join(GRADLE_DIR, 'gradle.tar.gz.sha1')
Stephan Herhut928ab0e2017-07-18 10:53:23 +020017GRADLE_TGZ = os.path.join(GRADLE_DIR, 'gradle.tar.gz')
Mads Ager1d5ae402017-09-22 12:30:56 +020018
Rico Windf80f5a22017-06-16 09:15:57 +020019if utils.IsWindows():
Jean-Marie Henaff872e4422017-06-13 10:26:20 +020020 GRADLE = os.path.join(GRADLE_DIR, 'gradle', 'bin', 'gradle.bat')
21else:
22 GRADLE = os.path.join(GRADLE_DIR, 'gradle', 'bin', 'gradle')
Mads Ager418d1ca2017-05-22 09:35:49 +020023
24def PrintCmd(s):
25 if type(s) is list:
26 s = ' '.join(s)
27 print 'Running: %s' % s
28 # I know this will hit os on windows eventually if we don't do this.
29 sys.stdout.flush()
30
31def EnsureGradle():
Stephan Herhut928ab0e2017-07-18 10:53:23 +020032 if not os.path.exists(GRADLE) or os.path.getmtime(GRADLE_TGZ) < os.path.getmtime(GRADLE_SHA1):
33 # Bootstrap or update gradle, everything else is controlled using gradle.
Mads Ager418d1ca2017-05-22 09:35:49 +020034 utils.DownloadFromGoogleCloudStorage(GRADLE_SHA1)
Stephan Herhut928ab0e2017-07-18 10:53:23 +020035 # Update the mtime of the tar file to make sure we do not run again unless
36 # there is an update.
37 os.utime(GRADLE_TGZ, None)
Mads Ager418d1ca2017-05-22 09:35:49 +020038 else:
39 print 'gradle.py: Gradle binary present'
40
Mads Agera4911eb2017-11-22 13:19:36 +010041def EnsureDeps():
Mads Ager418d1ca2017-05-22 09:35:49 +020042 EnsureGradle()
Mads Agera4911eb2017-11-22 13:19:36 +010043
Jean-Marie Henaff889dd942018-04-05 15:56:36 +020044def RunGradleIn(gradleCmd, args, cwd, throw_on_failure=True, env=None):
Mads Agera4911eb2017-11-22 13:19:36 +010045 EnsureDeps()
Jean-Marie Henaffe4e36d12018-04-05 10:33:50 +020046 cmd = [gradleCmd]
Mads Ager418d1ca2017-05-22 09:35:49 +020047 cmd.extend(args)
48 utils.PrintCmd(cmd)
Jean-Marie Henaffe4e36d12018-04-05 10:33:50 +020049 with utils.ChangedWorkingDirectory(cwd):
Jean-Marie Henaff889dd942018-04-05 15:56:36 +020050 return_value = subprocess.call(cmd, env=env)
Tamas Kenezb787bc82017-06-27 11:32:20 +020051 if throw_on_failure and return_value != 0:
Rico Wind0c2dff92017-11-29 09:27:12 +010052 raise Exception('Failed to execute gradle')
Rico Winda94f01c2017-06-27 10:32:34 +020053 return return_value
Mads Ager418d1ca2017-05-22 09:35:49 +020054
Jean-Marie Henaff889dd942018-04-05 15:56:36 +020055def RunGradleWrapperIn(args, cwd, throw_on_failure=True, env=None):
56 return RunGradleIn('./gradlew', args, cwd, throw_on_failure, env=env)
Jean-Marie Henaffe4e36d12018-04-05 10:33:50 +020057
Jean-Marie Henaff889dd942018-04-05 15:56:36 +020058def RunGradle(args, throw_on_failure=True, env=None):
59 return RunGradleIn(GRADLE, args, utils.REPO_ROOT, throw_on_failure, env=env)
Jean-Marie Henaffe4e36d12018-04-05 10:33:50 +020060
Jean-Marie Henaff889dd942018-04-05 15:56:36 +020061def RunGradleExcludeDeps(args, throw_on_failure=True, env=None):
Mads Agera4911eb2017-11-22 13:19:36 +010062 EnsureDeps()
63 args.append('-Pexclude_deps')
Jean-Marie Henaff889dd942018-04-05 15:56:36 +020064 return RunGradle(args, throw_on_failure, env=env)
Mads Agera4911eb2017-11-22 13:19:36 +010065
Jean-Marie Henaff889dd942018-04-05 15:56:36 +020066def RunGradleInGetOutput(gradleCmd, args, cwd, env=None):
Mads Agera4911eb2017-11-22 13:19:36 +010067 EnsureDeps()
Jean-Marie Henaffe4e36d12018-04-05 10:33:50 +020068 cmd = [gradleCmd]
Mads Agera4911eb2017-11-22 13:19:36 +010069 cmd.extend(args)
70 utils.PrintCmd(cmd)
Jean-Marie Henaffe4e36d12018-04-05 10:33:50 +020071 with utils.ChangedWorkingDirectory(cwd):
Jean-Marie Henaff889dd942018-04-05 15:56:36 +020072 return subprocess.check_output(cmd, env=env)
Mads Agera4911eb2017-11-22 13:19:36 +010073
Jean-Marie Henaff889dd942018-04-05 15:56:36 +020074def RunGradleWrapperInGetOutput(args, cwd, env=None):
75 return RunGradleInGetOutput('./gradlew', args, cwd, env=env)
Jean-Marie Henaffe4e36d12018-04-05 10:33:50 +020076
Jean-Marie Henaff889dd942018-04-05 15:56:36 +020077def RunGradleGetOutput(args, env=None):
78 return RunGradleInGetOutput(GRADLE, args, utils.REPO_ROOT, env=env)
Jean-Marie Henaffe4e36d12018-04-05 10:33:50 +020079
Mads Ager418d1ca2017-05-22 09:35:49 +020080def Main():
81 RunGradle(sys.argv[1:])
82
83if __name__ == '__main__':
84 sys.exit(Main())