You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

107 lines
2.6 KiB

function [] = compile_trax(trax_path)
if nargin < 1
trax_path = fileparts(fileparts(fileparts(mfilename('fullpath'))));
end;
if ispc
lib_path = find_file_recursive(trax_path, 'traxstatic.lib');
else
lib_path = find_file_recursive(trax_path, 'libtraxstatic.a');
end;
if isempty(lib_path)
error('TraX library not found. Stopping.');
end;
try
OCTAVE_VERSION;
isoctave = true;
catch
isoctave = false;
end
matlabV = [100, 1] * sscanf(version, '%d.%d', 2);
disp('Building traxserver MEX file ...');
arguments = {['-I', fullfile(trax_path, 'include')], ...
fullfile(trax_path, 'support', 'matlab', 'traxserver.cpp'), ...
fullfile(trax_path, 'support', 'matlab', 'helpers.cpp'), ...
'-ltraxstatic', ['-L', lib_path], '-DTRAX_STATIC_DEFINE', ...
sprintf('-DMATLABVER=%d', matlabV) };
if isoctave
arguments{end+1} = '-DOCTAVE';
else
arguments{end+1} = '-lut';
end
build_mex(arguments, isoctave);
disp('Building traxclient MEX file ...');
arguments = {['-I', fullfile(trax_path, 'include')], ['-I', fullfile(trax_path, 'support', 'client', 'include')], ...
fullfile(trax_path, 'support', 'matlab', 'traxclient.cpp'), ...
fullfile(trax_path, 'support', 'matlab', 'helpers.cpp'), ...
fullfile(trax_path, 'support', 'client', 'client.cpp'), ...
fullfile(trax_path, 'support', 'client', 'process.cpp'), ...
fullfile(trax_path, 'support', 'client', 'timer.cpp'), ...
fullfile(trax_path, 'support', 'client', 'threads.cpp'), ...
'-ltraxstatic', ['-L', lib_path], '-DTRAX_STATIC_DEFINE', ...
sprintf('-DMATLABVER=%d', matlabV)};
if isoctave
arguments{end+1} = '-DOCTAVE';
else
arguments{end+1} = '-lut';
end
build_mex(arguments, isoctave);
end
function success = build_mex(arguments, isoctave)
if isoctave
[out, status] = mkoctfile('-mex', arguments{:});
if status
disp(out);
disp(status);
error('Unable to compile MEX function.');
success = false;
return;
end;
else
mex(arguments{:});
end
end
function [path] = find_file_recursive(root, filename)
path = [];
data = dir(root);
isdir = [data.isdir];
files = {data(~isdir).name}';
if ~isempty(files)
for f = 1:numel(files)
if strcmp(files{f}, filename)
path = root;
return;
end;
end;
end
dirs = {data(isdir).name};
for f = 1:numel(dirs)
if dirs{f}(1) == '.'
continue;
end;
path = find_file_recursive(fullfile(root, dirs{f}), filename);
if ~isempty(path)
return;
end;
end
end