[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

read jobs pipe: Is a directory.

From: Bartłomiej Palmowski
Subject: read jobs pipe: Is a directory.
Date: Wed, 25 Dec 2013 18:32:26 +0100


make versions: 3.81, 3.82, 4.0, cvs (25.12.2013)
os: centos 6.4, crux 3.0 (both amd64)

lets consider following structure of makefiles:

# ls -R
foo  Makefile


# cat Makefile
    make -C foo

# cat foo/GNUmakefile
breackage: not worky

    @echo $@

running make with -j more than one will produce following output:
# make -j2
make -C foo
make[1]: Entering directory `/tmp/t/foo'
make[1]: *** read jobs pipe: Is a directory.  Stop.
make[1]: *** Waiting for unfinished jobs....
make[1]: Leaving directory `/tmp/t/foo'
make: *** [all] Error 2
# echo $?

If the GNUmakefile were named Makefile or if I've used $(MAKE) instead of make it would have worked properly:
# mv foo/GNUmakefile foo/Makefile
# make -j2
make -C foo
make[1]: Entering directory `/tmp/t/foo'
make[1]: warning: jobserver unavailable: using -j1.  Add `+' to parent make rule.
make[1]: Leaving directory `/tmp/t/foo'

The error wont happen also if "-f" is used (hence the directory foo).

My investigation have shown that read(2) (inside new_job() function which is defined in job.c) tries to read from file descriptor number 5 which in this special case happens to be a directory instead of a pipe (directory which fd nr. 5 points to is actually /tmp/t/foo).

Makefiles presented above are attached to this e-mail.

Attachment: break-case.tgz
Description: GNU Zip compressed data

reply via email to

[Prev in Thread] Current Thread [Next in Thread]