summaryrefslogtreecommitdiffhomepage
path: root/ymake.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ymake.cpp')
-rw-r--r--ymake.cpp83
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;
+}
+