Subject: Build failure when pthread.h isn’t available
From: [email-masked] (Ludovic Courtès)
To: [email-masked]
Date: Tue, 13 Jul 2010 18:16:30 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

Hello,

Coreutils fails to build when <pthread.h> isn’t available:

--8<---------------cut here---------------start------------->8---
checking for pthread.h... no

[...]

make[2]: Entering directory `/tmp/nix-build-4w3pinfgcmz2majy85flyx53gp10wgvb-coreutils-8.5.89-9face-dirty-i586-pc-gnu.drv-0/coreutils-8.5.89-9face-dirty/lib'

[...]

ln -f pthread.in.h pthread.h || cp pthread.in.h pthread.h

[...]

i586-pc-gnu-gcc -std=gnu99  -I. -I../lib  -I../lib    -g -O2 -c sort.c
sort.c:236:3: error: expected specifier-qualifier-list before 'pthread_spinlock_t'
sort.c:243:3: error: expected specifier-qualifier-list before 'pthread_mutex_t'
sort.c: In function 'lock_node':
sort.c:3144:3: warning: implicit declaration of function 'pthread_spin_lock'

[...]
--8<---------------cut here---------------end--------------->8---

(From <http://hydra.nixos.org/build/484742>.)

This is because the Gnulib replacement doesn’t cover all the pthread API
that’s actually used.

A simple fix would be to enclose all the pthread-related code in
HAVE_PTHREAD_H and not use the Gnulib replacement.

BTW, why didn’t you choose OpenMP?  It may have made things easier.

Thanks,
Ludo’.