diff options
| author | Bent Bisballe Nyeng <deva@aasimon.org> | 2021-10-10 18:57:13 +0200 | 
|---|---|---|
| committer | Bent Bisballe Nyeng <deva@aasimon.org> | 2021-10-10 18:57:13 +0200 | 
| commit | 922412f5dc975b423757c1e248eac2813e48acb2 (patch) | |
| tree | a3b15d185627d3c8b845beadee603c44b263e1d0 /src | |
| parent | e73ee708292aac55070701ff0157db4eab6c06f4 (diff) | |
Move some common functions to util.cc
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);  | 
