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 To use it to build alternative releases, you should clone this file
|
||||
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
|
||||
set RELEASE_URI_X64=http://www.python.org/amd64
|
||||
set DOWNLOAD_URL_BASE=https://www.python.org/ftp/python
|
||||
set DOWNLOAD_URL=
|
||||
rem These two will ensure that your release can be installed
|
||||
rem alongside an official Python release, by modifying the GUIDs used
|
||||
rem for all components.
|
||||
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 PCBUILD=%D%..\..\PCBuild\
|
||||
|
@ -90,14 +101,12 @@ if "%1" EQU "x86" (
|
|||
set BUILD_PLAT=Win32
|
||||
set OUTDIR_PLAT=win32
|
||||
set OBJDIR_PLAT=x86
|
||||
set RELEASE_URI=%RELEASE_URI_X86%
|
||||
) ELSE (
|
||||
call "%PCBUILD%env.bat" x86_amd64
|
||||
set BUILD=%PCBUILD%amd64\
|
||||
set BUILD_PLAT=x64
|
||||
set OUTDIR_PLAT=amd64
|
||||
set OBJDIR_PLAT=x64
|
||||
set RELEASE_URI=%RELEASE_URI_X64%
|
||||
)
|
||||
|
||||
if exist "%BUILD%en-us" (
|
||||
|
@ -157,10 +166,16 @@ echo -x64 Build x64 installers
|
|||
echo --build (-b) Incrementally build Python rather than rebuilding
|
||||
echo --skip-build (-B) Do not build Python (just do the installers)
|
||||
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 -h Display this help information
|
||||
echo.
|
||||
echo If no architecture is specified, all architectures will be built.
|
||||
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>
|
||||
<OutDir>$(OutputPath)</OutDir>
|
||||
|
||||
<DownloadUrl Condition="'$(DownloadUrl)' == '' and '$(DownloadUrlBase)' != ''">$(DownloadUrlBase.TrimEnd(`/`))/$(MajorVersionNumber).$(MinorVersionNumber).$(MicroVersionNumber)/$(ArchName)$(ReleaseLevelName)/</DownloadUrl>
|
||||
<DefineConstants Condition="'$(DownloadUrl)' != ''">$(DefineConstants);DownloadUrl=$(DownloadUrl){2}</DefineConstants>
|
||||
<!-- See Tools/msi/buildrelease.bat for help on configuring the download URL -->
|
||||
<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>
|
||||
</PropertyGroup>
|
||||
|
||||
|
@ -88,7 +89,7 @@
|
|||
|
||||
<Target Name="BuildLauncher" BeforeTargets="BeforeBuild" Condition="'$(RebuildAll)' != 'false'">
|
||||
<!-- 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" />
|
||||
</Target>
|
||||
|
||||
|
|
|
@ -85,6 +85,8 @@
|
|||
<PackageGroupRef Id="tools" />
|
||||
<PackageGroupRef Id="tcltk" />
|
||||
<PackageGroupRef Id="launcher" />
|
||||
<PackageGroupRef Id="pip" />
|
||||
<PackageGroupRef Id="packageinstall" />
|
||||
<PackageGroupRef Id="postinstall" />
|
||||
</Chain>
|
||||
</Bundle>
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
DownloadUrl="$(var.DownloadUrl)"
|
||||
ForcePerMachine="yes"
|
||||
EnableFeatureSelection="yes"
|
||||
Permanent="yes"
|
||||
Visible="yes"
|
||||
InstallCondition="(InstallAllUsers or InstallLauncherAllUsers) and Include_launcher" />
|
||||
|
||||
<MsiPackage Id="launcher_JustForMe"
|
||||
|
@ -17,6 +19,8 @@
|
|||
DownloadUrl="$(var.DownloadUrl)"
|
||||
ForcePerMachine="no"
|
||||
EnableFeatureSelection="yes"
|
||||
Permanent="yes"
|
||||
Visible="yes"
|
||||
InstallCondition="not (InstallAllUsers or InstallLauncherAllUsers) and Include_launcher" />
|
||||
</PackageGroup>
|
||||
</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">
|
||||
<Fragment>
|
||||
<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"
|
||||
SourceFile="path.msi"
|
||||
Compressed="$(var.CompressMSI)"
|
||||
|
|
|
@ -11,6 +11,12 @@
|
|||
<Configuration Condition="'$(Configuration)' == ''">Release</Configuration>
|
||||
<Platform Condition="'$(Platform)' == ''">x86</Platform>
|
||||
<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.
|
||||
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
|
||||
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
|
||||
projects.
|
||||
-->
|
||||
<ReleaseUri Condition="'$(ReleaseUri)' == ''">$(ComputerName)</ReleaseUri>
|
||||
<ReleaseUri Condition="'$(ReleaseUri)' == ''">$(ComputerName)/$(ArchName)/</ReleaseUri>
|
||||
<ReleaseUri Condition="!$(ReleaseUri.EndsWith(`/`))">$(ReleaseUri)/</ReleaseUri>
|
||||
</PropertyGroup>
|
||||
|
||||
<Import Project="wix.props" />
|
||||
<Import Project="..\..\PCBuild\tcltk.props" />
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Include="$(MSBuildThisFileDirectory)common.wxs" />
|
||||
|
@ -150,7 +154,7 @@
|
|||
<Target Name="_GenerateGuids" AfterTargets="PrepareForBuild">
|
||||
<PropertyGroup>
|
||||
<_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>
|
||||
|
||||
<Exec Command='"$(PythonExe)" -c "$(_GenerateCommand)" > "$(IntermediateOutputPath)$(OutputName)guids.txt"'
|
||||
|
|
Loading…
Reference in New Issue