Skip to content
Go to file
Cannot retrieve contributors at this time
28335 lines (17153 sloc) 786 KB
2011-10-26 02:49 Fergus Henderson <>
After my change to gzip the man pages before installing them,
I had to make a couple more changes to get "make distcheck" to pass.
Reviewed by Craig Silverstein.
2011-10-25 01:49 Fergus Henderson <>
*, man:
Gzip the man pages before installing them.
This is required by the Debian policy manual
and is also assumed by our packaging/RedHat/rpm.spec file
which we use for building both RPM and Debian packages.
Also some whitespaces changes; only the first of the
four segments in this patch has non-whitespace changes.
2011-10-25 00:42 Fergus Henderson <>
* ChangeLog, NEWS,
Update the NEWS and ChangeLog files, and set the version number to
in preparation for releasing distcc version 3.2.
Reviewed by Craig Silverstein.
2011-10-24 23:26 Fergus Henderson <>
* doc/web/man/distcc_1.html, doc/web/man/distccd_1.html,
doc/web/man/distccmon_text_1.html, doc/web/man/include_server_1.html,
doc/web/man/pump_1.html, man/distcc.1, man/include_server.1:
Regenerate the checked-in HTML for the man pages.
The HTML files were generated automatically using
sudo apt-get install troffcvt
make man-html
But I have also changed the man source files to ensure that
the generated output still looks nice. The changes were
mainly replacing blank lines with ".PP", but there were a
few other tweaks needed too.
Tested by viewing the output on both Chrome and Safari,
and using "man" and (equivalently) "nroff -man" and
examining the changes.
Reviewed by Craig Silverstein.
2011-10-24 00:57 Fergus Henderson <>
* man/distccd.1:
Apply a suggestion from Craig Silverstein: update the documentation
for the --whitelist option to make it clear that distcc will accept
connections *only* from users on the list.
2011-10-21 01:26 Fergus Henderson <>
* popt/popthelp.c, src/dotd.c:
Fix a couple of compiler warnings.
Reviewed by Craig Silverstein.
2011-06-28 20:13 Fergus Henderson <>
* test/
Apply patch from Ihor Kaharlichenko <madkinder> to fix issue 81
SyntaxError_Case was failing with recent versions of gcc,
due to the error message format having changed to now
include the column number.
Also remove an old "XXX" comment that no longer applies.
2011-04-06 14:49 Fergus Henderson <>
* test/
Fix a syntax error in my last change.
2011-04-06 14:36 Fergus Henderson <>
Update for compatibility with autoconf >= 2.60.
This avoids the following warning
config.status: WARNING: '' seems to ignore the
--datarootdir setting
and ensures that our configure script supports that --datarootdir
Reviewed by Craig Silverstein.
2011-04-06 14:35 Fergus Henderson <>
* src/clinet.c, src/dotd.c, src/emaillog.c, src/hosts.c, src/mon.c,
src/netutil.c, src/serve.c, src/snprintf.c, src/snprintf.h,
src/srvnet.c, src/srvrpc.c, src/stats.c, src/trace.c, src/util.c:
Fix warnings about unused return values. This includes some code
to do a better job of error checking.
2011-04-06 14:11 Fergus Henderson <>
* test/
Fix some issues that caused the gdb-related tests to fail:
1. Recent gcc versions want us to use -Wl,--build-id
rather than --build-id.
2. We had missed one of the places where we need to be passing
that flag in.
3. With recent gcc/gdb versions, "break main; run"
will sometimes stop at the first statement inside of main
rather than on the function declaration.
So "break main; run; step" may end up inside the code to
puts() rather than in the code for main().
My fix was to use "break main; run; next" instead.
It is inderminate (varies based on whether you use "-O", for example)
whether we end up at the call to puts() or after the call to puts(),
but either way the call to puts() should be in the gdb output log.
Reviewed by Craig Silverstein.
2011-04-06 14:09 Fergus Henderson <>
Support Python 2.6.
Reviewed by Craig Silverstein.
2011-04-05 18:57 Fergus Henderson <>
* src/hosts.c:
Fix indentation (layout changes only, no code changes).
2010-11-16 19:05 Fergus Henderson <>
* test/
Fix for <>
"Gdb tests fail in pumped mode on Ubuntu 9.10 amd64":
pass --build-id to gcc versions that support it.
(See <>
for a description of the --build-id switch.)
Reviewed by Craig Silverstein.
2010-11-16 18:51 Fergus Henderson <>
* man/include_server.1:
Fix error in manual: to disable fallback, set DISTCC_FALLBACK to 0 not
Resolves <>.
2010-10-08 19:33 Fergus Henderson <>
* src/access.c:
Apply patch from Ian Kumlien <>,
to fix <>.
This patch fixes a compile error on Gentoo Linux due to "s6_addr"
being #defined by a system header file and thus not available for
use as a local variable name.
2010-10-08 18:29 Fergus Henderson <>
* src/clirpc.c, src/compile.c, src/remote.c, src/state.c, src/state.h,
Apply patch from Jeremy Murphy <>,
tested and reviewed by, to address
"distcc-mon-gnome displays multiple rows for same host/slot".
2010-09-10 22:09 Fergus Henderson <>
* test/
Fix failures of the Gdb_* test cases:
1. These tests were failing if you have anything in your ~/.gdbinit
file that causes gdb to issue an error message. The fix here is
to create an empty .gdbinit in the test directory; gdb will
read that one in preference to the one in $HOME.
2. These tests were failing due to a new spurious warning from gdb.
3. There were a bug in the code for the Gdb_Case test which previously
caused part of the test to be executed only in pump mode. When
invoking gcc to check whether preprocessing preserves the pwd info,
the command line had not been updated to reflect the fact that this
command is run in a subdirectory; as a consequence,
gcc_preprocessing_preserves_pwd was always set to false.
Reviewed by Craig Silverstein.
2010-08-19 22:51 Fergus Henderson <>
* src/access.c:
Some minor stylistic improvements:
use array indexing rather than pointer arithmetic;
simplify for loops;
change a parameter name to match comment describing it;
eliminate trailing whitespace.
Reviewed by Bob Ham
2010-08-19 20:07 Fergus Henderson <>
* src/daemon.c, src/daemon.h, src/serve.c:
Change directory back to the original server working directory after
distcc-pump compilation. This fixes a bug where distcc-pump was
to a directory and then deleting that directory and not changing back
to the original directory. That caused problems when you used a server
first in distcc-pump mode and then in distcc mode, and the compiler
invoked a shell script. The compilation would succeed, but the shell
report a confusing warning ("shell-init: error retrieving current
getcwd: cannot access parent directories: No such file or directory").
2010-08-19 19:23 Fergus Henderson <>
* include_server/, include_server/,
Apply --sysroot patch from Simon Baldwin <>:
2010-08-18 Simon Baldwin <>
* include_server/ (_SystemSearchdirsGCC):
Add a 'sysroot' parameter. Add --sysroot, if needed, to the gcc
invocation that identifies search directories and default paths.
Add debugging output.
(SetSystemDirsDefaults): Add 'sysroot' parameter. Add another
dictionary level to system_dirs_default for sysroot values.
Add debugging output.
* include_server/ (ParseCommandArgs): Identify
and handle arguments of the form '--opt=value'. Pass any
--sysroot value to compiler_defaults.SetSystemDirsDefaults, use
it in compiler_defaults.system_dirs_default lookups.
* include_server/ (Mock_SetSystemDirsDefaults):
Add sysroot parameter, verify it on function calls.
(ParseCommandUnitTest): Add --sysroot to mock gcc invocations.
2010-06-29 15:51 Fergus Henderson <>
* src/fix_debug_info.c:
Trivial fix for slight mistake in distccd debug message.
Reviewed by Craig Silverstein.
2010-05-04 20:09 Fergus Henderson <>
* src/serve.c, src/stats.c, src/stats.h, src/util.c, src/util.h:
Apply patch from Ryan Burns <>:
add 1, 3, 5 minute averages of the number of children
used on a server to the statistics collected by the
stats server.
2010-05-04 19:52 Fergus Henderson <>
* man/distcc.1, src/compile.c:
Apply patch from Ryan Burns <>:
add an environment variable DISTCC_SKIP_LOCAL_RETRY for skipping
the local retry in case of a remote compilation failure.
2010-03-02 08:24 Fergus Henderson <>
* test/
Apply slightly cleaned up version of patch from
to fix failure of PreprocessAsm_Case on ARM.
2010-03-02 08:13 Fergus Henderson <>
* src/emaillog.c:
Apply patch from Akim Demaille <>:
* src/emaillog.c (dcc_maybe_send_email): Pacify GCC's warnings
about format strings by getting rid of a useless temporary
2010-03-02 08:10 Fergus Henderson <>
* ChangeLog, src/hosts.c:
Apply patch from Akim Demaille <>:
* src/hosts.c (strndup): Use the standard signature (without
static), so that we don't conflict with GCC's builtin signature.
Now that it is not static, declare it, to avoid warnings.
2010-02-18 23:40 Fergus Henderson <>
* test/
Apply patch from madkinder: use #include rather than #import in C++
test case.
This fixes a test case failure with gcc 4.4.1, which warns about use
of #import.
(The use of #import was an accidental cut-and-paste error resulting
from copying
the C++ test case from the Objective-C/C++ test case.)
2010-02-18 23:33 Fergus Henderson <>
* test/
Change the PreprocessAsm_Case so that it reports NOTRUN
rather than PASS for systems where it is not run.
2010-02-10 03:31 Lei Zhang <>
* man/distcc.1, src/daemon.c, src/distcc.h, src/io.c, src/pump.c,
Add support for $DISTCC_IO_TIMEOUT.
Reviewed by Fergus Henderson.
2009-12-30 04:25 Fergus Henderson <>
* packaging/RedHat/init.d/distcc:
Apply patch from Tal <>:
In packaging/RedHat/init.d/distcc the executable is once refereed to
using the variable EXEC, and once as with the explicit expected name.
Change it to always use the EXEC variable.
2009-12-01 04:46 Fergus Henderson <>
Apply patch from <>:
This is a simple patch that adds the standard TAGS target for Emacs
2009-08-03 23:33 Lei Zhang <>
* man/distcc.1, man/pump.1,, src/compile.c:
Make max_discrepancies_before_demotion configurable via
DISTCC_MAX_DISCREPANCY environment variable.
2009-07-24 17:30 Fergus Henderson <>
* test/
Pass "-c" to gcc for the Dotd_Case tests.
This fixes a problem where this test was failing on some systems
due to link errors when compiling C++ source files with "gcc foo.cpp".
To link C++ code, you now need to use "g++ foo.cpp" or "gcc foo.cpp
even if the C++ code in question doesn't use any C++ library features.
Rather than changing the code to use "g++" or "-lstdc++", I though it
better to avoid the link step entirely, since it is not needed for the
this test is testing, and removing it will speed up the test.
Reviewed by Craig Silverstein.
2009-07-24 16:59 Fergus Henderson <>
* man/distccd.1, src/auth.h, src/auth_common.c, src/auth_distcc.c,
src/auth_distccd.c, src/daemon.c, src/dopt.c, src/dopt.h,
src/dparent.c, src/dsignal.c:
Apply patch from
Optional Black/Whitelist Functionality.
This patch is used to implement optional server-side access control
through a specified black or whitelist file. This option is specified
through a command line option.
Revised by me (Fergus Henderson):
fixed spelling error, added a comment.
2009-07-24 16:31 Fergus Henderson <>
*,, src/h_getline.c[ADD], src/util.c,
src/util.h, test/
Define a GNU-compatible getline() implementation,
in case we don't have getline() available.
Reviewed by Craig Silverstein.
2009-07-24 01:32 Fergus Henderson <>
* src/h_parsemask.c:
Fix compile errors for "make check" caused by distcc-v6-acl-2.patch.
2009-07-23 02:16 Fergus Henderson <>
*,, man/distcc.1, man/distccd.1,
src/auth.h[ADD], src/auth_common.c[ADD], src/auth_distcc.c[ADD],
src/auth_distccd.c[ADD], src/clirpc.c, src/daemon.c, src/distcc.c,
src/dopt.c, src/dopt.h, src/dparent.c, src/dsignal.c, src/exitcode.h,
src/help.c, src/hosts.c, src/hosts.h, src/lock.c, src/remote.c,
Apply patch from
Optional GSS-API Functionality.
This patch implements mutual authentication, out of sequence and
replay detection using the GSS-API. The changes implemented are
optional and are turned off by default.
This option is specified to the client through an environment variable
as is the name of the server principal to authenticate. Currently
the server principal can be left unspecified and a default based on
the host keytab will be used.
This option is specified to the daemon through a command line option,
with the name of the principal whose credentials the daemon should
use specified as an environment variable. A simple handshake is
exchanged between the client and server in order to prevent
unecessary delays and protocol derailments when mixing authenticating
and non-authenticating clients and servers.
Revised based on review comments.
GSS-API authentication is now implemented as a per host option.
Revised further by me (Fergus Henderson) to fix a spelling error
and to rename the per host option from ",gssapi" to ",auth".
2009-07-23 02:15 Fergus Henderson <>
* doc/protocol-gssapi.txt[ADD]:
Apply patch from
Protocol Documentation for GSSAPI extension.
2009-07-22 21:39 Fergus Henderson <>
Add Makefile target "man-html" for rebuilding the (checked-in) HTML
versions of the man pages. This allows you to view the changes with
"svn diff" before running "make upload-man" which commits them.
Reviewed by Craig Silverstein.
2009-07-22 17:29 Fergus Henderson <>
* src/access.c, src/access.h, src/srvnet.c, src/zeroconf-reg.c:
Apply distcc-v6-acl-2.patch from Bob Ham <>:
- Implements IPv6 support for access control.
- Restrict zeroconf advertisements to IPv4 if
RFC2553 support isn't enabled.
- Modifies the non-RFC2553 code to use inet_aton()
instead of the RFC2553-specific inet_pton().
2009-07-22 17:22 Fergus Henderson <>
* man/include_server.1:
Improve some slightly misleading documentation.
2009-06-30 21:37 Fergus Henderson <>
* gnome/distccmon-gnome.desktop:
Swedish translation, from Nille <>.
2009-04-18 00:03 Fergus Henderson <>
Apply patch from Assar <>:
If any of the files in the source directory are not writable, running
"make dist" will prompt you if you want to remove those files in the
temporary distribution directory (distcc-3.1).
The following tiny patch fixes that.
2009-04-14 03:10 benizi
* src/zeroconf.c:
Remove duplicate hosts from the zeroconf list.
Fixes issue 43 <>.
As mentioned in issue 34
hosts with both IPv4 and IPv6 addresses showed up twice if avahi is
IPv6-enabled. So, filter out duplicates using the service name.
2009-04-10 20:26 Fergus Henderson <>
* src/exec.c:
(1) Layout/whitespace changes; the layout of this file
seems to have gotten mixed up when we changed from
using tabs to using spaces.
(2) Fix spacing in a log message.
Reviewers: Craig Silverstein
2009-04-10 19:26 Fergus Henderson <>
* test/
Fix a distcc test that was failing on modern kernels:
ignore a spurious warning from gdb.
According to Paul Pluzhnikov, the warning is gone from current GDB,
fixed by the following patch:
2008-04-21 Pedro Alves <>
* symfile.c (syms_from_objfile): Don't warn if lowest loadable
section is not a code section.
But since there are going to be some versions of gdb in the wild that
don't have that patch, we still need to work around it in the distcc
Reviewed by Craig Silverstein.
2009-04-10 17:37 Fergus Henderson <>
* test/
A fix for distcc issue 44 "Failed tests on make check (gentoo
We were using an invalid signature for main(), and newer versions of
are stricter about checking this.
Reviewed by Craig Silverstein.
2009-03-06 13:55 IanRichardBaker
* src/include_server_if.c:
Fixed a portability issue that causes compilation to fail on 64 bit
2009-02-17 23:10 Fergus Henderson <>
* src/dotd.c, src/emaillog.c, src/include_server_if.c, src/lsdistcc.c,
src/rslave.c, src/stringmap.c, src/timeval.c:
Ensure that all ".c" files start with "#include <config.h>".
This will hopefully fix issue 39
Some header files were using #if statements that depended on macros
defined in config.h
without #including config.h first. The result was a compilation error,
"#if !HAVE_DECL_SNPRINTF" was evaluating to true because config.h
hadn't been included,
causing us to declare snprintf() when we shouldn't, leading to a
conflict with the
declaration in the standard header files.
(The alternative solution would have been to add "#include <config.h>"
to every header file that uses '#if'. I decided not to do that, just
for consistency with the existing code.)
2009-02-17 23:10 Fergus Henderson <>
* packaging/
Fix a non-portability in
use "trap ... HUP" rather than "trap ... SIGHUP".
The Posix.1 standard
The condition can be EXIT, 0 (equivalent to EXIT), or a signal
using a symbolic name, without the SIG prefix, as listed in the tables
of signal names in the <signal.h> header [...]; for example, HUP, INT,
QUIT, TERM. Implementations may permit names with the SIG prefix or
ignore case in signal names as an extension.
Previously, the code was relying on this optional extension.
2009-01-30 17:27 Fergus Henderson <>
* include_server/, include_server/,
Fix issue 35 <>.
This was a bug where the include server was crashing in certain cases
(when the argument to a macro ended in a backslash) due to an escaping
problem in the use of Python's re.sub() function. The fix was to
replace all occurrences of backslash in the replacement string
with double-backslash, which re.sub() will then translate back to
a single backslash. (I also changed the code to not bother using
re.compile() since we only use the regexp once.)
Also, fix a bug where we were not allowing backslashes in filenames.
I added regression tests for both of these bugs
(and I verified that they were true regression tests).
Reviewed by Craig Silverstein.
2009-01-26 23:50 Fergus Henderson <>
Handle failure of "mktemp" more gracefully in the pump script.
It was printing an error message, but then it would continue
on even if mktemp had failed (it called "exit 1", but only
in a subshell). It would then go on and try to start the
include server, which would end up hanging.
The fix is to make sure that we call "exit 1" from the main
shell whenever MakeTmpFile fails.
Reviewed by Craig Silverstein.
2009-01-22 05:33 adshea
* man/distcc.1, src/hosts.c, src/zeroconf.c:
IPv6 patch for Zeroconf and and IPv6 literals in hosts file.
* Still needs configure flag masking for IPv6 literals
* Needs some fix for zeroconf hosts that have both and IPv6 and IPv4
2009-01-20 22:22 Fergus Henderson <>
* doc/web/index.html, doc/web/man/index.html[ADD]:
- Add pointer to the INSTALL file to the main page.
- Create an index.html in doc/web/man to make the
presentation of that page prettier.
Previously it was a rather ugly directory listing
of file names like "distcc_1.html", "distccd_1.html", etc.
- Add links to the INSTALL file and README* files
from that doc/web/man/index.html page.
Reviewed by Craig Silverstein.
2009-01-09 17:46 Fergus Henderson <>
* doc/web/index.html:
Fix broken link to distccWebView.
2009-01-09 08:54 akim.demaille
* src/distcc.c:
"distcc --scan-includes" dumps core.
* src/distcc.c (main): Don't dump --help on the user on command
line error, rather, return the `Try --help' message on stderr.
Check that --scan-includes is given arguments.
2009-01-05 22:48 Fergus Henderson <>
* src/distcc.c:
Document the --scan-includes option in the output of "distcc --help".
2009-01-05 20:29 Fergus Henderson <>
Avoid using "echo -n", because it's not portable.
2009-01-05 20:18 Fergus Henderson <>
* test/
Portability fix: the CPlusPlus_SystemIncludeDirectories_Case
was assuming that /usr/include/sys/types.h exists, but was
not checking this assumption.
2008-12-22 22:21 Fergus Henderson <>
* include_server/
Fix a bug where the SystemIncludeDirectories_Case test
was failing on systems where /tmp was a symlink.
This failure indicated a real bug: on such systems,
distcc was not correctly handling -I<dir> where
<dir> is a subdirectory of a system include directory,
e.g. -I/usr/include/foo.
The code was calling _RealPrefix(client_root + system_dir)
but was implicitly assuming that the answer would always
start with client_root. That is, it was implicitly assuming
that client_root did not contain any symlinks.
I changed the code to use
_RealPrefixWithinClientRoot(client_root, system_dir)
so that it would find the appropriate prefix of system_dir
rather than looking at the prefixes of client_root.
2008-12-22 21:56 Fergus Henderson <>
* include_server/
When computing the compiler's default search path by parsing the
from "gcc -v", ignore Apple-modified MacOS gcc's "framework"
2008-12-10 20:22 Fergus Henderson <>
Clarify installation instructions; in particular, if you have python
installed, you need to also have Python.h installed before building
Reviewer: Craig Silverstein
2008-12-03 00:54 Fergus Henderson <>
* include_server/
Avoid a spurious message ' PYTHON_CFLAGS must be defined.'
The top-level Makefile sets CFLAGS="$(CFLAGS) $(PYTHON_CFLAGS)"
before invoking, so there's no need for it to set
2008-12-02 21:49 Fergus Henderson <>
* ChangeLog:
Update ChangeLog with some more changes for distcc 3.1.
2008-12-02 21:44 Fergus Henderson <>
*, NEWS,, include_server/
1. Fix some compilation errors arising from the use of
-Wwrite-strings when compiling the python extension module,
due to lack of const correctness in the Python 2.2
"Python.h" header file.
This problem was introduced by the fix for distcc issue 26
The solution was to explicitly disable these warnings
with -Wno-write-strings.
2. Centralize the use of gcc-specific compilation options
in conditional code in that is only executed
if we're using gcc. Previously include_server/
was hard-coding gcc-specific options, regardless of
whether we're using gcc.
3. Don't use -Wuninitialized if CFLAGS doesn't contain "-O*",
because -Wuninitialized only works if optimization is enabled.
This avoids a gcc warning (and hence an error with -Werror)
about -Wuninitialized not having any effect
when distcc is configured with "CFLAGS=-g ./configure".
4. Add a new configure option "--disable-Werror".
For the 3.0 release of distcc, some people porting distcc
resorted to patching distcc to remove the -Werror option.
-Werror is useful, so I want to keep it enabled by default,
but I'd prefer that people are able to port distcc easily,
hence the configure option.
This addresses distcc issue 20
Reviewers: Craig Silverstein
2008-12-01 23:44 Fergus Henderson <>
* ChangeLog, NEWS,
Bump version number to 3.1, and update the NEWS file and ChangeLog.
Reviewed by Craig Silverstein.
2008-10-27 22:11 Fergus Henderson <>
Apply matsuu's patch to fix issue 26 "missing CFLAGS for
2008-10-27 14:38 Fergus Henderson <>
* include_server/c_extensions/distcc_pump_c_extensions_module.c:
Applied matsuu's patch for issue 27 "failed to make distcc"
which was a build problem on "Gentoo, x86-64, gcc-4.1.2,
glibc-2.6.1, python-2.5.2".
2008-10-27 14:17 Fergus Henderson <>
Include the "m4" directory in the source distribution tarball,
so that users of the source distribution can (re)run "".
Reviewers: Craig Silverstein
2008-10-05 16:43 Fergus Henderson <>
* src/arg.c:
Fix a silly mistake (missing "== 0" after strcmp() call)
that broke the parsing of "-Wp,-MMD,..." options.
This fixes <>.
2008-09-27 01:57 Fergus Henderson <>
* include_server/test_data/gws-main.o.cmd[DEL]:
Delete an unused test data file; it became dead after my
previous change which deleted the test that used it.
2008-09-27 01:55 Fergus Henderson <>
* include_server/
Delete an unused test case: the test was hard-coded to always pass
so it wasn't testing anything useful.
2008-09-13 17:23 Fergus Henderson <>
* doc/web/man/distcc_1.html, man/distcc.1, src/exitcode.h:
Incorporate 01_distcc_man.dpatch from debian distribution.
This patch adds documentation of all of the exit codes to the man
Also add comment to exitcode.h reminding maintainers to update the man
Also update the HTML versions of the man pages.
2008-09-11 18:48 Fergus Henderson <>
* NEWS, include_server/, man/distcc.1, src/clirpc.c,
src/compile.c, src/compile.h, src/distcc.c, src/distcc.h,
src/include_server_if.c, src/include_server_if.h, src/util.c,
Provides a simple shell API to the include server:
add a new "--scan-includes" option to distcc which shows
which headers distcc would send to the remote machine in
pump mode, without actually compiling anything.
2008-09-10 02:39 Fergus Henderson <>
Fix <>:
the pump script was hard-coding /etc/distcc/hosts rather
than using the prefix specified to configure.
Reviewed by Craig Silverstein.
2008-09-08 17:51 Fergus Henderson <>
*, src/hosts.c:
Report a better error message if a host specification contains ",cpp"
but not ",lzo".
Previously, setting ",cpp" without ",lzo" would quietly set the
version to -1, which the server would then quietly reject (logging as
"REJ_BAD_REQ"), and then the client would guess (poorly) at why the
server had dropped the connection.
Reviewed by Craig Silverstein.
2008-08-07 22:58 Fergus Henderson <>
* doc/web/man/distcc_1.html, doc/web/man/pump_1.html:
Update the HTML versions of the man pages.
2008-08-07 22:50 Fergus Henderson <>
* doc/web/index.html:
Delete a duplicate link in the side-bar.
2008-08-06 20:37 Fergus Henderson <>
* ChangeLog, NEWS,
Change version number to "3.0", and update NEWS file and ChangeLog.
2008-08-06 15:37 Fergus Henderson <>
* man/distcc.1, man/pump.1:
Some final documentation updates before 3.0.
In the distcc man page:
- remove description of a bug that's been fixed now (distcc issue 7)
- make it a little clearer that in pump mode we don't ship the header
files from the default system header directories to the server
- add a new section header "RESTRICTIONS OF PUMP MODE"
- some typographical corrections.
In the pump man page:
- add a prominent pointer to the distcc man page,
in particular to the "RESTRICTIONS OF PUMP MODE" section.
Reviewers: Craig Silverstein
## distcc 3.0rc4.
2008-08-02 19:54 Fergus Henderson <>
* ChangeLog, NEWS,
Time for another release candidate.
2008-08-02 19:49 Fergus Henderson <>
* test/
Add C++ version of the SystemIncludeDirectories test.
Also, reduce code duplication a little by adding a compileOpts()
function to
the CompilationCase class, and overriding that, rather than
in various derived classes.
2008-08-02 17:50 Fergus Henderson <>
* include_server/
Fix a TODO in that was responsible for a bug
that broke pump mode when one of the default system include
was a subdirectory of another, as turns out to be the case for GNU
The CPlusPlus_SystemIncludeDirectories_Case, which was failing before
change, now passes. (TODO: re-enable it.)
Reviewers: Craig Silverstein
2008-08-02 01:30 Fergus Henderson <>
* bench/
Make the benchmarking script's stdout and stderr line buffered.
Reviewers: Craig Silverstein
2008-08-02 01:27 Fergus Henderson <>
* test/
Add a test of C++ compilation, and refactor the tests of Objective-C
and Objective-C++ to share the common code.
Also, fix some bugs in the tests of Objective-C and Objective-C++.
These tests were never being activated, even when the right compiler
installed, because in the test compilation (not using distcc) it was
compiling with "-o /dev/null" and then testing that testtmp.o exists,
which it never did. There was also a missing "std::" in the
test. I still haven't run the Objective-C++ test, because I still
figured out how to install Objective-C++, but it's pretty similar to
the C++ and Objective-C tests, and both of those now run and pass.
Reviewers: Craig Silverstein
2008-08-01 20:59 Fergus Henderson <>
* bench/
Update a stale URL.
## distcc 3.0rc3.
2008-08-01 03:42 Fergus Henderson <>
* include_server/
Increase MAX_COMPONENTS_IN_SERVER_ROOT from 10 to 20.
It turns out that our own test infrastructure (test/
sets TMPDIR before invoking distccd, so this needs to be reasonably
high, otherwise 'make distcheck' will fail.
2008-08-01 03:11 Fergus Henderson <>
List va_copy.h in HEADERS, so that it gets included in the source
2008-07-31 19:19 Fergus Henderson <>
* ChangeLog, NEWS,
Bump version number to 3.0rc3, and update NEWS file and ChangeLog.
Reviewed by Craig Silverstein.
2008-07-31 05:40 Fergus Henderson <>
* src/distcc.h, src/filename.c:
Fix issue 10 <>:
add a work-around for a spurious gcc warning.
Also, add a missing check for strdup() returning NULL.
2008-07-30 22:56 Fergus Henderson <>
* src/dotd.c, src/serve.c, src/strip.c, test/
Add a test case to test "-MT" and "-MF" without spaces after them.
Some more bug fixes to make the test case pass.
Also, make the DashWpMD_Case test a bit more strict: disable
fallbacks, so that it tests that we can distribute such jobs.
2008-07-30 02:28 Fergus Henderson <>
* src/fix_debug_info.c, src/netutil.c, src/snprintf.c, src/srvnet.c:
Fix some warnings with -Wcast-align that show up only on machines
that don't support unaligned accesses.
Fix some const correctness warnings that show up only on machines
that don't have vsnprintf().
Reviewers: Craig Silverstein
2008-07-30 02:27 Fergus Henderson <>
* src/arg.c:
Fix issue 13 <>:
allow distcc to distribute commands that use "-MF<filename>"
rather than "-MF <filename>", and likewise for -MT and -MQ.
2008-07-30 01:13 Fergus Henderson <>
* src/clirpc.c, src/tempfile.c:
Apply patch from in
use S_ISLNK and S_ISDIR macros, to make the code more readable.
2008-07-29 23:04 Fergus Henderson <>
In the Makefile, add a target for running a single test in pump mode.
2008-07-29 22:19 Fergus Henderson <>
* include_server/, include_server/,
include_server/, include_server/,
include_server/, include_server/,
include_server/, src/srvrpc.c, src/tempfile.c,
This is based on klarlund's original version of this patch
gvn --project review
Fix Issue 7: Compiling with -I/usr/include/FOO or ... in pump mode
Default system include directories are the directories on the default
search path, such as /usr/include, that is determined by the compiler.
will not send default system include directories to the distcc
servers. Nevertheless, distcc on the server blindly rewrites -I
options such
as -I/usr/include/foo to -I/tmp/distccNNN/usr/include/foo.
This doesn't work, since the files in /usr/include/foo are not sent to
distccd server.
The present solution keeps the rewriting on the server, because we
would like
to not manage starting the compiler, parsing its output, and storing
default system paths on the server
Instead, we use the existing mechanism for defining relative symbolic
under the server root. We escape from the root by using a sufficient
of '../'s.
All this is tremendously complicated by:
-- The possibility that other links encountered may point into the
default dirs in which case the usual mirroring of the reachable places
should not take place, because the routing of such links will go
the link created for the system directory.
-- The fact that determination of default-system-dirness is lazy: a
deeply-seated link in a default system dir may become obsolete if it
later determined that a higher directory than the parent directory of
link is in fact also a default system dir. In that case, a new
sitting in a place higher than the previous one will need to be
make check
benchmarks: samba (still 3X faster than with distcc), linux 2.6
kernel, and
a couple of others
TODO: better testing
> In, _MakeLinkFromMirrorToRealLocation:
> Maybe comment each of the 'if' cases with an example of how this
> might be triggered. eg the real_prefix == rooted_system_dir is
> triggered when we see /usr/include/foo, and the later see
> /usr/include.
2008-07-29 22:17 Fergus Henderson <>
*, src/snprintf.c, src/trace.c, src/va_copy.h:
Fix a bug that caused "make check" to fail: MissingCompiler_Case
was reporting an unexpected exit status: 139 instead of 110.
This was caused by a seg fault in distccd, deep in the bowels of
vsnprintf(), which appears to be due to calling vsnprintf() twice
on the same va_list. The fix is to use va_copy() in src/trace.c.
Of course it's never quite as easy as that. va_copy() exists
only in C99, not in C89. Some implementations have __va_copy()
but not va_copy(). So we need to autoconf it. There was
already an autoconf test for this, but only for __va_copy.
I've moved the code which defined VA_COPY from snprintf.c to
a new header file va_copy.h, and added a VA_COPY_END macro.
Also, fix another bug that I noticed at the same time:
snprintf.c was using va_copy(), but was not matching each
call to va_copy with a corresponding call to va_end(),
as required by the C99 standard.
2008-07-17 21:59 Lei Zhang <>
This adds an option for disabling avahi and friends. This is useful
building distcc targeted to machines without libavahi on a machine
with libavahi.
Reviewed by Fergus Henderson.
2008-07-02 00:34 Fergus Henderson <>
Fix a bug reported by Aaron P. Perez <>
where "make install" was failing on Cygwin.
The problem was due to the install.log file generated by Python's
distutils being generated in DOS text mode format rather than
Unix text mode format. The fix is to use 'sed' to convert
DOS text format to Unix text format when generating install.log.
Note: this fix is slightly different than the original patch
that I posted to the distcc mailing list. This patch is better
because it fixes the install.log file, rather than just the
grep command; this is important because the install.log file
is also used for "make uninstall".
Reviewers: Craig Silverstein
2008-06-30 17:10 Nils Klarlund <>
* include_server/,
include_server/, include_server/
Revert r393.
This change is mostly reverted -- some variable renamings are not
changed back. A subsequent CL proposes a less arbitrary way to solve
the problem of -I<some_dir_in_default_place_where_compiler_looks>,
which involves sending no system default header files at all.
Tests: make pump-check and make include-server-check
2008-06-27 21:59 Fergus Henderson <>
Delete a duplicate entry from the NEWS file.
Reviewers: Craig Silverstein
2008-06-24 22:06 Fergus Henderson <>
* packaging/
Fix wrong description for uploaded distcc-<version>.tar{.gz,.bz2}
Reviewers: Craig Silverstein
## distcc 3.0rc2.
2008-06-20 15:17 Fergus Henderson <>
* ChangeLog, NEWS:
Update NEWS file and ChangeLog for distcc 3.0rc2.
Also mention new website, repository and maintainer in NEWS file.
2008-06-20 02:54 Fergus Henderson <>
Bump version number to 3.0rc2.
2008-06-19 22:25 Fergus Henderson <>
* src/gcc-id.c, src/zeroconf-reg.c, src/zeroconf.c:
Add "Copyright (C) 2007 Lennart Poettering" to zeroconf.c,
and gcc-id.c. Remove Google copyright notice from src/gcc-id.c, since
the Google changes to that file were very minor.
2008-06-19 20:55 Fergus Henderson <>
*, packaging/, packaging/
Change the and scripts to remove old .deb or .rpm
files (for the same package and version) before generating the new
Similarly change "make install-deb" and "make upload-dist" so that
they are more selective in which files they install.
This fixes a bug where "make install-deb" tried to install the wrong
.deb files, because it just did "rpm -i *.deb", and there can be old
.deb files lying around. It also fixes a similar problem in "make
Also, add a "tags" target to the Makefile.
Reviewers: Craig Silverstein
2008-06-18 03:30 Fergus Henderson <>
* include_server/
Fix bug where the include server would crash if the PATH environment
variable wasn't set.
2008-06-18 02:23 Fergus Henderson <>
* packaging/RedHat/conf/clients.allow:
Fix a missing word in a comment.
2008-06-17 20:26 Fergus Henderson <>
* src/compile.c, src/lock.c, src/remote.c, src/where.c, src/where.h:
Fix for a deadlock bug
that I observed (once!) when compiling the Linux kernel in pump mode:
- Ensure that locks are acquired in the reverse order that they will
be released: acquire remote lock before local lock.
- Ensure that locks are released on all fallback paths.
- Rename dcc_pick_host_from_list() as
so that its locking effect is clearer.
- Document the lock ordering invariants.
- Document the unlocking behaviour of dcc_compile_remote().
Reviewers: Craig Silverstein, Nils Klarlund
2008-06-17 18:32 Fergus Henderson <>
* man/distcc.1:
Document the limitations of pump mode w.r.t. debugging on
systems with non-ELF object files.
Reviewers: Craig Silverstein, Nils Klarlund
2008-06-11 16:10 Fergus Henderson <>
* src/arg.c:
Apply patch from Maks Verver which fixes a bug where distcc
was not doing the right thing when invoked with "-march=native"
or "mtune=native".
This fixes <>.
2008-06-10 21:21 Fergus Henderson <>
* doc/web/faq.html:
Document the use of ssh connection sharing.
2008-06-10 05:51 Craig Silverstein <>
When I moved the envvar declarations to inside the 'eval', I had to
quote them to protect them from the extra level of evaluation, but I
had failed to do this. This change makes it so I do.
Tested by running 'make pump-maintainer-check on linux (ubuntu).
Detected and reviewed by fergus
## distcc 3.0rc1.
## The following changes were made internally to Google, and not integrated
## into the main distcc distribution until 2008. The dates here are
## the dates they were applied to the internal-Google branch, and
## interleave with the changes to the main branch, below.
2008-06-10 02:20 Nils Klarlund <>
* doc/web/benchmark.html:
Improve wording and accuracy of claims.
Just various relatively minor suggestions. I didn't understand the
about the importance of having 'beefier' remote machines (their raw
CPU power
are not different although RAM and number of CPUs per machine differ),
so I took
them out. Instead, a made a separate point about what would have
happened if
we'd used multiple-CPU clients. I put in a reference to our gws:gws
which drove our work.
-- Add side point about possible configurations issues and link to man
-- The number 'four' (for # of hello compilations) was obtained by
inspection of
the distcc log.
Review: csilvers and fergus (at Google).
2008-06-10 00:52 Craig Silverstein <>
Apparently, for freebsd's sh at least, "eval FOO=a bar" lets bar see
FOO=a, while "FOO=a eval bar" does not. So change from the latter
formulation to the former.
Tested by running 'make pump-maintainer-check' on freebsd and on linux
Reviewed by klarlund
2008-06-10 00:09 Craig Silverstein <>
* test/
While tries to use port 42000 to communicate, if it
fails it tries 42001, etc. When checking output, make sure we match
the port we actually ended up binding on.
Tested by running 'make check' on a wide variety or architectures,
including a FreeBSD machine where make check failed before this
Reviewed by fergus
2008-06-09 23:12 Craig Silverstein <>
* man/distcc.1, man/distccd.1, man/include_server.1, man/pump.1:
Update date to june 9 instead of june 2.
2008-06-09 23:08 Craig Silverstein <>
I had talked Fergus into changing the version number from 3.0rc1 to
3.0-rc1. But now rpm is complaining that - is illegal in a version
string, so I'm changing it back to 3.0rc1. Sorry Fergus...
2008-06-09 23:07 Craig Silverstein <>
* ChangeLog:
I had talked Fergus into changing the version number from 3.0rc1 to
3.0-rc1. But now rpm is complaining that - is illegal in a version
string, so I'm changing it back to 3.0rc1. Sorry Fergus...
2008-06-09 22:02 Fergus Henderson <>
Change version number to 3.0rc1
(for "release candidate 1").
Reviewers: Craig Silverstein
2008-06-09 21:22 Craig Silverstein <>
*, doc/web/man/distcc_1.html,
doc/web/man/include_server_1.html, packaging/RedHat/rpm.spec:
Update the html version of the man pages, based on the .1 updates.
Add include_server, which is a new man page. Update the Makefile to
know about the new man page, include it in the distribution, etc.
Also update the rpm spec to include it too.
2008-06-09 20:31 Fergus Henderson <>
Some updates to the TODO list to mark as done issues which are
in distcc 3.0.
Reviewers: Craig Silverstein
2008-06-09 20:28 Fergus Henderson <>
Rename "Critique" function as "ReportDiscrepancies",
to make it clearer what the function does.
Reviewers: Craig Silverstein, Nils Klarlund
2008-06-09 19:59 Nils Klarlund <>
* include_server/, man/distcc.1, man/include_server.1,
The missing include_server(1) man page and additional material about
the basic
assumptions of distcc-pump added to man/distcc.1 as well. The BUGS
of distcc.1 has been updated.
A spelling error correction is made to man/distcc.1.
The script is changed so that it does not introduce other
defaults than those mentioned in the manual (which are those of the of
Finally, I changed the order of the options in the include server
source code to
be alphabetical in accordance with include_server(1) man page.
Reviewers: fergus, csilvers.
2008-06-09 19:53 Nils Klarlund <>
Correct obscure bug (that quoting a variable eliminates the conversion
newlines to spaces).
Reviewers: fergus and csilvers (at Google).
2008-06-09 16:38 Lei Zhang <>
* src/lsdistcc.c, test/
lsdistcc should print non-default port numbers.
Reviewed by fergus
2008-06-09 15:04 Fergus Henderson <>
Fix typo in Nils' previous change.
2008-06-09 14:14 Nils Klarlund <>
*, src/compile.c:
Add necessary message to pump script with warning that compilations
were forced
from distcc-pump mode into plain mode.
I had resisted doing this at first, because of the
max_discrepancies_before_demotion constant in src/compile.c, which
controls whether there were sufficiently many discrepancies to force a
The problem is that the constant is not known to the pump script. It
should be
made configurable, through gosh, another env var. But that'll be for
This constant is currently 1 and it shouldn't be changed.
Reviewers: fergus and csilvers.
2008-06-07 01:21 Craig Silverstein <>
* doc/web/benchmark.html, doc/web/compared.html, doc/web/compilers.html,
doc/web/faq.html, doc/web/index.html, doc/web/results.html,
doc/web/scenarios.html, doc/web/security.html:
Add a link to the man pages from the side-bar.
Also, fixed up the side-bar from a few non-top-level pages to be
consistent with the top-level-pages bars: compilers.html and
2008-06-07 01:16 Craig Silverstein <>
When uploading the package, we try to update the website as well.
Since the website contents are checked into svn, that's just a matter
of checking in any auto-generated html-ized pages (eg the man pages).
2008-06-07 01:13 Craig Silverstein <>
* doc/web/benchmark.html, doc/web/man/distcc_1.html,
doc/web/man/distccd_1.html, doc/web/man/distccmon_text_1.html,
Oops, the attribute is called svn:mime-type, not svn:content-type.
2008-06-07 01:10 Craig Silverstein <>
* doc/web/man/distcc_1.html:
Update from the empty file.
2008-06-07 01:08 Craig Silverstein <>
* doc/web/man, doc/web/man/distcc_1.html, doc/web/man/distccd_1.html,
doc/web/man/distccmon_text_1.html, doc/web/man/pump_1.html:
Html version of the man pages, auto-generated.
2008-06-04 07:06 Craig Silverstein <>
The avahi files (zeroconf.c, etc), were being left out of the
distribution tarball. Add them in.
Tested by running 'make distcheck' on a machine with avahi libs
Reviewed by fergus
2008-06-04 06:04 Craig Silverstein <>
Get rid of setting is_in_installation; that variable isn't used
anywhere anymore, so no reason to set it.
Tested by running 'make pump-maintainer-check'.
Reviewed by klarlund
2008-06-04 05:17 Craig Silverstein <>
It turns out has a bug(?) in its --record output: in theory,
the paths of the --record fields should start with --prefix, but
sometimes the paths remove the leading / from --prefix:
% env CPPFLAGS='-Isrc -Ilzo -Ipopt' SRCDIR=`pwd`
include_server/ install --prefix=/tmp/distcc-bar
--record=/dev/stdout --root=/var/
% env CPPFLAGS='-Isrc -Ilzo -Ipopt' SRCDIR=`pwd`
include_server/ install --prefix=/tmp/distcc-bar
--record=/dev/stdout --root=/var
It's hard to predict how, when and why it does this (--root=/ and
--root="" are particularly confusing cases), but luckily we know we
always want the leading slash: configure dies if --prefix isn't an
absolute path. So with this change, we just let write
whatever it wants to, and then add a leading slash before each line of
the --record output if it's missing.
Tested by running
./configure --prefix=/tmp/distcc
rm -rf /tmp/distcc; make install
rm -rf /var/tmp/tmp/distcc; make install DESTDIR=/var/tmp
rm -rf /var/tmp/tmp/distcc; make install DESTDIR=/var/tmp/
and verified that files ended up where expected, and the pump script
looked like expected (with pump's sibling files living in
Reviewed by fergus
2008-06-03 23:06 Craig Silverstein <>
Fix up the list of zeroconf files needed to actually compile distcc
and distccd.
Tested by installing avahi and running 'make' plus 'make check'.
Reviewed by klarlund
2008-06-03 21:00 Craig Silverstein <>
* src/zeroconf.h:
Fix up the top-of-file comments to look the same as for all the other
2008-06-03 20:58 Craig Silverstein <>
* src/zeroconf-reg.c, src/zeroconf.c:
Fix some extra comment specifiers that shouldn't have been there.
2008-06-03 12:30 Nils Klarlund <>
* man/distcc.1, man/distccd.1, man/pump.1:
Various edits:
-- refer to pump(1) credits (and remove distcc(1) credits from pump(1)
-- detail fundamental include server assumption
-- clean up incl server discussion
-- refer to include_server(1) for hairy stuff (this man page is to
follow shortly in separate CL)
-- discuss shell scripts instead of symlinks
-- change date to June 2 2008
-- other minor edits
2008-06-03 05:43 Craig Silverstein <>
Update the release date.
2008-06-03 05:32 Craig Silverstein <>
* bench/
Add some new benchmark routines (including C++ projects like yate and
ACE), and normalize syntax for existing ones. I've tested that we can
at least build all of these projects locally, as long as all neccesary
dependent packages are installed.
Reviewed by fergus
2008-06-03 03:45 Fergus Henderson <>
* bench/,
Fix a bug in the pump script where it wasn't waiting for the include
server to terminate before exiting.
Reviewers: Nils Klarlund, Craig Silverstein
2008-06-03 00:32 Craig Silverstein <>
* doc/web/faq.html, doc/web/index.html, doc/web/results.html,
doc/web/scenarios.html, doc/web/security.html:
Revamp the toc sidebar to organize the categories a bit better. Also
added a benchmark line.
2008-06-03 00:32 Craig Silverstein <>
* doc/web/benchmark.html:
Add benchmark results, and a discussion of same.
Reviewed by klarlund
2008-06-02 22:38 Fergus Henderson <>
* src/clirpc.c:
Fix spelling error and punctuation in warning message.
Reviewers: Craig Silverstein
2008-06-02 19:35 Nils Klarlund <>
* include_server/, include_server/,
Fix option real_path_warning_re not working.
I renamed the option to path_observation_re. Now by prefixing
INCLUDE_SERVER_ARGS='-d1 --path_observation_re="/usr/.*"'
to say make include-server-maintainer-check, one gets a message each
time the
include server finds a path whose realpath name matches the regular
That results in messages like:
WARNING include server: For translation unit 'src/testtmp.c', lookup
of file
'bits/stdio_lim.h' resolved to '/usr/include/bits/stdio_lim.h' whose
realpath is
To make the interpretation of quoted arguments within
correct, I added 'eval' to the command that cranks up the include
server. I
remembered to put extra quoted quotes inside the parameters that
should be
considered a token after the double interpretation that eval implies.
2008-05-31 00:38 Nils Klarlund <>
* test/, test/
Tidy-up testing framework to overcome recently introduced bug.
Testing on cygwine revealed that as tests were being issued the
testing directory would suffer from longer and longer prefixes until a
too long' error would stop the party. This is result of an earlier
attempt to
avoid too much printing to stdout during tests, spefically during
recursive test
The problem is that the teardown mechanism of the comfychair
enviroment is not
expressed -- by any name at all (it could be 'teardown' for example).
So, I
added a name --- but because there's no expectation that the TestCase
defined there has its teardown method called from derived classes ---
I chose
the name CleanUps, which corresponds to the private variable.
I also made an abstraction for running a test. This new
function can the conveniently by called to carry out a subtest.
With this CL, 'make pump-maintainer-check' now works on cygwin.
2008-05-30 22:57 Craig Silverstein <>
* AUTHORS, INSTALL, README, README.pump,, doc/example/init,
doc/web/compared.html, doc/web/compilers.html, doc/web/faq.html,
doc/web/favicon.ico, doc/web/index.html, doc/web/results.html,
doc/web/scenarios.html, doc/web/security.html, man/distcc.1,
man/distccd.1, man/distccmon-text.1, man/pump.1:
Documentation fixes:
1) Replace with the new google code location
2) Add favicon.ico from the site
3) Use as the only distcc mailing list (there
were at least three mailing lists scattered around the docs, some of
which don't even exist anymore!)
4) Update man pages and other docs to not use "distcc-pump" anywhere;
it's now "pump mode" or "distcc's pump mode", or "distcc-pump
I also add, to the README, some discussion of scaling to hundreds of
Reviewed by fergus and klarlund
2008-05-30 07:46 Fergus Henderson <>
*, packaging/RedHat/rpm.spec:
Fix a bug where the "pump" man page was not included in the RPM
and Debian packages.
Also, fix a bug where the Makefile rules for building HTML files were
not working when srcdir != builddir.
Tested by "make install-deb; man pump".
Reviewers: Craig Silverstein
2008-05-29 21:44 Nils Klarlund <>
* bench/
Add include server option '--unsafe_absolute_includes' to all
benchmarks in pump
This is harmless I think, and it's easy to forget this option. It is
importance to at least Samba-2.2.7.
2008-05-29 18:51 Nils Klarlund <>
* bench/, bench/
Tigthen how compilers are located. This overcomes issues on Cygwin. I
changed default C++ compiler to 'c++' instead of 'cxx'. 'c++' is the
more common
name I believe. Witht this change, both compilers must exist for
to run.
REVIEW: Craig Silverstein
2008-05-29 18:51 Nils Klarlund <>
* bench/, bench/, bench/
Enhance performance reporting for benchmarking.
This CL adds reporting of:
- number of processors
- total cpu time
- cpu utilization
- include server cpu time
I corrected issues with overly loose specification of compiler
locations. (I
developed this CL under Cygwin and encountered new problems.) This
resulted in
evil recursive invocations of distcc.
I also:
-- removed an unnecessary parameter from Build(..)
-- pruned the number of decimals reported from 4 to 1.
-- removed the dependency of 'Numeric', which is a non-standard
package and
rewrote the math do to std deviation
-- use shell built-in 'time' instead of Python time functionality
-- corrected deficient error reporting: builds would fail with
non-zero status
and not be reported as failing.
REVIEW: Craig Silverstein
DISTCC_HOSTS="--randomize `/home/klarlund/svn-distcc/distcc/lsdistcc
-P1 -k100 -d`" PATH=`pwd`:$PATH bench/
-n 1 -c 'pump,h40,j120' -c 'dist,h40,j32' linux-2.6.25
Part of the printout for hello-2.1.1:
Local number of CPUs: 4
Linux #1 SMP Thu May 8 01:31:23 UTC 2008
x86_64 GNU/Linux
project compiler time s.d. CPU time CPU util incl serv
hello-2.1.1 pump_h39_j120 0.9s 0.0s 0.5s 13.5% 0.2s
hello-2.1.1 dist_h39_j32 0.4s 0.1s 0.3s 18.1%
(For this small program, pump is a disadvantage.)
2008-05-29 05:38 Craig Silverstein <>
* bench/, bench/, bench/,
bench/, bench/
Some changes to the benchmark framework to not redo work
unnecessarily. Most prominently, no longer re-run 'tar xf &&
configure' every benchmark run. Instead, if configure was
successfully executed last benchmark run, just do 'make clean'. This
is equivalent to what we do now between build runs, when the
repeat-count is > 1.
This feature is not turned on by default, but must be enabled with the
new --force=0 flag. --force=1 keeps the same behavior as before: we
always re-run configure in each build-directory. --force=2 adds more
repeat-work than before; in --force=2 mode, we always re-download the
package from the web, even if we had successfully downloaded it
Note that the 'tar' command currently warms the file-cache, which
makes build times more consistent, so there is so cost to setting
--force=0, in terms of the data collected.
Reviewed by klarlund
2008-05-29 02:04 Nils Klarlund <>
* bench/, bench/, bench/
Add include server args to benchmarking framework.
This makes the linux kernel build with pump-mode when the benchmark
script is
Also, include the '-t' option to the include server; that prints out
the elapsed
and CPU times at the end of the build.
REVIEW: Craig Silverstein
TESTS: (on quad-cpu workstation)
DISTCC_HOSTS="--randomize `/home/klarlund/svn-distcc/distcc/lsdistcc
-P1 -k100 -d`" PATH=`pwd`:$PATH bench/
--cxx='void' -n 5 -c 'pump,h40,j120' -c 'dist,h40,j32' linux-2.6.25
project compiler time s.d.
linux-2.6.25 pump_h39_j120 69.6525s 3.0969s
linux-2.6.25 dist_h39_j32 103.8416s 10.8041s
2008-05-29 01:57 Nils Klarlund <>
Add critique of pump-mode when include server shuts down.
Print a message like:
__________Warning: 1 pump-mode compilation(s) failed on server, but
succeeded locally.
when compile discrepancies have occurred. Currently, a user may think
that all
is well because we do not terminate a build when discrepancies occur
and the
warning messages occurring in the middle of a build may easily be
REVIEW: Craig Silverstein
TESTS: make linux-kernel without stat reset triggers to observe
2008-05-29 01:46 Craig Silverstein <>
* src/dotd.c, src/dotd.h, src/emaillog.c, src/emaillog.h:
Fix some of the written-on dates for some google patches. Pointed out
by fergus.
2008-05-28 13:12 Nils Klarlund <>
Fix unproctected invocation of distcc and numeric designation of one
with a
plural noun.
I discovered this bug by deleting /usr/bin/distcc. I did that after I
found out
that the Linux kernel compilation is suffering from a similar issue
others), because the PATH is apparently rewritten.
2008-05-28 02:32 Nils Klarlund <>
* include_server/, include_server/
Remove spurious warning messages about absolute filepaths.
During compilation of the Linux kernel messages like:
absolute filepath blabla.h was IGNORED (correctness of build may be
are issued. They are wrong. The problem is that -include or -imacro or
source file names with absolute filepaths trigger a complaint from the
mechanism usually used for relative file names.
We correct this problem.
We also substitute fp_map for includepath_map, which is the now
preferred term.
REVIEWER: Craig Silverstein
make pump-maintainer-check
make include-server-maintainer-check
2008-05-28 02:19 Nils Klarlund <>
* src/compile.c:
Fix race condition that may prevent the warning message that pump-mode
is no
longer used from being displayed.
This is the current crop of error messages. A couple of them *really*
should be
suppressed, but not the last one, which the CL is about.
distcc[4333] ERROR: compile arch/x86/kernel/syscall_64.c on,lzo,cpp failed
distcc[4333] (dcc_build_somewhere) Warning: remote compilation of
'arch/x86/kernel/syscall_64.c' failed, retrying locally
distcc[4333] Warning: failed to distribute
arch/x86/kernel/syscall_64.c to,lzo,cpp,
running locally instead
distcc[4333] (dcc_please_send_email_after_investigation) Warning:
remote compilation of 'arch/x86/kernel/syscall_64.c' failed, retried
locally and got a different result.
distcc[4333] (dcc_please_send_email_after_investigation) Warning: file
'include/asm/asm-offsets.h', a dependency of
arch/x86/kernel/syscall_64.c, changed during the build
distcc[4333] (dcc_note_discrepancy) Warning: now using plain distcc,
possibly due to inconsistent file system changes during build
The last message may not occur: the code contains a race condition,
because more
processes may increment the unary file, after it has reached the size
max_discrepancies_before_demotion, preventing the equality from ever
becoming true.
2008-05-27 20:33 Nils Klarlund <>
* include_server/,
include_server/, include_server/
Make the Linux 2.6 kernel build with distcc-pump mode.
Add a new piece of command line parse information: send_systemdirs.
boolean is normally false. It is true if there is a -isystem option
with a
default system directory (one known to the compiler).
With send_systemdirs true, the compiler headers of system headers are
sent to
the servers and mounted under the server root. The isystem option is
as usual
rewritten to be relative to the root. Without this flag setting,
distcc quickly
decides that pump mode is not viable because remote compilations fail.
Also, fixed the comment:
# TODO(klarlund): Make mechanism for handling -U, -undef options,
along with
# default symbols.
(-D options are handled.)
TESTS: make pump-maintainer-check
make include-server-maintainer-check
make 'linux kernel' in a directory made by the benchmark script (as
shown below)
--unsafe_absolute_includes --send_systemdirs
--stat_reset_triggers=include/linux/*' DISTCC_HOSTS="--randomize
`/home/klarlund/svn-distcc/distcc/lsdistcc -P3 -k100 -d`"
PATH=/home/klarlund/svn-distcc/distcc:$PATH ./masquerade pump make
REVIVIEWER: Craig Silverstein <>
TRIVIA: the about 1000 files in the kernel build involve on average
headers. The build time on a quad-cpu machine drops from about 1m40 s
to 1m20s.
With pump-mode, the machine is underutilized judging from the total
sys + user
time, which is around only 2m20s.
NOTE: this is a successor to 'g6n8', which simply introduced a command
option to force sending of system files. A bug in gvn did not allow me
resuse that change list.
2008-05-23 22:24 Craig Silverstein <>
* bench/, bench/, bench/, bench/,
bench/, bench/, bench/,
bench/, include_server/,
include_server/, include_server/,
include_server/, include_server/,
include_server/, include_server/,
include_server/, include_server/,
include_server/, include_server/,
include_server/, include_server/,
include_server/, include_server/,
include_server/, include_server/,
include_server/, include_server/, src/access.c,
src/access.h, src/arg.c, src/argutil.c, src/backoff.c, src/bulk.c,
src/bulk.h, src/cleanup.c, src/climasq.c, src/clinet.c, src/clinet.h,
src/clirpc.c, src/compile.c, src/compile.h, src/compress.c, src/cpp.c,
src/daemon.c, src/daemon.h, src/distcc.c, src/distcc.h, src/dopt.c,
src/dopt.h, src/dotd.c, src/dotd.h, src/dparent.c, src/dsignal.c,
src/emaillog.c, src/emaillog.h, src/exec.c, src/exec.h,
src/exitcode.h, src/filename.c, src/fix_debug_info.c,
src/fix_debug_info.h, src/gcc-id.c, src/h_argvtostr.c,
src/h_compile.c, src/h_dotd.c, src/h_exten.c, src/h_hosts.c,
src/h_issource.c, src/h_parsemask.c, src/h_sa2str.c, src/h_scanargs.c,
src/h_strip.c, src/help.c, src/history.c, src/hostfile.c, src/hosts.c,
src/hosts.h, src/implicit.c, src/implicit.h, src/include_server_if.c,
src/include_server_if.h, src/io.c, src/loadfile.c, src/lock.c,
src/lock.h, src/lsdistcc.c, src/mon-gnome.c, src/mon-notify.c,
src/mon-text.c, src/mon.c, src/mon.h, src/ncpus.c, src/netutil.c,
src/netutil.h, src/prefork.c, src/pump.c, src/remote.c,
src/renderer.c, src/renderer.h, src/rpc.c, src/rpc.h, src/rslave.c,
src/rslave.h, src/safeguard.c, src/sendfile.c, src/serve.c,
src/setuid.c, src/snprintf.h, src/srvnet.c, src/srvnet.h,
src/srvrpc.c, src/ssh.c, src/state.c, src/state.h, src/stats.c,
src/stats.h, src/stringmap.c, src/stringmap.h, src/strip.c,
src/tempfile.c, src/timefile.c, src/timefile.h, src/timeval.c,
src/timeval.h, src/trace.c, src/trace.h, src/traceenv.c, src/types.h,
src/util.c, src/util.h, src/where.c, src/where.h, src/zeroconf-reg.c,
src/zeroconf.c, src/zeroconf.h, test/,
Normalize the copyright text, to the latest version of the GPLv2 text
(typically the only change is in the FSF street address). Add Google
copyright line in some places it was missing. Add GPLv2 notice to
avahi patches.
OKed by fergus
2008-05-23 20:43 Craig Silverstein <>
* packaging/RedHat/rpm.spec:
Update install-message wording.
Reviewed by fergus
2008-05-23 07:33 Craig Silverstein <>
Update copyright and GPL notice.
2008-05-23 07:29 Craig Silverstein <>
*, test/
Fix author lines. Also, add gpl text.
OKed by fergus and klarlund
2008-05-23 06:30 Fergus Henderson <>
* packaging/RedHat/conf/clients.allow, packaging/RedHat/rpm.spec:
Do not include in clients.allow by default,
because it is a security risk: it may allow other
users on the machine to execute arbitrary code as
the distcc user.
Instead, leave clients.allow empty by default,
and require the system admistrator to edit
clients.allow manually, if they want to use distcc
in TCP mode.
We still install distccd as a service, but distccd
will exit immediately unless you've already added
some hosts to clients.allow.
Reviewers: Craig Silverstein
2008-05-23 03:19 Fergus Henderson <>
* include_server/
Fix a typo in a comment.
2008-05-23 03:18 Fergus Henderson <>
* src/dopt.c:
Fix a bug: --wizard is supposed to imply --log-level debug, but this
wasn't working, because the code that handles --wizard wasn't setting
Reviewers: Craig Silverstein
2008-05-23 03:12 Nils Klarlund <>
* include_server/, include_server/
Fix unsoundess of directory replication.
Testing of distcc-pump mode on the Linux kernel showed that the
computed include
closure was sometimes wrong: header files were missing.
Further testing showed that sometimes apparently not even the
compilation unit
made it across to the server or rather, the c-file in its real
location would
come across, but the path designating it would not.
Take as an example: compilation unit is designated by the path
../bar/baz.c and
the current directory is /foo but no files in /foo are in actuality
during include processing. Then the compilation server will get
/PREFIX/bar/baz.h -- the image of the real file -- but /PREFIX/foo,
the image of
the current directory, will not even be created!
So, this CL corrects an oversight in the way that the include
explores files: although it does take into account the chasing of
symbolic links,
no provisions are in place to properly model '..' for climbing up
Specifically, to climb up a directory, it must exist! Usually, the
directory in
fact would exist on the server, because it would be replicated thanks
to the
header files it contains. But there is no guarentee.
We solve this problem by forcing the creation of dummy .c files the
first time a
path is explored. Because paths are being investigated backwards (from
the end),
forcing results in extra files only at the "deep" levels. Since files
usually clustered together in directories, the addition of a dummy
file per deep
directory should be inconsequential for performance.
TBD: integration level tests that this really work. I will either
include that
later or in a separate CL.
make pump-maintainer-check
build the Linux 2.6 kernel in true pump-mode (with extra patch, to be
described separately that sends compiler system files to the server)
files but a few towards the end suffer from absolute includes are
preprocessed and compiled on the compile servers!]
The command I used is:
DISTCC_HOSTS="--randomize `/home/klarlund/svn-distcc/distcc/lsdistcc
-P3 -k100 -d`" PATH=/home/klarlund/svn-distcc/distcc:$PATH
./masquerade pump make -j120
I had to delete /usr/bin/distcc for this work, because of the PATH
that the kernel makefiles apparently exercise. Otherwise,
would sometimes get called.
Fergus Henderson <>, Craig Silverstein <>
2008-05-23 03:03 Fergus Henderson <>
Some trivial style changes.
2008-05-23 02:35 Nils Klarlund <>
* bench/, bench/, bench/
Set-up masquerading for benchmarks.
Follow the advice of the distcc man page for executing the benchmarks
to not
rely on CC and CXX variables by also routing naked calls of 'cc',
'gcc', etc to
a 'farm' of tiny shell scripts.
Also, provide a little wrapper script that does this for people who
have to
debug a benchmark build.
This change is convenient for running the benchmark on the linux
because building the kernel uses naked 'gcc' calls.
Building the linux kernel.
2008-05-23 01:41 Fergus Henderson <>
Fix a bug which broke the Debian and RPM distributions: the generated
script was referring to DESTDIR.
Files should be installed into DESTDIR, but they should never refer to
because it is only a temporary location used for constructing the RPM
when the package is actually installed, the files will get put in e.g.
rather than DESTDIR/usr.
Tested with "make install-deb && make daemon-installcheck".
Reviewers: Nils Klarlund
2008-05-23 01:11 Manos Renieris <>
* NEWS, README.pump, doc/protocol-3-impl.txt, doc/protocol-3.txt,
man/distcc.1, man/pump.1:
Minor documentation changes.
2008-05-22 19:06 Fergus Henderson <>
* src/dotd.h, src/include_server_if.h:
Remove "svn:executable" property (the "+x" permission bit) from header
Reviewers: Manos Renieris
2008-05-22 05:36 Fergus Henderson <>
* survey.txt:
Direct survey response to rather than to
Martin Pool.
Reviewers: Craig Silverstein
2008-05-22 05:35 Fergus Henderson <>
A major overhaul of the INSTALL file. Describe pump mode better, and
explain the effects of installing via RPM or Debian package.
Also a bunch of other minor edits.
Reviewers: Craig Silverstein
2008-05-22 04:51 Fergus Henderson <>
Bump version number to 3.0-prerelease3.
Reviewers: Craig Silverstein
2008-05-22 04:49 Fergus Henderson <>
* include_server/
Fix a test case that was failing on MacOS X.
The test was implicitly assuming that /tmp == realpath(/tmp).
But in MacOS X, /tmp is a symbolic link to /private/tmp.
Reviewers: Craig Silverstein, Nils Klarlund
2008-05-22 04:40 Fergus Henderson <>
* doc/web/index.html:
Update the "60 second instructions" to use pump mode.
I considered mentioning both regular mode and pump mode in the 60
second instructions, but 60 seconds doesn't really give you much
time to describe the difference between the two, so I thought it
was simpler to just go with pump mode.
Reviewers: Craig Silverstein
2008-05-21 22:42 Fergus Henderson <>
* test/
Disable the Gdb_Case test in non-pump mode when using gcc versions
that don't preserve the source directory in the preprocessed output.
Reviewers: Nils Karlund, Craig Silverstein
2008-05-21 20:28 Nils Klarlund <>
* src/clirpc.c:
Make an obscure and common error message more informative.
Currently, our users get the following error message when their
workstation is
not in the allowed domains as specified in the server configuration:
distcc[20742] (dcc_readx) ERROR: unexpected eof on fd5
distcc[20742] (dcc_r_token_int) ERROR: read failed while waiting for
token "DONE"
With this change, a message explains some likely causes of the
2008-05-21 16:37 Fergus Henderson <>
* test/
Disable some tests that were failing if you don't have a C++ compiler
Also, tidy up the output from the DotD_Case test: instead of
DotD_Case TempCompile_Case OK
TempCompile_Case OK
TempCompile_Case OK
TempCompile_Case OK
TempCompile_Case OK
TempCompile_Case OK
TempCompile_Case OK
TempCompile_Case OK
TempCompile_Case OK
TempCompile_Case OK
TempCompile_Case OK
TempCompile_Case OK
you now get just
DotD_Case OK
Also, fix a problem where ObjectiveCPlusPlus_Case test was on some
being run even though the system didn't have Objective C++ installed.
Reviewers: Nils Klarlund
2008-05-21 16:26 Nils Klarlund <>
* include_server/, include_server/,
Add '--unsafe_absolute_includes' option so that more can be compiled
An occurrence of say
#include "/usr/include/acl.h"
will normally force the include processor to abort (even when this
include is
platform-specific and #ifdef'ed away), because there are no guarantees
that the
file /usr/include/acl.h exists on the host. With this option, these
will be ignored.
A message like:
WARNING include server: absolute filepath '/usr/include/acl.h' was
IGNORED (correctness of build may be affected)
will be printed.
The normal message raised when this option is off, the default, has
modified. It now mentions the option.
An include server manual page is to follow, which explains the
consequences in
detail of using this option.
Testing: this makes the samba-2.2.7 benchmark build without hiccups
using distcc
pump. Without the change many compilations fail because the include
bails out and because another unrelated bug in the include server
makes it later
dish up with include closures that are too small.
Revievers: Craig Silverstein <>, Fergus Henderson <>
2008-05-21 09:04 Fergus Henderson <>
*,, src/include_server_if.c:
Some usability improvements, in particular better diagnostics for
common setup errors.
In pump script:
- If DISTCC_HOSTS is set, print out a message saying how many hosts
there are (similar to the one that we already print if you instead
set DISTCC_POTENTIAL_HOSTS) and how many of them have pump enabled.
- Report an error if you run pump using a host list containing no
hosts with ',cpp'. (Should this be a warning instead?)
- Report an error if you run pump using an empty host list.
(Should this be a warning instead?)
In distcc client:
- Improve the warning messages that you get if you run distcc using
hosts with ",cpp" without running pump.
2008-05-21 06:13 Craig Silverstein <>
* bench/, bench/
Document the options that the Package constructor takes.
Get rid of source_name, which isn't used anywhere.
Also, add a few more benchmark projects. These are big(ish) and
written in C++, to test distcc on C++ code.
Reviewed by Nils Klarlund
2008-05-20 21:49 Craig Silverstein <>
* bench/, bench/
In the benchmark code, make sure a directory exists before cd-ing into
it. This is to handle projects like ACE, which require you to build
from an entirely new directory.
Also fix up an obsolete help-text sentence.
Reviewed by Fergus Henderson
2008-05-20 20:23 Fergus Henderson <>
* include_server/, include_server/,
include_server/, include_server/,
Re-enable Objective C and Objective C++ support.
This required the following changes:
- Compute the default search paths for each language lazily,
when the language is first encountered, rather than
computing it for 'c' and 'c++'.
- Make the tests of Objective C and Objective C++
conditional on the relevant compiler being installed.
Tested by "make check" on two systems:
- One with Objective C installed, but not Objective C++.
- One with neither installed.
I didn't test on a system with Objective C++ installed,
because I didn't have one easily available.
Reviewers: Craig Silverstein, Nils Klarlund.
2008-05-20 20:19 Fergus Henderson <>
* test/
Disable part of the DashWpMD_Case test, because it doesn't pass :-(
Tested with "make check"; fails before this CL, passes afterwards.
Reviewers: Nils Klarlund, Craig Silverstein.
2008-05-20 18:16 Craig Silverstein <>
* src/access.c, src/access.h, src/arg.c, src/backoff.c, src/bulk.c,
src/bulk.h, src/cleanup.c, src/climasq.c, src/clinet.c, src/clinet.h,
src/clirpc.c, src/compile.c, src/compile.h, src/compress.c, src/cpp.c,
src/daemon.c, src/daemon.h, src/distcc.c, src/distcc.h, src/dopt.c,
src/dopt.h, src/dotd.c, src/dotd.h, src/dparent.c, src/dsignal.c,
src/emaillog.c, src/emaillog.h, src/exec.c, src/exec.h,
src/exitcode.h, src/fix_debug_info.c, src/fix_debug_info.h,
src/gcc-id.c, src/h_hosts.c, src/h_parsemask.c, src/help.c,
src/history.c, src/hostfile.c, src/hosts.c, src/hosts.h,
src/implicit.c, src/implicit.h, src/include_server_if.c,
src/include_server_if.h, src/io.c, src/loadfile.c, src/lock.c,
src/lock.h, src/lsdistcc.c, src/mon-gnome.c, src/mon-notify.c,
src/mon-text.c, src/mon.c, src/mon.h, src/ncpus.c, src/netutil.c,
src/netutil.h, src/prefork.c, src/pump.c, src/remote.c,
src/renderer.c, src/renderer.h, src/rpc.c, src/rpc.h, src/rslave.c,
src/rslave.h, src/safeguard.c, src/sendfile.c, src/serve.c,
src/setuid.c, src/snprintf.c, src/snprintf.h, src/srvnet.c,
src/srvnet.h, src/srvrpc.c, src/ssh.c, src/state.c, src/state.h,
src/stats.c, src/stats.h, src/stringmap.c, src/stringmap.h,
src/strip.c, src/tempfile.c, src/timefile.c, src/timefile.h,
src/timeval.c, src/timeval.h, src/trace.c, src/trace.h,
src/traceenv.c, src/types.h, src/util.c, src/util.h, src/where.c,
src/where.h, src/zeroconf-reg.c, src/zeroconf.c, src/zeroconf.h:
Change C++-style // comments to /**/.
Also, fix the emacs var-setting line: it was missing a semicolon
before, which means the entire line was being ignored.
No contentful change.
Reviewed by Fergus Henderson
2008-05-20 06:13 Craig Silverstein <>
* src/access.c, src/access.h, src/arg.c, src/argutil.c, src/backoff.c,
src/bulk.c, src/bulk.h, src/climasq.c, src/clinet.c, src/clinet.h,
src/clirpc.c, src/compile.c, src/compile.h, src/compress.c, src/cpp.c,
src/daemon.c, src/daemon.h, src/distcc.c, src/distcc.h, src/dopt.c,
src/dopt.h, src/dotd.c, src/dotd.h, src/dparent.c, src/dsignal.c,
src/emaillog.c, src/emaillog.h, src/exec.c, src/exec.h,
src/exitcode.h, src/filename.c, src/fix_debug_info.c,
src/fix_debug_info.h, src/gcc-id.c, src/h_argvtostr.c,
src/h_compile.c, src/h_dotd.c, src/h_exten.c, src/h_hosts.c,
src/h_issource.c, src/h_parsemask.c, src/h_sa2str.c, src/h_scanargs.c,
src/h_strip.c, src/help.c, src/history.c, src/hostfile.c, src/hosts.c,
src/hosts.h, src/implicit.c, src/implicit.h, src/include_server_if.c,
src/include_server_if.h, src/io.c, src/loadfile.c, src/lock.c,
src/lock.h, src/lsdistcc.c, src/mon-gnome.c, src/mon-notify.c,
src/mon-text.c, src/mon.c, src/mon.h, src/ncpus.c, src/netutil.c,
src/netutil.h, src/prefork.c, src/pump.c, src/remote.c,
src/renderer.c, src/renderer.h, src/rpc.c, src/rpc.h, src/rslave.c,
src/rslave.h, src/safeguard.c, src/sendfile.c, src/serve.c,
src/setuid.c, src/snprintf.c, src/snprintf.h, src/srvnet.c,
src/srvnet.h, src/srvrpc.c, src/ssh.c, src/state.c, src/state.h,
src/stats.c, src/stats.h, src/stringmap.c, src/stringmap.h,
src/strip.c, src/tempfile.c, src/timefile.c, src/timefile.h,
src/timeval.c, src/timeval.h, src/trace.c, src/trace.h,
src/traceenv.c, src/types.h, src/util.c, src/util.h, src/where.c,
src/where.h, src/zeroconf-reg.c, src/zeroconf.c, src/zeroconf.h:
Turned all tabs into 4 spaces. Got rid of whitespace at the end of
lines. Fixed up resulting mis-indented code I noticed (mostly in
files that used 8 space indents, or used 4-space and 8-space indents
in the same file (!)). Added the emacs tab-var setting for all files,
not just some of them.
I also added in copyright notices for files I noticed that didn't have
them. We'll want to do another pass-through to fix these up properly,
I used the following perl snippet to check for mis-indented code after
converting tabs to whitespace:
$ for i in *.{c,h}; do echo $i; perl -nle 'if ($indent > 0) {$sp=" " x
$indent; /^$sp[^ ]/ && print "$.: $_"; $indent=0;}; if (/^( *).*{/ )
{$indent=length($1);} else {$indent=0;}' $i; done | less
It had false positives, but hopefully didn't miss anything.
Reviewed by Nils Klarlund
2008-05-20 05:58 Craig Silverstein <>
* bench/
Add --output to, to print the final timing summary to a
file in addition to stdout. Also made sure we don't try to access
opt_cc and opt_cxx until after all flags are read, so flag order
doesn't matter. Finally, fixed indentation so we only print the
default actions when --help is specified (as intended).
Tested by running make benchmark.
Reviewed by Nils Klarlund
2008-05-20 03:32 Nils Klarlund <>
* src/emaillog.c:
Fix polarity of condition.
Reviewers: Fergus Henderson
Tests: manual (both with and without DISTCC_EMAILLOG_WHOM_TO_BLAME
2008-05-20 03:31 Nils Klarlund <>
* bench/
Corrent option name.
The option is said to be 'distcc', but it's actually implemented as
'dist'. The
latter is fine with me: we have 'dist' and 'pump', with 'pump' being a
advanced 'dist'.
2008-05-20 03:31 Nils Klarlund <>
* test/
Improve assert message.
Revievers: Fergus Henderson <>
2008-05-19 10:00 Fergus Henderson <>
* bench/, test/
Add 'DashWpMD_Case' to the list of test cases that actually get run.
Also, an unrelated change to the benchmarking scripts:
fix a cut-and-paste error in an error message.
Reviewers: Craig Silverstein
2008-05-19 09:58 Fergus Henderson <>
* src/arg.c:
Whitespace change: make indentation more consistent.
2008-05-18 06:06 Fergus Henderson <>
* src/arg.c, src/argutil.c, src/compile.c, src/distcc.c, src/dotd.c,
src/implicit.c, src/strip.c:
Fix bugs in my previous change to handle "-Wp," options: arguments
to str_startswith() were in the wrong order, and in one place I had
wrongly passed 'argv' instead of 'new_argv'.
Move the call to dcc_expand_preprocessor_options() from
dcc_get_dotd_info() to gcc_build_somewhere(), so that it is pretty
much the first thing done to argv. Not sure if this is really needed,
but it seems like a good idea.
Fix various memory management problems, including some introduced by
moving the call to dcc_expand_preprocessor_options(). One problem
was that dcc_find_compiler() was producing a result that was sometimes
allocated with malloc() and sometimes not, so the caller couldn't
safely deallocate it. I changed dcc_find_compiler to always return
a dynamically allocated result.
Fix some places where return values were being ignored.
Also fix one place where distcc was inconsistenly calling exit()
rather than returning a return code.
Like my previous change, this one is necessary, but perhaps not
sufficient, for building the Linux kernel with distcc-pump.
Tested by "make valgrind-check", and by building and installing the
debian package and the building Linux 2.6.25 in pump mode using the script.
2008-05-18 06:03 Fergus Henderson <>
* packaging/RedHat/init.d/distcc:
Fix a bug where "/etc/init.d/distcc stop" was not working when you had
installed a new distcc. It wasn't working properly because the call to
"start-stop-daemon --stop" used the "--exec /usr/bin/distccd" option,
and (perhaps due to a bug in start-stop-daemon?) that option checks
/proc/<pid>/exe against /usr/bin/distccd by comparing inode numbers.
Comparing inode numbers doesn't work, because when we install a new
distccd, we create a fresh file with a new inode number, so the inode
number used by running processes won't match the inode number of
/usr/bin/distccd on disk after you've installed a new version.
The fix was to remove the "--exec /usr/bin/distccd"
option from the call to start-stop-daemon. We're already passing
"--name distccd", which is sufficient to indentify the running
distccd processes.
Reviewers: Craig Silverstein
2008-05-17 16:24 Fergus Henderson <>
* src/compile.c, src/compile.h, src/h_compile.c, test/
Fix a typo: s/ddc_/dcc_/
Reviewers: Craig Silverstein
2008-05-17 15:18 Nils Klarlund <>
* include_server/, include_server/
Tune gc for 25% speed-up of include processor.
Set first parameter of gc.set_threshold to 10000 instead of default
See comments in program text.
I used a little script to find the include server timings as a
function of this
This script executes:
--gc_threshold=700' \
/usr/bin/time -p make-dbg -j120 -r -experimental-ld -g0 gws:gws"
with various values of gc_threshold.
The measurement were done on a four processor system (dual Opterons),
with an nxserver process. Files were served through Fuse.
gc include server user + sys time
700 155.1s 154.0s 164.7s 186.1s 154.3s Mean: 162.8
10000 123.8s 125.4s 120.6s 120.4s 121.0s Mean: 122.2
100000 123.4s 123.3s 122.2s 123.3s 116.5s Mean: 121.7
700 166.5s 156.4s 150.8s 153.4s 155.4s Mean: 156.5
10000 120.7s 142.1s 118.3s 117.7s 119.2s Mean: 123.6
100000 140.3s 117.1s 149.7s 116.7s 141.6s Mean: 123.6
The corresponding elapsed times:
371.0s 363.3s 361.9s 370.8s 369.0s Mean: 367.2
341.8s 346.1s 336.3s 338.3s 340.5s Mean: 340.6
345.9s 338.5s 342.9s 374.4s 340.0s Mean: 348.3
377.4s 379.9s 387.1s 377.4s 373.2s Mean: 379.0
332.1s 337.7s 336.5s 332.2s 314.7s Mean: 330.6
341.1s 334.6s 357.8s 338.5s 352.4s Mean: 344.9
Note that the saving in include server time is around 35s, but the
savings in
elapsed time is around 44s. These numbers are uncertain. Even so, they
indicate that the include server is a signifcant bottleneck.
BTW, for comparison with plain distcc:
821.4s 822.0s 842.4s 821.5s 852.0s Mean: 831.9
878.7s 857.2s 860.3s 880.1s 856.0s Mean: 866.5
Thus, pump-mode 2.5X is faster than plain distcc (with the
set_threshold =
10000 of this CL).
Revievers: Fergus Henderson <>, Craig Silverstein <>
2008-05-16 23:12 Craig Silverstein <>
* src/exec.c:
There's cygwin-specific code in exec.c, but it seems to assume that
when running under cygwin, we'll be using a native windows app to
compile. But sometimes we're using a cygwin app (eg /bin/gcc).
Trying to use native-windows forking routines with cygwin apps causes
a segfault (and takes a while to do it); we need to use unix forking
routines there.
With this change, when we're asked to spawn a sub-process, we try to
guess whether the sup-process app is windows or cygwin, based on its
path location (this benefits from using absolute paths):
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\cl.exe
or even
C:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/bin/cl.exe
If we decide it's a windows app but are wrong, then the
windows-forking code should eventually fail with "file not found"; in
that case, we fall through to the normal unix-fork case, to give
cygwin a chance to find the binary.
I also took the opportunity to clean up some of the code (handles
should be initialized to ILLEGAL_HANDLE values, not NULL). I also
replaced the crazy permissions the code was asking for before, with
normal GENERIC_READ/GENERIC_WRITE. This allows the code to work when
the tmpdir is c:\windows, which was failing before.
Tested on cygwin using /bin/gcc as the compiler, like so:
./distcc /bin/gcc -c testtmp.c -o testtmp.o
where testtmp.c is a simple "hello world" program.
I also tested by running 'make check'. With this change, 'make check'
passes on cygwin! (Using gcc to do compilations.)
Reviewed by Fergus Henderson
2008-05-16 22:00 Fergus Henderson <>
*, src/compile.c:
Two bug fixes:
- Fix a bug where 'valgrind-check' was invoking 'pump-check',
but 'pump-check' was disabling valgrind.
- Fix an off-by-one error caught by valgrind.
Tested by "make check" and "make valgrind-check".
Reviewers: Craig Silverstein
2008-05-16 21:54 Fergus Henderson <>
* src/arg.c, src/distcc.h, src/dotd.c, test/
Handle '-Wp,-MD,<dotdfile>' option.
This is needed to build the Linux kernel.
Reviewers: Craig Silverstein
2008-05-16 20:46 Fergus Henderson <>
* bench/
In the list of projects to benchmark:
- comment out Linux 2.5.51, because it doesn't compile
- add Linux 2.6.25.
Reviewers: Nils Klarlund, Craig Silverstein
2008-05-16 20:44 Fergus Henderson <>
* bench/
In the benchmarking script, don't remove the build directories by
default, because the log files get stored in the build directories,
and it's useful to have the log files around afterwards.
Reviewers: Craig Silverstein
2008-05-16 18:08 Craig Silverstein <>
* src/dotd.c:
Comment the need to handle gcc's -Wp flag.
Reviewed by Fergus Henderson
2008-05-16 01:15 Nils Klarlund <>
* include_server/
Fix freak name collision on OSs that do not distinguish upper and
lowercase in
file names.
The symbol 'TESTING' is potentially unevaluated according to the
overapproximation semantics of the include server. So if this symbol
is used in
a file name and if 'TESTING' really means 'testing' according to the
OS and if
in fact 'testing' does exist as file, then there is trouble.
Revievewers: Craig Silverstein <>
make include-server-maintainer-check (on Linux)
2008-05-16 01:10 Nils Klarlund <>
Fix: speed-up the include processor a few times by exporting
This took a little while: fortunately, the tracing information is
dependent on
the PYTHONOPTIMIZE setting, so after a diff on the outputs of the gws
before and after, it finally dawned upon me what was wrong.
Tested: manually on the gws example with 600 include directories.
2008-05-16 00:59 Nils Klarlund <>
Fix removal of 'pump'.
Review: Craig Silverstein
2008-05-16 00:52 Nils Klarlund <>
Fix variable that denotes the source location.
(1) It was not documented. I rewrote the documentation for a couple
of associated variables.
(2) There was no default value.
Now, the variable does not need to be set from 'make', so I've removed
it from And, I've made it into a standard shell lowercase
Reviewers: Fergus Henderson, Craig Silverstein
Tests: (1) make distcheck
(2) Running the pump script out of the build directory.
2008-05-15 21:45 Craig Silverstein <>
*, test/
Modifications to the pump and test framework for cygwin.
1) find_c_extension looks for .dll files in addition to .so files.
2) Likewise, has to check whether binary names might end
in .exe. Usually that doesn't matter, but sometimes (eg when running
cp on them), it does.
3) adds a routine to detect PE binaries. These, like
dwarf binaries, do not always give reproducible output on the same
input, so take that into account in the gdb tests.
4) In the lsdistcc test, we assumed that when the ping failed, isn't available. But it's also possible ping is just broken
(or different) on that machine. So in the failed-ping case, we no
longer make any assumption about, one way or the other.
Tested by running 'make check' on cygwin. Most every test passes!
Reviewed by Fergus Henderson
2008-05-15 20:11 Nils Klarlund <>
Add 'pump' to 'all' target. Add 'rm pump' to 'clean' target.
- 'pump' is a dependency of 'install'.
- 'include_server' is a dependency of 'all.
So I propose that 'pump' should be a dependency of 'all'.
Reviewers: Fergus Henderson
Test: make distcheck
2008-05-15 19:39 Craig Silverstein <>
Instead of a hack to figure out if pump is installed or not -- one
that fails on macs with python 2.5 (at least) because of weirdnesses
with distutils installation on that platform -- just rewrite pump at
install-time to indicate it's installed. We take the opportunity to
tell pump where the installed is, because it needs
to know, and we know that during 'make install'.
Tested by running 'make distcheck' on linux (ubuntu) with python 2.4,
and mac 10.5 with python 2.5. I also tested by running, on the linux
./configure --prefix=/tmp/distcc.install && make install && make
DISTCC_INSTALLATION=/tmp/distcc.install/bin installcheck
Furthermore, I manually inspected the installed pump file after that
to make sure it looked correct.
Reviewed by Nils Klarlund and Fergus Henderson
2008-05-15 02:53 Craig Silverstein <>
* include_server/
Add a comment. From Nils Klarlund <>:
"Assume that:
(1) 'gcc' is a link to 'distcc' earlier on PATH than the real gcc.
(2) gcc is invoked; in fact that invokes distcc, which will rewrite
the PATH in src/climasq.c before invoking 'gcc' again.
That will make calls by distcc such as 'gcc -E' for preprocessing work
OK, but the include processor will in fact be calling the 'distcc' as
'gcc' again! But because the input argument is an I/O redirection,
distcc will then correctly call 'gcc'. In args.c it fails to recognize
an input file."
2008-05-15 02:40 Craig Silverstein <>
* src/access.c, src/access.h, src/arg.c, src/backoff.c, src/bulk.c,
src/bulk.h, src/cleanup.c, src/climasq.c, src/clinet.c, src/clinet.h,
src/clirpc.c, src/compile.h, src/compress.c, src/cpp.c, src/daemon.c,
src/daemon.h, src/distcc.c, src/distcc.h, src/dopt.c, src/dopt.h,
src/dparent.c, src/dsignal.c, src/exec.h, src/exitcode.h,
src/h_hosts.c, src/h_parsemask.c, src/help.c, src/history.c,
src/hostfile.c, src/hosts.c, src/hosts.h, src/implicit.c,
src/implicit.h, src/io.c, src/loadfile.c, src/lock.c, src/lock.h,
src/mon-gnome.c, src/mon-notify.c, src/mon-text.c, src/mon.c,
src/mon.h, src/ncpus.c, src/netutil.c, src/netutil.h, src/prefork.c,
src/pump.c, src/remote.c, src/renderer.c, src/renderer.h, src/rpc.c,
src/rpc.h, src/safeguard.c, src/sendfile.c, src/serve.c, src/setuid.c,
src/srvnet.c, src/srvnet.h, src/srvrpc.c, src/ssh.c, src/state.c,
src/state.h, src/stats.c, src/stats.h, src/strip.c, src/tempfile.c,
src/timefile.c, src/timefile.h, src/traceenv.c, src/types.h,
src/util.c, src/util.h, src/where.c, src/where.h:
Add a consistent emacs-variable header to all source files. This
affects the way emacs users will see these files, when visiting them
in emacs. In particular, tabs will show up as 4 spaces, which is
(clearly) the setting the original distcc author used when writing the
We also set an emacs variable to never insert new tabs, but use spaces
instead. This will help stop the problem we have now with mixed tabs
and spaces. In a future cleanup, we may replace all tabs with 4
spaces, and make other whitespace improvements.
The final new variable set, is to set line-wrapping at 78 chars.
Personally, I would have made it more like 72, but some existing files
already had the 78 limit, so I just do that everywhere, to be
Reviewed by Fergus Henderson
2008-05-15 01:58 Craig Silverstein <>
* test/
The gdb tests was making two assumptions that the input was ELF, which
was failing on OS X (Which uses Mach-O). One is that two identical
link commands always produce the same output, which is not true for
mach-o. The other is just a test of ELF-specific code, without an
"iself" check. Now I check the object-file type and run the
appropriate test, based on the type, in each case.
Tested by running 'make check' on linux (ubuntu 6) and OS X (10.5).
Reviewed by Fergus Henderson
2008-05-15 01:36 Craig Silverstein <>
* include_server/
When running gcc -v, we were clearing the environment too
aggressively: in particular, we were clearing $PATH, which is needed
to find gcc when it's in an unusual location. Now we clear everything
but $PATH.
Tested by running 'make include-server-maintainer-check' on solaris
x86, which has gcc outside the standard path, and on linux (ubuntu),
which does not.
Reviewed by Fergus Henderson
2008-05-15 01:15 Craig Silverstein <>
* src/tempfile.c:
The tmpdir-creation routine has an (undocumented) invariant that the
tmpdir should not end in a slash -- at least, inside distcc, you see
code like this:
snprintf("%s/%s", tmpdir, filename)
On the other hand, windows's routine to create a tempdir guarantees it
will end with a slash. I'm not sure it really matters, but get rid of
the slash in that case. That way we don't have to worry about how
filenames are interpreted (since // does have a special meaning for
filenames in windows, though probably not in a way this code could
generate before; still, no harm in normalizing to one slash).
Tested by running 'make check' on cygwin.
Reviewed by Fergus Henderson
2008-05-14 21:01 Craig Silverstein <>
* test/
Replace an os.system calls ('rm -rf') with python (shutil.rmtree).
This should improve portability. It seems to help on cygwin, for
I also got rid of anotehr os.system call that was redundant: it did a
"mkdir -p foo" after the previous line had done a "mkdir -p foo/bar".
Tested by running 'make check on linux (ubuntu) and cygwin.
Reviewed by Fergus Henderson
2008-05-14 19:48 Craig Silverstein <>
1) Fix up a PATH= assignment that would fail if builddir had spaces in
it (because the output of `cd "$builddir" && pwd` was not being
quoted). As a bonus, make the PATH= fit on one line, which makes some
shells happier.
2) Fixed up some install targets. On some systems, tar without -f
reads from stdin, but that's non-standard (it should read from some
tape-drive device in /dev in that case). Add -f- to $(TAR) in that
case, which should work everywhere.
3) cp -a isn't supported on all systems. I checked what automake
does, and it emits cp -pR, so that's what I do too. We don't have any
internal symlinks that I need to worry about -P or anything like
Tested by running 'make installcheck' on a freebsd 6.0 system.
Reviewed by Fergus Henderson
2008-05-14 19:22 Craig Silverstein <>
* include_server/
Show more data when an assert fails, to help in debugging.
Reviewed by Nils Klarlund and Fergus Henderson
2008-05-14 18:59 Craig Silverstein <>
* m4/acx_pthread.m4:
Update acx_pthread to the latest version we use internally. This is
like the one on the autoconf repository website, but with the
avahi patches added in to deal with some compiler quirks. However,
these patches have been rewritten internally within google to make
them more robust. In particular, the new code now works with cygwin,
which it previously didn't (resulting in the spurious error: "Unable
to determine how to use pthreads with shared libraries").
Tested by running configure on cygwin.
Reviewed by Nils Klarlund and Fergus Henderson
2008-05-14 14:26 Nils Klarlund <>
*, include_server/
Make distcc 3.0 compatible with Python 2.5.
I made PATH=$PATH:/usr/python/bin (where python2.5 resides on my
machine). I ran
autogen and reconfigured. Then I did:
make include-server-maintainer-check
make pump-maintainer-check
and I made sure that -Is now are set according to Python2.5.
2008-05-14 08:03 Craig Silverstein <>
Ick. On some systems test is in /bin, and in others /usr/bin. Now
figure out where it is before running it, and fall back on the shell
test if no binary can be found.
Tested by running 'make check' on a FreeBSD machine (/bin/test) and
linux (/usr/bin/test).
Reviewed by Fergus Henderson
2008-05-14 07:28 Craig Silverstein <>
* src/compile.c:
getc returns an int, not a char. We're checking whether a char ==
EOF, which isn't kosher, and on systems where -funsigned-char is true,
dangerous. Change the type of the var to an int.
Tested by running on linux (ubuntu) and on linux ppc (debian), the
latter of which complained at compile time.
Reviewed by Fergus Henderson
2008-05-14 07:15 Fergus Henderson <>
* packaging/RedHat/init.d/distcc:
Fix problems where distcc's init script was using the wrong
exit status and giving misleading messages as a result.
Reviewers: Craig Silverstein
2008-05-14 07:14 Fergus Henderson <>
* packaging/RedHat/conf/
Increase the set of commands allowed by default:
allow cc, c++, c89, c99, and g++, in addition to gcc.
Reviewers: Craig Silverstein
2008-05-14 02:27 Craig Silverstein <>
Fix a test to work on solaris sh.
Tested by running 'make check' on linux (ubuntu) and solaris 10 x86.
Reviewed by Nils Klarlund and Fergus Henderson
2008-05-14 01:00 Nils Klarlund <>
* include_server/, include_server/,
Finish refactoring and add tests. Move _CleanOutClientRoot and
to the ClientRootKeeper package in basics. Replace
_RemoveDirectoryTree with
shutil function. Add tests to see that directories are created and
Add a couple of title headers to Remove a couple of now
Tests: make pump-maintainer-check
make include-server-maintainer-check
Reviewer: Craig Silverstein
2008-05-14 00:42 Craig Silverstein <>
* include_server/
Include snprintf.c in the source-list for the python extension. This
is needed on systems that don't define asprintf/etc on their own.
Tested by running 'make check' on a linux ubuntu machine and on a
solaris machine.
Reviewed by Fergus Henderson
2008-05-14 00:31 Craig Silverstein <>
A few more cleanups:
1) No ! outside of a 'test' (sh-compatibility).
2) grep >/dev/null instead of grep -q (solaris portability).
3) Improved the quote hygenie a little.
4) prepend to PYTHONPATH instead of overriding it.
Tested by running on a solaris machine, and on a machine where
PYTHONPATH is needed to locate the python distribution (which is not
in the standard location).
Reviewed by Fergus Henderson
2008-05-13 23:53 Craig Silverstein <>
* test/
On some systems (FreeBSD), it looks like connect() can return EINVAL.
This isn't documented, but there's some talk about it on the web, eg
It looks like the cause is that the first connect fails for whatever
reason, and then subsequent ones fail with EINVAL.
I've detected that in the NoDetachDaemon_Case, both on FreeBSD and OS
X machines. The symptom is that sock.connect_ex(('',
self.server_port) continually returns EINVAL, and no amount of time
will fix things.
I'm not exactly sure why, but I figure one possible problem is the
connect is happening before distccd has started listening, and that
causes problems. So I put in a bit of a delay to give distccd time to
start up. I figure it can't hurt, and may well help.
Tested by running 'make check' on a ubuntu machine (not subject to
this problem) and a freebsd machine (which sometimes is). It
certainly didn't hurt, though I can't tell if it solved the problem
for good.
Reviewed by Fergus Henderson
2008-05-13 23:36 Craig Silverstein <>
* include_server/
I found a machine whose python was compiled with _FORTIFY_SOURCE,
which -- on linux FC5 at least -- gives warnings (which we turn into
errors via -Werror) on distcc code for libc functions where we ignore
the return value. Unfortunately, always uses the same flags
that python was compiled with on the local machine, so _FORTIFY_SOURCE
is always set when compiling distcc extensions via, and that
compilation fails.
Without getting into a philosophical debate about the merits of the
warn-unused warnings, we'd rather the code compile, so I turn off
_FORTIFY_SOURCE when it exists.
Tested by running 'make check' on a goobuntu machine (no
_FORTIFY_SOURCE) and an FC5 machine (with _FORTIFY_SOURCE).
Reviewed by Fergus Henderson
2008-05-13 20:33 Nils Klarlund <>
* src/compile.c:
Fix buglet: insert (void) in call of strcpy to avoid gcc 4.1.1. making
gcc 4.1.1 with glibc 2.2.2. insists that the return value must be
used. That
appears to be a bug in gcc.
Reviewers: Fergus Henderson, Craig Silverstein.
2008-05-13 18:59 Craig Silverstein <>
* test/
Two changes to robustify the unittests:
1) Don't try to run the gdb tests on machines that don't have gdb
installed. Likewise, don't try to run the implicit-cc test on a
machine that doesn't have cc installed (it happens! Sometimes
there's only gcc.)
2) Raise the file-descriptor limit if we can. Mac OS X likes to keep
the limit at 256, but some of these tests need more.
Tested by running 'make check' on linux and mac os x 10.5. On linux,
I ran on both a machine with gdb installed, and one without.
Reviewed by Nils Klarlund and Fergus Henderson
2008-05-13 18:40 Craig Silverstein <>
* src/exec.c:
We were logging a char* that could be NULL. With glibc, the printf
would just print "(null)", but on solaris libc it would segfault.
Explicitly test that case now.
Tested by running 'make check' on linux and solaris x86.
Reviewed by Nils Klarlund and Fergus Henderson
2008-05-13 17:49 Nils Klarlund <>
* include_server/, include_server/,
include_server/, include_server/,
Clean-up the handling of directories for storing compressed files.
The code was lacked encapsulation and proper object-orientation. (I
wrote it --
it had started out much simpler.) For example, key parameteres were
communicated through file name patterns expressed in file names on
disk. These
patterns were then inferred from reading file names. Now the patterns
properly abstracted away in a class.
There should be no semantic changes.
make include-server-maintainer-check
make pump-maintainer-check
DISTCC_CLIENT_TMP='/tmp' make pump-maintainer-check
The latter test exercices the padding gymnastics.
2008-05-13 07:02 Craig Silverstein <>
Rewrite 'pump' to remove bash-isms. This should now work with
standard sh.
This involved the following changes:
1) `cmd` instead of $(cmd).
2) [ -n "$VAR" ] instead of [ "$VAR" ]
3) "Here document" (<<EOF) instead of a multi-line string (for
4) if/then instead of fancy var stuff like $(var-foo)
5) if/then instead of x || { cmd1; cmd2; } (probably not necessary)
6) [ ! foo ] instead of ! [ foo ] (that is, ! inside the test command)
7) No more "local" for variable declarations
8) I rewrote a case statement as an if, to not need bash extensions
Not too much, actually. I've verified that the following "fancy"
features are supported by all the sh's I have access to (bash,
freebsd's sh, and solaris 10's sh):
1) Use of 'exec' to redirect the shell's stdin and stdout
2) Functions returning values, which are checkable via $?
3) Assigning text emitted via a funcion using `` (a=`MyFunc arg1
4) trap
In addition to the above conversions, I also cleaned up quote hygenie
(in case variables have spaces in them).
Tested by running 'make pump-maintainer-check' on a linux machine and
freebsd machine. On the solaris machine, I ran 'pump' manually
(setting various environment vars to try to test different codepaths),
but could not successfully run 'make pump-maintainer-check' since that
machine lacks the necessary version of python.
Really, we should probably rewrite this script in python one day (it
calls python scripts, so that's not adding a new dependency), and then
we won't have to worry about portability at all. But that will have
to wait for another day.
Reviewed by Nils Klarlund and Fergus Henderson
2008-05-13 07:00 Craig Silverstein <>
* test/
printenv doesn't exist on all systems. 'env' does, and does the same
thing as printenv when no arguments are given, so just use env instead
of printenv.
Tested by running 'make check' on a linux machine (which has both env
and printenv).
To be reviewed by Fergus Henderson
2008-05-13 05:28 Craig Silverstein <>
* include_server/
Be more informative on an assert.
Reviewed by Fergus Henderson and Nils Klarlund
2008-05-13 01:49 Craig Silverstein <>
In the non-included popt case, POPT_INCLUDES was the empty string,
leading to a compile command that had -I"" in it. Who knows what that
means? Now the -I is part of POPT_INCLUDES, so when it's absent we
don't add anything to CPPFLAGS.
Tested on a machine where POPT_INCLUDES is not empty and one where it
Reviewed by Nils Klarlund
2008-05-12 23:53 Fergus Henderson <>
* bench/
Fix a typo in my previous change:
2008-05-12 23:07 Fergus Henderson <>
* include_server/, test/
Handle gcc's "-MF" option in the include server.
This option only affects the name of the ".d" file, not the include
closure, so the include server doesn't need to do anything for this
option; the actual handling of this option in distcc is done by the
client, which already handles it correctly. This change just stops the
include server from throwing an exception whenever '-MF' is
Reviewers: Nils Klarlund
2008-05-12 23:02 Fergus Henderson <>
* bench/, bench/
Add new options '--cc' and '--cxx' for specifying the paths to use for
the C and C++ compilers.
Also, update the help message to document the new format for the
--compiler option.
Reviewers: Craig Silverstein
2008-05-12 20:18 Nils Klarlund <>
* include_server/c_extensions/distcc_pump_c_extensions_module.c:
Fix call of 'realpath' to work on FreeBSD. Also fix memory leak.
Reviewer: Craig Silverstein, Fergus Henderson.
Tests: make pump-maintainer-check
make include-server-maintainer-check
2008-05-12 19:11 Fergus Henderson <>
* bench/, bench/, bench/,
bench/, bench/, bench/
Add support for pump mode to the benchmarking scripts.
Also add support for setting the number of hosts to use.
Fix division by zero error that occurred when running benchmark script
with the "-a" option.
Fix broken URL for GNU hello package.
Reviewers: Craig Silverstein, Nils Klarlund
2008-05-12 18:32 Nils Klarlund <>
Fix 'ps' invocation to be more FreeBSD friendly.
Reviewers: Fergus Henderson, Craig Silverstein
Tests: make pump-maintainer-check
2008-05-12 16:19 Nils Klarlund <>
* include_server/
Fix include server test so that it passes on system w/o /dev/shm.
Reviewers: Craig Silverstein, Fergus Henderson
Tests: make include-server-maintainer-check
2008-05-12 16:15 Nils Klarlund <>
Get rid of 'readlink -f', which is a Gnuism.
The purpose of the readlink -f was to give the absolute path of the
installation; that happens to reveal the installation date given the
way we set
up distcc-pump at Google. But this does not work under FreeBSD. The
installation information can be communicated in different ways (for
example by
explicit actions of the build system).
Reviewers: Fergus Henderson, Craig Silverstein
2008-05-11 19:06 Craig Silverstein <>
* test/
Annoyingly, different versions of gcc are inconsistent in how they
treat a non-existent #include file when invoked with "-MMD": some
versions treat it as an error (rc 1), some as a warning (rc 0). When
distcc is responsible for preprocessing (_server_options includes
'cpp'), we need to figure out which our gcc does, in order to verify
distcc is doing the same thing.
Before this change, we just hard-coded in one sort of gcc behavior
(that it always warns). This change actually tries gcc out to see
which it does, to make sure distcc does the same.
Tested by running 'make pump-maintainer-check' on both Linux gcc 4.0.3
(which warns) and FreeBSD gcc 3.4.4 (which errors).
Reviewed by Fergus Henderson
2008-05-10 06:54 Craig Silverstein <>
* src/sendfile.c:
No matter what the reason, if we can't use sendfile() but it's still
safe to fall back on readwrite(), do that. Before we only did this
for certain errors, but we might as well do it for any error we don't
expect to be able to recover from.
Tested by running on mac os x 10.4, which has a problem with sendfile
failing sometimes. The relevant test succeeds after this patch.
Reviewed by Fergus Henderson
2008-05-10 00:58 Nils Klarlund <>
Double-quote unprotected directory reference.
Reviewers: csilvers
Tests: make distcheck
2008-05-10 00:56 Nils Klarlund <>
Cosmetic clean-up of
-- Put a @ in front of a comment shell command (it shouldn't be
printed). It is
the only comment in the action part of a build rule in the whole
Makefile. In
Emacs, this comment is flagged as a syntax issue.
-- Group all .PHONYs at beginning of section.
Tests: make distcheck
Reviewers: fergus, csilvers
2008-05-09 23:19 Nils Klarlund <>
Make the identification of Python 'binaries' more robust.
Use the distutil function that generates the library name for locating
Python stuff in an installation.
Reviewers: Fergus Henderson, Craig Silverstein
Test: make distcheck
2008-05-09 23:17 Nils Klarlund <>
* test/
Speed-up integration/systems tests.
2008-05-09 21:02 Fergus Henderson <>
Add "daemon-installcheck" target.
This tests that the distcc daemon is running, and that it and distcc
and the pump script have been installed correctly, by compiling a
hello world program with distcc and distcc-pump.
2008-05-09 20:36 Craig Silverstein <>
* src/lsdistcc.c:
A whitespace-only change. Got rid of spaces at the end of lines, and
also of tabs. Went through to normalize indents and so forth (some
functions were using 4-space indents, and others were using 8-space
indents, which were probably actually originally written as tabs on a
system with 4-space tabs).
diff -w shows no diffs; this is really whitespace-only.
Tested by making sure the file still compiles.
2008-05-09 20:33 Craig Silverstein <>
* src/lsdistcc.c:
Modify lsdistcc to reduce the number of concurrent fd's it tries to
open, when the system doesn't support a lot of concurrent fd's (which
we see by default in freebsd). It uses getrlimit and setrlimit to get
as many fd's as it can, and then stick to that number.
I modified the main search loop to work in stages, where each stage
uses at most maxfd's fd's. In the common -- almost universal -- case
there will only need to be one stage, and the code will behave the
same as before. In some limited environments, you might see multiple
stages. You can reproduce this artificially via code like this:
$ ulimit -SH -n 32 # in sh-like shells
$ ./lsdistcc
Tested by running manually on a configuration that gives 141 hosts.
Tested both with many fd's available, and arbitrarily limited to 32
(via the ulimit command above).
Reviewed by Nils Klarlund
2008-05-09 19:45 Fergus Henderson <>
* packaging/RedHat/init.d/distcc:
Fix a bug in my changes to add '' that broke the
There was a spurious assignment to CMDLIST. CMDLIST used for the
output of /etc/distcc/; it is supposed to be set to
/var/state/distcc/commands.allow. But due to the spurious assignment,
CMDLIST was being set to /etc/distcc/, causing the
script to overwrite itself.
Reviewers: Craig Silverstein
2008-05-09 19:24 Nils Klarlund <>
* packaging/RedHat/rpm.spec:
Fix so that include server record can be found.
2008-05-09 19:23 Fergus Henderson <>
* src/stringmap.c:
Fix what appears to be a bug in the handling of DISTCC_CMDLIST.
The documentation is not very clear, but distccd was documented
as matching against the last DISTCC_CMDLIST_NUMWORDS words of the
command, where I think by words they meant directory components.
For example, if the file refered to by DISTCC_CMDLIST contains the
"/usr/bin/i686-blah-blah/gcc", and DISTCC_CMDLIST_NUMWORDS=2, only
commands which end in "/i686-blah-blah/gcc" would be matched.
The bug is that a command "i686-blah-blah/gcc" should be considered
to match.
Likewise, if DISTCC_CMDLIST contains the line "/usr/bin/gcc", and
DISTCC_CMDLIST_NUMWORDS is 1 (or not set), then plain "gcc" should be
allowed to match.
Reviewers: Dan Kegel, Craig Silverstein
2008-05-09 18:15 Nils Klarlund <>
*,, popt/system.h, src/access.c, src/arg.c,
src/argutil.c, src/backoff.c, src/bulk.c, src/cleanup.c,
src/climasq.c, src/clinet.c, src/clirpc.c, src/compile.c,
src/compress.c, src/cpp.c, src/daemon.c, src/distcc.c, src/dopt.c,
src/dparent.c, src/dsignal.c, src/exec.c, src/filename.c,
src/fix_debug_info.c, src/gcc-id.c, src/h_argvtostr.c,
src/h_compile.c, src/h_dotd.c, src/h_exten.c, src/h_hosts.c,
src/h_issource.c, src/h_parsemask.c, src/h_sa2str.c, src/h_scanargs.c,
src/h_strip.c, src/help.c, src/history.c, src/hostfile.c, src/hosts.c,
src/implicit.c, src/io.c, src/loadfile.c, src/lock.c, src/mon-gnome.c,
src/mon-notify.c, src/mon-text.c, src/mon.c, src/ncpus.c,
src/netutil.c, src/prefork.c, src/pump.c, src/remote.c,
src/renderer.c, src/rpc.c, src/safeguard.c, src/sendfile.c,
src/serve.c, src/setuid.c, src/snprintf.c, src/srvnet.c, src/srvrpc.c,
src/ssh.c, src/state.c, src/stats.c, src/strip.c, src/tempfile.c,
src/timefile.c, src/trace.c, src/traceenv.c, src/util.c, src/where.c,
src/zeroconf-reg.c, src/zeroconf.c:
Make handling of config.h sound.
(1) Correct order of -Is in Makefile.
(2) remove unnessary PATH modification in (this is
suggestion -- hopefully this will do, this replaces a circumvention
mechanism I
had originally concocted.
(3) Fix place of the include of popt in CPPFLAGS.
(4) Convert quoted includes of config.h to angle bracket includes so
that the
build version, not the source version, of this file is picked up.
The order of -Is in the build system is wrong: it contradicts the
VPATH mechanism.
This means that builds in a build directory different from that
of the source (distribution) directory will find wrong files even
after the hapless developer has issued only a 'configure' command
in the source directory (but not actually 'made' any thing
there). For in that case, the src/config.h will be generated in
the source directory and this will be the file picked in the
build directory even if that directory has it's own src/config.h.
This can lead to wrong builds and it can be hard to diagnose the
Currently, this what CPPFLAGS end up being (as found in the
generated Makefile):
-I../distcc/popt -I../distcc/src \
-Isrc -Ilzo \
-I"$(srcdir)/src" -I"$(srcdir)/lzo" \
Here my source dir was ../distcc.
The presence of '-I../distcc/popt' in front of -Isrc is the exact
opposite of the semantics of VPATH mechanism, which looks for
files in the build directory, then in the source directory.
Also, note the remarks in:
(they do not quite correctly discuss the search path, btw).
TESTING: I verified that with a corrupted config.h file in the source
building now succeeds.
Also: make distcheck (it fails the same place as before: this is
corrected in
another change of mine --- I'll verify that with that change in place,
change makes 'make distcheck' succeed.)
REVIEWERS: Fergus Henderson, Craig Silverstein
2008-05-09 18:00 Nils Klarlund <>
*,, include_server/,
Rewrite and associated logic to fix multiple build problems.
The recent distcheck revealed that paths were set incorrectly for the
script. Also, as I dug deeper, it turned out that built files were
placed in
the src directory (thanks to os.path.join I found in the distutil's
source code,
that trips up the location if relative paths contains too many
'..'s.). [The
distccheck revealed this!] I didn't like either that setup was run in
source directory and not from the build directory (that's asking for
I did't like either that the search path, the list of includes, in was
handcoded and not simply that of CPPFLAGS. Finally, I was confused by
being another build directory under $(buildir). I renamed the former
_include_server to better explain its role.
So, I rewrote most of (correcting some of the documentation
along the way). Also, I partly removed the 'jumping through the hoops'
gymnastics from the Makefile.
TESTING: 'make distcheck'
REVIEWERS: csilvers, fergus
2008-05-08 23:18 Fergus Henderson <>
* doc/web/compared.html, doc/web/compilers.html, doc/web/faq.html,
Update web pages to correct statements that are no longer accurate for
distcc 3.0.
Reviewers: Craig Silverstein
2008-05-08 19:41 Fergus Henderson <>
* doc/example/README, doc/example/default, doc/example/hosts.allow,
doc/example/logrotate, doc/example/services, doc/example/xinetd,
packaging/RedHat/logrotate.d/distcc, packaging/RedHat/rpm.spec:
Revise the doc/example directory:
- Add README file to the doc/example directory.
- Add files in doc/example for every system configuration file
installed or modified by the RPM installation script (rpm.spec).
- Update some comments in rpm.spec.
- Some whitespace changes to doc/example/logrotate and
packaging/RedHat/logrotate.d/distcc to make those two files match.
- Copy warning from packaging/RedHat/xinetd.d/distcc to
Reviewers: Craig Silverstein
2008-05-08 16:33 Nils Klarlund <>
* include_server/
Make this file mostly conformant with gpylint. There should be no
TESTS: make distcheck
REVIEWER: Fergus Henderson
2008-05-07 23:50 Craig Silverstein <>
* NEWS, doc/web/compared.html, doc/web/compilers.html, doc/web/faq.html,
doc/web/index.html, doc/web/results.html, doc/web/scenarios.html,
Change NEWS links to point to the actual NEWS file, rather than the
svn history-log for the NEWS file.
Also changed the NEWS file itself to use ^L instead of a ^ + L, for
the top instance.
2008-05-07 23:03 Fergus Henderson <>
* man/pump.1:
Add a man page for the "pump" script.
The contents are similar to the output of "pump --help",
but with a bit more mark-up, and with additional sections
Reviewers: Craig Silverstein, Nils Klarlund.
2008-05-07 18:54 Craig Silverstein <>
* test/
The DaemonBadPort test case was not passing in --allow, which is a new
flag required by distcc 3 (all other tests had been modified to add
it). We never noticed until now because the distccd command is
*expected* to fail with a "bad arguments" error code -- though the bad
argument is supposed to be --port, not --allow. So this change gets
this test actually testing what it's supposed to, again.
Reviewed by Fergus Henderson
2008-05-07 18:21 Fergus Henderson <>
* include_server/
Insert "Usage: " at the start of the usage message for the include
2008-05-07 18:01 Craig Silverstein <>
* doc/web, doc/web/compared.html, doc/web/compilers.html,
doc/web/distcc-green.css, doc/web/distcc-lca-2004.html,
doc/web/distcc-lca-2004.pdf, doc/web/,
doc/web/distccmon-gnome-2003-09-23-01.png, doc/web/faq.html,
doc/web/index.html, doc/web/results.html, doc/web/scenarios.html,
Add the documentation files, as downloaded from I
then modified the files slightly, mostly by deleting content that
referred to files on the server and replacing them by files
(or, usually, links) to Google Code. For instance, the 'source' link
now points to the Google Code svn page for distcc, rather than a page
holding tarball information. Likewise, the News page now just points
to the svn trunk's NEWS file.
For the record, here's email from Martin Pool OK-ing this move/copy:
From: Martin Pool <>
Date: Sun, May 4, 2008 at 9:31 PM
Subject: Re: sources for distcc web site
To: Fergus Henderson <Fergus Henderson <>>
The sources are at
You are welcome to either work from these or scrape the web site. You
can make any reasonable use of the text in making a new web site.
Martin < <>>
Reviewed by Fergus Henderson
2008-05-05 15:31 Fergus Henderson <>
* man/distcc.1, man/distccd.1:
Document Zeroconf support: the "--zeroconf" option to distccd
and the "+zeroconf" entry in the distcc hosts list.
Reviewers: Craig Silverstein, Nils Klarlund.
2008-05-05 15:26 Fergus Henderson <>
* man/distcc.1:
Document the -j and --show-hosts options in the man page.
Also mention that pump mode requires release 3.0 or later,
and a few other minor corrections.
2008-05-02 23:07 Fergus Henderson <>
* test/
Change Lsdistcc_Case to work on hosts for which is not a
loopback address.
Tested by "(g)make TESTNAME=Lsdistcc_Case single-test" on both Linux
and FreeBSD.
Reviewers: Craig Silverstein, Nils Klarlund.
2008-05-02 21:11 Fergus Henderson <>
* test/
Fix EmptySource_Case test so that it passes with gcc 3.4.x.
Tested by "(g)make SINGLETEST=EmptySource_Case single-test"
on both FreeBSD (gcc 3.4.4) and Linux (gcc 4.0.3).
Reviewers: Craig Silverstein
2008-05-02 19:54 Nils Klarlund <>
*, lzo/, popt/
Explain stamp files and remove unneeded @src_dir@ (which was
TESTED: make distcheck
REVIEWED: Craig Silverstein, Fergus Henderson
2008-05-02 19:09 Craig Silverstein <>
For machines without python installed, before this change we'd check
for that case, but still give an error rc in that case, so the make
would fail. Now I make sure we don't fail just because we don't have
python installed.
Also, some machines (solaris 10) don't have a grep with -q, so just
use >/dev/null insteasd.
Third, we had left out a file to add to the tarball:
Fourth, 'make distcheck' fails a bit on the pump-installcheck. I've
addressed some of the problems, but others remain.
Finally -- and this is the bulk of the change, line-count wise, I
added quotes around all variables, so we do the right thing when
variables have spaces or other shell-meaningful characters in them, as
indeed they often do on windows machines.
Tested by running 'make check' on various architectures, including
solaris 10 x86 and cygwin.
Reviewed by Nils Klarlund and Fergus Henderson
2008-05-02 18:49 Fergus Henderson <>
* src/sendfile.c:
Treat ENOTSOCK errors from sendfile() the same way that we treat
ENONSYS and EINVAL errors: fall back to using read() and write().
This fixes the failure of SyntaxError_Case and MissingCompiler_Case
on FreeBSD.
Tested by "make check".
Reviewers: Craig Silverstein
2008-05-02 18:17 Nils Klarlund <>
* test/
Remove .d test case for which gcc stumbles on Mac OS.
2008-05-02 18:11 Craig Silverstein <>
* src/distcc.h:
This adds an #two that's technically needed to compile. Cygwin
happened to notice this was missing.
Tested by compiling (via 'make') on cygwin and ubuntu.
Reviewed by Fergus Henderson
2008-05-02 18:10 Craig Silverstein <>
* test/
Four improvements to the test framework:
1) While pump-mode requires python 2.4, the test framework is designed
to work with python 2.2 and later. A few non-2.2 features have snuck
in though. I replaced them with 2.2-compatible code.
2) The test system used the --ex flag to gdb, which is only supported
in more recent gdb's. I've changed the code to use --command instead,
which is supported in old gdb's as well. I also added a workaround
for a buggy error-message that gdb sometimes emits. See
3) I fixed a regexp for the gcc-options case, to handle correctly
systems that don't name gcc "gcc" (for instance, they might name it
4) Use shell quoting, when appropriate, to deal with paths that have
spaces (eg on windows) or other weird characters in them.
Tested by running 'make maintainer-check' on a variety of
architectures, including os x and cygwin. The tests successfully run
on all of them (though not all tests successfully pass yet...)
Reviewed by Fergus Henderson and Nils Klarlund
2008-05-02 00:10 Craig Silverstein <>
Small wording change, suggested by Nils Klarlund <>
2008-05-01 23:52 Craig Silverstein <>
This test was broken before: I needed to escape [ and ] from m4.
Tested by running configure on a machine with python 2.2 installed.
Reviewed by Fergus Henderson
2008-05-01 23:51 Craig Silverstein <>
Previously, 'make check' was a noop because we do not require python
to be installed for distcc, but the tests require python. Therefore,
to run the tests you had to run 'make maintainer-check' instead (since
maintainers of distcc *do* have to have python installed).
Now, I have 'make check' check if python is installed. If so, it runs
the tests. Otherwise, it prints a message and exits.
Tested by running 'make check' and 'make installcheck' manually, on
systems with the various pythons installed as well as a few without.
Code reviewed by Fergus Henderson
2008-05-01 23:02 Craig Silverstein <>
Include-server requires python 2.4 or higher, but the test framework
only requires python 2.2. Check for both, so for folks with python
2.2 or python 2.3, they can at least run the tests, even if they can't
install the include-server.
2008-05-01 00:58 Nils Klarlund <>
* include_server/
Clean up Python code.
-- Do TODOs.
-- Heed most pylint warnings.
2008-04-30 22:46 Nils Klarlund <>
*,, include_server/,
Make install-checks work and a lot of clean-up in regards to the
- Remove temporary installation for include server tests. The current
doesn't make too much sense: when testing a real installation, the
server is tested in the separate temporary installation.
Instead, we propose to make the installation tests run only the
tests in the 'test' directory, unpumped and pumped. The include server
is now
tested as part of maintainer-check only, but run out of the source
except for the C extension module.
- The maintainer-check and the maintainer-install-check now run the
test (test/ also in pump mode.
- A new script,, is added; it finds the location
of the
shared library. It is used for both running the include server tests
and the
regression tests out of the built (not installed) version of the
software. It
was cut of the 'pump' script, which now has been simplified.
- Reorganize the order of affected targets. Introduce
'###############...' as
separator between sections of Makefile in a more consistent way. Make
section consistently declare all the phony targets at the beginning of
- Introduce DISTCC_INSTALLATION variable to account for the precise
of the tested binaries in an installation.
- Add verify-binaries-installcheck target to ensure that binaries are
in this
- Also, this target reports the location to users:
Make sure all paths below are where you expect them to be:
- Absolutize a couple of relative directory references before they are
passed to
scripts, because otherwise things won't work with the disciplined
approach to
- Change a randomly generated filename so that it resides in /tmp (in and not inside the build directory tree. Fix up
for filenaming to be more secure. This makes 'make distcheck' pass w/o
permission problems. Also, delete the temporary file and directory
test passes.
- Make include-server-maintainer-check remove the .out file when test
This makes 'make distcheck' pass the final test of the clean-out.
- Remove the 'Filtering' of the c_extensions_test output. This
filtering was
necessary in a previous version that printed all output to stdout to
user confusion. But now the test results go to intermediate files.
change was forced by the removal of the .out files (above).
REVIEWED: fergus, csilvers.
TESTS: make distcheck
make maintainer-installcheck
make include-server-maintainer-check
make maintainer-check
2008-04-28 21:52 Craig Silverstein <>
* src/sendfile.c:
OS X added sendfile support in 10.5, so add this case to sendfile.c.
Looking at the man pages, it looks like os x sendfile is pretty much
the same as BSD's, so I copied much of the code from the existing BSD
Tested by ensuring the code compiles and links on os x 10.5. No
attempt to see if it runs correctly, though.
Reviewed by Fergus Henderson
2008-04-28 19:23 Craig Silverstein <>
*,, include_server/, src/compile.c,
src/distcc.h, src/dotd.c, src/emaillog.c, src/exec.c,
src/fix_debug_info.c, src/io.c, src/lsdistcc.c, src/netutil.c,
src/snprintf.c, src/srvrpc.c, src/tempfile.c, src/trace.c, src/util.c:
These changes are enough to get code to compile, and at least some of
the unittests to pass, on FreeBSD 6.0, Solaris 10 x86, and OS X
Leopard. You have to use gmake instead of standard bsd make, though,
because neither bsd nor solari make understand 'include */*.d' and
'CFLAGS += $(POPT_FLAGS).' These may be fixable later.
Most changes fall into four categories:
1) #include differences
2) New errors due to some #ifdef paths being taken differently
3) Undefined functions (see, eg, the new HAVE_STRSEP)
4) Type differences (eg tv_usec is an int on os x, not a long int)