File: 0005-use-Multi-Arch-dirs-when-installing-into-usr.patch

package info (click to toggle)
ros-catkin 0.8.12-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,212 kB
  • sloc: python: 4,117; sh: 508; xml: 256; cpp: 136; makefile: 125
file content (139 lines) | stat: -rw-r--r-- 6,174 bytes parent folder | download | duplicates (3)
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
From: =?utf-8?q?Timo_R=C3=B6hling?= <roehling@debian.org>
Date: Thu, 2 Sep 2021 13:06:35 +0200
Subject: use Multi-Arch dirs when installing into /usr

use GNUInstallDirs
use lib for libexec
use share for pkg-config if no library is installed
---
 cmake/all.cmake                   | 12 ++++++++++++
 cmake/catkin_package.cmake        | 35 +++++++++++++++++++++++++++++------
 cmake/em/pkg.pc.em                |  2 +-
 cmake/templates/pkg.context.pc.in |  1 +
 4 files changed, 43 insertions(+), 7 deletions(-)

diff --git a/cmake/all.cmake b/cmake/all.cmake
index 7768f96..3f10e0d 100644
--- a/cmake/all.cmake
+++ b/cmake/all.cmake
@@ -174,6 +174,17 @@ unset(_CATKIN_CURRENT_PACKAGE)
 configure_shared_library_build_settings()
 
 # set global install destinations
+# use multiarch when building with debhelper
+if(CMAKE_INSTALL_PREFIX STREQUAL "/usr")
+include(GNUInstallDirs)
+set(CATKIN_GLOBAL_BIN_DESTINATION "${CMAKE_INSTALL_BINDIR}")
+set(CATKIN_GLOBAL_ETC_DESTINATION "${CMAKE_INSTALL_SYSCONFDIR}")
+set(CATKIN_GLOBAL_INCLUDE_DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
+set(CATKIN_GLOBAL_LIB_DESTINATION "${CMAKE_INSTALL_LIBDIR}")
+set(CATKIN_GLOBAL_LIBEXEC_DESTINATION lib)
+set(CATKIN_GLOBAL_PYTHON_DESTINATION ${PYTHON_INSTALL_DIR})
+set(CATKIN_GLOBAL_SHARE_DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}")
+else()
 set(CATKIN_GLOBAL_BIN_DESTINATION bin)
 set(CATKIN_GLOBAL_ETC_DESTINATION etc)
 set(CATKIN_GLOBAL_INCLUDE_DESTINATION include)
@@ -181,6 +192,7 @@ set(CATKIN_GLOBAL_LIB_DESTINATION lib)
 set(CATKIN_GLOBAL_LIBEXEC_DESTINATION lib)
 set(CATKIN_GLOBAL_PYTHON_DESTINATION ${PYTHON_INSTALL_DIR})
 set(CATKIN_GLOBAL_SHARE_DESTINATION share)
+endif()
 
 # undefine CATKIN_ENV since it might be set in the cache from a previous build
 set(CATKIN_ENV "" CACHE INTERNAL "catkin environment" FORCE)
diff --git a/cmake/catkin_package.cmake b/cmake/catkin_package.cmake
index df36e23..2b0cd8f 100644
--- a/cmake/catkin_package.cmake
+++ b/cmake/catkin_package.cmake
@@ -314,7 +314,7 @@ function(_catkin_package)
 
   # prepend library path of this workspace
   set(PKG_CONFIG_LIB_PATHS ${lib_paths})
-  list(INSERT PKG_CONFIG_LIB_PATHS 0 ${PROJECT_SPACE_DIR}/lib)
+  list(INSERT PKG_CONFIG_LIB_PATHS 0 ${PROJECT_SPACE_DIR}/${CATKIN_GLOBAL_LIB_DESTINATION})
   set(PKG_CMAKE_DIR ${PROJECT_SPACE_DIR}/share/${PROJECT_NAME}/cmake)
   if("${PROJECT_NAME}" STREQUAL "catkin")
     set(PKG_CMAKE_DIR "${catkin_EXTRAS_DIR}")
@@ -433,9 +433,32 @@ function(_catkin_package)
     list_append_unique(PROJECT_PKG_CONFIG_INCLUDE_DIRS ${PROJECT_DEPENDENCIES_INCLUDE_DIRS})
   endif()
 
+  # ROS default locations for .pc and .cmake files
+  set(DEBIAN_PKG_CONFIG_DIR lib/pkgconfig)
+  set(DEBIAN_CMAKE_DIR share/${PROJECT_NAME}/cmake)
+  if(CMAKE_INSTALL_PREFIX STREQUAL "/usr")
+      # Special treatment for /usr installation:
+      # - if the package is arch-independent, put .pc and .cmake files into share/
+      # - otherwise, put .pc and .cmake files into lib/<triplet>
+      set(DEBIAN_PKG_CONFIG_DIR share/pkgconfig)
+      # We treat packages as arch-dependent if they explicitly refer to the arch triplet
+      # or export shared objects.
+      if(CMAKE_LIBRARY_ARCHITECTURE AND
+          (PROJECT_PKG_CONFIG_INCLUDE_DIRS MATCHES "${CMAKE_LIBRARY_ARCHITECTURE}" OR PKG_CONFIG_LIBRARIES))
+          set(DEBIAN_PKG_CONFIG_DIR ${CATKIN_GLOBAL_LIB_DESTINATION}/pkgconfig)
+          set(DEBIAN_CMAKE_DIR ${CATKIN_GLOBAL_LIB_DESTINATION}/cmake/${PROJECT_NAME})
+      endif()
+  endif()
+ 
   # prepend library path of this workspace
-  set(PKG_CONFIG_LIB_PATHS ${lib_paths})
-  list(INSERT PKG_CONFIG_LIB_PATHS 0 ${PROJECT_SPACE_DIR}/lib)
+  if(PKG_CONFIG_LIBRARIES)
+    set(PKG_CONFIG_LIB_PATHS ${lib_paths})
+    list(INSERT PKG_CONFIG_LIB_PATHS 0 ${PROJECT_SPACE_DIR}/${CATKIN_GLOBAL_LIB_DESTINATION})
+  else()
+    # If no libraries are shipped, clear the (useless) library search paths
+    # to prevent /usr/lib/<triplet> from leaking into CMake configs
+    set(PKG_CONFIG_LIB_PATHS)
+  endif()
   # package cmake dir is the folder where the generated pkgConfig.cmake is located
   set(PKG_CMAKE_DIR "\${${PROJECT_NAME}_DIR}")
 
@@ -448,7 +471,7 @@ function(_catkin_package)
       ${catkin_EXTRAS_DIR}/em/pkg.pc.em
       ${CMAKE_CURRENT_BINARY_DIR}/catkin_generated/installspace/${PROJECT_NAME}.pc)
     install(FILES ${CMAKE_CURRENT_BINARY_DIR}/catkin_generated/installspace/${PROJECT_NAME}.pc
-      DESTINATION lib/pkgconfig
+      DESTINATION ${DEBIAN_PKG_CONFIG_DIR}
     )
   endif()
 
