bundle.sh (803B)
1 #!/usr/bin/env bash 2 3 usage="Usage: $0 bundle.c amalgam.h" 4 target=${1:?$usage} 5 source=${2:?$usage} 6 7 [[ -f $source ]] || (echo source missing && exit) 8 9 declare -A seen 10 11 cat /dev/null > "$target" 12 13 bundle() { 14 local file=$1 15 16 [[ -z "${seen[$file]}" ]] || return 1 17 seen[$file]=1 18 19 echo "// Inlined $file: //" >> "$target" 20 IFS="" 21 while read -r line; do 22 if [[ $line =~ ^\#include\ \"(.+)\" && -f ${BASH_REMATCH[1]} ]]; then 23 include=${BASH_REMATCH[1]} 24 if bundle $include; then 25 echo "$line" >> "$target" 26 else 27 echo "//$line" >> "$target" 28 fi 29 else 30 echo "$line" >> "$target" 31 fi 32 done < $file 33 echo "// End of inlined $file //" >> "$target" 34 return 0 35 } 36 37 bundle "$source"