25661054 Update pigz to version 2.3.4
authorRich Burridge <rich.burridge@oracle.com>
Tue, 14 Mar 2017 14:25:23 -0700
changeset 7750 dd29141c63d5
parent 7749 a43ac3f5a0f5
child 7751 bca17dc2b15e
25661054 Update pigz to version 2.3.4
components/pigz/Makefile
components/pigz/patches/201_no-lpthread.patch
components/pigz/patches/202_index.patch
components/pigz/patches/203_dir_traversal.patch
components/pigz/patches/300_system-test.patch
components/pigz/test/results-64.master
--- a/components/pigz/Makefile	Tue Mar 14 13:30:05 2017 -0700
+++ b/components/pigz/Makefile	Tue Mar 14 14:25:23 2017 -0700
@@ -26,14 +26,14 @@
 include ../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		pigz
-COMPONENT_VERSION=	2.3.3
+COMPONENT_VERSION=	2.3.4
 COMPONENT_PROJECT_URL=	http://zlib.net/pigz/
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:4e8b67b432ce7907575a549f3e1cac4709781ba0f6b48afea9f59369846b509c
+    sha256:6f031fa40bc15b1d80d502ff91f83ba14f4b079e886bfb83221374f7bf5c8f9a
 COMPONENT_ARCHIVE_URL=	$(COMPONENT_PROJECT_URL)$(COMPONENT_ARCHIVE)
 COMPONENT_ANITYA_ID=	3642
 
-TPNO=			31875
+TPNO=			34040
 
 BUILD_STYLE= justmake
 INSTALL_TARGET= build
--- a/components/pigz/patches/201_no-lpthread.patch	Tue Mar 14 13:30:05 2017 -0700
+++ b/components/pigz/patches/201_no-lpthread.patch	Tue Mar 14 14:25:23 2017 -0700
@@ -1,20 +1,14 @@
-# HG changeset patch
-# User Michael Gerdts <[email protected]>
-# Date 1412623238 25200
-#      Mon Oct 06 12:20:38 2014 -0700
-# Node ID 08d5c81201b3215699b91cdc9b17f60c4bd86e7e
-# Parent  1debb63439545fd0b30153eb68e884623d06c531
-do not link with libpthread - developed by Oracle
+Do not link with libpthread - developed by Oracle
 Not submitted upstream: specific to Solaris but no Solaris Makefile upstream
 
---- pigz-2.3.3/Makefile.orig	2016-09-26 10:42:09.822806707 +0000
-+++ pigz-2.3.3/Makefile	2016-09-26 10:51:57.724668109 +0000
-@@ -5,7 +5,7 @@
+--- pigz-2.3.4/Makefile.orig	2017-03-02 13:22:22.763647319 +0000
++++ pigz-2.3.4/Makefile	2017-03-02 13:23:21.953773653 +0000
+@@ -1,7 +1,7 @@
+ CC=cc
+ CFLAGS=-O3 -Wall -Wextra
+ LDFLAGS=
+-LIBS=-lm -lpthread -lz
++LIBS=-lm -lz
+ ZOPFLI=zopfli/src/zopfli/
  # use gcc and gmake on Solaris
  
- pigz: pigz.o yarn.o try.o ${ZOPFLI}deflate.o ${ZOPFLI}blocksplitter.o ${ZOPFLI}tree.o ${ZOPFLI}lz77.o ${ZOPFLI}cache.o ${ZOPFLI}hash.o ${ZOPFLI}util.o ${ZOPFLI}squeeze.o ${ZOPFLI}katajainen.o
--	$(CC) $(LDFLAGS) -o pigz $^ -lpthread -lm
-+	$(CC) $(LDFLAGS) -o pigz $^ -lm
- 	ln -f pigz unpigz
- 
- pigz.o: pigz.c yarn.h try.h ${ZOPFLI}deflate.h ${ZOPFLI}util.h
--- a/components/pigz/patches/202_index.patch	Tue Mar 14 13:30:05 2017 -0700
+++ b/components/pigz/patches/202_index.patch	Tue Mar 14 14:25:23 2017 -0700
@@ -1,11 +1,11 @@
 Support for parallel decompression.
 Written by Mihael Gerdts <[email protected]>
 
-These changes should be sent upstream.
+These changes have been sent upstream.
 
