pkgsrc-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: pkg/41963: archivers/xz compilation errors (NetBSD 4.0 / i386)

The following reply was made to PR pkg/41963; it has been noted by GNATS.

From: Robert Elz <kre%munnari.OZ.AU@localhost>
Subject: Re: pkg/41963: archivers/xz compilation errors (NetBSD 4.0 / i386) 
Date: Thu, 03 Sep 2009 23:58:01 +0700

   |    archivers/xz (xz-4.999.9beta) fails to compile on NetBSD 4.0 (i386).
   |    Problems relate to sysctl.
 When I submitted that PR, I marked it non-critical/medium, as to me,
 at the time, it was "just another package that didn't compile on
 an old NetBSD".
 But, it turns out that xz is needed in order to build lots of
 other packages (at least the fonts/tex-*-doc packages) so the
 status of this PR should really have been critical/high ...
 (Is there some way to get that altered, other than by e-mailing
 to gnats-admin and begging?)
 But since no-one seems to have wanted to claim responsibility for
 this (and yes, I know it is only  2 and a half days old...) I thought
 I could take a look and see if I can fix the problem.
 After looking at it, I cannot imagine that this thing (version 4.999.9beta)
 has ever compiled on any BSD version (or anything that uses sysctl rather
 than sysinfo to extract system data).   The fault (the one thing that is
 a real compilation error) was a missing arg to systcl() - and what's more,
 two different calls had it correct in one, and incorrect in the other, so
 it is not just that sysctl() has varied its arg list over time, or anything
 like that - it is a simple typo in one place.
 The patch below corrects the compilation error, also removes a comple of
 compilation warnings (also seen in the PR)  which were caused by passing
 NULL where 0 was expected (probably harmless on systems where sizeof(int)
 is the same as sizeof(void *) and most probably harmless where the latter
 is bigger, as this was the final arg, but still trivial to fix.
 The patch also corrects the way the result from sysctl was being
 tested, the core
        if (!sysctl(...
 is just weird - as I read its doc, sysctl can never return 0, it returns
 -1 if there is an error (normal) and the number of bytes copied out if
 it all works, unless sysctl() was somehow able to both succeed, and return
 no data, I can't imagine how a 0 result is possible (the buffer size for
 the result is > 0).
 Never mind.
 Apply the following patch in the archivers/xz directory, commit the
 results (which includes creating a new patches directory, with two
 patches in it), and after that, xz builds just fine.
 There's no need for a revbump, on any stsem where this compiled before,
 nothing will change, on any system where the new patches make a difference
 it could not possibly have compiled.
 diff -rN -u ../xz/distinfo ./distinfo
 --- ../xz/distinfo     2009-08-31 22:33:12.000000000 +0700
 +++ ./distinfo 2009-09-03 23:41:37.000000000 +0700
 @@ -3,3 +3,5 @@
  SHA1 (xz-4.999.9beta.tar.gz) = 9627de3997ddcdb02f8d327e84b2cf1941ecd230
  RMD160 (xz-4.999.9beta.tar.gz) = 1253ce01746c748c8549effa5041224044919c4e
  Size (xz-4.999.9beta.tar.gz) = 1037541 bytes
 +SHA1 (patch-aa) = 131a15878478612e282929b2af42fa47f3220ce3
 +SHA1 (patch-ab) = fd417519922aa963035482bf324c69f622b5131c
 diff -rN -u ../xz/patches/patch-aa ./patches/patch-aa
 --- ../xz/patches/patch-aa     1970-01-01 07:00:00.000000000 +0700
 +++ ./patches/patch-aa 2009-09-03 23:41:22.000000000 +0700
 @@ -0,0 +1,13 @@
 +--- src/common/cpucores.h-BAD 2009-08-27 15:37:12.000000000 +0000
 ++++ src/common/cpucores.h
 +@@ -40,7 +40,7 @@ cpucores(void)
 +      int name[2] = { CTL_HW, HW_NCPU };
 +      int cpus;
 +      size_t cpus_size = sizeof(cpus);
 +-     if (!sysctl(name, &cpus, &cpus_size, NULL, NULL)
 ++     if (sysctl(name, 2, &cpus, &cpus_size, NULL, 0) > 0
 +                      && cpus_size == sizeof(cpus) && cpus > 0)
 +              ret = (uint32_t)(cpus);
 + #endif
 diff -rN -u ../xz/patches/patch-ab ./patches/patch-ab
 --- ../xz/patches/patch-ab     1970-01-01 07:00:00.000000000 +0700
 +++ ./patches/patch-ab 2009-09-03 23:41:22.000000000 +0700
 @@ -0,0 +1,13 @@
 +--- src/common/physmem.h-BAD  2009-08-27 15:37:12.000000000 +0000
 ++++ src/common/physmem.h
 +@@ -104,7 +104,7 @@ physmem(void)
 +              uint64_t u64;
 +      } mem;
 +      size_t mem_ptr_size = sizeof(mem.u64);
 +-     if (!sysctl(name, 2, &mem.u64, &mem_ptr_size, NULL, NULL)) {
 ++     if (sysctl(name, 2, &mem.u64, &mem_ptr_size, NULL, 0) > 0) {
 +              // IIRC, 64-bit "return value" is possible on some 64-bit
 +              // BSD systems even with HW_PHYSMEM (instead of HW_PHYSMEM64),
 +              // so support both.

Home | Main Index | Thread Index | Old Index