diff --git a/0001-Set-_FIRST_-and-_LAST_-macro-values-in-disk.h-direct.patch b/0001-Set-_FIRST_-and-_LAST_-macro-values-in-disk.h-direct.patch new file mode 100644 index 0000000..b206c95 --- /dev/null +++ b/0001-Set-_FIRST_-and-_LAST_-macro-values-in-disk.h-direct.patch @@ -0,0 +1,73 @@ +From 6ce543f4999f21b363865bf845543326ba91406b Mon Sep 17 00:00:00 2001 +From: Adam Williamson +Date: Mon, 20 Jun 2022 12:07:14 -0700 +Subject: [PATCH] Set _FIRST_ and _LAST_ macro values in disk.h directly + +I may be missing something, but it seems impossible to use these +_FIRST_ and _LAST_ macros in practice as they are currently set. +You cannot use them at preprocessor time, because they will +always evaluate to 0 at that time, because the preprocessor does +not handle enums: + +https://stackoverflow.com/questions/34677148 + +and you cannot really use them at build time, because if you do +something like this: + + if (PED_PARTITION_LAST_FLAG > 17) { + PyModule_AddIntConstant(m, "PARTITION_ESP", PED_PARTITION_ESP); + } + +the compiler still throws an undeclared identifier error if you +actually try and build the code against an older parted. + +Unless anyone can suggest a way to use these properly as-is, +this is the best idea I can come up with: we just have to define +the _FIRST_ and _LAST_ values directly, and remember to keep +them in line when adding new entries to the enums. + +Signed-off-by: Adam Williamson +--- + include/parted/disk.in.h | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/include/parted/disk.in.h b/include/parted/disk.in.h +index 672c4ee..fedcee9 100644 +--- a/include/parted/disk.in.h ++++ b/include/parted/disk.in.h +@@ -47,8 +47,8 @@ enum _PedDiskFlag { + /* This flag controls whether the boot flag of a GPT PMBR is set */ + PED_DISK_GPT_PMBR_BOOT=2, + }; +-#define PED_DISK_FIRST_FLAG PED_DISK_CYLINDER_ALIGNMENT +-#define PED_DISK_LAST_FLAG PED_DISK_GPT_PMBR_BOOT ++#define PED_DISK_FIRST_FLAG 1 ++#define PED_DISK_LAST_FLAG 2 + + /** + * Partition types +@@ -88,8 +88,8 @@ enum _PedPartitionFlag { + PED_PARTITION_BLS_BOOT=20, + PED_PARTITION_LINUX_HOME=21, + }; +-#define PED_PARTITION_FIRST_FLAG PED_PARTITION_BOOT +-#define PED_PARTITION_LAST_FLAG PED_PARTITION_LINUX_HOME ++#define PED_PARTITION_FIRST_FLAG 1 ++#define PED_PARTITION_LAST_FLAG 21 + + enum _PedDiskTypeFeature { + PED_DISK_TYPE_EXTENDED=1, /**< supports extended partitions */ +@@ -97,8 +97,8 @@ enum _PedDiskTypeFeature { + PED_DISK_TYPE_PARTITION_TYPE_ID=4, /**< supports partition type-ids */ + PED_DISK_TYPE_PARTITION_TYPE_UUID=8, /**< supports partition type-uuids */ + }; +-#define PED_DISK_TYPE_FIRST_FEATURE PED_DISK_TYPE_EXTENDED +-#define PED_DISK_TYPE_LAST_FEATURE PED_DISK_TYPE_PARTITION_TYPE_UUID ++#define PED_DISK_TYPE_FIRST_FEATURE 1 ++#define PED_DISK_TYPE_LAST_FEATURE 8 + + struct _PedDisk; + struct _PedPartition; +-- +2.36.1 + diff --git a/parted.spec b/parted.spec index e59972c..ccc2a5b 100644 --- a/parted.spec +++ b/parted.spec @@ -1,7 +1,7 @@ Summary: The GNU disk partition manipulation program Name: parted Version: 3.5 -Release: 2%{?dist} +Release: 3%{?dist} License: GPLv3+ URL: http://www.gnu.org/software/parted @@ -17,6 +17,11 @@ Patch0003: 0003-libparted-add-swap-flag-for-DASD-label.patch Patch0004: 0004-parted-Reset-the-filesystem-type-when-changing-the-i.patch Patch0005: 0005-tests-t3200-type-change-now-passes.patch +# Set _FIRST_ and _LAST_ macro values directly (not from an enum +# value) so they work at preprocessor time: +# https://github.com/dcantrell/pyparted/issues/91 +Patch1001: 0001-Set-_FIRST_-and-_LAST_-macro-values-in-disk.h-direct.patch + BuildRequires: gcc BuildRequires: e2fsprogs-devel @@ -120,6 +125,9 @@ make check %changelog +* Mon Jun 20 2022 Adam Williamson - 3.5-3 +- Set _FIRST_ and _LAST_ macro values directly + * Tue May 17 2022 Brian C. Lane - 3.5-2 - tests: t3200-type-change now passes (bcl) - parted: Reset the filesystem type when changing the id/uuid (bcl)