pkgtools/R2pkg: format source code
This commit is contained in:
parent
1ef43e905b
commit
e21dca09cc
2 changed files with 761 additions and 839 deletions
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: R2pkg.R,v 1.26 2019/10/19 22:10:58 rillig Exp $
|
||||
# $NetBSD: R2pkg.R,v 1.27 2019/10/25 19:00:16 rillig Exp $
|
||||
#
|
||||
# Copyright (c) 2014,2015,2016,2017,2018,2019
|
||||
# Brook Milligan. All rights reserved.
|
||||
|
@ -141,41 +141,37 @@ licenses[['POSTGRESQL']] <- 'postgresql-license'
|
|||
adjacent.duplicates <- function(lines)
|
||||
c(FALSE, lines[-length(lines)] == lines[-1])
|
||||
|
||||
paste2 <- function(s1,s2)
|
||||
{
|
||||
if (is.na(s1) && is.na(s2)) return ('')
|
||||
if (is.na(s1) && !is.na(s2)) return (s2)
|
||||
if (!is.na(s1) && is.na(s2)) return (s1)
|
||||
if (!is.na(s1) && !is.na(s2)) return (paste(s1,s2))
|
||||
paste2 <- function(s1, s2) {
|
||||
if (is.na(s1) && is.na(s2)) return('')
|
||||
if (is.na(s1) && !is.na(s2)) return(s2)
|
||||
if (!is.na(s1) && is.na(s2)) return(s1)
|
||||
if (!is.na(s1) && !is.na(s2)) return(paste(s1, s2))
|
||||
}
|
||||
|
||||
end.paragraph <- function(lines)
|
||||
if (length(lines) > 0) append(lines, '') else lines
|
||||
|
||||
as.sorted.list <- function(df)
|
||||
{
|
||||
as.sorted.list <- function(df) {
|
||||
l <- list()
|
||||
df <- df[!duplicated(df),]
|
||||
if (nrow(df) > 0)
|
||||
{
|
||||
key <- as.vector(df[,1])
|
||||
value <- as.vector(df[,2])
|
||||
key <- order(key,value)
|
||||
l <- as.list(value[key])
|
||||
}
|
||||
{
|
||||
key <- as.vector(df[, 1])
|
||||
value <- as.vector(df[, 2])
|
||||
key <- order(key, value)
|
||||
l <- as.list(value[key])
|
||||
}
|
||||
l
|
||||
}
|
||||
|
||||
mklines.get_value <- function(mklines, varname, default = '')
|
||||
{
|
||||
mklines.get_value <- function(mklines, varname, default = '') {
|
||||
values <- mklines$old_value[mklines$key == varname]
|
||||
if (length(values) == 0)
|
||||
values <- mklines$old_value[mklines$key == paste0('#', varname)]
|
||||
if (length(values) == 1) values[1] else default
|
||||
}
|
||||
|
||||
categorize.key_value <- function(df,line='line')
|
||||
{
|
||||
categorize.key_value <- function(df, line='line') {
|
||||
re_varassign <- paste0(
|
||||
'^',
|
||||
' *',
|
||||
|
@ -198,8 +194,7 @@ categorize.key_value <- function(df,line='line')
|
|||
df
|
||||
}
|
||||
|
||||
categorize.depends <- function(df, line='line')
|
||||
{
|
||||
categorize.depends <- function(df, line='line') {
|
||||
df$depends <- df$key_value & df$key == 'DEPENDS'
|
||||
df$category[df$depends] <- unlist(relpath_category(df[df$depends, line]))
|
||||
df
|
||||
|
@ -212,32 +207,29 @@ categorize.buildlink <- function(df, line='line')
|
|||
df
|
||||
}
|
||||
|
||||
fix.continued.lines <- function(df,line='line')
|
||||
{
|
||||
fix.continued.lines <- function(df, line='line') {
|
||||
if (nrow(df) < 2)
|
||||
return(df)
|
||||
|
||||
continued <- grepl('\\\\$', df[, line])
|
||||
continued_key_value <- df$key_value & continued
|
||||
|
||||
if (FALSE %in% df[continued,'key_value'])
|
||||
if (FALSE %in% df[continued, 'key_value'])
|
||||
level.warning('unhandled continued line(s)')
|
||||
|
||||
for (i in 1 : (nrow(df) - 1))
|
||||
{
|
||||
if (!continued_key_value[i])
|
||||
next
|
||||
for (i in 1:(nrow(df) - 1)) {
|
||||
if (!continued_key_value[i])
|
||||
next
|
||||
|
||||
df[i, line] <- sub('[\t ]*\\\\$', '', df[i, line])
|
||||
df$key_value[i + 1] <- TRUE
|
||||
df$key[i + 1] <- df$key[i]
|
||||
df[i + 1, line] <- paste0(df$key[i], '+=', df[i + 1, line])
|
||||
}
|
||||
df[i, line] <- sub('[\t ]*\\\\$', '', df[i, line])
|
||||
df$key_value[i + 1] <- TRUE
|
||||
df$key[i + 1] <- df$key[i]
|
||||
df[i + 1, line] <- paste0(df$key[i], '+=', df[i + 1, line])
|
||||
}
|
||||
df
|
||||
}
|
||||
|
||||
read_mklines <- function(filename)
|
||||
{
|
||||
read_mklines <- function(filename) {
|
||||
df <- data.frame()
|
||||
for (line in as.list(readLines(filename)))
|
||||
df <- rbind(df, data.frame(line = line, stringsAsFactors = FALSE))
|
||||
|
@ -252,16 +244,14 @@ read_mklines <- function(filename)
|
|||
df
|
||||
}
|
||||
|
||||
read.file.as.list <- function(filename)
|
||||
{
|
||||
read.file.as.list <- function(filename) {
|
||||
result <- list()
|
||||
info <- file.info(filename)
|
||||
size <- info[filename,'size']
|
||||
if (!is.na(size) && size > 0)
|
||||
{
|
||||
contents <- readLines(filename)
|
||||
result <- as.list(contents)
|
||||
}
|
||||
size <- info[filename, 'size']
|
||||
if (!is.na(size) && size > 0) {
|
||||
contents <- readLines(filename)
|
||||
result <- as.list(contents)
|
||||
}
|
||||
result
|
||||
}
|
||||
|
||||
|
@ -270,22 +260,19 @@ remove.punctuation <- function(s) gsub('[,-]', '', s)
|
|||
remove.quotes <- function(s) gsub('[\'`"]', '', s)
|
||||
remove.articles <- function(s) gsub('\\b[Aa]n?\\b', '\\1', s)
|
||||
|
||||
case.insensitive.equals <- function(s1,s2)
|
||||
{
|
||||
case.insensitive.equals <- function(s1, s2) {
|
||||
s1.lower <- tolower(simplify.whitespace(s1))
|
||||
s2.lower <- tolower(simplify.whitespace(s2))
|
||||
s1.lower == s2.lower
|
||||
}
|
||||
|
||||
weakly.equals <- function(s1,s2)
|
||||
{
|
||||
weakly.equals <- function(s1, s2) {
|
||||
case.insensitive.equals(
|
||||
remove.articles(remove.quotes(remove.punctuation(s1))),
|
||||
remove.articles(remove.quotes(remove.punctuation(s2))))
|
||||
}
|
||||
|
||||
license <- function(mklines, s)
|
||||
{
|
||||
license <- function(mklines, s) {
|
||||
license <- licenses[[s]]
|
||||
if (is.null(license))
|
||||
license <- s
|
||||
|
@ -298,68 +285,59 @@ license <- function(mklines, s)
|
|||
find.Rcpp <- function(imps, deps)
|
||||
any(grepl('Rcpp', paste(imps, deps)))
|
||||
|
||||
buildlink3.mk <- function(imps,deps)
|
||||
{
|
||||
buildlink3.mk <- function(imps, deps) {
|
||||
BUILDLINK3.MK <- data.frame()
|
||||
buildlink3.mk.list <- read.file.as.list('BUILDLINK3.MK')
|
||||
for (line in buildlink3.mk.list)
|
||||
{
|
||||
fields <- strsplit(line[[1]],'/',fixed=TRUE)
|
||||
key <- fields[[1]][3]
|
||||
value <- line
|
||||
BUILDLINK3.MK <- rbind(BUILDLINK3.MK,data.frame(key=key,value=value))
|
||||
}
|
||||
if (find.Rcpp(imps,deps))
|
||||
{
|
||||
buildlink3.line <- '.include "../../devel/R-Rcpp/buildlink3.mk"'
|
||||
key <- 'devel'
|
||||
value <- buildlink3.line
|
||||
BUILDLINK3.MK <- rbind(BUILDLINK3.MK,data.frame(key=key,value=value))
|
||||
}
|
||||
for (line in buildlink3.mk.list) {
|
||||
fields <- strsplit(line[[1]], '/', fixed = TRUE)
|
||||
key <- fields[[1]][3]
|
||||
value <- line
|
||||
BUILDLINK3.MK <- rbind(BUILDLINK3.MK, data.frame(key = key, value = value))
|
||||
}
|
||||
if (find.Rcpp(imps, deps)) {
|
||||
buildlink3.line <- '.include "../../devel/R-Rcpp/buildlink3.mk"'
|
||||
key <- 'devel'
|
||||
value <- buildlink3.line
|
||||
BUILDLINK3.MK <- rbind(BUILDLINK3.MK, data.frame(key = key, value = value))
|
||||
}
|
||||
BUILDLINK3.MK
|
||||
}
|
||||
|
||||
varassigns <- function(key, values)
|
||||
{
|
||||
varassigns <- function(key, values) {
|
||||
fields <- list()
|
||||
for (l in values)
|
||||
{
|
||||
value <- unlist(l)
|
||||
if (value != '')
|
||||
fields <- append(fields, varassign(key, list(value)))
|
||||
else
|
||||
fields <- append(fields, list(''))
|
||||
}
|
||||
for (l in values) {
|
||||
value <- unlist(l)
|
||||
if (value != '')
|
||||
fields <- append(fields, varassign(key, list(value)))
|
||||
else
|
||||
fields <- append(fields, list(''))
|
||||
}
|
||||
fields
|
||||
}
|
||||
|
||||
categories <- function() basename(dirname(getwd()))
|
||||
|
||||
filter.imports <- function(s)
|
||||
{
|
||||
for (pkg in base.packages)
|
||||
{
|
||||
re.pkg <- paste('^',pkg,sep='')
|
||||
s <- s[!grepl(re.pkg,s)]
|
||||
}
|
||||
filter.imports <- function(s) {
|
||||
for (pkg in base.packages) {
|
||||
re.pkg <- paste('^', pkg, sep = '')
|
||||
s <- s[!grepl(re.pkg, s)]
|
||||
}
|
||||
s
|
||||
}
|
||||
|
||||
make.imports <- function(s1,s2)
|
||||
{
|
||||
s <- paste2(s1,s2)
|
||||
s <- gsub('([[:alnum:]]+)[[:blank:]]+(\\([^\\)]*\\))?[[:blank:]]*,?','\\1 \\2,',s)
|
||||
imports <- na.omit(unlist(strsplit(s,',[[:blank:]]*')))
|
||||
make.imports <- function(s1, s2) {
|
||||
s <- paste2(s1, s2)
|
||||
s <- gsub('([[:alnum:]]+)[[:blank:]]+(\\([^\\)]*\\))?[[:blank:]]*,?', '\\1 \\2,', s)
|
||||
imports <- na.omit(unlist(strsplit(s, ',[[:blank:]]*')))
|
||||
imports <- trim.space(imports)
|
||||
imports <- filter.imports(imports)
|
||||
imports
|
||||
}
|
||||
|
||||
make.dependency <- function(s)
|
||||
{
|
||||
s <- gsub('\\)','',s)
|
||||
s <- gsub('-','.',s)
|
||||
unlist(strsplit(s,'\\('))
|
||||
make.dependency <- function(s) {
|
||||
s <- gsub('\\)', '', s)
|
||||
s <- gsub('-', '.', s)
|
||||
unlist(strsplit(s, '\\('))
|
||||
}
|
||||
|
||||
depends <- function(dependency) dependency[1]
|
||||
|
@ -370,20 +348,17 @@ depends.pkg <- function(dependency)
|
|||
new.depends.pkg <- function(dependency)
|
||||
Sys.glob(paste0('../../wip/R-', depends(dependency)))
|
||||
|
||||
depends.pkg.fullname <- function(dependency,index=1)
|
||||
{
|
||||
result <- system(paste('cd',depends.pkg(dependency)[index],'&& bmake show-var VARNAME=PKGNAME'),intern=TRUE)
|
||||
depends.pkg.fullname <- function(dependency, index=1) {
|
||||
result <- system(paste('cd', depends.pkg(dependency)[index], '&& bmake show-var VARNAME=PKGNAME'), intern = TRUE)
|
||||
result
|
||||
}
|
||||
|
||||
depends.pkg.vers <- function(dependency,index=1)
|
||||
{
|
||||
result <- sub('^(.*)-([^-]*)$','\\2',depends.pkg.fullname(dependency,index))
|
||||
depends.pkg.vers <- function(dependency, index=1) {
|
||||
result <- sub('^(.*)-([^-]*)$', '\\2', depends.pkg.fullname(dependency, index))
|
||||
result
|
||||
}
|
||||
|
||||
depends.vers <- function(dependency, index=1)
|
||||
{
|
||||
depends.vers <- function(dependency, index=1) {
|
||||
if (length(dependency) == 2)
|
||||
trim.space(dependency[2])
|
||||
else
|
||||
|
@ -393,23 +368,20 @@ depends.vers <- function(dependency, index=1)
|
|||
depends.vers.2 <- function(dependency)
|
||||
ifelse(length(dependency) == 2, trim.space(dependency[2]), '>=???')
|
||||
|
||||
depends.dir <- function(dependency, index=1)
|
||||
{
|
||||
depends.dir <- function(dependency, index=1) {
|
||||
fields <- strsplit(depends.pkg(dependency)[index], '/', fixed = TRUE)
|
||||
fields[[1]][3]
|
||||
}
|
||||
|
||||
depends.line <- function(dependency,index=1)
|
||||
{
|
||||
depends.line <- function(dependency, index=1) {
|
||||
paste0('DEPENDS+=\tR-', depends(dependency), depends.vers(dependency, index), ':', depends.pkg(dependency)[index])
|
||||
}
|
||||
|
||||
depends.line.2 <- function(dependency)
|
||||
{
|
||||
result <- paste0('DEPENDS+=\tR-',depends,depends.vers.2(dependency),':../../???/R-',depends)
|
||||
result <- paste0(result,'\t# XXX - found')
|
||||
depends.line.2 <- function(dependency) {
|
||||
result <- paste0('DEPENDS+=\tR-', depends, depends.vers.2(dependency), ':../../???/R-', depends)
|
||||
result <- paste0(result, '\t# XXX - found')
|
||||
for (pkg in depends.pkg(dependency))
|
||||
result <- paste(result,pkg)
|
||||
result <- paste(result, pkg)
|
||||
result
|
||||
}
|
||||
|
||||
|
@ -419,23 +391,20 @@ buildlink3.file <- function(dependency, index=1)
|
|||
buildlink3.line <- function(dependency, index=1)
|
||||
sprintf('.include "%s"', buildlink3.file(dependency, index))
|
||||
|
||||
dependency.dir <- function(dependency)
|
||||
{
|
||||
result <- paste0('../../wip/R-',depends(dependency))
|
||||
dependency.dir <- function(dependency) {
|
||||
result <- paste0('../../wip/R-', depends(dependency))
|
||||
result
|
||||
}
|
||||
|
||||
message.wip.dependency <- function(dependency,index=1)
|
||||
{
|
||||
dir <- depends.dir(dependency,index)
|
||||
dir.in.wip <- grepl('wip',dir)
|
||||
wd.in.wip <- grepl('/wip/',getwd())
|
||||
message.wip.dependency <- function(dependency, index=1) {
|
||||
dir <- depends.dir(dependency, index)
|
||||
dir.in.wip <- grepl('wip', dir)
|
||||
wd.in.wip <- grepl('/wip/', getwd())
|
||||
if (dir.in.wip && !wd.in.wip)
|
||||
level.warning('R-',arg.rpkg,' should not depend on a wip package: ',depends.pkg(dependency)[index])
|
||||
level.warning('R-', arg.rpkg, ' should not depend on a wip package: ', depends.pkg(dependency)[index])
|
||||
}
|
||||
|
||||
update.dependency <- function(dependency, index=1)
|
||||
{
|
||||
update.dependency <- function(dependency, index=1) {
|
||||
level.message('updating dependency for ', depends(dependency), ': ', depends.pkg(dependency)[index])
|
||||
command <- sprintf(
|
||||
'grep -E -q -e "%s" %s || (cd %s && %s %s %s)',
|
||||
|
@ -446,92 +415,76 @@ update.dependency <- function(dependency, index=1)
|
|||
level.warning('error updating dependency for ', depends(dependency))
|
||||
}
|
||||
|
||||
make.depends <- function(imps,deps)
|
||||
{
|
||||
make.depends <- function(imps, deps) {
|
||||
warn_too_many_dependencies <- function(dependency) {
|
||||
level.warning(sprintf('too many dependencies found for %s: %s',
|
||||
depends(dependency), paste(depends.pkg(dependency))))
|
||||
depends(dependency), paste(depends.pkg(dependency))))
|
||||
}
|
||||
|
||||
imports <- make.imports(imps,deps)
|
||||
# XXX message('===> imports:')
|
||||
# XXX print(imports)
|
||||
imports <- make.imports(imps, deps)
|
||||
# XXX message('===> imports:')
|
||||
# XXX print(imports)
|
||||
DEPENDS <- data.frame()
|
||||
BUILDLINK3.MK <- buildlink3.mk(imps,deps)
|
||||
if (length(imports) > 0)
|
||||
{
|
||||
for (i in 1:length(imports))
|
||||
{
|
||||
dependency <- make.dependency(imports[i])
|
||||
depdirs <- depends.pkg(dependency)
|
||||
# XXX message('[ ',${LEVEL},' ] ===> ',i,' / ',length(imports),': ',depends(dependency))
|
||||
if (length(depdirs) == 0) # a dependency cannot be found
|
||||
{
|
||||
level.message('0 dependencies match ',dependency)
|
||||
if (arg.recursive)
|
||||
{
|
||||
dir.create(path=dependency.dir(dependency),recursive=TRUE)
|
||||
update.dependency(dependency)
|
||||
}
|
||||
else
|
||||
level.warning('dependency needed for ',depends(dependency))
|
||||
}
|
||||
else if (length(depdirs) == 1) # a unique dependency found
|
||||
{
|
||||
level.message('1 dependency matches ',dependency,': ',depdirs)
|
||||
message.wip.dependency(dependency)
|
||||
if (arg.recursive && arg.update)
|
||||
update.dependency(dependency)
|
||||
if (file.exists(buildlink3.file(dependency)))
|
||||
BUILDLINK3.MK <- rbind(BUILDLINK3.MK,data.frame(key=depends.dir(dependency),value=buildlink3.line(dependency)))
|
||||
else
|
||||
DEPENDS <- rbind(DEPENDS,data.frame(key=depends.dir(dependency),value=depends.line(dependency)))
|
||||
}
|
||||
else if (length(depdirs) == 2) # two dependencies found
|
||||
{
|
||||
index <- grep('/wip/',depdirs,invert=TRUE)
|
||||
level.message('2 dependencies match ',dependency,':',paste(' ',depdirs))
|
||||
# message('===> depends(dependency): ',depends(dependency))
|
||||
# message('===> depends.pkg(dependency):',paste(' ',d))
|
||||
# message('===> index: ',index)
|
||||
# message('===> buildlink3.line(): ',buildlink3.line(dependency,index))
|
||||
if (length(index) == 1) # a unique, non-wip, dependency found
|
||||
{
|
||||
level.message('choosing unique non-wip dependency for ',dependency,': ',depdirs[index])
|
||||
if (arg.recursive && arg.update)
|
||||
update.dependency(dependency,index)
|
||||
if (file.exists(buildlink3.file(dependency,index)))
|
||||
BUILDLINK3.MK <- rbind(BUILDLINK3.MK,data.frame(key=depends.dir(dependency,index),value=buildlink3.line(dependency,index)))
|
||||
else
|
||||
DEPENDS <- rbind(DEPENDS,data.frame(key=depends.dir(dependency,index),value=depends.line(dependency,index)))
|
||||
}
|
||||
else
|
||||
{
|
||||
level.message('no unique non-wip dependency matches')
|
||||
warn_too_many_dependencies(dependency)
|
||||
DEPENDS <- rbind(DEPENDS,data.frame(key='???',value=depends.line.2(dependency)))
|
||||
}
|
||||
}
|
||||
else # more than 2 dependencies found
|
||||
{
|
||||
level.message(length(depdirs),' dependencies match ',dependency,':',paste(' ',depdirs))
|
||||
warn_too_many_dependencies(dependency)
|
||||
DEPENDS <- rbind(DEPENDS,data.frame(key='???',value=depends.line.2(dependency)))
|
||||
}
|
||||
if (length(new.depends.pkg(dependency)) > 0)
|
||||
system(paste('echo', depends(dependency), arg.rpkg, '>>', arg.dependency_list))
|
||||
BUILDLINK3.MK <- buildlink3.mk(imps, deps)
|
||||
if (length(imports) > 0) {
|
||||
for (i in 1:length(imports)) {
|
||||
dependency <- make.dependency(imports[i])
|
||||
depdirs <- depends.pkg(dependency)
|
||||
# XXX message('[ ',${LEVEL},' ] ===> ',i,' / ',length(imports),': ',depends(dependency))
|
||||
if (length(depdirs) == 0) { # a dependency cannot be found
|
||||
level.message('0 dependencies match ', dependency)
|
||||
if (arg.recursive) {
|
||||
dir.create(path = dependency.dir(dependency), recursive = TRUE)
|
||||
update.dependency(dependency)
|
||||
} else
|
||||
level.warning('dependency needed for ', depends(dependency))
|
||||
} else if (length(depdirs) == 1) { # a unique dependency found
|
||||
level.message('1 dependency matches ', dependency, ': ', depdirs)
|
||||
message.wip.dependency(dependency)
|
||||
if (arg.recursive && arg.update)
|
||||
update.dependency(dependency)
|
||||
if (file.exists(buildlink3.file(dependency)))
|
||||
BUILDLINK3.MK <- rbind(BUILDLINK3.MK, data.frame(key = depends.dir(dependency), value = buildlink3.line(dependency)))
|
||||
else
|
||||
DEPENDS <- rbind(DEPENDS, data.frame(key = depends.dir(dependency), value = depends.line(dependency)))
|
||||
} else if (length(depdirs) == 2) { # two dependencies found
|
||||
index <- grep('/wip/', depdirs, invert = TRUE)
|
||||
level.message('2 dependencies match ', dependency, ':', paste(' ', depdirs))
|
||||
# message('===> depends(dependency): ',depends(dependency))
|
||||
# message('===> depends.pkg(dependency):',paste(' ',d))
|
||||
# message('===> index: ',index)
|
||||
# message('===> buildlink3.line(): ',buildlink3.line(dependency,index))
|
||||
if (length(index) == 1) { # a unique, non-wip, dependency found
|
||||
level.message('choosing unique non-wip dependency for ', dependency, ': ', depdirs[index])
|
||||
if (arg.recursive && arg.update)
|
||||
update.dependency(dependency, index)
|
||||
if (file.exists(buildlink3.file(dependency, index)))
|
||||
BUILDLINK3.MK <- rbind(BUILDLINK3.MK, data.frame(key = depends.dir(dependency, index), value = buildlink3.line(dependency, index)))
|
||||
else
|
||||
DEPENDS <- rbind(DEPENDS, data.frame(key = depends.dir(dependency, index), value = depends.line(dependency, index)))
|
||||
} else {
|
||||
level.message('no unique non-wip dependency matches')
|
||||
warn_too_many_dependencies(dependency)
|
||||
DEPENDS <- rbind(DEPENDS, data.frame(key = '???', value = depends.line.2(dependency)))
|
||||
}
|
||||
} else { # more than 2 dependencies found
|
||||
level.message(length(depdirs), ' dependencies match ', dependency, ':', paste(' ', depdirs))
|
||||
warn_too_many_dependencies(dependency)
|
||||
DEPENDS <- rbind(DEPENDS, data.frame(key = '???', value = depends.line.2(dependency)))
|
||||
}
|
||||
if (length(new.depends.pkg(dependency)) > 0)
|
||||
system(paste('echo', depends(dependency), arg.rpkg, '>>', arg.dependency_list))
|
||||
}
|
||||
}
|
||||
DEPENDS <- end.paragraph(as.sorted.list(DEPENDS))
|
||||
BUILDLINK3.MK <- as.sorted.list(BUILDLINK3.MK)
|
||||
list(DEPENDS,BUILDLINK3.MK)
|
||||
list(DEPENDS, BUILDLINK3.MK)
|
||||
}
|
||||
|
||||
use_languages <- function(imps, deps)
|
||||
if (find.Rcpp(imps, deps)) 'c c++' else '# none'
|
||||
|
||||
write.Makefile <- function(orig_mklines, metadata)
|
||||
{
|
||||
write.Makefile <- function(orig_mklines, metadata) {
|
||||
maintainer <- mklines.get_value(orig_mklines, 'MAINTAINER', arg.maintainer_email)
|
||||
license <- license(orig_mklines, metadata$License)
|
||||
use_languages <- use_languages(metadata$Imports, metadata$Depends)
|
||||
|
@ -559,24 +512,21 @@ write.Makefile <- function(orig_mklines, metadata)
|
|||
writeLines(lines, 'Makefile')
|
||||
}
|
||||
|
||||
element <- function(mklines, varname, field, quiet=FALSE)
|
||||
{
|
||||
element <- function(mklines, varname, field, quiet=FALSE) {
|
||||
i <- match(varname, mklines$key, 0)
|
||||
if (i != 0 && mklines$key_value[i])
|
||||
return(mklines[i, field])
|
||||
|
||||
if (!quiet)
|
||||
{
|
||||
if (i == 0)
|
||||
level.warning(varname, ' not found')
|
||||
else
|
||||
level.warning(varname, ' is not a key-value field')
|
||||
}
|
||||
if (!quiet) {
|
||||
if (i == 0)
|
||||
level.warning(varname, ' not found')
|
||||
else
|
||||
level.warning(varname, ' is not a key-value field')
|
||||
}
|
||||
'???'
|
||||
}
|
||||
|
||||
make.categories <- function(mklines)
|
||||
{
|
||||
make.categories <- function(mklines) {
|
||||
directory <- basename(dirname(getwd()))
|
||||
categories <- unlist(element(mklines, 'CATEGORIES', 'old_value'))
|
||||
categories <- unlist(strsplit(categories, '[[:blank:]]+'))
|
||||
|
@ -588,15 +538,13 @@ make.categories <- function(mklines)
|
|||
paste(categories, collapse = ' ')
|
||||
}
|
||||
|
||||
make.maintainer <- function(mklines)
|
||||
{
|
||||
make.maintainer <- function(mklines) {
|
||||
old.maintainer <- element(mklines, 'MAINTAINER', 'old_value')
|
||||
new.maintainer <- element(mklines, 'MAINTAINER', 'new_value')
|
||||
if (old.maintainer == '') new.maintainer else old.maintainer
|
||||
}
|
||||
|
||||
make.comment <- function(mklines)
|
||||
{
|
||||
make.comment <- function(mklines) {
|
||||
old.comment <- element(mklines, 'COMMENT', 'old_value')
|
||||
new.comment <- element(mklines, 'COMMENT', 'new_value')
|
||||
if (weakly.equals(old.comment, new.comment))
|
||||
|
@ -605,23 +553,21 @@ make.comment <- function(mklines)
|
|||
paste0(old.comment, '\t# [R2pkg] updated to: ', new.comment)
|
||||
}
|
||||
|
||||
make.new_license <- function(df,license)
|
||||
{
|
||||
make.new_license <- function(df, license) {
|
||||
new_license <- licenses[[license]]
|
||||
if (is.null(new_license))
|
||||
new_license <- license
|
||||
new_license <- license
|
||||
df$new_value[df$key == 'LICENSE'] <- new_license
|
||||
df
|
||||
}
|
||||
|
||||
license.in.pkgsrc <- function(license) license %in% sapply(licenses, '[', 1)
|
||||
|
||||
make.license <- function(df)
|
||||
{
|
||||
make.license <- function(df) {
|
||||
# message('===> make.license():')
|
||||
old_license <- element(df,'LICENSE','old_value')
|
||||
old_todo <- element(df,'LICENSE','old_todo')
|
||||
new_license <- element(df,'LICENSE','new_value')
|
||||
old_license <- element(df, 'LICENSE', 'old_value')
|
||||
old_todo <- element(df, 'LICENSE', 'old_todo')
|
||||
new_license <- element(df, 'LICENSE', 'new_value')
|
||||
|
||||
old_known <- license.in.pkgsrc(old_license)
|
||||
new_known <- license.in.pkgsrc(new_license)
|
||||
|
@ -641,17 +587,15 @@ make.license <- function(df)
|
|||
df
|
||||
}
|
||||
|
||||
find.order <- function(df,key,field)
|
||||
{
|
||||
x <- df[,key]
|
||||
value <- match(TRUE,x)
|
||||
find.order <- function(df, key, field) {
|
||||
x <- df[, key]
|
||||
value <- match(TRUE, x)
|
||||
if (!is.na(value))
|
||||
value <- df[value,field]
|
||||
value <- df[value, field]
|
||||
value
|
||||
}
|
||||
|
||||
mklines.update_with_metadata <- function(df, metadata)
|
||||
{
|
||||
mklines.update_with_metadata <- function(df, metadata) {
|
||||
df$new_value <- NA
|
||||
|
||||
df <- make.new_license(df, metadata$License)
|
||||
|
@ -663,8 +607,7 @@ mklines.update_with_metadata <- function(df, metadata)
|
|||
df
|
||||
}
|
||||
|
||||
mklines.update_value <- function(df)
|
||||
{
|
||||
mklines.update_value <- function(df) {
|
||||
df$value <- NA
|
||||
df$todo <- ''
|
||||
df <- make.license(df)
|
||||
|
@ -675,8 +618,7 @@ mklines.update_value <- function(df)
|
|||
df
|
||||
}
|
||||
|
||||
mklines.update_new_line <- function(df)
|
||||
{
|
||||
mklines.update_new_line <- function(df) {
|
||||
df$new_line <- df$line
|
||||
|
||||
va <- df$key_value & !is.na(df$value)
|
||||
|
@ -686,8 +628,7 @@ mklines.update_new_line <- function(df)
|
|||
df
|
||||
}
|
||||
|
||||
mklines.annotate_distname <- function(mklines)
|
||||
{
|
||||
mklines.annotate_distname <- function(mklines) {
|
||||
match <- grepl('^[[:blank:]]*DISTNAME', mklines$new_line)
|
||||
line <- mklines$new_line[match]
|
||||
value <- sub('^[[:blank:]]*DISTNAME[[:blank:]]*=[[:blank:]]*', '', line)
|
||||
|
@ -699,109 +640,97 @@ mklines.annotate_distname <- function(mklines)
|
|||
mklines
|
||||
}
|
||||
|
||||
mklines.remove_lines_before_update <- function(mklines)
|
||||
{
|
||||
mklines.remove_lines_before_update <- function(mklines) {
|
||||
remove <- (
|
||||
grepl('^[[:blank:]]*MASTER_SITES', mklines$new_line) |
|
||||
grepl('^[[:blank:]]*HOMEPAGE', mklines$new_line) |
|
||||
grepl('^[[:blank:]]*BUILDLINK_ABI_DEPENDS', mklines$new_line) |
|
||||
grepl('^[[:blank:]]*BUILDLINK_API_DEPENDS', mklines$new_line))
|
||||
grepl('^[[:blank:]]*HOMEPAGE', mklines$new_line) |
|
||||
grepl('^[[:blank:]]*BUILDLINK_ABI_DEPENDS', mklines$new_line) |
|
||||
grepl('^[[:blank:]]*BUILDLINK_API_DEPENDS', mklines$new_line))
|
||||
mklines[!remove,]
|
||||
}
|
||||
|
||||
mklines.reassign_order <- function(mklines)
|
||||
{
|
||||
mklines.reassign_order <- function(mklines) {
|
||||
r_pkgname.order <- element(mklines, 'R_PKGNAME', 'order')
|
||||
categories.order <- element(mklines, 'CATEGORIES', 'order')
|
||||
if (r_pkgname.order > categories.order)
|
||||
{
|
||||
r_pkgname.index <- mklines$key == 'R_PKGNAME'
|
||||
r_pkgname.index[is.na(r_pkgname.index)] <- FALSE
|
||||
r_pkgver.index <- mklines$key == 'R_PKGVER'
|
||||
r_pkgver.index[is.na(r_pkgver.index)] <- FALSE
|
||||
mklines[r_pkgname.index, 'order'] <- categories.order - 0.2
|
||||
mklines[r_pkgver.index, 'order'] <- categories.order - 0.1
|
||||
}
|
||||
if (r_pkgname.order > categories.order) {
|
||||
r_pkgname.index <- mklines$key == 'R_PKGNAME'
|
||||
r_pkgname.index[is.na(r_pkgname.index)] <- FALSE
|
||||
r_pkgver.index <- mklines$key == 'R_PKGVER'
|
||||
r_pkgver.index[is.na(r_pkgver.index)] <- FALSE
|
||||
mklines[r_pkgname.index, 'order'] <- categories.order - 0.2
|
||||
mklines[r_pkgver.index, 'order'] <- categories.order - 0.1
|
||||
}
|
||||
mklines
|
||||
}
|
||||
|
||||
conflicts <- function(pkg)
|
||||
{
|
||||
conflicts <- function(pkg) {
|
||||
conflict <- sprintf('R>=%s.%s', R.version$major, R.version$minor)
|
||||
conflicts <- list()
|
||||
if (pkg %in% base.packages)
|
||||
{
|
||||
conflicts <- append(conflicts, varassign('CONFLICTS', conflict))
|
||||
conflicts <- end.paragraph(conflicts)
|
||||
}
|
||||
if (pkg %in% base.packages) {
|
||||
conflicts <- append(conflicts, varassign('CONFLICTS', conflict))
|
||||
conflicts <- end.paragraph(conflicts)
|
||||
}
|
||||
conflicts
|
||||
}
|
||||
|
||||
make.df.conflicts <- function(df,metadata)
|
||||
{
|
||||
make.df.conflicts <- function(df, metadata) {
|
||||
df.conflicts <- data.frame()
|
||||
conflicts.exist <- element(df,'CONFLICTS','old_value',quiet=TRUE) != '???'
|
||||
if (!conflicts.exist)
|
||||
{
|
||||
c <- conflicts(metadata$Package)
|
||||
order <- element(df, 'COMMENT', 'order') + 2.5
|
||||
i <- 0
|
||||
for (conflict in c)
|
||||
{
|
||||
i <- i + 1
|
||||
category <- as.character(i)
|
||||
depends <- FALSE
|
||||
buildlink3.mk <- FALSE
|
||||
x <- data.frame(new_line=conflict,order=order,category=category,depends=depends,buildlink3.mk=buildlink3.mk)
|
||||
df.conflicts <- rbind(df.conflicts,x)
|
||||
}
|
||||
conflicts.exist <- element(df, 'CONFLICTS', 'old_value', quiet = TRUE) != '???'
|
||||
if (!conflicts.exist) {
|
||||
c <- conflicts(metadata$Package)
|
||||
order <- element(df, 'COMMENT', 'order') + 2.5
|
||||
i <- 0
|
||||
for (conflict in c) {
|
||||
i <- i + 1
|
||||
category <- as.character(i)
|
||||
depends <- FALSE
|
||||
buildlink3.mk <- FALSE
|
||||
x <- data.frame(new_line = conflict, order = order, category = category, depends = depends, buildlink3.mk = buildlink3.mk)
|
||||
df.conflicts <- rbind(df.conflicts, x)
|
||||
}
|
||||
}
|
||||
df.conflicts
|
||||
}
|
||||
|
||||
make.df.depends <- function(df,DEPENDS)
|
||||
{
|
||||
make.df.depends <- function(df, DEPENDS) {
|
||||
# message('===> make.df.depends():')
|
||||
# str(df)
|
||||
# print(df)
|
||||
df.depends <- data.frame()
|
||||
if (TRUE %in% df$depends)
|
||||
df.depends <- data.frame(new_line=df[df$depends,'line'],stringsAsFactors=FALSE)
|
||||
df.depends <- data.frame(new_line = df[df$depends, 'line'], stringsAsFactors = FALSE)
|
||||
for (line in DEPENDS)
|
||||
df.depends <- rbind(df.depends,data.frame(new_line=line,stringsAsFactors=FALSE))
|
||||
if (nrow(df.depends) > 0)
|
||||
{
|
||||
df.depends$category <- NA
|
||||
df.depends$buildlink3.mk <- FALSE
|
||||
df.depends <- categorize.key_value(df.depends,'new_line')
|
||||
df.depends <- categorize.depends(df.depends,'new_line')
|
||||
df.depends$key_value <- NULL
|
||||
df.depends$key <- NULL
|
||||
df.depends <- df.depends[!duplicated(df.depends),]
|
||||
df.depends$order <- find.order(df,'depends','order')
|
||||
}
|
||||
df.depends <- rbind(df.depends, data.frame(new_line = line, stringsAsFactors = FALSE))
|
||||
if (nrow(df.depends) > 0) {
|
||||
df.depends$category <- NA
|
||||
df.depends$buildlink3.mk <- FALSE
|
||||
df.depends <- categorize.key_value(df.depends, 'new_line')
|
||||
df.depends <- categorize.depends(df.depends, 'new_line')
|
||||
df.depends$key_value <- NULL
|
||||
df.depends$key <- NULL
|
||||
df.depends <- df.depends[!duplicated(df.depends),]
|
||||
df.depends$order <- find.order(df, 'depends', 'order')
|
||||
}
|
||||
# message('===> df.depends:')
|
||||
# str(df.depends)
|
||||
# print(df.depends)
|
||||
df.depends
|
||||
}
|
||||
|
||||
make.df.buildlink3 <- function(df,BUILDLINK3.MK)
|
||||
{
|
||||
make.df.buildlink3 <- function(df, BUILDLINK3.MK) {
|
||||
# message('===> make.df.buildlink3():')
|
||||
df.buildlink3.mk <- data.frame()
|
||||
if (TRUE %in% df$buildlink3.mk)
|
||||
df.buildlink3.mk <- data.frame(new_line=df[df$buildlink3.mk,'line'],stringsAsFactors=FALSE)
|
||||
df.buildlink3.mk <- data.frame(new_line = df[df$buildlink3.mk, 'line'], stringsAsFactors = FALSE)
|
||||
for (line in BUILDLINK3.MK)
|
||||
df.buildlink3.mk <- rbind(df.buildlink3.mk,data.frame(new_line=line,stringsAsFactors=FALSE))
|
||||
if (nrow(df.buildlink3.mk) > 0)
|
||||
{
|
||||
df.buildlink3.mk$category <- NA
|
||||
df.buildlink3.mk$depends <- FALSE
|
||||
df.buildlink3.mk <- categorize.buildlink(df.buildlink3.mk,'new_line')
|
||||
df.buildlink3.mk <- df.buildlink3.mk[!duplicated(df.buildlink3.mk),]
|
||||
df.buildlink3.mk$order <- find.order(df,'buildlink3.mk','order')
|
||||
}
|
||||
df.buildlink3.mk <- rbind(df.buildlink3.mk, data.frame(new_line = line, stringsAsFactors = FALSE))
|
||||
if (nrow(df.buildlink3.mk) > 0) {
|
||||
df.buildlink3.mk$category <- NA
|
||||
df.buildlink3.mk$depends <- FALSE
|
||||
df.buildlink3.mk <- categorize.buildlink(df.buildlink3.mk, 'new_line')
|
||||
df.buildlink3.mk <- df.buildlink3.mk[!duplicated(df.buildlink3.mk),]
|
||||
df.buildlink3.mk$order <- find.order(df, 'buildlink3.mk', 'order')
|
||||
}
|
||||
# str(df.buildlink3.mk)
|
||||
# print(df.buildlink3.mk)
|
||||
df.buildlink3.mk
|
||||
|
@ -809,18 +738,16 @@ make.df.buildlink3 <- function(df,BUILDLINK3.MK)
|
|||
|
||||
#' updates the dependencies and returns the lines to be written to the
|
||||
#' updated package Makefile.
|
||||
mklines.lines <- function(mklines, df.conflicts, df.depends, df.buildlink3.mk)
|
||||
{
|
||||
mklines.lines <- function(mklines, df.conflicts, df.depends, df.buildlink3.mk) {
|
||||
fields <- c('new_line', 'order', 'category', 'depends', 'buildlink3.mk')
|
||||
lines <- mklines[! mklines$depends & ! mklines$buildlink3.mk, fields]
|
||||
lines <- mklines[!mklines$depends & !mklines$buildlink3.mk, fields]
|
||||
lines <- rbind(lines, df.conflicts, df.depends, df.buildlink3.mk)
|
||||
lines <- lines[order(lines$order, lines$category, lines$new_line),]
|
||||
lines <- lines[! adjacent.duplicates(lines$new_line),]
|
||||
lines <- lines[!adjacent.duplicates(lines$new_line),]
|
||||
lines$new_line
|
||||
}
|
||||
|
||||
update.Makefile <- function(mklines, metadata)
|
||||
{
|
||||
update.Makefile <- function(mklines, metadata) {
|
||||
DEPENDENCIES <- make.depends(metadata$Imports, metadata$Depends)
|
||||
DEPENDS <- DEPENDENCIES[[1]]
|
||||
BUILDLINK3.MK <- DEPENDENCIES[[2]]
|
||||
|
@ -840,8 +767,7 @@ update.Makefile <- function(mklines, metadata)
|
|||
write(lines, 'Makefile')
|
||||
}
|
||||
|
||||
create.Makefile <- function(metadata)
|
||||
{
|
||||
create.Makefile <- function(metadata) {
|
||||
if (arg.update && file.exists('Makefile.orig'))
|
||||
update.Makefile(read_mklines('Makefile.orig'), metadata)
|
||||
else
|
||||
|
@ -853,25 +779,22 @@ create.DESCR <- function(metadata) {
|
|||
write(descr, 'DESCR')
|
||||
}
|
||||
|
||||
make.metadata <- function(description.filename)
|
||||
{
|
||||
make.metadata <- function(description.filename) {
|
||||
fields <- c('Package', 'Version', 'Title', 'Description', 'License', 'Imports', 'Depends')
|
||||
metadata <- as.list(read.dcf(description.filename, fields))
|
||||
names(metadata) <- fields
|
||||
metadata
|
||||
}
|
||||
|
||||
main <- function()
|
||||
{
|
||||
main <- function() {
|
||||
Sys.setlocale('LC_ALL', 'C')
|
||||
|
||||
error <- download.file(url=arg.rpkg_description_url,destfile='DESCRIPTION',quiet=arg.quiet_curl,method='curl')
|
||||
if (error)
|
||||
{
|
||||
message('ERROR: Downloading the DESCRIPTION file for ',arg.rpkg,' failed;')
|
||||
message(' perhaps the package no longer exists?')
|
||||
quit(save='no',status=error)
|
||||
}
|
||||
error <- download.file(url = arg.rpkg_description_url, destfile = 'DESCRIPTION', quiet = arg.quiet_curl, method = 'curl')
|
||||
if (error) {
|
||||
message('ERROR: Downloading the DESCRIPTION file for ', arg.rpkg, ' failed;')
|
||||
message(' perhaps the package no longer exists?')
|
||||
quit(save = 'no', status = error)
|
||||
}
|
||||
|
||||
metadata <- make.metadata('DESCRIPTION')
|
||||
create.Makefile(metadata)
|
||||
|
|
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue