X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcopy.cpp;h=70f05398fbac5ae5dc885d7c91c8c33eb95da4ae;hb=7aeaa4ba965f596edad438c02e345a8843f7469a;hp=23cd6f1af358cebb11e9e526a7ede7ef1af4ef0b;hpb=0d80cabf649b931b26e7055385156c75a7385d35;p=builder.git diff --git a/source/copy.cpp b/source/copy.cpp index 23cd6f1..70f0539 100644 --- a/source/copy.cpp +++ b/source/copy.cpp @@ -1,5 +1,15 @@ +/* $Id$ + +This file is part of builder +Copyright © 2006-2007 Mikko Rasa, Mikkosoft Productions +Distributed under the LGPL +*/ + +#include #include +#include #include +#include "builder.h" #include "copy.h" #include "package.h" @@ -10,29 +20,69 @@ Copy::Copy(Builder &b, const Package &pkg, const Path::Path &s, const Path::Path Action(b), src(s), dest(d), - worker(*this) + worker(0) { - announce(pkg.get_name(), "INST", dest[-1]); + announce(pkg.get_name(), "COPY", dest[-1]); + if(builder.get_verbose()>=2) + cout< "<get_done()) + { + signal_done.emit(); + worker->join(); + return worker->get_error()?1:0; + } + return -1; } +Copy::~Copy() +{ + delete worker; +} + void Copy::Worker::main() { - Path::mkpath(copy.src.subpath(0, copy.src.size()-1), 0755); - unlink(copy.dest.str().c_str()); + Path::mkpath(copy.dest.subpath(0, copy.dest.size()-1), 0755); + + // Remove old file. Not doing this would cause Bad Stuff when installing libraries. + if(unlink(copy.dest.str().c_str())<0 && errno!=ENOENT) + { + int err=errno; + cerr<<"Can't unlink "<