Commit 97cfe161 authored by wanli's avatar wanli

🌈 style: 新增qmake工程构建工具

parent 3cb3d82a
import os
import json
import platform
from pathlib import Path
project = {
"name": "evue-awtk", # xxx.pro,
"modules": {
"crane_lvgl_W31/external/zlib": "",
"crane_lvgl_W31/external/libpng": "",
"crane_lvgl_W31/external/libjpeg-turbo": "",
"crane_lvgl_W31/external/libqrencode": "",
"crane_lvgl_W31/gui/lv_watch": "",
"crane_lvgl_W31/gui/lv_drivers": "",
"ecma/src": "ecma"
}
}
def get_module_name(path):
for key in project.get("modules"):
if Path(path).as_posix().find(key) >= 0:
result = key.split("/")[-1]
if len(project.get("modules").get(key)) > 0:
result = project.get("modules").get(key)
return result
return Path(path).as_posix().split("/")[-1]
def gen_pro_from_build_log(projectname, root_dir, filename, output_dir):
source_path = Path(filename)
target_path = Path(output_dir)
with open(source_path.as_posix(), "r", encoding="utf-8") as f:
lines = f.readlines()
gccLines = [l for l in lines if l.find("-o") >= 0]
pris = {}
defs = "" # define
incs = "" # include
lnks = "" # link
pri_files = []
srcs = "SOURCES += \\\n"
ss = "$$PWD/../" # 相对路径的问题
tmp = ""
pro_relative_path = "$$PWD/"
parent_path = Path(output_dir)
while Path(root_dir).absolute().as_posix() != parent_path.absolute().as_posix():
tmp += "../"
pro_relative_path += "../"
parent_path = parent_path.parent
# print("tmp ========>", tmp)
ss += tmp
for l in gccLines:
options = l.split(' ')
name = options[-1].split("\\")[-1]
path = options[-1][:-len(name)]
defines = []
includes = []
links = []
for d in options:
if d.startswith("-D"):
defines.append(d[2:])
if d.startswith("-I"):
includes.append(d[2:])
if d.startswith("-l") or d.startswith("-L"):
links.append(d)
if path not in pris:
pris[path] = []
pris[path].append({
'name': name,
'fullpath': Path(options[-1].replace("\n", "")).as_posix()
})
if defs == "":
for d in defines:
defs += "DEFINES += " + d + " \n"
if incs == "":
for i in includes:
incs += "INCLUDEPATH += " + pro_relative_path + i + "\n"
if lnks == "":
for i in links:
lnks += "LIBS += " + i + "\n"
with open("a.json", "w+") as f:
f.write(json.dumps(pris))
for key in pris:
if len(key) <= 0:
continue
for d in pris[key]:
fn = get_module_name(key) + ".pri"
print(d["fullpath"], " <=====> ", fn)
if fn not in pri_files:
pri_files.append(fn)
if not target_path.joinpath("pris").exists():
os.makedirs(target_path.joinpath("pris").absolute().as_posix())
if not target_path.joinpath("pris").joinpath(fn).exists():
with open(target_path.joinpath("pris").joinpath(fn).absolute().as_posix(), "w+") as f:
f.write(srcs + " " * (len(srcs) - 4) + ss + d["fullpath"] + " \\\n")
else:
with open(target_path.joinpath("pris").joinpath(fn).absolute().as_posix(), "a+") as f:
f.write(" " * (len(srcs) - 4) + ss + d["fullpath"] + " \\\n")
target_name = projectname.split("\\")[-1].replace(".log", "").replace(".exe", "")
pro_file = target_path.joinpath("{}.pro".format(target_name)).absolute().as_posix()
with open(pro_file, "w+") as f:
f.write('''
TEMPLATE = app
TARGET = {}
CONFIG -= app_bundle
CONFIG -= qt\n
'''.format(target_name))
f.write("\n{}\n\n{}\n\n{}\n\n".format(lnks, defs, incs))
for aa in pri_files:
f.write("include(pris/{})".format(aa) + "\n")
return pro_file
if __name__ == "__main__":
# root_dir = "./"
# output_dir = "build_log"
# tmp = "$$PWD/"
# parent_path = Path(output_dir)
# while Path(root_dir).absolute().as_posix() != parent_path.absolute().as_posix():
# tmp += "../"
# parent_path = parent_path.parent
# print(parent_path.absolute().as_posix())
# print("tmp ========>", tmp)
gen_pro_from_build_log("evue-awtk", ".", "./build.log", "project")
\ No newline at end of file
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment