From c92a622226e8c5583fe856ef8520cee831a54aff Mon Sep 17 00:00:00 2001 From: Andrew Wason Date: Fri, 22 Mar 2024 11:17:00 -0400 Subject: [PATCH] Modernize cmake. Add git version to build. --- builders/Linux/iwyu.sh | 15 +++++++++------ builders/Linux/lint.sh | 16 ++++++++++------ builders/mediafx-build.sh | 3 +-- builders/mediafx-test.sh | 3 +-- builders/versions | 1 + src/MediaFX/CMakeLists.txt | 16 ++++++++++++++++ src/MediaFX/main.cpp | 3 ++- src/MediaFX/version.h.in | 6 ++++++ 8 files changed, 46 insertions(+), 17 deletions(-) create mode 100644 src/MediaFX/version.h.in diff --git a/builders/Linux/iwyu.sh b/builders/Linux/iwyu.sh index d17dc02..4b0d273 100755 --- a/builders/Linux/iwyu.sh +++ b/builders/Linux/iwyu.sh @@ -4,11 +4,14 @@ set -e +CURRENT=${BASH_SOURCE%/*} +source "$CURRENT/../versions" + BUILD_TYPE=${BUILD_TYPE:-Debug} -mkdir -p /mediafx/build/Linux/${BUILD_TYPE} -cd /mediafx/build/Linux/${BUILD_TYPE} -if [ ! -f "qt${QT_VER}.imp" ]; then - curl -O https://raw.githubusercontent.com/include-what-you-use/include-what-you-use/clang_13/mapgen/iwyu-mapgen-qt.py - python3 iwyu-mapgen-qt.py ${QTDIR}/include > qt${QT_VER}.imp +MEDIAFX_BUILD=${BUILD_ROOT}/${BUILD_TYPE} +mkdir -p "${MEDIAFX_BUILD}" +if [ ! -f "${MEDIAFX_BUILD}/qt${QT_VER}.imp" ]; then + curl -o "${MEDIAFX_BUILD}/iwyu-mapgen-qt.py" https://raw.githubusercontent.com/include-what-you-use/include-what-you-use/clang_13/mapgen/iwyu-mapgen-qt.py + python3 "${MEDIAFX_BUILD}/iwyu-mapgen-qt.py" ${QTDIR}/include > "${MEDIAFX_BUILD}/qt${QT_VER}.imp" fi -CC="clang" CXX="clang++" cmake -DCMAKE_CXX_INCLUDE_WHAT_YOU_USE="/usr/bin/iwyu;-Xiwyu;--mapping_file=/mediafx/build/Linux/${BUILD_TYPE}/qt${QT_VER}.imp;-Xiwyu;--mapping_file=/mediafx/builders/Linux/iwyu.imp;-Xiwyu;--cxx17ns;-Xiwyu;--no_comments" --install-prefix ${QTDIR} ../../.. && exec cmake --build . --parallel 4 +CC="clang" CXX="clang++" cmake -S "${SOURCE_ROOT}" -B "$MEDIAFX_BUILD" -DCMAKE_CXX_INCLUDE_WHAT_YOU_USE="/usr/bin/iwyu;-Xiwyu;--mapping_file=${MEDIAFX_BUILD}/qt${QT_VER}.imp;-Xiwyu;--mapping_file=/mediafx/builders/Linux/iwyu.imp;-Xiwyu;--cxx17ns;-Xiwyu;--no_comments" --install-prefix ${QTDIR} && exec cmake --build "${MEDIAFX_BUILD}" --parallel 4 diff --git a/builders/Linux/lint.sh b/builders/Linux/lint.sh index b2420ca..e81b264 100755 --- a/builders/Linux/lint.sh +++ b/builders/Linux/lint.sh @@ -2,14 +2,18 @@ # Copyright (C) 2024 Andrew Wason # SPDX-License-Identifier: GPL-3.0-or-later +CURRENT=${BASH_SOURCE%/*} +source "$CURRENT/../versions" + BUILD_TYPE=${BUILD_TYPE:-Debug} -mkdir -p /mediafx/build/Linux/${BUILD_TYPE} -cd /mediafx/build/Linux/${BUILD_TYPE} -cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=${BUILD_TYPE} --install-prefix ${QTDIR} ../../.. || exit 1 +MEDIAFX_BUILD=${BUILD_ROOT}/${BUILD_TYPE} +mkdir -p "${MEDIAFX_BUILD}" +cmake -S "${SOURCE_ROOT}" -B "$MEDIAFX_BUILD" -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=${BUILD_TYPE} --install-prefix ${QTDIR} || exit 1 # Generate *.moc include files for tests -make tst_encoder_autogen/fast tst_decoder_autogen/fast tst_interval_autogen/fast || exit 1 +cmake --build "${MEDIAFX_BUILD}" --target tst_encoder_autogen/fast tst_decoder_autogen/fast tst_interval_autogen/fast || exit 1 + cd /mediafx git config --global --add safe.directory /mediafx FILES=$(git ls-files '**/*.cpp' '**/*.h') -/usr/bin/clang-tidy -p /mediafx/build/Linux/${BUILD_TYPE} $FILES || exit 1 -/usr/bin/clazy-standalone -p /mediafx/build/Linux/${BUILD_TYPE}/compile_commands.json $FILES || exit 1 \ No newline at end of file +/usr/bin/clang-tidy -p "${MEDIAFX_BUILD}" $FILES || exit 1 +/usr/bin/clazy-standalone -p "${MEDIAFX_BUILD}/compile_commands.json" $FILES || exit 1 \ No newline at end of file diff --git a/builders/mediafx-build.sh b/builders/mediafx-build.sh index b91c589..a222033 100755 --- a/builders/mediafx-build.sh +++ b/builders/mediafx-build.sh @@ -8,5 +8,4 @@ source "$CURRENT/versions" BUILD_TYPE=${BUILD_TYPE:-Release} MEDIAFX_BUILD="${BUILD_ROOT}/${BUILD_TYPE}" mkdir -p "$MEDIAFX_BUILD" -cd "$MEDIAFX_BUILD" -(cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE --install-prefix "${QTDIR}" ../../.. && cmake --build . && ${SUDO} cmake --install .) || exit 1 +(cmake -S "${SOURCE_ROOT}" -B "$MEDIAFX_BUILD" -DCMAKE_BUILD_TYPE=$BUILD_TYPE --install-prefix "${QTDIR}" && cmake --build "$MEDIAFX_BUILD" && ${SUDO} cmake --install "$MEDIAFX_BUILD") || exit 1 diff --git a/builders/mediafx-test.sh b/builders/mediafx-test.sh index 5477ff0..3f75ae5 100755 --- a/builders/mediafx-test.sh +++ b/builders/mediafx-test.sh @@ -6,5 +6,4 @@ CURRENT=${BASH_SOURCE%/*} source "$CURRENT/versions" BUILD_TYPE=${BUILD_TYPE:-Release} -cd "${BUILD_ROOT}/${BUILD_TYPE}" || exit 1 -ctest --output-on-failure "${@}" || exit 1 +ctest --test-dir "${BUILD_ROOT}/${BUILD_TYPE}" --output-on-failure "${@}" || exit 1 diff --git a/builders/versions b/builders/versions index eeae7eb..6264493 100644 --- a/builders/versions +++ b/builders/versions @@ -1,4 +1,5 @@ export QT_VER=6.6.2 +export SOURCE_ROOT="${BASH_SOURCE%/*}/.." BUILD_ROOT="${BASH_SOURCE%/*}/../build/$(uname)" mkdir -p "${BUILD_ROOT}" export BUILD_ROOT=$(cd "${BUILD_ROOT}"; pwd) diff --git a/src/MediaFX/CMakeLists.txt b/src/MediaFX/CMakeLists.txt index bbbc975..f2c968f 100644 --- a/src/MediaFX/CMakeLists.txt +++ b/src/MediaFX/CMakeLists.txt @@ -9,6 +9,19 @@ pkg_search_module(libavutil REQUIRED IMPORTED_TARGET libavutil>=56.70.100) option(EVENT_LOGGER "Enable event logger" OFF) +find_package(Git QUIET) + +if(GIT_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git") + execute_process(COMMAND ${GIT_EXECUTABLE} describe --dirty --always + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + OUTPUT_VARIABLE MEDIAFX_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE) +else() + set(MEDIAFX_VERSION dev) +endif() + +configure_file("version.h.in" "version.h") + qt_add_library(mediafx STATIC application.cpp session.cpp @@ -34,6 +47,9 @@ qt_add_executable(mediafxtool main.cpp ) +# For generated version.h +target_include_directories(mediafxtool PRIVATE "${CMAKE_CURRENT_BINARY_DIR}") + if(EVENT_LOGGER) target_sources(mediafxtool PRIVATE event_logger.h) add_compile_definitions(EVENTLOGGER) diff --git a/src/MediaFX/main.cpp b/src/MediaFX/main.cpp index a0ba835..2d4a5cc 100644 --- a/src/MediaFX/main.cpp +++ b/src/MediaFX/main.cpp @@ -6,6 +6,7 @@ #include "media_manager.h" #include "output_format.h" #include "session.h" +#include "version.h" #include #include #include @@ -47,7 +48,7 @@ int main(int argc, char* argv[]) app.setApplicationName(u"MediaFX"_s); QCommandLineParser parser; - parser.setApplicationDescription(u"MediaFX\nCopyright (C) 2023-2024 Andrew Wason\nSPDX-License-Identifier: GPL-3.0-or-later"_s); + parser.setApplicationDescription(u"MediaFX\nCopyright (C) 2023-2024 Andrew Wason\nSPDX-License-Identifier: GPL-3.0-or-later\nVersion: %1"_s.arg(MediaFXVersion)); parser.setSingleDashWordOptionMode(QCommandLineParser::ParseAsLongOptions); parser.addHelpOption(); parser.addOption({ { u"f"_s, u"fps"_s }, u"Output frames per second, can be integer or rational e.g. 30000/1001."_s, u"fps"_s, u"30"_s }); diff --git a/src/MediaFX/version.h.in b/src/MediaFX/version.h.in new file mode 100644 index 0000000..a5b7f4d --- /dev/null +++ b/src/MediaFX/version.h.in @@ -0,0 +1,6 @@ +// Copyright (C) 2024 Andrew Wason +// SPDX-License-Identifier: GPL-3.0-or-later + +#pragma once + +inline constexpr auto MediaFXVersion = "@MEDIAFX_VERSION@";