File: 0001-Add-usr-as-implicit-AMENT_PREFIX_PATH.patch

package info (click to toggle)
ros2-ament-index 1.12.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 556 kB
  • sloc: cpp: 655; python: 594; xml: 44; makefile: 16; sh: 5
file content (124 lines) | stat: -rw-r--r-- 4,713 bytes parent folder | download | duplicates (2)
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
From: =?utf-8?q?Timo_R=C3=B6hling?= <roehling@debian.org>
Date: Fri, 6 May 2022 10:46:16 +0200
Subject: Add /usr as implicit AMENT_PREFIX_PATH

---
 ament_index_cpp/src/get_search_paths.cpp            | 15 ++++++++++++---
 ament_index_cpp/test/utest.cpp                      | 21 +++++++++++++++++++++
 .../ament_index_python/search_paths.py              | 10 ++++++++--
 ament_index_python/test/test_ament_index_python.py  |  7 +++++++
 4 files changed, 48 insertions(+), 5 deletions(-)

diff --git a/ament_index_cpp/src/get_search_paths.cpp b/ament_index_cpp/src/get_search_paths.cpp
index 7a411ac..a230d7e 100644
--- a/ament_index_cpp/src/get_search_paths.cpp
+++ b/ament_index_cpp/src/get_search_paths.cpp
@@ -38,17 +38,20 @@ get_search_paths()
   // get environment variable
 #ifndef _WIN32
   ament_prefix_path = getenv(env_var);
+  char* ignore_usr = getenv("AMENT_PREFIX_NO_IMPLICIT_USR");
 #else
   size_t ament_prefix_path_size;
   _dupenv_s(&ament_prefix_path, &ament_prefix_path_size, env_var);
+  char* ignore_usr = 0;
 #endif
-  if (!ament_prefix_path || std::string(ament_prefix_path).empty()) {
-    throw std::runtime_error("Environment variable 'AMENT_PREFIX_PATH' is not set or empty");
+
+  if ((!ament_prefix_path || std::string(ament_prefix_path).empty()) && ignore_usr && ignore_usr[0]) {
+    throw std::runtime_error("Environment variable 'AMENT_PREFIX_PATH' is unset or empty");
   }
 
   // split at token into separate paths
   std::list<std::string> paths;
-  std::stringstream ss(ament_prefix_path);
+  std::stringstream ss(ament_prefix_path ? ament_prefix_path : "");
   std::string tok;
 #ifndef _WIN32
   char delim = ':';
@@ -75,6 +78,12 @@ get_search_paths()
   }
 #endif
 
+#ifndef _WIN32
+  if (!ignore_usr || !ignore_usr[0]) {
+    // Debian-specific
+    paths.push_back("/usr");
+  }
+#endif
   return paths;
 }
 
diff --git a/ament_index_cpp/test/utest.cpp b/ament_index_cpp/test/utest.cpp
index 33baa14..6897b4e 100644
--- a/ament_index_cpp/test/utest.cpp
+++ b/ament_index_cpp/test/utest.cpp
@@ -72,6 +72,27 @@ TEST(AmentIndexCpp, empty_search_paths) {
   EXPECT_THROW(ament_index_cpp::get_search_paths(), std::runtime_error);
 }
 
+#ifndef _WIN32
+TEST(AmentIndexCpp, implicit_usr_empty_var) {
+  std::list<std::string> subfolders;
+  set_ament_prefix_path(subfolders);
+  setenv("AMENT_PREFIX_NO_IMPLICIT_USR", "", 1);
+  std::list<std::string> search_paths = ament_index_cpp::get_search_paths();
+  EXPECT_EQ(search_paths.size(), 1UL);
+  EXPECT_EQ(search_paths.front(), "/usr");
+}
+
+TEST(AmentIndexCpp, implicit_usr_null_var) {
+  std::list<std::string> subfolders;
+  set_ament_prefix_path(subfolders);
+  setenv("AMENT_PREFIX_NO_IMPLICIT_USR", "", 1);
+  unsetenv("AMENT_PREFIX_PATH");
+  std::list<std::string> search_paths = ament_index_cpp::get_search_paths();
+  EXPECT_EQ(search_paths.size(), 1UL);
+  EXPECT_EQ(search_paths.front(), "/usr");
+}
+#endif
+
 TEST(AmentIndexCpp, search_paths) {
   std::list<std::string> subfolders;
   subfolders.push_back("prefix1");
diff --git a/ament_index_python/ament_index_python/search_paths.py b/ament_index_python/ament_index_python/search_paths.py
index 80982a3..6f3c05c 100644
--- a/ament_index_python/ament_index_python/search_paths.py
+++ b/ament_index_python/ament_index_python/search_paths.py
@@ -26,9 +26,15 @@ def get_search_paths() -> List[str]:
     :raises: :exc:`EnvironmentError`
     """.format(AMENT_PREFIX_PATH_ENV_VAR=AMENT_PREFIX_PATH_ENV_VAR)
     ament_prefix_path = os.environ.get(AMENT_PREFIX_PATH_ENV_VAR)
-    if not ament_prefix_path:
+    add_usr = not os.environ.get("AMENT_PREFIX_NO_IMPLICIT_USR")
+
+    if not ament_prefix_path and not add_usr:
         raise EnvironmentError(
             "Environment variable '{}' is not set or empty".format(AMENT_PREFIX_PATH_ENV_VAR))
 
-    paths = ament_prefix_path.split(os.pathsep)
+    paths = ament_prefix_path.split(os.pathsep) if ament_prefix_path else []
+    if add_usr:
+        # Debian-specific
+        paths.append("/usr")
+
     return [p for p in paths if p and os.path.exists(p)]
diff --git a/ament_index_python/test/test_ament_index_python.py b/ament_index_python/test/test_ament_index_python.py
index b75a629..ded27b4 100644
--- a/ament_index_python/test/test_ament_index_python.py
+++ b/ament_index_python/test/test_ament_index_python.py
@@ -51,6 +51,13 @@ def test_empty_search_paths():
         get_search_paths()
 
 
+def test_implicit_usr():
+    set_ament_prefix_path([])
+    os.environ['AMENT_PREFIX_NO_IMPLICIT_USR'] = ''
+    search_paths = get_search_paths()
+    assert search_paths == ["/usr"]
+
+
 def test_search_paths():
     set_ament_prefix_path(['prefix1', 'prefix2'])
     search_paths = get_search_paths()