@@ -495,7 +518,7 @@ function(_catkin_package)
   endforeach()
   install(FILES
     ${installable_cfg_extras}
-    DESTINATION share/${PROJECT_NAME}/cmake
+    DESTINATION ${DEBIAN_CMAKE_DIR}
   )
 
   if(NOT PROJECT_SKIP_CMAKE_CONFIG_GENERATION)
@@ -521,7 +544,7 @@ function(_catkin_package)
     install(FILES
       ${CMAKE_CURRENT_BINARY_DIR}/catkin_generated/installspace/${PROJECT_NAME}Config.cmake
       ${CMAKE_CURRENT_BINARY_DIR}/catkin_generated/installspace/${PROJECT_NAME}Config-version.cmake
-      DESTINATION share/${PROJECT_NAME}/cmake
+      DESTINATION ${DEBIAN_CMAKE_DIR}
     )
   endif()
 
diff --git a/cmake/em/pkg.pc.em b/cmake/em/pkg.pc.em
index 549fb75..9355229 100644
--- a/cmake/em/pkg.pc.em
+++ b/cmake/em/pkg.pc.em
@@ -4,5 +4,5 @@ Name: @(CATKIN_PACKAGE_PREFIX + PROJECT_NAME)
 Description: Description of @PROJECT_NAME
 Version: @PROJECT_VERSION
 Cflags: @(' '.join(['-I%s' % include for include in PROJECT_PKG_CONFIG_INCLUDE_DIRS]))
-Libs: -L${prefix}/lib @(' '.join(PKG_CONFIG_LIBRARIES_WITH_PREFIX))
+Libs: @('-L${prefix}/'+PROJECT_LIB_DIR+' ' if PKG_CONFIG_LIBRARIES_WITH_PREFIX else '')@(' '.join(PKG_CONFIG_LIBRARIES_WITH_PREFIX))
 Requires: @(PROJECT_CATKIN_DEPENDS)
diff --git a/cmake/templates/pkg.context.pc.in b/cmake/templates/pkg.context.pc.in
index 8e9cd6b..0329bf0 100644
--- a/cmake/templates/pkg.context.pc.in
+++ b/cmake/templates/pkg.context.pc.in
@@ -6,3 +6,4 @@ PKG_CONFIG_LIBRARIES_WITH_PREFIX = "@PKG_CONFIG_LIBRARIES_WITH_PREFIX@".split(';
 PROJECT_NAME = "@PROJECT_NAME@"
 PROJECT_SPACE_DIR = "@PROJECT_SPACE_DIR@"
 PROJECT_VERSION = "@PROJECT_VERSION@"
+PROJECT_LIB_DIR = "@CATKIN_GLOBAL_LIB_DESTINATION@"