ROOT logo
/**************************************************************************
 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
 * full copyright notice.                                                 *
 **************************************************************************/

//************************************************************************
//  Author: Mihai Niculescu (mihai.niculescu@cern.ch)
//  Jan 31 2012
//************************************************************************

#if !defined(__CINT__) || defined(__MAKECINT__)
#include <TList.h>
#include <TObjString.h>
#include <TString.h>
#include <TSystem.h>
#include <TSystemDirectory.h>
#include <TSystemFile.h>
#include <TEveUtil.h>
#endif

/* Compiles all AliEve macros
 * 
 * Usage: 
 *  1. cd $ALICE_ROOT/EVE/test-macros/
 *  2. Launch alieve from terminal: alieve
 *  3. from terminal execute this script: .x compileEveMacros.C
 *  3. Wait for compilation to finish
 * 
 * NOTE:
 *  At the end of compilation,you might get a list 
 * with all macros that failed compilation
 * 
 * Parameters:
 *  macDir  - absolute directory path where to find the macros
 *  opt     - compilation options (See: TSystem::CompileMacro)
 * 
 * Default:
 *  - compiles all macros from AliRoot installation dir ($ALICE_ROOT/EVE/alice-macros)
 *  - options for compilation (- k f c):
 * The possible options are:
     k : keep the shared library after the session end.
     f : force recompilation.
     g : compile with debug symbol
     O : optimized the code (ignore if 'g' is specified)
     c : compile only, do not attempt to load the library.
     - : if buildir is set, use a flat structure (see buildir below)
 */

void compileEveMacros( const char * macDir="", Option_t *opt="")
{

   // solves current issue in ROOT when pre-compiling with ACLiC
   gSystem->Load("libCint");
   gSystem->Load("libTENDER");
   gSystem->Load("libPWGPP");

  if(macDir == "")
    macDir = Form("%s/EVE/alice-macros", gSystem->Getenv("ALICE_ROOT") );
  
  if(opt == "")
    opt = "-kc"; // compilation options
  
  TObjString *mac;
  TList * listOfFailedMacros = new TList; // list of macros that failed compilation
    
  TSystemDirectory *curDir = new TSystemDirectory(macDir, macDir);
  TSystemFile *curFile = 0;
  
  TList* listOfMacros = curDir->GetListOfFiles();
  TListIter next(listOfMacros);
  
  TPMERegexp regex("\\.C$");
    
  printf("Directory: %s \tfiles:%d\n",  curDir->GetName(), listOfMacros->GetSize() );
  gSystem->cd(curDir->GetName());

  const char* incPath = gSystem->GetIncludePath();
  
  gSystem->SetIncludePath(Form("%s -I%s", incPath, "$ROOTSYS/include"));
  
  
  Int_t nMacros = 0;
  
  while( (curFile = static_cast<TSystemFile*>(next())) )
  {
    mac = new TObjString(curFile->GetName());
    
    if( regex.Match(mac->String().Data() ) > 0 )
    {
        nMacros++;
      
        printf("Macro %s\n", mac->String().Data() );
        TEveUtil::CheckMacro(mac->String().Data() );
        if(!gSystem->CompileMacro(mac->String().Data(), opt ) )
          listOfFailedMacros->Add(mac);
    }
    
  }
  
  printf("\n\nTotal Macros:%d \tFailed:%d \n", nMacros, listOfFailedMacros->GetSize() );
  
  printf("\nFollowing macros failed compilation: \n");
  TListIter failed(listOfFailedMacros);
  while( (mac = static_cast<TObjString*>(failed())) )
  {
    printf( "%s\n", mac->String().Data() );
  }
  
  delete listOfFailedMacros;
  delete listOfMacros;
  delete curDir;
}
 compileEveMacros.C:1
 compileEveMacros.C:2
 compileEveMacros.C:3
 compileEveMacros.C:4
 compileEveMacros.C:5
 compileEveMacros.C:6
 compileEveMacros.C:7
 compileEveMacros.C:8
 compileEveMacros.C:9
 compileEveMacros.C:10
 compileEveMacros.C:11
 compileEveMacros.C:12
 compileEveMacros.C:13
 compileEveMacros.C:14
 compileEveMacros.C:15
 compileEveMacros.C:16
 compileEveMacros.C:17
 compileEveMacros.C:18
 compileEveMacros.C:19
 compileEveMacros.C:20
 compileEveMacros.C:21
 compileEveMacros.C:22
 compileEveMacros.C:23
 compileEveMacros.C:24
 compileEveMacros.C:25
 compileEveMacros.C:26
 compileEveMacros.C:27
 compileEveMacros.C:28
 compileEveMacros.C:29
 compileEveMacros.C:30
 compileEveMacros.C:31
 compileEveMacros.C:32
 compileEveMacros.C:33
 compileEveMacros.C:34
 compileEveMacros.C:35
 compileEveMacros.C:36
 compileEveMacros.C:37
 compileEveMacros.C:38
 compileEveMacros.C:39
 compileEveMacros.C:40
 compileEveMacros.C:41
 compileEveMacros.C:42
 compileEveMacros.C:43
 compileEveMacros.C:44
 compileEveMacros.C:45
 compileEveMacros.C:46
 compileEveMacros.C:47
 compileEveMacros.C:48
 compileEveMacros.C:49
 compileEveMacros.C:50
 compileEveMacros.C:51
 compileEveMacros.C:52
 compileEveMacros.C:53
 compileEveMacros.C:54
 compileEveMacros.C:55
 compileEveMacros.C:56
 compileEveMacros.C:57
 compileEveMacros.C:58
 compileEveMacros.C:59
 compileEveMacros.C:60
 compileEveMacros.C:61
 compileEveMacros.C:62
 compileEveMacros.C:63
 compileEveMacros.C:64
 compileEveMacros.C:65
 compileEveMacros.C:66
 compileEveMacros.C:67
 compileEveMacros.C:68
 compileEveMacros.C:69
 compileEveMacros.C:70
 compileEveMacros.C:71
 compileEveMacros.C:72
 compileEveMacros.C:73
 compileEveMacros.C:74
 compileEveMacros.C:75
 compileEveMacros.C:76
 compileEveMacros.C:77
 compileEveMacros.C:78
 compileEveMacros.C:79
 compileEveMacros.C:80
 compileEveMacros.C:81
 compileEveMacros.C:82
 compileEveMacros.C:83
 compileEveMacros.C:84
 compileEveMacros.C:85
 compileEveMacros.C:86
 compileEveMacros.C:87
 compileEveMacros.C:88
 compileEveMacros.C:89
 compileEveMacros.C:90
 compileEveMacros.C:91
 compileEveMacros.C:92
 compileEveMacros.C:93
 compileEveMacros.C:94
 compileEveMacros.C:95
 compileEveMacros.C:96
 compileEveMacros.C:97
 compileEveMacros.C:98
 compileEveMacros.C:99
 compileEveMacros.C:100
 compileEveMacros.C:101
 compileEveMacros.C:102
 compileEveMacros.C:103
 compileEveMacros.C:104
 compileEveMacros.C:105
 compileEveMacros.C:106
 compileEveMacros.C:107
 compileEveMacros.C:108
 compileEveMacros.C:109
 compileEveMacros.C:110
 compileEveMacros.C:111
 compileEveMacros.C:112
 compileEveMacros.C:113
 compileEveMacros.C:114