diff options
author | Bent Bisballe Nyeng <deva@aasimon.org> | 2021-08-28 18:59:29 +0200 |
---|---|---|
committer | Bent Bisballe Nyeng <deva@aasimon.org> | 2021-08-28 18:59:29 +0200 |
commit | 5da56616cccf4e595ec6a556cf1aef40b37746e3 (patch) | |
tree | 8142e294a251ca2ab1697f7541fe67dfd31622e0 /task_so.cc | |
parent | 0597cb9854d66d918762ff167148516b69c02e9a (diff) |
Move sources to ... well, src ;)
Diffstat (limited to 'task_so.cc')
-rw-r--r-- | task_so.cc | 217 |
1 files changed, 0 insertions, 217 deletions
diff --git a/task_so.cc b/task_so.cc deleted file mode 100644 index eaf6a85..0000000 --- a/task_so.cc +++ /dev/null @@ -1,217 +0,0 @@ -#include "task_so.h" - -#include <iostream> -#include <fstream> - -#include "libcppbuild.h" -#include "settings.h" -#include "execute.h" - -namespace -{ -std::string readFile(const std::string &fileName) -{ - std::ifstream ifs(fileName.c_str(), std::ios::in | std::ios::binary | std::ios::ate); - - std::ifstream::pos_type fileSize = ifs.tellg(); - ifs.seekg(0, std::ios::beg); - - std::vector<char> bytes(fileSize); - ifs.read(bytes.data(), fileSize); - - return std::string(bytes.data(), fileSize); -} - -std::vector<std::string> addPrefix(const std::vector<std::string>& lst, - const Settings& settings) -{ - std::vector<std::string> out; - for(const auto& item : lst) - { - std::filesystem::path file = settings.builddir; - file /= item; - out.push_back(file.string()); - } - return out; -} -} // namespace :: - -TaskSO::TaskSO(const BuildConfiguration& config, - const Settings& settings, - const std::string& target, - const std::vector<std::string>& objects) - : Task(config, addPrefix(config.depends, settings)) - , config(config) - , settings(settings) -{ - targetFile = settings.builddir; - targetFile /= target; - for(const auto& object : objects) - { - std::filesystem::path objectFile = object; - objectFiles.push_back(objectFile); - dependsStr.push_back(objectFile.string()); - } - - for(const auto& dep : config.depends) - { - std::filesystem::path depFile = settings.builddir; - depFile /= dep; - depFiles.push_back(depFile); - } - - flagsFile = settings.builddir / targetFile.stem(); - flagsFile += ".flags"; - - target_type = TargetType::DynamicLibrary; - source_language = Language::C; - for(const auto& source : config.sources) - { - std::filesystem::path sourceFile(source); - if(sourceFile.extension().string() != ".c") - { - source_language = Language::Cpp; - } - } -} - -bool TaskSO::dirtyInner() -{ - if(!std::filesystem::exists(targetFile)) - { - return true; - } - - if(!std::filesystem::exists(flagsFile)) - { - return true; - } - - for(const auto& objectFile : objectFiles) - { - if(std::filesystem::last_write_time(targetFile) <= - std::filesystem::last_write_time(objectFile)) - { - return true; - } - } - - { - auto lastFlags = readFile(flagsFile.string()); - if(flagsString() != lastFlags) - { - //std::cout << "The compiler flags changed\n"; - return true; - } - } - - return false; -} - -int TaskSO::runInner() -{ - std::string objectlist; - for(const auto& objectFile : objectFiles) - { - if(!objectlist.empty()) - { - objectlist += " "; - } - objectlist += objectFile.string(); - } - - std::vector<std::string> args; - - args.push_back("-fPIC"); - args.push_back("-shared"); - - args.push_back("-o"); - args.push_back(targetFile.string()); - - for(const auto& objectFile : objectFiles) - { - args.push_back(objectFile.string()); - } - - for(const auto& depFile : depFiles) - { - args.push_back(depFile.string()); - } - - for(const auto& flag : config.ldflags) - { - args.push_back(flag); - } - - { // Write flags to file. - std::ofstream flagsStream(flagsFile); - flagsStream << flagsString(); - } - - if(settings.verbose == 0) - { - std::cout << "LD => " << targetFile.string() << "\n"; - } - - auto tool = compiler(); - return execute(tool, args, settings.verbose > 0); -} - -int TaskSO::clean() -{ - if(std::filesystem::exists(targetFile)) - { - std::cout << "Removing " << targetFile.string() << "\n"; - std::filesystem::remove(targetFile); - } - - if(std::filesystem::exists(flagsFile)) - { - std::cout << "Removing " << flagsFile.string() << "\n"; - std::filesystem::remove(flagsFile); - } - - return 0; -} - -std::vector<std::string> TaskSO::depends() const -{ - std::vector<std::string> deps; - for(const auto& objectFile : objectFiles) - { - deps.push_back(objectFile.string()); - } - - for(const auto& depFile : depFiles) - { - deps.push_back(depFile.string()); - } - - return deps; -} - -std::string TaskSO::target() const -{ - return targetFile.string(); -} - -std::string TaskSO::flagsString() const -{ - std::string flagsStr = compiler(); - for(const auto& flag : config.ldflags) - { - flagsStr += " " + flag; - } - flagsStr += "\n"; - - for(const auto& dep : config.depends) - { - if(dep != config.depends[0]) - { - flagsStr += " "; - } - flagsStr += dep; - } - - return flagsStr; -} |