Files

110 lines
2.9 KiB
Python

import os
import subprocess
import sys
from pathlib import Path
from git import Repo
class PortTools:
def __init__(self):
pass
@staticmethod
def set_env(name, val):
os.environ[name] = str(val)
@staticmethod
def run_command_impl(cmd, cwd="."):
result = subprocess.run(
cmd, stdout=subprocess.PIPE, shell=True, cwd=cwd)
return (result.stdout.decode("ascii"), result.returncode)
@staticmethod
def run_command(cmd, cwd="."):
return PortTools.run_command_impl(cmd, cwd)
@staticmethod
def apply_patch(location, patch_name):
src_dir = location+"/src"
if not os.path.exists(src_dir):
return ("", -1)
patch_path = location+"/patches/"+patch_name
if not os.path.exists(patch_path):
return ("", -1)
applied_patch_path = location+"/patches/.applied_"+patch_name
if os.path.exists(applied_patch_path):
return ("", 0)
cmd = ["patch"]
myinput = open(patch_path)
result = subprocess.run(
cmd, stdin=myinput, stdout=subprocess.PIPE, cwd=src_dir)
if result.returncode == 0:
Path(applied_patch_path).touch()
return (result.stdout.decode("ascii"), result.returncode)
@staticmethod
def clone_git(location, url):
src_dir = location+"/src"
if os.path.exists(src_dir):
return
Repo.clone_from(url, src_dir)
class StaticBuiler:
def check_libs_present(self, lib_name):
lib_desc = StaticBuiler.libs.get(lib_name, None)
if lib_desc is None:
return False
if not os.path.exists(lib_desc["bin"]):
return False
return True
def __init__(self, rootdir, srcdir, libs):
self.rootdir = rootdir
self.srcdir = srcdir
self.target_libs = libs
self.libs = {
"libc": {
"include": self.rootdir + "/libs/libc/include",
"bin": self.rootdir + "/out/base/libs/",
}
}
def libs_include_flags(self):
flags = ""
for lib_name in self.target_libs:
lib_desc = self.libs.get(lib_name, None)
assert(lib_desc is not None)
flags += "-I"
flags += lib_desc["include"] + " "
return flags
def libs_link_flags(self):
flags = " "
for lib_name in self.target_libs:
lib_desc = self.libs.get(lib_name, None)
assert(lib_desc is not None)
flags += "-L"
flags += lib_desc["bin"] + " "
flags += "-l" + lib_name[3:] + " "
return flags
def run_command(self, cmd_str):
return PortTools.run_command(cmd_str, self.srcdir)
def move_exec(self, execname, targetdir):
if not os.path.exists(targetdir):
os.makedirs(targetdir)
return self.run_command("mv {0} {1}".format(execname, targetdir))
if __name__ == '__main__':
pass