|
| 1 | +# This script produces the changelog, control and rules file in the debian |
| 2 | +# directory. These files are needed to build a Debian source package from the repository. |
| 3 | +# Run this in CMake script mode, e.g. |
| 4 | +# $ cd OpenCL-Headers |
| 5 | +# $ cmake -S . -B ../build -D BUILD_TESTING=OFF |
| 6 | +# $ cmake |
| 7 | +# -DCMAKE_CACHE_PATH=../build/CMakeCache.txt |
| 8 | +# -DCPACK_DEBIAN_PACKAGE_MAINTAINER="Example Name <example@example.com>" |
| 9 | +# -DDEBIAN_DISTROSERIES=jammy |
| 10 | +# -DORIG_ARCHIVE=../OpenCL-Headers.tar.gz |
| 11 | +# -DLATEST_RELEASE_VERSION=v2023.08.29 |
| 12 | +# -P cmake/DebSourcePkg.cmake |
| 13 | +# $ debuild -S -sa |
| 14 | + |
| 15 | +cmake_minimum_required(VERSION 3.21) # file(COPY_FILE) is added in CMake 3.21 |
| 16 | + |
| 17 | +set(DEB_SOURCE_PKG_NAME "khronos-opencl-headers") |
| 18 | +set(DEB_CLHPP_PKG_NAME "opencl-clhpp-headers") |
| 19 | +set(DEB_META_PKG_NAME "opencl-headers") |
| 20 | +set(DEB_META_PKG_DESCRIPTION "OpenCL (Open Computing Language) header files |
| 21 | + OpenCL (Open Computing Language) is a multi-vendor open standard for |
| 22 | + general-purpose parallel programming of heterogeneous systems that include |
| 23 | + CPUs, GPUs and other processors. |
| 24 | + . |
| 25 | + This metapackage depends on packages providing the C and C++ headers files |
| 26 | + for the OpenCL API as published by The Khronos Group Inc. The corresponding |
| 27 | + specification and documentation can be found on the Khronos website.") |
| 28 | + |
| 29 | +if(NOT EXISTS "${CMAKE_CACHE_PATH}") |
| 30 | + message(FATAL_ERROR "CMAKE_CACHE_PATH is not set or does not exist") |
| 31 | +endif() |
| 32 | +if(NOT DEFINED DEBIAN_PACKAGE_MAINTAINER) |
| 33 | + message(FATAL_ERROR "DEBIAN_PACKAGE_MAINTAINER is not set") |
| 34 | +endif() |
| 35 | +if(NOT DEFINED DEBIAN_DISTROSERIES) |
| 36 | + message(FATAL_ERROR "DEBIAN_DISTROSERIES is not set") |
| 37 | +endif() |
| 38 | +if(NOT DEFINED ORIG_ARCHIVE) |
| 39 | + message(WARNING "ORIG_ARCHIVE is not set") |
| 40 | +elseif(NOT EXISTS "${ORIG_ARCHIVE}") |
| 41 | + message(FATAL_ERROR "ORIG_ARCHIVE is defined, but the file does not exist at \"${ORIG_ARCHIVE}\"") |
| 42 | +endif() |
| 43 | +if(NOT DEFINED LATEST_RELEASE_VERSION) |
| 44 | + message(WARNING "LATEST_RELEASE_VERSION is not set") |
| 45 | +endif() |
| 46 | +if(NOT DEFINED DEBIAN_VERSION_SUFFIX) |
| 47 | + message(WARNING "DEBIAN_VERSION_SUFFIX is not set") |
| 48 | +endif() |
| 49 | + |
| 50 | +# Extracting the project version from the main CMakeLists.txt via regex |
| 51 | +file(READ "${CMAKE_CACHE_PATH}" CMAKE_CACHE) |
| 52 | +string(REGEX MATCH "CMAKE_PROJECT_VERSION[^=]*=([^\n]*)" REGEX_MATCH "${CMAKE_CACHE}") |
| 53 | +if(NOT REGEX_MATCH) |
| 54 | + message(FATAL_ERROR "Could not extract project version from CMakeLists.txt") |
| 55 | +endif() |
| 56 | +set(PROJECT_VERSION "${CMAKE_MATCH_1}") |
| 57 | + |
| 58 | +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}") |
| 59 | +# Package.cmake contains all details for packaging |
| 60 | +include(PackageSetup) |
| 61 | + |
| 62 | +# Append a space after every newline in the description. This format is required |
| 63 | +# in the control file. |
| 64 | +string(REPLACE "\n" "\n " CPACK_PACKAGE_DESCRIPTION "${CPACK_PACKAGE_DESCRIPTION}") |
| 65 | + |
| 66 | +set(DEB_SOURCE_PKG_DIR "${CMAKE_CURRENT_LIST_DIR}/../debian") |
| 67 | +# Write debian/control |
| 68 | +file(WRITE "${DEB_SOURCE_PKG_DIR}/control" |
| 69 | +"Source: ${DEB_SOURCE_PKG_NAME} |
| 70 | +Section: ${CPACK_DEBIAN_PACKAGE_SECTION} |
| 71 | +Priority: optional |
| 72 | +Maintainer: ${DEBIAN_PACKAGE_MAINTAINER} |
| 73 | +Build-Depends: cmake, debhelper-compat (=13) |
| 74 | +Rules-Requires-Root: no |
| 75 | +Homepage: ${CPACK_DEBIAN_PACKAGE_HOMEPAGE} |
| 76 | +Standards-Version: 4.6.2 |
| 77 | +
|
| 78 | +Package: ${DEBIAN_PACKAGE_NAME} |
| 79 | +Architecture: ${CPACK_DEBIAN_PACKAGE_ARCHITECTURE} |
| 80 | +Multi-Arch: foreign |
| 81 | +Breaks: ${CPACK_DEBIAN_PACKAGE_BREAKS} |
| 82 | +Replaces: ${CPACK_DEBIAN_PACKAGE_REPLACES} |
| 83 | +Description: ${CPACK_PACKAGE_DESCRIPTION} |
| 84 | +
|
| 85 | +Package: ${DEB_META_PKG_NAME} |
| 86 | +Architecture: ${CPACK_DEBIAN_PACKAGE_ARCHITECTURE} |
| 87 | +Multi-Arch: foreign |
| 88 | +Depends: ${DEBIAN_PACKAGE_NAME} (= ${PACKAGE_VERSION_REVISION}), ${DEB_CLHPP_PKG_NAME} (= ${PACKAGE_VERSION_REVISION}) |
| 89 | +Description: ${DEB_META_PKG_DESCRIPTION} |
| 90 | +" |
| 91 | +) |
| 92 | +# Write debian/changelog |
| 93 | +string(TIMESTAMP CURRENT_TIMESTAMP "%a, %d %b %Y %H:%M:%S +0000" UTC) |
| 94 | +file(WRITE "${DEB_SOURCE_PKG_DIR}/changelog" |
| 95 | +"${DEB_SOURCE_PKG_NAME} (${PACKAGE_VERSION_REVISION}) ${DEBIAN_DISTROSERIES}; urgency=medium |
| 96 | +
|
| 97 | + * Released version ${PACKAGE_VERSION_REVISION} |
| 98 | +
|
| 99 | + -- ${DEBIAN_PACKAGE_MAINTAINER} ${CURRENT_TIMESTAMP} |
| 100 | +") |
| 101 | +# Write debian/rules |
| 102 | +file(WRITE "${DEB_SOURCE_PKG_DIR}/rules" |
| 103 | +"#!/usr/bin/make -f |
| 104 | +%: |
| 105 | +\tdh $@ |
| 106 | +
|
| 107 | +override_dh_auto_configure: |
| 108 | +\tdh_auto_configure -- -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF |
| 109 | +
|
| 110 | +override_dh_auto_install: |
| 111 | +\tdh_auto_install --destdir=debian/${DEBIAN_PACKAGE_NAME}/ |
| 112 | +") |
| 113 | + |
| 114 | +if(DEFINED ORIG_ARCHIVE) |
| 115 | + # Copy the passed orig.tar.gz file. The target filename is deduced from the version number, as expected by debuild |
| 116 | + cmake_path(IS_ABSOLUTE ORIG_ARCHIVE IS_ORIG_ARCHIVE_ABSOLUTE) |
| 117 | + if (NOT IS_ORIG_ARCHIVE_ABSOLUTE) |
| 118 | + message(FATAL_ERROR "ORIG_ARCHIVE must be an absolute path (passed: \"${ORIG_ARCHIVE}\")") |
| 119 | + endif() |
| 120 | + cmake_path(GET ORIG_ARCHIVE EXTENSION ORIG_ARCHIVE_EXT) |
| 121 | + cmake_path(GET ORIG_ARCHIVE PARENT_PATH ORIG_ARCHIVE_PARENT) |
| 122 | + set(TARGET_PATH "${ORIG_ARCHIVE_PARENT}/${DEB_SOURCE_PKG_NAME}_${CPACK_DEBIAN_PACKAGE_VERSION}${ORIG_ARCHIVE_EXT}") |
| 123 | + message(STATUS "Copying \"${ORIG_ARCHIVE}\" to \"${TARGET_PATH}\"") |
| 124 | + file(COPY_FILE "${ORIG_ARCHIVE}" "${TARGET_PATH}") |
| 125 | +endif() |
0 commit comments