diff mbox series

zip: Don't define NO_DIR

Message ID 20240501061736.3738477-1-zboszor@gmail.com
State Under Review
Headers show
Series zip: Don't define NO_DIR | expand

Commit Message

Böszörményi Zoltán May 1, 2024, 6:17 a.m. UTC
The build framework of zip adds -DNO_DIR to CFLAGS after
failing to link this piece of test code:

  int main() { return closedir(opendir(".")); }

However, zip does not take a case into account when it does not
need to link to an extra library for these functions.

When -DNO_DIR is used, the code in unix.c defines custom
opendir()/readdir()/closedir() functions in a way that GCC 14
chokes on.

GLIBC has both <dirent.h> and <sys/dir.h> and apps don't need
any extra library to link with.

Add a patch to remove the definition of NO_DIR.
Instead, use -DHAVE_DIRENT_H in the recipe.

Remove 0002-unix.c-Do-not-redefine-DIR-as-FILE.patch which
is now unnecessary.

This fixes the compiler error observed with GCC 14.

Signed-off-by: Zoltán Böszörményi <zboszor@gmail.com>
---
 ...2-unix.c-Do-not-redefine-DIR-as-FILE.patch | 35 -------------------
 .../zip/zip-3.0/dont-define-NO_DIR.patch      | 14 ++++++++
 meta/recipes-extended/zip/zip_3.0.bb          |  6 ++--
 3 files changed, 17 insertions(+), 38 deletions(-)
 delete mode 100644 meta/recipes-extended/zip/zip-3.0/0002-unix.c-Do-not-redefine-DIR-as-FILE.patch
 create mode 100644 meta/recipes-extended/zip/zip-3.0/dont-define-NO_DIR.patch

Comments

patchtest@automation.yoctoproject.org May 1, 2024, 6:33 a.m. UTC | #1
Thank you for your submission. Patchtest identified one
or more issues with the patch. Please see the log below for
more information:

---
Testing patch /home/patchtest/share/mboxes/zip-Don-t-define-NO_DIR.patch

FAIL: test Upstream-Status presence: Upstream-Status is in incorrect format (test_patch.TestPatch.test_upstream_status_presence_format)

PASS: pretest src uri left files (test_metadata.TestMetadata.pretest_src_uri_left_files)
PASS: test CVE check ignore (test_metadata.TestMetadata.test_cve_check_ignore)
PASS: test CVE tag format (test_patch.TestPatch.test_cve_tag_format)
PASS: test Signed-off-by presence (test_mbox.TestMbox.test_signed_off_by_presence)
PASS: test Signed-off-by presence (test_patch.TestPatch.test_signed_off_by_presence)
PASS: test author valid (test_mbox.TestMbox.test_author_valid)
PASS: test commit message presence (test_mbox.TestMbox.test_commit_message_presence)
PASS: test lic files chksum modified not mentioned (test_metadata.TestMetadata.test_lic_files_chksum_modified_not_mentioned)
PASS: test max line length (test_metadata.TestMetadata.test_max_line_length)
PASS: test mbox format (test_mbox.TestMbox.test_mbox_format)
PASS: test non-AUH upgrade (test_mbox.TestMbox.test_non_auh_upgrade)
PASS: test shortlog format (test_mbox.TestMbox.test_shortlog_format)
PASS: test shortlog length (test_mbox.TestMbox.test_shortlog_length)
PASS: test src uri left files (test_metadata.TestMetadata.test_src_uri_left_files)

SKIP: pretest pylint: No python related patches, skipping test (test_python_pylint.PyLint.pretest_pylint)
SKIP: test bugzilla entry format: No bug ID found (test_mbox.TestMbox.test_bugzilla_entry_format)
SKIP: test lic files chksum presence: No added recipes, skipping test (test_metadata.TestMetadata.test_lic_files_chksum_presence)
SKIP: test license presence: No added recipes, skipping test (test_metadata.TestMetadata.test_license_presence)
SKIP: test pylint: No python related patches, skipping test (test_python_pylint.PyLint.test_pylint)
SKIP: test series merge on head: Merge test is disabled for now (test_mbox.TestMbox.test_series_merge_on_head)
SKIP: test summary presence: No added recipes, skipping test (test_metadata.TestMetadata.test_summary_presence)
SKIP: test target mailing list: Series merged, no reason to check other mailing lists (test_mbox.TestMbox.test_target_mailing_list)

