diff --git a/configure b/configure index b3ad4a0..b138ca4 100755 --- a/configure +++ b/configure @@ -2,51 +2,89 @@ OS=`uname -s` DEBUG=0 +PREFIX=/usr/local -create_linux_config_h() { - cat < src/config.h -#ifndef _CONFIG_H -#define _CONFIG_H +config_h_append_generic_endian() { + cat <> "$1" + +/* + * Generic compatibility + */ #include -#endif /* _CONFIG_H */ EOF } -create_darwin_config_h() { - cat < src/config.h +config_h_append_darwin_endian() { + cat <> "$1" + +/* + * Darwin compatibility + */ +#include + +#define htobe16(n) OSSwapHostToBigInt16(n) +#define htole16(n) OSSwapHostToLittleInt16(n) +#define be16toh(n) OSSwapBigToHostInt16(n) +#define le16toh(n) OSSwapLittleToHostInt16(n) + +#define htobe32(n) OSSwapHostToBigInt32(n) +#define htole32(n) OSSwapHostToLittleInt32(n) +#define be32toh(n) OSSwapBigToHostInt32(n) +#define le32toh(n) OSSwapLittleToHostInt32(n) + +#define htobe64(n) OSSwapHostToBigInt64(n) +#define htole64(n) OSSwapHostToLittleInt64(n) +#define be64toh(n) OSSwapBigToHostInt64(n) +#define le64toh(n) OSSwapLittleToHostInt64(n) +EOF +} + +config_h_append_bsd_pty() { + cat <> "$1" + +/* + * BSD openpty(3) compatibility + */ +#include +EOF +} + +config_h_append_linux_pty() { + cat <> "$1" + +/* + * Linux openpty(3) compatibility + */ +#include +EOF +} + +config_h_create() { + cat < "$1" #ifndef _CONFIG_H #define _CONFIG_H -#include +EOF -#ifdef __LITTLE_ENDIAN__ -#define __DO_SWAP_BYTES -#endif /* _DO_SWAP_BYTES */ -#endif /* _CONFIG_H */ -EOF -} - -create_common_build_mk() { - if [ "$DEBUG" = 1 ]; then - cat <<'EOF' > mk/build.mk -CGFLAGS = -g -fno-inline -EOF - else - cat <<'EOF' > mk/build.mk -CGFLAGS = -EOF + if [ "$OS" = "Darwin" ]; then + config_h_append_darwin_endian "$1" + else + config_h_append_generic_endian "$1" fi - cat <<'EOF' >> mk/build.mk -CWFLAGS = -Wall -COFLAGS = -O2 -CFLAGS = $(CGFLAGS) $(CWFLAGS) $(COFLAGS) + if [ "$OS" = "Linux" ]; then + config_h_append_linux_pty "$1" + else + config_h_append_bsd_pty "$1" + fi + + cat <> "$1" + +#endif /* _CONFIG_H */ EOF } -create_linux_build_mk() { - create_common_build_mk $@ - - cat <<'EOF' >> mk/build.mk +build_mk_append_generic() { + cat <<'EOF' >> "$1" LLFLAGS = -shared -Wl,-soname=$(SONAME) STATIC = lib$(LIBNAME).a @@ -55,14 +93,33 @@ SONAME_SHORT = lib$(LIBNAME).so SONAME = $(SONAME_SHORT).$(VERSION_MAJOR) SONAME_FULL = $(SONAME_SHORT).$(VERSION) -PREFIX = /usr/local +EOF + + cat <> "$1" +PREFIX = $PREFIX EOF } -create_darwin_build_mk() { - create_common_build_mk $@ +build_mk_append_man_generic() { + cat <<'EOF' >> "$1" +MANDIR = $(PREFIX)/share/man +EOF +} - cat <<'EOF' >> mk/build.mk +build_mk_append_man_bsd() { + if [ "$PREFIX" = "/usr" ]; then + local mandir='$(PREFIX)/share/man' + else + local mandir='$(PREFIX)/man' + fi + + cat <> "$1" +MANDIR = $mandir +EOF +} + +build_mk_append_darwin() { + cat <<'EOF' >> "$1" LLFLAGS = -dynamiclib -current_version $(VERSION) STATIC = lib$(LIBNAME).a @@ -71,15 +128,76 @@ SONAME_SHORT = lib$(LIBNAME).dylib SONAME = lib$(LIBNAME).$(VERSION_MAJOR).dylib SONAME_FULL = lib$(LIBNAME).$(VERSION).dylib -PREFIX = /usr/local EOF + + cat <> "$1" +PREFIX = $PREFIX +EOF +} + +build_mk_create() { + if [ "$DEBUG" = 1 ]; then + cat <<'EOF' > "$1" +CGFLAGS = -g -fno-inline +EOF + else + cat <<'EOF' > "$1" +CGFLAGS = +EOF + fi + + if [ "$OS" = "Darwin" ]; then + build_mk_append_darwin "$1" + else + build_mk_append_generic "$1" + fi + + case $OS in + FreeBSD|NetBSD|OpenBSD) + build_mk_append_man_bsd "$1" + ;; + + *) + build_mk_append_man_generic "$1" + ;; + esac + + cat <<'EOF' >> "$1" +CWFLAGS = -Wall +COFLAGS = -O2 +CFLAGS = $(CGFLAGS) $(CWFLAGS) $(COFLAGS) + +AR = $(CROSS)ar +RANLIB = $(CROSS)ranlib + +RM = /bin/rm +LN = /bin/ln +RMDIR = /bin/rmdir +INSTALL = /usr/bin/install +EOF +} + +parse_opt() { + local _IFS="$IFS" + + IFS="=" + + set -- $1 + + echo $2 + + IFS="$_IFS" } for arg in $@; do case $arg in - "--enable-debug") + --enable-debug) DEBUG=1 ;; + + --prefix=*) + PREFIX="`parse_opt "$arg"`" + ;; esac done @@ -87,14 +205,5 @@ if [ ! -d "mk" ]; then mkdir -m 0755 mk fi -case $OS in - Linux) - create_linux_config_h - create_linux_build_mk - ;; - - Darwin) - create_darwin_config_h - create_darwin_build_mk - ;; -esac +config_h_create "src/config.h" +build_mk_create "mk/build.mk"