aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--%HOME%/.bash_utils/cxx.sh106
1 files changed, 5 insertions, 101 deletions
diff --git a/%HOME%/.bash_utils/cxx.sh b/%HOME%/.bash_utils/cxx.sh
index f7da291..e738669 100644
--- a/%HOME%/.bash_utils/cxx.sh
+++ b/%HOME%/.bash_utils/cxx.sh
@@ -37,7 +37,7 @@ _runc_usage() (
echo "$prefix: $msg"
done
- echo "usage: $prefix [-h|--help] [-c|--comp-arg ARG]... [-I DIR]... [-L DIR]... C_PATH... [-- [PROG_ARG]...]"
+ echo "usage: $prefix [-h|--help] [-c|--comp-arg ARG]... [-I DIR]... [-L DIR]... PATH... [-- [PROG_ARG]...]"
)
runc() (
@@ -130,106 +130,10 @@ runc() (
"$output_name" ${prog_args[@]+"${prog_args[@]}"}
)
-_runcxx_usage() (
- set -o errexit -o nounset -o pipefail
-
- local prefix="${FUNCNAME[0]}"
- [ "${#FUNCNAME[@]}" -gt 1 ] && prefix="${FUNCNAME[1]}"
-
- local msg
- for msg; do
- echo "$prefix: $msg"
- done
-
- echo "usage: $prefix [-h|--help] [-c|--comp-arg ARG]... [-I DIR]... [-L DIR]... CPP_PATH... [-- [PROG_ARG]...]"
-)
-
runcxx() (
set -o errexit -o nounset -o pipefail
-
- local -a cxx_flags=(${runcxx_flags[@]+"${runcxx_flags[@]}"})
- local -a src_files=()
- local -a include_dirs=()
- local -a lib_dirs=()
- local -a prog_args
-
- while [ "$#" -gt 0 ]; do
- local key="$1"
- shift
-
- case "$key" in
- -h|--help)
- _runcxx_usage
- return 0
- ;;
- -c|--comp-arg|-I|-L)
- if [ "$#" -eq 0 ]; then
- _runcxx_usage "missing argument for parameter: $key" >&2
- return 1
- fi
- ;;&
- -c|--comp-arg)
- cxx_flags+=("$1")
- shift
- ;;
- -I)
- include_dirs+=("$1")
- shift
- ;;
- -L)
- lib_dirs+=("$1")
- shift
- ;;
- --)
- break
- ;;
- *)
- src_files+=("$key")
- ;;
- esac
- done
-
- prog_args=("$@")
-
- if [ "${#src_files[@]}" -eq 0 ]; then
- _runcxx_usage 'at least one source file is required' >&2
- return 1
- fi
-
- local -a _src_files=(${src_files[@]+"${src_files[@]}"})
- src_files=()
-
- local src_file
- while IFS= read -d '' -r src_file; do
- src_files+=("$src_file")
- done < <( _get_absolute_path ${_src_files[@]+"${_src_files[@]}"} )
-
- if [ "${#include_dirs[@]}" -gt 0 ]; then
- local include_dir
- while IFS= read -d '' -r include_dir; do
- cxx_flags+=("-I$include_dir")
- done < <( _get_absolute_path ${include_dirs[@]+"${include_dirs[@]}"} )
- fi
-
- if [ "${#lib_dirs[@]}" -gt 0 ]; then
- local lib_dir
- while IFS= read -d '' -r lib_dir; do
- cxx_flags+=("-L$lib_dir")
- done < <( _get_absolute_path ${lib_dirs[@]+"${lib_dirs[@]}"} )
- fi
-
- local build_dir
- build_dir="$( mktemp --directory )"
-
- trap "$( printf -- 'popd > /dev/null && rm -rf -- %q' "$build_dir" )" 0
- pushd "$build_dir" > /dev/null
-
- local output_name
- output_name="$( mktemp --tmpdir=. -- "${FUNCNAME[0]}XXX${_runc_exe_ext-}" )"
-
- "${runcxx_compiler:-g++}" -o "$output_name" \
- ${src_files[@]+"${src_files[@]}"} \
- ${cxx_flags[@]+"${cxx_flags[@]}"}
-
- "$output_name" ${prog_args[@]+"${prog_args[@]}"}
+ local -a runc_flags=(${runcxx_flags[@]+"${runcxx_flags[@]}"})
+ BASH_ENV=<( declare -p runc_flags ) \
+ runc_compiler="${runcxx_compiler:-g++}" \
+ runc "$@"
)