manpagez: man pages & more
info make
Home | html | info | man

File: make.info,  Node: POSIX Jobserver,  Next: Windows Jobserver,  Prev: Job_Slots.php">Job Slots,  Up: Job_Slots.php">Job Slots

13.1.1 POSIX Jobserver Interaction
----------------------------------

On POSIX systems the jobserver is implemented in one of two ways: on
systems that support it, GNU 'make' will create a named pipe and use
that for the jobserver.  In this case the auth option will have the form
'--jobserver-auth=fifo:PATH' where 'PATH' is the pathname of the named
pipe.  To access the jobserver you should open the named pipe path and
read/write to it as described below.

   If the system doesn't support named pipes, or if the user provided
the '--jobserver-style' option and specified 'pipe', then the jobserver
will be implemented as a simple UNIX pipe.  In this case the auth option
will have the form '--jobserver-auth=R,W' where 'R' and 'W' are
non-negative integers representing file descriptors: 'R' is the read
file descriptor and 'W' is the write file descriptor.  If either or both
of these file descriptors are negative, it means the jobserver is
disabled for this process.

   When using a simple pipe, only command lines that 'make' understands
to be recursive invocations of 'make' (*note How the 'MAKE' Variable
Works: MAKE Variable.) will have access to the jobserver.  When writing
makefiles you must be sure to mark the command as recursive (most
commonly by prefixing the command line with the '+' indicator (*note
Recursive Use of 'make': Recursion.).  Note that the read side of the
jobserver pipe is set to "blocking" mode.  This should not be changed.

   In both implementations of the jobserver, the pipe will be pre-loaded
with one single-character token for each available job.  To obtain an
extra slot you must read a single character from the jobserver; to
release a slot you must write a single character back into the
jobserver.

   It's important that when you release the job slot, you write back the
same character you read.  Don't assume that all tokens are the same
character; different characters may have different meanings to GNU
'make'.  The order is not important, since 'make' has no idea in what
order jobs will complete anyway.

   There are various error conditions you must consider to ensure your
implementation is robust:

   * If you have a command-line argument controlling the parallel
     operation of your tool, consider whether your tool should detect
     situations where both the jobserver and the command-line argument
     are specified, and how it should react.

   * If your tool does not recognize the format of the
     '--jobserver-auth' string, it should assume the jobserver is using
     a different style and it cannot connect.

   * If your tool determines that the '--jobserver-auth' option
     references a simple pipe but that the file descriptors specified
     are closed, this means that the calling 'make' process did not
     think that your tool was a recursive 'make' invocation (e.g., the
     command line was not prefixed with a '+' character).  You should
     notify your users of this situation.

   * Your tool should be sure to write back the tokens it read, even
     under error conditions.  This includes not only errors in your tool
     but also outside influences such as interrupts ('SIGINT'), etc.
     You may want to install signal handlers to manage this write-back.

   * Your tool may also examine the first word of the 'MAKEFLAGS'
     variable and look for the character 'n'.  If this character is
     present then 'make' was invoked with the '-n' option and your tool
     may want to stop without performing any operations.

© manpagez.com 2000-2024
Individual documents may contain additional copyright information.