Skip to content

Commit 2b4ad23

Browse files
committed
Refactor CMake configuration for MADS installation prefix handling and improve path quoting
1 parent c9e7f00 commit 2b4ad23

2 files changed

Lines changed: 37 additions & 10 deletions

File tree

‎CMakeLists.txt‎

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,42 @@ if(CMAKE_BUILD_TYPE STREQUAL "")
2626
endif()
2727

2828
# Get MADS prefix
29-
execute_process(
30-
COMMAND mads -p
31-
OUTPUT_VARIABLE MADS_PREFIX_RAW
32-
OUTPUT_STRIP_TRAILING_WHITESPACE
33-
)
29+
set(MADS_ROOT "" CACHE PATH "Path to the MADS installation prefix")
30+
if(MADS_ROOT)
31+
set(MADS_PREFIX_RAW "${MADS_ROOT}")
32+
elseif(DEFINED ENV{MADS_ROOT} AND NOT "$ENV{MADS_ROOT}" STREQUAL "")
33+
set(MADS_PREFIX_RAW "$ENV{MADS_ROOT}")
34+
else()
35+
execute_process(
36+
COMMAND mads -p
37+
RESULT_VARIABLE MADS_PREFIX_RESULT
38+
OUTPUT_VARIABLE MADS_PREFIX_RAW
39+
ERROR_VARIABLE MADS_PREFIX_ERROR
40+
OUTPUT_STRIP_TRAILING_WHITESPACE
41+
ERROR_STRIP_TRAILING_WHITESPACE
42+
)
43+
if(NOT MADS_PREFIX_RESULT STREQUAL "0" OR MADS_PREFIX_RAW STREQUAL "")
44+
message(FATAL_ERROR
45+
"Could not determine the MADS installation prefix. "
46+
"Set -DMADS_ROOT=<path> or make sure 'mads -p' works."
47+
)
48+
endif()
49+
endif()
50+
string(STRIP "${MADS_PREFIX_RAW}" MADS_PREFIX_RAW)
3451
file(TO_CMAKE_PATH "${MADS_PREFIX_RAW}" MADS_PREFIX)
35-
include_directories(${MADS_PREFIX}/include)
36-
link_directories(${MADS_PREFIX}/lib)
37-
set_property(CACHE CMAKE_INSTALL_PREFIX PROPERTY VALUE ${MADS_PREFIX})
52+
set(MADS_ROOT "${MADS_PREFIX}" CACHE PATH "Path to the MADS installation prefix" FORCE)
53+
if(NOT EXISTS "${MADS_PREFIX}/include/agent.hpp")
54+
message(FATAL_ERROR
55+
"MADS headers not found at '${MADS_PREFIX}/include'. "
56+
"Set -DMADS_ROOT to a valid MADS installation prefix."
57+
)
58+
endif()
59+
60+
include_directories("${MADS_PREFIX}/include")
61+
link_directories("${MADS_PREFIX}/lib")
62+
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
63+
set(CMAKE_INSTALL_PREFIX "${MADS_PREFIX}" CACHE PATH "Install prefix" FORCE)
64+
endif()
3865

3966
if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.30")
4067
# No warning on FetchContent_Populate

‎src/main/CMakeLists.txt‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ target_link_libraries(fmu-test PRIVATE fmiinterface)
2323

2424
# Agent
2525
add_executable(mads-fmu fmu_agent.cpp)
26-
target_include_directories(mads-fmu BEFORE PRIVATE ${CMAKE_SOURCE_DIR}/src/compat)
26+
target_include_directories(mads-fmu BEFORE PRIVATE "${CMAKE_SOURCE_DIR}/src/compat")
2727
if(WIN32)
2828
target_compile_definitions(mads-fmu PRIVATE _HAS_STD_BYTE=0)
29-
link_directories(${MADS_PREFIX}/lib ${MADS_PREFIX}/bin)
29+
link_directories("${MADS_PREFIX}/lib" "${MADS_PREFIX}/bin")
3030
target_link_libraries(mads-fmu PRIVATE fmiinterface Ws2_32 bcrypt Secur32 Crypt32 Dnsapi IPHLPAPI MadsCore)
3131
else()
3232
target_link_libraries(mads-fmu PRIVATE fmiinterface cxxopts MadsCore)

0 commit comments

Comments
 (0)