Add doxygen build to cmake (#226)

* Add doxygen build to cmake

* Move cmake option

* Fix domain label

* Uncrustify

* Fix md ref on doxygen

* Change .md ref to links

* Include mainpage file

* Minor update

* Delete .gitignore

* Apply suggestions from code review

Co-authored-by: Pablo Garrido <pablogs9@gmail.com>
This commit is contained in:
Antonio Cuadros 2021-04-28 13:53:56 +02:00 committed by GitHub
parent 7558decf94
commit 8420d72d52
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
25 changed files with 4232 additions and 10 deletions

View File

@ -29,6 +29,7 @@ option(UCLIENT_VERBOSE_MESSAGE "Build with message verbosity." OFF)
option(UCLIENT_PIC "Control Position Independent Code." ON)
option(UCLIENT_ISOLATED_INSTALL "Install the project and dependencies into separeted folders with version control." OFF)
option(BUILD_SHARED_LIBS "Control shared/static library building." OFF)
option(BUILD_DOCUMENTATION "Use doxygen to create product documentation" OFF)
option(UCLIENT_BUILD_CI_TESTS "Build CI test cases." OFF)
if(UCLIENT_BUILD_CI_TESTS)
@ -256,10 +257,13 @@ set(LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR} CACHE PATH "Installation dir
set(DATA_INSTALL_DIR ${CMAKE_INSTALL_DATADIR} CACHE PATH "Installation directory for data")
if(WIN32)
set(LICENSE_INSTALL_DIR . CACHE PATH "Installation directory for licenses")
set(DOC_DIR "doc")
else()
set(LICENSE_INSTALL_DIR ${DATA_INSTALL_DIR}/${PROJECT_NAME} CACHE PATH "Installation directory for licenses")
set(DOC_DIR "${DATA_INSTALL_DIR}/doc")
endif()
set(DOC_INSTALL_DIR ${DOC_DIR} CACHE PATH "Installation directory for documentation")
###############################################################################
# Targets
###############################################################################
@ -394,6 +398,62 @@ if(UCLIENT_PLATFORM_LINUX AND UCLIENT_MEMORY_TESTS)
add_subdirectory(test/memory/consumption)
endif()
###############################################################################
# Documentation
###############################################################################
if(BUILD_DOCUMENTATION)
find_package(Doxygen)
if(NOT DOXYGEN_FOUND)
message(FATAL_ERROR "doxygen is needed to build the documentation. Please install it correctly")
endif()
if(UNIX)
find_program(DOXYFILE_MAKE make)
if(DOXYFILE_MAKE)
message(STATUS "Found Make: ${DOXYFILE_MAKE}")
else()
message(FATAL_ERROR "make is needed to build the documentation. Please install it correctly")
endif()
elseif(WIN32)
set(DOXYFILE_MAKE make.bat)
endif()
find_program(WGET_EXE wget)
if(WGET_EXE)
message(STATUS "Found WGet: ${WGET_EXE}")
else()
message(FATAL_ERROR "wget is needed to build the documentation. Please install it correctly")
endif()
find_program(UNZIP_EXE unzip)
if(UNZIP_EXE)
message(STATUS "Found Unzip: ${UNZIP_EXE}")
else()
message(FATAL_ERROR "unzip is needed to build the documentation. Please install it correctly")
endif()
# Target to create documentation directories
file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/doc)
add_custom_target(docdirs
COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/doc/api_reference
COMMENT "Creating documentation directory" VERBATIM)
### Doxygen ########################3
# Configure the template doxyfile for or specific project
configure_file(doxyfile.in ${PROJECT_BINARY_DIR}/doxyfile @ONLY IMMEDIATE)
# Add custom target to run doxygen when ever the project is build
add_custom_target(doxygen
COMMAND "${DOXYGEN_EXECUTABLE}" "${PROJECT_BINARY_DIR}/doxyfile"
SOURCES "${PROJECT_BINARY_DIR}/doxyfile"
COMMENT "Generating API documentation with doxygen" VERBATIM)
add_dependencies(doxygen docdirs)
add_custom_target(doc ALL
COMMENT "Generated project documentation" VERBATIM)
add_dependencies(doc doxygen)
endif()
###############################################################################
# Packaging
###############################################################################
@ -489,3 +549,11 @@ if(EXISTS ${CMAKE_BINARY_DIR}/temp_install/)
)
endforeach()
endif()
if(BUILD_DOCUMENTATION)
# Instalation of doxygen files
install(DIRECTORY ${PROJECT_BINARY_DIR}/doc/api_reference
DESTINATION ${DOC_INSTALL_DIR}
COMPONENT documentation
)
endif()

