pump(1)

πŸ’– pump(1) β€” the distcc-pump glow-up πŸ’–

okay bestie so this is a General Commands Manual page for pump, and it's literally the cheat code for making your builds go zoom. let's get into it 🫢


✨ NAME ✨

distcc-pump β€” accelerate remote compilation with distcc πŸ’…


🌸 SYNOPSIS 🌸

distcc-pump BUILD-COMMAND [ARGS]  ...

eval ` distcc-pump --startup `; BUILD-COMMAND [ARGS]  ...  ; distcc-pump --shutdown

πŸ¦‹ DESCRIPTION πŸ¦‹

distcc-pump is part of distcc, no cap. it's the whole reason distcc's pump mode exists. and pump mode? pump mode accelerates remote compilation with distcc by also distributing preprocessing to the servers. like, preprocessing. to the servers. she's doing the most and we love her for it πŸ‘‘

if you want the full tea on pump mode β€” and bestie, most notably some important restrictions β€” go read the distcc(1) man page, specifically the HOW PUMP-MODE WORKS section and the RESTRICTIONS ON PUMP MODE section. do not skip those, fr fr πŸ™ˆ

the simplest usage is this form:

distcc-pump COMMAND [ARG]  ...

here's what she does when you run it like that, in order:

  1. starts an include server for distcc's "pump" mode
  2. optionally runs lsdistcc to compute the distcc host list
  3. sets some auxiliary environment variables
  4. changes PATH to use the distcc client in the same directory as the distcc-pump script
  5. executes COMMAND with the specified ARG(s)
  6. then shuts down the include server

and COMMAND is typically a parallel build command β€” think make -j80 β€” something that's gonna do many concurrent invocations of distcc. iconic behaviour only ✨

an alternative way of invoking distcc-pump is to explicitly invoke distcc-pump --startup to start the include server and distcc-pump --shutdown to stop it. the distcc-pump --startup command will start up the include server, and will print out some environment variable settings. those environment variables are used to communicate between the pump-mode distcc client and the include server, and also to communicate between distcc-pump --startup and distcc-pump --shutdown. and listen: the caller of distcc-pump --startup is responsible for setting those environment variables before invoking distcc or distcc-pump --shutdown. that's on you, bestie 🫡

for example:

eval `distcc-pump --startup`
make -j80
distcc-pump --shutdown
⚠️ not me warning you about this one: distcc's pump-mode assumes that sources files will not be modified during the lifetime of the include server, so modifying source files during a build may cause inconsistent results. so like... don't do that. πŸ’€

🌈 INVOKING LSDISTCC 🌈

when invoked in either the simple distcc-pump COMMAND [ARG] ... form, or as distcc-pump --startup, the distcc-pump script will invoke lsdistcc whenever DISTCC_POTENTIAL_HOSTS is set and DISTCC_HOSTS isn't. she'll pass the value of DISTCC_POTENTIAL_HOSTS to lsdistcc and use the output of lsdistcc to set DISTCC_HOSTS. automatic. effortless. slay πŸ’…


πŸ’œ OPTIONS πŸ’œ

  • --help β€” displays summary instructions. the little "hey here's what I do" moment πŸ₯°
  • --startup β€” starts an include server, and outputs the environment variable settings needed for distcc(1) or distcc-pump --shutdown to access it.
  • --shutdown β€” shuts down an include server started up by distcc-pump --startup. bye bestie πŸ‘‹

πŸŽ€ ENVIRONMENT VARIABLES πŸŽ€

all of the following environment variables are optional, so no pressure, she's chill:

  • DISTCC_LOCATION β€” the location of the distcc bin directory, which is normally inferred from the link-resolved dirname of argv[0]. if this location is in fact the bin directory inside an installation (as will be the case when the pump script in the installation executes), then Python executables and distcc itself will be retrieved from the parent directory of the location.
  • DISTCC_MAX_DISCREPANCY β€” see the distcc(1) man page. (iykyk 🌸)
  • DISTCC_POTENTIAL_HOSTS β€” the distcc servers that will be queried by lsdistcc in order to produce a value for DISTCC_HOSTS. this value may be unset or null. in such cases, lsdistcc will not be invoked, and distcc will use DISTCC_HOSTS or the distcc hosts configuration file, as described in the "Host Specifications" section of distcc(1).
  • DISTCC_HOSTS β€” this variable is passed through to distcc but only if DISTCC_POTENTIAL_HOSTS is not set.
  • LSDISTCC_ARGS β€” extra arguments to pass to lsdistcc. see lsdistcc --help for more details.
  • INCLUDE_SERVER_ARGS β€” extra arguments to pass to the include server.
  • PYTHONOPTIMIZE β€” if set to "", then Python optimization is disabled.

πŸ“ EXAMPLE πŸ“

distcc-pump make -j20

look at her go. main character energy fr ✨


πŸ’€ BUGS πŸ’€

if you think you have found a distcc bug, please see the file reporting-bugs.txt in the documentation directory for information on how to report it. we wanna hear it, bestie 🫢


πŸ‘‘ AUTHORS πŸ‘‘

the distcc-pump script and distcc's pump mode were written by Nils Klarlund, Manos Renieris, Fergus Henderson, and Craig Silverstein. legends, honestly. πŸ†

please report bugs to <distcc@lists.samba.org>.


⭐ LICENCE ⭐

distcc-pump is part of distcc. you are free to use distcc. distcc (including this manual) may be copied, modified or distributed only under the terms of the GNU General Public Licence version 2 or later. distcc comes with absolutely no warranty. a copy of the GPL is included in the file COPYING.

🚨 "only under the terms of" is doing a LOT of heavy lifting there. read your licence, bestie, it's giving legally binding πŸ’…

🌸 SEE ALSO 🌸

distcc(1), distccd(1), include_server(1), gcc(1), and make(1)


and that's the whole page!! this one's from the General Commands Manual, version vibes of 9 June 2008 β€” yeah she's been iconic since 2008 and she's still serving πŸ’– bye bestie, go build something πŸ¦‹