The Fortran routines here were extracted from LAPACK 3.1.0, then
3.1.1, 3.4.1, 3.4.2, 3.5.0, 3.6.0, 3.6.1, 3.7.0, 3.7.1, 3.8.0, 3.9.0
(Sources from http://www.netlib.org/lapack and mirrors).

dlapack.f contains support routines for `real' LAPACK calls.  
cmplx.f contains support routines for LAPACK calls from complex
arithmetic routines, that are only used if COMPLEX*16 is supported by
the Fortran compiler and compatible with the Rcomplex type.
Neither will be compiled if an external LAPACK is used.

We have tried to avoid including any single-precision routines.


Preparation
-----------

dlapack.f and cmplx.f were created at the top level in the LAPACK
3.9.0 sources by copying {dble,cmplx}.txt there and running in R

dir.create('dble')
foo <- scan('dble.txt', "")
file.copy(file.path("SRC", foo), 'dble')
file.copy(file.path("INSTALL", 'ilaver.f'), 'dble')
system('cpp SRC/iparam2stage.F > dble/iparam2stage.f')
system("cat dble/* > dlapack.f")

dir.create('cmplx')
foo <- scan('cmplx.txt', "")
file.copy(file.path("SRC", foo), 'cmplx')
system("cat cmplx/* > cmplx.f")

If you update the LAPACK version, you need to copy over the LICENSE
file and update it in doc/COPYRIGHTS.  And if you patch the sources,
*DO* mention it here and add the patch to a file R.patch (not
currently used).

New LAPACK versions (even point releases) often add new auxiliary
routines, and these can be hard to track down.  We found it helpful to
compare the outputs of

nm -g dlapack.o | grep ' T ' | cut -b20-
nm -g dlapack.o | grep ' U ' | cut -b20-

before and after upating (ditto for cmplx.o).  (This may need
adjusting for your platform's nm.)


History
-------

zlahr2 zlaqr0 zlaqr1 zlaqr2 zlaqr3 zlaqr4 zlaqr5 zlartg zpotf2 zpotrf
zrot ztrexc
were added in R 2.5.0.

izmax1 zdrscl zgecon zlacn2 zlantr ztrcon
were added in R 2.7.0.

dzsum1 ilazlc ilazlr zunmhr
were added in R 2.15.2.

zgelsd zgesdd zlacp2 zlacrm zlals0 zlalsa zlalsd zlarcm
were added in R 3.1.0.

zgeequ zgees zgels zgerfs zgesc2 zgesvx zgetc2 zgetri zggbak zggbal
zgges zggev zgghrd zheevd zhgeqz zlaed0 zlaed7 zlaed8 zlaqge zlasyf
zlatdf zlauu2 zlauum zpotri zstedc zsymv zsyr zsytf2 zsytrf zsytri
ztgevc ztgex2 ztgexc ztgsen ztgsy2 ztgsyl ztrsen ztrsyl ztrti2 ztrtri
zunm2l zunmql zunmtr
were added in R 3.3.0 for use by a CRAN package.

dbdsvdx dgesvdx dgetrf2 dgges3 dggev3 dgghd3 dggsvd3 dggsvp3 dorm22 dpotrf2
zgetrf2 zpotrf2
were new in LAPACK 3.6.0 and added in R 3.3.0.

dtrevc3 and ztrevc3 were new in LAPACK 3.6.1 and added in R 3.4.0.

-------------------------------------------------

For 'base' R addition of a new .Call()able Lapack routine,
all these files must be updated {path relative to R's topdir}:

  src/gnuwin32/Rdll.hide
  src/include/R_ext/Lapack.h
  src/include/Rmodules/Rlapack.h
  src/main/basedecl.h
  src/main/lapack.c
  src/main/registration.c
  src/modules/lapack/Lapack.c
  src/modules/lapack/Lapack.h
  src/modules/lapack/cmplx.f or dlapack.f
