]> git.tdb.fi Git - builder.git/commitdiff
Move C-specific stuff from SourceFile to CSourceFile
authorMikko Rasa <tdb@tdb.fi>
Tue, 1 May 2012 10:05:57 +0000 (13:05 +0300)
committerMikko Rasa <tdb@tdb.fi>
Sun, 8 Jul 2012 21:08:50 +0000 (00:08 +0300)
12 files changed:
source/component.cpp
source/csourcefile.cpp [new file with mode: 0644]
source/csourcefile.h [new file with mode: 0644]
source/gnuccompiler.cpp
source/gnuccompiler.h
source/gnucompiler.cpp
source/gnucompiler.h
source/gnucxxcompiler.cpp
source/gnucxxcompiler.h
source/sourcefile.cpp
source/sourcefile.h
source/virtualfilesystem.cpp

index a340f3cc28b00efb091341ad6e3a593f9375e071..cc4796cdee867cd9d9aea23d311951d4f091965a 100644 (file)
@@ -6,12 +6,12 @@
 #include <msp/strings/lexicalcast.h>
 #include "builder.h"
 #include "component.h"
+#include "csourcefile.h"
 #include "datafile.h"
 #include "executable.h"
 #include "file.h"
 #include "objectfile.h"
 #include "sharedlibrary.h"
-#include "sourcefile.h"
 #include "sourcepackage.h"
 #include "staticlibrary.h"
 #include "tarball.h"
@@ -169,7 +169,7 @@ void Component::create_targets() const
                        {
                                FileTarget *hdr = builder.get_vfs().get_target(*i);
                                if(!hdr)
-                                       hdr = new SourceFile(builder, *this, *i);
+                                       hdr = new CSourceFile(builder, *this, *i);
 
                                // Install headers if requested
                                if(type==HEADERS && install)
diff --git a/source/csourcefile.cpp b/source/csourcefile.cpp
new file mode 100644 (file)
index 0000000..2162cf0
--- /dev/null
@@ -0,0 +1,86 @@
+#include <msp/core/maputils.h>
+#include <msp/fs/utils.h>
+#include <msp/io/print.h>
+#include <msp/strings/regex.h>
+#include "builder.h"
+#include "component.h"
+#include "csourcefile.h"
+#include "sourcepackage.h"
+
+using namespace std;
+using namespace Msp;
+
+CSourceFile::CSourceFile(Builder &b, const FS::Path &p):
+       SourceFile(b, 0, p)
+{ }
+
+CSourceFile::CSourceFile(Builder &b, const Component &c, const FS::Path &p):
+       SourceFile(b, &c, p)
+{
+       string ext = FS::extpart(FS::basename(path));
+       if(ext==".h" || ext==".H" || ext==".hpp")
+               install_location = "include/"+comp->get_name();
+}
+
+void CSourceFile::find_depends()
+{
+       if(!comp)
+       {
+               deps_ready = true;
+               return;
+       }
+
+       const SourcePackage &spkg = comp->get_package();
+       string relname = FS::relative(path, spkg.get_source()).str();
+       DependencyCache &deps_cache = spkg.get_deps_cache();
+       bool deps_found = false;
+       if(mtime<deps_cache.get_mtime())
+       {
+               try
+               {
+                       includes = deps_cache.get_deps(relname);
+                       deps_found = true;
+               }
+               catch(const key_error &)
+               { }
+       }
+
+       if(!deps_found)
+       {
+               try
+               {
+                       IO::BufferedFile in(path.str());
+
+                       if(builder.get_verbose()>=4)
+                               IO::print("Reading includes from %s\n", path.str());
+
+                       Regex r_include("^[ \t]*#include[ \t]+([\"<].*)[\">]");
+
+                       string line;
+                       while(in.getline(line))
+                               if(RegMatch match = r_include.match(line))
+                                       includes.push_back(match[1].str);
+
+                       deps_cache.set_deps(relname, includes);
+               }
+               catch(const IO::file_not_found &)
+               {
+                       if(builder.get_verbose()>=4)
+                               IO::print("Failed to read includes from %s\n", path.str());
+                       deps_ready = true;
+                       return;
+               }
+       }
+
+       const StringList &incpath = comp->get_build_info().incpath;
+
+       FS::Path dir = FS::dirname(path);
+       for(list<string>::iterator i=includes.begin(); i!=includes.end(); ++i)
+       {
+               Target *hdr = builder.get_vfs().find_header(*i, dir, incpath);
+               if(hdr)
+                       add_depend(hdr);
+       }
+
+       deps_ready = true;
+}
diff --git a/source/csourcefile.h b/source/csourcefile.h
new file mode 100644 (file)
index 0000000..9e231d9
--- /dev/null
@@ -0,0 +1,24 @@
+#ifndef CSOURCEFILE_H_
+#define CSOURCEFILE_H_
+
+#include "misc.h"
+#include "sourcefile.h"
+
+/**
+Represents a C or C++ source file.
+*/
+class CSourceFile: public SourceFile
+{
+private:
+       StringList includes;
+
+public:
+       CSourceFile(Builder &, const Msp::FS::Path &);
+       CSourceFile(Builder &, const Component &, const Msp::FS::Path &);
+
+       virtual const char *get_type() const { return "CSourceFile"; }
+       const StringList &get_includes() const { return includes; }
+       virtual void find_depends();
+};
+
+#endif
index 4ff46e82ca22fc56219b3a4f466d22f3471cf72a..8fc8b6c9da626d3d45344598cbf774fc4132bd50 100644 (file)
@@ -1,3 +1,4 @@
+#include "csourcefile.h"
 #include "gnuccompiler.h"
 
 using namespace std;
@@ -8,3 +9,8 @@ GnuCCompiler::GnuCCompiler(Builder &b):
 {
        input_suffixes.push_back(".c");
 }
+
+Target *GnuCCompiler::create_source(const Component &comp, const FS::Path &path) const
+{
+       return new CSourceFile(builder, comp, path);
+}
index 918f9bd8da35b5dc0f90fe89d0ed6c79fb5e1db2..2ebfc438fb3fb0d432e0bc7ad538a65948927464 100644 (file)
@@ -8,6 +8,7 @@ class GnuCCompiler: public GnuCompiler
 public:
        GnuCCompiler(Builder &);
 
+       virtual Target *create_source(const Component &, const Msp::FS::Path &) const;
 };
 
 #endif
