summaryrefslogtreecommitdiff
path: root/devel/py-avocado-framework/files/patch-allow-to-override-etc-dir-location
blob: 55af28d4fd5cf84d3513e50da8b17ba1f8f54c6a (plain) (blame)
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
From 4612dfa7a36c9f5520b427557dc0150bbe3af887 Mon Sep 17 00:00:00 2001
From: Roman Bogorodskiy <bogorodskiy@gmail.com>
Date: Sun, 18 May 2025 07:11:18 +0200
Subject: [PATCH] Allow to override /etc dir location

Some systems, e.g. FreeBSD, place third-part software configuration
files in /usr/local/etc instead of /etc.

Extend the install command to accept "etcprefix" option used for global
configuration paths. By default it's "/", so it keeps the current
behaviour unchanged.

Signed-off-by: Roman Bogorodskiy <bogorodskiy@gmail.com>
---
 avocado/core/settings.py   |  3 ++-
 avocado/core/utils/path.py |  4 +++-
 avocado/paths.py           |  2 ++
 setup.py                   | 23 +++++++++++++++++++++++
 4 files changed, 30 insertions(+), 2 deletions(-)
 create mode 100644 avocado/paths.py

diff --git avocado/core/settings.py avocado/core/settings.py
index b497bf0f..b76d0d0d 100644
--- avocado/core/settings.py
+++ avocado/core/settings.py
@@ -46,6 +46,7 @@ import re
 from pkg_resources import resource_exists, resource_filename
 
 from avocado.core.settings_dispatcher import SettingsDispatcher
+from avocado import paths
 
 
 def sorted_dict(dict_object):
@@ -407,7 +408,7 @@ class Settings:
             self.all_config_paths.append(self._config_path_local)
 
     def _prepare_base_dirs(self):
-        cfg_dir = "/etc"
+        cfg_dir = os.path.join(paths.ETCPREFIX, "/etc")
         user_dir = os.path.expanduser("~")
 
         if "VIRTUAL_ENV" in os.environ:
diff --git avocado/core/utils/path.py avocado/core/utils/path.py
index 8037bdd5..5f1f9ce5 100644
--- avocado/core/utils/path.py
+++ avocado/core/utils/path.py
@@ -1,5 +1,7 @@
 import os
 
+from avocado import paths
+
 from pkg_resources import get_distribution
 
 
@@ -32,7 +34,7 @@ def system_wide_or_base_path(file_path):
     if os.path.isabs(file_path):
         abs_path = file_path
     else:
-        abs_path = os.path.join(os.path.sep, file_path)
+        abs_path = os.path.join(paths.ETCPREFIX, file_path)
     if os.path.exists(abs_path):
         return abs_path
     return prepend_base_path(file_path)
diff --git avocado/paths.py avocado/paths.py
new file mode 100644
index 00000000..4d2b2f88
--- /dev/null
+++ avocado/paths.py
@@ -0,0 +1,2 @@
+# To be overriden by setup.py
+ETCPREFIX = "/"
diff --git setup.py setup.py
index d9e1d795..58671d03 100755
--- setup.py
+++ setup.py
@@ -23,6 +23,7 @@ from pathlib import Path
 from subprocess import CalledProcessError, run
 
 import setuptools.command.develop
+import setuptools.command.install
 from setuptools import Command, find_packages, setup
 
 # pylint: disable=E0611
@@ -203,6 +204,27 @@ class Develop(setuptools.command.develop.develop):
                 self.handle_uninstall()
 
 
+class Install(setuptools.command.install.install):
+    """Custom install command."""
+
+    user_options = setuptools.command.install.install.user_options + [
+        ("etcprefix=", None, "The etc directory prefix [default: /]"),
+    ]
+
+    def initialize_options(self):
+        super().initialize_options()
+        self.etcprefix = "/usr/local"  # pylint: disable=W0201
+
+    def run(self):
+        pkg_dir = os.path.join(self.build_lib, 'avocado')
+        os.makedirs(pkg_dir, exist_ok=True)
+
+        with open(os.path.join(pkg_dir, 'paths.py'), 'w') as f:
+            f.write(f'ETCPREFIX = "{self.etcprefix}"')
+
+        super().run()
+
+
 class SimpleCommand(Command):
     """Make Command implementation simpler."""
 
@@ -504,6 +526,7 @@ if __name__ == "__main__":
         cmdclass={
             "clean": Clean,
             "develop": Develop,
+            "install": Install,
             "lint": Linter,
             "man": Man,
             "plugin": Plugin,
-- 
2.49.0