echo "going ahead with CFLAGS=\"$CFLAGS\"..." >&2
# generate header
+cat header.h > gen/jh.h
for source_file in $(ls|grep '\.c$'); do
echo "extracting header data from $source_file..." >&2
source_name="$(sed 's|\.c$||' <<< "$source_file")"
echo ''
echo ''
-done > gen/jh.h
+done >> gen/jh.h
# preprocess all source files
for source_file in $(ls|grep '\.c$'); do
(set +e +o pipefail; grep -v '^PUBLIC_CONST '; exit 0) |
sed 's|^PUBLIC_FN ||g' |
(set +e +o pipefail; grep -v '^HEADER '; exit 0) |
+ sed 's| *JH_ATTR_[A-Z_]*||g' |
cat >> "gen/realc/$source_name.c"
if [ $? -ne 0 ]; then exit 1; fi
#define GENERIC_ERROR \
"unexpected generic failure of some kind"
-PUBLIC_FN void xperror(const char *s, int show_errno) {
+PUBLIC_FN void xperror(const char *s, int show_errno) JH_ATTR_NORETURN {
if (!s) s=GENERIC_ERROR;
if (show_errno) {
perror(s);
--- /dev/null
+/***** COMPILER-SPECIFIC STUFF *****/
+#ifdef __GNUC__
+ #define JH_ATTR_NORETURN __attribute__ ((noreturn))
+#else
+ #define JH_ATTR_NORETURN /* nothing */
+#endif