110 lines
2.9 KiB
Python
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
|