In article <[EMAIL PROTECTED]>, Han-Wen Nienhuys <[EMAIL PROTECTED]> wrote: >>There is not anything like that at the moment, but you could add it >>fairly easily, probably without modifying the server code. It'd be a >>worthy addition. > >Come to think of it, having another feature would actually be even >better: it would be nice if I could setup a mapping, so that if distcc >gets invoked on Linux > > distcc gcc > >it will call > > i686-linux-gcc > >on other hosts, while it will do > > powerpc-darwin-gcc > >if distcc was started on a Mac.
See this patch, also on http://www.xs4all.nl/~hanwen/public/software/distcc-substitute.patch For example DISTCC_SUBSTITUTE_GXX='i686-linux-g++' distcc will remotely invoke i686-linux-g++ when g++ is run locally. This is useful as cross-building some packages require both a native gcc and a cross-compiling gcc to be present. Setting DISTCC_SUBSTITUTE_GCC= allows the native compiler invocations to be distcc'd to different machine types as well. Arguably, there it might even be sensible to have DISTCC_SUBSTITUTE_<compilername>_<hostname> but I have left it out, as I don't need it. My groff knowledge is non-existent. Could someone review my diffs to the manpage? Thanks! diff -ur distcc-2.18.3/man/distcc.1 distcc-2.18.3.subs/man/distcc.1 --- distcc-2.18.3/man/distcc.1 2004-10-24 07:05:23.000000000 +0200 +++ distcc-2.18.3.subs/man/distcc.1 2006-02-20 13:50:35.000000000 +0100 @@ -420,6 +420,19 @@ error stream or in the log file. This can be helpful in debugging problems. Bug reports should include verbose output. .TP +.B "DISTCC_SUBSTITUTE_compilername" +Before shipping a job to a remote client, distcc will substitute +the value of this variable for +.B compiler; +compilername should uppercase, with non-alphanumeric characters +replaced by Xs. For example, a call of g++ can be changed to by +i686-linux-g++-3.4 remotely by setting +.PP +.nf + DISTCC_SUBSTITUTE_GXX="i686-linux-g++-3.4" +.fi +.PP +.TP .B "DISTCC_LOG" Log file to receive messages from distcc itself, rather than stderr. @@ -469,10 +482,11 @@ mixed-architecture machines, although some changes to the compilation commands may be required. .PP -The compilation command passed to distcc must be one that -will execute properly on every volunteer machine to produce -an object file of the appropriate type. If the machines -have different processors, then simply using +The compilation command passed to distcc or set in +DISTCC_SUBSTITUTE_compilername must be one that will execute properly +on every volunteer machine to produce an object file of the +appropriate type. If the machines have different processors, then +simply using .B distcc cc will probably not work, because that will normally invoke the volunteer's native compiler. diff -ur distcc-2.18.3/src/distcc.c distcc-2.18.3.subs/src/distcc.c --- distcc-2.18.3/src/distcc.c 2004-10-02 02:47:07.000000000 +0200 +++ distcc-2.18.3.subs/src/distcc.c 2006-02-20 13:11:49.000000000 +0100 @@ -136,7 +136,6 @@ } - /** * distcc client entry point. * diff -ur distcc-2.18.3/src/remote.c distcc-2.18.3.subs/src/remote.c --- distcc-2.18.3/src/remote.c 2004-10-24 07:05:49.000000000 +0200 +++ distcc-2.18.3.subs/src/remote.c 2006-02-20 13:44:02.000000000 +0100 @@ -33,6 +33,7 @@ #include <string.h> #include <fcntl.h> #include <errno.h> +#include <ctype.h> #include <sys/types.h> #include <sys/time.h> @@ -115,6 +116,44 @@ return 0; } +static int isidchar (int c) +{ + return isalnum (c) || c == '_' || c == '-'; +} + +/* + * On a remote host of different architecture, we might want to + * execute TARGET-gcc iso. gcc. + * this is controlled with DISTCC_SUBSTITUTE_<upcase compiler name> + */ +static char * +dcc_substitute_compiler_name (char *name) +{ + const char *generic = "DISTCC_SUBSTITUTE_" ; + size_t n = strlen (generic); + char *key = malloc (strlen (name) + n + 1); + char *p = key; + char *q = name; + + if (!key) { + rs_log_crit("allocation failed!"); + return NULL; + } + + strncpy (key, generic, n); + for (p = key + n, q = name; *q; q++, p++) { + *p = toupper (*q); + if (!isidchar(*p)) + *p = 'X'; + } + *p = 0; + + if (getenv (key)) + return strdup (getenv (key)); + + return name; +} + /* Send a request across to the already-open server. * @@ -187,6 +226,8 @@ if (gettimeofday(&before, NULL)) rs_log_warning("gettimeofday failed"); + argv[0] = dcc_substitute_compiler_name (argv[0]); + dcc_note_execution(host, argv); dcc_note_state(DCC_PHASE_CONNECT, input_fname, host->hostname); __ distcc mailing list http://distcc.samba.org/ To unsubscribe or change options: https://lists.samba.org/mailman/listinfo/distcc
