From f4e171c80a1609066580d64b489b600a66dcfc75 Mon Sep 17 00:00:00 2001
From: Martin Beseda <martin.beseda@vsb.cz>
Date: Thu, 21 Feb 2019 07:54:45 +0100
Subject: [PATCH] FIX: Trying to fix CI...

---
 CMakeLists.txt         | 10 ++++++-
 DownloadOpenBLAS.cmake | 50 ++++++++++++++-----------------
 FindArmadillo.cmake    |  4 +--
 FindOpenBLAS.cmake     | 68 +++++++++++++++++++++++++++---------------
 4 files changed, 77 insertions(+), 55 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4be8ab7a..ae9096a2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -172,8 +172,16 @@ find_package(Armadillo)
 if(NOT ARMADILLO_FOUND AND ALLOW_DEPENDENCIES_DOWNLOAD)
     message("Armadillo will be downloaded and compiled locally in 'external_dependencies folder.")
     include(DownloadArmadillo)
-endif()
 
+    if(NOT LAPACK_FOUND AND NOT BLAS_FOUND)
+    target_link_libraries(
+        armadillo
+
+        PUBLIC
+        openblas
+    )
+    endif()
+endif()
 
 #---------------------------------------------------#
 # Add subdirectory with source codes to be compiled #
diff --git a/DownloadOpenBLAS.cmake b/DownloadOpenBLAS.cmake
index d93d0094..75e9bb62 100644
--- a/DownloadOpenBLAS.cmake
+++ b/DownloadOpenBLAS.cmake
@@ -20,34 +20,28 @@ FetchContent_Populate(OpenBLAS)
 ##################
 # Build OpenBLAS #
 ##################
-cexecute_process(
-    COMMAND cmake -j ${N_CORES} .
-    WORKING_DIRECTORY ${OPENBLAS_LOCAL_PATH}
-    RESULT_VARIABLE rv
-)
-if(NOT rv STREQUAL "0")
-    message("OpenBLAS build: cmake .: ${rv}")
-endif()
-
-set_target_properties(openblas PROPERTIES LINK_FLAGS -lpthread -lgfortran)
-
-# Build library
-execute_process(
-    COMMAND cmake --build . -j ${N_CORES} --config Release
-    WORKING_DIRECTORY ${OPENBLAS_LOCAL_PATH}
-    RESULT_VARIABLE rv
-)
-if(NOT rv STREQUAL "0")
-    message("OpenBLAS build: cmake --build . -j ${N_CORES}: ${rv}")
-endif()
-
-# Remove link flags
-set(CMAKE_EXE_LINKER_FLAGS ${OLD_CMAKE_EXE_LINKER_FLAGS})
+#execute_process(
+#    COMMAND cmake -j ${N_CORES} .
+#    WORKING_DIRECTORY ${OPENBLAS_LOCAL_PATH}
+#    RESULT_VARIABLE rv
+#)
+#if(NOT rv STREQUAL "0")
+#    message("OpenBLAS build: cmake .: ${rv}")
+#endif()
+#
+## Build library
+#execute_process(
+#    COMMAND cmake --build . -j ${N_CORES} --config Release
+#    WORKING_DIRECTORY ${OPENBLAS_LOCAL_PATH}
+#    RESULT_VARIABLE rv
+#)
+#if(NOT rv STREQUAL "0")
+#    message("OpenBLAS build: cmake --build . -j ${N_CORES}: ${rv}")
+#endif()
 
-set(OpenBLAS_DIR ${CMAKE_CURRENT_LIST_DIR}/external_dependencies/OpenBLAS)
 find_package(OpenBLAS)
-
-if(NOT OpenBLAS_FOUND)
-    message(FATAL_ERROR "OpenBLAS was not downloaded successfully!")
-endif()
+#
+#if(NOT OpenBLAS_FOUND)
+#    message(FATAL_ERROR "OpenBLAS was not downloaded successfully!")
+#endif()
 
diff --git a/FindArmadillo.cmake b/FindArmadillo.cmake
index 106ec09e..02f48af0 100644
--- a/FindArmadillo.cmake
+++ b/FindArmadillo.cmake
@@ -51,14 +51,14 @@ else()
         ${LIBNAME}
 
         HINTS
-            external_dependencies/armadillo
+            ${ROOT_DIR}/external_dependencies/armadillo
 
         PATHS
             /usr
-            /usr/local
 
         PATH_SUFFIXES
             lib
+            local
     )
 
     # Set ARMADILLO_FOUND honoring the QUIET and REQUIRED arguments
diff --git a/FindOpenBLAS.cmake b/FindOpenBLAS.cmake
index b5699f46..7b698e5a 100644
--- a/FindOpenBLAS.cmake
+++ b/FindOpenBLAS.cmake
@@ -19,35 +19,55 @@ FIND_PATH(
         include/x86_64-linux-gnu
 )
 
-FIND_LIBRARY(
-    OpenBLAS_LIBRARIES
+#option(LOCAL OFF)
+IF(${OpenBLAS_INCLUDE_DIR} MATCHES "^.*external_dependencies.*$")
+    message("OpenBLAS is downloaded locally - the library will be built when needed.")
+    set(LOCAL ON)
+    set(TMP "")
+    string(REGEX REPLACE "/include" "" TMP ${OpenBLAS_INCLUDE_DIR})
+    add_subdirectory(${TMP} ${TMP})
+endif()
 
-    NAMES
-    ${LIB_PREFIX}openblas.${LIB_SUFFIX}
+if(LOCAL)
+    # If OpenBLAS is downloaded locally, the library will be compiled during build-time
+    INCLUDE(FindPackageHandleStandardArgs)
+    FIND_PACKAGE_HANDLE_STANDARD_ARGS(
+            OpenBLAS
+            "OpenBLAS was NOT found!"
+            OpenBLAS_INCLUDE_DIR)
+else()
 
-    HINTS
-    ${OpenBLAS_LIBRARY_DIRECTORY}
-    $ENV{OpenBLAS_LIBRARY_DIRECTORY}
-    ${ROOT_DIR}/external_dependencies/OpenBLAS
-    /usr
-
-    PATH_SUFFIXES
-    lib
-    lib/x86_64-linux-gnu
-)
+    FIND_LIBRARY(
+        OpenBLAS_LIBRARIES
 
-# Set OpenBLAS_Found
-INCLUDE(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(
-        OpenBLAS
+        NAMES
+        ${LIB_PREFIX}openblas.${LIB_SUFFIX}
 
-        FAIL_MESSAGE
-            "OpenBLAS was NOT found!"
+        HINTS
+        ${OpenBLAS_LIBRARY_DIRECTORY}
+        $ENV{OpenBLAS_LIBRARY_DIRECTORY}
+        ${ROOT_DIR}/external_dependencies/OpenBLAS
+        /usr
 
-        REQUIRED_VARS
-            OpenBLAS_INCLUDE_DIR
-            OpenBLAS_LIBRARIES
-)
+        PATH_SUFFIXES
+        lib
+        lib/x86_64-linux-gnu
+        local
+    )
+
+    # Set OpenBLAS_Found
+    INCLUDE(FindPackageHandleStandardArgs)
+    FIND_PACKAGE_HANDLE_STANDARD_ARGS(
+            OpenBLAS
+
+            FAIL_MESSAGE
+                "OpenBLAS was NOT found!"
+
+            REQUIRED_VARS
+                OpenBLAS_INCLUDE_DIR
+                OpenBLAS_LIBRARIES
+    )
+endif()
 
 IF (OpenBLAS_FOUND)
    MESSAGE(STATUS "Found OpenBLAS libraries: ${OpenBLAS_LIBRARIES}")
-- 
GitLab