En un tipico configure
El script generado por autotools, tiene este tipo de fragmento:
eval "$ac_cpp conftest.$ac_ext") 2>&5 |
tr -d '\r' |
$SED -n -e "/^boost_lib_version = /{s///;s/\"//g;p;q;}" >conftest.i 2>&1
Esto es algo complicado, pero lo que importa para mi pregunta, es más o menos:
g++ -E conftest.cpp > conftest.i 2>&1
Ahora, esto no es seguro multi-hilo, ¿verdad?
Yo mismo he visto un fallo, donde un proceso Make con -j
opción que genera múltiples subprocesos, uno de los subprocesos emitidos en el error estándar de algunos mensajes no deseados, y otro subproceso, ejecutando el configure
script anterior, pondría los errores del primer hilo, en conftest.i
. Supongo que esto se debe a que comparten el flujo 2 (error estándar), heredado del proceso principal.
Quien tiene la culpa:
Hacer autotools que generen los
configure
script, ¿tiene un error porque genera código que no es seguro para múltiples subprocesos? Pero es extraño que un error tan simple esté presente en un software tan maduro.¿El script de compilación que usa el makefile que usa
configure
tiene un error, en el que usamake
con-jn
¿opción? Pero eso también es extraño, porque muchos makefiles usanconfigure
scripts y no sería razonable exigir que todos sean lentos y no se utilicen-jn
.
El fallo anterior es real, lo he visto. Creo que entiendo el mecanismo del fracaso. Estoy confundido acerca de quién tiene el error?