View File

@ -40,4 +40,3 @@ See the [Quality Declaration](QUALITY.md) for more details.
## Getting Help
If you need support you can reach us by mail at `support@eProsima.com` or by phone at `+34 91 804 34 48`.

2316
doxyfile.in Normal file

File diff suppressed because it is too large Load Diff

View File

@ -12,6 +12,10 @@
// See the License for the specific language governing permissions and
// limitations under the License.
/**
* @file
*/
#ifndef UXR_CLIENT_CORE_SESSION_COMMON_CREATE_ENTITIES_H_
#define UXR_CLIENT_CORE_SESSION_COMMON_CREATE_ENTITIES_H_

View File

@ -12,6 +12,10 @@
// See the License for the specific language governing permissions and
// limitations under the License.
/**
* @file
*/
#ifndef UXR_CLIENT_CORE_SESSION_CREATE_ENTITIES_REF_H_
#define UXR_CLIENT_CORE_SESSION_CREATE_ENTITIES_REF_H_

View File

@ -12,6 +12,10 @@
// See the License for the specific language governing permissions and
// limitations under the License.
/**
* @file
*/
#ifndef UXR_CLIENT_CORE_SESSION_CREATE_ENTITIES_XML_H_
#define UXR_CLIENT_CORE_SESSION_CREATE_ENTITIES_XML_H_
@ -42,7 +46,7 @@ UXRDLLAPI uint16_t uxr_buffer_create_participant_xml(
uxrSession* session,
uxrStreamId stream_id,
uxrObjectId object_id,
uint16_t domain,
uint16_t domain_id,
const char* xml,
uint8_t mode);

View File

@ -15,6 +15,10 @@
#ifndef _UXR_CLIENT_CORE_SESSION_OBJECT_ID_H_
#define _UXR_CLIENT_CORE_SESSION_OBJECT_ID_H_
/**
* @file
*/
#ifdef __cplusplus
extern "C"
{
@ -41,12 +45,19 @@ typedef struct uxrObjectId
} uxrObjectId;
/**
* @brief This function creates an identifier to reference an entity.
* @param id Identifier of the object, different for each type. There can be several objects with the same ID, provided they have different types.
* @param type The type of the entity. It can be: UXR_PARTICIPANT_ID, UXR_TOPIC_ID, UXR_PUBLISHER_ID, UXR_SUBSCRIBER_ID, UXR_DATAWRITER_ID, UXR_DATAREADER_ID, UXR_REQUESTER_ID, or UXR_REPLIER_ID.
* @return Generated entity identifier.
*/
UXRDLLAPI uxrObjectId uxr_object_id(
uint16_t id,
uint8_t type);
UXRDLLAPI uxrObjectId uxr_object_id_from_raw(
const uint8_t* raw);
UXRDLLAPI void uxr_object_id_to_raw(
uxrObjectId object_id,
uint8_t* raw);

View File

@ -12,6 +12,10 @@
// See the License for the specific language governing permissions and
// limitations under the License.
/**
* @file
*/
#ifndef UXR_CLIENT_CORE_SESSION_READ_ACCESS_H_
#define UXR_CLIENT_CORE_SESSION_READ_ACCESS_H_

View File

@ -12,6 +12,10 @@
// See the License for the specific language governing permissions and
// limitations under the License.
/**
* @file
*/
#ifndef UXR_CLIENT_CORE_SESSION_SESSION_H_
#define UXR_CLIENT_CORE_SESSION_SESSION_H_
@ -29,6 +33,14 @@ extern "C"
struct uxrSession;
struct uxrCommunication;
/**
* @brief Function signature used for on_status_func callbacks.
* @param session Session structure related to the status.
* @param object_id The identifier of the entity related to the status.
* @param request_id Status request id.
* @param status Status value.
* @param args User pointer data.
*/
typedef void (* uxrOnStatusFunc) (
struct uxrSession* session,
uxrObjectId object_id,
@ -36,6 +48,16 @@ typedef void (* uxrOnStatusFunc) (
uint8_t status,
void* args);
/**
* @brief Function signature used for on_topic_func callbacks.
* @param session Session structure related to the topic.
* @param object_id The identifier of the entity related to the topic.
* @param request_id Request id of the``request_data`` transaction.
* @param stream_id Id of the stream used for the communication.
* @param ub Serialized topic data.
* @param length Length of the serialized data.
* @param args User pointer data.
*/
typedef void (* uxrOnTopicFunc) (
struct uxrSession* session,
uxrObjectId object_id,
@ -45,6 +67,15 @@ typedef void (* uxrOnTopicFunc) (
uint16_t length,
void* args);
/**
* @brief Function signature used for on_time_func callbacks.
* @param session Session structure related to the topic.
* @param current_timestamp Clients timestamp of the response packet reception.
* @param transmit_timestamp Clients timestamp of the request packet transmission.
* @param received_timestamp Agents timestamp of the request packet reception.
* @param originate_timestamp Agents timestamp of the response packet transmission.
* @param args User pointer data.
*/
typedef void (* uxrOnTimeFunc) (
struct uxrSession* session,
int64_t current_timestamp,
@ -53,6 +84,16 @@ typedef void (* uxrOnTimeFunc) (
int64_t originate_timestamp,
void* args);
/**
* @brief Function signature used for on_request_func callbacks.
* @param session Session structure related to the topic.
* @param object_id The identifier of the entity related to the request.
* @param request_id Request id of the``request_data`` transaction.
* @param sample_id Identifier of the request.
* @param ub Serialized request data.
* @param length Length of the serialized data.
* @param args User pointer data.
*/
typedef void (* uxrOnRequestFunc) (
struct uxrSession* session,
uxrObjectId object_id,
@ -62,6 +103,16 @@ typedef void (* uxrOnRequestFunc) (
uint16_t length,
void* args);
/**
* @brief Sets the reply callback, which is called when the Agent sends a READ_DATA submessage associated with a Replier.
* @param session Session structure related to the topic.
* @param object_id The identifier of the entity related to the request.
* @param request_id Request id of the``request_data`` transaction.
* @param reply_id Identifier of the reply.
* @param ub Serialized request data.
* @param length Length of the serialized data.
* @param args User pointer data.
*/
typedef void (* uxrOnReplyFunc) (
struct uxrSession* session,
uxrObjectId object_id,
@ -71,6 +122,10 @@ typedef void (* uxrOnReplyFunc) (
uint16_t length,
void* args);
/**
* @brief Function signature used for flush_callback callbacks.
* @param session Session structure related to the buffer to be flushed.
*/
typedef bool (* uxrOnBuffersFull) (
struct uxrSession* session);
@ -197,7 +252,6 @@ UXRDLLAPI void uxr_set_request_callback(
* @param session A uxrSession structure previosly initialized.
* @param on_reply_func The function that will be called when a valid reply message arrives from the Agent.
* @param args User pointer data. The args will be provided to the `on_reply_func` callback.
* @return UXRDLLAPI uxr_set_reply_callback
*/
UXRDLLAPI void uxr_set_reply_callback(
uxrSession* session,

View File

@ -12,6 +12,10 @@
// See the License for the specific language governing permissions and
// limitations under the License.
/**
* @file
*/
#ifndef UXR_CLIENT_CORE_SESSION_STREAM_STREAM_ID_H_
#define UXR_CLIENT_CORE_SESSION_STREAM_STREAM_ID_H_

View File

@ -12,6 +12,10 @@
// See the License for the specific language governing permissions and
// limitations under the License.
/**
* @file
*/
#ifndef UXR_CLIENT_CORE_SESSION_WRITE_ACCESS_H_
#define UXR_CLIENT_CORE_SESSION_WRITE_ACCESS_H_
@ -88,7 +92,7 @@ uint16_t uxr_buffer_topic(
* As a result of the reception of this submessage, the Agent will write a topic into the DDS Global-Data-Space.
* @param session A uxrSession structure previously initialized.
* @param stream_id The output stream identifier where the WRITE_DATA submessage will be buffered.
* @param datawriter_id The identifier of the XRCE DataWriter that will write the topic into the DDS GDS.
* @param entity_id The identifier of the XRCE DataWriter that will write the topic into the DDS GDS.
* @param ub_topic The ucdrBuffer structure used for serializing the topic.
* @param topic_size The size of the topic in bytes.
* @return A `request_id` that identifies the XRCE request made by the Entity.

View File

@ -12,6 +12,10 @@
// See the License for the specific language governing permissions and
// limitations under the License.
/**
* @file
*/
#ifndef UXR_CLIENT_PROFILE_DISCOVERY_DISCOVERY_H_
#define UXR_CLIENT_PROFILE_DISCOVERY_DISCOVERY_H_
@ -28,6 +32,12 @@ extern "C"
#include <stdbool.h>
#include <stddef.h>
/**
* @brief Function signature used for on_status_func callbacks.
* @param locator Transport locator of a discovered agent
* @param args User pointer data.
* @return true means that the discovery routine has finished. A false implies that the discovery routine must continue searching Agents.
*/
typedef bool (* uxrOnAgentFound) (
const TransportLocator* locator,
void* args);

View File

@ -12,6 +12,10 @@
// See the License for the specific language governing permissions and
// limitations under the License.
/**
* @file
*/
#ifndef UXR_CLIENT_CUSTOM_TRANSPORT_H_
#define UXR_CLIENT_CUSTOM_TRANSPORT_H_
@ -27,18 +31,46 @@ extern "C"
struct uxrCustomTransport;
/**
* @brief Function signature callback for opening a custom transport.
* @param transport Custom transport structure. Has the args passed through bool uxr_init_custom_transport(uxrCustomTransport* transport, void * args);.
* @return true in case of successful opened transport, and false in other case.
*/
typedef bool (* open_custom_func) (
struct uxrCustomTransport* transport);
/**
* @brief Function signature callback for closing a custom transport.
* @param transport Custom transport structure. Has the args passed through bool uxr_init_custom_transport(uxrCustomTransport* transport, void * args);.
* @return true in case of successful closed transport, and false in other case.
*/
typedef bool (* close_custom_func) (
/** */
struct uxrCustomTransport* transport);
/**
* @brief Function signature callback for writing to a custom transport.
* @param transport Custom transport structure. Has the args passed through bool uxr_init_custom_transport(uxrCustomTransport* transport, void * args);.
* @param buffer Buffer to be sent.
* @param length Length of buffer.
* @param error_code Error code that should be set in case the write process experiences some error.
* @return Number of successfully sent bytes.
*/
typedef size_t (* write_custom_func) (
struct uxrCustomTransport* transport,
const uint8_t* buffer,
size_t length,
uint8_t* error_code);
/**
* @brief Function signature callback for reading from a custom transport.
* @param transport Custom transport structure. Has the args passed through bool uxr_init_custom_transport(uxrCustomTransport* transport, void * args);.
* @param buffer Buffer to write.
* @param length Maximum length of buffer.
* @param timeout Maximum timeout of the read operation.
* @param error_code Error code that should be set in case the write process experiences some error.
* @return Number of successfully received bytes.
*/
typedef size_t (* read_custom_func) (
struct uxrCustomTransport* transport,
uint8_t* buffer,
@ -63,6 +95,7 @@ typedef struct uxrCustomTransport
/**
* @brief Set a Custom transport callbacks.
* @param transport The uninitialized transport structure used for managing the transport.
* @param framing Transport framing.
* @param open Open callback.
* @param close Close callback.
* @param write Write callback.
@ -80,7 +113,7 @@ UXRDLLAPI void uxr_set_custom_transport_callbacks(
* @brief Initializes a Custom transport.
* @param transport The transport structure used for managing the transport.
* Callbacks must be set.
* @param open_args Arguments for the open function.
* @param args Arguments for the open function.
* @return `true` in case of successful initialization. `false` in other case.
*/
UXRDLLAPI bool uxr_init_custom_transport(

View File

@ -12,6 +12,10 @@
// See the License for the specific language governing permissions and
// limitations under the License.
/**
* @file
*/
#ifndef UXR_CLIENT_PROFILE_TRANSPORT_IP_IP_H_
#define UXR_CLIENT_PROFILE_TRANSPORT_IP_IP_H_

View File

@ -12,6 +12,10 @@
// See the License for the specific language governing permissions and
// limitations under the License.
/**
* @file
*/
#ifndef UXR_CLIENT_TCP_TRANSPORT_H_
#define UXR_CLIENT_TCP_TRANSPORT_H_
@ -56,7 +60,6 @@ typedef struct uxrTCPTransport
* @brief Initializes a TCP transport.
* @param transport The uninitialized transport structure used for managing the transport.
* This structure must be accesible during the connection.
* @param platform A structure that contains the platform dependencies.
* @param ip_protocol The IP protocol, it could be UXR_IPv4 or UXR_IPv6.
* @param ip The IP address of the Agent.
* @param port The port of the Agent.

View File

@ -12,6 +12,10 @@
// See the License for the specific language governing permissions and
// limitations under the License.
/**
* @file
*/
#ifndef UXR_CLIENT_UDP_TRANSPORT_H_
#define UXR_CLIENT_UDP_TRANSPORT_H_
@ -37,7 +41,6 @@ typedef struct uxrUDPTransport
* @brief Initializes a UDP transport.
* @param transport The uninitialized transport structure used for managing the transport.
* This structure must be accesible during the connection.
* @param platform A structure that contains the platform dependencies.
* @param ip_protocol The IP protocol, it could be UXR_IPv4 or UXR_IPv6.
* @param ip The IP address of the Agent.
* @param port The port of the Agent.

View File

@ -12,6 +12,10 @@
// See the License for the specific language governing permissions and
// limitations under the License.
/**
* @file
*/
#ifndef UXR_CLIENT_SERIAL_TRANSPORT_H_
#define UXR_CLIENT_SERIAL_TRANSPORT_H_
@ -41,7 +45,6 @@ typedef struct uxrSerialTransport
* @brief Initializes a UDP transport.
* @param transport The uninitialized transport structure used for managing the transport.
* This structure must be accesible during the connection.
* @param platform A structure that contains the platform dependencies.
* @param fd The file descriptor of the serial connection.
* The fd usually comes from the `open` OS function.
* @param remote_addr The addresss of the Agent in the serial connection.

View File

@ -12,6 +12,10 @@
// See the License for the specific language governing permissions and
// limitations under the License.
/**
* @file
*/
#ifndef UXR_CLIENT_UTIL_PING_H_
#define UXR_CLIENT_UTIL_PING_H_

View File

@ -20,7 +20,7 @@ uint16_t uxr_buffer_create_participant_xml(
uxrSession* session,
uxrStreamId stream_id,
uxrObjectId object_id,
uint16_t domain,
uint16_t domain_id,
const char* xml,
uint8_t mode)
{
@ -28,7 +28,7 @@ uint16_t uxr_buffer_create_participant_xml(
CREATE_Payload payload;
payload.object_representation.kind = DDS_XRCE_OBJK_PARTICIPANT;
payload.object_representation._.participant.domain_id = (int16_t)domain;
payload.object_representation._.participant.domain_id = (int16_t)domain_id;
return create_entity_xml(session, stream_id, object_id, xml, mode, &payload);
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,22 @@
<!-- HTML footer for doxygen 1.8.13-->
<!-- start footer part -->
<!--BEGIN GENERATE_TREEVIEW-->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
$navpath
<li class="footer">Generated on $datetime for
<a href="http://www.eprosima.com">
<img class="footer" src="$relpath$$projectlogo" height="31" alt="eProsima"/></a>
</li>
</ul>
</div>
<!--END GENERATE_TREEVIEW-->
<!--BEGIN !GENERATE_TREEVIEW-->
<hr class="footer"/><address class="footer"><small>
Generated on $datetime for
<a href="http://www.eprosima.com">
<img class="footer" src="$relpath$$projectlogo" height="31" alt="eProsima"/></a>
</small></address>
<!--END !GENERATE_TREEVIEW-->
</body>
</html>

View File

@ -0,0 +1,54 @@
<!-- HTML header for doxygen 1.8.13-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
<link href="$relpath^tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="$relpath^jquery.js"></script>
<script type="text/javascript" src="$relpath^dynsections.js"></script>
$treeview
$search
$mathjax
<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
$extrastylesheet
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<!--BEGIN TITLEAREA-->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<!--BEGIN PROJECT_LOGO-->
<td id="projectlogo"><a href="http://www.eprosima.com"><img alt="Logo" src="$relpath^$projectlogo"/></a></td>
<!--END PROJECT_LOGO-->
<!--BEGIN PROJECT_NAME-->
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">$projectname
<!--BEGIN PROJECT_NUMBER-->&#160;<span id="projectnumber">$projectnumber</span><!--END PROJECT_NUMBER-->
</div>
<!--BEGIN PROJECT_BRIEF--><div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF-->
</td>
<!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME-->
<!--BEGIN PROJECT_BRIEF-->
<td style="padding-left: 0.5em;">
<div id="projectbrief">$projectbrief</div>
</td>
<!--END PROJECT_BRIEF-->
<!--END !PROJECT_NAME-->
<!--BEGIN DISABLE_INDEX-->
<!--BEGIN SEARCHENGINE-->
<td>$searchbox</td>
<!--END SEARCHENGINE-->
<!--END DISABLE_INDEX-->
</tr>
</tbody>
</table>
</div>
<!--END TITLEAREA-->
<!-- end header part -->

View File

@ -0,0 +1,14 @@
/*!
* @mainpage Micro XRCE-DDS Client.
* <div id="mainpage" style="width:95%;text-align:justify;text-justify:inter-word">
* *eProsima Micro XRCE-DDS* is a library implementing the [DDS-XRCE protocol](https://www.omg.org/spec/DDS-XRCE/About-DDS-XRCE/)
* as defined and maintained by the OMG, whose aim is to allow resource constrained devices such as microcontrollers to communicate
* with the [DDS](https://www.omg.org/spec/DDS/About-DDS/>) world as any other DDS actor would do.
* It follows a client/server paradigm and is composed by two libraries, the *Micro XRCE-DDS Client* and the *Micro XRCE-DDS Agent*.
* The *Micro XRCE-DDS Clients* are lightweight entities meant to be compiled on eXtremely Resource Constrained Environments,
* while the *Micro XRCE-DDS Agent* is a broker which bridges the *Clients* with the DDS world.
</div>
*
*/

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB