Skip to content

Commit e4f247f

Browse files
committed
Make Windows build predictable, include HDF5, turn tests on, fix test PATH
- build.ps1: use VS 2022 x64, use fixed search paths, pass HDF5 paths, copy HDF5 DLLs - CMakeLists.txt: prefer config packages, don’t use PATH/registry, link and install HDF5, tests on by default, C++17 fallback.
1 parent 6f08429 commit e4f247f

2 files changed

Lines changed: 203 additions & 22 deletions

File tree

CMakeLists.txt

Lines changed: 127 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ cmake_minimum_required(VERSION 3.18.2)
77

88
# CMP0091: Enable MSVC runtime library selection via CMAKE_MSVC_RUNTIME_LIBRARY
99
cmake_policy(SET CMP0091 NEW)
10+
# CMP0074: Use <PackageName>_ROOT variables for find_package()
11+
cmake_policy(SET CMP0074 NEW)
1012

1113
# Guard against in-source builds to prevent polluting source directory
1214
if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
@@ -86,6 +88,11 @@ include_directories(${CMAKE_BINARY_DIR}/generated)
8688
# Add the cmake folder so the FindSphinx module is found
8789
set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
8890

91+
# Deterministic dependency discovery (avoid ambient PATH/registry drift)
92+
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON)
93+
set(CMAKE_FIND_USE_PACKAGE_REGISTRY OFF)
94+
set(CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH OFF)
95+
8996
# Force Release by default so CI builds are optimized and users get good performance
9097
if(NOT DEFINED HYDROCHRONO_DEFAULT_BUILD_TYPE)
9198
set(HYDROCHRONO_DEFAULT_BUILD_TYPE "Release")
@@ -104,9 +111,9 @@ endif()
104111
# ═══════════════════════════════════════════════════════════════════════════════
105112

106113
option(HYDROCHRONO_ENABLE_TESTS "Enable tests" ON)
107-
option(HYDROCHRONO_ENABLE_IRRLICHT "Enable irrlicht visualization library" ON)
108-
option(HYDROCHRONO_ENABLE_DEMOS "Enable demo executables" ON)
109-
option(HYDROCHRONO_ENABLE_YAML_RUNNER "Enable YAML-based CLI runner" ON)
114+
option(HYDROCHRONO_ENABLE_IRRLICHT "Enable irrlicht visualization library" OFF)
115+
option(HYDROCHRONO_ENABLE_DEMOS "Enable demo executables" OFF)
116+
option(HYDROCHRONO_ENABLE_YAML_RUNNER "Enable YAML-based CLI runner" OFF)
110117
option(HYDROCHRONO_ENABLE_USER_DOC "User's documentation" OFF)
111118
option(HYDROCHRONO_ENABLE_PROG_DOC "Programmer's documentation" OFF)
112119
option(HYDROCHRONO_ENABLE_LOGGING "Enable debug logging" OFF)
@@ -120,6 +127,9 @@ option(HYDROCHRONO_ENABLE_LOGGING "Enable debug logging" OFF)
120127
# as the one used to build the Chrono libraries.
121128
set(CXX_STANDARD_REQUIRED ON)
122129
set(CMAKE_CXX_STANDARD ${CHRONO_CXX_STANDARD})
130+
if(NOT CMAKE_CXX_STANDARD)
131+
set(CMAKE_CXX_STANDARD 17)
132+
endif()
123133

124134
# Add Chrono's cmake path so its custom FindIrrlicht module is discoverable
125135
if(DEFINED Chrono_DIR)
@@ -164,10 +174,20 @@ else()
164174
endif()
165175

166176
# ── HDF5 Integration ──
167-
# Force static linking to avoid DLL deployment issues
168-
set(HDF5_USE_STATIC_LIBRARIES ON)
177+
# Prefer config package at provided root; avoid environment/registry
178+
if(DEFINED HDF5_DIR AND NOT DEFINED HDF5_ROOT)
179+
set(HDF5_ROOT "${HDF5_DIR}")
180+
endif()
169181
set(HDF5_ROOT "${HDF5_ROOT}" CACHE PATH "HDF5 root directory")
170-
find_package(HDF5 REQUIRED COMPONENTS CXX)
182+
if(DEFINED HDF5_ROOT)
183+
# Prepend so our supplied root wins
184+
if(CMAKE_PREFIX_PATH)
185+
set(CMAKE_PREFIX_PATH "${HDF5_ROOT};${CMAKE_PREFIX_PATH}")
186+
else()
187+
set(CMAKE_PREFIX_PATH "${HDF5_ROOT}")
188+
endif()
189+
endif()
190+
find_package(HDF5 CONFIG REQUIRED COMPONENTS CXX)
171191

