diff options
author | V1K1NGbg <victor@ilchev.com> | 2024-08-22 17:48:56 -0300 |
---|---|---|
committer | Hisham Muhammad <hisham@gobolinux.org> | 2024-10-21 13:30:51 -0300 |
commit | d7b06bdc297d758e5dbf56086bda57358a1b40f2 (patch) | |
tree | ae85265103d8fd3ced7666c6d35eeff423a1254c /src | |
parent | c083f3418dbaa8b354febf936fe08037a9514d40 (diff) | |
download | luarocks-d7b06bdc297d758e5dbf56086bda57358a1b40f2.tar.gz luarocks-d7b06bdc297d758e5dbf56086bda57358a1b40f2.tar.bz2 luarocks-d7b06bdc297d758e5dbf56086bda57358a1b40f2.zip |
Teal: convert luarocks.rockspecs
Diffstat (limited to 'src')
-rw-r--r-- | src/luarocks/rockspecs.tl (renamed from src/luarocks/rockspecs.lua) | 95 |
1 files changed, 48 insertions, 47 deletions
diff --git a/src/luarocks/rockspecs.lua b/src/luarocks/rockspecs.tl index 454bab77..15a28de0 100644 --- a/src/luarocks/rockspecs.lua +++ b/src/luarocks/rockspecs.tl | |||
@@ -1,4 +1,6 @@ | |||
1 | local rockspecs = {} | 1 | |
2 | local record rockspecs | ||
3 | end | ||
2 | 4 | ||
3 | local cfg = require("luarocks.core.cfg") | 5 | local cfg = require("luarocks.core.cfg") |
4 | local dir = require("luarocks.dir") | 6 | local dir = require("luarocks.dir") |
@@ -8,7 +10,12 @@ local type_rockspec = require("luarocks.type.rockspec") | |||
8 | local util = require("luarocks.util") | 10 | local util = require("luarocks.util") |
9 | local vers = require("luarocks.core.vers") | 11 | local vers = require("luarocks.core.vers") |
10 | 12 | ||
11 | local vendored_build_type_set = { | 13 | local type Rockspec = require("luarocks.core.types.rockspec").Rockspec |
14 | local type Dependencies = require("luarocks.core.types.rockspec").Dependencies | ||
15 | |||
16 | local type Query = require("luarocks.core.types.query").Query | ||
17 | |||
18 | local vendored_build_type_set: {string: boolean} = { | ||
12 | ["builtin"] = true, | 19 | ["builtin"] = true, |
13 | ["cmake"] = true, | 20 | ["cmake"] = true, |
14 | ["command"] = true, | 21 | ["command"] = true, |
@@ -17,14 +24,6 @@ local vendored_build_type_set = { | |||
17 | ["none"] = true, | 24 | ["none"] = true, |
18 | } | 25 | } |
19 | 26 | ||
20 | local rockspec_mt = {} | ||
21 | |||
22 | rockspec_mt.__index = rockspec_mt | ||
23 | |||
24 | function rockspec_mt.type() | ||
25 | return "rockspec" | ||
26 | end | ||
27 | |||
28 | --- Perform platform-specific overrides on a table. | 27 | --- Perform platform-specific overrides on a table. |
29 | -- Overrides values of table with the contents of the appropriate | 28 | -- Overrides values of table with the contents of the appropriate |
30 | -- subset of its "platforms" field. The "platforms" field should | 29 | -- subset of its "platforms" field. The "platforms" field should |
@@ -38,15 +37,16 @@ end | |||
38 | -- tbl.x are preserved). | 37 | -- tbl.x are preserved). |
39 | -- @param tbl table or nil: Table which may contain a "platforms" field; | 38 | -- @param tbl table or nil: Table which may contain a "platforms" field; |
40 | -- if it doesn't (or if nil is passed), this function does nothing. | 39 | -- if it doesn't (or if nil is passed), this function does nothing. |
41 | local function platform_overrides(tbl) | 40 | local function platform_overrides(tbl?: {any: any}) |
42 | assert(type(tbl) == "table" or not tbl) | ||
43 | 41 | ||
44 | if not tbl then return end | 42 | if not tbl then return end |
45 | 43 | ||
46 | if tbl.platforms then | 44 | local tblp = tbl.platforms |
45 | |||
46 | if tblp is {any: any} then | ||
47 | for platform in cfg.each_platform() do | 47 | for platform in cfg.each_platform() do |
48 | local platform_tbl = tbl.platforms[platform] | 48 | local platform_tbl = tblp[platform] |
49 | if platform_tbl then | 49 | if platform_tbl is {any: any} then |
50 | util.deep_merge(tbl, platform_tbl) | 50 | util.deep_merge(tbl, platform_tbl) |
51 | end | 51 | end |
52 | end | 52 | end |
@@ -54,18 +54,16 @@ local function platform_overrides(tbl) | |||
54 | tbl.platforms = nil | 54 | tbl.platforms = nil |
55 | end | 55 | end |
56 | 56 | ||
57 | local function convert_dependencies(rockspec, key) | 57 | local function convert_dependencies(dependencies: Dependencies): boolean, string |
58 | if rockspec[key] then | 58 | local qs: {Query} = {} |
59 | for i = 1, #rockspec[key] do | 59 | for i = 1, #dependencies do |
60 | local parsed, err = queries.from_dep_string(rockspec[key][i]) | 60 | local parsed, err = queries.from_dep_string(dependencies[i]) |
61 | if not parsed then | 61 | if not parsed then |
62 | return nil, "Parse error processing dependency '"..rockspec[key][i].."': "..tostring(err) | 62 | return nil, "Parse error processing dependency '"..dependencies[i].."': "..tostring(err) |
63 | end | ||
64 | rockspec[key][i] = parsed | ||
65 | end | 63 | end |
66 | else | 64 | qs[i] = parsed |
67 | rockspec[key] = {} | ||
68 | end | 65 | end |
66 | dependencies.queries = qs | ||
69 | return true | 67 | return true |
70 | end | 68 | end |
71 | 69 | ||
@@ -73,8 +71,8 @@ end | |||
73 | -- Create a "variables" table in the rockspec table, containing | 71 | -- Create a "variables" table in the rockspec table, containing |
74 | -- adjusted variables according to the configuration file. | 72 | -- adjusted variables according to the configuration file. |
75 | -- @param rockspec table: The rockspec table. | 73 | -- @param rockspec table: The rockspec table. |
76 | local function configure_paths(rockspec) | 74 | local function configure_paths(rockspec: Rockspec) |
77 | local vars = {} | 75 | local vars: {string: string} = {} |
78 | for k,v in pairs(cfg.variables) do | 76 | for k,v in pairs(cfg.variables) do |
79 | vars[k] = v | 77 | vars[k] = v |
80 | end | 78 | end |
@@ -88,11 +86,7 @@ local function configure_paths(rockspec) | |||
88 | rockspec.variables = vars | 86 | rockspec.variables = vars |
89 | end | 87 | end |
90 | 88 | ||
91 | function rockspecs.from_persisted_table(filename, rockspec, globals, quick) | 89 | function rockspecs.from_persisted_table(filename: string, rockspec: Rockspec, globals?: {string: any}, quick?: boolean): Rockspec, string |
92 | assert(type(rockspec) == "table") | ||
93 | assert(type(globals) == "table" or globals == nil) | ||
94 | assert(type(filename) == "string") | ||
95 | assert(type(quick) == "boolean" or quick == nil) | ||
96 | 90 | ||
97 | if rockspec.rockspec_format then | 91 | if rockspec.rockspec_format then |
98 | if vers.compare_versions(rockspec.rockspec_format, type_rockspec.rockspec_format) then | 92 | if vers.compare_versions(rockspec.rockspec_format, type_rockspec.rockspec_format) then |
@@ -113,19 +107,19 @@ function rockspecs.from_persisted_table(filename, rockspec, globals, quick) | |||
113 | -- @return boolean: true if rockspec format matches version or is newer, false otherwise. | 107 | -- @return boolean: true if rockspec format matches version or is newer, false otherwise. |
114 | do | 108 | do |
115 | local parsed_format = vers.parse_version(rockspec.rockspec_format or "1.0") | 109 | local parsed_format = vers.parse_version(rockspec.rockspec_format or "1.0") |
116 | rockspec.format_is_at_least = function(self, version) | 110 | rockspec.format_is_at_least = function(self: Rockspec, version: string): boolean |
117 | return parsed_format >= vers.parse_version(version) | 111 | return parsed_format >= vers.parse_version(version) |
118 | end | 112 | end |
119 | end | 113 | end |
120 | 114 | ||
121 | platform_overrides(rockspec.build) | 115 | platform_overrides(rockspec.build as {any : any}) --! |
122 | platform_overrides(rockspec.dependencies) | 116 | platform_overrides(rockspec.dependencies as {any : any}) |
123 | platform_overrides(rockspec.build_dependencies) | 117 | platform_overrides(rockspec.build_dependencies as {any : any}) |
124 | platform_overrides(rockspec.test_dependencies) | 118 | platform_overrides(rockspec.test_dependencies as {any : any}) |
125 | platform_overrides(rockspec.external_dependencies) | 119 | platform_overrides(rockspec.external_dependencies as {any : any}) |
126 | platform_overrides(rockspec.source) | 120 | platform_overrides(rockspec.source as {any : any}) |
127 | platform_overrides(rockspec.hooks) | 121 | platform_overrides(rockspec.hooks as {any : any}) |
128 | platform_overrides(rockspec.test) | 122 | platform_overrides(rockspec.test as {any : any}) |
129 | 123 | ||
130 | rockspec.name = rockspec.package:lower() | 124 | rockspec.name = rockspec.package:lower() |
131 | 125 | ||
@@ -145,9 +139,12 @@ function rockspecs.from_persisted_table(filename, rockspec, globals, quick) | |||
145 | 139 | ||
146 | rockspec.rocks_provided = util.get_rocks_provided(rockspec) | 140 | rockspec.rocks_provided = util.get_rocks_provided(rockspec) |
147 | 141 | ||
148 | for _, key in ipairs({"dependencies", "build_dependencies", "test_dependencies"}) do | 142 | rockspec.dependencies = rockspec.dependencies or {} |
149 | local ok, err = convert_dependencies(rockspec, key) | 143 | rockspec.build_dependencies = rockspec.build_dependencies or {} |
150 | if not ok then | 144 | rockspec.test_dependencies = rockspec.test_dependencies or {} |
145 | for _, d in ipairs({rockspec.dependencies, rockspec.build_dependencies, rockspec.test_dependencies}) do | ||
146 | local _, err = convert_dependencies(d) | ||
147 | if err then | ||
151 | return nil, err | 148 | return nil, err |
152 | end | 149 | end |
153 | end | 150 | end |
@@ -161,7 +158,7 @@ function rockspecs.from_persisted_table(filename, rockspec, globals, quick) | |||
161 | end | 158 | end |
162 | 159 | ||
163 | local found = false | 160 | local found = false |
164 | for _, dep in ipairs(rockspec.build_dependencies) do | 161 | for _, dep in ipairs(rockspec.build_dependencies.queries) do |
165 | if dep.name == build_pkg_name then | 162 | if dep.name == build_pkg_name then |
166 | found = true | 163 | found = true |
167 | break | 164 | break |
@@ -169,7 +166,11 @@ function rockspecs.from_persisted_table(filename, rockspec, globals, quick) | |||
169 | end | 166 | end |
170 | 167 | ||
171 | if not found then | 168 | if not found then |
172 | table.insert(rockspec.build_dependencies, queries.from_dep_string(build_pkg_name)) | 169 | local query, errfromdep = queries.from_dep_string(build_pkg_name) |
170 | if errfromdep then | ||
171 | return nil, "Invalid dependency in rockspec: " .. errfromdep | ||
172 | end | ||
173 | table.insert(rockspec.build_dependencies.queries, query) | ||
173 | end | 174 | end |
174 | end | 175 | end |
175 | 176 | ||
@@ -177,7 +178,7 @@ function rockspecs.from_persisted_table(filename, rockspec, globals, quick) | |||
177 | configure_paths(rockspec) | 178 | configure_paths(rockspec) |
178 | end | 179 | end |
179 | 180 | ||
180 | return setmetatable(rockspec, rockspec_mt) | 181 | return rockspec |
181 | end | 182 | end |
182 | 183 | ||
183 | return rockspecs | 184 | return rockspecs |