diff options
Diffstat (limited to 'ymake.cpp')
-rw-r--r-- | ymake.cpp | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/ymake.cpp b/ymake.cpp new file mode 100644 index 0000000..93a813e --- /dev/null +++ b/ymake.cpp @@ -0,0 +1,83 @@ +#include "ymake.h" + +#include "builder.h" + +#include <algorithm> +#include <cstdlib> +#include <filesystem> +#include <iostream> +#include <iterator> +#include <sstream> +#include <stack> +#include <stdexcept> +#include <string> +#include <unordered_map> +#include <unordered_set> +#include <vector> + +#include <boost/property_tree/ptree.hpp> +#include <boost/property_tree/xml_parser.hpp> +#include <boost/process.hpp> + +#include <fmt/format.h> + +#include <libreichwein/file.h> +#include <libreichwein/stringhelper.h> + +namespace fs = std::filesystem; +namespace bp = boost::process; +namespace pt = boost::property_tree; +using namespace std::string_literals; + +namespace { + const fs::path YMakefile{"YMakefile"}; + + void usage() + { + std::cout << "Usage: ymake <target>" << std::endl; + } + +} + +int ymake(int argc, char* argv[]) +{ + try { + pt::ptree ptree; + pt::read_xml(YMakefile, ptree, pt::xml_parser::no_comments | pt::xml_parser::trim_whitespace); + + std::string action{"default"}; + + if (argc == 1) { // default action + } else if (argc == 2) { + action = argv[1]; + } else { + std::cerr << "Invalid arguments." << std::endl; + usage; + exit(1); + } + + Builder builder(ptree); + if (action == "default"s || action == "build") { // build + builder.build(); + } else if (action == "clean") { + builder.clean(); + } else if (action == "install") { + throw std::runtime_error("unimplemented"); + } else if (action == "rebuild") { + throw std::runtime_error("unimplemented"); + } else if (action == "run") { + throw std::runtime_error("unimplemented"); + } else { + std::cerr << "Invalid action: " << action << std::endl; + usage; + exit(1); + } + + } catch (const std::exception& ex) { + std::cerr << "ymake: " << ex.what() << std::endl; + return 1; + } + + return 0; +} + |