Add OpenCV source code
[platform/upstream/opencv.git] / cmake / OpenCVGenPkgconfig.cmake
1 # --------------------------------------------------------------------------------------------
2 # according to man pkg-config
3 #  The package name specified on the pkg-config command line is defined to
4 #      be the name of the metadata file, minus the .pc extension. If a library
5 #      can install multiple versions simultaneously, it must give each version
6 #      its own name (for example, GTK 1.2 might have the package  name  "gtk+"
7 #      while GTK 2.0 has "gtk+-2.0").
8 #
9 # ${BIN_DIR}/unix-install/opencv.pc -> For use *with* "make install"
10 # -------------------------------------------------------------------------------------------
11 set(prefix      "${CMAKE_INSTALL_PREFIX}")
12 set(exec_prefix "\${prefix}")
13 set(libdir      "\${prefix}/${OPENCV_LIB_INSTALL_PATH}") #TODO: need link paths for OpenCV_EXTRA_COMPONENTS
14 set(includedir  "\${prefix}/${OPENCV_INCLUDE_INSTALL_PATH}")
15 MESSAGE(STATUS "share lib path: ${libdir}")
16
17 if(CMAKE_BUILD_TYPE MATCHES "Release")
18   set(ocv_optkind OPT)
19 else()
20   set(ocv_optkind DBG)
21 endif()
22
23 #build the list of opencv libs and dependencies for all modules
24 set(OpenCV_LIB_COMPONENTS "")
25 set(OpenCV_EXTRA_COMPONENTS "")
26 foreach(m ${OPENCV_MODULES_PUBLIC})
27   list(INSERT OpenCV_LIB_COMPONENTS 0 ${${m}_MODULE_DEPS_${ocv_optkind}} ${m})
28   if(${m}_EXTRA_DEPS_${ocv_optkind})
29     list(INSERT OpenCV_EXTRA_COMPONENTS 0 ${${m}_EXTRA_DEPS_${ocv_optkind}})
30   endif()
31 endforeach()
32
33 ocv_list_unique(OpenCV_LIB_COMPONENTS)
34 ocv_list_unique(OpenCV_EXTRA_COMPONENTS)
35 ocv_list_reverse(OpenCV_LIB_COMPONENTS)
36 ocv_list_reverse(OpenCV_EXTRA_COMPONENTS)
37
38 #build the list of components
39 set(OpenCV_LIB_COMPONENTS_ "-L\${libdir}")
40 foreach(CVLib ${OpenCV_LIB_COMPONENTS})
41   get_target_property(libpath ${CVLib} LOCATION_${CMAKE_BUILD_TYPE})
42   get_filename_component(libname "${libpath}" NAME)
43
44   if(INSTALL_TO_MANGLED_PATHS)
45     set(libname "${libname}.${OPENCV_VERSION}")
46   endif()
47
48   #need better solution....
49   if(libpath MATCHES "3rdparty")
50     set(installDir "share/OpenCV/3rdparty/${OPENCV_LIB_INSTALL_PATH}")
51   else()
52     set(installDir "${OPENCV_LIB_INSTALL_PATH}")
53   endif()
54
55   string(REPLACE "libopencv" "-lopencv" libname "${libname}")
56   string(REPLACE ".a" "" libname "${libname}")
57   string(REPLACE ".so" "" libname "${libname}")
58   string(REPLACE ".dylib" "" libname "${libname}")
59   set(OpenCV_LIB_COMPONENTS_ "${OpenCV_LIB_COMPONENTS_} ${libname}")
60 endforeach()
61
62 # add extra dependencies required for OpenCV
63 set(OpenCV_LIB_COMPONENTS ${OpenCV_LIB_COMPONENTS_})
64 if(OpenCV_EXTRA_COMPONENTS)
65   foreach(extra_component ${OpenCV_EXTRA_COMPONENTS})
66
67     if(extra_component MATCHES "^-[lL]" OR extra_component MATCHES "[\\/]")
68       set(maybe_l_prefix "")
69     else()
70       set(maybe_l_prefix "-l")
71     endif()
72
73     set(OpenCV_LIB_COMPONENTS "${OpenCV_LIB_COMPONENTS} ${maybe_l_prefix}${extra_component}")
74
75   endforeach()
76 endif()
77
78 #generate the .pc file
79 if(INSTALL_TO_MANGLED_PATHS)
80   set(OPENCV_PC_FILE_NAME "opencv-${OPENCV_VERSION}.pc")
81 else()
82   set(OPENCV_PC_FILE_NAME opencv.pc)
83 endif()
84 configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/opencv-XXX.pc.in"
85                "${CMAKE_BINARY_DIR}/unix-install/${OPENCV_PC_FILE_NAME}"
86                @ONLY)
87
88 if(UNIX AND NOT ANDROID)
89   install(FILES ${CMAKE_BINARY_DIR}/unix-install/${OPENCV_PC_FILE_NAME} DESTINATION ${OPENCV_LIB_INSTALL_PATH}/pkgconfig COMPONENT dev)
90 endif()