Lines Matching refs:self

78     def __init__(self, pdf):  argument
90 self.missing = {}
91 self.missing_pkg = {}
92 self.need = 0
93 self.optional = 0
94 self.pdf = pdf
127 def add_package(self, package, dtype): argument
133 self.missing[package] = dtype
135 self.optional += 1
137 self.need += 1
139 def del_package(self, package): argument
144 if package in self.missing:
145 del self.missing[package]
147 def clear_deps(self): argument
157 self.missing = {}
158 self.missing_pkg = {}
160 def check_missing(self, progs): argument
169 self.missing_pkg = {}
171 for prog, dtype in sorted(self.missing.items()):
178 if DepManager.is_pdf(dtype) and not self.pdf:
179 self.optional -= 1
182 if not dtype in self.missing_pkg:
183 self.missing_pkg[dtype] = []
185 self.missing_pkg[dtype].append(progs.get(prog, prog))
188 for dtype, pkgs in self.missing_pkg.items():
193 def warn_install(self): argument
200 for dtype in sorted(self.missing_pkg.keys()):
201 progs = " ".join(sorted(set(self.missing_pkg[dtype])))
264 def __init__(self, args, texlive): argument
268 self.pdf = args.pdf
269 self.virtualenv = args.virtualenv
270 self.version_check = args.version_check
271 self.texlive = texlive
273 self.min_version = (0, 0, 0)
274 self.cur_version = (0, 0, 0)
276 self.deps = DepManager(self.pdf)
278 self.need_symlink = 0
279 self.need_sphinx = 0
281 self.verbose_warn_install = 1
283 self.virtenv_dir = ""
284 self.install = ""
285 self.python_cmd = ""
287 self.virtenv_prefix = ["sphinx_", "Sphinx_" ]
289 def check_missing_file(self, files, package, dtype): argument
296 self.deps.add_package(package, dtype)
298 def check_program(self, prog, dtype): argument
303 found = self.which(prog)
307 self.deps.add_package(prog, dtype)
311 def check_perl_module(self, prog, dtype): argument
331 if not self.which("perl"):
332 self.deps.add_package("perl", DepManager.SYSTEM_MANDATORY)
333 self.deps.add_package(prog, dtype)
337 self.run(["perl", f"-M{prog}", "-e", "1"], check=True)
339 self.deps.add_package(prog, dtype)
341 def check_python_module(self, module, is_optional=False): argument
352 self.run([self.python_cmd, "-c", f"import {module}"], check=True)
354 self.deps.add_package(module, dtype)
356 def check_rpm_missing(self, pkgs, dtype): argument
362 self.run(["rpm", "-q", prog], check=True)
364 self.deps.add_package(prog, dtype)
366 def check_pacman_missing(self, pkgs, dtype): argument
372 self.run(["pacman", "-Q", prog], check=True)
374 self.deps.add_package(prog, dtype)
376 def check_missing_tex(self, is_optional=False): argument
385 kpsewhich = self.which("kpsewhich")
386 for prog, package in self.texlive.items():
390 self.deps.add_package(package, dtype)
395 result = self.run(
401 self.deps.add_package(package, dtype)
405 self.deps.add_package(package, dtype)
407 def get_sphinx_fname(self): argument
415 if self.which(fname):
419 if self.which(fname):
420 self.need_symlink = 1
425 def get_sphinx_version(self, cmd): argument
441 result = self.run([cmd, "--version"], env=env,
457 def check_sphinx(self, conf): argument
466 self.min_version = PythonVersion.parse_version(match.group(1))
471 if not self.min_version:
474 self.virtenv_dir = self.virtenv_prefix[0] + "latest"
476 sphinx = self.get_sphinx_fname()
478 self.need_sphinx = 1
481 self.cur_version = self.get_sphinx_version(sphinx)
482 if not self.cur_version:
485 if self.cur_version < self.min_version:
486 curver = PythonVersion.ver_str(self.cur_version)
487 minver = PythonVersion.ver_str(self.min_version)
490 self.need_sphinx = 1
494 if self.version_check and self.cur_version >= RECOMMENDED_VERSION:
497 def catcheck(self, filename): argument
507 def get_system_release(self): argument
523 if self.which("lsb_release"):
524 result = self.run(["lsb_release", "-d"], capture_output=True, text=True)
536 system_release = self.catcheck(f)
559 system_release = self.catcheck("/etc/issue")
575 def __init__(self, args): argument
615 self.need_pip = False
616 self.rec_sphinx_upgrade = 0
618 self.system_release = self.get_system_release()
619 self.activate_cmd = ""
623 self.package_supported = True
626 self.recommend_python = None
629 self.distro_msg = None
631 self.latest_avail_ver = (0, 0, 0)
632 self.venv_ver = (0, 0, 0)
636 self.conf = prefix + "Documentation/conf.py"
637 self.requirement_file = prefix + "Documentation/sphinx/requirements.txt"
639 def get_install_progs(self, progs, cmd, extra=None): argument
645 install = self.deps.check_missing(progs)
647 if self.verbose_warn_install:
648 self.deps.warn_install()
654 if self.verbose_warn_install:
670 def give_debian_hints(self): argument
686 if self.pdf:
708 self.check_missing_file(files, package, DepManager.PDF_MANDATORY)
710 self.check_program("dvipng", DepManager.PDF_MANDATORY)
712 if not self.distro_msg:
713 self.distro_msg = \
717 return self.get_install_progs(progs, "apt-get install")
719 def give_redhat_hints(self): argument
747 match = re.search(r"(release|Linux)\s+(\d+)", self.system_release)
754 self.pdf = False
755 elif re.search("Fedora", self.system_release):
775 self.check_program("python3.9", DepManager.SYSTEM_MANDATORY)
779 self.recommend_python = True
782 self.package_supported = False
784 if not self.distro_msg:
785 self.distro_msg = \
795 if self.pdf:
801 self.check_missing_file(pdf_pkgs, noto_sans_redhat, DepManager.PDF_MANDATORY)
803 self.check_rpm_missing(fedora_tex_pkgs, DepManager.PDF_MANDATORY)
805 self.check_missing_tex(DepManager.PDF_MANDATORY)
810 self.deps.del_package("texlive-ctex")
812 return self.get_install_progs(progs, "dnf install")
814 def give_opensuse_hints(self): argument
848 match = re.search(r"(Leap)\s+(\d+).(\d)", self.system_release)
855 if not self.which(self.python_cmd):
856 self.check_program("python3.11", DepManager.SYSTEM_MANDATORY)
858 self.recommend_python = True
879 if self.pdf:
880 self.check_rpm_missing(suse_tex_pkgs, DepManager.PDF_MANDATORY)
881 if self.pdf:
882 self.check_missing_tex()
884 return self.get_install_progs(progs, "zypper install --no-recommends")
886 def give_mageia_hints(self): argument
907 if re.search(r"OpenMandriva", self.system_release):
924 self.check_program("python-virtualenv", DepManager.PYTHON_MANDATORY)
934 if not self.distro_msg:
935 self.distro_msg = \
946 if self.pdf:
952 self.check_missing_file(pdf_pkgs, noto_sans, DepManager.PDF_MANDATORY)
953 self.check_rpm_missing(tex_pkgs, DepManager.PDF_MANDATORY)
955 return self.get_install_progs(progs, packager_cmd)
957 def give_arch_linux_hints(self): argument
982 if self.pdf:
983 self.check_pacman_missing(archlinux_tex_pkgs,
986 self.check_missing_file(["/usr/share/fonts/noto-cjk/NotoSansCJK-Regular.ttc"],
991 return self.get_install_progs(progs, "pacman -S")
993 def give_gentoo_hints(self): argument
1014 if self.pdf:
1025 self.check_missing_file(files, package, DepManager.PDF_MANDATORY)
1060 if not self.distro_msg:
1061self.distro_msg = "Note: Gentoo requires package.use to be adjusted before emerging packages"
1080 result = self.run(cmd, stdout=subprocess.PIPE, text=True)
1109 return self.get_install_progs(progs,
1113 def get_install(self): argument
1125 re.compile("Red Hat Enterprise Linux"): self.give_redhat_hints,
1126 re.compile("Fedora"): self.give_redhat_hints,
1127 re.compile("AlmaLinux"): self.give_redhat_hints,
1128 re.compile("Amazon Linux"): self.give_redhat_hints,
1129 re.compile("CentOS"): self.give_redhat_hints,
1130 re.compile("openEuler"): self.give_redhat_hints,
1131 re.compile("Oracle Linux Server"): self.give_redhat_hints,
1132 re.compile("Rocky Linux"): self.give_redhat_hints,
1133 re.compile("Springdale Open Enterprise"): self.give_redhat_hints,
1135 re.compile("Ubuntu"): self.give_debian_hints,
1136 re.compile("Debian"): self.give_debian_hints,
1137 re.compile("Devuan"): self.give_debian_hints,
1138 re.compile("Kali"): self.give_debian_hints,
1139 re.compile("Mint"): self.give_debian_hints,
1141 re.compile("openSUSE"): self.give_opensuse_hints,
1143 re.compile("Mageia"): self.give_mageia_hints,
1144 re.compile("OpenMandriva"): self.give_mageia_hints,
1146 re.compile("Arch Linux"): self.give_arch_linux_hints,
1147 re.compile("Gentoo"): self.give_gentoo_hints,
1152 if regex.search(self.system_release):
1160 if self.pdf:
1161 self.check_missing_tex()
1163 self.distro_msg = \
1168 return self.get_install_progs(progs, None)
1173 def deactivate_help(self): argument
1181 def get_virtenv(self): argument
1195 for p in self.virtenv_prefix:
1201 for p in self.virtenv_prefix:
1211 if ver < self.min_version:
1218 ver = self.get_sphinx_version(sphinx_cmd)
1226 if self.need_sphinx and ver >= self.min_version:
1228 elif PythonVersion.parse_version(ver) > self.cur_version:
1233 def recommend_sphinx_upgrade(self): argument
1243 if self.cur_version and self.cur_version >= RECOMMENDED_VERSION:
1244 self.latest_avail_ver = self.cur_version
1249 self.activate_cmd, self.venv_ver = self.get_virtenv()
1252 if self.activate_cmd and self.venv_ver > self.cur_version:
1253 self.latest_avail_ver = self.venv_ver
1255 if self.cur_version:
1256 self.latest_avail_ver = self.cur_version
1258 self.latest_avail_ver = (0, 0, 0)
1262 if not self.virtualenv:
1263 if not self.latest_avail_ver:
1266 return self.latest_avail_ver
1269 self.need_pip = True
1271 if not self.latest_avail_ver:
1275 if self.latest_avail_ver != (0, 0, 0):
1276 if self.latest_avail_ver < RECOMMENDED_VERSION:
1277 self.rec_sphinx_upgrade = 1
1279 return self.latest_avail_ver
1281 def recommend_package(self): argument
1288 old_need = self.deps.need
1289 old_optional = self.deps.optional
1291 self.pdf = False
1292 self.deps.optional = 0
1293 old_verbose = self.verbose_warn_install
1294 self.verbose_warn_install = 0
1296 self.deps.clear_deps()
1298 self.deps.add_package("python-sphinx", DepManager.PYTHON_MANDATORY)
1300 cmd = self.get_install()
1304 self.deps.need = old_need
1305 self.deps.optional = old_optional
1306 self.verbose_warn_install = old_verbose
1308 def recommend_sphinx_version(self, virtualenv_cmd): argument
1323 if self.recommend_python:
1331 if self.cur_version != (0, 0, 0) and self.cur_version >= RECOMMENDED_VERSION:
1334 if self.latest_avail_ver:
1335 latest_avail_ver = PythonVersion.ver_str(self.latest_avail_ver)
1337 if not self.need_sphinx:
1341 if self.latest_avail_ver and self.latest_avail_ver > self.cur_version:
1346 self.deactivate_help()
1349 if self.latest_avail_ver and self.latest_avail_ver >= RECOMMENDED_VERSION:
1352 if not self.virtualenv:
1356 if not self.latest_avail_ver or self.latest_avail_ver == (0, 0, 0):
1362 if self.latest_avail_ver > self.cur_version:
1367 self.deactivate_help()
1371 if self.need_sphinx:
1372 self.deps.need += 1
1375 if self.latest_avail_ver and self.latest_avail_ver >= self.min_version:
1376 if self.latest_avail_ver >= RECOMMENDED_VERSION:
1379 self.deactivate_help()
1384 if self.latest_avail_ver < RECOMMENDED_VERSION:
1390 if self.rec_sphinx_upgrade:
1391 if not self.virtualenv:
1405 self.deactivate_help()
1407 if self.package_supported:
1408 self.recommend_package()
1416 def check_needs(self): argument
1421 self.python_cmd = sys.executable
1424 self.check_sphinx(self.conf)
1426 if self.system_release:
1430 if self.cur_version != (0, 0, 0):
1431 ver = PythonVersion.ver_str(self.cur_version)
1440 self.need_sphinx = 1
1442 self.venv_ver = self.recommend_sphinx_upgrade()
1444 if self.need_pip:
1446 self.need_pip = False
1450 self.check_python_module("ensurepip")
1453 self.check_perl_module("Pod::Usage", DepManager.SYSTEM_MANDATORY)
1455 self.check_program("make", DepManager.SYSTEM_MANDATORY)
1456 self.check_program("which", DepManager.SYSTEM_MANDATORY)
1458 self.check_program("dot", DepManager.SYSTEM_OPTIONAL)
1459 self.check_program("convert", DepManager.SYSTEM_OPTIONAL)
1461 self.check_python_module("yaml")
1463 if self.pdf:
1464 self.check_program("xelatex", DepManager.PDF_MANDATORY)
1465 self.check_program("rsvg-convert", DepManager.PDF_MANDATORY)
1466 self.check_program("latexmk", DepManager.PDF_MANDATORY)
1469 cmd = self.get_install()
1475 if self.distro_msg:
1476 print("\n" + self.distro_msg)
1478 if not self.python_cmd:
1479 if self.need == 1:
1481 elif self.need:
1485 if self.need_symlink:
1486 sphinx_path = self.which("sphinx-build-3")
1490 self.recommend_sphinx_version(virtualenv_cmd)
1493 if not self.deps.optional:
1496 if self.deps.need == 1:
1498 elif self.deps.need: