Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,5 @@
*.ipynb diff=jupyternotebook

*.ipynb merge=jupyternotebook
# SCM syntax highlighting & preventing 3-way merges
pixi.lock merge=binary linguist-language=YAML linguist-generated=true
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -106,3 +106,7 @@ docs/test/Pressure_Error.png

docs/test/uplift/buildMount.txt
docs/test/temp.h5

# pixi environments
.pixi
*.egg-info
1 change: 1 addition & 0 deletions clean.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
set -x # show commands

rm -fr build

find src -name '*.so' -exec rm {} +
find src -name '*.__pycache__' -exec rm -r {} +
find src -name '*.egg-info' -exec rm -r {} +
Expand Down
4,477 changes: 4,477 additions & 0 deletions pixi.lock

Large diffs are not rendered by default.

40 changes: 40 additions & 0 deletions pixi.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
[workspace]
authors = ["Julian Giordani <julian.giordani@sydney.edu.au>"]
channels = [
"conda-forge",
"https://prefix.dev/pixi-build-backends"
]
name = "uw2-pixi"
platforms = ["linux-64", "osx-arm64"]

[tasks]
build = "pip install ."
test = "pytest ./docs/pytests/tests.py ./docs/pytests/test_examples.py ./docs/pytests/test_user_guide.py"

[dependencies]
petsc = "3.21.*"
python = "3.11.*"
numpy = "<2"
pint = ">=0.24.4,<0.25"
cmake = ">=4.0.3,<5"
swig = ">=4"
pkg-config = ">=0.29.2,<0.30"
compilers = ">=1.10.0,<2"
scipy = ">=1.16.0,<2"
mpi4py = ">=4.1.0,<5"
libxml2 = ">=2.13.8,<3"
ninja = ">=1.13.0,<2"
mesalib = ">=25.0.5,<26"
mpich = ">=4.3.1,<5"
hdf5 = { version = "*", build = "mpi*" }
h5py = { version = "*", build = "mpi*" }
pip = ">=25.1.1,<26"
pytest = ">=8.4.1,<9"
nbmake = ">=1.5.5,<2"
jupytext = ">=1.17.2,<2"
jupyterlab = ">=4.4.4,<5"
matplotlib = ">=3.10.5,<4"
#[host-dependencies]
c-compiler = "*"
cxx-compiler = "*"
make = "*"
10 changes: 10 additions & 0 deletions pixi_dev_notes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
## Pixi notes

Pixi is a new package manager for building Underworld2. It uses `conda-forge` and `PyPI` under the source packages. It installs them in consistent reproducible environments much like `conda`, but with the addedd benefit of lock files for deterministic builds.
Copy link

Copilot AI Nov 27, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Typo in "addedd" - should be "added".

Suggested change
Pixi is a new package manager for building Underworld2. It uses `conda-forge` and `PyPI` under the source packages. It installs them in consistent reproducible environments much like `conda`, but with the addedd benefit of lock files for deterministic builds.
Pixi is a new package manager for building Underworld2. It uses `conda-forge` and `PyPI` under the source packages. It installs them in consistent reproducible environments much like `conda`, but with the added benefit of lock files for deterministic builds.

Copilot uses AI. Check for mistakes.

### Basic commands

`pixi install` to install an environment of uw2
`pixi run build` to build uw2 in the environment
`pixi run test` to run the uw2 tests in the pixi environment
`pixi shell` (in the same directory as `pixi.toml`) to enter into the environment.
2 changes: 1 addition & 1 deletion src/underworld/_version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "2.17.0"
__version__ = "2.17.1"
10 changes: 8 additions & 2 deletions src/underworld/libUnderworld/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
cmake_minimum_required(VERSION 3.16)
cmake_policy(SET CMP0078 OLD)

# Set some Global options for CMAKE
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(Python_FIND_VIRTUALENV ONLY)
cmake_policy(SET CMP0078 OLD)
option(BUILD_SHARED_LIBS "Build using shared libraries" ON)

project(Underworld)

