| @@ -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 | |
34 | arg.level <- as.integer(Sys.getenv('LEVEL')) | | 34 | arg.level <- as.integer(Sys.getenv('LEVEL')) |
35 | arg.rpkg <- Sys.getenv('RPKG') | | 35 | arg.rpkg <- Sys.getenv('RPKG') |
36 | arg.packages_list <- Sys.getenv('PACKAGES_LIST') | | 36 | arg.packages_list <- Sys.getenv('PACKAGES_LIST') |
37 | arg.r2pkg <- Sys.getenv('R2PKG') | | 37 | arg.r2pkg <- Sys.getenv('R2PKG') |
38 | arg.args <- Sys.getenv('ARGS') | | 38 | arg.args <- Sys.getenv('ARGS') |
39 | arg.recursive <- as.logical(Sys.getenv('RECURSIVE')) | | 39 | arg.recursive <- as.logical(Sys.getenv('RECURSIVE')) |
40 | arg.update <- as.logical(Sys.getenv('UPDATE')) | | 40 | arg.update <- as.logical(Sys.getenv('UPDATE')) |
41 | arg.dependency_list <- Sys.getenv('DEPENDENCY_LIST') | | 41 | arg.dependency_list <- Sys.getenv('DEPENDENCY_LIST') |
42 | arg.maintainer_email <- Sys.getenv('MAINTAINER_EMAIL') | | 42 | arg.maintainer_email <- Sys.getenv('MAINTAINER_EMAIL') |
43 | arg.rpkg_description_url <- Sys.getenv('RPKG_DESCRIPTION_URL') | | 43 | arg.rpkg_description_url <- Sys.getenv('RPKG_DESCRIPTION_URL') |
44 | arg.quiet_curl <- as.logical(Sys.getenv('QUIET_CURL')) | | 44 | arg.quiet_curl <- as.logical(Sys.getenv('QUIET_CURL')) |
45 | | | 45 | |
46 | level.message <- function(...) | | 46 | level.message <- function(...) |
47 | message('[ ', arg.level, ' ] ', ...) | | 47 | message('[ ', arg.level, ' ] ', ...) |
48 | | | 48 | |
49 | level.warning <- function(...) | | 49 | level.warning <- function(...) |
50 | level.message('WARNING: ', ...) | | 50 | level.message('WARNING: ', ...) |
51 | | | 51 | |
52 | R_version <- function() | | 52 | R_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 | |
59 | trim.space <- function(s) gsub('[[:space:]]','',s) | | 59 | trim.space <- function(s) gsub('[[:space:]]','',s) |
60 | trim.blank <- function(s) gsub('[[:blank:]]','',s) | | 60 | trim.blank <- function(s) gsub('[[:blank:]]','',s) |
61 | one.space <- function(s) gsub('[[:blank:]]+',' ',s) | | 61 | one.space <- function(s) gsub('[[:blank:]]+',' ',s) |
62 | one.line <- function(s) gsub('\n',' ',s) | | 62 | one.line <- function(s) gsub('\n',' ',s) |
63 | pkg.vers <- function(s) gsub('_','.',s) | | 63 | pkg.vers <- function(s) gsub('_','.',s) |
64 | field <- function(key,value) paste(key,'=\t',value,sep='') | | 64 | field <- 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 | # |
69 | base.packages.FAQ.5.1.2 <- c( | | 69 | base.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 | # |
89 | base.packages.other <- c( | | 89 | base.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') |
99 | base.packages <- c('R',base.packages.FAQ.5.1.2,base.packages.other) | | 99 | base.packages <- c('R',base.packages.FAQ.5.1.2,base.packages.other) |
100 | | | 100 | |
101 | licenses <- list() | | 101 | licenses <- list() |
102 | licenses[['ACM']] <- 'acm-license' | | 102 | licenses[['ACM']] <- 'acm-license' |
103 | licenses[['ACM | file LICENSE']] <- 'acm-license # OR file LICENSE' | | 103 | licenses[['ACM | file LICENSE']] <- 'acm-license # OR file LICENSE' |
104 | licenses[['APACHE']] <- 'apache-1.1 OR apache-2.0' | | 104 | licenses[['APACHE']] <- 'apache-1.1 OR apache-2.0' |
105 | licenses[['Apache License 2.0']] <- 'apache-2.0' | | 105 | licenses[['Apache License 2.0']] <- 'apache-2.0' |
106 | licenses[['Apache License (== 2.0)']] <- 'apache-2.0' | | 106 | licenses[['Apache License (== 2.0)']] <- 'apache-2.0' |
107 | licenses[['Apache License (== 2.0) | file LICENSE']] <- 'apache-2.0 # OR file LICENSE' | | 107 | licenses[['Apache License (== 2.0) | file LICENSE']] <- 'apache-2.0 # OR file LICENSE' |
108 | licenses[['ARTISTIC']] <- 'artistic OR artistic-2.0' | | 108 | licenses[['ARTISTIC']] <- 'artistic OR artistic-2.0' |
109 | licenses[['Artistic-2.0']] <- 'artistic-2.0' | | 109 | licenses[['Artistic-2.0']] <- 'artistic-2.0' |
110 | licenses[['BSD']] <- '2-clause-bsd OR modified-bsd OR original-bsd' | | 110 | licenses[['BSD']] <- '2-clause-bsd OR modified-bsd OR original-bsd' |
111 | licenses[['BSD-2']] <- '2-clause-bsd' | | 111 | licenses[['BSD-2']] <- '2-clause-bsd' |
112 | licenses[['BSD_2_clause + file LICENSE']] <- '2-clause-bsd # + file LICENSE' | | 112 | licenses[['BSD_2_clause + file LICENSE']] <- '2-clause-bsd # + file LICENSE' |
113 | licenses[['BSD 3 clause']] <- 'modified-bsd' | | 113 | licenses[['BSD 3 clause']] <- 'modified-bsd' |
114 | licenses[['BSD 3 clause + file LICENSE']] <- 'modified-bsd # + file LICENSE' | | 114 | licenses[['BSD 3 clause + file LICENSE']] <- 'modified-bsd # + file LICENSE' |
115 | licenses[['BSD_3_clause + file LICENSE']] <- 'modified-bsd # + file LICENSE' | | 115 | licenses[['BSD_3_clause + file LICENSE']] <- 'modified-bsd # + file LICENSE' |
116 | licenses[['BSL-1.0']] <- 'boost-license' | | 116 | licenses[['BSL-1.0']] <- 'boost-license' |
117 | licenses[['CC0']] <- 'cc0-1.0-universal' | | 117 | licenses[['CC0']] <- 'cc0-1.0-universal' |
118 | licenses[['GPL']] <- 'gnu-gpl-v1 OR gnu-gpl-v2 OR gnu-gpl-v3' | | 118 | licenses[['GPL']] <- 'gnu-gpl-v1 OR gnu-gpl-v2 OR gnu-gpl-v3' |
119 | licenses[['GPL-1']] <- 'gnu-gpl-v1' | | 119 | licenses[['GPL-1']] <- 'gnu-gpl-v1' |
120 | licenses[['GPL-2']] <- 'gnu-gpl-v2' | | 120 | licenses[['GPL-2']] <- 'gnu-gpl-v2' |
121 | licenses[['GPL-2 | file LICENSE']] <- 'gnu-gpl-v2 # OR file LICENSE' | | 121 | licenses[['GPL-2 | file LICENSE']] <- 'gnu-gpl-v2 # OR file LICENSE' |
122 | licenses[['GPL-3']] <- 'gnu-gpl-v3' | | 122 | licenses[['GPL-3']] <- 'gnu-gpl-v3' |
123 | licenses[['GPL-2 | GPL-3']] <- 'gnu-gpl-v2 OR gnu-gpl-v3' | | 123 | licenses[['GPL-2 | GPL-3']] <- 'gnu-gpl-v2 OR gnu-gpl-v3' |
124 | licenses[['GPL (>= 2)']] <- 'gnu-gpl-v2 OR gnu-gpl-v3' | | 124 | licenses[['GPL (>= 2)']] <- 'gnu-gpl-v2 OR gnu-gpl-v3' |
125 | licenses[['GPL (>= 2.0)']] <- 'gnu-gpl-v2 OR gnu-gpl-v3' | | 125 | licenses[['GPL (>= 2.0)']] <- 'gnu-gpl-v2 OR gnu-gpl-v3' |
126 | licenses[['GPL (>= 2) | file LICENSE']] <- 'gnu-gpl-v2 OR gnu-gpl-v3 # OR file LICENSE' | | 126 | licenses[['GPL (>= 2) | file LICENSE']] <- 'gnu-gpl-v2 OR gnu-gpl-v3 # OR file LICENSE' |
127 | licenses[['GPL (>= 3)']] <- 'gnu-gpl-v3' | | 127 | licenses[['GPL (>= 3)']] <- 'gnu-gpl-v3' |
128 | licenses[['LGPL']] <- 'gnu-lgpl-v2 OR gnu-lgpl-v2.1 OR gnu-lgpl-v3' | | 128 | licenses[['LGPL']] <- 'gnu-lgpl-v2 OR gnu-lgpl-v2.1 OR gnu-lgpl-v3' |
129 | licenses[['LGPL-2']] <- 'gnu-lgpl-v2' | | 129 | licenses[['LGPL-2']] <- 'gnu-lgpl-v2' |
130 | licenses[['LGPL-2.1']] <- 'gnu-lgpl-v2.1' | | 130 | licenses[['LGPL-2.1']] <- 'gnu-lgpl-v2.1' |
131 | licenses[['LGPL-3']] <- 'gnu-lgpl-v3' | | 131 | licenses[['LGPL-3']] <- 'gnu-lgpl-v3' |
132 | licenses[['LGPL-3 + file LICENSE']] <- 'gnu-lgpl-v3 # + file LICENSE' | | 132 | licenses[['LGPL-3 + file LICENSE']] <- 'gnu-lgpl-v3 # + file LICENSE' |
133 | licenses[['LGPL-2 | LGPL-3']] <- 'gnu-lgpl-v2 OR gnu-lgpl-v3' | | 133 | licenses[['LGPL-2 | LGPL-3']] <- 'gnu-lgpl-v2 OR gnu-lgpl-v3' |
134 | licenses[['LGPL (>= 2)']] <- 'gnu-lgpl-v2 OR gnu-lgpl-v2.1 OR gnu-lgpl-v3' | | 134 | licenses[['LGPL (>= 2)']] <- 'gnu-lgpl-v2 OR gnu-lgpl-v2.1 OR gnu-lgpl-v3' |
135 | licenses[['LUCENT']] <- 'lucent' | | 135 | licenses[['LUCENT']] <- 'lucent' |
136 | licenses[['Lucent Public License']] <- 'lucent' | | 136 | licenses[['Lucent Public License']] <- 'lucent' |
137 | licenses[['MIT']] <- 'mit' | | 137 | licenses[['MIT']] <- 'mit' |
138 | licenses[['MIT + file LICENSE']] <- 'mit # + file LICENSE' | | 138 | licenses[['MIT + file LICENSE']] <- 'mit # + file LICENSE' |
139 | licenses[['MIT + file LICENSE | Unlimited']] <- 'mit # + file LICENSE OR unlimited' | | 139 | licenses[['MIT + file LICENSE | Unlimited']] <- 'mit # + file LICENSE OR unlimited' |
140 | licenses[['MPL-1.0']] <- 'mpl-1.0' | | 140 | licenses[['MPL-1.0']] <- 'mpl-1.0' |
141 | licenses[['MPL-1.1']] <- 'mpl-1.1' | | 141 | licenses[['MPL-1.1']] <- 'mpl-1.1' |
142 | licenses[['MPL-2.0']] <- 'mpl-2.0' | | 142 | licenses[['MPL-2.0']] <- 'mpl-2.0' |
143 | licenses[['MPL-2.0 | file LICENSE']] <- 'mpl-2.0 # OR file LICENSE' | | 143 | licenses[['MPL-2.0 | file LICENSE']] <- 'mpl-2.0 # OR file LICENSE' |
144 | licenses[['POSTGRESQL']] <- 'postgresql-license' | | 144 | licenses[['POSTGRESQL']] <- 'postgresql-license' |
145 | | | 145 | |
146 | adjacent.duplicates <- function(x) | | 146 | adjacent.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 | |
155 | paste2 <- function(s1,s2) | | 155 | paste2 <- 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 | |
163 | end.paragraph <- function(l,l1=l,l2=list()) | | 163 | end.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 | |
170 | as.sorted.list <- function(df) | | 170 | as.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 | |
184 | read.file.as.dataframe <- function(filename) | | 184 | read.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 | |
197 | categorize.key_value <- function(df,line='line') | | 197 | categorize.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 | |
235 | categorize.depends <- function(df,line='line') | | 235 | categorize.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 | |
242 | categorize.buildlink <- function(df,line='line') | | 242 | categorize.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 | |
249 | fix.continued.lines <- function(df,line='line') | | 249 | fix.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 | |
274 | read.Makefile.as.dataframe <- function(filename = 'Makefile.orig') | | 274 | read.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 | |
321 | read.file.as.list <- function(filename) | | 321 | read.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 | |
334 | read.file.as.value <- function(filename) | | 334 | read.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 | |
347 | read.file.as.values <- function(filename) | | 347 | read.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 | |
362 | simplify.whitespace <- function(s) { gsub('[[:blank:]]+',' ',s) } | | 362 | simplify.whitespace <- function(s) { gsub('[[:blank:]]+',' ',s) } |
363 | remove.punctuation <- function(s) | | 363 | remove.punctuation <- function(s) |
364 | { | | 364 | { |
365 | punctuation <- '[,-]' | | 365 | punctuation <- '[,-]' |
366 | gsub(punctuation,'',s) | | 366 | gsub(punctuation,'',s) |
367 | } | | 367 | } |
368 | remove.quotes <- function(s) | | 368 | remove.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 | } |
373 | remove.articles <- function(s) | | 373 | remove.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 | |
380 | case.insensitive.equals <- function(s1,s2) | | 380 | case.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 | |
388 | weakly.equals <- function(s1,s2) | | 388 | weakly.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 | |
395 | new.field.if.different <- function(filename,s) | | 395 | new.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 | |
408 | todo.license <- function(s) | | 408 | todo.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 | |
417 | pkgsrc.license <- function(s) | | 417 | pkgsrc.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 | |
425 | package <- function(s) one.line(s) | | 425 | package <- function(s) one.line(s) |
426 | version <- function(s) one.line(s) | | 426 | version <- function(s) one.line(s) |
427 | comment <- function(s) one.line(s) | | 427 | comment <- function(s) one.line(s) |
428 | use.tools <- function(s) read.file.as.list(s) | | 428 | use.tools <- function(s) read.file.as.list(s) |
429 | | | 429 | |
430 | license <- function(s) | | 430 | license <- 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 | |
439 | maintainer <- function(email) | | 439 | maintainer <- 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 | |
447 | make.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 | | | | |
456 | sed.categories <- function(categories) make.sed.command('CATEGORIES',categories) | | | |
457 | sed.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 | } | | | |
464 | sed.maintainer <- function(email) | | | |
465 | { | | | |
466 | make.sed.command('MAINTAINER',maintainer(email)) | | | |
467 | } | | | |
468 | sed.license <- function(license) | | | |
469 | { | | | |
470 | make.sed.command('LICENSE',license) | | | |
471 | } | | | |
472 | sed.r_pkgver <- function(r_pkgver) make.sed.command('R_PKGVER',r_pkgver) | | | |
473 | | | | |
474 | find.Rcpp <- function(imps, deps) grepl('Rcpp', paste(imps, deps)) | | 447 | find.Rcpp <- function(imps, deps) grepl('Rcpp', paste(imps, deps)) |
475 | | | 448 | |
476 | buildlink3.mk <- function(imps,deps) | | 449 | buildlink3.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 | |
497 | makefile.field <- function(key,value) | | 470 | makefile.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 | |
505 | makefile.fields <- function(key,values) | | 478 | makefile.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 | |
524 | categories <- function() basename(dirname(getwd())) | | 497 | categories <- function() basename(dirname(getwd())) |
525 | description <- function(s) strwrap(s,width=71) | | 498 | description <- function(s) strwrap(s,width=71) |
526 | | | 499 | |
527 | filter.imports <- function(s) | | 500 | filter.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 | |
537 | make.imports <- function(s1,s2) | | 510 | make.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 | |
547 | make.dependency <- function(s) | | 520 | make.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 | |
555 | depends <- function(dependency) dependency[1] | | 528 | depends <- function(dependency) dependency[1] |
556 | | | 529 | |
557 | depends.pkg <- function(dependency) | | 530 | depends.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 | |
564 | new.depends.pkg <- function(dependency) | | 537 | new.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 | |
570 | depends.pkg.fullname <- function(dependency,index=1) | | 543 | depends.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 | |
576 | depends.pkg.name <- function(dependency,index=1) | | 549 | depends.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 | |
582 | depends.pkg.vers <- function(dependency,index=1) | | 555 | depends.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 | |
588 | depends.vers <- function(dependency,index=1) | | 561 | depends.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 | |
598 | depends.vers.2 <- function(dependency) | | 571 | depends.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 | |
605 | depends.dir <- function(dependency,index=1) | | 578 | depends.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 | |
612 | depends.line <- function(dependency,index=1) | | 585 | depends.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 | |
618 | depends.line.2 <- function(dependency) | | 591 | depends.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 | |
627 | buildlink3.file <- function(dependency,index=1) | | 600 | buildlink3.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 | |
633 | buildlink3.line <- function(dependency,index=1) | | 606 | buildlink3.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 | |
639 | dependency.dir <- function(dependency) | | 612 | dependency.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 | |
645 | message.wip.dependency <- function(dependency,index=1) | | 618 | message.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 | |
654 | message.too.many.dependencies <- function(dependency) | | 627 | message.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 | |
662 | update.dependency <- function(dependency,index=1) | | 635 | update.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 | |
672 | make.depends <- function(imps,deps) | | 645 | make.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 | |
750 | use.languages <- function(s1,s2) | | 723 | use.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 | |
768 | copy.description <- function(connection) | | 741 | copy.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 | |
774 | write.Makefile <- function(metadata) | | 747 | write.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 | |
811 | construct.line <- function(df,key,value) | | 784 | construct.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 | |
821 | element <- function(df,key,value,quiet=FALSE) | | 794 | element <- 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 | |
840 | make.categories <- function(df) | | 813 | make.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 | |
855 | make.maintainer <- function(df) | | 828 | make.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 | |
863 | make.comment <- function(df) | | 836 | make.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 | |
873 | make.new_license <- function(df,license) | | 846 | make.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 | |
882 | license.marked.todo <- function(todo) { todo != '' } | | 855 | license.marked.todo <- function(todo) { todo != '' } |
883 | license.in.pkgsrc <- function(license) { license %in% sapply(licenses,'[',1) } | | 856 | license.in.pkgsrc <- function(license) { license %in% sapply(licenses,'[',1) } |
884 | | | 857 | |
885 | make.license <- function(df) | | 858 | make.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 | |
927 | make.r_pkgver <- function(df) element(df,'R_PKGVER','new_value') | | 900 | make.r_pkgver <- function(df) element(df,'R_PKGVER','new_value') |
928 | | | 901 | |
929 | find.order <- function(df,key,field) | | 902 | find.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 | |
938 | write.makefile <- function(lines) write(lines,'Makefile') | | 911 | write.makefile <- function(lines) write(lines,'Makefile') |
939 | | | 912 | |
940 | update.Makefile.with.metadata <- function(df,metadata) | | 913 | update.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 | |
958 | update.Makefile.with.new.values <- function(df) | | 931 | update.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 | |
974 | update.Makefile.with.new.line <- function(df) | | 947 | update.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 | |
995 | annotate.distname.in.Makefile <- function(df) | | 968 | annotate.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 | |
1009 | annotate.Makefile <- function(df) | | 982 | annotate.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 | |
1015 | remove.master.sites.from.Makefile <- function(df) | | 988 | remove.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 | |
1022 | remove.homepage.from.Makefile <- function(df) | | 995 | remove.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 | |
1029 | remove.buildlink.abi.depends.from.Makefile <- function(df) | | 1002 | remove.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 | |
1036 | remove.buildlink.api.depends.from.Makefile <- function(df) | | 1009 | remove.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 | |
1043 | remove.lines.from.Makefile <- function(df) | | 1016 | remove.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 | |
1052 | reassign.order <- function(df) | | 1025 | reassign.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 | |
1072 | conflicts <- function(pkg) | | 1045 | conflicts <- 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 | |
1084 | conflicts.order <- function(df) | | 1057 | conflicts.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 | |
1090 | make.df.conflicts <- function(df,metadata) | | 1063 | make.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 | |
1113 | make.df.depends <- function(df,DEPENDS) | | 1086 | make.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 | |
1140 | make.df.buildlink3 <- function(df,BUILDLINK3.MK) | | 1113 | make.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 | |
1161 | make.df.makefile <- function(df,df.conflicts,df.depends,df.buildlink3.mk) | | 1134 | make.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 | |
1175 | update.Makefile <- function(metadata) | | 1148 | update.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 | |
1204 | create.Makefile <- function(metadata) | | 1177 | create.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 | |
1212 | create.DESCR <- function(metadata) | | 1185 | create.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 | |
1218 | make.metadata <- function(description.filename) | | 1191 | make.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 | |
1226 | main <- function() | | 1199 | main <- 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 | } |