---

Please address the issues identified and
submit a new revision of the patch, or alternatively, reply to this
email with an explanation of why the patch should be accepted. If you
believe these results are due to an error in patchtest, please submit a
bug at https://bugzilla.yoctoproject.org/ (use the 'Patchtest' category
under 'Yocto Project Subprojects'). For more information on specific
failures, see: https://wiki.yoctoproject.org/wiki/Patchtest. Thank
you!
Richard Purdie May 9, 2024, 8:54 a.m. UTC | #2
On Wed, 2024-05-01 at 08:17 +0200, Zoltan Boszormenyi via lists.openembedded.org wrote:
> The build framework of zip adds -DNO_DIR to CFLAGS after
> failing to link this piece of test code:
> 
>   int main() { return closedir(opendir(".")); }
> 
> However, zip does not take a case into account when it does not
> need to link to an extra library for these functions.
> 
> When -DNO_DIR is used, the code in unix.c defines custom
> opendir()/readdir()/closedir() functions in a way that GCC 14
> chokes on.
> 
> GLIBC has both <dirent.h> and <sys/dir.h> and apps don't need
> any extra library to link with.
> 
> Add a patch to remove the definition of NO_DIR.
> Instead, use -DHAVE_DIRENT_H in the recipe.
> 
> Remove 0002-unix.c-Do-not-redefine-DIR-as-FILE.patch which
> is now unnecessary.
> 
> This fixes the compiler error observed with GCC 14.
> 
> Signed-off-by: Zoltán Böszörményi <zboszor@gmail.com>
> ---
>  ...2-unix.c-Do-not-redefine-DIR-as-FILE.patch | 35 -------------------
>  .../zip/zip-3.0/dont-define-NO_DIR.patch      | 14 ++++++++
>  meta/recipes-extended/zip/zip_3.0.bb          |  6 ++--
>  3 files changed, 17 insertions(+), 38 deletions(-)
>  delete mode 100644 meta/recipes-extended/zip/zip-3.0/0002-unix.c-Do-not-redefine-DIR-as-FILE.patch
>  create mode 100644 meta/recipes-extended/zip/zip-3.0/dont-define-NO_DIR.patch
> 
[...]
> diff --git a/meta/recipes-extended/zip/zip-3.0/dont-define-NO_DIR.patch b/meta/recipes-extended/zip/zip-3.0/dont-define-NO_DIR.patch
> new file mode 100644
> index 0000000000..8528dbb55e
> --- /dev/null
> +++ b/meta/recipes-extended/zip/zip-3.0/dont-define-NO_DIR.patch
> @@ -0,0 +1,14 @@
> +Upstream-Status: Inactive-Upstream [no upstream]
> +Signed-off-by: Zoltán Böszörményi <zboszor@gmail.com>
> +
> +--- zip30/unix/configure~	2024-05-01 07:22:18.000000000 +0200
> ++++ zip30/unix/configure	2024-05-01 07:23:04.725337836 +0200
> +

I'm struggling to get to replying to patches for review but I just
wanted to explain the issue here.

The challenge is this change removed one patch and added a new one
which is fine but the new patch has no headers/information on it.

In the context of this commit, it makes sense but anyone coming to it
later would wonder what the issue was, why it was there and so on.

Whilst it is a pain, some of the info in the commit does need to be
duplicated into the patch header so that over time, we can know why
we're carrying these things.

I believe Khem tweaked and sent a v2.

Cheers,

Richard
diff mbox series

Patch

