From bd0b0e16402aa70f5c42e9d575f3f1b503b9096e Mon Sep 17 00:00:00 2001
From: Sandipan Mohanty <s.mohanty@fz-juelich.de>
Date: Wed, 4 May 2022 14:58:01 +0200
Subject: [PATCH] Add pathutils and aliases

---
 code/bash/aliases.sh   |  7 +++++
 code/bash/pathutils.sh | 71 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 78 insertions(+)
 create mode 100644 code/bash/aliases.sh
 create mode 100644 code/bash/pathutils.sh

diff --git a/code/bash/aliases.sh b/code/bash/aliases.sh
new file mode 100644
index 0000000..b326077
--- /dev/null
+++ b/code/bash/aliases.sh
@@ -0,0 +1,7 @@
+alias cf="clang-format --style=WebKit -i"
+alias C="clang++ -std=c++20 -stdlib=libc++"
+alias Cm="clang++ -std=c++20 -stdlib=libc++ -fmodules -fimplicit-module-maps"
+alias G="g++ -std=c++20 -pedantic -Wall"
+alias Gm="g++ -std=c++20 -fmodules-ts -pedantic -Wall"
+alias Gh="g++ -std=c++20 -fmodules-ts -xc++-system-header"
+
diff --git a/code/bash/pathutils.sh b/code/bash/pathutils.sh
new file mode 100644
index 0000000..be5c3a4
--- /dev/null
+++ b/code/bash/pathutils.sh
@@ -0,0 +1,71 @@
+#!/bin/bash
+
+# ***********************************************
+#  Programming in C++
+#  09 -- 13 May 2022
+#  Jülich Supercomputing Centre
+# ***********************************************
+
+rmspecial() {
+    sed -e 's/[]\/()$*.^|[]/\\&/g' <<< "$1"
+}
+
+# Usage:
+# prepend_path NAME_OF_PATH_ENV_VAR LOCATION_TO_PREPEND
+prepend_path() {
+    local pathtochange prevpath
+    pathtochange=$1
+    prevpath=${!pathtochange}
+    if [ -d "$2" ]; then
+        [[ ":${prevpath}:" != *":$2:"* ]] && prevpath="$2:${prevpath}"
+    fi
+    eval "export ${pathtochange}=${prevpath}"
+}
+
+# Usage:
+# remove_path_element NAME_OF_PATH_ENV_VAR LOCATION_TO_REMOVE_FROM_IT
+remove_path_element() {
+    local pathtochange prevpath toremove
+    pathtochange=$1
+    prevpath=${!pathtochange}
+    toremove=$(rmspecial $2)
+    prevpath=$(eval "echo ${prevpath} | sed -e 's#$toremove:##'")
+    prevpath=$(eval "echo ${prevpath} | sed -e 's#:$toremove##'")
+    eval "export ${pathtochange}=${prevpath}"
+}
+
+# Usage:
+# pathadd /a/b/c/bin
+pathadd() {
+    prepend_path PATH $1
+}
+# Usage:
+# pathrm /a/b/c/bin
+pathrm() {
+    remove_path_element PATH $1
+}
+libpathadd() {
+    prepend_path LD_LIBRARY_PATH $1
+    prepend_path LD_RUN_PATH $1
+    prepend_path LIBRARY_PATH $1
+}
+libpathrm() {
+    remove_path_element LD_LIBRARY_PATH $1
+    remove_path_element LD_RUN_PATH $1
+    remove_path_element LIBRARY_PATH $1
+}
+
+incpathadd() {
+    prepend_path CPATH $1
+}
+incpathrm() {
+    remove_path_element CPATH $1
+}
+cmpathadd() {
+    prepend_path CMAKE_PREFIX_PATH $1
+}
+cmpathrm() {
+    remove_path_element CMAKE_PREFIX_PATH $1
+}
+
+
-- 
GitLab