From a54af094f2161d31138151ed71f7e0901821e84c Mon Sep 17 00:00:00 2001 From: Houtan Bastani Date: Tue, 18 Sep 2012 13:18:27 +0200 Subject: [PATCH] bug fix: slicot configuration (allow path specification using --with-slicot flag) --- m4/ax_slicot.m4 | 81 ++++++++++++++++++++++++++++++++ mex/build/kalman_steady_state.am | 1 + mex/build/matlab/configure.ac | 31 ++---------- mex/build/octave/configure.ac | 10 ++-- 4 files changed, 88 insertions(+), 35 deletions(-) create mode 100644 m4/ax_slicot.m4 diff --git a/m4/ax_slicot.m4 b/m4/ax_slicot.m4 new file mode 100644 index 000000000..ae29245ab --- /dev/null +++ b/m4/ax_slicot.m4 @@ -0,0 +1,81 @@ +dnl Detect the SLICOT Library. +dnl Called with an argument of either 'matlab' or 'octave', depending +dnl on the configure script from which we're calling it +dnl +dnl AX_SLICOT([matlab]) +dnl AX_SLICOT([octave]) +dnl +dnl Copyright (C) 2012 Dynare Team +dnl +dnl This file is part of Dynare. +dnl +dnl Dynare is free software: you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation, either version 3 of the License, or +dnl (at your option) any later version. +dnl +dnl Dynare is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +dnl GNU General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with Dynare. If not, see . + +AC_DEFUN([AX_SLICOT], +[ + if test "x$1" != "xmatlab" && test "x$1" != "xoctave"; then + AC_MSG_ERROR([Argument to autoconf slicot macro must be either 'matlab' or 'octave']) + fi + + AC_ARG_WITH(slicot, AC_HELP_STRING([--with-slicot=DIR], [prefix to SLICOT installation]), + slicot_prefix="$withval", slicot_prefix="") + has_slicot=yes + + if test "x$slicot_prefix" != "x"; then + LDFLAGS_SLICOT="-L$withval/lib" + else + LDFLAGS_SLICOT="" + fi + ac_save_LDFLAGS="$LDFLAGS" + LDFLAGS_SAVED="$LDFLAGS" + + AC_F77_FUNC(sb02od) + + if test "x$1" = "xmatlab"; then + case ${MATLAB_ARCH} in + maci | maci64) + # Work around for exported_symbols_list flag present in Mac MATLAB_LDFLAGS + LDFLAGS="$MATLAB_LDFLAGS_NOMAP $LDFLAGS_SLICOT" + ;; + *) + LDFLAGS="$LDFLAGS $MATLAB_LDFLAGS $LDFLAGS_SLICOT" + ;; + esac + case ${MATLAB_ARCH} in + glnxa64 | win64 | maci64) + AX_COMPARE_VERSION([$MATLAB_VERSION], [ge], [7.8], [use_64_bit_indexing=yes], [use_64_bit_indexing=no]) + ;; + *) + use_64_bit_indexing=no + ;; + esac + + if test "$use_64_bit_indexing" = "yes"; then + AC_CHECK_LIB([slicot64_pic], [$sb02od], [LIBADD_SLICOT="-lslicot64_pic"], [has_slicot=no], [$MATLAB_LIBS]) + else + AC_CHECK_LIB([slicot_pic], [$sb02od], [LIBADD_SLICOT="-lslicot_pic"], [has_slicot=no], [$MATLAB_LIBS]) + fi + else + LDFLAGS="$LDFLAGS $LDFLAGS_SLICOT" + AC_CHECK_LIB([slicot], [$sb02od], [LIBADD_SLICOT="-lslicot"], + [ + AC_CHECK_LIB([slicot_pic], [$sb02od], [LIBADD_SLICOT="-lslicot_pic"], [has_slicot=no], [`$MKOCTFILE -p BLAS_LIBS` `$MKOCTFILE -p LAPACK_LIBS`]) + ], # Fallback on libslicot_pic if dynamic libslicot not found + [`$MKOCTFILE -p BLAS_LIBS` `$MKOCTFILE -p LAPACK_LIBS`]) + fi + + LDFLAGS="$ac_save_LDFLAGS" + AC_SUBST(LDFLAGS_SLICOT) + AC_SUBST(LIBADD_SLICOT) +]) diff --git a/mex/build/kalman_steady_state.am b/mex/build/kalman_steady_state.am index 735c4576c..2413e0b61 100644 --- a/mex/build/kalman_steady_state.am +++ b/mex/build/kalman_steady_state.am @@ -1,5 +1,6 @@ noinst_PROGRAMS = kalman_steady_state kalman_steady_state_LDADD = $(LIBADD_SLICOT) +kalman_steady_state_LDFLAGS = $(LDFLAGS_SLICOT) nodist_kalman_steady_state_SOURCES = $(top_srcdir)/../../sources/kalman_steady_state/kalman_steady_state.cc diff --git a/mex/build/matlab/configure.ac b/mex/build/matlab/configure.ac index ca3011331..025d1acfa 100644 --- a/mex/build/matlab/configure.ac +++ b/mex/build/matlab/configure.ac @@ -83,33 +83,8 @@ AC_SUBST([LIBADD_MATIO]) AM_CONDITIONAL([HAVE_MATIO], [test "x$ac_cv_header_matio_h" = "xyes" -a "x$ac_cv_lib_matio_Mat_Open" = "xyes"]) # Check for libslicot, needed by kalman_steady_state -AC_F77_FUNC(sb02od) -LDFLAGS_SAVED=$LDFLAGS -case ${MATLAB_ARCH} in - maci | maci64) - # Work around for exported_symbols_list flag present in Mac MATLAB_LDFLAGS - LDFLAGS=$MATLAB_LDFLAGS_NOMAP - ;; - *) - LDFLAGS=$MATLAB_LDFLAGS - ;; -esac -case ${MATLAB_ARCH} in - glnxa64 | win64 | maci64) - AX_COMPARE_VERSION([$MATLAB_VERSION], [ge], [7.8], [use_64_bit_indexing=yes], [use_64_bit_indexing=no]) - ;; - *) - use_64_bit_indexing=no - ;; -esac -if test "$use_64_bit_indexing" = "yes"; then - AC_CHECK_LIB([slicot64_pic], [$sb02od], [LIBADD_SLICOT="-lslicot64_pic"], [], [$MATLAB_LIBS]) -else - AC_CHECK_LIB([slicot_pic], [$sb02od], [LIBADD_SLICOT="-lslicot_pic"], [], [$MATLAB_LIBS]) -fi -LDFLAGS=$LDFLAGS_SAVED -AC_SUBST([LIBADD_SLICOT]) -AM_CONDITIONAL([HAVE_SLICOT], [test "x$LIBADD_SLICOT" != "x"]) +AX_SLICOT([matlab]) +AM_CONDITIONAL([HAVE_SLICOT], [test "x$has_slicot" = "xyes"]) AM_CONDITIONAL([DO_SOMETHING], [test "x$ax_enable_matlab" = "xyes" -a "x$ax_matlab_version_ok" = "xyes" -a "x$ax_mexopts_ok" = "xyes"]) @@ -129,7 +104,7 @@ else BUILD_KORDER_DYNSIMUL_MEX_MATLAB="no (missing MatIO library)" fi -if test "x$ax_enable_matlab" = "xyes" -a "x$ax_matlab_version_ok" = "xyes" -a "x$ax_mexopts_ok" = "xyes" -a "x$LIBADD_SLICOT" != "x"; then +if test "x$ax_enable_matlab" = "xyes" -a "x$ax_matlab_version_ok" = "xyes" -a "x$ax_mexopts_ok" = "xyes" -a "x$has_slicot" = "xyes"; then BUILD_KALMAN_STEADY_STATE_MATLAB="yes" else BUILD_KALMAN_STEADY_STATE_MATLAB="no (missing SLICOT)" diff --git a/mex/build/octave/configure.ac b/mex/build/octave/configure.ac index 0491134c8..cf3fc7005 100644 --- a/mex/build/octave/configure.ac +++ b/mex/build/octave/configure.ac @@ -66,12 +66,8 @@ AC_SUBST([LIBADD_MATIO]) AM_CONDITIONAL([HAVE_MATIO], [test "x$ac_cv_header_matio_h" = "xyes" -a "x$ac_cv_lib_matio_Mat_Open" = "xyes"]) # Check for libslicot, needed by kalman_steady_state -AC_F77_FUNC(sb02od) -AC_CHECK_LIB([slicot], [$sb02od], [LIBADD_SLICOT="-lslicot"], - [AC_CHECK_LIB([slicot_pic], [$sb02od], [LIBADD_SLICOT="-lslicot_pic"], [], [`$MKOCTFILE -p BLAS_LIBS` `$MKOCTFILE -p LAPACK_LIBS`])], # Fallback on libslicot_pic if dynamic libslicot not found - [`$MKOCTFILE -p BLAS_LIBS` `$MKOCTFILE -p LAPACK_LIBS`]) -AC_SUBST([LIBADD_SLICOT]) -AM_CONDITIONAL([HAVE_SLICOT], [test "x$LIBADD_SLICOT" != "x"]) +AX_SLICOT([octave]) +AM_CONDITIONAL([HAVE_SLICOT], [test "x$has_slicot" = "xyes"]) AM_CONDITIONAL([DO_SOMETHING], [test "x$MKOCTFILE" != "x"]) @@ -91,7 +87,7 @@ else BUILD_ESTIMATION_KORDER_DYNSIMUL_MEX_OCTAVE="no (missing MatIO library)" fi -if test "x$MKOCTFILE" != "x" -a "x$LIBADD_SLICOT" != "x"; then +if test "x$MKOCTFILE" != "x" -a "x$has_slicot" = "xyes"; then BUILD_KALMAN_STEADY_STATE_OCTAVE="yes" else BUILD_KALMAN_STEADY_STATE_OCTAVE="no (missing SLICOT)"