From 71a6bde4422cfc24762dcbd2b440217d8e339374 Mon Sep 17 00:00:00 2001 From: Ambigapathy Vinayak Date: Thu, 30 May 2024 12:08:23 +0200 Subject: [PATCH] Continued on the creation and recreation of a project --- src/Buildtools.py | 22 +++++++++-- src/Package.py | 47 +++++++++++++++++++++- src/Premake/App.py | 98 ++++++++++++++++++++++------------------------ src/Premake/Wks.py | 28 ++++++------- src/Project.py | 46 ++++++++++++++++++++-- src/main.py | 15 +++++-- 6 files changed, 179 insertions(+), 77 deletions(-) diff --git a/src/Buildtools.py b/src/Buildtools.py index d2b4369..75726c9 100644 --- a/src/Buildtools.py +++ b/src/Buildtools.py @@ -1,4 +1,5 @@ import platform +import os def tool_exist(name: str) -> bool: from shutil import which @@ -15,10 +16,25 @@ def verifie_tools() -> None: none_tools: str = [] match platform.system(): case "Windows": - none_tools = search_tools(["git"]) + none_tools = search_tools(["git", "dotnet", "premake5"]) case "Linux": - none_tools = search_tools(["git"]) + none_tools = search_tools(["git", "g++", "premake5", "make"]) case _: raise Exception("Platform not supported") if len(none_tools) > 0: - raise Exception(f"Tools missing {none_tools}") \ No newline at end of file + raise Exception(f"Tools missing {none_tools}") + + + +def build() -> None: + verifie_tools() + match platform.system(): + case "Windows": + os.system("premake5 vs2022") + os.system("dotnet build") + case "Linux": + os.system("premake5 gmake2") + os.system("make") + case _: + raise Exception("Platform not supported") + \ No newline at end of file diff --git a/src/Package.py b/src/Package.py index c715475..08a813d 100644 --- a/src/Package.py +++ b/src/Package.py @@ -1,2 +1,47 @@ -def add(name: str) -> None: +import os +import json + +def add(author, package: str) -> None: + f_conf = open("./config.json", "r") + conf = json.loads(f_conf.read()) + f_conf.close() + if package in conf["packages"]: raise Exception("Package already added") + f_conf = open("./config.json", "w") + conf["packages"].append({ "author": author, "pkg": package}) + f_conf.write(json.dumps(conf, indent=4)) + f_conf.close() + + install(author, package) + +def install_root() -> None: + f_conf = open("./config.json", "r") + conf = json.loads(f_conf.read()) + f_conf.close() + for package in conf["packages"]: + install(package) + +def install(author, package) -> None: + if os.path.exists(f"./vendor/{package}"): + return + + os.system(f"git clone https://github.com/{author}/{package} ./vendor/{package}") + + if os.path.exists(f"./vendor/{package}/config.json"): + conf = open(f"./vendor/{package}/config.json", "r").read() + conf = json.loads(conf) + if len(conf["packages"]) > 0: + for pkg in conf["packages"]: + install(pkg["author"], pkg["pkg"]) + + if os.path.exists(f"./vendor/{package}/dependencies.lua"): + dep = open(f"./vendor/{package}/dependencies.lua", "r") + pkg_deps = dep.read() + dep.close() + dep = open(f"./deps.lua", "a") + dep.write("\n" + pkg_deps) + dep.close() + + + + \ No newline at end of file diff --git a/src/Premake/App.py b/src/Premake/App.py index 73ca003..0dafa74 100644 --- a/src/Premake/App.py +++ b/src/Premake/App.py @@ -1,54 +1,50 @@ def get() -> str: return '''project "App" - kind "ConsoleApp" - language "C++" - cppdialect "C++20" - systemversion "latest" - - targetdir("%{wks.location}/bin/" .. outputdir .. "/%{prj.name}") - objdir("%{wks.location}/bin-int/" .. outputdir .. "/%{prj.name}") - - files - { - "src/**.h", - "src/**.cpp" - } - - filter "configurations:Debug" - defines - { - "BK_DEBUG", - "DEBUG" - } - runtime "Debug" - symbols "on" - - - filter "configurations:Release" - defines - { - "BK_RELEASE", - "NDEBUG" - } - runtime "Release" - optimize "on" - - filter "system:windows" - staticruntime "on" - defines - { - "BK_PLATFORM_WINDOWS" - } - - filter "system:linux" - staticruntime "on" - defines - { - "BK_PLATFORM_LINUX" - } - filter "" - includedirs - - links - + kind "ConsoleApp" + language "C++" + cppdialect "C++20" + systemversion "latest" + + targetdir("%{wks.location}/bin/" .. outputdir .. "/%{prj.name}") + objdir("%{wks.location}/bin-int/" .. outputdir .. "/%{prj.name}") + + files + { + "src/**.h", + "src/**.cpp" + } + +filter "configurations:Debug" + defines + { + "BK_DEBUG", + "DEBUG" + } + runtime "Debug" + symbols "on" + + +filter "configurations:Release" + defines + { + "BK_RELEASE", + "NDEBUG" + } + runtime "Release" + optimize "on" + +filter "system:windows" + staticruntime "on" + defines + { + "BK_PLATFORM_WINDOWS" + } + +filter "system:linux" + staticruntime "on" + defines + { + "BK_PLATFORM_LINUX" + } +filter "" ''' \ No newline at end of file diff --git a/src/Premake/Wks.py b/src/Premake/Wks.py index de1dc1c..bb9a5c5 100644 --- a/src/Premake/Wks.py +++ b/src/Premake/Wks.py @@ -1,20 +1,20 @@ def get(name) -> str: return '''workspace "''' + name + '''" - architecture "x64" - configurations { "Debug", "Release" } - startproject "App" + architecture "x64" + configurations { "Debug", "Release" } + startproject "App" - flags - { - "MultiProcessorCompile" - } + flags + { + "MultiProcessorCompile" + } - linkgroups "On" - outputdir = "%{cfg.system}-%{cfg.architecture}-%{cfg.buildcfg}" - - include "Depedencies.lua" + linkgroups "On" +outputdir = "%{cfg.system}-%{cfg.architecture}-%{cfg.buildcfg}" - group "App" - include "app" - group "" +include "dependencies.lua" + +group "App" + include "app" +group "" ''' \ No newline at end of file diff --git a/src/Project.py b/src/Project.py index 5baae27..95833ee 100644 --- a/src/Project.py +++ b/src/Project.py @@ -1,8 +1,15 @@ import os +import json import Premake class Project: - def __init__(self, name) -> None: + def __init__(self, conf) -> None: + self.owner = conf["owner"] + self.name = conf["name"] + self.git_repo = conf["git"] + + def __init__(self, name, author = "") -> None: + self.owner = author self.name = name self.git_repo = "" @@ -11,26 +18,56 @@ class Project: def create(self) -> None: self.create_folder() - self.premake_conf() + self.config() if not self.as_git_repo(): self.init_git_repo() - def premake_conf(self) -> None: + def config(self) -> None: + conf = { + "name": self.name, + "owner": self.owner, + "git": self.git_repo, + "packages": [] + } + file_conf = open("./config.json", "w") + file_conf.write(json.dumps(conf, indent=4)) + file_conf.close() wks = open("./premake5.lua", "w") wks.write(Premake.Wks.get(self.name)) wks.close() app = open("./app/premake5.lua", "w") app.write(Premake.App.get()) app.close() + dep = open("./deps.lua", "w") + dep.write("IncludeDirs = {}") + dep.close() + git_ign = open("./.gitignore", "w") + git_ign.write("""/vendor/ +/bin/ +/bin-int/ +/.vscode/ +/.vs/ +/docs/ +**.log +**.sln +**.vcxproj* +**.make +**Makefile +**deps.lua +""") def create_folder(self) -> None: try: os.mkdir("./app") os.mkdir("./vendor") os.mkdir("./app/src") - except: raise Exception("A directory already exists.") + except: raise Exception("Directory already exists.") + create_file("./dependencies.lua") + create_file("./deps.lua") create_file("./app/src/app.cpp") create_file("./premake5.lua") create_file("./app/premake5.lua") + create_file("./config.json") + create_file("./.gitignore") def as_git_repo(self) -> bool: return os.path.exists("./.git") @@ -40,6 +77,7 @@ class Project: os.system("git add .") os.system('git commit -m "Initial commit"') if len(self.git_repo) > 0: os.system(f'git remote add origin ${self.git_repo}') + def create_file(path) -> None: file = open(path, "w") diff --git a/src/main.py b/src/main.py index 2bea6a7..d0643fd 100644 --- a/src/main.py +++ b/src/main.py @@ -1,16 +1,23 @@ import os import sys +import Package from Buildtools import verifie_tools from Project import Project -def setup() -> None: +def bakasable() -> None: if len(sys.argv) >= 2: if not os.path.exists(sys.argv[1]): os.mkdir(sys.argv[1]) os.chdir(sys.argv[1]) - verifie_tools() - project: Project = Project("Test") + project = Project("Test") project.create() + Package.add("anulax1225", "bakatools") if __name__ == "__main__": - setup() \ No newline at end of file + print(""" ____ _ _ __ _ ____ _ ____ _ _____ +| __ ) / \\ | |/ / / \\ / ___| / \\ | __ )| | | ____| +| _ \\ / _ \\ | ' / / _ \\ \\___ \\ / _ \\ | _ \\| | | _| +| |_) / ___ \\| . \\ / ___ \\ ___) / ___ \\| |_) | |___| |___ +|____/_/ \\_\\_|\\_\\/_/ \\_\\____/_/ \\_\\____/|_____|_____| + """) + bakasable() \ No newline at end of file