diff --git a/.gitignore b/.gitignore index 2da8b45..f3d9489 100644 --- a/.gitignore +++ b/.gitignore @@ -45,4 +45,5 @@ docs/man3 docs/man docs/Doxyfile .cache -vcpkg_installed \ No newline at end of file +vcpkg_installed +CMakeUserPresets.json diff --git a/CHANGELOG.md b/CHANGELOG.md index f4f63ba..daa5cbf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - *ld_proposed_cuts*: number of cut points to return. - *mdlp_min_length*: minimum length of a partition in MDLP algorithm to be evaluated for partition. - *mdlp_max_depth*: maximum level of recursion in MDLP algorithm. +- Remove vcpkg as a dependency manager, now the library is built with Conan package manager and CMake. ## [1.1.1] - 2025-05-20 diff --git a/CLAUDE.md b/CLAUDE.md index a481e43..9d294cd 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -9,11 +9,22 @@ BayesNet is a C++ library implementing Bayesian Network Classifiers. It provides ## Build System & Dependencies ### Dependency Management -- Uses **vcpkg** for package management with private registry at https://github.com/rmontanana/vcpkg-stash +The project supports **two package managers**: + +#### vcpkg (Default) +- Uses vcpkg with private registry at https://github.com/rmontanana/vcpkg-stash - Core dependencies: libtorch, nlohmann-json, folding, fimdlp, arff-files, catch2 - All dependencies defined in `vcpkg.json` with version overrides +#### Conan (Alternative) +- Modern C++ package manager with better dependency resolution +- Configured via `conanfile.py` for packaging and distribution +- Supports subset of dependencies (libtorch, nlohmann-json, catch2) +- Custom dependencies (folding, fimdlp, arff-files) need custom Conan recipes + ### Build Commands + +#### Using vcpkg (Default) ```bash # Initialize dependencies make init @@ -37,11 +48,38 @@ make viewcoverage make clean ``` +#### Using Conan +```bash +# Install Conan first: pip install conan + +# Initialize dependencies +make conan-init + +# Build debug version (with tests and coverage) +make conan-debug +make buildd + +# Build release version +make conan-release +make buildr + +# Create and test Conan package +make conan-create + +# Upload to Conan remote +make conan-upload remote=myremote + +# Clean Conan cache and builds +make conan-clean +``` + ### CMake Configuration - Uses CMake 3.27+ with C++17 standard - Debug builds automatically enable testing and coverage - Release builds optimize with `-Ofast` -- Supports both static library and vcpkg package installation +- **Automatic package manager detection**: CMake detects whether Conan or vcpkg is being used +- Supports both static library and package manager installation +- Conditional dependency linking based on availability ## Testing Framework @@ -94,9 +132,45 @@ Sample code in `sample/` directory demonstrates library usage: make sample fname=tests/data/iris.arff model=TANLd ``` +## Package Distribution + +### Creating Conan Packages +```bash +# Create package locally +make conan-create + +# Test package installation +cd test_package +conan create .. + +# Upload to remote repository +make conan-upload remote=myremote profile=myprofile +``` + +### Using the Library +With Conan: +```python +# conanfile.txt or conanfile.py +[requires] +bayesnet/1.1.2@user/channel + +[generators] +cmake +``` + +With vcpkg: +```json +{ + "dependencies": ["bayesnet"] +} +``` + ## Common Development Tasks - **Add new classifier**: Extend BaseClassifier, implement in appropriate subdirectory - **Add new test**: Update `tests/CMakeLists.txt` and create test in `tests/` - **Modify build**: Edit main `CMakeLists.txt` or use Makefile targets -- **Update dependencies**: Modify `vcpkg.json` and run `make init` \ No newline at end of file +- **Update dependencies**: + - vcpkg: Modify `vcpkg.json` and run `make init` + - Conan: Modify `conanfile.py` and run `make conan-init` +- **Package for distribution**: Use `make conan-create` for Conan packaging \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index cf850ca..0699ff5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.27) project(bayesnet - VERSION 1.1.2 + VERSION 1.2.0 DESCRIPTION "Bayesian Network and basic classifiers Library." HOMEPAGE_URL "https://github.com/rmontanana/bayesnet" LANGUAGES CXX @@ -10,11 +10,6 @@ project(bayesnet set(CMAKE_CXX_STANDARD 17) cmake_policy(SET CMP0135 NEW) -find_package(Torch CONFIG REQUIRED) -find_package(fimdlp CONFIG REQUIRED) -find_package(nlohmann_json CONFIG REQUIRED) -find_package(folding CONFIG REQUIRED) - # Global CMake variables # ---------------------- set(CMAKE_CXX_STANDARD 17) @@ -31,17 +26,25 @@ endif() # Options # ------- -option(ENABLE_CLANG_TIDY "Enable to add clang tidy" OFF) option(ENABLE_TESTING "Unit testing build" OFF) option(CODE_COVERAGE "Collect coverage from test library" OFF) -option(INSTALL_GTEST "Enable installation of googletest" OFF) + + +find_package(Torch CONFIG REQUIRED) +if(NOT TARGET torch::torch) + add_library(torch::torch INTERFACE IMPORTED GLOBAL) + # expose include paths and libraries that the find-module discovered + set_target_properties(torch::torch PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${TORCH_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "${TORCH_LIBRARIES}") +endif() + +find_package(fimdlp CONFIG REQUIRED) +find_package(folding CONFIG REQUIRED) +find_package(nlohmann_json REQUIRED) add_subdirectory(config) -if (ENABLE_CLANG_TIDY) - include(StaticAnalyzers) # clang-tidy -endif (ENABLE_CLANG_TIDY) - # Add the library # --------------- include_directories( @@ -52,7 +55,14 @@ include_directories( file(GLOB_RECURSE Sources "bayesnet/*.cc") add_library(bayesnet ${Sources}) -target_link_libraries(bayesnet fimdlp::fimdlp folding::folding "${TORCH_LIBRARIES}") + +target_link_libraries(bayesnet + nlohmann_json::nlohmann_json + folding::folding + fimdlp::fimdlp + torch::torch + arff-files::arff-files +) # Testing # ------- diff --git a/CONAN_README.md b/CONAN_README.md new file mode 100644 index 0000000..a563cdd --- /dev/null +++ b/CONAN_README.md @@ -0,0 +1,87 @@ +# Using BayesNet with Conan + +This document explains how to use Conan as an alternative package manager for BayesNet. + +## Prerequisites + +```bash +pip install conan +conan remote add Cimmeria https://conan.rmontanana.es/artifactory/api/conan/Cimmeria +conan profile new default --detect +``` + +## Quick Start + +### As a Consumer + +1. Create a `conanfile.txt` in your project: + +```ini +[requires] +libtorch/2.7.0 +bayesnet/1.2.0 + +[generators] +CMakeDeps +CMakeToolchain + +``` + +2. Install dependencies: + +```bash +conan install . --build=missing +``` + +3. In your CMakeLists.txt: + +```cmake +find_package(bayesnet REQUIRED) +target_link_libraries(your_target bayesnet::bayesnet) +``` + +### Building BayesNet with Conan + +```bash +# Install dependencies +make conan-init + +# Build debug version +make debug +make buildd + +# Build release version +make release +make buildr + +# Create package +make conan-create +``` + +## Current Limitations + +- Custom dependencies (folding, fimdlp, arff-files) are not available in ConanCenter +- These need to be built as custom Conan packages or replaced with alternatives +- The conanfile.py currently comments out these dependencies + +## Creating Custom Dependency Packages + +For the custom dependencies, you'll need to create Conan recipes: + +1. **folding**: Cross-validation library +2. **fimdlp**: Discretization library +3. **arff-files**: ARFF file format parser + +Contact the maintainer or create custom recipes for these packages. + +## Package Distribution + +Once custom dependencies are resolved: + +```bash +# Create and test package +make conan-create + +# Upload to your remote +conan upload bayesnet/1.2.0 -r myremote +``` diff --git a/Makefile b/Makefile index 2f21973..72d140a 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ SHELL := /bin/bash .DEFAULT_GOAL := help -.PHONY: viewcoverage coverage setup help install uninstall diagrams buildr buildd test clean debug release sample updatebadge doc doc-install init clean-test +.PHONY: viewcoverage coverage setup help install uninstall diagrams buildr buildd test clean updatebadge doc doc-install init clean-test conan-debug conan-release conan-create conan-upload conan-clean conan-sample f_release = build_Release f_debug = build_Debug @@ -31,7 +31,6 @@ define ClearTests fi ; endef - setup: ## Install dependencies for tests and coverage @if [ "$(shell uname)" = "Darwin" ]; then \ brew install gcovr; \ @@ -43,30 +42,30 @@ setup: ## Install dependencies for tests and coverage fi @echo "* You should install plantuml & graphviz for the diagrams" -diagrams: ## Create an UML class diagram & dependency of the project (diagrams/BayesNet.png) - @which $(plantuml) || (echo ">>> Please install plantuml"; exit 1) - @which $(dot) || (echo ">>> Please install graphviz"; exit 1) - @which $(clang-uml) || (echo ">>> Please install clang-uml"; exit 1) - @export PLANTUML_LIMIT_SIZE=16384 - @echo ">>> Creating UML class diagram of the project..."; - @$(clang-uml) -p - @cd $(f_diagrams); \ - $(plantuml) -tsvg BayesNet.puml - @echo ">>> Creating dependency graph diagram of the project..."; - $(MAKE) debug - cd $(f_debug) && cmake .. --graphviz=dependency.dot - @$(dot) -Tsvg $(f_debug)/dependency.dot.BayesNet -o $(f_diagrams)/dependency.svg +clean: ## Clean the project + @echo ">>> Cleaning the project..." + @if test -f CMakeCache.txt ; then echo "- Deleting CMakeCache.txt"; rm -f CMakeCache.txt; fimake + @for folder in $(f_release) $(f_debug) vpcpkg_installed install_test ; do \ + if test -d "$$folder" ; then \ + echo "- Deleting $$folder folder" ; \ + rm -rf "$$folder"; \ + fi; \ + done + @$(MAKE) clean-test + @echo ">>> Done"; + +# Build targets +# ============= buildd: ## Build the debug targets - cmake --build $(f_debug) -t $(app_targets) --parallel $(CMAKE_BUILD_PARALLEL_LEVEL) + cmake --build $(f_debug) --config Debug -t $(app_targets) --parallel $(CMAKE_BUILD_PARALLEL_LEVEL) buildr: ## Build the release targets - cmake --build $(f_release) -t $(app_targets) --parallel $(CMAKE_BUILD_PARALLEL_LEVEL) + cmake --build $(f_release) --config Release -t $(app_targets) --parallel $(CMAKE_BUILD_PARALLEL_LEVEL) -clean-test: ## Clean the tests info - @echo ">>> Cleaning Debug BayesNet tests..."; - $(call ClearTests) - @echo ">>> Done"; + +# Install targets +# =============== uninstall: ## Uninstall library @echo ">>> Uninstalling BayesNet..."; @@ -79,55 +78,15 @@ install: ## Install library @cmake --install $(f_release) --prefix $(prefix) @echo ">>> Done"; -init: ## Initialize the project installing dependencies - @echo ">>> Installing dependencies" - @vcpkg install - @echo ">>> Done"; -clean: ## Clean the project - @echo ">>> Cleaning the project..." - @if test -f CMakeCache.txt ; then echo "- Deleting CMakeCache.txt"; rm -f CMakeCache.txt; fi - @for folder in $(f_release) $(f_debug) vpcpkg_installed install_test ; do \ - if test -d "$$folder" ; then \ - echo "- Deleting $$folder folder" ; \ - rm -rf "$$folder"; \ - fi; \ - done - @$(MAKE) clean-test - @echo ">>> Done"; +# Test targets +# ============ -debug: ## Build a debug version of the project - @echo ">>> Building Debug BayesNet..."; - @if [ -d ./$(f_debug) ]; then rm -rf ./$(f_debug); fi - @mkdir $(f_debug); - @cmake -S . -B $(f_debug) -D CMAKE_BUILD_TYPE=Debug -D ENABLE_TESTING=ON -D CODE_COVERAGE=ON -DCMAKE_TOOLCHAIN_FILE=${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake +clean-test: ## Clean the tests info + @echo ">>> Cleaning Debug BayesNet tests..."; + $(call ClearTests) @echo ">>> Done"; -release: ## Build a Release version of the project - @echo ">>> Building Release BayesNet..."; - @if [ -d ./$(f_release) ]; then rm -rf ./$(f_release); fi - @mkdir $(f_release); - @cmake -S . -B $(f_release) -D CMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake - @echo ">>> Done"; - -fname = "tests/data/iris.arff" -model = "TANLd" -sample: ## Build sample - @echo ">>> Building Sample..."; - @if [ -d ./sample/build ]; then rm -rf ./sample/build; fi - @cd sample && cmake -B build -S . -D CMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake && \ - cmake --build build -t bayesnet_sample - sample/build/bayesnet_sample $(fname) $(model) - @echo ">>> Done"; - -fname = "tests/data/iris.arff" -sample2: ## Build sample2 - @echo ">>> Building Sample..."; - @if [ -d ./sample/build ]; then rm -rf ./sample/build; fi - @cd sample && cmake -B build -S . -D CMAKE_BUILD_TYPE=Debug && cmake --build build -t bayesnet_sample_xspode - sample/build/bayesnet_sample_xspode $(fname) - @echo ">>> Done"; - opt = "" test: ## Run tests (opt="-s") to verbose output the tests, (opt="-c='Test Maximum Spanning Tree'") to run only that section @echo ">>> Running BayesNet tests..."; @@ -157,6 +116,7 @@ coverage: ## Run tests and generate coverage report (build/index.html) $(lcov) --remove coverage.info 'tests/*' --output-file coverage.info >/dev/null 2>&1; \ $(lcov) --remove coverage.info 'bayesnet/utils/loguru.*' --ignore-errors unused --output-file coverage.info >/dev/null 2>&1; \ $(lcov) --remove coverage.info '/opt/miniconda/*' --ignore-errors unused --output-file coverage.info >/dev/null 2>&1; \ + $(lcov) --remove coverage.info '*/.conan2/*' --ignore-errors unused --output-file coverage.info >/dev/null 2>&1; \ $(lcov) --summary coverage.info @$(MAKE) updatebadge @echo ">>> Done"; @@ -182,6 +142,9 @@ updatebadge: ## Update the coverage badge in README.md @env python update_coverage.py $(f_debug)/tests @echo ">>> Done"; +# Documentation targets +# ===================== + doc: ## Generate documentation @echo ">>> Generating documentation..." @cmake --build $(f_release) -t doxygen @@ -196,6 +159,20 @@ doc: ## Generate documentation fi @echo ">>> Done"; +diagrams: ## Create an UML class diagram & dependency of the project (diagrams/BayesNet.png) + @which $(plantuml) || (echo ">>> Please install plantuml"; exit 1) + @which $(dot) || (echo ">>> Please install graphviz"; exit 1) + @which $(clang-uml) || (echo ">>> Please install clang-uml"; exit 1) + @export PLANTUML_LIMIT_SIZE=16384 + @echo ">>> Creating UML class diagram of the project..."; + @$(clang-uml) -p + @cd $(f_diagrams); \ + $(plantuml) -tsvg BayesNet.puml + @echo ">>> Creating dependency graph diagram of the project..."; + $(MAKE) debug + cd $(f_debug) && cmake .. --graphviz=dependency.dot + @$(dot) -Tsvg $(f_debug)/dependency.dot.BayesNet -o $(f_diagrams)/dependency.svg + docdir = "" doc-install: ## Install documentation @echo ">>> Installing documentation..." @@ -210,6 +187,71 @@ doc-install: ## Install documentation @sudo cp -rp $(mansrcdir) $(mandestdir) @echo ">>> Done"; +# Conan package manager targets +# ============================= + +debug: ## Build debug version using Conan + @echo ">>> Building *Debug* BayesNet with Conan..." + @rm -rf $(f_debug) # wipe previous tree + @conan install . \ + -s build_type=Debug \ + --build=missing \ + -of $(f_debug) \ + --profile=debug + @cmake -S . -B $(f_debug) \ + -DCMAKE_BUILD_TYPE=Debug \ + -DENABLE_TESTING=ON \ + -DCODE_COVERAGE=ON \ + -DCMAKE_TOOLCHAIN_FILE=$(f_debug)/build/Debug/generators/conan_toolchain.cmake + @echo ">>> Done" + +release: ## Build release version using Conan + @echo ">>> Building Release BayesNet with Conan..." + @conan install . \ + -s build_type=Release \ + --build=missing \ + -of $(f_debug) \ + --profile=release + @if [ -d ./$(f_release) ]; then rm -rf ./$(f_release); fi + @mkdir $(f_release) + @conan install . -s build_type=Release --build=missing -of $(f_release) + @cmake -S . -B $(f_release) -D CMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=$(f_release)/build/Release/generators/conan_toolchain.cmake + @echo ">>> Done" + +conan-create: ## Create Conan package + @echo ">>> Creating Conan package..." + @conan create . --build=missing -tf "" --profile=release -tf "" + @conan create . --build=missing -tf "" --profile=debug + @echo ">>> Done" + +profile ?= release +remote ?= Cimmeria +conan-upload: ## Upload package to Conan remote (profile=release remote=Cimmeria) + @echo ">>> Uploading to Conan remote $(remote) with profile $(profile)..." + @conan upload bayesnet/$(grep version conanfile.py | cut -d'"' -f2) -r $(remote) --confirm + @echo ">>> Done" + +conan-clean: ## Clean Conan cache and build folders + @echo ">>> Cleaning Conan cache and build folders..." + @conan remove "*" --confirm + @if test -d "$(f_release)" ; then rm -rf "$(f_release)"; fi + @if test -d "$(f_debug)" ; then rm -rf "$(f_debug)"; fi + @echo ">>> Done" + +fname = "tests/data/iris.arff" +model = "TANLd" +sample: ## Build sample with Conan + @echo ">>> Building Sample with Conan..."; + @if [ -d ./sample/build ]; then rm -rf ./sample/build; fi + @cd sample && conan install . --output-folder=build --build=missing + @cd sample && cmake -B build -S . -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=build/conan_toolchain.cmake && \ + cmake --build build -t bayesnet_sample + sample/build/bayesnet_sample $(fname) $(model) + @echo ">>> Done"; + +# Help target +# =========== + help: ## Show help message @IFS=$$'\n' ; \ help_lines=(`fgrep -h "##" $(MAKEFILE_LIST) | fgrep -v fgrep | sed -e 's/\\$$//' | sed -e 's/##/:/'`); \ @@ -225,4 +267,4 @@ help: ## Show help message printf "%-20s %s" $$help_command ; \ printf '\033[0m'; \ printf "%s\n" $$help_info; \ - done + done \ No newline at end of file diff --git a/README.md b/README.md index 0115ec4..2ca0195 100644 --- a/README.md +++ b/README.md @@ -8,119 +8,119 @@ [![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=rmontanana_BayesNet&metric=reliability_rating)](https://sonarcloud.io/summary/new_code?id=rmontanana_BayesNet) [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/Doctorado-ML/BayesNet) ![Gitea Last Commit](https://img.shields.io/gitea/last-commit/rmontanana/bayesnet?gitea_url=https://gitea.rmontanana.es&logo=gitea) -[![Coverage Badge](https://img.shields.io/badge/Coverage-99,2%25-green)](https://gitea.rmontanana.es/rmontanana/BayesNet) +[![Coverage Badge](https://img.shields.io/badge/Coverage-98,0%25-green)](https://gitea.rmontanana.es/rmontanana/BayesNet) [![DOI](https://zenodo.org/badge/667782806.svg)](https://doi.org/10.5281/zenodo.14210344) Bayesian Network Classifiers library -## Setup +## Using the Library -### Using the vcpkg library +### Using Conan Package Manager -You can use the library with the vcpkg library manager. In your project you have to add the following files: +You can use the library with the [Conan](https://conan.io/) package manager. In your project you need to add the following files: -#### vcpkg.json +#### conanfile.txt -```json -{ - "name": "sample-project", - "version-string": "0.1.0", - "dependencies": [ - "bayesnet" - ] -} -``` +```txt +[requires] +bayesnet/1.1.2 -#### vcpkg-configuration.json - -```json -{ - "registries": [ - { - "kind": "git", - "repository": "https://github.com/rmontanana/vcpkg-stash", - "baseline": "393efa4e74e053b6f02c4ab03738c8fe796b28e5", - "packages": [ - "folding", - "bayesnet", - "arff-files", - "fimdlp", - "libtorch-bin" - ] - } - ], - "default-registry": { - "kind": "git", - "repository": "https://github.com/microsoft/vcpkg", - "baseline": "760bfd0c8d7c89ec640aec4df89418b7c2745605" - } -} +[generators] +CMakeDeps +CMakeToolchain ``` #### CMakeLists.txt -You have to include the following lines in your `CMakeLists.txt` file: +Include the following lines in your `CMakeLists.txt` file: ```cmake -find_package(bayesnet CONFIG REQUIRED) +find_package(bayesnet REQUIRED) add_executable(myapp main.cpp) target_link_libraries(myapp PRIVATE bayesnet::bayesnet) ``` -After that, you can use the `vcpkg` command to install the dependencies: +Then install the dependencies and build your project: ```bash -vcpkg install +conan install . --output-folder=build --build=missing +cmake -B build -S . -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=build/conan_toolchain.cmake +cmake --build build ``` **Note: In the `sample` folder you can find a sample application that uses the library. You can use it as a reference to create your own application.** -## Playing with the library +## Building and Testing -The dependencies are managed with [vcpkg](https://vcpkg.io/) and supported by a private vcpkg repository in [https://github.com/rmontanana/vcpkg-stash](https://github.com/rmontanana/vcpkg-stash). +The project uses [Conan](https://conan.io/) for dependency management and provides convenient Makefile targets for common tasks. + +### Prerequisites + +- [Conan](https://conan.io/) package manager (`pip install conan`) +- CMake 3.27+ +- C++17 compatible compiler ### Getting the code ```bash git clone https://github.com/doctorado-ml/bayesnet +cd bayesnet ``` -Once you have the code, you can use the `make` command to build the project. The `Makefile` is used to manage the build process and it will automatically download and install the dependencies. +### Build Commands -### Release +#### Release Build ```bash -make init # Install dependencies -make release # Build the release version -make buildr # compile and link the release version +make release # Configure release build with Conan +make buildr # Build the release version ``` -### Debug & Tests +#### Debug Build & Tests ```bash -make init # Install dependencies -make debug # Build the debug version -make test # Run the tests +make debug # Configure debug build with Conan +make buildd # Build the debug version +make test # Run the tests ``` -### Coverage +#### Coverage Analysis ```bash -make coverage # Run the tests with coverage -make viewcoverage # View the coverage report in the browser +make coverage # Run tests with coverage analysis +make viewcoverage # View coverage report in browser ``` -### Sample app +#### Sample Application -After building and installing the release version, you can run the sample app with the following commands: +Run the sample application with different datasets and models: ```bash -make sample -make sample fname=tests/data/glass.arff +make sample # Run with default settings +make sample fname=tests/data/glass.arff # Use glass dataset +make sample fname=tests/data/iris.arff model=AODE # Use specific model ``` +### Available Makefile Targets + +- `debug` - Configure debug build using Conan +- `release` - Configure release build using Conan +- `buildd` - Build debug targets +- `buildr` - Build release targets +- `test` - Run all tests (use `opt="-s"` for verbose output) +- `coverage` - Generate test coverage report +- `viewcoverage` - Open coverage report in browser +- `sample` - Build and run sample application +- `conan-create` - Create Conan package +- `conan-upload` - Upload package to Conan remote +- `conan-clean` - Clean Conan cache and build folders +- `clean` - Clean all build artifacts +- `doc` - Generate documentation +- `diagrams` - Generate UML diagrams +- `help` - Show all available targets + ## Models #### - TAN diff --git a/bayesnet/CMakeLists.txt b/bayesnet/CMakeLists.txt deleted file mode 100644 index 6815b70..0000000 --- a/bayesnet/CMakeLists.txt +++ /dev/null @@ -1,13 +0,0 @@ -include_directories( - ${BayesNet_SOURCE_DIR}/lib/log - ${BayesNet_SOURCE_DIR}/lib/mdlp/src - ${BayesNet_SOURCE_DIR}/lib/folding - ${BayesNet_SOURCE_DIR}/lib/json/include - ${BayesNet_SOURCE_DIR} - ${CMAKE_BINARY_DIR}/configured_files/include -) - -file(GLOB_RECURSE Sources "*.cc") - -add_library(BayesNet ${Sources}) -target_link_libraries(BayesNet fimdlp "${TORCH_LIBRARIES}") diff --git a/cmake/modules/AddGitSubmodule.cmake b/cmake/modules/AddGitSubmodule.cmake deleted file mode 100644 index 7855fce..0000000 --- a/cmake/modules/AddGitSubmodule.cmake +++ /dev/null @@ -1,12 +0,0 @@ - -function(add_git_submodule dir) - find_package(Git REQUIRED) - - if(NOT EXISTS ${dir}/CMakeLists.txt) - message(STATUS "🚨 Adding git submodule => ${dir}") - execute_process(COMMAND ${GIT_EXECUTABLE} - submodule update --init --recursive -- ${dir} - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) - endif() - add_subdirectory(${dir}) -endfunction(add_git_submodule) diff --git a/cmake/modules/CodeCoverage.cmake b/cmake/modules/CodeCoverage.cmake deleted file mode 100644 index 670dea8..0000000 --- a/cmake/modules/CodeCoverage.cmake +++ /dev/null @@ -1,746 +0,0 @@ -# Copyright (c) 2012 - 2017, Lars Bilke -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, -# are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its contributors -# may be used to endorse or promote products derived from this software without -# specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# CHANGES: -# -# 2012-01-31, Lars Bilke -# - Enable Code Coverage -# -# 2013-09-17, Joakim Söderberg -# - Added support for Clang. -# - Some additional usage instructions. -# -# 2016-02-03, Lars Bilke -# - Refactored functions to use named parameters -# -# 2017-06-02, Lars Bilke -# - Merged with modified version from github.com/ufz/ogs -# -# 2019-05-06, Anatolii Kurotych -# - Remove unnecessary --coverage flag -# -# 2019-12-13, FeRD (Frank Dana) -# - Deprecate COVERAGE_LCOVR_EXCLUDES and COVERAGE_GCOVR_EXCLUDES lists in favor -# of tool-agnostic COVERAGE_EXCLUDES variable, or EXCLUDE setup arguments. -# - CMake 3.4+: All excludes can be specified relative to BASE_DIRECTORY -# - All setup functions: accept BASE_DIRECTORY, EXCLUDE list -# - Set lcov basedir with -b argument -# - Add automatic --demangle-cpp in lcovr, if 'c++filt' is available (can be -# overridden with NO_DEMANGLE option in setup_target_for_coverage_lcovr().) -# - Delete output dir, .info file on 'make clean' -# - Remove Python detection, since version mismatches will break gcovr -# - Minor cleanup (lowercase function names, update examples...) -# -# 2019-12-19, FeRD (Frank Dana) -# - Rename Lcov outputs, make filtered file canonical, fix cleanup for targets -# -# 2020-01-19, Bob Apthorpe -# - Added gfortran support -# -# 2020-02-17, FeRD (Frank Dana) -# - Make all add_custom_target()s VERBATIM to auto-escape wildcard characters -# in EXCLUDEs, and remove manual escaping from gcovr targets -# -# 2021-01-19, Robin Mueller -# - Add CODE_COVERAGE_VERBOSE option which will allow to print out commands which are run -# - Added the option for users to set the GCOVR_ADDITIONAL_ARGS variable to supply additional -# flags to the gcovr command -# -# 2020-05-04, Mihchael Davis -# - Add -fprofile-abs-path to make gcno files contain absolute paths -# - Fix BASE_DIRECTORY not working when defined -# - Change BYPRODUCT from folder to index.html to stop ninja from complaining about double defines -# -# 2021-05-10, Martin Stump -# - Check if the generator is multi-config before warning about non-Debug builds -# -# 2022-02-22, Marko Wehle -# - Change gcovr output from -o for --xml and --html output respectively. -# This will allow for Multiple Output Formats at the same time by making use of GCOVR_ADDITIONAL_ARGS, e.g. GCOVR_ADDITIONAL_ARGS "--txt". -# -# 2022-09-28, Sebastian Mueller -# - fix append_coverage_compiler_flags_to_target to correctly add flags -# - replace "-fprofile-arcs -ftest-coverage" with "--coverage" (equivalent) -# -# USAGE: -# -# 1. Copy this file into your cmake modules path. -# -# 2. Add the following line to your CMakeLists.txt (best inside an if-condition -# using a CMake option() to enable it just optionally): -# include(CodeCoverage) -# -# 3. Append necessary compiler flags for all supported source files: -# append_coverage_compiler_flags() -# Or for specific target: -# append_coverage_compiler_flags_to_target(YOUR_TARGET_NAME) -# -# 3.a (OPTIONAL) Set appropriate optimization flags, e.g. -O0, -O1 or -Og -# -# 4. If you need to exclude additional directories from the report, specify them -# using full paths in the COVERAGE_EXCLUDES variable before calling -# setup_target_for_coverage_*(). -# Example: -# set(COVERAGE_EXCLUDES -# '${PROJECT_SOURCE_DIR}/src/dir1/*' -# '/path/to/my/src/dir2/*') -# Or, use the EXCLUDE argument to setup_target_for_coverage_*(). -# Example: -# setup_target_for_coverage_lcov( -# NAME coverage -# EXECUTABLE testrunner -# EXCLUDE "${PROJECT_SOURCE_DIR}/src/dir1/*" "/path/to/my/src/dir2/*") -# -# 4.a NOTE: With CMake 3.4+, COVERAGE_EXCLUDES or EXCLUDE can also be set -# relative to the BASE_DIRECTORY (default: PROJECT_SOURCE_DIR) -# Example: -# set(COVERAGE_EXCLUDES "dir1/*") -# setup_target_for_coverage_gcovr_html( -# NAME coverage -# EXECUTABLE testrunner -# BASE_DIRECTORY "${PROJECT_SOURCE_DIR}/src" -# EXCLUDE "dir2/*") -# -# 5. Use the functions described below to create a custom make target which -# runs your test executable and produces a code coverage report. -# -# 6. Build a Debug build: -# cmake -DCMAKE_BUILD_TYPE=Debug .. -# make -# make my_coverage_target -# - -include(CMakeParseArguments) - -option(CODE_COVERAGE_VERBOSE "Verbose information" TRUE) - -# Check prereqs -find_program( GCOV_PATH gcov ) -find_program( LCOV_PATH NAMES lcov lcov.bat lcov.exe lcov.perl) -find_program( FASTCOV_PATH NAMES fastcov fastcov.py ) -find_program( GENHTML_PATH NAMES genhtml genhtml.perl genhtml.bat ) -find_program( GCOVR_PATH gcovr PATHS ${CMAKE_SOURCE_DIR}/scripts/test) -find_program( CPPFILT_PATH NAMES c++filt ) - -if(NOT GCOV_PATH) - message(FATAL_ERROR "gcov not found! Aborting...") -endif() # NOT GCOV_PATH - -# Check supported compiler (Clang, GNU and Flang) -get_property(LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES) -foreach(LANG ${LANGUAGES}) - if("${CMAKE_${LANG}_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang") - if("${CMAKE_${LANG}_COMPILER_VERSION}" VERSION_LESS 3) - message(FATAL_ERROR "Clang version must be 3.0.0 or greater! Aborting...") - endif() - elseif(NOT "${CMAKE_${LANG}_COMPILER_ID}" MATCHES "GNU" - AND NOT "${CMAKE_${LANG}_COMPILER_ID}" MATCHES "(LLVM)?[Ff]lang") - if ("${LANG}" MATCHES "CUDA") - message(STATUS "Ignoring CUDA") - else() - message(FATAL_ERROR "Compiler is not GNU or Flang! Aborting...") - endif() - endif() -endforeach() - -set(COVERAGE_COMPILER_FLAGS "-g --coverage" - CACHE INTERNAL "") -if(CMAKE_CXX_COMPILER_ID MATCHES "(GNU|Clang)") - include(CheckCXXCompilerFlag) - check_cxx_compiler_flag(-fprofile-abs-path HAVE_fprofile_abs_path) - if(HAVE_fprofile_abs_path) - set(COVERAGE_COMPILER_FLAGS "${COVERAGE_COMPILER_FLAGS} -fprofile-abs-path") - endif() -endif() - -set(CMAKE_Fortran_FLAGS_COVERAGE - ${COVERAGE_COMPILER_FLAGS} - CACHE STRING "Flags used by the Fortran compiler during coverage builds." - FORCE ) -set(CMAKE_CXX_FLAGS_COVERAGE - ${COVERAGE_COMPILER_FLAGS} - CACHE STRING "Flags used by the C++ compiler during coverage builds." - FORCE ) -set(CMAKE_C_FLAGS_COVERAGE - ${COVERAGE_COMPILER_FLAGS} - CACHE STRING "Flags used by the C compiler during coverage builds." - FORCE ) -set(CMAKE_EXE_LINKER_FLAGS_COVERAGE - "" - CACHE STRING "Flags used for linking binaries during coverage builds." - FORCE ) -set(CMAKE_SHARED_LINKER_FLAGS_COVERAGE - "" - CACHE STRING "Flags used by the shared libraries linker during coverage builds." - FORCE ) -mark_as_advanced( - CMAKE_Fortran_FLAGS_COVERAGE - CMAKE_CXX_FLAGS_COVERAGE - CMAKE_C_FLAGS_COVERAGE - CMAKE_EXE_LINKER_FLAGS_COVERAGE - CMAKE_SHARED_LINKER_FLAGS_COVERAGE ) - -get_property(GENERATOR_IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) -if(NOT (CMAKE_BUILD_TYPE STREQUAL "Debug" OR GENERATOR_IS_MULTI_CONFIG)) - message(WARNING "Code coverage results with an optimised (non-Debug) build may be misleading") -endif() # NOT (CMAKE_BUILD_TYPE STREQUAL "Debug" OR GENERATOR_IS_MULTI_CONFIG) - -if(CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_Fortran_COMPILER_ID STREQUAL "GNU") - link_libraries(gcov) -endif() - -# Defines a target for running and collection code coverage information -# Builds dependencies, runs the given executable and outputs reports. -# NOTE! The executable should always have a ZERO as exit code otherwise -# the coverage generation will not complete. -# -# setup_target_for_coverage_lcov( -# NAME testrunner_coverage # New target name -# EXECUTABLE testrunner -j ${PROCESSOR_COUNT} # Executable in PROJECT_BINARY_DIR -# DEPENDENCIES testrunner # Dependencies to build first -# BASE_DIRECTORY "../" # Base directory for report -# # (defaults to PROJECT_SOURCE_DIR) -# EXCLUDE "src/dir1/*" "src/dir2/*" # Patterns to exclude (can be relative -# # to BASE_DIRECTORY, with CMake 3.4+) -# NO_DEMANGLE # Don't demangle C++ symbols -# # even if c++filt is found -# ) -function(setup_target_for_coverage_lcov) - - set(options NO_DEMANGLE SONARQUBE) - set(oneValueArgs BASE_DIRECTORY NAME) - set(multiValueArgs EXCLUDE EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES LCOV_ARGS GENHTML_ARGS) - cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - - if(NOT LCOV_PATH) - message(FATAL_ERROR "lcov not found! Aborting...") - endif() # NOT LCOV_PATH - - if(NOT GENHTML_PATH) - message(FATAL_ERROR "genhtml not found! Aborting...") - endif() # NOT GENHTML_PATH - - # Set base directory (as absolute path), or default to PROJECT_SOURCE_DIR - if(DEFINED Coverage_BASE_DIRECTORY) - get_filename_component(BASEDIR ${Coverage_BASE_DIRECTORY} ABSOLUTE) - else() - set(BASEDIR ${PROJECT_SOURCE_DIR}) - endif() - - # Collect excludes (CMake 3.4+: Also compute absolute paths) - set(LCOV_EXCLUDES "") - foreach(EXCLUDE ${Coverage_EXCLUDE} ${COVERAGE_EXCLUDES} ${COVERAGE_LCOV_EXCLUDES}) - if(CMAKE_VERSION VERSION_GREATER 3.4) - get_filename_component(EXCLUDE ${EXCLUDE} ABSOLUTE BASE_DIR ${BASEDIR}) - endif() - list(APPEND LCOV_EXCLUDES "${EXCLUDE}") - endforeach() - list(REMOVE_DUPLICATES LCOV_EXCLUDES) - - # Conditional arguments - if(CPPFILT_PATH AND NOT ${Coverage_NO_DEMANGLE}) - set(GENHTML_EXTRA_ARGS "--demangle-cpp") - endif() - - # Setting up commands which will be run to generate coverage data. - # Cleanup lcov - set(LCOV_CLEAN_CMD - ${LCOV_PATH} ${Coverage_LCOV_ARGS} --gcov-tool ${GCOV_PATH} -directory . - -b ${BASEDIR} --zerocounters - ) - # Create baseline to make sure untouched files show up in the report - set(LCOV_BASELINE_CMD - ${LCOV_PATH} ${Coverage_LCOV_ARGS} --gcov-tool ${GCOV_PATH} -c -i -d . -b - ${BASEDIR} -o ${Coverage_NAME}.base - ) - # Run tests - set(LCOV_EXEC_TESTS_CMD - ${Coverage_EXECUTABLE} ${Coverage_EXECUTABLE_ARGS} - ) - # Capturing lcov counters and generating report - set(LCOV_CAPTURE_CMD - ${LCOV_PATH} ${Coverage_LCOV_ARGS} --gcov-tool ${GCOV_PATH} --directory . -b - ${BASEDIR} --capture --output-file ${Coverage_NAME}.capture - ) - # add baseline counters - set(LCOV_BASELINE_COUNT_CMD - ${LCOV_PATH} ${Coverage_LCOV_ARGS} --gcov-tool ${GCOV_PATH} -a ${Coverage_NAME}.base - -a ${Coverage_NAME}.capture --output-file ${Coverage_NAME}.total - ) - # filter collected data to final coverage report - set(LCOV_FILTER_CMD - ${LCOV_PATH} ${Coverage_LCOV_ARGS} --gcov-tool ${GCOV_PATH} --remove - ${Coverage_NAME}.total ${LCOV_EXCLUDES} --output-file ${Coverage_NAME}.info - ) - # Generate HTML output - set(LCOV_GEN_HTML_CMD - ${GENHTML_PATH} ${GENHTML_EXTRA_ARGS} ${Coverage_GENHTML_ARGS} -o - ${Coverage_NAME} ${Coverage_NAME}.info - ) - if(${Coverage_SONARQUBE}) - # Generate SonarQube output - set(GCOVR_XML_CMD - ${GCOVR_PATH} --sonarqube ${Coverage_NAME}_sonarqube.xml -r ${BASEDIR} ${GCOVR_ADDITIONAL_ARGS} - ${GCOVR_EXCLUDE_ARGS} --object-directory=${PROJECT_BINARY_DIR} - ) - set(GCOVR_XML_CMD_COMMAND - COMMAND ${GCOVR_XML_CMD} - ) - set(GCOVR_XML_CMD_BYPRODUCTS ${Coverage_NAME}_sonarqube.xml) - set(GCOVR_XML_CMD_COMMENT COMMENT "SonarQube code coverage info report saved in ${Coverage_NAME}_sonarqube.xml.") - endif() - - - if(CODE_COVERAGE_VERBOSE) - message(STATUS "Executed command report") - message(STATUS "Command to clean up lcov: ") - string(REPLACE ";" " " LCOV_CLEAN_CMD_SPACED "${LCOV_CLEAN_CMD}") - message(STATUS "${LCOV_CLEAN_CMD_SPACED}") - - message(STATUS "Command to create baseline: ") - string(REPLACE ";" " " LCOV_BASELINE_CMD_SPACED "${LCOV_BASELINE_CMD}") - message(STATUS "${LCOV_BASELINE_CMD_SPACED}") - - message(STATUS "Command to run the tests: ") - string(REPLACE ";" " " LCOV_EXEC_TESTS_CMD_SPACED "${LCOV_EXEC_TESTS_CMD}") - message(STATUS "${LCOV_EXEC_TESTS_CMD_SPACED}") - - message(STATUS "Command to capture counters and generate report: ") - string(REPLACE ";" " " LCOV_CAPTURE_CMD_SPACED "${LCOV_CAPTURE_CMD}") - message(STATUS "${LCOV_CAPTURE_CMD_SPACED}") - - message(STATUS "Command to add baseline counters: ") - string(REPLACE ";" " " LCOV_BASELINE_COUNT_CMD_SPACED "${LCOV_BASELINE_COUNT_CMD}") - message(STATUS "${LCOV_BASELINE_COUNT_CMD_SPACED}") - - message(STATUS "Command to filter collected data: ") - string(REPLACE ";" " " LCOV_FILTER_CMD_SPACED "${LCOV_FILTER_CMD}") - message(STATUS "${LCOV_FILTER_CMD_SPACED}") - - message(STATUS "Command to generate lcov HTML output: ") - string(REPLACE ";" " " LCOV_GEN_HTML_CMD_SPACED "${LCOV_GEN_HTML_CMD}") - message(STATUS "${LCOV_GEN_HTML_CMD_SPACED}") - - if(${Coverage_SONARQUBE}) - message(STATUS "Command to generate SonarQube XML output: ") - string(REPLACE ";" " " GCOVR_XML_CMD_SPACED "${GCOVR_XML_CMD}") - message(STATUS "${GCOVR_XML_CMD_SPACED}") - endif() - endif() - - # Setup target - add_custom_target(${Coverage_NAME} - COMMAND ${LCOV_CLEAN_CMD} - COMMAND ${LCOV_BASELINE_CMD} - COMMAND ${LCOV_EXEC_TESTS_CMD} - COMMAND ${LCOV_CAPTURE_CMD} - COMMAND ${LCOV_BASELINE_COUNT_CMD} - COMMAND ${LCOV_FILTER_CMD} - COMMAND ${LCOV_GEN_HTML_CMD} - ${GCOVR_XML_CMD_COMMAND} - - # Set output files as GENERATED (will be removed on 'make clean') - BYPRODUCTS - ${Coverage_NAME}.base - ${Coverage_NAME}.capture - ${Coverage_NAME}.total - ${Coverage_NAME}.info - ${GCOVR_XML_CMD_BYPRODUCTS} - ${Coverage_NAME}/index.html - WORKING_DIRECTORY ${PROJECT_BINARY_DIR} - DEPENDS ${Coverage_DEPENDENCIES} - VERBATIM # Protect arguments to commands - COMMENT "Resetting code coverage counters to zero.\nProcessing code coverage counters and generating report." - ) - - # Show where to find the lcov info report - add_custom_command(TARGET ${Coverage_NAME} POST_BUILD - COMMAND ; - COMMENT "Lcov code coverage info report saved in ${Coverage_NAME}.info." - ${GCOVR_XML_CMD_COMMENT} - ) - - # Show info where to find the report - add_custom_command(TARGET ${Coverage_NAME} POST_BUILD - COMMAND ; - COMMENT "Open ./${Coverage_NAME}/index.html in your browser to view the coverage report." - ) - -endfunction() # setup_target_for_coverage_lcov - -# Defines a target for running and collection code coverage information -# Builds dependencies, runs the given executable and outputs reports. -# NOTE! The executable should always have a ZERO as exit code otherwise -# the coverage generation will not complete. -# -# setup_target_for_coverage_gcovr_xml( -# NAME ctest_coverage # New target name -# EXECUTABLE ctest -j ${PROCESSOR_COUNT} # Executable in PROJECT_BINARY_DIR -# DEPENDENCIES executable_target # Dependencies to build first -# BASE_DIRECTORY "../" # Base directory for report -# # (defaults to PROJECT_SOURCE_DIR) -# EXCLUDE "src/dir1/*" "src/dir2/*" # Patterns to exclude (can be relative -# # to BASE_DIRECTORY, with CMake 3.4+) -# ) -# The user can set the variable GCOVR_ADDITIONAL_ARGS to supply additional flags to the -# GCVOR command. -function(setup_target_for_coverage_gcovr_xml) - - set(options NONE) - set(oneValueArgs BASE_DIRECTORY NAME) - set(multiValueArgs EXCLUDE EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES) - cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - - if(NOT GCOVR_PATH) - message(FATAL_ERROR "gcovr not found! Aborting...") - endif() # NOT GCOVR_PATH - - # Set base directory (as absolute path), or default to PROJECT_SOURCE_DIR - if(DEFINED Coverage_BASE_DIRECTORY) - get_filename_component(BASEDIR ${Coverage_BASE_DIRECTORY} ABSOLUTE) - else() - set(BASEDIR ${PROJECT_SOURCE_DIR}) - endif() - - # Collect excludes (CMake 3.4+: Also compute absolute paths) - set(GCOVR_EXCLUDES "") - foreach(EXCLUDE ${Coverage_EXCLUDE} ${COVERAGE_EXCLUDES} ${COVERAGE_GCOVR_EXCLUDES}) - if(CMAKE_VERSION VERSION_GREATER 3.4) - get_filename_component(EXCLUDE ${EXCLUDE} ABSOLUTE BASE_DIR ${BASEDIR}) - endif() - list(APPEND GCOVR_EXCLUDES "${EXCLUDE}") - endforeach() - list(REMOVE_DUPLICATES GCOVR_EXCLUDES) - - # Combine excludes to several -e arguments - set(GCOVR_EXCLUDE_ARGS "") - foreach(EXCLUDE ${GCOVR_EXCLUDES}) - list(APPEND GCOVR_EXCLUDE_ARGS "-e") - list(APPEND GCOVR_EXCLUDE_ARGS "${EXCLUDE}") - endforeach() - - # Set up commands which will be run to generate coverage data - # Run tests - set(GCOVR_XML_EXEC_TESTS_CMD - ${Coverage_EXECUTABLE} ${Coverage_EXECUTABLE_ARGS} - ) - # Running gcovr - set(GCOVR_XML_CMD - ${GCOVR_PATH} --xml ${Coverage_NAME}.xml -r ${BASEDIR} ${GCOVR_ADDITIONAL_ARGS} - ${GCOVR_EXCLUDE_ARGS} --object-directory=${PROJECT_BINARY_DIR} - ) - - if(CODE_COVERAGE_VERBOSE) - message(STATUS "Executed command report") - - message(STATUS "Command to run tests: ") - string(REPLACE ";" " " GCOVR_XML_EXEC_TESTS_CMD_SPACED "${GCOVR_XML_EXEC_TESTS_CMD}") - message(STATUS "${GCOVR_XML_EXEC_TESTS_CMD_SPACED}") - - message(STATUS "Command to generate gcovr XML coverage data: ") - string(REPLACE ";" " " GCOVR_XML_CMD_SPACED "${GCOVR_XML_CMD}") - message(STATUS "${GCOVR_XML_CMD_SPACED}") - endif() - - add_custom_target(${Coverage_NAME} - COMMAND ${GCOVR_XML_EXEC_TESTS_CMD} - COMMAND ${GCOVR_XML_CMD} - - BYPRODUCTS ${Coverage_NAME}.xml - WORKING_DIRECTORY ${PROJECT_BINARY_DIR} - DEPENDS ${Coverage_DEPENDENCIES} - VERBATIM # Protect arguments to commands - COMMENT "Running gcovr to produce Cobertura code coverage report." - ) - - # Show info where to find the report - add_custom_command(TARGET ${Coverage_NAME} POST_BUILD - COMMAND ; - COMMENT "Cobertura code coverage report saved in ${Coverage_NAME}.xml." - ) -endfunction() # setup_target_for_coverage_gcovr_xml - -# Defines a target for running and collection code coverage information -# Builds dependencies, runs the given executable and outputs reports. -# NOTE! The executable should always have a ZERO as exit code otherwise -# the coverage generation will not complete. -# -# setup_target_for_coverage_gcovr_html( -# NAME ctest_coverage # New target name -# EXECUTABLE ctest -j ${PROCESSOR_COUNT} # Executable in PROJECT_BINARY_DIR -# DEPENDENCIES executable_target # Dependencies to build first -# BASE_DIRECTORY "../" # Base directory for report -# # (defaults to PROJECT_SOURCE_DIR) -# EXCLUDE "src/dir1/*" "src/dir2/*" # Patterns to exclude (can be relative -# # to BASE_DIRECTORY, with CMake 3.4+) -# ) -# The user can set the variable GCOVR_ADDITIONAL_ARGS to supply additional flags to the -# GCVOR command. -function(setup_target_for_coverage_gcovr_html) - - set(options NONE) - set(oneValueArgs BASE_DIRECTORY NAME) - set(multiValueArgs EXCLUDE EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES) - cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - - if(NOT GCOVR_PATH) - message(FATAL_ERROR "gcovr not found! Aborting...") - endif() # NOT GCOVR_PATH - - # Set base directory (as absolute path), or default to PROJECT_SOURCE_DIR - if(DEFINED Coverage_BASE_DIRECTORY) - get_filename_component(BASEDIR ${Coverage_BASE_DIRECTORY} ABSOLUTE) - else() - set(BASEDIR ${PROJECT_SOURCE_DIR}) - endif() - - # Collect excludes (CMake 3.4+: Also compute absolute paths) - set(GCOVR_EXCLUDES "") - foreach(EXCLUDE ${Coverage_EXCLUDE} ${COVERAGE_EXCLUDES} ${COVERAGE_GCOVR_EXCLUDES}) - if(CMAKE_VERSION VERSION_GREATER 3.4) - get_filename_component(EXCLUDE ${EXCLUDE} ABSOLUTE BASE_DIR ${BASEDIR}) - endif() - list(APPEND GCOVR_EXCLUDES "${EXCLUDE}") - endforeach() - list(REMOVE_DUPLICATES GCOVR_EXCLUDES) - - # Combine excludes to several -e arguments - set(GCOVR_EXCLUDE_ARGS "") - foreach(EXCLUDE ${GCOVR_EXCLUDES}) - list(APPEND GCOVR_EXCLUDE_ARGS "-e") - list(APPEND GCOVR_EXCLUDE_ARGS "${EXCLUDE}") - endforeach() - - # Set up commands which will be run to generate coverage data - # Run tests - set(GCOVR_HTML_EXEC_TESTS_CMD - ${Coverage_EXECUTABLE} ${Coverage_EXECUTABLE_ARGS} - ) - # Create folder - set(GCOVR_HTML_FOLDER_CMD - ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/${Coverage_NAME} - ) - # Running gcovr - set(GCOVR_HTML_CMD - ${GCOVR_PATH} --html ${Coverage_NAME}/index.html --html-details -r ${BASEDIR} ${GCOVR_ADDITIONAL_ARGS} - ${GCOVR_EXCLUDE_ARGS} --object-directory=${PROJECT_BINARY_DIR} - ) - - if(CODE_COVERAGE_VERBOSE) - message(STATUS "Executed command report") - - message(STATUS "Command to run tests: ") - string(REPLACE ";" " " GCOVR_HTML_EXEC_TESTS_CMD_SPACED "${GCOVR_HTML_EXEC_TESTS_CMD}") - message(STATUS "${GCOVR_HTML_EXEC_TESTS_CMD_SPACED}") - - message(STATUS "Command to create a folder: ") - string(REPLACE ";" " " GCOVR_HTML_FOLDER_CMD_SPACED "${GCOVR_HTML_FOLDER_CMD}") - message(STATUS "${GCOVR_HTML_FOLDER_CMD_SPACED}") - - message(STATUS "Command to generate gcovr HTML coverage data: ") - string(REPLACE ";" " " GCOVR_HTML_CMD_SPACED "${GCOVR_HTML_CMD}") - message(STATUS "${GCOVR_HTML_CMD_SPACED}") - endif() - - add_custom_target(${Coverage_NAME} - COMMAND ${GCOVR_HTML_EXEC_TESTS_CMD} - COMMAND ${GCOVR_HTML_FOLDER_CMD} - COMMAND ${GCOVR_HTML_CMD} - - BYPRODUCTS ${PROJECT_BINARY_DIR}/${Coverage_NAME}/index.html # report directory - WORKING_DIRECTORY ${PROJECT_BINARY_DIR} - DEPENDS ${Coverage_DEPENDENCIES} - VERBATIM # Protect arguments to commands - COMMENT "Running gcovr to produce HTML code coverage report." - ) - - # Show info where to find the report - add_custom_command(TARGET ${Coverage_NAME} POST_BUILD - COMMAND ; - COMMENT "Open ./${Coverage_NAME}/index.html in your browser to view the coverage report." - ) - -endfunction() # setup_target_for_coverage_gcovr_html - -# Defines a target for running and collection code coverage information -# Builds dependencies, runs the given executable and outputs reports. -# NOTE! The executable should always have a ZERO as exit code otherwise -# the coverage generation will not complete. -# -# setup_target_for_coverage_fastcov( -# NAME testrunner_coverage # New target name -# EXECUTABLE testrunner -j ${PROCESSOR_COUNT} # Executable in PROJECT_BINARY_DIR -# DEPENDENCIES testrunner # Dependencies to build first -# BASE_DIRECTORY "../" # Base directory for report -# # (defaults to PROJECT_SOURCE_DIR) -# EXCLUDE "src/dir1/" "src/dir2/" # Patterns to exclude. -# NO_DEMANGLE # Don't demangle C++ symbols -# # even if c++filt is found -# SKIP_HTML # Don't create html report -# POST_CMD perl -i -pe s!${PROJECT_SOURCE_DIR}/!!g ctest_coverage.json # E.g. for stripping source dir from file paths -# ) -function(setup_target_for_coverage_fastcov) - - set(options NO_DEMANGLE SKIP_HTML) - set(oneValueArgs BASE_DIRECTORY NAME) - set(multiValueArgs EXCLUDE EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES FASTCOV_ARGS GENHTML_ARGS POST_CMD) - cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - - if(NOT FASTCOV_PATH) - message(FATAL_ERROR "fastcov not found! Aborting...") - endif() - - if(NOT Coverage_SKIP_HTML AND NOT GENHTML_PATH) - message(FATAL_ERROR "genhtml not found! Aborting...") - endif() - - # Set base directory (as absolute path), or default to PROJECT_SOURCE_DIR - if(Coverage_BASE_DIRECTORY) - get_filename_component(BASEDIR ${Coverage_BASE_DIRECTORY} ABSOLUTE) - else() - set(BASEDIR ${PROJECT_SOURCE_DIR}) - endif() - - # Collect excludes (Patterns, not paths, for fastcov) - set(FASTCOV_EXCLUDES "") - foreach(EXCLUDE ${Coverage_EXCLUDE} ${COVERAGE_EXCLUDES} ${COVERAGE_FASTCOV_EXCLUDES}) - list(APPEND FASTCOV_EXCLUDES "${EXCLUDE}") - endforeach() - list(REMOVE_DUPLICATES FASTCOV_EXCLUDES) - - # Conditional arguments - if(CPPFILT_PATH AND NOT ${Coverage_NO_DEMANGLE}) - set(GENHTML_EXTRA_ARGS "--demangle-cpp") - endif() - - # Set up commands which will be run to generate coverage data - set(FASTCOV_EXEC_TESTS_CMD ${Coverage_EXECUTABLE} ${Coverage_EXECUTABLE_ARGS}) - - set(FASTCOV_CAPTURE_CMD ${FASTCOV_PATH} ${Coverage_FASTCOV_ARGS} --gcov ${GCOV_PATH} - --search-directory ${BASEDIR} - --process-gcno - --output ${Coverage_NAME}.json - --exclude ${FASTCOV_EXCLUDES} - ) - - set(FASTCOV_CONVERT_CMD ${FASTCOV_PATH} - -C ${Coverage_NAME}.json --lcov --output ${Coverage_NAME}.info - ) - - if(Coverage_SKIP_HTML) - set(FASTCOV_HTML_CMD ";") - else() - set(FASTCOV_HTML_CMD ${GENHTML_PATH} ${GENHTML_EXTRA_ARGS} ${Coverage_GENHTML_ARGS} - -o ${Coverage_NAME} ${Coverage_NAME}.info - ) - endif() - - set(FASTCOV_POST_CMD ";") - if(Coverage_POST_CMD) - set(FASTCOV_POST_CMD ${Coverage_POST_CMD}) - endif() - - if(CODE_COVERAGE_VERBOSE) - message(STATUS "Code coverage commands for target ${Coverage_NAME} (fastcov):") - - message(" Running tests:") - string(REPLACE ";" " " FASTCOV_EXEC_TESTS_CMD_SPACED "${FASTCOV_EXEC_TESTS_CMD}") - message(" ${FASTCOV_EXEC_TESTS_CMD_SPACED}") - - message(" Capturing fastcov counters and generating report:") - string(REPLACE ";" " " FASTCOV_CAPTURE_CMD_SPACED "${FASTCOV_CAPTURE_CMD}") - message(" ${FASTCOV_CAPTURE_CMD_SPACED}") - - message(" Converting fastcov .json to lcov .info:") - string(REPLACE ";" " " FASTCOV_CONVERT_CMD_SPACED "${FASTCOV_CONVERT_CMD}") - message(" ${FASTCOV_CONVERT_CMD_SPACED}") - - if(NOT Coverage_SKIP_HTML) - message(" Generating HTML report: ") - string(REPLACE ";" " " FASTCOV_HTML_CMD_SPACED "${FASTCOV_HTML_CMD}") - message(" ${FASTCOV_HTML_CMD_SPACED}") - endif() - if(Coverage_POST_CMD) - message(" Running post command: ") - string(REPLACE ";" " " FASTCOV_POST_CMD_SPACED "${FASTCOV_POST_CMD}") - message(" ${FASTCOV_POST_CMD_SPACED}") - endif() - endif() - - # Setup target - add_custom_target(${Coverage_NAME} - - # Cleanup fastcov - COMMAND ${FASTCOV_PATH} ${Coverage_FASTCOV_ARGS} --gcov ${GCOV_PATH} - --search-directory ${BASEDIR} - --zerocounters - - COMMAND ${FASTCOV_EXEC_TESTS_CMD} - COMMAND ${FASTCOV_CAPTURE_CMD} - COMMAND ${FASTCOV_CONVERT_CMD} - COMMAND ${FASTCOV_HTML_CMD} - COMMAND ${FASTCOV_POST_CMD} - - # Set output files as GENERATED (will be removed on 'make clean') - BYPRODUCTS - ${Coverage_NAME}.info - ${Coverage_NAME}.json - ${Coverage_NAME}/index.html # report directory - - WORKING_DIRECTORY ${PROJECT_BINARY_DIR} - DEPENDS ${Coverage_DEPENDENCIES} - VERBATIM # Protect arguments to commands - COMMENT "Resetting code coverage counters to zero. Processing code coverage counters and generating report." - ) - - set(INFO_MSG "fastcov code coverage info report saved in ${Coverage_NAME}.info and ${Coverage_NAME}.json.") - if(NOT Coverage_SKIP_HTML) - string(APPEND INFO_MSG " Open ${PROJECT_BINARY_DIR}/${Coverage_NAME}/index.html in your browser to view the coverage report.") - endif() - # Show where to find the fastcov info report - add_custom_command(TARGET ${Coverage_NAME} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E echo ${INFO_MSG} - ) - -endfunction() # setup_target_for_coverage_fastcov - -function(append_coverage_compiler_flags) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE) - set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE) - message(STATUS "Appending code coverage compiler flags: ${COVERAGE_COMPILER_FLAGS}") -endfunction() # append_coverage_compiler_flags - -# Setup coverage for specific library -function(append_coverage_compiler_flags_to_target name) - separate_arguments(_flag_list NATIVE_COMMAND "${COVERAGE_COMPILER_FLAGS}") - target_compile_options(${name} PRIVATE ${_flag_list}) - if(CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_Fortran_COMPILER_ID STREQUAL "GNU") - target_link_libraries(${name} PRIVATE gcov) - endif() -endfunction() diff --git a/cmake/modules/StaticAnalyzers.cmake b/cmake/modules/StaticAnalyzers.cmake deleted file mode 100644 index 8a15aed..0000000 --- a/cmake/modules/StaticAnalyzers.cmake +++ /dev/null @@ -1,22 +0,0 @@ -if(ENABLE_CLANG_TIDY) - find_program(CLANG_TIDY_COMMAND NAMES clang-tidy) - - if(NOT CLANG_TIDY_COMMAND) - message(WARNING "🔴 CMake_RUN_CLANG_TIDY is ON but clang-tidy is not found!") - set(CMAKE_CXX_CLANG_TIDY "" CACHE STRING "" FORCE) - else() - - message(STATUS "🟢 CMake_RUN_CLANG_TIDY is ON") - set(CLANGTIDY_EXTRA_ARGS - "-extra-arg=-Wno-unknown-warning-option" - ) - set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_COMMAND};-p=${CMAKE_BINARY_DIR};${CLANGTIDY_EXTRA_ARGS}" CACHE STRING "" FORCE) - - add_custom_target(clang-tidy - COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target ${CMAKE_PROJECT_NAME} - COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target clang-tidy - COMMENT "Running clang-tidy..." - ) - set(CMAKE_EXPORT_COMPILE_COMMANDS ON) - endif() -endif(ENABLE_CLANG_TIDY) diff --git a/conandata.yml b/conandata.yml new file mode 100644 index 0000000..2aa53fd --- /dev/null +++ b/conandata.yml @@ -0,0 +1,10 @@ +sources: + "1.1.2": + url: "https://github.com/rmontanana/BayesNet/archive/v1.1.2.tar.gz" + sha256: "placeholder_sha256" # Replace with actual SHA256 when releasing + "1.0.7": + url: "https://github.com/rmontanana/BayesNet/archive/v1.0.7.tar.gz" + sha256: "placeholder_sha256" # Replace with actual SHA256 when releasing + +patches: + # Add patches here if needed for specific versions \ No newline at end of file diff --git a/conanfile.py b/conanfile.py new file mode 100644 index 0000000..9821866 --- /dev/null +++ b/conanfile.py @@ -0,0 +1,93 @@ +import os, re, pathlib +from conan import ConanFile +from conan.tools.cmake import CMakeToolchain, CMake, cmake_layout, CMakeDeps +from conan.tools.files import copy + +class BayesNetConan(ConanFile): + name = "bayesnet" + settings = "os", "compiler", "build_type", "arch" + options = { + "shared": [True, False], + "fPIC": [True, False], + "enable_testing": [True, False], + "enable_coverage": [True, False] + } + default_options = { + "shared": False, + "fPIC": True, + "enable_testing": False, + "enable_coverage": False + } + + # Sources are located in the same place as this recipe, copy them to the recipe + exports_sources = "CMakeLists.txt", "bayesnet/*", "config/*", "cmake/*", "docs/*", "tests/*", "bayesnetConfig.cmake.in" + + def set_version(self) -> None: + cmake = pathlib.Path(self.recipe_folder) / "CMakeLists.txt" + text = cmake.read_text(encoding="utf-8") + + # Accept either: project(foo VERSION 1.2.3) or set(foo_VERSION 1.2.3) + match = re.search( + r"""project\s*\([^\)]*VERSION\s+([0-9]+\.[0-9]+\.[0-9]+)""", + text, re.IGNORECASE | re.VERBOSE + ) + if match: + self.version = match.group(1) + else: + raise Exception("Version not found in CMakeLists.txt") + self.version = match.group(1) + + def config_options(self): + if self.settings.os == "Windows": + del self.options.fPIC + + def configure(self): + if self.options.shared: + self.options.rm_safe("fPIC") + + def requirements(self): + # Core dependencies + self.requires("libtorch/2.7.0") + self.requires("nlohmann_json/3.11.3") + self.requires("folding/1.1.1") # Custom package + self.requires("fimdlp/2.1.0") # Custom package + + def build_requirements(self): + self.build_requires("cmake/[>=3.27]") + self.test_requires("arff-files/1.2.0") # Custom package + self.test_requires("catch2/3.8.1") + + def layout(self): + cmake_layout(self) + + def generate(self): + deps = CMakeDeps(self) + deps.generate() + tc = CMakeToolchain(self) + tc.variables["ENABLE_TESTING"] = self.options.enable_testing + tc.variables["CODE_COVERAGE"] = self.options.enable_coverage + tc.generate() + + def build(self): + cmake = CMake(self) + cmake.configure() + cmake.build() + + if self.options.enable_testing: + # Run tests only if we're building with testing enabled + self.run("ctest --output-on-failure", cwd=self.build_folder) + + def package(self): + copy(self, "LICENSE", src=self.source_folder, dst=os.path.join(self.package_folder, "licenses")) + cmake = CMake(self) + cmake.install() + + def package_info(self): + self.cpp_info.libs = ["bayesnet"] + self.cpp_info.includedirs = ["include"] + self.cpp_info.set_property("cmake_find_mode", "both") + self.cpp_info.set_property("cmake_target_name", "bayesnet::bayesnet") + + # Add compiler flags that might be needed + if self.settings.os == "Linux": + self.cpp_info.system_libs = ["pthread"] \ No newline at end of file diff --git a/config/config.h.in b/config/config.h.in index 447fbcc..467507f 100644 --- a/config/config.h.in +++ b/config/config.h.in @@ -3,10 +3,6 @@ #include #include -#define PROJECT_VERSION_MAJOR @PROJECT_VERSION_MAJOR@ -#define PROJECT_VERSION_MINOR @PROJECT_VERSION_MINOR@ -#define PROJECT_VERSION_PATCH @PROJECT_VERSION_PATCH@ - static constexpr std::string_view project_name = "@PROJECT_NAME@"; static constexpr std::string_view project_version = "@PROJECT_VERSION@"; static constexpr std::string_view project_description = "@PROJECT_DESCRIPTION@"; diff --git a/sample/CMakeLists.txt b/sample/CMakeLists.txt index 1d93da3..4bf858a 100644 --- a/sample/CMakeLists.txt +++ b/sample/CMakeLists.txt @@ -4,37 +4,19 @@ project(bayesnet_sample VERSION 0.1.0 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) -set(CMAKE_BUILD_TYPE Release) - find_package(Torch CONFIG REQUIRED) find_package(fimdlp CONFIG REQUIRED) find_package(folding CONFIG REQUIRED) find_package(arff-files CONFIG REQUIRED) -find_package(nlohmann_json CONFIG REQUIRED) - -option(BAYESNET_VCPKG_CONFIG "Use vcpkg config for BayesNet" ON) - -if (BAYESNET_VCPKG_CONFIG) - message(STATUS "Using BayesNet vcpkg config") - find_package(bayesnet CONFIG REQUIRED) - set(BayesNet_LIBRARIES bayesnet::bayesnet) -else(BAYESNET_VCPKG_CONFIG) - message(STATUS "Using BayesNet local library config") - find_library(bayesnet NAMES libbayesnet bayesnet libbayesnet.a PATHS ${Platform_SOURCE_DIR}/../lib/lib REQUIRED) - find_path(Bayesnet_INCLUDE_DIRS REQUIRED NAMES bayesnet PATHS ${Platform_SOURCE_DIR}/../lib/include) - add_library(bayesnet::bayesnet UNKNOWN IMPORTED) - set_target_properties(bayesnet::bayesnet PROPERTIES - IMPORTED_LOCATION ${bayesnet} - INTERFACE_INCLUDE_DIRECTORIES ${Bayesnet_INCLUDE_DIRS} - ) -endif(BAYESNET_VCPKG_CONFIG) -message(STATUS "BayesNet: ${bayesnet}") +find_package(nlohmann_json REQUIRED) +find_package(bayesnet CONFIG REQUIRED) add_executable(bayesnet_sample sample.cc) target_link_libraries(bayesnet_sample PRIVATE fimdlp::fimdlp - arff-files::arff-files - "${TORCH_LIBRARIES}" + arff-files::arff-files + torch::torch bayesnet::bayesnet folding::folding + nlohmann_json::nlohmann_json ) diff --git a/sample/CMakeUserPresets.json b/sample/CMakeUserPresets.json new file mode 100644 index 0000000..945b382 --- /dev/null +++ b/sample/CMakeUserPresets.json @@ -0,0 +1,9 @@ +{ + "version": 4, + "vendor": { + "conan": {} + }, + "include": [ + "build/CMakePresets.json" + ] +} \ No newline at end of file diff --git a/sample/conanfile.txt b/sample/conanfile.txt new file mode 100644 index 0000000..5b86bb8 --- /dev/null +++ b/sample/conanfile.txt @@ -0,0 +1,14 @@ +[requires] +libtorch/2.7.0 +arff-files/1.2.0 +fimdlp/2.1.0 +folding/1.1.1 +bayesnet/1.2.0 +nlohmann_json/3.11.3 + +[generators] +CMakeToolchain +CMakeDeps + +[options] +libtorch/2.7.0:shared=True diff --git a/sample/sample.cc b/sample/sample.cc index 96f60dc..0c970ee 100644 --- a/sample/sample.cc +++ b/sample/sample.cc @@ -6,7 +6,7 @@ #include #include -#include +#include #include #include #include diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 383687f..788a6eb 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -2,12 +2,13 @@ if(ENABLE_TESTING) include_directories( ${BayesNet_SOURCE_DIR} ${CMAKE_BINARY_DIR}/configured_files/include + ${nlohmann_json_INCLUDE_DIRS} ) file(GLOB_RECURSE BayesNet_SOURCES "${bayesnet_SOURCE_DIR}/bayesnet/*.cc") add_executable(TestBayesNet TestBayesNetwork.cc TestBayesNode.cc TestBayesClassifier.cc TestXSPnDE.cc TestXBA2DE.cc TestBayesModels.cc TestBayesMetrics.cc TestFeatureSelection.cc TestBoostAODE.cc TestXBAODE.cc TestA2DE.cc TestUtils.cc TestBayesEnsemble.cc TestModulesVersions.cc TestBoostA2DE.cc TestMST.cc TestXSPODE.cc ${BayesNet_SOURCES}) - target_link_libraries(TestBayesNet PUBLIC "${TORCH_LIBRARIES}" fimdlp::fimdlp PRIVATE Catch2::Catch2WithMain) + target_link_libraries(TestBayesNet PUBLIC "${TORCH_LIBRARIES}" fimdlp::fimdlp PRIVATE Catch2::Catch2WithMain folding::folding) add_test(NAME BayesNetworkTest COMMAND TestBayesNet) add_test(NAME A2DE COMMAND TestBayesNet "[A2DE]") add_test(NAME BoostA2DE COMMAND TestBayesNet "[BoostA2DE]") diff --git a/tests/TestBayesModels.cc b/tests/TestBayesModels.cc index cdf3f25..f22eabc 100644 --- a/tests/TestBayesModels.cc +++ b/tests/TestBayesModels.cc @@ -20,7 +20,7 @@ #include "bayesnet/ensembles/AODELd.h" #include "bayesnet/ensembles/BoostAODE.h" -const std::string ACTUAL_VERSION = "1.1.2"; +const std::string ACTUAL_VERSION = "1.2.0"; TEST_CASE("Test Bayesian Classifiers score & version", "[Models]") { diff --git a/tests/TestModulesVersions.cc b/tests/TestModulesVersions.cc index cf760d6..3cd99be 100644 --- a/tests/TestModulesVersions.cc +++ b/tests/TestModulesVersions.cc @@ -16,10 +16,10 @@ #include "TestUtils.h" std::map modules = { - { "mdlp", "2.0.1" }, + { "mdlp", "2.1.0" }, { "Folding", "1.1.1" }, { "json", "3.11" }, - { "ArffFiles", "1.1.0" } + { "ArffFiles", "1.2.0" } }; TEST_CASE("MDLP", "[Modules]") diff --git a/tests/TestUtils.h b/tests/TestUtils.h index d9c741e..e93b689 100644 --- a/tests/TestUtils.h +++ b/tests/TestUtils.h @@ -11,7 +11,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/vcpkg-configuration.json b/vcpkg-configuration.json deleted file mode 100644 index 99ad7d9..0000000 --- a/vcpkg-configuration.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "default-registry": { - "kind": "git", - "baseline": "760bfd0c8d7c89ec640aec4df89418b7c2745605", - "repository": "https://github.com/microsoft/vcpkg" - }, - "registries": [ - { - "kind": "git", - "repository": "https://github.com/rmontanana/vcpkg-stash", - "baseline": "1ea69243c0e8b0de77c9d1dd6e1d7593ae7f3627", - "packages": [ - "arff-files", - "fimdlp", - "libtorch-bin", - "bayesnet", - "folding" - ] - } - ] -} \ No newline at end of file diff --git a/vcpkg.json b/vcpkg.json deleted file mode 100644 index ec3f709..0000000 --- a/vcpkg.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "bayesnet", - "version": "1.0.7", - "description": "Bayesian Network C++ Library", - "license": "MIT", - "dependencies": [ - "arff-files", - "folding", - "fimdlp", - "libtorch-bin", - "nlohmann-json", - "catch2" - ], - "overrides": [ - { - "name": "arff-files", - "version": "1.1.0" - }, - { - "name": "fimdlp", - "version": "2.0.1" - }, - { - "name": "libtorch-bin", - "version": "2.7.0" - }, - { - "name": "folding", - "version": "1.1.1" - }, - { - "name": "nlohmann-json", - "version": "3.11.3" - }, - { - "name": "catch2", - "version": "3.8.1" - } - ] -}