17db96d56Sopenharmony_ci"""
27db96d56Sopenharmony_ciProvides .props file.
37db96d56Sopenharmony_ci"""
47db96d56Sopenharmony_ci
57db96d56Sopenharmony_ciimport os
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_cifrom .constants import *
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ci__all__ = ["get_props_layout"]
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ciPYTHON_PROPS_NAME = "python.props"
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_ciPROPS_DATA = {
147db96d56Sopenharmony_ci    "PYTHON_TAG": VER_DOT,
157db96d56Sopenharmony_ci    "PYTHON_VERSION": os.getenv("PYTHON_NUSPEC_VERSION"),
167db96d56Sopenharmony_ci    "PYTHON_PLATFORM": os.getenv("PYTHON_PROPS_PLATFORM"),
177db96d56Sopenharmony_ci    "PYTHON_TARGET": "",
187db96d56Sopenharmony_ci}
197db96d56Sopenharmony_ci
207db96d56Sopenharmony_ciif not PROPS_DATA["PYTHON_VERSION"]:
217db96d56Sopenharmony_ci    PROPS_DATA["PYTHON_VERSION"] = "{}.{}{}{}".format(
227db96d56Sopenharmony_ci        VER_DOT, VER_MICRO, "-" if VER_SUFFIX else "", VER_SUFFIX
237db96d56Sopenharmony_ci    )
247db96d56Sopenharmony_ci
257db96d56Sopenharmony_ciPROPS_DATA["PYTHON_TARGET"] = "_GetPythonRuntimeFilesDependsOn{}{}_{}".format(
267db96d56Sopenharmony_ci    VER_MAJOR, VER_MINOR, PROPS_DATA["PYTHON_PLATFORM"]
277db96d56Sopenharmony_ci)
287db96d56Sopenharmony_ci
297db96d56Sopenharmony_ciPROPS_TEMPLATE = r"""<?xml version="1.0" encoding="utf-8"?>
307db96d56Sopenharmony_ci<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
317db96d56Sopenharmony_ci  <PropertyGroup Condition="$(Platform) == '{PYTHON_PLATFORM}'">
327db96d56Sopenharmony_ci    <PythonHome Condition="$(PythonHome) == ''">$([System.IO.Path]::GetFullPath("$(MSBuildThisFileDirectory)\..\..\tools"))</PythonHome>
337db96d56Sopenharmony_ci    <PythonInclude>$(PythonHome)\include</PythonInclude>
347db96d56Sopenharmony_ci    <PythonLibs>$(PythonHome)\libs</PythonLibs>
357db96d56Sopenharmony_ci    <PythonTag>{PYTHON_TAG}</PythonTag>
367db96d56Sopenharmony_ci    <PythonVersion>{PYTHON_VERSION}</PythonVersion>
377db96d56Sopenharmony_ci
387db96d56Sopenharmony_ci    <IncludePythonExe Condition="$(IncludePythonExe) == ''">true</IncludePythonExe>
397db96d56Sopenharmony_ci    <IncludeDistutils Condition="$(IncludeDistutils) == ''">false</IncludeDistutils>
407db96d56Sopenharmony_ci    <IncludeLib2To3 Condition="$(IncludeLib2To3) == ''">false</IncludeLib2To3>
417db96d56Sopenharmony_ci    <IncludeVEnv Condition="$(IncludeVEnv) == ''">false</IncludeVEnv>
427db96d56Sopenharmony_ci
437db96d56Sopenharmony_ci    <GetPythonRuntimeFilesDependsOn>{PYTHON_TARGET};$(GetPythonRuntimeFilesDependsOn)</GetPythonRuntimeFilesDependsOn>
447db96d56Sopenharmony_ci  </PropertyGroup>
457db96d56Sopenharmony_ci
467db96d56Sopenharmony_ci  <ItemDefinitionGroup Condition="$(Platform) == '{PYTHON_PLATFORM}'">
477db96d56Sopenharmony_ci    <ClCompile>
487db96d56Sopenharmony_ci      <AdditionalIncludeDirectories>$(PythonInclude);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
497db96d56Sopenharmony_ci      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
507db96d56Sopenharmony_ci    </ClCompile>
517db96d56Sopenharmony_ci    <Link>
527db96d56Sopenharmony_ci      <AdditionalLibraryDirectories>$(PythonLibs);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
537db96d56Sopenharmony_ci    </Link>
547db96d56Sopenharmony_ci  </ItemDefinitionGroup>
557db96d56Sopenharmony_ci
567db96d56Sopenharmony_ci  <Target Name="GetPythonRuntimeFiles" Returns="@(PythonRuntime)" DependsOnTargets="$(GetPythonRuntimeFilesDependsOn)" />
577db96d56Sopenharmony_ci
587db96d56Sopenharmony_ci  <Target Name="{PYTHON_TARGET}" Returns="@(PythonRuntime)">
597db96d56Sopenharmony_ci    <ItemGroup>
607db96d56Sopenharmony_ci      <_PythonRuntimeExe Include="$(PythonHome)\python*.dll" />
617db96d56Sopenharmony_ci      <_PythonRuntimeExe Include="$(PythonHome)\python*.exe" Condition="$(IncludePythonExe) == 'true'" />
627db96d56Sopenharmony_ci      <_PythonRuntimeExe>
637db96d56Sopenharmony_ci        <Link>%(Filename)%(Extension)</Link>
647db96d56Sopenharmony_ci      </_PythonRuntimeExe>
657db96d56Sopenharmony_ci      <_PythonRuntimeDlls Include="$(PythonHome)\DLLs\*.pyd" />
667db96d56Sopenharmony_ci      <_PythonRuntimeDlls Include="$(PythonHome)\DLLs\*.dll" />
677db96d56Sopenharmony_ci      <_PythonRuntimeDlls>
687db96d56Sopenharmony_ci        <Link>DLLs\%(Filename)%(Extension)</Link>
697db96d56Sopenharmony_ci      </_PythonRuntimeDlls>
707db96d56Sopenharmony_ci      <_PythonRuntimeLib Include="$(PythonHome)\Lib\**\*" Exclude="$(PythonHome)\Lib\**\*.pyc;$(PythonHome)\Lib\site-packages\**\*" />
717db96d56Sopenharmony_ci      <_PythonRuntimeLib Remove="$(PythonHome)\Lib\distutils\**\*" Condition="$(IncludeDistutils) != 'true'" />
727db96d56Sopenharmony_ci      <_PythonRuntimeLib Remove="$(PythonHome)\Lib\lib2to3\**\*" Condition="$(IncludeLib2To3) != 'true'" />
737db96d56Sopenharmony_ci      <_PythonRuntimeLib Remove="$(PythonHome)\Lib\ensurepip\**\*" Condition="$(IncludeVEnv) != 'true'" />
747db96d56Sopenharmony_ci      <_PythonRuntimeLib Remove="$(PythonHome)\Lib\venv\**\*" Condition="$(IncludeVEnv) != 'true'" />
757db96d56Sopenharmony_ci      <_PythonRuntimeLib>
767db96d56Sopenharmony_ci        <Link>Lib\%(RecursiveDir)%(Filename)%(Extension)</Link>
777db96d56Sopenharmony_ci      </_PythonRuntimeLib>
787db96d56Sopenharmony_ci      <PythonRuntime Include="@(_PythonRuntimeExe);@(_PythonRuntimeDlls);@(_PythonRuntimeLib)" />
797db96d56Sopenharmony_ci    </ItemGroup>
807db96d56Sopenharmony_ci
817db96d56Sopenharmony_ci    <Message Importance="low" Text="Collected Python runtime from $(PythonHome):%0D%0A@(PythonRuntime->'  %(Link)','%0D%0A')" />
827db96d56Sopenharmony_ci  </Target>
837db96d56Sopenharmony_ci</Project>
847db96d56Sopenharmony_ci"""
857db96d56Sopenharmony_ci
867db96d56Sopenharmony_ci
877db96d56Sopenharmony_cidef get_props_layout(ns):
887db96d56Sopenharmony_ci    if ns.include_all or ns.include_props:
897db96d56Sopenharmony_ci        # TODO: Filter contents of props file according to included/excluded items
907db96d56Sopenharmony_ci        d = dict(PROPS_DATA)
917db96d56Sopenharmony_ci        if not d.get("PYTHON_PLATFORM"):
927db96d56Sopenharmony_ci            d["PYTHON_PLATFORM"] = {
937db96d56Sopenharmony_ci                "win32": "Win32",
947db96d56Sopenharmony_ci                "amd64": "X64",
957db96d56Sopenharmony_ci                "arm32": "ARM",
967db96d56Sopenharmony_ci                "arm64": "ARM64",
977db96d56Sopenharmony_ci            }[ns.arch]
987db96d56Sopenharmony_ci        props = PROPS_TEMPLATE.format_map(d)
997db96d56Sopenharmony_ci        yield "python.props", ("python.props", props.encode("utf-8"))
100