premake-core icon indicating copy to clipboard operation
premake-core copied to clipboard

cfg.buildtarget tokens incorrect in postbuildcommands

Open richard-sim opened this issue 5 months ago • 2 comments

What seems to be the problem? The various cfg.buildtarget tokens appear to be incorrect in postbuildcommands.

The complete (dummy) project I'm using for learning Premake demonstrates the bug: https://github.com/richard-sim/build-sys-eval/blob/248c0abae20a8509e0d8eb63e435fa3925e3cb06/foobar/src/premake5.lua#L62

postbuildcommands {
    "{ECHO} %{prj.name} cfg.buildtarget.directory: %[%{cfg.buildtarget.directory}]",
    "{ECHO} %{prj.name} cfg.buildtarget.relpath: %[%{cfg.buildtarget.relpath}]",
    "{ECHO} %{prj.name} !cfg.buildtarget.relpath: %[%{!cfg.buildtarget.relpath}]",
    "{ECHO} %{prj.name} cfg.buildtarget.abspath: %[%{cfg.buildtarget.abspath}]",
    "{ECHO} %{prj.name} !cfg.buildtarget.abspath: %[%{!cfg.buildtarget.abspath}]",
    "{ECHO} %{prj.name} cfg.buildtarget.name: %[%{cfg.buildtarget.name}]",
    "{ECHO} %{prj.name} cfg.buildtarget.basename: %[%{cfg.buildtarget.basename}]",
    "{ECHO} %{prj.name} cfg.buildtarget.extension: %[%{cfg.buildtarget.extension}]"
}

output:

L3a.vcxproj -> D:\dev\build-sys-eval\foobar\src\.build\bin\windows-x86_64-debug\L3a\L3a.exe
L3a cfg.buildtarget.directory: "D:\dev\build-sys-eval\foobar\src\.build\bin\windows-x86_64-debug\L3a\"
L3a cfg.buildtarget.relpath: "..\bin\windows-x86_64-debug\L3a\L3a.exe"
L3a !cfg.buildtarget.relpath: "..\bin\windows-x86_64-debug\L3a\L3a.exe"
L3a cfg.buildtarget.abspath: "..\bin\windows-x86_64-debug\L3a\L3a.exe"
L3a !cfg.buildtarget.abspath: "bin\windows-x86_64-debug\L3a\L3a.exe"
L3a cfg.buildtarget.name: "L3a.exe"
L3a cfg.buildtarget.basename: "L3a"
L3a cfg.buildtarget.extension: "..\.exe"

Partial directory structure:

foobar/
    src/
        .build/ <-- workspace location
            bin/ <-- workspace targetdir
                <per-config name>/
                    L3a/ <-- project's outputs
            obj/ <-- workspace objdir
                <per-config name>/
                    L3a/ <-- project's object files
        foobar/
            L3a/
                premake5.lua
        premake5.lua

What did you expect to happen?

  • cfg.buildtarget.directory I'd expect to be relative to foobar/src/Premake5.lua as per Premake convention, not absolute.
  • cfg.buildtarget.relpath I'd expect to be relative to foobar/src/Premake5.lua, not relative to what seems to be foobar/src/.build/obj/ for some reason?!
  • !cfg.buildtarget.relpath I'd expect to be the absolute path.
  • cfg.buildtarget.abspath I'd also expect to be the absolute path.
  • !cfg.buildtarget.abspath I'd expect to... also be the abs path.
  • cfg.buildtarget.extension I'd expect to be .exe not ..\.exe. That's quite a unique definition of extension!

What have you tried so far? I'm using %[%{cfg.buildtarget.directory}%{cfg.buildtarget.basename}.ext], which while is an absolute path, is fine for my needs.

How can we reproduce this? This bare-bones repo can be cloned: https://github.com/richard-sim/build-sys-eval/blob/248c0abae20a8509e0d8eb63e435fa3925e3cb06/foobar/src/premake5.lua#L62

  • [ x ] Visual Studio 2022 (vs2022)
  • [ x ] Other (Please list below) premake-cmake

What version of Premake are you using? Latest master branch.

Anything else we should know? I'm new here. :)

richard-sim avatar Sep 18 '24 04:09 richard-sim