summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/task_ar.cc18
-rw-r--r--src/task_cc.cc108
-rw-r--r--src/task_so.cc18
-rw-r--r--src/util.cc112
-rw-r--r--src/util.h13
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);