diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index dccad1adaf2d9b05733c35d0165a8052cf35c1ef..69b00809c99a9893555fc7e61d45a4c4b427364f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -52,8 +52,10 @@ default: - .ccache .build-check: &template_build_check + variables: + LOG: build/build.log script: - - ci-utils/build-check build/build.log + - ci-utils/build-check ${LOG} allow_failure: true .test: &template_test @@ -77,6 +79,25 @@ default: when: always expire_in: 1 week +.test_headers: &template_test_headers + tags: + - cvmfs + script: + - export CCACHE_DIR=$PWD/.ccache_headers + - find build -type f -exec touch -d $(date +@%s) \{} \; # not to re-run cmake + - ccache -z + - cmake --build build --target test_public_headers_build 2>&1 | tee build/test_public_headers_build.log + - ccache -s + artifacts: + paths: + - build/test_public_headers_build.log + when: always + expire_in: 1 week + cache: + key: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG" + paths: + - .ccache_headers + ### Build x86_64-centos7-gcc11-opt: @@ -135,12 +156,24 @@ x86_64-centos7-gcc11-opt:test: - job: "x86_64-centos7-gcc11-opt" artifacts: true +x86_64-centos7-gcc11-opt:test_headers: + <<: *template_test_headers + needs: + - job: "x86_64-centos7-gcc11-opt" + artifacts: true + x86_64-centos7-gcc11-dbg:test: <<: *template_test needs: - job: "x86_64-centos7-gcc11-dbg" artifacts: true +x86_64-centos7-gcc11-dbg:test_headers: + <<: *template_test_headers + needs: + - job: "x86_64-centos7-gcc11-dbg" + artifacts: true + view-gcc8:test: <<: *template_test needs: @@ -189,6 +222,22 @@ x86_64-centos7-gcc11-dbg:build-check: - job: "x86_64-centos7-gcc11-dbg" artifacts: true +x86_64-centos7-gcc11-opt:build-headers-check: + <<: *template_build_check + variables: + LOG: build/test_public_headers_build.log + needs: + - job: "x86_64-centos7-gcc11-opt:test_headers" + artifacts: true + +x86_64-centos7-gcc11-dbg:build-headers-check: + <<: *template_build_check + variables: + LOG: build/test_public_headers_build.log + needs: + - job: "x86_64-centos7-gcc11-dbg:test_headers" + artifacts: true + view-gcc8:build-check: <<: *template_build_check needs: diff --git a/CMakeLists.txt b/CMakeLists.txt index 8923c373c27bbeca3cfbd9c0108a5158efe1628f..959b0e6ee4a559a61f9d49e7edb885209fce5c18 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -194,6 +194,7 @@ install(EXPORT ${PROJECT_NAME} NAMESPACE ${PROJECT_NAME}:: DESTINATION "${GAUDI_INSTALL_CONFIGDIR}") # Install cmake files for downstream project to be able to use Gaudi gaudi_install(CMAKE cmake/GaudiToolbox.cmake + cmake/header_build_test.tpl cmake/GaudiDependencies.cmake cmake/DeveloperBuildType.cmake "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" diff --git a/GaudiAlg/include/GaudiAlg/FunctionalTool.h b/GaudiAlg/include/GaudiAlg/FunctionalTool.h index 4110c63233ac916042e8774a7130c78c92b420fd..1cc28ec430a82ce44924084290449ff58dfd477d 100644 --- a/GaudiAlg/include/GaudiAlg/FunctionalTool.h +++ b/GaudiAlg/include/GaudiAlg/FunctionalTool.h @@ -9,6 +9,7 @@ * or submit itself to any jurisdiction. * \*****************************************************************************/ #include "GaudiAlg/FunctionalDetails.h" +#include "GaudiAlg/FunctionalUtilities.h" #include "GaudiKernel/IBinder.h" #define GAUDI_FUNCTIONAL_TOOL_BINDER_USES_CREATE diff --git a/GaudiCommonSvc/CMakeLists.txt b/GaudiCommonSvc/CMakeLists.txt index d1fa2eb5ba54d51341d8d64ddfbd88a0e4ba050a..0fc495d0287ccee882584865286bc6c16370b4bc 100644 --- a/GaudiCommonSvc/CMakeLists.txt +++ b/GaudiCommonSvc/CMakeLists.txt @@ -24,6 +24,7 @@ if(GAUDI_USE_AIDA) PUBLIC GaudiKernel Boost::system Boost::filesystem + Rangev3::rangev3 ROOT::Hist ROOT::RIO AIDA::aida) diff --git a/GaudiHive/CMakeLists.txt b/GaudiHive/CMakeLists.txt index e722717dd4e70d656708a5a6fed3c64ee43a2721..3c014e5b1634912966e479343a97b64d813ce589 100644 --- a/GaudiHive/CMakeLists.txt +++ b/GaudiHive/CMakeLists.txt @@ -10,9 +10,6 @@ ##################################################################################### # GaudiHive subdirectory -# Register the header only library (install include/) -gaudi_add_header_only_library(GaudiHiveHeaders) - # Build the plugin gaudi_add_module(GaudiHive SOURCES src/AlgResourcePool.cpp @@ -37,8 +34,7 @@ gaudi_add_module(GaudiHive src/ThreadPoolSvc.cpp src/TimelineSvc.cpp src/ViewTester.cpp - LINK GaudiHiveHeaders - GaudiKernel + LINK GaudiKernel GaudiAlgLib Boost::headers Boost::system diff --git a/GaudiHive/src/HiveSlimEventLoopMgr.cpp b/GaudiHive/src/HiveSlimEventLoopMgr.cpp index c8c728ad395f980173d6581fd8b59144ea0adfe0..9bef7f80b7622ebf40947c8fd423c7645bbf4359 100644 --- a/GaudiHive/src/HiveSlimEventLoopMgr.cpp +++ b/GaudiHive/src/HiveSlimEventLoopMgr.cpp @@ -9,7 +9,7 @@ * or submit itself to any jurisdiction. * \***********************************************************************************/ // Local includes -#include "GaudiHive/HiveSlimEventLoopMgr.h" +#include "HiveSlimEventLoopMgr.h" #include "HistogramAgent.h" // Framework includes diff --git a/GaudiHive/include/GaudiHive/HiveSlimEventLoopMgr.h b/GaudiHive/src/HiveSlimEventLoopMgr.h similarity index 100% rename from GaudiHive/include/GaudiHive/HiveSlimEventLoopMgr.h rename to GaudiHive/src/HiveSlimEventLoopMgr.h diff --git a/GaudiHive/src/HiveTestAlgorithm.cpp b/GaudiHive/src/HiveTestAlgorithm.cpp index 695d6904e5de510711e38202f0fcdb5e25f9d80b..c3bd940e9a9a1df7f3dfca925a3cd247cce25b87 100644 --- a/GaudiHive/src/HiveTestAlgorithm.cpp +++ b/GaudiHive/src/HiveTestAlgorithm.cpp @@ -8,7 +8,7 @@ * granted to it by virtue of its status as an Intergovernmental Organization * * or submit itself to any jurisdiction. * \***********************************************************************************/ -#include "GaudiHive/HiveTestAlgorithm.h" +#include "HiveTestAlgorithm.h" #include "GaudiKernel/MsgStream.h" #include "GaudiKernel/ThreadLocalContext.h" diff --git a/GaudiHive/include/GaudiHive/HiveTestAlgorithm.h b/GaudiHive/src/HiveTestAlgorithm.h similarity index 100% rename from GaudiHive/include/GaudiHive/HiveTestAlgorithm.h rename to GaudiHive/src/HiveTestAlgorithm.h diff --git a/GaudiKernel/include/GaudiKernel/AlgFactory.h b/GaudiKernel/include/GaudiKernel/AlgFactory.h deleted file mode 100644 index 11eea60e2a3d68fdfdb2d6ea4676955e7c1d652b..0000000000000000000000000000000000000000 --- a/GaudiKernel/include/GaudiKernel/AlgFactory.h +++ /dev/null @@ -1,16 +0,0 @@ -/***********************************************************************************\ -* (c) Copyright 1998-2019 CERN for the benefit of the LHCb and ATLAS collaborations * -* * -* This software is distributed under the terms of the Apache version 2 licence, * -* copied verbatim in the file "LICENSE". * -* * -* In applying this licence, CERN does not waive the privileges and immunities * -* granted to it by virtue of its status as an Intergovernmental Organization * -* or submit itself to any jurisdiction. * -\***********************************************************************************/ -#ifndef GAUDIKERNEL_ALGFACTORY_H -#define GAUDIKERNEL_ALGFACTORY_H - -#warning "obsolete empty header, please remove it" - -#endif // GAUDIKERNEL_ALGFACTORY_H diff --git a/GaudiKernel/include/GaudiKernel/AudFactory.h b/GaudiKernel/include/GaudiKernel/AudFactory.h deleted file mode 100644 index ee8a5a469aede7171a6438fbbc0a782ec765c673..0000000000000000000000000000000000000000 --- a/GaudiKernel/include/GaudiKernel/AudFactory.h +++ /dev/null @@ -1,16 +0,0 @@ -/***********************************************************************************\ -* (c) Copyright 1998-2019 CERN for the benefit of the LHCb and ATLAS collaborations * -* * -* This software is distributed under the terms of the Apache version 2 licence, * -* copied verbatim in the file "LICENSE". * -* * -* In applying this licence, CERN does not waive the privileges and immunities * -* granted to it by virtue of its status as an Intergovernmental Organization * -* or submit itself to any jurisdiction. * -\***********************************************************************************/ -#ifndef GAUDIKERNEL_AUDFACTORY_H -#define GAUDIKERNEL_AUDFACTORY_H - -#warning "obsolete empty header, please remove it" - -#endif // GAUDIKERNEL_AUDFACTORY_H diff --git a/GaudiKernel/include/GaudiKernel/CnvFactory.h b/GaudiKernel/include/GaudiKernel/CnvFactory.h deleted file mode 100644 index a468ea9bdb4bb504a3c164205feab91a935b4b90..0000000000000000000000000000000000000000 --- a/GaudiKernel/include/GaudiKernel/CnvFactory.h +++ /dev/null @@ -1,16 +0,0 @@ -/***********************************************************************************\ -* (c) Copyright 1998-2019 CERN for the benefit of the LHCb and ATLAS collaborations * -* * -* This software is distributed under the terms of the Apache version 2 licence, * -* copied verbatim in the file "LICENSE". * -* * -* In applying this licence, CERN does not waive the privileges and immunities * -* granted to it by virtue of its status as an Intergovernmental Organization * -* or submit itself to any jurisdiction. * -\***********************************************************************************/ -#ifndef GAUDIKERNEL_CNVFACTORY_H -#define GAUDIKERNEL_CNVFACTORY_H - -#warning "obsolete empty header, please remove it" - -#endif // GAUDIKERNEL_CNVFACTORY_H diff --git a/GaudiKernel/include/GaudiKernel/Counters.h b/GaudiKernel/include/GaudiKernel/Counters.h deleted file mode 100644 index 5e5da440429e414e1f3317fe397a167a24018954..0000000000000000000000000000000000000000 --- a/GaudiKernel/include/GaudiKernel/Counters.h +++ /dev/null @@ -1,15 +0,0 @@ -/***********************************************************************************\ -* (c) Copyright 1998-2019 CERN for the benefit of the LHCb and ATLAS collaborations * -* * -* This software is distributed under the terms of the Apache version 2 licence, * -* copied verbatim in the file "LICENSE". * -* * -* In applying this licence, CERN does not waive the privileges and immunities * -* granted to it by virtue of its status as an Intergovernmental Organization * -* or submit itself to any jurisdiction. * -\***********************************************************************************/ -#include <GAUDI_VERSION.h> -#if GAUDI_VERSION >= CALC_GAUDI_VERSION( 33, 0 ) && GAUDI_MAJOR_VERSION < 999 -# pragma message "warning: deprecated header, use <Gaudi/Accumulators.h> instead" -#endif -#include <Gaudi/Accumulators.h> diff --git a/GaudiKernel/include/GaudiKernel/DeclareFactoryEntries.h b/GaudiKernel/include/GaudiKernel/DeclareFactoryEntries.h deleted file mode 100644 index 5a969d51299eac7680aa0f129aa82a9b666175e5..0000000000000000000000000000000000000000 --- a/GaudiKernel/include/GaudiKernel/DeclareFactoryEntries.h +++ /dev/null @@ -1,16 +0,0 @@ -/***********************************************************************************\ -* (c) Copyright 1998-2019 CERN for the benefit of the LHCb and ATLAS collaborations * -* * -* This software is distributed under the terms of the Apache version 2 licence, * -* copied verbatim in the file "LICENSE". * -* * -* In applying this licence, CERN does not waive the privileges and immunities * -* granted to it by virtue of its status as an Intergovernmental Organization * -* or submit itself to any jurisdiction. * -\***********************************************************************************/ -#ifndef GAUDIKERNEL_DECLAREFACTORYENTRIES_H -#define GAUDIKERNEL_DECLAREFACTORYENTRIES_H 1 - -#warning "obsolete empty header, please remove it" - -#endif // GAUDIKERNEL_DECLAREFACTORYENTRIES_H diff --git a/GaudiKernel/include/GaudiKernel/Property.h b/GaudiKernel/include/GaudiKernel/Property.h deleted file mode 100644 index 0aae2ee0894730b6265340aedb74b93a19157e8c..0000000000000000000000000000000000000000 --- a/GaudiKernel/include/GaudiKernel/Property.h +++ /dev/null @@ -1,35 +0,0 @@ -/***********************************************************************************\ -* (c) Copyright 1998-2019 CERN for the benefit of the LHCb and ATLAS collaborations * -* * -* This software is distributed under the terms of the Apache version 2 licence, * -* copied verbatim in the file "LICENSE". * -* * -* In applying this licence, CERN does not waive the privileges and immunities * -* granted to it by virtue of its status as an Intergovernmental Organization * -* or submit itself to any jurisdiction. * -\***********************************************************************************/ -#pragma once - -#include <GAUDI_VERSION.h> - -#if GAUDI_MAJOR_VERSION < 999 -# if GAUDI_VERSION >= CALC_GAUDI_VERSION( 35, 0 ) -# error "deprecated header: removed in v35r0, use <Gaudi/Property.h>" -# elif GAUDI_VERSION >= CALC_GAUDI_VERSION( 34, 0 ) -# warning "deprecated header: to be removed in v35r0, use <Gaudi/Property.h>" -# endif -#endif - -#include <Gaudi/Property.h> - -/// \fixme backward compatibility hack for old Property base class -using Property - //[[deprecated("use Gaudi::Details::PropertyBase instead")]] - = Gaudi::Details::PropertyBase; - -/// \fixme backward compatibility hack for PropertyWithValue -template <class TYPE, class VERIFIER = Gaudi::Details::Property::NullVerifier, - class HANDLERS = Gaudi::Details::Property::UpdateHandler> -using PropertyWithValue - //[[deprecated("use Gaudi::Property instead")]] - = Gaudi::Property<TYPE, VERIFIER, HANDLERS>; diff --git a/GaudiKernel/include/GaudiKernel/PropertyFwd.h b/GaudiKernel/include/GaudiKernel/PropertyFwd.h deleted file mode 100644 index 0ceac16729c71a7117f0fcd206a10e4830a0767c..0000000000000000000000000000000000000000 --- a/GaudiKernel/include/GaudiKernel/PropertyFwd.h +++ /dev/null @@ -1,23 +0,0 @@ -/***********************************************************************************\ -* (c) Copyright 1998-2019 CERN for the benefit of the LHCb and ATLAS collaborations * -* * -* This software is distributed under the terms of the Apache version 2 licence, * -* copied verbatim in the file "LICENSE". * -* * -* In applying this licence, CERN does not waive the privileges and immunities * -* granted to it by virtue of its status as an Intergovernmental Organization * -* or submit itself to any jurisdiction. * -\***********************************************************************************/ -#pragma once - -#include <GAUDI_VERSION.h> - -#if GAUDI_MAJOR_VERSION < 999 -# if GAUDI_VERSION >= CALC_GAUDI_VERSION( 35, 0 ) -# error "deprecated header: removed in v35r0, use <Gaudi/PropertyFwd.h>" -# elif GAUDI_VERSION >= CALC_GAUDI_VERSION( 34, 0 ) -# warning "deprecated header: to be removed in v35r0, use <Gaudi/PropertyFwd.h>" -# endif -#endif - -#include <Gaudi/PropertyFwd.h> diff --git a/GaudiKernel/include/GaudiKernel/PropertyList.h b/GaudiKernel/include/GaudiKernel/PropertyList.h deleted file mode 100644 index abeffe78445be2ab270830dc5cdd146fb673178f..0000000000000000000000000000000000000000 --- a/GaudiKernel/include/GaudiKernel/PropertyList.h +++ /dev/null @@ -1,66 +0,0 @@ -/***********************************************************************************\ -* (c) Copyright 1998-2019 CERN for the benefit of the LHCb and ATLAS collaborations * -* * -* This software is distributed under the terms of the Apache version 2 licence, * -* copied verbatim in the file "LICENSE". * -* * -* In applying this licence, CERN does not waive the privileges and immunities * -* granted to it by virtue of its status as an Intergovernmental Organization * -* or submit itself to any jurisdiction. * -\***********************************************************************************/ -#ifndef GAUDIKERNEL_PROPERTYLIST_H -#define GAUDIKERNEL_PROPERTYLIST_H - -// Include Files -#include "GaudiKernel/IProperty.h" -#include "Property.h" -#include <vector> - -/** @class PropertyList PropertyList.h GaudiKernel/PropertyList.h - - List of properties. - - @author David Quarrie - @author Pere Mato -*/ -class GAUDI_API PropertyList : public Property { -public: - /// Constructor - PropertyList(); - /// Constructor giving a name - PropertyList( const std::string& name ); - /// Virtual destructor - virtual ~PropertyList(); - - /// Accessor members (const) - bool isRef() const { return false; } - - /// Add a property to the list - void addProperty( const std::string& name, Property& p ); - /// Add a property to the list - void addProperty( Property& p ); - /// Remove a property from the list - void removeProperty( const std::string& name ); - /// Remove a property from the list - void removeProperty( Property& p ); - - /// Property implementation: set property - bool assign( const Property& p ) override; - /// Property implementation: get property - bool load( Property& p ) const override; - - /// Property implementation: set property - bool assign( const std::string& name, const Property& p ); - /// Property implementation: get property - bool load( const std::string& name, Property& p ) const; - - /// Get the property with a given name - const Property& getProperty( std::string_view name ) const; - /// Get the complete list of properties - const std::vector<Property*>& getProperties() const; - -private: - std::vector<Property*> m_propertyList; -}; - -#endif // GAUDIKERNEL_PROPERTYLIST_H diff --git a/GaudiKernel/include/GaudiKernel/PropertyTypeTraits.h b/GaudiKernel/include/GaudiKernel/PropertyTypeTraits.h deleted file mode 100644 index 0ba37f61453ad0ead921cc5c116562d51738c5b4..0000000000000000000000000000000000000000 --- a/GaudiKernel/include/GaudiKernel/PropertyTypeTraits.h +++ /dev/null @@ -1,11 +0,0 @@ -/***********************************************************************************\ -* (c) Copyright 1998-2019 CERN for the benefit of the LHCb and ATLAS collaborations * -* * -* This software is distributed under the terms of the Apache version 2 licence, * -* copied verbatim in the file "LICENSE". * -* * -* In applying this licence, CERN does not waive the privileges and immunities * -* granted to it by virtue of its status as an Intergovernmental Organization * -* or submit itself to any jurisdiction. * -\***********************************************************************************/ -#warning deprecated header, do not use it (will be removed in Gaudi v29r0) diff --git a/GaudiKernel/include/GaudiKernel/PropertyVerifier.h b/GaudiKernel/include/GaudiKernel/PropertyVerifier.h deleted file mode 100644 index 0ba37f61453ad0ead921cc5c116562d51738c5b4..0000000000000000000000000000000000000000 --- a/GaudiKernel/include/GaudiKernel/PropertyVerifier.h +++ /dev/null @@ -1,11 +0,0 @@ -/***********************************************************************************\ -* (c) Copyright 1998-2019 CERN for the benefit of the LHCb and ATLAS collaborations * -* * -* This software is distributed under the terms of the Apache version 2 licence, * -* copied verbatim in the file "LICENSE". * -* * -* In applying this licence, CERN does not waive the privileges and immunities * -* granted to it by virtue of its status as an Intergovernmental Organization * -* or submit itself to any jurisdiction. * -\***********************************************************************************/ -#warning deprecated header, do not use it (will be removed in Gaudi v29r0) diff --git a/GaudiKernel/include/GaudiKernel/RefTable.h b/GaudiKernel/include/GaudiKernel/RefTable.h deleted file mode 100644 index b16b3624eeceeb77ff0ac52b4a4f3e9081bf356f..0000000000000000000000000000000000000000 --- a/GaudiKernel/include/GaudiKernel/RefTable.h +++ /dev/null @@ -1,18 +0,0 @@ -/***********************************************************************************\ -* (c) Copyright 1998-2019 CERN for the benefit of the LHCb and ATLAS collaborations * -* * -* This software is distributed under the terms of the Apache version 2 licence, * -* copied verbatim in the file "LICENSE". * -* * -* In applying this licence, CERN does not waive the privileges and immunities * -* granted to it by virtue of its status as an Intergovernmental Organization * -* or submit itself to any jurisdiction. * -\***********************************************************************************/ -#ifndef GAUDIKERNEL_REFTABLE_H -#define GAUDIKERNEL_REFTABLE_H 1 - -#ifndef GAUDI_TEST_PUBLIC_HEADERS_BUILD -# warning Obsolete header file. -#endif // GAUDI_TEST_PUBLIC_HEADERS_BUILD - -#endif // GAUDIKERNEL_REFTABLE_H diff --git a/GaudiKernel/include/GaudiKernel/SerializeSTLFwd.h b/GaudiKernel/include/GaudiKernel/SerializeSTLFwd.h deleted file mode 100644 index 102f553d61ade5ea77ff9a10a43538da3e43a2fa..0000000000000000000000000000000000000000 --- a/GaudiKernel/include/GaudiKernel/SerializeSTLFwd.h +++ /dev/null @@ -1,12 +0,0 @@ -/***********************************************************************************\ -* (c) Copyright 1998-2019 CERN for the benefit of the LHCb and ATLAS collaborations * -* * -* This software is distributed under the terms of the Apache version 2 licence, * -* copied verbatim in the file "LICENSE". * -* * -* In applying this licence, CERN does not waive the privileges and immunities * -* granted to it by virtue of its status as an Intergovernmental Organization * -* or submit itself to any jurisdiction. * -\***********************************************************************************/ -#include "GaudiKernel/SerializeSTL.h" -#warning "obsolete header, please use \"GaudiKernel/SerializeSTL.h\" instead" diff --git a/GaudiKernel/include/GaudiKernel/SvcFactory.h b/GaudiKernel/include/GaudiKernel/SvcFactory.h deleted file mode 100644 index a799f2f67cc25826d79a0598f30ae6c086046fdd..0000000000000000000000000000000000000000 --- a/GaudiKernel/include/GaudiKernel/SvcFactory.h +++ /dev/null @@ -1,16 +0,0 @@ -/***********************************************************************************\ -* (c) Copyright 1998-2019 CERN for the benefit of the LHCb and ATLAS collaborations * -* * -* This software is distributed under the terms of the Apache version 2 licence, * -* copied verbatim in the file "LICENSE". * -* * -* In applying this licence, CERN does not waive the privileges and immunities * -* granted to it by virtue of its status as an Intergovernmental Organization * -* or submit itself to any jurisdiction. * -\***********************************************************************************/ -#ifndef KERNEL_SVCFACTORY_H -#define KERNEL_SVCFACTORY_H - -#warning "obsolete empty header, please remove it" - -#endif // GAUDIKERNEL_SVCFACTORY_H diff --git a/GaudiKernel/include/GaudiKernel/ToolFactory.h b/GaudiKernel/include/GaudiKernel/ToolFactory.h deleted file mode 100644 index 9148370148949543ce868eeab783cc4b55769c7a..0000000000000000000000000000000000000000 --- a/GaudiKernel/include/GaudiKernel/ToolFactory.h +++ /dev/null @@ -1,16 +0,0 @@ -/***********************************************************************************\ -* (c) Copyright 1998-2019 CERN for the benefit of the LHCb and ATLAS collaborations * -* * -* This software is distributed under the terms of the Apache version 2 licence, * -* copied verbatim in the file "LICENSE". * -* * -* In applying this licence, CERN does not waive the privileges and immunities * -* granted to it by virtue of its status as an Intergovernmental Organization * -* or submit itself to any jurisdiction. * -\***********************************************************************************/ -#ifndef GAUDI_KERNEL_TOOLFACTORY_H -#define GAUDI_KERNEL_TOOLFACTORY_H - -#warning "obsolete empty header, please remove it" - -#endif // GAUDI_KERNEL_TOOLFACTORY_H diff --git a/GaudiKernel/include/GaudiKernel/apply.h b/GaudiKernel/include/GaudiKernel/apply.h deleted file mode 100644 index 4185f9affe1e5d744298a4aec6379882ecba11ff..0000000000000000000000000000000000000000 --- a/GaudiKernel/include/GaudiKernel/apply.h +++ /dev/null @@ -1,18 +0,0 @@ -/***********************************************************************************\ -* (c) Copyright 1998-2019 CERN for the benefit of the LHCb and ATLAS collaborations * -* * -* This software is distributed under the terms of the Apache version 2 licence, * -* copied verbatim in the file "LICENSE". * -* * -* In applying this licence, CERN does not waive the privileges and immunities * -* granted to it by virtue of its status as an Intergovernmental Organization * -* or submit itself to any jurisdiction. * -\***********************************************************************************/ -#ifndef GAUDIKERNEL_APPLY_H -#define GAUDIKERNEL_APPLY_H -#warning "Obsolete header, please use std::apply" -#include <tuple> -namespace Gaudi { - using std::apply; -} -#endif diff --git a/GaudiKernel/include/GaudiKernel/invoke.h b/GaudiKernel/include/GaudiKernel/invoke.h deleted file mode 100644 index 017f7563021c761e8cd40ab65a2505f64339a473..0000000000000000000000000000000000000000 --- a/GaudiKernel/include/GaudiKernel/invoke.h +++ /dev/null @@ -1,20 +0,0 @@ -/***********************************************************************************\ -* (c) Copyright 1998-2019 CERN for the benefit of the LHCb and ATLAS collaborations * -* * -* This software is distributed under the terms of the Apache version 2 licence, * -* copied verbatim in the file "LICENSE". * -* * -* In applying this licence, CERN does not waive the privileges and immunities * -* granted to it by virtue of its status as an Intergovernmental Organization * -* or submit itself to any jurisdiction. * -\***********************************************************************************/ -#ifndef GAUDIKERNEL_INVOKE_H -#define GAUDIKERNEL_INVOKE_H -#include <functional> - -#warning "Obsolete header, please use std::invoke" - -namespace Gaudi { - using std::invoke; -} -#endif diff --git a/GaudiProfiling/CMakeLists.txt b/GaudiProfiling/CMakeLists.txt index 5cf98ce56425b2e4f9758bad4838656be1c3f771..a3da42da5e3ecf1987c1c5ac8ff4e843aab928ad 100644 --- a/GaudiProfiling/CMakeLists.txt +++ b/GaudiProfiling/CMakeLists.txt @@ -122,8 +122,6 @@ if(GAUDI_USE_JEMALLOC) COMMAND run ${CMAKE_COMMAND} -E env LD_PRELOAD=$<TARGET_PROPERTY:jemalloc::jemalloc,LOCATION> gaudirun.py) endif() -# Register the header only library (install include/) -gaudi_add_header_only_library(GaudiProfilingHeaders) # Install python modules gaudi_install(PYTHON) # Install other scripts diff --git a/GaudiProfiling/include/GaudiProfiling/PfmCodeAnalyser.h b/GaudiProfiling/include/GaudiProfiling/PfmCodeAnalyser.h deleted file mode 100644 index 823eb661dd034d926f92d169eea381299d312b47..0000000000000000000000000000000000000000 --- a/GaudiProfiling/include/GaudiProfiling/PfmCodeAnalyser.h +++ /dev/null @@ -1,234 +0,0 @@ -/***********************************************************************************\ -* (c) Copyright 1998-2019 CERN for the benefit of the LHCb and ATLAS collaborations * -* * -* This software is distributed under the terms of the Apache version 2 licence, * -* copied verbatim in the file "LICENSE". * -* * -* In applying this licence, CERN does not waive the privileges and immunities * -* granted to it by virtue of its status as an Intergovernmental Organization * -* or submit itself to any jurisdiction. * -\***********************************************************************************/ -#ifndef PfmCodeAnalyserH -#define PfmCodeAnalyserH 1 - -#include <perfmon/perfmon.h> -#include <perfmon/perfmon_dfl_smpl.h> -#include <perfmon/pfmlib.h> -#include <perfmon/pfmlib_core.h> -#include <perfmon/pfmlib_intel_nhm.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <sys/types.h> -#include <unistd.h> - -#define MAX_EVT_NAME_LEN 256 -#define NUM_PMCS PFMLIB_MAX_PMCS -#define NUM_PMDS PFMLIB_MAX_PMDS -#define FMT_NAME PFM_DFL_SMPL_NAME -#define MAX_NUMBER_OF_PROGRAMMABLE_COUNTERS 4 -#define cpuid( func, eax, ebx, ecx, edx ) \ - __asm__ __volatile__( "cpuid" : "=a"( eax ), "=b"( ebx ), "=c"( ecx ), "=d"( edx ) : "a"( func ) ); - -class PfmCodeAnalyser { -private: - int used_counters_number; - int nehalem; - pfmlib_input_param_t inp; - pfmlib_output_param_t outp; - pfarg_ctx_t ctx; - pfarg_pmd_t pd[NUM_PMDS]; - pfarg_pmc_t pc[NUM_PMCS]; - pfarg_load_t load_arg; - int fd; - char event_str[MAX_NUMBER_OF_PROGRAMMABLE_COUNTERS][MAX_EVT_NAME_LEN]; - bool inv[MAX_NUMBER_OF_PROGRAMMABLE_COUNTERS]; - unsigned int cmask[MAX_NUMBER_OF_PROGRAMMABLE_COUNTERS]; - pfmlib_core_input_param_t params; - pfmlib_nhm_input_param_t nhm_params; - int ret; - unsigned i; - unsigned long sum[MAX_NUMBER_OF_PROGRAMMABLE_COUNTERS]; - unsigned count; - unsigned overhead_avg[MAX_NUMBER_OF_PROGRAMMABLE_COUNTERS]; - -private: - PfmCodeAnalyser( const char* event0, unsigned int cmask_v0, bool inv_v0, const char* event1, unsigned int cmask_v1, - bool inv_v1, const char* event2, unsigned int cmask_v2, bool inv_v2, const char* event3, - unsigned int cmask_v3, bool inv_v3 ); // constructor hidden - PfmCodeAnalyser( PfmCodeAnalyser const& ); // copy constructor hidden - PfmCodeAnalyser& operator=( PfmCodeAnalyser const& ); // assign operator hidden - ~PfmCodeAnalyser(); // destructor hidden - -public: - static PfmCodeAnalyser& Instance( const char* event0 = "UNHALTED_CORE_CYCLES", unsigned int cmask_v0 = 0, - bool inv_v0 = false, const char* event1 = "", unsigned int cmask_v1 = 0, - bool inv_v1 = false, const char* event2 = "", unsigned int cmask_v2 = 0, - bool inv_v2 = false, const char* event3 = "", unsigned int cmask_v3 = 0, - bool inv_v3 = false ); - void start(); - void stop(); - void stop_init(); -}; - -PfmCodeAnalyser::PfmCodeAnalyser( const char* event0, unsigned int cmask_v0, bool inv_v0, const char* event1, - unsigned int cmask_v1, bool inv_v1, const char* event2, unsigned int cmask_v2, - bool inv_v2, const char* event3, unsigned int cmask_v3, bool inv_v3 ) { - int ax, bx, cx, dx; - cpuid( 1, ax, bx, cx, dx ); - int sse4_2_mask = 1 << 20; - nehalem = cx & sse4_2_mask; - strcpy( event_str[0], event0 ); - strcpy( event_str[1], event1 ); - strcpy( event_str[2], event2 ); - strcpy( event_str[3], event3 ); - cmask[0] = cmask_v0; - cmask[1] = cmask_v1; - cmask[2] = cmask_v2; - cmask[3] = cmask_v3; - inv[0] = inv_v0; - inv[1] = inv_v1; - inv[2] = inv_v2; - inv[3] = inv_v3; - used_counters_number = 0; - for ( int i = 0; i < MAX_NUMBER_OF_PROGRAMMABLE_COUNTERS; i++ ) { - if ( strlen( event_str[i] ) > 0 ) used_counters_number++; - } - for ( int i = 0; i < used_counters_number; i++ ) { - sum[i] = 0; - overhead_avg[i] = 0; - } - count = 0; - if ( pfm_initialize() != PFMLIB_SUCCESS ) { - printf( "Cannot initialize perfmon!!\nExiting...\n" ); - exit( 0 ); - } - while ( count < 3 ) { - start(); - stop_init(); - } - for ( int i = 0; i < used_counters_number; i++ ) { sum[i] = 0; } - count = 0; - while ( count < 10 ) { - start(); - stop_init(); - } - for ( int i = 0; i < used_counters_number; i++ ) { - overhead_avg[i] = sum[i] / count; - sum[i] = 0; - } - count = 0; -} - -PfmCodeAnalyser& PfmCodeAnalyser::Instance( const char* event0, unsigned int cmask_v0, bool inv_v0, const char* event1, - unsigned int cmask_v1, bool inv_v1, const char* event2, - unsigned int cmask_v2, bool inv_v2, const char* event3, - unsigned int cmask_v3, bool inv_v3 ) { - static PfmCodeAnalyser theSingleton( event0, cmask_v0, inv_v0, event1, cmask_v1, inv_v1, event2, cmask_v2, inv_v2, - event3, cmask_v3, inv_v3 ); - return theSingleton; -} - -// start() -// initializes all the necessary structures to start the actual counting, calling pfm_start() -void PfmCodeAnalyser::start() { - memset( &ctx, 0, sizeof( ctx ) ); - memset( &inp, 0, sizeof( inp ) ); - memset( &outp, 0, sizeof( outp ) ); - memset( pd, 0, sizeof( pd ) ); - memset( pc, 0, sizeof( pc ) ); - memset( &load_arg, 0, sizeof( load_arg ) ); - memset( ¶ms, 0, sizeof( params ) ); - for ( int i = 0; i < used_counters_number; i++ ) { - ret = pfm_find_full_event( event_str[i], &inp.pfp_events[i] ); - if ( ret != PFMLIB_SUCCESS ) { - fprintf( stderr, "ERROR: cannot find event: %s\naborting...\n", event_str[i] ); - exit( 1 ); - } - } - inp.pfp_dfl_plm = PFM_PLM3; - inp.pfp_event_count = used_counters_number; - for ( int i = 0; i < used_counters_number; i++ ) { - if ( inv[i] ) { - ( params.pfp_core_counters[i] ).flags |= PFM_CORE_SEL_INV; - ( nhm_params.pfp_nhm_counters[i] ).flags |= PFM_NHM_SEL_INV; - } - if ( cmask[i] > 0 ) { - ( params.pfp_core_counters[i] ).cnt_mask = cmask[i]; - ( nhm_params.pfp_nhm_counters[i] ).cnt_mask = cmask[i]; - } - } - if ( nehalem ) { - ret = pfm_dispatch_events( &inp, &nhm_params, &outp, NULL ); - } else { - ret = pfm_dispatch_events( &inp, ¶ms, &outp, NULL ); - } - if ( ret != PFMLIB_SUCCESS ) { - fprintf( stderr, "ERROR: cannot dispatch events: %s\naborting...\n", pfm_strerror( ret ) ); - exit( 1 ); - } - for ( unsigned int i = 0; i < outp.pfp_pmc_count; i++ ) { - pc[i].reg_num = outp.pfp_pmcs[i].reg_num; - pc[i].reg_value = outp.pfp_pmcs[i].reg_value; - } - for ( unsigned int i = 0; i < outp.pfp_pmd_count; i++ ) { - pd[i].reg_num = outp.pfp_pmds[i].reg_num; - pd[i].reg_value = 0; - } - fd = pfm_create_context( &ctx, NULL, 0, 0 ); - if ( fd == -1 ) { - fprintf( stderr, "ERROR: Context not created\naborting...\n" ); - exit( 1 ); - } - if ( pfm_write_pmcs( fd, pc, outp.pfp_pmc_count ) == -1 ) { - fprintf( stderr, "ERROR: Could not write pmcs\naborting...\n" ); - exit( 1 ); - } - if ( pfm_write_pmds( fd, pd, outp.pfp_pmd_count ) == -1 ) { - fprintf( stderr, "ERROR: Could not write pmds\naborting...\n" ); - exit( 1 ); - } - load_arg.load_pid = getpid(); - if ( pfm_load_context( fd, &load_arg ) == -1 ) { - fprintf( stderr, "ERROR: Could not load context\naborting...\n" ); - exit( 1 ); - } - pfm_start( fd, NULL ); -} - -// stop() -// const ModuleDescription& desc : description of the module that just finished its execution (we are only interested in -// its name) -// stops the counting calling pfm_stop() and stores the counting results into the "results" map -void PfmCodeAnalyser::stop() { - pfm_stop( fd ); - if ( pfm_read_pmds( fd, pd, inp.pfp_event_count ) == -1 ) { - fprintf( stderr, "ERROR: Could not read pmds\naborting...\n" ); - exit( 1 ); - } - - for ( int i = 0; i < used_counters_number; i++ ) { sum[i] += ( pd[i].reg_value - overhead_avg[i] ); } - count++; - close( fd ); -} - -void PfmCodeAnalyser::stop_init() { - pfm_stop( fd ); - if ( pfm_read_pmds( fd, pd, inp.pfp_event_count ) == -1 ) { - fprintf( stderr, "ERROR: Could not read pmds\naborting...\n" ); - exit( 1 ); - } - - for ( int i = 0; i < used_counters_number; i++ ) { sum[i] += ( pd[i].reg_value ); } - count++; - close( fd ); -} - -PfmCodeAnalyser::~PfmCodeAnalyser() { - for ( int i = 0; i < used_counters_number; i++ ) { - printf( "Event: %s\nTotal count:%lu\nNumber of counts:%u\nAverage count:%f\nOverhead removed:%u\n", event_str[i], - sum[i], count, (double)sum[i] / count, overhead_avg[i] ); - } -} - -#endif // PfmCodeAnalyserH diff --git a/cmake/GaudiToolbox.cmake b/cmake/GaudiToolbox.cmake index 017c4616323c80018c37327d4de5d62bb7bf98ae..d1d1d78bc3a9e0d3bda0907832cf708fb8d83f2a 100644 --- a/cmake/GaudiToolbox.cmake +++ b/cmake/GaudiToolbox.cmake @@ -91,6 +91,8 @@ Functions include_guard(GLOBAL) # Protect from multiple include (global scope, because # everything defined in this file is globally visible) +set(GAUDI_TOOLBOX_DIR "${CMAKE_CURRENT_LIST_DIR}" CACHE PATH "Directory containing this file") + ################################ Global options ################################ # Option used to know if the install() function must be called with OPTIONAL @@ -110,6 +112,10 @@ endif() # Option to prefer local targets to imported ones option(GAUDI_PREFER_LOCAL_TARGETS "Prefer local targets over imported ones" FALSE) +option(GAUDI_TEST_PUBLIC_HEADERS_BUILD + "Execute a test build of all public headers in the global target 'all'" + FALSE) + # Default layout fo the installation (may be overridden in the cache) set(CMAKE_INSTALL_BINDIR "bin" CACHE STRING "Install executable in <prefix>/\${CMAKE_INSTALL_BINDIR}") set(CMAKE_INSTALL_LIBDIR "lib" CACHE STRING "Install libraries in <prefix>/\${CMAKE_INSTALL_LIBDIR}") @@ -118,7 +124,7 @@ set(GAUDI_INSTALL_PLUGINDIR "${CMAKE_INSTALL_LIBDIR}" CACHE STRING "Install plug set(GAUDI_INSTALL_PYTHONDIR "python" CACHE STRING "Install python packages in <prefix>/\${GAUDI_INSTALL_PYTHONDIR}") set(GAUDI_INSTALL_CONFIGDIR "lib/cmake/${PROJECT_NAME}" CACHE STRING "Install cmake files in <prefix>/\${GAUDI_INSTALL_CONFIGDIR}") -set(scan_dict_deps_command ${CMAKE_CURRENT_LIST_DIR}/scan_dict_deps.py +set(scan_dict_deps_command ${GAUDI_TOOLBOX_DIR}/scan_dict_deps.py CACHE INTERNAL "command to use to scan dependencies of dictionary headers") ################################## Functions ################################## @@ -152,6 +158,60 @@ macro(_gaudi_runtime_append runtime value) set_property(TARGET target_runtime_paths APPEND PROPERTY runtime_${runtime} ${value}) endmacro() +# Helper function to add build test for every public header +function(_test_build_public_headers lib_name) + if(NOT BUILD_TESTING) + # we test the build of the public headers only when tests are enabled + return() + endif() + # collect the list of public headers + file(GLOB_RECURSE headers + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/include + CONFIGURE_DEPENDS + ${CMAKE_CURRENT_SOURCE_DIR}/include/*.h + ${CMAKE_CURRENT_SOURCE_DIR}/include/*.hxx + ${CMAKE_CURRENT_SOURCE_DIR}/include/*.hpp + ) + # list the test source files generated (in a previous config) + file(GLOB_RECURSE old_srcs + ${CMAKE_CURRENT_BINARY_DIR}/headers_build_test/*.h.cpp + ${CMAKE_CURRENT_BINARY_DIR}/headers_build_test/*.hxx.cpp + ${CMAKE_CURRENT_BINARY_DIR}/headers_build_test/*.hpp.cpp + ) + set(srcs) + if(headers) + # create a cpp file for each header file to test + foreach(header IN LISTS headers) + set(s "${CMAKE_CURRENT_BINARY_DIR}/headers_build_test/${header}.cpp") + configure_file("${GAUDI_TOOLBOX_DIR}/header_build_test.tpl" "${s}") + list(APPEND srcs "${s}") + endforeach() + # create an object library (we never need to use the product) + add_library(test_public_headers_build_${lib_name} OBJECT EXCLUDE_FROM_ALL ${srcs}) + target_link_libraries(test_public_headers_build_${lib_name} + PRIVATE ${lib_name}) + target_compile_definitions(test_public_headers_build_${lib_name} + PRIVATE GAUDI_TEST_PUBLIC_HEADERS_BUILD) + # add it to the global target "test_public_headers_build" (making sure it exists) + if(NOT TARGET test_public_headers_build) + if(GAUDI_TEST_PUBLIC_HEADERS_BUILD) + add_custom_target(test_public_headers_build ALL + COMMENT "test build of public headers") + else() + add_custom_target(test_public_headers_build + COMMENT "test build of public headers") + endif() + endif() + add_dependencies(test_public_headers_build test_public_headers_build_${lib_name}) + # keep in old_srcs only the source files not needed anymore + list(REMOVE_ITEM old_srcs ${srcs}) + endif() + # remove stale test source files + if(old_srcs) + file(REMOVE ${old_srcs}) + endif() +endfunction() + #[========================================================================[.rst: .. command:: gaudi_add_library @@ -216,6 +276,7 @@ function(gaudi_add_library lib_name) install(DIRECTORY include/ TYPE INCLUDE) set_property(DIRECTORY PROPERTY include_installed TRUE) + _test_build_public_headers(${lib_name}) endif() # Runtime ROOT_INCLUDE_PATH _gaudi_runtime_append(root_include_path $<TARGET_PROPERTY:${lib_name},INTERFACE_INCLUDE_DIRECTORIES>) @@ -287,6 +348,7 @@ function(gaudi_add_header_only_library lib_name) install(DIRECTORY include/ TYPE INCLUDE) set_property(DIRECTORY PROPERTY include_installed TRUE) + _test_build_public_headers(${lib_name}) endif() # Runtime ROOT_INCLUDE_PATH _gaudi_runtime_append(root_include_path $<TARGET_PROPERTY:${lib_name},INTERFACE_INCLUDE_DIRECTORIES>) diff --git a/cmake/header_build_test.tpl b/cmake/header_build_test.tpl new file mode 100644 index 0000000000000000000000000000000000000000..6c200e893f0130704e134a415fd59d4fd7f3a675 --- /dev/null +++ b/cmake/header_build_test.tpl @@ -0,0 +1 @@ +#include <${header}> diff --git a/cmake/tests/testGaudiInstallation.cmake b/cmake/tests/testGaudiInstallation.cmake index d6af88710a1a36cb761a0a5ad9bb595e1614142b..6df6a1a995fe3a35c1e3fb55af3dc25ee6807755 100644 --- a/cmake/tests/testGaudiInstallation.cmake +++ b/cmake/tests/testGaudiInstallation.cmake @@ -111,18 +111,10 @@ elseif(DEFINED TEST_GAUDI_INSTALL_FILES_EXIST) # check some files that should be message(FATAL_ERROR "Include directory not installed correctly," " Axis.h not found in include/GaudiCommonSvc/") endif() - if(NOT EXISTS ${GAUDI_INSTALL_DIR}/include/GaudiHive/HiveSlimEventLoopMgr.h) - message(FATAL_ERROR "Include directory not installed correctly," - " HiveSlimEventLoopMgr.h not found in include/GaudiHive/") - endif() if(NOT EXISTS ${GAUDI_INSTALL_DIR}/include/GaudiMP/TESSerializer.h) message(FATAL_ERROR "Include directory not installed correctly," " TESSerializer.h not found in include/GaudiMP/") endif() - if(NOT EXISTS ${GAUDI_INSTALL_DIR}/include/GaudiProfiling/PfmCodeAnalyser.h) - message(FATAL_ERROR "Include directory not installed correctly," - " PfmCodeAnalyser.h not found in include/GaudiProfiling/") - endif() if(NOT EXISTS ${GAUDI_INSTALL_DIR}/include/GaudiPython/AlgDecorators.h) message(FATAL_ERROR "Include directory not installed correctly," " AlgDecorators.h not found in include/GaudiPython/")