80
Comment:
|
5464
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
How to build Python 2.7.5 using Visual Studio 2012 Express on Windows 8 64-bit | <<TableOfContents>> = How to build Python 2.7.5 using Visual Studio 2012 Express on Windows 8 64-bit = My goal with these instructions is to produce a DEBUG build on x86_64 (AMD64 or x64). I'm working on a Python extension that is currently crashing on Windows, but work fine in Linux. I will be building debug version of Numpy and Matplotlib after the DEBUG version of Python is created with these instructions. == References: == [[VS2010]] == Prepare Environment == 1. Create a directory to store the Python source tree and dependencies, I called mine `python_build`. 2. Download Python 2.7.5 source from python.org and unzip it to `python_build` 3. Download and install an SVN command-line client (Try SlickSVN) 4. Download and install Perl64 5. Download and install Visual Studio Express 2012 === Test Environment === 1. Open a shell 2. Bring in the msvc compiler environment for x64 by doing: . {{{ call "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat" x86_amd64 }}} Verify by typing 'cl.exe': {{{ Microsoft (R) C/C++ Optimizing Compiler Version 17.00.60610.1 for x64 }}} 3. Try running the svn client: 'svn --version': . {{{ svn, version 1.8.3-SlikSvn-1.8.3-X64 (SlikSvn/1.8.3) X64 compiled Sep 4 2013, 16:04:02 on x86_64/x86-microsoft-windows6.1.7601 Copyright (C) 2013 The Apache Software Foundation. }}} 4. Try running perl: 'perl --version' . {{{ This is perl 5, version 16, subversion 3 (v5.16.3) built for MSWin32-x64-multi-thread }}} == Download dependencies == Use the `buildbot` tools to grab the external dependencies: . {{{ cd Python2.7.5 Tools\buildbot\external-common.bat }}} == Patch External Dependencies == === Tcl === . {{{ diff -r -Z -U 2 tcl-8.5.2.1/generic/tclPosixStr.c /home/Nick/development/debug/tcl-8.5.2.1/generic/tclPosixStr.c --- tcl-8.5.2.1/generic/tclPosixStr.c 2008-06-12 09:01:20.765751000 -0700 +++ /home/Nick/development/debug/tcl-8.5.2.1/generic/tclPosixStr.c 2013-10-05 09:09:22.967569100 -0700 @@ -345,5 +345,5 @@ #endif #if defined(EPFNOSUPPORT) && (!defined(ENOLCK) || (ENOLCK != EPFNOSUPPORT)) - case EPFNOSUPPORT: return "EPFNOSUPPORT"; + // case EPFNOSUPPORT: return "EPFNOSUPPORT"; #endif #ifdef EPIPE @@ -405,5 +405,5 @@ #endif #ifdef ESOCKTNOSUPPORT - case ESOCKTNOSUPPORT: return "ESOCKTNOSUPPORT"; + // case ESOCKTNOSUPPORT: return "ESOCKTNOSUPPORT"; #endif #ifdef ESPIPE @@ -793,5 +793,5 @@ #endif #if defined(EPFNOSUPPORT) && (!defined(ENOLCK) || (ENOLCK != EPFNOSUPPORT)) - case EPFNOSUPPORT: return "protocol family not supported"; + // case EPFNOSUPPORT: return "protocol family not supported"; #endif #ifdef EPIPE @@ -853,5 +853,5 @@ #endif #ifdef ESOCKTNOSUPPORT - case ESOCKTNOSUPPORT: return "socket type not supported"; + // case ESOCKTNOSUPPORT: return "socket type not supported"; #endif #ifdef ESPIPE diff -r -Z -U 2 tcl-8.5.2.1/win/makefile.vc /home/Nick/development/debug/tcl-8.5.2.1/win/makefile.vc --- tcl-8.5.2.1/win/makefile.vc 2008-06-12 09:01:20.765751000 -0700 +++ /home/Nick/development/debug/tcl-8.5.2.1/win/makefile.vc 2013-10-05 09:10:03.859581600 -0700 @@ -449,5 +449,5 @@ !if $(DEBUG) -ldebug = -debug:full -debugtype:cv +ldebug = -debugtype:cv !else ldebug = -release -opt:ref -opt:icf,3 }}} === Tk === . {{{ diff -r -Z -U 2 tk-8.5.2.0/win/makefile.vc /home/Nick/development/debug/tk-8.5.2.0/win/makefile.vc --- tk-8.5.2.0/win/makefile.vc 2008-06-12 09:01:54.000047000 -0700 +++ /home/Nick/development/debug/tk-8.5.2.0/win/makefile.vc 2013-10-05 09:10:27.667979000 -0700 @@ -473,5 +473,5 @@ !if $(DEBUG) -ldebug = -debug:full -debugtype:cv +ldebug = -debugtype:cv !else ldebug = -release -opt:ref -opt:icf,3 }}} == Compile External Dependencies == . {{{ cd Python2.7.5 Tools\buildbot\external-amd64.bat }}} == Manually Build Openssl 1.0.1e == 1. Download and unzip `openssl-1.0.1e.tar.gz` 2. Configure openssl: . {{{ cd openssl-1.0.1e perl Configure --openssldir=%CD%\ enable-camellia disable-idea VC-WIN64A }}} 3. '''IMPORTANT''', I guess perl creates "symobolic" links inside the `include` directory which the openssl build environment understands. However Visual Studio doesn't understand them. Example Visual Studio Error message: . {{{ C:\Users\Nick\Downloads\python_build\openssl-1.0.1e\include\openssl/evp.h(1): error C2059: syntax error : '!' }}} To correct the problem, copy the header over their symbolic links. I used a BASH shell in Cygwin to do this: . {{{ cd openssl-1.0.1e/include/openssl for f in *.h; do cp $f $f.nick mv $f.nick $f done }}} 4. Build with these commands: . {{{ ms\do_win64a.bat nmake -f ms\ntdll.mak }}} == Convert Visual Studio 2008 Solution == 1. Open `Python-2.7.5\PCbuild\pcbuild.sln` with Visual Studio 2012 Express 2. Click OK to perform the "One-Way" upgrade on all the project files. 3. Immediately close Visual Studio 2012 Express === Patch Project Files === See this diff file: [[attachment:PCbuild_patches.txt]] I've also just zipped up the project files so you can just unzip them into `PCbuild`: [[attachment:python-2.7.5-amd64-pcbuild.zip]] == Build Python == 1. Open `Python-2.7.5\PCbuild\pcbuild.sln` 2. Select 'DEBUG' and 'x64' For the configuration. 3. Click 'Build' -> 'Build Solution' (F7) |
How to build Python 2.7.5 using Visual Studio 2012 Express on Windows 8 64-bit
My goal with these instructions is to produce a DEBUG build on x86_64 (AMD64 or x64). I'm working on a Python extension that is currently crashing on Windows, but work fine in Linux. I will be building debug version of Numpy and Matplotlib after the DEBUG version of Python is created with these instructions.
References:
Prepare Environment
1. Create a directory to store the Python source tree and dependencies, I called mine python_build.
2. Download Python 2.7.5 source from python.org and unzip it to python_build
3. Download and install an SVN command-line client (Try SlickSVN)
4. Download and install Perl64
5. Download and install Visual Studio Express 2012
Test Environment
1. Open a shell
2. Bring in the msvc compiler environment for x64 by doing:
call "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat" x86_amd64
Verify by typing 'cl.exe':Microsoft (R) C/C++ Optimizing Compiler Version 17.00.60610.1 for x64
3. Try running the svn client: 'svn --version':
svn, version 1.8.3-SlikSvn-1.8.3-X64 (SlikSvn/1.8.3) X64 compiled Sep 4 2013, 16:04:02 on x86_64/x86-microsoft-windows6.1.7601 Copyright (C) 2013 The Apache Software Foundation.
4. Try running perl: 'perl --version'
This is perl 5, version 16, subversion 3 (v5.16.3) built for MSWin32-x64-multi-thread
Download dependencies
Use the buildbot tools to grab the external dependencies:
cd Python2.7.5 Tools\buildbot\external-common.bat
Patch External Dependencies
Tcl
diff -r -Z -U 2 tcl-8.5.2.1/generic/tclPosixStr.c /home/Nick/development/debug/tcl-8.5.2.1/generic/tclPosixStr.c --- tcl-8.5.2.1/generic/tclPosixStr.c 2008-06-12 09:01:20.765751000 -0700 +++ /home/Nick/development/debug/tcl-8.5.2.1/generic/tclPosixStr.c 2013-10-05 09:09:22.967569100 -0700 @@ -345,5 +345,5 @@ #endif #if defined(EPFNOSUPPORT) && (!defined(ENOLCK) || (ENOLCK != EPFNOSUPPORT)) - case EPFNOSUPPORT: return "EPFNOSUPPORT"; + // case EPFNOSUPPORT: return "EPFNOSUPPORT"; #endif #ifdef EPIPE @@ -405,5 +405,5 @@ #endif #ifdef ESOCKTNOSUPPORT - case ESOCKTNOSUPPORT: return "ESOCKTNOSUPPORT"; + // case ESOCKTNOSUPPORT: return "ESOCKTNOSUPPORT"; #endif #ifdef ESPIPE @@ -793,5 +793,5 @@ #endif #if defined(EPFNOSUPPORT) && (!defined(ENOLCK) || (ENOLCK != EPFNOSUPPORT)) - case EPFNOSUPPORT: return "protocol family not supported"; + // case EPFNOSUPPORT: return "protocol family not supported"; #endif #ifdef EPIPE @@ -853,5 +853,5 @@ #endif #ifdef ESOCKTNOSUPPORT - case ESOCKTNOSUPPORT: return "socket type not supported"; + // case ESOCKTNOSUPPORT: return "socket type not supported"; #endif #ifdef ESPIPE diff -r -Z -U 2 tcl-8.5.2.1/win/makefile.vc /home/Nick/development/debug/tcl-8.5.2.1/win/makefile.vc --- tcl-8.5.2.1/win/makefile.vc 2008-06-12 09:01:20.765751000 -0700 +++ /home/Nick/development/debug/tcl-8.5.2.1/win/makefile.vc 2013-10-05 09:10:03.859581600 -0700 @@ -449,5 +449,5 @@ !if $(DEBUG) -ldebug = -debug:full -debugtype:cv +ldebug = -debugtype:cv !else ldebug = -release -opt:ref -opt:icf,3
Tk
diff -r -Z -U 2 tk-8.5.2.0/win/makefile.vc /home/Nick/development/debug/tk-8.5.2.0/win/makefile.vc --- tk-8.5.2.0/win/makefile.vc 2008-06-12 09:01:54.000047000 -0700 +++ /home/Nick/development/debug/tk-8.5.2.0/win/makefile.vc 2013-10-05 09:10:27.667979000 -0700 @@ -473,5 +473,5 @@ !if $(DEBUG) -ldebug = -debug:full -debugtype:cv +ldebug = -debugtype:cv !else ldebug = -release -opt:ref -opt:icf,3
Compile External Dependencies
cd Python2.7.5 Tools\buildbot\external-amd64.bat
Manually Build Openssl 1.0.1e
1. Download and unzip openssl-1.0.1e.tar.gz
2. Configure openssl:
cd openssl-1.0.1e perl Configure --openssldir=%CD%\ enable-camellia disable-idea VC-WIN64A
3. IMPORTANT, I guess perl creates "symobolic" links inside the include directory which the openssl build environment understands. However Visual Studio doesn't understand them.
- Example Visual Studio Error message:
C:\Users\Nick\Downloads\python_build\openssl-1.0.1e\include\openssl/evp.h(1): error C2059: syntax error : '!'
To correct the problem, copy the header over their symbolic links. I used a BASH shell in Cygwin to do this:cd openssl-1.0.1e/include/openssl for f in *.h; do cp $f $f.nick mv $f.nick $f done
4. Build with these commands:
ms\do_win64a.bat nmake -f ms\ntdll.mak
Convert Visual Studio 2008 Solution
1. Open Python-2.7.5\PCbuild\pcbuild.sln with Visual Studio 2012 Express
2. Click OK to perform the "One-Way" upgrade on all the project files.
3. Immediately close Visual Studio 2012 Express
Patch Project Files
See this diff file: PCbuild_patches.txt
I've also just zipped up the project files so you can just unzip them into PCbuild: python-2.7.5-amd64-pcbuild.zip
Build Python
1. Open Python-2.7.5\PCbuild\pcbuild.sln
2. Select 'DEBUG' and 'x64' For the configuration.
3. Click 'Build' -> 'Build Solution' (F7)