[tor-commits] [tlsdate/master] Add build support for Haiku and perhaps BeOS; needs testing

ioerror at torproject.org ioerror at torproject.org
Wed Apr 24 11:10:36 UTC 2013


commit f0f17b98fa4c2a5a20a255be4b631d9e3d8bf704
Author: Jacob Appelbaum <jacob at appelbaum.net>
Date:   Wed Apr 24 04:08:57 2013 -0700

    Add build support for Haiku and perhaps BeOS; needs testing
---
 INSTALL               |    8 ++++++++
 configure.ac          |   20 ++++++++++++++++++++
 m4/ax_platform.m4     |    4 ++++
 src/compat/clock.h    |    2 ++
 src/compat/include.am |    4 ++++
 src/conf.c            |    4 ++++
 src/include.am        |   24 ++++++++++++++++++++++++
 src/tlsdate-helper.h  |    4 ++++
 src/util.h            |    4 ++++
 9 files changed, 74 insertions(+), 0 deletions(-)

diff --git a/INSTALL b/INSTALL
index 67554ae..170ad24 100644
--- a/INSTALL
+++ b/INSTALL
@@ -33,6 +33,7 @@ ports of tlsdate or for tlsdate integration on the following Operating Systems:
 Currently porting is in progress or partially documented for:
 
   Plan9 (with APE)
+  Haiku
 
 Building and install of tlsdate on GNU/Linux and FreeBSD:
 
@@ -110,6 +111,13 @@ On Plan9 the start of building might look something like this:
   /n/sources/contrib/fgb/root/rc/bin/contrib/install fgb/openssl
   mk install
 
+On Haiku we must use gcc4:
+
+  export CC=/boot/develop/abi/x86/gcc4/tools/gcc4.6.3-haiku-121101/bin/gcc
+  export LDFLAGS="$LDFLAGS -lbsd"
+  ./configure
+  make
+
 OpenBSD builds from source and is not yet in the port system:
 
   export AUTOCONF_VERSION=<your installed version>
diff --git a/configure.ac b/configure.ac
index 696f8c4..b3e7df1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -290,6 +290,26 @@ case "$host" in
             [""|yes|no], [UNPRIV_GROUP="nogroup"],
             [*], [UNPRIV_GROUP=$with_unpriv_group])
     AC_DEFINE_UNQUOTED([UNPRIV_GROUP], ["${UNPRIV_GROUP}"], [Unprivileged group])
+    ;;
+  *-beos*|*-haiku*)
+    dnl This is for BeOS and Haiku; we probably only support Haiku with gcc4
+    dnl Check for clock_gettime.  Some systems put it into -lc, while
+    dnl others use -lrt.  Try the first and fallback to the latter.
+    dnl on Haiku we require the bsd library for strsep
+    RT_LIB=
+    AC_CHECK_FUNC([clock_gettime], [:],
+                  [AC_CHECK_LIB([rt], [clock_gettime], [RT_LIB="-lrt"],
+                  [AC_MSG_ERROR([Your system lacks clock_gettime])])])
+    AC_SUBST(RT_LIB)
+    AC_ARG_WITH([unpriv-group],
+                [AS_HELP_STRING([--with-unpriv-group=<group>],
+                [Group to drop privs to @<:@default: nogroup@:>@])])
+    AS_CASE([$with_unpriv_group],
+            [""|yes|no], [UNPRIV_GROUP="nogroup"],
+            [*], [UNPRIV_GROUP=$with_unpriv_group])
+    AC_DEFINE_UNQUOTED([UNPRIV_GROUP], ["${UNPRIV_GROUP}"], [Unprivileged group])
+    LDFLAGS="$LDFLAGS -lbsd"
+    CC="/boot/develop/abi/x86/gcc4/tools/gcc-4.6.3-haiku-121101/bin/gcc"
     case "$host" in
       *-linux-androideabi)
         dnl This is for Android NDK as it is a special case of linux
diff --git a/m4/ax_platform.m4 b/m4/ax_platform.m4
index c613206..baffd1e 100644
--- a/m4/ax_platform.m4
+++ b/m4/ax_platform.m4
@@ -50,6 +50,9 @@
         [*cygwin*],
         [TARGET_CYGWIN="true"
         AC_DEFINE([TARGET_OS_CYGWIN],[1],[Whether we build for Cygwin])],
+        [*haiku*],
+        [TARGET_HAIKU="true"
+        AC_DEFINE([TARGET_OS_HAIKU],[1],[Whether we build for Haiku])],
         [*freebsd*],
         [TARGET_OS_FREEBSD="true"
         AC_DEFINE([TARGET_OS_FREEBSD],[1],[Whether we are building for FreeBSD])],
@@ -75,6 +78,7 @@
 
   AM_CONDITIONAL([BUILD_WIN32],[test "x${TARGET_WINDOWS}" = "xtrue"])
   AM_CONDITIONAL([TARGET_CYGWIN],[test "x${TARGET_CYGWIN}" = "xtrue"])
