diff -up octave-3.8.2/libinterp/dldfcn/amd.cc.suitesparse octave-3.8.2/libinterp/dldfcn/amd.cc --- octave-3.8.2/libinterp/dldfcn/amd.cc.suitesparse 2014-08-06 11:57:55.000000000 -0600 +++ octave-3.8.2/libinterp/dldfcn/amd.cc 2014-09-12 15:53:32.819832086 -0600 @@ -164,11 +164,11 @@ The author of the code itself is Timothy // FIXME: how can we manage the memory allocation of amd // in a cleaner manner? - amd_malloc = malloc; - amd_free = free; - amd_calloc = calloc; - amd_realloc = realloc; - amd_printf = printf; + suitesparse_assign_function(malloc_func, amd_malloc, malloc); + suitesparse_assign_function(free_func, amd_free, free); + suitesparse_assign_function(calloc_func, amd_calloc, calloc); + suitesparse_assign_function(realloc_func, amd_realloc, realloc); + suitesparse_assign_function(printf_func, amd_printf, printf); octave_idx_type result = AMD_NAME (_order) (n_col, cidx, ridx, P, Control, Info); diff -up octave-3.8.2/libinterp/dldfcn/symbfact.cc.suitesparse octave-3.8.2/libinterp/dldfcn/symbfact.cc --- octave-3.8.2/libinterp/dldfcn/symbfact.cc.suitesparse 2014-08-06 11:54:15.000000000 -0600 +++ octave-3.8.2/libinterp/dldfcn/symbfact.cc 2014-09-12 15:53:32.821832075 -0600 @@ -114,17 +114,17 @@ factorization as determined by @var{typ} if (spu == 0.) { cm->print = -1; - cm->print_function = 0; + suitesparse_assign_function(printf_func, cm->print_function, 0); } else { cm->print = static_cast (spu) + 2; - cm->print_function =&SparseCholPrint; + suitesparse_assign_function(printf_func, cm->print_function, &SparseCholPrint); } cm->error_handler = &SparseCholError; - cm->complex_divide = CHOLMOD_NAME(divcomplex); - cm->hypotenuse = CHOLMOD_NAME(hypot); + suitesparse_assign_function(divcomplex_func, cm->complex_divide, CHOLMOD_NAME(divcomplex)); + suitesparse_assign_function(hypot_func, cm->hypotenuse, CHOLMOD_NAME(hypot)); double dummy; cholmod_sparse Astore; diff -up octave-3.8.2/liboctave/array/CSparse.cc.suitesparse octave-3.8.2/liboctave/array/CSparse.cc --- octave-3.8.2/liboctave/array/CSparse.cc.suitesparse 2014-08-06 11:57:55.000000000 -0600 +++ octave-3.8.2/liboctave/array/CSparse.cc 2014-09-12 15:53:33.791827033 -0600 @@ -5664,17 +5664,17 @@ SparseComplexMatrix::fsolve (MatrixType if (spu == 0.) { cm->print = -1; - cm->print_function = 0; + suitesparse_assign_function(printf_func, cm->print_function, 0); } else { cm->print = static_cast (spu) + 2; - cm->print_function =&SparseCholPrint; + suitesparse_assign_function(printf_func, cm->print_function, &SparseCholPrint); } cm->error_handler = &SparseCholError; - cm->complex_divide = CHOLMOD_NAME(divcomplex); - cm->hypotenuse = CHOLMOD_NAME(hypot); + suitesparse_assign_function(divcomplex_func, cm->complex_divide, CHOLMOD_NAME(divcomplex)); + suitesparse_assign_function(hypot_func, cm->hypotenuse, CHOLMOD_NAME(hypot)); cm->final_ll = true; @@ -5907,17 +5907,17 @@ SparseComplexMatrix::fsolve (MatrixType if (spu == 0.) { cm->print = -1; - cm->print_function = 0; + suitesparse_assign_function(printf_func, cm->print_function, 0); } else { cm->print = static_cast (spu) + 2; - cm->print_function =&SparseCholPrint; + suitesparse_assign_function(printf_func, cm->print_function, &SparseCholPrint); } cm->error_handler = &SparseCholError; - cm->complex_divide = CHOLMOD_NAME(divcomplex); - cm->hypotenuse = CHOLMOD_NAME(hypot); + suitesparse_assign_function(divcomplex_func, cm->complex_divide, CHOLMOD_NAME(divcomplex)); + suitesparse_assign_function(hypot_func, cm->hypotenuse, CHOLMOD_NAME(hypot)); cm->final_ll = true; @@ -6198,17 +6198,17 @@ SparseComplexMatrix::fsolve (MatrixType if (spu == 0.) { cm->print = -1; - cm->print_function = 0; + suitesparse_assign_function(printf_func, cm->print_function, 0); } else { cm->print = static_cast (spu) + 2; - cm->print_function =&SparseCholPrint; + suitesparse_assign_function(printf_func, cm->print_function, &SparseCholPrint); } cm->error_handler = &SparseCholError; - cm->complex_divide = CHOLMOD_NAME(divcomplex); - cm->hypotenuse = CHOLMOD_NAME(hypot); + suitesparse_assign_function(divcomplex_func, cm->complex_divide, CHOLMOD_NAME(divcomplex)); + suitesparse_assign_function(hypot_func, cm->hypotenuse, CHOLMOD_NAME(hypot)); cm->final_ll = true; @@ -6420,17 +6420,17 @@ SparseComplexMatrix::fsolve (MatrixType if (spu == 0.) { cm->print = -1; - cm->print_function = 0; + suitesparse_assign_function(printf_func, cm->print_function, 0); } else { cm->print = static_cast (spu) + 2; - cm->print_function =&SparseCholPrint; + suitesparse_assign_function(printf_func, cm->print_function, &SparseCholPrint); } cm->error_handler = &SparseCholError; - cm->complex_divide = CHOLMOD_NAME(divcomplex); - cm->hypotenuse = CHOLMOD_NAME(hypot); + suitesparse_assign_function(divcomplex_func, cm->complex_divide, CHOLMOD_NAME(divcomplex)); + suitesparse_assign_function(hypot_func, cm->hypotenuse, CHOLMOD_NAME(hypot)); cm->final_ll = true; diff -up octave-3.8.2/liboctave/array/dSparse.cc.suitesparse octave-3.8.2/liboctave/array/dSparse.cc --- octave-3.8.2/liboctave/array/dSparse.cc.suitesparse 2014-08-06 11:57:55.000000000 -0600 +++ octave-3.8.2/liboctave/array/dSparse.cc 2014-09-12 15:53:33.756827215 -0600 @@ -5866,17 +5866,17 @@ SparseMatrix::fsolve (MatrixType &mattyp if (spu == 0.) { cm->print = -1; - cm->print_function = 0; + suitesparse_assign_function(printf_func, cm->print_function, 0); } else { cm->print = static_cast (spu) + 2; - cm->print_function =&SparseCholPrint; + suitesparse_assign_function(printf_func, cm->print_function, &SparseCholPrint); } cm->error_handler = &SparseCholError; - cm->complex_divide = CHOLMOD_NAME(divcomplex); - cm->hypotenuse = CHOLMOD_NAME(hypot); + suitesparse_assign_function(divcomplex_func, cm->complex_divide, CHOLMOD_NAME(divcomplex)); + suitesparse_assign_function(hypot_func, cm->hypotenuse, CHOLMOD_NAME(hypot)); cm->final_ll = true; @@ -6083,17 +6083,17 @@ SparseMatrix::fsolve (MatrixType &mattyp if (spu == 0.) { cm->print = -1; - cm->print_function = 0; + suitesparse_assign_function(printf_func, cm->print_function, 0); } else { cm->print = static_cast (spu) + 2; - cm->print_function =&SparseCholPrint; + suitesparse_assign_function(printf_func, cm->print_function, &SparseCholPrint); } cm->error_handler = &SparseCholError; - cm->complex_divide = CHOLMOD_NAME(divcomplex); - cm->hypotenuse = CHOLMOD_NAME(hypot); + suitesparse_assign_function(divcomplex_func, cm->complex_divide, CHOLMOD_NAME(divcomplex)); + suitesparse_assign_function(hypot_func, cm->hypotenuse, CHOLMOD_NAME(hypot)); cm->final_ll = true; @@ -6345,17 +6345,17 @@ SparseMatrix::fsolve (MatrixType &mattyp if (spu == 0.) { cm->print = -1; - cm->print_function = 0; + suitesparse_assign_function(printf_func, cm->print_function, 0); } else { cm->print = static_cast (spu) + 2; - cm->print_function =&SparseCholPrint; + suitesparse_assign_function(printf_func, cm->print_function, &SparseCholPrint); } cm->error_handler = &SparseCholError; - cm->complex_divide = CHOLMOD_NAME(divcomplex); - cm->hypotenuse = CHOLMOD_NAME(hypot); + suitesparse_assign_function(divcomplex_func, cm->complex_divide, CHOLMOD_NAME(divcomplex)); + suitesparse_assign_function(hypot_func, cm->hypotenuse, CHOLMOD_NAME(hypot)); cm->final_ll = true; @@ -6579,17 +6579,17 @@ SparseMatrix::fsolve (MatrixType &mattyp if (spu == 0.) { cm->print = -1; - cm->print_function = 0; + suitesparse_assign_function(printf_func, cm->print_function, 0); } else { cm->print = static_cast (spu) + 2; - cm->print_function =&SparseCholPrint; + suitesparse_assign_function(printf_func, cm->print_function, &SparseCholPrint); } cm->error_handler = &SparseCholError; - cm->complex_divide = CHOLMOD_NAME(divcomplex); - cm->hypotenuse = CHOLMOD_NAME(hypot); + suitesparse_assign_function(divcomplex_func, cm->complex_divide, CHOLMOD_NAME(divcomplex)); + suitesparse_assign_function(hypot_func, cm->hypotenuse, CHOLMOD_NAME(hypot)); cm->final_ll = true; diff -up octave-3.8.2/liboctave/numeric/sparse-base-chol.cc.suitesparse octave-3.8.2/liboctave/numeric/sparse-base-chol.cc --- octave-3.8.2/liboctave/numeric/sparse-base-chol.cc.suitesparse 2014-08-06 11:54:14.000000000 -0600 +++ octave-3.8.2/liboctave/numeric/sparse-base-chol.cc 2014-09-12 15:53:33.521828437 -0600 @@ -105,17 +105,17 @@ sparse_base_cholprint = -1; - cm->print_function = 0; + suitesparse_assign_function(printf_func, cm->print_function, 0); } else { cm->print = static_cast (spu) + 2; - cm->print_function =&SparseCholPrint; + suitesparse_assign_function(printf_func, cm->print_function, &SparseCholPrint); } cm->error_handler = &SparseCholError; - cm->complex_divide = CHOLMOD_NAME(divcomplex); - cm->hypotenuse = CHOLMOD_NAME(hypot); + suitesparse_assign_function(divcomplex_func, cm->complex_divide, CHOLMOD_NAME(divcomplex)); + suitesparse_assign_function(hypot_func, cm->hypotenuse, CHOLMOD_NAME(hypot)); cm->final_asis = false; cm->final_super = false; diff -up octave-3.8.2/liboctave/util/oct-sparse.h.suitesparse octave-3.8.2/liboctave/util/oct-sparse.h --- octave-3.8.2/liboctave/util/oct-sparse.h.suitesparse 2014-08-06 11:54:15.000000000 -0600 +++ octave-3.8.2/liboctave/util/oct-sparse.h 2014-09-15 12:14:12.663644773 -0600 @@ -94,4 +94,12 @@ along with Octave; see the file COPYING. #endif #endif +// Cope with new suitesparse versions +// +#if defined( SUITESPARSE_VERSION ) && SUITESPARSE_VERSION >= SUITESPARSE_VER_CODE(4,3) +#define suitesparse_assign_function(f_name,f_var,f_assign) (SuiteSparse_config.f_name = f_assign) +#else +#define suitesparse_assign_function(f_name,f_var,f_assign) (f_var = f_assign) +#endif + #endif