blob: cc45212ac285deafa1c8904f09a3847ec6367b7a [file] [log] [blame]
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -07001# Copyright (C) 2013 The Android Open Source Project
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14
David Ostrovsky188bd782014-07-19 22:43:36 +020015include_defs('//lib/local.defs')
16
Shawn Pearce1b89f852013-05-13 20:26:34 -070017GERRIT = 'GERRIT:'
David Ostrovskya2707972014-01-17 09:04:35 +010018GERRIT_API = 'GERRIT_API:'
Shawn Pearce1b89f852013-05-13 20:26:34 -070019MAVEN_CENTRAL = 'MAVEN_CENTRAL:'
Shawn Pearcee585fc02013-08-14 15:40:35 -070020MAVEN_LOCAL = 'MAVEN_LOCAL:'
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -070021
22def define_license(name):
23 n = 'LICENSE-' + name
24 genrule(
25 name = n,
26 cmd = 'ln -s $SRCS $OUT',
27 srcs = [n],
28 out = n,
29 visibility = ['PUBLIC'],
30 )
31
32def maven_jar(
33 name,
34 id,
35 license,
36 exclude = [],
37 exclude_java_sources = False,
David Ostrovsky6e0a3e52013-10-26 09:55:15 +020038 unsign = False,
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -070039 deps = [],
Shawn Pearce4e1a8bc2013-11-28 18:38:30 -080040 exported_deps = [],
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -070041 sha1 = '', bin_sha1 = '', src_sha1 = '',
42 repository = MAVEN_CENTRAL,
43 attach_source = True,
Christian Aistleitner79d2c7b2014-09-10 11:02:59 +020044 visibility = ['PUBLIC'],
45 local_license = False):
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -070046 from os import path
47
48 parts = id.split(':')
David Pursehouse37103052015-03-05 12:23:13 +090049 if len(parts) not in [3, 4]:
50 raise NameError('%s:\nexpected id="groupId:artifactId:version[:classifier]"'
51 % id)
52 if len(parts) == 4:
53 group, artifact, version, classifier = parts
54 else:
55 group, artifact, version = parts
56 classifier = None
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -070057
David Ostrovskyfc5450b2014-07-02 01:22:27 +020058 # SNAPSHOT artifacts are handled differently on Google storage bucket:
59 # 'SNAPSHOT' is discarded from the directory name. However on other
60 # Maven repositories, most notable local repository located in
61 # ~/.m2/repository (and is supported through MAVEN_LOCAL repository)
62 # it must be preserved, otherwise the artifact wouldn't be found.
63 # Atm the SNAPSHOT part is only discarded for Google storage bucket.
David Ostrovsky4a3f51a2014-04-30 00:48:28 +020064 if 'SNAPSHOT' in version and repository.startswith(GERRIT):
David Pursehouse3b226742014-03-22 07:44:34 -070065 file_version = version.replace('-SNAPSHOT', '')
66 version = version.split('-SNAPSHOT')[0] + '-SNAPSHOT'
67 else:
68 file_version = version
69
David Pursehouse37103052015-03-05 12:23:13 +090070 if classifier is not None:
71 file_version += '-' + classifier
72
David Pursehouse3b226742014-03-22 07:44:34 -070073 jar = path.join(name, artifact.lower() + '-' + file_version)
David Pursehouse37103052015-03-05 12:23:13 +090074
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -070075 url = '/'.join([
76 repository,
77 group.replace('.', '/'), artifact, version,
David Pursehouse3b226742014-03-22 07:44:34 -070078 artifact + '-' + file_version])
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -070079
80 binjar = jar + '.jar'
81 binurl = url + '.jar'
82
83 srcjar = jar + '-src.jar'
84 srcurl = url + '-sources.jar'
85
Shawn Pearce11d27c82013-07-24 08:09:31 -070086 cmd = ['$(exe //tools:download_file)', '-o', '$OUT', '-u', binurl]
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -070087 if sha1:
88 cmd.extend(['-v', sha1])
89 elif bin_sha1:
90 cmd.extend(['-v', bin_sha1])
91 for x in exclude:
92 cmd.extend(['-x', x])
93 if exclude_java_sources:
94 cmd.append('--exclude_java_sources')
David Ostrovsky6e0a3e52013-10-26 09:55:15 +020095 if unsign:
96 cmd.append('--unsign')
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -070097
98 genrule(
David Ostrovskyd8af0922014-05-30 12:42:32 +020099 name = '%s__download_bin' % name,
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -0700100 cmd = ' '.join(cmd),
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -0700101 out = binjar,
102 )
Christian Aistleitner79d2c7b2014-09-10 11:02:59 +0200103 license = ':LICENSE-' + license
104 if not local_license:
105 license = '//lib' + license
106 license = [license]
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -0700107
108 if src_sha1 or attach_source:
Shawn Pearce11d27c82013-07-24 08:09:31 -0700109 cmd = ['$(exe //tools:download_file)', '-o', '$OUT', '-u', srcurl]
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -0700110 if src_sha1:
111 cmd.extend(['-v', src_sha1])
112 genrule(
David Ostrovskyd8af0922014-05-30 12:42:32 +0200113 name = '%s__download_src' % name,
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -0700114 cmd = ' '.join(cmd),
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -0700115 out = srcjar,
116 )
David Ostrovsky56fe1f82013-08-16 18:18:03 +0200117 prebuilt_jar(
David Ostrovskyd8af0922014-05-30 12:42:32 +0200118 name = '%s_src' % name,
119 binary_jar = ':%s__download_src' % name,
David Ostrovsky5dacc8b2014-06-10 03:01:28 +0200120 deps = license,
David Ostrovsky56fe1f82013-08-16 18:18:03 +0200121 visibility = visibility,
122 )
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -0700123 else:
124 srcjar = None
Shawn Pearce7b553262013-05-13 21:25:13 -0700125 genrule(
David Ostrovskyd8af0922014-05-30 12:42:32 +0200126 name = '%s__download_src' % name,
Shawn Pearce7b553262013-05-13 21:25:13 -0700127 cmd = ':>$OUT',
David Ostrovskyd8af0922014-05-30 12:42:32 +0200128 out = '__%s__no_src' % name,
Shawn Pearce7b553262013-05-13 21:25:13 -0700129 )
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -0700130
Shawn Pearce4e1a8bc2013-11-28 18:38:30 -0800131 if exported_deps:
Shawn Pearcebd562972013-05-15 14:36:29 -0700132 prebuilt_jar(
David Ostrovskyd8af0922014-05-30 12:42:32 +0200133 name = '%s__jar' % name,
134 deps = deps,
135 binary_jar = ':%s__download_bin' % name,
136 source_jar = ':%s__download_src' % name if srcjar else None,
Shawn Pearcebd562972013-05-15 14:36:29 -0700137 )
138 java_library(
139 name = name,
Shawn Pearce4e1a8bc2013-11-28 18:38:30 -0800140 exported_deps = exported_deps + [':' + name + '__jar'],
Shawn Pearcebd562972013-05-15 14:36:29 -0700141 visibility = visibility,
142 )
143 else:
144 prebuilt_jar(
145 name = name,
David Ostrovskyd8af0922014-05-30 12:42:32 +0200146 deps = deps,
147 binary_jar = ':%s__download_bin' % name,
148 source_jar = ':%s__download_src' % name if srcjar else None,
Shawn Pearcebd562972013-05-15 14:36:29 -0700149 visibility = visibility,
150 )
David Ostrovsky07df9592014-02-01 23:47:22 +0100151