Blame view

3rdparty/opencv-4.5.4/cmake/OpenCVGenPkgconfig.cmake 4.74 KB
f4334277   Hu Chunming   提交3rdparty
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
  if(MSVC OR IOS)
    return()
  endif()
  
  # --------------------------------------------------------------------------------------------
  # according to man pkg-config
  #  The package name specified on the pkg-config command line is defined to
  #      be the name of the metadata file, minus the .pc extension. If a library
  #      can install multiple versions simultaneously, it must give each version
  #      its own name (for example, GTK 1.2 might have the package  name  "gtk+"
  #      while GTK 2.0 has "gtk+-2.0").
  #
  # ${BIN_DIR}/unix-install/opencv.pc -> For use *with* "make install"
  # -------------------------------------------------------------------------------------------
  
  macro(fix_prefix lst isown)
    set(_lst)
    foreach(item ${${lst}})
      if(DEFINED TARGET_LOCATION_${item})
        set(item "${TARGET_LOCATION_${item}}")
        if(${isown})
          get_filename_component(item "${item}" NAME)
          ocv_get_libname(item "${item}")
        endif()
      endif()
      if(item MATCHES "^-l")
        list(APPEND _lst "${item}")
      elseif(item MATCHES "^-framework") # MacOS framework (assume single entry "-framework OpenCL")
        list(APPEND _lst "${item}")
      elseif(item MATCHES "[\\/]")
        get_filename_component(libdir "${item}" PATH)
        get_filename_component(_libname "${item}" NAME)
        ocv_get_libname(libname "${_libname}")
        list(APPEND _lst "-L${libdir}" "-l${libname}")
      else()
        list(APPEND _lst "-l${item}")
      endif()
    endforeach()
    set(${lst} ${_lst})
    unset(_lst)
  endmacro()
  
  if(NOT DEFINED CMAKE_HELPER_SCRIPT)
  
  if(INSTALL_TO_MANGLED_PATHS)
    ocv_update(OPENCV_PC_FILE_NAME "opencv-${OPENCV_VERSION}.pc")
  else()
    ocv_update(OPENCV_PC_FILE_NAME opencv4.pc)
  endif()
  
  # build the list of opencv libs and dependencies for all modules
  ocv_get_all_libs(_modules _extra _3rdparty)
  
  #build the list of components
  
  # Note:
  #   when linking against static libraries, if libfoo depends on libbar, then
  #   libfoo must come first in the linker flags.
  
  # world is a special target whose library should come first,
  # especially for static link.
  if(_modules MATCHES "opencv_world")
    set(_modules "opencv_world")
  endif()
  
  set(HELPER_SCRIPT "")
  ocv_cmake_script_append_var(HELPER_SCRIPT
      BUILD_SHARED_LIBS
      CMAKE_BINARY_DIR
      CMAKE_INSTALL_PREFIX
      OpenCV_SOURCE_DIR
      OPENCV_PC_FILE_NAME
      OPENCV_VERSION_PLAIN
      OPENCV_LIB_INSTALL_PATH
      OPENCV_INCLUDE_INSTALL_PATH
      OPENCV_3P_LIB_INSTALL_PATH
  
      _modules
      _extra
      _3rdparty
  )
  
  foreach(item ${_modules} ${_extra} ${_3rdparty})
    if(TARGET ${item})
      set(HELPER_SCRIPT "${HELPER_SCRIPT}
  set(TARGET_LOCATION_${item} \"$<TARGET_FILE:${item}>\")
  ")
    endif()
  endforeach()
  
  set(CMAKE_HELPER_SCRIPT "${CMAKE_BINARY_DIR}/OpenCVGenPkgConfig.info.cmake")
  file(GENERATE OUTPUT "${CMAKE_HELPER_SCRIPT}" CONTENT "${HELPER_SCRIPT}")
  
  add_custom_target(developer_scripts)
  add_custom_command(
    OUTPUT "${CMAKE_BINARY_DIR}/unix-install/${OPENCV_PC_FILE_NAME}"
    COMMAND ${CMAKE_COMMAND} "-DCMAKE_HELPER_SCRIPT=${CMAKE_HELPER_SCRIPT}" -P "${OpenCV_SOURCE_DIR}/cmake/OpenCVGenPkgconfig.cmake"
    DEPENDS "${CMAKE_BINARY_DIR}/OpenCVGenPkgConfig.info.cmake"
            "${OpenCV_SOURCE_DIR}/cmake/OpenCVGenPkgconfig.cmake"
    COMMENT "Generate ${OPENCV_PC_FILE_NAME}"
  )
  add_custom_target(gen-pkgconfig ALL SOURCES "${CMAKE_BINARY_DIR}/unix-install/${OPENCV_PC_FILE_NAME}")
  add_dependencies(developer_scripts gen-pkgconfig)
  
  
  if(UNIX AND NOT ANDROID)
    install(FILES ${CMAKE_BINARY_DIR}/unix-install/${OPENCV_PC_FILE_NAME} DESTINATION ${OPENCV_LIB_INSTALL_PATH}/pkgconfig COMPONENT dev)
  endif()
  
  # =============================================================================
  else() # DEFINED CMAKE_HELPER_SCRIPT
  
  cmake_minimum_required(VERSION 2.8.12.2)
  cmake_policy(SET CMP0012 NEW)
  include("${CMAKE_HELPER_SCRIPT}")
  include("${OpenCV_SOURCE_DIR}/cmake/OpenCVUtils.cmake")
  
  fix_prefix(_modules 1)
  fix_prefix(_extra 0)
  fix_prefix(_3rdparty 1)
  
  ocv_list_unique(_modules)
  ocv_list_unique(_extra)
  ocv_list_unique(_3rdparty)
  
  set(OPENCV_PC_LIBS
    "-L\${exec_prefix}/${OPENCV_LIB_INSTALL_PATH}"
    "${_modules}"
  )
  if(BUILD_SHARED_LIBS)
    set(OPENCV_PC_LIBS_PRIVATE "${_extra}")
  else()
    set(OPENCV_PC_LIBS_PRIVATE
      "-L\${exec_prefix}/${OPENCV_3P_LIB_INSTALL_PATH}"
      "${_3rdparty}"
      "${_extra}"
    )
  endif()
  string(REPLACE ";" " " OPENCV_PC_LIBS "${OPENCV_PC_LIBS}")
  string(REPLACE ";" " " OPENCV_PC_LIBS_PRIVATE "${OPENCV_PC_LIBS_PRIVATE}")
  
  #generate the .pc file
  set(prefix      "${CMAKE_INSTALL_PREFIX}")
  set(exec_prefix "\${prefix}")
  set(libdir      "\${exec_prefix}/${OPENCV_LIB_INSTALL_PATH}")
  set(includedir  "\${prefix}/${OPENCV_INCLUDE_INSTALL_PATH}")
  
  configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/opencv-XXX.pc.in"
                 "${CMAKE_BINARY_DIR}/unix-install/${OPENCV_PC_FILE_NAME}"
                 @ONLY)
  
  endif() # DEFINED CMAKE_HELPER_SCRIPT