Index: /issm/trunk-jpl/jenkins/jenkins.sh
===================================================================
--- /issm/trunk-jpl/jenkins/jenkins.sh	(revision 26043)
+++ /issm/trunk-jpl/jenkins/jenkins.sh	(revision 26044)
@@ -12,4 +12,7 @@
 # - Investigate refactoring parsing of list of changed files
 ################################################################################
+
+# Override certain aliases
+alias grep=$(which grep)
 
 echo "Cleaning up execution directory"
Index: /issm/trunk-jpl/m4/issm_options.m4
===================================================================
--- /issm/trunk-jpl/m4/issm_options.m4	(revision 26043)
+++ /issm/trunk-jpl/m4/issm_options.m4	(revision 26044)
@@ -31,5 +31,5 @@
 		PACKAGE_DATE="unknown"
 	fi
-	AC_DEFINE_UNQUOTED(PACKAGE_BUILD_DATE, "$PACKAGE_DATE", [build date])
+	AC_DEFINE_UNQUOTED([PACKAGE_BUILD_DATE], "${PACKAGE_DATE}", [build date])
 	AC_MSG_RESULT([${PACKAGE_DATE}])
 
@@ -46,5 +46,5 @@
 		fi
 	fi
-	AC_DEFINE_UNQUOTED(USER_NAME, "$user_name", [user name])
+	AC_DEFINE_UNQUOTED([USER_NAME], "${user_name}", [user name])
 	AC_MSG_RESULT([${user_name}])
 
@@ -55,13 +55,13 @@
 		linux-gnu* | lignux* )	host_os=linux ;;
 	esac
-	AC_DEFINE_UNQUOTED(HOST_OS, "$host_os", [host full OS name and version])
+	AC_DEFINE_UNQUOTED([HOST_OS], "${host_os}", [host full OS name and version])
 	AC_MSG_RESULT([${host_os}])
 
 	AC_MSG_CHECKING([host cpu])
-	AC_DEFINE_UNQUOTED(HOST_CPU, "$host_cpu", [host CPU])
+	AC_DEFINE_UNQUOTED([HOST_CPU], "${host_cpu}", [host CPU])
 	AC_MSG_RESULT([${host_cpu}])
 
 	AC_MSG_CHECKING([vendor])
-	AC_DEFINE_UNQUOTED(HOST_VENDOR, "$host_vendor", [host vendor])
+	AC_DEFINE_UNQUOTED([HOST_VENDOR], "${host_vendor}", [host vendor])
 	AC_MSG_RESULT([${host_vendor}])
 
@@ -73,5 +73,5 @@
 		linux-gnu* | lignux* )	host_os_name=linux ;;
 	esac
-	AC_DEFINE_UNQUOTED(HOST_OS_NAME, "$host_os_name", [host OS name])
+	AC_DEFINE_UNQUOTED([HOST_OS_NAME], "${host_os_name}", [host OS name])
 	AC_MSG_RESULT([${host_os_name}])
 
@@ -82,5 +82,5 @@
 		host_os_version=`(uname -r) 2>/dev/null` || host_os_version=unknown
 	fi
-	AC_DEFINE_UNQUOTED(HOST_OS_VERSION, "$host_os_version", [host OS version])
+	AC_DEFINE_UNQUOTED([HOST_OS_VERSION], "${host_os_version}", [host OS version])
 	AC_MSG_RESULT([${host_os_version}])
 
@@ -95,5 +95,5 @@
 		i?86 )	host_arch=i386 ;; # all x86 should show up as i386
 	esac
-	AC_DEFINE_UNQUOTED(HOST_ARCH, "$host_arch", [host archictecture])
+	AC_DEFINE_UNQUOTED([HOST_ARCH], "${host_arch}", [host archictecture])
 	AC_MSG_RESULT([${host_arch}])
 
@@ -219,7 +219,8 @@
 		AC_MSG_RESULT([no])
 	fi
-	AC_DEFINE_UNQUOTED([_SYSTEM_HAS_FMEMOPEN_], $SYSTEM_FMEMOPEN, [does system copy of libc have fmemopen])
+	AC_DEFINE_UNQUOTED([_SYSTEM_HAS_FMEMOPEN_], ${SYSTEM_FMEMOPEN}, [does system copy of libc have fmemopen])
 	AM_CONDITIONAL([SYSTEM_HAS_FMEMOPEN], [test "${SYSTEM_FMEMOPEN}" == "1"])
 
+	IS_MSYS2=no
 	IS_WINDOWS=no
 	AC_MSG_CHECKING([for vendor compilers])
@@ -318,18 +319,32 @@
 			export CFLAGS="-g -O3 -ipo -axAVX -ipo -no-inline-min-size -inline-max-size=345 -no-inline-max-total-size -no-inline-max-per-routine -no-inline-max-per-compile -restrict"
 			AC_DEFINE([_HAVE_RESTRICT_], [1], [with restrict buffers])
+		elif test "${VENDOR}" == "win-msys2"; then
+			export LDFLAGS="${LDFLAGS} -no-undefined"
+			export OSLIBS="-Wl,-L/mingw64/lib/gcc/x86_64-w64-mingw32/10.2.0 -Wl,-L/mingw64/x86_64-w64-mingw32/lib -Wl,-lstdc++ -Wl,-lgfortran -Wl,-lmingw32 -Wl,-lgcc_s -Wl,-lmoldname -Wl,-lmingwex -Wl,-lmsvcrt -Wl,-lm -Wl,-lpthread -Wl,-lshell32 -Wl,-luser32 -Wl,-lgdi32 -Wl,-luser32 -Wl,-ladvapi32 -Wl,-lkernel32 -Wl,-lquadmath -Wl,-lstdc++ -Wl,-lgcc"
+			IS_MSYS2=yes
 		else
 			AC_MSG_ERROR([unknown compiler vendor!])
 		fi
 	fi
+	dnl Set default standard for C++
+	if test "${CXXFLAGS}" == ""; then
+		export CXXFLAGS="-std=C++11"
+	fi
 	AC_SUBST([OSLIBS])
 	AC_MSG_RESULT([done])
 
-	AC_MSG_CHECKING([if this is a Windows build])
+	AC_MSG_CHECKING([if this is a MSVC (Windows) build])
 	AM_CONDITIONAL([WINDOWS], [test "x${IS_WINDOWS}" == "xyes"])
 	AC_MSG_RESULT([${IS_WINDOWS}])
