95 lines
2.0 KiB
Bash
Executable File
95 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# vim: set sw=4 sts=4 et tw=0 :
|
|
|
|
echo -n "/* vim"
|
|
echo ": set ro : */"
|
|
echo
|
|
echo "/* ******************************************************** */"
|
|
echo "/* THIS IS A GENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY */"
|
|
echo "/* ******************************************************** */"
|
|
|
|
what_to_make=${1}
|
|
shift
|
|
|
|
include_cc() {
|
|
if [[ "${what_to_make}" == "--source" ]] ; then
|
|
echo
|
|
cat
|
|
echo
|
|
fi
|
|
}
|
|
|
|
include_hh() {
|
|
if [[ "${what_to_make}" == "--header" ]] ; then
|
|
echo
|
|
cat
|
|
echo
|
|
fi
|
|
}
|
|
|
|
use_namespace() {
|
|
if [[ "${what_to_make}" == "--source" ]] ; then
|
|
echo "using namespace $1;"
|
|
fi
|
|
}
|
|
|
|
if ! source ${1} ; then
|
|
echo "source ${1} failed" 1>&2
|
|
exit 7
|
|
fi
|
|
|
|
set | grep '^make_nn_.*() $' | sort -r | \
|
|
while read name ; do
|
|
name=${name##make_nn_}
|
|
name=${name%% *}
|
|
|
|
if [[ "${what_to_make}" == "--header" ]] ; then
|
|
namespace() {
|
|
a=${1//::/ }
|
|
echo
|
|
for ns in ${a}; do
|
|
echo "${indent}namespace ${ns}"
|
|
echo "${indent}{"
|
|
indent+=" "
|
|
done
|
|
|
|
echo "${indent}template <typename>"
|
|
echo "${indent}struct ${name};"
|
|
}
|
|
|
|
name() {
|
|
class=$1
|
|
echo
|
|
echo "${indent}template<>"
|
|
echo "${indent}struct ${name}<${class}>"
|
|
echo "${indent}{"
|
|
echo "${indent} static const char * name;"
|
|
echo "${indent}};"
|
|
}
|
|
|
|
make_nn_${name}
|
|
|
|
while [[ -n ${indent} ]]; do
|
|
indent=${indent/ }
|
|
echo "${indent}}"
|
|
done
|
|
|
|
elif [[ "${what_to_make}" == "--source" ]] ; then
|
|
namespace() {
|
|
ns="${1}::"
|
|
}
|
|
|
|
name() {
|
|
class=$1
|
|
class_name=${2:-$1}
|
|
echo "const char * ${ns}${name}<${class}>::name = \"${class_name}\";"
|
|
}
|
|
|
|
echo
|
|
make_nn_${name}
|
|
else
|
|
echo "bad argument (expected --header or --source)" 1>&2
|
|
exit 1
|
|
fi
|
|
done
|