Skip to main content

Overview

Version set files define collections of third-party library versions that are known to work well together. Each file specifies exact versions for all dependencies in the build system.

File Naming Convention

version-set-<VTK_MAJOR>.<VTK_MINOR>.conf
The filename indicates the major.minor version of VTK included in that set:
  • version-set-9.0.conf - VTK 9.0.x
  • version-set-8.8.conf - VTK 8.8.x (also includes VTK 9.0.1)
  • version-set-7.3.46.conf - VTK 8.2.x (named after Miele version)
  • version-set-7.1.38.conf - VTK 7.1.x (named after Miele version)
Earlier version sets are named after the Miele-LXIV version rather than VTK version.

File Location

Version set files are:
  • Stored: In the build-steps directory alongside build scripts
  • Referenced: In seed.conf via the CONFIG_VERSION_SET variable
  • Sourced: By build.sh during the build process

Configuration in seed.conf

seed.conf
CONFIG_VERSION_SET="version-set-8.8.conf"
This setting is configured through seed.sh interactive menu.

Version Set Variables

Each version set file defines the following variables:

Build Configuration

MINUS_STD
string
C++ standard to use (e.g., gnu++17, gnu++14)
DEPL_TARG
string
macOS deployment target (e.g., 10.9, 10.13). If not set, auto-detected.
COMPILER_FLAGS
string
Additional compiler flags to pass to all packages

DCMTK Configuration

DCMTK_MAJOR
integer
DCMTK major version number
DCMTK_MINOR
integer
DCMTK minor version number
DCMTK_BUILD
integer
DCMTK patch/build version number
DCMTK_VERSION
string
Full DCMTK version (constructed from major.minor.build)
DCMTK_OPTIONS
string
CMake options for DCMTK configuration
DCMTK_CXX_FLAGS
string
C++ preprocessor flags for DCMTK (e.g., FOR_MIELE_LXIV)

VTK Configuration

VTK_MAJOR
integer
VTK major version number
VTK_MINOR
integer
VTK minor version number
VTK_BUILD
integer
VTK patch/build version number
VTK_VERSION
string
Full VTK version (constructed from major.minor.build)
VTK_OPTIONS
string
CMake options for VTK configuration

ITK Configuration

ITK_MAJOR
integer
ITK major version number
ITK_MINOR
integer
ITK minor version number
ITK_BUILD
integer
ITK patch/build version number
ITK_VERSION
string
Full ITK version (constructed from major.minor.build)

Supporting Libraries

ICONV_VERSION
string
libiconv version (e.g., 1.15)
XML2_VERSION
string
libxml2 version (e.g., 2.9.13)
ZLIB_VERSION
string
zlib version (e.g., 1.3.1)
OPENSSL_VERSION
string
OpenSSL version (e.g., 1.1.1d)
PNG_VERSION
string
libpng version (e.g., 1.6.37)
JPEG_VERSION
string
libjpeg version (e.g., 9d)
TIFF_VERSION
string
libtiff version (e.g., 4.0.10)

Image Format Libraries

OPENJPG_MAJOR
integer
OpenJPEG major version number
OPENJPG_MINOR
integer
OpenJPEG minor version number
OPENJPG_BUILD
integer
OpenJPEG patch/build version number
OPENJPG_VERSION
string
Full OpenJPEG version (constructed from major.minor.build)
OPENJPG_TAR
string
OpenJPEG tarball version tag (e.g., v2.3.1)
JASPER_VERSION
string
Jasper version (e.g., 2.0.32)

Graphics Libraries

GLEW_VERSION
string
GLEW version (e.g., 2.1.0)
GLEW_OPTIONS
string
CMake options for GLEW configuration
GLM_VERSION
string
GLM version (e.g., 0.9.8.5)

Application Version

MIELE_VERSION
string
Miele-LXIV application version to build (e.g., 8.4.62)

Example Version Sets

# To build latest GitHub app
MINUS_STD=gnu++17

