The Gaudi Framework  v29r0 (ff2e7097)
Package : Gaudi
Package manager : Marco Clemencic
Commit Id: $Format:%H$

================================ Gaudi v28r3 =================================


================================ Gaudi v28r2 =================================


================================ Gaudi v28r1 =================================


================================ Gaudi v28r0 =================================

! 2016-10-31 - Marco Clemencic (commit b9f002b)

 - minor fixes to failing tests

   - fixed issue in CMake modules test
   - fixed BrunelScenarioGraphScheduler
   - clean up CPUCruncher
    See merge request !227

! 2016-10-12 - Marco Clemencic (commit b5e05a1)

 - improved handling of package version in CMake configuration

   use project version if a package version is not provided
    See GAUDI-1215.
    See merge request !175

! 2016-07-25 - Marco Clemencic (commit e3d4b07)

 - remove CMT configuration and related files

   * removed CMT configuration files
   * adapted scripts not to use CMT
    Fixes GAUDI-1216 Fixes GAUDI-979
    See merge request !186

================================ Gaudi v27r1 =================================

! 2016-02-15 - commit 4dc9082

 - fixed handling of (multi line) strings and ';' in strings for .opts files

   Fixes GAUDI-1179
    See merge request !112

! 2016-02-06 - commit d905569

 - introduce DataHandle and DataObjectHandle

   See merge requests !57 !94 !95

================================ Gaudi v27r0 =================================

! 2015-11-02 - commit 57f356c

 - Merge branch 'hive' into 'master'

   Fixes GAUDI-978.

   See merge request !65

================================ Gaudi v26r4 =================================

! 2015-10-06 - commit 0b7a459

 - Merge branch 'GAUDI-1093' into 'master'

   avoid (deprecated) Python module `commands`

   fixes GAUDI-1093

   See merge request !38


! 2015-09-16 - commit 7eb8601

 - Merge branch 'GAUDI-1055' into 'master'

   GAUDI-1055: Allow use of Python configurables and components at build time.

   this merge request also includes a minor fix to gaudirun.py

   See merge request !12


! 2015-07-23 - commit 5f7f60e

 - Merge branch 'dev/gdb_hook' into 'master'

   hook for gdb

   add hook and command line option ("--gdb") to start up gdb and attach it to
   currently running process.

   See GAUDI-1056

   See merge request !8

================================ Gaudi v26r3 =================================
! 2015-06-18 - Marco Clemencic
 - Fixed GAUDI-1045: segfault running "LD_PRELOAD=libjemalloc.so gaudirun.py"

   The segfault was due to a Python ctypes "feature": Python integers passed to
   C functions are truncated to 32 bits even if the function is declared
   expecting 64 bits numbers (like void*).
   In addition, C functions declared to return void* get the return value
   converted to (Python) int.
   The net result is that the sequence:
   ```
   instance = lib.myFactory()
   lib.doSomething(instance)
   ```
   may give a segfault if the pointer returned by lib.myFactory is too big (as
   it happens with jemalloc).

   The work-around is to ensure that the void* returned by lib.myFactory is
   wrapped in a ctypes.c_void_p instance.

   See http://stackoverflow.com/questions/17840144.

================================ Gaudi v26r2 =================================
! 2015-05-07 - Marco Clemencic
 - Fixed GAUDI-1033: segfaults when calling Python functions from C++
   Use ctypes.PyDLL instead of ctypes.CDLL. This prevents python threads to run
   in parallel to the C++ code, but is consistent with the bootstrap via ROOT.
   Once the user code is instrumented to correctly acquire the GIL, we can
   revert to ctypes.CDLL.

! 2015-04-20 - Marco Clemencic
 - Modified the minimal boostrap function to force the import of GaudiPython
   with ROOT <= 6.2.5, to work around a bug in ROOT.

! 2015-04-13 - Marco Clemencic
 - Refactored printing of alg sequences and moved it after the initialize,
   to allow an implemetation in C++ (to avoid GaudiPython in gaudirun.py).

