Backport of:
https://github.com/Kst-plot/kst/commit/a9d24f91057441bbd2e3ed9e7536b071121526cb

From a9d24f91057441bbd2e3ed9e7536b071121526cb Mon Sep 17 00:00:00 2001
From: "D. V. Wiebe" <dvw@ketiltrout.net>
Date: Thu, 10 Mar 2016 14:09:26 -0800
Subject: [PATCH] GSL-2.x support.


--- src/plugins/fits/non_linear.h.orig	2014-02-13 09:41:44 UTC
+++ src/plugins/fits/non_linear.h
@@ -18,6 +18,7 @@
 #include <gsl/gsl_blas.h>
 #include <gsl/gsl_multifit_nlin.h>
 #include <gsl/gsl_statistics.h>
+#include <gsl/gsl_version.h>
 #include "common.h"
 
 struct data {
@@ -100,6 +101,7 @@ bool kstfit_nonlinear(
   gsl_multifit_function_fdf	function;
   gsl_vector_view vectorViewInitial;
   gsl_matrix* pMatrixCovariance;
+  gsl_matrix* pMatrixJacobian;
   struct data d;  
   double dXInitial[NUM_PARAMS];
   double* pInputX;
@@ -177,7 +179,16 @@ bool kstfit_nonlinear(
             }
             iIterations++;
           } while( iStatus == GSL_CONTINUE && iIterations < MAX_NUM_ITERATIONS );
-          gsl_multifit_covar( pSolver->J, 0.0, pMatrixCovariance );
+#if GSL_MAJOR_VERSION >= 2
+          pMatrixJacobian = gsl_matrix_alloc( iLength, NUM_PARAMS );
+#else
+          pMatrixJacobian = pSolver->J;
+#endif
+          if ( pMatrixJacobian != NULL ) {
+#if GSL_MAJOR_VERSION >= 2
+            gsl_multifit_fdfsolver_jac( pSolver, pMatrixJacobian );
+#endif
+          gsl_multifit_covar( pMatrixJacobian, 0.0, pMatrixCovariance );
 
           //
           // determine the fitted values...
@@ -207,7 +218,10 @@ bool kstfit_nonlinear(
           scalarOutChi->setValue(gsl_blas_dnrm2( pSolver->f ));
 
           bReturn = true;
-
+#if GSL_MAJOR_VERSION >= 2
+          gsl_matrix_free( pMatrixJacobian );
+#endif
+          }
           gsl_matrix_free( pMatrixCovariance );
         }
         gsl_multifit_fdfsolver_free( pSolver );
--- src/plugins/fits/non_linear_weighted.h.orig	2014-02-13 09:41:44 UTC
+++ src/plugins/fits/non_linear_weighted.h
@@ -18,6 +18,7 @@
 #include <gsl/gsl_blas.h>
 #include <gsl/gsl_multifit_nlin.h>
 #include <gsl/gsl_statistics.h>
+#include <gsl/gsl_version.h>
 #include "common.h"
 
 struct data {
@@ -101,6 +102,7 @@ bool kstfit_nonlinear_weighted(
   gsl_multifit_function_fdf	function;
   gsl_vector_view vectorViewInitial;
   gsl_matrix* pMatrixCovariance;
+  gsl_matrix* pMatrixJacobian;
   struct data d;  
   double dXInitial[NUM_PARAMS];
   double* pInputs[3];
@@ -193,7 +195,17 @@ bool kstfit_nonlinear_weighted(
           }
           while( iStatus == GSL_CONTINUE && iIterations < MAX_NUM_ITERATIONS );
 
-          gsl_multifit_covar( pSolver->J, 0.0, pMatrixCovariance );
+#if GSL_MAJOR_VERSION >= 2
+          pMatrixJacobian = gsl_matrix_alloc( iLength, NUM_PARAMS );
+#else
+          pMatrixJacobian = pSolver->J;
+#endif
+
+          if ( pMatrixJacobian != NULL ) {
+#if GSL_MAJOR_VERSION >= 2
+          gsl_multifit_fdfsolver_jac( pSolver, pMatrixJacobian );
+#endif
+          gsl_multifit_covar( pMatrixJacobian, 0.0, pMatrixCovariance );
 
           //
           // determine the fitted values...
@@ -223,7 +235,10 @@ bool kstfit_nonlinear_weighted(
           scalarOutChi->setValue(gsl_blas_dnrm2( pSolver->f ));
 
           bReturn = true;
-
+#if GSL_VERSION_MAJOR >= 2
+          gsl_matrix_free( pMatrixJacobian );
+#endif
+          }
           gsl_matrix_free( pMatrixCovariance );
         }
         gsl_multifit_fdfsolver_free( pSolver );
