#include "ymake.h" #include "file.h" #include "Builder.h" #include "MakefileReader.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace fs = std::filesystem; namespace bp = boost::process; namespace pt = boost::property_tree; using namespace std::string_literals; namespace { void usage() { std::cout << "Usage: ymake " << std::endl; } } int ymake(int argc, char* argv[]) { try { pt::ptree ptree{MakefileReader{}.read(".")}; 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; }