libktx-rs-sys 0.3.3+v4.0.0

A low-level wrapper over https://github.com/KhronosGroup/KTX-Software.
Documentation
# Copyright 2015-2020 The Khronos Group Inc.
# SPDX-License-Identifier: Apache-2.0

find_package(Doxygen REQUIRED)

# Global
set( DOXYGEN_PROJECT_LOGO icons/ktx_logo_200.png )
set( DOXYGEN_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/docs)
set( DOXYGEN_OPTIMIZE_OUTPUT_FOR_C YES )
set( DOXYGEN_EXTRACT_LOCAL_CLASSES NO )
set( DOXYGEN_HIDE_UNDOC_MEMBERS YES )
set( DOXYGEN_CASE_SENSE_NAMES YES )
set( DOXYGEN_SHOW_USED_FILES NO )
set( DOXYGEN_VERBATIM_HEADERS NO )
set( DOXYGEN_CLANG_ASSISTED_PARSING NO )
set( DOXYGEN_ALPHABETICAL_INDEX NO )
set( DOXYGEN_HTML_TIMESTAMP YES )
set( DOXYGEN_DISABLE_INDEX YES )
set( DOXYGEN_GENERATE_TREEVIEW YES )
set( DOXYGEN_GENERATE_LATEX NO )
# set( DOXYGEN_PAPER_TYPE a4wide ) # note: invalid value!
set( DOXYGEN_GENERATE_MAN YES )


function( add_docs_cmake target )
    # Make `docs.cmake` show up in IDE/project
    get_target_property( DOC_SOURCES ${target} SOURCES )
    set_target_properties(
        ${target}
    PROPERTIES
        SOURCES "${DOC_SOURCES};cmake/docs.cmake"
    )
endfunction()

# ktx.doc
function( CreateDocLibKTX )
    set( DOXYGEN_PROJECT_NAME "libktx - The KTX Library" )
    set( DOXYGEN_ALIASES error=\"\\par Errors\\n\" )
    set( DOXYGEN_TYPEDEF_HIDES_STRUCT YES )
    set( DOXYGEN_EXCLUDE lib/uthash.h )
    set( DOXYGEN_EXCLUDE_PATTERNS ktxint.h )
    set( DOXYGEN_EXAMPLE_PATH examples lib )
    set( DOXYGEN_HTML_OUTPUT html/libktx )
    set( DOXYGEN_MAN_LINKS YES )
    set( DOXYGEN_MACRO_EXPANSION YES )
    set( DOXYGEN_EXPAND_ONLY_PREDEF YES )

    set( DOXYGEN_PREDEFINED
    "KTXTEXTURECLASSDEFN=class_id classId\; \\
        struct ktxTexture_vtbl* vtbl\;             \\
        struct ktxTexture_vvtbl* vvtbl\;           \\
        struct ktxTexture_protected* _protected\;  \\
        ktx_bool_t   isArray\;                     \\
        ktx_bool_t   isCubemap\;                   \\
        ktx_bool_t   isCompressed\;                \\
        ktx_bool_t   generateMipmaps\;             \\
        ktx_uint32_t baseWidth\;                   \\
        ktx_uint32_t baseHeight\;                  \\
        ktx_uint32_t baseDepth\;                   \\
        ktx_uint32_t numDimensions\;               \\
        ktx_uint32_t numLevels\;                   \\
        ktx_uint32_t numLayers\;                   \\
        ktx_uint32_t numFaces\;                    \\
        struct {                                  \\
            ktxOrientationX x\;                    \\
            ktxOrientationY y\;                    \\
            ktxOrientationZ z\;                    \\
        } orientation\;                            \\
        ktxHashList  kvDataHead\;                  \\
        ktx_uint32_t kvDataLen\;                   \\
        ktx_uint8_t* kvData\;                      \\
        ktx_size_t dataSize\;                      \\
        ktx_uint8_t* pData\;"
    )
    set( DOXYGEN_GENERATE_TAGFILE ${CMAKE_BINARY_DIR}/docs/libktx.tag )

    file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/docs )
    file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/docs/html )

    doxygen_add_docs(
        libktx.doc
        lib/mainpage.md
        LICENSE.md
        include
        lib/basis_encode.cpp
        lib/basis_transcode.cpp
        lib/strings.c
        lib/glloader.c
        lib/hashlist.c
        lib/texture.c
        lib/texture1.c
        lib/texture2.c
        lib/vkloader.c
        lib/writer1.c
        lib/writer2.c
    )
    add_docs_cmake(libktx.doc)
