diff options
Diffstat (limited to 'tools/build_defs/repo/make.bzl')
-rw-r--r-- | tools/build_defs/repo/make.bzl | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/tools/build_defs/repo/make.bzl b/tools/build_defs/repo/make.bzl new file mode 100644 index 0000000000..9e7f478cf5 --- /dev/null +++ b/tools/build_defs/repo/make.bzl @@ -0,0 +1,66 @@ +# Copyright 2016 The Bazel Authors. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +""""Respositry rules for converting Makefile-based projects to Bazel.""" + +def _impl(ctx): + """Downloads, extracts, and runs configure && make on an archive.""" + ctx.download_and_extract( + url = ctx.attr.urls, + stripPrefix = ctx.attr.strip_prefix, + sha256 = ctx.attr.sha256, + ) + + result = ctx.execute(['./configure']) + if result.return_code != 0: + print(result.stdout) + print(result.stderr) + fail('error running configure') + # TODO(kchodorow): allow specifying make rules here. + result = ctx.execute(['make']) + if result.return_code != 0: + print(result.stdout) + print(result.stderr) + fail('error running make') + + # Check that all expected files were created. + missing_files = [] + for f in ctx.attr.exports: + if not ctx.path(f).exists: + missing_files += [f] + if missing_files: + fail('file(s) %s were not created' % ', '.join(missing_files)) + + ctx.file('WORKSPACE', """ +# Automatically generated WORKSPACE file. +workspace(name = 'name') +""".format(name = ctx.name)) + ctx.file('BUILD', """ +exports_files({exports}) + +{build_file_content} +""".format( + exports = ctx.attr.exports, + build_file_content = ctx.attr.build_file_content)) + + +make = repository_rule( + implementation = _impl, + attrs = { + 'urls':attr.string_list(mandatory = True), + 'exports':attr.string_list(mandatory = True), + 'strip_prefix':attr.string(default = ''), + 'sha256':attr.string(default = ''), + 'build_file_content':attr.string(default = ''), + } +) |