is autotools configure script multi-threaded safe?
In a typical configure
script generated by autotools, you have this kind of fragment:
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
This is somewhat complicated, but what matters for my question, is roughly:
g++ -E conftest.cpp > conftest.i 2>&1
Now, this is not multi-threaded safe is it?
I have myself seen a failure, where a Make process with -j
option spawning multiple threads, one of the threads put out on standard-error some junk output, and another thread, running the configure
script above, would put the errors from the first thread, into conftest.i
. I guess this is because they share stream 2 (standard error), inherited from the parent process.
Who's at fault:
Do autotools that generate the
configure
script, have a bug because they generate code that is not multi-threaded safe? But that is strange that such a simple bug would be present in such a mature software.Does the build script that uses the makefile that uses
configure
have a bug, in that it usesmake
with-jn
option? But that is also strange, because many makefiles useconfigure
scripts and it would be unreasonable to require all of them to be slow and not use-jn
.
The failure above is real, I have seen it. I think I understand the mechanism of the failure. What I am confused about, is who has the bug?
autotools
add a comment |
In a typical configure
script generated by autotools, you have this kind of fragment:
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
This is somewhat complicated, but what matters for my question, is roughly:
g++ -E conftest.cpp > conftest.i 2>&1
Now, this is not multi-threaded safe is it?
I have myself seen a failure, where a Make process with -j
option spawning multiple threads, one of the threads put out on standard-error some junk output, and another thread, running the configure
script above, would put the errors from the first thread, into conftest.i
. I guess this is because they share stream 2 (standard error), inherited from the parent process.
Who's at fault:
Do autotools that generate the
configure
script, have a bug because they generate code that is not multi-threaded safe? But that is strange that such a simple bug would be present in such a mature software.Does the build script that uses the makefile that uses
configure
have a bug, in that it usesmake
with-jn
option? But that is also strange, because many makefiles useconfigure
scripts and it would be unreasonable to require all of them to be slow and not use-jn
.
The failure above is real, I have seen it. I think I understand the mechanism of the failure. What I am confused about, is who has the bug?
autotools
add a comment |
In a typical configure
script generated by autotools, you have this kind of fragment:
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
This is somewhat complicated, but what matters for my question, is roughly:
g++ -E conftest.cpp > conftest.i 2>&1
Now, this is not multi-threaded safe is it?
I have myself seen a failure, where a Make process with -j
option spawning multiple threads, one of the threads put out on standard-error some junk output, and another thread, running the configure
script above, would put the errors from the first thread, into conftest.i
. I guess this is because they share stream 2 (standard error), inherited from the parent process.
Who's at fault:
Do autotools that generate the
configure
script, have a bug because they generate code that is not multi-threaded safe? But that is strange that such a simple bug would be present in such a mature software.Does the build script that uses the makefile that uses
configure
have a bug, in that it usesmake
with-jn
option? But that is also strange, because many makefiles useconfigure
scripts and it would be unreasonable to require all of them to be slow and not use-jn
.
The failure above is real, I have seen it. I think I understand the mechanism of the failure. What I am confused about, is who has the bug?
autotools
In a typical configure
script generated by autotools, you have this kind of fragment:
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
This is somewhat complicated, but what matters for my question, is roughly:
g++ -E conftest.cpp > conftest.i 2>&1
Now, this is not multi-threaded safe is it?
I have myself seen a failure, where a Make process with -j
option spawning multiple threads, one of the threads put out on standard-error some junk output, and another thread, running the configure
script above, would put the errors from the first thread, into conftest.i
. I guess this is because they share stream 2 (standard error), inherited from the parent process.
Who's at fault:
Do autotools that generate the
configure
script, have a bug because they generate code that is not multi-threaded safe? But that is strange that such a simple bug would be present in such a mature software.Does the build script that uses the makefile that uses
configure
have a bug, in that it usesmake
with-jn
option? But that is also strange, because many makefiles useconfigure
scripts and it would be unreasonable to require all of them to be slow and not use-jn
.
The failure above is real, I have seen it. I think I understand the mechanism of the failure. What I am confused about, is who has the bug?
autotools
autotools
edited Feb 1 at 21:34
user322908
asked Feb 1 at 21:28
user322908user322908
419517
419517
add a comment |
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "3"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsuperuser.com%2fquestions%2f1401165%2fis-autotools-configure-script-multi-threaded-safe%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Super User!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsuperuser.com%2fquestions%2f1401165%2fis-autotools-configure-script-multi-threaded-safe%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown