itaVA_build.m 2.09 KB
Newer Older
Jonas Stienen's avatar
Jonas Stienen committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
% THIS FILE WILL BE OVERWRITTEN BY CMAKE WITHOUT WARNING
%
% Code generator for the VA Matlab interface facade class
%
% Desc:     This script generates the code for the Matlab
%           facade class to the VAInterface MEXExtension.
%           It takes the class template code and inserts
%           all stubs for the functions in the VAConnector
%           interface. These are derived using the reflexion
%           mechanism ('enumerateFunctions')
%

script_dir = 'D:/Users/stienen/dev/VA/dist/VA.v2017b/matlab'; % Matlab scripts target directory
deploy_dir = 'D:/Users/stienen/dev/VA/dist/VA.v2017b/bin'; % Deploy directory, i.e. 'C:/dev/VA/dist/win32-x64.vc12'
lib_dir = 'D:/Users/stienen/dev/VA/dist/VA.v2017b/lib';

if exist( deploy_dir, 'dir' ) ~= 7
    error( 'Deploy dir ''%s'' does not exist. Please build and install VAMatlab first.', deploy_dir )
end

if exist( script_dir, 'dir' ) ~= 7
   mkdir( script_dir );
end

if exist( [ 'VAMatlab' mexext ], 'file' )
    warning( 'VAMatlab already found at location "%s", are you sure to build itaVA against this executable? Will proceed now.', which( 'VAMatlab' ) )
else
    % Add to PATH temporarily and attempt to move lib to bin dir
    addpath( script_dir, deploy_dir )

    [ s ] = movefile( fullfile( lib_dir, 'VAMatlab*' ), deploy_dir );
    if ~s && ~exist( [ 'VAMatlab' '.' mexext ], 'file' )
        error( 'Could locate VAMatlab executable. Please make sure that it can be found.' )
    end
end

% Parameters
templateFile = 'itaVA.m.proto';
outputFile = fullfile( script_dir, 'itaVA.m' );

fprintf( 'Generating code for itaVA Matlab class ''%s'' ...\n', outputFile );
code = fileread( templateFile );
stubCode = itaVA_generateStubs();

code = strrep( code, '###STUBCODE###', stubCode );

% Write the results
fid = fopen( outputFile, 'w' );
fprintf( fid, '%s', code );
fclose( fid );

fprintf( 'Matlab class ''%s'' successfully built\n', outputFile );

% Install examples
copyfile( 'itaVA_example*', script_dir );

% Remove from MATLABPATH (otherwise naming conflicts may occur with
% ITA-Toolbox/applications/VirtualAcoustics/VA/* scripts)
rmpath( script_dir, deploy_dir )