# Required dependencies
find_package(PkgConfig REQUIRED)
find_package(LibXml2 REQUIRED)
find_package(MPI REQUIRED)

find_package(Python3 COMPONENTS Interpreter Development NumPy REQUIRED)
find_package(SWIG 4.0 COMPONENTS python REQUIRED)

Expand All @@ -24,6 +28,7 @@ else(DEFINED ENV{PETSC_DIR})
endif()
message(STATUS "Checking for PETSc using $PKG_CONFIG_PATH=$ENV{PKG_CONFIG_PATH}")

# Get CMAKE to find PETSc
pkg_check_modules(PETSc PETSc)
if(NOT PETSc_FOUND)
message(FATAL_ERROR "Cannot find PETSc, please check that the PETSC_DIR environment "
Expand Down Expand Up @@ -204,4 +209,5 @@ install(TARGETS ${target_sources}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})

# Now build the UW Swig wrappers (after C-code has been built). All swig stuff are in libUnderworldPY
add_subdirectory(libUnderworldPy)
153 changes: 79 additions & 74 deletions src/underworld/libUnderworld/libUnderworldPy/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,14 +1,7 @@

# SWIG
find_package(SWIG REQUIRED)
find_package (Python COMPONENTS Interpreter Development)
# load swig's cmake module
include(${SWIG_USE_FILE})
include_directories(${Python3_INCLUDE_DIRS})

include_directories(../.)
include_directories(${PETSc_INCLUDE_DIRS})
include_directories(${LIBXML2_INCLUDE_DIR})
include_directories(${Python3_NumPy_INCLUDE_DIRS})

