diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/task_ar.cc | 18 | ||||
-rw-r--r-- | src/task_cc.cc | 108 | ||||
-rw-r--r-- | src/task_so.cc | 18 | ||||
-rw-r--r-- | src/util.cc | 112 | ||||
-rw-r--r-- | src/util.h | 13 |
5 files changed, 128 insertions, 141 deletions
diff --git a/src/task_ar.cc b/src/task_ar.cc index 84cda1b..06504f6 100644 --- a/src/task_ar.cc +++ b/src/task_ar.cc @@ -9,23 +9,7 @@ #include "libctor.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); -} -} // namespace :: +#include "util.h" TaskAR::TaskAR(const BuildConfiguration& config, const Settings& settings, diff --git a/src/task_cc.cc b/src/task_cc.cc index dfda75d..73297f2 100644 --- a/src/task_cc.cc +++ b/src/task_cc.cc @@ -10,113 +10,7 @@ #include "libctor.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> readDeps(const std::string& depFile) -{ - if(!std::filesystem::exists(depFile)) - { - return {}; - } - - auto str = readFile(depFile); - - std::vector<std::string> output; - std::string tmp; - bool start{false}; - bool in_whitespace{false}; - for(const auto& c : str) - { - if(c == '\\' || c == '\n') - { - continue; - } - - if(c == ':') - { - start = true; - continue; - } - - if(!start) - { - continue; - } - - if(c == ' ' || c == '\t') - { - if(in_whitespace) - { - continue; - } - - if(!tmp.empty()) - { - output.push_back(tmp); - } - tmp.clear(); - in_whitespace = true; - } - else - { - in_whitespace = false; - tmp += c; - } - } - - if(!tmp.empty()) - { - output.push_back(tmp); - } - - return output; -} - -Language languageFromExtension(const std::filesystem::path& file) -{ - auto ext = file.extension().string(); - if(ext == ".c") - { - return Language::C; - } - - if(ext == ".C" || - ext == ".cc" || - ext == ".cpp" || - ext == ".CPP" || - ext == ".c++" || - ext == ".cp" || - ext == ".cxx") - { - return Language::Cpp; - } - - if(ext == ".s" || - ext == ".S" || - ext == ".asm") - { - return Language::Asm; - } - - std::cerr << "Could not deduce language from " << file.string() << "\n"; - exit(1); - return {}; -} -} // namespace :: +#include "util.h" TaskCC::TaskCC(const BuildConfiguration& config, const Settings& settings, const std::string& sourceDir, const Source& source) diff --git a/src/task_so.cc b/src/task_so.cc index ce6e868..f3e1937 100644 --- a/src/task_so.cc +++ b/src/task_so.cc @@ -9,23 +9,7 @@ #include "libctor.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); -} -} // namespace :: +#include "util.h" TaskSO::TaskSO(const BuildConfiguration& config, const Settings& settings, diff --git a/src/util.cc b/src/util.cc new file mode 100644 index 0000000..9bf83cc --- /dev/null +++ b/src/util.cc @@ -0,0 +1,112 @@ +// -*- c++ -*- +// Distributed under the BSD 2-Clause License. +// See accompanying file LICENSE for details. +#include "util.h" + +#include <iostream> +#include <fstream> + +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> readDeps(const std::string& depFile) +{ + if(!std::filesystem::exists(depFile)) + { + return {}; + } + + auto str = readFile(depFile); + + std::vector<std::string> output; + std::string tmp; + bool start{false}; + bool in_whitespace{false}; + for(const auto& c : str) + { + if(c == '\\' || c == '\n') + { + continue; + } + + if(c == ':') + { + start = true; + continue; + } + + if(!start) + { + continue; + } + + if(c == ' ' || c == '\t') + { + if(in_whitespace) + { + continue; + } + + if(!tmp.empty()) + { + output.push_back(tmp); + } + tmp.clear(); + in_whitespace = true; + } + else + { + in_whitespace = false; + tmp += c; + } + } + + if(!tmp.empty()) + { + output.push_back(tmp); + } + + return output; +} + +Language languageFromExtension(const std::filesystem::path& file) +{ + auto ext = file.extension().string(); + if(ext == ".c") + { + return Language::C; + } + + if(ext == ".C" || + ext == ".cc" || + ext == ".cpp" || + ext == ".CPP" || + ext == ".c++" || + ext == ".cp" || + ext == ".cxx") + { + return Language::Cpp; + } + + if(ext == ".s" || + ext == ".S" || + ext == ".asm") + { + return Language::Asm; + } + + std::cerr << "Could not deduce language from " << file.string() << "\n"; + exit(1); + return {}; +} diff --git a/src/util.h b/src/util.h new file mode 100644 index 0000000..dc9cd41 --- /dev/null +++ b/src/util.h @@ -0,0 +1,13 @@ +// -*- c++ -*- +// Distributed under the BSD 2-Clause License. +// See accompanying file LICENSE for details. +#pragma once + +#include "libctor.h" + +#include <string> +#include <filesystem> + +std::string readFile(const std::string& fileName); +std::vector<std::string> readDeps(const std::string& depFile); +Language languageFromExtension(const std::filesystem::path& file); |