diff --git a/matlab/itaVA_build.m b/matlab/itaVA_build.m new file mode 100644 index 0000000000000000000000000000000000000000..9305c0e036409727cac91e6c5672b040bc5c0104 --- /dev/null +++ b/matlab/itaVA_build.m @@ -0,0 +1,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 = 'C:/dev/VA/dist/VA.v2017b_win32-x64.vc12/matlab'; % Matlab scripts target directory +deploy_dir = 'C:/dev/VA/dist/VA.v2017b_win32-x64.vc12/bin'; % Deploy directory, i.e. 'C:/dev/VA/dist/win32-x64.vc12' +lib_dir = 'C:/dev/VA/dist/VA.v2017b_win32-x64.vc12/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 )