On 2022/11/29 15:55, Brian Callahan wrote:
> Hi ports --
> 
> Attached is an update to DWZ, which was released earlier this month.
> Here is the release announcement, which includes the changelog:
> https://sourceware.org/pipermail/dwz/2022q4/001385.html
> 
> Apologies for the large diff; DWZ now using xxHash for a decent speedup.
> Unfortunately, that means pulling xxHash in its entirety into DWZ. At
> least xxHash is a single-header library.
> 
> I have only tried this on amd64, so testing on aarch64 would be appreciated.
> 
> OK?

How about either using BUILD_DEPENDS on xxhash (on the :patch target, to
avoid having to actually package xxhash) instead, or listing the xxhash
tarball in DISTFILES? (even just copying it to files/xxhash.h would be
a bit easier than adding a whole new file via a patch, at least it
would then be directly diff'able).

Example diff using :patch below.

Index: Makefile
===================================================================
RCS file: /cvs/ports/devel/dwz/Makefile,v
retrieving revision 1.6
diff -u -p -r1.6 Makefile
--- Makefile    11 Mar 2022 18:50:00 -0000      1.6
+++ Makefile    29 Nov 2022 16:17:01 -0000
@@ -1,5 +1,5 @@
 COMMENT =      DWARF optimization and duplicate removal tool
-DISTNAME =     dwz-0.14
+DISTNAME =     dwz-0.15
 
 CATEGORIES =   devel
 
@@ -23,7 +23,25 @@ FAKE_FLAGS = mandir=${TRUEPREFIX}/man pr
 WRKDIST =      ${WRKDIR}/dwz
 
 # XXX bootstrap: DEBUG_PACKAGES needs a dwz binary to work
+# use :patch target to avoid having to package xxhash
 
 DWZ = ${WRKBUILD}/dwz
+
+BUILD_DEPENDS =        sysutils/xxhash:patch
+post-extract:
+       cp ${WRKDIR}/sysutils/xxhash/*/xxhash.h ${WRKSRC}/
+
+.include <bsd.port.arch.mk>
+.if ${PROPERTIES:Mlp64}
+CFLAGS +=      -DNATIVE_POINTER_SIZE=8
+.else
+CFLAGS +=      -DNATIVE_POINTER_SIZE=4
+.endif
+
+.if ${PROPERTIES:Mle}
+CFLAGS +=      -DNATIVE_ENDIAN_VAL=ELFDATA2LSB
+.else
+CFLAGS +=      -DNATIVE_ENDIAN_VAL=ELFDATA2MSB
+.endif
 
 .include <bsd.port.mk>
Index: distinfo
===================================================================
RCS file: /cvs/ports/devel/dwz/distinfo,v
retrieving revision 1.2
diff -u -p -r1.2 distinfo
--- distinfo    8 Mar 2021 16:51:11 -0000       1.2
+++ distinfo    29 Nov 2022 16:17:01 -0000
@@ -1,2 +1,2 @@
-SHA256 (dwz-0.14.tar.gz) = MwBuq4df8KB/E/yIWIPFvZUU2D7OqfGLxGtXMt3fDR8=
-SIZE (dwz-0.14.tar.gz) = 186623
+SHA256 (dwz-0.15.tar.gz) = 7VnGEuIEFeaX+8RRH1J+91cAe8VvoalU5JrKHans+0Q=
+SIZE (dwz-0.15.tar.gz) = 192777
Index: patches/patch-Makefile
===================================================================
RCS file: /cvs/ports/devel/dwz/patches/patch-Makefile,v
retrieving revision 1.3
diff -u -p -r1.3 patch-Makefile
--- patches/patch-Makefile      11 Mar 2022 18:50:00 -0000      1.3
+++ patches/patch-Makefile      29 Nov 2022 16:17:01 -0000
@@ -6,31 +6,76 @@ Convert to bsd make
 Index: Makefile
 --- Makefile.orig
 +++ Makefile
-@@ -1,20 +1,16 @@
+@@ -1,51 +1,21 @@
 -ifneq ($(srcdir),)
 -VPATH = $(srcdir)
 -else
 -srcdir=$(shell pwd)
 -endif
+-
 -CFLAGS = -O2 -g
 -DWZ_VERSION := $(shell cat $(srcdir)/VERSION)
--override CFLAGS += -Wall -W -D_FILE_OFFSET_BITS=64 \
--      -DDWZ_VERSION='"$(DWZ_VERSION)"' $(shell cat $(srcdir)/COPYRIGHT_YEARS)
+-CFLAGS_VERSION = -DDWZ_VERSION='"$(DWZ_VERSION)"'
+-CFLAGS_COPYRIGHT = $(shell cat $(srcdir)/COPYRIGHT_YEARS)
+-CFLAGS_COMMON = -Wall -W -D_FILE_OFFSET_BITS=64
+-XXH_PROG = "\#define XXH_INLINE_ALL 1\n\#include <xxhash.h>\n"
+-XXH_INLINE_ALL_WORKS = $(shell printf $(XXH_PROG) \
+-              | $(CC) -xc -c - -o /dev/null 2>/dev/null \
+-              && echo -n 1)
+-ifeq "$(XXH_INLINE_ALL_WORKS)" "1"
+-  CFLAGS_COMMON += -DXXH_INLINE_ALL=1
+-endif
+-
+-override CFLAGS += $(CFLAGS_COMMON) $(CFLAGS_VERSION) $(CFLAGS_COPYRIGHT)
+-
 +srcdir = .
 +CFLAGS ?= -O2 -g
 +DWZ_VERSION != cat $(srcdir)/VERSION
 +CFLAGS += -DDWZ_VERSION='"$(DWZ_VERSION)"'
 +CFLAGS !+= cat $(srcdir)/COPYRIGHT_YEARS
++CFLAGS += -D_FILE_OFFSET_BITS=64
++CFLAGS += -DXXH_INLINE_ALL=1
  prefix = /usr
  exec_prefix = $(prefix)
  bindir = $(exec_prefix)/bin
  datarootdir = $(prefix)/share
  mandir = $(datarootdir)/man
--OBJECTS = dwz.o hashtab.o sha1.o dwarfnames.o
-+OBJECTS = dwz.o hashtab.o sha1.o dwarfnames.o obstack.o
+-OBJECTS = args.o dwz.o hashtab.o pool.o sha1.o dwarfnames.o
++OBJECTS = args.o dwz.o hashtab.o pool.o sha1.o dwarfnames.o obstack.o
+ LIBS=-lelf
+-ifneq "$(XXH_INLINE_ALL_WORKS)" "1"
+-LIBS += -lxxhash
+-endif
  dwz: $(OBJECTS)
--      $(CC) $(LDFLAGS) -o $@ $^ -lelf
-+      $(CC) $(LDFLAGS) -o $@ $(OBJECTS) -lelf
+-      $(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
+-args.o: native.o
+-args.o: CFLAGS_FOR_SOURCE = \
+-      -DNATIVE_ENDIAN_VAL=$(NATIVE_ENDIAN_VAL) \
+-      -DNATIVE_POINTER_SIZE=$(NATIVE_POINTER_SIZE)
+-NATIVE_ENDIAN=$(shell readelf -h native.o \
+-      | grep Data \
+-      | sed 's/.*, //;s/ endian//')
+-NATIVE_ENDIAN_LITTLE=$(findstring $(NATIVE_ENDIAN),$(findstring 
little,$(NATIVE_ENDIAN)))
+-NATIVE_ENDIAN_BIG=$(findstring $(NATIVE_ENDIAN),$(findstring 
big,$(NATIVE_ENDIAN)))
+-NATIVE_ENDIAN_VAL=$(if $(NATIVE_ENDIAN_LITTLE),ELFDATA2LSB,$(if 
$(NATIVE_ENDIAN_BIG),ELFDATA2MSB,ELFDATANONE))
+-NATIVE_POINTER_SIZE=$(shell readelf -wi native.o \
+-      | grep "Pointer Size:" \
+-      | sed 's/.*: *//')
++      $(CC) $(LDFLAGS) -o $@ $(OBJECTS) $(LIBS)
+ %.o: %.c
+-      $(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $< $(CFLAGS_FOR_SOURCE)
++      $(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
  install: dwz
        install -D dwz $(DESTDIR)$(bindir)/dwz
        install -D -m 644 $(srcdir)/dwz.1 $(DESTDIR)$(mandir)/man1/dwz.1
+@@ -53,10 +23,6 @@ clean:
+       rm -f $(OBJECTS) *~ core* dwz $(TEST_EXECS) $(DWZ_TEST_OBJECTS) \
+         dwz.log dwz.sum native.c native.o
+       rm -Rf testsuite-bin tmp.*
+-native.c:
+-      echo "int main (void) { return 0; }" > $@
+-native.o: native.c
+-      $(CC) -o $@ $< -c -g
+ 
+ PWD:=$(shell pwd -P)
+ 
Index: patches/patch-args_c
===================================================================
RCS file: patches/patch-args_c
diff -N patches/patch-args_c
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-args_c        29 Nov 2022 16:17:01 -0000
@@ -0,0 +1,32 @@
+Correctly get processors online.
+
+Index: args.c
+--- args.c.orig
++++ args.c
+@@ -25,14 +25,15 @@
+ #include <stdio.h>
+ #include <string.h>
+ #include <stdlib.h>
+-#include <error.h>
++#include <unistd.h>
+ #include <gelf.h>
+-#include <sys/sysinfo.h>
+ 
+ #include "args.h"
+ 
+ #include "util.h"
+ 
++extern void error(int, int, const char *, ...);
++
+ #if DEVEL
+ int tracing;
+ int ignore_size;
+@@ -735,7 +736,7 @@ parse_args (int argc, char *argv[], bool *hardlink, co
+ 
+   if (max_forks == -1)
+     {
+-      long nprocs = get_nprocs ();
++      long nprocs = sysconf(_SC_NPROCESSORS_ONLN);
+       /* Be conservative on max forks: 4 procs may be actually be 4 SMT
+        threads with only 2 cores.  */
+       max_forks = nprocs / 2;
Index: patches/patch-dwz_c
===================================================================
RCS file: /cvs/ports/devel/dwz/patches/patch-dwz_c,v
retrieving revision 1.3
diff -u -p -r1.3 patch-dwz_c
--- patches/patch-dwz_c 11 Mar 2022 18:50:00 -0000      1.3
+++ patches/patch-dwz_c 29 Nov 2022 16:17:01 -0000
@@ -1,39 +1,46 @@
 Create error() function, Linux-ism.
 Our libelf doesn't have some of these defines.
 obstack is not a system header
+xxhash is not a system header
 
 Index: dwz.c
 --- dwz.c.orig
 +++ dwz.c
-@@ -20,11 +20,11 @@
+@@ -20,13 +20,13 @@
  
  #include <assert.h>
  #include <errno.h>
 -#include <error.h>
  #include <fcntl.h>
- #include <getopt.h>
  #include <setjmp.h>
  #include <string.h>
-+#include <stdarg.h>
  #include <stdbool.h>
  #include <stddef.h>
  #include <stdint.h>
-@@ -36,7 +36,7 @@
- #include <sys/types.h>
++#include <stdarg.h>
+ #include <inttypes.h>
+ #include <stdlib.h>
+ #include <unistd.h>
+@@ -36,10 +36,10 @@
  #include <sys/times.h>
+ #include <sys/wait.h>
  
 -#include <obstack.h>
 +#include "obstack.h"
  
  #include <gelf.h>
+-#include <xxhash.h>
++#include "xxhash.h"
+ 
  #include "dwarf2.h"
-@@ -165,6 +165,29 @@ report_progress (void)
+ #include "hashtab.h"
+@@ -216,6 +216,29 @@ report_progress (void)
  /* Where to longjmp on OOM.  */
  static jmp_buf oom_buf;
  
 +/* error () wrapper based on the Linux manual page at
 +   http://man7.org/linux/man-pages/man3/error.3.html.  */
-+static void
++void
 +error (int status, int errnum, const char *fmt, ...)
 +{
 +  va_list ap;
@@ -57,7 +64,7 @@ Index: dwz.c
  /* Handle OOM situation.  If handling more than one file, we might
     just fail to handle some large file due to OOM, but could very well
     handle other smaller files after it.  */
-@@ -13723,7 +13746,7 @@ fdopen_dso (int fd, const char *name)
+@@ -13675,7 +13698,7 @@ fdopen_dso (int fd, const char *name)
    int i;
    DSO *dso = NULL;
  
@@ -66,7 +73,7 @@ Index: dwz.c
    if (elf == NULL)
      {
        error (0, 0, "cannot open ELF file: %s", elf_errmsg (-1));
-@@ -13761,7 +13784,7 @@ fdopen_dso (int fd, const char *name)
+@@ -13713,7 +13736,7 @@ fdopen_dso (int fd, const char *name)
        goto error_out;
      }
  
@@ -75,7 +82,7 @@ Index: dwz.c
  
    memset (dso, 0, sizeof(DSO));
    dso->elf = elf;
-@@ -14258,7 +14281,7 @@ write_dso (DSO *dso, const char *file, struct stat *st
+@@ -14210,7 +14233,7 @@ write_dso (DSO *dso, const char *file, struct stat *st
        free (shstrtab);
        return 1;
      }
@@ -84,7 +91,7 @@ Index: dwz.c
    for (i = 0; i < ehdr.e_phnum; ++i)
      {
        GElf_Phdr *phdr, phdr_mem;
-@@ -14331,7 +14354,7 @@ write_dso (DSO *dso, const char *file, struct stat *st
+@@ -14283,7 +14306,7 @@ write_dso (DSO *dso, const char *file, struct stat *st
        }
      }
  
@@ -93,7 +100,7 @@ Index: dwz.c
      {
        error (0, 0, "%s: elf_update failed", dso->filename);
        unlink (file);
-@@ -15917,7 +15940,7 @@ optimize_multifile (unsigned int *die_count)
+@@ -15902,7 +15925,7 @@ optimize_multifile (unsigned int *die_count)
        error (0, 0, "Could not create new ELF headers");
        goto fail;
      }
@@ -102,7 +109,7 @@ Index: dwz.c
  
    sha1_init_ctx (&ctx);
    for (i = 0; debug_sections[i].name; i++)
-@@ -16010,7 +16033,7 @@ optimize_multifile (unsigned int *die_count)
+@@ -15995,7 +16018,7 @@ optimize_multifile (unsigned int *die_count)
    data->d_off = 0;
    data->d_align = 1;
  

Reply via email to