diff --git a/meta/recipes-extended/zip/zip-3.0/0002-unix.c-Do-not-redefine-DIR-as-FILE.patch b/meta/recipes-extended/zip/zip-3.0/0002-unix.c-Do-not-redefine-DIR-as-FILE.patch
deleted file mode 100644
index a86e03e620..0000000000
--- a/meta/recipes-extended/zip/zip-3.0/0002-unix.c-Do-not-redefine-DIR-as-FILE.patch
+++ /dev/null
@@ -1,35 +0,0 @@ 
-From 76f5bf3546d826dcbc03acbefcf0b10b972bf136 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 10 Aug 2022 17:19:38 -0700
-Subject: [PATCH 2/2] unix.c: Do not redefine DIR as FILE
-
-DIR is already provided on Linux via
-/usr/include/dirent.h system header
-
-Upstream-Status: Inactive-Upstream
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- unix/unix.c | 2 --
- 1 file changed, 2 deletions(-)
-
-diff --git a/unix/unix.c b/unix/unix.c
-index ba87614..6e6f4d2 100644
---- a/unix/unix.c
-+++ b/unix/unix.c
-@@ -61,13 +61,11 @@ local time_t label_utim = 0;
- /* Local functions */
- local char *readd OF((DIR *));
- 
--
- #ifdef NO_DIR                    /* for AT&T 3B1 */
- #include <sys/dir.h>
- #ifndef dirent
- #  define dirent direct
- #endif
--typedef FILE DIR;
- /*
- **  Apparently originally by Rich Salz.
- **  Cleaned up and modified by James W. Birdsall.
--- 
-2.37.1
-
diff --git a/meta/recipes-extended/zip/zip-3.0/dont-define-NO_DIR.patch b/meta/recipes-extended/zip/zip-3.0/dont-define-NO_DIR.patch
new file mode 100644
index 0000000000..8528dbb55e
--- /dev/null
+++ b/meta/recipes-extended/zip/zip-3.0/dont-define-NO_DIR.patch
@@ -0,0 +1,14 @@ 
+Upstream-Status: Inactive-Upstream [no upstream]
+Signed-off-by: Zoltán Böszörményi <zboszor@gmail.com>
+
+--- zip30/unix/configure~	2024-05-01 07:22:18.000000000 +0200
++++ zip30/unix/configure	2024-05-01 07:23:04.725337836 +0200
+@@ -604,8 +604,6 @@
+   done
+   if [ ${OPT} ]; then
+     LFLAGS2="${LFLAGS2} ${OPT}"
+-  else
+-    CFLAGS="${CFLAGS} -DNO_DIR"
+   fi
+ fi
+ 
diff --git a/meta/recipes-extended/zip/zip_3.0.bb b/meta/recipes-extended/zip/zip_3.0.bb
index 70df5ab872..a548087545 100644
--- a/meta/recipes-extended/zip/zip_3.0.bb
+++ b/meta/recipes-extended/zip/zip_3.0.bb
@@ -17,8 +17,8 @@  SRC_URI = "${SOURCEFORGE_MIRROR}/infozip/Zip%203.x%20%28latest%29/3.0/zip30.tar.
            file://0002-configure-support-PIC-code-build.patch \
            file://0001-configure-Use-CFLAGS-and-LDFLAGS-when-doing-link-tes.patch \
            file://0001-configure-Specify-correct-function-signatures-and-de.patch \
-           file://0002-unix.c-Do-not-redefine-DIR-as-FILE.patch \
            file://0001-unix-configure-use-_Static_assert-to-do-correct-dete.patch \
+           file://dont-define-NO_DIR.patch \
            "
 UPSTREAM_VERSION_UNKNOWN = "1"
 
@@ -32,8 +32,8 @@  CVE_STATUS[CVE-2018-13684] = "cpe-incorrect: Not for zip but for smart contract
 # CFLAGS_NOOPT.  It will also force -O3 optimization, overriding
 # whatever we set.
 EXTRA_OEMAKE = "'CC=${CC}' 'BIND=${CC}' 'AS=${CC} -c' 'CPP=${CPP}' \
-		'CFLAGS=-I. -DUNIX ${CFLAGS}' \
-		'CFLAGS_NOOPT=-I. -DUNIX ${CFLAGS}' \
+		'CFLAGS=-I. -DUNIX -DHAVE_DIRENT_H ${CFLAGS}' \
+		'CFLAGS_NOOPT=-I. -DUNIX -DHAVE_DIRENT_H ${CFLAGS}' \
 		'INSTALL=install' 'INSTALL_D=install -d' \
 		'BINFLAGS=0755'"