]> git.tdb.fi Git - builder.git/blobdiff - source/lib/component.cpp
Make sure the name of the build macro is valid
[builder.git] / source / lib / component.cpp
index 4fddcef79de59a9ca0ca6cf05e8a5b71ec565a79..f6ef96cf824d4a13008d7f09f63248f6953753cc 100644 (file)
@@ -4,6 +4,7 @@
 #include <msp/fs/stat.h>
 #include <msp/fs/utils.h>
 #include <msp/strings/format.h>
+#include <msp/strings/utils.h>
 #include "builder.h"
 #include "component.h"
 #include "sourcepackage.h"
@@ -14,12 +15,23 @@ using namespace Msp;
 void Component::prepare()
 {
        for(Package *r: requires)
+       {
                r->prepare();
+               broken |= r->is_broken();
+       }
+
+       if(!problems.empty())
+               broken = true;
 }
 
 void Component::create_build_info()
 {
        BuildInfo final_build_info;
+       string build_macro = toupper(name)+"_BUILD";
+       for(char &c: build_macro)
+               if(!isalnum(static_cast<unsigned char>(c)))
+                       c = '_';
+       final_build_info.defines[build_macro] = "1";
 
        const Package::Requirements &pkg_reqs = package.get_required_packages();
        Package::Requirements direct_reqs = requires;
@@ -176,5 +188,8 @@ void Component::Loader::require(const string &n)
 
 void Component::Loader::source(const string &s)
 {
-       obj.sources.push_back((obj.package.get_source_directory()/s).str());
+       FS::Path src_path = obj.package.get_source_directory()/s;
+       if(!FS::exists(src_path))
+               throw IO::file_not_found(src_path.str());
+       obj.sources.push_back(src_path);
 }