Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
334b4a34
Commit
334b4a34
authored
Sep 09, 2015
by
Larry Hastings
Browse files
Options
Browse Files
Download
Plain Diff
Merge from 3.5.
parents
1030c10c
52e40cd9
Changes
15
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
178 additions
and
54 deletions
+178
-54
.hgtags
.hgtags
+1
-0
Lib/distutils/_msvccompiler.py
Lib/distutils/_msvccompiler.py
+63
-13
Lib/distutils/tests/test_msvccompiler.py
Lib/distutils/tests/test_msvccompiler.py
+56
-5
Misc/NEWS
Misc/NEWS
+23
-3
Modules/timemodule.c
Modules/timemodule.c
+7
-13
PCbuild/pyproject.props
PCbuild/pyproject.props
+3
-5
PCbuild/tcl.vcxproj
PCbuild/tcl.vcxproj
+2
-2
PCbuild/tix.vcxproj
PCbuild/tix.vcxproj
+2
-2
PCbuild/tk.vcxproj
PCbuild/tk.vcxproj
+2
-2
Tools/msi/build.bat
Tools/msi/build.bat
+4
-4
Tools/msi/buildrelease.bat
Tools/msi/buildrelease.bat
+1
-1
Tools/msi/exe/exe_files.wxs
Tools/msi/exe/exe_files.wxs
+3
-0
Tools/msi/make_zip.proj
Tools/msi/make_zip.proj
+2
-1
Tools/msi/make_zip.py
Tools/msi/make_zip.py
+6
-3
Tools/msi/msi.props
Tools/msi/msi.props
+3
-0
No files found.
.hgtags
View file @
334b4a34
...
...
@@ -155,3 +155,4 @@ c0d64105463581f85d0e368e8d6e59b7fd8f12b1 v3.5.0b4
1a58b1227501e046eee13d90f113417b60843301 v3.5.0rc1
cc15d736d860303b9da90d43cd32db39bab048df v3.5.0rc2
66ed52375df802f9d0a34480daaa8ce79fc41313 v3.5.0rc3
2d033fedfa7f1e325fd14ccdaa9cb42155da206f v3.5.0rc4
Lib/distutils/_msvccompiler.py
View file @
334b4a34
...
...
@@ -14,6 +14,8 @@ for older versions in distutils.msvc9compiler and distutils.msvccompiler.
# ported to VS 2015 by Steve Dower
import
os
import
shutil
import
stat
import
subprocess
from
distutils.errors
import
DistutilsExecError
,
DistutilsPlatformError
,
\
...
...
@@ -25,7 +27,7 @@ from distutils.util import get_platform
import
winreg
from
itertools
import
count
def
_find_vcvarsall
():
def
_find_vcvarsall
(
plat_spec
):
with
winreg
.
OpenKeyEx
(
winreg
.
HKEY_LOCAL_MACHINE
,
r"Software\
Mic
rosoft\
Visu
alStudio\
SxS
\VC7"
,
...
...
@@ -33,7 +35,7 @@ def _find_vcvarsall():
)
as
key
:
if
not
key
:
log
.
debug
(
"Visual C++ is not registered"
)
return
None
return
None
,
None
best_version
=
0
best_dir
=
None
...
...
@@ -51,14 +53,23 @@ def _find_vcvarsall():
best_version
,
best_dir
=
version
,
vc_dir
if
not
best_version
:
log
.
debug
(
"No suitable Visual C++ version found"
)
return
None
return
None
,
None
vcvarsall
=
os
.
path
.
join
(
best_dir
,
"vcvarsall.bat"
)
if
not
os
.
path
.
isfile
(
vcvarsall
):
log
.
debug
(
"%s cannot be found"
,
vcvarsall
)
return
None
return
None
,
None
vcruntime
=
None
vcruntime_spec
=
_VCVARS_PLAT_TO_VCRUNTIME_REDIST
.
get
(
plat_spec
)
if
vcruntime_spec
:
vcruntime
=
os
.
path
.
join
(
best_dir
,
vcruntime_spec
.
format
(
best_version
))
if
not
os
.
path
.
isfile
(
vcruntime
):
log
.
debug
(
"%s cannot be found"
,
vcruntime
)
vcruntime
=
None
return
vcvarsall
return
vcvarsall
,
vcruntime
def
_get_vc_env
(
plat_spec
):
if
os
.
getenv
(
"DISTUTILS_USE_SDK"
):
...
...
@@ -67,7 +78,7 @@ def _get_vc_env(plat_spec):
for
key
,
value
in
os
.
environ
.
items
()
}
vcvarsall
=
_find_vcvarsall
(
)
vcvarsall
,
vcruntime
=
_find_vcvarsall
(
plat_spec
)
if
not
vcvarsall
:
raise
DistutilsPlatformError
(
"Unable to find vcvarsall.bat"
)
...
...
@@ -83,13 +94,17 @@ def _get_vc_env(plat_spec):
raise
DistutilsPlatformError
(
"Error executing {}"
.
format
(
exc
.
cmd
))
return
{
env
=
{
key
.
lower
():
value
for
key
,
_
,
value
in
(
line
.
partition
(
'='
)
for
line
in
out
.
splitlines
())
if
key
and
value
}
if
vcruntime
:
env
[
'py_vcruntime_redist'
]
=
vcruntime
return
env
def
_find_exe
(
exe
,
paths
=
None
):
"""Return path to an MSVC executable program.
...
...
@@ -115,6 +130,20 @@ PLAT_TO_VCVARS = {
'win-amd64'
:
'amd64'
,
}
# A map keyed by get_platform() return values to the file under
# the VC install directory containing the vcruntime redistributable.
_VCVARS_PLAT_TO_VCRUNTIME_REDIST
=
{
'x86'
:
'redist
\
\
x86
\
\
Microsoft.VC{0}0.CRT
\
\
vcruntime{0}0.dll'
,
'amd64'
:
'redist
\
\
x64
\
\
Microsoft.VC{0}0.CRT
\
\
vcruntime{0}0.dll'
,
'x86_amd64'
:
'redist
\
\
x64
\
\
Microsoft.VC{0}0.CRT
\
\
vcruntime{0}0.dll'
,
}
# A set containing the DLLs that are guaranteed to be available for
# all micro versions of this Python version. Known extension
# dependencies that are not in this set will be copied to the output
# path.
_BUNDLED_DLLS
=
frozenset
([
'vcruntime140.dll'
])
class
MSVCCompiler
(
CCompiler
)
:
"""Concrete class that implements an interface to Microsoft Visual C++,
as defined by the CCompiler abstract class."""
...
...
@@ -189,6 +218,7 @@ class MSVCCompiler(CCompiler) :
self
.
rc
=
_find_exe
(
"rc.exe"
,
paths
)
# resource compiler
self
.
mc
=
_find_exe
(
"mc.exe"
,
paths
)
# message compiler
self
.
mt
=
_find_exe
(
"mt.exe"
,
paths
)
# message compiler
self
.
_vcruntime_redist
=
vc_env
.
get
(
'py_vcruntime_redist'
,
''
)
for
dir
in
vc_env
.
get
(
'include'
,
''
).
split
(
os
.
pathsep
):
if
dir
:
...
...
@@ -199,20 +229,26 @@ class MSVCCompiler(CCompiler) :
self
.
add_library_dir
(
dir
)
self
.
preprocess_options
=
None
# Use /MT[d] to build statically, then switch from libucrt[d].lib to ucrt[d].lib
# If vcruntime_redist is available, link against it dynamically. Otherwise,
# use /MT[d] to build statically, then switch from libucrt[d].lib to ucrt[d].lib
# later to dynamically link to ucrtbase but not vcruntime.
self
.
compile_options
=
[
'/nologo'
,
'/Ox'
,
'/
MT'
,
'/
W3'
,
'/GL'
,
'/DNDEBUG'
'/nologo'
,
'/Ox'
,
'/W3'
,
'/GL'
,
'/DNDEBUG'
]
self
.
compile_options
.
append
(
'/MD'
if
self
.
_vcruntime_redist
else
'/MT'
)
self
.
compile_options_debug
=
[
'/nologo'
,
'/Od'
,
'/M
T
d'
,
'/Zi'
,
'/W3'
,
'/D_DEBUG'
'/nologo'
,
'/Od'
,
'/M
D
d'
,
'/Zi'
,
'/W3'
,
'/D_DEBUG'
]
ldflags
=
[
'/nologo'
,
'/INCREMENTAL:NO'
,
'/LTCG'
,
'/nodefaultlib:libucrt.lib'
,
'ucrt.lib'
,
'/nologo'
,
'/INCREMENTAL:NO'
,
'/LTCG'
]
if
not
self
.
_vcruntime_redist
:
ldflags
.
extend
((
'/nodefaultlib:libucrt.lib'
,
'ucrt.lib'
))
ldflags_debug
=
[
'/nologo'
,
'/INCREMENTAL:NO'
,
'/LTCG'
,
'/DEBUG:FULL'
,
'/nodefaultlib:libucrtd.lib'
,
'ucrtd.lib'
,
'/nologo'
,
'/INCREMENTAL:NO'
,
'/LTCG'
,
'/DEBUG:FULL'
]
self
.
ldflags_exe
=
[
*
ldflags
,
'/MANIFEST:EMBED,ID=1'
]
...
...
@@ -446,15 +482,29 @@ class MSVCCompiler(CCompiler) :
if
extra_postargs
:
ld_args
.
extend
(
extra_postargs
)
self
.
mkpath
(
os
.
path
.
dirname
(
output_filename
))
output_dir
=
os
.
path
.
dirname
(
os
.
path
.
abspath
(
output_filename
))
self
.
mkpath
(
output_dir
)
try
:
log
.
debug
(
'Executing "%s" %s'
,
self
.
linker
,
' '
.
join
(
ld_args
))
self
.
spawn
([
self
.
linker
]
+
ld_args
)
self
.
_copy_vcruntime
(
output_dir
)
except
DistutilsExecError
as
msg
:
raise
LinkError
(
msg
)
else
:
log
.
debug
(
"skipping %s (up-to-date)"
,
output_filename
)
def
_copy_vcruntime
(
self
,
output_dir
):
vcruntime
=
self
.
_vcruntime_redist
if
not
vcruntime
or
not
os
.
path
.
isfile
(
vcruntime
):
return
if
os
.
path
.
basename
(
vcruntime
).
lower
()
in
_BUNDLED_DLLS
:
return
log
.
debug
(
'Copying "%s"'
,
vcruntime
)
vcruntime
=
shutil
.
copy
(
vcruntime
,
output_dir
)
os
.
chmod
(
vcruntime
,
stat
.
S_IWRITE
)
def
spawn
(
self
,
cmd
):
old_path
=
os
.
getenv
(
'path'
)
try
:
...
...
Lib/distutils/tests/test_msvccompiler.py
View file @
334b4a34
...
...
@@ -16,22 +16,73 @@ class msvccompilerTestCase(support.TempdirManager,
unittest
.
TestCase
):
def
test_no_compiler
(
self
):
import
distutils._msvccompiler
as
_msvccompiler
# makes sure query_vcvarsall raises
# a DistutilsPlatformError if the compiler
# is not found
from
distutils._msvccompiler
import
_get_vc_env
def
_find_vcvarsall
():
return
None
def
_find_vcvarsall
(
plat_spec
):
return
None
,
None
import
distutils._msvccompiler
as
_msvccompiler
old_find_vcvarsall
=
_msvccompiler
.
_find_vcvarsall
_msvccompiler
.
_find_vcvarsall
=
_find_vcvarsall
try
:
self
.
assertRaises
(
DistutilsPlatformError
,
_get_vc_env
,
self
.
assertRaises
(
DistutilsPlatformError
,
_msvccompiler
.
_get_vc_env
,
'wont find this version'
)
finally
:
_msvccompiler
.
_find_vcvarsall
=
old_find_vcvarsall
def
test_compiler_options
(
self
):
import
distutils._msvccompiler
as
_msvccompiler
# suppress path to vcruntime from _find_vcvarsall to
# check that /MT is added to compile options
old_find_vcvarsall
=
_msvccompiler
.
_find_vcvarsall
def
_find_vcvarsall
(
plat_spec
):
return
old_find_vcvarsall
(
plat_spec
)[
0
],
None
_msvccompiler
.
_find_vcvarsall
=
_find_vcvarsall
try
:
compiler
=
_msvccompiler
.
MSVCCompiler
()
compiler
.
initialize
()
self
.
assertIn
(
'/MT'
,
compiler
.
compile_options
)
self
.
assertNotIn
(
'/MD'
,
compiler
.
compile_options
)
finally
:
_msvccompiler
.
_find_vcvarsall
=
old_find_vcvarsall
def
test_vcruntime_copy
(
self
):
import
distutils._msvccompiler
as
_msvccompiler
# force path to a known file - it doesn't matter
# what we copy as long as its name is not in
# _msvccompiler._BUNDLED_DLLS
old_find_vcvarsall
=
_msvccompiler
.
_find_vcvarsall
def
_find_vcvarsall
(
plat_spec
):
return
old_find_vcvarsall
(
plat_spec
)[
0
],
__file__
_msvccompiler
.
_find_vcvarsall
=
_find_vcvarsall
try
:
tempdir
=
self
.
mkdtemp
()
compiler
=
_msvccompiler
.
MSVCCompiler
()
compiler
.
initialize
()
compiler
.
_copy_vcruntime
(
tempdir
)
self
.
assertTrue
(
os
.
path
.
isfile
(
os
.
path
.
join
(
tempdir
,
os
.
path
.
basename
(
__file__
))))
finally
:
_msvccompiler
.
_find_vcvarsall
=
old_find_vcvarsall
def
test_vcruntime_skip_copy
(
self
):
import
distutils._msvccompiler
as
_msvccompiler
tempdir
=
self
.
mkdtemp
()
compiler
=
_msvccompiler
.
MSVCCompiler
()
compiler
.
initialize
()
dll
=
compiler
.
_vcruntime_redist
self
.
assertTrue
(
os
.
path
.
isfile
(
dll
))
compiler
.
_copy_vcruntime
(
tempdir
)
self
.
assertFalse
(
os
.
path
.
isfile
(
os
.
path
.
join
(
tempdir
,
os
.
path
.
basename
(
dll
))))
def
test_suite
():
return
unittest
.
makeSuite
(
msvccompilerTestCase
)
...
...
Misc/NEWS
View file @
334b4a34
...
...
@@ -98,6 +98,9 @@ Core and Builtins
Library
-------
-
Issue
#
23144
:
Make
sure
that
HTMLParser
.
feed
()
returns
all
the
data
,
even
when
convert_charrefs
is
True
.
-
Issue
#
24982
:
shutil
.
make_archive
()
with
the
"zip"
format
now
adds
entries
for
directories
(
including
empty
directories
)
in
ZIP
file
.
...
...
@@ -143,6 +146,9 @@ Library
Documentation
-------------
-
Issue
#
24952
:
Clarify
the
default
size
argument
of
stack_size
()
in
the
"threading"
and
"_thread"
modules
.
Patch
from
Mattip
.
-
Issue
#
23725
:
Overhaul
tempfile
docs
.
Note
deprecated
status
of
mktemp
.
Patch
from
Zbigniew
J
ę
drzejewski
-
Szmek
.
...
...
@@ -167,6 +173,23 @@ Build
when external libraries are not available.
What'
s
New
in
Python
3.5.0
release
candidate
4
?
===============================================
Release
date
:
2015
-
09
-
09
Library
-------
-
Issue
#
25029
:
Fixes
MemoryError
in
test_strptime
.
Build
-----
-
Issue
#
25027
:
Reverts
partial
-
static
build
options
and
adds
vcruntime140
.
dll
to
Windows
installation
.
What
's New in Python 3.5.0 release candidate 3?
===============================================
...
...
@@ -186,8 +209,6 @@ Library
-------
- Issue #24917: time_strftime() buffer over-read.
-
Issue
#
23144
:
Make
sure
that
HTMLParser
.
feed
()
returns
all
the
data
,
even
when
convert_charrefs
is
True
.
- Issue #24748: To resolve a compatibility problem found with py2exe and
pywin32, imp.load_dynamic() once again ignores previously loaded modules
...
...
@@ -197,7 +218,6 @@ Library
- Issue #24635: Fixed a bug in typing.py where isinstance([], typing.Iterable)
would return True once, then False on subsequent calls.
- Issue #24989: Fixed buffer overread in BytesIO.readline() if a position is
set beyond size. Based on patch by John Leitch.
...
...
Modules/timemodule.c
View file @
334b4a34
...
...
@@ -648,9 +648,6 @@ time_strftime(PyObject *self, PyObject *args)
* will be ahead of time...
*/
for
(
i
=
1024
;
;
i
+=
i
)
{
#if defined _MSC_VER && _MSC_VER >= 1400 && defined(__STDC_SECURE_LIB__)
int
err
;
#endif
outbuf
=
(
time_char
*
)
PyMem_Malloc
(
i
*
sizeof
(
time_char
));
if
(
outbuf
==
NULL
)
{
PyErr_NoMemory
();
...
...
@@ -660,10 +657,14 @@ time_strftime(PyObject *self, PyObject *args)
buflen
=
format_time
(
outbuf
,
i
,
fmt
,
&
buf
);
_Py_END_SUPPRESS_IPH
#if defined _MSC_VER && _MSC_VER >= 1400 && defined(__STDC_SECURE_LIB__)
err
=
errno
;
/* VisualStudio .NET 2005 does this properly */
if
(
buflen
==
0
&&
errno
==
EINVAL
)
{
PyErr_SetString
(
PyExc_ValueError
,
"Invalid format string"
);
PyMem_Free
(
outbuf
);
break
;
}
#endif
if
(
buflen
>
0
||
fmtlen
==
0
||
(
fmtlen
>
4
&&
i
>=
256
*
fmtlen
))
{
if
(
buflen
>
0
||
i
>=
256
*
fmtlen
)
{
/* If the buffer is 256 times as long as the format,
it's probably not failing for lack of room!
More likely, the format yields an empty result,
...
...
@@ -679,13 +680,6 @@ time_strftime(PyObject *self, PyObject *args)
break
;
}
PyMem_Free
(
outbuf
);
#if defined _MSC_VER && _MSC_VER >= 1400 && defined(__STDC_SECURE_LIB__)
/* VisualStudio .NET 2005 does this properly */
if
(
buflen
==
0
&&
err
==
EINVAL
)
{
PyErr_SetString
(
PyExc_ValueError
,
"Invalid format string"
);
break
;
}
#endif
}
#ifdef HAVE_WCSFTIME
PyMem_Free
(
format
);
...
...
PCbuild/pyproject.props
View file @
334b4a34
...
...
@@ -36,7 +36,7 @@
<IntrinsicFunctions>
true
</IntrinsicFunctions>
<StringPooling>
true
</StringPooling>
<ExceptionHandling></ExceptionHandling>
<RuntimeLibrary>
MultiThreaded
</RuntimeLibrary>
<RuntimeLibrary>
MultiThreaded
DLL
</RuntimeLibrary>
<FunctionLevelLinking>
true
</FunctionLevelLinking>
<WarningLevel>
Level3
</WarningLevel>
<DebugInformationFormat>
ProgramDatabase
</DebugInformationFormat>
...
...
@@ -47,7 +47,7 @@
<ClCompile
Condition=
"$(Configuration) == 'Debug'"
>
<Optimization>
Disabled
</Optimization>
<WholeProgramOptimization>
false
</WholeProgramOptimization>
<RuntimeLibrary>
MultiThreadedDebug
</RuntimeLibrary>
<RuntimeLibrary>
MultiThreadedDebug
DLL
</RuntimeLibrary>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>
$(OutDir);%(AdditionalLibraryDirectories)
</AdditionalLibraryDirectories>
...
...
@@ -57,9 +57,7 @@
<RandomizedBaseAddress>
true
</RandomizedBaseAddress>
<DataExecutionPrevention>
true
</DataExecutionPrevention>
<SuppressStartupBanner>
true
</SuppressStartupBanner>
<AdditionalDependencies
Condition=
"$(Configuration) == 'Debug'"
>
ucrtd.lib;%(AdditionalDependencies)
</AdditionalDependencies>
<AdditionalDependencies
Condition=
"$(Configuration) != 'Debug'"
>
ucrt.lib;%(AdditionalDependencies)
</AdditionalDependencies>
<IgnoreSpecificDefaultLibraries>
LIBC;libucrt.lib;libucrtd.lib;%(IgnoreSpecificDefaultLibraries)
</IgnoreSpecificDefaultLibraries>
<IgnoreSpecificDefaultLibraries>
LIBC;%(IgnoreSpecificDefaultLibraries)
</IgnoreSpecificDefaultLibraries>
<TargetMachine>
MachineX86
</TargetMachine>
<TargetMachine
Condition=
"'$(Platform)' == 'x64'"
>
MachineX64
</TargetMachine>
<ProfileGuidedDatabase
Condition=
"$(SupportPGO)"
>
$(OutDir)$(TargetName).pgd
</ProfileGuidedDatabase>
...
...
PCbuild/tcl.vcxproj
View file @
334b4a34
...
...
@@ -61,8 +61,8 @@
<Import
Project=
"$(VCTargetsPath)\Microsoft.Cpp.props"
/>
<PropertyGroup>
<TclOpts>
u
crt
</TclOpts>
<TclOpts
Condition=
"$(Configuration) == 'Debug'"
>
symbols,
u
crt
</TclOpts>
<TclOpts>
msv
crt
</TclOpts>
<TclOpts
Condition=
"$(Configuration) == 'Debug'"
>
symbols,
msv
crt
</TclOpts>
<TclDirs>
INSTALLDIR="$(OutDir.TrimEnd(`\`))" INSTALL_DIR="$(OutDir.TrimEnd(`\`))"
</TclDirs>
<DebugFlags
Condition=
"'$(Configuration)' == 'Debug'"
>
DEBUGFLAGS="-wd4456 -wd4457 -wd4458 -wd4459 -wd4996"
</DebugFlags>
<NMakeBuildCommandLine>
setlocal
...
...
PCbuild/tix.vcxproj
View file @
334b4a34
...
...
@@ -57,8 +57,8 @@
<PropertyGroup>
<TixDirs>
BUILDDIRTOP="$(BuildDirTop)" TCL_DIR="$(tclDir.TrimEnd(`\`))" TK_DIR="$(tkDir.TrimEnd(`\`))" INSTALL_DIR="$(OutDir.TrimEnd(`\`))"
</TixDirs>
<DebugFlags
Condition=
"'$(Configuration)' == 'Debug'"
>
DEBUG=1 NODEBUG=0
UCRT=1
TCL_DBGX=g TK_DBGX=g
</DebugFlags>
<DebugFlags
Condition=
"'$(Configuration)' != 'Debug'"
>
DEBUG=0 NODEBUG=1
UCRT=1
</DebugFlags>
<DebugFlags
Condition=
"'$(Configuration)' == 'Debug'"
>
DEBUG=1 NODEBUG=0 TCL_DBGX=g TK_DBGX=g
</DebugFlags>
<DebugFlags
Condition=
"'$(Configuration)' != 'Debug'"
>
DEBUG=0 NODEBUG=1
</DebugFlags>
<NMakeBuildCommandLine>
setlocal
@(ExpectedOutputs->'if not exist "%(FullPath)" goto build','
')
...
...
PCbuild/tk.vcxproj
View file @
334b4a34
...
...
@@ -60,8 +60,8 @@
<Import
Project=
"$(VCTargetsPath)\Microsoft.Cpp.props"
/>
<PropertyGroup>
<TkOpts>
u
crt
</TkOpts>
<TkOpts
Condition=
"$(Configuration) == 'Debug'"
>
symbols,
u
crt
</TkOpts>
<TkOpts>
msv
crt
</TkOpts>
<TkOpts
Condition=
"$(Configuration) == 'Debug'"
>
symbols,
msv
crt
</TkOpts>
<TkDirs>
TCLDIR="$(tclDir.TrimEnd(`\`))" INSTALLDIR="$(OutDir.TrimEnd(`\`))"
</TkDirs>
<DebugFlags
Condition=
"'$(Configuration)' == 'Debug'"
>
DEBUGFLAGS="-wd4456 -wd4457 -wd4458 -wd4459 -wd4996"
</DebugFlags>
<NMakeBuildCommandLine>
setlocal
...
...
Tools/msi/build.bat
View file @
334b4a34
...
...
@@ -22,15 +22,15 @@ if not defined BUILDX86 if not defined BUILDX64 (set BUILDX86=1) && (set BUILDX6
call
"
%PCBUILD%
env.bat"
x86
if
defined
BUILDX86
(
call
"
%PCBUILD%
build.bat"
-d
call
"
%PCBUILD%
build.bat"
-d
-e
if
errorlevel
1
goto
:eof
call
"
%PCBUILD%
build.bat"
call
"
%PCBUILD%
build.bat"
-e
if
errorlevel
1
goto
:eof
)
if
defined
BUILDX64
(
call
"
%PCBUILD%
build.bat"
-p
x64
-d
call
"
%PCBUILD%
build.bat"
-p
x64
-d
-e
if
errorlevel
1
goto
:eof
call
"
%PCBUILD%
build.bat"
-p
x64
call
"
%PCBUILD%
build.bat"
-p
x64
-e
if
errorlevel
1
goto
:eof
)
...
...
Tools/msi/buildrelease.bat
View file @
334b4a34
...
...
@@ -121,7 +121,7 @@ if not "%CERTNAME%" EQU "" (
if
not
"
%SKIPBUILD%
"
EQU
"1"
(
call
"
%PCBUILD%
build.bat"
-e -p
%BUILD_PLAT%
-d -t
%TARGET%
%CERTOPTS%
if
errorlevel
1
exit
/B
call
"
%PCBUILD%
build.bat"
-p
%BUILD_PLAT%
-t
%TARGET%
%CERTOPTS%
call
"
%PCBUILD%
build.bat"
-
e -
p
%BUILD_PLAT%
-t
%TARGET%
%CERTOPTS%
if
errorlevel
1
exit
/B
@rem
build
.bat
turns
echo
back
on
,
so
we
disable
it
again
@echo
off
...
...
Tools/msi/exe/exe_files.wxs
View file @
334b4a34
...
...
@@ -29,6 +29,9 @@
<Component
Id=
"pythonw.exe"
Directory=
"InstallDirectory"
Guid=
"$(var.PythonwExeComponentGuid)"
>
<File
Name=
"pythonw.exe"
KeyPath=
"yes"
/>
</Component>
<Component
Id=
"vcruntime140.dll"
Directory=
"InstallDirectory"
Guid=
"*"
>
<File
Name=
"vcruntime140.dll"
Source=
"!(bindpath.redist)vcruntime140.dll"
KeyPath=
"yes"
/>
</Component>
</ComponentGroup>
</Fragment>
...
...
Tools/msi/make_zip.proj
View file @
334b4a34
...
...
@@ -16,7 +16,8 @@
<TargetPath>
$(OutputPath)\en-us\$(TargetName)$(TargetExt)
</TargetPath>
<Arguments>
"$(PythonExe)" "$(MSBuildThisFileDirectory)\make_zip.py"
</Arguments>
<Arguments>
$(Arguments) -e -o "$(TargetPath)" -t "$(IntermediateOutputPath)\zip_$(ArchName)" -a $(ArchName)
</Arguments>
<Environment>
set DOC_FILENAME=python$(PythonVersion).chm
</Environment>
<Environment>
set DOC_FILENAME=python$(PythonVersion).chm
set VCREDIST_PATH=$(VS140COMNTOOLS)\..\..\VC\redist\$(Platform)\Microsoft.VC140.CRT
</Environment>
</PropertyGroup>
<Target
Name=
"_Build"
>
...
...
Tools/msi/make_zip.py
View file @
334b4a34
...
...
@@ -64,9 +64,6 @@ FULL_LAYOUT = [
('
Tools
/
', '
Tools
', '
**/*
', include_in_tools),
]
if os.getenv('
DOC_FILENAME
'):
FULL_LAYOUT.append(('
Doc
/
', '
Doc
/
build
/
htmlhelp
', os.getenv('
DOC_FILENAME
'), None))
EMBED_LAYOUT = [
('
/
', '
PCBuild
/
$
arch
', '
python
*
.
exe
', is_not_debug),
('
/
', '
PCBuild
/
$
arch
', '
*
.
pyd
', is_not_debug),
...
...
@@ -74,6 +71,12 @@ EMBED_LAYOUT = [
('
python35
.
zip
', '
Lib
', '
**/*
', include_in_lib),
]
if os.getenv('
DOC_FILENAME
'):
FULL_LAYOUT.append(('
Doc
/
', '
Doc
/
build
/
htmlhelp
', os.getenv('
DOC_FILENAME
'), None))
if os.getenv('
VCREDIST_PATH
'):
FULL_LAYOUT.append(('
/
', os.getenv('
VCREDIST_PATH
'), '
vcruntime
*
.
dll
', None))
EMBED_LAYOUT.append(('
/
', os.getenv('
VCREDIST_PATH
'), '
vcruntime
*
.
dll
', None))
def copy_to_layout(target, rel_sources):
count = 0
...
...
Tools/msi/msi.props
View file @
334b4a34
...
...
@@ -118,6 +118,9 @@
<LinkerBindInputPaths
Include=
"$(CRTRedist)"
Condition=
"'$(CRTRedist)' != ''"
>
<BindName>
redist
</BindName>
</LinkerBindInputPaths>
<LinkerBindInputPaths
Include=
"$(VS140COMNTOOLS)\..\..\VC\redist\$(Platform)\Microsoft.VC140.CRT"
>
<BindName>
redist
</BindName>
</LinkerBindInputPaths>
</ItemGroup>
<Target
Name=
"_ValidateMsiProps"
BeforeTargets=
"PrepareForBuild"
>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment