manpages = {
  # Category 1.
  'git-add.adoc' : 1,
  'git-am.adoc' : 1,
  'git-annotate.adoc' : 1,
  'git-apply.adoc' : 1,
  'git-archimport.adoc' : 1,
  'git-archive.adoc' : 1,
  'git-backfill.adoc' : 1,
  'git-bisect.adoc' : 1,
  'git-blame.adoc' : 1,
  'git-branch.adoc' : 1,
  'git-bugreport.adoc' : 1,
  'git-bundle.adoc' : 1,
  'git-cat-file.adoc' : 1,
  'git-check-attr.adoc' : 1,
  'git-check-ignore.adoc' : 1,
  'git-check-mailmap.adoc' : 1,
  'git-checkout-index.adoc' : 1,
  'git-checkout.adoc' : 1,
  'git-check-ref-format.adoc' : 1,
  'git-cherry-pick.adoc' : 1,
  'git-cherry.adoc' : 1,
  'git-citool.adoc' : 1,
  'git-clean.adoc' : 1,
  'git-clone.adoc' : 1,
  'git-column.adoc' : 1,
  'git-commit-graph.adoc' : 1,
  'git-commit-tree.adoc' : 1,
  'git-commit.adoc' : 1,
  'git-config.adoc' : 1,
  'git-count-objects.adoc' : 1,
  'git-credential-cache--daemon.adoc' : 1,
  'git-credential-cache.adoc' : 1,
  'git-credential-store.adoc' : 1,
  'git-credential.adoc' : 1,
  'git-cvsexportcommit.adoc' : 1,
  'git-cvsimport.adoc' : 1,
  'git-cvsserver.adoc' : 1,
  'git-daemon.adoc' : 1,
  'git-describe.adoc' : 1,
  'git-diagnose.adoc' : 1,
  'git-diff-files.adoc' : 1,
  'git-diff-index.adoc' : 1,
  'git-diff-pairs.adoc' : 1,
  'git-difftool.adoc' : 1,
  'git-diff-tree.adoc' : 1,
  'git-diff.adoc' : 1,
  'git-fast-export.adoc' : 1,
  'git-fast-import.adoc' : 1,
  'git-fetch-pack.adoc' : 1,
  'git-fetch.adoc' : 1,
  'git-filter-branch.adoc' : 1,
  'git-fmt-merge-msg.adoc' : 1,
  'git-for-each-ref.adoc' : 1,
  'git-for-each-repo.adoc' : 1,
  'git-format-patch.adoc' : 1,
  'git-fsck-objects.adoc' : 1,
  'git-fsck.adoc' : 1,
  'git-fsmonitor--daemon.adoc' : 1,
  'git-gc.adoc' : 1,
  'git-get-tar-commit-id.adoc' : 1,
  'git-grep.adoc' : 1,
  'git-gui.adoc' : 1,
  'git-hash-object.adoc' : 1,
  'git-help.adoc' : 1,
  'git-hook.adoc' : 1,
  'git-http-backend.adoc' : 1,
  'git-http-fetch.adoc' : 1,
  'git-http-push.adoc' : 1,
  'git-imap-send.adoc' : 1,
  'git-index-pack.adoc' : 1,
  'git-init-db.adoc' : 1,
  'git-init.adoc' : 1,
  'git-instaweb.adoc' : 1,
  'git-interpret-trailers.adoc' : 1,
  'git-last-modified.adoc' : 1,
  'git-log.adoc' : 1,
  'git-ls-files.adoc' : 1,
  'git-ls-remote.adoc' : 1,
  'git-ls-tree.adoc' : 1,
  'git-mailinfo.adoc' : 1,
  'git-mailsplit.adoc' : 1,
  'git-maintenance.adoc' : 1,
  'git-merge-base.adoc' : 1,
  'git-merge-file.adoc' : 1,
  'git-merge-index.adoc' : 1,
  'git-merge-one-file.adoc' : 1,
  'git-mergetool--lib.adoc' : 1,
  'git-mergetool.adoc' : 1,
  'git-merge-tree.adoc' : 1,
  'git-merge.adoc' : 1,
  'git-mktag.adoc' : 1,
  'git-mktree.adoc' : 1,
  'git-multi-pack-index.adoc' : 1,
  'git-mv.adoc' : 1,
  'git-name-rev.adoc' : 1,
  'git-notes.adoc' : 1,
  'git-p4.adoc' : 1,
  'git-pack-objects.adoc' : 1,
  'git-pack-refs.adoc' : 1,
  'git-patch-id.adoc' : 1,
  'git-prune-packed.adoc' : 1,
  'git-prune.adoc' : 1,
  'git-pull.adoc' : 1,
  'git-push.adoc' : 1,
  'git-quiltimport.adoc' : 1,
  'git-range-diff.adoc' : 1,
  'git-read-tree.adoc' : 1,
  'git-rebase.adoc' : 1,
  'git-receive-pack.adoc' : 1,
  'git-reflog.adoc' : 1,
  'git-refs.adoc' : 1,
  'git-remote-ext.adoc' : 1,
  'git-remote-fd.adoc' : 1,
  'git-remote.adoc' : 1,
  'git-repack.adoc' : 1,
  'git-replace.adoc' : 1,
  'git-replay.adoc' : 1,
  'git-repo.adoc' : 1,
  'git-request-pull.adoc' : 1,
  'git-rerere.adoc' : 1,
  'git-reset.adoc' : 1,
  'git-restore.adoc' : 1,
  'git-revert.adoc' : 1,
  'git-rev-list.adoc' : 1,
  'git-rev-parse.adoc' : 1,
  'git-rm.adoc' : 1,
  'git-send-email.adoc' : 1,
  'git-send-pack.adoc' : 1,
  'git-shell.adoc' : 1,
  'git-sh-i18n--envsubst.adoc' : 1,
  'git-sh-i18n.adoc' : 1,
  'git-shortlog.adoc' : 1,
  'git-show-branch.adoc' : 1,
  'git-show-index.adoc' : 1,
  'git-show-ref.adoc' : 1,
  'git-show.adoc' : 1,
  'git-sh-setup.adoc' : 1,
  'git-sparse-checkout.adoc' : 1,
  'git-stage.adoc' : 1,
  'git-stash.adoc' : 1,
  'git-status.adoc' : 1,
  'git-stripspace.adoc' : 1,
  'git-submodule.adoc' : 1,
  'git-svn.adoc' : 1,
  'git-switch.adoc' : 1,
  'git-symbolic-ref.adoc' : 1,
  'git-tag.adoc' : 1,
  'git-unpack-file.adoc' : 1,
  'git-unpack-objects.adoc' : 1,
  'git-update-index.adoc' : 1,
  'git-update-ref.adoc' : 1,
  'git-update-server-info.adoc' : 1,
  'git-upload-archive.adoc' : 1,
  'git-upload-pack.adoc' : 1,
  'git-var.adoc' : 1,
  'git-verify-commit.adoc' : 1,
  'git-verify-pack.adoc' : 1,
  'git-verify-tag.adoc' : 1,
  'git-version.adoc' : 1,
  'git-web--browse.adoc' : 1,
  'git-worktree.adoc' : 1,
  'git-write-tree.adoc' : 1,
  'git.adoc' : 1,
  'gitk.adoc' : 1,
  'gitweb.adoc' : 1,
  'scalar.adoc' : 1,

  # Category 5.
  'gitattributes.adoc' : 5,
  'gitformat-bundle.adoc' : 5,
  'gitformat-chunk.adoc' : 5,
  'gitformat-commit-graph.adoc' : 5,
  'gitformat-index.adoc' : 5,
  'gitformat-pack.adoc' : 5,
  'gitformat-signature.adoc' : 5,
  'githooks.adoc' : 5,
  'gitignore.adoc' : 5,
  'gitmailmap.adoc' : 5,
  'gitmodules.adoc' : 5,
  'gitprotocol-capabilities.adoc' : 5,
  'gitprotocol-common.adoc' : 5,
  'gitprotocol-http.adoc' : 5,
  'gitprotocol-pack.adoc' : 5,
  'gitprotocol-v2.adoc' : 5,
  'gitrepository-layout.adoc' : 5,
  'gitweb.conf.adoc' : 5,

  # Category 7.
  'gitcli.adoc' : 7,
  'gitcore-tutorial.adoc' : 7,
  'gitcredentials.adoc' : 7,
  'gitcvs-migration.adoc' : 7,
  'gitdiffcore.adoc' : 7,
  'giteveryday.adoc' : 7,
  'gitfaq.adoc' : 7,
  'gitglossary.adoc' : 7,
  'gitpacking.adoc' : 7,
  'gitnamespaces.adoc' : 7,
  'gitremote-helpers.adoc' : 7,
  'gitrevisions.adoc' : 7,
  'gitsubmodules.adoc' : 7,
  'gittutorial-2.adoc' : 7,
  'gittutorial.adoc' : 7,
  'gitworkflows.adoc' : 7,
}

manpages_breaking_changes = {
  'git-pack-redundant.adoc' : 1,
  'git-whatchanged.adoc' : 1,
}

if not get_option('breaking_changes')
  manpages += manpages_breaking_changes
endif

docs_backend = get_option('docs_backend')
if docs_backend == 'auto'
  if find_program('asciidoc', dirs: program_path, native: true, required: false).found()
    docs_backend = 'asciidoc'
  elif find_program('asciidoctor', dirs: program_path, native: true, required: false).found()
    docs_backend = 'asciidoctor'
  else
    error('Neither asciidoc nor asciidoctor were found.')
  endif
endif

if docs_backend == 'asciidoc'
  asciidoc = find_program('asciidoc', dirs: program_path, native: true)
  asciidoc_html = 'xhtml11'
  asciidoc_docbook = 'docbook'
  xmlto_extra = [ ]

  asciidoc_conf = custom_target(
    command: [
      shell,
      meson.project_source_root() / 'GIT-VERSION-GEN',
      meson.project_source_root(),
      '@INPUT@',
      '@OUTPUT@',
    ],
    input: 'asciidoc.conf.in',
    output: 'asciidoc.conf',
    depends: [git_version_file],
    env: version_gen_environment,
  )

  asciidoc_common_options = [
    asciidoc,
    '--conf-file=' + asciidoc_conf.full_path(),
    '--attribute=build_dir=' + meson.current_build_dir(),
  ]

  pager_opt = get_option('default_pager')
  if pager_opt != '' and pager_opt != 'less'
    asciidoc_common_options += '-agit-default-pager=' + pager_opt
  endif

  editor_opt = get_option('default_editor')
  if editor_opt != '' and editor_opt != 'vi'
    asciidoc_common_options += '-agit-default-editor=' + editor_opt
  endif

  documentation_deps = [
    asciidoc_conf,
  ]
