JuliaInterop / JuliaInterop/MATLAB.jl
ERROR: UndefVarError: JULIA_HOME not defined Stacktrace: [1] top-level scope @ none:1
Nobody has claimed this yet.
- Dominant language
- Julia
- Stars
- 286
- Forks
- 64
- PR merge metrics
- No merged PRs in 30d
Description
Hello guys,
I believe that jlconfig.m file uses wrong syntax to get the, for example, julia_home path
The code I run below:
function jlconfig(exe)
if nargin < 1
% try to guess the path of the julia executable
if ispc
[, o] = system('where julia');, o] = system('which julia');
else
[
end
exes = strsplit(o, {'\n','\r'}, 'CollapseDelimiters', true);
exe = exes{1};
if exist(exe, 'file') == 0
exe = 'julia';
end
% get path of julia executable
if ispc
wc = '.exe';
else
wc = '';
end
[exe, pathexe] = uigetfile(wc,'Select the Julia executable', exe);
exe = [pathexe exe];
end
assert(exist(exe, 'file') == 2);
fprintf('The path of the Julia executable is %s\n', exe);
% get the julia bin directory
julia_bin_dir = directory(exe);
assert(exist(julia_bin_dir, 'dir') == 7);
fprintf('The directory of the Julia executable is %s\n', julia_bin_dir);
% get julia home
if ispc
cmd = '%s -e "println(%s)"';
else
cmd = '%s -e ''println(%s)''';
end
[~, julia_home] = system(sprintf(cmd, exe, 'JULIA_HOME'));
julia_home = chomp(julia_home);
assert(exist(julia_home, 'dir') == 7);
fprintf('JULIA_HOME is %s\n', julia_home);
% get julia image
[~, julia_image] = system(sprintf(cmd, exe, 'bytestring(Base.JLOptions().image_file)'));
julia_image = chomp(julia_image);
assert(exist(julia_image, 'file') == 2);
fprintf('The Julia image is %s\n', julia_image);
% get include dir
if ispc
inc_dir_str = '"joinpath(match(r"(.)(bin)",JULIA_HOME).captures[1],"include","julia")"';
else
inc_dir_str = 'joinpath(match(r"(.)(bin)",JULIA_HOME).captures[1], "include", "julia")';
end
[~, julia_include_dir] = system(sprintf(cmd, exe, inc_dir_str));
julia_include_dir = chomp(julia_include_dir);
assert(exist(julia_include_dir, 'dir') == 7);
assert(exist([julia_include_dir filesep 'julia.h'], 'file') == 2);
fprintf('The Julia include directory is %s\n', julia_include_dir);
% get lib dir, opts
if ispc
bits = strsplit(julia_image, filesep);
julia_lib_dir = strjoin(bits(1:end-2), filesep);
lib_opt = 'libjulia.dll.a';
else
[~, julia_lib_dir] = system(sprintf(cmd, exe, 'abspath(dirname(Libdl.dlpath("libjulia")))'));
lib_opt = '-ljulia';
end
julia_lib_dir = chomp(julia_lib_dir);
assert(exist(julia_lib_dir, 'dir') == 7);
% write the config file
this_dir = directory(mfilename('fullpath'));
conf = matfile([this_dir filesep 'jlconfig.mat']);
conf.Properties.Writable = true;
conf.julia_bin_dir = julia_bin_dir;
conf.julia_home = julia_home;
conf.julia_image = julia_image;
conf.julia_include_dir = julia_include_dir;
conf.julia_lib_dir = julia_lib_dir;
conf.lib_opt = lib_opt;
% build the mex function
jlbuild;
% check if this directory is on the search path
path_dirs = strsplit(path, pathsep);
if ispc
on_path = any(strcmpi(this_dir, path_dirs));
else
on_path = any(strcmp(this_dir, path_dirs));
end
% if not, add it and save
if ~on_path
fprintf('%s is not on the MATLAB path. Adding it and saving...\n', this_dir);
path(this_dir, path);
savepath;
else
fprintf('%s is already on the MATLAB path.\n', this_dir);
end
fprintf('Configuration complete.\n');
end
% *** helper functions ***
% directory of path
function d = directory(p)
bits = strsplit(p, filesep);
d = strjoin(bits(1:end-1), filesep);
end
% remove leading, trailing whitespace
function str = chomp(str)
str = regexprep(str, '^\s*', '');
str = regexprep(str, '\s$', '');
end
function str = np(str)
str = strjoin(strsplit(str, filesep), '/');
end
produces the following error
ERROR: UndefVarError: JULIA_HOME not defined
Stacktrace:
[1] top-level scope
@ none:1
Any advice on that?
Thank you in advance!
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with jlconfig.m, especially the system call that evaluates JULIA_HOME and the surrounding Julia command construction. Reproduce the configuration step using the shown code, then inspect the resulting Julia error and confirm that configuration completes without the UndefVarError.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- julia, matlab
- Domain
- tooling
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100