---- pigz-2.3.3/Makefile.orig	2016-09-26 11:06:54.000000000 +0000
-+++ pigz-2.3.3/Makefile	2016-09-26 13:16:05.000000000 +0000
-@@ -70,6 +70,15 @@
+--- pigz-2.3.4/Makefile.orig	2017-03-02 13:32:39.612576924 +0000
++++ pigz-2.3.4/Makefile	2017-03-02 13:32:51.018629392 +0000
+@@ -71,6 +71,15 @@
  	  compress -f < pigz.c | ./unpigz | cmp - pigz.c ;\
  	fi
  	@rm -f pigz.c.gz pigz.c.zz pigz.c.zip
@@ -21,11 +21,11 @@
  
  tests: dev test
  	./pigzn -kf pigz.c ; ./pigz -t pigz.c.gz
---- pigz-2.3.3/pigz.1.orig	2016-09-26 11:07:52.000000000 +0000
-+++ pigz-2.3.3/pigz.1	2016-09-26 11:12:03.000000000 +0000
-@@ -185,6 +185,14 @@
+--- pigz-2.3.4/pigz.1.orig	2017-03-02 13:33:31.420259920 +0000
++++ pigz-2.3.4/pigz.1	2017-03-02 13:33:41.537522623 +0000
+@@ -188,6 +188,14 @@
  .B -V --version
- Show the version of pigz.
+ Show the version of pigz. -vV also shows the zlib version.
  .TP
 +.B -X --index file
 +During compression, create an index that can be used for parallel
@@ -38,9 +38,9 @@
  .B -z --zlib
  Compress to zlib (.zz) instead of gzip format.
  .TP
---- pigz-2.3.3/pigz.c.orig	2016-09-26 11:07:43.000000000 +0000
-+++ pigz-2.3.3/pigz.c	2016-09-27 08:09:45.122201079 +0000
-@@ -218,14 +218,27 @@
+--- pigz-2.3.4/pigz.c.orig	2017-03-02 13:26:45.154085766 +0000
++++ pigz-2.3.4/pigz.c	2017-03-02 13:29:35.979415416 +0000
+@@ -224,14 +224,27 @@
     the --independent or -i option, so that the blocks can be decompressed
     independently for partial error recovery or for random access.
  
@@ -73,7 +73,7 @@
     pigz requires zlib 1.2.1 or later to allow setting the dictionary when doing
     raw deflate.  Since zlib 1.2.3 corrects security vulnerabilities in zlib
     version 1.2.1 and 1.2.2, conditionals check for zlib 1.2.3 or later during
-@@ -260,7 +273,7 @@
+@@ -266,7 +279,7 @@
     jobs until instructed to return.  When a job is pulled, the dictionary, if
     provided, will be loaded into the deflate engine and then that input buffer
     is dropped for reuse.  Then the input data is compressed into an output
@@ -82,7 +82,7 @@
     is then put into the write job list, sorted by the sequence number. The
     compress thread however continues to calculate the check value on the input
     data, either a CRC-32 or Adler-32, possibly in parallel with the write
-@@ -286,13 +299,14 @@
+@@ -292,13 +305,14 @@
     can't get way ahead of the write thread and build up a large backlog of
     unwritten compressed data.  The write thread will write the compressed data,
     drop the output buffer, and then wait for the check value to be unlocked
@@ -104,7 +104,7 @@
  
     The input and output buffers are reused through their collection in pools.
     Each buffer has a use count, which when decremented to zero returns the
-@@ -341,6 +355,9 @@
+@@ -347,6 +361,9 @@
  #if __STDC_VERSION__-0 >= 199901L || __GNUC__-0 >= 3
  #  include <inttypes.h> /* intmax_t */
  #endif
@@ -112,9 +112,9 @@
 +#include <sys/mman.h>   /* mmap() */
 +#include <netinet/in.h> /* htonl() */
  
- #ifdef DEBUG
+ #ifdef PIGZ_DEBUG
  #  if defined(__APPLE__)
-@@ -473,9 +490,11 @@
+@@ -490,9 +507,11 @@
      char *prog;             /* name by which pigz was invoked */
      int ind;                /* input file descriptor */
      int outd;               /* output file descriptor */
@@ -126,16 +126,7 @@
      int verbosity;          /* 0 = quiet, 1 = normal, 2 = verbose, 3 = trace */
      int headis;             /* 1 to store name, 2 to store date, 3 both */
      int pipeout;            /* write output to stdout even if file */
