[buildout]
extends =
  ../defaults.cfg
  ../unzip/buildout.cfg
  ../zip/buildout.cfg
parts =
  bazel
# The bazel binary contains a zip file. It must not be stripped.
do-not-strip-path = ${buildout:parts-directory}/bazel/bin/bazel

[zulu]
recipe = hexagonit.recipe.download
ignore-existing = true
url = http://cdn.azul.com/zulu/bin/zulu8.20.0.5-jdk8.0.121-linux_x64.tar.gz
md5sum = e5f4b1d997e50ffe4998c68c8ec45403
strip-top-level-dir = true

[template-bazel-crosstool]
recipe = slapos.recipe.template:jinja2
location = ${buildout:parts-directory}/${:_buildout_section_name_}
mode = 640
filename = bazel_tools_cpp_CROSSTOOL
template = ${:_profile_base_location_}/${:filename}.in
rendered = ${:location}/${:filename}
context =
    key gcc_location gcc:prefix
    key binutils_location binutils:location

[template-bazel-src-main-cpp-build]
recipe = slapos.recipe.template:jinja2
location = ${buildout:parts-directory}/${:_buildout_section_name_}
mode = 640
filename = bazel_src_main_cpp_BUILD
template = ${:_profile_base_location_}/${:filename}.in
rendered = ${:location}/${:filename}
# We previously passed an argument that we don't want anymore. Rather than
# changing templates, we pass a dummy argument that will have no effect.
linkopts = -DSLAPOS_DUMMY=
context =
    key linkopts :linkopts

[template-bazel-src-main-tools-build]
<= template-bazel-src-main-cpp-build
filename = bazel_src_main_tools_BUILD

[template-bazel-src-tools-singlejar-build]
<= template-bazel-src-main-cpp-build
filename = bazel_src_tools_singlejar_BUILD

[bazel]
recipe = slapos.recipe.build
url = https://github.com/bazelbuild/bazel/releases/download/0.6.1/bazel-0.6.1-dist.zip
md5sum = 8c5c827e33d3ff74c263c1299810b485
patch-binary = ${patch:location}/bin/patch
patch-file-path = ${:_profile_base_location_}/bazel-0.6.1.patch
bazel-crosstool-modified-file-path = ${template-bazel-crosstool:rendered}
bazel-src-main-cpp-build-path = ${template-bazel-src-main-cpp-build:rendered}
bazel-src-main-tools-build-path = ${template-bazel-src-main-tools-build:rendered}
bazel-src-tools-singlejar-build-path = ${template-bazel-src-tools-singlejar-build:rendered}
unzip-bin = ${unzip:location}/bin
zip-bin = ${zip:location}/bin
java_home = ${zulu:location}
bazelrc = ${:_profile_base_location_}/bazelrc
install =
  import os, shutil
  extract_dir = self.extract(self.download(options['url'], options['md5sum']))
  crosstool_path = os.path.join(extract_dir, 'tools', 'cpp', 'CROSSTOOL')
  os.chmod(crosstool_path, 0644)
  shutil.copy(options['bazel-crosstool-modified-file-path'],
              crosstool_path)
  src_main_cpp_build_path = os.path.join(extract_dir, 'src', 'main', 'cpp', 'BUILD')
  os.chmod(src_main_cpp_build_path, 0644)
  shutil.copy(options['bazel-src-main-cpp-build-path'],
              src_main_cpp_build_path)
  src_main_tools_build_path = os.path.join(extract_dir, 'src', 'main', 'tools', 'BUILD')
  os.chmod(src_main_tools_build_path, 0644)
  shutil.copy(options['bazel-src-main-tools-build-path'],
              src_main_tools_build_path)
  src_tools_singlejar_build_path = os.path.join(extract_dir, 'src', 'tools', 'singlejar', 'BUILD')
  os.chmod(src_tools_singlejar_build_path, 0644)
  shutil.copy(options['bazel-src-tools-singlejar-build-path'],
              src_tools_singlejar_build_path)

  target_path = extract_dir+'/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleImplementationFunctions.java'
  os.chmod(target_path, 0644)
  call([self.buildout['bazel']['patch-binary'], '-p1', '-d', extract_dir, '-i', self.buildout['bazel']['patch-file-path']])
  path = ':'.join((
    options['unzip-bin'],
    options['zip-bin'],
    os.environ['PATH']
    ))
  env = {'JAVA_HOME':options['java_home'],
         'PATH':path,
         'BAZELRC':options['bazelrc'],
         'VERBOSE':'yes',
        }
  bin_dir = os.path.join(location, 'bin')
  os.makedirs(bin_dir)
  call(['bash', 'compile.sh', 'compile'], cwd=extract_dir, env=env)
  shutil.copy(os.path.join(extract_dir, 'output', 'bazel'),
              os.path.join(bin_dir, 'bazel'))