diff --git a/CMakeLists.txt b/CMakeLists.txt index f7237230..29ce5e4c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,6 +34,15 @@ elseif ("${ENABLE_COMPILE_FLAGS_FOR_TARGET}" STREQUAL "armv8-neon") add_definitions(-mfpu=neon-fp-armv8 -ftree-vectorize) endif() +# Source package generation setup. +set(CPACK_GENERATOR "TXZ") +set(CPACK_PACKAGE_FILE_NAME "libcamera-apps-build") +set(CPACK_SOURCE_GENERATOR "TXZ") +set(CPACK_INSTALL_SCRIPTS ${CMAKE_SOURCE_DIR}/package.cmake) +set(CPACK_SOURCE_PACKAGE_FILE_NAME "libcamera-apps-src") +set(CPACK_SOURCE_IGNORE_FILES "/\.git*;/build;") +include(CPack) + find_package(PkgConfig REQUIRED) pkg_check_modules(LIBCAMERA REQUIRED libcamera) diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt index f84a6340..2562e829 100644 --- a/core/CMakeLists.txt +++ b/core/CMakeLists.txt @@ -4,7 +4,7 @@ include(GNUInstallDirs) find_package(Boost REQUIRED COMPONENTS program_options) -add_custom_target(VersionCpp ${CMAKE_COMMAND} -DVERSION_SHA=${VERSION_SHA} -P ${CMAKE_CURRENT_LIST_DIR}/version.cmake) +add_custom_target(VersionCpp ${CMAKE_COMMAND} -DSOURCE_DIR=${CMAKE_SOURCE_DIR} -P ${CMAKE_CURRENT_LIST_DIR}/version.cmake) set_source_files_properties(version.cpp PROPERTIES GENERATED 1) add_library(libcamera_app libcamera_app.cpp post_processor.cpp version.cpp) diff --git a/core/version.cmake b/core/version.cmake index 893497be..44ad4a6d 100644 --- a/core/version.cmake +++ b/core/version.cmake @@ -1,9 +1,13 @@ # Script to generate a version string and embed it in the version.cpp source file -if (NOT VERSION_SHA STREQUAL "") - message("Using user supplied version sha: " ${VERSION_SHA}) +if (EXISTS ${SOURCE_DIR}/version.gen) + message("Reading version string from version.gen") + file(READ ${SOURCE_DIR}/version.gen SHA) endif() -execute_process(COMMAND ${CMAKE_CURRENT_LIST_DIR}/version.py ${VERSION_SHA} OUTPUT_VARIABLE VER) -message("Generating version string: " ${VER}) +execute_process(COMMAND ${SOURCE_DIR}/core/version.py ${SHA} + WORKING_DIRECTORY ${SOURCE_DIR} + OUTPUT_VARIABLE VER) + configure_file(${CMAKE_CURRENT_LIST_DIR}/version.cpp.in version.cpp @ONLY) +message("Generating version string: " ${VER}) diff --git a/core/version.py b/core/version.py index 264a24f9..5435c314 100755 --- a/core/version.py +++ b/core/version.py @@ -20,12 +20,12 @@ def generate_version(): raise RuntimeError('Invalid git directory!') # Get commit id - r = subprocess.run(['git', 'describe', f'--abbrev={digits}', '--always'], + r = subprocess.run(['git', 'rev-parse', '--verify', 'HEAD'], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, text=True) if r.returncode: raise RuntimeError('Invalid git commit!') - commit = r.stdout.strip('\n') + '-auto' + commit = r.stdout.strip('\n')[0:digits] + '-intree' # Check dirty status r = subprocess.run(['git', 'diff-index', '--quiet', 'HEAD'], @@ -33,10 +33,12 @@ def generate_version(): if r.returncode: commit = commit + '-dirty' else: - commit = sys.argv[1][0:digits].rjust(digits, '0').lower() + commit = sys.argv[1].lower() if any(c not in hexdigits for c in commit): raise RuntimeError('Invalid git sha!') + commit = commit[0:digits] + except RuntimeError as e: print(f'ERR: {e}', file=sys.stderr) commit = '0' * digits + '-invalid' diff --git a/package.cmake b/package.cmake new file mode 100644 index 00000000..d7990602 --- /dev/null +++ b/package.cmake @@ -0,0 +1,5 @@ +# Script to generate a version string and save it to the package source root + +execute_process(COMMAND git rev-parse HEAD + WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} + OUTPUT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/version.gen)