-@@ -620,7 +639,7 @@
- 
- local void yarn_free(void *ptr)
- {
--    return free_track(&mem_track, ptr);
-+    free_track(&mem_track, ptr);
- }
- #endif
- 
-@@ -820,12 +839,15 @@
+@@ -837,12 +856,15 @@
  
  #endif
  
@@ -151,7 +142,7 @@
      if (g.outd != -1 && g.outd != 1) {
          unlink(g.outf);
          RELEASE(g.outf);
-@@ -951,11 +973,23 @@
+@@ -968,11 +990,23 @@
      return dos;
  }
  
@@ -176,7 +167,7 @@
  /* write a gzip, zlib, or zip header using the information in the globals */
  local unsigned long put_header(void)
  {
-@@ -1253,7 +1287,7 @@
+@@ -1272,7 +1306,7 @@
  
  /* get a space from a pool -- the use count is initially set to one, so there
     is no need to call use_space() for the first use */
@@ -185,7 +176,7 @@
  {
      struct space *space;
  
-@@ -1266,6 +1300,15 @@
+@@ -1285,6 +1319,15 @@
      if (pool->head != NULL) {
          space = pool->head;
          possess(space->use);
@@ -201,7 +192,7 @@
          pool->head = space->next;
          twist(pool->have, BY, -1);      /* one less in pool */
          twist(space->use, TO, 1);       /* initially one user */
-@@ -1281,13 +1324,18 @@
+@@ -1300,13 +1343,18 @@
      release(pool->have);
      space = alloc(NULL, sizeof(struct space));
      space->use = new_lock(1);           /* initially one user */
@@ -222,7 +213,7 @@
  /* increase the size of the buffer in space */
  local void grow_space(struct space *space)
  {
-@@ -1354,17 +1402,35 @@
+@@ -1373,17 +1421,35 @@
      return count;
  }
  
@@ -259,7 +250,7 @@
  struct job {
      long seq;                   /* sequence number */
      int more;                   /* true if this is not the last chunk */
-@@ -1411,6 +1477,7 @@
+@@ -1430,6 +1496,7 @@
      new_pool(&out_pool, OUTPOOL(g.block), -1);
      new_pool(&dict_pool, DICT, -1);
      new_pool(&lens_pool, g.block >> (RSYNCBITS - 1), -1);
@@ -267,7 +258,7 @@
  }
  
  /* command the compress threads to all return, then join them all (call from
-@@ -1447,6 +1514,8 @@
+@@ -1466,6 +1533,8 @@
      Trace(("-- freed %d output buffers", caught));
      caught = free_pool(&in_pool);
      Trace(("-- freed %d input buffers", caught));
@@ -276,7 +267,7 @@
      free_lock(write_first);
      free_lock(compress_have);
      compress_have = NULL;
-@@ -1710,18 +1779,483 @@
+@@ -1738,18 +1807,483 @@
      }
  }
  
@@ -762,7 +753,7 @@
      unsigned long check;            /* check value of uncompressed data */
      ball_t err;                     /* error information from throw() */
  
-@@ -1747,23 +2281,27 @@
+@@ -1775,23 +2309,27 @@
              /* update lengths, save uncompressed length for COMB */
              more = job->more;
              len = job->in->len;
@@ -794,7 +785,7 @@
              /* free the job */
              free_lock(job->calc);
              FREE(job);
-@@ -1845,7 +2383,7 @@
+@@ -1873,7 +2411,7 @@
      setup_jobs();
  
      /* start write thread */
@@ -803,7 +794,7 @@
  
      /* read from input and start compress threads (write thread will pick up
         the output of the compress threads) */
-@@ -2303,7 +2841,7 @@
+@@ -2336,7 +2874,7 @@
  #ifndef NOTHREAD
      /* if first time in or procs == 1, read a buffer to have something to
         return, otherwise wait for the previous read job to complete */
@@ -812,7 +803,7 @@
          /* if first time, fire up the read thread, ask for a read */
          if (g.in_which == -1) {
              g.in_which = 1;
-@@ -2404,12 +2942,6 @@
+@@ -2437,12 +2975,6 @@
          g.in_next += togo; \
      } while (0)
  
@@ -825,7 +816,7 @@
  /* convert MS-DOS date and time to a Unix time, assuming current timezone
     (you got a better idea?) */
  local time_t dos2time(unsigned long dos)
-@@ -3033,6 +3565,73 @@
+@@ -3066,6 +3598,73 @@
      return 0;
  }
  
@@ -899,7 +890,7 @@
  /* inflate for decompression or testing -- decompress from ind to outd unless
     decode != 1, in which case just test ind, and then also list if list != 0;
     look for and decode multiple, concatenated gzip and/or zlib streams;
-@@ -3040,10 +3639,8 @@
+@@ -3073,10 +3672,8 @@
  local void infchk(void)
  {
      int ret, cont, was;
@@ -911,7 +902,7 @@
      off_t clen;
  
      cont = 0;
-@@ -3080,72 +3677,7 @@
+@@ -3113,72 +3710,7 @@
          /* compute compressed data length */
          clen = g.in_tot - g.in_left;
  
@@ -985,7 +976,7 @@
  
          /* show file information if requested */
          if (g.list) {
-@@ -3169,6 +3701,231 @@
+@@ -3202,6 +3734,231 @@
          complain("warning: %s: trailing junk was ignored", g.inf);
  }
  
@@ -1217,7 +1208,7 @@
  /* --- decompress Unix compress (LZW) input --- */
  
  /* Type for accumulating bits.  23 bits will be used to accumulate up to 16-bit
-@@ -3576,7 +4333,7 @@
+@@ -3614,7 +4371,7 @@
          if (g.decode == 2) {
              try {
                  if (method == 8)
@@ -1226,7 +1217,7 @@
                  else {
                      unlzw();
                      if (g.list) {
-@@ -3649,19 +4406,8 @@
+@@ -3687,19 +4444,8 @@
  
          /* if exists and not -f, give user a chance to overwrite */
          if (g.outd < 0 && errno == EEXIST && isatty(0) && g.verbosity) {
@@ -1248,7 +1239,7 @@
          }
  
          /* if exists and no overwrite, report and go on to next */
-@@ -3684,10 +4430,11 @@
+@@ -3722,10 +4468,11 @@
      /* process ind to outd */
      if (g.verbosity > 1)
          fprintf(stderr, "%s to %s ", g.inf, g.outf);
@@ -1261,7 +1252,7 @@
              else if (method == 257)
                  unlzw();
              else
-@@ -3708,8 +4455,14 @@
+@@ -3746,8 +4493,14 @@
          }
      }
  #ifndef NOTHREAD
