@@ -444,3 +444,59 @@ find_package_handle_standard_args (PETSc
444444 REQUIRED_VARS PETSC_INCLUDES PETSC_LIBRARIES PETSC_EXECUTABLE_RUNS
445445 VERSION_VAR PETSC_VERSION
446446 FAIL_MESSAGE "PETSc could not be found. Be sure to set PETSC_DIR and PETSC_ARCH." )
447+
448+ #-----------------------------------------------------------------------------
449+ # Create imported target
450+ #-----------------------------------------------------------------------------
451+ if (NOT TARGET PETSc::PETSc)
452+ set (PETSC_LIBRARY_TARGETS "" )
453+ foreach (LIBRARY_PATH ${PETSC_LIBRARIES} )
454+ get_filename_component (LIBRARY_FILENAME "${LIBRARY_PATH} " NAME )
455+ get_filename_component (LIBRARY_EXTENSION "${LIBRARY_PATH} " LAST_EXT)
456+
457+ string (REGEX REPLACE "\\ .[^.]*$" "" LIBRARY_TARGET "${LIBRARY_FILENAME} " )
458+ string (REGEX REPLACE "^lib" "" LIBRARY_TARGET "${LIBRARY_TARGET} " )
459+ set (LIBRARY_TARGET "PETSc::${LIBRARY_TARGET} _library" )
460+
461+ if (LIBRARY_EXTENSION STREQUAL ".a" )
462+ set (TARGET_TYPE "STATIC" )
463+ set (TARGET_IMPORTED_LOCATION "${LIBRARY_PATH} " )
464+ elseif (LIBRARY_EXTENSION STREQUAL ".lib" )
465+ get_filename_component (LIBRARY_BASENAME "${LIBRARY_FILENAME} " NAME_WE )
466+ get_filename_component (LIBRARY_DIRECTORY "${LIBRARY_PATH} " DIRECTORY )
467+ set (LIBRARY_DLL_SEARCH_PATHS
468+ "${LIBRARY_DIRECTORY} "
469+ "${LIBRARY_DIRECTORY} /../bin"
470+ )
471+
472+ set (TARGET_TYPE "STATIC" )
473+ set (TARGET_IMPORTED_LOCATION "${LIBRARY_PATH} " )
474+ foreach (LIBRARY_DLL_SEARCH_PATH IN LISTS LIBRARY_DLL_SEARCH_PATHS)
475+ set (CANDIDATE_LIBRARY_DLL_PATH "${LIBRARY_DLL_SEARCH_PATH} /${LIBRARY_BASENAME} .dll" )
476+ if (EXISTS "${CANDIDATE_LIBRARY_DLL_PATH} " )
477+ set (TARGET_TYPE "SHARED" )
478+ set (TARGET_IMPORTED_LOCATION "${CANDIDATE_LIBRARY_DLL_PATH} " )
479+ break ()
480+ endif ()
481+ endforeach ()
482+ elseif (LIBRARY_EXTENSION STREQUAL ".so" )
483+ set (TARGET_TYPE "SHARED" )
484+ set (TARGET_IMPORTED_LOCATION "${LIBRARY_PATH} " )
485+ elseif (LIBRARY_EXTENSION STREQUAL ".dll" )
486+ set (TARGET_TYPE "SHARED" )
487+ set (TARGET_IMPORTED_LOCATION "${LIBRARY_PATH} " )
488+ endif ()
489+
490+ add_library (${LIBRARY_TARGET} ${TARGET_TYPE} IMPORTED )
491+ set_target_properties (${LIBRARY_TARGET} PROPERTIES IMPORTED_LOCATION ${TARGET_IMPORTED_LOCATION} )
492+ if (WIN32 AND TARGET_TYPE STREQUAL "SHARED" )
493+ set_target_properties (${LIBRARY_TARGET} PROPERTIES IMPORTED_IMPLIB "${LIBRARY_PATH} " )
494+ endif ()
495+ set_target_properties (${LIBRARY_TARGET} PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${PETSC_INCLUDES} " )
496+ target_compile_definitions (${LIBRARY_TARGET} INTERFACE ${PETSC_DEFINITIONS} )
497+ list (APPEND PETSC_LIBRARY_TARGETS ${LIBRARY_TARGET} )
498+ endforeach ()
499+
500+ add_library (PETSc::PETSc INTERFACE IMPORTED )
501+ set_target_properties (PETSc::PETSc PROPERTIES INTERFACE_LINK_LIBRARIES "${PETSC_LIBRARY_TARGETS} " )
502+ endif ()
0 commit comments