Differences between revisions 8 and 9
Revision 8 as of 2013-10-05 19:52:29
Size: 4354
Editor: NickHilton
Comment:
Revision 9 as of 2013-10-05 19:58:53
Size: 4671
Editor: NickHilton
Comment:
Deletions are marked like this. Additions are marked like this.
Line 4: Line 4:

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.

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. 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:

VS2012 (last edited 2013-10-06 21:35:10 by NickHilton)

Unable to edit the page? See the FrontPage for instructions.