Mercurial > hg > ltpda
diff m-toolbox/mk_file_list.m @ 0:f0afece42f48
Import.
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Wed, 23 Nov 2011 19:22:13 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/m-toolbox/mk_file_list.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,376 @@ +function [fails, ginfoFails] = mk_file_list(varargin) + % A script to make a list of toolbox files and write an m-file to + % declare the files + % + % Usage: mk_file_list(toolbox_dir); + % + % M Hewitson + % + % $Id: mk_file_list.m,v 1.18 2008/12/21 18:49:25 hewitson Exp $ + % + + if nargin == 0 + rdir = 'c:\matlab\ltpda_toolbox'; + else + rdir = varargin{1}; + end + + if rdir(end) ~= filesep + rdir = [rdir filesep]; + end + + % Initialise + nn = 1; + fails = {}; + ginfoFails = {}; + + % make a list of all class methods + classes = utils.helper.ltpda_classes; + + % Go through each class + for cls=classes + cl = char(cls); + + % get the methods for this class + mths = methods(cl); + + for m=1:numel(mths) + mth = mths{m}; + % get file name + fi = which(fullfile(cl, mth)); + if isempty(fi) + warning('!!! Can''t find %s/%s', cl, mth) + end + % Get path,name,ext + [path, fcnname, ext, ver] = fileparts(fi); + + % get short name + sname = mth; + if ~strcmpi(mth, 'contents') + disp(sprintf('*** processing %s', mth)); + % load file + fc = ''; + if ~isempty(fi) + fd = fopen(fi, 'r'); + if fd == -1 + error('### Could not open %s', fi); + end + fc = fscanf(fd, '%s'); + fclose(fd); + end + + % Look for a CVS version string + verstr = ''; + try + ii = strfind(fc, '$Id:'); + ts = fc(ii(1):end); + ii = strfind(ts, '$'); + verstr = ts(1:ii(2)); + catch + warning('!!! CVS Tag not found: Failed on %s', sname) + fails = [fails {sname}]; + end + + % If we have a valid version string, continue + ver = ''; + dt = ''; + tt = ''; + nm = ''; + if ~isempty(verstr) + + % parse version string + tks = regexp(verstr, 'v([.0-9]+)(\d{4}/\d{2}/\d{2})(\d{2}:\d{2}:\d{2})(\S+)', 'tokens'); + try + ver = tks{1}{1}; % version + dt = tks{1}{2}; % date + tt = tks{1}{3}; % time + ni = strfind(tks{1}{4}, 'Exp$'); + nm = tks{1}{4}(1:ni-1); % name + catch + ver = ''; + dt = ''; + tt = ''; + nm = ''; + fails = [fails {sname}]; + end + end + % make hash + if isempty(fc) + hs = ''; + else + hs = utils.prog.hash(fc, 'MD5'); + end + + % Look for the category + cat = ''; + argsMin = ''; + argsMax = ''; + try + cmd = sprintf('ii = %s.getInfo(''%s'', ''None'');', cl, mth); + eval(cmd); + cat = ii.mcategory; + argsMin = num2str(ii.argsmin); + argsMax = num2str(ii.argsmax); + catch + lasterr + + end + + % fill cell array + vers(nn,1) = {fi}; + vers(nn,2) = {sname}; + vers(nn,3) = {ver}; + vers(nn,4) = {dt}; + vers(nn,5) = {tt}; + vers(nn,6) = {nm}; + vers(nn,7) = {path}; + vers(nn,8) = {hs}; + vers(nn,9) = {cat}; + vers(nn,10) = {cl}; + vers(nn,11) = {argsMin}; + vers(nn,12) = {argsMax}; + nn = nn + 1; + end + end + end + + + %--- Write out version file + fname = fullfile(rdir, 'ltpda', 'm', 'etc','ltpda_versions.m'); + fd = fopen(fname, 'w+'); + fprintf(fd, 'versions = {...\n'); + for j=1:size(vers,1) + fprintf(fd, '\t\t'); + for k=1:size(vers,2) + fprintf(fd, '''%s''', vers{j,k}); + if k~=size(vers,2) + fprintf(fd, ', '); + end + end + fprintf(fd, '; ...\n'); + end + fprintf(fd, '\t\t};\n'); + fclose(fd); + + % Compile this to p-code + run(fname) +% pcode(fname, '-inplace'); +% delete(fname); + + %--- Display failures + for j=1:length(fails) + disp(sprintf('### FAILED: %s', fails{j})); + end + +end + +% %--- Process each file +% for j=1:nfs +% +% % This file +% fi = tbfs{j}; +% +% % Get path,name,ext +% [path, fcnname, ext, ver] = fileparts(fi); +% +% % Make exceptions +% if ~strcmp(fcnname, 'Contents') && ... +% ~strcmp(fcnname, 'MakeContents') +% +% % get short name +% sname = strrep(fi, rdir, ''); +% if sname(1) == '/' +% sname = sname(2:end); +% end +% disp(sprintf('*** processing %s', sname)); +% +% % load file +% fd = fopen(fi, 'r'); +% fc = fscanf(fd, '%s'); +% fclose(fd); +% +% % Look for a CVS version string +% try +% ii = strfind(fc, '$Id:'); +% ts = fc(ii(1):end); +% ii = strfind(ts, '$'); +% verstr = ts(1:ii(2)); +% catch +% warning('!!! CVS Tag not found: Failed on %s', sname) +% fails = [fails {sname}]; +% end +% +% +% +% % If we have a valid version string, continue +% if ~isempty(verstr) +% +% % parse version string +% tks = regexp(verstr, 'v([.0-9]+)(\d{4}/\d{2}/\d{2})(\d{2}:\d{2}:\d{2})(\S+)', 'tokens'); +% try +% ver = tks{1}{1}; % version +% dt = tks{1}{2}; % date +% tt = tks{1}{3}; % time +% ni = strfind(tks{1}{4}, 'Exp$'); +% nm = tks{1}{4}(1:ni-1); % name +% catch +% ver = ''; +% dt = ''; +% tt = ''; +% nm = ''; +% fails = [fails {sname}]; +% end +% +% % make hash +% hs = utils.prog.hash(fc, 'MD5'); +% +% % get class/category +% idx = strfind(sname, fcnname); +% pth = sname(1:idx(end)-1); +% +% % get class +% if ~isempty(strfind(pth, 'classes')) +% [s,r] = strtok(pth, '@'); +% cl = r(2:end-1); +% else +% cl = 'None'; +% end +% +% % Look for the category +% cat = ''; +% acc = ''; +% if ismember(cl, classes) +% if ~strcmp(cl, 'None') +% try +% cmd = sprintf('ii = %s.getInfo(''%s'', ''None'');', cl, fcnname); +% eval(cmd); +% cat = ii.mcategory; +% end +% end +% if isempty(cat) +% ginfoFails = [ginfoFails {sname}]; +% end +% end +% +% % fill cell array +% vers(nn,1) = {fi}; +% vers(nn,2) = {fcnname}; +% vers(nn,3) = {ver}; +% vers(nn,4) = {dt}; +% vers(nn,5) = {tt}; +% vers(nn,6) = {nm}; +% vers(nn,7) = {pth}; +% vers(nn,8) = {hs}; +% vers(nn,9) = {cat}; +% vers(nn,10) = {cl}; +% nn = nn + 1; +% else +% fails = [fails {sname}]; +% end +% end +% end +% % Only output those which are not empty +% vers = vers(1:nn-1,:); +% +% %--- Write out version file +% fname = [rdir '/ltpda/m/etc/ltpda_versions.m']; +% fd = fopen(fname, 'w+'); +% fprintf(fd, 'versions = {...\n'); +% for j=1:length(vers) +% fprintf(fd, '\t\t'); +% for k=1:size(vers,2) +% fprintf(fd, '''%s''', vers{j,k}); +% if k~=size(vers,2) +% fprintf(fd, ', '); +% end +% end +% fprintf(fd, '; ...\n'); +% end +% fprintf(fd, '\t\t};\n'); +% fclose(fd); +% +% % Compile this to p-code +% run(fname) +% % pcode(fname, '-inplace'); +% % delete(fname); +% +% %--- Display failures +% for j=1:length(fails) +% disp(sprintf('### FAILED: %s', fails{j})); +% end + + +function files = mtfilescan(root_dir, ext) + + % FILESCAN recursively scans the given directory for files that end in + % 'ext' and returns a list of the full paths. + % + % function files = mtfilescan(root_dir, ext) + % + + files = getfiles(root_dir, ext, []); +end + +%-------------------------------------------------------------------------- +function ofiles = getfiles(root_dir, iext, ofiles) + % Recursive function for getting file lists + % + + disp(sprintf(' + looking in %s', root_dir)); + files = dir(root_dir); + + for j=1:length(files) + f = files(j); + if f.isdir + if strcmp(f.name,'.')==0 && strcmp(f.name,'..')==0 + %mdisp('found dir %s', f.name); + ofiles = getfiles([root_dir '/' f.name], iext, ofiles); + end + else + [pathstr,name,ext,v] = fileparts(f.name); + if any(strcmp(ext, iext)) + ofiles = [ofiles; cellstr([root_dir '/' f.name])]; + end + end + end +end + +function mths = getMethods(cl) + + mths = []; + % Class info + try + % get meta info for this class + ci = eval(sprintf('?%s', cl)); + % Get methods + ms = methods(cl); %ci.Methods; + + % Check if this is an abstract class + try + o = feval(cl); + abstract = false; + catch + abstract = true; + end + + if ~abstract + % Go through methods + for kk=1:numel(ms) + m = eval(sprintf('?%s', ms{kk})); + % If this is not an inherited +% if strcmp(m.DefiningClass.Name, cl) + disp(sprintf(' -- checking %s/%s', cl, m.Name)); + if strcmp(m.Access, 'public') && ~m.Static && ~strcmp(m.Name, 'Contents') + mths = [mths; {m}]; + end +% else +% warning('!!! Skipping inherited method %s/%s', cl, m.Name); +% end + end + end + catch + warning('!!! Couldn''t get meta info for class %s', cl); + end +end + +% END