# Put the Python "system" include dir at the end, so that
# any local include dirs take precedence.
- self.include_dirs.append(py_include)
+ self.include_dirs.extend(py_include.split(os.path.pathsep))
if plat_py_include != py_include:
- self.include_dirs.append(plat_py_include)
+ self.include_dirs.extend(
+ plat_py_include.split(os.path.pathsep))
self.ensure_string_list('libraries')
self.ensure_string_list('link_objects')
project_base = os.path.abspath(os.environ["_PYTHON_PROJECT_BASE"])
else:
project_base = os.path.dirname(os.path.abspath(sys.executable))
-if (os.name == 'nt' and
- project_base.lower().endswith(('\\pcbuild\\win32', '\\pcbuild\\amd64'))):
- project_base = os.path.dirname(os.path.dirname(project_base))
+
# python_build: (Boolean) if true, we're either building Python or
# building an extension with an un-installed Python, so we use
if os.path.isfile(os.path.join(d, "Modules", fn)):
return True
return False
+
_sys_home = getattr(sys, '_home', None)
-if (_sys_home and os.name == 'nt' and
- _sys_home.lower().endswith(('\\pcbuild\\win32', '\\pcbuild\\amd64'))):
- _sys_home = os.path.dirname(os.path.dirname(_sys_home))
+
+if os.name == 'nt':
+ def _fix_pcbuild(d):
+ if d and os.path.normcase(d).startswith(
+ os.path.normcase(os.path.join(PREFIX, "PCbuild"))):
+ return PREFIX
+ return d
+ project_base = _fix_pcbuild(project_base)
+ _sys_home = _fix_pcbuild(_sys_home)
+
def _python_build():
if _sys_home:
return _is_python_source_dir(_sys_home)
return _is_python_source_dir(project_base)
+
python_build = _python_build()
+
# Calculate the build qualifier flags if they are defined. Adding the flags
# to the include and lib directories only makes sense for an installation, not
# an in-source build.
python_dir = 'python' + get_python_version() + build_flags
return os.path.join(prefix, "include", python_dir)
elif os.name == "nt":
+ if python_build:
+ # Include both the include and PC dir to ensure we can find
+ # pyconfig.h
+ return (os.path.join(prefix, "include") + os.path.pathsep +
+ os.path.join(prefix, "PC"))
return os.path.join(prefix, "include")
else:
raise DistutilsPlatformError(
cmd.finalize_options()
py_include = sysconfig.get_python_inc()
- self.assertIn(py_include, cmd.include_dirs)
+ for p in py_include.split(os.path.pathsep):
+ self.assertIn(p, cmd.include_dirs)
plat_py_include = sysconfig.get_python_inc(plat_specific=1)
- self.assertIn(plat_py_include, cmd.include_dirs)
+ for p in plat_py_include.split(os.path.pathsep):
+ self.assertIn(p, cmd.include_dirs)
# make sure cmd.libraries is turned into a list
# if it's a string
return False
_sys_home = getattr(sys, '_home', None)
-if (_sys_home and os.name == 'nt' and
- _sys_home.lower().endswith(('\\pcbuild\\win32', '\\pcbuild\\amd64'))):
- _sys_home = os.path.dirname(os.path.dirname(_sys_home))
+
+if os.name == 'nt':
+ def _fix_pcbuild(d):
+ if d and os.path.normcase(d).startswith(
+ os.path.normcase(os.path.join(_PREFIX, "PCbuild"))):
+ return _PREFIX
+ return d
+ _PROJECT_BASE = _fix_pcbuild(_PROJECT_BASE)
+ _sys_home = _fix_pcbuild(_sys_home)
+
def is_python_build(check_home=False):
if check_home and _sys_home:
return _is_python_source_dir(_sys_home)
--- /dev/null
+Fix sysconfig detection of the source directory and distutils handling of
+pyconfig.h during PGO profiling
<EmbeddedResource Include="*.wxl" />
</ItemGroup>
<ItemGroup>
- <InstallFiles Include="$(PySourcePath)include\**\*.h">
+ <InstallFiles Include="$(PySourcePath)include\**\*.h"
+ Exclude="$(PySourcePath)include\pyconfig.h">
<SourceBase>$(PySourcePath)</SourceBase>
<Source>!(bindpath.src)</Source>
<TargetBase>$(PySourcePath)</TargetBase>