David Woo
David Woo

Reputation: 791

premake5 adding new complex fields

I am trying to add a new premake5 field in my premake5 script but am having trouble understanding how to specify the field.kind .

I want to add a field that contains a list of (path, string ) pairs but can't work out how to specify the kind spec . The documentation and examples are not particularly clear.

This is how I have registered my new field

premake.api.register(   {
        name = "mypathmappings",
        scope = "config",
        kind = "list:path:string",   or "list:keyed:path:string" 
    }
)

and inside of a config scope I declare the field item like so

project myproject
    mypathmappings { ["path/to/file1"] = "stringvalue1", ["path/to/file2"] = "stringvalue2"}

However when it comes to processing time I don't get what I'm expecting in the field:

function processpathmappings(cfg)
    local pathmappings = cfg.mypathmappings
    for path, value in pairs(pathmappings) do
        --do something with the path and value but
        --value is not a string as expected
     end
end

Can someone explain how the complex kinds can be built up correctly from the field kinds registered in api.lua?

I get that "list:integer" specifies a list of integers but don't know how the "keyed" element works for example.

Upvotes: 0

Views: 319

Answers (1)

J. Perkins
J. Perkins

Reputation: 4276

Right now, it is not possible to control the "kind" of the keys in a keyed value. The best you will be able to get with the current system is kind="keyed:string", which should give you the values (the strings) that you want, but the paths will not be processed by Premake (made absolute, etc.)

If it is feasible, you might want to flip it around to kind="keyed:path" and set the values like this:

mypathmappings { ["stringvalue1"] = "path/to/file1" }

But that relies on your string values being unique within a map.

In theory, Premake's field API could be extended to support kinds of keys; feel free to open a ticket or submit a pull request.

Upvotes: 1

Related Questions