aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--academic/root/root.SlackBuild3
-rw-r--r--academic/root/root_gsl2.patch42
2 files changed, 45 insertions, 0 deletions
diff --git a/academic/root/root.SlackBuild b/academic/root/root.SlackBuild
index aaed68d9ef44..0a182993d8cb 100644
--- a/academic/root/root.SlackBuild
+++ b/academic/root/root.SlackBuild
@@ -98,6 +98,9 @@ find -L . \
\( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
-exec chmod 644 {} \;
+# Fix building with gsl-2.1
+patch -p1 < $CWD/root_gsl2.patch
+
# Make sure we use system libs and headers
rm -r graf3d/ftgl/{inc,src} || die
rm -r graf2d/freetype/src || die
diff --git a/academic/root/root_gsl2.patch b/academic/root/root_gsl2.patch
new file mode 100644
index 000000000000..8f049d7e03bb
--- /dev/null
+++ b/academic/root/root_gsl2.patch
@@ -0,0 +1,42 @@
+diff -u -r root/math/mathmore/src/GSLMultiFit.h root-patched/math/mathmore/src/GSLMultiFit.h
+--- root/math/mathmore/src/GSLMultiFit.h 2015-06-23 16:56:20.000000000 +0100
++++ root-patched/math/mathmore/src/GSLMultiFit.h 2015-11-18 22:30:54.300681289 +0000
+@@ -32,6 +32,7 @@
+ #include "gsl/gsl_multifit_nlin.h"
+ #include "gsl/gsl_blas.h"
+ #include "GSLMultiFitFunctionWrapper.h"
++#include <gsl/gsl_version.h>
+
+ #include "Math/IFunction.h"
+ #include <string>
+@@ -139,7 +140,14 @@
+ /// gradient value at the minimum
+ const double * Gradient() const {
+ if (fSolver == 0) return 0;
+- gsl_multifit_gradient(fSolver->J, fSolver->f,fVec);
++#if GSL_MAJOR_VERSION >=2
++ gsl_matrix *J=gsl_matrix_alloc(fSolver->fdf->n, fSolver->fdf->p);
++ gsl_multifit_fdfsolver_jac (fSolver, J);
++ gsl_multifit_gradient(J, fSolver->f, fVec);
++ gsl_matrix_free(J);
++#else
++ gsl_multifit_gradient(fSolver->J, fSolver->f, fVec);
++#endif
+ return fVec->data;
+ }
+
+@@ -150,7 +158,14 @@
+ unsigned int npar = fSolver->fdf->p;
+ fCov = gsl_matrix_alloc( npar, npar );
+ static double kEpsrel = 0.0001;
++#if GSL_MAJOR_VERSION >=2
++ gsl_matrix *J=gsl_matrix_alloc(fSolver->fdf->n, fSolver->fdf->p);
++ gsl_multifit_fdfsolver_jac (fSolver, J);
++ int ret = gsl_multifit_covar(J, kEpsrel, fCov);
++ gsl_matrix_free(J);
++#else
+ int ret = gsl_multifit_covar(fSolver->J, kEpsrel, fCov);
++#endif
+ if (ret != GSL_SUCCESS) return 0;
+ return fCov->data;
+ }