Skip to content

Commit 8874dd9

Browse files
authored
Introduce a getrelative toolset function to allow customization. (#2244)
This just centralizes all `getrelative`, allowing for customization by external code, by overriding this function. This is needed for instance in Ninja generators, where the location of a project is not the workspace location, but the code of the Ninja file itself should still refer to workspace-relative paths.
1 parent ac2146d commit 8874dd9

File tree

4 files changed

+27
-16
lines changed

4 files changed

+27
-16
lines changed

src/base/tools.lua

+11
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,14 @@
5959
local parts = identifier:explode("-", true, 1)
6060
return p.tools[parts[1]], parts[2]
6161
end
62+
63+
64+
--
65+
-- Returns the relative path to passed value for the given project.
66+
-- This can be overriden by actions to allow for more customized relative
67+
-- path behaviors.
68+
--
69+
70+
function p.tools.getrelative(prj, value)
71+
return p.project.getrelative(prj, value)
72+
end

src/tools/dotnet.lua

+1-1
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@
286286
table.insert(flags, '/noconfig')
287287

288288
if cfg.project.icon then
289-
local fn = project.getrelative(cfg.project, cfg.project.icon)
289+
local fn = p.tools.getrelative(cfg.project, cfg.project.icon)
290290
table.insert(flags, string.format('/win32icon:"%s"', fn))
291291
end
292292

src/tools/gcc.lua

+10-10
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@
289289
local result = {}
290290

291291
table.foreachi(cfg.forceincludes, function(value)
292-
local fn = project.getrelative(cfg.project, value)
292+
local fn = p.tools.getrelative(cfg.project, value)
293293
table.insert(result, string.format('-include %s', p.quoted(fn)))
294294
end)
295295

@@ -322,24 +322,24 @@
322322
function gcc.getincludedirs(cfg, dirs, extdirs, frameworkdirs, includedirsafter)
323323
local result = {}
324324
for _, dir in ipairs(dirs) do
325-
dir = project.getrelative(cfg.project, dir)
325+
dir = p.tools.getrelative(cfg.project, dir)
326326
table.insert(result, '-I' .. p.quoted(dir))
327327
end
328328

329329
if table.contains(os.getSystemTags(cfg.system), "darwin") then
330330
for _, dir in ipairs(frameworkdirs or {}) do
331-
dir = project.getrelative(cfg.project, dir)
331+
dir = p.tools.getrelative(cfg.project, dir)
332332
table.insert(result, '-F' .. p.quoted(dir))
333333
end
334334
end
335335

336336
for _, dir in ipairs(extdirs or {}) do
337-
dir = project.getrelative(cfg.project, dir)
337+
dir = p.tools.getrelative(cfg.project, dir)
338338
table.insert(result, '-isystem ' .. p.quoted(dir))
339339
end
340340

341341
for _, dir in ipairs(includedirsafter or {}) do
342-
dir = project.getrelative(cfg.project, dir)
342+
dir = p.tools.getrelative(cfg.project, dir)
343343
table.insert(result, '-idirafter ' .. p.quoted(dir))
344344
end
345345

@@ -370,18 +370,18 @@
370370
-- test locally in the project folder first (this is the most likely location)
371371
local testname = path.join(cfg.project.basedir, pch)
372372
if os.isfile(testname) then
373-
return project.getrelative(cfg.project, testname)
373+
return p.tools.getrelative(cfg.project, testname)
374374
else
375375
-- else scan in all include dirs.
376376
for _, incdir in ipairs(cfg.includedirs) do
377377
testname = path.join(incdir, pch)
378378
if os.isfile(testname) then
379-
return project.getrelative(cfg.project, testname)
379+
return p.tools.getrelative(cfg.project, testname)
380380
end
381381
end
382382
end
383383

384-
return project.getrelative(cfg.project, path.getabsolute(pch))
384+
return p.tools.getrelative(cfg.project, path.getabsolute(pch))
385385
end
386386

387387
--
@@ -535,14 +535,14 @@
535535

536536
if table.contains(os.getSystemTags(cfg.system), "darwin") then
537537
for _, dir in ipairs(cfg.frameworkdirs) do
538-
dir = project.getrelative(cfg.project, dir)
538+
dir = p.tools.getrelative(cfg.project, dir)
539539
table.insert(flags, '-F' .. p.quoted(dir))
540540
end
541541
end
542542

543543
if cfg.flags.RelativeLinks then
544544
for _, dir in ipairs(config.getlinks(cfg, "siblings", "directory")) do
545-
local libFlag = "-L" .. p.project.getrelative(cfg.project, dir)
545+
local libFlag = "-L" .. p.tools.getrelative(cfg.project, dir)
546546
if not table.contains(flags, libFlag) then
547547
table.insert(flags, libFlag)
548548
end

src/tools/msc.lua

+5-5
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@
280280
local result = {}
281281

282282
table.foreachi(cfg.forceincludes, function(value)
283-
local fn = project.getrelative(cfg.project, value)
283+
local fn = p.tools.getrelative(cfg.project, value)
284284
table.insert(result, "/FI" .. p.quoted(fn))
285285
end)
286286

@@ -298,12 +298,12 @@
298298
function msc.getincludedirs(cfg, dirs, extdirs, frameworkdirs, includedirsafter)
299299
local result = {}
300300
for _, dir in ipairs(dirs) do
301-
dir = project.getrelative(cfg.project, dir)
301+
dir = p.tools.getrelative(cfg.project, dir)
302302
table.insert(result, '-I' .. p.quoted(dir))
303303
end
304304

305305
for _, dir in ipairs(extdirs or {}) do
306-
dir = project.getrelative(cfg.project, dir)
306+
dir = p.tools.getrelative(cfg.project, dir)
307307
if isVersionGreaterOrEqualTo(cfg.toolset, "msc-v142") then
308308
table.insert(result, '/external:I' .. p.quoted(dir))
309309
else
@@ -312,7 +312,7 @@
312312
end
313313

314314
for _, dir in ipairs(includedirsafter or {}) do
315-
dir = project.getrelative(cfg.project, dir)
315+
dir = p.tools.getrelative(cfg.project, dir)
316316
if isVersionGreaterOrEqualTo(cfg.toolset, "msc-v142") then
317317
table.insert(result, '/external:I' .. p.quoted(dir))
318318
else
@@ -394,7 +394,7 @@
394394
local flags = {}
395395
local dirs = table.join(cfg.libdirs, cfg.syslibdirs)
396396
for i, dir in ipairs(dirs) do
397-
dir = project.getrelative(cfg.project, dir)
397+
dir = p.tools.getrelative(cfg.project, dir)
398398
table.insert(flags, '/LIBPATH:"' .. dir .. '"')
399399
end
400400
return flags

0 commit comments

Comments
 (0)