added -here argument
This commit is contained in:
+111
-3
@@ -3,6 +3,8 @@
|
|||||||
#include <desktoplib/terminal/Terminal.hpp>
|
#include <desktoplib/terminal/Terminal.hpp>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
#include <filesystem>
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
namespace kmake {
|
namespace kmake {
|
||||||
|
|
||||||
@@ -20,6 +22,107 @@ namespace kmake {
|
|||||||
kmake_terminal << msg << style::RESET << '\n';
|
kmake_terminal << msg << style::RESET << '\n';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void createProject() {
|
||||||
|
namespace fs = std::filesystem;
|
||||||
|
|
||||||
|
fs::path cwd = fs::current_path();
|
||||||
|
string parent_dir = cwd.filename().string();
|
||||||
|
|
||||||
|
// Create folders
|
||||||
|
fs::create_directories("src");
|
||||||
|
fs::create_directories("bin");
|
||||||
|
fs::create_directories("out");
|
||||||
|
|
||||||
|
log("Created directories: src/, bin/, out/", Verbosity::NORMAL);
|
||||||
|
|
||||||
|
// Create kmake.yml
|
||||||
|
string kmake_yml = R"(name: ')" + parent_dir + R"('
|
||||||
|
author: '' # author and authors are added together
|
||||||
|
authors: ['']
|
||||||
|
descr:
|
||||||
|
- ''
|
||||||
|
# Amount of text to output
|
||||||
|
verbosity: normal
|
||||||
|
build:
|
||||||
|
# Set build folders
|
||||||
|
src:
|
||||||
|
path: './src'
|
||||||
|
targets: ['c','cpp'] # Set targets for compilation
|
||||||
|
out:
|
||||||
|
path: './out'
|
||||||
|
target: 'exe'
|
||||||
|
bin:
|
||||||
|
path: './bin'
|
||||||
|
target: 'o'
|
||||||
|
deps:
|
||||||
|
path: './bin' # Reuse binaries folder (default)
|
||||||
|
target: 'd'
|
||||||
|
rev_target: 'rd' # Extension for reverse dependencies
|
||||||
|
style: gcc # Dependency style of generated output
|
||||||
|
|
||||||
|
# Set number of threads to use
|
||||||
|
# for compilation of multiple files
|
||||||
|
# 0 To turn off multithreading.
|
||||||
|
# Default: 0
|
||||||
|
# Recommended: 4
|
||||||
|
threads: 4
|
||||||
|
vars:
|
||||||
|
distros:
|
||||||
|
default:
|
||||||
|
# Distro Vars (overrides global)
|
||||||
|
vars:
|
||||||
|
# Commands executed at the start
|
||||||
|
start:
|
||||||
|
- ''
|
||||||
|
# Commands to generate dependencies
|
||||||
|
deps:
|
||||||
|
- ''
|
||||||
|
# Commands to compile one file
|
||||||
|
# Files may be compiled on multiple threads
|
||||||
|
compile:
|
||||||
|
- ''
|
||||||
|
# Commands to link one file
|
||||||
|
link:
|
||||||
|
- ''
|
||||||
|
# Commands executed after linking program
|
||||||
|
end:
|
||||||
|
- ''
|
||||||
|
)";
|
||||||
|
|
||||||
|
std::ofstream yml_file("kmake.yml");
|
||||||
|
if (yml_file.is_open()) {
|
||||||
|
yml_file << kmake_yml;
|
||||||
|
yml_file.close();
|
||||||
|
log("Created kmake.yml", Verbosity::NORMAL);
|
||||||
|
} else {
|
||||||
|
log("Failed to create kmake.yml", Verbosity::LOW);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create .code-workspace
|
||||||
|
string workspace = R"({
|
||||||
|
"folders": [
|
||||||
|
{
|
||||||
|
"path": "."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"terminal.integrated.defaultProfile.windows": "Command Prompt",
|
||||||
|
"terminal.integrated.defaultProfile.linux": "bash",
|
||||||
|
"terminal.integrated.defaultProfile.osx": "zsh"
|
||||||
|
}
|
||||||
|
})";
|
||||||
|
|
||||||
|
string workspace_name = parent_dir + ".code-workspace";
|
||||||
|
std::ofstream ws_file(workspace_name);
|
||||||
|
if (ws_file.is_open()) {
|
||||||
|
ws_file << workspace;
|
||||||
|
ws_file.close();
|
||||||
|
log("Created " + workspace_name, Verbosity::NORMAL);
|
||||||
|
} else {
|
||||||
|
log("Failed to create " + workspace_name, Verbosity::LOW);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void parseArgs(int argc, char* argv[]) {
|
void parseArgs(int argc, char* argv[]) {
|
||||||
for (int i = 1; i < argc; ++i) {
|
for (int i = 1; i < argc; ++i) {
|
||||||
string arg = argv[i];
|
string arg = argv[i];
|
||||||
@@ -30,10 +133,12 @@ namespace kmake {
|
|||||||
args.list_distros = true;
|
args.list_distros = true;
|
||||||
} else if (arg == "-descr" || arg == "--descr") {
|
} else if (arg == "-descr" || arg == "--descr") {
|
||||||
args.show_description = true;
|
args.show_description = true;
|
||||||
|
} else if (arg == "-here" || arg == "--here") {
|
||||||
|
args.create_project = true;
|
||||||
} else if (arg == "-verbosity" || arg == "--verbosity") {
|
} else if (arg == "-verbosity" || arg == "--verbosity") {
|
||||||
if (i + 1 >= argc) {
|
if (i + 1 >= argc) {
|
||||||
log("Missing value for " + arg, Verbosity::LOW);
|
log("Missing value for " + arg, Verbosity::LOW);
|
||||||
return;
|
continue;
|
||||||
}
|
}
|
||||||
string val = argv[++i];
|
string val = argv[++i];
|
||||||
if (val == "low") args.verbosity = Verbosity::LOW;
|
if (val == "low") args.verbosity = Verbosity::LOW;
|
||||||
@@ -42,11 +147,9 @@ namespace kmake {
|
|||||||
else if (val == "debug") args.verbosity = Verbosity::DEBUG;
|
else if (val == "debug") args.verbosity = Verbosity::DEBUG;
|
||||||
else {
|
else {
|
||||||
log("Invalid verbosity: " + val, Verbosity::LOW);
|
log("Invalid verbosity: " + val, Verbosity::LOW);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
} else if (arg[0] == '-') {
|
} else if (arg[0] == '-') {
|
||||||
log("Unknown option: " + arg, Verbosity::LOW);
|
log("Unknown option: " + arg, Verbosity::LOW);
|
||||||
return;
|
|
||||||
} else {
|
} else {
|
||||||
args.distros.push_back(arg);
|
args.distros.push_back(arg);
|
||||||
}
|
}
|
||||||
@@ -57,6 +160,11 @@ namespace kmake {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int run() {
|
int run() {
|
||||||
|
if (args.create_project) {
|
||||||
|
createProject();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (args.show_version) {
|
if (args.show_version) {
|
||||||
log("Kitty Make by Kittycannon @ 2026, all rights reserved", Verbosity::NORMAL);
|
log("Kitty Make by Kittycannon @ 2026, all rights reserved", Verbosity::NORMAL);
|
||||||
log("kmake version 1.0.0", Verbosity::NORMAL);
|
log("kmake version 1.0.0", Verbosity::NORMAL);
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ namespace kmake {
|
|||||||
bool show_version = false;
|
bool show_version = false;
|
||||||
bool list_distros = false;
|
bool list_distros = false;
|
||||||
bool show_description = false;
|
bool show_description = false;
|
||||||
|
bool create_project = false;
|
||||||
string config_file = "kmake.yml";
|
string config_file = "kmake.yml";
|
||||||
} args;
|
} args;
|
||||||
|
|
||||||
|
|||||||
@@ -6,4 +6,12 @@ namespace kmake {
|
|||||||
|
|
||||||
Distro::~Distro() {}
|
Distro::~Distro() {}
|
||||||
|
|
||||||
|
optional<string> Distro::getVar(const string& name) {
|
||||||
|
auto it = vars.find(name);
|
||||||
|
if (it != vars.end()) {
|
||||||
|
return it->second;
|
||||||
|
}
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -280,4 +280,27 @@ namespace kmake {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Project::hasDistro(const string& distro_name) {
|
||||||
|
return distros.find(distro_name) != distros.end();
|
||||||
|
}
|
||||||
|
|
||||||
|
Distro& Project::getDistro(const string& distro_name) {
|
||||||
|
auto it = distros.find(distro_name);
|
||||||
|
if (it != distros.end()) {
|
||||||
|
return it->second;
|
||||||
|
}
|
||||||
|
// Return reference to first distro if exists, otherwise create a default
|
||||||
|
// This should not happen if hasDistro is checked first
|
||||||
|
static Distro empty_distro;
|
||||||
|
return empty_distro;
|
||||||
|
}
|
||||||
|
|
||||||
|
optional<string> Project::getVar(const string& var_name) {
|
||||||
|
auto it = vars.find(var_name);
|
||||||
|
if (it != vars.end()) {
|
||||||
|
return it->second;
|
||||||
|
}
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user