! 2015-04-13 - Marco Clemencic
 - Enable GaudiPython in gaudirun.py with an environment variable.
   Setting GAUDIRUN_USE_GAUDIPYTHON (any non-empty value) forces the use of
   GaudiPython for bootstrapping in gaudirun.py.

! 2015-04-10 - Marco Clemencic
 - Replaced GaudiPython/cppyy with ctypes in Gaudi.Main.
   GaudiPython is still used for the --printsequence and custom main loop
   cases.

================================ Gaudi v26r1 =================================
! 2015-02-02 - Marco Clemencic
 - Fixed GAUDI-1001: '\' and '\n' not correctly interpreted by gaudirun.py

! 2015-01-30 - Marco Clemencic
 - Added command line option to restart gaudirun.py from old options (smaller
   memory footprint) after having parsed the options in Python.

! 2015-01-26 - Marco Clemencic
 - Replaced the only QMTest test not based on GaudiTest with a Nose-based test.

================================ Gaudi v26r0 =================================
! 2015-01-15 - Marco Clemencic
 - Minor change in the CMake configuration to fix backward compatibility of the
   test environment with CMT.

=============================== Gaudi v25r6p1 ================================
================================ Gaudi v25r6 =================================
================================ Gaudi v25r5 =================================
! 2014-09-25 - Marco Clemencic
 - Bump package version to allow detection of the backward incompatible change
   in the Plugin Service via the GAUDI_VERSION cpp macro.

================================ Gaudi v25r3 =================================
================================ Gaudi v25r2 =================================
! 2014-03-26 - Marco Clemencic
 - Reverted work-around for ROOT-6125 (fixed upstream).

=============================== Gaudi v25r1p1 ================================
================================ Gaudi v25r1 =================================
! 2014-03-18 - Ben Couturier
 - Fixed bug #104127: remove hwaf configuration.

! 2014-03-07 - Marco Clemencic
 - Fixed the workaround for ROOT-6125 after having understood what the problem
   really is.
   https://sft.its.cern.ch/jira/browse/ROOT-6125

! 2014-03-05 - Marco Clemencic
 - Added workaround for ROOT-6125 (crash loading libCling.so when using
   tcmalloc).
   https://sft.its.cern.ch/jira/browse/ROOT-6125

================================ Gaudi v25r0 =================================
! 2014-02-10 - Marco Clemencic
 - Enable the fixed 'applyConfigurableUsers()' if the environment variable
   GAUDI_FIXED_APPLY_CONF is set.

