if(NOT CMAKE_SKIP_INSTALL_RULES)
  find_program(PROG_GZIP gzip)
  if(NOT PROG_GZIP)
    message(FATAL_ERROR "Missing gzip. Set CMAKE_SKIP_INSTALL_RULES to skip man pages.")
  endif()

  find_program(PROG_POD2MAN pod2man)
  if(NOT PROG_POD2MAN)
    message(FATAL_ERROR "Missing pod2man. Set CMAKE_SKIP_INSTALL_RULES to skip man pages.")
  endif()

  macro(unibi_pod2man basename)
    set(OUT_MAN_FILE "${CMAKE_CURRENT_BINARY_DIR}/${basename}.3")
    set(OUT_GZ_FILE "${CMAKE_CURRENT_BINARY_DIR}/${basename}.3.gz")
    add_custom_command(
      OUTPUT "${OUT_MAN_FILE}"
      DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${basename}.pod"
      WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
      COMMAND pod2man --center "${PROJECT_NAME}" --section 3 --release "${PROJECT_NAME}-${PROJECT_VERSION}" "${basename}.pod" "${OUT_MAN_FILE}")
    add_custom_command(
      OUTPUT "${OUT_GZ_FILE}"
      DEPENDS "${OUT_MAN_FILE}"
      COMMAND gzip --stdout "${OUT_MAN_FILE}" > "${OUT_GZ_FILE}")
    add_custom_target(man_page_${basename}
      DEPENDS "${OUT_GZ_FILE}")
    add_dependencies(man_pages man_page_${basename})
    install(FILES "${OUT_GZ_FILE}"
      DESTINATION "${CMAKE_INSTALL_MANDIR}/man3/")
  endmacro()

  add_custom_target(man_pages ALL)

  unibi_pod2man(unibi_add_ext_bool)
  unibi_pod2man(unibi_add_ext_num)
  unibi_pod2man(unibi_add_ext_str)
  unibi_pod2man(unibi_count_ext_bool)
  unibi_pod2man(unibi_count_ext_num)
  unibi_pod2man(unibi_count_ext_str)
  unibi_pod2man(unibi_del_ext_bool)
  unibi_pod2man(unibi_destroy)
  unibi_pod2man(unibi_dummy)
  unibi_pod2man(unibi_dump)
  unibi_pod2man(unibi_format)
  unibi_pod2man(unibi_from_env)
  unibi_pod2man(unibi_from_fd)
  unibi_pod2man(unibi_from_file)
  unibi_pod2man(unibi_from_fp)
  unibi_pod2man(unibi_from_mem)
  unibi_pod2man(unibi_from_term)
  unibi_pod2man(unibi_get_aliases)
  unibi_pod2man(unibi_get_bool)
  unibi_pod2man(unibi_get_ext_bool_name)
  unibi_pod2man(unibi_get_ext_bool)
  unibi_pod2man(unibi_get_ext_num_name)
  unibi_pod2man(unibi_get_ext_num)
  unibi_pod2man(unibi_get_ext_str_name)
  unibi_pod2man(unibi_get_ext_str)
  unibi_pod2man(unibi_get_name)
  unibi_pod2man(unibi_get_num)
  unibi_pod2man(unibi_get_str)
  unibi_pod2man(unibi_int_from_var)
  unibi_pod2man(unibilium.h)
  unibi_pod2man(unibi_name_bool)
  unibi_pod2man(unibi_name_num)
  unibi_pod2man(unibi_name_str)
  unibi_pod2man(unibi_num_from_var)
  unibi_pod2man(unibi_run)
  unibi_pod2man(unibi_set_aliases)
  unibi_pod2man(unibi_set_bool)
  unibi_pod2man(unibi_set_ext_bool_name)
  unibi_pod2man(unibi_set_ext_bool)
  unibi_pod2man(unibi_set_ext_num_name)
  unibi_pod2man(unibi_set_ext_num)
  unibi_pod2man(unibi_set_ext_str_name)
  unibi_pod2man(unibi_set_ext_str)
  unibi_pod2man(unibi_set_name)
  unibi_pod2man(unibi_set_num)
  unibi_pod2man(unibi_set_str)
  unibi_pod2man(unibi_short_name_bool)
  unibi_pod2man(unibi_short_name_num)
  unibi_pod2man(unibi_short_name_str)
  unibi_pod2man(unibi_str_from_var)
  unibi_pod2man(unibi_terminfo_dirs)
  unibi_pod2man(unibi_var_from_num)
  unibi_pod2man(unibi_var_from_str)
endif()
