157 строки
5.1 KiB
CMake
157 строки
5.1 KiB
CMake
cmake_minimum_required (VERSION 2.8.12)
|
|
|
|
set (CMAKE_MODULE_PATH
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../cmake)
|
|
|
|
include (CMakeParseArguments)
|
|
include (HaskellUtil)
|
|
include (Folders)
|
|
|
|
# build the compiler when doc directory is build by itself
|
|
if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
|
|
add_subdirectory (../compiler ${CMAKE_CURRENT_BINARY_DIR}/compiler)
|
|
endif()
|
|
|
|
#
|
|
# add_pandoc_markdown (file.md [file2.md ...]
|
|
# [CODE code]
|
|
# [OUTPUT_DIR dir]
|
|
# [OUTPUT_NAME name]
|
|
# [TEMPLATE template]
|
|
# [OPTIONS opt [opt2 ...]])
|
|
#
|
|
function (add_pandoc_markdown)
|
|
set (flagArgs)
|
|
set (oneValueArgs OUTPUT_NAME OUTPUT_DIR CODE TEMPLATE)
|
|
set (multiValueArgs OPTIONS)
|
|
cmake_parse_arguments (arg "${flagArgs}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
|
set (options
|
|
--standalone
|
|
--smart
|
|
--data-dir=.pandoc
|
|
--highlight-style tango
|
|
${arg_OPTIONS})
|
|
if (arg_TEMPLATE)
|
|
list(APPEND options --template="${arg_TEMPLATE}")
|
|
else()
|
|
endif()
|
|
if (arg_CODE)
|
|
list(APPEND options --indented-code-classes="${arg_CODE}")
|
|
else()
|
|
endif()
|
|
set (inputs "${arg_UNPARSED_ARGUMENTS}")
|
|
foreach (file ${inputs})
|
|
get_filename_component (name ${file} NAME_WE)
|
|
if (arg_OUTPUT_NAME)
|
|
set (outputName ${arg_OUTPUT_NAME})
|
|
else()
|
|
set (outputName ${name})
|
|
endif()
|
|
set (output "${CMAKE_CURRENT_BINARY_DIR}/html/${arg_OUTPUT_DIR}/${outputName}.html")
|
|
list (APPEND sources ${file})
|
|
list (APPEND outputs ${output})
|
|
add_custom_command(
|
|
OUTPUT ${output}
|
|
COMMAND ${Haskell_PANDOC_EXECUTABLE} ${options} --output="${output}" "${file}"
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
DEPENDS ${file} ${PANDOC_EXECUTABLE})
|
|
endforeach()
|
|
add_custom_target (${name}
|
|
DEPENDS ${outputs}
|
|
SOURCES ${sources})
|
|
add_target_to_folder (${name})
|
|
add_dependencies (documentation ${name})
|
|
endfunction()
|
|
|
|
find_haskell_program (pandoc)
|
|
find_program (Doxygen_EXECUTABLE doxygen)
|
|
|
|
if (Haskell_PANDOC_EXECUTABLE AND Doxygen_EXECUTABLE)
|
|
add_custom_command(
|
|
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/html/manual/gbc.html"
|
|
COMMAND ${CMAKE_COMMAND} -E copy .pandoc/templates/cmdargs.html "${CMAKE_CURRENT_BINARY_DIR}/html/manual/gbc.html"
|
|
COMMAND ${GBC_EXECUTABLE} --help=all,html >> "${CMAKE_CURRENT_BINARY_DIR}/html/manual/gbc.html"
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
DEPENDS .pandoc/templates/cmdargs.html gbc ${GBC_EXECUTABLE})
|
|
|
|
add_custom_target (documentation
|
|
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/html/manual/gbc.html")
|
|
|
|
add_target_to_folder (documentation)
|
|
|
|
add_pandoc_markdown (src/bond_py.md src/bond_cpp.md
|
|
CODE "cpp,numberLines"
|
|
OPTIONS --self-contained --table-of-contents
|
|
OUTPUT_DIR manual)
|
|
|
|
add_pandoc_markdown (src/compiler.md
|
|
CODE cpp
|
|
OPTIONS --self-contained --table-of-contents
|
|
OUTPUT_DIR manual)
|
|
|
|
add_pandoc_markdown(src/bond_comm.md src/bond_comm_roadmap.md
|
|
OPTIONS --self-contained --table-of-contents
|
|
OUTPUT_DIR manual)
|
|
|
|
add_pandoc_markdown(src/bond_comm_epoxy.md src/bond_comm_epoxy_wire.md
|
|
OPTIONS --self-contained --table-of-contents
|
|
OUTPUT_DIR manual)
|
|
|
|
add_pandoc_markdown(src/bond_comm_simpleinmem.md
|
|
OPTIONS --self-contained --table-of-contents
|
|
OUTPUT_DIR manual)
|
|
|
|
add_pandoc_markdown(src/bond_over_grpc.md
|
|
OPTIONS --self-contained --table-of-contents
|
|
OUTPUT_DIR manual)
|
|
|
|
add_pandoc_markdown (src/bond_cs.md
|
|
CODE "cs,numberLines"
|
|
OPTIONS --table-of-contents
|
|
OUTPUT_DIR manual)
|
|
|
|
add_pandoc_markdown (src/reference_index.md
|
|
CODE cpp
|
|
OPTIONS --self-contained "--title-prefix=Bond Reference Index"
|
|
OUTPUT_NAME index
|
|
OUTPUT_DIR reference)
|
|
|
|
add_pandoc_markdown (../README.md
|
|
OUTPUT_NAME index
|
|
OPTIONS --table-of-contents "--title-prefix=Bond, Microsoft's cross-platform framework for working with schematized data")
|
|
|
|
add_pandoc_markdown (src/why_bond.md
|
|
CODE python
|
|
OPTIONS --self-contained --table-of-contents)
|
|
|
|
file(GLOB_RECURSE cpp_headers ../cpp/inc/bond/*.h)
|
|
|
|
set (doxygen_sources
|
|
doxygen/bond.doxygen
|
|
doxygen/bond_layout.xml
|
|
doxygen/bond_reference.css
|
|
doxygen/mainpage.md
|
|
doxygen/examples/wait_callback_example.cpp
|
|
${cpp_headers})
|
|
|
|
set (doxygen_output_dir
|
|
"${CMAKE_CURRENT_BINARY_DIR}/html/reference")
|
|
|
|
add_custom_command(
|
|
OUTPUT "${doxygen_output_dir}/cpp/index.html"
|
|
COMMAND ${CMAKE_COMMAND}
|
|
-DDoxygen_EXECUTABLE=${Doxygen_EXECUTABLE}
|
|
-DDoxygen_OUTPUT_DIR=${doxygen_output_dir}
|
|
-P doxygen/doxygen.cmake
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
DEPENDS ${doxygen_sources})
|
|
|
|
add_custom_target (cpp_reference
|
|
DEPENDS "${doxygen_output_dir}/cpp/index.html"
|
|
SOURCES ${doxygen_sources})
|
|
|
|
add_target_to_folder (cpp_reference)
|
|
|
|
add_dependencies (documentation cpp_reference)
|
|
endif()
|