2
0
Fork 0
mirror of https://github.com/bazel-contrib/rules_foreign_cc synced 2024-12-04 08:02:31 +00:00
rules_foreign_cc/tools/build_defs/utils.sh
irengrig 30b61168e0
make cmake rule accept install-prefix option (#11)
this way the users can influence which install prefix will appear in the
generated code
install prefix have to be relative - we are doing the hermetic build
modify our shell script to copy the result of the build into the target directory
(we can not leave it in temp directory, it will be deleted)
2018-08-08 16:49:50 +02:00

121 lines
2.9 KiB
Bash

#!/usr/bin/env bash
# default placeholder value
REPLACE_VALUE='BAZEL_GEN_ROOT'
# Echo variables in the format
# var1_name="var1_value"
# ...
# vark_name="vark_value"
#
# arguments: the names of the variables
function echo_vars() {
for arg in "$@"
do
echo_var "$arg"
done
}
# Echo variable in the format var_name="var_value"
# $1 the name of the variable
function echo_var() {
local name="$1"
local value=${!name}
echo "$name: \"${value}\""
}
# Wrap the function execution in the echo lines:
# --- START $1
# (anything printed by $2)
# --- END $1
# $1 parameter to be printed next to start/end text
# $2 function to call in between START and END
function wrap() {
echo "--- START $1:"
$2
echo "--- END $1"
}
# Append string to PATH variable
# $1 string to append
function path() {
export PATH="$1:$PATH"
}
# Replace string in all files in directory
# $1 directory to search recursively, absolute path
# $2 string to replace
# $3 replace target
function replace_in_files() {
if [ -d "$1" ]; then
find $1 -type f,l -exec sed -i 's@'"$2"'@'"$3"'@g' {} ';'
fi
}
# copies contents of the directory to target directory (create the target directory if needed)
# $1 source directory, immediate children of which are copied
# $2 target directory
function copy_dir_contents_to_dir() {
local children=$(find $1 -maxdepth 1)
local target="$2"
mkdir -p ${target}
for child in $children; do
cp -R $child ${target}
done
}
# Symlink contents of the directory to target directory (create the target directory if needed)
# $1 source directory, immediate children of which are symlinked
# $2 target directory
function symlink_dir_contents_to_dir() {
local children=$(find $1 -maxdepth 1)
local target="$2"
mkdir -p ${target}
for child in $children; do
symlink_to_dir $child ${target}
done
}
# Symlink all files from source directory to target directory (create the target directory if needed)
# NB symlinks from the source directory are copied
# $1 source directory
# $2 target directory
function symlink_to_dir() {
local target="$2"
mkdir -p ${target}
if [[ -d $1 ]]; then
ln -s -t ${target} $1
elif [[ -f $1 ]]; then
ln -s -t ${target} $1
elif [[ -L $1 ]]; then
cp $1 ${target}
else
echo "Can not copy $1"
fi
}
# Copy all files from source directory to target directory (create the target directory if needed),
# and add target paths on to path
# $1 source directory
# $2 target directory
function copy_and_add_to_path() {
copy_to_dir $1 $2
path $2/bin
path $2
}
# replace placeholder with absolute path in all files in a directory
# $1 directory
# $2 absolute path
function define_absolute_paths() {
replace_in_files $1 $REPLACE_VALUE $2
}
# replace the absolute path with a placeholder value in all files in a directory
# $1 directory
# $2 absolute path to replace
function replace_absolute_paths() {
replace_in_files $1 $2 $REPLACE_VALUE
}