# 2019-10-28
DCMTK_MAJOR=3
DCMTK_MINOR=6
DCMTK_BUILD=5
DCMTK_VERSION=$DCMTK_MAJOR.$DCMTK_MINOR.$DCMTK_BUILD
DCMTK_OPTIONS="-D DCMTK_WITH_OPENSSL=ON -D DCMTK_WITH_ICONV=ON"
DCMTK_CXX_FLAGS=FOR_MIELE_LXIV

GLEW_VERSION=2.1.0
GLEW_OPTIONS="-D BUILD_UTILS=ON -D BUILD_FRAMEWORK=ON"

GLM_VERSION=0.9.8.5

ICONV_VERSION=1.15
XML2_VERSION=2.9.13
ZLIB_VERSION=1.3.1

ITK_MAJOR=5
ITK_MINOR=1
ITK_BUILD=1
ITK_VERSION=$ITK_MAJOR.$ITK_MINOR.$ITK_BUILD

JASPER_VERSION=2.0.32
JPEG_VERSION=9d

OPENJPG_MAJOR=2
OPENJPG_MINOR=3
OPENJPG_BUILD=1
OPENJPG_TAR=v$OPENJPG_MAJOR.$OPENJPG_MINOR.$OPENJPG_BUILD
OPENJPG_VERSION=$OPENJPG_MAJOR.$OPENJPG_MINOR.$OPENJPG_BUILD

OPENSSL_VERSION=1.1.1d

PNG_VERSION=1.6.37

TIFF_VERSION=4.0.10

#-------------------------------------------------------------------------------
VTK_MAJOR=9
VTK_MINOR=0
VTK_BUILD=1
VTK_VERSION=$VTK_MAJOR.$VTK_MINOR.$VTK_BUILD
VTK_OPTIONS="-D VTK_RENDERING_BACKEND:STRING=OpenGL2"
#VTK_TIFF 4.0.9
#VTK_JPEG 8d  15-Jan-2012

#-------------------------------------------------------------------------------
MIELE_VERSION=8.4.62

Version Compatibility

VTK 9.x Series (version-set-8.8.conf)

  • VTK: 9.0.1
  • ITK: 5.1.1
  • DCMTK: 3.6.5
  • OpenSSL: 1.1.1d
  • C++ Standard: gnu++17
  • Target: Latest macOS (auto-detected)

VTK 8.x Series (version-set-7.3.46.conf)

  • VTK: 8.2.0
  • ITK: 4.13.2
  • DCMTK: 3.6.4
  • OpenSSL: 1.1.0j
  • C++ Standard: gnu++14
  • Target: macOS 10.9+

VTK 7.x Series (version-set-7.1.38.conf)

  • VTK: 7.1.1
  • ITK: 4.11.1
  • DCMTK: 3.6.2
  • OpenSSL: 1.1.0f (disabled)
  • C++ Standard: gnu++14
  • Target: macOS 10.9+
The 7.1.38 version set builds DCMTK without OpenSSL and iconv support.

Creating a New Version Set

To create a custom version set:

1. Copy Existing Version Set

cp version-set-8.8.conf version-set-custom.conf

2. Update Version Numbers

Modify the version variables for the packages you want to change:
# Example: Update to VTK 9.1.0
VTK_MAJOR=9
VTK_MINOR=1
VTK_BUILD=0
VTK_VERSION=$VTK_MAJOR.$VTK_MINOR.$VTK_BUILD

# Example: Update to DCMTK 3.6.6
DCMTK_MAJOR=3
DCMTK_MINOR=6
DCMTK_BUILD=6
DCMTK_VERSION=$DCMTK_MAJOR.$DCMTK_MINOR.$DCMTK_BUILD

3. Adjust Build Options

Modify CMake options if needed:
# Example: Change VTK rendering backend
VTK_OPTIONS="-D VTK_RENDERING_BACKEND:STRING=OpenGL"

# Example: Disable OpenSSL in DCMTK
DCMTK_OPTIONS="-D DCMTK_WITH_OPENSSL=OFF -D DCMTK_WITH_ICONV=ON"

4. Update seed.conf

Edit seed.conf or re-run seed.sh to select your new version set:
CONFIG_VERSION_SET="version-set-custom.conf"

5. Test the Build

Run the build and verify all packages compile successfully:
./build.sh

Version Variables Usage

The build script constructs package names from version variables:
build.sh:42-56
DCMTK=dcmtk-$DCMTK_VERSION
GLEW=glew-$GLEW_VERSION
GLM=glm-$GLM_VERSION
ICONV=libiconv-$ICONV_VERSION
ITK=InsightToolkit-$ITK_VERSION
JASPER=jasper-$JASPER_VERSION
JPEG=jpeg-$JPEG_VERSION
OPENJPG=openjpeg-$OPENJPG_VERSION
OPENSSL=openssl-$OPENSSL_VERSION
PNG=libpng-$PNG_VERSION
TIFF=tiff-$TIFF_VERSION
VTK=VTK-$VTK_VERSION
ZLIB=zlib-$ZLIB_VERSION
XML2=libxml2-v$XML2_VERSION # 'v' since 2.9.13
MIELE=$APP-$MIELE_VERSION
These are then used to construct source, build, and install paths:
build.sh:65-79
SRC_DCMTK=$SRC_P/$DCMTK  # patched
SRC_GLEW=$SRC/$GLEW
SRC_GLM=$SRC/$GLM
# ... etc

BLD_DCMTK=$BLD/$DCMTK
BLD_GLEW=$BLD/$GLEW
# ... etc

BIN_DCMTK=$BIN/$DCMTK
BIN_GLEW=$BIN/$GLEW
# ... etc

Special Version Variables

DCMTK Page Variable

build.sh:124-125
DCMTK_PAGE=dcmtk${DCMTK_MAJOR}${DCMTK_MINOR}${DCMTK_BUILD}
DCMTK_PAGE_367=dcmtk367
Used to construct download URLs:
build.sh:526
wget "https://dicom.offis.de/download/dcmtk/$DCMTK_PAGE/$DCMTK.tar.gz"

OpenJPEG Tar Variable

OPENJPG_TAR=v$OPENJPG_MAJOR.$OPENJPG_MINOR.$OPENJPG_BUILD
OpenJPEG GitHub releases use a v prefix:
build.sh:637
wget https://github.com/uclouvain/openjpeg/archive/$OPENJPG_TAR.tar.gz

XML2 Version Variable

build.sh:55
XML2=libxml2-v$XML2_VERSION # 'v' since 2.9.13
Libxml2 added a v prefix in version 2.9.13.

Best Practices

Version Selection

  1. Use tested combinations - Start with an existing version set
  2. Update incrementally - Change one package at a time
  3. Test thoroughly - Build and run the application
  4. Document changes - Add comments explaining version choices

Compatibility Notes

  1. VTK/ITK compatibility - ITK must support your VTK version
  2. DCMTK/OpenSSL - Ensure OpenSSL version is compatible
  3. C++ standard - All packages must support the same standard
  4. macOS version - Deployment target must match system capabilities

Maintenance

  1. Keep version sets - Don’t delete old sets; they’re small files
  2. Name clearly - Use descriptive names
  3. Add comments - Document release dates and compatibility

Troubleshooting

Version Not Found

If a version doesn’t exist:
  1. Check package release pages
  2. Try nearby versions (e.g., 2.0.32 instead of 2.0.31)
  3. Update download URLs if needed

Incompatible Versions

If packages don’t work together:
  1. Check package release notes
  2. Look for version compatibility matrices
  3. Try versions from a working set

Build Failures

If compilation fails:
  1. Check compiler flags (MINUS_STD)
  2. Verify deployment target
  3. Review CMake options
  4. Check for missing dependencies

See Also

Build docs developers (and LLMs) love