diff m-toolbox/makeToolbox.m @ 0:f0afece42f48

Import.
author Daniele Nicolodi <nicolodi@science.unitn.it>
date Wed, 23 Nov 2011 19:22:13 +0100
parents
children e22b091498e4
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/m-toolbox/makeToolbox.m	Wed Nov 23 19:22:13 2011 +0100
@@ -0,0 +1,406 @@
+% MAKETOOLBOX Create the toolbox 'ltpda'.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% DESCRIPTION: MAKETOOLBOX Create the toolbox 'ltpda'.
+%              This script will package together all files into a toolbox that
+%              can be distributed for various OS's.
+%
+% CALL:        makeToolbox
+%
+% VERSION:     $Id: makeToolbox.m,v 1.182 2011/05/18 06:48:07 hewitson Exp $
+%
+% HISTORY: 30-01-07 M Hewitson
+%             Creation
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function varargout = makeToolbox(varargin)
+
+  %% Some clearing
+
+  % remove the user preferences
+  setappdata(0, 'LTPDApreferences', '');
+  % now clear everything
+  evalin('base', 'clear');
+  
+  %% Settings
+
+  % install toolbox to this directory
+  if nargin == 1
+    rootdir = varargin{1};
+  else
+    rootdir = '/Users/hewitson/working/matlab';
+  end
+
+  % compile options
+  closedSource    = 0;       % 1 => compile all .m files to .p files
+  read_only       = 0;       % Make all installed files read-only? (except ltpda_startup.m)
+
+  % copy the help files to the installed toolbox
+  install_help                = true;
+  % install the examples and tests
+  install_examples            = true;
+  
+  % Run the python script to build the html help
+  build_help                  = false;
+  % build the documentation search database
+  build_doc_search            = false;  
+  % build the page of functions by category,
+  build_functions_by_category = false;
+  
+  % rebuild workbench library
+  rebuild_workbench_library   = false;
+  
+  % set version for the Contents.m and for packaging
+  ltpda_ver       = '2.4.dev';
+
+  %% ------------------------------------------------------------------------
+  % -------------------------------------------------------------------------
+  % -------------------------------------------------------------------------
+  % -------------------------------------------------------------------------
+  % Should not need to edit below here
+  % -------------------------------------------------------------------------
+  % -------------------------------------------------------------------------
+  % -------------------------------------------------------------------------
+  % -------------------------------------------------------------------------
+
+  mpipelineSrc    = 'MPipeline2';
+  makeDoc         = 0;       % make html doc for all m files using m2html, ref: http://www.artefact.tk/software/matlab/m2html/
+  
+  % build version string
+  mver      = ver('MATLAB');
+  ltpda_version = sprintf('%s %s %s', ltpda_ver, mver.Release, datestr(now, 'dd-mm-yy'));
+
+  % build OS target directory
+  toolboxRoot = fullfile(rootdir, 'ltpda_toolbox');
+  
+  % remove toolbox from matlab path
+  rmpath(genpath(toolboxRoot));
+  savepath;
+  rehash toolboxcache;
+  
+  % delete old toolbox
+  if exist(toolboxRoot, 'dir')
+    rmdir(toolboxRoot, 's');
+  end
+  
+  % create toolbox root
+  mkdir(toolboxRoot);
+
+  % create toolbox dir
+  toolboxDir = fullfile(rootdir, sprintf('ltpda_toolbox'), 'ltpda');
+  mkdir(toolboxDir);
+
+  %% Install latest jar files
+
+  % MPipeline
+  copyfile(fullfile('..', 'src', mpipelineSrc, 'dist', [mpipelineSrc '.jar']), fullfile('jar', 'MPipeline.jar'));
+  ddir = fullfile('jar', 'lib');
+  if ~exist(ddir, 'dir')
+    mkdir(ddir);
+  end
+  copyfile(fullfile('..','src',mpipelineSrc,'dist','lib'), ddir, 'f');
+
+  % login dialog
+  copyfile(fullfile('..', 'src', 'LoginDialog', 'dist', 'LoginDialog.jar'), fullfile('jar', 'LoginDialog.jar'));
+
+  mkdir(toolboxDir, 'jar');
+  jars = dir('jar');
+  for c = 1:numel(jars)
+    s = jars(c);
+    [path, name, ext] = fileparts(s.name);
+    if strcmp(ext, '.jar')
+      copyfile(fullfile('jar', s.name), fullfile(toolboxDir, 'jar'), 'f');
+    end
+  end
+
+  % Also the lib dir for MPipeline
+  mkdir(toolboxDir, fullfile('jar', 'lib'));
+  copyfile(fullfile('jar', 'lib'), fullfile(toolboxDir, 'jar', 'lib'), 'f');
+
+  %% copy m files
+
+  srcs = {'m/etc/', ...
+    'm/gui', ...
+    'm/helper', ...
+    'm/sigproc',...
+    'm/built_in_models'};
+
+  mkdir(toolboxDir, 'm');
+
+  for s=srcs
+    copyfile(char(s), fullfile(toolboxDir, char(s)), 'f');
+  end
+
+  % Copy some other files
+  copyfile('m/MakeContents.m', toolboxDir, 'f');
+
+  %% install classes
+
+  classes = {'ltpda_obj', 'ltpda_nuo', 'ltpda_uo', 'ltpda_uoh', ...
+    'minfo', 'unit', ...
+    'pz', 'pzmodel', 'rational', 'parfrac',...
+    'ltpda_tf', 'ltpda_filter', 'miir', 'mfir', 'filterbank', ...
+    'ltpda_data', 'data2D', 'data3D', 'tsdata', 'cdata', 'xydata', 'fsdata', 'xyzdata', ...
+    'provenance', 'history', 'param', 'paramValue', 'plist',...
+    'ao', 'specwin', 'time', 'timespan',...
+    'pest', ...
+    'ssm', 'ssmport', 'ssmblock', ...
+    'smodel', 'msym',  ...
+    'sigBuilder', 'constructor', 'specwinViewer', ...
+    'LTPDAprefs', 'LTPDAworkbench', 'LTPDARepositoryManager', 'workspaceBrowser', ...
+    'LTPDAModelBrowser', ...
+    'matrix', 'collection', ...
+    };
+
+%   'LTPDAHelper'
+  %     'stattest', ...
+%     'plotter', 'plotterFactory', ...
+%     'aoplotter', 'tsplotter' ...
+
+  for c = classes
+    cdir = fullfile('classes', sprintf('@%s', char(c)));
+    mkdir(toolboxDir, cdir);
+    copyfile(cdir, fullfile(toolboxDir, cdir), 'f');
+  end
+
+  %% install unit tests
+  
+    cdir = fullfile('classes', 'tests');
+    mkdir(toolboxDir, cdir);
+    copyfile(cdir, fullfile(toolboxDir, cdir), 'f');
+  
+  
+  %% install packages
+
+  pkgs = { 'utils'};
+  for c = pkgs
+    cdir = fullfile('classes', sprintf('+%s', char(c)));
+    mkdir(toolboxDir, cdir);
+    copyfile(cdir, fullfile(toolboxDir, cdir), 'f');
+  end
+
+  %% Install mex src files
+
+  srcs = {'c_sources', 'ltpda_dft', 'ltpda_smoother', 'ltpda_polyreg', 'ltpda_ssmsim'};
+  for c = srcs
+    cdir = fullfile('src', char(c));
+    mkdir(toolboxDir, cdir);
+    copyfile(fullfile('../', cdir), fullfile(toolboxDir, cdir), 'f');
+  end
+  % Copy compileAll.m
+  copyfile('../src/compileAll.m', fullfile(toolboxDir, 'src'), 'f')
+  copyfile('../src/vcredist_x86.exe', fullfile(toolboxDir, 'src'), 'f')
+  copyfile('../src/vcredist_x64.exe', fullfile(toolboxDir, 'src'), 'f')
+
+
+  %% Now build examples directory in toolbox
+
+  if install_examples
+    % load list of tests to install
+    run 'test/test_list.m';
+    
+    mkdir(toolboxDir, 'examples');
+    installPoint = fullfile(toolboxDir, 'examples');
+    for f = 1:length(test_struct)
+      if test_struct(f).example
+        disp(sprintf('  - installing %s', test_struct(f).name));
+        copyfile(fullfile('test', [test_struct(f).name '.m']), installPoint);
+      end
+    end
+
+    % Some additional files
+    copyfile(fullfile('test', 'test_list.m'), installPoint);
+    copyfile(fullfile('test', 'run_tests.m'), installPoint);
+    copyfile(fullfile('test', 'make_test_ascii_file.m'), installPoint);
+
+    mkdir(installPoint, 'pipelines');
+    copyfile(fullfile('test', 'pipelines'), fullfile(installPoint, 'pipelines'), 'f');
+  end
+  
+  %% Clean up
+  % Remove recursive the CVS directories in toolboxDir
+  rm_cvs_dir(toolboxRoot, 'CVS');
+  rm_cvs_dir(toolboxRoot, '*.m~');
+  rm_cvs_dir(toolboxRoot, '.#ltpda*');
+
+  % add toolbox to matlab path
+  addpath(genpath(toolboxRoot));
+  
+  %% Now build Contents.m files and documentation
+
+  cdir = pwd;
+  cd(toolboxDir);
+  MakeContents('LTPDA', ltpda_version);
+  cd(cdir);
+
+  if makeDoc
+    % Build doc list
+    docs = [];
+    for jj = 1:length(classes)
+      docs = [docs cellstr(['classes/@' classes{jj}])];
+    end
+    for jj = 1:length(srcs)
+      if ~strcmp(srcs{j}, 'mex')
+        docs = [docs cellstr(srcs{jj})];
+      end
+    end
+
+    % build documentation
+    m2html('mfiles', docs,...
+      'htmldir', 'html_help/help/ug',...
+      'recursive', 'on',...
+      'template', 'docstyle',...
+      'indexFile', 'mindex');
+  end
+
+  if build_help
+    % Make on-line html TOC
+    cd html_help/help
+    convertTOC
+    % try to generate html codes
+    try
+      [temp pythonVer] = system('python -V');
+      pythonVer = strtok(pythonVer,'Python ');
+      if numel(pythonVer)>3, pythonVer(4:end)=[]; end
+      pythonVer = str2double(pythonVer);
+      if isnan(pythonVer)
+        error('*** Failed check of Python version');
+      elseif pythonVer > 2.6
+        !python ./mkhelpfiles_v3.py -i helptoc.xml
+      else
+        !python ./mkhelpfiles.py -i helptoc.xml
+      end
+    catch ME
+      warning('!!! Couldn''t run mkhelpfiles.py. Do you have python installed?');
+    end
+    cd(cdir)
+    
+  end
+  
+  % Now copy the help files
+  if install_help
+    status = copyfile('html_help/help', fullfile(toolboxDir,'help'), 'f')
+    copyfile('html_help/info.xml', toolboxDir, 'f');
+    addpath(fullfile(toolboxDir, 'help', 'ug'));
+    delete(fullfile(toolboxDir,'help','ug', '*_content.html'))
+  end
+  
+  % Now build search index
+  if build_doc_search
+    builddocsearchdb(fullfile(toolboxDir, 'help'))
+  end
+  
+  % Now everything is copied so we can save the path.
+  savepath;
+  rehash toolboxcache;
+
+
+  %% Build functions by category
+  if build_functions_by_category
+    disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%');
+    disp('%%          running mk_functions_by_category       %%');
+    disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%');
+    mk_functions_by_category;
+  end
+  
+  %% Make all files read-only
+  if read_only
+    files = mtfilescan(toolboxRoot);
+    for jj = 1:length(files)
+      fi = files{jj};
+      [path,name,ext] = fileparts(fi);
+      if ~strcmp(name, 'ltpda_startup')
+        if ispc
+          [success, message, messageid] = fileattrib(fi, '-w');
+        else
+          [success, message, messageid] = fileattrib(fi, '-w', 'a');
+        end
+        if ~success
+          warning('!!! Failed to set attributes for %s', fi);
+        end
+      end
+    end
+  end
+
+  %% Now compile all .m files and remove if necessary
+  if closedSource
+    mfiles = mtfilescan(toolboxDir, '.m');
+    for ii = 1:length(mfiles)
+      f = char(mfiles(ii));
+      pcode(f, '-inplace');
+      writeHelpMfile(f)
+    end
+  end
+
+  %% Now clean up
+
+  % Remove recursive the CVS directories in toolboxDir
+  rm_cvs_dir(toolboxRoot, 'CVS');
+  rm_cvs_dir(toolboxRoot, '*.m~');
+  rm_cvs_dir(toolboxRoot, '.#ltpda*');
+  
+  rehash;
+  rehash toolboxcache;
+  ltpda_startup;
+  
+  if rebuild_workbench_library
+    lib = LTPDAworkbench.rebuildLibrary;
+    save(fullfile(toolboxRoot, 'ltpda', 'classes', '@LTPDAworkbench', 'lib.mat'), 'lib')
+  end
+
+end
+
+
+function writeHelpMfile(mfile)
+  % This replaces an m-file with another m-file that contains only the help
+  % of the original one
+
+  
+  % get the help
+  [pathstr,name,ext] = fileparts(mfile);
+  h = help(name);
+  disp(sprintf('** Writing help m-file for %s', name));
+
+  fd = fopen(mfile, 'w+');
+  fprintf(fd, '%s', h);
+  fclose(fd);
+end
+
+function files = mtfilescan(root_dir, ext)
+  % Recursively scans the given directory for files that end in
+  % 'ext' and returns a list of the full paths. 
+
+  if nargin < 2
+    ext = '';
+  end
+  
+  files = getfiles(root_dir, ext, []);
+end
+
+
+function ofiles = getfiles(root_dir, iext, ofiles)
+  % Recursive function for getting file lists
+   
+  files = dir(root_dir);
+
+  for jj = 1:length(files)
+    f = files(jj);
+    if f.isdir
+      if ~strcmp(f.name,'.') && ~strcmp(f.name,'..')
+        ofiles = getfiles([root_dir '/' f.name], iext, ofiles);
+      end
+    else
+      [pathstr,name,ext] = fileparts(f.name);
+      if ~isempty(iext)
+        if any(strcmp(ext, iext))
+          ofiles = [ofiles; cellstr([root_dir '/' f.name])];
+        end
+      else
+        ofiles = [ofiles; cellstr([root_dir '/' f.name])];
+      end
+    end
+  end
+end
+
+% END