---  cmake-2.8/Modules/FindMPI.cmake.bak	Tue Feb 15 21:27:24 2011
+++  cmake-2.8/Modules/FindMPI.cmake	Wed Mar 09 19:19:26 2011
@@ -189,7 +189,7 @@
   # the cache, and we don't want to override those settings.
 elseif (MPI_COMPILE_CMDLINE)
   # Extract compile flags from the compile command line.
-  string(REGEX MATCHALL "(^| )-[Df]([^\" ]+|\"[^\"]+\")" MPI_ALL_COMPILE_FLAGS "${MPI_COMPILE_CMDLINE}")
+  string(REGEX MATCHALL "(^| )[-/][Df] ?([^\" ]+|\"[^\"]+\")" MPI_ALL_COMPILE_FLAGS "${MPI_COMPILE_CMDLINE}")
   set(MPI_COMPILE_FLAGS_WORK)
   foreach(FLAG ${MPI_ALL_COMPILE_FLAGS})
     if (MPI_COMPILE_FLAGS_WORK)
@@ -200,11 +200,12 @@
   endforeach(FLAG)
 
   # Extract include paths from compile command line
-  string(REGEX MATCHALL "(^| )-I([^\" ]+|\"[^\"]+\")" MPI_ALL_INCLUDE_PATHS "${MPI_COMPILE_CMDLINE}")
+  string(REGEX MATCHALL "(^| )[-/]I([^\" ]+|\"[^\"]+\")" MPI_ALL_INCLUDE_PATHS "${MPI_COMPILE_CMDLINE}")
   set(MPI_INCLUDE_PATH_WORK)
   foreach(IPATH ${MPI_ALL_INCLUDE_PATHS})
-    string(REGEX REPLACE "^ ?-I" "" IPATH ${IPATH})
+    string(REGEX REPLACE "^ ?[-/]I" "" IPATH ${IPATH})
     string(REGEX REPLACE "//" "/" IPATH ${IPATH})
+    string(REGEX REPLACE "^\"(.*)\"$" "\\1" IPATH ${IPATH})
     list(APPEND MPI_INCLUDE_PATH_WORK ${IPATH})
   endforeach(IPATH)
 
@@ -231,11 +232,12 @@
   endif (NOT MPI_INCLUDE_PATH_WORK)
 
   # Extract linker paths from the link command line
-  string(REGEX MATCHALL "(^| |-Wl,)-L([^\" ]+|\"[^\"]+\")" MPI_ALL_LINK_PATHS "${MPI_LINK_CMDLINE}")
+  string(REGEX MATCHALL "(^| |-Wl,)(-L|/LIBPATH:)([^\" ]+|\"[^\"]+\")" MPI_ALL_LINK_PATHS "${MPI_LINK_CMDLINE}")
   set(MPI_LINK_PATH)
   foreach(LPATH ${MPI_ALL_LINK_PATHS})
-    string(REGEX REPLACE "^(| |-Wl,)-L" "" LPATH ${LPATH})
+    string(REGEX REPLACE "^(| |-Wl,)(-L|/LIBPATH:)" "" LPATH ${LPATH})
     string(REGEX REPLACE "//" "/" LPATH ${LPATH})
+    string(REGEX REPLACE "^\"(.*)\"$" "\\1" LPATH ${LPATH})
     list(APPEND MPI_LINK_PATH ${LPATH})
   endforeach(LPATH)
 
@@ -279,6 +281,29 @@
       message(WARNING "Unable to find MPI library ${LIB}")
     endif ()
   endforeach(LIB)
+
+  # If we use a Microsoft compiler the MPI_LINK_CMDLINE has a different syntax
+  if (NOT MPI_LIBRARIES)
+    string(REGEX REPLACE "^.* /LIBPATH:([^\" ]+|\"[^\"]+\")" "" MPI_LINK_CMDLINE "${MPI_LINK_CMDLINE}")
+    string(REGEX MATCHALL "(^| )([^\" ]+|\"[^\"]+\")" MPI_LIBNAMES "${MPI_LINK_CMDLINE}")
+
+    foreach(LIB ${MPI_LIBNAMES})
+      string(STRIP ${LIB} LIB)
+      # accept standard windows libraries
+      if (${LIB} STREQUAL "advapi32.lib" OR ${LIB} STREQUAL "Ws2_32.lib" OR ${LIB} STREQUAL "shlwapi.lib")
+        set(MPI_LIB ${LIB})
+      else ()
+        set(MPI_LIB "MPI_LIB-NOTFOUND" CACHE FILEPATH "Cleared" FORCE)
+        find_library(MPI_LIB ${LIB} HINTS ${MPI_LINK_PATH})
+      endif ()
+      if (MPI_LIB)
+        list(APPEND MPI_LIBRARIES ${MPI_LIB})
+      elseif (NOT MPI_FIND_QUIETLY)
+        message(WARNING "Unable to find MPI library ${LIB}")
+      endif ()
+    endforeach(LIB)
+  endif (NOT MPI_LIBRARIES)
+
   set(MPI_LIB "MPI_LIB-NOTFOUND" CACHE INTERNAL "Scratch variable for MPI detection" FORCE)
 
   # Chop MPI_LIBRARIES into the old-style MPI_LIBRARY and
