vcpkg/ports/theia/fix-external-dependencies.patch
Stefano Sinigardi 5898891125 [openexr,openimageio,suitesparse,theia] updates for non-win32 (#6371)
* [openexr,openimageio,suitesparse,theia] updates for non-win32

* [theia] use only valid cmake symbols

* [suitesparse] Fix build

* [lapack] still not properly integrating with other ports

* [lapack] intercept cmake module calls and substitute them with our defs

* [suitesparse,clapack] fixes for proper integration

* [ceres,clapack] bump CONTROL

* [suitesparse] remove unnecessary defs

* [clapack] improve wrapper logic

* [WIN32] remove wrong symbol

* [clapack] fix wrapper integration

* [Accelerate] use best framework when available

* [clapack] separate config from wrapper

* [clapack] fix paths and filenames

* [mlpack,armadillo,clapack] improve library handling

* [mlpack] remove unnecessary cmake option

* [clp,coinutils,osi,liblemon] dependencies of openmvg, improve compatibility with non-win32

* [openmvg] fix for case-sensitive filesystems

* [clp,coinutils,osi] simplify CMakeLists removing many unnecessary steps

* [sophus] Force rebuild

* [theia] fixes for linux, part1

* [io2d] remove broken sintax

* [fontconfig] bump version to remove CI cached failure

* [theia] fixes for linux, part2

* [theia] remove unnecessary empty folders and comments from portfile

* [theia] use correct build type removing forced vars in cmakelists.txt

* [openmvg] add missing suitesparse target detection

* [sophus] fix Suitesparse dependency

* [sophus,openmvg] use suitesparse lowercase for module compatibility on case-sensitive filesystems

* [suitesparse] fixes for case-sensitive filesystems

* [openmvg] use correct Eigen3 name for case-sensitive filesystems

* [sophus] trigger rebuild

* [shogun] use modern vcpkg style

* [shogun] add missing cmake system processor symbol
2019-05-31 15:48:17 -07:00

406 lines
15 KiB
Diff

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9c1b150..5810156 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -129,70 +129,27 @@ endif ()
# GFlags. The namespace patch is borrow from Ceres Solver (see license in
# FindGflags.cmake)
+message("-- Check for Google Flags")
find_package(Gflags REQUIRED)
-if (GFLAGS_FOUND)
- message("-- Found Google Flags: ${GFLAGS_INCLUDE_DIRS} in namespace: ${GFLAGS_NAMESPACE}")
- add_definitions(-DTHEIA_GFLAGS_NAMESPACE=${GFLAGS_NAMESPACE})
-else (GFLAGS_FOUND)
- message(FATAL_ERROR "Can't find Google FLAGS.")
-endif (GFLAGS_FOUND)
# Google Logging
message("-- Check for Google Log")
find_package(Glog REQUIRED)
-if (GLOG_FOUND)
- message("-- Found Google Logging: ${GLOG_INCLUDE_DIRS}")
-else (GLOG_FOUND)
- message(FATAL_ERROR "Can't find Google Logging. Please set GLOG_INCLUDE_DIR & "
- "GLOG_LIBRARY")
-endif (GLOG_FOUND)
+
+# Flann
+message("-- Check for Flann")
+find_package(Flann REQUIRED)
# Ceres
message("-- Check for Ceres")
find_package(Ceres REQUIRED SuiteSparse)
-if (CERES_FOUND)
- message("-- Found Ceres: ${CERES_INCLUDE_DIRS}")
-else (CERES_FOUND)
- message(FATAL_ERROR "Can't find Ceres. Please set CERES_INCLUDE_DIR & "
- "CERES_LIBRARY")
-endif (CERES_FOUND)
# OpenImageIO
message("-- Check for OpenImageIO")
find_package(OpenImageIO REQUIRED)
-if (OPENIMAGEIO_FOUND)
- message("-- Found OpenImageIO: ${OPENIMAGEIO_INCLUDE_DIRS}")
-else (OPENIMAGEIO_FOUND)
- message(FATAL_ERROR "Can't find OpenImageIO. Please set OPENIMAGEIO_INCLUDE_DIR & "
- "OPENIMAGEIO_LIBRARY")
-endif (OPENIMAGEIO_FOUND)
# Suitesparse
find_package(SuiteSparse REQUIRED)
-if (SUITESPARSE_FOUND)
- # On Ubuntu the system install of SuiteSparse (v3.4.0) up to at least
- # Ubuntu 13.10 cannot be used to link shared libraries.
- if (BUILD_SHARED_LIBS AND
- SUITESPARSE_IS_BROKEN_SHARED_LINKING_UBUNTU_SYSTEM_VERSION)
- message(FATAL_ERROR "You are attempting to build Theia as a shared "
- "library on Ubuntu using a system package install of SuiteSparse "
- "3.4.0. This package is broken and does not support the "
- "construction of shared libraries (you can still build Theia as "
- "a static library). If you wish to build a shared version of Theia "
- "you should uninstall the system install of SuiteSparse "
- "(libsuitesparse-dev) and perform a source install of SuiteSparse "
- "(we recommend that you use the latest version), "
- "see http://theia-solver.org/building.html for more information.")
- endif (BUILD_SHARED_LIBS AND
- SUITESPARSE_IS_BROKEN_SHARED_LINKING_UBUNTU_SYSTEM_VERSION)
- message("-- Found SuiteSparse ${SUITESPARSE_VERSION}")
- add_definitions(-DTHEIA_SUITESPARSE_VERSION="${SUITESPARSE_VERSION}")
-else (SUITESPARSE_FOUND)
- # Disable use of SuiteSparse if it cannot be found and continue.
- message(FATAL ERROR "Can't find SuiteSparse. This library is required "
- "for bundle adjustment and for solving convex optimization problems. "
- "Please set SUITESPARSE_INCLUDE_DIR & SUITESPARSE_LIBRARY")
-endif (SUITESPARSE_FOUND)
include_directories(
include
@@ -225,24 +182,19 @@ include_directories(
libraries/spectra
${akaze_SOURCE_DIR}
${akaze_INCLUDE_DIR}
- ${cereal_SOURCE_DIR}
- ${cereal_SOURCE_DIR}/include
- ${flann_SOURCE_DIR}
- ${flann_SOURCE_DIR}/src/cpp
- ${gtest_SOURCE_DIR}/include
- ${gtest_SOURCE_DIR}
${optimo_SOURCE_DIR}
${statx_SOURCE_DIR}
${stlplus3_SOURCE_DIR}
${vlfeat_SOURCE_DIR}
- ${visual_sfm_SOURCE_DIR})
+ ${visual_sfm_SOURCE_DIR}
+)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
include(OptimizeTheiaCompilerFlags)
optimizetheiacompilerflags()
add_subdirectory(src/theia)
-add_subdirectory(applications)
+#add_subdirectory(applications)
if (BUILD_DOCUMENTATION)
message("-- Documentation building is enabled")
@@ -260,7 +212,13 @@ install(FILES ${THEIA_HDRS} DESTINATION include/theia)
file(GLOB_RECURSE THEIA_INTERNAL_HDRS ${CMAKE_SOURCE_DIR}/src/theia/*.h)
install(DIRECTORY src/theia/ DESTINATION include/theia FILES_MATCHING PATTERN "*.h")
-install(DIRECTORY libraries/ DESTINATION include/theia/libraries FILES_MATCHING PATTERN "*.h*")
+install(DIRECTORY libraries/akaze/ DESTINATION include/theia/libraries/akaze FILES_MATCHING PATTERN "*.h*")
+install(DIRECTORY libraries/optimo/ DESTINATION include/theia/libraries/optimo FILES_MATCHING PATTERN "*.h*")
+install(DIRECTORY libraries/spectra/ DESTINATION include/theia/libraries/spectra FILES_MATCHING PATTERN "*.h*")
+install(DIRECTORY libraries/statx/ DESTINATION include/theia/libraries/statx FILES_MATCHING PATTERN "*.h*")
+install(DIRECTORY libraries/stlplus3/ DESTINATION include/theia/libraries/stlplus3 FILES_MATCHING PATTERN "*.h*")
+install(DIRECTORY libraries/visual_sfm/ DESTINATION include/theia/libraries/visual_sfm FILES_MATCHING PATTERN "*.h*")
+install(DIRECTORY libraries/vlfeat/ DESTINATION include/theia/libraries/vlfeat FILES_MATCHING PATTERN "*.h*")
# Add an uninstall target to remove all installed files.
configure_file("${CMAKE_SOURCE_DIR}/cmake/uninstall.cmake.in"
@@ -272,17 +230,10 @@ add_custom_target(uninstall
# Set up install directories. INCLUDE_INSTALL_DIR, LIB_INSTALL_DIR and
# CMAKECONFIG_INSTALL_DIR must not be absolute paths.
-if (WIN32)
- set(INCLUDE_INSTALL_DIR Include)
- set(LIB_INSTALL_DIR Lib)
- set(CMAKECONFIG_INSTALL_DIR CMake)
- set(RELATIVE_CMAKECONFIG_INSTALL_DIR CMake)
-else ()
- set(INCLUDE_INSTALL_DIR include)
- set(LIB_INSTALL_DIR lib)
- set(CMAKECONFIG_INSTALL_DIR share/Theia)
- set(RELATIVE_CMAKECONFIG_INSTALL_DIR share/Theia)
-endif ()
+set(INCLUDE_INSTALL_DIR include)
+set(LIB_INSTALL_DIR lib)
+set(CMAKECONFIG_INSTALL_DIR share/theia)
+set(RELATIVE_CMAKECONFIG_INSTALL_DIR share/theia)
# This "exports" all targets which have been put into the export set
# "TheiaExport". This means that CMake generates a file with the given
@@ -319,9 +270,5 @@ configure_file("${CMAKE_SOURCE_DIR}/cmake/TheiaConfigVersion.cmake.in"
# in the public API of Theia and should thus be present in THEIA_INCLUDE_DIRS.
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/TheiaConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/TheiaConfigVersion.cmake"
- "${CMAKE_SOURCE_DIR}/cmake/FindEigen.cmake"
- "${CMAKE_SOURCE_DIR}/cmake/FindGlog.cmake"
- "${CMAKE_SOURCE_DIR}/cmake/FindGflags.cmake"
- "${CMAKE_SOURCE_DIR}/cmake/FindOpenImageIO.cmake"
- "${CMAKE_SOURCE_DIR}/cmake/FindSuiteSparse.cmake"
+ "${CMAKE_SOURCE_DIR}/cmake/FindOpenImageIO.cmake"
DESTINATION ${CMAKECONFIG_INSTALL_DIR})
diff --git a/cmake/TheiaConfig.cmake.in b/cmake/TheiaConfig.cmake.in
index a3ea187..7e9d912 100644
--- a/cmake/TheiaConfig.cmake.in
+++ b/cmake/TheiaConfig.cmake.in
@@ -124,14 +124,7 @@ list(APPEND CERES_INCLUDE_DIR_HINTS @CERES_INCLUDE_DIR@)
get_filename_component(THEIA_BUILD_CERES_LIBRARY_DIR @CERES_LIBRARIES@ PATH)
list(APPEND CERES_LIBRARY_DIR_HINTS ${THEIA_BUILD_CERES_LIBRARY_DIR})
# Search quietly s/t we control the timing of the error message if not found.
-find_package(Ceres QUIET)
-if (CERES_FOUND)
- message(STATUS "Found required Theia dependency: "
- "Ceres in ${CERES_INCLUDE_DIRS}")
-else (CERES_FOUND)
- theia_report_not_found("Missing required Theia "
- "dependency: Ceres, please set CERES_INCLUDE_DIR.")
-endif (CERES_FOUND)
+find_package(Ceres REQUIRED)
list(APPEND THEIA_INCLUDE_DIRS ${CERES_INCLUDE_DIRS})
# Glog.
@@ -140,64 +133,19 @@ list(APPEND GLOG_INCLUDE_DIR_HINTS @GLOG_INCLUDE_DIR@)
get_filename_component(THEIA_BUILD_GLOG_LIBRARY_DIR @GLOG_LIBRARY@ PATH)
list(APPEND GLOG_LIBRARY_DIR_HINTS ${THEIA_BUILD_GLOG_LIBRARY_DIR})
# Search quietly s/t we control the timing of the error message if not found.
-find_package(Glog QUIET)
-if (GLOG_FOUND)
- message(STATUS "Found required Theia dependency: "
- "Glog in ${GLOG_INCLUDE_DIRS}")
-else (GLOG_FOUND)
- theia_report_not_found("Missing required Theia "
- "dependency: Glog, please set GLOG_INCLUDE_DIR.")
-endif (GLOG_FOUND)
+find_package(Glog REQUIRED)
list(APPEND THEIA_INCLUDE_DIRS ${GLOG_INCLUDE_DIRS})
# GFlags. The namespace patch is borrow from Ceres Solver (see license in
# FindGflags.cmake)
-find_package(Gflags QUIET)
-if (GFLAGS_FOUND)
- message(STATUS "Found required Theia dependency: Google Flags in "
- "${GFLAGS_INCLUDE_DIRS} in namespace: ${GFLAGS_NAMESPACE}")
- add_definitions(-DTHEIA_GFLAGS_NAMESPACE=${GFLAGS_NAMESPACE})
-else (GFLAGS_FOUND)
- theia_report_not_found("Missing required Theia dependency: Google Flags, please set "
- "GFLAGS_INCLUDE_DIR.")
-endif (GFLAGS_FOUND)
+find_package(Gflags REQUIRED)
list(APPEND THEIA_INCLUDE_DIRS ${GFLAGS_INCLUDE_DIRS})
# OpenImageIO
-find_package(OpenImageIO QUIET)
-if (OPENIMAGEIO_FOUND)
- message(STATUS "Found Theia dependency: OpenImageIO in ${OPENIMAGEIO_INCLUDE_DIRS}")
-else (OPENIMAGEIO_FOUND)
- theia_report_not_found("Missing required Theia dependency: OpenImageIO. Please set "
- "OPENIMAGEIO_INCLUDE_DIR & OPENIMAGEIO_LIBRARY")
-endif (OPENIMAGEIO_FOUND)
+find_package(OpenImageIO REQUIRED)
list(APPEND THEIA_INCLUDE_DIRS ${OPENIMAGEIO_INCLUDE_DIRS})
-find_package(SuiteSparse QUIET)
-if (SUITESPARSE_FOUND)
- # On Ubuntu the system install of SuiteSparse (v3.4.0) up to at least
- # Ubuntu 13.10 cannot be used to link shared libraries.
- if (BUILD_SHARED_LIBS AND
- SUITESPARSE_IS_BROKEN_SHARED_LINKING_UBUNTU_SYSTEM_VERSION)
- theia_report_not_found("You are attempting to build Theia as a shared "
- "library on Ubuntu using a system package install of SuiteSparse "
- "3.4.0. This package is broken and does not support the "
- "construction of shared libraries (you can still build Theia as "
- "a static library). If you wish to build a shared version of Theia "
- "you should uninstall the system install of SuiteSparse "
- "(libsuitesparse-dev) and perform a source install of SuiteSparse "
- "(we recommend that you use the latest version), "
- "see http://theia-solver.org/building.html for more information.")
- endif (BUILD_SHARED_LIBS AND
- SUITESPARSE_IS_BROKEN_SHARED_LINKING_UBUNTU_SYSTEM_VERSION)
- message("-- Found SuiteSparse ${SUITESPARSE_VERSION}")
- add_definitions(-DTHEIA_SUITESPARSE_VERSION="${SUITESPARSE_VERSION}")
-else (SUITESPARSE_FOUND)
- # Disable use of SuiteSparse if it cannot be found and continue.
- theia_report_not_found("Can't find SuiteSparse. This library is required "
- "for bundle adjustment and for solving convex optimization problems. "
- "Please set SUITESPARSE_INCLUDE_DIR & SUITESPARSE_LIBRARY")
-endif (SUITESPARSE_FOUND)
+find_package(SuiteSparse REQUIRED)
list(APPEND THEIA_INCLUDE_DIRS ${SUITESPARSE_INCLUDE_DIRS})
# Import exported Theia targets.
@@ -207,22 +155,24 @@ endif (NOT TARGET theia AND NOT Theia_BINARY_DIR)
# Set the expected XX_LIBRARIES variable for FindPackage().
set(THEIA_LIBRARIES theia)
+find_package(cereal REQUIRED)
+list(APPEND THEIA_LIBRARIES cereal)
+
+find_package(Flann REQUIRED)
+list(APPEND THEIA_INCLUDE_DIRS ${FLANN_INCLUDE_DIR})
+list(APPEND THEIA_LIBRARIES ${FLANN_LIBRARY})
+
# Add the libraries included with the distribution.
set(THEIA_INTERNAL_LIB_PREFIX ${THEIA_INCLUDE_DIR}/theia/libraries)
set(THEIA_INTERNAL_LIBS_INCLUDES
${THEIA_INTERNAL_LIB_PREFIX}
${THEIA_INTERNAL_LIB_PREFIX}/akaze
- ${THEIA_INTERNAL_LIB_PREFIX}/cereal
- ${THEIA_INTERNAL_LIB_PREFIX}/cereal/include
- ${THEIA_INTERNAL_LIB_PREFIX}/flann
- ${THEIA_INTERNAL_LIB_PREFIX}/gtest
- ${THEIA_INTERNAL_LIB_PREFIX}/gtest/include
${THEIA_INTERNAL_LIB_PREFIX}/optimo
${THEIA_INTERNAL_LIB_PREFIX}/spectra
${THEIA_INTERNAL_LIB_PREFIX}/statx
${THEIA_INTERNAL_LIB_PREFIX}/stlplus3
- ${THEIA_INTERNAL_LIB_PREFIX}/vlfeat
- ${THEIA_INTERNAL_LIB_PREFIX}/visual_sfm)
+ ${THEIA_INTERNAL_LIB_PREFIX}/visual_sfm
+ ${THEIA_INTERNAL_LIB_PREFIX}/vlfeat)
list(APPEND THEIA_INCLUDE_DIRS ${THEIA_INTERNAL_LIBS_INCLUDES})
diff --git a/libraries/CMakeLists.txt b/libraries/CMakeLists.txt
index 84f3829..f88d75a 100644
--- a/libraries/CMakeLists.txt
+++ b/libraries/CMakeLists.txt
@@ -5,12 +5,6 @@ endif (${BUILD_TESTING})
# AKAZE feature extractor.
add_subdirectory(akaze)
-# Cereal for portable IO.
-add_subdirectory(cereal)
-
-# Flann for fast approximate nearest neighbor searches.
-add_subdirectory(flann)
-
# Add Optimo.
add_subdirectory(optimo)
@@ -24,4 +18,4 @@ add_subdirectory(stlplus3)
add_subdirectory(vlfeat)
# Add VisualSfM files.
-add_subdirectory(visual_sfm)
\ No newline at end of file
+add_subdirectory(visual_sfm)
diff --git a/libraries/statx/CMakeLists.txt b/libraries/statx/CMakeLists.txt
index 23b9e49..af236a3 100644
--- a/libraries/statx/CMakeLists.txt
+++ b/libraries/statx/CMakeLists.txt
@@ -103,7 +103,11 @@ if(STATX_WITH_CERES)
endif(CERES_FOUND)
# BLAS
- find_package(BLAS REQUIRED)
+ if(UNIX AND NOT APPLE)
+ find_package(OpenBLAS REQUIRED)
+ else()
+ find_package(BLAS REQUIRED)
+ endif()
# LAPACK
find_package(LAPACK REQUIRED)
@@ -129,7 +133,6 @@ set(XGAMMA_FILES ${XGAMMA_FUNCS}/asa121.cpp ${XGAMMA_FUNCS}/asa103.cpp)
# Setting CXX FLAGS appropriately. The code below was inspired from
# Google CERES and modified for this library.
-set (CMAKE_BUILD_TYPE Release)
set (STATX_CXX_FLAGS)
if (CMAKE_BUILD_TYPE STREQUAL "Release")
diff --git a/libraries/vlfeat/CMakeLists.txt b/libraries/vlfeat/CMakeLists.txt
index 7f4ffc7..15bca12 100644
--- a/libraries/vlfeat/CMakeLists.txt
+++ b/libraries/vlfeat/CMakeLists.txt
@@ -18,14 +18,19 @@ set(vl_sources
vl/random.c
vl/sift.c
vl/vlad.c)
+
set_source_files_properties(${vl_sources} PROPERTIES LANGUAGE C)
+add_library(vlfeat ${vl_sources})
+
if (MSVC)
- add_definitions(-DVL_BUILD_DLL)
- add_definitions(-DVL_DISABLE_SSE2)
+ if(BUILD_SHARED_LIBS)
+ target_compile_definitions(vlfeat PRIVATE VL_BUILD_DLL)
+ target_compile_definitions(vlfeat INTERFACE BUILD_DLL)
+ endif()
+ target_compile_definitions(vlfeat PUBLIC VL_DISABLE_SSE2)
endif (MSVC)
-add_library(vlfeat SHARED ${vl_sources})
install(TARGETS vlfeat
EXPORT TheiaExport
RUNTIME DESTINATION bin
diff --git a/libraries/vlfeat/vl/host.h b/libraries/vlfeat/vl/host.h
index 293fe1f..0ea3d42 100644
--- a/libraries/vlfeat/vl/host.h
+++ b/libraries/vlfeat/vl/host.h
@@ -312,27 +312,31 @@ defined(__DOXYGEN__)
#if defined(VL_COMPILER_MSC) & ! defined(__DOXYGEN__)
# define VL_UNUSED
# define VL_INLINE static __inline
-# define snprintf _snprintf
# define isnan _isnan
-# ifdef VL_BUILD_DLL
+# if defined(VL_BUILD_DLL)
# ifdef __cplusplus
# define VL_EXPORT extern "C" __declspec(dllexport)
# else
# define VL_EXPORT extern __declspec(dllexport)
# endif
-# else
+# elif defined(VL_DLL)
# ifdef __cplusplus
# define VL_EXPORT extern "C" __declspec(dllimport)
# else
# define VL_EXPORT extern __declspec(dllimport)
# endif
+# else
+# ifdef __cplusplus
+# define VL_EXPORT extern "C"
+# else
+# define VL_EXPORT extern
+# endif
# endif
#endif
#if defined(VL_COMPILER_LCC) & ! defined(__DOXYGEN__)
# define VL_UNUSED
# define VL_INLINE static __inline
-# define snprintf _snprintf
# define isnan _isnan
VL_INLINE float fabsf(float x) { return (float) fabs((double) x) ; }
# ifdef VL_BUILD_DLL
diff --git a/src/theia/CMakeLists.txt b/src/theia/CMakeLists.txt
index 6830f71..768586d 100644
--- a/src/theia/CMakeLists.txt
+++ b/src/theia/CMakeLists.txt
@@ -209,7 +209,6 @@ set(THEIA_LIBRARY_DEPENDENCIES
${SUITESPARSE_LIBRARIES}
${OPENIMAGEIO_LIBRARIES}
akaze
- flann_cpp
statx
stlplus3
vlfeat