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:

  1. 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.

  2. ¿El script de compilación que usa el makefile que usa configure tiene un error, en el que usa make con -jn ¿opción? Pero eso también es extraño, porque muchos makefiles usan configure 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?

user322908
fuente