1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-11-15 12:08:33 +00:00
CLK/cmake/generate_CLK_SOURCES
Ryan Carsten Schmidt 01d9455897 Exclude *AllRAM*.cpp from CMake program sources.
These files serve as documentation and are used in tests.
2024-01-25 10:15:11 -06:00

59 lines
1.3 KiB
Bash
Executable File

#!/usr/bin/env bash
# Run this script to regenerate CLK_SOURCES.cmake after you add or remove any
# source files.
set -euo pipefail
script_dir=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &> /dev/null && pwd)
top_dir="$script_dir/.."
out="$script_dir/CLK_SOURCES.cmake"
trap 'rm -f "$tmp"' EXIT
tmp=$(mktemp "$out.XXXXXXXX")
awkscript='
BEGIN {
print ind pre "CLK_SOURCES"
}
{
if (NR > 1 && last != $1)
print ""
last = $1
sub("^", ind "\t")
print
}
END {
print ind ")"
}
'
write_sources() {
local ind="$1"
local pre="$2"
shift 2
find -s "$@" | awk -F/ -vind="$ind" -vpre="$pre" "$awkscript" || exit $?
}
cd "$top_dir"
printf '# Generated by %s.\n\n' "${BASH_SOURCE[0]##*/}" > "$tmp"
write_sources '' 'set(' [A-Z]* -name OSBindings -prune -o \
-name '*AllRAM*.cpp' -prune -o -name '*.cpp' -print >> "$tmp"
# TODO: Add 'Mac/Clock Signal'
# TODO: Add Qt
for dir in SDL; do
ui=$(echo "${dir%%/*}" | tr '[:lower:]' '[:upper:]')
dir="OSBindings/$dir"
printf '\nif(CLK_UI STREQUAL "%s")\n' "$ui" >> "$tmp"
if [[ $ui = "MAC" ]]; then
args=('-name' '*.m' '-o' '-name' '*.metal' '-o' '-name' '*.mm' '-o' '-name' '*.swift')
else
args=('-name' '*.cpp')
fi
write_sources $'\t' 'list(APPEND ' "$dir" "${args[@]}" >> "$tmp"
printf 'endif()\n' >> "$tmp"
done
mv "$tmp" "$out"