From 5056455b7dc6d709c14658492fd670c262f05908 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Sat, 7 Feb 2015 15:42:53 -0800 Subject: Adds automated test script for the Windows installer and fixes download URL --- Tools/msi/buildrelease.bat | 6 ++++ Tools/msi/bundle/bundle.targets | 2 +- Tools/msi/get_wix.py | 2 +- Tools/msi/testrelease.bat | 80 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 88 insertions(+), 2 deletions(-) create mode 100644 Tools/msi/testrelease.bat diff --git a/Tools/msi/buildrelease.bat b/Tools/msi/buildrelease.bat index d441250..7183a84 100644 --- a/Tools/msi/buildrelease.bat +++ b/Tools/msi/buildrelease.bat @@ -22,6 +22,7 @@ set PCBUILD=%D%..\..\PCBuild\ set BUILDX86= set BUILDX64= set TARGET=Rebuild +set TESTTARGETDIR= :CheckOpts @@ -30,6 +31,7 @@ if "%1" EQU "-o" (set OUTDIR=%~2) && shift && shift && goto CheckOpts if "%1" EQU "-D" (set SKIPDOC=1) && shift && goto CheckOpts if "%1" EQU "-B" (set SKIPBUILD=1) && shift && goto CheckOpts if "%1" EQU "--download" (set DOWNLOAD_URL=%~2) && shift && shift && goto CheckOpts +if "%1" EQU "--test" (set TESTTARGETDIR=%~2) && shift && shift && goto CheckOpts if "%1" EQU "-b" (set TARGET=Build) && shift && goto CheckOpts if '%1' EQU '-x86' (set BUILDX86=1) && shift && goto CheckOpts if '%1' EQU '-x64' (set BUILDX64=1) && shift && goto CheckOpts @@ -66,6 +68,10 @@ if defined BUILDX64 ( if errorlevel 1 exit /B ) +if defined TESTTARGETDIR ( + call "%D%testrelease.bat" -t "%TESTTARGETDIR%" +) + exit /B 0 :build diff --git a/Tools/msi/bundle/bundle.targets b/Tools/msi/bundle/bundle.targets index 7726eea..8e4eb9e 100644 --- a/Tools/msi/bundle/bundle.targets +++ b/Tools/msi/bundle/bundle.targets @@ -14,7 +14,7 @@ $(OutputPath)en-us\ $(OutputPath) - $(DownloadUrlBase.TrimEnd(`/`))/$(PythonVersion)/$(ArchName)/{2} + $(DownloadUrlBase.TrimEnd(`/`))/$(MajorVersionNumber).$(MinorVersionNumber).$(MicroVersionNumber)/$(ArchName)$(ReleaseLevelName)/{2} $(DefineConstants);DownloadUrl=$(DownloadUrl) $(DefineConstants);DownloadUrl={2} diff --git a/Tools/msi/get_wix.py b/Tools/msi/get_wix.py index 85b02f2..da36a2e 100644 --- a/Tools/msi/get_wix.py +++ b/Tools/msi/get_wix.py @@ -22,7 +22,7 @@ if not EXTERNALS_DIR: print("Cannot find project root") sys.exit(1) -WIX_BINARIES_ZIP = 'http://wixtoolset.org/downloads/v3.10.1124.0/wix310-binaries.zip' +WIX_BINARIES_ZIP = 'http://wixtoolset.org/downloads/v3.10.0.1403/wix310-binaries.zip' TARGET_BIN_ZIP = EXTERNALS_DIR / "wix.zip" TARGET_BIN_DIR = EXTERNALS_DIR / "wix" diff --git a/Tools/msi/testrelease.bat b/Tools/msi/testrelease.bat new file mode 100644 index 0000000..bf1ceff --- /dev/null +++ b/Tools/msi/testrelease.bat @@ -0,0 +1,80 @@ +@setlocal +@echo off + +set D=%~dp0 +set PCBUILD=%D%..\..\PCBuild\ + +set TARGETDIR=%TEMP% +set TESTX86= +set TESTX64= +set TESTALLUSER= +set TESTPERUSER= + +:CheckOpts +if '%1' EQU '-x86' (set TESTX86=1) && shift && goto CheckOpts +if '%1' EQU '-x64' (set TESTX64=1) && shift && goto CheckOpts +if '%1' EQU '-t' (set TARGETDIR=%~2) && shift && shift && goto CheckOpts +if '%1' EQU '-a' (set TESTALLUSER=1) && shift && goto CheckOpts +if '%1' EQU '-p' (set TESTPERUSER=1) && shift && goto CheckOpts + +if not defined TESTX86 if not defined TESTX64 (set TESTX86=1) && (set TESTX64=1) +if not defined TESTALLUSER if not defined TESTPERUSER (set TESTALLUSER=1) && (set TESTPERUSER=1) + + +if defined TESTX86 ( + for %%f in ("%PCBUILD%win32\en-us\*.exe") do ( + if defined TESTALLUSER call :test "%%~ff" "%TARGETDIR%\%%~nf-alluser" InstallAllUsers=1 + if defined TESTPERUSER call :test "%%~ff" "%TARGETDIR%\%%~nf-peruser" InstallAllUsers=0 + if errorlevel 1 exit /B + ) +) + +if defined TESTX64 ( + for %%f in ("%PCBUILD%amd64\en-us\*.exe") do ( + if defined TESTALLUSER call :test "%%~ff" "%TARGETDIR%\%%~nf-alluser" InstallAllUsers=1 + if defined TESTPERUSER call :test "%%~ff" "%TARGETDIR%\%%~nf-peruser" InstallAllUsers=0 + if errorlevel 1 exit /B + ) +) + +exit /B 0 + +:test +@setlocal +@echo on + +@if not exist "%~1" exit /B 1 + +@set EXITCODE=0 +@echo Installing %1 into %2 +"%~1" /passive /log "%~2\install\log.txt" %~3 TargetDir="%~2\Python" Include_debug=1 Include_symbols=1 CompileAll=1 + +@if not errorlevel 1 ( + @echo Printing version + "%~2\Python\python.exe" -c "import sys; print(sys.version)" > "%~2\version.txt" 2>&1 +) +@if not errorlevel 1 ( + @echo Installing package + "%~2\Python\python.exe" -m pip install azure > "%~2\pip.txt" 2>&1 + @if not errorlevel 1 ( + "%~2\Python\python.exe" -m pip uninstall -y azure python-dateutil six > "%~2\pip.txt" 2>&1 + ) +) +@if not errorlevel 1 ( + @echo Testing Tcl/tk + @set TCL_LIBRARY=%~2\Python\tcl\tcl8.6 + "%~2\Python\python.exe" -m test -uall -v test_ttk_guionly test_tk test_idle > "%~2\tcltk.txt" 2>&1 + @set TCL_LIBRARY= +) + +@set EXITCODE=%ERRORLEVEL% + +@for /d %%f in ("%PROGRAMDATA%\Microsoft\Windows\Start Menu\Programs\Python*") do @dir "%%~ff\*.lnk" /s/b > "%~2\startmenu.txt" 2>&1 +@for /d %%f in ("%APPDATA%\Microsoft\Windows\Start Menu\Programs\Python*") do @dir "%%~ff\*.lnk" /s/b >> "%~2\startmenu.txt" 2>&1 + +@echo Result was %EXITCODE% +@echo Removing %1 +"%~1" /passive /uninstall /log "%~2\uninstall\log.txt" + +@echo off +exit /B %EXITCODE% -- cgit v0.12 From 914db0f11cae7874b1e58f170ef033f157cf45e5 Mon Sep 17 00:00:00 2001 From: Ned Deily Date: Sun, 8 Feb 2015 15:48:40 +1100 Subject: Issue #23285: Install new test directory. --- Makefile.pre.in | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile.pre.in b/Makefile.pre.in index 55032d0..d9ee777 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -1143,6 +1143,7 @@ LIBSUBDIRS= tkinter tkinter/test tkinter/test/test_tkinter \ test/audiodata \ test/capath test/data \ test/cjkencodings test/decimaltestdata test/xmltestdata \ + test/eintrdata \ test/imghdrdata \ test/subprocessdata test/sndhdrdata test/support \ test/tracedmodules test/encoded_modules \ -- cgit v0.12 From 312cef086b277c6f79cde5b345f0ce1ada81095e Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Sat, 7 Feb 2015 22:20:48 -0800 Subject: Improve Windows release scripts --- Doc/make.bat | 18 +++++++++------ Tools/msi/buildrelease.bat | 51 ++++++++++++++++++++++++++++++----------- Tools/msi/bundle/bundle.targets | 4 ++-- Tools/msi/msi.props | 1 - Tools/msi/testrelease.bat | 42 ++++++++++++++++++++++++--------- 5 files changed, 81 insertions(+), 35 deletions(-) diff --git a/Doc/make.bat b/Doc/make.bat index fd54cb8..6aae34a 100644 --- a/Doc/make.bat +++ b/Doc/make.bat @@ -8,13 +8,17 @@ set this=%~n0 if "%SPHINXBUILD%" EQU "" set SPHINXBUILD=sphinx-build if "%PYTHON%" EQU "" set PYTHON=py -if "%HTMLHELP%" EQU "" ( - where hhc 2>nul >"%TEMP%\hhc.loc" - if errorlevel 1 dir "..\externals\hhc.exe" /s/b > "%TEMP%\hhc.loc" - if errorlevel 1 echo Cannot find HHC on PATH or in externals & exit /B 1 - set /P HTMLHELP= < "%TEMP%\hhc.loc" - del "%TEMP%\hhc.loc" -) +if "%1" NEQ "htmlhelp" goto :skiphhcsearch +if exist "%HTMLHELP%" goto :skiphhcsearch + +rem Search for HHC in likely places +set HTMLHELP= +where hhc /q && set HTMLHELP=hhc && goto :skiphhcsearch +where /R ..\externals hhc > "%TEMP%\hhc.loc" 2> nul && set /P HTMLHELP= < "%TEMP%\hhc.loc" & del "%TEMP%\hhc.loc" +if not exist "%HTMLHELP%" where /R "%ProgramFiles(x86)%" hhc > "%TEMP%\hhc.loc" 2> nul && set /P HTMLHELP= < "%TEMP%\hhc.loc" & del "%TEMP%\hhc.loc" +if not exist "%HTMLHELP%" where /R "%ProgramFiles%" hhc > "%TEMP%\hhc.loc" 2> nul && set /P HTMLHELP= < "%TEMP%\hhc.loc" & del "%TEMP%\hhc.loc" +if not exist "%HTMLHELP%" echo Cannot find HHC on PATH or in externals & exit /B 1 +:skiphhcsearch if "%DISTVERSION%" EQU "" for /f "usebackq" %%v in (`%PYTHON% tools/extensions/patchlevel.py`) do set DISTVERSION=%%v diff --git a/Tools/msi/buildrelease.bat b/Tools/msi/buildrelease.bat index 7183a84..3f2a94a 100644 --- a/Tools/msi/buildrelease.bat +++ b/Tools/msi/buildrelease.bat @@ -26,15 +26,21 @@ set TESTTARGETDIR= :CheckOpts +if "%1" EQU "-h" goto Help if "%1" EQU "-c" (set CERTNAME=%~2) && shift && shift && goto CheckOpts +if "%1" EQU "--certificate" (set CERTNAME=%~2) && shift && shift && goto CheckOpts if "%1" EQU "-o" (set OUTDIR=%~2) && shift && shift && goto CheckOpts +if "%1" EQU "--out" (set OUTDIR=%~2) && shift && shift && goto CheckOpts if "%1" EQU "-D" (set SKIPDOC=1) && shift && goto CheckOpts +if "%1" EQU "--skip-doc" (set SKIPDOC=1) && shift && goto CheckOpts if "%1" EQU "-B" (set SKIPBUILD=1) && shift && goto CheckOpts +if "%1" EQU "--skip-build" (set SKIPBUILD=1) && shift && goto CheckOpts if "%1" EQU "--download" (set DOWNLOAD_URL=%~2) && shift && shift && goto CheckOpts if "%1" EQU "--test" (set TESTTARGETDIR=%~2) && shift && shift && goto CheckOpts if "%1" EQU "-b" (set TARGET=Build) && shift && goto CheckOpts -if '%1' EQU '-x86' (set BUILDX86=1) && shift && goto CheckOpts -if '%1' EQU '-x64' (set BUILDX64=1) && shift && goto CheckOpts +if "%1" EQU "--build" (set TARGET=Build) && shift && goto CheckOpts +if "%1" EQU "-x86" (set BUILDX86=1) && shift && goto CheckOpts +if "%1" EQU "-x64" (set BUILDX64=1) && shift && goto CheckOpts if not defined BUILDX86 if not defined BUILDX64 (set BUILDX86=1) && (set BUILDX64=1) @@ -42,21 +48,21 @@ if not defined BUILDX86 if not defined BUILDX64 (set BUILDX86=1) && (set BUILDX6 if "%SKIPBUILD%" EQU "1" goto skipdoc if "%SKIPDOC%" EQU "1" goto skipdoc +if not defined PYTHON where py -q || echo Cannot find py on path and PYTHON is not set. && exit /B 1 +if not defined SPHINXBUILD where sphinx-build -q || echo Cannot find sphinx-build on path and SPHINXBUILD is not set. && exit /B 1 call "%D%..\..\doc\make.bat" htmlhelp if errorlevel 1 goto :eof :skipdoc -where hg >nul 2>nul -if errorlevel 1 echo Cannot find hg on PATH & exit /B 1 - -where dlltool 2>nul >"%TEMP%\dlltool.loc" -if errorlevel 1 dir "%D%..\..\externals\dlltool.exe" /s/b > "%TEMP%\dlltool.loc" -if errorlevel 1 echo Cannot find binutils on PATH or in externals & exit /B 1 -set /P DLLTOOL= < "%TEMP%\dlltool.loc" -set PATH=%PATH%;%DLLTOOL:~,-12% -set DLLTOOL= -del "%TEMP%\dlltool.loc" +where hg /q || echo Cannot find Mercurial on PATH && exit /B 1 +where dlltool /q && goto skipdlltoolsearch +set _DLLTOOL_PATH= +where /R "%D%..\..\externals" dlltool > "%TEMP%\dlltool.loc" 2> nul && set /P _DLLTOOL_PATH= < "%TEMP%\dlltool.loc" & del "%TEMP%\dlltool.loc" +if not exist "%_DLLTOOL_PATH%" echo Cannot find binutils on PATH or in external && exit /B 1 +for %%f in (%_DLLTOOL_PATH%) do set PATH=%PATH%;%%~dpf +set _DLLTOOL_PATH= +:skipdlltoolsearch if defined BUILDX86 ( call :build x86 @@ -94,14 +100,12 @@ if "%1" EQU "x86" ( set RELEASE_URI=%RELEASE_URI_X64% ) -echo on if exist "%BUILD%en-us" ( echo Deleting %BUILD%en-us rmdir /q/s "%BUILD%en-us" if errorlevel 1 exit /B ) -echo on if exist "%D%obj\Release_%OBJDIR_PLAT%" ( echo Deleting "%D%obj\Release_%OBJDIR_PLAT%" rmdir /q/s "%D%obj\Release_%OBJDIR_PLAT%" @@ -138,3 +142,22 @@ if not "%OUTDIR%" EQU "" ( copy /Y "%BUILD%en-us\*.msi" "%OUTDIR%\%OUTDIR_PLAT%" ) +exit /B 0 + +:Help +echo buildrelease.bat [--out DIR] [-x86] [-x64] [--certificate CERTNAME] [--build] [--skip-build] +echo [--skip-doc] [--download DOWNLOAD URL] [--test TARGETDIR] [-h] +echo. +echo --out (-o) Specify an additional output directory for installers +echo -x86 Build x86 installers +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 --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. \ No newline at end of file diff --git a/Tools/msi/bundle/bundle.targets b/Tools/msi/bundle/bundle.targets index 8e4eb9e..7697af7 100644 --- a/Tools/msi/bundle/bundle.targets +++ b/Tools/msi/bundle/bundle.targets @@ -14,8 +14,8 @@ $(OutputPath)en-us\ $(OutputPath) - $(DownloadUrlBase.TrimEnd(`/`))/$(MajorVersionNumber).$(MinorVersionNumber).$(MicroVersionNumber)/$(ArchName)$(ReleaseLevelName)/{2} - $(DefineConstants);DownloadUrl=$(DownloadUrl) + $(DownloadUrlBase.TrimEnd(`/`))/$(MajorVersionNumber).$(MinorVersionNumber).$(MicroVersionNumber)/$(ArchName)$(ReleaseLevelName)/ + $(DefineConstants);DownloadUrl=$(DownloadUrl){2} $(DefineConstants);DownloadUrl={2} diff --git a/Tools/msi/msi.props b/Tools/msi/msi.props index 5c02fd4..16839cc 100644 --- a/Tools/msi/msi.props +++ b/Tools/msi/msi.props @@ -69,7 +69,6 @@ MajorVersionNumber=$(MajorVersionNumber); MinorVersionNumber=$(MinorVersionNumber); UpgradeMinimumVersion=$(MajorVersionNumber).$(MinorVersionNumber).0.0; - UpgradeMaximumVersion=$(MajorVersionNumber).$(MinorVersionNumber).150.0; NextMajorVersionNumber=$(MajorVersionNumber).$([msbuild]::Add($(MinorVersionNumber), 1)).0.0; PyDebugExt=$(PyDebugExt); diff --git a/Tools/msi/testrelease.bat b/Tools/msi/testrelease.bat index bf1ceff..5c9e015 100644 --- a/Tools/msi/testrelease.bat +++ b/Tools/msi/testrelease.bat @@ -11,11 +11,15 @@ set TESTALLUSER= set TESTPERUSER= :CheckOpts -if '%1' EQU '-x86' (set TESTX86=1) && shift && goto CheckOpts -if '%1' EQU '-x64' (set TESTX64=1) && shift && goto CheckOpts -if '%1' EQU '-t' (set TARGETDIR=%~2) && shift && shift && goto CheckOpts -if '%1' EQU '-a' (set TESTALLUSER=1) && shift && goto CheckOpts -if '%1' EQU '-p' (set TESTPERUSER=1) && shift && goto CheckOpts +if "%1" EQU "-h" goto Help +if "%1" EQU "-x86" (set TESTX86=1) && shift && goto CheckOpts +if "%1" EQU "-x64" (set TESTX64=1) && shift && goto CheckOpts +if "%1" EQU "-t" (set TARGETDIR=%~2) && shift && shift && goto CheckOpts +if "%1" EQU "--target" (set TARGETDIR=%~2) && shift && shift && goto CheckOpts +if "%1" EQU "-a" (set TESTALLUSER=1) && shift && goto CheckOpts +if "%1" EQU "--alluser" (set TESTALLUSER=1) && shift && goto CheckOpts +if "%1" EQU "-p" (set TESTPERUSER=1) && shift && goto CheckOpts +if "%1" EQU "--peruser" (set TESTPERUSER=1) && shift && goto CheckOpts if not defined TESTX86 if not defined TESTX64 (set TESTX86=1) && (set TESTX64=1) if not defined TESTALLUSER if not defined TESTPERUSER (set TESTALLUSER=1) && (set TESTPERUSER=1) @@ -23,16 +27,18 @@ if not defined TESTALLUSER if not defined TESTPERUSER (set TESTALLUSER=1) && (se if defined TESTX86 ( for %%f in ("%PCBUILD%win32\en-us\*.exe") do ( - if defined TESTALLUSER call :test "%%~ff" "%TARGETDIR%\%%~nf-alluser" InstallAllUsers=1 - if defined TESTPERUSER call :test "%%~ff" "%TARGETDIR%\%%~nf-peruser" InstallAllUsers=0 + if defined TESTALLUSER call :test "%%~ff" "%TARGETDIR%\%%~nf-alluser" "InstallAllUsers=1 CompileAll=1" + if errorlevel 1 exit /B + if defined TESTPERUSER call :test "%%~ff" "%TARGETDIR%\%%~nf-peruser" "InstallAllUsers=0 CompileAll=0" if errorlevel 1 exit /B ) ) if defined TESTX64 ( for %%f in ("%PCBUILD%amd64\en-us\*.exe") do ( - if defined TESTALLUSER call :test "%%~ff" "%TARGETDIR%\%%~nf-alluser" InstallAllUsers=1 - if defined TESTPERUSER call :test "%%~ff" "%TARGETDIR%\%%~nf-peruser" InstallAllUsers=0 + if defined TESTALLUSER call :test "%%~ff" "%TARGETDIR%\%%~nf-alluser" "InstallAllUsers=1 CompileAll=1" + if errorlevel 1 exit /B + if defined TESTPERUSER call :test "%%~ff" "%TARGETDIR%\%%~nf-peruser" "InstallAllUsers=0 CompileAll=0" if errorlevel 1 exit /B ) ) @@ -47,7 +53,7 @@ exit /B 0 @set EXITCODE=0 @echo Installing %1 into %2 -"%~1" /passive /log "%~2\install\log.txt" %~3 TargetDir="%~2\Python" Include_debug=1 Include_symbols=1 CompileAll=1 +"%~1" /passive /log "%~2\install\log.txt" TargetDir="%~2\Python" Include_debug=1 Include_symbols=1 %~3 @if not errorlevel 1 ( @echo Printing version @@ -57,7 +63,7 @@ exit /B 0 @echo Installing package "%~2\Python\python.exe" -m pip install azure > "%~2\pip.txt" 2>&1 @if not errorlevel 1 ( - "%~2\Python\python.exe" -m pip uninstall -y azure python-dateutil six > "%~2\pip.txt" 2>&1 + "%~2\Python\python.exe" -m pip uninstall -y azure python-dateutil six >> "%~2\pip.txt" 2>&1 ) ) @if not errorlevel 1 ( @@ -78,3 +84,17 @@ exit /B 0 @echo off exit /B %EXITCODE% + +:Help +echo testrelease.bat [--target TARGET] [-x86] [-x64] [--alluser] [--peruser] [-h] +echo. +echo --target (-t) Specify the target directory for installs and logs +echo -x86 Run tests for x86 installers +echo -x64 Run tests for x64 installers +echo --alluser (-a) Run tests for all-user installs (requires Administrator) +echo --peruser (-p) Run tests for per-user installs +echo -h Display this help information +echo. +echo If no test architecture is specified, all architectures will be tested. +echo If no install type is selected, all install types will be tested. +echo. -- cgit v0.12