23. Adding a Find Module for Third-Party Libraries¶
VisIt uses custom Find modules for most of its dependent third-party libraries.
The Find modules live in
src/CMake and most of them utilize special functions that live in
The most important of these is
SET_UP_THIRD_PARTY, as it does the bulk of the work in determining platform-specific extensions, handles
.so versioning and Windows dll’s and import libraries.
The first argument to the function is the name of the package (eg
FOO), and it expects a capitalized package name that corresponds to a
VISIT_<PKG>_DIR entry in VisIt’s config-site files.
This function also uses these keyword arguments:
- LIBS: required
The name(s) of the library(ies) without platform-specific prefixes, suffixes or extensions. For example:
SETUP_THIRD_PARTY(FOO LIBS foo1 foo2), not
SETUP_THIRD_PARTY(FOO LIBS libfoo1.so libfoo2.so).
- LIBDIR: optional
The paths beyond
VISIT_<PKG>_DIRwhere the libraries may be found.
VISIT_<PKG>_DIR>/lib64will be assumed if this is not provided.
- INCDIR: optional
The path beyond
VISIT_<PKG>_DIRwhere the headers may be found.
VISIT_<PKG>_DIR/includewill be assumed if this is not provided.
There may be situations where this simple solution is not sufficient: a package may have already created its own Find module and duplication of effort isn’t desired; or the package may be complex with many components all of which may not necessarily be needed by VisIt (e.g. VTK).
For situations where this function is not sufficient, standard CMake find calls (find_path, find_library, find_package) may be used along with the necessary special
INSTALL commands for ensuring the package’s libraries (and possibly headers) are installed alongside VisIt.
INSTALL commands that VisIt uses are custom functions:
Installs the library file.
LIBFILE is the full path to a library file.
- THIRD_PARTY_INSTALL_INCLUDE(pkg incdir)
Installs pkg’s headers.
pkg is the name of the package.
incdir1 is the full path to the headers (root of include tree if it involves multiple subdirectories).