diff options
| author | hisham <hisham@9ca3f7c1-7366-0410-b1a3-b5c78f85698c> | 2009-07-01 14:08:58 +0000 |
|---|---|---|
| committer | hisham <hisham@9ca3f7c1-7366-0410-b1a3-b5c78f85698c> | 2009-07-01 14:08:58 +0000 |
| commit | 8a67d9d90ea580bb984bb85511e3adc6ac1d5d4c (patch) | |
| tree | 36279fa12978bd1e48b39c94e204f8a91b533e77 | |
| parent | ce672efef7e64b31d53dc1539470932bfd094ee6 (diff) | |
| download | luarocks-8a67d9d90ea580bb984bb85511e3adc6ac1d5d4c.tar.gz luarocks-8a67d9d90ea580bb984bb85511e3adc6ac1d5d4c.tar.bz2 luarocks-8a67d9d90ea580bb984bb85511e3adc6ac1d5d4c.zip | |
Display warnings for undefined variables,
and missing necessary variables in make-type builds.
Feature suggestions by Steve Donovan.
git-svn-id: http://luarocks.org/svn/luarocks/trunk@34 9ca3f7c1-7366-0410-b1a3-b5c78f85698c
| -rw-r--r-- | src/luarocks/build/make.lua | 2 | ||||
| -rw-r--r-- | src/luarocks/util.lua | 59 |
2 files changed, 60 insertions, 1 deletions
diff --git a/src/luarocks/build/make.lua b/src/luarocks/build/make.lua index b3e553a9..37486e5d 100644 --- a/src/luarocks/build/make.lua +++ b/src/luarocks/build/make.lua | |||
| @@ -58,6 +58,8 @@ function run(rockspec) | |||
| 58 | end | 58 | end |
| 59 | end | 59 | end |
| 60 | 60 | ||
| 61 | util.warn_if_not_used(build.build_variables, { CFLAGS=true }, "variable %s was not passed in build_variables") | ||
| 62 | |||
| 61 | util.variable_substitutions(build.build_variables, rockspec.variables) | 63 | util.variable_substitutions(build.build_variables, rockspec.variables) |
| 62 | util.variable_substitutions(build.install_variables, rockspec.variables) | 64 | util.variable_substitutions(build.install_variables, rockspec.variables) |
| 63 | 65 | ||
diff --git a/src/luarocks/util.lua b/src/luarocks/util.lua index 50efaa9d..5686d0cf 100644 --- a/src/luarocks/util.lua +++ b/src/luarocks/util.lua | |||
| @@ -122,6 +122,62 @@ function platform_overrides(tbl) | |||
| 122 | tbl.platforms = nil | 122 | tbl.platforms = nil |
| 123 | end | 123 | end |
| 124 | 124 | ||
| 125 | local var_format_pattern = "%$%((%a[%a%d_]+)%)" | ||
| 126 | |||
| 127 | --- Display a warning message. | ||
| 128 | -- @param msg string: the warning message | ||
| 129 | function warning(msg) | ||
| 130 | print() | ||
| 131 | print("Warning: "..msg) | ||
| 132 | print() | ||
| 133 | end | ||
| 134 | |||
| 135 | --- Create a new shallow copy of a table: a new table with | ||
| 136 | -- the same keys and values. Keys point to the same objects as | ||
| 137 | -- the original table (ie, does not copy recursively). | ||
| 138 | -- @param tbl table: the input table | ||
| 139 | -- @return table: a new table with the same contents. | ||
| 140 | local function make_shallow_copy(tbl) | ||
| 141 | local copy = {} | ||
| 142 | for k,v in pairs(tbl) do | ||
| 143 | copy[k] = v | ||
| 144 | end | ||
| 145 | return copy | ||
| 146 | end | ||
| 147 | |||
| 148 | -- Check if a set of needed variables are referenced | ||
| 149 | -- somewher in a list of definitions, warning teh user | ||
| 150 | -- about any unused ones. Each key in needed_set should | ||
| 151 | -- appear as a $(XYZ) variable at least once as a | ||
| 152 | -- substring of some value of var_defs. | ||
| 153 | -- @param var_defs: a table with string keys and string | ||
| 154 | -- values, containing variable definitions. | ||
| 155 | -- @param needed_set: a set where keys are the names of | ||
| 156 | -- needed variables. | ||
| 157 | -- @param msg string: the warning message to display. | ||
| 158 | function warn_if_not_used(var_defs, needed_set, msg) | ||
| 159 | needed_set = make_shallow_copy(needed_set) | ||
| 160 | for var,val in pairs(var_defs) do | ||
| 161 | for used in val:gmatch(var_format_pattern) do | ||
| 162 | needed_set[used] = nil | ||
| 163 | end | ||
| 164 | end | ||
| 165 | for var,_ in pairs(needed_set) do | ||
| 166 | warning(msg:format(var)) | ||
| 167 | end | ||
| 168 | end | ||
| 169 | |||
| 170 | -- Output any entries that might remain in $(XYZ) format, | ||
| 171 | -- warning the user that substitutions have failed. | ||
| 172 | -- @param line string: the input string | ||
| 173 | local function warn_failed_matches(line) | ||
| 174 | if line:match(var_format_pattern) then | ||
| 175 | for unmatched in line:gmatch(var_format_pattern) do | ||
| 176 | warning("unmatched variable " .. unmatched) | ||
| 177 | end | ||
| 178 | end | ||
| 179 | end | ||
| 180 | |||
| 125 | --- Perform make-style variable substitutions on string values of a table. | 181 | --- Perform make-style variable substitutions on string values of a table. |
| 126 | -- For every string value tbl.x which contains a substring of the format | 182 | -- For every string value tbl.x which contains a substring of the format |
| 127 | -- "$(XYZ)" will have this substring replaced by vars["XYZ"], if that field | 183 | -- "$(XYZ)" will have this substring replaced by vars["XYZ"], if that field |
| @@ -137,7 +193,8 @@ function variable_substitutions(tbl, vars) | |||
| 137 | local updated = {} | 193 | local updated = {} |
| 138 | for k, v in pairs(tbl) do | 194 | for k, v in pairs(tbl) do |
| 139 | if type(v) == "string" then | 195 | if type(v) == "string" then |
| 140 | updated[k] = v:gsub("%$%((%a[%a%d_]+)%)", vars) | 196 | updated[k] = v:gsub(var_format_pattern, vars) |
| 197 | warn_failed_matches(updated[k]) | ||
| 141 | end | 198 | end |
| 142 | end | 199 | end |
| 143 | for k, v in pairs(updated) do | 200 | for k, v in pairs(updated) do |
