Skip to content

Commit 834c992

Browse files
committed
Merge pull request #14786 from mshabunin:try-install-layout
2 parents 1ae001d + 4e67eb6 commit 834c992

4 files changed

Lines changed: 115 additions & 129 deletions

File tree

CMakeLists.txt

Lines changed: 12 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -498,136 +498,28 @@ ocv_cmake_hook(POST_OPTIONS)
498498
# Build & install layouts
499499
# ----------------------------------------------------------------------------
500500

501-
# Save libs and executables in the same place
502-
set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/bin" CACHE PATH "Output directory for applications")
503-
504-
if(ANDROID)
505-
if(ANDROID_ABI MATCHES "NEON")
506-
set(ENABLE_NEON ON)
507-
endif()
508-
if(ANDROID_ABI MATCHES "VFPV3")
509-
set(ENABLE_VFPV3 ON)
510-
endif()
511-
endif()
512-
513-
if(ANDROID OR WIN32)
514-
ocv_update(OPENCV_DOC_INSTALL_PATH doc)
515-
endif()
516-
517-
if(WIN32 AND CMAKE_HOST_SYSTEM_NAME MATCHES Windows)
518-
if(DEFINED OpenCV_RUNTIME AND DEFINED OpenCV_ARCH)
519-
ocv_update(OpenCV_INSTALL_BINARIES_PREFIX "${OpenCV_ARCH}/${OpenCV_RUNTIME}/")
520-
else()
521-
message(STATUS "Can't detect runtime and/or arch")
522-
ocv_update(OpenCV_INSTALL_BINARIES_PREFIX "")
523-
endif()
524-
elseif(ANDROID)
525-
ocv_update(OpenCV_INSTALL_BINARIES_PREFIX "sdk/native/")
526-
else()
527-
ocv_update(OpenCV_INSTALL_BINARIES_PREFIX "")
528-
endif()
529-
530-
if(ANDROID)
531-
ocv_update(OPENCV_SAMPLES_BIN_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}samples/${ANDROID_NDK_ABI_NAME}")
532-
else()
533-
ocv_update(OPENCV_SAMPLES_BIN_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}samples")
534-
endif()
535-
536-
if(ANDROID)
537-
ocv_update(OPENCV_BIN_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}bin/${ANDROID_NDK_ABI_NAME}")
538-
else()
539-
ocv_update(OPENCV_BIN_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}bin")
540-
endif()
541-
542-
if(NOT OPENCV_TEST_INSTALL_PATH)
543-
ocv_update(OPENCV_TEST_INSTALL_PATH "${OPENCV_BIN_INSTALL_PATH}")
544-
endif()
545-
546-
if (OPENCV_TEST_DATA_PATH)
501+
if(OPENCV_TEST_DATA_PATH)
547502
get_filename_component(OPENCV_TEST_DATA_PATH ${OPENCV_TEST_DATA_PATH} ABSOLUTE)
548503
endif()
549504

550-
if(ANDROID)
551-
ocv_update(OPENCV_TEST_DATA_INSTALL_PATH "sdk/etc/testdata")
552-
elseif(WIN32)
553-
ocv_update(OPENCV_TEST_DATA_INSTALL_PATH "testdata")
554-
endif()
505+
# Save libs and executables in the same place
506+
set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/bin" CACHE PATH "Output directory for applications")
555507

556508
if(ANDROID)
557509
set(LIBRARY_OUTPUT_PATH "${OpenCV_BINARY_DIR}/lib/${ANDROID_NDK_ABI_NAME}")
558510
ocv_update(3P_LIBRARY_OUTPUT_PATH "${OpenCV_BINARY_DIR}/3rdparty/lib/${ANDROID_NDK_ABI_NAME}")
559-
ocv_update(OPENCV_LIB_INSTALL_PATH sdk/native/libs/${ANDROID_NDK_ABI_NAME})
560-
ocv_update(OPENCV_LIB_ARCHIVE_INSTALL_PATH sdk/native/staticlibs/${ANDROID_NDK_ABI_NAME})
561-
ocv_update(OPENCV_3P_LIB_INSTALL_PATH sdk/native/3rdparty/libs/${ANDROID_NDK_ABI_NAME})
562-
ocv_update(OPENCV_CONFIG_INSTALL_PATH sdk/native/jni)
563-
ocv_update(OPENCV_INCLUDE_INSTALL_PATH sdk/native/jni/include)
564-
ocv_update(OPENCV_SAMPLES_SRC_INSTALL_PATH samples/native)
565-
ocv_update(OPENCV_OTHER_INSTALL_PATH sdk/etc)
566-
ocv_update(OPENCV_LICENSES_INSTALL_PATH "${OPENCV_OTHER_INSTALL_PATH}/licenses")
567511
else()
568512
set(LIBRARY_OUTPUT_PATH "${OpenCV_BINARY_DIR}/lib")
569-
ocv_update(3P_LIBRARY_OUTPUT_PATH "${OpenCV_BINARY_DIR}/3rdparty/lib${LIB_SUFFIX}")
570-
571-
if(WIN32 AND CMAKE_HOST_SYSTEM_NAME MATCHES Windows)
572-
if(OpenCV_STATIC)
573-
ocv_update(OPENCV_LIB_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}staticlib${LIB_SUFFIX}")
574-
else()
575-
ocv_update(OPENCV_LIB_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}lib${LIB_SUFFIX}")
576-
endif()
577-
ocv_update(OPENCV_3P_LIB_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}staticlib${LIB_SUFFIX}")
578-
ocv_update(OPENCV_SAMPLES_SRC_INSTALL_PATH samples)
579-
ocv_update(OPENCV_JAR_INSTALL_PATH java)
580-
ocv_update(OPENCV_OTHER_INSTALL_PATH etc)
581-
ocv_update(OPENCV_CONFIG_INSTALL_PATH ".")
582-
ocv_update(OPENCV_INCLUDE_INSTALL_PATH "include")
583-
ocv_update(OPENCV_LICENSES_INSTALL_PATH "${OPENCV_OTHER_INSTALL_PATH}/licenses")
584-
else()
585-
# Note: layout differs from OpenCV 3.4
586-
include(GNUInstallDirs)
587-
ocv_update(OPENCV_INCLUDE_INSTALL_PATH "${CMAKE_INSTALL_INCLUDEDIR}/opencv4")
588-
ocv_update(OPENCV_LIB_INSTALL_PATH "${CMAKE_INSTALL_LIBDIR}")
589-
ocv_update(OPENCV_CONFIG_INSTALL_PATH "${OPENCV_LIB_INSTALL_PATH}/cmake/opencv4")
590-
ocv_update(OPENCV_3P_LIB_INSTALL_PATH "${OPENCV_LIB_INSTALL_PATH}/opencv4/3rdparty")
591-
ocv_update(OPENCV_SAMPLES_SRC_INSTALL_PATH "${CMAKE_INSTALL_DATAROOTDIR}/opencv4/samples")
592-
ocv_update(OPENCV_DOC_INSTALL_PATH "${CMAKE_INSTALL_DATAROOTDIR}/doc/opencv4")
593-
ocv_update(OPENCV_JAR_INSTALL_PATH "${CMAKE_INSTALL_DATAROOTDIR}/java/opencv4")
594-
ocv_update(OPENCV_TEST_DATA_INSTALL_PATH "${CMAKE_INSTALL_DATAROOTDIR}/opencv4/testdata")
595-
ocv_update(OPENCV_OTHER_INSTALL_PATH "${CMAKE_INSTALL_DATAROOTDIR}/opencv4")
596-
ocv_update(OPENCV_LICENSES_INSTALL_PATH "${CMAKE_INSTALL_DATAROOTDIR}/licenses/opencv4")
597-
endif()
598-
#ocv_update(OPENCV_PYTHON_INSTALL_PATH "python") # no default value, see https://github.com/opencv/opencv/issues/13202
599-
endif()
600-
601-
ocv_update(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${OPENCV_LIB_INSTALL_PATH}")
602-
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
603-
604-
if(INSTALL_TO_MANGLED_PATHS)
605-
foreach(v
606-
OPENCV_INCLUDE_INSTALL_PATH
607-
# file names include version (.so/.dll): OPENCV_LIB_INSTALL_PATH
608-
OPENCV_CONFIG_INSTALL_PATH
609-
OPENCV_3P_LIB_INSTALL_PATH
610-
OPENCV_SAMPLES_SRC_INSTALL_PATH
611-
OPENCV_DOC_INSTALL_PATH
612-
# JAR file name includes version: OPENCV_JAR_INSTALL_PATH
613-
OPENCV_TEST_DATA_INSTALL_PATH
614-
OPENCV_OTHER_INSTALL_PATH
615-
)
616-
string(REGEX REPLACE "opencv[0-9]*" "opencv-${OPENCV_VERSION}" ${v} "${${v}}")
617-
endforeach()
513+
ocv_update(3P_LIBRARY_OUTPUT_PATH "${OpenCV_BINARY_DIR}/3rdparty/lib")
618514
endif()
619515

620516
if(ANDROID)
621-
ocv_update(OPENCV_JNI_INSTALL_PATH "${OPENCV_LIB_INSTALL_PATH}")
622-
elseif(INSTALL_CREATE_DISTRIB)
623-
ocv_update(OPENCV_JNI_INSTALL_PATH "${OPENCV_JAR_INSTALL_PATH}/${OpenCV_ARCH}")
624-
else()
625-
ocv_update(OPENCV_JNI_INSTALL_PATH "${OPENCV_JAR_INSTALL_PATH}")
626-
endif()
627-
ocv_update(OPENCV_JNI_BIN_INSTALL_PATH "${OPENCV_JNI_INSTALL_PATH}")
628-
629-
if(NOT OPENCV_LIB_ARCHIVE_INSTALL_PATH)
630-
set(OPENCV_LIB_ARCHIVE_INSTALL_PATH ${OPENCV_LIB_INSTALL_PATH})
517+
if(ANDROID_ABI MATCHES "NEON")
518+
set(ENABLE_NEON ON)
519+
endif()
520+
if(ANDROID_ABI MATCHES "VFPV3")
521+
set(ENABLE_VFPV3 ON)
522+
endif()
631523
endif()
632524

633525
if(WIN32)
@@ -648,6 +540,8 @@ if((INSTALL_CREATE_DISTRIB AND BUILD_SHARED_LIBS AND NOT DEFINED BUILD_opencv_wo
648540
set(BUILD_opencv_world ON CACHE INTERNAL "")
649541
endif()
650542

543+
include(cmake/OpenCVInstallLayout.cmake)
544+
651545
# ----------------------------------------------------------------------------
652546
# Path for build/platform -specific headers
653547
# ----------------------------------------------------------------------------

cmake/OpenCVDetectPython.cmake

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -186,11 +186,7 @@ if(NOT ${found})
186186
else() #debian based assumed, install to the dist-packages.
187187
set(_packages_path "python${_version_major_minor}/dist-packages")
188188
endif()
189-
if(EXISTS "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}/${${packages_path}}")
190-
set(_packages_path "lib${LIB_SUFFIX}/${_packages_path}")
191-
else()
192-
set(_packages_path "lib/${_packages_path}")
193-
endif()
189+
set(_packages_path "lib/${_packages_path}")
194190
elseif(CMAKE_HOST_WIN32)
195191
get_filename_component(_path "${_executable}" PATH)
196192
file(TO_CMAKE_PATH "${_path}" _path)

cmake/OpenCVGenConfig.cmake

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -123,12 +123,7 @@ endif()
123123
# --------------------------------------------------------------------------------------------
124124
if(WIN32)
125125
if(CMAKE_HOST_SYSTEM_NAME MATCHES Windows)
126-
if(BUILD_SHARED_LIBS)
127-
set(_lib_suffix "lib")
128-
else()
129-
set(_lib_suffix "staticlib")
130-
endif()
131-
ocv_gen_config("${CMAKE_BINARY_DIR}/win-install" "${OpenCV_INSTALL_BINARIES_PREFIX}${_lib_suffix}" "OpenCVConfig.root-WIN32.cmake.in")
126+
ocv_gen_config("${CMAKE_BINARY_DIR}/win-install" "${OPENCV_LIB_INSTALL_PATH}" "OpenCVConfig.root-WIN32.cmake.in")
132127
else()
133128
ocv_gen_config("${CMAKE_BINARY_DIR}/win-install" "" "")
134129
endif()

cmake/OpenCVInstallLayout.cmake

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
# message(STATUS "Initial install layout:")
2+
# ocv_cmake_dump_vars("OPENCV_.*_INSTALL_PATH")
3+
4+
if(ANDROID)
5+
6+
ocv_update(OPENCV_BIN_INSTALL_PATH "sdk/native/bin/${ANDROID_NDK_ABI_NAME}")
7+
ocv_update(OPENCV_TEST_INSTALL_PATH "${OPENCV_BIN_INSTALL_PATH}")
8+
ocv_update(OPENCV_SAMPLES_BIN_INSTALL_PATH "sdk/native/samples/${ANDROID_NDK_ABI_NAME}")
9+
ocv_update(OPENCV_LIB_INSTALL_PATH "sdk/native/libs/${ANDROID_NDK_ABI_NAME}")
10+
ocv_update(OPENCV_LIB_ARCHIVE_INSTALL_PATH "sdk/native/staticlibs/${ANDROID_NDK_ABI_NAME}")
11+
ocv_update(OPENCV_3P_LIB_INSTALL_PATH "sdk/native/3rdparty/libs/${ANDROID_NDK_ABI_NAME}")
12+
ocv_update(OPENCV_CONFIG_INSTALL_PATH "sdk/native/jni")
13+
ocv_update(OPENCV_INCLUDE_INSTALL_PATH "sdk/native/jni/include")
14+
ocv_update(OPENCV_OTHER_INSTALL_PATH "sdk/etc")
15+
ocv_update(OPENCV_SAMPLES_SRC_INSTALL_PATH "samples/native")
16+
ocv_update(OPENCV_LICENSES_INSTALL_PATH "${OPENCV_OTHER_INSTALL_PATH}/licenses")
17+
ocv_update(OPENCV_TEST_DATA_INSTALL_PATH "${OPENCV_OTHER_INSTALL_PATH}/testdata")
18+
ocv_update(OPENCV_DOC_INSTALL_PATH "doc")
19+
ocv_update(OPENCV_JAR_INSTALL_PATH ".")
20+
ocv_update(OPENCV_JNI_INSTALL_PATH "${OPENCV_LIB_INSTALL_PATH}")
21+
ocv_update(OPENCV_JNI_BIN_INSTALL_PATH "${OPENCV_JNI_INSTALL_PATH}")
22+
23+
elseif(WIN32 AND CMAKE_HOST_SYSTEM_NAME MATCHES Windows)
24+
25+
if(DEFINED OpenCV_RUNTIME AND DEFINED OpenCV_ARCH)
26+
set(_prefix "${OpenCV_ARCH}/${OpenCV_RUNTIME}/")
27+
else()
28+
message(STATUS "Can't detect runtime and/or arch")
29+
set(_prefix "")
30+
endif()
31+
if(OpenCV_STATIC)
32+
set(_suffix "staticlib")
33+
else()
34+
set(_suffix "lib")
35+
endif()
36+
if(INSTALL_CREATE_DISTRIB)
37+
set(_jni_suffix "/${OpenCV_ARCH}")
38+
else()
39+
set(_jni_suffix "")
40+
endif()
41+
42+
ocv_update(OPENCV_BIN_INSTALL_PATH "${_prefix}bin")
43+
ocv_update(OPENCV_TEST_INSTALL_PATH "${OPENCV_BIN_INSTALL_PATH}")
44+
ocv_update(OPENCV_SAMPLES_BIN_INSTALL_PATH "${_prefix}samples")
45+
ocv_update(OPENCV_LIB_INSTALL_PATH "${_prefix}${_suffix}")
46+
ocv_update(OPENCV_LIB_ARCHIVE_INSTALL_PATH "${OPENCV_LIB_INSTALL_PATH}")
47+
ocv_update(OPENCV_3P_LIB_INSTALL_PATH "${OPENCV_LIB_INSTALL_PATH}")
48+
ocv_update(OPENCV_CONFIG_INSTALL_PATH ".")
49+
ocv_update(OPENCV_INCLUDE_INSTALL_PATH "include")
50+
ocv_update(OPENCV_OTHER_INSTALL_PATH "etc")
51+
ocv_update(OPENCV_SAMPLES_SRC_INSTALL_PATH "samples")
52+
ocv_update(OPENCV_LICENSES_INSTALL_PATH "${OPENCV_OTHER_INSTALL_PATH}/licenses")
53+
ocv_update(OPENCV_TEST_DATA_INSTALL_PATH "testdata")
54+
ocv_update(OPENCV_DOC_INSTALL_PATH "doc")
55+
ocv_update(OPENCV_JAR_INSTALL_PATH "java")
56+
ocv_update(OPENCV_JNI_INSTALL_PATH "java${_jni_suffix}")
57+
ocv_update(OPENCV_JNI_BIN_INSTALL_PATH "${OPENCV_JNI_INSTALL_PATH}")
58+
59+
else() # UNIX
60+
61+
include(GNUInstallDirs)
62+
ocv_update(OPENCV_BIN_INSTALL_PATH "bin")
63+
ocv_update(OPENCV_TEST_INSTALL_PATH "${OPENCV_BIN_INSTALL_PATH}")
64+
ocv_update(OPENCV_SAMPLES_BIN_INSTALL_PATH "${OPENCV_BIN_INSTALL_PATH}")
65+
ocv_update(OPENCV_LIB_INSTALL_PATH "${CMAKE_INSTALL_LIBDIR}")
66+
ocv_update(OPENCV_LIB_ARCHIVE_INSTALL_PATH "${OPENCV_LIB_INSTALL_PATH}")
67+
ocv_update(OPENCV_3P_LIB_INSTALL_PATH "${OPENCV_LIB_INSTALL_PATH}/opencv4/3rdparty")
68+
ocv_update(OPENCV_CONFIG_INSTALL_PATH "${OPENCV_LIB_INSTALL_PATH}/cmake/opencv4")
69+
ocv_update(OPENCV_INCLUDE_INSTALL_PATH "${CMAKE_INSTALL_INCLUDEDIR}/opencv4")
70+
ocv_update(OPENCV_OTHER_INSTALL_PATH "${CMAKE_INSTALL_DATAROOTDIR}/opencv4")
71+
ocv_update(OPENCV_SAMPLES_SRC_INSTALL_PATH "${OPENCV_OTHER_INSTALL_PATH}/samples")
72+
ocv_update(OPENCV_LICENSES_INSTALL_PATH "${CMAKE_INSTALL_DATAROOTDIR}/licenses/opencv4")
73+
ocv_update(OPENCV_TEST_DATA_INSTALL_PATH "${OPENCV_OTHER_INSTALL_PATH}/testdata")
74+
ocv_update(OPENCV_DOC_INSTALL_PATH "${CMAKE_INSTALL_DATAROOTDIR}/doc/opencv4")
75+
ocv_update(OPENCV_JAR_INSTALL_PATH "${CMAKE_INSTALL_DATAROOTDIR}/java/opencv4")
76+
ocv_update(OPENCV_JNI_INSTALL_PATH "${OPENCV_JAR_INSTALL_PATH}")
77+
ocv_update(OPENCV_JNI_BIN_INSTALL_PATH "${OPENCV_JNI_INSTALL_PATH}")
78+
79+
endif()
80+
81+
ocv_update(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${OPENCV_LIB_INSTALL_PATH}")
82+
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
83+
84+
if(INSTALL_TO_MANGLED_PATHS)
85+
foreach(v
86+
OPENCV_INCLUDE_INSTALL_PATH
87+
# file names include version (.so/.dll): OPENCV_LIB_INSTALL_PATH
88+
OPENCV_CONFIG_INSTALL_PATH
89+
OPENCV_3P_LIB_INSTALL_PATH
90+
OPENCV_SAMPLES_SRC_INSTALL_PATH
91+
OPENCV_DOC_INSTALL_PATH
92+
# JAR file name includes version: OPENCV_JAR_INSTALL_PATH
93+
OPENCV_TEST_DATA_INSTALL_PATH
94+
OPENCV_OTHER_INSTALL_PATH
95+
)
96+
string(REGEX REPLACE "opencv[0-9]*" "opencv-${OPENCV_VERSION}" ${v} "${${v}}")
97+
endforeach()
98+
endif()
99+
100+
# message(STATUS "Final install layout:")
101+
# ocv_cmake_dump_vars("OPENCV_.*_INSTALL_PATH")

0 commit comments

Comments
 (0)