index 4fa293b1b650153024e5601d86043e62115e9591..34b4e947a49e2f2637443e3d2f4aca70403ce006 100644 (file)
@@ -17,11 +17,6 @@ GnuCompiler::GnuCompiler(Builder &b, const string &t, const string &n):
        name(n)
 { }
 
-Target *GnuCompiler::create_source(const Component &comp, const FS::Path &path) const
-{
-       return new SourceFile(builder, comp, path);
-}
-
 Target *GnuCompiler::create_target(const list<Target *> &sources, const std::string &) const
 {
        if(sources.size()!=1)
index 9cdf670c52db568914a4931fa11155b6d084afa1..127f32e9bf81b44dfa27aaa2e789d33f7df13b6b 100644 (file)
@@ -11,7 +11,6 @@ protected:
        GnuCompiler(Builder &, const std::string &, const std::string &);
 
 public:
-       virtual Target *create_source(const Component &, const Msp::FS::Path &) const;
        virtual Target *create_target(const std::list<Target *> &, const std::string &) const;
        virtual Task *run(const Target &) const;
 };
index 8084a03e8201cbdaa00ee9db8e5a34f104e980a9..7c863a51b2ad5aff193b340bceedcbd42021a34d 100644 (file)
@@ -1,8 +1,16 @@
+#include "csourcefile.h"
 #include "gnucxxcompiler.h"
 
+using namespace Msp;
+
 GnuCxxCompiler::GnuCxxCompiler(Builder &b):
        GnuCompiler(b, "CXX", "g++")
 {
        input_suffixes.push_back(".cpp");
        input_suffixes.push_back(".cc");
 }
+
+Target *GnuCxxCompiler::create_source(const Component &comp, const FS::Path &path) const
+{
+       return new CSourceFile(builder, comp, path);
+}
index bebb7b7616e4cf9e4657cc5601d44838c9357856..760994f78ab5cedfd60598c3d8965e2c85ab0d61 100644 (file)
@@ -7,6 +7,8 @@ class GnuCxxCompiler: public GnuCompiler
 {
 public:
        GnuCxxCompiler(Builder &);
+
+       virtual Target *create_source(const Component &, const Msp::FS::Path &) const;
 };
 
 #endif
