]> granicus.if.org Git - python/commitdiff
Detect Win64 builds.
authorMartin v. Löwis <martin@v.loewis.de>
Mon, 20 Feb 2006 12:26:58 +0000 (12:26 +0000)
committerMartin v. Löwis <martin@v.loewis.de>
Mon, 20 Feb 2006 12:26:58 +0000 (12:26 +0000)
Lib/distutils/msvccompiler.py

index b65e5286a2cda7f5d0e82315c2da52b04f301a16..aefcf987098d7e5d48ca64b31560a67a6372f22d 100644 (file)
@@ -172,6 +172,20 @@ def get_build_version():
     # else we don't know what version of the compiler this is
     return None
 
+def get_build_architecture():
+    """Return the processor architecture.
+
+    Possible results are "Intel", "Itanium", or "AMD64".
+    """
+
+    prefix = " bit ("
+    i = string.find(sys.version, prefix)
+    if i == -1:
+        return "Intel"
+    j = string.find(sys.version, ")", i)
+    return sys.version[i+len(prefix):j]
+    
+
 
 class MSVCCompiler (CCompiler) :
     """Concrete class that implements an interface to Microsoft Visual C++,
@@ -206,11 +220,19 @@ class MSVCCompiler (CCompiler) :
     def __init__ (self, verbose=0, dry_run=0, force=0):
         CCompiler.__init__ (self, verbose, dry_run, force)
         self.__version = get_build_version()
-        if self.__version >= 7:
-            self.__root = r"Software\Microsoft\VisualStudio"
-            self.__macros = MacroExpander(self.__version)
+        self.__arch = get_build_architecture()
+        if self.__arch == "Intel":
+            # x86
+            if self.__version >= 7:
+                self.__root = r"Software\Microsoft\VisualStudio"
+                self.__macros = MacroExpander(self.__version)
+            else:
+                self.__root = r"Software\Microsoft\Devstudio"
+            self.__product = "Visual Studio version %s" % self.__version
         else:
-            self.__root = r"Software\Microsoft\Devstudio"
+            # Win64. Assume this was built with the platform SDK
+            self.__product = "Microsoft SDK compiler %s" % (self.__version + 6)
+            
         self.initialized = False
 
     def initialize(self):
@@ -228,9 +250,9 @@ class MSVCCompiler (CCompiler) :
 
             if len (self.__paths) == 0:
                 raise DistutilsPlatformError, \
-                      ("Python was built with version %s of Visual Studio, "
+                      ("Python was built with %s, "
                        "and extensions need to be built with the same "
-                       "version of the compiler, but it isn't installed." % self.__version)
+                       "version of the compiler, but it isn't installed." % self.__product)
 
             self.cc = self.find_exe("cl.exe")
             self.linker = self.find_exe("link.exe")
@@ -249,10 +271,17 @@ class MSVCCompiler (CCompiler) :
         os.environ['path'] = string.join(self.__paths, ';')
 
         self.preprocess_options = None
-        self.compile_options = [ '/nologo', '/Ox', '/MD', '/W3', '/GX' ,
-                                 '/DNDEBUG']
-        self.compile_options_debug = ['/nologo', '/Od', '/MDd', '/W3', '/GX',
-                                      '/Z7', '/D_DEBUG']
+        if self.__arch == "Intel":
+            self.compile_options = [ '/nologo', '/Ox', '/MD', '/W3', '/GX' ,
+                                     '/DNDEBUG']
+            self.compile_options_debug = ['/nologo', '/Od', '/MDd', '/W3', '/GX',
+                                          '/Z7', '/D_DEBUG']
+        else:
+            # Win64
+            self.compile_options = [ '/nologo', '/Ox', '/MD', '/W3', '/GS-' ,
+                                     '/DNDEBUG']
+            self.compile_options_debug = ['/nologo', '/Od', '/MDd', '/W3', '/GS-',
+                                          '/Z7', '/D_DEBUG']            
 
         self.ldflags_shared = ['/DLL', '/nologo', '/INCREMENTAL:NO']
         if self.__version >= 7: