Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ERROR: UndefVarError: JULIA_HOME not defined Stacktrace: [1] top-level scope @ none:1 #210

Open
dvoulanas opened this issue May 13, 2023 · 2 comments

Comments

@dvoulanas
Copy link

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');
else
[
, o] = system('which julia');
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!

@dvoulanas
Copy link
Author

Btw I use MATLAB 2022b and julia version of 1.8.3 on windows 10

@musm
Copy link
Collaborator

musm commented Jul 17, 2023

what exactly is this script? It seems like a custom code unrelated to the package

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants