diff --git a/finders/FindCLP.cmake b/finders/FindCLP.cmake new file mode 100644 index 0000000000000000000000000000000000000000..e7056f655efecd32fefc97942947ec17730d00cf --- /dev/null +++ b/finders/FindCLP.cmake @@ -0,0 +1,54 @@ +# Try to find CLP: https://www.coin-or.org/Clp/ +# On success, this will define the target Coin::CLP + +if(NOT TARGET Coin::CLP) + +if(NOT TARGET Coin::CoinUtils) + find_package(CoinUtils REQUIRED) +endif() + +find_path(CLP_INCLUDE_DIR + NAMES ClpConfig.h + PATHS "$ENV{CLP_DIR}/include/coin" + "/opt/homebrew/include/clp/coin" #homebrew default path + "/usr/local/include/clp/coin" #homebrew default path + "/usr/local/include/coin-or" + "/usr/include/coin" + "/usr/include/coin-or" + "C:\\libs\\clp\\include" + "C:\\libs\\cbc\\include" + "${VS_SEARCH_PATH}CBC-2.9.7/Clp/include" + "${VS_SEARCH_PATH}CBC-2.9.4/Clp/include" + ) + +find_library( CLP_LIBRARY + NAMES Clp libClp + PATHS "$ENV{CLP_DIR}/lib" + "/opt/homebrew/lib" # homebrew default path + "/usr/local/lib" # homebrew default path + "/usr/local/lib/coin-or" + "/usr/local/lib/coin" + "/usr/lib/coin-or" + "/usr/lib/coin" + "/usr/lib" + "C:\\libs\\clp\\lib" + "C:\\libs\\cbc\\lib" + ) + +set(CLP_INCLUDE_DIRS "${CLP_INCLUDE_DIR}" ) +set(CLP_LIBRARIES "${CLP_LIBRARY}" ) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(CLP DEFAULT_MSG + CLP_LIBRARY CLP_INCLUDE_DIR) + +if(CLP_FOUND) + add_library(Coin::CLP SHARED IMPORTED) + set_property(TARGET Coin::CLP PROPERTY IMPORTED_LOCATION ${CLP_LIBRARY}) + target_include_directories(Coin::CLP INTERFACE ${CLP_INCLUDE_DIR}) + target_link_libraries(Coin::CLP INTERFACE Coin::CoinUtils) +endif() + + +mark_as_advanced(CLP_INCLUDE_DIR CLP_LIBRARY) +endif(NOT TARGET Coin::CLP) diff --git a/finders/FindCoinUtils.cmake b/finders/FindCoinUtils.cmake new file mode 100644 index 0000000000000000000000000000000000000000..f8962d6258a287e407da4948885980bd8ac198d0 --- /dev/null +++ b/finders/FindCoinUtils.cmake @@ -0,0 +1,44 @@ +# Try to find Coin-ORs CoinUtils: https://www.coin-or.org/ +# On success, this will define the target Coin::CoinUtils +if (NOT TARGET Coin::CoinUtils) +find_path(CoinUtils_INCLUDE_DIR + NAMES CoinPragma.hpp + PATHS "$ENV{CoinUtils_DIR}/include/coin" + "/opt/homebrew/include/coinutils/coin" #homebrew default path + "/usr/local/include/coinutils/coin" #homebrew default path + "/usr/local/include/coin-or" + "/usr/include/coinutils" + "/usr/include/coin-or" + "/usr/include/coin" + "/usr/lib/coin-or" + "C:\\libs\\coinutils\\include" + ) + +find_library( CoinUtils_LIBRARY + NAMES CoinUtils + PATHS "$ENV{CoinUtils_DIR}/lib" + "/opt/homebrew/lib" # homebrew default path + "/usr/local/lib" # homebrew default path + "/usr/local/lib/coin-or" + "/usr/local/lib/coin" + "/usr/lib/coin-or" + "/usr/lib/coin" + "/usr/lib" + "C:\\libs\\clp\\lib" + ) + +set(CoinUtils_INCLUDE_DIRS "${CoinUtils_INCLUDE_DIR}" ) +set(CoinUtils_LIBRARIES "${CoinUtils_LIBRARY}" ) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(CoinUtils DEFAULT_MSG CoinUtils_LIBRARY CoinUtils_INCLUDE_DIR) + +if(CoinUtils_FOUND) + add_library(Coin::CoinUtils SHARED IMPORTED) + set_property(TARGET Coin::CoinUtils PROPERTY IMPORTED_LOCATION ${CoinUtils_LIBRARY}) + target_include_directories(Coin::CoinUtils INTERFACE ${CoinUtils_INCLUDE_DIR}) +endif() + + +mark_as_advanced(CoinUtils_INCLUDE_DIR CoinUtils_LIBRARY) +endif (NOT TARGET Coin::CoinUtils) diff --git a/finders/FindGMM.cmake b/finders/FindGMM.cmake index 36be566895c273cce7924f0591e2b20ceb40cde4..78b84b2a11eccfb697ab628e7c87bc1337b2c68e 100644 --- a/finders/FindGMM.cmake +++ b/finders/FindGMM.cmake @@ -1,3 +1,5 @@ +if (NOT TARGET GMM::GMM) + set(GMM_DIR $ENV{GMM_DIR} CACHE PATH "GMM directory (contain gmm/gmm.h).") find_path(GMM_INCLUDE_DIR @@ -21,4 +23,4 @@ endif() mark_as_advanced(GMM_INCLUDE_DIR) - +endif(NOT TARGET GMM::GMM) diff --git a/finders/FindGMSH.cmake b/finders/FindGMSH.cmake index 559358b7b69bcf9be6b82a98064e798484c4573f..90f47797593e05fa98243b547b8dfd552767b034 100644 --- a/finders/FindGMSH.cmake +++ b/finders/FindGMSH.cmake @@ -1,3 +1,5 @@ +if(NOT TARGET GMSH::GMSH) + set(GMSH_DIR $ENV{GMSH_DIR} CACHE PATH "GMSH directory (containing include/gmsh.h).") find_path(GMSH_INCLUDE_DIR @@ -29,3 +31,4 @@ mark_as_advanced(GMSH_INCLUDE_DIR) mark_as_advanced(GMSH_LIBRARY) +endif(NOT TARGET GMSH::GMSH) diff --git a/finders/FindGurobi.cmake b/finders/FindGurobi.cmake index 36a80bf035b523c60bcfd54842822e4fde1f67cc..8a1440faa10ca4e2eba9efab68e473e00d47f2cb 100644 --- a/finders/FindGurobi.cmake +++ b/finders/FindGurobi.cmake @@ -4,6 +4,7 @@ # Gurobi::GurobiC - only the C interface # Gurobi::GurobiCXX - C and C++ interface +if (NOT TARGET Gurobi::GurobiCXX) find_path(GUROBI_HOME NAMES include/gurobi_c++.h PATHS @@ -131,3 +132,4 @@ set(GUROBI_LIBRARIES Gurobi::GurobiC Gurobi::GurobiCXX) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(Gurobi DEFAULT_MSG GUROBI_LIBRARY GUROBI_INCLUDE_DIR GUROBI_SRC_DIR) +endif (NOT TARGET Gurobi::GurobiCXX) diff --git a/finders/FindLPSolve.cmake b/finders/FindLPSolve.cmake index af9418c690204246f3a184f5e91a96fe1e6f8bbb..131c02fbf973acdd704f592bb419b527d51d1fbd 100644 --- a/finders/FindLPSolve.cmake +++ b/finders/FindLPSolve.cmake @@ -1,3 +1,4 @@ +if(NOT TARGET lpsolve::lpsolve) set(LPSOLVE_DIR $ENV{LPSOLVE_DIR} CACHE PATH "lpsolve directory (contain include/lp_lib.h).") find_path(LPSOLVE_INCLUDE_DIR @@ -34,3 +35,5 @@ endif() mark_as_advanced(LPSOLVE_INCLUDE_DIR) mark_as_advanced(LPSOLVE_LIBRARY) + +endif(NOT TARGET lpsolve::lpsolve) diff --git a/finders/FindMPFI.cmake b/finders/FindMPFI.cmake index 3364d89961214387a6cb89e34d7bb4ed003ff9bb..f4a4eb5af7492da391779bd125a4a30ff85e9e5a 100644 --- a/finders/FindMPFI.cmake +++ b/finders/FindMPFI.cmake @@ -1,3 +1,5 @@ +if (NOT TARGET MPFI::MPFI) + find_path(MPFI_INCLUDE_DIR NAMES mpfi.h PATHS /usr/local/include @@ -23,3 +25,4 @@ endif() mark_as_advanced(MPFI_INCLUDE_DIR) mark_as_advanced(MPFI_LIBRARY) +endif (NOT TARGET MPFI::MPFI) diff --git a/finders/FindMPFR.cmake b/finders/FindMPFR.cmake index 1f06d543433c24da01f5e13b061bc97d5f5fcf1d..4bed0ce4274fe036193f2a469152987fde8a4637 100644 --- a/finders/FindMPFR.cmake +++ b/finders/FindMPFR.cmake @@ -1,3 +1,4 @@ +if (NOT TARGET MPFR::MPFR) find_path(MPFR_INCLUDE_DIR NAMES mpfr.h PATHS /usr/local/include @@ -23,3 +24,4 @@ endif() mark_as_advanced(MPFR_INCLUDE_DIR) mark_as_advanced(MPFR_LIBRARY) +endif (NOT TARGET MPFR::MPFR) diff --git a/finders/FindMosek.cmake b/finders/FindMosek.cmake index 0255e2176ccc8ded9d07932188c3dc874be56b8e..606e8c527989e6f854b4ac1838cf4a55a0c13389 100644 --- a/finders/FindMosek.cmake +++ b/finders/FindMosek.cmake @@ -6,6 +6,8 @@ # Tested with Mosek 9.2 on Linux +if (NOT TARGET Mosek::MosekC) + find_path (MOSEK_BASE NAMES tools/platform HINTS $ENV{MOSEK_DIR} @@ -19,6 +21,8 @@ if (${CMAKE_HOST_SYSTEM_NAME} MATCHES "Windows") set(DEFAULT_MOSEK_PLATFORM "win64x86") elseif (${CMAKE_HOST_SYSTEM_NAME} MATCHES "Darwin") set(DEFAULT_MOSEK_PLATFORM "osx64x86") + # TODO: arm64 (also on other platforms). I currently don't have Mosek installed, + # so I cant't test this. elseif (${CMAKE_HOST_SYSTEM_NAME} MATCHES "Linux") set(DEFAULT_MOSEK_PLATFORM "linux64x86") else() @@ -77,3 +81,4 @@ set(MOSEK_LIBRARIES Mosek::MosekC Mosek::FusionCXX) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(Mosek DEFAULT_MSG MOSEK_LIBRARY MOSEK_INCLUDE_DIR) +endif (NOT TARGET Mosek::MosekC)