Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
b6eb2ca
Fix leak of static pad on shutdown
DonLakeFlyer Jun 19, 2025
45d9ca1
Only restart video once a second
DonLakeFlyer Jun 20, 2025
18c1fdf
Better logging
DonLakeFlyer Jun 20, 2025
2d543f4
Fix positioning of control within containing RowLayout
DonLakeFlyer Jun 21, 2025
b9712fb
Handle all cases of parameters available/missing
DonLakeFlyer Jun 22, 2025
eb2e351
Revert "Fix radius reset when editing FW Landing Patterns"
rubenp02 Jun 16, 2025
2718524
Revert "Fix waypoint glide slope heading calculations"
rubenp02 Jun 16, 2025
a48ffca
MissionManager: Fix landing approach item handling
rubenp02 Jun 17, 2025
cc99406
Rework Aux channel config to be single column
DonLakeFlyer Jun 23, 2025
3244420
Use parameter metadata for rotations
DonLakeFlyer Jun 24, 2025
57a254f
Hack fix for crash on usb disconnect vehicle removal
DonLakeFlyer Jun 24, 2025
9ff2a4d
Hack workaround for chart display without gstreamer compiled in
DonLakeFlyer Jun 25, 2025
c026dea
Add StandardModes support to MockLink
DonLakeFlyer Jun 27, 2025
34aee6e
FlightMap: Fix drawing of very long mission lines
rubenp02 Jun 5, 2025
4b360ca
CMake: Verify NDK Version
HTRamsey Jun 30, 2025
556610c
CMake: Force Upper Limit for GStreamer
HTRamsey Jun 28, 2025
7d2a97d
Fix: Improve auto stream handling
Niki-dev12 Jul 1, 2025
e919f8b
Allow manual zoom level adjust to increase unbounded
DonLakeFlyer Jul 2, 2025
f969cfc
Force android soft keyboard to close with Done instead of Next
DonLakeFlyer Jul 2, 2025
192b5e6
Better naming of CUSTOM_DIRECTORIES and support for custom Qt components
DonLakeFlyer Jul 3, 2025
c7b8a04
Updates for 5.0
DonLakeFlyer Jul 3, 2025
c6a0915
Update docs for stable release
DonLakeFlyer Jul 9, 2025
65e3b00
Mavlink Inpector: Fix value updating on selected message
DonLakeFlyer Jul 10, 2025
4a9562b
AnalyzeView: Fix Sending Commands (#13189)
HTRamsey Jul 20, 2025
4f3c820
Rovers don't require takeoff item in Plan
DonLakeFlyer Jul 22, 2025
646950a
fix: correct telemetry color picker dialog bug
DonLakeFlyer Jul 22, 2025
cd48ce1
Explain when Gimbal Indicator shows up
DonLakeFlyer Aug 12, 2025
f484a9b
Fix Qml signal leaking to underlying map
s-lisovenko Aug 12, 2025
fcd79c7
Fix failing MissionController unit test
DonLakeFlyer Aug 13, 2025
c316bdc
Fix centering of inner circle in PhotoVideoControl
rubenp02 Dec 9, 2024
0b137f3
Fix crash when loading parameter which does not currently exist
DonLakeFlyer Aug 12, 2025
8e03bd8
Remove hardcoded flight mode names
DonLakeFlyer Sep 4, 2025
1b6faac
Remove logging
DonLakeFlyer Sep 4, 2025
a11717e
Fix bugs with flight mode names changing from Standared Modes
DonLakeFlyer Sep 5, 2025
01d7aae
Tweaks to create-dmg checks/usage
DonLakeFlyer Sep 15, 2025
8ebdad2
Update to new osx dependency script name
DonLakeFlyer Sep 15, 2025
5337d76
Don't use latest XCode
DonLakeFlyer Sep 15, 2025
da27f1b
Update supported OS
DonLakeFlyer Sep 15, 2025
4abeaf0
Camera: try to make discovery more robust
julianoes Jun 26, 2025
b0bbad3
Camera: fixup comment regarding components
julianoes Jul 7, 2025
f275171
Camera: consolidate requesting message
julianoes Jul 7, 2025
6f68e70
Camera: retry camera discovery after silence
julianoes Jul 7, 2025
e8d2f4f
Camera: use exponential backoff for discovery
julianoes Jul 7, 2025
2791cf5
Camera: standardize and fix VehicleCameraControl retry logic
julianoes Jul 7, 2025
c83f695
Vehicle/Camera: prevent segfaults on destruction
julianoes Jul 17, 2025
15f61a1
Camera discovery fixups (#13197)
julianoes Aug 2, 2025
ddb1230
Update heading
DonLakeFlyer Sep 15, 2025
74a694b
Setup for automatic release notes
DonLakeFlyer Sep 15, 2025
748c5e5
Sign mac app bundle with real signing identity
DonLakeFlyer Sep 20, 2025
b8a8dad
Install nsis into github windows runner
DonLakeFlyer Sep 21, 2025
839309b
Fix crash on double signaling of allLinksRemoved
DonLakeFlyer Sep 22, 2025
924d676
Add missing platform plugins (#13426)
DonLakeFlyer Sep 23, 2025
e0648e4
Vehicle: Minor Telemetry Fixes
HTRamsey Jul 20, 2025
292c145
Check for null usbManager to prevent debug spew from availableDevices…
DonLakeFlyer Sep 30, 2025
ca8245e
Remote ID: Close toolbar dropdown when going to Configure page
DonLakeFlyer Oct 1, 2025
ac3d684
Fix Android SD Card permissions for API 30+ (Android 11+) (#13456)
DonLakeFlyer Oct 2, 2025
780dcad
CI: Free Up Disk Space for Android
HTRamsey Oct 1, 2025
4948c3c
Fix daily build windows download links
DonLakeFlyer Oct 8, 2025
d40ce1e
Fix crash on Vehicle shutdown caused by null CameraManager
DonLakeFlyer Oct 8, 2025
e0816c9
Modify code to build on Qt 6.9+
DonLakeFlyer Oct 8, 2025
beed0a4
Add qml plugin's interfaces
NICourced Feb 27, 2026
c9d78c7
Add info without git
NICourced Feb 27, 2026
533649b
Bump Qt maximum version, add LocationPrivate module
NICourced Feb 27, 2026
d9ba304
Fix GStreamer path
NICourced Feb 27, 2026
fe95e99
Add type set
NICourced Feb 27, 2026
b007d2b
Add GRIPPER_ACTION definitions
NICourced Feb 27, 2026
0a8730f
Uncomment qml6 plugin registration
NICourced Feb 27, 2026
10b7859
Add QElapsedTimer
NICourced Feb 27, 2026
4d0e343
Build with system libs
NICourced Feb 27, 2026
a804ac2
Merge branch 'master' into system-libs-build
NICourced Feb 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
114 changes: 114 additions & 0 deletions .github/workflows/android-linux.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
name: Android-Linux

on:
push:
branches:
- master
- 'Stable*'
tags:
- 'v*'
paths-ignore:
- 'docs/**' # Do not trigger for any changes under docs
pull_request:
paths:
- '.github/workflows/android-linux.yml'
- 'deploy/android/**'
- 'src/**'
- 'android/**'
- 'CMakeLists.txt'
- 'cmake/**'
- 'translations/*'

# concurrency:
# group: ${{ github.workflow }}-${{ github.ref }}
# cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}

jobs:
build:
runs-on: ubuntu-latest

strategy:
matrix:
BuildType: [Release]

defaults:
run:
shell: bash

env:
ARTIFACT: QGroundControl.apk
PACKAGE: QGroundControl
QT_VERSION: 6.8.3
QT_ANDROID_KEYSTORE_PATH: ${{ github.workspace }}/deploy/android/android_release.keystore
QT_ANDROID_KEYSTORE_ALIAS: QGCAndroidKeyStore
QT_ANDROID_KEYSTORE_STORE_PASS: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
QT_ANDROID_KEYSTORE_KEY_PASS: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
QT_ANDROID_ABIS: ${{ matrix.BuildType == 'Release' && 'armeabi-v7a;arm64-v8a' || 'arm64-v8a' }}

steps:
- name: Checkout repo
uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 1
fetch-tags: false

- name: Get all tags for correct version determination
working-directory: ${{ github.workspace }}

Check failure on line 57 in .github/workflows/android-linux.yml

View workflow job for this annotation

GitHub Actions / pre-commit

57:28 [colons] too many spaces after colon
run: |
git fetch --all --tags -f --depth 1

- name: Initial Setup
uses: ./.github/actions/common

- name: Free Disk Space
if: runner.os == 'Linux'
uses: jlumbroso/free-disk-space@main
with:
tool-cache: false
android: false
large-packages: false

- name: Install Qt for Android
uses: ./.github/actions/qt-android

Check failure on line 73 in .github/workflows/android-linux.yml

View workflow job for this annotation

GitHub Actions / Lint Workflows

[actionlint] reported by reviewdog 🐶 missing input "modules" which is required by action "Android Qt" defined at "./.github/actions/qt-android". all required inputs are "arch", "host", "modules", "version" [action] Raw Output: e:.github/workflows/android-linux.yml:73:15: missing input "modules" which is required by action "Android Qt" defined at "./.github/actions/qt-android". all required inputs are "arch", "host", "modules", "version" [action]
with:
host: linux
arch: linux_gcc_64
version: ${{ env.QT_VERSION }}
abis: ${{ env.QT_ANDROID_ABIS }}
cpm-modules: ${{ runner.temp }}/shadow_build_dir/cpm_modules

- name: Configure
working-directory: ${{ runner.temp }}/shadow_build_dir
run: ${{ env.QT_ROOT_DIR }}/bin/qt-cmake -S ${{ github.workspace }} -B . -G Ninja
-DCMAKE_BUILD_TYPE=${{ matrix.BuildType }}
-DCMAKE_WARN_DEPRECATED=FALSE
-DQT_ANDROID_ABIS="${{ env.QT_ANDROID_ABIS }}"
-DQT_ANDROID_BUILD_ALL_ABIS=OFF
-DQT_HOST_PATH="${{ env.QT_ROOT_DIR }}/../gcc_64"
-DQT_ANDROID_SIGN_APK=${{ env.QT_ANDROID_KEYSTORE_STORE_PASS != '' && 'ON' || 'OFF' }}
-DQT_DEBUG_FIND_PACKAGE=ON
-DQGC_STABLE_BUILD=${{ github.ref_type == 'tag' || contains(github.ref, 'Stable') && 'ON' || 'OFF' }}

- name: Build
working-directory: ${{ runner.temp }}/shadow_build_dir
run: cmake --build . --target all --config ${{ matrix.BuildType }}

- run: cp ${{ runner.temp }}/shadow_build_dir/android-build/*.apk ${{ runner.temp }}/shadow_build_dir/${{ env.ARTIFACT }}

- name: Upload Build File
if: matrix.BuildType == 'Release'
uses: ./.github/actions/upload
with:
artifact_name: ${{ env.ARTIFACT }}
package_name: ${{ env.PACKAGE }}
aws_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
github_token: ${{ secrets.GITHUB_TOKEN }}

Check failure on line 107 in .github/workflows/android-linux.yml

View workflow job for this annotation

GitHub Actions / Lint Workflows

[actionlint] reported by reviewdog 🐶 input "github_token" is not defined in action "Upload Release" defined at "./.github/actions/upload". available inputs are "artifact_name", "aws_distribution_id", "aws_key_id", "aws_role_arn", "aws_secret_access_key", "compression_level", "package_name", "retention_days", "upload_aws" [action] Raw Output: e:.github/workflows/android-linux.yml:107:11: input "github_token" is not defined in action "Upload Release" defined at "./.github/actions/upload". available inputs are "artifact_name", "aws_distribution_id", "aws_key_id", "aws_role_arn", "aws_secret_access_key", "compression_level", "package_name", "retention_days", "upload_aws" [action]

# - name: Deploy to Play Store

Check warning on line 109 in .github/workflows/android-linux.yml

View workflow job for this annotation

GitHub Actions / pre-commit

109:7 [comments-indentation] comment not indented like content
# if: matrix.BuildType == 'Release'
# uses: ./.github/actions/playstore
# with:
# artifact_name: ${{ runner.temp }}/shadow_build_dir/${{ env.ARTIFACT }}
# service_account_json: ${{ secrets.SERVICE_ACCOUNT }}
61 changes: 61 additions & 0 deletions android/src/org/mavlink/qgroundcontrol/QGCActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,67 @@ public boolean dispatchKeyEvent(KeyEvent event) {
return super.dispatchKeyEvent(event);
}

/**
* Checks and requests storage permissions for SD card access.
* For Android 11+ (API 30+), this requires MANAGE_EXTERNAL_STORAGE permission.
*
* @return true if permissions are granted, false otherwise
*/
public static boolean checkStoragePermissions() {
if (m_instance == null) {
Log.e(TAG, "Activity instance is null");
return false;
}

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
// Android 11+ (API 30+) requires MANAGE_EXTERNAL_STORAGE for full SD card access
if (!Environment.isExternalStorageManager()) {
Log.i(TAG, "MANAGE_EXTERNAL_STORAGE not granted, requesting...");
try {
Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
intent.setData(Uri.parse("package:" + m_instance.getPackageName()));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
m_instance.startActivity(intent);
} catch (Exception e) {
Log.e(TAG, "Failed to open storage permission settings", e);
// Fallback to general settings
Intent intent = new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
m_instance.startActivity(intent);
}
return false;
}
Log.i(TAG, "MANAGE_EXTERNAL_STORAGE already granted");
return true;
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// Android 6.0+ (API 23+) requires runtime permissions
String[] permissions = {
android.Manifest.permission.READ_EXTERNAL_STORAGE,
android.Manifest.permission.WRITE_EXTERNAL_STORAGE
};

boolean allGranted = true;
for (String permission : permissions) {
if (ContextCompat.checkSelfPermission(m_instance, permission) != PackageManager.PERMISSION_GRANTED) {
allGranted = false;
break;
}
}

if (!allGranted) {
Log.i(TAG, "Storage permissions not granted, requesting...");
ActivityCompat.requestPermissions(m_instance, permissions, 1);
return false;
}

Log.i(TAG, "Storage permissions already granted");
return true;
} else {
// Below Android 6.0, permissions are granted at install time
return true;
}
}

// Native C++ functions
public native boolean nativeInit();
public native void qgcLogDebug(final String message);
Expand Down
12 changes: 12 additions & 0 deletions cmake/CreateMacDMG.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@

set(STAGING_BUNDLE_PATH ${CMAKE_BINARY_DIR}/staging/${TARGET_APP_NAME}.app)

file(REMOVE_RECURSE ${CMAKE_BINARY_DIR}/package)
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/package)
file(COPY ${STAGING_BUNDLE_PATH} DESTINATION ${CMAKE_BINARY_DIR}/package)

message(STATUS "Creating DMG: ${TARGET_APP_NAME}.dmg")
execute_process(
COMMAND ${CREATE_DMG_PROGRAM} --volname "${TARGET_APP_NAME}" --filesystem "APFS" "${TARGET_APP_NAME}.dmg" "${CMAKE_BINARY_DIR}/package/"
COMMAND_ERROR_IS_FATAL ANY
)
36 changes: 36 additions & 0 deletions cmake/CreateWinInstaller.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
message(STATUS "Creating Windows NSIS Installer")

file(TO_NATIVE_PATH "${QGC_WINDOWS_INSTALLER_SCRIPT}" QGC_NSIS_INSTALLER_SCRIPT)
set(_PF86 "PROGRAMFILES(x86)")
find_program(QGC_NSIS_INSTALLER_CMD makensis
PATHS "$ENV{PROGRAMFILES}/NSIS" "$ENV{${_PF86}}/NSIS" "$ENV{PROGRAMW6432}/NSIS"
DOC "Path to the makensis utility."
REQUIRED
)

file(TO_NATIVE_PATH "${QGC_WINDOWS_ICON_PATH}" QGC_INSTALLER_ICON)
file(TO_NATIVE_PATH "${QGC_WINDOWS_INSTALL_HEADER_PATH}" QGC_INSTALLER_HEADER_BITMAP)
file(TO_NATIVE_PATH "${QGC_WINDOWS_DRIVER_MSI}" QGC_INSTALLER_DRIVER_MSI)
file(TO_NATIVE_PATH "${QGC_WINDOWS_OUT}" QGC_INSTALLER_OUT)

set(QGC_NSIS_INSTALLER_PARAMETERS
/DDRIVER_MSI=${QGC_INSTALLER_DRIVER_MSI}
/DINSTALLER_ICON=${QGC_INSTALLER_ICON}
/DHEADER_BITMAP=${QGC_INSTALLER_HEADER_BITMAP}
/DAPPNAME=${CMAKE_PROJECT_NAME}
/DEXENAME=${CMAKE_PROJECT_NAME}
/DORGNAME=${QGC_ORG_NAME}
/DDESTDIR=${CMAKE_INSTALL_PREFIX}
/NOCD
"/XOutFile ${QGC_INSTALLER_OUT}"
${QGC_NSIS_INSTALLER_SCRIPT}
)

execute_process(
COMMAND ${QGC_NSIS_INSTALLER_CMD} ${QGC_NSIS_INSTALLER_PARAMETERS}
COMMAND_ECHO STDOUT
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_STRIP_TRAILING_WHITESPACE
ECHO_OUTPUT_VARIABLE
ECHO_ERROR_VARIABLE
)
128 changes: 128 additions & 0 deletions cmake/Git.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
find_package(Git)

# Initialize default values
set(QGC_GIT_BRANCH "unknown")
set(QGC_GIT_HASH "unknown")
set(QGC_APP_VERSION_STR "v5.0.8")
set(QGC_APP_VERSION "5.0.8")
set(QGC_APP_DATE "unknown")

if(GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git")
option(GIT_SUBMODULE "Check submodules during build" OFF)
if(GIT_SUBMODULE)
message(STATUS "Submodule update")
execute_process(
COMMAND ${GIT_EXECUTABLE} submodule update --init --recursive
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
RESULT_VARIABLE GIT_SUBMODULE_RESULT
OUTPUT_VARIABLE GIT_SUBMODULE_OUTPUT
ERROR_VARIABLE GIT_SUBMODULE_ERROR
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(NOT GIT_SUBMODULE_RESULT EQUAL 0)
cmake_print_variables(GIT_SUBMODULE_RESULT GIT_SUBMODULE_OUTPUT GIT_SUBMODULE_ERROR)
message(FATAL_ERROR "git submodule update --init failed with ${GIT_SUBMODULE_RESULT}, please checkout submodules")
endif()
endif()

include(CMakePrintHelpers)

# Get git branch with error handling
execute_process(
COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
RESULT_VARIABLE GIT_BRANCH_RESULT
OUTPUT_VARIABLE QGC_GIT_BRANCH
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(NOT GIT_BRANCH_RESULT EQUAL 0)
set(QGC_GIT_BRANCH "unknown")
endif()

# Get git hash with error handling
execute_process(
COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
RESULT_VARIABLE GIT_HASH_RESULT
OUTPUT_VARIABLE QGC_GIT_HASH
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(NOT GIT_HASH_RESULT EQUAL 0)
set(QGC_GIT_HASH "unknown")
endif()

# Get version string with error handling
execute_process(
COMMAND ${GIT_EXECUTABLE} describe --always --tags
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
RESULT_VARIABLE GIT_DESCRIBE_RESULT
OUTPUT_VARIABLE QGC_APP_VERSION_STR
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(NOT GIT_DESCRIBE_RESULT EQUAL 0)
set(QGC_APP_VERSION_STR "v5.0.8")
endif()

# Get version tag with error handling
execute_process(
COMMAND ${GIT_EXECUTABLE} describe --always --abbrev=0
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
RESULT_VARIABLE GIT_VERSION_RESULT
OUTPUT_VARIABLE QGC_APP_VERSION
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(NOT GIT_VERSION_RESULT EQUAL 0)
set(QGC_APP_VERSION "v5.0.8")
endif()

# Get commit date with error handling
execute_process(
COMMAND ${GIT_EXECUTABLE} log -1 --format=%aI HEAD
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
RESULT_VARIABLE GIT_DATE_RESULT
OUTPUT_VARIABLE QGC_APP_DATE
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(NOT GIT_DATE_RESULT EQUAL 0)
set(QGC_APP_DATE "unknown")
endif()

else()
# Not a git repository, use hardcoded values
message(STATUS "Not a git repository, using hardcoded version 5.0.7")
set(QGC_GIT_BRANCH "release")
set(QGC_GIT_HASH "unknown")
set(QGC_APP_VERSION_STR "v5.0.8")
set(QGC_APP_VERSION "v5.0.8")
set(QGC_APP_DATE "2025-01-01")
endif()

# Safe version parsing
string(FIND "${QGC_APP_VERSION}" "v" QGC_APP_VERSION_VALID)
if(QGC_APP_VERSION_VALID GREATER -1)
string(REPLACE "v" "" QGC_APP_VERSION ${QGC_APP_VERSION})
else()
set(QGC_APP_VERSION "5.0.8")
endif()

# Safe regex matching
string(REGEX MATCH "([0-9]+)\\.([0-9]+)\\.([0-9]+)" QGC_APP_VERSION_MATCH "${QGC_APP_VERSION}")
if(QGC_APP_VERSION_MATCH)
set(QGC_APP_VERSION_MAJOR ${CMAKE_MATCH_1})
set(QGC_APP_VERSION_MINOR ${CMAKE_MATCH_2})
set(QGC_APP_VERSION_PATCH ${CMAKE_MATCH_3})
else()
# Fallback if regex fails
set(QGC_APP_VERSION_MAJOR "5")
set(QGC_APP_VERSION_MINOR "0")
set(QGC_APP_VERSION_PATCH "8")
endif()

message(STATUS "QGC Version: ${QGC_APP_VERSION_MAJOR}.${QGC_APP_VERSION_MINOR}.${QGC_APP_VERSION_PATCH}")
message(STATUS "Git Branch: ${QGC_GIT_BRANCH}")
message(STATUS "Git Hash: ${QGC_GIT_HASH}")
Loading
Loading