|
1 | 1 | # -*- coding: utf-8 -*- |
2 | 2 |
|
3 | 3 | import ctypes as ct |
| 4 | +import os |
4 | 5 | import sys |
5 | 6 | import weakref |
6 | 7 | import version |
@@ -689,6 +690,17 @@ class XTablesError(Exception): |
689 | 690 | _optarg = ct.c_char_p.in_dll(_libc, "optarg") |
690 | 691 |
|
691 | 692 | _lib_xtables, _xtables_version = find_library("xtables") |
| 693 | +_xtables_libdir = os.getenv("XTABLES_LIBDIR") |
| 694 | +if _xtables_libdir is None: |
| 695 | + import os.path |
| 696 | + for xtdir in ["/lib/xtables", "/usr/lib/xtables", |
| 697 | + "/usr/local/lib/xtables"]: |
| 698 | + if os.path.isdir(xtdir): |
| 699 | + _xtables_libdir = xtdir |
| 700 | + break |
| 701 | +if _xtables_libdir is None: |
| 702 | + raise XTablesError("can't find directory with extensions; " |
| 703 | + "please set XTABLES_LIBDIR") |
692 | 704 |
|
693 | 705 | _lib_xtwrapper, _ = find_library("xtwrapper") |
694 | 706 |
|
@@ -878,8 +890,8 @@ def _try_register(self, name): |
878 | 890 | return |
879 | 891 | afinfo = ct.cast(self._afinfo, ct.POINTER(xtables_afinfo)) |
880 | 892 | prefix = afinfo[0].libprefix |
881 | | - libs = ["/lib/xtables/libxt_" + name + ".so", |
882 | | - "/lib/xtables/" + prefix + name + ".so"] |
| 893 | + libs = [os.path.join(_xtables_libdir, "libxt_" + name + ".so"), |
| 894 | + os.path.join(_xtables_libdir, prefix + name + ".so")] |
883 | 895 | for lib in libs: |
884 | 896 | if self._try_extinit(name, lib): |
885 | 897 | return |
|
0 commit comments