Complete BigTask
Sync changed files to Google Drive / sync (push) Successful in 1m14s

This commit is contained in:
admin_d committed 2026-09-14 19:06:26 +05:00
1 parent a5ee0bec73
commit 15a968a2f7
6 files changed
+290 -37

No files matched your search

+8 -19
View File
@@ -5,6 +5,7 @@ from pathlib import Path
from common import ROOT, COMMIT, CPUS, ProbeError, stamp, sha256, write_json, run_command, first_errors, classify
from source_fetch import fetch, verify
from source_audit import inventory
from source_resolution import load_source_contract, validate_source_contract
from generate import make_target, asset_inventory
from artifacts import inspect_elf, inspect_apk
@@ -93,14 +94,6 @@ def new_result(cpu:str,profiles:list[dict],reason:str='Not started')->tuple[dict
'desktop_target':False,'shims':False,'runtime':'NOT_RUN',
'profiles':[blocked_row(p,reason) for p in profiles]},out)
def extra_paths()->dict:
d=json.loads((ROOT/'config/extra-paths.json').read_text())
for key in ('source_paths','library_paths'):
if not isinstance(d.get(key),list) or not all(isinstance(s,str) for s in d[key]):
raise ProbeError('extra-paths.json must contain string arrays')
d[key]=[str((ROOT/p).resolve()) if not Path(p).is_absolute() else str(Path(p).resolve()) for p in d[key]]
return d
def tool_versions(out:Path)->dict:
commands={'castle':['castle-engine','--version'],'fpc':['fpc','-iV'],'java':['java','-version'],
'adb':['adb','version']}
@@ -135,10 +128,10 @@ def build_local(a:argparse.Namespace,profiles:list[dict])->int:
if not shutil.which('castle-engine'):
for r in result['profiles']:r['compile_link']['reason']='castle-engine not installed; no Android compilation attempted'
return finalize(result,out)
source=ROOT/'vendor/kam_remake';audit=None;source_error='';assets=[]
source=ROOT/'vendor/kam_remake';audit=None;validated=None;assets=[]
need_source=any(p['units'] for p in profiles)
try:
extras=extra_paths()
contract=load_source_contract()
assets=asset_inventory(Path(a.assets),a.asset_path) if a.assets else []
result['asset_count']=len(assets)
if need_source:
@@ -147,13 +140,10 @@ def build_local(a:argparse.Namespace,profiles:list[dict])->int:
else:receipt=fetch(source)
write_json(out/'source-receipt.json',receipt)
audit=inventory(source);write_json(out/'source-inventory.json',audit)
for path in extras['source_paths']:
for p in Path(path).rglob('*.pas'):
if p.stem.casefold() in audit['units']:
raise ProbeError('Extra path shadows original unit '+p.stem+'; no shims allowed')
validated=validate_source_contract(contract,source,receipt,audit)
except (ProbeError,OSError,ValueError,KeyError) as e:
source_error=str(e);extras={'source_paths':[],'library_paths':[]}
result['source_or_inputs_error']=source_error
result['source_or_inputs_error']=str(e)
return finalize(result,out)
work=ROOT/'build'/result['run_id'];work.mkdir(parents=True)
dist=ROOT/'dist'/result['run_id'];dist.mkdir(parents=True)
package_index=[]
@@ -162,14 +152,13 @@ def build_local(a:argparse.Namespace,profiles:list[dict])->int:
print(f"[{idx+1}/{len(profiles)}] Android {a.cpu}: {ident}",flush=True)
try:
if profile['units']:
if source_error:raise ProbeError(source_error)
missing=[u for u in profile['units'] if u.casefold() not in audit['units']]
if missing:raise ProbeError('Missing required original source units: '+', '.join(missing))
# Resources only enter APKs when explicitly requested. The platform baseline remains independent.
pack=profile['package'] or a.package_all
use_assets=bool(a.assets) and pack and ident=='platform'
description=make_target(project,profile,a.cpu,result['run_id'],source if profile['units'] else None,
extras if profile['units'] else {'source_paths':[],'library_paths':[]},
validated if profile['units'] else None,
Path(a.assets) if use_assets else None,assets if use_assets else [])
row['target']=description
evidence=out/ident;evidence.mkdir()
@@ -225,7 +214,7 @@ def build_local(a:argparse.Namespace,profiles:list[dict])->int:
else:row['compile_link']={'status':'BLOCKED','reason':str(e)}
finally:
write_json(out/'result-in-progress.json',result)
if need_source and not source_error:
if need_source:
try:verify(source)
except ProbeError as e:
result['source_modified_during_build']=str(e)