Lines Matching refs:self
84 def __init__(self, pdf): argument
96 self.missing = {}
97 self.missing_pkg = {}
98 self.need = 0
99 self.optional = 0
100 self.pdf = pdf
133 def add_package(self, package, dtype): argument
139 self.missing[package] = dtype
141 self.optional += 1
143 self.need += 1
145 def del_package(self, package): argument
150 if package in self.missing:
151 del self.missing[package]
153 def clear_deps(self): argument
163 self.missing = {}
164 self.missing_pkg = {}
166 def check_missing(self, progs): argument
175 self.missing_pkg = {}
177 for prog, dtype in sorted(self.missing.items()):
184 if DepManager.is_pdf(dtype) and not self.pdf:
185 self.optional -= 1
188 if not dtype in self.missing_pkg:
189 self.missing_pkg[dtype] = []
191 self.missing_pkg[dtype].append(progs.get(prog, prog))
194 for dtype, pkgs in self.missing_pkg.items():
199 def warn_install(self): argument
206 for dtype in sorted(self.missing_pkg.keys()):
207 progs = " ".join(sorted(set(self.missing_pkg[dtype])))
354 def __init__(self, args, texlive): argument
358 self.pdf = args.pdf
359 self.virtualenv = args.virtualenv
360 self.version_check = args.version_check
361 self.texlive = texlive
363 self.min_version = (0, 0, 0)
364 self.cur_version = (0, 0, 0)
366 self.deps = DepManager(self.pdf)
368 self.need_symlink = 0
369 self.need_sphinx = 0
371 self.verbose_warn_install = 1
373 self.virtenv_dir = ""
374 self.install = ""
375 self.python_cmd = ""
377 self.virtenv_prefix = ["sphinx_", "Sphinx_" ]
379 def check_missing_file(self, files, package, dtype): argument
386 self.deps.add_package(package, dtype)
388 def check_program(self, prog, dtype): argument
393 found = self.which(prog)
397 self.deps.add_package(prog, dtype)
401 def check_perl_module(self, prog, dtype): argument
421 if not self.which("perl"):
422 self.deps.add_package("perl", DepManager.SYSTEM_MANDATORY)
423 self.deps.add_package(prog, dtype)
427 self.run(["perl", f"-M{prog}", "-e", "1"], check=True)
429 self.deps.add_package(prog, dtype)
431 def check_python_module(self, module, is_optional=False): argument
442 self.run([self.python_cmd, "-c", f"import {module}"], check=True)
444 self.deps.add_package(module, dtype)
446 def check_rpm_missing(self, pkgs, dtype): argument
452 self.run(["rpm", "-q", prog], check=True)
454 self.deps.add_package(prog, dtype)
456 def check_pacman_missing(self, pkgs, dtype): argument
462 self.run(["pacman", "-Q", prog], check=True)
464 self.deps.add_package(prog, dtype)
466 def check_missing_tex(self, is_optional=False): argument
475 kpsewhich = self.which("kpsewhich")
476 for prog, package in self.texlive.items():
480 self.deps.add_package(package, dtype)
485 result = self.run(
491 self.deps.add_package(package, dtype)
495 self.deps.add_package(package, dtype)
497 def get_sphinx_fname(self): argument
505 if self.which(fname):
509 if self.which(fname):
510 self.need_symlink = 1
515 def get_sphinx_version(self, cmd): argument
520 result = self.run([cmd, "--version"],
536 def check_sphinx(self, conf): argument
545 self.min_version = parse_version(match.group(1))
550 if not self.min_version:
553 self.virtenv_dir = self.virtenv_prefix[0] + "latest"
555 sphinx = self.get_sphinx_fname()
557 self.need_sphinx = 1
560 self.cur_version = self.get_sphinx_version(sphinx)
561 if not self.cur_version:
564 if self.cur_version < self.min_version:
565 curver = ver_str(self.cur_version)
566 minver = ver_str(self.min_version)
569 self.need_sphinx = 1
573 if self.version_check and self.cur_version >= RECOMMENDED_VERSION:
576 def catcheck(self, filename): argument
586 def get_system_release(self): argument
602 if self.which("lsb_release"):
603 result = self.run(["lsb_release", "-d"], capture_output=True, text=True)
615 system_release = self.catcheck(f)
638 system_release = self.catcheck("/etc/issue")
654 def __init__(self, args): argument
694 self.need_pip = False
695 self.rec_sphinx_upgrade = 0
697 self.system_release = self.get_system_release()
698 self.activate_cmd = ""
702 self.package_supported = True
705 self.recommend_python = None
708 self.distro_msg = None
710 self.latest_avail_ver = (0, 0, 0)
711 self.venv_ver = (0, 0, 0)
715 self.conf = prefix + "Documentation/conf.py"
716 self.requirement_file = prefix + "Documentation/sphinx/requirements.txt"
718 def get_install_progs(self, progs, cmd, extra=None): argument
724 install = self.deps.check_missing(progs)
726 if self.verbose_warn_install:
727 self.deps.warn_install()
733 if self.verbose_warn_install:
749 def give_debian_hints(self): argument
765 if self.pdf:
787 self.check_missing_file(files, package, DepManager.PDF_MANDATORY)
789 self.check_program("dvipng", DepManager.PDF_MANDATORY)
791 if not self.distro_msg:
792 self.distro_msg = \
796 return self.get_install_progs(progs, "apt-get install")
798 def give_redhat_hints(self): argument
826 match = re.search(r"(release|Linux)\s+(\d+)", self.system_release)
833 self.pdf = False
834 elif re.search("Fedora", self.system_release):
854 self.check_program("python3.9", DepManager.SYSTEM_MANDATORY)
858 self.recommend_python = True
861 self.package_supported = False
863 if not self.distro_msg:
864 self.distro_msg = \
874 if self.pdf:
880 self.check_missing_file(pdf_pkgs, noto_sans_redhat, DepManager.PDF_MANDATORY)
882 self.check_rpm_missing(fedora_tex_pkgs, DepManager.PDF_MANDATORY)
884 self.check_missing_tex(DepManager.PDF_MANDATORY)
889 self.deps.del_package("texlive-ctex")
891 return self.get_install_progs(progs, "dnf install")
893 def give_opensuse_hints(self): argument
927 match = re.search(r"(Leap)\s+(\d+).(\d)", self.system_release)
934 if not self.which(self.python_cmd):
935 self.check_program("python3.11", DepManager.SYSTEM_MANDATORY)
937 self.recommend_python = True
958 if self.pdf:
959 self.check_rpm_missing(suse_tex_pkgs, DepManager.PDF_MANDATORY)
960 if self.pdf:
961 self.check_missing_tex()
963 return self.get_install_progs(progs, "zypper install --no-recommends")
965 def give_mageia_hints(self): argument
986 if re.search(r"OpenMandriva", self.system_release):
1003 self.check_program("python-virtualenv", DepManager.PYTHON_MANDATORY)
1013 if not self.distro_msg:
1014 self.distro_msg = \
1025 if self.pdf:
1031 self.check_missing_file(pdf_pkgs, noto_sans, DepManager.PDF_MANDATORY)
1032 self.check_rpm_missing(tex_pkgs, DepManager.PDF_MANDATORY)
1034 return self.get_install_progs(progs, packager_cmd)
1036 def give_arch_linux_hints(self): argument
1061 if self.pdf:
1062 self.check_pacman_missing(archlinux_tex_pkgs,
1065 self.check_missing_file(["/usr/share/fonts/noto-cjk/NotoSansCJK-Regular.ttc"],
1070 return self.get_install_progs(progs, "pacman -S")
1072 def give_gentoo_hints(self): argument
1093 if self.pdf:
1104 self.check_missing_file(files, package, DepManager.PDF_MANDATORY)
1139 if not self.distro_msg:
1140 … self.distro_msg = "Note: Gentoo requires package.use to be adjusted before emerging packages"
1159 result = self.run(cmd, stdout=subprocess.PIPE, text=True)
1188 return self.get_install_progs(progs,
1192 def get_install(self): argument
1204 re.compile("Red Hat Enterprise Linux"): self.give_redhat_hints,
1205 re.compile("Fedora"): self.give_redhat_hints,
1206 re.compile("AlmaLinux"): self.give_redhat_hints,
1207 re.compile("Amazon Linux"): self.give_redhat_hints,
1208 re.compile("CentOS"): self.give_redhat_hints,
1209 re.compile("openEuler"): self.give_redhat_hints,
1210 re.compile("Oracle Linux Server"): self.give_redhat_hints,
1211 re.compile("Rocky Linux"): self.give_redhat_hints,
1212 re.compile("Springdale Open Enterprise"): self.give_redhat_hints,
1214 re.compile("Ubuntu"): self.give_debian_hints,
1215 re.compile("Debian"): self.give_debian_hints,
1216 re.compile("Devuan"): self.give_debian_hints,
1217 re.compile("Kali"): self.give_debian_hints,
1218 re.compile("Mint"): self.give_debian_hints,
1220 re.compile("openSUSE"): self.give_opensuse_hints,
1222 re.compile("Mageia"): self.give_mageia_hints,
1223 re.compile("OpenMandriva"): self.give_mageia_hints,
1225 re.compile("Arch Linux"): self.give_arch_linux_hints,
1226 re.compile("Gentoo"): self.give_gentoo_hints,
1231 if regex.search(self.system_release):
1239 if self.pdf:
1240 self.check_missing_tex()
1242 self.distro_msg = \
1247 return self.get_install_progs(progs, None)
1252 def deactivate_help(self): argument
1260 def get_virtenv(self): argument
1274 for p in self.virtenv_prefix:
1280 for p in self.virtenv_prefix:
1290 if ver < self.min_version:
1297 ver = self.get_sphinx_version(sphinx_cmd)
1305 if self.need_sphinx and ver >= self.min_version:
1307 elif parse_version(ver) > self.cur_version:
1312 def recommend_sphinx_upgrade(self): argument
1322 if self.cur_version and self.cur_version >= RECOMMENDED_VERSION:
1323 self.latest_avail_ver = self.cur_version
1328 self.activate_cmd, self.venv_ver = self.get_virtenv()
1331 if self.activate_cmd and self.venv_ver > self.cur_version:
1332 self.latest_avail_ver = self.venv_ver
1334 if self.cur_version:
1335 self.latest_avail_ver = self.cur_version
1337 self.latest_avail_ver = (0, 0, 0)
1341 if not self.virtualenv:
1342 if not self.latest_avail_ver:
1345 return self.latest_avail_ver
1348 self.need_pip = True
1350 if not self.latest_avail_ver:
1354 if self.latest_avail_ver != (0, 0, 0):
1355 if self.latest_avail_ver < RECOMMENDED_VERSION:
1356 self.rec_sphinx_upgrade = 1
1358 return self.latest_avail_ver
1360 def recommend_package(self): argument
1367 old_need = self.deps.need
1368 old_optional = self.deps.optional
1370 self.pdf = False
1371 self.deps.optional = 0
1372 old_verbose = self.verbose_warn_install
1373 self.verbose_warn_install = 0
1375 self.deps.clear_deps()
1377 self.deps.add_package("python-sphinx", DepManager.PYTHON_MANDATORY)
1379 cmd = self.get_install()
1383 self.deps.need = old_need
1384 self.deps.optional = old_optional
1385 self.verbose_warn_install = old_verbose
1387 def recommend_sphinx_version(self, virtualenv_cmd): argument
1402 if self.recommend_python:
1410 if self.cur_version != (0, 0, 0) and self.cur_version >= RECOMMENDED_VERSION:
1413 if self.latest_avail_ver:
1414 latest_avail_ver = ver_str(self.latest_avail_ver)
1416 if not self.need_sphinx:
1420 if self.latest_avail_ver and self.latest_avail_ver > self.cur_version:
1425 self.deactivate_help()
1428 if self.latest_avail_ver and self.latest_avail_ver >= RECOMMENDED_VERSION:
1431 if not self.virtualenv:
1435 if not self.latest_avail_ver or self.latest_avail_ver == (0, 0, 0):
1441 if self.latest_avail_ver > self.cur_version:
1446 self.deactivate_help()
1450 if self.need_sphinx:
1451 self.deps.need += 1
1454 if self.latest_avail_ver and self.latest_avail_ver >= self.min_version:
1455 if self.latest_avail_ver >= RECOMMENDED_VERSION:
1458 self.deactivate_help()
1463 if self.latest_avail_ver < RECOMMENDED_VERSION:
1469 if self.rec_sphinx_upgrade:
1470 if not self.virtualenv:
1484 self.deactivate_help()
1486 if self.package_supported:
1487 self.recommend_package()
1495 def check_needs(self): argument
1500 self.python_cmd = sys.executable
1503 self.check_sphinx(self.conf)
1505 if self.system_release:
1509 if self.cur_version != (0, 0, 0):
1510 ver = ver_str(self.cur_version)
1519 self.need_sphinx = 1
1521 self.venv_ver = self.recommend_sphinx_upgrade()
1523 if self.need_pip:
1525 self.need_pip = False
1529 self.check_python_module("ensurepip")
1532 self.check_perl_module("Pod::Usage", DepManager.SYSTEM_MANDATORY)
1534 self.check_program("make", DepManager.SYSTEM_MANDATORY)
1535 self.check_program("which", DepManager.SYSTEM_MANDATORY)
1537 self.check_program("dot", DepManager.SYSTEM_OPTIONAL)
1538 self.check_program("convert", DepManager.SYSTEM_OPTIONAL)
1540 self.check_python_module("yaml")
1542 if self.pdf:
1543 self.check_program("xelatex", DepManager.PDF_MANDATORY)
1544 self.check_program("rsvg-convert", DepManager.PDF_MANDATORY)
1545 self.check_program("latexmk", DepManager.PDF_MANDATORY)
1548 cmd = self.get_install()
1554 if self.distro_msg:
1555 print("\n" + self.distro_msg)
1557 if not self.python_cmd:
1558 if self.need == 1:
1560 elif self.need:
1564 if self.need_symlink:
1565 sphinx_path = self.which("sphinx-build-3")
1569 self.recommend_sphinx_version(virtualenv_cmd)
1572 if not self.deps.optional:
1575 if self.deps.need == 1:
1577 elif self.deps.need: