#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright 2018 The ChromiumOS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Create llvm ebuild file.

This script takes an existing host llvm compiler ebuild and
creates another build that should be installable in a prefixed location.
The script patches a few lines in the llvm ebuild to make that happen.

Since the script is based on the current llvm ebuild patterns,
it may need to be updated if those patterns change.

This script should normally be invoked by the shell script
create_llvm_extra.sh .

Below is an example of the expected diff of the newly generated ebuild with
some explanation of the diffs.

diff -Nuar llvm-pre7.0_pre335547_p20180529.ebuild newly-created-file.ebuild
--- llvm-7.0_pre331547_p20180529-r8.ebuild
+++ newly-created-file.ebuild

@@ -60,9 +60,9 @@ EGIT_REPO_URIS=(
 fi

 LICENSE="UoI-NCSA"
-SLOT="0/${PV%%_*}"
+SLOT="${PV%%_p[[:digit:]]*}" # Creates a unique slot so that multiple copies
                                of the new build can be installed.

 KEYWORDS="-* amd64"

 # Change USE flags to match llvm ebuild installtion. To see the set of flags
 enabled in llvm compiler ebuild, run $ sudo emerge -pv llvm

-IUSE="debug +default-compiler-rt +default-libcxx doc libedit +libffi"
+IUSE="debug +default-compiler-rt +default-libcxx doc libedit +libffi
        ncurses ocaml python llvm-next llvm-tot test xml video_cards_radeon"

 COMMON_DEPEND="
@@ -145,6 +145,7 @@ pkg_pretend() {
 }

 pkg_setup() {
 # This Change is to install the files in $PREFIX.
+       export PREFIX="/usr/${PN}/${SLOT}"
        pkg_pretend
 }

@@ -272,13 +273,13 @@
        sed -e "/RUN/s/-warn-error A//" -i test/Bindings/OCaml/*ml  || die

        # Allow custom cmake build types (like 'Gentoo')
 # Convert use of PN to llvm in epatch commands.
-       epatch "${FILESDIR}"/cmake/${PN}-3.8-allow_custom_cmake_build.patch
+       epatch "${FILESDIR}"/cmake/llvm-3.8-allow_custom_cmake_build.patch

        # crbug/591436
        epatch "${FILESDIR}"/clang-executable-detection.patch

        # crbug/606391
-       epatch "${FILESDIR}"/${PN}-3.8-invocation.patch
+       epatch "${FILESDIR}"/llvm-3.8-invocation.patch

@@ -411,11 +412,14 @@ src_install() {
                /usr/include/llvm/Config/llvm-config.h
        )

+       MULTILIB_CHOST_TOOLS=() # No need to install any multilib tools/headers.
+       MULTILIB_WRAPPED_HEADERS=()
        multilib-minimal_src_install
 }

 multilib_src_install() {
        cmake-utils_src_install
+       return # No need to install any wrappers.

        local wrapper_script=clang_host_wrapper
        cat "${FILESDIR}/clang_host_wrapper.header" \
@@ -434,6 +438,7 @@ multilib_src_install() {
 }

 multilib_src_install_all() {
+       return # No need to install common multilib files.
        insinto /usr/share/vim/vimfiles
        doins -r utils/vim/*/.
        # some users may find it useful
"""

from __future__ import print_function

import os
import sys


def process_line(line, text):
  # Process the line and append to the text we want to generate.
  # Check if line has any patterns that we want to handle.
  newline = line.strip()
  if newline.startswith('#'):
    # Do not process comment lines.
    text.append(line)
  elif line.startswith('SLOT='):
    # Change SLOT to "${PV%%_p[[:digit:]]*}"
    SLOT_STRING = 'SLOT="${PV%%_p[[:digit:]]*}"\n'
    text.append(SLOT_STRING)
  elif line.startswith('IUSE') and 'multitarget' in line:
    # Enable multitarget USE flag.
    newline = line.replace('multitarget', '+multitarget')
    text.append(newline)
  elif line.startswith('pkg_setup()'):
    # Setup PREFIX.
    text.append(line)
    text.append('\texport PREFIX="/usr/${PN}/${SLOT}"\n')
  elif line.startswith('multilib_src_install_all()'):
    text.append(line)
    # Do not install any common files.
    text.append('\treturn\n')
  elif 'epatch ' in line:
    # Convert any $PN or ${PN} in epatch files to llvm.
    newline = line.replace('$PN', 'llvm')
    newline = newline.replace('${PN}', 'llvm')
    text.append(newline)
  elif 'multilib-minimal_src_install' in line:
    # Disable MULTILIB_CHOST_TOOLS and MULTILIB_WRAPPED_HEADERS
    text.append('\tMULTILIB_CHOST_TOOLS=()\n')
    text.append('\tMULTILIB_WRAPPED_HEADERS=()\n')
    text.append(line)
  elif 'cmake-utils_src_install' in line:
    text.append(line)
    # Do not install any wrappers.
    text.append('\treturn\n')
  else:
    text.append(line)


def main():
  if len(sys.argv) != 3:
    filename = os.path.basename(__file__)
    print('Usage: ', filename, ' <input.ebuild> <output.ebuild>')
    return 1

  text = []
  with open(sys.argv[1], 'r') as infile:
    for line in infile:
      process_line(line, text)

  with open(sys.argv[2], 'w') as outfile:
    outfile.write(''.join(text))

  return 0


if __name__ == '__main__':
  sys.exit(main())