elif docs_backend == 'asciidoctor'
  asciidoctor = find_program('asciidoctor', dirs: program_path, native: true)
  asciidoc_html = 'xhtml5'
  asciidoc_docbook = 'docbook5'
  xmlto_extra = [
    '--skip-validation',
    '-x', meson.current_source_dir() / 'manpage.xsl',
  ]

  asciidoctor_extensions = custom_target(
    command: [
      shell,
      meson.project_source_root() / 'GIT-VERSION-GEN',
      meson.project_source_root(),
      '@INPUT@',
      '@OUTPUT@',
    ],
    input: 'asciidoctor-extensions.rb.in',
    output: 'asciidoctor-extensions.rb',
    depends: [git_version_file],
    env: version_gen_environment,
  )

  asciidoc_common_options = [
    asciidoctor,
    '--attribute', 'compat-mode',
    '--attribute', 'tabsize=8',
    '--attribute', 'litdd=&#x2d;&#x2d;',
    '--attribute', 'docinfo=shared',
    '--attribute', 'build_dir=' + meson.current_build_dir(),
    '--load-path', meson.current_build_dir(),
    '--require', 'asciidoctor-extensions',
  ]

  pager_opt = get_option('default_pager')
  if pager_opt != '' and pager_opt != 'less'
    asciidoc_common_options += '-agit-default-pager=' + pager_opt
  endif

  editor_opt = get_option('default_editor')
  if editor_opt != '' and editor_opt != 'vi'
    asciidoc_common_options += '-agit-default-editor=' + editor_opt
  endif

  documentation_deps = [
    asciidoctor_extensions,
  ]
endif

if get_option('breaking_changes')
   asciidoc_common_options += ['--attribute', 'with-breaking-changes']
endif

xmlto = find_program('xmlto', dirs: program_path, native: true)

cmd_lists = [
  'cmds-ancillaryinterrogators.adoc',
  'cmds-ancillarymanipulators.adoc',
  'cmds-mainporcelain.adoc',
  'cmds-plumbinginterrogators.adoc',
  'cmds-plumbingmanipulators.adoc',
  'cmds-synchingrepositories.adoc',
  'cmds-synchelpers.adoc',
  'cmds-guide.adoc',
  'cmds-developerinterfaces.adoc',
  'cmds-userinterfaces.adoc',
  'cmds-purehelpers.adoc',
  'cmds-foreignscminterface.adoc',
]

documentation_deps += custom_target(
  command: [
    shell,
    '@INPUT@',
    meson.project_source_root(),
    meson.current_build_dir(),
  ] + cmd_lists,
  input: 'cmd-list.sh',
  output: cmd_lists
)

foreach mode : [ 'diff', 'merge' ]
  documentation_deps += custom_target(
    command: [
      shell,
      '@INPUT@',
      '..',
      mode,
      '@OUTPUT@'
    ],
    env: [
      'MERGE_TOOLS_DIR=' + meson.project_source_root() / 'mergetools',
    ],
    input: 'generate-mergetool-list.sh',
    output: 'mergetools-' + mode + '.adoc',
  )
endforeach

foreach manpage, category : manpages
  if get_option('docs').contains('man')
    manpage_xml_target = custom_target(
      command: asciidoc_common_options + [
        '--backend=' + asciidoc_docbook,
        '--doctype=manpage',
        '--out-file=@OUTPUT@',
        '@INPUT@',
      ],
      depends: documentation_deps,
      input: manpage,
      output: fs.stem(manpage) + '.xml',
    )

    custom_target(
      command: [
        xmlto,
        '-m', '@INPUT0@',
        '-m', '@INPUT1@',
        '--stringparam',
        'man.base.url.for.relative.links=' + get_option('prefix') / get_option('mandir'),
        'man',
        manpage_xml_target,
        '-o',
        meson.current_build_dir(),
      ] + xmlto_extra,
      input: [
        'manpage-normal.xsl',
        'manpage-bold-literal.xsl',
      ],
      output: fs.stem(manpage) + '.' + category.to_string(),
      install: true,
      install_dir: get_option('mandir') / 'man' + category.to_string(),
    )
  endif

  if get_option('docs').contains('html')
    custom_target(
      command: asciidoc_common_options + [
        '--backend=' + asciidoc_html,
        '--doctype=manpage',
        '--out-file=@OUTPUT@',
        '@INPUT@',
      ],
      depends: documentation_deps,
      input: manpage,
      output: fs.stem(manpage) + '.html',
      install: true,
      install_dir: get_option('datadir') / 'doc/git-doc',
    )
  endif
endforeach

if get_option('docs').contains('html')
  configure_file(
    input: 'docinfo-html.in',
    output: 'docinfo.html',
    copy: true,
    install: true,
    install_dir: get_option('datadir') / 'doc/git-doc',
  )

  configure_file(
    input: 'docbook-xsl.css',
    output: 'docbook-xsl.css',
    copy: true,
    install: true,
    install_dir: get_option('datadir') / 'doc/git-doc',
  )

  install_symlink('index.html',
    install_dir: get_option('datadir') / 'doc/git-doc',
    pointing_to: 'git.html',
  )

  xsltproc = find_program('xsltproc', dirs: program_path, native: true)

  user_manual_xml = custom_target(
    command: asciidoc_common_options + [
      '--backend=' + asciidoc_docbook,
      '--doctype=book',
      '--out-file=@OUTPUT@',
      '@INPUT@',
    ],
    input: 'user-manual.adoc',
    output: 'user-manual.xml',
    depends: documentation_deps,
  )

  custom_target(
    command: [
      xsltproc,
      '--xinclude',
      '--stringparam', 'html.stylesheet', 'docbook-xsl.css',
      '--param', 'generate.consistent.ids', '1',
      '--output', '@OUTPUT@',
      '@INPUT@',
      user_manual_xml,
    ],
    input: 'docbook.xsl',
    output: 'user-manual.html',
    install: true,
    install_dir: get_option('datadir') / 'doc/git-doc',
  )

  articles = [
    'BreakingChanges.adoc',
    'DecisionMaking.adoc',
    'MyFirstContribution.adoc',
    'MyFirstObjectWalk.adoc',
    'ReviewingGuidelines.adoc',
    'SubmittingPatches',
    'ToolsForGit.adoc',
    'git-bisect-lk2009.adoc',
    'git-tools.adoc',
  ]

  foreach article : articles
    custom_target(
      command: asciidoc_common_options + [
        '--backend=' + asciidoc_html,
        '--out-file=@OUTPUT@',
        '@INPUT@',
      ],
      input: article,
      output: fs.stem(article) + '.html',
      depends: documentation_deps,
      install: true,
      install_dir: get_option('datadir') / 'doc/git-doc',
    )
  endforeach

  asciidoc_html_options = asciidoc_common_options + [
    '--backend=' + asciidoc_html,
    '--out-file=@OUTPUT@',
    '--attribute', 'git-relative-html-prefix=../',
    '@INPUT@',
  ]

  subdir('howto')
  subdir('technical')
endif

# Sanity check that we are not missing any tests present in 't/'. This check
# only runs once at configure time and is thus best-effort, only. Furthermore,
# it only verifies man pages for the sake of simplicity.
configured_manpages = manpages.keys()
configured_manpages += manpages_breaking_changes.keys()
configured_manpages += [ 'git-bisect-lk2009.adoc', 'git-tools.adoc' ]
actual_manpages = run_command(shell, '-c', 'ls git*.adoc scalar.adoc',
  check: true,
  env: script_environment,
).stdout().strip().split('\n')

if configured_manpages != actual_manpages
  missing_manpage = [ ]
  foreach actual_manpage : actual_manpages
    if actual_manpage not in configured_manpages
      missing_manpage += actual_manpage
    endif
  endforeach
  if missing_manpage.length() > 0
    error('Man page found, but not configured:\n\n - ' + '\n - '.join(missing_manpage))
  endif

  superfluous_manpage = [ ]
  foreach configured_manpage : configured_manpages
    if configured_manpage not in actual_manpages
      superfluous_manpage += configured_manpage
    endif
  endforeach
  if superfluous_manpage.length() > 0
    error('Man page configured, but not found:\n\n - ' + '\n - '.join(superfluous_manpage))
  endif
endif
