aquaveo/dev/: xmsconan-2.6.2 metadata and description

Simple index

Methods and Modules used to aid in xmsconan projects

author Gage Larsen
classifiers
  • Development Status :: 4 - Beta
  • Intended Audience :: Developers
  • Programming Language :: Python :: 3.13
description_content_type text/markdown
project_urls
  • Homepage, https://github.com/Aquaveo/xmsconan
  • Repository, https://github.com/Aquaveo/xmsconan
provides_extras test
requires_dist
  • conan>=2
  • devpi-client
  • jinja2
  • setuptools-scm
  • tabulate
  • toml
  • pytest; extra == "test"
  • pyyaml; extra == "test"
requires_python >=3.6

Because this project isn't in the mirror_whitelist, no releases from root/pypi are included.

File Tox results History
xmsconan-2.6.2-py3-none-any.whl
Size
67 KB
Type
Python Wheel
Python
3

XMSConan

Methods and Modules used to aid in xmsconan projects.

Installation

pip install xmsconan

Usage

This package provides tools for building and generating files for XMS projects using Conan.

Unified CLI

All tools are available under the xmsconan command:

xmsconan <command> [args...]
xmsconan --help              # list all commands
xmsconan gen --help          # help for a specific command
Command Description
xmsconan gen Generate build files from templates
xmsconan ci Generate CI pipeline files (GitLab/GitHub) from templates
xmsconan build Build XMS libraries
xmsconan conan-setup Set up Conan profile and remotes for CI builds
xmsconan wheel-repair Repair Python wheels for the current platform (Linux/macOS/Windows)
xmsconan wheel-deploy Upload repaired wheels to a devpi index
xmsconan conan-deploy Save, restore, or upload Conan packages in CI
xmsconan publish Build, repair, and deploy a library

Legacy entry points (xmsconan_gen, xmsconan_ci, xmsconan_build, etc.) remain available for backwards compatibility.

build.toml Schema Reference

The build.toml file defines the structure and dependencies of your XMS library. All fields are optional unless marked as required.

Required Fields

Field Type Description Example
library_name string Name of the library "xmscore"
description string Brief description "Support library for XMS products"

Source Files

Field Type Default Description
library_sources array[string] [] C++ source files for the library
library_headers array[string] [] Public header files
testing_sources array[string] [] Test implementation files (.cpp)
testing_headers array[string] [] Test header files (.t.h)
python_library_sources array[string] [] Python-specific C++ sources
python_library_headers array[string] [] Python-specific headers
pybind_sources array[string] [] Pybind11 binding sources
pybind_headers array[string] [] Pybind11 binding headers

Dependencies

Field Type Default Description
xms_dependencies array[object] [] XMS library dependencies. Each object: {name="xmscore", version="7.0.0", no_python=false}. Set no_python=true to exclude from Python package dependencies.
extra_dependencies array[string] [] Additional Conan dependencies (format: ["package/version"])
xms_dependency_options object {} Per-dependency option overrides (format: {"dep_name": {"pybind": false}})

Build Configuration

Field Type Default Description
testing_framework string "cxxtest" Testing framework ("cxxtest" or "gtest")
python_binding_type string "pybind11" Python binding framework ("pybind11" or "vtk_wrap")
python_namespaced_dir string "" Python module subdirectory (e.g., "core" for xms.core)
pybind_root boolean false Whether this is the root pybind package

Advanced

Field Type Default Description
extra_cmake_text string "" Additional CMake code injected into CMakeLists.txt
post_library_cmake_text string "" CMake code added after library target definition
extra_export_sources array[string] [] Additional directories/files to export (e.g., ["test_files"])

Example build.toml

library_name = "xmscore"
description = "Support library for XMS products"

xms_dependencies = []

python_namespaced_dir = "core"
pybind_root = true

library_sources = [
    "xmscore/math/math.cpp",
    "xmscore/misc/StringUtil.cpp",
]

library_headers = [
    "xmscore/math/math.h",
    "xmscore/misc/StringUtil.h",
]

testing_sources = [
    "xmscore/testing/TestTools.cpp"
]

testing_headers = [
    "xmscore/math/math.t.h",
    "xmscore/testing/TestTools.h",
]

pybind_sources = [
    "xmscore/python/xmscore_py.cpp",
]

Example generation

xmsconan gen --version 9.0.0 build.toml

Example generation dry-run

xmsconan gen --dry-run -v --version 9.0.0 build.toml

Example build into a shared builds folder

xmsconan build --cmake_dir . --build_dir ../builds/xmscore --profile VS2022_TESTING --generator vs2022

Example build dry-run

xmsconan build --cmake_dir . --build_dir ../builds/xmscore --profile VS2022_TESTING --generator vs2022 --dry-run -v

Useful build flags

CI Tools

These commands replace inline shell scripts in CI templates, reducing duplication and making pipelines easier to maintain.

Conan Setup

# Default: detect profile, add Aquaveo remote
xmsconan conan-setup

