]> git.tdb.fi Git - builder.git/commitdiff
Document a lot of classes and functions
authorMikko Rasa <tdb@tdb.fi>
Tue, 10 Jul 2012 20:51:10 +0000 (23:51 +0300)
committerMikko Rasa <tdb@tdb.fi>
Tue, 10 Jul 2012 20:55:52 +0000 (23:55 +0300)
12 files changed:
source/architecture.h
source/externaltask.h
source/gnuccompiler.h
source/gnucompiler.h
source/gnucxxcompiler.h
source/gnulinker.h
source/internaltask.h
source/pattern.h
source/target.cpp
source/target.h
source/task.h
source/tool.h

index c322c3a580d23d7a676295295c20efc7fbc02e0f..00719cfab91387d23f2ec6935a687a61f1a9dc59 100644 (file)
@@ -7,7 +7,10 @@
 
 class Builder;
 
-// XXX Add lib/exe prefix/suffix fields.  Some archs may need multiple alternatives, how to handle this?
+/**
+Stores information about an architecture.  This includes CPU type, model and
+bitness and operating system.
+*/
 class Architecture
 {
 public:
index 1b330ff745afd235d31638c87e63ff23adf0bae3..8127c75762459f9a4c73f1c532412a7567c45281 100644 (file)
@@ -7,6 +7,11 @@
 #include <msp/io/pipe.h>
 #include "task.h"
 
+/**
+Runs an external command.  A zero exit status is translated to a SUCCESS status
+for the task, and anything else is treated as an error.  Output can optionally
+be captured.
+*/
 class ExternalTask: public Task
 {
 public:
@@ -30,7 +35,11 @@ private:
        std::string output;
 
 public:
+       /** Creates an ExternalTask with an argument array and an optional working
+       directory.  The first element of the argument array should be the command
+       name.  If the working directory is not specified, no chdir is done. */
        ExternalTask(const Arguments &, const Msp::FS::Path & = Msp::FS::Path());
+
        virtual ~ExternalTask();
 
        virtual std::string get_command() const;
index ffb024435566e39812b3be4c96bd81f051d83e03..c533337f38c85ddafe3f37aa9201e65ad39dc753 100644 (file)
@@ -3,6 +3,9 @@
 
 #include "gnucompiler.h"
 
+/**
+The GNU C compiler, commonly known as gcc.
+*/
 class GnuCCompiler: public GnuCompiler
 {
 public:
index 9d025edbf791bf326440e49f7e12837973caf016..d953e47f3c847a64cc794906dfaa186f7ead52d9 100644 (file)
@@ -3,6 +3,13 @@
 
 #include "tool.h"
 
+/**
+Common base class for GNU compilers.  Turns SourceFiles into ObjectFiles.
+
+Since invocation is mostly the same for all language frontends, most of the
+logic is here and the individual tools only handle creating source files of
+appropriate type.
+*/
 class GnuCompiler: public Tool
 {
 protected:
index 45b152f3e76544acca2ba1a703494b11cf404579..a764e89bdcc05923d0c5f4d31bedf15142f911f2 100644 (file)
@@ -3,6 +3,9 @@
 
 #include "gnucompiler.h"
 
+/**
+The GNU C++ compiler, commonly known as g++.
+*/
 class GnuCxxCompiler: public GnuCompiler
 {
 public:
index 673056e9c9b878c3d425c8815212d859de97cfcc..6bd11ca441afda7f4be2e275d4ce80862894de2e 100644 (file)
@@ -3,6 +3,13 @@
 
 #include "tool.h"
 
+/**
+The GNU linker.  Turns ObjectFiles into Executables and SharedLibraries.  To
+create a shared library, specify "shared" as the second argument to
+create_target.
+
+Uses either gcc or g++ depending on what was used to compile the object files.
+*/
 class GnuLinker: public Tool
 {
 private:
index 83023d3ad33c63e0826cb4e3359a9cedd3413c66..f29a61d29e8a35b7731340fe9df87a0457a13343 100644 (file)
@@ -4,6 +4,11 @@
 #include <msp/core/thread.h>
 #include "task.h"
 
+/**
+Runs a worker thread.  Tools should derive a thread class from
+InternalTask::Worker.  The worker thread must set its status to either SUCCESS
+or ERROR before terminating.
+*/
 class InternalTask: public Task
 {
 public:
index de8e7b2de962b8a1b1bb33ea887000e42b72202c..4c79b4b83b732656d96d8866bb4f3cf9f45318f9 100644 (file)
@@ -3,6 +3,11 @@
 
 #include <string>
 
+/**
+Stores a filename pattern.  A pattern consists of a prefix and a suffix, and
+can be applied to a body to form a complete filename.  Either or both of the
+prefix and suffix may be empty.
+*/
 class Pattern
 {
 private:
@@ -10,8 +15,11 @@ private:
        std::string suffix;
 
 public:
+       /** Constructs a pattern from a single string.  The string must have exactly
+       one percent sign (%) to separate the prefix and suffix. */
        Pattern(const std::string &);
 
+       /** Applies the pattern to a body string. */
        std::string apply(const std::string &) const;
 };
 
index 43ecb7ba313a1a68ce9fefb139997ace0e203584..2d4a2de034f45a49186792dcb7a64d8919fe24b6 100644 (file)
@@ -97,6 +97,7 @@ Task *Target::build()
 {
        if(!tool)
        {
+               // This special case is needed for VirtualTargets
                state = UPTODATE;
                return 0;
        }
index 8a394f3717625787dbc1c123b7bd4f61319da8da..f4a4efc9a262ee55cf145f56fe5a4fc1d7602d99 100644 (file)
@@ -63,13 +63,15 @@ public:
        returns 0. */
        virtual Target *get_buildable_target();
 
-       /** If this target is a proxy for another (such as Install), return that
-       target.  Otherwise, return the target itself.
-
-       Implementors should call the function recursively to find the final target. */
+       /** If this target is a proxy for another (such as InstalledFile), return
+       that target.  Otherwise, return the target itself.  Implementors should call
+       the function recursively to find the final target. */
        virtual Target *get_real_target() { return this; }
 
        void set_tool(const Tool &);
+
+       /** Returns the tool used to build the target.  To actually build it, call
+       the build() function. */
        const Tool *get_tool() const { return tool; }
 
        /** Indicates if it's possible to build this target. */
@@ -86,19 +88,29 @@ public:
        /** Forces rebuild of the target. */
        void force_rebuild();
 
+       /** Adds a dependency for the target.  Order is preseved and is important
+       for some target types.  It is an error to create dependency cycles, although
+       this won't be detected until the targets are prepared. */
        void add_depend(Target *);
+
+       /// Returns the dependencies of the target, in the order they were added.
        const Dependencies &get_depends() const { return depends; }
 
-       /** Finds dependencies for the target. */
+       /** Finds dependencies for the target.  Called during preparation.  If the
+       target needs to recursively inspect its dependencies, it should prepare its
+       direct dependencies first. */
        virtual void find_depends() { }
 
        /** Prepares the target by finding dependencies, recursively preparing them
        and then checking whether rebuilding is needed. */
        virtual void prepare();
 
-       /** Starts building the target.  Returns the Action used for building. */
+       /** Invokes the associated Tool to build the target and returns the
+       resulting Task.  The task must be started by the caller. */
        Task *build();
+
 protected:
+       /** Marks the target to be rebuilt and specified a reason for it. */
        void mark_rebuild(const std::string &);
 
        /** Checks if the target needs to be rebuilt and why. */
index 531316be71d1ee98a46d3f86bcd55a8b8b796b39..1f59473fd14f135da7933d18993f4936458e2e1c 100644 (file)
@@ -4,6 +4,10 @@
 #include <string>
 #include <sigc++/signal.h>
 
+/**
+Tasks are used to manage other programs and worker threads involved in the
+build process.  They are run asynchronously.
+*/
 class Task
 {
 public:
index 4bbbcf5595a8f3603e85901fb5bdb88503cba6f2..3c3757fe794549365851170b6b1e461a1998fd74 100644 (file)
@@ -37,17 +37,44 @@ public:
        virtual ~Tool() { }
 
        const std::string &get_tag() const { return tag; }
+
+       /** Returns a target for the tool's own executable.  If the tool does not
+       use an external program, returns null. */
        // XXX The executable target should be retrieved when first needed
        FileTarget *get_executable() const { return executable; }
+
+       /// Returns a list of suffixes that can be processed with this tool.
        const SuffixList &get_input_suffixes() const { return input_suffixes; }
+
+       /** Returns a list of suffixes that are associated with this tool, but can't
+       be processed directly.  For example C and C++ headers. */
        const SuffixList &get_auxiliary_suffixes() const { return aux_suffixes; }
-       bool accepts_suffix(const std::string &, bool = false) const;
+
+       /** Indicates whether the tool can accept a suffix.  If aux is true,
+       auxiliary suffixes are considered as well */
+       bool accepts_suffix(const std::string &, bool aux = false) const;
+
+       /// Returns the systemwide search path for source files.
        const SearchPath &get_system_path() const { return system_path; }
 
+       /// Creates a source file appropriate for this tool.
        virtual Target *create_source(const Component &, const Msp::FS::Path &) const { return 0; }
+
+       /** Creates a package-less source file appropriate for this too.  This is
+       called during dependency discovery when no package has created a target for
+       the file. */
        virtual Target *create_source(const Msp::FS::Path &) const { return 0; }
+
+       /// Convenience function to create a target from a single source.
        Target *create_target(Target &, const std::string & = std::string()) const;
+
+       /** Creates a target from sources.  The exact types of accepted sources
+       depends on the tool.  The optional second argument can be used to select an
+       alternative target type for tools that can create multiple kinds of targets. */ 
        virtual Target *create_target(const std::list<Target *> &, const std::string & = std::string()) const = 0;
+
+       /** Invokes the tool to build a target.  This should not be called directly;
+       use Target::build() instead. */
        virtual Task *run(const Target &) const = 0;
 };