This documentation page applies to an outdated major AMT version. We show it for archival purposes only.
Click here for the documentation menu and here to download the latest AMT (1.6.0).
function amtmex(varargin)
%AMTMEX Compile Mex/Oct interfaces
% Usage: amtmex;
% amtmex(...);
%
% `amtmex` compiles the C backend in order to speed up the execution of
% the toolbox. The C backend is linked to Matlab and Octave through mex
% and Octave C++ interfaces.
%
% The action of `amtmex` is determined by one of the following flags:
%
% 'compile' Compile stuff. This is the default.
%
% 'clean' Removes the compiled functions.
% AUTHOR : Peter Søndergaard.
% TESTING: NA
% REFERENCE: NA
bp=mfilename('fullpath');
bp=bp(1:end-6);
defnopos.flags.command={'compile','clean'};
[flags,kv]=ltfatarghelper({},defnopos,varargin);
% Remember the current directory.
curdir=pwd;
if isoctave
extname='oct';
ext='oct';
else
extname='mex';
ext=mexext;
end;
% -------------- Handle cleaning --------------------------------
if flags.do_clean
if ~isoctave
% Delete files permanently (bypass trashcan on Windows/Mac
% but remember the old state
oldstate = recycle('off');
end;
fprintf('========= Cleaning %s interfaces ==========\n', extname);
if isoctave
deletefiles([bp,'oct'],'*.oct');
deletefiles([bp,'oct'],'*.o');
else
deletefiles([bp,'mex'],['*.',mexext]);
end;
if ~isoctave
recycle(oldstate);
end;
end;
% -------------- Handle compiling --------------------------------
if flags.do_compile
fprintf('========= Compiling %s interfaces ==========\n', extname);
if compile_amt(bp)>1;
fprintf('ERROR: The %s interfaces was not built.\n', extname);
else
disp('Done.');
end;
end;
% Jump back to the original directory.
cd(curdir);
function deletefiles(base,files)
L=dir([base,filesep,files]);
for ii=1:numel(L)
s=[base,filesep,L(ii).name];
delete(s);
end;
function status=compile_amt(bp)
% If we exit early, it is because of an error, so set status=1
status=1;
if isoctave
cd([bp,'oct']);
ext='oct';
% Get the list of files.
L=dir('*.cc');
endchar=2;
else
cd([bp,'mex']);
ext=mexext;
% Get the list of files.
L=dir('comp_*.c');
endchar=1;
end;
for ii=1:numel(L)
filename = L(ii).name;
objname = [filename(1:end-endchar),ext];
objdirinfo = dir(objname);
% Make-like behaviour: build only the files where the src file is
% newer than the object file, or the object file is missing.
if isempty(objdirinfo) || (objdirinfo.datenum<L(ii).datenum)
fprintf('Compiling %s\n',filename);
if isoctave
mkoctfile('-I.','-I../src','-L../src',filename);
else
mex('-I.','-I../src','-L../src',filename);
end;
end;
end;
status=0;