Pure-D / code-d

Fully featured D language extension for Visual Studio Code using Serve-D
MIT License
291 stars 47 forks source link

Dub Build Tasks don't use environment variables from tasks.json #394

Open aubade opened 2 years ago

aubade commented 2 years ago

I'm trying to set LD_LIBRARY_PATH from tasks.json so it'll link to library files created in another root of my build.

Unfortunately, for whatever reason, it seems like the dub build task isn't respecting the environment while a simple test task does.

My tasks.json:

{
    "version": "2.0.0",
    "options": {
        "env": {
            "LD_LIBRARY_PATH":"${workspaceFolder:DSFMLC}/build/lib",
            "LIBRARY_PATH":"${workspaceFolder:DSFMLC}/build/lib"
        }
    },
    "tasks": [
        {
            "label": "test env",
            "type": "shell",
            "command": "echo",
            "args": [
                "$LD_LIBRARY_PATH"
            ],
            "problemMatcher": []
        },
        {
            "type": "dub",
            "run": false,
            "cwd": "${workspaceFolder}",
            "dub_args": [
                "ice-engine:enginetest"
            ],
            "configuration": "standard",
            "problemMatcher": [
                "$dmd"
            ],
            "group": "build",
            "label": "dub: Build ICE Enginetest",
            "detail": "dub build --compiler=dmd -a=x86_64 -b=debug"
        }
    ]
}

For my test, I replaced the normal LD with this shell script:

#!/bin/bash

echo LIBRARY PATH IS: o $LD_LIBRARY_PATH o

Running the normal build task, followed by the test_env task produces this output:

Linking...
LIBRARY PATH IS: o o 
Source file does not exist.
The terminal process "fish '-c', ''/usr/bin/dub' 'build' '--config=standard' 'ice-engine:enginetest''" terminated with exit code: 2.

Terminal will be reused by tasks, press any key to close it.

> Executing task in folder ice: echo $LD_LIBRARY_PATH <

/home/erika/Devel/git/DSFMLC/build/lib

Terminal will be reused by tasks, press any key to close it.
andre2007 commented 2 years ago

What happens when you replace the dub executable with a script out putting the environment variable?

I wonder wheter it is an issue with the plugin or dub itself.

WebFreak001 commented 2 years ago

I don't pass in environment variables anywhere to the build task I pass to the vscode tasks API, so I don't think it will contain the environment variables from elsewhere in the tasks file