+
+	AC_MSG_CHECKING([if this is a MSYS2 (Windows) build])
+	AM_CONDITIONAL([MSYS2], [test "x${IS_MSYS2}" == "xyes"])
+	AC_MSG_RESULT([${IS_MSYS2}])
+	AC_DEFINE([_IS_MSYS2_], [1], [is a MSYS2 (Windows) build])
 	dnl }}}
 	dnl MATLAB{{{
 
 	dnl See if MATLAB has been provided
+	AC_MSG_CHECKING([for MATLAB])
 	AC_ARG_WITH(
 		[matlab-dir],														dnl feature
@@ -338,5 +353,4 @@
 		[MATLAB_ROOT="no"]													dnl action if not given
 	)
-	AC_MSG_CHECKING([for MATLAB])
 	if test "x${MATLAB_ROOT}" == "xno"; then
 		HAVE_MATLAB=no
@@ -357,5 +371,5 @@
 		AC_DEFINE([_HAVE_MATLAB_], [1], [with MATLAB in ISSM src])
 
-		dnl Set MEXLIB, MEXLINK, and MEXEXT
+		dnl Set MEX* variable
 		AC_MSG_CHECKING([MATLAB's mex compilation flags])
 
@@ -367,24 +381,47 @@
 				if test "${VENDOR}" == "intel-win7-32"; then
 					MEXLIB="-Wl,libmx.lib -Wl,libmex.lib -Wl,libmat.lib ${OSLIBS} -Wl,libf2cblas.lib -Wl,libf2clapack.lib"
-					MEXLINK="-Wl,/LIBPATH:`cygpath -m ${MATLAB_ROOT}/extern/lib/win32/microsoft` -Wl,/link -Wl,/EXPORT:mexFunction -Wl,/DLL"
+					MEXLINKFLAGS="-Wl,/LIBPATH:`cygpath -m ${MATLAB_ROOT}/extern/lib/win32/microsoft` -Wl,/link -Wl,/EXPORT:mexFunction -Wl,/DLL"
 					MEXEXT=`${MATLAB_ROOT}/bin/mexext.bat`
 					MEXEXT=".${MEXEXT}"
 				elif test "${VENDOR}" == "intel-win7-64"; then
 					MEXLIB="-Wl,libmx.lib -Wl,libmex.lib -Wl,libmat.lib ${OSLIBS} -Wl,libf2cblas.lib -Wl,libf2clapack.lib"
-					MEXLINK="-Wl,/LIBPATH:`cygpath -m ${MATLAB_ROOT}/extern/lib/win64/microsoft` -Wl,/link -Wl,/EXPORT:mexFunction -Wl,/DLL"
+					MEXLINKFLAGS="-Wl,/LIBPATH:`cygpath -m ${MATLAB_ROOT}/extern/lib/win64/microsoft` -Wl,/link -Wl,/EXPORT:mexFunction -Wl,/DLL"
 					MEXEXT=".mexw64"
 				elif test "${VENDOR}" == "MSVC-Win64" || test "${VENDOR}" == "MSVC-Win64-par"; then
 					MEXLIB="-Wl,libmx.lib -Wl,libmex.lib -Wl,libmat.lib ${OSLIBS} -Wl,libf2cblas.lib -Wl,libf2clapack.lib"
-					MEXLINK="-Wl,/link -Wl,/LIBPATH:`cygpath -m ${MATLAB_ROOT}/extern/lib/win64/microsoft` -Wl,/link -Wl,/EXPORT:mexFunction -Wl,/DLL"
+					MEXLINKFLAGS="-Wl,/link -Wl,/LIBPATH:`cygpath -m ${MATLAB_ROOT}/extern/lib/win64/microsoft` -Wl,/link -Wl,/EXPORT:mexFunction -Wl,/DLL"
 					MATLABINCL="-I`cygpath -m ${MATLAB_ROOT}/extern/include`"
 					MEXEXT=".mexw64"
 				fi
 			;;
+			*mingw*)
+				if test "${IS_MSYS2}" == "yes"; then
+					dnl Value to set MEXEXT to can be found on Windows by running $MATLAB_ROOT/bin/mexext.bat
+					MEXEXT=".mexw64"
+					MATLABINCL="-I${MATLAB_ROOT}/extern/include"
+					MEXOPTFLAGS="-O2 -fwrapv -DNDEBUG -g"
+					MEXCFLAGS="-fexceptions -fno-omit-frame-pointer -m64 -DMATLAB_MEX_FILE"
+					MEXCXXFLAGS="-fexceptions -fno-omit-frame-pointer -std=c++11 -m64 -DMATLAB_MEX_FILE"
+					MEXLINKFLAGS="-m64 -Wl,--no-undefined -shared -static -Wl,${MATLAB_ROOT}/extern/lib/win64/mingw64/mexFunction.def"
+					MEXLIB_DIR="${MATLAB_ROOT}/extern/lib/win64/mingw64"
+					MEXLIB="-L${MEXLIB_DIR} -lmx -lmex -lmat -lm -lmwlapack -lmwblas"
+				fi
+			;;
+			*msys*)
+				dnl Value to set MEXEXT to can be found on Windows by running $MATLAB_ROOT/bin/mexext.bat
+				MEXEXT=".mexw64"
+				MATLABINCL="-I${MATLAB_ROOT}/extern/include"
+				MEXOPTFLAGS="-O2 -fwrapv -DNDEBUG -g"
+				MEXCFLAGS="-fexceptions -fno-omit-frame-pointer -m64 -DMATLAB_MEX_FILE"
+				MEXCXXFLAGS="-fexceptions -fno-omit-frame-pointer -std=c++11 -m64 -DMATLAB_MEX_FILE"
+				MEXLINKFLAGS="-m64 -Wl,--no-undefined -shared -static -Wl,${MATLAB_ROOT}/extern/lib/win64/mingw64/mexFunction.def"
+				MEXLIB_DIR="${MATLAB_ROOT}/extern/lib/win64/mingw64"
+				MEXLIB="-L${MEXLIB_DIR} -lmx -lmex -lmat -lm -lmwlapack -lmwblas"
+			;;
 			*)
+				MEXEXT=$(${MATLAB_ROOT}/bin/mex -v 2>&1 < /dev/null | grep LDEXTENSION | sed -e "s/         LDEXTENSION        = //g")
 				MATLABINCL="-I${MATLAB_ROOT}/extern/include"
-				MEXLINK=$(${MATLAB_ROOT}/bin/mex -v 2>&1 < /dev/null | grep LDFLAGS | sed -e "s/         LDFLAGS            = //g")
+				MEXLINKFLAGS=$(${MATLAB_ROOT}/bin/mex -v 2>&1 < /dev/null | grep LDFLAGS | sed -e "s/         LDFLAGS            = //g")
 				MEXLIB=$(${MATLAB_ROOT}/bin/mex -v 2>&1 < /dev/null | grep CXXLIBS | sed -e "s/         CXXLIBS            = //g")
-				MEXEXT=$(${MATLAB_ROOT}/bin/mex -v 2>&1 < /dev/null | grep LDEXTENSION | sed -e "s/         LDEXTENSION        = //g")
-				dnl version 2014 and up
 				if test -z "${MEXEXT}"; then
 					echo "#include <mex.h>" > conftest.cpp
@@ -392,5 +429,5 @@
 					${MATLAB_ROOT}/bin/mex -v -lmex conftest.cpp > conftest.tmp 2>&1
 					rm -f conftest.cpp
-					MEXLINK=$(cat conftest.tmp | grep LDFLAGS | sed -e "s/LDFLAGS ://g")
+					MEXLINKFLAGS=$(cat conftest.tmp | grep LDFLAGS | sed -e "s/LDFLAGS ://g")
 					MEXLIB=$(cat conftest.tmp | grep LINKLIBS | sed -e "s/LINKLIBS ://g")
 					MEXEXT=$(cat conftest.tmp | grep LDEXT | sed -e "s/LDEXT ://g" | awk '{print $[1]}')
@@ -402,6 +439,6 @@
 
 				dnl Make sure mexFunction.map is not in MEXLIB to avoid problems with global variables
-				dnl MEXLINK=$(echo ${MEXLINK} | sed -e "s/,-expo.*mexFunction\\.map\"//g" | sed -e "s/-[[^ ]]*mexFunction\\.map//g")
-				MEXLINK="" dnl We actually don't need MEXLINK????
+				dnl MEXLINKFLAGS=$(echo ${MEXLINKFLAGS} | sed -e "s/,-expo.*mexFunction\\.map\"//g" | sed -e "s/-[[^ ]]*mexFunction\\.map//g")
+				MEXLINKFLAGS="" dnl We actually don't need MEXLINK????
 			;;
 		esac
@@ -411,12 +448,15 @@
 		fi
 
+		AC_SUBST([MEXEXT])
+		AC_SUBST([MEXOPTFLAGS])
+		AC_SUBST([MEXCFLAGS])
+		AC_SUBST([MEXCXXFLAGS])
 		AC_SUBST([MATLABINCL])
-		MATLABWRAPPEREXT=${MEXEXT}
-		AC_SUBST([MATLABWRAPPEREXT])
+		AC_SUBST([MEXLINKFLAGS])
 		AC_SUBST([MEXLIB])
-		AC_SUBST([MEXLINK])
 	fi
 	dnl }}}
 	dnl JavaScript{{{
+	AC_MSG_CHECKING([for JavaScript])
 	AC_ARG_WITH(
 		[javascript],
@@ -425,5 +465,4 @@
 		[JAVASCRIPT="no"]
 	)
-	AC_MSG_CHECKING([for JavaScript])
 	if test "x${JAVASCRIPT}" == "xno"; then
 		HAVE_JAVASCRIPT=no
@@ -438,4 +477,5 @@
 	dnl }}}
 	dnl Triangle {{{
+	AC_MSG_CHECKING([for triangle])
 	AC_ARG_WITH(
 		[triangle-dir],
@@ -444,5 +484,4 @@
 		[TRIANGLE_ROOT="no"]
 	)
-	AC_MSG_CHECKING([for triangle])
 	if test "x${TRIANGLE_ROOT}" == "xno"; then
 		HAVE_TRIANGLE=no
@@ -483,4 +522,20 @@
 				fi
 			;;
+			*mingw*)
+				if test "x${HAVE_JAVASCRIPT}" == "xyes"; then
+					dnl Link to the object file, not the library
+					TRIANGLELIB=${TRIANGLE_ROOT}/share/triangle.o
+				else
+					TRIANGLELIB="-L${TRIANGLE_ROOT}/lib -ltriangle"
+				fi
+			;;
+			*msys*)
+				if test "x${HAVE_JAVASCRIPT}" == "xyes"; then
+					dnl Link to the object file, not the library
+					TRIANGLELIB=${TRIANGLE_ROOT}/share/triangle.o
+				else
+					TRIANGLELIB="-L${TRIANGLE_ROOT}/lib -ltriangle"
+				fi
+			;;
 		esac
 		AC_DEFINE([_HAVE_TRIANGLE_], [1], [with Triangle in ISSM src])
@@ -490,4 +545,5 @@
 	dnl }}}
 	dnl Boost{{{
+	AC_MSG_CHECKING([for Boost])
 	AC_ARG_WITH(
 		[boost-dir],
@@ -496,5 +552,4 @@
 		[BOOST_ROOT="no"]
 	)
-	AC_MSG_CHECKING([for Boost])
 	if test "x${BOOST_ROOT}" == "xno"; then
 		HAVE_BOOST=no
@@ -523,4 +578,5 @@
 	dnl }}}
 	dnl Dakota{{{
+	AC_MSG_CHECKING([for Dakota])
 	AC_ARG_WITH(
 		[dakota-dir],
@@ -529,5 +585,4 @@
 		[DAKOTA_ROOT="no"]
 	)
-	AC_MSG_CHECKING([for Dakota])
 	if test "x${DAKOTA_ROOT}" == "xno"; then
 		HAVE_DAKOTA=no
@@ -546,8 +601,13 @@
 
 		AC_MSG_CHECKING(for Dakota version)
-		dnl TODO:	Check if this method applies to all other versions of 
-		dnl			Dakota (it should as long as the Dakota binaries have been
-		dnl 		compiled). If so, we can remove the other methods of 
-		dnl			getting the version.
+		dnl TODO:
+		dnl - Check if this method applies to all other versions of Dakota (it 
+		dnl   should as long as the Dakota binaries have been compiled). If so, 
+		dnl   we can remove the other methods of getting the version.
+		dnl - Modify src/wrappers/IssmConfig/IssmConfig.cpp so that strlen is 
+		dnl   not called with _DAKOTA_VERSION_ as an argument so that we can 
+		dnl   do,
+		dnl
+		dnl   	AC_DEFINE_UNQUOTED([_DAKOTA_VERSION_], ${DAKOTA_VERSION}, [Dakota version number])
 		dnl
 		DAKOTA_VERSION_OUTPUT=`${DAKOTA_ROOT}/bin/dakota -v`
@@ -679,11 +739,11 @@
 		AC_MSG_CHECKING(for Dakota major version)
 		AC_MSG_RESULT(${DAKOTA_MAJOR})
-		AC_DEFINE_UNQUOTED(_DAKOTA_MAJOR_, $DAKOTA_MAJOR, [Dakota major version number])
+		AC_DEFINE_UNQUOTED([_DAKOTA_MAJOR_], ${DAKOTA_MAJOR}, [Dakota major version number])
 		AC_MSG_CHECKING(for Dakota minor version)
 		AC_MSG_RESULT(${DAKOTA_MINOR})
-		AC_DEFINE_UNQUOTED(_DAKOTA_MINOR_, $DAKOTA_MINOR, [Dakota minor version number])
+		AC_DEFINE_UNQUOTED([_DAKOTA_MINOR_], ${DAKOTA_MINOR}, [Dakota minor version number])
 		AC_MSG_CHECKING(for Dakota build version)
 		AC_MSG_RESULT(${DAKOTA_BUILD})
-		AC_DEFINE_UNQUOTED(_DAKOTA_BUILD_, $DAKOTA_BUILD, [Dakota build version number])
+		AC_DEFINE_UNQUOTED([_DAKOTA_BUILD_], ${DAKOTA_BUILD}, [Dakota build version number])
 
 		AC_DEFINE([_HAVE_DAKOTA_], [1], [with Dakota in ISSM src])
@@ -695,4 +755,5 @@
 	dnl }}}
 	dnl Python{{{
+	AC_MSG_CHECKING([for Python])
 	AC_ARG_WITH(
 		[python-dir],
@@ -708,5 +769,4 @@
 		[PYTHON_VERSION="no"]
 	)
-	AC_MSG_CHECKING([for Python])
 	if test "x${PYTHON_ROOT}" == "xno"; then
 		HAVE_PYTHON=no
@@ -735,5 +795,5 @@
 		dnl Determine major version
 		PYTHON_MAJOR=${PYTHON_VERSION%.*}
-		AC_DEFINE_UNQUOTED(_PYTHON_MAJOR_, $PYTHON_MAJOR, [Python version major])
+		AC_DEFINE_UNQUOTED([_PYTHON_MAJOR_], ${PYTHON_MAJOR}, [Python version major])
 		if test "x${PYTHON_MAJOR}" == "x3"; then
 			HAVE_PYTHON3="yes"
@@ -751,5 +811,5 @@
 			PYTHONINCL=-I${PYTHON_ROOT}/include/python${PYTHON_VERSION}m
 		else
-			AC_MSG_ERROR([Python.h not found, locate this file and contact ISSM developers]);
+			AC_MSG_ERROR([Python.h not found! Please locate this file and contact ISSM developers via forum or email.]);
 		fi
 		AC_MSG_RESULT([found])
@@ -764,9 +824,15 @@
 				PYTHONLINK="-shared"
 			;;
+			*darwin*)
+				PYTHONLINK="-dynamiclib"
+			;;
 			*linux*)
 				PYTHONLINK="-shared"
 			;;
-			*darwin*)
-				PYTHONLINK="-dynamiclib"
+			*mingw*)
+				PYTHONLINK="-shared"
+			;;
+			*msys*)
+				PYTHONLINK="-shared"
 			;;
 		esac
