Hi,

Stefan Sperling writes:
> The first is that I use OpenBSD and OpenBSD's threading implementation
> is a pure userspace implementation. It has to set stdin and stdout to
> non-blocking -- otherwise, whenever a thread blocks for i/o in the kernel the
> userspace thread-scheduler would also be blocked and couldn't switch to
> another thread. However, non-blocking stdio makes it very inconvenient
> to do things like "svn diff | less" because less expects blocking reads.
> The lines get garbled when you start scrolling in less.
> (Kernel thread support is being worked on by OpenBSD developers.)
> 
> The second reason is that virtually nobody else is compiling and running
> without thread support in APR. This sometimes causes thread-less cases
> to be overlooked. Most recently I found a bug in the performance branch
> due to this.  So it's good to have test coverage for the thread-less case.
> Because of this I will likely continue compiling APR thread-less even when
> OpenBSD finally gets kernel thread support.

Thanks for the explanation! Unfortunately, I'm not able to get the
build to break with threading disabled anymore :| Have to run a few
more experiments before I can conclusively say what went wrong back
then.

> Your patch is too short. It's missing at least one hunk. Because if threading
> is enabled for APR, you should also enable it for sqlite and any other
> dependencies affected.

Ok, got it. Here's my second try.

[[[
Makefile.svn: Optionally allow building with threading support

* tools/dev/unix-build/Makefile.svn: Add a new ENABLE_THREADING
  variable to control whether APR and sqlite should be built with
  threading support.
]]]


Index: tools/dev/unix-build/Makefile.svn
===================================================================
--- tools/dev/unix-build/Makefile.svn   (revision 1040658)
+++ tools/dev/unix-build/Makefile.svn   (working copy)
@@ -3,6 +3,7 @@
 # WARNING: This may or may not work on your system. This Makefile is
 # an example, rather than a ready-made universal solution.
 
+ENABLE_THREADING ?= no # OpenBSD doesn't have kernel threads for example
 ENABLE_PYTHON_BINDINGS ?= yes
 ENABLE_RUBY_BINDINGS ?= yes
 ENABLE_PERL_BINDINGS ?= yes
@@ -241,12 +242,21 @@
                | sed -e '/^.*APR_ADDTO(CPPFLAGS, \[-D_POSIX_THREADS\]).*$$/d' \
                        > $(APR_SRCDIR)/build/apr_hints.m4
        cd $(APR_SRCDIR) && ./buildconf
-       cd $(APR_OBJDIR) \
-               && env CFLAGS="-O0 -g $(PROFILE_CFLAGS)" \
-               $(APR_SRCDIR)/configure \
-               --prefix=$(PREFIX)/apr \
-               --enable-maintainer-mode \
-               --disable-threads
+       if [ $(ENABLE_THREADING) = yes ]; then \
+               cd $(APR_OBJDIR) \
+                       && env CFLAGS="-O0 -g $(PROFILE_CFLAGS)" \
+                       $(APR_SRCDIR)/configure \
+                       --prefix=$(PREFIX)/apr \
+                       --enable-maintainer-mode \
+                       --enable-threads; \
+       else \
+               cd $(APR_OBJDIR) \
+                       && env CFLAGS="-O0 -g $(PROFILE_CFLAGS)" \
+                       $(APR_SRCDIR)/configure \
+                       --prefix=$(PREFIX)/apr \
+                       --enable-maintainer-mode \
+                       --disable-threads; \
+       fi;
        touch $@
 
 # compile apr
@@ -706,12 +716,21 @@
 
 # configure sqlite
 $(SQLITE_OBJDIR)/.configured: $(SQLITE_OBJDIR)/.retrieved
-       cd $(SQLITE_OBJDIR) \
-               && env CFLAGS="-g $(PROFILE_CFLAGS)" \
-               $(SQLITE_SRCDIR)/configure \
-               --prefix=$(PREFIX)/sqlite \
-               --disable-tcl \
-               --disable-threadsafe
+       if [ $(ENABLE_THREADING) = yes ]; then \
+               cd $(SQLITE_OBJDIR) \
+                       && env CFLAGS="-g $(PROFILE_CFLAGS)" \
+                       $(SQLITE_SRCDIR)/configure \
+                       --prefix=$(PREFIX)/sqlite \
+                       --disable-tcl \
+                       --enable-threadsafe; \
+       else \
+               cd $(SQLITE_OBJDIR) \
+                       && env CFLAGS="-g $(PROFILE_CFLAGS)" \
+                       $(SQLITE_SRCDIR)/configure \
+                       --prefix=$(PREFIX)/sqlite \
+                       --disable-tcl \
+                       --disable-threadsafe; \
+       fi;
        touch $@
 
 # compile sqlite

Reply via email to