# GitHub Actions: also login and remove conancenter
xmsconan conan-setup --remote-url https://conan2.aquaveo.com/... --login --remove-conancenter

Wheel Repair

# Auto-detect platform and repair wheels in wheelhouse/
xmsconan wheel-repair --wheel-dir wheelhouse

# Explicit platform
xmsconan wheel-repair --wheel-dir wheelhouse --platform macos

Wheel Deploy

# Uses $AQUAPI_URL, $AQUAPI_USERNAME, $AQUAPI_PASSWORD env vars
xmsconan wheel-deploy --wheel-dir wheelhouse

# Or pass credentials explicitly
xmsconan wheel-deploy --wheel-dir wheelhouse --url https://... --username user --password pass

Conan Deploy

# Save a package to a tarball
xmsconan conan-deploy xmscore 7.0.0 --save xmscore-7.0.0.tar.gz

# Restore and upload
xmsconan conan-deploy xmscore 7.0.0 --restore xmscore-7.0.0.tar.gz --upload

Building with Docker

XMS C++ libraries can be built inside Docker containers for Linux. This is the recommended approach for producing Linux wheels and Conan packages from macOS or Windows.

Prerequisites

The workspace docker-compose.dev.yml provides two dev containers:

Container Platform Runner Best for
nextms-dev-arm linux/arm64 Native on Apple Silicon ARM Linux builds on macOS
nextms-dev-x86 linux/amd64 QEMU on Apple Silicon, native on x86 x86_64 Linux builds, CI parity

Start the container you need:

# From the workspace root (aqua_dev/)
docker compose -f docker-compose.dev.yml up dev-arm -d   # ARM (fast on Apple Silicon)
docker compose -f docker-compose.dev.yml up dev-x86 -d   # x86_64 (matches CI)

Credential Setup

Create ~/.xmsconan.toml on your host machine to avoid passing credentials on every build:

[aquapi]
url = "https://public.aquapi.aquaveo.com/aquaveo/dev/"
username = "your_username"
password = "your_password"

Mount it into the container by adding a volume to docker-compose.dev.yml:

volumes:
  - ~/.xmsconan.toml:/root/.xmsconan.toml:ro

Alternatively, pass credentials as environment variables:

docker exec -e AQUAPI_URL=https://public.aquapi.aquaveo.com/aquaveo/dev/ \
            -e AQUAPI_USERNAME=user \
            -e AQUAPI_PASSWORD=pass \
            nextms-dev-arm bash -c "cd /workspace/xmscore && xmsconan publish --version 7.0.0"

Building a Single Library

# Full build + upload (reads credentials from ~/.xmsconan.toml or env vars)
docker exec nextms-dev-arm bash -c "cd /workspace/xmscore && xmsconan publish --version 7.0.0"

# Build and repair wheel only, skip uploads
docker exec nextms-dev-arm bash -c "cd /workspace/xmscore && xmsconan publish --version 7.0.0 --no-deploy"

# Upload wheel only, skip Conan package
docker exec nextms-dev-arm bash -c "cd /workspace/xmscore && xmsconan publish --version 7.0.0 --no-conan"

# Filter to Release builds only
docker exec nextms-dev-arm bash -c "cd /workspace/xmscore && xmsconan publish --version 7.0.0 --filter '{\"build_type\": \"Release\"}'"

Building Libraries in Dependency Order

Libraries must be built in dependency order so Conan packages are available for downstream builds:

xmscore → xmsgrid → xmsinterp → xmsmesher
                               → xmsextractor → xmsconstraint
xmscore → xmsvtk

Example for a full ARM build:

CONTAINER=nextms-dev-arm
VERSION=7.0.0

docker exec $CONTAINER bash -c "cd /workspace/xmscore && xmsconan publish --version $VERSION --no-deploy"
docker exec $CONTAINER bash -c "cd /workspace/xmsgrid && xmsconan publish --version $VERSION --no-deploy"
docker exec $CONTAINER bash -c "cd /workspace/xmsinterp && xmsconan publish --version $VERSION --no-deploy"
docker exec $CONTAINER bash -c "cd /workspace/xmsmesher && xmsconan publish --version $VERSION --no-deploy"
docker exec $CONTAINER bash -c "cd /workspace/xmsextractor && xmsconan publish --version $VERSION --no-deploy"
docker exec $CONTAINER bash -c "cd /workspace/xmsconstraint && xmsconan publish --version $VERSION --no-deploy"

Replace --no-deploy with no flag to also upload each package as it's built.

macOS vs. Windows

macOS (Apple Silicon) Windows
ARM builds nextms-dev-arm — native, fast Not available
x86_64 builds nextms-dev-x86 — QEMU, slower nextms-dev-x86 — native
Docker command docker exec nextms-dev-arm ... docker exec nextms-dev-x86 ...
Workspace mount /workspace /workspace

On Windows, use nextms-dev-x86 for x86_64 Linux builds. The commands are identical — just change the container name.

License

BSD 2-Clause License