Here is a follow-up, and for kicks with some R scripting.

It requires sources to have directory names like 'class-7.3-14', ie (CRAN)
package name followed by (CRAN) version.


Shell script:

-----------------------------------------------------------------------------
#!/bin/bash

newfunc() {
    ## source directories are all named foo-1.2.3
    dirs=$(find . -maxdepth 1 -type d -name \*-\* | sort)

    for d in ${dirs}; do
        if test -d ${d}/src; then
            if grep -q -r \\.Fortran\( ${d}/R; then
                fortran=TRUE
            else 
                fortran=FALSE
            fi
            if grep -q -r \\.C\( ${d}/R; then
                ccall=TRUE
            else
                ccall=FALSE
            fi
            if grep -q "Priority: recommended" ${d}/DESCRIPTION; then
                recommended=TRUE
            else
                recommended=FALSE
            fi
            if [[ "${fortran}" == "TRUE" || "${ccall}" == "TRUE" ]]; then
                pretty=$(basename ${d})
                echo "${pretty} ${fortran} ${ccall} ${recommended}"
            fi
        fi
    done
}

newfunc
-----------------------------------------------------------------------------

We can call this from R to be able to tabulate the columns

R script
-----------------------------------------------------------------------------
dat <- read.table(pipe("./checkCandFortranCall.sh"),
                  col.names=c("package", "dotFortran", "dotC", "recommended"))
library(data.table)
setDT(dat)

sapply(dat[, -1], table)  # counts by type

dat[recommended==TRUE, ]

dat[recommended==FALSE, ]
-----------------------------------------------------------------------------

which on my box gives

      dotFortran dotC recommended
FALSE         28   13          37
TRUE          20   35          11

indicating a fair number (still around a third of my r-cran-* packages).

I think I will cover these by hand now:

               package dotFortran  dotC recommended
 1:       class-7.3-14      FALSE  TRUE        TRUE
 2:      cluster-2.0.6       TRUE  TRUE        TRUE
 3:     foreign-0.8.68      FALSE  TRUE        TRUE
 4: KernSmooth-2.23-15       TRUE FALSE        TRUE
 5:        MASS-7.3-47      FALSE  TRUE        TRUE
 6:      Matrix-1.2-10      FALSE  TRUE        TRUE
 7:        mgcv-1.8-17      FALSE  TRUE        TRUE
 8:       nlme-3.1.131       TRUE  TRUE        TRUE
 9:        nnet-7.3-12      FALSE  TRUE        TRUE
10:     spatial-7.3-11      FALSE  TRUE        TRUE
11:    survival-2.41-3      FALSE  TRUE        TRUE

and we should binNMU the remaining ones satisfying

  binary: any                           (ie applicable for Debian binNMUs)
  has either .C() or .Fortran()

I have access to a fully expanded directory of CRAN sources of if we start we
the reverse depends I can refine the script above to get a set of packages
for which we can then set up binNMUs.

One caveat: the shell script does not (yet?) filter out those packages that
already had a post R 3.3.3 update which includes eg several from the set above.

Dirk

-- 
http://dirk.eddelbuettel.com | @eddelbuettel | e...@debian.org

Reply via email to