Tue Oct 15 18:44:21 2019 UTC ()
pkgtools/R2pkg: remove unused code


(rillig)
diff -r1.7 -r1.8 pkgsrc/pkgtools/R2pkg/files/R2pkg.R

cvs diff -r1.7 -r1.8 pkgsrc/pkgtools/R2pkg/files/R2pkg.R (switch to unified diff)

--- pkgsrc/pkgtools/R2pkg/files/R2pkg.R 2019/10/13 19:34:13 1.7
+++ pkgsrc/pkgtools/R2pkg/files/R2pkg.R 2019/10/15 18:44:21 1.8
@@ -1,1241 +1,1214 @@ @@ -1,1241 +1,1214 @@
1# $NetBSD: R2pkg.R,v 1.7 2019/10/13 19:34:13 rillig Exp $ 1# $NetBSD: R2pkg.R,v 1.8 2019/10/15 18:44:21 rillig Exp $
2# 2#
3# Copyright (c) 2014,2015,2016,2017,2018,2019 3# Copyright (c) 2014,2015,2016,2017,2018,2019
4# Brook Milligan. All rights reserved. 4# Brook Milligan. All rights reserved.
5# 5#
6# Redistribution and use in source and binary forms, with or without 6# Redistribution and use in source and binary forms, with or without
7# modification, are permitted provided that the following conditions 7# modification, are permitted provided that the following conditions
8# are met: 8# are met:
9# 1. Redistributions of source code must retain the above copyright 9# 1. Redistributions of source code must retain the above copyright
10# notice, this list of conditions and the following disclaimer. 10# notice, this list of conditions and the following disclaimer.
11# 2. Redistributions in binary form must reproduce the above copyright 11# 2. Redistributions in binary form must reproduce the above copyright
12# notice, this list of conditions and the following disclaimer in the 12# notice, this list of conditions and the following disclaimer in the
13# documentation and/or other materials provided with the distribution. 13# documentation and/or other materials provided with the distribution.
14# 3. Neither the name of the author nor the names of any contributors 14# 3. Neither the name of the author nor the names of any contributors
15# may be used to endorse or promote products derived from this software 15# may be used to endorse or promote products derived from this software
16# without specific prior written permission. 16# without specific prior written permission.
17# 17#
18# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 18# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 21# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
22# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28# SUCH DAMAGE. 28# SUCH DAMAGE.
29# 29#
30# 30#
31# Create an R package in the current directory 31# Create an R package in the current directory
32# 32#
33 33
34arg.level <- as.integer(Sys.getenv('LEVEL')) 34arg.level <- as.integer(Sys.getenv('LEVEL'))
35arg.rpkg <- Sys.getenv('RPKG') 35arg.rpkg <- Sys.getenv('RPKG')
36arg.packages_list <- Sys.getenv('PACKAGES_LIST') 36arg.packages_list <- Sys.getenv('PACKAGES_LIST')
37arg.r2pkg <- Sys.getenv('R2PKG') 37arg.r2pkg <- Sys.getenv('R2PKG')
38arg.args <- Sys.getenv('ARGS') 38arg.args <- Sys.getenv('ARGS')
39arg.recursive <- as.logical(Sys.getenv('RECURSIVE')) 39arg.recursive <- as.logical(Sys.getenv('RECURSIVE'))
40arg.update <- as.logical(Sys.getenv('UPDATE')) 40arg.update <- as.logical(Sys.getenv('UPDATE'))
41arg.dependency_list <- Sys.getenv('DEPENDENCY_LIST') 41arg.dependency_list <- Sys.getenv('DEPENDENCY_LIST')
42arg.maintainer_email <- Sys.getenv('MAINTAINER_EMAIL') 42arg.maintainer_email <- Sys.getenv('MAINTAINER_EMAIL')
43arg.rpkg_description_url <- Sys.getenv('RPKG_DESCRIPTION_URL') 43arg.rpkg_description_url <- Sys.getenv('RPKG_DESCRIPTION_URL')
44arg.quiet_curl <- as.logical(Sys.getenv('QUIET_CURL')) 44arg.quiet_curl <- as.logical(Sys.getenv('QUIET_CURL'))
45 45
46level.message <- function(...) 46level.message <- function(...)
47 message('[ ', arg.level, ' ] ', ...) 47 message('[ ', arg.level, ' ] ', ...)
48 48
49level.warning <- function(...) 49level.warning <- function(...)
50 level.message('WARNING: ', ...) 50 level.message('WARNING: ', ...)
51 51
52R_version <- function() 52R_version <- function()
53{ 53{
54 info <- R.Version() 54 info <- R.Version()
55 version <- paste0(info[['major']],'.',info[['minor']]) 55 version <- paste0(info[['major']],'.',info[['minor']])
56 version 56 version
57} 57}
58 58
59trim.space <- function(s) gsub('[[:space:]]','',s) 59trim.space <- function(s) gsub('[[:space:]]','',s)
60trim.blank <- function(s) gsub('[[:blank:]]','',s) 60trim.blank <- function(s) gsub('[[:blank:]]','',s)
61one.space <- function(s) gsub('[[:blank:]]+',' ',s) 61one.space <- function(s) gsub('[[:blank:]]+',' ',s)
62one.line <- function(s) gsub('\n',' ',s) 62one.line <- function(s) gsub('\n',' ',s)
63pkg.vers <- function(s) gsub('_','.',s) 63pkg.vers <- function(s) gsub('_','.',s)
64field <- function(key,value) paste(key,'=\t',value,sep='') 64field <- function(key,value) paste(key,'=\t',value,sep='')
65 65
66# The list of "recommended packages which are to be included in all 66# The list of "recommended packages which are to be included in all
67# binary distributions of R." (R FAQ 5.1.2 2018-10-18) 67# binary distributions of R." (R FAQ 5.1.2 2018-10-18)
68# 68#
69base.packages.FAQ.5.1.2 <- c( 69base.packages.FAQ.5.1.2 <- c(
70 'KernSmooth', 70 'KernSmooth',
71 'MASS', 71 'MASS',
72 'Matrix', 72 'Matrix',
73 'boot', 73 'boot',
74 'class', 74 'class',
75 'cluster', 75 'cluster',
76 'codetools', 76 'codetools',
77 'foreign', 77 'foreign',
78 'lattice', 78 'lattice',
79 'mgcv', 79 'mgcv',
80 'nlme', 80 'nlme',
81 'nnet', 81 'nnet',
82 'rpart', 82 'rpart',
83 'spatial', 83 'spatial',
84 'survival') 84 'survival')
85 85
86# Other R packages that appear in dependency lists but are included in 86# Other R packages that appear in dependency lists but are included in
87# the R package. 87# the R package.
88# 88#
89base.packages.other <- c( 89base.packages.other <- c(
90 'grDevices', 90 'grDevices',
91 'graphics', 91 'graphics',
92 'grid', 92 'grid',
93 'methods', 93 'methods',
94 'parallel', 94 'parallel',
95 'splines', 95 'splines',
96 'stats', 96 'stats',
97 'tools', 97 'tools',
98 'utils') 98 'utils')
99base.packages <- c('R',base.packages.FAQ.5.1.2,base.packages.other) 99base.packages <- c('R',base.packages.FAQ.5.1.2,base.packages.other)
100 100
101licenses <- list() 101licenses <- list()
102licenses[['ACM']] <- 'acm-license' 102licenses[['ACM']] <- 'acm-license'
103licenses[['ACM | file LICENSE']] <- 'acm-license # OR file LICENSE' 103licenses[['ACM | file LICENSE']] <- 'acm-license # OR file LICENSE'
104licenses[['APACHE']] <- 'apache-1.1 OR apache-2.0' 104licenses[['APACHE']] <- 'apache-1.1 OR apache-2.0'
105licenses[['Apache License 2.0']] <- 'apache-2.0' 105licenses[['Apache License 2.0']] <- 'apache-2.0'
106licenses[['Apache License (== 2.0)']] <- 'apache-2.0' 106licenses[['Apache License (== 2.0)']] <- 'apache-2.0'
107licenses[['Apache License (== 2.0) | file LICENSE']] <- 'apache-2.0 # OR file LICENSE' 107licenses[['Apache License (== 2.0) | file LICENSE']] <- 'apache-2.0 # OR file LICENSE'
108licenses[['ARTISTIC']] <- 'artistic OR artistic-2.0' 108licenses[['ARTISTIC']] <- 'artistic OR artistic-2.0'
109licenses[['Artistic-2.0']] <- 'artistic-2.0' 109licenses[['Artistic-2.0']] <- 'artistic-2.0'
110licenses[['BSD']] <- '2-clause-bsd OR modified-bsd OR original-bsd' 110licenses[['BSD']] <- '2-clause-bsd OR modified-bsd OR original-bsd'
111licenses[['BSD-2']] <- '2-clause-bsd' 111licenses[['BSD-2']] <- '2-clause-bsd'
112licenses[['BSD_2_clause + file LICENSE']] <- '2-clause-bsd # + file LICENSE' 112licenses[['BSD_2_clause + file LICENSE']] <- '2-clause-bsd # + file LICENSE'
113licenses[['BSD 3 clause']] <- 'modified-bsd' 113licenses[['BSD 3 clause']] <- 'modified-bsd'
114licenses[['BSD 3 clause + file LICENSE']] <- 'modified-bsd # + file LICENSE' 114licenses[['BSD 3 clause + file LICENSE']] <- 'modified-bsd # + file LICENSE'
115licenses[['BSD_3_clause + file LICENSE']] <- 'modified-bsd # + file LICENSE' 115licenses[['BSD_3_clause + file LICENSE']] <- 'modified-bsd # + file LICENSE'
116licenses[['BSL-1.0']] <- 'boost-license' 116licenses[['BSL-1.0']] <- 'boost-license'
117licenses[['CC0']] <- 'cc0-1.0-universal' 117licenses[['CC0']] <- 'cc0-1.0-universal'
118licenses[['GPL']] <- 'gnu-gpl-v1 OR gnu-gpl-v2 OR gnu-gpl-v3' 118licenses[['GPL']] <- 'gnu-gpl-v1 OR gnu-gpl-v2 OR gnu-gpl-v3'
119licenses[['GPL-1']] <- 'gnu-gpl-v1' 119licenses[['GPL-1']] <- 'gnu-gpl-v1'
120licenses[['GPL-2']] <- 'gnu-gpl-v2' 120licenses[['GPL-2']] <- 'gnu-gpl-v2'
121licenses[['GPL-2 | file LICENSE']] <- 'gnu-gpl-v2 # OR file LICENSE' 121licenses[['GPL-2 | file LICENSE']] <- 'gnu-gpl-v2 # OR file LICENSE'
122licenses[['GPL-3']] <- 'gnu-gpl-v3' 122licenses[['GPL-3']] <- 'gnu-gpl-v3'
123licenses[['GPL-2 | GPL-3']] <- 'gnu-gpl-v2 OR gnu-gpl-v3' 123licenses[['GPL-2 | GPL-3']] <- 'gnu-gpl-v2 OR gnu-gpl-v3'
124licenses[['GPL (>= 2)']] <- 'gnu-gpl-v2 OR gnu-gpl-v3' 124licenses[['GPL (>= 2)']] <- 'gnu-gpl-v2 OR gnu-gpl-v3'
125licenses[['GPL (>= 2.0)']] <- 'gnu-gpl-v2 OR gnu-gpl-v3' 125licenses[['GPL (>= 2.0)']] <- 'gnu-gpl-v2 OR gnu-gpl-v3'
126licenses[['GPL (>= 2) | file LICENSE']] <- 'gnu-gpl-v2 OR gnu-gpl-v3 # OR file LICENSE' 126licenses[['GPL (>= 2) | file LICENSE']] <- 'gnu-gpl-v2 OR gnu-gpl-v3 # OR file LICENSE'
127licenses[['GPL (>= 3)']] <- 'gnu-gpl-v3' 127licenses[['GPL (>= 3)']] <- 'gnu-gpl-v3'
128licenses[['LGPL']] <- 'gnu-lgpl-v2 OR gnu-lgpl-v2.1 OR gnu-lgpl-v3' 128licenses[['LGPL']] <- 'gnu-lgpl-v2 OR gnu-lgpl-v2.1 OR gnu-lgpl-v3'
129licenses[['LGPL-2']] <- 'gnu-lgpl-v2' 129licenses[['LGPL-2']] <- 'gnu-lgpl-v2'
130licenses[['LGPL-2.1']] <- 'gnu-lgpl-v2.1' 130licenses[['LGPL-2.1']] <- 'gnu-lgpl-v2.1'
131licenses[['LGPL-3']] <- 'gnu-lgpl-v3' 131licenses[['LGPL-3']] <- 'gnu-lgpl-v3'
132licenses[['LGPL-3 + file LICENSE']] <- 'gnu-lgpl-v3 # + file LICENSE' 132licenses[['LGPL-3 + file LICENSE']] <- 'gnu-lgpl-v3 # + file LICENSE'
133licenses[['LGPL-2 | LGPL-3']] <- 'gnu-lgpl-v2 OR gnu-lgpl-v3' 133licenses[['LGPL-2 | LGPL-3']] <- 'gnu-lgpl-v2 OR gnu-lgpl-v3'
134licenses[['LGPL (>= 2)']] <- 'gnu-lgpl-v2 OR gnu-lgpl-v2.1 OR gnu-lgpl-v3' 134licenses[['LGPL (>= 2)']] <- 'gnu-lgpl-v2 OR gnu-lgpl-v2.1 OR gnu-lgpl-v3'
135licenses[['LUCENT']] <- 'lucent' 135licenses[['LUCENT']] <- 'lucent'
136licenses[['Lucent Public License']] <- 'lucent' 136licenses[['Lucent Public License']] <- 'lucent'
137licenses[['MIT']] <- 'mit' 137licenses[['MIT']] <- 'mit'
138licenses[['MIT + file LICENSE']] <- 'mit # + file LICENSE' 138licenses[['MIT + file LICENSE']] <- 'mit # + file LICENSE'
139licenses[['MIT + file LICENSE | Unlimited']] <- 'mit # + file LICENSE OR unlimited' 139licenses[['MIT + file LICENSE | Unlimited']] <- 'mit # + file LICENSE OR unlimited'
140licenses[['MPL-1.0']] <- 'mpl-1.0' 140licenses[['MPL-1.0']] <- 'mpl-1.0'
141licenses[['MPL-1.1']] <- 'mpl-1.1' 141licenses[['MPL-1.1']] <- 'mpl-1.1'
142licenses[['MPL-2.0']] <- 'mpl-2.0' 142licenses[['MPL-2.0']] <- 'mpl-2.0'
143licenses[['MPL-2.0 | file LICENSE']] <- 'mpl-2.0 # OR file LICENSE' 143licenses[['MPL-2.0 | file LICENSE']] <- 'mpl-2.0 # OR file LICENSE'
144licenses[['POSTGRESQL']] <- 'postgresql-license' 144licenses[['POSTGRESQL']] <- 'postgresql-license'
145 145
146adjacent.duplicates <- function(x) 146adjacent.duplicates <- function(x)
147{ 147{
148 a <- x[-length(x)] 148 a <- x[-length(x)]
149 b <- x[-1] 149 b <- x[-1]
150 dups <- a == b 150 dups <- a == b
151 dups <- c(FALSE,dups) 151 dups <- c(FALSE,dups)
152 dups 152 dups
153} 153}
154 154
155paste2 <- function(s1,s2) 155paste2 <- function(s1,s2)
156{ 156{
157 if (is.na(s1) && is.na(s2)) return ('') 157 if (is.na(s1) && is.na(s2)) return ('')
158 if (is.na(s1) && !is.na(s2)) return (s2) 158 if (is.na(s1) && !is.na(s2)) return (s2)
159 if (!is.na(s1) && is.na(s2)) return (s1) 159 if (!is.na(s1) && is.na(s2)) return (s1)
160 if (!is.na(s1) && !is.na(s2)) return (paste(s1,s2)) 160 if (!is.na(s1) && !is.na(s2)) return (paste(s1,s2))
161} 161}
162 162
163end.paragraph <- function(l,l1=l,l2=list()) 163end.paragraph <- function(l,l1=l,l2=list())
164{ 164{
165 if (length(l1) > 0 || length(l2) > 0) 165 if (length(l1) > 0 || length(l2) > 0)
166 l <- append(l,'') 166 l <- append(l,'')
167 l 167 l
168} 168}
169 169
170as.sorted.list <- function(df) 170as.sorted.list <- function(df)
171{ 171{
172 l <- list() 172 l <- list()
173 df <- df[!duplicated(df),] 173 df <- df[!duplicated(df),]
174 if (nrow(df) > 0) 174 if (nrow(df) > 0)
175 { 175 {
176 key <- as.vector(df[,1]) 176 key <- as.vector(df[,1])
177 value <- as.vector(df[,2]) 177 value <- as.vector(df[,2])
178 key <- order(key,value) 178 key <- order(key,value)
179 l <- as.list(value[key]) 179 l <- as.list(value[key])
180 } 180 }
181 l 181 l
182} 182}
183 183
184read.file.as.dataframe <- function(filename) 184read.file.as.dataframe <- function(filename)
185{ 185{
186 # message('===> read.file.as.dataframe(',filename,')') 186 # message('===> read.file.as.dataframe(',filename,')')
187 contents <- as.list(readLines(filename)) 187 contents <- as.list(readLines(filename))
188 df <- data.frame() 188 df <- data.frame()
189 for (line in contents) 189 for (line in contents)
190 { 190 {
191 # str(line) 191 # str(line)
192 df <- rbind(df,data.frame(line=line,stringsAsFactors=FALSE)) 192 df <- rbind(df,data.frame(line=line,stringsAsFactors=FALSE))
193 } 193 }
194 df 194 df
195} 195}
196 196
197categorize.key_value <- function(df,line='line') 197categorize.key_value <- function(df,line='line')
198{ 198{
199 re.skip_blank <- '[[:blank:]]*' 199 re.skip_blank <- '[[:blank:]]*'
200 re.blank <- '[[:blank:]]+' 200 re.blank <- '[[:blank:]]+'
201 re.anything <- '.*' 201 re.anything <- '.*'
202 202
203 re.key <- '[^+=[:blank:]]+' 203 re.key <- '[^+=[:blank:]]+'
204 re.operator <- '[+=]+' 204 re.operator <- '[+=]+'
205 re.delimiter <- re.skip_blank 205 re.delimiter <- re.skip_blank
206 re.value <- re.anything 206 re.value <- re.anything
207 re.optional_TODO <- '(#[[:blank:]]*TODO[[:blank:]]*:[[:blank:]]*)*' 207 re.optional_TODO <- '(#[[:blank:]]*TODO[[:blank:]]*:[[:blank:]]*)*'
208 208
209 re.match_key_value_line <- paste0('^', 209 re.match_key_value_line <- paste0('^',
210 re.skip_blank, 210 re.skip_blank,
211 re.optional_TODO, 211 re.optional_TODO,
212 re.key, 212 re.key,
213 re.skip_blank, 213 re.skip_blank,
214 re.operator, 214 re.operator,
215 re.delimiter, 215 re.delimiter,
216 re.value, 216 re.value,
217 '$') 217 '$')
218 218
219 re.match_key <- paste0('^', 219 re.match_key <- paste0('^',
220 re.skip_blank, 220 re.skip_blank,
221 re.optional_TODO, 221 re.optional_TODO,
222 '(',re.key,')', 222 '(',re.key,')',
223 re.skip_blank, 223 re.skip_blank,
224 re.operator, 224 re.operator,
225 re.delimiter, 225 re.delimiter,
226 re.value, 226 re.value,
227 '$') 227 '$')
228 228
229 df$key_value <- grepl(re.match_key_value_line,df[,line]) 229 df$key_value <- grepl(re.match_key_value_line,df[,line])
230 df$key <- sub(re.match_key,'\\2',df[,line]) 230 df$key <- sub(re.match_key,'\\2',df[,line])
231 df$key[!df$key_value] <- NA 231 df$key[!df$key_value] <- NA
232 df 232 df
233} 233}
234 234
235categorize.depends <- function(df,line='line') 235categorize.depends <- function(df,line='line')
236{ 236{
237 df$depends <- df$key_value & df$key == 'DEPENDS' 237 df$depends <- df$key_value & df$key == 'DEPENDS'
238 df$category[df$depends] <- unlist(sapply(strsplit(df[df$depends,line],'/',fixed=TRUE),'[',3)) 238 df$category[df$depends] <- unlist(sapply(strsplit(df[df$depends,line],'/',fixed=TRUE),'[',3))
239 df 239 df
240} 240}
241 241
242categorize.buildlink <- function(df,line='line') 242categorize.buildlink <- function(df,line='line')
243{ 243{
244 df$buildlink3.mk <- grepl('buildlink3.mk',df[,line]) 244 df$buildlink3.mk <- grepl('buildlink3.mk',df[,line])
245 df$category[df$buildlink3.mk] <- unlist(sapply(strsplit(df[df$buildlink3.mk,line],'/',fixed=TRUE),'[',3)) 245 df$category[df$buildlink3.mk] <- unlist(sapply(strsplit(df[df$buildlink3.mk,line],'/',fixed=TRUE),'[',3))
246 df 246 df
247} 247}
248 248
249fix.continued.lines <- function(df,line='line') 249fix.continued.lines <- function(df,line='line')
250{ 250{
251 if (nrow(df) > 1) 251 if (nrow(df) > 1)
252 { 252 {
253 continued <- grepl('\\\\$',df[,line]) 253 continued <- grepl('\\\\$',df[,line])
254 continued_key_value <- df$key_value & continued 254 continued_key_value <- df$key_value & continued
255 if (FALSE %in% df[continued,'key_value']) 255 if (FALSE %in% df[continued,'key_value'])
256 { 256 {
257 level.warning('unhandled continued line(s)') 257 level.warning('unhandled continued line(s)')
258 } 258 }
259 for (i in 1:(length(continued_key_value)-1)) 259 for (i in 1:(length(continued_key_value)-1))
260 { 260 {
261 next_line <- i + 1 261 next_line <- i + 1
262 if (continued_key_value[i]) 262 if (continued_key_value[i])
263 { 263 {
264 df[i,line] <- sub('[[:blank:]]*\\\\$','',df[i,line]) 264 df[i,line] <- sub('[[:blank:]]*\\\\$','',df[i,line])
265 df$key_value[next_line] <- TRUE 265 df$key_value[next_line] <- TRUE
266 df$key[next_line] <- df$key[i] 266 df$key[next_line] <- df$key[i]
267 df[next_line,line] <- paste0(df$key[next_line],'+=',df[next_line,line]) 267 df[next_line,line] <- paste0(df$key[next_line],'+=',df[next_line,line])
268 } 268 }
269 } 269 }
270 } 270 }
271 df 271 df
272} 272}
273 273
274read.Makefile.as.dataframe <- function(filename = 'Makefile.orig') 274read.Makefile.as.dataframe <- function(filename = 'Makefile.orig')
275{ 275{
276 # message('===> read.Makefile.as.dataframe():') 276 # message('===> read.Makefile.as.dataframe():')
277 277
278 re.skip_blank <- '[[:blank:]]*' 278 re.skip_blank <- '[[:blank:]]*'
279 re.blank <- '[[:blank:]]+' 279 re.blank <- '[[:blank:]]+'
280 re.anything <- '.*' 280 re.anything <- '.*'
281 281
282 re.key <- '[^+=[:blank:]]+' 282 re.key <- '[^+=[:blank:]]+'
283 re.operator <- '[+=]+' 283 re.operator <- '[+=]+'
284 re.delimiter <- re.skip_blank 284 re.delimiter <- re.skip_blank
285 re.value <- re.anything 285 re.value <- re.anything
286 re.optional_TODO <- '(?:#[[:blank:]]*TODO[[:blank:]]*:[[:blank:]]*)*' 286 re.optional_TODO <- '(?:#[[:blank:]]*TODO[[:blank:]]*:[[:blank:]]*)*'
287 287
288 re.match <- paste0('^', 288 re.match <- paste0('^',
289 re.skip_blank, 289 re.skip_blank,
290 '(',re.optional_TODO,')', 290 '(',re.optional_TODO,')',
291 re.key, 291 re.key,
292 re.skip_blank, 292 re.skip_blank,
293 '(',re.operator,')', 293 '(',re.operator,')',
294 '(',re.delimiter,')', 294 '(',re.delimiter,')',
295 '(',re.value,')', 295 '(',re.value,')',
296 '$') 296 '$')
297 297
298 df <- read.file.as.dataframe(filename) 298 df <- read.file.as.dataframe(filename)
299 299
300 df$order <- 1:nrow(df) 300 df$order <- 1:nrow(df)
301 df$category <- NA 301 df$category <- NA
302 302
303 df <- categorize.key_value(df) 303 df <- categorize.key_value(df)
304 df <- fix.continued.lines(df) 304 df <- fix.continued.lines(df)
305 df <- categorize.depends(df) 305 df <- categorize.depends(df)
306 df <- categorize.buildlink(df) 306 df <- categorize.buildlink(df)
307 307
308 df$operator <- sub(re.match, '\\2', df$line) 308 df$operator <- sub(re.match, '\\2', df$line)
309 df$delimiter <- sub(re.match, '\\3', df$line) 309 df$delimiter <- sub(re.match, '\\3', df$line)
310 df$old_value <- sub(re.match, '\\4', df$line) 310 df$old_value <- sub(re.match, '\\4', df$line)
311 df$old_todo <- sub(re.match, '\\1', df$line) 311 df$old_todo <- sub(re.match, '\\1', df$line)
312 312
313 df$operator[!df$key_value] <- NA 313 df$operator[!df$key_value] <- NA
314 df$delimiter[!df$key_value] <- NA 314 df$delimiter[!df$key_value] <- NA
315 df$old_value[!df$key_value] <- NA 315 df$old_value[!df$key_value] <- NA
316 df$old_todo[!df$key_value] <- NA 316 df$old_todo[!df$key_value] <- NA
317 317
318 df 318 df
319} 319}
320 320
321read.file.as.list <- function(filename) 321read.file.as.list <- function(filename)
322{ 322{
323 result <- list() 323 result <- list()
324 info <- file.info(filename) 324 info <- file.info(filename)
325 size <- info[filename,'size'] 325 size <- info[filename,'size']
326 if (!is.na(size) && size > 0) 326 if (!is.na(size) && size > 0)
327 { 327 {
328 contents <- readLines(filename) 328 contents <- readLines(filename)
329 result <- as.list(contents) 329 result <- as.list(contents)
330 } 330 }
331 result 331 result
332} 332}
333 333
334read.file.as.value <- function(filename) 334read.file.as.value <- function(filename)
335{ 335{
336 value <- '' 336 value <- ''
337 l <- read.file.as.list(filename) 337 l <- read.file.as.list(filename)
338 if (length(l) == 1) 338 if (length(l) == 1)
339 { 339 {
340 line <- l[[1]] 340 line <- l[[1]]
341 fields <- strsplit(line,'[[:blank:]]+') 341 fields <- strsplit(line,'[[:blank:]]+')
342 value <- fields[[1]][2] 342 value <- fields[[1]][2]
343 } 343 }
344 value 344 value
345} 345}
346 346
347read.file.as.values <- function(filename) 347read.file.as.values <- function(filename)
348{ 348{
349 message('===> read.file.as.values(',filename,'):') 349 message('===> read.file.as.values(',filename,'):')
350 values <- list() 350 values <- list()
351 l <- read.file.as.list(filename) 351 l <- read.file.as.list(filename)
352 print(l) 352 print(l)
353 for (line in l) 353 for (line in l)
354 { 354 {
355 # fields <- strsplit(line,'[[:blank:]]+') 355 # fields <- strsplit(line,'[[:blank:]]+')
356 # value <- fields[[1]][2] 356 # value <- fields[[1]][2]
357 } 357 }
358 print(values) 358 print(values)
359 values 359 values
360} 360}
361 361
362simplify.whitespace <- function(s) { gsub('[[:blank:]]+',' ',s) } 362simplify.whitespace <- function(s) { gsub('[[:blank:]]+',' ',s) }
363remove.punctuation <- function(s) 363remove.punctuation <- function(s)
364{ 364{
365 punctuation <- '[,-]' 365 punctuation <- '[,-]'
366 gsub(punctuation,'',s) 366 gsub(punctuation,'',s)
367} 367}
368remove.quotes <- function(s) 368remove.quotes <- function(s)
369{ 369{
370 quotes <- '[\'`"]' #" to de-confuse mcedit 370 quotes <- '[\'`"]' #" to de-confuse mcedit
371 gsub(quotes,'',s) 371 gsub(quotes,'',s)
372} 372}
373remove.articles <- function(s) 373remove.articles <- function(s)
374{ 374{
375 pattern <- '^([[:blank:]]*)An* |([[:blank:]]+)[Aa]n*[[:blank:]]+' 375 pattern <- '^([[:blank:]]*)An* |([[:blank:]]+)[Aa]n*[[:blank:]]+'
376 result <- gsub(pattern,'\\1',s) 376 result <- gsub(pattern,'\\1',s)
377 result 377 result
378} 378}
379 379
380case.insensitive.equals <- function(s1,s2) 380case.insensitive.equals <- function(s1,s2)
381{ 381{
382 s1.lower <- tolower(simplify.whitespace(s1)) 382 s1.lower <- tolower(simplify.whitespace(s1))
383 s2.lower <- tolower(simplify.whitespace(s2)) 383 s2.lower <- tolower(simplify.whitespace(s2))
384 result <- s1.lower == s2.lower 384 result <- s1.lower == s2.lower
385 result 385 result
386} 386}
387 387
388weakly.equals <- function(s1,s2) 388weakly.equals <- function(s1,s2)
389{ 389{
390 result <- case.insensitive.equals(remove.articles(remove.quotes(remove.punctuation(s1))), 390 result <- case.insensitive.equals(remove.articles(remove.quotes(remove.punctuation(s1))),
391 remove.articles(remove.quotes(remove.punctuation(s2)))) 391 remove.articles(remove.quotes(remove.punctuation(s2))))
392 result 392 result
393} 393}
394 394
395new.field.if.different <- function(filename,s) 395new.field.if.different <- function(filename,s)
396{ 396{
397 field <- field(filename,one.line(s)) 397 field <- field(filename,one.line(s))
398 field.list <- read.file.as.list(filename) 398 field.list <- read.file.as.list(filename)
399 if (length(field.list) == 1) 399 if (length(field.list) == 1)
400 { 400 {
401 f <- field.list[[1]] 401 f <- field.list[[1]]
402 if (case.insensitive.equals(f,field)) 402 if (case.insensitive.equals(f,field))
403 field <- f 403 field <- f
404 } 404 }
405 field 405 field
406} 406}
407 407
408todo.license <- function(s) 408todo.license <- function(s)
409{ 409{
410 if (is.null(licenses[[s]])) 410 if (is.null(licenses[[s]]))
411 todo <- '# TODO: LICENSE' 411 todo <- '# TODO: LICENSE'
412 else 412 else
413 todo <- 'LICENSE' 413 todo <- 'LICENSE'
414 todo 414 todo
415} 415}
416 416
417pkgsrc.license <- function(s) 417pkgsrc.license <- function(s)
418{ 418{
419 license <- licenses[[s]] 419 license <- licenses[[s]]
420 if (is.null(license)) 420 if (is.null(license))
421 license <- s 421 license <- s
422 license 422 license
423} 423}
424 424
425package <- function(s) one.line(s) 425package <- function(s) one.line(s)
426version <- function(s) one.line(s) 426version <- function(s) one.line(s)
427comment <- function(s) one.line(s) 427comment <- function(s) one.line(s)
428use.tools <- function(s) read.file.as.list(s) 428use.tools <- function(s) read.file.as.list(s)
429 429
430license <- function(s) 430license <- function(s)
431{ 431{
432 license <- pkgsrc.license(s) 432 license <- pkgsrc.license(s)
433 old.license <- read.file.as.value('LICENSE') 433 old.license <- read.file.as.value('LICENSE')
434 if (old.license != '' && old.license != license) 434 if (old.license != '' && old.license != license)
435 license <- paste0(license,' # [R2pkg] previously: ',old.license) 435 license <- paste0(license,' # [R2pkg] previously: ',old.license)
436 license 436 license
437} 437}
438 438
439maintainer <- function(email) 439maintainer <- function(email)
440{ 440{
441 MAINTAINER <- read.file.as.value('MAINTAINER') 441 MAINTAINER <- read.file.as.value('MAINTAINER')
442 if (MAINTAINER == '') 442 if (MAINTAINER == '')
443 MAINTAINER <- email 443 MAINTAINER <- email
444 MAINTAINER 444 MAINTAINER
445} 445}
446 446
447make.sed.command <- function(key,value) 
448{ 
449 address <- paste0('/^[[:blank:]]*',key,'/') 
450 match <- paste0('(',key,'[[:blank:]]*=[[:blank:]]*).*$') 
451 replacement <- paste0('\\1',value) 
452 command <- paste0(' -e "',address,'s/',match,'/',replacement,'/"') 
453 command 
454} 
455 
456sed.categories <- function(categories) make.sed.command('CATEGORIES',categories) 
457sed.comment <- function(comment) 
458{ 
459 old.comment <- read.file.as.value('COMMENT') 
460 if (weakly.equals(old.comment,comment)) 
461 comment <- old.comment 
462 make.sed.command('COMMENT',comment) 
463} 
464sed.maintainer <- function(email) 
465{ 
466 make.sed.command('MAINTAINER',maintainer(email)) 
467} 
468sed.license <- function(license) 
469{ 
470 make.sed.command('LICENSE',license) 
471} 
472sed.r_pkgver <- function(r_pkgver) make.sed.command('R_PKGVER',r_pkgver) 
473 
474find.Rcpp <- function(imps, deps) grepl('Rcpp', paste(imps, deps)) 447find.Rcpp <- function(imps, deps) grepl('Rcpp', paste(imps, deps))
475 448
476buildlink3.mk <- function(imps,deps) 449buildlink3.mk <- function(imps,deps)
477{ 450{
478 BUILDLINK3.MK <- data.frame() 451 BUILDLINK3.MK <- data.frame()
479 buildlink3.mk.list <- read.file.as.list('BUILDLINK3.MK') 452 buildlink3.mk.list <- read.file.as.list('BUILDLINK3.MK')
480 for (line in buildlink3.mk.list) 453 for (line in buildlink3.mk.list)
481 { 454 {
482 fields <- strsplit(line[[1]],'/',fixed=TRUE) 455 fields <- strsplit(line[[1]],'/',fixed=TRUE)
483 key <- fields[[1]][3] 456 key <- fields[[1]][3]
484 value <- line 457 value <- line
485 BUILDLINK3.MK <- rbind(BUILDLINK3.MK,data.frame(key=key,value=value)) 458 BUILDLINK3.MK <- rbind(BUILDLINK3.MK,data.frame(key=key,value=value))
486 } 459 }
487 if (find.Rcpp(imps,deps)) 460 if (find.Rcpp(imps,deps))
488 { 461 {
489 buildlink3.line <- '.include "../../devel/R-Rcpp/buildlink3.mk"' 462 buildlink3.line <- '.include "../../devel/R-Rcpp/buildlink3.mk"'
490 key <- 'devel' 463 key <- 'devel'
491 value <- buildlink3.line 464 value <- buildlink3.line
492 BUILDLINK3.MK <- rbind(BUILDLINK3.MK,data.frame(key=key,value=value)) 465 BUILDLINK3.MK <- rbind(BUILDLINK3.MK,data.frame(key=key,value=value))
493 } 466 }
494 BUILDLINK3.MK 467 BUILDLINK3.MK
495} 468}
496 469
497makefile.field <- function(key,value) 470makefile.field <- function(key,value)
498{ 471{
499 # message('===> makefile.field(',key,',',value,'):') 472 # message('===> makefile.field(',key,',',value,'):')
500 field <- paste0(key,'= ',value) 473 field <- paste0(key,'= ',value)
501 # print(field) 474 # print(field)
502 field 475 field
503} 476}
504 477
505makefile.fields <- function(key,values) 478makefile.fields <- function(key,values)
506{ 479{
507 # message('===> makefile.fields():') 480 # message('===> makefile.fields():')
508 fields <- list() 481 fields <- list()
509 for (l in values) 482 for (l in values)
510 { 483 {
511 value <- unlist(l) 484 value <- unlist(l)
512 # message('===> value=',value,' ',length(value),' ',value == '') 485 # message('===> value=',value,' ',length(value),' ',value == '')
513 # print(value) 486 # print(value)
514 if (value != '') 487 if (value != '')
515 fields <- append(fields,makefile.field(key,list(value))) 488 fields <- append(fields,makefile.field(key,list(value)))
516 else 489 else
517 fields <- append(fields,list('')) 490 fields <- append(fields,list(''))
518 # print(fields) 491 # print(fields)
519 } 492 }
520 # print(fields) 493 # print(fields)
521 fields 494 fields
522} 495}
523 496
524categories <- function() basename(dirname(getwd())) 497categories <- function() basename(dirname(getwd()))
525description <- function(s) strwrap(s,width=71) 498description <- function(s) strwrap(s,width=71)
526 499
527filter.imports <- function(s) 500filter.imports <- function(s)
528{ 501{
529 for (pkg in base.packages) 502 for (pkg in base.packages)
530 { 503 {
531 re.pkg <- paste('^',pkg,sep='') 504 re.pkg <- paste('^',pkg,sep='')
532 s <- s[!grepl(re.pkg,s)] 505 s <- s[!grepl(re.pkg,s)]
533 } 506 }
534 s 507 s
535} 508}
536 509
537make.imports <- function(s1,s2) 510make.imports <- function(s1,s2)
538{ 511{
539 s <- paste2(s1,s2) 512 s <- paste2(s1,s2)
540 s <- gsub('([[:alnum:]]+)[[:blank:]]+(\\([^\\)]*\\))?[[:blank:]]*,?','\\1 \\2,',s) 513 s <- gsub('([[:alnum:]]+)[[:blank:]]+(\\([^\\)]*\\))?[[:blank:]]*,?','\\1 \\2,',s)
541 imports <- na.omit(unlist(strsplit(s,',[[:blank:]]*'))) 514 imports <- na.omit(unlist(strsplit(s,',[[:blank:]]*')))
542 imports <- trim.space(imports) 515 imports <- trim.space(imports)
543 imports <- filter.imports(imports) 516 imports <- filter.imports(imports)
544 imports 517 imports
545} 518}
546 519
547make.dependency <- function(s) 520make.dependency <- function(s)
548{ 521{
549 s <- gsub('\\)','',s) 522 s <- gsub('\\)','',s)
550 s <- gsub('-','.',s) 523 s <- gsub('-','.',s)
551 s <- unlist(strsplit(s,'\\(')) 524 s <- unlist(strsplit(s,'\\('))
552 s 525 s
553} 526}
554 527
555depends <- function(dependency) dependency[1] 528depends <- function(dependency) dependency[1]
556 529
557depends.pkg <- function(dependency) 530depends.pkg <- function(dependency)
558{ 531{
559 # XXX message('===> ',depends(dependency)) 532 # XXX message('===> ',depends(dependency))
560 result <- Sys.glob(paste0('../../*/R-',depends(dependency))) 533 result <- Sys.glob(paste0('../../*/R-',depends(dependency)))
561 result 534 result
562} 535}
563 536
564new.depends.pkg <- function(dependency) 537new.depends.pkg <- function(dependency)
565{ 538{
566 result <- Sys.glob(paste0('../../wip/R-',depends(dependency))) 539 result <- Sys.glob(paste0('../../wip/R-',depends(dependency)))
567 result 540 result
568} 541}
569 542
570depends.pkg.fullname <- function(dependency,index=1) 543depends.pkg.fullname <- function(dependency,index=1)
571{ 544{
572 result <- system(paste('cd',depends.pkg(dependency)[index],'&& bmake show-var VARNAME=PKGNAME'),intern=TRUE) 545 result <- system(paste('cd',depends.pkg(dependency)[index],'&& bmake show-var VARNAME=PKGNAME'),intern=TRUE)
573 result 546 result
574} 547}
575 548
576depends.pkg.name <- function(dependency,index=1) 549depends.pkg.name <- function(dependency,index=1)
577{ 550{
578 result <- sub('^(.*)-([^-]*)$','\\1',depends.pkg.fullname(dependency,index)) 551 result <- sub('^(.*)-([^-]*)$','\\1',depends.pkg.fullname(dependency,index))
579 result 552 result
580} 553}
581 554
582depends.pkg.vers <- function(dependency,index=1) 555depends.pkg.vers <- function(dependency,index=1)
583{ 556{
584 result <- sub('^(.*)-([^-]*)$','\\2',depends.pkg.fullname(dependency,index)) 557 result <- sub('^(.*)-([^-]*)$','\\2',depends.pkg.fullname(dependency,index))
585 result 558 result
586} 559}
587 560
588depends.vers <- function(dependency,index=1) 561depends.vers <- function(dependency,index=1)
589{ 562{
590 if (length(dependency) == 2) 563 if (length(dependency) == 2)
591 result <- dependency[2] 564 result <- dependency[2]
592 else 565 else
593 result <- paste0('>=',depends.pkg.vers(dependency,index)) 566 result <- paste0('>=',depends.pkg.vers(dependency,index))
594 result <- trim.space(result) 567 result <- trim.space(result)
595 result 568 result
596} 569}
597 570
598depends.vers.2 <- function(dependency) 571depends.vers.2 <- function(dependency)
599{ 572{
600 result <- ifelse(length(dependency) == 2, dependency[2], '>=???') 573 result <- ifelse(length(dependency) == 2, dependency[2], '>=???')
601 result <- trim.space(result) 574 result <- trim.space(result)
602 result 575 result
603} 576}
604 577
605depends.dir <- function(dependency,index=1) 578depends.dir <- function(dependency,index=1)
606{ 579{
607 fields <- strsplit(depends.pkg(dependency)[index],'/',fixed=TRUE) 580 fields <- strsplit(depends.pkg(dependency)[index],'/',fixed=TRUE)
608 result <- fields[[1]][3] 581 result <- fields[[1]][3]
609 result 582 result
610} 583}
611 584
612depends.line <- function(dependency,index=1) 585depends.line <- function(dependency,index=1)
613{ 586{
614 result <- paste0('DEPENDS+=\tR-',depends(dependency),depends.vers(dependency,index),':',depends.pkg(dependency)[index]) 587 result <- paste0('DEPENDS+=\tR-',depends(dependency),depends.vers(dependency,index),':',depends.pkg(dependency)[index])
615 result 588 result
616} 589}
617 590
618depends.line.2 <- function(dependency) 591depends.line.2 <- function(dependency)
619{ 592{
620 result <- paste0('DEPENDS+=\tR-',depends,depends.vers.2(dependency),':../../???/R-',depends) 593 result <- paste0('DEPENDS+=\tR-',depends,depends.vers.2(dependency),':../../???/R-',depends)
621 result <- paste0(result,' # XXX - found') 594 result <- paste0(result,' # XXX - found')
622 for (pkg in depends.pkg(dependency)) 595 for (pkg in depends.pkg(dependency))
623 result <- paste(result,pkg) 596 result <- paste(result,pkg)
624 result 597 result
625} 598}
626 599
627buildlink3.file <- function(dependency,index=1) 600buildlink3.file <- function(dependency,index=1)
628{ 601{
629 result <- paste0(depends.pkg(dependency)[index],'/buildlink3.mk') 602 result <- paste0(depends.pkg(dependency)[index],'/buildlink3.mk')
630 result 603 result
631} 604}
632 605
633buildlink3.line <- function(dependency,index=1) 606buildlink3.line <- function(dependency,index=1)
634{ 607{
635 result <- paste0('.include "',buildlink3.file(dependency,index),'"') 608 result <- paste0('.include "',buildlink3.file(dependency,index),'"')
636 result 609 result
637} 610}
638 611
639dependency.dir <- function(dependency) 612dependency.dir <- function(dependency)
640{ 613{
641 result <- paste0('../../wip/R-',depends(dependency)) 614 result <- paste0('../../wip/R-',depends(dependency))
642 result 615 result
643} 616}
644 617
645message.wip.dependency <- function(dependency,index=1) 618message.wip.dependency <- function(dependency,index=1)
646{ 619{
647 dir <- depends.dir(dependency,index) 620 dir <- depends.dir(dependency,index)
648 dir.in.wip <- grepl('wip',dir) 621 dir.in.wip <- grepl('wip',dir)
649 wd.in.wip <- grepl('/wip/',getwd()) 622 wd.in.wip <- grepl('/wip/',getwd())
650 if (dir.in.wip && !wd.in.wip) 623 if (dir.in.wip && !wd.in.wip)
651 level.warning('R-',arg.rpkg,' should not depend on a wip package: ',depends.pkg(dependency)[index]) 624 level.warning('R-',arg.rpkg,' should not depend on a wip package: ',depends.pkg(dependency)[index])
652} 625}
653 626
654message.too.many.dependencies <- function(dependency) 627message.too.many.dependencies <- function(dependency)
655{ 628{
656 msg <- paste0('[ ',arg.level,' ] WARNING: too many dependencies found for ',depends(dependency),':') 629 msg <- paste0('[ ',arg.level,' ] WARNING: too many dependencies found for ',depends(dependency),':')
657 for (pkg in depends.pkg(dependency)) 630 for (pkg in depends.pkg(dependency))
658 msg <- paste(msg,pkg) 631 msg <- paste(msg,pkg)
659 msg 632 msg
660} 633}
661 634
662update.dependency <- function(dependency,index=1) 635update.dependency <- function(dependency,index=1)
663{ 636{
664 level.warning('updating dependency for ',depends(dependency),': ',depends.pkg(dependency)[index]) 637 level.warning('updating dependency for ',depends(dependency),': ',depends.pkg(dependency)[index])
665 grep <- paste0('grep -E -q -e "',depends(dependency),'" ',arg.packages_list) 638 grep <- paste0('grep -E -q -e "',depends(dependency),'" ',arg.packages_list)
666 command <- paste0(grep,' || (cd ',depends.pkg(dependency)[index],' && ',arg.r2pkg,' ',arg.args,' ',depends(dependency),')') 639 command <- paste0(grep,' || (cd ',depends.pkg(dependency)[index],' && ',arg.r2pkg,' ',arg.args,' ',depends(dependency),')')
667 error <- system(command) 640 error <- system(command)
668 if (error != 0) 641 if (error != 0)
669 level.warning('error updating dependency for ',depends(dependency)) 642 level.warning('error updating dependency for ',depends(dependency))
670} 643}
671 644
672make.depends <- function(imps,deps) 645make.depends <- function(imps,deps)
673{ 646{
674 imports <- make.imports(imps,deps) 647 imports <- make.imports(imps,deps)
675 # XXX message('===> imports:') 648 # XXX message('===> imports:')
676 # XXX print(imports) 649 # XXX print(imports)
677 DEPENDS <- data.frame() 650 DEPENDS <- data.frame()
678 BUILDLINK3.MK <- buildlink3.mk(imps,deps) 651 BUILDLINK3.MK <- buildlink3.mk(imps,deps)
679 if (length(imports) > 0) 652 if (length(imports) > 0)
680 { 653 {
681 for (i in 1:length(imports)) 654 for (i in 1:length(imports))
682 { 655 {
683 dependency <- make.dependency(imports[i]) 656 dependency <- make.dependency(imports[i])
684 # XXX message('[ ',${LEVEL},' ] ===> ',i,' / ',length(imports),': ',depends(dependency)) 657 # XXX message('[ ',${LEVEL},' ] ===> ',i,' / ',length(imports),': ',depends(dependency))
685 if (length(depends.pkg(dependency)) == 0) # a dependency cannot be found 658 if (length(depends.pkg(dependency)) == 0) # a dependency cannot be found
686 { 659 {
687 level.message('0 dependencies match ',dependency) 660 level.message('0 dependencies match ',dependency)
688 if (arg.recursive) 661 if (arg.recursive)
689 { 662 {
690 dir.create(path=dependency.dir(dependency),recursive=TRUE) 663 dir.create(path=dependency.dir(dependency),recursive=TRUE)
691 update.dependency(dependency) 664 update.dependency(dependency)
692 } 665 }
693 else 666 else
694 level.warning('dependency needed for ',depends(dependency)) 667 level.warning('dependency needed for ',depends(dependency))
695 } 668 }
696 else if (length(depends.pkg(dependency)) == 1) # a unique dependency found 669 else if (length(depends.pkg(dependency)) == 1) # a unique dependency found
697 { 670 {
698 level.message('1 dependency matches ',dependency,': ',depends.pkg(dependency)) 671 level.message('1 dependency matches ',dependency,': ',depends.pkg(dependency))
699 message.wip.dependency(dependency) 672 message.wip.dependency(dependency)
700 if (arg.recursive && arg.update) 673 if (arg.recursive && arg.update)
701 update.dependency(dependency) 674 update.dependency(dependency)
702 if (file.exists(buildlink3.file(dependency))) 675 if (file.exists(buildlink3.file(dependency)))
703 BUILDLINK3.MK <- rbind(BUILDLINK3.MK,data.frame(key=depends.dir(dependency),value=buildlink3.line(dependency))) 676 BUILDLINK3.MK <- rbind(BUILDLINK3.MK,data.frame(key=depends.dir(dependency),value=buildlink3.line(dependency)))
704 else 677 else
705 DEPENDS <- rbind(DEPENDS,data.frame(key=depends.dir(dependency),value=depends.line(dependency))) 678 DEPENDS <- rbind(DEPENDS,data.frame(key=depends.dir(dependency),value=depends.line(dependency)))
706 } 679 }
707 else if (length(depends.pkg(dependency)) == 2) # two dependencies found 680 else if (length(depends.pkg(dependency)) == 2) # two dependencies found
708 { 681 {
709 d <- depends.pkg(dependency) 682 d <- depends.pkg(dependency)
710 index <- grep('/wip/',d,invert=TRUE) 683 index <- grep('/wip/',d,invert=TRUE)
711 level.message('2 dependencies match ',dependency,':',paste(' ',depends.pkg(dependency))) 684 level.message('2 dependencies match ',dependency,':',paste(' ',depends.pkg(dependency)))
712 # message('===> depends(dependency): ',depends(dependency)) 685 # message('===> depends(dependency): ',depends(dependency))
713 # message('===> depends.pkg(dependency):',paste(' ',d)) 686 # message('===> depends.pkg(dependency):',paste(' ',d))
714 # message('===> index: ',index) 687 # message('===> index: ',index)
715 # message('===> buildlink3.line(): ',buildlink3.line(dependency,index)) 688 # message('===> buildlink3.line(): ',buildlink3.line(dependency,index))
716 if (length(index) == 1) # a unique, non-wip, dependency found 689 if (length(index) == 1) # a unique, non-wip, dependency found
717 { 690 {
718 level.message('choosing unique non-wip dependency for ',dependency,': ',depends.pkg(dependency)[index]) 691 level.message('choosing unique non-wip dependency for ',dependency,': ',depends.pkg(dependency)[index])
719 if (arg.recursive && arg.update) 692 if (arg.recursive && arg.update)
720 update.dependency(dependency,index) 693 update.dependency(dependency,index)
721 if (file.exists(buildlink3.file(dependency,index))) 694 if (file.exists(buildlink3.file(dependency,index)))
722 BUILDLINK3.MK <- rbind(BUILDLINK3.MK,data.frame(key=depends.dir(dependency,index),value=buildlink3.line(dependency,index))) 695 BUILDLINK3.MK <- rbind(BUILDLINK3.MK,data.frame(key=depends.dir(dependency,index),value=buildlink3.line(dependency,index)))
723 else 696 else
724 DEPENDS <- rbind(DEPENDS,data.frame(key=depends.dir(dependency,index),value=depends.line(dependency,index))) 697 DEPENDS <- rbind(DEPENDS,data.frame(key=depends.dir(dependency,index),value=depends.line(dependency,index)))
725 } 698 }
726 else 699 else
727 { 700 {
728 level.message('no unique non-wip dependency matches') 701 level.message('no unique non-wip dependency matches')
729 message(message.too.many.dependencies(dependency)) 702 message(message.too.many.dependencies(dependency))
730 DEPENDS <- rbind(DEPENDS,data.frame(key='???',value=depends.line.2(dependency))) 703 DEPENDS <- rbind(DEPENDS,data.frame(key='???',value=depends.line.2(dependency)))
731 } 704 }
732 } 705 }
733 else # more than 2 dependencies found 706 else # more than 2 dependencies found
734 { 707 {
735 level.message(length(depends.pkg(dependency)),' dependencies match ',dependency,':',paste(' ',depends.pkg(dependency))) 708 level.message(length(depends.pkg(dependency)),' dependencies match ',dependency,':',paste(' ',depends.pkg(dependency)))
736 message(message.too.many.dependencies(dependency)) 709 message(message.too.many.dependencies(dependency))
737 DEPENDS <- rbind(DEPENDS,data.frame(key='???',value=depends.line.2(dependency))) 710 DEPENDS <- rbind(DEPENDS,data.frame(key='???',value=depends.line.2(dependency)))
738 } 711 }
739 if (length(new.depends.pkg(dependency)) > 0) 712 if (length(new.depends.pkg(dependency)) > 0)
740 system(paste('echo',depends(dependency),arg.rpkg,'>>',arg.dependency_list)) 713 system(paste('echo',depends(dependency),arg.rpkg,'>>',arg.dependency_list))
741 } 714 }
742 } 715 }
743 DEPENDS <- as.sorted.list(DEPENDS) 716 DEPENDS <- as.sorted.list(DEPENDS)
744 DEPENDS <- end.paragraph(DEPENDS) 717 DEPENDS <- end.paragraph(DEPENDS)
745 BUILDLINK3.MK <- as.sorted.list(BUILDLINK3.MK) 718 BUILDLINK3.MK <- as.sorted.list(BUILDLINK3.MK)
746 result <- list(DEPENDS,BUILDLINK3.MK) 719 result <- list(DEPENDS,BUILDLINK3.MK)
747 result 720 result
748} 721}
749 722
750use.languages <- function(s1,s2) 723use.languages <- function(s1,s2)
751{ 724{
752# message('===> use.languages(',s1,',',s2,'):') 725# message('===> use.languages(',s1,',',s2,'):')
753# USE_LANGUAGES <- read.file.as.values('USE_LANGUAGES') 726# USE_LANGUAGES <- read.file.as.values('USE_LANGUAGES')
754# if (length(USE_LANGUAGES) == 0) 727# if (length(USE_LANGUAGES) == 0)
755# { 728# {
756# if (find.Rcpp(s1,s2)) 729# if (find.Rcpp(s1,s2))
757# USE_LANGUAGES <- append(USE_LANGUAGES,list('USE_LANGUAGES+= c c++')) 730# USE_LANGUAGES <- append(USE_LANGUAGES,list('USE_LANGUAGES+= c c++'))
758# } 731# }
759 USE_LANGUAGES <- list() 732 USE_LANGUAGES <- list()
760 if (find.Rcpp(s1,s2)) 733 if (find.Rcpp(s1,s2))
761 USE_LANGUAGES <- append(USE_LANGUAGES,list('c c++')) 734 USE_LANGUAGES <- append(USE_LANGUAGES,list('c c++'))
762 if (length(USE_LANGUAGES) == 0) 735 if (length(USE_LANGUAGES) == 0)
763 USE_LANGUAGES <- '# none' 736 USE_LANGUAGES <- '# none'
764 USE_LANGUAGES <- end.paragraph(USE_LANGUAGES) 737 USE_LANGUAGES <- end.paragraph(USE_LANGUAGES)
765 USE_LANGUAGES 738 USE_LANGUAGES
766} 739}
767 740
768copy.description <- function(connection) 741copy.description <- function(connection)
769{ 742{
770 description <- readLines(connection) 743 description <- readLines(connection)
771 writeLines(description,con='DESCRIPTION') 744 writeLines(description,con='DESCRIPTION')
772} 745}
773 746
774write.Makefile <- function(metadata) 747write.Makefile <- function(metadata)
775{ 748{
776 RCSID <- paste0('# $','NetBSD$') 749 RCSID <- paste0('# $','NetBSD$')
777 CATEGORIES <- makefile.field('CATEGORIES',categories()) 750 CATEGORIES <- makefile.field('CATEGORIES',categories())
778 MAINTAINER <- makefile.field('MAINTAINER',maintainer(arg.maintainer_email)) 751 MAINTAINER <- makefile.field('MAINTAINER',maintainer(arg.maintainer_email))
779 COMMENT <- makefile.field('COMMENT',comment(metadata$Title)) 752 COMMENT <- makefile.field('COMMENT',comment(metadata$Title))
780 LICENSE <- makefile.field('LICENSE',license(metadata$License)) 753 LICENSE <- makefile.field('LICENSE',license(metadata$License))
781 R_PKGNAME <- makefile.field('R_PKGNAME',package(metadata$Package)) 754 R_PKGNAME <- makefile.field('R_PKGNAME',package(metadata$Package))
782 R_PKGVER <- makefile.field('R_PKGVER',version(metadata$Version)) 755 R_PKGVER <- makefile.field('R_PKGVER',version(metadata$Version))
783 USE_LANGUAGES <- makefile.fields('USE_LANGUAGES',use.languages(metadata$Imports,metadata$Depends)) 756 USE_LANGUAGES <- makefile.fields('USE_LANGUAGES',use.languages(metadata$Imports,metadata$Depends))
784 DEPENDENCIES <- make.depends(metadata$Imports,metadata$Depends) 757 DEPENDENCIES <- make.depends(metadata$Imports,metadata$Depends)
785 DEPENDS <- DEPENDENCIES[1] 758 DEPENDS <- DEPENDENCIES[1]
786 BUILDLINK3.MK <- DEPENDENCIES[2] 759 BUILDLINK3.MK <- DEPENDENCIES[2]
787 INCLUDE.R <- '.include "../../math/R/Makefile.extension"' 760 INCLUDE.R <- '.include "../../math/R/Makefile.extension"'
788 INCLUDE.PKG <- '.include "../../mk/bsd.pkg.mk"' 761 INCLUDE.PKG <- '.include "../../mk/bsd.pkg.mk"'
789 762
790 Makefile <- list() 763 Makefile <- list()
791 Makefile <- append(Makefile,RCSID) 764 Makefile <- append(Makefile,RCSID)
792 Makefile <- append(Makefile,'') 765 Makefile <- append(Makefile,'')
793 Makefile <- append(Makefile,R_PKGNAME) 766 Makefile <- append(Makefile,R_PKGNAME)
794 Makefile <- append(Makefile,R_PKGVER) 767 Makefile <- append(Makefile,R_PKGVER)
795 Makefile <- append(Makefile,CATEGORIES) 768 Makefile <- append(Makefile,CATEGORIES)
796 Makefile <- append(Makefile,'') 769 Makefile <- append(Makefile,'')
797 Makefile <- append(Makefile,MAINTAINER) 770 Makefile <- append(Makefile,MAINTAINER)
798 Makefile <- append(Makefile,COMMENT) 771 Makefile <- append(Makefile,COMMENT)
799 Makefile <- append(Makefile,LICENSE) 772 Makefile <- append(Makefile,LICENSE)
800 Makefile <- append(Makefile,'') 773 Makefile <- append(Makefile,'')
801 Makefile <- append(Makefile,DEPENDS) 774 Makefile <- append(Makefile,DEPENDS)
802 Makefile <- append(Makefile,USE_LANGUAGES) 775 Makefile <- append(Makefile,USE_LANGUAGES)
803 Makefile <- append(Makefile,INCLUDE.R) 776 Makefile <- append(Makefile,INCLUDE.R)
804 Makefile <- append(Makefile,BUILDLINK3.MK) 777 Makefile <- append(Makefile,BUILDLINK3.MK)
805 Makefile <- append(Makefile,INCLUDE.PKG) 778 Makefile <- append(Makefile,INCLUDE.PKG)
806 Makefile <- paste(unlist(Makefile),collapse='\n') 779 Makefile <- paste(unlist(Makefile),collapse='\n')
807 780
808 write(Makefile,'Makefile') 781 write(Makefile,'Makefile')
809} 782}
810 783
811construct.line <- function(df,key,value) 784construct.line <- function(df,key,value)
812{ 785{
813 key <- df[df$key==key,'key'] 786 key <- df[df$key==key,'key']
814 operator <- df[df$key==key,'operator'] 787 operator <- df[df$key==key,'operator']
815 delimiter <- df[df$key==key,'delimiter'] 788 delimiter <- df[df$key==key,'delimiter']
816 value <- df[df$key==key,value] 789 value <- df[df$key==key,value]
817 df$new_line[df$key==key] <- paste0(key,operator,delimiter,value) 790 df$new_line[df$key==key] <- paste0(key,operator,delimiter,value)
818 df 791 df
819} 792}
820 793
821element <- function(df,key,value,quiet=FALSE) 794element <- function(df,key,value,quiet=FALSE)
822{ 795{
823 key.index <- match(key,df$key,0) 796 key.index <- match(key,df$key,0)
824 if (key.index != 0 && df$key_value[key.index]) 797 if (key.index != 0 && df$key_value[key.index])
825 result <- df[key.index,value] 798 result <- df[key.index,value]
826 else 799 else
827 { 800 {
828 result <- '???' 801 result <- '???'
829 if (!quiet) 802 if (!quiet)
830 { 803 {
831 if (key.index == 0) 804 if (key.index == 0)
832 level.warning(key,' not found') 805 level.warning(key,' not found')
833 else 806 else
834 level.warning(key,' is not a key-value field') 807 level.warning(key,' is not a key-value field')
835 } 808 }
836 } 809 }
837 result 810 result
838} 811}
839 812
840make.categories <- function(df) 813make.categories <- function(df)
841{ 814{
842 # message('===> make.categories():') 815 # message('===> make.categories():')
843 directory <- basename(dirname(getwd())) 816 directory <- basename(dirname(getwd()))
844 categories <- unlist(element(df,'CATEGORIES','old_value')) 817 categories <- unlist(element(df,'CATEGORIES','old_value'))
845 categories <- unlist(strsplit(categories,'[[:blank:]]+')) 818 categories <- unlist(strsplit(categories,'[[:blank:]]+'))
846 categories <- c(directory,categories) 819 categories <- c(directory,categories)
847 categories <- categories[ categories != 'R' ] 820 categories <- categories[ categories != 'R' ]
848 if (directory != 'wip') 821 if (directory != 'wip')
849 categories <- categories[ categories != 'wip' ] 822 categories <- categories[ categories != 'wip' ]
850 categories <- categories[!duplicated(categories)] 823 categories <- categories[!duplicated(categories)]
851 categories <- paste(categories,collapse=' ') 824 categories <- paste(categories,collapse=' ')
852 categories 825 categories
853} 826}
854 827
855make.maintainer <- function(df) 828make.maintainer <- function(df)
856{ 829{
857 old.maintainer <- element(df,'MAINTAINER','old_value') 830 old.maintainer <- element(df,'MAINTAINER','old_value')
858 new.maintainer <- element(df,'MAINTAINER','new_value') 831 new.maintainer <- element(df,'MAINTAINER','new_value')
859 maintainer <- ifelse(old.maintainer == '',new.maintainer,old.maintainer) 832 maintainer <- ifelse(old.maintainer == '',new.maintainer,old.maintainer)
860 maintainer 833 maintainer
861} 834}
862 835
863make.comment <- function(df) 836make.comment <- function(df)
864{ 837{
865 old.comment <- element(df,'COMMENT','old_value') 838 old.comment <- element(df,'COMMENT','old_value')
866 new.comment <- element(df,'COMMENT','new_value') 839 new.comment <- element(df,'COMMENT','new_value')
867 comment <- old.comment 840 comment <- old.comment
868 if (!weakly.equals(old.comment,new.comment)) 841 if (!weakly.equals(old.comment,new.comment))
869 comment <- paste0(comment,' # [R2pkg] updated to: ',new.comment) 842 comment <- paste0(comment,' # [R2pkg] updated to: ',new.comment)
870 comment 843 comment
871} 844}
872 845
873make.new_license <- function(df,license) 846make.new_license <- function(df,license)
874{ 847{
875 new_license <- licenses[[license]] 848 new_license <- licenses[[license]]
876 if (is.null(new_license)) 849 if (is.null(new_license))
877 new_license <- license 850 new_license <- license
878 df$new_value[df$key == 'LICENSE'] <- new_license 851 df$new_value[df$key == 'LICENSE'] <- new_license
879 df 852 df
880} 853}
881 854
882license.marked.todo <- function(todo) { todo != '' } 855license.marked.todo <- function(todo) { todo != '' }
883license.in.pkgsrc <- function(license) { license %in% sapply(licenses,'[',1) } 856license.in.pkgsrc <- function(license) { license %in% sapply(licenses,'[',1) }
884 857
885make.license <- function(df) 858make.license <- function(df)
886{ 859{
887 # message('===> make.license():') 860 # message('===> make.license():')
888 old_license <- element(df,'LICENSE','old_value') 861 old_license <- element(df,'LICENSE','old_value')
889 old_todo <- element(df,'LICENSE','old_todo') 862 old_todo <- element(df,'LICENSE','old_todo')
890 new_license <- element(df,'LICENSE','new_value') 863 new_license <- element(df,'LICENSE','new_value')
891 864
892 if (license.in.pkgsrc(old_license) && license.in.pkgsrc(new_license)) 865 if (license.in.pkgsrc(old_license) && license.in.pkgsrc(new_license))
893 { 866 {
894 if (case.insensitive.equals(old_license,new_license)) 867 if (case.insensitive.equals(old_license,new_license))
895 { 868 {
896 license <- old_license 869 license <- old_license
897 todo <- old_todo 870 todo <- old_todo
898 } 871 }
899 else 872 else
900 { 873 {
901 license <- paste0(new_license,' # [R2pkg] previously: ',old_license) 874 license <- paste0(new_license,' # [R2pkg] previously: ',old_license)
902 todo <- old_todo 875 todo <- old_todo
903 } 876 }
904 } 877 }
905 else if (license.in.pkgsrc(old_license) && !license.in.pkgsrc(new_license)) 878 else if (license.in.pkgsrc(old_license) && !license.in.pkgsrc(new_license))
906 { 879 {
907 license <- paste0(old_license,' # [R2pkg] updated to: ',new_license) 880 license <- paste0(old_license,' # [R2pkg] updated to: ',new_license)
908 todo <- '# TODO: ' 881 todo <- '# TODO: '
909 } 882 }
910 else if (!license.in.pkgsrc(old_license) && license.in.pkgsrc(new_license)) 883 else if (!license.in.pkgsrc(old_license) && license.in.pkgsrc(new_license))
911 { 884 {
912 license <- paste0(new_license,' # [R2pkg] previously: ',old_license) 885 license <- paste0(new_license,' # [R2pkg] previously: ',old_license)
913 todo <- '' 886 todo <- ''
914 } 887 }
915 else if (!license.in.pkgsrc(old_license) && !license.in.pkgsrc(new_license)) 888 else if (!license.in.pkgsrc(old_license) && !license.in.pkgsrc(new_license))
916 { 889 {
917 license <- paste0(new_license,' # [R2pkg] previously: ',old_license) 890 license <- paste0(new_license,' # [R2pkg] previously: ',old_license)
918 todo <- '# TODO: ' 891 todo <- '# TODO: '
919 } 892 }
920 893
921 df$value[df$key == 'LICENSE'] <- license 894 df$value[df$key == 'LICENSE'] <- license
922 df$todo[df$key == 'LICENSE'] <- todo 895 df$todo[df$key == 'LICENSE'] <- todo
923 896
924 df 897 df
925} 898}
926 899
927make.r_pkgver <- function(df) element(df,'R_PKGVER','new_value') 900make.r_pkgver <- function(df) element(df,'R_PKGVER','new_value')
928 901
929find.order <- function(df,key,field) 902find.order <- function(df,key,field)
930{ 903{
931 x <- df[,key] 904 x <- df[,key]
932 value <- match(TRUE,x) 905 value <- match(TRUE,x)
933 if (!is.na(value)) 906 if (!is.na(value))
934 value <- df[value,field] 907 value <- df[value,field]
935 value 908 value
936} 909}
937 910
938write.makefile <- function(lines) write(lines,'Makefile') 911write.makefile <- function(lines) write(lines,'Makefile')
939 912
940update.Makefile.with.metadata <- function(df,metadata) 913update.Makefile.with.metadata <- function(df,metadata)
941{ 914{
942 # message('===> update.Makefile.with.metadata():') 915 # message('===> update.Makefile.with.metadata():')
943 916
944 df$new_value <- NA 917 df$new_value <- NA
945 918
946 df <- make.new_license(df,metadata$License) 919 df <- make.new_license(df,metadata$License)
947 920
948 df$new_value[df$key == 'CATEGORIES'] <- categories() 921 df$new_value[df$key == 'CATEGORIES'] <- categories()
949 df$new_value[df$key == 'MAINTAINER'] <- arg.maintainer_email 922 df$new_value[df$key == 'MAINTAINER'] <- arg.maintainer_email
950 df$new_value[df$key == 'COMMENT'] <- one.line(metadata$Title) 923 df$new_value[df$key == 'COMMENT'] <- one.line(metadata$Title)
951 df$new_value[df$key == 'R_PKGVER'] <- version(metadata$Version) 924 df$new_value[df$key == 'R_PKGVER'] <- version(metadata$Version)
952 925
953 # str(df) 926 # str(df)
954 # print(df) 927 # print(df)
955 df 928 df
956} 929}
957 930
958update.Makefile.with.new.values <- function(df) 931update.Makefile.with.new.values <- function(df)
959{ 932{
960 # message('===> update.Makefile.with.new.values():') 933 # message('===> update.Makefile.with.new.values():')
961 df$value <- NA 934 df$value <- NA
962 df$todo <- '' 935 df$todo <- ''
963 df <- make.license(df) 936 df <- make.license(df)
964 df$value[df$key == 'CATEGORIES'] <- make.categories(df) 937 df$value[df$key == 'CATEGORIES'] <- make.categories(df)
965 df$value[df$key == 'MAINTAINER'] <- make.maintainer(df) 938 df$value[df$key == 'MAINTAINER'] <- make.maintainer(df)
966 df$value[df$key == 'COMMENT'] <- make.comment(df) 939 df$value[df$key == 'COMMENT'] <- make.comment(df)
967 df$value[df$key == 'R_PKGVER'] <- make.r_pkgver(df) 940 df$value[df$key == 'R_PKGVER'] <- make.r_pkgver(df)
968 941
969 # str(df) 942 # str(df)
970 # print(df) 943 # print(df)
971 df 944 df
972} 945}
973 946
974update.Makefile.with.new.line <- function(df) 947update.Makefile.with.new.line <- function(df)
975{ 948{
976 # message('===> update.Makefile.with.new.line():') 949 # message('===> update.Makefile.with.new.line():')
977 df$new_line <- NA 950 df$new_line <- NA
978 951
979 construct_key_value <- df$key_value & !is.na(df$value) 952 construct_key_value <- df$key_value & !is.na(df$value)
980 df$new_line[construct_key_value] <- 953 df$new_line[construct_key_value] <-
981 paste0(df$todo[construct_key_value], 954 paste0(df$todo[construct_key_value],
982 df$key[construct_key_value], 955 df$key[construct_key_value],
983 df$operator[construct_key_value], 956 df$operator[construct_key_value],
984 df$delimiter[construct_key_value], 957 df$delimiter[construct_key_value],
985 df$value[construct_key_value]) 958 df$value[construct_key_value])
986 959
987 copy_line <- !df$key_value | !construct_key_value 960 copy_line <- !df$key_value | !construct_key_value
988 df$new_line[copy_line] <- df$line[copy_line] 961 df$new_line[copy_line] <- df$line[copy_line]
989 962
990 # str(df) 963 # str(df)
991 # print(df) 964 # print(df)
992 df 965 df
993} 966}
994 967
995annotate.distname.in.Makefile <- function(df) 968annotate.distname.in.Makefile <- function(df)
996{ 969{
997 match <- grepl('^[[:blank:]]*DISTNAME',df$new_line) 970 match <- grepl('^[[:blank:]]*DISTNAME',df$new_line)
998 line <- df$new_line[match] 971 line <- df$new_line[match]
999 value <- sub('^[[:blank:]]*DISTNAME[[:blank:]]*=[[:blank:]]*','',line) 972 value <- sub('^[[:blank:]]*DISTNAME[[:blank:]]*=[[:blank:]]*','',line)
1000 pkgname <- sub('_.+$','',value) 973 pkgname <- sub('_.+$','',value)
1001 pkgver <- sub('^.+_','',value) 974 pkgver <- sub('^.+_','',value)
1002 PKGNAME <- paste0('R_PKGNAME=',pkgname) 975 PKGNAME <- paste0('R_PKGNAME=',pkgname)
1003 PKGVER <- paste0('R_PKGVER=',pkgver) 976 PKGVER <- paste0('R_PKGVER=',pkgver)
1004 comment <- paste0(' # [R2pkg] replace this line with ',PKGNAME,' and ',PKGVER,' as first stanza') 977 comment <- paste0(' # [R2pkg] replace this line with ',PKGNAME,' and ',PKGVER,' as first stanza')
1005 df$new_line[match] <- paste0(line,comment) 978 df$new_line[match] <- paste0(line,comment)
1006 df 979 df
1007} 980}
1008 981
1009annotate.Makefile <- function(df) 982annotate.Makefile <- function(df)
1010{ 983{
1011 df <- annotate.distname.in.Makefile(df) 984 df <- annotate.distname.in.Makefile(df)
1012 df 985 df
1013} 986}
1014 987
1015remove.master.sites.from.Makefile <- function(df) 988remove.master.sites.from.Makefile <- function(df)
1016{ 989{
1017 match <- grepl('^[[:blank:]]*MASTER_SITES',df$new_line) 990 match <- grepl('^[[:blank:]]*MASTER_SITES',df$new_line)
1018 df <- df[!match,] 991 df <- df[!match,]
1019 df 992 df
1020} 993}
1021 994
1022remove.homepage.from.Makefile <- function(df) 995remove.homepage.from.Makefile <- function(df)
1023{ 996{
1024 match <- grepl('^[[:blank:]]*HOMEPAGE',df$new_line) 997 match <- grepl('^[[:blank:]]*HOMEPAGE',df$new_line)
1025 df <- df[!match,] 998 df <- df[!match,]
1026 df 999 df
1027} 1000}
1028 1001
1029remove.buildlink.abi.depends.from.Makefile <- function(df) 1002remove.buildlink.abi.depends.from.Makefile <- function(df)
1030{ 1003{
1031 match <- grepl('^[[:blank:]]*BUILDLINK_ABI_DEPENDS',df$new_line) 1004 match <- grepl('^[[:blank:]]*BUILDLINK_ABI_DEPENDS',df$new_line)
1032 df <- df[!match,] 1005 df <- df[!match,]
1033 df 1006 df
1034} 1007}
1035 1008
1036remove.buildlink.api.depends.from.Makefile <- function(df) 1009remove.buildlink.api.depends.from.Makefile <- function(df)
1037{ 1010{
1038 match <- grepl('^[[:blank:]]*BUILDLINK_API_DEPENDS',df$new_line) 1011 match <- grepl('^[[:blank:]]*BUILDLINK_API_DEPENDS',df$new_line)
1039 df <- df[!match,] 1012 df <- df[!match,]
1040 df 1013 df
1041} 1014}
1042 1015
1043remove.lines.from.Makefile <- function(df) 1016remove.lines.from.Makefile <- function(df)
1044{ 1017{
1045 df <- remove.master.sites.from.Makefile(df) 1018 df <- remove.master.sites.from.Makefile(df)
1046 df <- remove.homepage.from.Makefile(df) 1019 df <- remove.homepage.from.Makefile(df)
1047 df <- remove.buildlink.abi.depends.from.Makefile(df) 1020 df <- remove.buildlink.abi.depends.from.Makefile(df)
1048 df <- remove.buildlink.api.depends.from.Makefile(df) 1021 df <- remove.buildlink.api.depends.from.Makefile(df)
1049 df 1022 df
1050} 1023}
1051 1024
1052reassign.order <- function(df) 1025reassign.order <- function(df)
1053{ 1026{
1054 # message('===> reassign.order():') 1027 # message('===> reassign.order():')
1055 # str(df) 1028 # str(df)
1056 # print(df) 1029 # print(df)
1057 1030
1058 r_pkgname.order <- element(df,'R_PKGNAME','order') 1031 r_pkgname.order <- element(df,'R_PKGNAME','order')
1059 categories.order <- element(df,'CATEGORIES','order') 1032 categories.order <- element(df,'CATEGORIES','order')
1060 if (r_pkgname.order > categories.order) 1033 if (r_pkgname.order > categories.order)
1061 { 1034 {
1062 r_pkgname.index <- df$key == 'R_PKGNAME' 1035 r_pkgname.index <- df$key == 'R_PKGNAME'
1063 r_pkgname.index[ is.na(r_pkgname.index) ] <- FALSE 1036 r_pkgname.index[ is.na(r_pkgname.index) ] <- FALSE
1064 r_pkgver.index <- df$key == 'R_PKGVER' 1037 r_pkgver.index <- df$key == 'R_PKGVER'
1065 r_pkgver.index[ is.na(r_pkgver.index) ] <- FALSE 1038 r_pkgver.index[ is.na(r_pkgver.index) ] <- FALSE
1066 df[r_pkgname.index,'order'] <- categories.order - 0.2 1039 df[r_pkgname.index,'order'] <- categories.order - 0.2
1067 df[r_pkgver.index,'order'] <- categories.order - 0.1 1040 df[r_pkgver.index,'order'] <- categories.order - 0.1
1068 } 1041 }
1069 df 1042 df
1070} 1043}
1071 1044
1072conflicts <- function(pkg) 1045conflicts <- function(pkg)
1073{ 1046{
1074 conflict <- paste0('R>=',R_version()) 1047 conflict <- paste0('R>=',R_version())
1075 conflicts <- list() 1048 conflicts <- list()
1076 if (pkg %in% base.packages) 1049 if (pkg %in% base.packages)
1077 { 1050 {
1078 conflicts <- append(conflicts,makefile.field('CONFLICTS',conflict)) 1051 conflicts <- append(conflicts,makefile.field('CONFLICTS',conflict))
1079 conflicts <- end.paragraph(conflicts) 1052 conflicts <- end.paragraph(conflicts)
1080 } 1053 }
1081 conflicts 1054 conflicts
1082} 1055}
1083 1056
1084conflicts.order <- function(df) 1057conflicts.order <- function(df)
1085{ 1058{
1086 order <- element(df,'COMMENT','order') 1059 order <- element(df,'COMMENT','order')
1087 order 1060 order
1088} 1061}
1089 1062
1090make.df.conflicts <- function(df,metadata) 1063make.df.conflicts <- function(df,metadata)
1091{ 1064{
1092 df.conflicts <- data.frame() 1065 df.conflicts <- data.frame()
1093 conflicts.exist <- element(df,'CONFLICTS','old_value',quiet=TRUE) != '???' 1066 conflicts.exist <- element(df,'CONFLICTS','old_value',quiet=TRUE) != '???'
1094 if (!conflicts.exist) 1067 if (!conflicts.exist)
1095 { 1068 {
1096 c <- conflicts(metadata$Package) 1069 c <- conflicts(metadata$Package)
1097 order <- conflicts.order(df) 1070 order <- conflicts.order(df)
1098 order <- order + 2.5 1071 order <- order + 2.5
1099 i <- 0 1072 i <- 0
1100 for (conflict in c) 1073 for (conflict in c)
1101 { 1074 {
1102 i <- i + 1 1075 i <- i + 1
1103 category <- as.character(i) 1076 category <- as.character(i)
1104 depends <- FALSE 1077 depends <- FALSE
1105 buildlink3.mk <- FALSE 1078 buildlink3.mk <- FALSE
1106 x <- data.frame(new_line=conflict,order=order,category=category,depends=depends,buildlink3.mk=buildlink3.mk) 1079 x <- data.frame(new_line=conflict,order=order,category=category,depends=depends,buildlink3.mk=buildlink3.mk)
1107 df.conflicts <- rbind(df.conflicts,x) 1080 df.conflicts <- rbind(df.conflicts,x)
1108 } 1081 }
1109 } 1082 }
1110 df.conflicts 1083 df.conflicts
1111} 1084}
1112 1085
1113make.df.depends <- function(df,DEPENDS) 1086make.df.depends <- function(df,DEPENDS)
1114{ 1087{
1115 # message('===> make.df.depends():') 1088 # message('===> make.df.depends():')
1116 # str(df) 1089 # str(df)
1117 # print(df) 1090 # print(df)
1118 df.depends <- data.frame() 1091 df.depends <- data.frame()
1119 if (TRUE %in% df$depends) 1092 if (TRUE %in% df$depends)
1120 df.depends <- data.frame(new_line=df[df$depends,'line'],stringsAsFactors=FALSE) 1093 df.depends <- data.frame(new_line=df[df$depends,'line'],stringsAsFactors=FALSE)
1121 for (line in DEPENDS) 1094 for (line in DEPENDS)
1122 df.depends <- rbind(df.depends,data.frame(new_line=line,stringsAsFactors=FALSE)) 1095 df.depends <- rbind(df.depends,data.frame(new_line=line,stringsAsFactors=FALSE))
1123 if (nrow(df.depends) > 0) 1096 if (nrow(df.depends) > 0)
1124 { 1097 {
1125 df.depends$category <- NA 1098 df.depends$category <- NA
1126 df.depends$buildlink3.mk <- FALSE 1099 df.depends$buildlink3.mk <- FALSE
1127 df.depends <- categorize.key_value(df.depends,'new_line') 1100 df.depends <- categorize.key_value(df.depends,'new_line')
1128 df.depends <- categorize.depends(df.depends,'new_line') 1101 df.depends <- categorize.depends(df.depends,'new_line')
1129 df.depends$key_value <- NULL 1102 df.depends$key_value <- NULL
1130 df.depends$key <- NULL 1103 df.depends$key <- NULL
1131 df.depends <- df.depends[!duplicated(df.depends),] 1104 df.depends <- df.depends[!duplicated(df.depends),]
1132 df.depends$order <- find.order(df,'depends','order') 1105 df.depends$order <- find.order(df,'depends','order')
1133 } 1106 }
1134 # message('===> df.depends:') 1107 # message('===> df.depends:')
1135 # str(df.depends) 1108 # str(df.depends)
1136 # print(df.depends) 1109 # print(df.depends)
1137 df.depends 1110 df.depends
1138} 1111}
1139 1112
1140make.df.buildlink3 <- function(df,BUILDLINK3.MK) 1113make.df.buildlink3 <- function(df,BUILDLINK3.MK)
1141{ 1114{
1142 # message('===> make.df.buildlink3():') 1115 # message('===> make.df.buildlink3():')
1143 df.buildlink3.mk <- data.frame() 1116 df.buildlink3.mk <- data.frame()
1144 if (TRUE %in% df$buildlink3.mk) 1117 if (TRUE %in% df$buildlink3.mk)
1145 df.buildlink3.mk <- data.frame(new_line=df[df$buildlink3.mk,'line'],stringsAsFactors=FALSE) 1118 df.buildlink3.mk <- data.frame(new_line=df[df$buildlink3.mk,'line'],stringsAsFactors=FALSE)
1146 for (line in BUILDLINK3.MK) 1119 for (line in BUILDLINK3.MK)
1147 df.buildlink3.mk <- rbind(df.buildlink3.mk,data.frame(new_line=line,stringsAsFactors=FALSE)) 1120 df.buildlink3.mk <- rbind(df.buildlink3.mk,data.frame(new_line=line,stringsAsFactors=FALSE))
1148 if (nrow(df.buildlink3.mk) > 0) 1121 if (nrow(df.buildlink3.mk) > 0)
1149 { 1122 {
1150 df.buildlink3.mk$category <- NA 1123 df.buildlink3.mk$category <- NA
1151 df.buildlink3.mk$depends <- FALSE 1124 df.buildlink3.mk$depends <- FALSE
1152 df.buildlink3.mk <- categorize.buildlink(df.buildlink3.mk,'new_line') 1125 df.buildlink3.mk <- categorize.buildlink(df.buildlink3.mk,'new_line')
1153 df.buildlink3.mk <- df.buildlink3.mk[!duplicated(df.buildlink3.mk),] 1126 df.buildlink3.mk <- df.buildlink3.mk[!duplicated(df.buildlink3.mk),]
1154 df.buildlink3.mk$order <- find.order(df,'buildlink3.mk','order') 1127 df.buildlink3.mk$order <- find.order(df,'buildlink3.mk','order')
1155 } 1128 }
1156 # str(df.buildlink3.mk) 1129 # str(df.buildlink3.mk)
1157 # print(df.buildlink3.mk) 1130 # print(df.buildlink3.mk)
1158 df.buildlink3.mk 1131 df.buildlink3.mk
1159} 1132}
1160 1133
1161make.df.makefile <- function(df,df.conflicts,df.depends,df.buildlink3.mk) 1134make.df.makefile <- function(df,df.conflicts,df.depends,df.buildlink3.mk)
1162{ 1135{
1163 # message('===> make.df.makefile():') 1136 # message('===> make.df.makefile():')
1164 # message('===> df:') 1137 # message('===> df:')
1165 # str(df) 1138 # str(df)
1166 # print(df) 1139 # print(df)
1167 fields <- c('new_line','order','category','depends','buildlink3.mk') 1140 fields <- c('new_line','order','category','depends','buildlink3.mk')
1168 df.makefile <- df[!df$depends & !df$buildlink3.mk,fields] 1141 df.makefile <- df[!df$depends & !df$buildlink3.mk,fields]
1169 df.makefile <- rbind(df.makefile,df.conflicts,df.depends,df.buildlink3.mk) 1142 df.makefile <- rbind(df.makefile,df.conflicts,df.depends,df.buildlink3.mk)
1170 df.makefile <- df.makefile[order(df.makefile$order,df.makefile$category,df.makefile$new_line),] 1143 df.makefile <- df.makefile[order(df.makefile$order,df.makefile$category,df.makefile$new_line),]
1171 df.makefile <- df.makefile[!adjacent.duplicates(df.makefile$new_line),] 1144 df.makefile <- df.makefile[!adjacent.duplicates(df.makefile$new_line),]
1172 df.makefile 1145 df.makefile
1173} 1146}
1174 1147
1175update.Makefile <- function(metadata) 1148update.Makefile <- function(metadata)
1176{ 1149{
1177 DEPENDENCIES <- make.depends(metadata$Imports,metadata$Depends) 1150 DEPENDENCIES <- make.depends(metadata$Imports,metadata$Depends)
1178 DEPENDS <- DEPENDENCIES[[1]] 1151 DEPENDS <- DEPENDENCIES[[1]]
1179 BUILDLINK3.MK <- DEPENDENCIES[[2]] 1152 BUILDLINK3.MK <- DEPENDENCIES[[2]]
1180 # message('===> DEPENDS:') 1153 # message('===> DEPENDS:')
1181 # str(DEPENDS) 1154 # str(DEPENDS)
1182 # print(DEPENDS) 1155 # print(DEPENDS)
1183 # message('===> BUILDLINK3.MK:') 1156 # message('===> BUILDLINK3.MK:')
1184 # str(BUILDLINK3.MK) 1157 # str(BUILDLINK3.MK)
1185 # print(BUILDLINK3.MK) 1158 # print(BUILDLINK3.MK)
1186 1159
1187 # message('===> df:') 1160 # message('===> df:')
1188 df <- read.Makefile.as.dataframe() 1161 df <- read.Makefile.as.dataframe()
1189 df <- update.Makefile.with.metadata(df,metadata) 1162 df <- update.Makefile.with.metadata(df,metadata)
1190 df <- update.Makefile.with.new.values(df) 1163 df <- update.Makefile.with.new.values(df)
1191 df <- update.Makefile.with.new.line(df) 1164 df <- update.Makefile.with.new.line(df)
1192 df <- annotate.Makefile(df) 1165 df <- annotate.Makefile(df)
1193 df <- remove.lines.from.Makefile(df) 1166 df <- remove.lines.from.Makefile(df)
1194 df <- reassign.order(df) 1167 df <- reassign.order(df)
1195 1168
1196 df.conflicts <- make.df.conflicts(df,metadata) 1169 df.conflicts <- make.df.conflicts(df,metadata)
1197 df.depends <- make.df.depends(df,DEPENDS) 1170 df.depends <- make.df.depends(df,DEPENDS)
1198 df.buildlink3 <- make.df.buildlink3(df,BUILDLINK3.MK) 1171 df.buildlink3 <- make.df.buildlink3(df,BUILDLINK3.MK)
1199 df.makefile <- make.df.makefile(df,df.conflicts,df.depends,df.buildlink3) 1172 df.makefile <- make.df.makefile(df,df.conflicts,df.depends,df.buildlink3)
1200 1173
1201 write.makefile(df.makefile[,'new_line']) 1174 write.makefile(df.makefile[,'new_line'])
1202} 1175}
1203 1176
1204create.Makefile <- function(metadata) 1177create.Makefile <- function(metadata)
1205{ 1178{
1206 if (arg.update && file.exists('Makefile.orig')) 1179 if (arg.update && file.exists('Makefile.orig'))
1207 update.Makefile(metadata) 1180 update.Makefile(metadata)
1208 else 1181 else
1209 write.Makefile(metadata) 1182 write.Makefile(metadata)
1210} 1183}
1211 1184
1212create.DESCR <- function(metadata) 1185create.DESCR <- function(metadata)
1213{ 1186{
1214 DESCR <- description(metadata$Description) 1187 DESCR <- description(metadata$Description)
1215 write(DESCR,'DESCR') 1188 write(DESCR,'DESCR')
1216} 1189}
1217 1190
1218make.metadata <- function(description.filename) 1191make.metadata <- function(description.filename)
1219{ 1192{
1220 fields <- c('Package', 'Version', 'Title', 'Description', 'License', 'Imports', 'Depends') 1193 fields <- c('Package', 'Version', 'Title', 'Description', 'License', 'Imports', 'Depends')
1221 metadata <- as.list(read.dcf(description.filename, fields)) 1194 metadata <- as.list(read.dcf(description.filename, fields))
1222 names(metadata) <- fields 1195 names(metadata) <- fields
1223 metadata 1196 metadata
1224} 1197}
1225 1198
1226main <- function() 1199main <- function()
1227{ 1200{
1228 Sys.setlocale('LC_ALL', 'C') 1201 Sys.setlocale('LC_ALL', 'C')
1229 1202
1230 error <- download.file(url=arg.rpkg_description_url,destfile='DESCRIPTION',quiet=arg.quiet_curl,method='curl') 1203 error <- download.file(url=arg.rpkg_description_url,destfile='DESCRIPTION',quiet=arg.quiet_curl,method='curl')
1231 if (error) 1204 if (error)
1232 { 1205 {
1233 message('ERROR: Downloading the DESCRIPTION file for ',arg.rpkg,' failed;') 1206 message('ERROR: Downloading the DESCRIPTION file for ',arg.rpkg,' failed;')
1234 message(' perhaps the package no longer exists?') 1207 message(' perhaps the package no longer exists?')
1235 quit(save='no',status=error) 1208 quit(save='no',status=error)
1236 } 1209 }
1237 1210
1238 metadata <- make.metadata('DESCRIPTION') 1211 metadata <- make.metadata('DESCRIPTION')
1239 create.Makefile(metadata) 1212 create.Makefile(metadata)
1240 create.DESCR(metadata) 1213 create.DESCR(metadata)
1241} 1214}