@@ -781,15 +847,4 @@
 	dnl }}}
 	dnl NumPy{{{
-	dnl TODO:
-	dnl - Replace references to python-numpy with numpy (and similar terms)
-	dnl	  project-wide
-	dnl
-	AC_ARG_WITH(
-		[python-numpy-dir],
-		AS_HELP_STRING([--with-python-numpy-dir=DIR], [python-numpy root directory]),
-		[PYTHON_NUMPY_ROOT=${withval}],
-		[PYTHON_NUMPY_ROOT="no"]
-	)
-
 	dnl NOTE: You can find NumPy by running,
 	dnl
@@ -797,6 +852,15 @@
 	dnl		>>> numpy.__file__
 	dnl
-
+	dnl TODO:
+	dnl - Replace references to python-numpy with numpy (and similar terms)
+	dnl	  project-wide
+	dnl
 	AC_MSG_CHECKING(for python-numpy)
+	AC_ARG_WITH(
+		[python-numpy-dir],
+		AS_HELP_STRING([--with-python-numpy-dir=DIR], [python-numpy root directory]),
+		[PYTHON_NUMPY_ROOT=${withval}],
+		[PYTHON_NUMPY_ROOT="no"]
+	)
 	if test "x${PYTHON_NUMPY_ROOT}" == "xno"; then
 		HAVE_PYTHON_NUMPY=no
@@ -817,4 +881,5 @@
 	dnl }}}
 	dnl Chaco{{{
+	AC_MSG_CHECKING([for Chaco])
 	AC_ARG_WITH(
 		[chaco-dir],
@@ -823,5 +888,4 @@
 		[CHACO_ROOT="no"]
 	)
-	AC_MSG_CHECKING([for Chaco])
 	if test "x${CHACO_ROOT}" == "xno"; then
 		HAVE_CHACO=no
@@ -845,4 +909,5 @@
 	dnl }}}
 	dnl ESMF{{{
+	AC_MSG_CHECKING([for ESMF])
 	AC_ARG_WITH(
 		[esmf-dir],
@@ -851,5 +916,4 @@
 		[ESMF_ROOT="no"]
 	)
-	AC_MSG_CHECKING([for ESMF])
 	if test "x${ESMF_ROOT}" == "xno"; then
 		HAVE_ESMF=no
@@ -873,4 +937,5 @@
 	dnl }}}
 	dnl CoDiPack{{{
+	AC_MSG_CHECKING([for CoDiPack])
 	AC_ARG_WITH(
 		[codipack-dir],
@@ -879,5 +944,4 @@
 		[CODIPACK_ROOT="no"]
 	)
-	AC_MSG_CHECKING([for CoDiPack])
 	if test "x${CODIPACK_ROOT}" == "xno"; then
 		HAVE_CODIPACK=no
@@ -901,4 +965,5 @@
 	dnl }}}
 	dnl Tape Allocation {{{
+	AC_MSG_CHECKING(for tape allocation)
 	AC_ARG_ENABLE(
 		[tape-alloc],																dnl feature
@@ -907,5 +972,4 @@
 		[enable_tape_alloc=no]
 	)
-	AC_MSG_CHECKING(for tape allocation)
 	if test "x${enable_tape_alloc}" == "xyes"; then
 		AC_DEFINE([_AD_TAPE_ALLOC_], [1], [enable a priori tape allocation for AD])
@@ -914,4 +978,5 @@
 	dnl }}}
 	dnl ADOL-C {{{
+	AC_MSG_CHECKING([for ADOL-C])
 	AC_ARG_WITH(
 		[adolc-dir],
@@ -920,5 +985,4 @@
 		[ADOLC_ROOT="no"]
 	)
-	AC_MSG_CHECKING([for ADOL-C])
 	if test "x${ADOLC_ROOT}" == "xno"; then
 		HAVE_ADOLC=no
@@ -945,4 +1009,5 @@
 	dnl }}}
 	dnl ADOL-C version{{{
+	AC_MSG_CHECKING(for ADOL-C version)
 	AC_ARG_WITH(
 		[adolc-version],
@@ -951,10 +1016,9 @@
 		[ADOLC_VERSION=2]
 	)
-	AC_MSG_CHECKING(for ADOL-C version)
-
-	AC_DEFINE_UNQUOTED(_ADOLC_VERSION_, $ADOLC_VERSION, [ADOL-C version])
+	AC_DEFINE_UNQUOTED([_ADOLC_VERSION_], ${ADOLC_VERSION}, [ADOL-C version])
 	AC_MSG_RESULT(${ADOLC_VERSION})
 	dnl }}}
 	dnl ADIC2 {{{
+	AC_MSG_CHECKING([for ADIC2])
 	AC_ARG_WITH(
 		[adic2-dir],
@@ -963,5 +1027,4 @@
 		[ADIC2_ROOT="no"]
 	)
-	AC_MSG_CHECKING([for ADIC2])
 	if test "x${ADIC2_ROOT}" == "xno"; then
 		HAVE_ADIC2=no
@@ -985,4 +1048,5 @@
 	dnl }}}
 	dnl ATLAS {{{
+	AC_MSG_CHECKING(for ATLAS and CBLAS libraries)
 	AC_ARG_WITH(
 		[atlas-dir],
@@ -991,5 +1055,4 @@
 		[ATLAS_ROOT="no"]
 	)
-	AC_MSG_CHECKING(for ATLAS and CBLAS libraries)
 	if test "x${ATLAS_ROOT}" == "xno"; then
 		HAVE_ATLAS=no
@@ -1008,9 +1071,15 @@
 				ATLASLIB="-L`cygpath -m ${ATLAS_ROOT}` -Wl,libatlas.lib  -Wl,libcblas.lib"
 			;;
+			*darwin*)
+				ATLASLIB="-L${ATLAS_ROOT}/lib -lcblas -latlas -lm"
+			;;
 			*linux*)
-				ATLASLIB="-L${ATLAS_ROOT}/lib -lcblas -latlas -lm "
-			;;
-			*darwin*)
-				ATLASLIB="-L${ATLAS_ROOT}/lib -lcblas -latlas -lm "
+				ATLASLIB="-L${ATLAS_ROOT}/lib -lcblas -latlas -lm"
+			;;
+			*mingw*)
+				ATLASLIB="-L${ATLAS_ROOT}/lib -lcblas -latlas -lm"
+			;;
+			*msys*)
+				ATLASLIB="-L${ATLAS_ROOT}/lib -lcblas -latlas -lm"
 			;;
 		esac
@@ -1020,4 +1089,5 @@
 	dnl }}}
 	dnl GSL{{{
+	AC_MSG_CHECKING([for GSL])
 	AC_ARG_WITH(
 		[gsl-dir],
@@ -1026,5 +1096,4 @@
 		[GSL_ROOT="no"]
 	)
-	AC_MSG_CHECKING([for GSL])
 	if test "x${GSL_ROOT}" == "xno"; then
 		HAVE_GSL=no
@@ -1052,4 +1121,5 @@
 	dnl }}}
 	dnl AMPI (ADOL-C){{{
+	AC_MSG_CHECKING([for AMPI])
 	AC_ARG_WITH(
 		[ampi-dir],
@@ -1058,5 +1128,4 @@
 		[AMPI_ROOT="no"]
 	)
-	AC_MSG_CHECKING([for AMPI])
 	if test "x${AMPI_ROOT}" == "xno"; then
 		HAVE_AMPI=no
@@ -1088,4 +1157,5 @@
 	dnl }}}
 	dnl Adjoint MPI (CoDiPack){{{
+	AC_MSG_CHECKING([for Adjoint MPI])
 	AC_ARG_WITH(
 		[adjointmpi-dir],
@@ -1094,5 +1164,4 @@
 		[ADJOINTMPI_ROOT="no"]
 	)
-	AC_MSG_CHECKING([for Adjoint MPI])
 	if test "x${ADJOINTMPI_ROOT}" == "xno"; then
 		HAVE_ADJOINTMPI=no
@@ -1122,4 +1191,5 @@
 	dnl }}}
 	dnl MeDiPack (CoDiPack, ADOL-C dev){{{
+	AC_MSG_CHECKING([for MeDiPack])
 	AC_ARG_WITH(
 		[medipack-dir],
@@ -1128,5 +1198,4 @@
 		[MEDIPACK_ROOT="no"]
 	)
-	AC_MSG_CHECKING([for MeDiPack])
 	if test "x${MEDIPACK_ROOT}" == "xno"; then
 		HAVE_MEDIPACK=no
@@ -1154,4 +1223,5 @@
 	dnl }}}
 	dnl HDF5 {{{
+	AC_MSG_CHECKING(for HDF5 libraries)
 	AC_ARG_WITH(
 		[hdf5-dir],
@@ -1160,5 +1230,4 @@
 		[HDF5_ROOT="no"]
 	)
-	AC_MSG_CHECKING(for HDF5 libraries)
 	if test "x${HDF5_ROOT}" == "xno"; then
 		HAVE_HDF5=no
@@ -1181,8 +1250,14 @@
 				HDF5LIB="-L`cygpath -m ${HDF5_ROOT}` -Wl,libhdf5.lib  -Wl,libhdf5_hl.lib"
 			;;
+			*darwin*)
+				HDF5LIB="-L${HDF5_ROOT}/lib -lhdf5 -lhdf5_hl"
+			;;
 			*linux*)
 				HDF5LIB="-L${HDF5_ROOT}/lib -lhdf5 -lhdf5_hl"
 			;;
-			*darwin*)
+			*mingw*)
+				HDF5LIB="-L${HDF5_ROOT}/lib -lhdf5 -lhdf5_hl"
+			;;
+			*msys*)
 				HDF5LIB="-L${HDF5_ROOT}/lib -lhdf5 -lhdf5_hl"
 			;;
@@ -1193,4 +1268,5 @@
 	dnl }}}
 	dnl PETSc{{{
+	AC_MSG_CHECKING([for PETSc])
 	AC_ARG_WITH(
 		[petsc-dir],
@@ -1199,5 +1275,4 @@
 		[PETSC_ROOT="no"]
 	)
-	AC_MSG_CHECKING([for PETSc])
 	if test "x${PETSC_ROOT}" == "xno"; then
 		HAVE_PETSC=no
@@ -1220,6 +1295,6 @@
 		PETSC_MAJOR=`cat ${PETSC_ROOT}/include/petscversion.h | grep "#define PETSC_VERSION_MAJOR" | sed 's/#define PETSC_VERSION_MAJOR//' | sed 's/ //g'`
 		PETSC_MINOR=`cat ${PETSC_ROOT}/include/petscversion.h | grep "#define PETSC_VERSION_MINOR" | sed 's/#define PETSC_VERSION_MINOR//' | sed 's/ //g'`
-		AC_DEFINE_UNQUOTED([_PETSC_MAJOR_], [$PETSC_MAJOR], [PETSc version major])
-		AC_DEFINE_UNQUOTED([_PETSC_MINOR_], [$PETSC_MINOR], [PETSc version minor])
+		AC_DEFINE_UNQUOTED([_PETSC_MAJOR_], ${PETSC_MAJOR}, [PETSc version major])
+		AC_DEFINE_UNQUOTED([_PETSC_MINOR_], ${PETSC_MINOR}, [PETSc version minor])
 		AC_MSG_RESULT([${PETSC_MAJOR}.${PETSC_MINOR}])
 
@@ -1262,4 +1337,14 @@
 					PETSCLIB="/link -Wl,/LIBPATH:`cygpath -m ${PETSC_ROOT}/lib` -Wl,libpetsc.lib"
 					PETSCINCL="/I`cygpath -m ${PETSC_ROOT}/include`"
+				fi
+			;;
+			*darwin*)
+				if test ${PETSC_MAJOR} -lt 3; then
+					PETSCLIB="-L${PETSC_ROOT}/lib -lpetscksp -lpetscdm -lpetscmat -lpetscvec -lpetscsnes -lpetscts -lpetsc"
+				else
+					PETSCLIB="-L${PETSC_ROOT}/lib -lpetsc"
+					if test ${PETSC_MAJOR} -gt 3 || test ${PETSC_MINOR} -ge 3; then
+						PETSCLIB+=" -lmetis"
+					fi
 				fi
 			;;
@@ -1280,13 +1365,9 @@
 				fi
 			;;
-			*darwin*)
-				if test ${PETSC_MAJOR} -lt 3; then
-					PETSCLIB="-L${PETSC_ROOT}/lib -lpetscksp -lpetscdm -lpetscmat -lpetscvec -lpetscsnes -lpetscts -lpetsc"
-				else
-					PETSCLIB="-L${PETSC_ROOT}/lib -lpetsc"
-					if test ${PETSC_MAJOR} -gt 3 || test ${PETSC_MINOR} -ge 3; then
-						PETSCLIB+=" -lmetis"
-					fi
-				fi
+			*mingw*)
+				PETSCLIB="-Wl,${PETSC_ROOT}/lib/libpetsc.a"
+			;;
+			*msys*)
+				PETSCLIB="${PETSC_ROOT}/lib -lpetsc"
 			;;
 		esac