SET(UW_LIBRARIES
Underworld
Expand All @@ -25,6 +18,7 @@ if(NOT APPLE)
set(CMAKE_INSTALL_RPATH "\$ORIGIN")
else()
message(STATUS ">>> Apple")
set(CMAKE_MACOSX_RPATH TRUE)
set(CMAKE_INSTALL_RPATH "@loader_path")
endif()

Expand All @@ -35,89 +29,98 @@ set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

SET(CMAKE_SWIG_FLAGS "-v" "-Wextra" "-O" "-c++" "-DSWIG_DO_NOT_WRAP")

SET_SOURCE_FILES_PROPERTIES(Function.i PROPERTIES CPLUSPLUS ON)
set_property(SOURCE Function.i PROPERTY SWIG_MODULE_NAME Function)
SWIG_ADD_LIBRARY(Function TYPE SHARED LANGUAGE python SOURCES Function.i)
SET_TARGET_PROPERTIES(${SWIG_MODULE_Function_REAL_NAME} PROPERTIES SUFFIX ".so")
SWIG_LINK_LIBRARIES(Function PRIVATE ${UW_LIBRARIES})
SWIG_LINK_LIBRARIES(Function PRIVATE ${PETSc_LINK_LIBRARIES})

SET_SOURCE_FILES_PROPERTIES(c_arrays.i PROPERTIES CPLUSPLUS ON)
set_property(SOURCE c_arrays.i PROPERTY SWIG_MODULE_NAME c_arrays)
SWIG_ADD_LIBRARY(c_arrays TYPE SHARED LANGUAGE python SOURCES c_arrays.i)
SET_TARGET_PROPERTIES(${SWIG_MODULE_c_arrays_REAL_NAME} PROPERTIES SUFFIX ".so")
SWIG_LINK_LIBRARIES(c_arrays PRIVATE ${UW_LIBRARIES})
SWIG_LINK_LIBRARIES(c_arrays PRIVATE ${PETSc_LINK_LIBRARIES})

SET_SOURCE_FILES_PROPERTIES(c_pointers.i PROPERTIES CPLUSPLUS ON)
set_property(SOURCE c_pointers.i PROPERTY SWIG_MODULE_NAME c_pointers)
SWIG_ADD_LIBRARY(c_pointers TYPE SHARED LANGUAGE python SOURCES c_pointers.i)
SET_TARGET_PROPERTIES(${SWIG_MODULE_c_pointers_REAL_NAME} PROPERTIES SUFFIX ".so")
SWIG_LINK_LIBRARIES(c_pointers PRIVATE ${UW_LIBRARIES})
SWIG_LINK_LIBRARIES(c_pointers PRIVATE ${PETSc_LINK_LIBRARIES})

SET_SOURCE_FILES_PROPERTIES(gLucifer.i PROPERTIES CPLUSPLUS ON)
message("Swig diagnostics:")
get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
foreach(dir ${dirs})
message(STATUS "dir='${dir}'")
endforeach()
message(STATUS "UW_LIBRARIES=${UW_LIBRARIES}")
message(STATUS "PETSc_LIBRARIES=${PETSc_LIBRARIES}")
message("End Swig diagnostics:")

set_source_files_properties(Function.i PROPERTIES
CPLUSPLUS ON
SWIG_MODULE_NAME Function)
# This create swig module target, SWIG_MODULE_Function_REAL_NAME with CMP0078 != NEW
swig_add_library(Function
TYPE SHARED
LANGUAGE python
SOURCES Function.i
)
set_target_properties(${SWIG_MODULE_Function_REAL_NAME} PROPERTIES
SUFFIX ".so" )

target_link_libraries(${SWIG_MODULE_Function_REAL_NAME}
PRIVATE ${UW_LIBRARIES}
PRIVATE ${PETSc_LIBRARIES})

set_source_files_properties(c_arrays.i PROPERTIES
CPLUSPLUS ON
SWIG_MODULE_NAME c_arrays)
swig_add_library(c_arrays TYPE SHARED LANGUAGE python SOURCES c_arrays.i)
set_target_properties(${SWIG_MODULE_c_arrays_REAL_NAME} PROPERTIES SUFFIX ".so")
target_link_libraries(${SWIG_MODULE_c_arrays_REAL_NAME} PRIVATE ${UW_LIBRARIES} PRIVATE ${PETSc_LIBRARIES})

set_source_files_properties(c_pointers.i PROPERTIES
CPLUSPLUS ON
SWIG_MODULE_NAME c_pointers)
swig_add_library(c_pointers TYPE SHARED LANGUAGE python SOURCES c_pointers.i)
set_target_properties(${SWIG_MODULE_c_pointers_REAL_NAME} PROPERTIES SUFFIX ".so")
target_link_libraries(${SWIG_MODULE_c_pointers_REAL_NAME} PRIVATE ${UW_LIBRARIES} PRIVATE ${PETSc_LIBRARIES})
Copy link

Copilot AI Nov 27, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Duplicate PRIVATE keyword in target_link_libraries. The call should be target_link_libraries(${SWIG_MODULE_c_pointers_REAL_NAME} PRIVATE ${UW_LIBRARIES} ${PETSc_LIBRARIES}) with only one PRIVATE keyword at the beginning.

Copilot uses AI. Check for mistakes.

set_source_files_properties(gLucifer.i PROPERTIES CPLUSPLUS ON)
set_property(SOURCE gLucifer.i PROPERTY SWIG_MODULE_NAME gLucifer)
SWIG_ADD_LIBRARY(gLucifer TYPE SHARED LANGUAGE python SOURCES gLucifer.i)
SET_TARGET_PROPERTIES(${SWIG_MODULE_gLucifer_REAL_NAME} PROPERTIES SUFFIX ".so")
SWIG_LINK_LIBRARIES(gLucifer PRIVATE ${UW_LIBRARIES})
SWIG_LINK_LIBRARIES(gLucifer PRIVATE ${PETSc_LINK_LIBRARIES})
swig_add_library(gLucifer TYPE SHARED LANGUAGE python SOURCES gLucifer.i)
set_target_properties(${SWIG_MODULE_gLucifer_REAL_NAME} PROPERTIES SUFFIX ".so")
target_link_libraries(${SWIG_MODULE_gLucifer_REAL_NAME} PRIVATE ${UW_LIBRARIES} PRIVATE ${PETSc_LIBRARIES})

SET_SOURCE_FILES_PROPERTIES(petsc.i PROPERTIES CPLUSPLUS ON)
set_source_files_properties(petsc.i PROPERTIES CPLUSPLUS ON)
set_property(SOURCE petsc.i PROPERTY SWIG_MODULE_NAME petsc)
SWIG_ADD_LIBRARY(petsc TYPE SHARED LANGUAGE python SOURCES petsc.i)
SET_TARGET_PROPERTIES(${SWIG_MODULE_petsc_REAL_NAME} PROPERTIES SUFFIX ".so")
SWIG_LINK_LIBRARIES(petsc PRIVATE ${UW_LIBRARIES})
SWIG_LINK_LIBRARIES(petsc PRIVATE ${PETSc_LINK_LIBRARIES})
swig_add_library(petsc TYPE SHARED LANGUAGE python SOURCES petsc.i)
set_target_properties(${SWIG_MODULE_petsc_REAL_NAME} PROPERTIES SUFFIX ".so")
target_link_libraries(${SWIG_MODULE_petsc_REAL_NAME} PRIVATE ${UW_LIBRARIES} PRIVATE ${PETSc_LIBRARIES})

SET_SOURCE_FILES_PROPERTIES(PICellerator.i PROPERTIES CPLUSPLUS ON)
set_source_files_properties(PICellerator.i PROPERTIES CPLUSPLUS ON)
set_property(SOURCE PICellerator.i PROPERTY SWIG_MODULE_NAME PICellerator)
SWIG_ADD_LIBRARY(PICellerator TYPE SHARED LANGUAGE python SOURCES PICellerator.i)
SET_TARGET_PROPERTIES(${SWIG_MODULE_PICellerator_REAL_NAME} PROPERTIES SUFFIX ".so")
SWIG_LINK_LIBRARIES(PICellerator PRIVATE ${UW_LIBRARIES})
SWIG_LINK_LIBRARIES(PICellerator PRIVATE ${PETSc_LINK_LIBRARIES})
swig_add_library(PICellerator TYPE SHARED LANGUAGE python SOURCES PICellerator.i)
set_target_properties(${SWIG_MODULE_PICellerator_REAL_NAME} PROPERTIES SUFFIX ".so")
target_link_libraries(${SWIG_MODULE_PICellerator_REAL_NAME} PRIVATE ${UW_LIBRARIES} PRIVATE ${PETSc_LIBRARIES})

SET_SOURCE_FILES_PROPERTIES(Solvers.i PROPERTIES CPLUSPLUS ON)
set_source_files_properties(Solvers.i PROPERTIES CPLUSPLUS ON)
set_property(SOURCE Solvers.i PROPERTY SWIG_MODULE_NAME Solvers)
SWIG_ADD_LIBRARY(Solvers TYPE SHARED LANGUAGE python SOURCES Solvers.i)
SET_TARGET_PROPERTIES(${SWIG_MODULE_Solvers_REAL_NAME} PROPERTIES SUFFIX ".so")
SWIG_LINK_LIBRARIES(Solvers PRIVATE ${UW_LIBRARIES})
SWIG_LINK_LIBRARIES(Solvers PRIVATE ${PETSc_LINK_LIBRARIES})
swig_add_library(Solvers TYPE SHARED LANGUAGE python SOURCES Solvers.i)
set_target_properties(${SWIG_MODULE_Solvers_REAL_NAME} PROPERTIES SUFFIX ".so")
target_link_libraries(${SWIG_MODULE_Solvers_REAL_NAME} PRIVATE ${UW_LIBRARIES} PRIVATE ${PETSc_LIBRARIES})

SET_SOURCE_FILES_PROPERTIES(StgDomain.i PROPERTIES CPLUSPLUS ON)
set_source_files_properties(StgDomain.i PROPERTIES CPLUSPLUS ON)
set_property(SOURCE StgDomain.i PROPERTY SWIG_MODULE_NAME StgDomain)
SWIG_ADD_LIBRARY(StgDomain TYPE SHARED LANGUAGE python SOURCES StgDomain.i)
SET_TARGET_PROPERTIES(${SWIG_MODULE_StgDomain_REAL_NAME} PROPERTIES SUFFIX ".so")
SWIG_LINK_LIBRARIES(StgDomain PRIVATE ${UW_LIBRARIES})
SWIG_LINK_LIBRARIES(StgDomain PRIVATE ${PETSc_LINK_LIBRARIES})
swig_add_library(StgDomain TYPE SHARED LANGUAGE python SOURCES StgDomain.i)
set_target_properties(${SWIG_MODULE_StgDomain_REAL_NAME} PROPERTIES SUFFIX ".so")
target_link_libraries(${SWIG_MODULE_StgDomain_REAL_NAME} PRIVATE ${UW_LIBRARIES} PRIVATE ${PETSc_LIBRARIES})

SET_SOURCE_FILES_PROPERTIES(StGermain.i PROPERTIES CPLUSPLUS ON)
set_source_files_properties(StGermain.i PROPERTIES CPLUSPLUS ON)
set_property(SOURCE StGermain.i PROPERTY SWIG_MODULE_NAME StGermain)
SWIG_ADD_LIBRARY(StGermain TYPE SHARED LANGUAGE python SOURCES StGermain.i)
SET_TARGET_PROPERTIES(${SWIG_MODULE_StGermain_REAL_NAME} PROPERTIES SUFFIX ".so")
SWIG_LINK_LIBRARIES(StGermain PRIVATE ${UW_LIBRARIES})
SWIG_LINK_LIBRARIES(StGermain PRIVATE ${PETSc_LINK_LIBRARIES})
swig_add_library(StGermain TYPE SHARED LANGUAGE python SOURCES StGermain.i)
set_target_properties(${SWIG_MODULE_StGermain_REAL_NAME} PROPERTIES SUFFIX ".so")
target_link_libraries(${SWIG_MODULE_StGermain_REAL_NAME} PRIVATE ${UW_LIBRARIES} PRIVATE ${PETSc_LIBRARIES})

SET_SOURCE_FILES_PROPERTIES(StGermain_Tools.i PROPERTIES CPLUSPLUS ON)
set_source_files_properties(StGermain_Tools.i PROPERTIES CPLUSPLUS ON)
set_property(SOURCE StGermain_Tools.i PROPERTY SWIG_MODULE_NAME StGermain_Tools)
SWIG_ADD_LIBRARY(StGermain_Tools TYPE SHARED LANGUAGE python SOURCES StGermain_Tools.i StGermain_Tools.c)
SET_TARGET_PROPERTIES(${SWIG_MODULE_StGermain_Tools_REAL_NAME} PROPERTIES SUFFIX ".so")
SWIG_LINK_LIBRARIES(StGermain_Tools PRIVATE ${UW_LIBRARIES})
SWIG_LINK_LIBRARIES(StGermain_Tools PRIVATE ${PETSc_LINK_LIBRARIES})
swig_add_library(StGermain_Tools TYPE SHARED LANGUAGE python SOURCES StGermain_Tools.i StGermain_Tools.c)
set_target_properties(${SWIG_MODULE_StGermain_Tools_REAL_NAME} PROPERTIES SUFFIX ".so")
target_link_libraries(${SWIG_MODULE_StGermain_Tools_REAL_NAME} PRIVATE ${UW_LIBRARIES} PRIVATE ${PETSc_LIBRARIES})
Copy link

Copilot AI Nov 27, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Duplicate PRIVATE keyword in target_link_libraries. The call should be target_link_libraries(${SWIG_MODULE_StGermain_Tools_REAL_NAME} PRIVATE ${UW_LIBRARIES} ${PETSc_LIBRARIES}) with only one PRIVATE keyword at the beginning.

Suggested change
target_link_libraries(${SWIG_MODULE_StGermain_Tools_REAL_NAME} PRIVATE ${UW_LIBRARIES} PRIVATE ${PETSc_LIBRARIES})
target_link_libraries(${SWIG_MODULE_StGermain_Tools_REAL_NAME} PRIVATE ${UW_LIBRARIES} ${PETSc_LIBRARIES})

Copilot uses AI. Check for mistakes.

SET_SOURCE_FILES_PROPERTIES(StgFEM.i PROPERTIES CPLUSPLUS ON)
set_source_files_properties(StgFEM.i PROPERTIES CPLUSPLUS ON)
set_property(SOURCE StgFEM.i PROPERTY SWIG_MODULE_NAME StgFEM)
SWIG_ADD_LIBRARY(StgFEM TYPE SHARED LANGUAGE python SOURCES StgFEM.i)
SET_TARGET_PROPERTIES(${SWIG_MODULE_StgFEM_REAL_NAME} PROPERTIES SUFFIX ".so")
SWIG_LINK_LIBRARIES(StgFEM PRIVATE ${UW_LIBRARIES})
SWIG_LINK_LIBRARIES(StgFEM PRIVATE ${PETSc_LINK_LIBRARIES})
swig_add_library(StgFEM TYPE SHARED LANGUAGE python SOURCES StgFEM.i)
set_target_properties(${SWIG_MODULE_StgFEM_REAL_NAME} PROPERTIES SUFFIX ".so")
target_link_libraries(${SWIG_MODULE_StgFEM_REAL_NAME} PRIVATE ${UW_LIBRARIES} PRIVATE ${PETSc_LIBRARIES})

SET_SOURCE_FILES_PROPERTIES(Underworld.i PROPERTIES CPLUSPLUS ON)
set_source_files_properties(Underworld.i PROPERTIES CPLUSPLUS ON)
set_property(SOURCE Underworld.i PROPERTY SWIG_MODULE_NAME Underworld)
SWIG_ADD_LIBRARY(Underworld TYPE SHARED LANGUAGE python SOURCES Underworld.i)
SET_TARGET_PROPERTIES(${SWIG_MODULE_Underworld_REAL_NAME} PROPERTIES SUFFIX ".so")
SWIG_LINK_LIBRARIES(Underworld PRIVATE ${UW_LIBRARIES})
SWIG_LINK_LIBRARIES(Underworld PRIVATE ${PETSc_LINK_LIBRARIES})
swig_add_library(Underworld TYPE SHARED LANGUAGE python SOURCES Underworld.i)
set_target_properties(${SWIG_MODULE_Underworld_REAL_NAME} PROPERTIES SUFFIX ".so")
target_link_libraries(${SWIG_MODULE_Underworld_REAL_NAME} PRIVATE ${UW_LIBRARIES} PRIVATE ${PETSc_LIBRARIES})
Copy link

Copilot AI Nov 27, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Duplicate PRIVATE keyword in target_link_libraries. The call should be target_link_libraries(${SWIG_MODULE_Underworld_REAL_NAME} PRIVATE ${UW_LIBRARIES} ${PETSc_LIBRARIES}) with only one PRIVATE keyword at the beginning.

Copilot uses AI. Check for mistakes.

# Handle where to install the resulting Python package
if(CALL_FROM_SETUP_PY)
Expand All @@ -130,6 +133,7 @@ else()
set(UW_INSTALL_PREFIX ${Python3_SITELIB})
endif()

# Find the SWIG_SUPPORT_FILES from each wrapping
get_property(FUNCTION_PY_FILE TARGET ${SWIG_MODULE_Function_REAL_NAME} PROPERTY SWIG_SUPPORT_FILES)
get_property(CARRAYS_PY_FILE TARGET ${SWIG_MODULE_c_arrays_REAL_NAME} PROPERTY SWIG_SUPPORT_FILES)
get_property(CPOINTERS_PY_FILE TARGET ${SWIG_MODULE_c_pointers_REAL_NAME} PROPERTY SWIG_SUPPORT_FILES)
Expand Down Expand Up @@ -158,6 +162,7 @@ set(WRAPPER_FILES
${UNDERWORLD_PY_FILE}
)

# install the wrapper files
install(FILES ${WRAPPER_FILES} DESTINATION "${UW_INSTALL_PREFIX}/libUnderworld/libUnderworldPy")


Expand Down