Continued on the creation and recreation of a project

dev
Ambigapathy Vinayak ago%!(EXTRA string=11 months)
parent ff6e01acd0
commit 71a6bde442
  1. 22
      src/Buildtools.py
  2. 47
      src/Package.py
  3. 98
      src/Premake/App.py
  4. 28
      src/Premake/Wks.py
  5. 46
      src/Project.py
  6. 15
      src/main.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}")
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")

@ -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()

@ -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 ""
'''

@ -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 ""
'''

@ -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")

@ -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()
print(""" ____ _ _ __ _ ____ _ ____ _ _____
| __ ) / \\ | |/ / / \\ / ___| / \\ | __ )| | | ____|
| _ \\ / _ \\ | ' / / _ \\ \\___ \\ / _ \\ | _ \\| | | _|
| |_) / ___ \\| . \\ / ___ \\ ___) / ___ \\| |_) | |___| |___
|____/_/ \\_\\_|\\_\\/_/ \\_\\____/_/ \\_\\____/|_____|_____|
""")
bakasable()
Loading…
Cancel
Save