@@ -1299,5 +1380,4 @@
 	dnl MPI{{{
 	AC_MSG_CHECKING(for MPI)
-
 	AC_ARG_WITH(
 		[mpi-include],
@@ -1306,5 +1386,4 @@
 		[MPI_INCLUDE=""]
 	)
-
 	AC_ARG_WITH(
 		[mpi-libdir],
@@ -1313,5 +1392,4 @@
 		[MPI_LIBDIR=""]
 	)
-
 	AC_ARG_WITH(
 		[mpi-libflags],
@@ -1320,5 +1398,4 @@
 		[MPI_LIBFLAGS=""]
 	)
-
 	if test -z "${MPI_INCLUDE}"; then
 		HAVE_MPI=no
@@ -1363,4 +1440,5 @@
 	dnl }}}
 	dnl SCOTCH{{{
+	AC_MSG_CHECKING([for SCOTCH])
 	AC_ARG_WITH(
 		[scotch-dir],
@@ -1369,5 +1447,4 @@
 		[SCOTCH_ROOT="no"]
 	)
-	AC_MSG_CHECKING([for SCOTCH])
 	if test "x${SCOTCH_ROOT}" == "xno"; then
 		HAVE_SCOTCH=no
@@ -1402,82 +1479,136 @@
 	dnl }}}
 	dnl METIS{{{
-
-	dnl NOTE: We know $VENDOR cannot be empty at this point, so no need to
-	dnl		  check again in the following conditionals
-	dnl
-	if test "x${HAVE_PETSC}" == "xyes" && test "x${PETSC_MAJOR}" == "x3" && test ${PETSC_MINOR} -ge 3 && test "${VENDOR}" != "MSVC-Win64" && test "${VENDOR}" != "MSVC-Win64-par"; then
-		dnl In PETSc >=3.3, METIS is provided
-		HAVE_METIS="yes"
-		AC_DEFINE([_METIS_VERSION_], [5], [METIS version number])
+	AC_MSG_CHECKING([for METIS])
+	AC_ARG_WITH(
+		[metis-dir],
+		AS_HELP_STRING([--with-metis-dir=DIR], [METIS root directory, necessary for serial build]),
+		[METIS_ROOT=${withval}],
+		[METIS_ROOT="no"]
+	)
+	HAVE_METIS=no
+	if test "x${METIS_ROOT}" == "xno"; then
+		dnl Check if METIS was installed via PETSc
+		if test -f ${PETSC_ROOT}/install/include/metis.h; then
+			HAVE_METIS=yes
+			METIS_ROOT="${PETSC_ROOT}"
+		fi
+	else
+		if ! test -d "${METIS_ROOT}"; then
+			AC_MSG_ERROR([METIS directory provided (${METIS_ROOT}) does not exist!]);
+		fi
+		HAVE_METIS=yes
+	fi
+	if test "${HAVE_METIS}" = "yes"; then
+		METIS_VERSION=$(grep "#define METIS_VER_MAJOR" ${METIS_ROOT}/include/metis.h | sed 's|.*METIS_VER_MAJOR[[:space:]]*||')
+		dnl METIS libraries and header files
+		if test "x${METIS_VERSION}" == "x4"; then
+			METISINCL="-I${METIS_ROOT}/Lib"
+			case "${host_os}" in
+				*cygwin*)
+					METISINCL="/I`cygpath -m ${METIS_ROOT}/Lib`"
+					METISLIB="-Wl,/link -Wl,/LIBPATH:`cygpath -m ${METIS_ROOT}` -Wl,libmetis.lib"
+				;;
+				*darwin*)
+					METISLIB="-L${METIS_ROOT} -lmetis"
+				;;
+				*linux*)
+					METISLIB="-L${METIS_ROOT} -lmetis"
+				;;
+				*mingw*)
+					METISLIB="-Wl,${METIS_ROOT}/lib/libmetis.a"
+				;;
+				*msys*)
+					METISLIB="-L${METIS_ROOT} -lmetis"
+				;;
+			esac
+		elif test "x${METIS_VERSION}" == "x5"; then
+			METISINCL="-I${METIS_ROOT}/include"
+			case "${host_os}" in
+				*cygwin*)
+					METISLIB="-L${METIS_ROOT} libmetis.lib"
+				;;
+				*darwin*)
+					METISLIB="-L${METIS_ROOT}/lib -lmetis"
+				;;
+				*linux*)
+					METISLIB="-L${METIS_ROOT}/lib -lmetis"
+				;;
+				*mingw*)
+					METISLIB="-Wl,${METIS_ROOT}/lib/libmetis.a"
+				;;
+				*msys*)
+					METISLIB="-L${METIS_ROOT}/lib -lmetis"
+				;;
+			esac
+		else
+			AC_MSG_ERROR([METIS version ${METIS_VERSION} not yet supported! Please contact ISSM developers via forum or email.])
+		fi
 		AC_DEFINE([_HAVE_METIS_], [1], [with METIS in ISSM src])
