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
configurescript, ¿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
configuretiene un error, en el que usamakecon-jn¿opción? Pero eso también es extraño, porque muchos makefiles usanconfigurescripts 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?
