# Copyright (C) 1995-2019, Rene Brun and Fons Rademakers.
# All rights reserved.
#
# For the licensing terms see $ROOTSYS/LICENSE.
# For the list of contributors see $ROOTSYS/README/CREDITS.

############################################################################
# CMakeLists.txt file for building ROOT roofitcore package
# @author Pere Mato, CERN
############################################################################

if (roofit_multiprocess)
  set(RooFitMPTestStatisticsSources src/TestStatistics/LikelihoodJob.cxx src/TestStatistics/LikelihoodGradientJob.cxx)
endif()

ROOT_STANDARD_LIBRARY_PACKAGE(RooFitCore
  HEADERS
    RooFit/Detail/DataMap.h
    RooFit/Detail/NormalizationHelpers.h
    RooFit/Floats.h
    Roo1DTable.h
    RooAbsAnaConvPdf.h
    RooAbsArg.h
    RooAbsBinning.h
    RooAbsCachedPdf.h
    RooAbsCachedReal.h
    RooAbsCacheElement.h
    RooAbsCache.h
    RooAbsCategory.h
    RooAbsCategoryLValue.h
    RooAbsCollection.h
    RooAbsData.h
    RooAbsDataStore.h
    RooAbsFunc.h
    RooAbsGenContext.h
    RooAbsHiddenReal.h
    RooAbsIntegrator.h
    RooAbsLValue.h
    RooAbsMCStudyModule.h
    RooAbsMoment.h
    RooAbsOptTestStatistic.h
    RooAbsPdf.h
    RooAbsProxy.h
    RooAbsReal.h
    RooAbsRealLValue.h
    RooAbsRootFinder.h
    RooAbsSelfCachedPdf.h
    RooAbsSelfCachedReal.h
    RooAbsString.h
    RooAbsStudy.h
    RooAbsTestStatistic.h
    RooAdaptiveIntegratorND.h
    RooAddGenContext.h
    RooAddition.h
    RooAddModel.h
    RooAddPdf.h
    RooAICRegistry.h
    RooArgList.h
    RooArgProxy.h
    RooArgSet.h
    RooBinIntegrator.h
    RooBinnedGenContext.h
    RooBinningCategory.h
    RooBinning.h
    RooBrentRootFinder.h
    RooCachedPdf.h
    RooCachedReal.h
    RooCacheManager.h
    RooCategory.h
    RooCategoryProxy.h
    RooChangeTracker.h
    RooChi2Var.h
    RooClassFactory.h
    RooCmdArg.h
    RooCmdConfig.h
    RooCollectionProxy.h
    RooCompositeDataStore.h
    RooConstraintSum.h
    RooConstVar.h
    RooConvCoefVar.h
    RooConvGenContext.h
    RooConvIntegrandBinding.h
    RooCurve.h
    RooCustomizer.h
    RooDataHist.h
    RooDataHistSliceIter.h
    RooDataProjBinding.h
    RooDataSet.h
    RooDataWeightedAverage.h
    RooDerivative.h
    RooDirItem.h
    RooDLLSignificanceMCSModule.h
    RooDouble.h
    RooEffGenContext.h
    RooEfficiency.h
    RooEffProd.h
    RooEllipse.h
    RooErrorHandler.h
    RooErrorVar.h
    RooExpensiveObjectCache.h
    RooExtendedBinding.h
    RooExtendedTerm.h
    RooExtendPdf.h
    RooFactoryWSTool.h
    RooFFTConvPdf.h
    RooFirstMoment.h
    RooFit.h
    RooFitResult.h
    RooFormula.h
    RooFormulaVar.h
    RooFracRemainder.h
    RooFunctor.h
    RooGenContext.h
    RooGenericPdf.h
    RooGenFitStudy.h
    RooGenFunction.h
    RooGenProdProj.h
    RooGlobalFunc.h
    RooGrid.h
    RooHistError.h
    RooHistFunc.h
    RooHist.h
    RooHistPdf.h
    RooImproperIntegrator1D.h
    RooIntegrator1D.h
    RooIntegrator2D.h
    RooIntegratorBinding.h
    RooInt.h
    RooInvTransform.h
    RooLinearCombination.h
    RooLinearVar.h
    RooLinkedListElem.h
    RooLinkedList.h
    RooLinkedListIter.h
    RooLinTransBinning.h
    RooListProxy.h
    RooMath.h
    RooMappedCategory.h
    RooMCIntegrator.h
    RooMCStudy.h
    RooMinimizer.h
    RooMoment.h
    RooMsgService.h
    RooMultiCategory.h
    RooMultiGenFunction.h
    RooMultiVarGaussian.h
    RooNameReg.h
    RooNLLVar.h
    RooNormSetCache.h
    RooNumber.h
    RooNumCdf.h
    RooNumConvolution.h
    RooNumConvPdf.h
    RooNumGenConfig.h
    RooNumIntConfig.h
    RooNumIntFactory.h
    RooNumRunningInt.h
    RooObjCacheManager.h
    RooParamBinning.h
    RooPlotable.h
    RooPlot.h
    RooPolyFunc.h
    RooPolyVar.h
    RooPrintable.h
    RooProdGenContext.h
    RooProdPdf.h
    RooProduct.h
    RooProfileLL.h
    RooProjectedPdf.h
    RooProofDriverSelector.h
    RooPullVar.h
    RooQuasiRandomGenerator.h
    RooRatio.h
    RooRandom.h
    RooRandomizeParamMCSModule.h
    RooRangeBinning.h
    RooRangeBoolean.h
    RooRealAnalytic.h
    RooRealBinding.h
    RooRealConstant.h
    RooRealIntegral.h
    RooRealMPFE.h
    RooTemplateProxy.h
    RooRealProxy.h
    RooRealSumFunc.h
    RooRealSumPdf.h
    RooRealVar.h
    RooRealVarSharedProperties.h
    RooRecursiveFraction.h
    RooRefCountList.h
    RooSTLRefCountList.h
    RooResolutionModel.h
    RooScaledFunc.h
    RooSecondMoment.h
    RooSegmentedIntegrator1D.h
    RooSegmentedIntegrator2D.h
    RooSetProxy.h
    RooSharedProperties.h
    RooSimGenContext.h
    RooSimSplitGenContext.h
    RooSimultaneous.h
    RooSimWSTool.h
    RooStreamParser.h
    RooStringVar.h
    RooStringView.h
    RooStudyManager.h
    RooStudyPackage.h
    RooSuperCategory.h
    RooTable.h
    RooTFoamBinding.h
    RooThresholdCategory.h
    RooTObjWrap.h
    RooTrace.h
    RooTreeDataStore.h
    RooTruthModel.h
    RooUniformBinning.h
    RooUnitTest.h
    RooVectorDataStore.h
    RooWorkspace.h
    RooWorkspaceHandle.h
    RooXYChi2Var.h
    RooHelpers.h
    RooWrapperPdf.h
    RooNaNPacker.h
    RooBinSamplingPdf.h
    RooBinWidthFunction.h
    RooFitLegacy/RooCatTypeLegacy.h
    RooFitLegacy/RooCategorySharedProperties.h
    RooFitLegacy/RooMinuit.h
    RooFitLegacy/RooTreeData.h
    RooFit/TestStatistics/LikelihoodGradientWrapper.h
    RooFit/TestStatistics/LikelihoodWrapper.h
    RooFit/TestStatistics/RooAbsL.h
    RooFit/TestStatistics/RooBinnedL.h
    RooFit/TestStatistics/RooSubsidiaryL.h
    RooFit/TestStatistics/RooSumL.h
    RooFit/TestStatistics/RooRealL.h
    RooFit/TestStatistics/RooUnbinnedL.h
    RooFit/TestStatistics/optional_parameter_types.h
    RooFit/TestStatistics/buildLikelihood.h
    RunContext.h
  SOURCES
    src/ConstraintHelpers.cxx
    src/BatchModeHelpers.cxx
    src/BatchModeDataHelpers.cxx
    src/CUDAHelpers.cxx
    src/Buffers.cxx
    src/BidirMMapPipe.cxx
    src/BidirMMapPipe.h
    src/NormalizationHelpers.cxx
    src/Roo1DTable.cxx
    src/RooAbsAnaConvPdf.cxx
    src/RooAbsArg.cxx
    src/RooAbsBinning.cxx
    src/RooAbsCache.cxx
    src/RooAbsCachedPdf.cxx
    src/RooAbsCachedReal.cxx
    src/RooAbsCacheElement.cxx
    src/RooAbsCategory.cxx
    src/RooAbsCategoryLValue.cxx
    src/RooAbsCollection.cxx
    src/RooAbsData.cxx
    src/RooAbsDataStore.cxx
    src/RooAbsFunc.cxx
    src/RooAbsGenContext.cxx
    src/RooAbsHiddenReal.cxx
    src/RooAbsIntegrator.cxx
    src/RooAbsLValue.cxx
    src/RooAbsMCStudyModule.cxx
    src/RooAbsMinimizerFcn.cxx
    src/RooAbsMoment.cxx
    src/RooAbsNumGenerator.cxx
    src/RooAbsOptTestStatistic.cxx
    src/RooAbsPdf.cxx
    src/RooAbsProxy.cxx
    src/RooAbsReal.cxx
    src/RooAbsRealLValue.cxx
    src/RooAbsRootFinder.cxx
    src/RooAbsSelfCachedPdf.cxx
    src/RooAbsSelfCachedReal.cxx
    src/RooAbsStudy.cxx
    src/RooAbsTestStatistic.cxx
    src/RooAcceptReject.cxx
    src/RooAdaptiveIntegratorND.cxx
    src/RooAddGenContext.cxx
    src/RooAddHelpers.cxx
    src/RooAddition.cxx
    src/RooAddModel.cxx
    src/RooAddPdf.cxx
    src/RooAICRegistry.cxx
    src/RooArgList.cxx
    src/RooArgProxy.cxx
    src/RooArgSet.cxx
    src/Initialisation.cxx
    src/RooBinIntegrator.cxx
    src/RooBinnedGenContext.cxx
    src/RooBinningCategory.cxx
    src/RooBinning.cxx
    src/RooBrentRootFinder.cxx
    src/RooCachedPdf.cxx
    src/RooCachedReal.cxx
    src/RooCacheManager.cxx
    src/RooCategory.cxx
    src/RooChangeTracker.cxx
    src/RooChi2Var.cxx
    src/RooClassFactory.cxx
    src/RooCmdArg.cxx
    src/RooCmdConfig.cxx
    src/RooCompositeDataStore.cxx
    src/RooConstraintSum.cxx
    src/RooConstVar.cxx
    src/RooConvCoefVar.cxx
    src/RooConvGenContext.cxx
    src/RooConvIntegrandBinding.cxx
    src/RooCurve.cxx
    src/RooCustomizer.cxx
    src/RooDataHist.cxx
    src/RooDataHistSliceIter.cxx
    src/RooDataProjBinding.cxx
    src/RooDataSet.cxx
    src/RooDataWeightedAverage.cxx
    src/RooDerivative.cxx
    src/RooDirItem.cxx
    src/RooDLLSignificanceMCSModule.cxx
    src/RooDouble.cxx
    src/RooEffGenContext.cxx
    src/RooEfficiency.cxx
    src/RooEffProd.cxx
    src/RooEllipse.cxx
    src/RooErrorVar.cxx
    src/RooExpensiveObjectCache.cxx
    src/RooExtendedBinding.cxx
    src/RooExtendedTerm.cxx
    src/RooExtendPdf.cxx
    src/RooFactoryWSTool.cxx
    src/RooFFTConvPdf.cxx
    src/RooFirstMoment.cxx
    src/RooFitResult.cxx
    src/RooFoamGenerator.cxx
    src/RooFormula.cxx
    src/RooFormulaVar.cxx
    src/RooFracRemainder.cxx
    src/RooFunctor.cxx
    src/RooGenContext.cxx
    src/RooGenericPdf.cxx
    src/RooGenFitStudy.cxx
    src/RooGenFunction.cxx
    src/RooGenProdProj.cxx
    src/RooGlobalFunc.cxx
    src/RooGrid.cxx
    src/RooHist.cxx
    src/RooHistError.cxx
    src/RooHistFunc.cxx
    src/RooHistPdf.cxx
    src/RooImproperIntegrator1D.cxx
    src/RooInt.cxx
    src/RooIntegrator1D.cxx
    src/RooIntegrator2D.cxx
    src/RooIntegratorBinding.cxx
    src/RooInvTransform.cxx
    src/RooLinearCombination.cxx
    src/RooLinearVar.cxx
    src/RooLinkedList.cxx
    src/RooLinkedListElem.cxx
    src/RooLinTransBinning.cxx
    src/RooMath.cxx
    src/RooMappedCategory.cxx
    src/RooMCIntegrator.cxx
    src/RooMCStudy.cxx
    src/RooMinimizer.cxx
    src/RooMinimizerFcn.cxx
    src/RooMoment.cxx
    src/RooMsgService.cxx
    src/RooMultiCategory.cxx
    src/RooMultiGenFunction.cxx
    src/RooMultiVarGaussian.cxx
    src/RooNameReg.cxx
    src/RooFitDriver.cxx
    src/RooNLLVar.cxx
    src/RooNLLVarNew.cxx
    src/RooNormSetCache.cxx
    src/RooNormalizedPdf.cxx
    src/RooNumber.cxx
    src/RooNumCdf.cxx
    src/RooNumConvolution.cxx
    src/RooNumConvPdf.cxx
    src/RooNumGenConfig.cxx
    src/RooNumGenFactory.cxx
    src/RooNumIntConfig.cxx
    src/RooNumIntFactory.cxx
    src/RooNumRunningInt.cxx
    src/RooObjCacheManager.cxx
    src/RooParamBinning.cxx
    src/RooPlotable.cxx
    src/RooPlot.cxx
    src/RooPolyFunc.cxx
    src/RooPolyVar.cxx
    src/RooPrintable.cxx
    src/RooProdGenContext.cxx
    src/RooProdPdf.cxx
    src/RooProduct.cxx
    src/RooProfileLL.cxx
    src/RooProjectedPdf.cxx
    src/RooProofDriverSelector.cxx
    src/RooPullVar.cxx
    src/RooQuasiRandomGenerator.cxx
    src/RooRatio.cxx
    src/RooRandom.cxx
    src/RooRandomizeParamMCSModule.cxx
    src/RooRangeBinning.cxx
    src/RooRangeBoolean.cxx
    src/RooRealAnalytic.cxx
    src/RooRealBinding.cxx
    src/RooRealConstant.cxx
    src/RooRealIntegral.cxx
    src/RooRealMPFE.cxx
    src/RooRealSumFunc.cxx
    src/RooRealSumPdf.cxx
    src/RooRealVar.cxx
    src/RooRecursiveFraction.cxx
    src/RooRefCountList.cxx
    src/RooSTLRefCountList.cxx
    src/RooResolutionModel.cxx
    src/RooScaledFunc.cxx
    src/RooSecondMoment.cxx
    src/RooSegmentedIntegrator1D.cxx
    src/RooSegmentedIntegrator2D.cxx
    src/RooSentinel.cxx
    src/RooSharedProperties.cxx
    src/RooSimGenContext.cxx
    src/RooSimSplitGenContext.cxx
    src/RooSimultaneous.cxx
    src/RooSimWSTool.cxx
    src/RooStreamParser.cxx
    src/RooStringVar.cxx
    src/RooStudyManager.cxx
    src/RooStudyPackage.cxx
    src/RooSuperCategory.cxx
    src/RooTable.cxx
    src/RooTFoamBinding.cxx
    src/RooThresholdCategory.cxx
    src/RooTObjWrap.cxx
    src/RooTrace.cxx
    src/RooTreeDataStore.cxx
    src/RooTruthModel.cxx
    src/RooUniformBinning.cxx
    src/RooUnitTest.cxx
    src/RooVectorDataStore.cxx
    src/RooWorkspace.cxx
    src/RooXYChi2Var.cxx
    src/RooHelpers.cxx
    src/RooWrapperPdf.cxx
    src/RooBinSamplingPdf.cxx
    src/RooBinWidthFunction.cxx
    src/RooFitLegacy/RooCatTypeLegacy.cxx
    src/RooFitLegacy/RooMinuit.cxx
    src/RunContext.cxx
    src/TestStatistics/ConstantTermsOptimizer.cxx
    src/TestStatistics/LikelihoodGradientWrapper.cxx
    src/TestStatistics/LikelihoodWrapper.cxx
    src/TestStatistics/LikelihoodSerial.cxx
    src/TestStatistics/MinuitFcnGrad.cxx
    src/TestStatistics/RooAbsL.cxx
    src/TestStatistics/RooBinnedL.cxx
    src/TestStatistics/RooSubsidiaryL.cxx
    src/TestStatistics/RooSumL.cxx
    src/TestStatistics/RooRealL.cxx
    src/TestStatistics/RooUnbinnedL.cxx
    src/TestStatistics/optional_parameter_types.cxx
    src/TestStatistics/buildLikelihood.cxx
    ${RooFitMPTestStatisticsSources}
  DICTIONARY_OPTIONS
    "-writeEmptyRootPCM"
  LIBRARIES
    RooBatchCompute
    RooFitCommon
  DEPENDENCIES
    Core
    Hist
    Graf
    Matrix
    Tree
    Minuit
    Minuit2
    RIO
    MathCore
    Foam
    Smatrix
  LINKDEF
    inc/LinkDef.h
)

if (roofit_multiprocess)
  target_link_libraries(RooFitCore PRIVATE RooFitMultiProcess)
  set(RooFitCore_MultiProcess_TestStatistics_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/res")
  target_include_directories(RooFitCore PRIVATE ${RooFitCore_MultiProcess_TestStatistics_INCLUDE_DIR})
endif()

# For recent clang, this can facilitate auto-vectorisation.
# In RooFit, the errno side effect is not needed, anyway:
if(NOT MSVC)
  target_compile_options(RooFitCore PUBLIC -fno-math-errno)
endif()

ROOT_ADD_TEST_SUBDIRECTORY(test)
