I would like to package OpenFOAM from www.openfoam.com with BinaryBuilder and use it for my research.
Towards this goal, I have been able to build a JLL using BinaryBuilder for the Linux x86_64 platform see here using this build script.
Before I spend some time in building the package for other platforms, I wanted to check if it works as expected.
So I went ahead and tried to solve a small test case. In this, I have no problems importing the package. However, when I try to use executables from within the package I get an error.
run(gridToSTL())
--> FOAM FATAL ERROR :
Could not find mandatory etc entry (mode=ugo)
'controlDict'
I understand that this is specific to OpenFOAM. On reading a bit further, I found out that the executables and their linked libraries search for the ControlDict
file in the openfoam/etc/
folder, which is packaged along with the JLL as a file product. However, the binary products specifically look for the WM_PROJECT_DIR
environment variable that points to the directory openfoam
directory in the package, which is not set while bulding the package. See below:
import Pkg
Pkg.activate(".")
Pkg.instantiate()
using OpenFOAM_com_jll
cd("synthetic-slope-elliptic-hemisphere/")
## This following calls fail because the libraries used by the executables
## cannot find the WM_PROJECT_DIR path in the environment of the command
# run(gridToSTL())
# run(pMesh())
# run(makeFaMesh())
# # restore0dir
# rm("0", recursive=true)
# cp("0.orig", "0")
# run(releaseAreaMapping())
# run(faSavageHutterFoam())
## When we add the WM_PROJECT_DIR with the correct path to the Cmd env
## the calls work as expected
# This is the path the etc folder is searched for by OpenFOAM libraries
dirname(OpenFOAM_com_jll.openfoam_etc)
# So we set this path to the WM_PROJECT_DIR variable in the Julia script
# and add it to the environment for each call
WM_PROJECT_DIR = dirname(OpenFOAM_com_jll.openfoam_etc)
run(addenv(gridToSTL(), "WM_PROJECT_DIR"=>WM_PROJECT_DIR));
run(addenv(pMesh(), "WM_PROJECT_DIR"=>WM_PROJECT_DIR));
run(addenv(makeFaMesh(), "WM_PROJECT_DIR"=>WM_PROJECT_DIR));
# restore0dir
rm("0", recursive=true)
cp("0.orig", "0")
run(addenv(releaseAreaMapping(), "WM_PROJECT_DIR"=>WM_PROJECT_DIR));
run(addenv(faSavageHutterFoam(), "WM_PROJECT_DIR"=>WM_PROJECT_DIR));
Github repo for above code with necessary files is here: GitHub - thealanjason/ofjulia: A test repository to use OpenFOAM_com_jll package
However, If I set the WM_PROJECT_DIR
environment variable correctly pointing to the openfoam
folder within the package, and add it to the Cmd
s environment using addenv()
then the code works as expected.
Concrete Question: Is there a way to set such environment variables in the build_tarballs.jl
so that it does not need to be explicitly set when using the JLL package.
P.S. This was also the reason that the build libraries were failing to open in the BinaryBuilder audit phase. Hence, I went with using dont_dlopen=true
for the LibraryProducts