index 6fd8eb8d56514819f6c52bc3d25207e11ecbcad7..13b337ecdf303733622f8b42f95f014080a955ef 100644 (file)
@@ -1,88 +1,8 @@
-#include <msp/core/maputils.h>
-#include <msp/fs/utils.h>
-#include <msp/io/print.h>
-#include <msp/strings/regex.h>
-#include "builder.h"
 #include "component.h"
 #include "sourcefile.h"
 #include "sourcepackage.h"
 
-using namespace std;
-using namespace Msp;
-
-SourceFile::SourceFile(Builder &b, const FS::Path &p):
-       FileTarget(b, 0, p),
-       comp(0)
+SourceFile::SourceFile(Builder &b, const Component *c, const Msp::FS::Path &p):
+       FileTarget(b, (c ? &c->get_package() : 0), p),
+       comp(c)
 { }
-
-SourceFile::SourceFile(Builder &b, const Component &c, const FS::Path &p):
-       FileTarget(b, &c.get_package(), p),
-       comp(&c)
-{
-       string ext = FS::extpart(FS::basename(path));
-       if(ext==".h" || ext==".H" || ext==".hpp")
-               install_location = "include/"+comp->get_name();
-}
-
-void SourceFile::find_depends()
-{
-       if(!comp)
-       {
-               deps_ready = true;
-               return;
-       }
-
-       const SourcePackage &spkg = comp->get_package();
-       string relname = FS::relative(path, spkg.get_source()).str();
-       DependencyCache &deps_cache = spkg.get_deps_cache();
-       bool deps_found = false;
-       if(mtime<deps_cache.get_mtime())
-       {
-               try
-               {
-                       includes = deps_cache.get_deps(relname);
-                       deps_found = true;
-               }
-               catch(const key_error &)
-               { }
-       }
-
-       if(!deps_found)
-       {
-               try
-               {
-                       IO::BufferedFile in(path.str());
-
-                       if(builder.get_verbose()>=4)
-                               IO::print("Reading includes from %s\n", path.str());
-
-                       Regex r_include("^[ \t]*#include[ \t]+([\"<].*)[\">]");
-
-                       string line;
-                       while(in.getline(line))
-                               if(RegMatch match = r_include.match(line))
-                                       includes.push_back(match[1].str);
-
-                       deps_cache.set_deps(relname, includes);
-               }
-               catch(const IO::file_not_found &)
-               {
-                       if(builder.get_verbose()>=4)
-                               IO::print("Failed to read includes from %s\n", path.str());
-                       deps_ready = true;
-                       return;
-               }
-       }
-
-       const StringList &incpath = comp->get_build_info().incpath;
-
-       FS::Path dir = FS::dirname(path);
-       for(list<string>::iterator i=includes.begin(); i!=includes.end(); ++i)
-       {
-               Target *hdr = builder.get_vfs().find_header(*i, dir, incpath);
-               if(hdr)
-                       add_depend(hdr);
-       }
-
-       deps_ready = true;
-}
index 49a43318866de078484e23ce69e74877e9a4f7b9..9f126ac4d4781d19228f222075a204c9bf31027e 100644 (file)
@@ -5,23 +5,15 @@
 
 class Component;
 
-/**
-Represents a C or C++ source file.
-*/
 class SourceFile: public FileTarget
 {
-private:
+protected:
        const Component *comp;
-       StringList includes;
 
-public:
-       SourceFile(Builder &, const Msp::FS::Path &);
-       SourceFile(Builder &, const Component &, const Msp::FS::Path &);
+       SourceFile(Builder &, const Component *, const Msp::FS::Path &);
 
-       virtual const char *get_type() const { return "SourceFile"; }
-       const StringList &get_includes() const { return includes; }
+public:
        const Component *get_component() const { return comp; }
-       virtual void find_depends();
 };
 
 #endif
index 76c05d9cbaf4aa58da177a324685119e89cdf19d..be646cdbb9c494afab313bd46ef56fb5add140d3 100644 (file)
@@ -2,9 +2,9 @@
 #include <msp/io/print.h>
 #include <msp/strings/utils.h>
 #include "builder.h"
+#include "csourcefile.h"
 #include "misc.h"
 #include "sharedlibrary.h"
-#include "sourcefile.h"
 #include "systemlibrary.h"
 #include "virtualfilesystem.h"
 
@@ -150,7 +150,7 @@ FileTarget *VirtualFileSystem::get_header(const FS::Path &fn)
 
        if(FS::is_reg(fn))
        {
-               tgt = new SourceFile(builder, fn);
+               tgt = new CSourceFile(builder, fn);
                return tgt;
        }
        return 0;