@@ -1277,7 +1268,7 @@
  #endif
      else
          single_compress(0);
-@@ -3718,6 +4471,10 @@
+@@ -3756,6 +4509,10 @@
          fflush(stderr);
      }
  
@@ -1288,7 +1279,7 @@
      /* finish up, copy attributes, set times, delete original */
      if (g.ind != 0)
          close(g.ind);
-@@ -3781,6 +4538,9 @@
+@@ -3819,6 +4576,9 @@
  "  -v, --verbose        Provide more verbose output",
  #endif
  "  -V  --version        Show the version of pigz",
@@ -1298,7 +1289,7 @@
  "  -z, --zlib           Compress to zlib (.zz) instead of gzip format",
  "  --                   All arguments after \"--\" are treated as files"
  };
-@@ -3859,11 +4619,11 @@
+@@ -3897,11 +4657,11 @@
      {"LZW", "Z"}, {"ascii", "a"}, {"best", "9"}, {"bits", "Z"},
      {"blocksize", "b"}, {"decompress", "d"}, {"fast", "1"}, {"first", "F"},
      {"force", "f"}, {"help", "h"}, {"independent", "i"}, {"iterations", "I"},
@@ -1315,7 +1306,7 @@
      {"version", "V"}, {"zip", "K"}, {"zlib", "z"}};
  #define NLOPTS (sizeof(longopts) / (sizeof(char *) << 1))
  
-@@ -3903,7 +4663,7 @@
+@@ -3941,7 +4701,7 @@
  
      /* if no argument or dash option, check status of get */
      if (get && (arg == NULL || *arg == '-')) {
@@ -1324,15 +1315,15 @@
          throw(EINVAL, "missing parameter after %s", bad);
      }
      if (arg == NULL)