! 2014-02-10 - Marco Clemencic
 - Allow switching between old 'applyConfigurableUsers()' (bug #103803) and the
   new one (fixed the bug, but different order of execution).
   The old one is the default and will be made deprecated.

! 2014-02-07 - Marco Clemencic
 - Modified configurables test to expose bug #103808.

! 2014-02-06 - Marco Clemencic
 - Improved test gaudi.conf_user.autoapply to be more robust in case of a change
   in the order of application of configurables.

! 2014-02-06 - Marco Clemencic
 - Added test exposing bug #103803:
   ConfigurableUser instances created in the __apply_configuration__ of another
   one are not "applied".

! 2013-12-11 - Sebastien Binet
 - Added hwaf configuration files.

================================ Gaudi v24r2 =================================
================================ Gaudi v24r1 =================================
================================ Gaudi v24r0 =================================
! 2013-08-30 - Charles Leggett
 - retag for Atlas merge

================================ Gaudi v23r10 ================================
! 2013-09-25 - Marco Clemencic
 - Enforce LC_ALL=C in gaudirun.py.

! 2013-09-03 - Marco Clemencic
 - Modified gaudirun.py to accept a .qmt file as argument.
   When a file ending by '.qmt' is encountered on the command line, it is parsed
   and replaced with the arguments and the option file it contains before the
   list of arguments is passed to the the command line options parser.

================================ Gaudi v23r9 =================================
! 2013-07-09 - Marco Clemencic
 - Fixed a problem with a spurious error message when the import from
   Configurables fails.
   If the import fails, instead of an ImportError we were getting a RuntimeError
   about sys.path containing something else then strings.

================================ Gaudi v23r8 =================================
================================ Gaudi v23r7 =================================
! 2013-02-15 - Danilo Piparo
 - Patch #5605: Run performance profilers with gaudirun.py command line options
   Allow to operate performance profilers directly from gaudirun.py, simply
   using command line options. Igprof and Valgrind (whole suite: callgrind,
   massif, cachegrind, drd, ...) are supported.
   Three options have been added:
    o --profilerName: Specify the profiler name. The possibilities are
                      igprofMem, igprofPerf and valgrind<toolname>. For igprof,
                      sensible and basically universal meaningful default
                      options are added (compress output, be verbose)
    o --profilerOutput: Specify the output file name. If not selected, a default
                        is provided.
    o --profilerExtraOptions: specify extra options for the profiler, where the
                              '--' is replaced with a '__'.

================================ Gaudi v23r6 =================================
================================ Gaudi v23r5 =================================
! 2012-11-05 - Marco Clemencic
 - Ensure that we get the correct return code after a segfault in C++.

================================ Gaudi v23r4 =================================
! 2012-07-28 - Marco Clemencic
 - Modified gudirun.py to use a portable check of the number of CPUs.

! 2012-07-27 - Marco Clemencic
 - Rationalized the permissions of files in the repository.

================================ Gaudi v23r3 =================================
! 2012-06-08 - Marco Clemencic
 - Added CMake configuration files.

================================ Gaudi v23r2 =================================
! 2012-03-15 - Marco Clemencic
 - Fixed bug #92122: option '--printsequence' of gaudirun.py no longer works
   Moved the call to the printsequence function from gaudirun.py to
   gaudimain.run(), thus also fixing the possible configuration corruption due
   to the use of the option.

================================ Gaudi v23r1 =================================
! 2012-02-22 - Marco Clemencic
 - Modified gaudirun.py to be able to preload arbitrary libraries (option
   --preload) and not just tcmalloc.

================================ Gaudi v23r0 =================================
! 2012-01-20 - Marco Clemencic
 - Minor change to the test custom_main_loop_parallel to work on single core
   machines, like CERNVM.

! 2011-12-09 - Marco Clemencic
 - Added RootCnvSvc and RootEvtSelector to the list of aliased services
   (enforcing the default name to preserve compatibility with LHCb).

! 2011-12-08 - Marco Clemencic
 - Added support for class aliases in the meta-module "Configurables".
 - Added a ConfigurableUser to setup the persistency via RootCnv:
     from Configurables import GaudiPersistency
     GaudiPersistency()

! 2011-11-01 - Marco Clemencic
 - Moved core services out of GaudiSvc and into the new packages GaudiCoreSvc
   and GaudiCommonSvc. (patch #1816)
   Added GaudiCoreSvc and GaudiCommonSvc to the list of known modules in
   Gaudi.Configuration.
 - Added minimalistic tests to verify that all the required services are
   available.
 - Minor fix to the test gaudi.bug_39809: it was implicitly requiring the build
   of GaudiAlg to work.

================================ Gaudi v22r5 =================================
! 2011-10-27 - Marco Clemencic
 - Fixed bug #86980: gaudirun.py should prevent the import of GaudiPython
   Install a fake GaudiPython module that prevents the use of any attribute, and
   uninstall it just before calling the run function.

! 2011-10-26 - Marco Clemencic
 - Introduced a hook to override the default gaudirun main loop:
     Gaudi.Configuration.setCustomMainLoop
 - Added tests for the custom main loop

================================ Gaudi v22r4 =================================
================================ Gaudi v22r3 =================================
================================ Gaudi v22r2 =================================
================================ Gaudi v22r1 =================================
================================ Gaudi v22r0 =================================
! 2010-12-17 - Eoin Smith
 - Updated gaudirun.py and python/Gaudi/Main.py for multicore execution
   Multicore Execution with flag : --ncpus=N ( N in {-1,0,...,Z} )
     -1 : all available cores
      0 : conventional serial execution
      1 : parallel execution with 1 worker
   parallel execution generates log file named by date and time of run

================================ Gaudi v21r11 ================================
! 2010-07-28 - Marco Clemencic
 - Added dependency on pytools to be able to use Gaudi.Parallel.

================================ Gaudi v21r10 ================================
! 2010-06-23 - Marco Clemencic
 - Minor fix in Configuration.getConfigurable.

================================ Gaudi v21r9 =================================
! 2010-04-22 - Marco Clemencic
 - Use the property "ReturnCode" of the ApplicationMgr as return value of the
   application (gaudirun.py).

================================ Gaudi v21r8 =================================
! 2010-03-02 - Marco Clemencic
  - Modified the test gaudi.conf_user_autoapply to test the dependency between
    named ConfigurableUser instances.

================================ Gaudi v21r7 =================================
! 2010-01-08 - Marco Clemencic
 - Added test for bug #61144 (configuration problem for 'empty' tool handles)

================================ Gaudi v21r6 =================================
! 2009-11-09 - Marco Clemencic
 - Extended the test gaudi.propagate_properties to expose a bug affecting
   properties of type list and dict (fixed).

================ Gaudi v21r5 ====================================
! 2009-10-19 - Marco Clemencic
 - Modified the python modules Gaudi, Gaudi.Main and the script guadirun.py
   to avoid that an "import Gaudi" indirectly triggers a load of the configurables
   database (it is necessary to import Gaudi.Configuration).

! 2009-10-12 - Marco Clemencic
 - Normalization of white-spaces in Python files.
   (using http://svn.python.org/projects/python/tags/r254/Tools/scripts/reindent.py)

! 2009-10-09 - Eoin Smith
 - Patch #3297: Support for GaudiPython Parallel in gaudirun.py
   Modified gaudirun.py to accept the command line option "--parallel" to
   specify the number of workers to use.

================ Gaudi v21r4 ====================================
! 2009-07-22 - Marco Clemencic
 - Modified the the code behind "from Configuables import MyConf" to match the
   standard Python semantics: raise an exception if the configurable is not
   found.
   The meta-module "Configuables" should be deprecated in favor of
   "Gaudi.Configurables", that can also be used as in:

     import Gaudi.Configurables as cfgs
     cfgs.MyConf

   The exception for missing configurables can be disabled with

     import Gaudi.Configurables
     Gaudi.Configurables.ignoreMissingConfigurables = True

   (done by default in genconfuser.py for backward compatibility).

! 2009-07-20 - Marco Clemencic
 - Moved the use of tcmalloc from Gaudi to GaudiPolicy to make it available
   everywhere.

================ Gaudi v21r3 ====================================
================ Gaudi v21r2 ====================================
! 2009-06-25 - Marco Clemencic
 - Added support for tcmalloc (via LD_PRELOAD) in gaudirun.py (option -T/--tcmalloc).

! 2009-06-15 - Hubert Degaudenzi
 - use the new LCG tag convention.

! 2009-05-25 - Marco Clemencic
 - Fixed bug #45517: Units not taken into account in .opts files
   Added the function importUnits() to populate from python the units used in a
   .opts file.
   Added a test for the new function.

================ Gaudi v21r1 ====================================
================ Gaudi v21r0 ====================================
! 2009-04-08 - Wouter Hulsbergen
 - Added '--printsequence' to gaudirun.py to print the sequence of algorithms
   after the configuration.

! 2009-01-29 - Marco Clemencic
 - Symbol visibility
   - Updated main.cpp to use the new GAUDI_IMPORT macro.

================ Gaudi v20r4 ====================================
! 2008-12-16 - Marco Clemencic
 - Fixed bug #45392: gaudrun.py returns status code 0 even if the application
                     manager fails
   The return code of AppMgr.run is now correctly propagated.

! 2008-12-15 - Marco Clemencic
 - Added a test for the passive "depedency" of ConfigurableUser.

! 2008-12-05 - Marco Clemencic
 - Added a test for the new logic of ConfigurableUser.propagateProperty.

================ Gaudi v20r3 ====================================
! 2008-11-04 - Marco Clemencic
 - Improvements in gaudirun.py:
   - Added command line option --post-option to accept (single line) options to
     be executed after the apply of ConfigurableUser.
   - Modified --option to allow execution of the option in the actual position
     on the command line with respect to the option files.
   - Added --debug to enable some debugging print-out in gaudirun.py and in the
     Configurables.

! 2008-11-03 - Marco Clemencic
 - Added the function Gaudi.Configuration.getConfigurable to simplify the
   creation of configurable instances. If a configurable wit the give name
   exists it is returned, otherwise it is created using the name as its type or
   the specified type.

! 2008-10-30 - Marco Clemencic
 - Extended gaudirun.py to use the automatic apply of ConfigurableUser.
 - Adde the options:
   --output (to replace -p and allow dump to file in python or old options)
   --no-conf-user-apply (to disable the automatic apply of ConfigurableUser)

! 2008-10-23 - Marco Clemencic
 - Added a test for bug #42428 (properties of clones are not cloned).
 - Added the directory tests/python for modules needed for the tests
   - added a fake configurable MyToolTest into the new directory
 - Added a test for bug #43065 (Error when unpickling GaudiHandles) using the
   fake configurable MyToolTest, within a more generic (in principle) test for
   pickling (gaudi.pickle_write) and unpickling (gaudi.pickle_read).

! 2008-10-21 - Marco Clemencic
 - Minor changes in gaudirun.py to make use of the improvements in
   GaudiKernel.ProcessJobOptions.

! 2008-10-17 - Marco Clemencic
 - Fixed bug #39846. gaudirun.py creates invalid entries in flattened options
   - Use only the configurables that pass the filter "getNeededConfigurables"
     (from GaudiKernel.Proxy.Configurable) to generate pickle file or dump.
   - Added test (gaudi.bug_39846).

! 2008-08-06 - Marco Clemencic
 - Added a test for bug #39809 (wrong configuration of public tools).

! 2008-08-05 - Marco Clemencic
 - Fixed bug #39116. gaudirun.py export to old options prints '#' instead of '//'
   The fix required a review of the way messages are printed across the whole
   Configurables machinery. The Python standard logging module is now used and
   the customization in GaudiKernel.Logging has been removed.
   In printout in Python job option files should be done with the log instance
   accessible from Gaudi.Configuration.
 - Added a test for bug #39116 (gaudi.export_oldopts).

================ Gaudi v20r2 ====================================
================ Gaudi v20r1 ====================================
! 2008-06-25 - Marco Clemencic
 - Added tests for:
   - bug #38206: gaudirun.py fails to set a list property from a property
                 reference.
   - bug #38194: gaudirun.py expands too many environment variables.

================ Gaudi v20r0 ====================================
! 2008-06-13 - Marco Clemencic
 - Apply the pattern ProjectVersionHeader to generate the GAUDI_VERSION.h file.
   Added the version.cmt file too, so that the pattern works without version
   directory.

! 2008-06-05 - Marco Clemencic
 - Added tests for:
   - Bug #36742: Cannot pickle options using "PropertyReference"
   - Bug #37479: gaudirun.py fails parsing old option lines with comments
                 and quotes.
   - Bug #37488: importOptions does not expand environment variables.
   - Bug #35347: Cannot import 2 Python option files with the same name.
   - Bug #34769: Assigning a configurable to a list property does not fail.
 - Added Windows batch wrapper for gaudirun.py (gaudirun.bat).
 - Added to the command line option "--option" to gaudirun.py.
   It allows to specify Python lines to be executed after the standard
   configuration to modify it. E.g.:

     gaudirun.py default.py --option "MessageSvc().OutputLevel = DEBUG"

   A test has been added too (gaudi.cmdline_conf).

================ Gaudi v19r9 ====================================
! 2008-04-04 - Marco Clemencic
 - Bug #35201. Python options parser '//' interpreted as comment in strings.
   Added a test for the bug.

! 2008-03-07 - Marco Clemencic
 - Fixed Bug #34046. False warning when mixing Python options and old options.
   Improved the test on case sensitivity to expose the bug (if present).

! 2008-03-06 - Marco Clemencic
 - Modified Gaudi.Main.gaudimain to use the environment variables GAUDIAPPNAME
   and GAUDIAPPVERSION to set the default values for the ApplicationMgr
   properties AppName and AppVersion.

================ Gaudi v19r8 ====================================
! 2008-02-11 - Marco Clemencic
 - Added aliases for the configurables FileCatalog (Gaudi::MultiFileCatalog) and
   IODataManager (Gaudi::IODataManager).

! 2008-02-08 - Marco Clemencic
 - Modified python/Gaudi/CommonGaudiConfigurables.py to ignore missing packages,
   essentially to allow the import of Gaudi.Configuration when GaudiPoolDb is
   missing.

================ Gaudi v19r7 ====================================
! 2008-01-11 - Marco Clemencic
 - Added a test to check the late-bound references in old options
   (e.g. "MyAlg.MyProp = @AnotherAlg.AProp;").
 - Added a simple test for properties with wrong cases in (old) job options.

! 2008-01-09 - Marco Clemencic
 - Added a test to check the conversion between configurables and strings.

================ Gaudi v19r6 ====================================
! 2007-11-16 - Marco Clemencic
 - Added a couple of tests for the correct overriding of mixed options (exposing
   a bug fixed in GaudiKernel).

! 2007-11-14 - Marco Clemencic
 - Added a test for the function GaudiKernel.Configurable.purge.

! 2007-11-12 - Marco Clemencic
 - Moved the *.qmt files to the implicit suite (directory) "gaudi.qms".

! 2007-11-01 - Marco Clemencic
 - Added the function Gaudi.Configuration.configurationDict to produce the
   dictionary of configurations.
 - Minor changes in the command line options for gaudirun.py:
   - short option for "--dry-run" in now "-n"
   - the configuration is printed as dictionary by default and the old format is
     activated with the option "--old-opts" (removed "--opts-dict")
 - Added tests for the job option parser.
 - Moved "importOptions" from Gaudi.Configuration to
   GaudiKernel.ProcessJobOptions. The function is still accessible from
   Gaudi.Configuration (from Gaudi.Configuration import importOptions).

! 2007-10-29 - Marco Clemencic
 - Moved the command line logic from the class Gaudi.Main.gaudimain to the
   script gaudirun.py, using optparse instead of getopt.
 - Added an option to format the dump of the computed properties as a Python
   dictionary (formatted such that it can be evaluated in Python).
 - Renamed some command line options.
 - The different behaviors depending on the file name extension, are delegated
   to Configuration.importOptions().

! 2007-10-29 - Pere Mato
 - Adapted to new GaudiPython structure

==================== Gaudi v19r5 ======================================
! 2007-10-10 - Pere Mato
 - Added GaudiRun alias to "gaudirun.py"

! 2007-10-02 - Pere Mato
 Patch #1400:  Support for configuration in Python pickle files

! 2007-09-28 - Pere Mato
 - Renamed the meta module containing common configurables from ConfDb to
   Configurables.

! 2007-09-24 - Hubert Degaudenzi
 - changed back Configurables.py into Configurable.py (it was
   a mistake)

! 2007-09-21 - Hubert Degaudenzi
 - New package to contain the main part of the Gaudi application.
   Moved the necessary parts from GaudiKernel.