-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcpp-add-header-file-ifdef.sh
executable file
·76 lines (58 loc) · 1.43 KB
/
cpp-add-header-file-ifdef.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#!/bin/bash
# VSCode integration:
#
# tasks.json:
#
# "tasks": [
# {
# "label": "cpp add header file ifdef",
# "type": "shell",
# "command": "/home/d9k/scripts/cpp-add-header-file-ifdef.sh ${file} ${workspaceFolder}",
# "presentation": {
# "echo": true,
# "reveal": "always",
# "focus": true,
# "close": false,
# "panel": "shared",
# "clear": true
# },
# "problemMatcher": []
# },
function echoerr {
printf "%s\n" "$*" >&2;
}
function echo_help {
echoerr "Examples:"
echoerr " cpp-add-header-file-ifdef.sh OUTPUT_FILE PROJECT_DIR"
}
if [ "$#" -lt 2 ]; then
echo_help
exit
fi
OUTPUT_FILE="$1"
PROJECT_DIR="$2"
echo "OUTPUT_FILE: $OUTPUT_FILE"
echo "PROJECT_DIR: $PROJECT_DIR"
INPUT_STRINGS=$(cat "$OUTPUT_FILE")
# echo "# Content: "
# echo "$INPUT_STRINGS"
FILE_REL_PATH=$(realpath -s --relative-to="$PROJECT_DIR" "$OUTPUT_FILE")
echo "FILE_REL_PATH: $FILE_REL_PATH"
FILE_REL_PATH_STRIPPED=$( \
echo "$FILE_REL_PATH" \
| sed 's|include/||' \
)
echo "FILE_REL_PATH_STRIPPED: $FILE_REL_PATH_STRIPPED"
CONST_NAME=$(
echo "$FILE_REL_PATH_STRIPPED" \
| sed 's|/|_|g' \
| sed 's|\.|_|g' \
| sed 's|-|_|g' \
| awk '{ print toupper($0) }'
)
echo "CONST_NAME: $CONST_NAME"
OUTPUT_STRINGS="#ifndef $CONST_NAME
#define $CONST_NAME
$INPUT_STRINGS
#endif // $CONST_NAME"
printf "$OUTPUT_STRINGS" > "$OUTPUT_FILE"