+  AM_CONDITIONAL([TARGET_HAIKU],[test "x${TARGET_HAIKU}" = "xtrue"])
   AM_CONDITIONAL([TARGET_OSX],[test "x${TARGET_OSX}" = "xtrue"])
   AM_CONDITIONAL([TARGET_LINUX],[test "x${TARGET_LINUX}" = "xtrue"])
   AM_CONDITIONAL([TARGET_FREEBSD],[test "x${TARGET_OS_FREEBSD}" = "xtrue"])
diff --git a/src/compat/clock.h b/src/compat/clock.h
index 7040d3c..e8220bd 100644
--- a/src/compat/clock.h
+++ b/src/compat/clock.h
@@ -36,6 +36,8 @@ struct tlsdate_time {
     mach_timespec_t tp;
 #elif _WIN32
     void *tp;
+#elif TARGET_OS_HAIKU
+    struct timespec tp;
 #elif TARGET_OS_CYGWIN
     struct timespec tp;
 #endif
diff --git a/src/compat/include.am b/src/compat/include.am
index b168c3a..9623362 100644
--- a/src/compat/include.am
+++ b/src/compat/include.am
@@ -44,4 +44,8 @@ if TARGET_CYGWIN
 src_compat_libtlsdate_compat_la_SOURCES+= src/compat/clock-linux.c
 endif
 
+if TARGET_HAIKU
+src_compat_libtlsdate_compat_la_SOURCES+= src/compat/clock-linux.c
+endif
+
 src_compat_libtlsdate_compat_la_LIBADD+= @RT_LIB@
diff --git a/src/conf.c b/src/conf.c
index 607f523..6182650 100644
--- a/src/conf.c
+++ b/src/conf.c
@@ -23,6 +23,10 @@
 #include "src/common/android.h" // XXX: Dirty hack - make this more generic later
 #endif
 
+#ifdef TARGET_OS_HAIKU
+#include "src/common/android.h" // XXX: Dirty hack - make this more generic later
+#endif
+
 #ifdef HAVE_ANDROID
 #include "src/common/android.h"
 #endif
diff --git a/src/include.am b/src/include.am
index c5ea63b..0ec38b2 100644
--- a/src/include.am
+++ b/src/include.am
@@ -107,6 +107,17 @@ check_PROGRAMS+= src/conf_unittest
 noinst_PROGRAMS+= src/conf_unittest
 endif
 
+if TARGET_HAIKU
+bin_PROGRAMS+= src/tlsdate
+bin_PROGRAMS+= src/tlsdate-helper
+
+src_conf_unittest_SOURCES = src/conf.c
+src_conf_unittest_SOURCES+= src/conf-unittest.c
+src_conf_unittest_SOURCES+= src/common/android.c
+check_PROGRAMS+= src/conf_unittest
+noinst_PROGRAMS+= src/conf_unittest
+endif
+
 if TARGET_OSX
 bin_PROGRAMS+= src/tlsdate
 bin_PROGRAMS+= src/tlsdate-helper
@@ -268,6 +279,19 @@ noinst_PROGRAMS+= src/proxy-bio_unittest
 endif
 endif
 
+if TARGET_HAIKU
+if !POLARSSL
+src_proxy_bio_unittest_LDADD = @SSL_LIBS@
+src_proxy_bio_unittest_SOURCES = src/proxy-bio.c
+src_proxy_bio_unittest_SOURCES+= src/proxy-bio-unittest.c
+src_proxy_bio_unittest_SOURCES+= src/test-bio.c
+src_proxy_bio_unittest_SOURCES+= src/util.c
+src_proxy_bio_unittest_SOURCES+= src/common/android.c
+check_PROGRAMS+= src/proxy-bio_unittest
+noinst_PROGRAMS+= src/proxy-bio_unittest
+endif
+endif
+
 # We're not shipping headers
 noinst_HEADERS+= src/routeup.h
 noinst_HEADERS+= src/test_harness.h
diff --git a/src/tlsdate-helper.h b/src/tlsdate-helper.h
index f3af23d..2456efc 100644
--- a/src/tlsdate-helper.h
+++ b/src/tlsdate-helper.h
@@ -14,6 +14,10 @@
 #include <stdint.h>
 #include <stdio.h>
 #include <string.h>
+#ifdef TARGET_OS_HAIKU
+#include <posix/string.h>
+#include <bsd/string.h>
+#endif
 #include <unistd.h>
 #include <sys/stat.h>
 #include <sys/time.h>
diff --git a/src/util.h b/src/util.h
index 7d7cb11..bfd61dd 100644
--- a/src/util.h
+++ b/src/util.h
@@ -12,6 +12,10 @@
 #include <string.h>
 #include <stdlib.h>
 
+#ifdef TARGET_OS_HAIKU
+#include <stdarg.h>
+#endif
+
 #define API __attribute__((visibility("default")))
 
 extern int verbose;



More information about the tor-commits mailing list