| #!/usr/bin/env python3 |
| # -*- coding: utf-8 -*- |
| # Copyright 2018 The Chromium OS 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()) |