--- /usr/share/cmake-2.8/Modules/UseSWIG.cmake	2012-11-27 14:26:32.000000000 +0100
+++ UseSWIG.cmake	2013-01-18 11:43:58.793310943 +0100
@@ -37,6 +37,8 @@
 set(SWIG_EXTRA_LIBRARIES "")
 
 set(SWIG_PYTHON_EXTRA_FILE_EXTENSION "py")
+set(SWIG_PYTHON2_EXTRA_FILE_EXTENSION "py")
+set(SWIG_PYTHON3_EXTRA_FILE_EXTENSION "py")
 
 #
 # For given swig module initialize variables associated with it
@@ -50,11 +52,18 @@
   set(SWIG_MODULE_${name}_REAL_NAME "${name}")
   if("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "UNKNOWN")
     message(FATAL_ERROR "SWIG Error: Language \"${language}\" not found")
-  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PYTHON")
+  elseif("${SWIG_MODULE_${name}_LANGUAGE}" MATCHES "^PYTHON2?$")
     # when swig is used without the -interface it will produce in the module.py
     # a 'import _modulename' statement, which implies having a corresponding
     # _modulename.so (*NIX), _modulename.pyd (Win32).
     set(SWIG_MODULE_${name}_REAL_NAME "_${name}")
+    set(SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "python")
+  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PYTHON3")
+    # when swig is used without the -interface it will produce in the module.py
+    # a 'import _modulename' statement, which implies having a corresponding
+    # _modulename.so (*NIX), _modulename.pyd (Win32).
+    set(SWIG_MODULE_${name}_REAL_NAME "_${name}-python3")
+    set(SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "python")
   elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PERL")
     set(SWIG_MODULE_${name}_EXTRA_FLAGS "-shadow")
   endif()
@@ -211,6 +220,9 @@
     MODULE
     ${swig_generated_sources}
     ${swig_other_sources})
+  if (SWIG_MODULE_${name}_LANGUAGE MATCHES "^PYTHON[23]?$")
+    set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES OUTPUT_NAME "_${name}")
+  endif ()
   string(TOLOWER "${language}" swig_lowercase_language)
   if ("${swig_lowercase_language}" STREQUAL "java")
     if (APPLE)
@@ -223,7 +235,7 @@
         set_target_properties (${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".jnilib")
       endif ()
   endif ()
-  if ("${swig_lowercase_language}" STREQUAL "python")
+  if ("${swig_lowercase_language}" MATCHES "^python[23]?$")
     # this is only needed for the python case where a _modulename.so is generated
     set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES PREFIX "")
     # Python extension modules on Windows must have the extension ".pyd"
