autotools настраивает сценарий многопоточный безопасно?
В типичном configure
скрипт, сгенерированный autotools, у вас есть такой фрагмент:
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
Это несколько сложно, но что важно для моего вопроса, примерно:
g++ -E conftest.cpp > conftest.i 2>&1
Теперь, это не многопоточный сейф, не так ли?
Я сам видел сбой, когда процесс создания с -j
опция порождает несколько потоков, один из которых выводит на стандартный вывод ошибки, а другой - запускает configure
скрипт выше, поместил бы ошибки из первого потока в conftest.i
, Я предполагаю, что это потому, что они разделяют поток 2 (стандартная ошибка), унаследованный от родительского процесса.
Кто виноват
Делать автоинструменты, которые генерируют
configure
скрипт, есть ошибка, потому что они генерируют код, который не является многопоточным безопасным? Но странно, что такая простая ошибка будет присутствовать в таком зрелом программном обеспечении.Использует ли скрипт сборки, который использует make-файл, который использует
configure
есть ошибка, в которой он используетmake
с-jn
вариант? Но это также странно, потому что многие make-файлы используютconfigure
сценарии, и было бы неразумно требовать, чтобы все они были медленными и не использовать-jn
,
Вышеуказанная ошибка реальна, я видел это. Я думаю, что я понимаю механизм отказа. Что меня смущает, так это у кого ошибка?