aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/.bash_utils/cxx.sh
diff options
context:
space:
mode:
Diffstat (limited to '.bash_utils/cxx.sh')
-rw-r--r--.bash_utils/cxx.sh118
1 files changed, 118 insertions, 0 deletions
diff --git a/.bash_utils/cxx.sh b/.bash_utils/cxx.sh
new file mode 100644
index 0000000..49d4549
--- /dev/null
+++ b/.bash_utils/cxx.sh
@@ -0,0 +1,118 @@
+#!/usr/bin/env bash
+
+# Copyright (c) 2016 Egor Tensin <Egor.Tensin@gmail.com>
+# This file is part of the "Cygwin configuration files" project.
+# For details, see https://github.com/egor-tensin/cygwin-home.
+# Distributed under the MIT License.
+
+runc_flags=('-Wall' '-Wextra')
+
+runc() (
+ set -o errexit -o nounset -o pipefail
+
+ local -a c_flags=("${runc_flags[@]+"${runc_flags[@]}"}")
+ local -a src_files
+ local -a prog_flags
+
+ while [ "$#" -gt 0 ]; do
+ case "$1" in
+ -c|--c-flags)
+ if [ "$#" -le 1 ]; then
+ echo "${FUNCNAME[0]}: missing argument for parameter: $1" >&2
+ return 1
+ fi
+ shift
+ c_flags+=("$1")
+ shift
+ ;;
+
+ -h|--help)
+ echo "usage: ${FUNCNAME[0]} [-h|--help] [-c|--c-flags FLAG]"
+ return 0
+ ;;
+
+ --)
+ shift
+ break
+ ;;
+
+ *)
+ src_files+=("$( realpath "$1" )")
+ shift
+ ;;
+ esac
+ done
+
+ prog_flags=("$@")
+
+ 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.exe" )"
+
+ gcc -o "$output_name" \
+ "${c_flags[@]+"${c_flags[@]}"}" \
+ "${src_files[@]+"${src_files[@]}"}"
+
+ "$output_name" "${prog_flags[@]+"${prog_flags[@]}"}"
+)
+
+runcxx_flags=('-Wall' '-Wextra' '-std=c++14')
+
+runcxx() (
+ set -o errexit -o nounset -o pipefail
+
+ local -a cxx_flags=("${runcxx_flags[@]+"${runcxx_flags[@]}"}")
+ local -a src_files
+ local -a prog_flags
+
+ while [ "$#" -gt 0 ]; do
+ case "$1" in
+ -c|--cxx-flags)
+ if [ "$#" -le 1 ]; then
+ echo "${FUNCNAME[0]}: missing argument for parameter: $1" >&2
+ return 1
+ fi
+ shift
+ cxx_flags+=("$1")
+ shift
+ ;;
+
+ -h|--help)
+ echo "usage: ${FUNCNAME[0]} [-h|--help] [-c|--cxx-flags FLAG]"
+ return 0
+ ;;
+
+ --)
+ shift
+ break
+ ;;
+
+ *)
+ src_files+=("$( realpath "$1" )")
+ shift
+ ;;
+ esac
+ done
+
+ prog_flags=("$@")
+
+ 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.exe" )"
+
+ g++ -o "$output_name" \
+ "${cxx_flags[@]+"${cxx_flags[@]}"}" \
+ "${src_files[@]+"${src_files[@]}"}"
+
+ "$output_name" "${prog_flags[@]+"${prog_flags[@]}"}"
+)