From 03b8f52fa98a7e39b6f565d5495d8512280fa282 Mon Sep 17 00:00:00 2001 From: FoolHen Date: Mon, 8 Jun 2026 12:28:10 +0200 Subject: [PATCH] Fix architecture detection for non-Debian distros MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace dpkg --print-architecture (Debian-specific) with a portable cmake-based approach using CMAKE_SYSTEM_PROCESSOR mapped to Debian architecture names (x86_64→amd64, aarch64→arm64, armv7l→armhf, i686→i386). --- CMakeLists.txt | 18 +++++++++++++++--- src/CMakeLists.txt | 32 ++++++++++++++++++++++++-------- 2 files changed, 39 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0c64939..198ed02 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,20 @@ project(pipedal HOMEPAGE_URL "https://rerdavies.github.io/pipedal" ) -execute_process( COMMAND dpkg --print-architecture COMMAND tr -d '\n' OUTPUT_VARIABLE DEBIAN_ARCHITECTURE ) +# Determine Debian-compatible architecture name (portable across distros) +if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64") + set(DEBIAN_ARCHITECTURE "amd64") +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64") + set(DEBIAN_ARCHITECTURE "arm64") +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "armv7l") + set(DEBIAN_ARCHITECTURE "armhf") +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i386|i686") + set(DEBIAN_ARCHITECTURE "i386") +else() + execute_process(COMMAND uname -m COMMAND tr -d '\n' OUTPUT_VARIABLE UNAME_M) + message(FATAL_ERROR "Cannot determine Debian architecture from CMAKE_SYSTEM_PROCESSOR=${CMAKE_SYSTEM_PROCESSOR} (uname -m: ${UNAME_M})") +endif() +message(STATUS "DEBIAN_ARCHITECTURE=${DEBIAN_ARCHITECTURE}") set (DISPLAY_VERSION "PiPedal v2.0.105-Release") set (PACKAGE_ARCHITECTURE ${DEBIAN_ARCHITECTURE}) @@ -24,8 +37,7 @@ set(CPACK_SOURCE_IGNORE_FILES "*.a;sqlite3.h;$(CPACK_SOURCE_IGNORE_FILES)" ) - -set (PIPEDAL_EXCLUDE_TESTS false) +option(PIPEDAL_EXCLUDE_TESTS "Exclude test targets from default build" OFF) include(CTest) enable_testing() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f9f02d6..254bb0c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -155,8 +155,20 @@ else() set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-multichar -Wno-psabi") endif() -execute_process( COMMAND dpkg --print-architecture COMMAND tr -d '\n' OUTPUT_VARIABLE DEBIAN_ARCHITECTURE ) -message(STATUS DEBIAN_ARCHITECTURE="${DEBIAN_ARCHITECTURE}") +# Determine Debian-compatible architecture name (portable across distros) +if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64") + set(DEBIAN_ARCHITECTURE "amd64") +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64") + set(DEBIAN_ARCHITECTURE "arm64") +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "armv7l") + set(DEBIAN_ARCHITECTURE "armhf") +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i386|i686") + set(DEBIAN_ARCHITECTURE "i386") +else() + execute_process(COMMAND uname -m COMMAND tr -d '\n' OUTPUT_VARIABLE UNAME_M) + message(FATAL_ERROR "Cannot determine Debian architecture from CMAKE_SYSTEM_PROCESSOR=${CMAKE_SYSTEM_PROCESSOR} (uname -m: ${UNAME_M})") +endif() +message(STATUS "DEBIAN_ARCHITECTURE=${DEBIAN_ARCHITECTURE}") add_compile_definitions(DEBIAN_ARCHITECTURE="${DEBIAN_ARCHITECTURE}") @@ -856,8 +868,8 @@ elseif(EXISTS "/usr/share/doc/libboost1.71-dev") set (BOOST_COPYRIGHT_DIR "libboost1.71-dev") elseif(EXISTS "/usr/share/doc/libboost1.67-dev") set (BOOST_COPYRIGHT_DIR "libboost1.67-dev") -else() - message(FATAL_ERROR "Boost libary version has changed. Please update me.") +# else() +# message(FATAL_ERROR "Boost libary version has changed. Please update me.") endif() @@ -871,10 +883,14 @@ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMENT "Updating copyright notices." ) -add_custom_target ( - CopyrightBuild ALL - DEPENDS ${REACT_NOTICES_FILE} -) +option(DISABLE_COPYRIGHT_BUILD "Skip generation of copyright notices (use on non-Debian distros)" OFF) + +if(NOT DISABLE_COPYRIGHT_BUILD) + add_custom_target ( + CopyrightBuild ALL + DEPENDS ${REACT_NOTICES_FILE} + ) +endif() if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.31) cmake_policy(SET CMP0177 NEW)