From 4a396a608aefc3282baea76bc4e1965faa99b4f8 Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Fri, 16 Aug 2019 12:34:44 +0200 Subject: 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. --- build/linux/Makefile.in | 4 ++-- build/linux/acinclude.m4 | 20 ++++++++++++++++++-- build/linux/configure.ac | 17 +++++++++++++++++ 3 files changed, 37 insertions(+), 4 deletions(-) (limited to 'build') 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 -- cgit v1.2.1