-	else
-		AC_ARG_WITH(
-			[metis-dir],
-			AS_HELP_STRING([--with-metis-dir=DIR], [METIS root directory, necessary for serial build]),
-			[METIS_ROOT=${withval}],
-			[METIS_ROOT="no"]
-		)
-		AC_MSG_CHECKING([for METIS])
-		if test "x${METIS_ROOT}" == "xno"; then
-			HAVE_METIS=no
-		else
-			HAVE_METIS=yes
-			if ! test -d "${METIS_ROOT}"; then
-				AC_MSG_ERROR([METIS directory provided (${METIS_ROOT}) does not exist!]);
-			fi
-		fi
-		AC_MSG_RESULT([${HAVE_METIS}])
-		AM_CONDITIONAL([METIS], [test "x${HAVE_METIS}" == "xyes"])
-
+		AC_DEFINE_UNQUOTED([_METIS_VERSION_], ${METIS_VERSION}, [METIS version number])
+		AC_SUBST([METISINCL])
+		AC_SUBST([METISLIB])
+	fi
+	AC_MSG_RESULT([${HAVE_METIS}])
+	AM_CONDITIONAL([METIS], [test "x${HAVE_METIS}" = "xyes"])
+	dnl }}}
+	dnl ParMETIS{{{
+	AC_MSG_CHECKING([for ParMETIS])
+	AC_ARG_WITH(
+		[parmetis-dir],
+		AS_HELP_STRING([--with-parmetis-dir=DIR], [ParMETIS root directory, necessary for parallel build]),
+		[PARMETIS_ROOT=${withval}],
+		[PARMETIS_ROOT="no"]
+	)
+	HAVE_PARMETIS=no
+	if test "x${PARMETIS_ROOT}" == "xno"; then
+		dnl Check if ParMETIS was installed via PETSc
+		if test -f ${PETSC_ROOT}/install/include/parmetis.h; then
+			HAVE_PARMETIS="yes"
+			PARMETIS_ROOT="${PETSC_ROOT}"
+		fi
+	else
+		if ! test -d "${PARMETIS_ROOT}"; then
+			AC_MSG_ERROR([ParMETIS directory provided (${PARMETIS_ROOT}) does not exist!]);
+		fi
+		if ! test -d "${METIS_ROOT}"; then
+			AC_MSG_ERROR([If supplying path to ParMETIS with option --with-parmetis-dir, must also supply path to METIS with option --with-metis-dir]);
+		fi
+		HAVE_PARMETIS="yes"
+	fi
+	if test "${HAVE_PARMETIS}" == "yes"; then
+		#PARMETIS_VERSION=$(grep "#define PARMETIS_MAJOR_VERSION" ${PARMETIS_ROOT}/include/parmetis.h | sed 's|.*PARMETIS_MAJOR_VERSION[[:space:]]*||')
 		dnl METIS libraries and header files
-		if test "x${HAVE_METIS}" == "xyes"; then
-			dnl Retrieve METIS version (does the VERSION file exist?)
-			if test -f "${METIS_ROOT}/VERSION"; then
-				METIS_VERSION=4
-			else
-				METIS_VERSION=5
-			fi
-
-			if test "x${METIS_VERSION}" == "x4"; then
-				METISINCL="-I${METIS_ROOT}/Lib"
-				case "${host_os}" in
-					*cygwin*)
-						METISINCL="/I`cygpath -m ${METIS_ROOT}/Lib`"
-						METISLIB="-Wl,/link -Wl,/LIBPATH:`cygpath -m ${METIS_ROOT}` -Wl,libmetis.lib"
-					;;
-					*linux*)
-						METISLIB="-L${METIS_ROOT} -lparmetis -lmetis"
-					;;
-					*darwin*)
-						METISLIB="-L${METIS_ROOT} -lparmetis -lmetis"
-					;;
-				esac
-				AC_DEFINE([_METIS_VERSION_], [4], [ METIS version number])
-			fi
-
-			if test "x${METIS_VERSION}" == "x5"; then
-				case "${host_os}" in
-					*cygwin*)
-						METISLIB="-L${METIS_ROOT} libmetis.lib"
-					;;
-					*linux*)
-						METISLIB="-L${METIS_ROOT}/lib -lparmetis -lmetis"
-					;;
-					*darwin*)
-						METISLIB="-L${METIS_ROOT}/lib -lparmetis -lmetis"
-					;;
-				esac
-				METISINCL="-I${METIS_ROOT}/include"
-				AC_DEFINE([_METIS_VERSION_], [5], [METIS version number])
-			fi
-
-			AC_DEFINE([_HAVE_METIS_], [1], [with METIS in ISSM src])
-			AC_SUBST([METISINCL])
-			AC_SUBST([METISLIB])
-		fi
-	fi
-	AM_CONDITIONAL([METIS], [test "x${HAVE_METIS}" == "xyes"])
+		#if test "x${PARMETIS_VERSION}" == "x4"; then
+			PARMETISINCL="-I${PARMETIS_ROOT}/include"
+			case "${host_os}" in
+				*cygwin*)
+					PARMETISLIB="-L${PARMETIS_ROOT}/lib -lparmetis"
+				;;
+				*darwin*)
+					PARMETISLIB="-L${PARMETIS_ROOT}/lib -lparmetis"
+				;;
+				*linux*)
+					PARMETISLIB="-L${PARMETIS_ROOT}/lib -lparmetis"
+				;;
+				*mingw*)
+					PARMETISLIB="-Wl,${PARMETIS_ROOT}/lib/libparmetis.a"
+				;;
+				*msys*)
+					PARMETISLIB="-L${PARMETIS_ROOT}/lib -lparmetis"
+				;;
+			esac
+		#else
+		#	AC_MSG_ERROR([ParMETIS version ${PARMETIS_VERSION} not yet supported! Please contact ISSM developers via forum or email.])
+		#fi
+		AC_DEFINE([_HAVE_PARMETIS_], [1], [with ParMETIS in ISSM src])
+		#AC_DEFINE([_PARMETIS_VERSION_], [${PARMETIS_VERSION}], [ParMETIS version number])
+		AC_SUBST([PARMETISINCL])
+		AC_SUBST([PARMETISLIB])
+	fi
+	AC_MSG_RESULT([${HAVE_PARMETIS}])
+	AM_CONDITIONAL([PARMETIS], [test "x${HAVE_PARMETIS}" = "xyes"])
 	dnl }}}
 	dnl Toolkit for Advanced Optimization (TAO){{{
+	AC_MSG_CHECKING([for TAO])
 	AC_ARG_WITH(
 		[tao-dir],
@@ -1486,6 +1617,4 @@
 		[TAO_ROOT="no"]
 	)
-	AC_MSG_CHECKING([for TAO])
-
 	if test "x${HAVE_PETSC}" == "xyes" && test "x${PETSC_MAJOR}" == "x3" && test ${PETSC_MINOR} -ge 5; then
 		dnl In PETSc >= 3.5, TAO is provided
@@ -1515,4 +1644,5 @@
 	dnl }}}
 	dnl M1QN3{{{
+	AC_MSG_CHECKING([for M1QN3])
 	AC_ARG_WITH(
 		[m1qn3-dir],
@@ -1521,5 +1651,4 @@
 		[M1QN3_ROOT="no"]
 	)
-	AC_MSG_CHECKING([for M1QN3])
 	if test "x${M1QN3_ROOT}" == "xno"; then
 		HAVE_M1QN3=no
@@ -1540,4 +1669,5 @@
 	dnl }}}
 	dnl PROJ{{{
+	AC_MSG_CHECKING([for PROJ])
 	AC_ARG_WITH(
 		[proj-dir],
@@ -1546,5 +1676,4 @@
 		[PROJ_ROOT="no"]
 	)
-	AC_MSG_CHECKING([for PROJ])
 	if test "x${PROJ_ROOT}" == "xno"; then
 		HAVE_PROJ=no
@@ -1568,4 +1697,5 @@
 	dnl }}}
 	dnl SLEPc{{{
+	AC_MSG_CHECKING([for SLEPc])
 	AC_ARG_WITH(
 		[slepc-dir],
@@ -1574,5 +1704,4 @@
 		[SLEPC_ROOT="no"]
 	)
-	AC_MSG_CHECKING([for SLEPc])
 	if test "x${SLEPC_ROOT}" == "xno"; then
 		HAVE_SLEPC=no
@@ -1595,4 +1724,5 @@
 	dnl }}}
 	dnl shapelib{{{
+	AC_MSG_CHECKING([for shapelib])
 	AC_ARG_WITH(
 		[shapelib-dir],
@@ -1601,5 +1731,4 @@
 		[SHAPELIB_ROOT="no"]
 	)
-	AC_MSG_CHECKING([for shapelib])
 	if test "x${SHAPELIB_ROOT}" == "xno"; then
 		HAVE_SHAPELIB=no
@@ -1622,6 +1751,7 @@
 	dnl }}}
 	dnl ScaLAPACK{{{
-
 	dnl NOTE: User should supply path to root directory or libraries, but not both
+	dnl
+	AC_MSG_CHECKING([for ScaLAPACK])
 	AC_ARG_WITH(
 		[scalapack-dir],
@@ -1636,5 +1766,4 @@
 		[SCALAPACKLIB="no"]
 	)
-	AC_MSG_CHECKING([for ScaLAPACK])
 	if test "x${SCALAPACK_ROOT}" == "xno" && test "x${SCALAPACKLIB}" == "xno"; then
 		HAVE_SCALAPACK=no
@@ -1645,5 +1774,9 @@
 		fi
 		HAVE_SCALAPACK=yes
-		SCALAPACKLIB="-L${SCALAPACK_ROOT}/lib -lscalapack"
+		if test "${VENDOR}" == "win-msys2"; then
+			SCALAPACKLIB="-Wl,${SCALAPACK_ROOT}/lib/libscalapack.a"
+		else
+			SCALAPACKLIB="-L${SCALAPACK_ROOT}/lib -lscalapack"
+		fi
 	elif test "x${SCALAPACKLIB}" != "xno"; then
 		dnl Value of SCALAPACKLIB should be valid here, so no need to set it (as above)
@@ -1661,4 +1794,17 @@
 	dnl }}}
 	dnl BLAS/LAPACK{{{
+	AC_MSG_CHECKING([for BLAS/LAPACK])
+	AC_ARG_WITH(
+		[blas-dir],
+		[AS_HELP_STRING([--with-blas-dir=DIR], [BLAS root directory])],
+		[BLAS_ROOT=$withval],
+		[BLAS_ROOT="no"]
+	)
+	AC_ARG_WITH(
+		[lapack-dir],
+		[AS_HELP_STRING([--with-lapack-dir=DIR], [LAPACK root directory])],
+		[LAPACK_ROOT=$withval],
+		[LAPACK_ROOT="no"]
+	)
 	AC_ARG_WITH(
 		[blas-lapack-dir],
@@ -1667,11 +1813,12 @@
 		[BLASLAPACK_ROOT="no"]
 	)
-	AC_MSG_CHECKING([for BLAS/LAPACK])
-	if test "x${BLASLAPACK_ROOT}" == "xno" ; then
+	if (test "x${BLAS_ROOT}" = "xno" || test "x${LAPACK_ROOT}" = "xno") && test "x${BLASLAPACK_ROOT}" = "xno"; then
 		HAVE_BLASLAPACK=no
 	else
 		HAVE_BLASLAPACK=yes
-		if ! test -d "${BLASLAPACK_ROOT}"; then
-			AC_MSG_ERROR([BLAS/LAPACK directory provided (${BLASLAPACK_ROOT}) does not exist!]);
+		if ! test -d "${BLAS_ROOT}" || ! test -d "${LAPACK_ROOT}"; then
+			if ! test -d "${BLASLAPACK_ROOT}"; then
+				AC_MSG_ERROR([Use either --with-blas-dir and --with-lapack-dir *or* --with-blaslapack-dir]);
+			fi
 		fi
 	fi
@@ -1680,5 +1827,4 @@
 	dnl BLAS/LAPACK libraries and header files
 	if test "x${HAVE_BLASLAPACK}" == "xyes"; then
-		BLASLAPACKINCL=""
 		case "${host_os}" in
 			*cygwin*)
@@ -1709,11 +1855,42 @@
 				fi
 			;;
+			*mingw*)
+				if test -d "${BLASLAPACK_ROOT}"; then
+					BLASLAPACKLIB="-L${BLASLAPACK_ROOT}/lib"
+					if ls ${BLASLAPACK_ROOT}/lib/libopenblas.* 1> /dev/null 2>&1; then
+						BLASLAPACKLIB+=" -lopenblas"
+					elif ls ${BLASLAPACK_ROOT}/lib/libf2clapack.* 1> /dev/null 2>&1; then
+						BLASLAPACKLIB+=" -lf2clapack -lf2cblas"
+					elif ls ${BLASLAPACK_ROOT}/lib/libflapack.* 1> /dev/null 2>&1; then
+						BLASLAPACKLIB="-Wl,${BLASLAPACK_ROOT}/lib/libflapack.a -Wl,${BLASLAPACK_ROOT}/lib/libfblas.a"
+					else
+						BLASLAPACKLIB+=" -llapack -lblas"
+					fi
+				else
+					BLASLAPACKLIB="-Wl,${LAPACK_ROOT}/lib/liblapack.a -Wl,${BLAS_ROOT}/lib/libblas.a"
+				fi
+			;;
+			*msys*)
+				if test -d "${BLASLAPACK_ROOT}"; then
+					if ls ${BLASLAPACK_ROOT}/lib/libopenblas.* 1> /dev/null 2>&1; then
+						BLASLAPACKLIB=" -lopenblas"
+					elif ls ${BLASLAPACK_ROOT}/lib/libf2clapack.* 1> /dev/null 2>&1; then
+						BLASLAPACKLIB=" -lf2clapack -lf2cblas"
+					elif ls ${BLASLAPACK_ROOT}/lib/libflapack.* 1> /dev/null 2>&1; then
+						BLASLAPACKLIB+=" -lflapack -lfblas"
+					else
+						BLASLAPACKLIB=" -llapack -lblas"
+					fi
+				else
+					BLASLAPACKLIB="-L${LAPACK_ROOT}/lib -llapack -L${BLAS_ROOT}/lib -lblas"
+				fi
+			;;
 		esac
 		AC_DEFINE([_HAVE_BLASLAPACK_], [1], [with BLAS/LAPACK in ISSM src])
 		AC_SUBST([BLASLAPACKLIB])
