#!/bin/bash

# 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.

# This script takes an existing llvm ebuild file and generate a llvm-extra
# ebuild. The newly generated llvm-extra ebuild can be installed as a regular
# host package.
# The new ebuild should be generated in sys-devel/llvm-extra directory.
# The script also copies all the files from files/ directory.
# The generated llvm-extra ebuild is slotted so multiple instances of
# llvm-extra ebuilds can be installed at same time.
# The slot is derived based on the _pre<num> string in the llvm ebuild name.
# e.g. For llvm-7.0_pre331547_p20180529-r8.ebuild, the slot will be
# 7.0_pre331547.
#
# Usage:
#  ./create_llvm_extra.sh /path/to/llvm-7.0_pre331547_p20180529-r8.ebuild
#
# To use the clang installed by llvm-extra, modify the CFLAGS and
# LDFLAGS of a pckage to pass the patch of the clang binary installed by
# the llvm-extra package.
# e.g. append-flags -Xclang-path=/usr/llvm-extra/version/clang
#      append-ldflags -Xclang-path=/usr/llvm-extra/version/clang
#

SCRIPT_DIR=$(realpath $(dirname "$0"))

function check_cmd() {
	if [[ "$#" -ne 1 ]]; then
		echo "Exactly 1 argument expected"
		echo "Usage $0 <path_to_llvm_ebuild>"
		exit 1
	fi
	if [[ ! -f "$1" ]]; then
		echo "$1 is not a file"
		exit 1;
	fi
}

function create_llvm_extra_ebuild() {
	EBUILD_PREFIX=llvm-extra
	EBUILD_DIR=$(dirname "$1")
	EBUILD_FILE_NAME=$(basename "$1")
	NEW_EBUILD_FILE_NAME="${EBUILD_FILE_NAME/llvm/$EBUILD_PREFIX}"
	NEW_EBUILD_FILENAME_NO_EXT="${NEW_EBUILD_FILE_NAME%.*}"
	NEW_EBUILD_DIR="${EBUILD_DIR}/../${EBUILD_PREFIX}"
	NEW_EBUILD_PV="${NEW_EBUILD_FILENAME_NO_EXT#"$EBUILD_PREFIX-"}"
	NEW_EBUILD_SLOT="${NEW_EBUILD_PV%%_p[[:digit:]]*}"

	mkdir -p "${NEW_EBUILD_DIR}"
	if [[ -d "${EBUILD_DIR}/files" ]]; then
		cp -rf "${EBUILD_DIR}/files" "${NEW_EBUILD_DIR}"
	fi

	if [[ -f "${NEW_EBUILD_DIR}/${NEW_EBUILD_FILE_NAME}" ]]; then
		echo "Removing existing ebuild file ${NEW_EBUILD_FILE_NAME}"
		rm -f "${NEW_EBUILD_DIR}/${NEW_EBUILD_FILE_NAME}"
	fi
	# Generate the llvm-extra ebuild file.
	"${SCRIPT_DIR}"/create_ebuild_file.py "$1" "${NEW_EBUILD_DIR}/${NEW_EBUILD_FILE_NAME}"
	if [[ $? -ne 0 ]]; then
		echo "Creation of ${NEW_EBUILD_DIR}/${NEW_EBUILD_FILE_NAME} failed"
		exit 1
	fi
	echo "***"
	echo "***"
	echo "${NEW_EBUILD_DIR}/${NEW_EBUILD_FILE_NAME} has been created."

	echo "***"
	echo "Test if it builds by running \$ sudo emerge ${EBUILD_PREFIX}:${NEW_EBUILD_SLOT}"
	echo "***"
	echo "If it works, Go ahead and submit the newly generated ebuild"\
	     "and any other files in ${NEW_EBUILD_DIR}."
	echo "***"
	echo "Don't forget to add sys-devel/${EBUILD_PREFIX}:${NEW_EBUILD_SLOT} to"\
	     "the dependencies in virtual/target-chromium-os-sdk ebuild."
	echo "***"
	echo "***"
}


set -e
# Confidence checks.
check_cmd "${@}"
# Create llvm-extra ebuild.
create_llvm_extra_ebuild "${@}"
