changeset 4427:2a53600c749c

of-sparsersb: enable buildability in dev octave * src/of-sparsersb-1-fixes.patch: updated patch * src/of-sparsersb.mk: call autogen.sh before build
author John D
date Fri, 21 Jul 2017 15:06:37 -0400
parents 342cc3ee5e4b
children 5693c55770ef
files src/of-sparsersb-1-fixes.patch src/of-sparsersb.mk
diffstat 2 files changed, 214 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/of-sparsersb-1-fixes.patch	Fri Jul 21 12:05:46 2017 -0400
+++ b/src/of-sparsersb-1-fixes.patch	Fri Jul 21 15:06:37 2017 -0400
@@ -10,3 +10,216 @@
  	rsb_nnz_idx_t nnzA = 0;
  	rsb_mtx_get_info(mtxAp,RSB_MIF_MATRIX_NNZ__TO__RSB_NNZ_INDEX_T,&nnzA); // FIXME: make this a member and use nnz()
  	rsboi_ri2oi((rsb_coo_idx_t *)IA,nnzA);
+diff -r e6017808f88d src/configure.ac
+--- a/src/configure.ac	Fri Jul 21 12:04:41 2017 -0400
++++ b/src/configure.ac	Fri Jul 21 13:25:48 2017 -0400
+@@ -107,11 +107,7 @@
+ 	fi
+ fi
+ 
+-if test -x `which $OCTAVE-cli` ; then
+-	OCTAVE_CLI="$OCTAVE-cli";
+-else
+-	OCTAVE_CLI="$OCTAVE";
+-fi
++OCTAVE_CLI="$OCTAVE --no-gui --no-window-system";
+ 
+ SPARSERSB_USE_64BIT_IDX=`$OCTAVE_CLI --no-line-editing -qf --eval 'printf ("%i", sizemax() > intmax ("int32"))'`
+ if [test x"$SPARSERSB_USE_64BIT_IDX" = x"1" ]; then
+diff -r 105149bc4206 src/Makeconf.in
+--- a/src/Makeconf.in	Fri Jul 21 13:47:46 2017 -0400
++++ b/src/Makeconf.in	Fri Jul 21 14:52:25 2017 -0400
+@@ -4,3 +4,4 @@
+ SPARSERSB_CXXFLAGS = @SPARSERSB_CXXFLAGS@
+ SPARSERSB_LDFLAGS = @SPARSERSB_LDFLAGS@
+ SPARSERSB_CXX11= @SPARSERSB_CXX11@
++OCTAVE_FUNC_DEFINES = @HAVE_OCTAVE_VALUE_ISCOMPLEX@
+diff -r 105149bc4206 src/Makefile
+--- a/src/Makefile	Fri Jul 21 13:47:46 2017 -0400
++++ b/src/Makefile	Fri Jul 21 14:52:25 2017 -0400
+@@ -1,7 +1,7 @@
+ sinclude Makeconf
+ # Makeconf is created by the configure script.
+ # You can also not use it but set explicitly the following:
+-CXXFLAGS=$(SPARSERSB_CXXFLAGS)
++CXXFLAGS=$(SPARSERSB_CXXFLAGS) $(OCTAVE_FUNC_DEFINES)
+ LFLAGS=$(shell $(MKOCTFILE) -p LFLAGS) $(SPARSERSB_LDFLAGS)
+ CXXFLAGS_CXX11=$(SPARSERSB_CXX11)
+ 
+diff -r 105149bc4206 src/configure.ac
+--- a/src/configure.ac	Fri Jul 21 13:47:46 2017 -0400
++++ b/src/configure.ac	Fri Jul 21 14:52:25 2017 -0400
+@@ -154,6 +154,40 @@
+ 	AC_MSG_ERROR([$PACKAGE_NAME requires librsb library])
+ fi
+ 
++# check for octave functions
++save_CXX="$CXX"
++save_CXXFLAGS="$CXXFLAGS"
++CXX=`${MKOCTFILE} -p CXX`
++CXXFLAGS="$CXXFLAGS -I`$MKOCTFILE -p OCTINCLUDEDIR`"
++
++# need to use interpreter->get_load_path in dev version of octave,
++# prior to that methods of load_path were static
++AC_CACHE_CHECK(
++  [for octave_value function iscomplex],
++  [octave_value_cv_iscomplex],
++  [AC_COMPILE_IFELSE(
++    [AC_LANG_PROGRAM([
++      #include <oct.h>
++      #include <octave.h>
++      ],
++      [
++        octave_value().iscomplex();
++      ])],
++    [octave_value_cv_iscomplex=yes],
++    [octave_value_cv_iscomplex=no])
++  ])
++if test "$octave_value_cv_iscomplex" = "yes" ; then
++  HAVE_OCTAVE_VALUE_ISCOMPLEX=-DHAVE_OCTAVE_VALUE_ISCOMPLEX
++else
++  HAVE_OCTAVE_VALUE_ISCOMPLEX=
++fi
++AC_SUBST(HAVE_OCTAVE_VALUE_ISCOMPLEX)
++
++CC=$save_CXX
++CXXFLAGS=$save_CXXFLAGS
++
++
++
+ AC_SUBST(OCTAVE)
+ AC_SUBST(TARGETS)
+ AC_SUBST(SPARSERSB_CXXFLAGS)
+@@ -163,6 +197,7 @@
+ AC_CONFIG_FILES([Makeconf])
+ AC_OUTPUT
+ 
++
+ AC_MSG_NOTICE([
+ 
+ $PACKAGE_NAME is configured with:
+diff -r 105149bc4206 src/sparsersb.cc
+--- a/src/sparsersb.cc	Fri Jul 21 13:47:46 2017 -0400
++++ b/src/sparsersb.cc	Fri Jul 21 14:52:25 2017 -0400
+@@ -177,7 +177,11 @@
+ 
+ #ifdef RSB_NUMERICAL_TYPE_DOUBLE_COMPLEX
+ #define RSBOI_WANT_DOUBLE_COMPLEX 1
++#ifdef HAVE_OCTAVE_VALUE_ISCOMPLEX
++#define ORSB_RSB_TYPE_FLAG(OBJ) (((OBJ).iscomplex())?RSB_NUMERICAL_TYPE_DOUBLE:RSB_NUMERICAL_TYPE_DOUBLE_COMPLEX)
++#else
+ #define ORSB_RSB_TYPE_FLAG(OBJ) (((OBJ).is_complex_type())?RSB_NUMERICAL_TYPE_DOUBLE:RSB_NUMERICAL_TYPE_DOUBLE_COMPLEX)
++#endif
+ #else
+ #define RSBOI_WANT_DOUBLE_COMPLEX 0
+ #define ORSB_RSB_TYPE_FLAG(OBJ) RSB_NUMERICAL_TYPE_DOUBLE
+@@ -228,7 +232,11 @@
+ }
+ #endif
+ #if RSBOI_WANT_DOUBLE_COMPLEX
++#ifdef HAVE_OCTAVE_VALUE_ISCOMPLEX
++#define RSBOI_BINOP_PREVAILING_TYPE(V1,V2) (((V1).iscomplex()||(V2).iscomplex())?RSB_NUMERICAL_TYPE_DOUBLE_COMPLEX:RSB_NUMERICAL_TYPE_DOUBLE)
++#else
+ #define RSBOI_BINOP_PREVAILING_TYPE(V1,V2) (((V1).is_complex_type()||(V2).is_complex_type())?RSB_NUMERICAL_TYPE_DOUBLE_COMPLEX:RSB_NUMERICAL_TYPE_DOUBLE)
++#endif
+ #else
+ #define RSBOI_BINOP_PREVAILING_TYPE(V1,V2) RSBOI_TYPECODE
+ #endif
+@@ -863,7 +871,11 @@
+ 		bool is_diagonal (void) const { RSBOI_0_EMCHECK(this->mtxAp); RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG);return RSB_DO_FLAG_HAS(this->rsbflags(),RSB_FLAG_DIAGONAL)?true:false; }/* FIXME: new: not sure whether this is ever called */
+ 		bool is_lower_triangular (void) const { RSBOI_0_EMCHECK(this->mtxAp); RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG);return RSB_DO_FLAG_HAS(this->rsbflags(),RSB_FLAG_LOWER_TRIANGULAR)?true:false; }/* FIXME: new: not sure whether this is ever called */
+ 		bool is_upper_triangular (void) const { RSBOI_0_EMCHECK(this->mtxAp); RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG);return RSB_DO_FLAG_HAS(this->rsbflags(),RSB_FLAG_UPPER_TRIANGULAR)?true:false; }/* FIXME: new: not sure whether this is ever called */
++#ifdef HAVE_OCTAVE_VALUE_ISCOMPLEX
++		bool iscomplex (void) const { RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG); return !is_real_type(); }
++#else
+ 		bool is_complex_type (void) const { RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG); return !is_real_type(); }
++#endif
+ 		bool is_bool_type (void) const { return false; }
+ 		bool is_integer_type (void) const { return false; }
+ 		bool is_square (void) const { return this->rows()==this->cols(); }
+@@ -1534,7 +1546,11 @@
+ 	rsb_err_t errval = RSB_ERR_NO_ERROR;
+ 	RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG);
+ 
++#ifdef HAVE_OCTAVE_VALUE_ISCOMPLEX
++	if(v1.iscomplex())
++#else
+ 	if(v1.is_complex_type())
++#endif
+ 	{
+ 		ComplexMatrix retval = v2.complex_matrix_value();
+ 		octave_idx_type b_nc = retval.cols ();
+@@ -1640,7 +1656,11 @@
+ 	if(v1.is__triangular()) 
+ 		return rsboi_spsm(v1,v2,RSB_TRANSPOSITION_N);
+ 
++#ifdef HAVE_OCTAVE_VALUE_ISCOMPLEX
++	if(v1.iscomplex() || v2.iscomplex())
++#else
+ 	if(v1.is_complex_type() || v2.is_complex_type())
++#endif
+ 		return (v1.sparse_complex_matrix_value()).solve(v2.sparse_complex_matrix_value());
+ 	else
+ 		return (v1.sparse_matrix_value()).solve(v2.matrix_value());
+@@ -1655,7 +1675,11 @@
+ 	if(v1.is__triangular()) 
+ 		return rsboi_spsm(v1,v2,RSB_TRANSPOSITION_T);
+ 
++#ifdef HAVE_OCTAVE_VALUE_ISCOMPLEX
++	if(v1.iscomplex() || v2.iscomplex())
++#else
+ 	if(v1.is_complex_type() || v2.is_complex_type())
++#endif
+ 		return (v1.sparse_complex_matrix_value().transpose()).solve(v2.sparse_complex_matrix_value());
+ 	else
+ 		return (v1.sparse_matrix_value().transpose()).solve(v2.matrix_value());
+@@ -1671,7 +1695,11 @@
+ 	if(v1.is__triangular()) 
+ 		return rsboi_spsm(v1,v2,RSB_TRANSPOSITION_N);
+ 
++#ifdef HAVE_OCTAVE_VALUE_ISCOMPLEX
++	if(v1.iscomplex() || v2.iscomplex())
++#else
+ 	if(v1.is_complex_type() || v2.is_complex_type())
++#endif
+ 		return (v1.sparse_complex_matrix_value()).solve(v2.sparse_complex_matrix_value());
+ 	else
+ 		return (v1.sparse_matrix_value()).solve(v2.matrix_value());
+@@ -1685,7 +1713,11 @@
+ 	if(v1.is__triangular()) 
+ 		return rsboi_spsm(v1,v2,RSB_TRANSPOSITION_T);
+ 
++#ifdef HAVE_OCTAVE_VALUE_ISCOMPLEX
++	if(v1.iscomplex() || v2.iscomplex())
++#else
+ 	if(v1.is_complex_type() || v2.is_complex_type())
++#endif
+ 		return (v1.sparse_complex_matrix_value().transpose()).solve(v2.sparse_complex_matrix_value());
+ 	else
+ 		return (v1.sparse_matrix_value().transpose()).solve(v2.matrix_value());
+@@ -2199,8 +2231,13 @@
+ 	int nargin = args.length ();
+ 	octave_value_list retval;
+ 	octave_sparsersb_mtx*osmp = RSBOI_NULL;
++#ifdef HAVE_OCTAVE_VALUE_ISCOMPLEX
++	bool ic0 = nargin>0?(args(0).iscomplex()):false;
++	bool ic3 = nargin>2?(args(2).iscomplex()):false;
++#else
+ 	bool ic0 = nargin>0?(args(0).is_complex_type()):false;
+ 	bool ic3 = nargin>2?(args(2).is_complex_type()):false;
++#endif
+ 	bool isr = (nargin>0 && args(0).type_name()==RSB_OI_TYPEINFO_STRING);
+ 
+ 	RSBOI_DEBUG_NOTICE("in sparsersb()\n");
+@@ -2522,7 +2559,11 @@
+ 				if(nargout) retval.append(osmp->cols()),--nargout;
+ 				if(nargout) retval.append(osmp->nnz()),--nargout;
+ 				if(nargout) retval.append(osmp->get_info_string()),--nargout;
++#ifdef HAVE_OCTAVE_VALUE_ISCOMPLEX
++				if(nargout) retval.append((!osmp->iscomplex())?"real":"complex"),--nargout;
++#else
+ 				if(nargout) retval.append((!osmp->is_complex_type())?"real":"complex"),--nargout;
++#endif
+ 				if(nargout) retval.append(osmp->get_symmetry()),--nargout;
+ 			}
+ 		}
--- a/src/of-sparsersb.mk	Fri Jul 21 12:05:46 2017 -0400
+++ b/src/of-sparsersb.mk	Fri Jul 21 15:06:37 2017 -0400
@@ -18,5 +18,6 @@
 endef
 
 define $(PKG)_BUILD
+    cd $(1)/src && ./autogen.sh
     $(OCTAVE_FORGE_PKG_BUILD)
 endef