Added combiner option to keep "#pragma once" directives
Keeping the "#pragma once" directives in the combined headers but not in the combined source.
diff --git a/contrib/single_file_transcoder/README.md b/contrib/single_file_transcoder/README.md
index c8af8da..d37788e 100644
--- a/contrib/single_file_transcoder/README.md
+++ b/contrib/single_file_transcoder/README.md
@@ -16,9 +16,9 @@
```
Excluding the BC7 mode 6 support reduces the generated source by 1.2MB, which is the choice taken in `basisu_transcoder-in.cpp` and used in the examples, with `create_transcoder.sh` running the above script, creating the final `basisu_transcoder.cpp`.
-The combiner script can also generate separate amalgamated header and source files, using the `-k` option to keep the specified inline directive:
+The combiner script can also generate separate amalgamated header and source files, using the `-k` option to keep the specified inline directive, and `-p` to keep the `#pragma once` directives in the header:
```
-./combine.sh -r ../../transcoder -o basisu_transcoder.h ../../transcoder/basisu_transcoder.h
+./combine.sh -r ../../transcoder -o basisu_transcoder.h -p ../../transcoder/basisu_transcoder.h
./combine.sh -r ../../transcoder -x basisu_transcoder_tables_bc7_m6.inc -k basisu_transcoder.h -o basisu_transcoder.cpp basisu_transcoder-in.cpp
diff --git a/contrib/single_file_transcoder/combine.sh b/contrib/single_file_transcoder/combine.sh
index 0a59391..aedae92 100755
--- a/contrib/single_file_transcoder/combine.sh
+++ b/contrib/single_file_transcoder/combine.sh
@@ -5,7 +5,8 @@
# Note: this POSIX-compliant script is many times slower than the original bash
# implementation (due to the grep calls) but it runs and works everywhere.
#
-# TODO: ROOTS and FOUND as arrays (since they fail on paths with spaces)
+# TODO: ROOTS, FOUND, etc., as arrays (since they fail on paths with spaces)
+# TODO: revert to Bash-only regex (the grep ones being too slow)
#
# Script released under a CC0 license.
@@ -24,12 +25,16 @@
# Optional destination file (empty string to write to stdout)
DESTN=""
+# Whether the "#pragma once" directives should be written to the output
+PONCE=0
+
# Prints the script usage then exits
usage() {
echo "Usage: $0 [-r <path>] [-x <header>] [-k <header>] [-o <outfile>] infile"
echo " -r file root search path"
echo " -x file to completely exclude from inlining"
echo " -k file to exclude from inlining but keep the include directive"
+ echo " -p keep any '#pragma once' directives (removed by default)"
echo " -o output file (otherwise stdout)"
echo "Example: $0 -r ../my/path - r ../other/path -o out.c in.c"
exit 1
@@ -104,7 +109,13 @@
fi
else
# Skip any 'pragma once' directives, otherwise write the source line
- if echo "$line" | grep -Eqv '^\s*#\s*pragma\s*once\s*'; then
+ local write=$PONCE
+ if [ $write -eq 0 ]; then
+ if echo "$line" | grep -Eqv '^\s*#\s*pragma\s*once\s*'; then
+ write=1
+ fi
+ fi
+ if [ $write -ne 0 ]; then
write_line "$line"
fi
fi
@@ -114,7 +125,7 @@
fi
}
-while getopts ":r:x:k:o:" opts; do
+while getopts ":r:x:k:po:" opts; do
case $opts in
r)
ROOTS="$ROOTS $OPTARG"
@@ -125,6 +136,9 @@
k)
KINCS="$KINCS $OPTARG"
;;
+ p)
+ PONCE=1
+ ;;
o)
DESTN="$OPTARG"
;;