mirror of https://github.com/python/cpython
Improves support for building unofficial versions of the Windows installer.
This commit is contained in:
parent
d5963e615d
commit
c4b7600b90
|
@ -4,17 +4,28 @@
|
||||||
rem This script is intended for building official releases of Python.
|
rem This script is intended for building official releases of Python.
|
||||||
rem To use it to build alternative releases, you should clone this file
|
rem To use it to build alternative releases, you should clone this file
|
||||||
rem and modify the following three URIs.
|
rem and modify the following three URIs.
|
||||||
rem
|
|
||||||
rem The first two will ensure that your release can be installed
|
|
||||||
rem alongside an official Python release, while the second specifies
|
|
||||||
rem the URL that will be used to download installation files. The
|
|
||||||
rem files available from this URL *will* conflict with your installer.
|
|
||||||
rem Trust me, you don't want them, even if it seems like a good idea.
|
|
||||||
|
|
||||||
set RELEASE_URI_X86=http://www.python.org/win32
|
rem These two will ensure that your release can be installed
|
||||||
set RELEASE_URI_X64=http://www.python.org/amd64
|
rem alongside an official Python release, by modifying the GUIDs used
|
||||||
set DOWNLOAD_URL_BASE=https://www.python.org/ftp/python
|
rem for all components.
|
||||||
set DOWNLOAD_URL=
|
rem
|
||||||
|
rem The following substitutions will be applied to the release URI:
|
||||||
|
rem Variable Description Example
|
||||||
|
rem {arch} architecture amd64, win32
|
||||||
|
set RELEASE_URI=http://www.python.org/{arch}
|
||||||
|
|
||||||
|
rem This is the URL that will be used to download installation files.
|
||||||
|
rem The files available from the default URL *will* conflict with your
|
||||||
|
rem installer. Trust me, you don't want them, even if it seems like a
|
||||||
|
rem good idea.
|
||||||
|
rem
|
||||||
|
rem The following substitutions will be applied to the download URL:
|
||||||
|
rem Variable Description Example
|
||||||
|
rem {version} version number 3.5.0
|
||||||
|
rem {arch} architecture amd64, win32
|
||||||
|
rem {releasename} release name a1, b2, rc3 (or blank for final)
|
||||||
|
rem {msi} MSI filename core.msi
|
||||||
|
set DOWNLOAD_URL=https://www.python.org/ftp/python/{version}/{arch}{releasename}/{msi}
|
||||||
|
|
||||||
set D=%~dp0
|
set D=%~dp0
|
||||||
set PCBUILD=%D%..\..\PCBuild\
|
set PCBUILD=%D%..\..\PCBuild\
|
||||||
|
@ -90,14 +101,12 @@ if "%1" EQU "x86" (
|
||||||
set BUILD_PLAT=Win32
|
set BUILD_PLAT=Win32
|
||||||
set OUTDIR_PLAT=win32
|
set OUTDIR_PLAT=win32
|
||||||
set OBJDIR_PLAT=x86
|
set OBJDIR_PLAT=x86
|
||||||
set RELEASE_URI=%RELEASE_URI_X86%
|
|
||||||
) ELSE (
|
) ELSE (
|
||||||
call "%PCBUILD%env.bat" x86_amd64
|
call "%PCBUILD%env.bat" x86_amd64
|
||||||
set BUILD=%PCBUILD%amd64\
|
set BUILD=%PCBUILD%amd64\
|
||||||
set BUILD_PLAT=x64
|
set BUILD_PLAT=x64
|
||||||
set OUTDIR_PLAT=amd64
|
set OUTDIR_PLAT=amd64
|
||||||
set OBJDIR_PLAT=x64
|
set OBJDIR_PLAT=x64
|
||||||
set RELEASE_URI=%RELEASE_URI_X64%
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if exist "%BUILD%en-us" (
|
if exist "%BUILD%en-us" (
|
||||||
|
@ -157,10 +166,16 @@ echo -x64 Build x64 installers
|
||||||
echo --build (-b) Incrementally build Python rather than rebuilding
|
echo --build (-b) Incrementally build Python rather than rebuilding
|
||||||
echo --skip-build (-B) Do not build Python (just do the installers)
|
echo --skip-build (-B) Do not build Python (just do the installers)
|
||||||
echo --skip-doc (-D) Do not build documentation
|
echo --skip-doc (-D) Do not build documentation
|
||||||
echo --download Specify the full download URL for MSIs (should include {2})
|
echo --download Specify the full download URL for MSIs
|
||||||
echo --test Specify the test directory to run the installer tests
|
echo --test Specify the test directory to run the installer tests
|
||||||
echo -h Display this help information
|
echo -h Display this help information
|
||||||
echo.
|
echo.
|
||||||
echo If no architecture is specified, all architectures will be built.
|
echo If no architecture is specified, all architectures will be built.
|
||||||
echo If --test is not specified, the installer tests are not run.
|
echo If --test is not specified, the installer tests are not run.
|
||||||
echo.
|
echo.
|
||||||
|
echo The following substitutions will be applied to the download URL:
|
||||||
|
echo Variable Description Example
|
||||||
|
echo {version} version number 3.5.0
|
||||||
|
echo {arch} architecture amd64, win32
|
||||||
|
echo {releasename} release name a1, b2, rc3 (or blank for final)
|
||||||
|
echo {msi} MSI filename core.msi
|
||||||
|
|
|
@ -16,8 +16,9 @@
|
||||||
<OutputPath>$(OutputPath)en-us\</OutputPath>
|
<OutputPath>$(OutputPath)en-us\</OutputPath>
|
||||||
<OutDir>$(OutputPath)</OutDir>
|
<OutDir>$(OutputPath)</OutDir>
|
||||||
|
|
||||||
<DownloadUrl Condition="'$(DownloadUrl)' == '' and '$(DownloadUrlBase)' != ''">$(DownloadUrlBase.TrimEnd(`/`))/$(MajorVersionNumber).$(MinorVersionNumber).$(MicroVersionNumber)/$(ArchName)$(ReleaseLevelName)/</DownloadUrl>
|
<!-- See Tools/msi/buildrelease.bat for help on configuring the download URL -->
|
||||||
<DefineConstants Condition="'$(DownloadUrl)' != ''">$(DefineConstants);DownloadUrl=$(DownloadUrl){2}</DefineConstants>
|
<DownloadUrl Condition="'$(DownloadUrl)' == '' and '$(DownloadUrlBase)' != ''">$(DownloadUrlBase.TrimEnd(`/`))/{version}/{arch}{releasename}/{msi}</DownloadUrl>
|
||||||
|
<DefineConstants Condition="'$(DownloadUrl)' != ''">$(DefineConstants);DownloadUrl=$(DownloadUrl.Replace(`{version}`, `$(MajorVersionNumber).$(MinorVersionNumber).$(MicroVersionNumber)`).Replace(`{arch}`, `$(ArchName)`).Replace(`{releasename}`, `$(ReleaseName)`).Replace(`{msi}`, `{2}`))</DefineConstants>
|
||||||
<DefineConstants Condition="'$(DownloadUrl)' == ''">$(DefineConstants);DownloadUrl={2}</DefineConstants>
|
<DefineConstants Condition="'$(DownloadUrl)' == ''">$(DefineConstants);DownloadUrl={2}</DefineConstants>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
@ -88,7 +89,7 @@
|
||||||
|
|
||||||
<Target Name="BuildLauncher" BeforeTargets="BeforeBuild" Condition="'$(RebuildAll)' != 'false'">
|
<Target Name="BuildLauncher" BeforeTargets="BeforeBuild" Condition="'$(RebuildAll)' != 'false'">
|
||||||
<!-- Build the launcher MSI using Exec rather than MSBuild -->
|
<!-- Build the launcher MSI using Exec rather than MSBuild -->
|
||||||
<Exec Command='msbuild ..\launcher\launcher.wixproj /p:Platform=x86 /p:OutputPath="$(BuildPath.TrimEnd(`\`))" /p:OutputSuffix=$(Platform) /p:BuildForRelease=$(BuildForRelease) /p:UseTestMarker=$(UseTestMarker)'
|
<Exec Command='msbuild ..\launcher\launcher.wixproj /p:Platform=x86 /p:ReleaseUri="$(ReleaseUri)" /p:OutputPath="$(BuildPath.TrimEnd(`\`))" /p:OutputSuffix=$(Platform) /p:BuildForRelease=$(BuildForRelease) /p:UseTestMarker=$(UseTestMarker)'
|
||||||
ContinueOnError="false" />
|
ContinueOnError="false" />
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
|
|
|
@ -85,6 +85,8 @@
|
||||||
<PackageGroupRef Id="tools" />
|
<PackageGroupRef Id="tools" />
|
||||||
<PackageGroupRef Id="tcltk" />
|
<PackageGroupRef Id="tcltk" />
|
||||||
<PackageGroupRef Id="launcher" />
|
<PackageGroupRef Id="launcher" />
|
||||||
|
<PackageGroupRef Id="pip" />
|
||||||
|
<PackageGroupRef Id="packageinstall" />
|
||||||
<PackageGroupRef Id="postinstall" />
|
<PackageGroupRef Id="postinstall" />
|
||||||
</Chain>
|
</Chain>
|
||||||
</Bundle>
|
</Bundle>
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
DownloadUrl="$(var.DownloadUrl)"
|
DownloadUrl="$(var.DownloadUrl)"
|
||||||
ForcePerMachine="yes"
|
ForcePerMachine="yes"
|
||||||
EnableFeatureSelection="yes"
|
EnableFeatureSelection="yes"
|
||||||
|
Permanent="yes"
|
||||||
|
Visible="yes"
|
||||||
InstallCondition="(InstallAllUsers or InstallLauncherAllUsers) and Include_launcher" />
|
InstallCondition="(InstallAllUsers or InstallLauncherAllUsers) and Include_launcher" />
|
||||||
|
|
||||||
<MsiPackage Id="launcher_JustForMe"
|
<MsiPackage Id="launcher_JustForMe"
|
||||||
|
@ -17,6 +19,8 @@
|
||||||
DownloadUrl="$(var.DownloadUrl)"
|
DownloadUrl="$(var.DownloadUrl)"
|
||||||
ForcePerMachine="no"
|
ForcePerMachine="no"
|
||||||
EnableFeatureSelection="yes"
|
EnableFeatureSelection="yes"
|
||||||
|
Permanent="yes"
|
||||||
|
Visible="yes"
|
||||||
InstallCondition="not (InstallAllUsers or InstallLauncherAllUsers) and Include_launcher" />
|
InstallCondition="not (InstallAllUsers or InstallLauncherAllUsers) and Include_launcher" />
|
||||||
</PackageGroup>
|
</PackageGroup>
|
||||||
</Fragment>
|
</Fragment>
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
|
||||||
|
<Fragment>
|
||||||
|
<PackageGroup Id="packageinstall">
|
||||||
|
<!--
|
||||||
|
This is an example of installing a package using pip as part of main install.
|
||||||
|
|
||||||
|
For a network-only install, remove the Payload element and change the install
|
||||||
|
command to specify the package and (optionally) version specifier.
|
||||||
|
|
||||||
|
<ExePackage Id="requests"
|
||||||
|
SourceFile="py.exe"
|
||||||
|
Compressed="yes"
|
||||||
|
DisplayName="!(loc.CompileAllDescription)"
|
||||||
|
InstallCommand='-$(var.ShortVersion)$(var.Suffix32) -m pip install requests-2.7.0-py2.py3-none-any.whl'
|
||||||
|
UninstallCommand='-$(var.ShortVersion)$(var.Suffix32) -m pip uninstall -y requests'
|
||||||
|
Vital="no"
|
||||||
|
InstallCondition="Include_pip and not LauncherOnly">
|
||||||
|
<Payload SourceFile="requests-2.7.0-py2.py3-none-any.whl"
|
||||||
|
Compressed="$(var.CompressMSI)"
|
||||||
|
DownloadUrl="$(var.DownloadUrl)" />
|
||||||
|
</ExePackage>
|
||||||
|
-->
|
||||||
|
</PackageGroup>
|
||||||
|
</Fragment>
|
||||||
|
</Wix>
|
|
@ -0,0 +1,25 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
|
||||||
|
<Fragment>
|
||||||
|
<PackageGroup Id="pip">
|
||||||
|
<MsiPackage Id="pip_AllUsers"
|
||||||
|
SourceFile="pip.msi"
|
||||||
|
Compressed="$(var.CompressMSI)"
|
||||||
|
DownloadUrl="$(var.DownloadUrl)"
|
||||||
|
ForcePerMachine="yes"
|
||||||
|
InstallCondition="InstallAllUsers and Include_pip and not LauncherOnly">
|
||||||
|
<MsiProperty Name="TARGETDIR" Value="[TargetDir]" />
|
||||||
|
<MsiProperty Name="OPTIONALFEATURESREGISTRYKEY" Value="[OptionalFeaturesRegistryKey]" />
|
||||||
|
</MsiPackage>
|
||||||
|
<MsiPackage Id="pip_JustForMe"
|
||||||
|
SourceFile="pip.msi"
|
||||||
|
Compressed="$(var.CompressMSI)"
|
||||||
|
DownloadUrl="$(var.DownloadUrl)"
|
||||||
|
ForcePerMachine="no"
|
||||||
|
InstallCondition="not InstallAllUsers and Include_pip and not LauncherOnly">
|
||||||
|
<MsiProperty Name="TARGETDIR" Value="[TargetDir]" />
|
||||||
|
<MsiProperty Name="OPTIONALFEATURESREGISTRYKEY" Value="[OptionalFeaturesRegistryKey]" />
|
||||||
|
</MsiPackage>
|
||||||
|
</PackageGroup>
|
||||||
|
</Fragment>
|
||||||
|
</Wix>
|
|
@ -2,25 +2,6 @@
|
||||||
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
|
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
|
||||||
<Fragment>
|
<Fragment>
|
||||||
<PackageGroup Id="postinstall">
|
<PackageGroup Id="postinstall">
|
||||||
<MsiPackage Id="pip_AllUsers"
|
|
||||||
SourceFile="pip.msi"
|
|
||||||
Compressed="$(var.CompressMSI)"
|
|
||||||
DownloadUrl="$(var.DownloadUrl)"
|
|
||||||
ForcePerMachine="yes"
|
|
||||||
InstallCondition="InstallAllUsers and Include_pip and not LauncherOnly">
|
|
||||||
<MsiProperty Name="TARGETDIR" Value="[TargetDir]" />
|
|
||||||
<MsiProperty Name="OPTIONALFEATURESREGISTRYKEY" Value="[OptionalFeaturesRegistryKey]" />
|
|
||||||
</MsiPackage>
|
|
||||||
<MsiPackage Id="pip_JustForMe"
|
|
||||||
SourceFile="pip.msi"
|
|
||||||
Compressed="$(var.CompressMSI)"
|
|
||||||
DownloadUrl="$(var.DownloadUrl)"
|
|
||||||
ForcePerMachine="no"
|
|
||||||
InstallCondition="not InstallAllUsers and Include_pip and not LauncherOnly">
|
|
||||||
<MsiProperty Name="TARGETDIR" Value="[TargetDir]" />
|
|
||||||
<MsiProperty Name="OPTIONALFEATURESREGISTRYKEY" Value="[OptionalFeaturesRegistryKey]" />
|
|
||||||
</MsiPackage>
|
|
||||||
|
|
||||||
<MsiPackage Id="path_AllUsers"
|
<MsiPackage Id="path_AllUsers"
|
||||||
SourceFile="path.msi"
|
SourceFile="path.msi"
|
||||||
Compressed="$(var.CompressMSI)"
|
Compressed="$(var.CompressMSI)"
|
||||||
|
|
|
@ -11,6 +11,12 @@
|
||||||
<Configuration Condition="'$(Configuration)' == ''">Release</Configuration>
|
<Configuration Condition="'$(Configuration)' == ''">Release</Configuration>
|
||||||
<Platform Condition="'$(Platform)' == ''">x86</Platform>
|
<Platform Condition="'$(Platform)' == ''">x86</Platform>
|
||||||
<InstallScope Condition="'$(InstallScope)' != 'perMachine'">perUser</InstallScope>
|
<InstallScope Condition="'$(InstallScope)' != 'perMachine'">perUser</InstallScope>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<Import Project="wix.props" />
|
||||||
|
<Import Project="..\..\PCBuild\tcltk.props" />
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
<!--
|
<!--
|
||||||
This URI is used to generate the various GUIDs used by the installer.
|
This URI is used to generate the various GUIDs used by the installer.
|
||||||
Installers built with the same URI will upgrade each other or block
|
Installers built with the same URI will upgrade each other or block
|
||||||
|
@ -21,17 +27,15 @@
|
||||||
that intend to bundle Python should rebuild these modules with their
|
that intend to bundle Python should rebuild these modules with their
|
||||||
own URI to avoid conflicting with the official releases.
|
own URI to avoid conflicting with the official releases.
|
||||||
|
|
||||||
The official releases are built with http://www.python.org/.
|
The official releases use "http://www.python.org/$(ArchName)"
|
||||||
|
|
||||||
This is not the same as the DownloadUrl property used in the bundle
|
This is not the same as the DownloadUrl property used in the bundle
|
||||||
projects.
|
projects.
|
||||||
-->
|
-->
|
||||||
<ReleaseUri Condition="'$(ReleaseUri)' == ''">$(ComputerName)</ReleaseUri>
|
<ReleaseUri Condition="'$(ReleaseUri)' == ''">$(ComputerName)/$(ArchName)/</ReleaseUri>
|
||||||
<ReleaseUri Condition="!$(ReleaseUri.EndsWith(`/`))">$(ReleaseUri)/</ReleaseUri>
|
<ReleaseUri Condition="!$(ReleaseUri.EndsWith(`/`))">$(ReleaseUri)/</ReleaseUri>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<Import Project="wix.props" />
|
|
||||||
<Import Project="..\..\PCBuild\tcltk.props" />
|
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)common.wxs" />
|
<Compile Include="$(MSBuildThisFileDirectory)common.wxs" />
|
||||||
|
@ -150,7 +154,7 @@
|
||||||
<Target Name="_GenerateGuids" AfterTargets="PrepareForBuild">
|
<Target Name="_GenerateGuids" AfterTargets="PrepareForBuild">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<_Uuids>@(_Uuid->'("%(Identity)", "$(MajorVersionNumber).$(MinorVersionNumber)/%(Uri)")',',')</_Uuids>
|
<_Uuids>@(_Uuid->'("%(Identity)", "$(MajorVersionNumber).$(MinorVersionNumber)/%(Uri)")',',')</_Uuids>
|
||||||
<_GenerateCommand>import uuid; print('\n'.join('{}={}'.format(i, uuid.uuid5(uuid.UUID('c8d9733e-a70c-43ff-ab0c-e26456f11083'), '$(ReleaseUri)' + j)) for i,j in [$(_Uuids.Replace(`"`,`'`))]))</_GenerateCommand>
|
<_GenerateCommand>import uuid; print('\n'.join('{}={}'.format(i, uuid.uuid5(uuid.UUID('c8d9733e-a70c-43ff-ab0c-e26456f11083'), '$(ReleaseUri.Replace(`{arch}`, `$(ArchName)`))' + j)) for i,j in [$(_Uuids.Replace(`"`,`'`))]))</_GenerateCommand>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<Exec Command='"$(PythonExe)" -c "$(_GenerateCommand)" > "$(IntermediateOutputPath)$(OutputName)guids.txt"'
|
<Exec Command='"$(PythonExe)" -c "$(_GenerateCommand)" > "$(IntermediateOutputPath)$(OutputName)guids.txt"'
|
||||||
|
|
Loading…
Reference in New Issue