]> git.tdb.fi Git - builder.git/blobdiff - source/externalaction.cpp
Add comments
[builder.git] / source / externalaction.cpp
index d4a48d730513d401738f8e6ba65d4e15739dc439..0ae68ff05f30bd297b314de7a77ac3e471192cb0 100644 (file)
@@ -1,4 +1,5 @@
 #include <sys/wait.h>
+#include <iostream>
 #include <msp/iter.h>
 #include "builder.h"
 #include "externalaction.h"
@@ -8,27 +9,38 @@ using namespace Msp;
 
 int ExternalAction::check()
 {
+       if(builder.get_dry_run())
+       {
+               signal_done.emit();
+               return 0;
+       }
+       
        if(!pid)
-               return 255;
+               return exit_code;
 
        int status;
        if(waitpid(pid, &status, WNOHANG)==pid)
        {
                signal_done.emit();
                if(WIFEXITED(status))
-                       return WEXITSTATUS(status);
+                       exit_code=WEXITSTATUS(status);
                else
-                       return 254;
+                       exit_code=254;
+               pid=0;
+               return exit_code;
        }
        else
                return -1;
 }
 
+/**
+Starts the external program.  Fill in argv before calling this.
+*/
 void ExternalAction::launch()
 {
-       if(builder.get_verbose()>=1)
+       if(builder.get_verbose()>=2)
        {
-               for(list<string>::const_iterator i=argv.begin(); i!=argv.end(); ++i)
+               for(StringList::const_iterator i=argv.begin(); i!=argv.end(); ++i)
                {
                        if(i!=argv.begin())
                                cout<<' ';
@@ -37,16 +49,21 @@ void ExternalAction::launch()
                cout<<'\n';
        }
        
-       pid=fork();
-       if(pid==0)
+       if(builder.get_dry_run())
+               pid=-1;
+       else
        {
-               char *argv_[argv.size()+1];
-               for(CountingIterator<string, list<string>::iterator> i=argv.begin(); i!=argv.end(); ++i)
-                       argv_[i.count()]=strdup(i->c_str());
-               argv_[argv.size()]=0;
-               execvp(argv_[0], argv_);
-               exit(1);
+               pid=fork();
+               if(pid==0)
+               {
+                       char *argv_[argv.size()+1];
+                       for(CountingIterator<string, StringList::iterator> i=argv.begin(); i!=argv.end(); ++i)
+                               argv_[i.count()]=strdup(i->c_str());
+                       argv_[argv.size()]=0;
+                       execvp(argv_[0], argv_);
+                       exit(1);
+               }
+               else if(pid<0)
+                       pid=0;
        }
-       else if(pid<0)
-               pid=0;
 }