is autotools configure script multi-threaded safe?












0















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:




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


  2. Does the build script that uses the makefile that uses configure have a bug, in that it uses make with -jn option? But that is also strange, because many makefiles use configure 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?










share|improve this question





























    0















    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:




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


    2. Does the build script that uses the makefile that uses configure have a bug, in that it uses make with -jn option? But that is also strange, because many makefiles use configure 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?










    share|improve this question



























      0












      0








      0








      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:




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


      2. Does the build script that uses the makefile that uses configure have a bug, in that it uses make with -jn option? But that is also strange, because many makefiles use configure 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?










      share|improve this question
















      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:




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


      2. Does the build script that uses the makefile that uses configure have a bug, in that it uses make with -jn option? But that is also strange, because many makefiles use configure 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






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Feb 1 at 21:34







      user322908

















      asked Feb 1 at 21:28









      user322908user322908

      419517




      419517






















          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
          });


          }
          });














          draft saved

          draft discarded


















          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
















          draft saved

          draft discarded




















































          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.




          draft saved


          draft discarded














          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





















































          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







          Popular posts from this blog

          flock() on closed filehandle LOCK_FILE at /usr/bin/apt-mirror

          Mangá

          Eduardo VII do Reino Unido