From 30004700fbfe84a51a651174105c5ae4391db159 Mon Sep 17 00:00:00 2001 From: Kitsune Ral Date: Sun, 23 Jun 2019 19:47:12 +0900 Subject: Use clang-format to autoformat generated API files --- CMakeLists.txt | 61 ++++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 44 insertions(+), 17 deletions(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index d2d8c218..faaa6a34 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.1) +cmake_minimum_required(VERSION 3.5) project(qmatrixclient CXX) @@ -48,11 +48,17 @@ find_package(Qt5 5.4.1 REQUIRED Network Gui Multimedia) get_filename_component(Qt5_Prefix "${Qt5_DIR}/../../../.." ABSOLUTE) if (GTAD_PATH) - get_filename_component(ABS_GTAD_PATH "${GTAD_PATH}" ABSOLUTE) + get_filename_component(ABS_GTAD_PATH "${GTAD_PATH}" PROGRAM) endif () if (MATRIX_DOC_PATH) - get_filename_component(ABS_API_DEF_PATH "${MATRIX_DOC_PATH}/api" ABSOLUTE) + get_filename_component(ABS_API_DEF_PATH "${MATRIX_DOC_PATH}/api" REALPATH) endif () +if (ABS_GTAD_PATH AND ABS_API_DEF_PATH) + if (NOT CLANG_FORMAT) + set(CLANG_FORMAT clang-format) + endif() + get_filename_component(ABS_CLANG_FORMAT "${CLANG_FORMAT}" PROGRAM) +endif() message( STATUS ) message( STATUS "=============================================================================" ) @@ -63,10 +69,15 @@ if (CMAKE_BUILD_TYPE) endif(CMAKE_BUILD_TYPE) message( STATUS "Using compiler: ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}" ) message( STATUS "Using Qt ${Qt5_VERSION} at ${Qt5_Prefix}" ) -if (MATRIX_DOC_PATH AND GTAD_PATH) - message( STATUS "Generating API stubs enabled" ) +if (ABS_API_DEF_PATH AND ABS_GTAD_PATH) + message( STATUS "Generating API stubs enabled (use --target update-api)" ) message( STATUS " Using GTAD at ${ABS_GTAD_PATH}" ) message( STATUS " Using API files at ${ABS_API_DEF_PATH}" ) + if (ABS_CLANG_FORMAT) + message( STATUS "clang-format is at ${ABS_CLANG_FORMAT}") + else () + message( STATUS "${CLANG_FORMAT} is NOT FOUND; --target update-format-api disabled") + endif () endif () message( STATUS "=============================================================================" ) message( STATUS ) @@ -109,11 +120,23 @@ set(libqmatrixclient_SRCS ) set(CSAPI_DIR csapi) -set(FULL_CSAPI_DIR lib/${CSAPI_DIR}) -set(FULL_CSAPI_SRC_DIR ${ABS_API_DEF_PATH}/client-server) set(ASAPI_DEF_DIR application-service/definitions) set(ISAPI_DEF_DIR identity/definitions) + +foreach (D ${CSAPI_DIR} ${ASAPI_DEF_DIR} ${ISAPI_DEF_DIR}) + aux_source_directory(lib/${D} api_SRCS) +endforeach() + +# Make no mistake: CMake cannot run gtad first and then populate the list of +# resulting api_SRCS files. In other words, placing the above foreach after +# the custom targets definition won't bring the desired result: +# CMake will execute it at cmake invocation and gtad will only run later +# when building the update-api target. If you see that gtad has created +# new files you have to re-run cmake. +# TODO: check `file(GLOB_RECURSE ... CONFIGURE_DEPENDS)` (from CMake 3.14) if (MATRIX_DOC_PATH AND GTAD_PATH) + set(FULL_CSAPI_DIR lib/${CSAPI_DIR}) + set(FULL_CSAPI_SRC_DIR ${ABS_API_DEF_PATH}/client-server) file(GLOB_RECURSE API_DEFS RELATIVE ${PROJECT_SOURCE_DIR} ${FULL_CSAPI_SRC_DIR}/*.yaml ${ABS_API_DEF_PATH}/${ASAPI_DEF_DIR}/*.yaml @@ -131,20 +154,24 @@ if (MATRIX_DOC_PATH AND GTAD_PATH) ${API_DEFS} VERBATIM ) + if (CLANG_FORMAT) + set(api_HDRS ${api_SRCS}) + list(TRANSFORM api_HDRS REPLACE ".cpp$" ".h") + set(CLANG_FORMAT_ARGS -i -sort-includes -verbose) + add_custom_target(update-format-api + COMMAND ${ABS_CLANG_FORMAT} ${CLANG_FORMAT_ARGS} ${api_SRCS} + COMMAND ${ABS_CLANG_FORMAT} ${CLANG_FORMAT_ARGS} ${api_HDRS} + DEPENDS update-api + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + VERBATIM + SOURCES .clang-format + ) + endif() endif() -aux_source_directory(${FULL_CSAPI_DIR} libqmatrixclient_job_SRCS) -aux_source_directory(${FULL_CSAPI_DIR}/definitions libqmatrixclient_csdef_SRCS) -aux_source_directory(${FULL_CSAPI_DIR}/definitions/wellknown libqmatrixclient_cswellknown_SRCS) -aux_source_directory(lib/${ASAPI_DEF_DIR} libqmatrixclient_asdef_SRCS) -aux_source_directory(lib/${ISAPI_DEF_DIR} libqmatrixclient_isdef_SRCS) - set(example_SRCS examples/qmc-example.cpp) -add_library(QMatrixClient ${libqmatrixclient_SRCS} - ${libqmatrixclient_job_SRCS} ${libqmatrixclient_csdef_SRCS} - ${libqmatrixclient_cswellknown_SRCS} - ${libqmatrixclient_asdef_SRCS} ${libqmatrixclient_isdef_SRCS}) +add_library(QMatrixClient ${libqmatrixclient_SRCS} ${api_SRCS}) set(API_VERSION "0.5") set_property(TARGET QMatrixClient PROPERTY VERSION "${API_VERSION}.0") set_property(TARGET QMatrixClient PROPERTY SOVERSION ${API_VERSION} ) -- cgit v1.2.3 From 8d96901ff455e4072dd4b050cf9c17a5780bfacb Mon Sep 17 00:00:00 2001 From: Kitsune Ral Date: Mon, 24 Jun 2019 07:37:35 +0900 Subject: CMakeLists.txt: Re-add parts of CSAPI that accidentally went missing --- CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index da9bb66d..91236ec6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -125,7 +125,8 @@ set(CSAPI_DIR csapi) set(ASAPI_DEF_DIR application-service/definitions) set(ISAPI_DEF_DIR identity/definitions) -foreach (D ${CSAPI_DIR} ${ASAPI_DEF_DIR} ${ISAPI_DEF_DIR}) +foreach (D ${CSAPI_DIR} ${CSAPI_DIR}/definitions + ${CSAPI_DIR}/definitions/wellknown ${ASAPI_DEF_DIR} ${ISAPI_DEF_DIR}) aux_source_directory(lib/${D} api_SRCS) endforeach() -- cgit v1.2.3 From 08c424d4e853b4dc67d966ca0336892e580f9d20 Mon Sep 17 00:00:00 2001 From: Kitsune Ral Date: Tue, 25 Jun 2019 07:45:41 +0900 Subject: CMakeLists: use REALPATH instead of PROGRAM to find gtad PROGRAM doesn't seem to work right with relative paths. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index 91236ec6..54082671 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,7 +49,7 @@ find_package(Qt5 5.4.1 REQUIRED Network Gui Multimedia) get_filename_component(Qt5_Prefix "${Qt5_DIR}/../../../.." ABSOLUTE) if (GTAD_PATH) - get_filename_component(ABS_GTAD_PATH "${GTAD_PATH}" PROGRAM) + get_filename_component(ABS_GTAD_PATH "${GTAD_PATH}" REALPATH) endif () if (MATRIX_DOC_PATH) get_filename_component(ABS_API_DEF_PATH "${MATRIX_DOC_PATH}/api" REALPATH) -- cgit v1.2.3 From 553acc9d234140fd94e768679756077271902e6f Mon Sep 17 00:00:00 2001 From: Kitsune Ral Date: Tue, 25 Jun 2019 08:03:08 +0900 Subject: CMakeLists: replace list(TRANSFORM) with foreach/list(APPEND) list(TRANSFORM) is only available from CMake 3.12. --- CMakeLists.txt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index 54082671..874594e8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -158,8 +158,11 @@ if (MATRIX_DOC_PATH AND GTAD_PATH) VERBATIM ) if (CLANG_FORMAT) - set(api_HDRS ${api_SRCS}) - list(TRANSFORM api_HDRS REPLACE ".cpp$" ".h") + # TODO: list(TRANSFORM) is available from CMake 3.12 + foreach (S ${api_SRCS}) + string (REGEX REPLACE ".cpp$" ".h" H ${S}) + list(APPEND api_HDRS ${H}) + endforeach() set(CLANG_FORMAT_ARGS -i -sort-includes -verbose) add_custom_target(update-format-api COMMAND ${ABS_CLANG_FORMAT} ${CLANG_FORMAT_ARGS} ${api_SRCS} -- cgit v1.2.3 From 8ddf663ac60332cfa83f829b8d40596f9fe1c926 Mon Sep 17 00:00:00 2001 From: Kitsune Ral Date: Sun, 30 Jun 2019 14:13:14 +0900 Subject: CMakeLists.txt: add clang-format invocation to update-api target ...instead of using a separate update-format-api target. --- CMakeLists.txt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index 874594e8..eafa95f1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -164,13 +164,11 @@ if (MATRIX_DOC_PATH AND GTAD_PATH) list(APPEND api_HDRS ${H}) endforeach() set(CLANG_FORMAT_ARGS -i -sort-includes -verbose) - add_custom_target(update-format-api + add_custom_command(TARGET update-api POST_BUILD COMMAND ${ABS_CLANG_FORMAT} ${CLANG_FORMAT_ARGS} ${api_SRCS} COMMAND ${ABS_CLANG_FORMAT} ${CLANG_FORMAT_ARGS} ${api_HDRS} - DEPENDS update-api WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} VERBATIM - SOURCES .clang-format ) endif() endif() -- cgit v1.2.3 From 6c4e78e8a55eab681393faff888448c887bb7127 Mon Sep 17 00:00:00 2001 From: Kitsune Ral Date: Tue, 9 Jul 2019 12:32:48 +0900 Subject: CMakeLists.txt: fix things around clang-format, inherit CLANG_FORMAT_ARGS --- .clang-format | 4 ++-- .travis.yml | 1 + CMakeLists.txt | 7 ++++--- CONTRIBUTING.md | 6 +++--- 4 files changed, 10 insertions(+), 8 deletions(-) (limited to 'CMakeLists.txt') diff --git a/.clang-format b/.clang-format index 9bb23403..a0b2ba11 100644 --- a/.clang-format +++ b/.clang-format @@ -32,7 +32,7 @@ AlignOperands: true #AllowShortLoopsOnASingleLine: false #AlwaysBreakAfterReturnType: None #AlwaysBreakBeforeMultilineStrings: false -AlwaysBreakTemplateDeclarations: Yes +#AlwaysBreakTemplateDeclarations: true #BinPackArguments: true #BinPackParameters: true BraceWrapping: @@ -53,7 +53,7 @@ BraceWrapping: BreakBeforeBinaryOperators: NonAssignment BreakBeforeBraces: Custom #BreakBeforeInheritanceComma: false -BreakInheritanceList: BeforeColon +#BreakInheritanceList: BeforeColon # Only supported since clang-format 7 #BreakBeforeTernaryOperators: true #BreakConstructorInitializersBeforeComma: false #BreakConstructorInitializers: BeforeComma diff --git a/.travis.yml b/.travis.yml index 6880844b..cb932120 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,6 +21,7 @@ addons: - qt57base - qt57multimedia - valgrind + - clang-format-6.0 matrix: include: diff --git a/CMakeLists.txt b/CMakeLists.txt index 13f6fcfb..a40d4385 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -97,7 +97,7 @@ if (ABS_API_DEF_PATH AND ABS_GTAD_PATH) if (ABS_CLANG_FORMAT) message( STATUS "clang-format is at ${ABS_CLANG_FORMAT}") else () - message( STATUS "${CLANG_FORMAT} is NOT FOUND; --target update-format-api disabled") + message( STATUS "${CLANG_FORMAT} is NOT FOUND; API files won't be reformatted") endif () endif () find_package(Git) @@ -192,18 +192,19 @@ if (MATRIX_DOC_PATH AND GTAD_PATH) ${API_DEFS} VERBATIM ) - if (CLANG_FORMAT) + if (ABS_CLANG_FORMAT) # TODO: list(TRANSFORM) is available from CMake 3.12 foreach (S ${api_SRCS}) string (REGEX REPLACE ".cpp$" ".h" H ${S}) list(APPEND api_HDRS ${H}) endforeach() - set(CLANG_FORMAT_ARGS -i -sort-includes -verbose) + set(CLANG_FORMAT_ARGS -i -sort-includes ${CLANG_FORMAT_ARGS}) add_custom_command(TARGET update-api POST_BUILD COMMAND ${ABS_CLANG_FORMAT} ${CLANG_FORMAT_ARGS} ${api_SRCS} COMMAND ${ABS_CLANG_FORMAT} ${CLANG_FORMAT_ARGS} ${api_HDRS} WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} VERBATIM + COMMENT Formatting files ) endif() endif() diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d7fa19bd..fb8ff436 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -170,9 +170,9 @@ Because before both original authors of libQuotient had to do monkey business of (quotient-im/matrix-doc is a fork that's known to produce working code; you may want to use your own fork if you wish to alter something in the API). 4. If you plan to submit a PR or just would like the generated code to be - formatted, you should either ensure you have clang-format in your PATH or - pass the _absolute_ path to it by adding `-DCLANG_FORMAT=` - to the CMake invocation below. + formatted, you should either ensure you have clang-format (version 6 at least) + in your PATH or pass the _absolute_ path to it by adding + `-DCLANG_FORMAT=` to the CMake invocation below. #### Generating CS API contents 1. Pass additional configuration to CMake when configuring libQuotient: -- cgit v1.2.3