RunEnvironment helper prepares
DYLD_FRAMEWORK_PATH environment variables to locate shared libraries, frameworks and executables of your requirements at runtime.
RunEnvironment is no longer needed, at least explicitly in conanfile.py. It has been integrated
self.run(..., run_environment=True) argument. Check self.run().
This helper is specially useful if:
- You are requiring packages with shared libraries and you are running some executable that needs those libraries.
- You have a requirement with some tool (executable) and you need it to be in the path.
from conans import ConanFile, RunEnvironment class ExampleConan(ConanFile): ... def build(self): env_build = RunEnvironment(self) with tools.environment_append(env_build.vars): self.run("....") # All the requirements bin folder will be available at PATH # All the lib folders will be available in LD_LIBRARY_PATH and DYLD_LIBRARY_PATH # All the framework_paths folders will be available in DYLD_FRAMEWORK_PATH
It sets the following environment variables:
|PATH||Containing all the requirements
|LD_LIBRARY_PATH||Containing all the requirements
|DYLD_LIBRARY_PATH||Containing all the requirements
|DYLD_FRAMEWORK_PATH||Containing all the requirements
Security restrictions might apply in OSX
(read this thread), so the
DYLD_FRAMEWORK_PATH environment variables are not directly transferred to the child process. In that case, you have to use it explicitly in
def build(self): env_build = RunEnvironment(self) with tools.environment_append(env_build.vars): # self.run("./myexetool") # won't work, even if 'DYLD_LIBRARY_PATH' and 'DYLD_FRAMEWORK_PATH' are in the env self.run("DYLD_LIBRARY_PATH=%s DYLD_FRAMEWORK_PATH=%s ./myexetool" % (os.environ['DYLD_LIBRARY_PATH'], os.environ['DYLD_FRAMEWORK_PATH']))
This is already handled automatically by the
self.run(..., run_environment=True) argument.