endfunction()

# ktxtools.doc
function( CreateDocKTXTools )
    set( DOXYGEN_PROJECT_NAME "Khronos Texture Tools" )
    set( DOXYGEN_FULL_PATH_NAMES NO )
    set( DOXYGEN_ALIASES author=\"\\section AUTHOR\\n\" )
    set( DOXYGEN_SHOW_FILES NO )
    set( DOXYGEN_FILE_PATTERNS *.cpp )
    set( DOXYGEN_RECURSIVE YES )
    set( DOXYGEN_EXAMPLE_PATH utils )
    set( DOXYGEN_HTML_OUTPUT html/ktxtools )
    set( DOXYGEN_MAN_EXTENSION .1 )
    set( DOXYGEN_GENERATE_TAGFILE ${CMAKE_BINARY_DIR}/docs/ktxtools.tag )

    doxygen_add_docs(
        ktxtools.doc
        tools/ktxinfo/ktxinfo.cpp
        tools/ktx2check/ktx2check.cpp
        tools/ktx2ktx2/ktx2ktx2.cpp
        tools/ktxsc/ktxsc.cpp
        tools/toktx/toktx.cc
    )
    add_docs_cmake(ktxtools.doc)
endfunction()


# ktxpkg.doc
function( CreateDocKTX )
    set( DOXYGEN_PROJECT_NAME "Khronos Texture Software" )
    set( DOXYGEN_ALIASES pversion=\"\\par Package Version\\n\" )
    set( DOXYGEN_LAYOUT_FILE pkgdoc/packageDoxyLayout.xml )
    set( DOXYGEN_EXCLUDE lib/uthash.h )
    set( DOXYGEN_EXCLUDE_PATTERNS ktxint.h )
    set( DOXYGEN_EXAMPLE_PATH lib )
    set( DOXYGEN_HTML_HEADER pkgdoc/header.html )
    set( DOXYGEN_MAN_OUTPUT man/ktx )
    set( DOXYGEN_MAN_LINKS YES )
    set( DOXYGEN_TAGFILES ${CMAKE_BINARY_DIR}/docs/libktx.tag=libktx ${CMAKE_BINARY_DIR}/docs/ktxtools.tag=ktxtools )

    doxygen_add_docs(
        ktxpkg.doc
        pkgdoc/pages.md
        TODO.md
        interface/js_binding
        ALL
    )
    add_docs_cmake(ktxpkg.doc)
endfunction()

CreateDocLibKTX()
CreateDocKTXTools()
CreateDocKTX()

add_dependencies( libktx.doc ktx_version )
add_dependencies( ktxtools.doc libktx.doc )
add_dependencies( ktxpkg.doc ktxtools.doc )


install(
    DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/docs/html
    DESTINATION "${CMAKE_INSTALL_DOCDIR}"
    COMPONENT dev
)

install( DIRECTORY
    ${CMAKE_CURRENT_BINARY_DIR}/docs/man/man1
    ## Omit those, since at the moment they contain a lot of undesired files generated by Doxygen
    # ${CMAKE_CURRENT_BINARY_DIR}/docs/man/man3
    # ${CMAKE_CURRENT_BINARY_DIR}/docs/man/ktx/man3
DESTINATION
    "${CMAKE_INSTALL_MANDIR}"
COMPONENT tools
)