Make bootstrap.sh search for libs in ..
Others: sigc++-2.0
Since the MSP libraries are also normally built with Builder, the script will
-need to have their sources available. By default, it will look at ../libs.
-You can change this by setting the LIBPATH evironment variable for the script.
-If everything goes well, you should have a builder-stage1 binary that you can
-use to build a normal version of Builder.
+need to have their sources available. By default, it will look at the parent
+directory of builder. You can change this by setting the LIBPATH evironment
+variable for the script. If everything goes well, you should have a
+builder-stage1 binary that you can use to build a normal version of Builder.
CFLAGS="-Iinclude `pkg-config --cflags sigc++-2.0`"
LIBS="`pkg-config --libs sigc++-2.0` -lpthread"
if [ -z "$LIBPATH" ]; then
- LIBPATH=`pwd`/../libs
+ LIBPATH=`pwd`/..
fi
mkdir -p include/msp
+#include <errno.h>
#include <fstream>
#include <msp/path/utils.h>
+#include "builder.h"
#include "copy.h"
#include "package.h"
worker(*this)
{
announce(pkg.get_name(), "INST", dest[-1]);
+ if(builder.get_verbose()>=2)
+ cout<<s<<" -> "<<d<<'\n';
}
int Copy::check()
{
signal_done.emit();
worker.join();
- return 0;
+ return worker.get_error()?1:0;
}
return -1;
}
void Copy::Worker::main()
{
Path::mkpath(copy.src.subpath(0, copy.src.size()-1), 0755);
- unlink(copy.dest.str().c_str());
+ if(unlink(copy.dest.str().c_str())<0 && errno!=ENOENT)
+ {
+ int err=errno;
+ cerr<<"Can't unlink "<<copy.dest<<": "<<strerror(err)<<'\n';
+ done=error=true;
+ return;
+ }
+
ifstream in(copy.src.str().c_str());
+ if(!in)
+ {
+ cerr<<"Can't open "<<copy.src<<" for reading\n";
+ done=error=true;
+ return;
+ }
+
ofstream out(copy.dest.str().c_str());
+ if(!out)
+ {
+ cerr<<"Can't open "<<copy.dest<<" for writing\n";
+ done=error=true;
+ return;
+ }
char buf[16384];
while(!in.eof())
public:
Worker(Copy &i): copy(i), done(false) { launch(); }
bool get_done() const { return done; }
+ bool get_error() const { return error; }
private:
Copy ©
bool done;
+ bool error;
void main();
};