summaryrefslogtreecommitdiffhomepage
path: root/sysinfo
diff options
context:
space:
mode:
authormidipix <writeonce@midipix.org>2015-09-21 23:30:03 -0400
committermidipix <writeonce@midipix.org>2016-11-10 23:35:21 -0500
commitbd5bd5df26c6a82db479a39022b218fd45765be1 (patch)
treeb69ef851b2aac686065d09f2d74ef4c063186348 /sysinfo
parentb59520a939af9869f6a0f84848d2be5c59a64fc1 (diff)
downloadperk-bd5bd5df26c6a82db479a39022b218fd45765be1.tar.bz2
perk-bd5bd5df26c6a82db479a39022b218fd45765be1.tar.xz
build system: add support for non-portable host headers.
Diffstat (limited to 'sysinfo')
-rwxr-xr-xsysinfo/host/host.sh82
1 files changed, 82 insertions, 0 deletions
diff --git a/sysinfo/host/host.sh b/sysinfo/host/host.sh
new file mode 100755
index 0000000..50186e7
--- /dev/null
+++ b/sysinfo/host/host.sh
@@ -0,0 +1,82 @@
+#!/bin/sh
+
+error_msg()
+{
+ echo $@ >&2
+}
+
+host_test()
+{
+ mb_hdrdir=$(pwd)/build
+ mkdir -p $mb_hdrdir || exit 2
+
+ if [ x"$mb_compiler" = x ]; then
+ echo "config error: compiler not set."
+ exit 2
+ fi
+
+ "$mb_compiler" -dM -E - < /dev/null > /dev/null && return 0
+
+ error_msg "config error: invalid compiler."
+ exit 2
+}
+
+host_endian_h()
+{
+ mb_header='endian.h'
+ rm -f "$mb_hdrdir"/$mb_header
+
+ # portable
+ "$mb_compiler" $mb_cflags \
+ --include=$mb_header -E - < /dev/null > /dev/null 2>/dev/null \
+ && return 0
+
+ # non-portable
+ mb_hosthdr=
+
+ [ -z $mb_hosthdr ] && "$mb_compiler" $mb_cflags \
+ --include='sys/'$mb_header -E - < /dev/null > /dev/null 2>/dev/null \
+ && mb_hosthdr='sys/'$mb_header
+
+ [ -z $mb_hosthdr ] && "$mb_compiler" $mb_cflags \
+ --include='machine/'$mb_header -E - < /dev/null > /dev/null 2>/dev/null \
+ && mb_hosthdr='machine/'$mb_header
+
+ if [ x"$mb_hosthdr" = x ]; then
+ error_msg "config error: could not find an alternate <$mb_header>."
+ exit 2
+ fi
+
+ printf "#include <%s>\\n" $mb_hosthdr > "$mb_hdrdir"/$mb_header || exit 2
+}
+
+
+# one: args
+for arg ; do
+ case "$arg" in
+ --help) usage
+ ;;
+ --compiler=*)
+ mb_compiler=${arg#*=}
+ ;;
+ --cflags=*)
+ mb_cflags=${arg#*=}
+ ;;
+ *)
+ error_msg ${arg#}: "unsupported config argument."
+ exit 2
+ ;;
+ esac
+done
+
+
+# two: test
+host_test
+
+
+# three: headers
+host_endian_h
+
+
+# all done
+exit 0