1+ function setup(varargin )
2+ p = inputParser ;
3+ addOptional(p , ' force' , false );
4+ addOptional(p , ' prompt' , true );
5+ parse(p , varargin{: });
6+ force = p .Results .force ;
7+ prompt = p .Results .prompt ;
8+ persistent INVOKED
9+ if ~isempty(INVOKED ) && ~force
10+ return
11+ end
12+ % check MATLAB
13+ if verLessThan(' matlab' , ' 9.1' )
14+ error(' DataJoint:System:UnsupportedMatlabVersion' , ...
15+ ' MATLAB version 9.1 (R2016b) or greater is required' );
16+ end
17+ % require certain toolboxes
18+ requiredToolboxes = {...
19+ struct(...
20+ ' Name' , ' GHToolbox' , ...
21+ ' ResolveTarget' , ' datajoint/GHToolbox' ...
22+ ), ...
23+ struct(...
24+ ' Name' , ' mym' , ...
25+ ' ResolveTarget' , ' datajoint/mym' , ...
26+ ' Version' , @(v ) compareVersions(v , ' 2.7.3' , @(v_actual ,v_ref ) v_actual >= v_ref )...
27+ )...
28+ };
29+ try
30+ ghtb .require(requiredToolboxes , ' prompt' , prompt );
31+ catch ME
32+ installPromptMsg = {
33+ ' Toolbox ''%s'' did not meet the minimum requirements.'
34+ ' Would you like to proceed with an upgrade?'
35+ };
36+ if strcmp(ME .identifier , ' MATLAB:undefinedVarOrClass' ) && (~prompt || strcmpi(' yes' ,...
37+ dj .internal .ask(sprintf(sprintf(' %s\n ' , installPromptMsg{: }), ' GHToolbox' ))))
38+ % fetch
39+ tmp_toolbox = [tempname ' .mltbx' ];
40+ websave(tmp_toolbox , [' https://github.com/' requiredToolboxes{1 }.ResolveTarget ...
41+ ' /releases/download/' ...
42+ subsref(webread([' https://api.github.com/repos/' ...
43+ requiredToolboxes{1 }.ResolveTarget ...
44+ ' /releases/latest' ], ...
45+ weboptions(' Timeout' , 60 )), ...
46+ substruct(' .' , ' tag_name' )) ...
47+ ' /GHToolbox.mltbx' ], weboptions(' Timeout' , 60 ));
48+ % install
49+ try
50+ matlab .addons .install(tmp_toolbox , ' overwrite' );
51+ catch ME
52+ if strcmp(ME .identifier , ' MATLAB:undefinedVarOrClass' )
53+ matlab .addons .toolbox .installToolbox(tmp_toolbox );
54+ else
55+ rethrow(ME );
56+ end
57+ end
58+ % remove temp toolbox file
59+ delete(tmp_toolbox );
60+ % retrigger dependency validation
61+ ghtb .require(requiredToolboxes , ' prompt' , prompt );
62+ elseif strcmp(ME .identifier , ' MATLAB:undefinedVarOrClass' )
63+ GHToolboxMsg = {
64+ ' Toolbox '' GHToolbox'' did not meet the minimum requirements.'
65+ ' Please proceed to install it.'
66+ };
67+ error(' DataJoint:verifyGHToolbox:Failed' , ...
68+ sprintf(' %s\n ' , GHToolboxMsg{: }));
69+ else
70+ rethrow(ME )
71+ end
72+ end
73+ % check mym
74+ mymVersion = mym(' version' );
75+ assert(mymVersion .major > 2 || mymVersion .major == 2 && mymVersion .minor >= 6 , ...
76+ ' DataJoint:System:mYmIncompatible' , ...
77+ ' Outdated version of mYm. Please upgrade to version 2.6 or later' );
78+ % set cache
79+ INVOKED = true ;
80+ end
0 commit comments