diff options
author | brook <brook@pkgsrc.org> | 2017-07-18 17:24:31 +0000 |
---|---|---|
committer | brook <brook@pkgsrc.org> | 2017-07-18 17:24:31 +0000 |
commit | f5de06d88a70cd98abd70aee555c3302c2c25911 (patch) | |
tree | de12be3873015cf4d31b222a4235b1160ac3d334 /pkgtools/R2pkg | |
parent | b0cdcf954645a67547df68f7372f2bca1648f9b8 (diff) | |
download | pkgsrc-f5de06d88a70cd98abd70aee555c3302c2c25911.tar.gz |
Update to v0.3.
- Add recursive handling of dependencies.
- Simplify updating pre-existing R packages.
- Improve handling of packages that conflict with base R packages.
Diffstat (limited to 'pkgtools/R2pkg')
-rw-r--r-- | pkgtools/R2pkg/Makefile | 6 | ||||
-rw-r--r-- | pkgtools/R2pkg/files/R2pkg.8 | 79 | ||||
-rwxr-xr-x | pkgtools/R2pkg/files/R2pkg.sh | 330 |
3 files changed, 317 insertions, 98 deletions
diff --git a/pkgtools/R2pkg/Makefile b/pkgtools/R2pkg/Makefile index b4f9deeb2be..8919c40a3fa 100644 --- a/pkgtools/R2pkg/Makefile +++ b/pkgtools/R2pkg/Makefile @@ -1,7 +1,7 @@ -# $NetBSD: Makefile,v 1.1 2015/04/25 22:06:34 brook Exp $ +# $NetBSD: Makefile,v 1.2 2017/07/18 17:24:31 brook Exp $ # -VERS= 0.2 +VERS= 0.3 PKGNAME= R2pkg-${VERS} CATEGORIES= pkgtools @@ -15,6 +15,8 @@ NO_BUILD= yes USE_LANGUAGES= # none AUTO_MKDIRS= yes +DEPENDS+= curl>=7.52.1:../../www/curl + SUBST_CLASSES+= version SUBST_STAGE.version= pre-configure SUBST_MESSAGE.version= Substituting version in R2pkg.sh. diff --git a/pkgtools/R2pkg/files/R2pkg.8 b/pkgtools/R2pkg/files/R2pkg.8 index 10e84b16ba8..7876fa264d6 100644 --- a/pkgtools/R2pkg/files/R2pkg.8 +++ b/pkgtools/R2pkg/files/R2pkg.8 @@ -1,6 +1,6 @@ -.\" $NetBSD: R2pkg.8,v 1.1 2015/04/25 22:06:34 brook Exp $ +.\" $NetBSD: R2pkg.8,v 1.2 2017/07/18 17:24:32 brook Exp $ .\" -.\" Copyright (c) 2014,2015 +.\" Copyright (c) 2014,2015,2016,2017 .\" Brook Milligan. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without @@ -28,7 +28,7 @@ .\" SUCH DAMAGE. .\" .\" -.Dd April 25, 2015 +.Dd February 23, 2017 .Dt R2pkg 8 .Os .Sh NAME @@ -36,8 +36,9 @@ .Nd create a pkgsrc package for an R package .Sh SYNOPSIS .Nm -.Op Fl DVehqv +.Op Fl DVehqruv .Op Fl E Ar editor +.Op Fl R Ar dependency_file .Op Ar package .Sh DESCRIPTION .Nm @@ -47,9 +48,11 @@ that should be turned into a .Xr pkgsrc 7 package in the current directory. The generated package includes a .Pa Makefile -and a mostly complete set of files to get the package going. However, the files should be reviewed and perhaps adjusted manually after +and a mostly complete set of files to get the package going. However, +the files should be reviewed and perhaps adjusted manually after .Nm -has finished its job. To help with this, the original versions of files created by +has finished its job. To help with this, the original versions of +files created by .Nm are preserved for reference. .Pp @@ -59,7 +62,8 @@ intended to fly on autopilot. .Pp The .Pa Makefile -contains all of the variables required for an R package, with information being taken from the package's +contains all of the variables required for an R package, with +information being taken from the package's .Pa DESCRIPTION file on CRAN, which is automatically fetched by .Nm . @@ -73,8 +77,6 @@ are completed, .Nm fetches the package and computes its checksum via the .Ic makesum -target. Then the package is extracted via the -.Ic extract target. .Pp If the user does not supply the @@ -88,13 +90,22 @@ The following options are available: .It Fl D Write the package's description into .Pa DESCRIPTION . -This may be useful for verifying the information obtained from CRAN. However, this file must be removed as it is not part of a +This may be useful for verifying the information obtained from CRAN. +However, this file must be removed as it is not part of a .Xr pkgsrc 7 package. .It Fl E Ar editor Use .Ar editor instead of the user's default editor. +.It Fl R Ar dependency_file +Process dependency packages recursively using +.Pa dependency_file +to record dependency information. This option is intended for +internal use only to implement recursion over dependencies. Instead, +the +.Fl r +option should be used to select recursion. .It Fl V Print the version. .It Fl e @@ -103,8 +114,39 @@ Do not edit Makefile and DESCR. Produce a short help message. .It Fl q Do not produce status messages along the way. +.It Fl r +Process dependency packages recursively. A +.Pa depends +file is created that lists the dependencies in +.Xr tsort 1 +order. This is likely the best order for testing the resulting +dependency packages. In particular, a useful strategy for creating +packages recursively is to (i) run +.Nm +with the +.Fl r +option, (ii) fix all the leaf packages, (iii) rerun +.Nm +with the +.Fl r +option, and (iv) continue until all packages are created. Repeating +runs of +.Nm +once the leaf dependencies are moved into the correct categories will +allow the program to capture the correct dependencies in each +.Pa Makefile . +.It Fl u +Update the +.Xr pkgsrc 7 +package. +.Nm +must be run in an R package directory, which is assumed to be named as +.Pa R-package . +The name of the package to be updated will be taken from the directory +name and need not be given on the command line. .It Fl v -Generate verbose output. This may be repeated to increase the verbosity. +Generate verbose output. This may be repeated to increase the +verbosity. .El .Sh ENVIRONMENT The following environment variables affect the execution of @@ -129,7 +171,8 @@ package for the R package .Dl mkdir R-foo .Dl cd R-foo .Dl R2pkg foo -Remember to test the resulting package and remove any extra files created by +Remember to test the resulting package and remove any extra files +created by .Nm . .Sh BUGS .Nm @@ -137,10 +180,14 @@ does not create a finished package; instead, it facilitates the task. However, the resulting files must be reviewed and possibly edited by hand. Although dependencies are included in the generated .Pa Makefile , -they are only comments; no attempt is made to find corresponding -packages within -.Xr pkgsrc 7 . -As a consequence, the category of dependencies is also not determined. +they are not fully analyzed and likely have incorrect category +information. Packages created recursively for dependencies are placed +in a newly created, nonstandard +.Pa pkgsrc/R +category directory and must be moved to appropriate category +directories within +.Xr pkgsrc 7 +and checked for correctness. .Sh SEE ALSO .Xr pkgsrc 7 .Sh AUTHORS diff --git a/pkgtools/R2pkg/files/R2pkg.sh b/pkgtools/R2pkg/files/R2pkg.sh index 67e82965cd3..7c1269bc08c 100755 --- a/pkgtools/R2pkg/files/R2pkg.sh +++ b/pkgtools/R2pkg/files/R2pkg.sh @@ -1,7 +1,7 @@ #!/bin/sh # R2pkg # -# Copyright (c) 2014,2015 +# Copyright (c) 2014,2015,2016,2017 # Brook Milligan. All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -34,34 +34,43 @@ NAME="R2pkg" VERS="@VERS@" -USAGE="${NAME} [-DVehqv] [-E editor] [package] -- create an R package for pkgsrc" +USAGE="${NAME} [-DVehqrv] [-E editor] [-R dependency_file] [package] -- create an R package for pkgsrc" : ${CRAN_URL:=ftp://cran.r-project.org} : ${PKGEDITOR:=${EDITOR:=vi}} # Substituted by pkgsrc at pre-configure time. MAKE=@MAKE@ -ECHO=echo EDIT=1 QUIET=0 +RECURSIVE=0 +TOP_LEVEL=1 +UPDATE=0 VERBOSE=0 -while getopts DE:Vehqv f +DESCRIPTION_CONNECTION=connection + +while getopts DE:R:Vehqruv f do case $f in - D) DESCRIPTION=yes;; - E) PKGEDITOR=${OPTARG};; + D) DESCRIPTION=yes; DESCRIPTION_CONNECTION="'DESCRIPTION'"; ARGS="${ARGS} -D";; + E) PKGEDITOR=${OPTARG}; ARGS="${ARGS} -E ${PKGEDITOR}";; + R) DEPENDENCY_LIST=${OPTARG}; RECURSIVE=1; TOP_LEVEL=0; ARGS="${ARGS} -R ${DEPENDENCY_LIST}";; V) echo "${NAME} v${VERS}"; exit 0;; - e) EDIT=0;; + e) EDIT=0; ARGS="${ARGS} -e";; h) echo ${USAGE}; exit 0;; - q) ECHO=":"; QUIET=1;; - v) VERBOSE=$((${VERBOSE}+1));; + q) QUIET=1; ARGS="${ARGS} -q";; + r) RECURSIVE=1; RECURSIVE_MESSAGE=1; ARGS="${ARGS} -r";; + u) UPDATE=1;; + v) VERBOSE=$((${VERBOSE}+1)); ARGS="${ARGS} -v";; \?) echo ${USAGE}; exit 1;; esac done shift `expr ${OPTIND} - 1` -if [ ${#} -eq 0 ]; then +if [ ${UPDATE} -eq 1 ]; then + RPKG=$(echo $(basename $(pwd)) | sed -e 's/^R-//'); +elif [ ${#} -eq 0 ]; then read -p "package: " RPKG TAIL if [ "X${TAIL}" != "X" ]; then echo "Error: multiple package names given." @@ -75,15 +84,52 @@ else exit 1 fi -if [ ${VERBOSE} -eq 0 ]; then - STDOUT=">/dev/null 2>&1" - STDOUT2=">/dev/null 2>&1" +R_FILE=${TMPDIR}/R2pkg.$$.R + +if [ ${TOP_LEVEL} -eq 1 ]; then + BANNER_MSG="===> Creating R package: R-${RPKG}" +else + BANNER_MSG="===> Creating dependency package: R-${RPKG}" +fi +if [ "X${DEPENDENCY_LIST}" = "X" ]; then + DEPENDENCY_LIST=${TMPDIR}/R2pkg.depends.$$ + ARGS="${ARGS} -R ${DEPENDENCY_LIST}" +fi +if [ ${QUIET} -eq 1 ]; then + STDOUT_MAKESUM=">/dev/null" + STDOUT_EXTRACT=">/dev/null" + QUIET_CURL="TRUE" + ECHO_BANNER=":" + ECHO_DONE=":" + ECHO_FETCH=":" + ECHO_EXTRACT=":" + if [ ${TOP_LEVEL} -eq 0 ]; then + ECHO=":" + fi +elif [ ${VERBOSE} -eq 0 ]; then + STDOUT_MAKESUM=">/dev/null" + STDOUT_EXTRACT=">/dev/null" + QUIET_CURL="TRUE" + ECHO_BANNER="echo" + ECHO_DONE=":" + ECHO_FETCH=":" + ECHO_EXTRACT="echo" elif [ ${VERBOSE} -eq 1 ]; then - STDOUT="" - STDOUT2=">/dev/null 2>&1" + STDOUT_MAKESUM=">/dev/null" + STDOUT_EXTRACT=">/dev/null" + QUIET_CURL="TRUE" + ECHO_BANNER="echo" + ECHO_DONE="echo" + ECHO_FETCH="echo" + ECHO_EXTRACT="echo" else - STDOUT="" - STDOUT2="" + STDOUT_MAKESUM="" + STDOUT_EXTRACT="" + QUIET_CURL="FALSE" + ECHO_BANNER="echo" + ECHO_DONE="echo" + ECHO_FETCH="echo" + ECHO_EXTRACT="echo" fi CRAN_PACKAGES=pub/R/web/packages @@ -91,8 +137,8 @@ RPKG_DESCRIPTION_URL=${CRAN_URL}/${CRAN_PACKAGES}/${RPKG}/DESCRIPTION check_for_R () { - R_CMD="R --no-save ${STDOUT2}" - echo "q()" | eval ${R_CMD} + R_CMD="Rscript --no-save /dev/null" + eval ${R_CMD} if [ ${?} -ne 0 ]; then echo "ERROR: math/R package is not installed." exit 1 @@ -108,10 +154,12 @@ preserve_original_files () make_package () { - R_CMD="R --no-save ${STDOUT2}" - [ "X${DESCRIPTION}" != "X" ] && DESCRIPTION_CMD="copy.description(connection)" - cat << EOF | eval ${R_CMD} -one.line <- function(s) gsub(' *\n *',' ',s) + R_CMD="Rscript --no-save ${R_FILE}" + cat << EOF > ${R_FILE} +trim.space <- function(s) gsub('[[:space:]]','',s) +trim.blank <- function(s) gsub('[[:blank:]]','',s) +one.space <- function(s) gsub('[[:blank:]]+',' ',s) +one.line <- function(s) gsub('\n',' ',s) pkg.vers <- function(s) gsub('_','.',s) field <- function(key,value) paste(key,'=\t',value,sep='') @@ -164,105 +212,202 @@ license <- function(s) field(todo.license(s),pkgsrc.license(s)) categories <- function() paste('CATEGORIES=',paste(basename(dirname(getwd())),'R'),sep=' ') description <- function(s) strwrap(s,width=71) -depends <- function(s1,s2) +filter.imports <- function(s) +{ + base.packages <- c('R','MASS','Matrix','Rcpp','cluster','grDevices','graphics','grid','foreign','lattice','nlme','methods','nnet','parallel','rpart','stats','survival','tools','utils') + 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) - imports <- na.omit(strsplit(one.line(s),', *')[[1]]) - DEPENDS <- '' + 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 <- unlist(strsplit(s,'\\\\(')) + s +} + +depends <- function(s1,s2) +{ + imports <- make.imports(s1,s2) + DEPENDS <- list() if (length(imports) > 0) { for (i in 1:length(imports)) { - dependency <- strsplit(imports[i],' *\\\\( *')[[1]] + dependency <- make.dependency(imports[i]) depends <- dependency[1] - depends.vers <- ifelse(length(dependency) == 2, dependency[2], '>=???') - depends.vers <- gsub(' ','',depends.vers) - depends.vers <- pkg.vers(gsub('\\\\)','',depends.vers)) - depends.line <- paste('# DEPENDS+=\tR-',depends,depends.vers,':../../CATEGORY/R-',depends,sep='') - DEPENDS <- paste(DEPENDS,depends.line,sep='\n') + depends.pkg <- Sys.glob(paste('../../*/R-',depends,sep='')) + if (length(depends.pkg) != 1) # a unique dependency cannot be found + { + if (${RECURSIVE}) + { + dependency.dir <- paste('../../R/R-',depends,sep='') + dir.create(path=dependency.dir,recursive=TRUE) + error <- system(paste('(cd',dependency.dir,'&& R2pkg.sh ${ARGS}',depends,')')) + if (error != 0) + file.remove(dependency.dir) + } + } + depends.pkg <- Sys.glob(paste('../../*/R-',depends,sep='')) + if (length(depends.pkg) == 1) # a unique dependency found + { + depends.pkg.fullname <- system(paste('cd',depends.pkg,'&& bmake show-var VARNAME=PKGNAME'),intern=TRUE) + depends.pkg.name <- sub('^(.*)-([^-]*)$','\\\\1',depends.pkg.fullname) + depends.pkg.vers <- sub('^(.*)-([^-]*)$','\\\\2',depends.pkg.fullname) + if (length(dependency) == 2) + depends.vers <- dependency[2] + else + depends.vers <- paste('>=',depends.pkg.vers,sep='') + depends.line <- paste('DEPENDS+=\tR-',depends,depends.vers,':',depends.pkg,sep='') + if (length(dependency) == 2) + depends.line <- paste(depends.line,' # XXX - found ',depends.pkg.fullname,' (',depends.pkg,')',sep='') + } + else + { + depends.vers <- ifelse(length(dependency) == 2, dependency[2], '>=???') + depends.vers <- trim.space(depends.vers) + depends.line <- paste('DEPENDS+=\tR-',depends,depends.vers,':../../R/R-',depends,sep='') + } + DEPENDS <- list(DEPENDS,depends.line) + new.depends.pkg <- Sys.glob(paste('../../R/R-',depends,sep='')) + if (length(new.depends.pkg) > 0) + system(paste('echo',depends,'${RPKG} >> ${DEPENDENCY_LIST}')) } - DEPENDS <- paste(DEPENDS,'',sep='\n') } + if (length(DEPENDS) > 0) + DEPENDS <- append(DEPENDS,'') DEPENDS } +use.languages <- function(s1,s2) +{ + USE_LANGUAGES <- list() + s <- paste(s1,s2) + Rcpp <- grepl('Rcpp',s) + if (Rcpp) + USE_LANGUAGES <- append(USE_LANGUAGES,list('USE_LANGUAGES+= c++')) + if (length(USE_LANGUAGES) > 0) + USE_LANGUAGES <- append(USE_LANGUAGES,'') + USE_LANGUAGES +} + +buildlink <- function(s1,s2) +{ + BUILDLINK <- list() + s <- paste(s1,s2) + Rcpp <- grepl('Rcpp',s) + if (Rcpp) + BUILDLINK <- append(BUILDLINK,'.include "../../devel/R-Rcpp/buildlink3.mk"') + BUILDLINK +} + copy.description <- function(connection) { description <- readLines(connection) writeLines(description,con='DESCRIPTION') } -connection <- url('${RPKG_DESCRIPTION_URL}') -${DESCRIPTION_CMD} -metadata <- read.dcf(connection, fields=c('Package','Version','Title','Description','License','Imports','Depends')) - -CVS <- '# \$NetBSD\$' -CATEGORIES <- categories() -MASTER.SITES <- 'MASTER_SITES= \${MASTER_SITE_R_CRAN:=contrib/}' -MAINTAINER <- 'MAINTAINER= pkgsrc-users@NetBSD.org' -HOMEPAGE <- 'HOMEPAGE= \${R_HOMEPAGE_BASE}/${RPKG}/' -COMMENT <- comment(metadata[3]) -LICENSE <- license(metadata[5]) -R_PKGNAME <- package(metadata[1]) -R_PKGVER <- version(metadata[2]) -DEPENDS <- depends(metadata[6],metadata[7]) -INCLUDE.R <- '.include "../../math/R/Makefile.extension"' -INCLUDE.PKG <- '.include "../../mk/bsd.pkg.mk"' +error <- download.file(url='${RPKG_DESCRIPTION_URL}',destfile='DESCRIPTION',quiet=${QUIET_CURL},method='curl') +if (error) + quit(status=error) + +metadata <- read.dcf(file='DESCRIPTION', fields=c('Package','Version','Title','Description','License','Imports','Depends')) + +CVS <- '# \$NetBSD\$' +CATEGORIES <- categories() +MASTER.SITES <- 'MASTER_SITES= \${MASTER_SITE_R_CRAN:=contrib/}' +MAINTAINER <- 'MAINTAINER= pkgsrc-users@NetBSD.org' +HOMEPAGE <- 'HOMEPAGE= \${R_HOMEPAGE_BASE}/${RPKG}/' +COMMENT <- comment(metadata[3]) +LICENSE <- license(metadata[5]) +R_PKGNAME <- package(metadata[1]) +R_PKGVER <- version(metadata[2]) +USE_LANGUAGES <- use.languages(metadata[6],metadata[7]) +DEPENDS <- depends(metadata[6],metadata[7]) +INCLUDE.R <- '.include "../../math/R/Makefile.extension"' +INCLUDE.BUILDLINK <- buildlink(metadata[6],metadata[7]) +INCLUDE.PKG <- '.include "../../mk/bsd.pkg.mk"' DESCR <- description(metadata[4]) -Makefile <- paste(CVS, - '', - CATEGORIES, - MASTER.SITES, - '', - MAINTAINER, - HOMEPAGE, - COMMENT, - LICENSE, - '', - R_PKGNAME, - R_PKGVER, - DEPENDS, - INCLUDE.R, - INCLUDE.PKG, - sep='\n') +Makefile <- list() +Makefile <- append(Makefile,CVS) +Makefile <- append(Makefile,'') +Makefile <- append(Makefile,CATEGORIES) +Makefile <- append(Makefile,MASTER.SITES) +Makefile <- append(Makefile,'') +Makefile <- append(Makefile,MAINTAINER) +Makefile <- append(Makefile,HOMEPAGE) +Makefile <- append(Makefile,COMMENT) +Makefile <- append(Makefile,LICENSE) +Makefile <- append(Makefile,'') +Makefile <- append(Makefile,R_PKGNAME) +Makefile <- append(Makefile,R_PKGVER) +Makefile <- append(Makefile,'') +Makefile <- append(Makefile,USE_LANGUAGES) +Makefile <- append(Makefile,DEPENDS) +Makefile <- append(Makefile,INCLUDE.R) +Makefile <- append(Makefile,INCLUDE.BUILDLINK) +Makefile <- append(Makefile,INCLUDE.PKG) +Makefile <- paste(unlist(Makefile),collapse='\n') write(Makefile,'Makefile') write(DESCR,'DESCR') EOF - if [ ${?} -ne 0 ]; then - echo "ERROR: parsing metadata failed." - exit 1 + eval ${R_CMD} + retval=${?} + if [ ${retval} -ne 0 ]; then + echo "ERROR: making ${RPKG} package failed." fi + return ${retval} } edit_Makefile () { - [ ${EDIT} -eq 0 ] || ${PKGEDITOR} Makefile + if [ ${EDIT} -ne 0 -a -s Makefile ]; then + ${PKGEDITOR} Makefile + fi } edit_DESCR () { - [ ${EDIT} -eq 0 ] || ${PKGEDITOR} DESCR + if [ ${EDIT} -ne 0 -a -s DESCR ]; then + ${PKGEDITOR} DESCR + fi } create_distinfo () { - ${ECHO} "Fetching package ... " - MAKE_CMD="${MAKE} makesum ${STDOUT}" + ${ECHO_FETCH} "==> Fetching R-${RPKG} ..." + MAKE_CMD="${MAKE} makesum ${STDOUT_MAKESUM}" eval ${MAKE_CMD} + return ${?} } extract () { - ${ECHO} "Extracting package ... " - MAKE_CMD="${MAKE} extract ${STDOUT}" + ${ECHO_EXTRACT} "==> Extracting R-${RPKG} ..." + MAKE_CMD="${MAKE} extract ${STDOUT_EXTRACT}" eval ${MAKE_CMD} } cleanup () { + [ "X${DESCRIPTION}" != "X" ] || rm -f DESCRIPTION if [ -f DESCR.orig ] && cmp -s DESCR.orig DESCR; then mv DESCR.orig DESCR fi @@ -272,12 +417,14 @@ cleanup () if [ -f distinfo.orig ] && cmp -s distinfo.orig distinfo; then mv distinfo.orig distinfo fi + rm -f ${R_FILE} } messages () { - if [ ${QUIET} -eq 0 ]; then + if [ ${QUIET} -eq 0 -a ${TOP_LEVEL} -ne 0 ]; then cat << EOF + Please do not forget the following: - check DESCR and edit as necessary. - check Makefile: @@ -286,16 +433,39 @@ Please do not forget the following: o verify the DEPENDS, especially the categories. EOF [ "X${DESCRIPTION}" != "X" ] && echo "- remove DESCRIPTION." + if [ ${RECURSIVE} -ne 0 ]; then + cat << EOF + +Recursive packages may have been created in ../../R; please do the following: +- edit each Makefile as follows (in addition to following the notes above): + o move recursively created packages to the appropriate category. + o fix the category in Makefile. + o fix the category of any dependencies. + o remove any extraneous dependencies. +EOF + if [ -s ${DEPENDENCY_LIST} ]; then + tsort ${DEPENDENCY_LIST} > depends + echo "- It may be useful to test these packages in the following order:" + awk 'BEGIN{printf(" ")} {printf(" R-%s",$0)}' depends && echo + [ ${TOP_LEVEL} -eq 0 ] || rm -f ${DEPENDENCY_LIST} + fi + fi fi } -${ECHO} "Creating R package: ${RPKG} ... " +${ECHO_BANNER} "${BANNER_MSG} ..." check_for_R preserve_original_files make_package -edit_Makefile -edit_DESCR -create_distinfo -extract +error=${?} +if [ ${error} -eq 0 ]; then + edit_Makefile + edit_DESCR + create_distinfo + error=${?}; [ ${error} -eq 0 ] || exit ${error} + # extract +fi cleanup messages +${ECHO_DONE} "${BANNER_MSG}: done" +exit ${error} |