-@@ -3972,6 +4732,7 @@
-             case 'S':  get = 3;  break;
-             case 'T':  g.headis &= ~0xa;  break;
-             case 'V':  fputs(VERSION, stderr);  exit(0);
+@@ -4014,6 +4774,7 @@
+                 if (g.verbosity > 1)
+                     fprintf(stderr, "zlib %s\n", zlibVersion());
+                 exit(0);
 +            case 'X':  g.setdict = 0; get = 6;  break;
              case 'Z':
                  throw(EINVAL, "invalid option: LZW output not supported: %s",
                        bad);
-@@ -4001,7 +4762,7 @@
+@@ -4043,7 +4804,7 @@
              return 0;
      }
  
@@ -1341,7 +1332,7 @@
      if (get) {
          size_t n;
  
-@@ -4036,6 +4797,8 @@
+@@ -4078,6 +4839,8 @@
              g.zopts.numiterations = num(arg);   /* optimization iterations */
          else if (get == 5)
              g.zopts.blocksplittingmax = num(arg);   /* max block splits */
--- a/components/pigz/patches/203_dir_traversal.patch	Tue Mar 14 13:30:05 2017 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-Fix bug in directory traversal.
-
-This off-by-one error resulted in useless reexamination of the
-same files by descending twice into each directory.
-
-See:
-
-https://github.com/madler/pigz/commit/06b5347948ff2d675ebbeb943941e2b7610082f3
-
-This fix has already been integrated upstream.
-
---- pigz-2.3.3/pigz.c.orig	2016-10-03 08:06:26.655873581 +0000
-+++ pigz-2.3.3/pigz.c	2016-10-03 08:07:23.222592284 +0000
-@@ -4268,7 +4268,7 @@
- 
-             /* run process() for each entry in the directory */
-             base = len && g.inf[len - 1] != (unsigned char)'/' ?
--                   vstrcpy(&g.inf, &g.inz, len, "/") : len;
-+                   vstrcpy(&g.inf, &g.inz, len, "/") - 1 : len;
-             for (off = 0; roll[off]; off += strlen(roll + off) + 1) {
-                 vstrcpy(&g.inf, &g.inz, base, roll + off);
-                 process(g.inf);
--- a/components/pigz/patches/300_system-test.patch	Tue Mar 14 13:30:05 2017 -0700
+++ b/components/pigz/patches/300_system-test.patch	Tue Mar 14 14:25:23 2017 -0700
@@ -1,15 +1,15 @@
 Developed internally, for system-test; not suitable for upstream.
 
---- pigz-2.3.3/Makefile.orig	2016-09-26 13:21:02.245052682 +0000
-+++ pigz-2.3.3/Makefile	2016-09-26 13:16:33.808207549 +0000
+--- pigz-2.3.4/Makefile.orig	2017-03-02 13:38:09.343094775 +0000
++++ pigz-2.3.4/Makefile	2017-03-02 13:48:28.190657548 +0000
 @@ -1,5 +1,6 @@
  CC=cc
  CFLAGS=-O3 -Wall -Wextra
 +TARGETDIR ?= $(shell pwd)
- LDFLAGS=-lz
+ LDFLAGS=
+ LIBS=-lm -lz
  ZOPFLI=zopfli/src/zopfli/
- # use gcc and gmake on Solaris
-@@ -52,36 +53,36 @@
+@@ -53,36 +54,36 @@
  tryn.o: try.c try.h
  	$(CC) $(CFLAGS) -DDEBUG -DNOTHREAD -g -c -o tryn.o try.c
  
@@ -48,15 +48,17 @@
  	fi
  	@rm -f pigz.c.gz pigz.c.zz pigz.c.zip
  	@rm -rf d/1 d/2
- 	(mkdir -p d/1; cd d/1; tar xzf ../../../../pigz-2.3.3.tar.gz; \
+-	(mkdir -p d/1; cd d/1; tar xzf ../../../../pigz-2.3.3.tar.gz; \
 -	  cd ..; cp -pr 1 2; ../pigz -rp 4 --index %z 1; \
 -	  ../pigz -drp 4 --index %z 1; diff -r 1 2)
++	(mkdir -p d/1; cd d/1; tar xzf ../../../../pigz-2.3.4.tar.gz; \
 +	  cd ..; cp -pr 1 2; $(TARGETDIR)/pigz -rp 4 --index %z 1; \
 +	  $(TARGETDIR)/pigz -drp 4 --index %z 1; diff -r 1 2)
  	@rm -rf d/1 d/2
- 	(mkdir -p d/1; cd d/1; tar xzf ../../../../pigz-2.3.3.tar.gz; \
+-	(mkdir -p d/1; cd d/1; tar xzf ../../../../pigz-2.3.3.tar.gz; \
 -	  cd ..; cp -pr 1 2; ../pigz -zrp 4 -X %f.idx 1; \
 -	  ../pigz -dzrp 4 -X %f.idx 1; diff -r 1 2)
++	(mkdir -p d/1; cd d/1; tar xzf ../../../../pigz-2.3.4.tar.gz; \
 +	  cd ..; cp -pr 1 2; $(TARGETDIR)/pigz -zrp 4 -X %f.idx 1; \
 +	  $(TARGETDIR)/pigz -dzrp 4 -X %f.idx 1; diff -r 1 2)
  	@rm -rf d/1 d/2
--- a/components/pigz/test/results-64.master	Tue Mar 14 13:30:05 2017 -0700
+++ b/components/pigz/test/results-64.master	Tue Mar 14 14:25:23 2017 -0700
@@ -11,17 +11,17 @@
 (printf "w" | gzip ; printf "xy") | $(@D)/pigz -cdf | wc -c | test `cat` -eq 3
 (printf "w" | gzip ; printf "xyz") | $(@D)/pigz -cdf | wc -c | test `cat` -eq 4
 compress -f < pigz.c | $(@D)/unpigz | cmp - pigz.c
-(mkdir -p d/1; cd d/1; tar xzf ../../../../pigz-2.3.3.tar.gz; \
+(mkdir -p d/1; cd d/1; tar xzf ../../../../pigz-2.3.4.tar.gz; \
   cd ..; cp -pr 1 2; $(@D)/pigz -rp 4 --index %z 1; \
   $(@D)/pigz -drp 4 --index %z 1; diff -r 1 2)
-Common subdirectories: 1/pigz-2.3.3 and 2/pigz-2.3.3
-Common subdirectories: 1/pigz-2.3.3/zopfli and 2/pigz-2.3.3/zopfli
-Common subdirectories: 1/pigz-2.3.3/zopfli/src and 2/pigz-2.3.3/zopfli/src
-Common subdirectories: 1/pigz-2.3.3/zopfli/src/zopfli and 2/pigz-2.3.3/zopfli/src/zopfli
-(mkdir -p d/1; cd d/1; tar xzf ../../../../pigz-2.3.3.tar.gz; \
+Common subdirectories: 1/pigz-2.3.4 and 2/pigz-2.3.4
+Common subdirectories: 1/pigz-2.3.4/zopfli and 2/pigz-2.3.4/zopfli
+Common subdirectories: 1/pigz-2.3.4/zopfli/src and 2/pigz-2.3.4/zopfli/src
+Common subdirectories: 1/pigz-2.3.4/zopfli/src/zopfli and 2/pigz-2.3.4/zopfli/src/zopfli
+(mkdir -p d/1; cd d/1; tar xzf ../../../../pigz-2.3.4.tar.gz; \
   cd ..; cp -pr 1 2; $(@D)/pigz -zrp 4 -X %f.idx 1; \
   $(@D)/pigz -dzrp 4 -X %f.idx 1; diff -r 1 2)
-Common subdirectories: 1/pigz-2.3.3 and 2/pigz-2.3.3
-Common subdirectories: 1/pigz-2.3.3/zopfli and 2/pigz-2.3.3/zopfli
-Common subdirectories: 1/pigz-2.3.3/zopfli/src and 2/pigz-2.3.3/zopfli/src
-Common subdirectories: 1/pigz-2.3.3/zopfli/src/zopfli and 2/pigz-2.3.3/zopfli/src/zopfli
+Common subdirectories: 1/pigz-2.3.4 and 2/pigz-2.3.4
+Common subdirectories: 1/pigz-2.3.4/zopfli and 2/pigz-2.3.4/zopfli
+Common subdirectories: 1/pigz-2.3.4/zopfli/src and 2/pigz-2.3.4/zopfli/src
+Common subdirectories: 1/pigz-2.3.4/zopfli/src/zopfli and 2/pigz-2.3.4/zopfli/src/zopfli