-		AC_SUBST([BLASLAPACKINCL])
 	fi
 	dnl }}}
 	dnl Math Kernel Library (MKL){{{
+	AC_MSG_CHECKING([for MKL])
 	AC_ARG_WITH(
 		[mkl-libflags],
@@ -1722,5 +1899,4 @@
 		[MKL_LIBFLAGS="no"]
 	)
-	AC_MSG_CHECKING([for MKL])
 	if test "x${MKL_LIBFLAGS}" == "xno"; then
 		HAVE_MKL=no
@@ -1735,5 +1911,4 @@
 	dnl }}}
 	dnl PlaLAPACK{{{
-
 	dnl TODO: 	Handle user supplying path to root directory *or* individual
 	dnl 		arguments (like ScaLAPACK)
@@ -1770,4 +1945,5 @@
 	dnl }}}
 	dnl MUMPS{{{
+	AC_MSG_CHECKING([for MUMPS])
 	AC_ARG_WITH(
 		[mumps-dir],
@@ -1776,5 +1952,4 @@
 		[MUMPS_ROOT="no"]
 	)
-	AC_MSG_CHECKING([for MUMPS])
 	if test "x${MUMPS_ROOT}" == "xno"; then
 		HAVE_MUMPS=no
@@ -1791,6 +1966,6 @@
 		MUMPSINCL="-I${MUMPS_ROOT}/include"
 		if test "x${MUMPS_ROOT}" == "x${PETSC_ROOT}"; then
-			if test "x${PETSC_MAJOR}" == "x2"; then
-				MUMPSLIB="-L${MUMPS_ROOT}/lib "
+			if test "${VENDOR}" == "win-msys2"; then
+				MUMPSLIB="-Wl,${MUMPS_ROOT}/lib/libcmumps.a -Wl,${MUMPS_ROOT}/lib/libdmumps.a -Wl,${MUMPS_ROOT}/lib/libsmumps.a -Wl,${MUMPS_ROOT}/lib/libzmumps.a -Wl,${MUMPS_ROOT}/lib/libmumps_common.a -Wl,${MUMPS_ROOT}/lib/libpord.a"
 			else
 				MUMPSLIB="-L${MUMPS_ROOT}/lib -ldmumps -lcmumps -lmumps_common -lpord -lparmetis -lzmumps -lmetis"
@@ -1841,4 +2016,5 @@
 	dnl }}}
 	dnl BLACS{{{
+	AC_MSG_CHECKING([for BLACS])
 	AC_ARG_WITH(
 		[blacs-dir],
@@ -1847,5 +2023,4 @@
 		[BLACS_ROOT="no"]
 	)
-	AC_MSG_CHECKING([for BLACS])
 	if test "x${BLACS_ROOT}" == "xno"; then
 		HAVE_BLACS=no
@@ -1868,4 +2043,5 @@
 	dnl }}}
 	dnl HYPRE{{{
+	AC_MSG_CHECKING([for HYPRE])
 	AC_ARG_WITH(
 		[hypre-dir],
@@ -1874,5 +2050,4 @@
 		[HYPRE_ROOT="no"]
 	)
-	AC_MSG_CHECKING([for HYPRE])
 	if test "x${HYPRE_ROOT}" == "xno"; then
 		HAVE_HYPRE=no
@@ -1895,4 +2070,5 @@
 	dnl }}}
 	dnl Prometheus{{{
+	AC_MSG_CHECKING([for Prometheus])
 	AC_ARG_WITH(
 		[prometheus-dir],
@@ -1901,5 +2077,4 @@
 		[PROMETHEUS_ROOT="no"]
 	)
-	AC_MSG_CHECKING([for Prometheus])
 	if test "x${PROMETHEUS_ROOT}" == "xno"; then
 		HAVE_PROMETHEUS=no
@@ -1922,4 +2097,5 @@
 	dnl }}}
 	dnl SEMIC{{{
+	AC_MSG_CHECKING([for SEMIC])
 	AC_ARG_WITH(
 		[semic-dir],
@@ -1928,5 +2104,4 @@
 		[SEMIC_ROOT="no"]
 	)
-	AC_MSG_CHECKING([for SEMIC])
 	if test "x${SEMIC_ROOT}" == "xno"; then
 		HAVE_SEMIC=no
@@ -1950,4 +2125,5 @@
 	dnl }}}
 	dnl SPAI{{{
+	AC_MSG_CHECKING([for SPAI])
 	AC_ARG_WITH(
 		[spai-dir],
@@ -1956,5 +2132,4 @@
 		[SPAI_ROOT="no"]
 	)
-	AC_MSG_CHECKING([for SPAI])
 	if test "x${SPAI_ROOT}" == "xno"; then
 		HAVE_SPAI=no
@@ -1977,4 +2152,5 @@
 	dnl }}}
 	dnl SuperLU{{{
+	AC_MSG_CHECKING([for SuperLU])
 	AC_ARG_WITH(
 		[superlu-dir],
@@ -1983,5 +2159,4 @@
 		[SUPERLU_ROOT="no"]
 	)
-	AC_MSG_CHECKING([for SuperLU])
 	if test "x${SUPERLU_ROOT}" == "xno"; then
 		HAVE_SUPERLU=no
@@ -2004,4 +2179,5 @@
 	dnl }}}
 	dnl SPOOLES{{{
+	AC_MSG_CHECKING([for SPOOLES])
 	AC_ARG_WITH(
 		[spooles-dir],
@@ -2010,5 +2186,4 @@
 		[SPOOLES_ROOT="no"]
 	)
-	AC_MSG_CHECKING([for SPOOLES])
 	if test "x${SPOOLES_ROOT}" == "xno"; then
 		HAVE_SPOOLES=no
@@ -2031,4 +2206,5 @@
 	dnl }}}
 	dnl PaStiX{{{
+	AC_MSG_CHECKING([for PaStiX])
 	AC_ARG_WITH(
 		[pastix-dir],
@@ -2037,5 +2213,4 @@
 		[PASTIX_ROOT="no"]
 	)
-	AC_MSG_CHECKING([for PaStiX])
 	if test "x${PASTIX_ROOT}" == "xno"; then
 		HAVE_PASTIX=no
@@ -2059,4 +2234,5 @@
 	dnl }}}
 	dnl ml{{{
+	AC_MSG_CHECKING([for ml])
 	AC_ARG_WITH(
 		[ml-dir],
@@ -2065,5 +2241,4 @@
 		[ML_ROOT="no"]
 	)
-	AC_MSG_CHECKING([for ml])
 	if test "x${ML_ROOT}" == "xno"; then
 		HAVE_ML=no
@@ -2086,4 +2261,5 @@
 	dnl }}}
 	dnl UMFPACK{{{
+	AC_MSG_CHECKING([for UMFPACK])
 	AC_ARG_WITH(
 		[umfpack-dir],
@@ -2092,5 +2268,4 @@
 		[UMFPACK_ROOT="no"]
 	)
-	AC_MSG_CHECKING([for UMFPACK])
 	if test "x${UMFPACK_ROOT}" == "xno"; then
 		HAVE_UMFPACK=no
@@ -2129,4 +2304,5 @@
 	dnl }}}
 	dnl MATH77{{{
+	AC_MSG_CHECKING([for MATH77])
 	AC_ARG_WITH(
 		[math77-dir],
@@ -2135,5 +2311,4 @@
 		[MATH77_ROOT="no"]
 	)
-	AC_MSG_CHECKING([for MATH77])
 	if test "x${MATH77_ROOT}" == "xno"; then
 		HAVE_MATH77=no
@@ -2154,4 +2329,5 @@
 	dnl }}}
 	dnl Fortran{{{
+	AC_MSG_CHECKING(for Fortran compilation)
 	AC_ARG_WITH(
 		[fortran],
@@ -2160,5 +2336,4 @@
 		[FORTRAN=yes]
 	)
-	AC_MSG_CHECKING(for Fortran compilation)
 	if test "x${FORTRAN}" == "xyes"; then
 		HAVE_FORTRAN=yes
@@ -2224,4 +2399,5 @@
 	dnl }}}
 	dnl MeteoIO{{{
+	AC_MSG_CHECKING([for MeteoIO])
 	AC_ARG_WITH(
 		[meteoio-dir],
@@ -2230,5 +2406,4 @@
 		[METEOIO_ROOT="no"]
 	)
-	AC_MSG_CHECKING([for MeteoIO])
 	if test "x${METEOIO_ROOT}" == "xno"; then
 		HAVE_METEOIO=no
@@ -2253,4 +2428,5 @@
 	dnl }}}
 	dnl SNOWPACK{{{
+	AC_MSG_CHECKING([for SNOWPACK])
 	AC_ARG_WITH(
 		[snowpack-dir],
@@ -2259,5 +2435,4 @@
 		[SNOWPACK_ROOT="no"]
 	)
-	AC_MSG_CHECKING([for SNOWPACK])
 	if test "x${SNOWPACK_ROOT}" == "xno"; then
 		HAVE_SNOWPACK=no
@@ -2281,4 +2456,5 @@
 	dnl }}}
 	dnl NeoPZ{{{
+	AC_MSG_CHECKING([for NeoPZ])
 	AC_ARG_WITH(
 		[neopz-dir],
@@ -2287,5 +2463,4 @@
 		[NEOPZ_ROOT="no"]
 	)
-	AC_MSG_CHECKING([for NeoPZ])
 	if test "x${NEOPZ_ROOT}" == "xno"; then
 		HAVE_NEOPZ=no
@@ -2356,9 +2531,10 @@
 		GMSH_VERSION_MAJOR=`${GMSH_ROOT}/bin/gmsh -info | grep "Version" | sed -e "s/Version@<:@@<:@:blank:@:>@@:>@*:@<:@@<:@:blank:@:>@@:>@//" | cut -d "." -f 1`
 		AC_MSG_RESULT([${GMSH_VERSION_MAJOR}])
-		AC_DEFINE_UNQUOTED(_GMSH_VERSION_MAJOR_, $GMSH_VERSION_MAJOR, [Gmsh major version])
+		AC_DEFINE_UNQUOTED([_GMSH_VERSION_MAJOR_], ${GMSH_VERSION_MAJOR}, [Gmsh major version])
 	fi	
 	dnl }}}
 	dnl Capabilities
 	dnl with-bamg{{{
+	AC_MSG_CHECKING([for BAMG capability compilation])
 	AC_ARG_WITH(
 		[bamg],
@@ -2367,5 +2543,4 @@
 		[BAMG=yes]
 	)
-	AC_MSG_CHECKING([for BAMG capability compilation])
 	HAVE_BAMG=no
 	if test "x${BAMG}" == "xyes"; then
@@ -2377,4 +2552,5 @@
 	dnl }}}
 	dnl with-ocean{{{
+	AC_MSG_CHECKING(for ice/ocean coupling capability compilation)
 	AC_ARG_WITH(
 		[ocean],
@@ -2383,6 +2559,4 @@
 		[OCEAN=no]
 	)
-	AC_MSG_CHECKING(for ice/ocean coupling capability compilation)
-
 	HAVE_OCEAN=no
 	if test "x${OCEAN}" == "xyes"; then
@@ -2394,4 +2568,5 @@
 	dnl }}}
 	dnl with-kml{{{
+	AC_MSG_CHECKING(for kml capability compilation)
 	AC_ARG_WITH(
 		[kml],
@@ -2400,6 +2575,4 @@
 		[KML=no]
 	)
-	AC_MSG_CHECKING(for kml capability compilation)
-
 	HAVE_KML=no
 	if test "x${KML}" == "xyes"; then
@@ -2411,4 +2584,5 @@
 	dnl }}}
 	dnl with-kriging{{{
+	AC_MSG_CHECKING(for kriging capability compilation)
 	AC_ARG_WITH(
 		[kriging],
@@ -2417,6 +2591,4 @@
 		[KRIGING=yes]
 	)
-	AC_MSG_CHECKING(for kriging capability compilation)
-
 	HAVE_KRIGING=no
 	if test "x${KRIGING}" == "xyes"; then
@@ -2433,4 +2605,5 @@
 	dnl Platform specifics
 	dnl with-ios{{{
+	AC_MSG_CHECKING(for iOS compilation)
 	AC_ARG_WITH(
 		[ios],
@@ -2439,6 +2612,4 @@
 		[IOS=no]
 	)
-	AC_MSG_CHECKING(for iOS compilation)
-
 	HAVE_IOS=no
 	if test "x${IOS}" == "xyes"; then
@@ -2450,11 +2621,11 @@
 	dnl }}}
 	dnl with-android{{{
+	AC_MSG_CHECKING([for Android capability compilation])
 	AC_ARG_WITH(
 		[android],
 		AS_HELP_STRING([--with-android=EXE], [compile with Android capabilities (default: "no"; alternatives: "exe", "jni")]),
 		[ANDROID=${withval}],
-		[ANDROID=no])
-	AC_MSG_CHECKING([for Android capability compilation])
-
+		[ANDROID=no]
+	)
 	if test "x${ANDROID}" == "xjni"; then
 		HAVE_ANDROID=jni
@@ -2475,4 +2646,5 @@
 	dnl }}}
 	dnl with-android-ndk{{{
+	AC_MSG_CHECKING([with Android Native Development Kit (NDK)])
 	AC_ARG_WITH(
 		[android-ndk],
@@ -2481,6 +2653,4 @@
 		[ANDROID_NDK_ROOT=""]
 	)
-	AC_MSG_CHECKING([with Android Native Development Kit (NDK)])
-
 	if test -d "${ANDROID_NDK_ROOT}"; then
 		HAVE_ANDROID_NDK=yes
@@ -2496,5 +2666,6 @@
 	dnl other options
 	dnl optimization{{{
-	dnl -- bypass standard optimization -g -O2 -fPIC -std=c++11?
+	dnl -- bypass standard optimization -g -O2 -fPIC?
+	AC_MSG_CHECKING(for C++ optimization flags)
 	AC_ARG_WITH(
 		[cxxoptflags],
@@ -2503,9 +2674,9 @@
 		[CXXOPTFLAGS="-g -O2 -fPIC -std=c++11"]
 	)
-	AC_MSG_CHECKING(for C++ optimization flags)
 	AC_SUBST([CXXOPTFLAGS])
-	AC_MSG_RESULT([done])
+	AC_MSG_RESULT([${CXXOPTFLAGS}])
 	dnl }}}
 	dnl multithreading{{{
+	AC_MSG_CHECKING(for number of threads)
 	AC_ARG_WITH(
 		[numthreads],
@@ -2514,5 +2685,4 @@
 		[NUMTHREADS_VALUE=1]
 	)
-	AC_MSG_CHECKING(for number of threads)
 	dnl Check that supplied value is an integer
 	if [[ "${NUMTHREADS_VALUE}" != "${NUMTHREADS_VALUE}" 2> /dev/null ]]; then
@@ -2529,18 +2699,25 @@
 				MULTITHREADINGLIB="-lpthread -lrt"
 			;;
+			*darwin*)
+				MULTITHREADINGLIB="-lpthread"
+			;;
 			*linux*)
 				MULTITHREADINGLIB="-lpthread -lrt"
 			;;
-			*darwin*)
-				MULTITHREADINGLIB="-lpthread"
+			*mingw*)
+				MULTITHREADINGLIB=""
+			;;
+			*msys*)
+				MULTITHREADINGLIB=""
 			;;
 		esac
 		AC_DEFINE([_MULTITHREADING_], [1], [with multithreading enabled])
 	fi
-	AC_DEFINE_UNQUOTED(_NUMTHREADS_, $NUMTHREADS_VALUE, [number of threads])
+	AC_DEFINE_UNQUOTED([_NUMTHREADS_], ${NUMTHREADS_VALUE}, [number of threads])
 	AC_SUBST([MULTITHREADINGLIB])
 	AC_MSG_RESULT([${NUMTHREADS_VALUE}])
 	dnl }}}
 	dnl 64-bit indices{{{
+	AC_MSG_CHECKING([for 64-bit indices])
 	AC_ARG_WITH(
 		[64bit-indices],
@@ -2549,6 +2726,4 @@
 		[USE_64BIT_INDICES=0]
 	)
-	AC_MSG_CHECKING([for 64-bit indices])
-
 	if test "x${USE_64BIT_INDICES}" == "x1"; then
 		AC_DEFINE([ISSM_USE_64BIT_INDICES], [1], [with 64-bit indices])
@@ -2560,5 +2735,5 @@
 
 	dnl Checks {{{
-	AC_MSG_CHECKING(consistency between all libraries)
+	AC_MSG_CHECKING(consistency between all external packages)
 
 	dnl Check that if PETSc is requested, MPI is specified
@@ -2590,5 +2765,5 @@
 
 	dnl Check that if we run ADOL-C, we don't compile kriging.exe
-	if test "x$HAVE_ADOLC" == "xyes" && test "${HAVE_KRIGING}" == "xyes"; then
+	if test "x${HAVE_ADOLC}" == "xyes" && test "${HAVE_KRIGING}" == "xyes"; then
 		AC_MSG_ERROR([cannot compile kriging.exe under ADOL-C conditions!]);
 	fi
Index: /issm/trunk-jpl/src/c/Makefile.am
===================================================================
--- /issm/trunk-jpl/src/c/Makefile.am	(revision 26043)
+++ /issm/trunk-jpl/src/c/Makefile.am	(revision 26044)
@@ -1,3 +1,3 @@
-AM_CPPFLAGS = @NEOPZINCL@ @DAKOTAINCL@ @SHAPELIBINCL@ @PETSCINCL@ @SLEPCINCL@ @AMPIINCL@ @ADJOINTMPIINCL@ @MEDIPACKINCL@ @MPIINCL@ @METISINCL@ @CHACOINCL@ @SCOTCHINCL@ @PLAPACKINCL@ @BLASLAPACKINCL@ @MKLINCL@ @MUMPSINCL@ @TRIANGLEINCL@ @SPAIINCL@ @HYPREINCL@ @PROMETHEUSINCL@ @SUPERLUINCL@ @SPOOLESINCL@ @PASTIXINCL@ @MLINCL@ @TAOINCL@ @ADIC2INCL@ @ADOLCINCL@ @CODIPACKINCL@ @GSLINCL@ @BOOSTINCL@ @ANDROID_NDKINCL@ @METEOIOINCL@ @SNOWPACKINCL@ @PROJINCL@ @ESMFINCL@
+AM_CPPFLAGS = @NEOPZINCL@ @DAKOTAINCL@ @SHAPELIBINCL@ @PETSCINCL@ @SLEPCINCL@ @AMPIINCL@ @ADJOINTMPIINCL@ @MEDIPACKINCL@ @MPIINCL@ @METISINCL@ @CHACOINCL@ @SCOTCHINCL@ @PLAPACKINCL@ @MKLINCL@ @MUMPSINCL@ @TRIANGLEINCL@ @SPAIINCL@ @HYPREINCL@ @PROMETHEUSINCL@ @SUPERLUINCL@ @SPOOLESINCL@ @PASTIXINCL@ @MLINCL@ @TAOINCL@ @ADIC2INCL@ @ADOLCINCL@ @CODIPACKINCL@ @GSLINCL@ @BOOSTINCL@ @ANDROID_NDKINCL@ @METEOIOINCL@ @SNOWPACKINCL@ @PROJINCL@ @ESMFINCL@
 AM_FCFLAGS = @SEMICINCL@
 
@@ -8,5 +8,8 @@
 #Library declaration {{{
 if !WINDOWS
-lib_LTLIBRARIES = libISSMCore.la libISSMOverload.la
+lib_LTLIBRARIES = libISSMCore.la
+if !MSYS2
+lib_LTLIBRARIES += libISSMOverload.la
+endif
 if WRAPPERS
 lib_LTLIBRARIES += libISSMModules.la
@@ -682,13 +685,18 @@
 #}}}
 #Library flags and sources {{{
-ALLCXXFLAGS= $(CXXFLAGS) $(CXXOPTFLAGS)
+ALL_CXXFLAGS = $(CXXFLAGS) $(CXXOPTFLAGS)
+
+if MSYS2
+ALL_CXXFLAGS += -D_DO_NOT_LOAD_GLOBALS_ # Cannot have undefined symbols under MSYS2
+ALL_CXXFLAGS += -D_USE_MATH_DEFINES # Need to open fence to math.h definitions when --std=c++ is used (which is the default)
+endif
 
 libISSMCore_la_SOURCES  = $(issm_sources)
-libISSMCore_la_CXXFLAGS = $(ALLCXXFLAGS) $(DAKOTAFLAGS)
+libISSMCore_la_CXXFLAGS = $(ALL_CXXFLAGS) $(DAKOTAFLAGS)
 libISSMCore_la_FFLAGS = $(AM_FFLAGS)
 
 if !WINDOWS
 if !STANDALONE_LIBRARIES
-libISSMCore_la_LIBADD = $(PETSCLIB) $(HDF5LIB) $(TAOLIB) $(M1QN3LIB) $(SEMICLIB) $(PLAPACKLIB) $(MUMPSLIB) $(SUPERLULIB) $(SPOOLESLIB) $(SCALAPACKLIB) $(BLACSLIB) $(HYPRELIB) $(SPAILIB) $(PROMETHEUSLIB) $(PASTIXLIB) $(MLLIB) $(DAKOTALIB) $(METISLIB) $(CHACOLIB) $(SCOTCHLIB) $(BLASLAPACKLIB) $(MKLLIB) $(MPILIB) $(MATHLIB) $(GRAPHICSLIB) $(MULTITHREADINGLIB) $(OSLIBS) $(GSLLIB) $(ADOLCLIB) $(AMPILIB) $(ADJOINTMPILIB) $(METEOIOLIB) $(SNOWPACKLIB)
+libISSMCore_la_LIBADD = $(PETSCLIB) $(MUMPSLIB) $(SCALAPACKLIB) $(BLASLAPACKLIB) $(PARMETISLIB) $(METISLIB) $(HDF5LIB) $(TAOLIB) $(M1QN3LIB) $(SEMICLIB) $(PLAPACKLIB) $(SUPERLULIB) $(SPOOLESLIB) $(BLACSLIB) $(HYPRELIB) $(SPAILIB) $(PROMETHEUSLIB) $(PASTIXLIB) $(MLLIB) $(DAKOTALIB) $(CHACOLIB) $(SCOTCHLIB) $(MKLLIB) $(MPILIB) $(MATHLIB) $(GRAPHICSLIB) $(MULTITHREADINGLIB) $(GSLLIB) $(ADOLCLIB) $(AMPILIB) $(ADJOINTMPILIB) $(METEOIOLIB) $(SNOWPACKLIB) $(OSLIBS)
 if FORTRAN
 libISSMCore_la_LIBADD += $(FLIBS) $(FORTRANLIB)
@@ -711,5 +719,5 @@
 endif
 
-libISSMModules_la_CXXFLAGS = $(ALLCXXFLAGS)
+libISSMModules_la_CXXFLAGS = $(ALL_CXXFLAGS)
 if !WINDOWS
 if STANDALONE_LIBRARIES
@@ -743,22 +751,39 @@
 endif
 
+if VERSION
+libISSMCore_la_LDFLAGS =
+if WRAPPERS
+libISSMModules_la_LDFLAGS =
+endif
+else
+libISSMCore_la_LDFLAGS = -avoid-version
+if WRAPPERS
+libISSMModules_la_LDFLAGS = -avoid-version
+endif
+endif
+
 if STANDALONE_LIBRARIES
-libISSMCore_la_LDFLAGS = -static
-libISSMOverload_la_LDFLAGS = -static
+libISSMCore_la_LDFLAGS += -static
 if WRAPPERS
-libISSMModules_la_LDFLAGS = -static
-else
-libISSMModules_la_LDFLAGS =
-endif
-else
-libISSMCore_la_LDFLAGS =
-libISSMOverload_la_LDFLAGS =
-endif
-
-#}}}
+libISSMModules_la_LDFLAGS += -static
+endif
+endif
+#}}}
+
+if !MSYS2
 #Overload library, to overload any non-standard symbols. {{{
 libISSMOverload_la_SOURCES = ./shared/String/ApiPrintf.cpp
-
 libISSMOverload_la_CFLAGS  = -D_C_ -fPIC $(COPTFLAGS) $(CFLAGS)
+
+if VERSION
+libISSMOverload_la_LDFLAGS =
+else
+libISSMOverload_la_LDFLAGS = -avoid-version
+endif
+
+if STANDALONE_LIBRARIES
+libISSMOverload_la_LDFLAGS += -static
+endif
+endif
 #}}}
 #Executable {{{
@@ -778,5 +803,10 @@
 
 #Standard libraries
-LDADD = ./libISSMCore.la ./libISSMOverload.la
+LDADD = ./libISSMCore.la 
+
+if !MSYS2
+LDADD += ./libISSMOverload.la
+endif
+
 if WRAPPERS
 LDADD += ./libISSMModules.la $(TRIANGLELIB)
@@ -784,5 +814,5 @@
 
 #External packages
-LDADD += $(NEOPZLIB) $(TAOLIB) $(M1QN3LIB) $(SEMICLIB) $(PLAPACKLIB) $(MUMPSLIB) $(SUPERLULIB) $(SPOOLESLIB) $(SCALAPACKLIB) $(BLACSLIB) $(PETSCLIB) $(HDF5LIB) $(HYPRELIB) $(SPAILIB) $(PROMETHEUSLIB) $(PASTIXLIB) $(MLLIB) $(DAKOTALIB) $(METISLIB) $(CHACOLIB) $(SCOTCHLIB) $(BLASLAPACKLIB) $(MKLLIB) $(MPILIB) $(MATHLIB) $(GRAPHICSLIB) $(MULTITHREADINGLIB) $(OSLIBS) $(GSLLIB) $(AMPILIB) $(ADJOINTMPILIB) $(ADOLCLIB) $(MPILIB) $(METEOIOLIB) $(SNOWPACKLIB) $(PROJLIB) $(ESMFLIB)
+LDADD +=  $(PETSCLIB) $(MUMPSLIB) $(SCALAPACKLIB) $(BLASLAPACKLIB) $(PARMETISLIB) $(METISLIB) $(NEOPZLIB) $(TAOLIB) $(M1QN3LIB) $(SEMICLIB) $(PLAPACKLIB) $(SUPERLULIB) $(SPOOLESLIB) $(BLACSLIB) $(HDF5LIB) $(HYPRELIB) $(SPAILIB) $(PROMETHEUSLIB) $(PASTIXLIB) $(MLLIB) $(DAKOTALIB) $(CHACOLIB) $(SCOTCHLIB) $(MKLLIB) $(MPILIB) $(MATHLIB) $(GRAPHICSLIB) $(MULTITHREADINGLIB) $(GSLLIB) $(AMPILIB) $(ADJOINTMPILIB) $(ADOLCLIB) $(MPILIB) $(METEOIOLIB) $(SNOWPACKLIB) $(PROJLIB) $(ESMFLIB) $(OSLIBS)
 
 if FORTRAN
Index: /issm/trunk-jpl/src/wrappers/matlab/Makefile.am
===================================================================
--- /issm/trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 26043)
+++ /issm/trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 26044)
@@ -20,8 +20,15 @@
 	./io/WriteMatlabData.cpp
 
-ALLCXXFLAGS= -fPIC -D_WRAPPERS_ $(CXXFLAGS) $(CXXOPTFLAGS)
+ALL_CXXFLAGS = -fPIC -D_WRAPPERS_
+
+if MSYS2
+ALL_CXXFLAGS += -D_DO_NOT_LOAD_GLOBALS_ # Cannot have undefined symbols under MSYS2
+ALL_CXXFLAGS += -D_USE_MATH_DEFINES # Need to open fence to math.h definitions when --std=c++ is used (which is the default)
+endif
+
+ALL_CXXFLAGS += $(CXXOPTFLAGS) $(CXXFLAGS)
 
 libISSMMatlab_la_SOURCES = $(io_sources)
-libISSMMatlab_la_CXXFLAGS= $(ALLCXXFLAGS)
+libISSMMatlab_la_CXXFLAGS = ${ALL_CXXFLAGS}
 #}}}
 #api io{{{
@@ -32,8 +39,10 @@
 endif
 
+if !MSYS2
 api_sources= ./io/ApiPrintf.cpp
 
 libISSMApi_la_SOURCES = $(api_sources)
-libISSMApi_la_CXXFLAGS= $(ALLCXXFLAGS)
+libISSMApi_la_CXXFLAGS = ${ALL_CXXFLAGS}
+endif
 #}}}
 #Wrappers {{{
@@ -82,8 +91,20 @@
 
 #Triangle library
-AM_CXXFLAGS =  -DTRILIBRARY -DANSI_DECLARATORS -DNO_TIMER -D_WRAPPERS_
+TRI_CXXFLAGS = -DTRILIBRARY -DANSI_DECLARATORS -DNO_TIMER
 
 #Matlab part
-AM_LDFLAGS = -module $(MEXLINK) -shrext ${EXEEXT} --export-dynamic -rdynamic -no-undefined
+MEX_CXXFLAGS = -D_HAVE_MATLAB_MODULES_ $(MEXOPTFLAGS) $(MEXCXXFLAGS)
+MEX_CPPFLAGS = $(MATLABINCL)
+MEX_LDFLAGS = -module -shrext $(MEXEXT) -no-undefined
+MEX_LIBADD = $(MEXLINKFLAGS) $(MEXLIB)
+
+AM_CPPFLAGS += ${MEX_CPPFLAGS}
+AM_CXXFLAGS = ${TRI_CXXFLAGS} ${MEX_CXXFLAGS}
+AM_LDFLAGS = ${MEX_LDFLAGS}
+AM_LIBADD = ${MEX_LIBADD}
+
+if !MSYS2
+AM_LDFLAGS += --export-dynamic -rdynamic
+endif
 
 if !VERSION
@@ -106,11 +127,15 @@
 endif
 
-AM_CXXFLAGS += -D_HAVE_MATLAB_MODULES_ -fPIC
-
-deps += ./libISSMMatlab.la ../../c/libISSMModules.la ../../c/libISSMCore.la ./libISSMApi.la
-
-if WINDOWS
-deps += $(METISLIB)
-endif
+AM_CXXFLAGS += -fPIC -D_WRAPPERS_
+
+deps += ./libISSMMatlab.la ../../c/libISSMCore.la ../../c/libISSMModules.la
+
+if !MSYS2
+deps += ./libISSMApi.la
+endif
+
+# if WINDOWS
+# deps += $(METISLIB)
+# endif
 
 if ADOLC
@@ -122,6 +147,6 @@
 endif
 
-#MEXLIB needs to be the last (undefined references on larsen)
-deps += ${MEXLIB}
+# #MEXLIB needs to be the last (undefined references on larsen)
+# deps += ${MEXLIB}
 
 #Optimization flags:
@@ -130,15 +155,23 @@
 # Module sources and dependencies {{{
 if !WINDOWS
-libISSMMatlab_la_LIBADD = ./../../c/libISSMCore.la ./../../c/libISSMModules.la $(PETSCLIB) $(HDF5LIB) $(BLASLAPACKLIB) $(MPILIB) $(NEOPZLIB) $(MKLLIB) $(GSLLIB) $(PROJLIB) $(MATHLIB) $(MEXLIB)
+libISSMMatlab_la_LIBADD = ./../../c/libISSMCore.la ./../../c/libISSMModules.la $(PETSCLIB) $(MUMPSLIB) $(SCALAPACKLIB) $(BLASLAPACKLIB) $(PARMETISLIB) $(METISLIB) $(HDF5LIB) $(MPILIB) $(NEOPZLIB) $(MKLLIB) $(GSLLIB) $(PROJLIB) $(MATHLIB) $(MEXLIB)
+endif
+
+if VERSION
+libISSMMatlab_la_LDFLAGS =
+libISSMApi_la_LDFLAGS =
+else
+libISSMMatlab_la_LDFLAGS = -avoid-version
+libISSMApi_la_LDFLAGS = -avoid-version
 endif
 
 if STANDALONE_LIBRARIES
-libISSMMatlab_la_LDFLAGS = -static
-libISSMApi_la_LDFLAGS = -static
-deps += $(PETSCLIB) $(HDF5LIB) $(TAOLIB) $(NEOPZLIB) $(M1QN3LIB) $(SEMICLIB) $(PLAPACKLIB) $(MUMPSLIB) $(SUPERLULIB) $(SPOOLESLIB) $(TRIANGLELIB) $(SCALAPACKLIB) $(BLACSLIB) $(HYPRELIB) $(SPAILIB) $(PROMETHEUSLIB) $(PASTIXLIB) $(MLLIB) $(DAKOTALIB) $(METISLIB) $(CHACOLIB) $(SCOTCHLIB) $(BLASLAPACKLIB) $(MKLLIB) $(MPILIB) $(MATHLIB) $(GRAPHICSLIB) $(MULTITHREADINGLIB) $(OSLIBS) $(GSLLIB) $(ADOLCLIB) $(AMPILIB) $(METEOIOLIB) $(SNOWPACKLIB)
-endif
-
-if !WINDOWS
-libISSMApi_la_LIBADD = $(PETSCLIB) $(HDF5LIB) $(BLASLAPACKLIB) $(MPILIB) $(NEOPZLIB) $(GSLLIB) $(PROJLIB) $(MATHLIB) $(MEXLIB)
+libISSMMatlab_la_LDFLAGS += -static
+libISSMApi_la_LDFLAGS += -static
+deps +=  $(PETSCLIB) $(MUMPSLIB) $(SCALAPACKLIB) $(BLASLAPACKLIB) $(PARMETISLIB) $(METISLIB) $(HDF5LIB) $(TAOLIB) $(M1QN3LIB) $(SEMICLIB) $(PLAPACKLIB) $(SUPERLULIB) $(SPOOLESLIB) $(TRIANGLELIB) $(BLACSLIB) $(HYPRELIB) $(SPAILIB) $(PROMETHEUSLIB) $(PASTIXLIB) $(MLLIB) $(DAKOTALIB) $(CHACOLIB) $(SCOTCHLIB) $(MKLLIB) $(MPILIB) $(NEOPZLIB) $(MATHLIB) $(GRAPHICSLIB) $(MULTITHREADINGLIB) $(GSLLIB) $(ADOLCLIB) $(AMPILIB) $(METEOIOLIB) $(SNOWPACKLIB) $(PROJLIB) $(OSLIBS)
+endif
+
+if !WINDOWS
+libISSMApi_la_LIBADD = $(PETSCLIB) $(MUMPSLIB) $(SCALAPACKLIB) $(BLASLAPACKLIB) $(PARMETISLIB) $(METISLIB) $(HDF5LIB) $(MPILIB) $(NEOPZLIB) $(GSLLIB) $(PROJLIB) $(MATHLIB) $(MEXLIB)
 endif
 
Index: /issm/trunk-jpl/src/wrappers/python/Makefile.am
===================================================================
--- /issm/trunk-jpl/src/wrappers/python/Makefile.am	(revision 26043)
+++ /issm/trunk-jpl/src/wrappers/python/Makefile.am	(revision 26044)
@@ -1,3 +1,3 @@
-AM_CPPFLAGS = @DAKOTAINCL@ @PETSCINCL@ @MPIINCL@ @SPOOLESINCL@ @METISINCL@ @TRIANGLEINCL@ @CHACOINCL@ @SCOTCHINCL@ @SHAPELIBINCL@ @PYTHONINCL@ @PYTHON_NUMPYINCL@ @AMPIINCL@ @ADJOINTMPIINCL@ @MEDIPACKINCL@ @CODIPACKINCL@
+AM_CPPFLAGS = @DAKOTAINCL@ @PETSCINCL@ @MPIINCL@ @SPOOLESINCL@ @PARMETISINCL@ @METISINCL@ @TRIANGLEINCL@ @CHACOINCL@ @SCOTCHINCL@ @SHAPELIBINCL@ @PYTHONINCL@ @PYTHON_NUMPYINCL@ @AMPIINCL@ @ADJOINTMPIINCL@ @MEDIPACKINCL@ @CODIPACKINCL@
 AUTOMAKE_OPTIONS = subdir-objects
 
@@ -106,5 +106,5 @@
 libISSMPython_la_LDFLAGS = -static
 libISSMApi_la_LDFLAGS = -static
-deps += $(DAKOTALIB) $(PETSCLIB) $(HDF5LIB) $(TAOLIB) $(NEOPZLIB) $(M1QN3LIB) $(SEMICLIB) $(PLAPACKLIB) $(MUMPSLIB) $(SUPERLULIB) $(SPOOLESLIB) $(TRIANGLELIB) $(SCALAPACKLIB) $(BLACSLIB) $(HYPRELIB) $(SPAILIB) $(PROMETHEUSLIB) $(PASTIXLIB) $(MLLIB) $(METISLIB) $(CHACOLIB) $(SCOTCHLIB) $(BLASLAPACKLIB) $(MKLLIB) $(MPILIB) $(MATHLIB) $(GRAPHICSLIB) $(MULTITHREADINGLIB) $(OSLIBS) $(GSLLIB) $(ADOLCLIB) $(AMPILIB) $(METEOIOLIB) $(SNOWPACKLIB)
+deps += $(DAKOTALIB) $(PETSCLIB) $(MUMPSLIB) $(SCALAPACKLIB) $(BLASLAPACKLIB) $(PARMETISLIB) $(METISLIB) $(HDF5LIB) $(TAOLIB) $(NEOPZLIB) $(M1QN3LIB) $(SEMICLIB) $(PLAPACKLIB) $(SUPERLULIB) $(SPOOLESLIB) $(TRIANGLELIB) $(BLACSLIB) $(HYPRELIB) $(SPAILIB) $(PROMETHEUSLIB) $(PASTIXLIB) $(MLLIB) $(CHACOLIB) $(SCOTCHLIB) $(MKLLIB) $(MPILIB) $(MATHLIB) $(GRAPHICSLIB) $(MULTITHREADINGLIB) $(GSLLIB) $(ADOLCLIB) $(AMPILIB) $(METEOIOLIB) $(SNOWPACKLIB) $(OSLIBS)
 endif
 
