summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWillem Jan Palenstijn <Willem.Jan.Palenstijn@cwi.nl>2019-08-16 12:34:44 +0200
committerWillem Jan Palenstijn <Willem.Jan.Palenstijn@cwi.nl>2019-08-16 12:34:44 +0200
commit4a396a608aefc3282baea76bc4e1965faa99b4f8 (patch)
tree1d41969dd8c747f9150256ebffbddedb426e2238
parentd9261bdb05cd0863a2c3747c812871dbb851646e (diff)
downloadastra-4a396a608aefc3282baea76bc4e1965faa99b4f8.tar.gz
astra-4a396a608aefc3282baea76bc4e1965faa99b4f8.tar.bz2
astra-4a396a608aefc3282baea76bc4e1965faa99b4f8.tar.xz
astra-4a396a608aefc3282baea76bc4e1965faa99b4f8.zip
Check for the mex -R2017b option in configure
Since we use mex for linking, but CXX for compiling, we also need to set a preprocessor macro to emulate the -R2017b option. Currently we use -DMATLAB_MEXCMD_RELEASE=700, but it is unclear if this is the recommended way. This is required to build with Matlab R2018a and newer.
-rw-r--r--build/linux/Makefile.in4
-rw-r--r--build/linux/acinclude.m420
-rw-r--r--build/linux/configure.ac17
3 files changed, 37 insertions, 4 deletions
diff --git a/build/linux/Makefile.in b/build/linux/Makefile.in
index 078a1a2..209206e 100644
--- a/build/linux/Makefile.in
+++ b/build/linux/Makefile.in
@@ -67,7 +67,7 @@ endif
ifeq ($(matlab),yes)
# TODO: Do we also want -fopenmp for octave?
-CPPFLAGS+=-I$(MATLAB_ROOT)/extern/include -DMATLAB_MEX_FILE
+CPPFLAGS+=-I$(MATLAB_ROOT)/extern/include -DMATLAB_MEX_FILE @CPPFLAGS_MATLAB@
ifeq ($(macos),no)
CXXFLAGS+=-fopenmp
LDFLAGS+=-fopenmp
@@ -101,7 +101,7 @@ endif
CPPFLAGS+=-I$(srcdir)/../../include -I$(srcdir)/../../lib/include
ifeq ($(matlab),yes)
-MEXFLAGS = -cxx
+MEXFLAGS = @MEXFLAGS@ -cxx
MEXLDFLAGS=\$$LDFLAGS $(MODLDFLAGS)
MEXLIBS = -lut
MEXSUFFIX = @MEXSUFFIX@
diff --git a/build/linux/acinclude.m4 b/build/linux/acinclude.m4
index d6866c3..135c1c6 100644
--- a/build/linux/acinclude.m4
+++ b/build/linux/acinclude.m4
@@ -38,8 +38,7 @@ extern "C" void mexFunction() {
}
_ACEOF
$CXX -fPIC -c -o conftest.o conftest.cc
-$MEX -cxx -output conftest conftest.o
-$2=""
+$MEX -cxx -output conftest conftest.o >/dev/null 2>&1
for suffix in $1; do
if test -f "conftest.$suffix"; then
$2="$suffix"
@@ -49,6 +48,23 @@ done
rm -f conftest.cc conftest.o
])
+dnl ASTRA_CHECK_MEX_OPTION(option, mex-suffix, action-if-supported, action-if-not-supported)
+dnl Check if an option is supported by mex.
+dnl We test if mex works by testing if it produces a mex file as output;
+dnl this is required since 'mex' is also a commonly installed LaTeX format
+AC_DEFUN([ASTRA_CHECK_MEX_OPTION],[
+cat >conftest.cc <<_ACEOF
+extern "C" void mexFunction() {
+}
+_ACEOF
+$CXX -fPIC -c -o conftest.o conftest.cc
+$MEX $1 -cxx -output conftest conftest.o >/dev/null 2>&1
+AS_IF([test -f "conftest.$2"],[
+ rm -f "conftest.$2"
+ $3],[$4])
+rm -f conftest.cc conftest.o
+])
+
dnl ASTRA_RUN_STOREOUTPUT(command, output)
AC_DEFUN([ASTRA_RUN_STOREOUTPUT],[{
diff --git a/build/linux/configure.ac b/build/linux/configure.ac
index ffb525a..0a9024e 100644
--- a/build/linux/configure.ac
+++ b/build/linux/configure.ac
@@ -174,7 +174,24 @@ if test x"$with_matlab" != x; then
fi
fi
+AC_MSG_CHECKING([if mex requires the -R2017b option])
+if test x"$HAVEMATLAB" = xyes; then
+ ASTRA_CHECK_MEX_OPTION([-R2017b],[$MEXSUFFIX],[
+ MEXFLAGS="-R2017b"
+ # TODO: check if this is the best way of emulating -R2017b when using
+ # CXX directly to compile mex files.
+ CPPFLAGS_MATLAB="-DMATLAB_MEXCMD_RELEASE=700"
+ AC_MSG_RESULT([yes])
+ ],[
+ MEXFLAGS=
+ CPPFLAGS_MATLAB=
+ AC_MSG_RESULT([no])
+ ])
+fi
+
AC_SUBST(HAVEMATLAB)
+AC_SUBST(MEXFLAGS)
+AC_SUBST(CPPFLAGS_MATLAB)
# octave