Skip to content

Commit 49a7986

Browse files
committed
cmake: add METIS imported targets
1 parent 7022bc5 commit 49a7986

File tree

2 files changed

+57
-2
lines changed

2 files changed

+57
-2
lines changed

CMakeLists.txt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,7 @@ function(configureBitpitTargetDependencies TARGET_NAME DEPENDENCIES_SCOPE)
126126
endif()
127127

128128
if (METIS_FOUND)
129-
target_link_libraries(${TARGET_NAME} ${DEPENDENCIES_SCOPE} ${METIS_LIBRARIES})
130-
target_include_directories(${TARGET_NAME} ${DEPENDENCIES_SCOPE} ${METIS_INCLUDE_DIRS})
129+
target_link_libraries(${TARGET_NAME} ${DEPENDENCIES_SCOPE} METIS::METIS)
131130

132131
target_compile_definitions(${BITPIT_LIBRARY} ${DEPENDENCIES_SCOPE} "BITPIT_ENABLE_METIS=1")
133132
else()

external/METIS/cmake/FindMETIS.cmake

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,3 +332,59 @@ find_package_handle_standard_args(METIS DEFAULT_MSG
332332
#
333333
# TODO: Add possibility to check for specific functions in the library
334334
#
335+
336+
#-----------------------------------------------------------------------------
337+
# Create imported target
338+
#-----------------------------------------------------------------------------
339+
if (NOT TARGET METIS::METIS)
340+
set(METIS_LIBRARY_TARGETS "")
341+
foreach(LIBRARY_PATH ${METIS_LIBRARIES})
342+
get_filename_component(LIBRARY_FILENAME "${LIBRARY_PATH}" NAME)
343+
get_filename_component(LIBRARY_EXTENSION "${LIBRARY_PATH}" LAST_EXT)
344+
345+
string(REGEX REPLACE "\\.[^.]*$" "" LIBRARY_TARGET "${LIBRARY_FILENAME}")
346+
string(REGEX REPLACE "^lib" "" LIBRARY_TARGET "${LIBRARY_TARGET}")
347+
set(LIBRARY_TARGET "METIS::${LIBRARY_TARGET}_library")
348+
349+
if (LIBRARY_EXTENSION STREQUAL ".a")
350+
set(TARGET_TYPE "STATIC")
351+
set(TARGET_IMPORTED_LOCATION "${LIBRARY_PATH}")
352+
elseif (LIBRARY_EXTENSION STREQUAL ".lib")
353+
get_filename_component(LIBRARY_BASENAME "${LIBRARY_FILENAME}" NAME_WE)
354+
get_filename_component(LIBRARY_DIRECTORY "${LIBRARY_PATH}" DIRECTORY)
355+
set(LIBRARY_DLL_SEARCH_PATHS
356+
"${LIBRARY_DIRECTORY}"
357+
"${LIBRARY_DIRECTORY}/../bin"
358+
"${LIBRARY_DIRECTORY}/../../bin"
359+
)
360+
361+
set(TARGET_TYPE "STATIC")
362+
set(TARGET_IMPORTED_LOCATION "${LIBRARY_PATH}")
363+
foreach(LIBRARY_DLL_SEARCH_PATH IN LISTS LIBRARY_DLL_SEARCH_PATHS)
364+
set(CANDIDATE_LIBRARY_DLL_PATH "${LIBRARY_DLL_SEARCH_PATH}/${LIBRARY_BASENAME}.dll")
365+
if(EXISTS "${CANDIDATE_LIBRARY_DLL_PATH}")
366+
set(TARGET_TYPE "SHARED")
367+
set(TARGET_IMPORTED_LOCATION "${CANDIDATE_LIBRARY_DLL_PATH}")
368+
break()
369+
endif()
370+
endforeach()
371+
elseif (LIBRARY_EXTENSION STREQUAL ".so")
372+
set(TARGET_TYPE "SHARED")
373+
set(TARGET_IMPORTED_LOCATION "${LIBRARY_PATH}")
374+
elseif (LIBRARY_EXTENSION STREQUAL ".dll")
375+
set(TARGET_TYPE "SHARED")
376+
set(TARGET_IMPORTED_LOCATION "${LIBRARY_PATH}")
377+
endif()
378+
379+
add_library(${LIBRARY_TARGET} ${TARGET_TYPE} IMPORTED)
380+
set_target_properties(${LIBRARY_TARGET} PROPERTIES IMPORTED_LOCATION ${TARGET_IMPORTED_LOCATION})
381+
if (WIN32 AND TARGET_TYPE STREQUAL "SHARED")
382+
set_target_properties(${LIBRARY_TARGET} PROPERTIES IMPORTED_IMPLIB "${LIBRARY_PATH}")
383+
endif()
384+
set_target_properties(${LIBRARY_TARGET} PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${METIS_INCLUDE_DIRS}")
385+
list(APPEND METIS_LIBRARY_TARGETS ${LIBRARY_TARGET})
386+
endforeach()
387+
388+
add_library(METIS::METIS INTERFACE IMPORTED)
389+
set_target_properties(METIS::METIS PROPERTIES INTERFACE_LINK_LIBRARIES "${METIS_LIBRARY_TARGETS}")
390+
endif()

0 commit comments

Comments
 (0)