git repos / blockattack-game

blame: source/misc/embedded_libs/fmt-8.1.1/doc/build.py

normal view · raw

f8deb5b9 Poul Sander 2022-01-15 13:55 1
#!/usr/bin/env python3
f8deb5b9 Poul Sander 2022-01-15 13:55 2
# Build the documentation.
f8deb5b9 Poul Sander 2022-01-15 13:55 3
f8deb5b9 Poul Sander 2022-01-15 13:55 4
import errno, os, re, sys
f8deb5b9 Poul Sander 2022-01-15 13:55 5
from subprocess import check_call, CalledProcessError, Popen, PIPE, STDOUT
f8deb5b9 Poul Sander 2022-01-15 13:55 6
f8deb5b9 Poul Sander 2022-01-15 13:55 7
versions = ['1.0.0', '1.1.0', '2.0.0', '3.0.2', '4.0.0', '4.1.0', '5.0.0', '5.1.0', '5.2.0', '5.2.1', '5.3.0', '6.0.0', '6.1.0', '6.1.1', '6.1.2', '6.2.0', '6.2.1', '7.0.0', '7.0.1', '7.0.2', '7.0.3', '7.1.0', '7.1.1', '7.1.2', '7.1.3', '8.0.0', '8.0.1', '8.1.0', '8.1.1']
f8deb5b9 Poul Sander 2022-01-15 13:55 8
f8deb5b9 Poul Sander 2022-01-15 13:55 9
class Pip:
f8deb5b9 Poul Sander 2022-01-15 13:55 10
  def __init__(self, venv_dir):
f8deb5b9 Poul Sander 2022-01-15 13:55 11
    self.path = os.path.join(venv_dir, 'bin', 'pip')
f8deb5b9 Poul Sander 2022-01-15 13:55 12
f8deb5b9 Poul Sander 2022-01-15 13:55 13
  def install(self, package, commit=None):
f8deb5b9 Poul Sander 2022-01-15 13:55 14
    "Install package using pip."
f8deb5b9 Poul Sander 2022-01-15 13:55 15
    if commit:
f8deb5b9 Poul Sander 2022-01-15 13:55 16
      package = 'git+https://github.com/{0}.git@{1}'.format(package, commit)
f8deb5b9 Poul Sander 2022-01-15 13:55 17
    print('Installing {0}'.format(package))
f8deb5b9 Poul Sander 2022-01-15 13:55 18
    check_call([self.path, 'install', package])
f8deb5b9 Poul Sander 2022-01-15 13:55 19
f8deb5b9 Poul Sander 2022-01-15 13:55 20
def create_build_env(venv_dir='virtualenv'):
f8deb5b9 Poul Sander 2022-01-15 13:55 21
  # Create virtualenv.
f8deb5b9 Poul Sander 2022-01-15 13:55 22
  if not os.path.exists(venv_dir):
f8deb5b9 Poul Sander 2022-01-15 13:55 23
    check_call(['python3', '-m', 'venv', venv_dir])
f8deb5b9 Poul Sander 2022-01-15 13:55 24
  # Install Sphinx and Breathe. Require the exact version of Sphinx which is
f8deb5b9 Poul Sander 2022-01-15 13:55 25
  # compatible with Breathe.
f8deb5b9 Poul Sander 2022-01-15 13:55 26
  pip = Pip(venv_dir)
f8deb5b9 Poul Sander 2022-01-15 13:55 27
  pip.install('wheel')
f8deb5b9 Poul Sander 2022-01-15 13:55 28
  pip.install('six')
f8deb5b9 Poul Sander 2022-01-15 13:55 29
  # See: https://github.com/sphinx-doc/sphinx/issues/9777
f8deb5b9 Poul Sander 2022-01-15 13:55 30
  pip.install('docutils==0.17.1')
f8deb5b9 Poul Sander 2022-01-15 13:55 31
  pip.install('sphinx-doc/sphinx', 'v3.3.0')
f8deb5b9 Poul Sander 2022-01-15 13:55 32
  pip.install('michaeljones/breathe', 'v4.25.0')
f8deb5b9 Poul Sander 2022-01-15 13:55 33
f8deb5b9 Poul Sander 2022-01-15 13:55 34
def build_docs(version='dev', **kwargs):
f8deb5b9 Poul Sander 2022-01-15 13:55 35
  doc_dir = kwargs.get('doc_dir', os.path.dirname(os.path.realpath(__file__)))
f8deb5b9 Poul Sander 2022-01-15 13:55 36
  work_dir = kwargs.get('work_dir', '.')
f8deb5b9 Poul Sander 2022-01-15 13:55 37
  include_dir = kwargs.get(
f8deb5b9 Poul Sander 2022-01-15 13:55 38
      'include_dir', os.path.join(os.path.dirname(doc_dir), 'include', 'fmt'))
f8deb5b9 Poul Sander 2022-01-15 13:55 39
  # Build docs.
f8deb5b9 Poul Sander 2022-01-15 13:55 40
  cmd = ['doxygen', '-']
f8deb5b9 Poul Sander 2022-01-15 13:55 41
  p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=STDOUT)
f8deb5b9 Poul Sander 2022-01-15 13:55 42
  doxyxml_dir = os.path.join(work_dir, 'doxyxml')
f8deb5b9 Poul Sander 2022-01-15 13:55 43
  out, _ = p.communicate(input=r'''
f8deb5b9 Poul Sander 2022-01-15 13:55 44
      PROJECT_NAME      = fmt
f8deb5b9 Poul Sander 2022-01-15 13:55 45
      GENERATE_LATEX    = NO
f8deb5b9 Poul Sander 2022-01-15 13:55 46
      GENERATE_MAN      = NO
f8deb5b9 Poul Sander 2022-01-15 13:55 47
      GENERATE_RTF      = NO
f8deb5b9 Poul Sander 2022-01-15 13:55 48
      CASE_SENSE_NAMES  = NO
f8deb5b9 Poul Sander 2022-01-15 13:55 49
      INPUT             = {0}/chrono.h {0}/color.h {0}/core.h {0}/compile.h \
f8deb5b9 Poul Sander 2022-01-15 13:55 50
                          {0}/format.h {0}/os.h {0}/ostream.h {0}/printf.h \
f8deb5b9 Poul Sander 2022-01-15 13:55 51
                          {0}/xchar.h
f8deb5b9 Poul Sander 2022-01-15 13:55 52
      QUIET             = YES
f8deb5b9 Poul Sander 2022-01-15 13:55 53
      JAVADOC_AUTOBRIEF = YES
f8deb5b9 Poul Sander 2022-01-15 13:55 54
      AUTOLINK_SUPPORT  = NO
f8deb5b9 Poul Sander 2022-01-15 13:55 55
      GENERATE_HTML     = NO
f8deb5b9 Poul Sander 2022-01-15 13:55 56
      GENERATE_XML      = YES
f8deb5b9 Poul Sander 2022-01-15 13:55 57
      XML_OUTPUT        = {1}
f8deb5b9 Poul Sander 2022-01-15 13:55 58
      ALIASES           = "rst=\verbatim embed:rst"
f8deb5b9 Poul Sander 2022-01-15 13:55 59
      ALIASES          += "endrst=\endverbatim"
f8deb5b9 Poul Sander 2022-01-15 13:55 60
      MACRO_EXPANSION   = YES
f8deb5b9 Poul Sander 2022-01-15 13:55 61
      PREDEFINED        = _WIN32=1 \
f8deb5b9 Poul Sander 2022-01-15 13:55 62
                          __linux__=1 \
f8deb5b9 Poul Sander 2022-01-15 13:55 63
                          FMT_ENABLE_IF(...)= \
f8deb5b9 Poul Sander 2022-01-15 13:55 64
                          FMT_USE_VARIADIC_TEMPLATES=1 \
f8deb5b9 Poul Sander 2022-01-15 13:55 65
                          FMT_USE_RVALUE_REFERENCES=1 \
f8deb5b9 Poul Sander 2022-01-15 13:55 66
                          FMT_USE_USER_DEFINED_LITERALS=1 \
f8deb5b9 Poul Sander 2022-01-15 13:55 67
                          FMT_USE_ALIAS_TEMPLATES=1 \
f8deb5b9 Poul Sander 2022-01-15 13:55 68
                          FMT_API= \
f8deb5b9 Poul Sander 2022-01-15 13:55 69
                          "FMT_BEGIN_NAMESPACE=namespace fmt {{" \
f8deb5b9 Poul Sander 2022-01-15 13:55 70
                          "FMT_END_NAMESPACE=}}" \
f8deb5b9 Poul Sander 2022-01-15 13:55 71
                          "FMT_STRING_ALIAS=1" \
f8deb5b9 Poul Sander 2022-01-15 13:55 72
                          "FMT_VARIADIC(...)=" \
f8deb5b9 Poul Sander 2022-01-15 13:55 73
                          "FMT_VARIADIC_W(...)=" \
f8deb5b9 Poul Sander 2022-01-15 13:55 74
                          "FMT_DOC=1"
f8deb5b9 Poul Sander 2022-01-15 13:55 75
      EXCLUDE_SYMBOLS   = fmt::formatter fmt::printf_formatter fmt::arg_join \
f8deb5b9 Poul Sander 2022-01-15 13:55 76
                          fmt::basic_format_arg::handle
f8deb5b9 Poul Sander 2022-01-15 13:55 77
    '''.format(include_dir, doxyxml_dir).encode('UTF-8'))
f8deb5b9 Poul Sander 2022-01-15 13:55 78
  out = out.decode('utf-8')
f8deb5b9 Poul Sander 2022-01-15 13:55 79
  internal_symbols = [
f8deb5b9 Poul Sander 2022-01-15 13:55 80
    'fmt::detail::.*',
f8deb5b9 Poul Sander 2022-01-15 13:55 81
    'basic_data<>',
f8deb5b9 Poul Sander 2022-01-15 13:55 82
    'fmt::type_identity',
f8deb5b9 Poul Sander 2022-01-15 13:55 83
    'fmt::dynamic_formatter'
f8deb5b9 Poul Sander 2022-01-15 13:55 84
  ]
f8deb5b9 Poul Sander 2022-01-15 13:55 85
  noisy_warnings = [
f8deb5b9 Poul Sander 2022-01-15 13:55 86
    'warning: (Compound|Member .* of class) (' + '|'.join(internal_symbols) + \
f8deb5b9 Poul Sander 2022-01-15 13:55 87
      ') is not documented.',
f8deb5b9 Poul Sander 2022-01-15 13:55 88
    'warning: Internal inconsistency: .* does not belong to any container!'
f8deb5b9 Poul Sander 2022-01-15 13:55 89
  ]
f8deb5b9 Poul Sander 2022-01-15 13:55 90
  for w in noisy_warnings:
f8deb5b9 Poul Sander 2022-01-15 13:55 91
      out = re.sub('.*' + w + '\n', '', out)
f8deb5b9 Poul Sander 2022-01-15 13:55 92
  print(out)
f8deb5b9 Poul Sander 2022-01-15 13:55 93
  if p.returncode != 0:
f8deb5b9 Poul Sander 2022-01-15 13:55 94
    raise CalledProcessError(p.returncode, cmd)
f8deb5b9 Poul Sander 2022-01-15 13:55 95
f8deb5b9 Poul Sander 2022-01-15 13:55 96
  html_dir = os.path.join(work_dir, 'html')
f8deb5b9 Poul Sander 2022-01-15 13:55 97
  main_versions = reversed(versions[-3:])
f8deb5b9 Poul Sander 2022-01-15 13:55 98
  check_call([os.path.join(work_dir, 'virtualenv', 'bin', 'sphinx-build'),
f8deb5b9 Poul Sander 2022-01-15 13:55 99
              '-Dbreathe_projects.format=' + os.path.abspath(doxyxml_dir),
f8deb5b9 Poul Sander 2022-01-15 13:55 100
              '-Dversion=' + version, '-Drelease=' + version,
f8deb5b9 Poul Sander 2022-01-15 13:55 101
              '-Aversion=' + version, '-Aversions=' + ','.join(main_versions),
f8deb5b9 Poul Sander 2022-01-15 13:55 102
              '-b', 'html', doc_dir, html_dir])
f8deb5b9 Poul Sander 2022-01-15 13:55 103
  try:
f8deb5b9 Poul Sander 2022-01-15 13:55 104
    check_call(['lessc', '--verbose', '--clean-css',
f8deb5b9 Poul Sander 2022-01-15 13:55 105
                '--include-path=' + os.path.join(doc_dir, 'bootstrap'),
f8deb5b9 Poul Sander 2022-01-15 13:55 106
                os.path.join(doc_dir, 'fmt.less'),
f8deb5b9 Poul Sander 2022-01-15 13:55 107
                os.path.join(html_dir, '_static', 'fmt.css')])
f8deb5b9 Poul Sander 2022-01-15 13:55 108
  except OSError as e:
f8deb5b9 Poul Sander 2022-01-15 13:55 109
    if e.errno != errno.ENOENT:
f8deb5b9 Poul Sander 2022-01-15 13:55 110
      raise
f8deb5b9 Poul Sander 2022-01-15 13:55 111
    print('lessc not found; make sure that Less (http://lesscss.org/) ' +
f8deb5b9 Poul Sander 2022-01-15 13:55 112
          'is installed')
f8deb5b9 Poul Sander 2022-01-15 13:55 113
    sys.exit(1)
f8deb5b9 Poul Sander 2022-01-15 13:55 114
  return html_dir
f8deb5b9 Poul Sander 2022-01-15 13:55 115
f8deb5b9 Poul Sander 2022-01-15 13:55 116
if __name__ == '__main__':
f8deb5b9 Poul Sander 2022-01-15 13:55 117
  create_build_env()
f8deb5b9 Poul Sander 2022-01-15 13:55 118
  build_docs(sys.argv[1])
1970-01-01 00:00 119