# YES, THIS NEEDS BASH, NOT /bin/sh (e.g. for <<<).
# Copyright (2013) Jann Horn <jann@thejh.net>
-# This code is licensed under the AGPLv3.
# -f for files with weird names
# -u for coding mistakes (or against, to be precise)
# flags for the build - adjust for your needs
# delete all the generated stuff afterwards (with `rm -r gen`)
CC='gcc'
-CFLAGS='-g -O0 -Wall -Werror -fPIC -std=c99'
+CFLAGS='-O3 -Wall -Werror -fPIC -std=c99 -march=native'
# create build environment if it doesn't exist yet
mkdir -p gen # contains all generated files
sed 's|^PUBLIC_FN \(.*\){|KEEPLINE \1;|g' |
sed 's|^PUBLIC_CONST |KEEPLINE #define |g' |
sed 's|^HEADER |KEEPLINE |g' |
- grep '^KEEPLINE' |
+ (set +e +o pipefail; grep '^KEEPLINE'; exit 0) |
sed 's|^KEEPLINE ||g'
echo ''
echo ''
-done > gen/libjh.h
+done > gen/jh.h
# preprocess all source files
for source_file in $(ls|grep '\.c$'); do
source_name="$(sed 's|\.c$||' <<< "$source_file")"
# do our own preprocessing
- echo '#include "../libjh.h"' > "gen/realc/$source_name.c"
+ echo '#include "../jh.h"' > "gen/realc/$source_name.c"
cat "$source_file" |
- grep -v '^PUBLIC_CONST ' |
+ (set +e +o pipefail; grep -v '^PUBLIC_CONST '; exit 0) |
sed 's|^PUBLIC_FN ||g' |
- grep -v '^HEADER ' |
+ (set +e +o pipefail; grep -v '^HEADER '; exit 0) |
cat >> "gen/realc/$source_name.c"
if [ $? -ne 0 ]; then exit 1; fi
# ... and link!
cd gen/obj
$CC -shared -Wl,-soname,libjh.so -o ../libjh.so $(ls)
-cd ../..
\ No newline at end of file
+cd ../..