| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- # -*- coding: utf-8 -*-
- """
- Next Generation building.py with minimal modifications.
- This file shows how to integrate the new OOP system with minimal changes to building.py.
- The actual implementation would modify the original building.py file.
- """
- # Import everything from original building.py
- import sys
- import os
- # Add parent directory to path to import original building
- sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
- from building import *
- # Import new OOP modules
- from ng.adapter import (
- init_build_context,
- inject_environment_methods,
- load_rtconfig as ng_load_rtconfig,
- GenerateProject as ng_GenerateProject
- )
- # Override PrepareBuilding to integrate new system
- _original_PrepareBuilding = PrepareBuilding
- def PrepareBuilding(env, root_directory, has_libcpu=False, remove_components=[]):
- """
- Enhanced PrepareBuilding that integrates the new OOP system.
-
- This function wraps the original PrepareBuilding and adds OOP functionality.
- """
- # Initialize new build context
- context = init_build_context(root_directory)
-
- # Call original PrepareBuilding
- result = _original_PrepareBuilding(env, root_directory, has_libcpu, remove_components)
-
- # Inject new methods into environment
- inject_environment_methods(env)
-
- # Load configuration into new system
- ng_load_rtconfig('rtconfig.h')
-
- # Store context in environment for access
- env['_BuildContext'] = context
-
- return result
- # Override DefineGroup to use new implementation
- _original_DefineGroup = DefineGroup
- def DefineGroup(name, src, depend, **parameters):
- """
- Enhanced DefineGroup that uses the new OOP implementation.
-
- This maintains backward compatibility while using the new system internally.
- """
- # Get environment from global Env
- global Env
- if Env and hasattr(Env, 'DefineGroup'):
- # Use new method if available
- return Env.DefineGroup(name, src, depend, **parameters)
- else:
- # Fallback to original
- return _original_DefineGroup(name, src, depend, **parameters)
- # Override GetDepend to use new implementation
- _original_GetDepend = GetDepend
- def GetDepend(depend):
- """
- Enhanced GetDepend that uses the new OOP implementation.
- """
- global Env
- if Env and hasattr(Env, 'GetDepend'):
- # Use new method if available
- return Env.GetDepend(depend)
- else:
- # Fallback to original
- return _original_GetDepend(depend)
- # Override DoBuilding to integrate project generation
- _original_DoBuilding = DoBuilding
- def DoBuilding(target, objects):
- """
- Enhanced DoBuilding that integrates new project generation.
- """
- # Call original DoBuilding
- _original_DoBuilding(target, objects)
-
- # Handle project generation with new system
- if GetOption('target'):
- target_name = GetOption('target')
- global Env, Projects
-
- # Use new generator if available
- try:
- ng_GenerateProject(target_name, Env, Projects)
- except Exception as e:
- print(f"Falling back to original generator: {e}")
- # Call original GenTargetProject
- from building import GenTargetProject
- GenTargetProject(Projects, program=target)
- # Export enhanced functions
- __all__ = ['PrepareBuilding', 'DefineGroup', 'GetDepend', 'DoBuilding'] + \
- [name for name in dir(sys.modules['building']) if not name.startswith('_')]
|