[SCM] Levenberg-Marquardt nonlinear least squares algorithm branch, master, updated. 02f0a390745764baa059677cd6281c256705620c

Ole Streicher github at liska.ath.cx
Mon Apr 16 11:41:42 UTC 2012


The following commit has been merged in the master branch:
commit 02f0a390745764baa059677cd6281c256705620c
Author: Ole Streicher <github at liska.ath.cx>
Date:   Mon Apr 16 13:40:48 2012 +0200

    Initial debian files

diff --git a/debian/changelog b/debian/changelog
new file mode 100644
index 0000000..c529586
--- /dev/null
+++ b/debian/changelog
@@ -0,0 +1,5 @@
+levmar (2.6-1) unstable; urgency=low
+
+  * Initial package. Closes: #546202
+
+ -- Ole Streicher <debian at liska.ath.cx>  Mon, 16 Apr 2012 13:45:00 +0200
diff --git a/debian/clean b/debian/clean
new file mode 100644
index 0000000..7f8b575
--- /dev/null
+++ b/debian/clean
@@ -0,0 +1 @@
+sobj/*
diff --git a/debian/compat b/debian/compat
new file mode 100644
index 0000000..7f8f011
--- /dev/null
+++ b/debian/compat
@@ -0,0 +1 @@
+7
diff --git a/debian/control b/debian/control
new file mode 100644
index 0000000..21699da
--- /dev/null
+++ b/debian/control
@@ -0,0 +1,46 @@
+Source: levmar
+Priority: extra
+Maintainer: Debian Science Maintainers <debian-science-maintainers at lists.alioth.debian.org>
+Uploader: Ole Streicher <debian at liska.ath.cx>
+Build-Depends: autotools-dev, debhelper (>= 7.0.50), libf2c2-dev, liblapack-dev
+Standards-Version: 3.9.3
+Section: science
+Homepage: http://www.ics.forth.gr/~lourakis/levmar/
+
+Package: liblevmar-dev
+Section: libdevel
+Architecture: any
+Depends: liblevmar2 (= ${binary:Version}), ${misc:Depends}
+Description: Levenberg-Marquardt nonlinear least squares algorithm (devel)
+ levmar is a native ANSI C implementation of the Levenberg-Marquardt
+ optimization algorithm.  Both unconstrained and constrained (under linear
+ equations, inequality and box constraints) Levenberg-Marquardt variants are
+ included.  The LM algorithm is an iterative technique that finds a local
+ minimum of a function that is expressed as the sum of squares of nonlinear
+ functions.  It has become a standard technique for nonlinear least-squares
+ problems and can be thought of as a combination of steepest descent and the
+ Gauss-Newton method.  When the current solution is far from the correct on,
+ the algorithm behaves like a steepest descent method: slow, but guaranteed
+ to converge.  When the current solution is close to the correct solution, it
+ becomes a Gauss-Newton method.
+ .
+ This package contains the header file and the demo program.
+
+Package: liblevmar2
+Section: libs
+Architecture: any
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Description: Levenberg-Marquardt nonlinear least squares algorithm
+ levmar is a native ANSI C implementation of the Levenberg-Marquardt
+ optimization algorithm.  Both unconstrained and constrained (under linear
+ equations, inequality and box constraints) Levenberg-Marquardt variants are
+ included.  The LM algorithm is an iterative technique that finds a local
+ minimum of a function that is expressed as the sum of squares of nonlinear
+ functions.  It has become a standard technique for nonlinear least-squares
+ problems and can be thought of as a combination of steepest descent and the
+ Gauss-Newton method.  When the current solution is far from the correct on,
+ the algorithm behaves like a steepest descent method: slow, but guaranteed
+ to converge.  When the current solution is close to the correct solution, it
+ becomes a Gauss-Newton method.
+ .
+ This package contains the shared library.
diff --git a/debian/copyright b/debian/copyright
new file mode 100644
index 0000000..55d28e5
--- /dev/null
+++ b/debian/copyright
@@ -0,0 +1,28 @@
+Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Upstream-Name: levmar
+Upstream-Author: Manolis Lourakis <lourakis (at) ics (dot) forth (dot) gr>
+Source: http://www.ics.forth.gr/~lourakis/levmar/
+
+Files: *
+Copyright: Copyright (C) 2004-2009  Manolis Lourakis (lourakis at ics forth gr)
+ Institute of Computer Science, Foundation for Research & Technology - Hellas
+ Heraklion, Crete, Greece.
+License: GPLv2+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+ .
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ .
+ On Debian systems, the complete text of the GNU General
+ Public License can be found in `/usr/share/common-licenses/GPL-2'.
+
+Files: debian/*
+Copyright: not applicable
+License: public-domain
+ Debian packaging by Ole Streicher <debian at liska.ath.cx>
+ with contributions from Daniil Ivanov <daniil.ivanov at gmail.com>
diff --git a/debian/liblevmar-dev.install b/debian/liblevmar-dev.install
new file mode 100644
index 0000000..7a88298
--- /dev/null
+++ b/debian/liblevmar-dev.install
@@ -0,0 +1,2 @@
+levmar.h usr/include/
+sobj/liblevmar.so usr/lib/
diff --git a/debian/liblevmar2.install b/debian/liblevmar2.install
new file mode 100644
index 0000000..f825eea
--- /dev/null
+++ b/debian/liblevmar2.install
@@ -0,0 +1 @@
+sobj/liblevmar.so.* usr/lib/
diff --git a/debian/patches/fix_makefile_so.patch b/debian/patches/fix_makefile_so.patch
new file mode 100644
index 0000000..5013161
--- /dev/null
+++ b/debian/patches/fix_makefile_so.patch
@@ -0,0 +1,38 @@
+Author: Daniil Ivanov <daniil.ivanov at gmail.com>
+Description: Actually use LIBS, not just define them; add math library to LIBS;
+ remove end line comment
+--- a/Makefile.so
++++ b/Makefile.so
+@@ -6,7 +6,7 @@
+ # major & minor shared lib numbers
+ MAJ=2
+ MIN=2
+-ODIR=sobj # where to place object files for shared lib
++ODIR=sobj
+ CC=gcc
+ CONFIGFLAGS=-ULINSOLVERS_RETAIN_MEMORY
+ #ARCHFLAGS=-march=pentium4 # YOU MIGHT WANT TO UNCOMMENT THIS FOR P4
+@@ -14,14 +14,21 @@
+ LAPACKLIBS_PATH=/usr/local/lib # WHEN USING LAPACK, CHANGE THIS TO WHERE YOUR COMPILED LIBS ARE!
+ LIBOBJS=$(ODIR)/lm.o $(ODIR)/Axb.o $(ODIR)/misc.o $(ODIR)/lmlec.o $(ODIR)/lmbc.o $(ODIR)/lmblec.o $(ODIR)/lmbleic.o
+ LIBSRCS=lm.c Axb.c misc.c lmlec.c lmbc.c lmblec.c lmbleic.c
+-LAPACKLIBS=-llapack -lblas -lf2c # comment this line if you are not using LAPACK.
++LAPACKLIBS=-llapack -lblas -lf2c -lm # comment this line if you are not using LAPACK.
+                                  # On systems with a FORTRAN (not f2c'ed) version of LAPACK, -lf2c is
+                                  # not necessary; on others, -lf2c is equivalent to -lF77 -lI77
+ 
+ LIBS=$(LAPACKLIBS)
+ 
++all: $(ODIR)/liblevmar.so.$(MAJ).$(MIN) $(ODIR)/liblevmar.so.$(MAJ) $(ODIR)/liblevmar.so
+ $(ODIR)/liblevmar.so.$(MAJ).$(MIN): $(LIBOBJS)
+-	$(CC) -shared -Wl,-soname,liblevmar.so.$(MAJ) -o $(ODIR)/liblevmar.so.$(MAJ).$(MIN) $(LIBOBJS) #-llapack -lblas -lf2c
++	$(CC) -shared -Wl,-soname,liblevmar.so.$(MAJ) -o $@ $(LIBOBJS) $(LIBS)
++
++$(ODIR)/liblevmar.so.$(MAJ):
++	ln -s liblevmar.so.$(MAJ).$(MIN) $@
++
++$(ODIR)/liblevmar.so:
++	ln -s liblevmar.so.$(MAJ).$(MIN) $@
+ 
+ # implicit rule for generating *.o files in ODIR from *.c files
+ $(ODIR)/%.o : %.c
diff --git a/debian/patches/replace_exit_by_abort.patch b/debian/patches/replace_exit_by_abort.patch
new file mode 100644
index 0000000..56648f5
--- /dev/null
+++ b/debian/patches/replace_exit_by_abort.patch
@@ -0,0 +1,323 @@
+Author: Ole Streicher <debian at liska.ath.cx>
+Description: In case of an unrecoverable error, the library should call
+ abort() instead of exit() to allow a better debugging of the library since 
+ abort() may be catched by a signal.
+--- a/Axb_core.c
++++ b/Axb_core.c
+@@ -161,7 +161,7 @@
+       buf=(LM_REAL *)malloc(buf_sz*sizeof(LM_REAL));
+       if(!buf){
+         fprintf(stderr, RCAT("memory allocation in ", AX_EQ_B_QR) "() failed!\n");
+-        exit(1);
++        abort();
+       }
+     }
+ #else
+@@ -169,7 +169,7 @@
+       buf=(LM_REAL *)malloc(buf_sz*sizeof(LM_REAL));
+       if(!buf){
+         fprintf(stderr, RCAT("memory allocation in ", AX_EQ_B_QR) "() failed!\n");
+-        exit(1);
++        abort();
+       }
+ #endif /* LINSOLVERS_RETAIN_MEMORY */
+ 
+@@ -189,7 +189,7 @@
+   if(info!=0){
+     if(info<0){
+       fprintf(stderr, RCAT(RCAT("LAPACK error: illegal value for argument %d of ", GEQRF) " in ", AX_EQ_B_QR) "()\n", -info);
+-      exit(1);
++      abort();
+     }
+     else{
+       fprintf(stderr, RCAT(RCAT("Unknown LAPACK error %d for ", GEQRF) " in ", AX_EQ_B_QR) "()\n", info);
+@@ -209,7 +209,7 @@
+   if(info!=0){
+     if(info<0){
+       fprintf(stderr, RCAT(RCAT("LAPACK error: illegal value for argument %d of ", ORGQR) " in ", AX_EQ_B_QR) "()\n", -info);
+-      exit(1);
++      abort();
+     }
+     else{
+       fprintf(stderr, RCAT("Unknown LAPACK error (%d) in ", AX_EQ_B_QR) "()\n", info);
+@@ -234,7 +234,7 @@
+   if(info!=0){
+     if(info<0){
+       fprintf(stderr, RCAT(RCAT("LAPACK error: illegal value for argument %d of ", TRTRS) " in ", AX_EQ_B_QR) "()\n", -info);
+-      exit(1);
++      abort();
+     }
+     else{
+       fprintf(stderr, RCAT("LAPACK error: the %d-th diagonal element of A is zero (singular matrix) in ", AX_EQ_B_QR) "()\n", info);
+@@ -300,7 +300,7 @@
+    
+     if(m<n){
+ 		  fprintf(stderr, RCAT("Normal equations require that the number of rows is greater than number of columns in ", AX_EQ_B_QRLS) "() [%d x %d]! -- try transposing\n", m, n);
+-		  exit(1);
++		  abort();
+ 	  }
+       
+     /* calculate required memory size */
+@@ -325,7 +325,7 @@
+       buf=(LM_REAL *)malloc(buf_sz*sizeof(LM_REAL));
+       if(!buf){
+         fprintf(stderr, RCAT("memory allocation in ", AX_EQ_B_QRLS) "() failed!\n");
+-        exit(1);
++        abort();
+       }
+     }
+ #else
+@@ -333,7 +333,7 @@
+       buf=(LM_REAL *)malloc(buf_sz*sizeof(LM_REAL));
+       if(!buf){
+         fprintf(stderr, RCAT("memory allocation in ", AX_EQ_B_QRLS) "() failed!\n");
+-        exit(1);
++        abort();
+       }
+ #endif /* LINSOLVERS_RETAIN_MEMORY */
+ 
+@@ -360,7 +360,7 @@
+   if(info!=0){
+     if(info<0){
+       fprintf(stderr, RCAT(RCAT("LAPACK error: illegal value for argument %d of ", GEQRF) " in ", AX_EQ_B_QRLS) "()\n", -info);
+-      exit(1);
++      abort();
+     }
+     else{
+       fprintf(stderr, RCAT(RCAT("Unknown LAPACK error %d for ", GEQRF) " in ", AX_EQ_B_QRLS) "()\n", info);
+@@ -388,7 +388,7 @@
+   if(info!=0){
+     if(info<0){
+       fprintf(stderr, RCAT(RCAT("LAPACK error: illegal value for argument %d of ", TRTRS) " in ", AX_EQ_B_QRLS) "()\n", -info);
+-      exit(1);
++      abort();
+     }
+     else{
+       fprintf(stderr, RCAT("LAPACK error: the %d-th diagonal element of A is zero (singular matrix) in ", AX_EQ_B_QRLS) "()\n", info);
+@@ -406,7 +406,7 @@
+   if(info!=0){
+     if(info<0){
+       fprintf(stderr, RCAT(RCAT("LAPACK error: illegal value for argument %d of ", TRTRS) " in ", AX_EQ_B_QRLS) "()\n", -info);
+-      exit(1);
++      abort();
+     }
+     else{
+       fprintf(stderr, RCAT("LAPACK error: the %d-th diagonal element of A is zero (singular matrix) in ", AX_EQ_B_QRLS) "()\n", info);
+@@ -477,7 +477,7 @@
+       buf=(LM_REAL *)malloc(buf_sz*sizeof(LM_REAL));
+       if(!buf){
+         fprintf(stderr, RCAT("memory allocation in ", AX_EQ_B_CHOL) "() failed!\n");
+-        exit(1);
++        abort();
+       }
+     }
+ #else
+@@ -485,7 +485,7 @@
+       buf=(LM_REAL *)malloc(buf_sz*sizeof(LM_REAL));
+       if(!buf){
+         fprintf(stderr, RCAT("memory allocation in ", AX_EQ_B_CHOL) "() failed!\n");
+-        exit(1);
++        abort();
+       }
+ #endif /* LINSOLVERS_RETAIN_MEMORY */
+ 
+@@ -505,7 +505,7 @@
+     if(info<0){
+       fprintf(stderr, RCAT(RCAT(RCAT("LAPACK error: illegal value for argument %d of ", POTF2) "/", POTRF) " in ",
+                       AX_EQ_B_CHOL) "()\n", -info);
+-      exit(1);
++      abort();
+     }
+     else{
+       fprintf(stderr, RCAT(RCAT(RCAT("LAPACK error: the leading minor of order %d is not positive definite,\nthe factorization could not be completed for ", POTF2) "/", POTRF) " in ", AX_EQ_B_CHOL) "()\n", info);
+@@ -521,7 +521,7 @@
+   POTRS("L", (int *)&m, (int *)&nrhs, a, (int *)&m, x, (int *)&m, &info);
+   if(info<0){
+     fprintf(stderr, RCAT(RCAT("LAPACK error: illegal value for argument %d of ", POTRS) " in ", AX_EQ_B_CHOL) "()\n", -info);
+-    exit(1);
++    abort();
+   }
+ 
+ #if 0
+@@ -531,7 +531,7 @@
+   if(info!=0){
+     if(info<0){
+       fprintf(stderr, RCAT(RCAT("LAPACK error: illegal value for argument %d of ", TRTRS) " in ", AX_EQ_B_CHOL) "()\n", -info);
+-      exit(1);
++      abort();
+     }
+     else{
+       fprintf(stderr, RCAT("LAPACK error: the %d-th diagonal element of A is zero (singular matrix) in ", AX_EQ_B_CHOL) "()\n", info);
+@@ -549,7 +549,7 @@
+   if(info!=0){
+     if(info<0){
+       fprintf(stderr, RCAT(RCAT("LAPACK error: illegal value for argument %d of ", TRTRS) "in ", AX_EQ_B_CHOL) "()\n", -info);
+-      exit(1);
++      abort();
+     }
+     else{
+       fprintf(stderr, RCAT("LAPACK error: the %d-th diagonal element of A is zero (singular matrix) in ", AX_EQ_B_CHOL) "()\n", info);
+@@ -664,7 +664,7 @@
+       buf=(LM_REAL *)malloc(buf_sz*sizeof(LM_REAL));
+       if(!buf){
+         fprintf(stderr, RCAT("memory allocation in ", AX_EQ_B_PLASMA_CHOL) "() failed!\n");
+-        exit(1);
++        abort();
+       }
+     }
+ #else
+@@ -672,7 +672,7 @@
+     buf=(LM_REAL *)malloc(buf_sz*sizeof(LM_REAL));
+     if(!buf){
+       fprintf(stderr, RCAT("memory allocation in ", AX_EQ_B_PLASMA_CHOL) "() failed!\n");
+-      exit(1);
++      abort();
+     }
+ #endif /* LINSOLVERS_RETAIN_MEMORY */
+ 
+@@ -698,7 +698,7 @@
+     if(info<0){
+       fprintf(stderr, RCAT(RCAT("LAPACK error: illegal value for argument %d of ", PLASMA_POSV) " in ",
+                       AX_EQ_B_PLASMA_CHOL) "()\n", -info);
+-      exit(1);
++      abort();
+     }
+     else{
+       fprintf(stderr, RCAT(RCAT("LAPACK error: the leading minor of order %d is not positive definite,\n"
+@@ -771,7 +771,7 @@
+       buf=(LM_REAL *)malloc(buf_sz);
+       if(!buf){
+         fprintf(stderr, RCAT("memory allocation in ", AX_EQ_B_LU) "() failed!\n");
+-        exit(1);
++        abort();
+       }
+     }
+ #else
+@@ -779,7 +779,7 @@
+       buf=(LM_REAL *)malloc(buf_sz);
+       if(!buf){
+         fprintf(stderr, RCAT("memory allocation in ", AX_EQ_B_LU) "() failed!\n");
+-        exit(1);
++        abort();
+       }
+ #endif /* LINSOLVERS_RETAIN_MEMORY */
+ 
+@@ -799,7 +799,7 @@
+ 	if(info!=0){
+ 		if(info<0){
+       fprintf(stderr, RCAT(RCAT("argument %d of ", GETRF) " illegal in ", AX_EQ_B_LU) "()\n", -info);
+-			exit(1);
++			abort();
+ 		}
+ 		else{
+       fprintf(stderr, RCAT(RCAT("singular matrix A for ", GETRF) " in ", AX_EQ_B_LU) "()\n");
+@@ -816,7 +816,7 @@
+ 	if(info!=0){
+ 		if(info<0){
+ 			fprintf(stderr, RCAT(RCAT("argument %d of ", GETRS) " illegal in ", AX_EQ_B_LU) "()\n", -info);
+-			exit(1);
++			abort();
+ 		}
+ 		else{
+ 			fprintf(stderr, RCAT(RCAT("unknown error for ", GETRS) " in ", AX_EQ_B_LU) "()\n");
+@@ -903,7 +903,7 @@
+     buf=(LM_REAL *)malloc(buf_sz);
+     if(!buf){
+       fprintf(stderr, RCAT("memory allocation in ", AX_EQ_B_SVD) "() failed!\n");
+-      exit(1);
++      abort();
+     }
+   }
+ #else
+@@ -911,7 +911,7 @@
+     buf=(LM_REAL *)malloc(buf_sz);
+     if(!buf){
+       fprintf(stderr, RCAT("memory allocation in ", AX_EQ_B_SVD) "() failed!\n");
+-      exit(1);
++      abort();
+     }
+ #endif /* LINSOLVERS_RETAIN_MEMORY */
+ 
+@@ -935,7 +935,7 @@
+   if(info!=0){
+     if(info<0){
+       fprintf(stderr, RCAT(RCAT(RCAT("LAPACK error: illegal value for argument %d of ", GESVD), "/" GESDD) " in ", AX_EQ_B_SVD) "()\n", -info);
+-      exit(1);
++      abort();
+     }
+     else{
+       fprintf(stderr, RCAT("LAPACK error: dgesdd (dbdsdc)/dgesvd (dbdsqr) failed to converge in ", AX_EQ_B_SVD) "() [info=%d]\n", info);
+@@ -1041,7 +1041,7 @@
+     buf=(LM_REAL *)malloc(buf_sz);
+     if(!buf){
+       fprintf(stderr, RCAT("memory allocation in ", AX_EQ_B_BK) "() failed!\n");
+-      exit(1);
++      abort();
+     }
+   }
+ #else
+@@ -1049,7 +1049,7 @@
+   buf=(LM_REAL *)malloc(buf_sz);
+   if(!buf){
+     fprintf(stderr, RCAT("memory allocation in ", AX_EQ_B_BK) "() failed!\n");
+-    exit(1);
++    abort();
+   }
+ #endif /* LINSOLVERS_RETAIN_MEMORY */
+ 
+@@ -1068,7 +1068,7 @@
+ 	if(info!=0){
+ 		if(info<0){
+       fprintf(stderr, RCAT(RCAT("LAPACK error: illegal value for argument %d of ", SYTRF) " in ", AX_EQ_B_BK) "()\n", -info);
+-			exit(1);
++			abort();
+ 		}
+ 		else{
+       fprintf(stderr, RCAT(RCAT("LAPACK error: singular block diagonal matrix D for", SYTRF) " in ", AX_EQ_B_BK)"() [D(%d, %d) is zero]\n", info, info);
+@@ -1084,7 +1084,7 @@
+   SYTRS("L", (int *)&m, (int *)&nrhs, a, (int *)&m, ipiv, x, (int *)&m, (int *)&info);
+   if(info<0){
+     fprintf(stderr, RCAT(RCAT("LAPACK error: illegal value for argument %d of ", SYTRS) " in ", AX_EQ_B_BK) "()\n", -info);
+-    exit(1);
++    abort();
+ 	}
+ 
+ #ifndef LINSOLVERS_RETAIN_MEMORY
+@@ -1173,7 +1173,7 @@
+     buf=(void *)malloc(tot_sz);
+     if(!buf){
+       fprintf(stderr, RCAT("memory allocation in ", AX_EQ_B_LU) "() failed!\n");
+-      exit(1);
++      abort();
+     }
+   }
+ #else
+@@ -1181,7 +1181,7 @@
+     buf=(void *)malloc(tot_sz);
+     if(!buf){
+       fprintf(stderr, RCAT("memory allocation in ", AX_EQ_B_LU) "() failed!\n");
+-      exit(1);
++      abort();
+     }
+ #endif /* LINSOLVERS_RETAIN_MEMORY */
+ 
+--- a/misc_core.c
++++ b/misc_core.c
+@@ -268,7 +268,7 @@
+   buf=(LM_REAL *)malloc((fvec_sz + fjac_sz + pp_sz + fvecp_sz)*sizeof(LM_REAL));
+   if(!buf){
+     fprintf(stderr, LCAT(LEVMAR_CHKJAC, "(): memory allocation request failed\n"));
+-    exit(1);
++    abort();
+   }
+   fvec=buf;
+   fjac=fvec+fvec_sz;
+@@ -625,7 +625,7 @@
+ 
+   if((hx=(LM_REAL *)malloc(n*sizeof(LM_REAL)))==NULL){
+     fprintf(stderr, RCAT("memory allocation request failed in ", LEVMAR_R2) "()\n");
+-    exit(1);
++    abort();
+   }
+ 
+   /* hx=f(p) */
diff --git a/debian/patches/series b/debian/patches/series
new file mode 100644
index 0000000..aae49f9
--- /dev/null
+++ b/debian/patches/series
@@ -0,0 +1,2 @@
+fix_makefile_so.patch
+replace_exit_by_abort.patch
diff --git a/debian/rules b/debian/rules
new file mode 100755
index 0000000..5db2e2b
--- /dev/null
+++ b/debian/rules
@@ -0,0 +1,11 @@
+#!/usr/bin/make -f
+# -*- makefile -*-
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+%:
+	dh $@ 
+
+override_dh_auto_build:
+	mkdir -p sobj
+	dh_auto_build -- -f Makefile.so
diff --git a/debian/source/format b/debian/source/format
new file mode 100644
index 0000000..163aaf8
--- /dev/null
+++ b/debian/source/format
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/debian/watch b/debian/watch
new file mode 100644
index 0000000..4d6b267
--- /dev/null
+++ b/debian/watch
@@ -0,0 +1,3 @@
+version=3
+http://www.ics.forth.gr/~lourakis/levmar levmar-(.+).tgz
+

-- 
Levenberg-Marquardt nonlinear least squares algorithm



More information about the debian-science-commits mailing list