X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=trunk%2FR%2Fdebcontrol.R;h=e8f8d325992c8a2bc83a3a3603002835047ed4db;hb=e4d3cbddacd0b2a51ed475b0ce7bb8c811ba5a2f;hp=9018a2dd3b47313e67eaf3875e4f478f1d27dbf2;hpb=2d97c4831b4d3aa9230f0a524a8ab26f21d023ab;p=cran2deb.git diff --git a/trunk/R/debcontrol.R b/trunk/R/debcontrol.R index 9018a2d..e8f8d32 100644 --- a/trunk/R/debcontrol.R +++ b/trunk/R/debcontrol.R @@ -1,4 +1,4 @@ -get_dependencies <- function(pkg,extra_deps) { +get_dependencies <- function(pkg,extra_deps,verbose=TRUE) { # determine dependencies dependencies <- r_dependencies_of(description=pkg$description) depends <- list() @@ -16,9 +16,14 @@ get_dependencies <- function(pkg,extra_deps) { depends$build = c(extra_deps$deb,depends$build) # add the system requirements if ('SystemRequirements' %in% colnames(pkg$description)) { - sysreq <- sysreqs_as_debian(pkg$description[1,'SystemRequirements']) - depends$bin = c(sysreq$bin,depends$bin) - depends$build = c(sysreq$build,depends$build) + sysreq <- sysreqs_as_debian(pkg$description[1,'SystemRequirements'],verbose=verbose) + if (!is.null(sysreq) && is.list(sysreq)) { + depends$bin = c(sysreq$bin,depends$bin) + depends$build = c(sysreq$build,depends$build) + } else { + if (verbose) {cat("sysreq:"); print(sysreq)} + fail('Cannot interpret system dependency, fix package.\n') + } } forced <- forced_deps_as_debian(pkg$name) @@ -60,14 +65,18 @@ get_dependencies <- function(pkg,extra_deps) { return(depends) } -sysreqs_as_debian <- function(sysreq_text) { +sysreqs_as_debian <- function(sysreq_text,verbose=FALSE) { # form of this field is unspecified (ugh) but most people seem to stick # with this aliases <- c() + # drop notes + sysreq_text = gsub('[Nn][Oo][Tt][Ee]:\\s.*','',sysreq_text) + # conversion from and to commata and lower case sysreq_text <- gsub('[[:space:]]and[[:space:]]',' , ',tolower(sysreq_text)) for (sysreq in strsplit(sysreq_text,'[[:space:]]*,[[:space:]]*')[[1]]) { + if (verbose) cat("sysreq to investigate: '",sysreq,"'.\n",sep="") startreq = sysreq - # constant case + # constant case (redundant) sysreq = tolower(sysreq) # drop version information/comments for now sysreq = gsub('[[][^])]*[]]','',sysreq) @@ -78,8 +87,10 @@ sysreqs_as_debian <- function(sysreq_text) { sysreq = gsub('[<>=]*[[:space:]]*[[:digit:]]+[[:digit:].+:~-]*','',sysreq) # byebye URLs sysreq = gsub('(ht|f)tps?://[[:alnum:]!?*"\'(),%$_@.&+/=-]*','',sysreq) - # squish out space + # squish out space -- this does not work for me (did not want to touch, though), Steffen sysreq = chomp(gsub('[[:space:]]+',' ',sysreq)) + # no final dot and neither final blanks + sysreq = gsub('\\.?\\s*$','',sysreq) if (nchar(sysreq) == 0) { notice('part of the SystemRequirement became nothing') next @@ -90,7 +101,7 @@ sysreqs_as_debian <- function(sysreq_text) { error('original SystemRequirement:',startreq) fail('unmet system requirement') } - notice('mapped SystemRequirement',startreq,'onto',alias,'via',sysreq) + notice(paste("mapped SystemRequirement '",startreq,"' onto '",alias,"' via '",sysreq,"'.",sep="")) aliases = c(aliases,alias) } return(map_aliases_to_debian(aliases)) @@ -122,24 +133,17 @@ generate_control <- function(pkg) { control[1,'Priority'] <- 'optional' control[1,'Maintainer'] <- maintainer control[1,'Build-Depends'] <- paste(pkg$depends$build, collapse=', ') - control[1,'Standards-Version'] <- '3.8.4' + control[1,'Standards-Version'] <- '3.9.1' + if ('URL' %in% colnames(pkg$description)) { + control[1,'Homepage'] <- pkg$description[1,'URL'] + } control[2,'Package'] <- pkg$debname control[2,'Architecture'] <- 'all' if (pkg$archdep) { control[2,'Architecture'] <- 'any' } - control[2,'Depends'] <- paste(pkg$depends$bin,collapse=', ') - -# # bundles provide virtual packages of their contents -# # unnecessary for now; cran2deb converts R bundles itself -# if (pkg$is_bundle) { -# control[2,'Provides'] = paste( -# lapply(r_bundle_contains(pkg$name) -# ,function(name) return(pkgname_as_debian(paste(name) -# ,repopref=pkg$repo))) -# ,collapse=', ') -# } + control[2,'Depends'] <- paste(pkg$depends$bin,collapse=', ',sep='') # generate the description descr <- 'GNU R package "' @@ -148,11 +152,7 @@ generate_control <- function(pkg) { } else { descr <- paste(descr,pkg$name,sep='') } - if (pkg$is_bundle) { - long_descr <- pkg$description[1,'BundleDescription'] - } else { - long_descr <- pkg$description[1,'Description'] - } + long_descr <- pkg$description[1,'Description'] if (length(long_descr) < 1 || long_descr == "") { # bypass lintian extended-description-is-empty for which we care not. @@ -165,7 +165,7 @@ generate_control <- function(pkg) { # write.dcf does not appear to have a nicer way of doing this. descr <- paste(descr,'"\n\n', long_descr, sep='') # add some extra nice info about the original R package - for (r_info in c('Author','Maintainer','URL')) { + for (r_info in c('Author','Maintainer')) { if (r_info %in% colnames(pkg$description)) { descr <- paste(descr,'\n\n',r_info,': ',pkg$description[1,r_info],sep='') }