140 lines
4.1 KiB
Python
140 lines
4.1 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Write PLISTs based on the output of update_plist_hints.py.
|
|
|
|
This is temporary and will be removed once we are integrated with
|
|
update-plist(1).
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
import re
|
|
|
|
YEAR = 2022
|
|
THIS_DIR = os.path.abspath(os.path.dirname(__file__))
|
|
PLIST_DIR = os.path.abspath(os.path.join(THIS_DIR, "..", "pkg"))
|
|
PLISTS = "-buildset", "-main", "-context", "-full", "-docs"
|
|
EXISTING_DIRS = ["share", "info", "man"] + \
|
|
["man/man%d" % i for i in range(1, 9)] + ["man3f", "man3p"]
|
|
|
|
MAN_RE = re.compile(r'^man/man[0-9]/.*\.[0-9]')
|
|
INFO_RE = re.compile(r'^info/.*\.info')
|
|
|
|
|
|
TOP_MATTER = {
|
|
"-buildset": [
|
|
"@conflict teTeX_texmf-*",
|
|
"@conflict texlive_base-<%s" % YEAR,
|
|
"@conflict texlive_texmf-docs-<%s" % YEAR,
|
|
"@conflict texlive_texmf-minimal-<%s" % YEAR,
|
|
"@conflict texlive_texmf-full-<%s" % YEAR,
|
|
"@conflict texlive_texmf-context-<%s" % YEAR,
|
|
"@conflict texlive_base,-mktexlsr-<%sp0" % YEAR,
|
|
"@pkgpath print/texlive/texmf-minimal",
|
|
"@pkgpath print/teTeX/texmf",
|
|
# Scaffold a dir for ports wishing to install extra tex macros.
|
|
"share/texmf-local/",
|
|
],
|
|
"-main": [
|
|
"@conflict teTeX_texmf-*",
|
|
"@conflict texlive_base-<%s" % YEAR,
|
|
"@conflict texlive_texmf-docs-<%s" % YEAR,
|
|
"@conflict texlive_texmf-full-<%s" % YEAR,
|
|
"@conflict texlive_texmf-buildset-<%s" % YEAR,
|
|
"@conflict texlive_texmf-context-<%s" % YEAR,
|
|
"@pkgpath print/teTeX/texmf",
|
|
],
|
|
"-context": [
|
|
"@conflict teTeX_texmf-*",
|
|
"@conflict texlive_base-<%s" % YEAR,
|
|
"@conflict texlive_texmf-docs-<%s" % YEAR,
|
|
"@conflict texlive_texmf-full-<%s" % YEAR,
|
|
"@conflict texlive_texmf-buildset-<%s" % YEAR,
|
|
"@conflict texlive_texmf-minimal-<%s" % YEAR,
|
|
],
|
|
"-full": [
|
|
"@conflict teTeX_texmf-*",
|
|
"@conflict texlive_base-<%s" % YEAR,
|
|
"@conflict texlive_texmf-docs-<%s" % YEAR,
|
|
"@conflict texlive_texmf-minimal-<%s" % YEAR,
|
|
"@conflict texlive_texmf-buildset-<%s" % YEAR,
|
|
"@conflict texlive_texmf-context-<%s" % YEAR,
|
|
"@pkgpath print/texlive/texmf-full",
|
|
"@pkgpath print/teTeX/texmf",
|
|
],
|
|
"-docs": [
|
|
"@conflict teTeX_texmf-doc-*",
|
|
"@conflict texlive_base-<%s" % YEAR,
|
|
"@conflict texlive_texmf-minimal-<%s" % YEAR,
|
|
"@conflict texlive_texmf-full-<%s" % YEAR,
|
|
"@conflict texlive_texmf-buildset-<%s" % YEAR,
|
|
"@conflict texlive_texmf-context-<%s" % YEAR,
|
|
"@pkgpath print/texlive/texmf-docs",
|
|
"@pkgpath print/teTeX_texmf,-doc",
|
|
],
|
|
}
|
|
|
|
BOTTOM_MATTER = {
|
|
"-buildset": ["@tag mktexlsr"],
|
|
"-main": ["@tag mktexlsr"],
|
|
"-context": [
|
|
"@exec %D/bin/mtxrun --generate > /dev/null 2>&1",
|
|
"@tag mktexlsr"
|
|
],
|
|
"-full": ["@tag mktexlsr"],
|
|
"-docs": ["@tag mktexlsr"],
|
|
}
|
|
|
|
|
|
def open_plist(suffix):
|
|
return open(os.path.join(PLIST_DIR, "PLIST" + suffix), "w")
|
|
|
|
|
|
def dir_entries(path, exclude=[]):
|
|
dirs = []
|
|
while path != "":
|
|
path = os.path.dirname(path)
|
|
if path != "" and path not in exclude:
|
|
dirs.append(path + os.path.sep)
|
|
return dirs
|
|
|
|
|
|
def main():
|
|
plist_map = {}
|
|
all_files = {}
|
|
dir_ents = {}
|
|
for plist in PLISTS:
|
|
plist_map[plist] = open_plist(plist)
|
|
for line in TOP_MATTER[plist]:
|
|
plist_map[plist].write(line + "\n")
|
|
|
|
all_files[plist] = set()
|
|
dir_ents[plist] = set()
|
|
|
|
for line in sys.stdin:
|
|
if line.startswith("#"):
|
|
continue # omit commented lines for now.
|
|
|
|
filename, plist = line.split()
|
|
|
|
dir_ents[plist].update(dir_entries(filename, EXISTING_DIRS))
|
|
all_files[plist].add(filename)
|
|
|
|
for plist, files in all_files.items():
|
|
fh = plist_map[plist]
|
|
|
|
for fl in sorted(files | dir_ents[plist]):
|
|
if re.match(MAN_RE, fl):
|
|
fh.write("@man ")
|
|
elif re.match(INFO_RE, fl):
|
|
fh.write("@info ")
|
|
fh.write(fl + "\n")
|
|
|
|
for line in BOTTOM_MATTER[plist]:
|
|
fh.write(line + "\n")
|
|
|
|
fh.close()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|