172192
# ---- Eigen: support both CONFIG and module modes ----
173193
find_package(Eigen3 QUIET CONFIG)
@@ -281,6 +301,13 @@ endfunction()
281301
function(configure_test_environment)
282302
# Set up DLL search paths for Windows testing
283303
set(CHRONO_DLL_DIR "${Chrono_DIR}/../bin/Release")
304+
# Always include our build output bin directories for all common configs
305+
set(HC_BIN_DIRS "${CMAKE_BINARY_DIR}/bin/Release;${CMAKE_BINARY_DIR}/bin/RelWithDebInfo;${CMAKE_BINARY_DIR}/bin/MinSizeRel;${CMAKE_BINARY_DIR}/bin/Debug")
306+
# Include HDF5 bin if available to stabilize test runtime on clean systems
307+
set(HDF5_DLL_DIR "")
308+
if(DEFINED HDF5_ROOT AND EXISTS "${HDF5_ROOT}/bin")
309+
set(HDF5_DLL_DIR "${HDF5_ROOT}/bin")
310+
endif()
284311
# Derive Irrlicht DLL dir from Irrlicht_ROOT provided by user config
285312
set(IRRLICHT_DLL_DIR "")
286313
if(DEFINED Irrlicht_ROOT AND EXISTS "${Irrlicht_ROOT}/bin/Win64-VisualStudio")
@@ -289,9 +316,17 @@ function(configure_test_environment)
289316
set(IRRLICHT_DLL_DIR "${Irrlicht_ROOT}/bin")
290317
endif()
291318
if(IRRLICHT_DLL_DIR)
292-
set(TEST_ENVIRONMENT "PATH=${CHRONO_DLL_DIR};${IRRLICHT_DLL_DIR};$ENV{PATH}" PARENT_SCOPE)
319+
if(HDF5_DLL_DIR)
320+
set(TEST_ENVIRONMENT "PATH=${HC_BIN_DIRS};${CHRONO_DLL_DIR};${IRRLICHT_DLL_DIR};${HDF5_DLL_DIR};$ENV{PATH}" PARENT_SCOPE)
321+
else()
322+
set(TEST_ENVIRONMENT "PATH=${HC_BIN_DIRS};${CHRONO_DLL_DIR};${IRRLICHT_DLL_DIR};$ENV{PATH}" PARENT_SCOPE)
323+
endif()
293324
else()
294-
set(TEST_ENVIRONMENT "PATH=${CHRONO_DLL_DIR};$ENV{PATH}" PARENT_SCOPE)
325+
if(HDF5_DLL_DIR)
326+
set(TEST_ENVIRONMENT "PATH=${HC_BIN_DIRS};${CHRONO_DLL_DIR};${HDF5_DLL_DIR};$ENV{PATH}" PARENT_SCOPE)
327+
else()
328+
set(TEST_ENVIRONMENT "PATH=${HC_BIN_DIRS};${CHRONO_DLL_DIR};$ENV{PATH}" PARENT_SCOPE)
329+
endif()
295330
endif()
296331
endfunction()
297332

@@ -316,9 +351,61 @@ set(HYDROCHRONO_SOURCES
316351
add_library(HydroChrono ${HYDROCHRONO_SOURCES})
317352
configure_hydro_target(HydroChrono)
318353

319-
# Add HDF5 as private dependency (don't expose to users)
320-
target_include_directories(HydroChrono PRIVATE ${HDF5_INCLUDE_DIRS})
321-
target_link_libraries(HydroChrono PRIVATE ${HDF5_LIBRARIES})
354+
# Add HDF5 as private dependency via imported targets (headers/flags propagate)
355+
set(HC_HDF5_TARGETS)
356+
if(TARGET HDF5::HDF5_CXX)
357+
list(APPEND HC_HDF5_TARGETS HDF5::HDF5_CXX)
358+
endif()
359+
if(TARGET HDF5::HDF5)
360+
list(APPEND HC_HDF5_TARGETS HDF5::HDF5)
361+
endif()
362+
if(TARGET hdf5::hdf5_cpp)
363+
list(APPEND HC_HDF5_TARGETS hdf5::hdf5_cpp)
364+
endif()
365+
if(TARGET hdf5::hdf5)
366+
list(APPEND HC_HDF5_TARGETS hdf5::hdf5)
367+
endif()
368+
if(TARGET hdf5::hdf5_cpp-shared)
369+
list(APPEND HC_HDF5_TARGETS hdf5::hdf5_cpp-shared)
370+
endif()
371+
if(TARGET hdf5::hdf5-shared)
372+
list(APPEND HC_HDF5_TARGETS hdf5::hdf5-shared)
373+
endif()
374+
if(HC_HDF5_TARGETS)
375+
# PUBLIC so static library link dependencies propagate to executables
376+
target_link_libraries(HydroChrono PUBLIC ${HC_HDF5_TARGETS})
377+
else()
378+
# Module-mode fallback variables (older FindHDF5)
379+
if(DEFINED HDF5_CXX_LIBRARIES OR DEFINED HDF5_LIBRARIES)
380+
target_link_libraries(HydroChrono PUBLIC ${HDF5_CXX_LIBRARIES} ${HDF5_LIBRARIES})
381+
endif()
382+
endif()
383+
384+
# Fallback: some HDF5 packages set HDF5_INCLUDE_DIRS instead of INTERFACE includes
385+
if(DEFINED HDF5_INCLUDE_DIRS)
386+
target_include_directories(HydroChrono PRIVATE ${HDF5_INCLUDE_DIRS})
387+
elseif(DEFINED HDF5_INCLUDE_DIR)
388+
target_include_directories(HydroChrono PRIVATE ${HDF5_INCLUDE_DIR})
389+
elseif(DEFINED HDF5_CXX_INCLUDE_DIR)
390+
target_include_directories(HydroChrono PRIVATE ${HDF5_CXX_INCLUDE_DIR})
391+
else()
392+
# Try to derive includes from imported target if available
393+
if(TARGET HDF5::HDF5_CXX)
394+
get_target_property(_H5_INCS HDF5::HDF5_CXX INTERFACE_INCLUDE_DIRECTORIES)
395+
if(_H5_INCS)
396+
target_include_directories(HydroChrono PRIVATE ${_H5_INCS})
397+
endif()
398+
elseif(TARGET hdf5::hdf5_cpp)
399+
get_target_property(_H5_INCS hdf5::hdf5_cpp INTERFACE_INCLUDE_DIRECTORIES)
400+
if(_H5_INCS)
401+
target_include_directories(HydroChrono PRIVATE ${_H5_INCS})
402+
endif()
403+
endif()
404+
# Last-resort fallback: include from HDF5_ROOT/include if it contains H5Cpp.h
405+
if(NOT _H5_INCS AND DEFINED HDF5_ROOT AND EXISTS "${HDF5_ROOT}/include/H5Cpp.h")
406+
target_include_directories(HydroChrono PRIVATE "${HDF5_ROOT}/include")
407+
endif()
408+
endif()
322409
target_compile_features(HydroChrono PUBLIC cxx_std_17)
323410

324411
# target_include_directories(
@@ -343,7 +430,6 @@ target_include_directories(HydroChrono
343430
PRIVATE
344431
${CMAKE_CURRENT_SOURCE_DIR}
345432
${CMAKE_CURRENT_SOURCE_DIR}/include
346-
${HDF5_INCLUDE_DIRS}
347433
)
348434

349435
# Library-specific compile definitions
@@ -374,6 +460,13 @@ if(HYDROCHRONO_ENABLE_YAML_RUNNER)
374460
PRIVATE HydroChrono HydroChronoGUI Chrono::Chrono_parsers
375461
)
376462

463+
# Safety net: if HDF5 was not propagated, link executable explicitly as well
464+
if(HC_HDF5_TARGETS)
465+
target_link_libraries(run_hydrochrono PRIVATE ${HC_HDF5_TARGETS})
466+
elseif(DEFINED HDF5_CXX_LIBRARIES OR DEFINED HDF5_LIBRARIES)
467+
target_link_libraries(run_hydrochrono PRIVATE ${HDF5_CXX_LIBRARIES} ${HDF5_LIBRARIES})
468+
endif()
469+
377470
target_include_directories(run_hydrochrono
378471
PRIVATE
379472
${PROJECT_SOURCE_DIR}/include
@@ -395,8 +488,6 @@ target_link_libraries(HydroChrono
395488
PUBLIC
396489
${CHRONO_TARGETS} # Chrono::Chrono_core;Chrono::Chrono_irrlicht;...
397490
$<$<TARGET_EXISTS:Eigen3::Eigen>:Eigen3::Eigen>
398-
PRIVATE
399-
${HDF5_LIBRARIES}
400491
)
401492

402493
# If Eigen is module-mode (no imported target), include its dir
@@ -582,6 +673,28 @@ install(FILES
582673
"${CMAKE_BINARY_DIR}/bin/Debug/yaml-cpp.dll"
583674
DESTINATION bin COMPONENT runtime OPTIONAL)
584675

676+
# HDF5 runtime DLLs (prefer imported targets, fallback to bin under HDF5_ROOT)
677+
set(HDF5_DLLS)
678+
foreach(tgt IN ITEMS HDF5::HDF5 HDF5::HDF5_CXX hdf5::hdf5 hdf5::hdf5_cpp hdf5::hdf5-shared hdf5::hdf5_cpp-shared)
679+
if(TARGET ${tgt})
680+
list(APPEND HDF5_DLLS "$<TARGET_FILE:${tgt}>")
681+
endif()
682+
endforeach()
683+
if(HDF5_DLLS)
684+
install(FILES ${HDF5_DLLS} DESTINATION bin COMPONENT runtime)
685+
else()
686+
if(DEFINED HDF5_ROOT)
687+
install(CODE "
688+
file(GLOB _H5_DLLS \"${HDF5_ROOT}/bin/*.dll\")
689+
foreach(_f IN LISTS _H5_DLLS)
690+
if(EXISTS \"${_f}\")
691+
file(INSTALL DESTINATION \"${CMAKE_INSTALL_PREFIX}/bin\" TYPE FILE FILES \"${_f}\")
692+
endif()
693+
endforeach()
694+
")
695+
endif()
696+
endif()
697+
585698
# Fallback: copy all Chrono-built DLLs for the active config into bin
586699
install(CODE "
587700
file(GLOB _ALL_DLLS \"${Chrono_DIR}/../bin/${CMAKE_INSTALL_CONFIG_NAME}/*.dll\")

build.ps1

Lines changed: 76 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
.\build.ps1 -Help # Show help
2020
.\build.ps1 -BuildType Release # Build with options
2121
.\build.ps1 -Verbose -Clean # Verbose clean build
22+
.\build.ps1 -Package # Build, install to build\install, create ZIP via CPack
2223
2324
Configuration:
2425
This script requires a build-config.json file with your local paths.
@@ -32,6 +33,7 @@ param(
3233
[Alias("h")][switch]$Help,
3334
[Alias("v")][switch]$Verbose,
3435
[Alias("p")][switch]$Package,
36+
[Alias("disabletests","nt")][switch]$NoTests,
3537
[Alias("log")][string]$LogFile = "",
3638
[Alias("config")][string]$ConfigPath = ".\build-config.json"
3739
)
@@ -232,22 +234,24 @@ function Show-Help {
232234
Write-Host "Usage: .\build.ps1 [OPTIONS]" -ForegroundColor White
233235

234236
Write-Section "Build Options"
235-
Write-Host " -YamlRunner ON|OFF Enable/disable YAML-based CLI runner (default: ON)" -ForegroundColor White
237+
Write-Host " -YamlRunner ON|OFF Enable/disable YAML-based CLI runner (default: OFF)" -ForegroundColor White
236238
Write-Host " -BuildType TYPE Build type: Debug|Release|RelWithDebInfo|MinSizeRel (default: Release)" -ForegroundColor White
237239
Write-Host " -Clean Clean build (remove build directory before building)" -ForegroundColor White
238240
Write-Host " -Verbose Enable verbose output" -ForegroundColor White
239241
Write-Host " -Package Install to build\\install and create ZIP via CPack" -ForegroundColor White
242+
Write-Host " -NoTests Disable CTest targets (tests are ON by default)" -ForegroundColor White
240243
Write-Host " -Help Show this help message" -ForegroundColor White
241244
Write-Host " -LogFile PATH Write build log to specified file (alias: -log)" -ForegroundColor White
242245
Write-Host " -ConfigPath PATH Use custom configuration file (alias: -config)" -ForegroundColor White
243246

244247
Write-Section "Quick Examples"
245-
Write-Host " .\build.ps1 # Default build (Release, YamlRunner=ON)" -ForegroundColor Gray
246-
Write-Host " .\build.ps1 -YamlRunner OFF # Build without YAML runner" -ForegroundColor Gray
247-
Write-Host " .\build.ps1 -BuildType Debug # Debug build" -ForegroundColor Gray
248-
Write-Host " .\build.ps1 -Clean -BuildType Debug # Clean debug build" -ForegroundColor Gray
249-
Write-Host " .\build.ps1 -Verbose # Verbose build with detailed output" -ForegroundColor Gray
250-
Write-Host " .\build.ps1 -ConfigPath custom.json # Use custom config file" -ForegroundColor Gray
248+
Write-Host " .\\build.ps1 # Default build (Release, YamlRunner=OFF)" -ForegroundColor Gray
249+
Write-Host " .\\build.ps1 -YamlRunner OFF # Build without YAML runner" -ForegroundColor Gray
250+
Write-Host " .\\build.ps1 -BuildType Debug # Debug build" -ForegroundColor Gray
251+
Write-Host " .\\build.ps1 -Clean -BuildType Debug # Clean debug build" -ForegroundColor Gray
252+
Write-Host " .\\build.ps1 -Verbose # Verbose build with detailed output" -ForegroundColor Gray
253+
Write-Host " .\\build.ps1 -Package # Build+install to build\\install and create ZIP" -ForegroundColor Gray
254+
Write-Host " .\\build.ps1 -ConfigPath custom.json # Use custom config file" -ForegroundColor Gray
251255

252256
Write-Section "Build Types Explained"
253257
Write-Host " Release # Optimized build for production (default)" -ForegroundColor Gray
@@ -378,7 +382,7 @@ function Configure-CMake {
378382
Write-Info "Irrlicht DIR: $($Config.IrrlichtDir)"
379383
Write-Info "Python ROOT: $($Config.PythonRoot)"
380384

381-
$cmakeArgs = Get-BuildArguments -YamlRunner $YamlRunner -BuildType $BuildType
385+
$cmakeArgs = Get-BuildArguments -YamlRunner $YamlRunner -BuildType $BuildType -NoTests $NoTests
382386

383387
Write-Subsection "Running CMake Configure"
384388
Write-Progress "Setting up project configuration..."
@@ -491,6 +495,38 @@ function Copy-ChronoDLLs {
491495
}
492496
}
493497

498+
function Copy-HDF5DLLs {
499+
Write-Section "Copying HDF5 Runtime DLLs"
500+
try {
501+
$hdf5Root = $Config.Hdf5Dir
502+
# If a share/cmake path was provided, climb to root (two parents)
503+
if ($hdf5Root -match "share\\cmake" -or $hdf5Root -match "share/cmake") {
504+
$hdf5Root = Split-Path -Parent (Split-Path -Parent $hdf5Root)
505+
}
506+
$hdf5Bin = Join-Path $hdf5Root "bin"
507+
if (-not (Test-Path $hdf5Bin)) {
508+
Write-Info "HDF5 bin directory not found: $hdf5Bin (skipping)"
509+
return $true
510+
}
511+
$destBin = Join-Path (Get-Location) "bin\$BuildType"
512+
if (-not (Test-Path $destBin)) {
513+
New-Item -ItemType Directory -Path $destBin -Force | Out-Null
514+
}
515+
$dlls = Get-ChildItem -Path $hdf5Bin -Filter "*.dll" -ErrorAction SilentlyContinue
516+
$count = 0
517+
foreach ($dll in $dlls) {
518+
$destPath = Join-Path $destBin $dll.Name
519+
Copy-Item -Path $dll.FullName -Destination $destPath -Force -ErrorAction SilentlyContinue
520+
if (Test-Path $destPath) { $count++ }
521+
}
522+
if ($count -gt 0) { Write-Success "Copied $count HDF5 DLL(s) to $destBin" } else { Write-Info "No HDF5 DLLs copied" }
523+
return $true
524+
} catch {
525+
Write-Warning "Error during HDF5 DLL copy: $($_.Exception.Message)"
526+
return $true
527+
}
528+
}
529+
494530
function Show-BuildSummary {
495531
Write-Section "Build Summary"
496532

@@ -567,17 +603,33 @@ function Get-BuildArguments {
567603
$irrlicht = ($Config.IrrlichtDir -replace '\\','/')
568604
$irrlichtDllWin = Join-Path $Config.IrrlichtDir "bin\Win64-VisualStudio\Irrlicht.dll"
569605
$irrlichtDll = ($irrlichtDllWin -replace '\\','/')
606+
607+
# Deterministic prefix path so our roots win over ambient environment
608+
$prefixParts = @()
609+
foreach ($p in @($Config.ChronoDir, $Config.Hdf5Dir, $Config.EigenDir, $Config.IrrlichtDir, $Config.PythonRoot)) {
610+
if ($p -and (Test-Path $p)) { $prefixParts += ($p -replace '\\','/') }
611+
}
612+
$prefixPath = ($prefixParts -join ';')
613+
$testsFlag = if ($NoTests) { "OFF" } else { "ON" }
570614

571615
return @(
572616
"..",
617+
"-G","Visual Studio 17 2022",
618+
"-A","x64",
573619
"-DChrono_DIR=`"$chronoDir`"",
620+
"-DHDF5_ROOT=`"$hdf5Dir`"",
574621
"-DHDF5_DIR=`"$hdf5Dir`"",
575622
"-DPython3_ROOT_DIR=`"$pythonRoot`"",
576623
"-DEIGEN3_INCLUDE_DIR=`"$eigenDir`"",
577624
"-DIrrlicht_ROOT=`"$irrlicht`"",
578625
"-DIRRLICHT_DLL_PATH=`"$irrlichtDll`"",
626+
"-DCMAKE_PREFIX_PATH=`"$prefixPath`"",
627+
"-DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON",
628+
"-DCMAKE_FIND_USE_PACKAGE_REGISTRY=OFF",
629+
"-DCMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH=OFF",
579630
"-DCHRONO_DATA_DIR=`"$($Config.ChronoDir -replace '/cmake$','' -replace '\\cmake$','')/../bin/data/`"",
580631
"-DHYDROCHRONO_ENABLE_YAML_RUNNER=`"$YamlRunner`"",
632+
"-DHYDROCHRONO_ENABLE_TESTS=`"$testsFlag`"",
581633
"-DCMAKE_BUILD_TYPE=`"$BuildType`"",
582634
"-DCMAKE_MSVC_RUNTIME_LIBRARY=`"$($Config.RuntimeLibrary)`""
583635
)
@@ -675,6 +727,20 @@ function Package-Artifacts {
675727
}
676728
}
677729
}
730+
# Copy HDF5 runtime DLLs into install\bin
731+
$hdf5Root = $Config.Hdf5Dir
732+
if ($hdf5Root -match "share\\cmake" -or $hdf5Root -match "share/cmake") {
733+
$hdf5Root = Split-Path -Parent (Split-Path -Parent $hdf5Root)
734+
}
735+
$hdf5Bin = Join-Path $hdf5Root "bin"
736+
if (Test-Path $hdf5Bin) {
737+
Get-ChildItem -Path $hdf5Bin -Filter "*.dll" -ErrorAction SilentlyContinue | ForEach-Object {
738+
$dest = Join-Path $installBin $_.Name
739+
if (-not (Test-Path $dest)) {
740+
Copy-Item -Path $_.FullName -Destination $dest -Force -ErrorAction SilentlyContinue
741+
}
742+
}
743+
}
678744
# Also copy DLLs from this project's build bin (Release/Debug) into install\bin
679745
$hcDllSource = Join-Path (Get-Location) "bin\$BuildType"
680746
if (Test-Path $hcDllSource) {
@@ -760,6 +826,7 @@ try {
760826
Write-Info "Build Type: $BuildType"
761827
Write-Info "Clean Build: $Clean"
762828
Write-Info "Verbose: $Verbose"
829+
Write-Info "Tests: $([bool](-not $NoTests))"
763830

764831
# Check dependencies
765832
if (-not (Test-Dependencies)) {
@@ -797,6 +864,7 @@ try {
797864

798865
# Copy dependencies
799866
Copy-ChronoDLLs | Out-Null
867+
Copy-HDF5DLLs | Out-Null
800868

801869
# Show summary
802870
Show-BuildSummary

0 commit comments

Comments
 (0)