|
472 | 472 | """ |
473 | 473 |
|
474 | 474 |
|
| 475 | +# Ran as module from SConstruct |
| 476 | +from SCons.Script import Glob |
| 477 | +from SCons.Builder import Builder |
| 478 | + |
| 479 | +def create_cppscript_target(env, sources, cppscript_env, *args, **kwargs): |
| 480 | + if not 'CppScript' in env['BUILDERS'].keys(): |
| 481 | + env.Append(BUILDERS={'CppScript' : CppScriptBuilder()}) |
| 482 | + |
| 483 | + return env.CppScript(sources, cppscript_env, *args, **kwargs) |
| 484 | + |
| 485 | +class CppScriptBuilder(): |
| 486 | + def __call__(self, env, source, call_args, cwd = os.getcwd(), *args, **kwargs): |
| 487 | + cppscript_env, *other = call_args |
| 488 | + # Convert scons variables to cppscript's env |
| 489 | + cppscript_env = { |
| 490 | + 'header_name' : cppscript_env['header_name'], |
| 491 | + 'header_dir' : resolve_path(str(cppscript_env['header_dir']), cwd), |
| 492 | + 'gen_dir' : resolve_path(str(cppscript_env['gen_dir']), cwd), |
| 493 | + 'compile_defs' : {f'{i[0]}={i[1]}' if type(i) is tuple else str(i) for i in cppscript_env.get('compile_defs', [])}, |
| 494 | + 'include_paths' : {resolve_path(str(i), cwd) for i in [cppscript_env['header_dir']] + cppscript_env.get('include_paths', [])}, |
| 495 | + 'auto_methods' : cppscript_env['auto_methods'], |
| 496 | + 'code_format' : code_format_godot_cpp() |
| 497 | + if os.getenv("CPPSCRIPT_NO_CONSTEXPR_CHECKS", False) |
| 498 | + else code_format_cppscript_constexr_checks() |
| 499 | + } |
| 500 | + env['cppscript_env'] = cppscript_env |
| 501 | + |
| 502 | + |
| 503 | + # Generate embedded headers once |
| 504 | + header_path = cppscript_env['header_dir'] |
| 505 | + |
| 506 | + bindings = os.path.join(header_path, 'cppscript_bindings.h') |
| 507 | + defs = os.path.join(header_path, 'cppscript_defs.h') |
| 508 | + godotcpp = os.path.join(header_path, cppscript_env['header_name']) |
| 509 | + def generate_emitter(target, source, env): |
| 510 | + generated = [env.File(bindings), env.File(defs), env.File(godotcpp)] |
| 511 | + env.NoCache(generated) |
| 512 | + return generated, source |
| 513 | + |
| 514 | + def generate(target, source, env): |
| 515 | + with open(bindings, 'w') as file: |
| 516 | + file.write(CPPSCRIPT_BINDINGS_H) |
| 517 | + with open(defs, 'w') as file: |
| 518 | + file.write(CPPSCRIPT_DEFS_H) |
| 519 | + with open(godotcpp, 'w') as file: |
| 520 | + file.write(cppscript_env['code_format'].CPPSCRIPT_BODY.format(cppscript_env['header_name'].replace(' ', '_').replace('.', '_').upper())) |
| 521 | + |
| 522 | + def generate_header_emitter(target, source, env): |
| 523 | + generated = [env.File(filename_to_gen_filename(str(i), env['cppscript_env'])) for i in source] |
| 524 | + |
| 525 | + env.NoCached(generated) |
| 526 | + # To avoid generated sources deletion and re-parsing |
| 527 | + env.Precious(generated) |
| 528 | + |
| 529 | + return generated, source |
| 530 | + |
| 531 | + generator = Builder(action=generate, emitter=generate_emitter)(env) |
| 532 | + builder = Builder(action=generate_header_scons, emitter=generate_header_emitter) \ |
| 533 | + (env, source=source, *other, *args, **kwargs) |
| 534 | + #env.Depends(builder, generator) |
| 535 | + |
| 536 | + return builder |
| 537 | + |
| 538 | + |
| 539 | +def GlobRecursive(path, pattern, **kwargs): |
| 540 | + found = [] |
| 541 | + for root, dirs, files in os.walk(path): |
| 542 | + if not os.path.basename(root).startswith('.'): |
| 543 | + found += Glob(root + '/' + pattern, **kwargs) |
| 544 | + else: |
| 545 | + dirs[:] = [] |
| 546 | + |
| 547 | + return found |
| 548 | + |
| 549 | + |
475 | 550 | from clang.cindex import Index, TranslationUnit, CursorKind, TokenKind, AccessSpecifier |
476 | 551 | import os, sys, json, hashlib, shutil |
477 | 552 |
|
@@ -606,79 +681,6 @@ def expand_property_info_list(cls, args): |
606 | 681 |
|
607 | 682 | ################### |
608 | 683 |
|
609 | | -if __name__ != '__main__': |
610 | | - # Ran as module from SConstruct |
611 | | - |
612 | | - from SCons.Script import Glob |
613 | | - from SCons.Builder import Builder |
614 | | - |
615 | | - def create_cppscript_target(env, sources, cppscript_env, *args, **kwargs): |
616 | | - if not 'CppScript' in env['BUILDERS'].keys(): |
617 | | - env.Append(BUILDERS={'CppScript' : CppScriptBuilder()}) |
618 | | - |
619 | | - return env.CppScript(sources, cppscript_env, *args, **kwargs) |
620 | | - |
621 | | - class CppScriptBuilder(): |
622 | | - def __call__(self, env, source, call_args, cwd = os.getcwd(), *args, **kwargs): |
623 | | - cppscript_env, *other = call_args |
624 | | - # Convert scons variables to cppscript's env |
625 | | - cppscript_env = { |
626 | | - 'header_name' : cppscript_env['header_name'], |
627 | | - 'header_dir' : resolve_path(str(cppscript_env['header_dir']), cwd), |
628 | | - 'gen_dir' : resolve_path(str(cppscript_env['gen_dir']), cwd), |
629 | | - 'compile_defs' : {f'{i[0]}={i[1]}' if type(i) is tuple else str(i) for i in cppscript_env.get('compile_defs', [])}, |
630 | | - 'include_paths' : {resolve_path(str(i), cwd) for i in [cppscript_env['header_dir']] + cppscript_env.get('include_paths', [])}, |
631 | | - 'auto_methods' : cppscript_env['auto_methods'], |
632 | | - 'code_format' : code_format_godot_cpp() |
633 | | - if os.getenv("CPPSCRIPT_NO_CONSTEXPR_CHECKS", False) |
634 | | - else code_format_cppscript_constexr_checks() |
635 | | - } |
636 | | - env['cppscript_env'] = cppscript_env |
637 | | - |
638 | | - |
639 | | - # Generate embedded headers once |
640 | | - header_path = cppscript_env['header_dir'] |
641 | | - |
642 | | - bindings = os.path.join(header_path, 'cppscript_bindings.h') |
643 | | - defs = os.path.join(header_path, 'cppscript_defs.h') |
644 | | - godotcpp = os.path.join(header_path, cppscript_env['header_name']) |
645 | | - def generate_emitter(target, source, env): |
646 | | - return target + [env.File(bindings), env.File(defs), env.File(godotcpp)], source |
647 | | - |
648 | | - def generate(target, source, env): |
649 | | - with open(bindings, 'w') as file: |
650 | | - file.write(CPPSCRIPT_BINDINGS_H) |
651 | | - with open(defs, 'w') as file: |
652 | | - file.write(CPPSCRIPT_DEFS_H) |
653 | | - with open(godotcpp, 'w') as file: |
654 | | - file.write(cppscript_env['code_format'].CPPSCRIPT_BODY.format(cppscript_env['header_name'].replace(' ', '_').replace('.', '_').upper())) |
655 | | - |
656 | | - def generate_header_emitter(target, source, env): |
657 | | - generated = [env.File(filename_to_gen_filename(str(i), env['cppscript_env'])) for i in source] |
658 | | - |
659 | | - # To avoid generated sources deletion and re-parsing |
660 | | - env.Precious(generated) |
661 | | - |
662 | | - return generated, source |
663 | | - |
664 | | - generator = Builder(action=generate, emitter=generate_emitter)(env) |
665 | | - builder = Builder(action=generate_header_scons, emitter=generate_header_emitter) \ |
666 | | - (env, source=source, *other, *args, **kwargs) |
667 | | - #env.Depends(builder, generator) |
668 | | - |
669 | | - return builder |
670 | | - |
671 | | - |
672 | | - def GlobRecursive(path, pattern, **kwargs): |
673 | | - found = [] |
674 | | - for root, dirs, files in os.walk(path): |
675 | | - if not os.path.basename(root).startswith('.'): |
676 | | - found += Glob(root + '/' + pattern, **kwargs) |
677 | | - else: |
678 | | - dirs[:] = [] |
679 | | - |
680 | | - return found |
681 | | - |
682 | 684 | CLASS_KEYWORDS = [ |
683 | 685 | 'GCLASS', |
684 | 686 | 'GVIRTUAL_CLASS', |
|
0 commit comments