guix-patches
[Top][All Lists]
Advanced

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

[bug#29995] [PATCH 4/5] daemon: Make libbz2 an optional dependency.


From: Ludovic Courtès
Subject: [bug#29995] [PATCH 4/5] daemon: Make libbz2 an optional dependency.
Date: Fri, 5 Jan 2018 18:02:57 +0100

* config-daemon.ac: Don't bail out when libbz2 is missing.  Define
'HAVE_LIBBZ2' Automake conditional.
* nix/libstore/build.cc: Wrap relevant bits in '#if HAVE_BZLIB_H'.
* nix/libstore/globals.cc (Settings::Settings): 'logCompression'
defaults to COMPRESSION_GZIP when HAVE_BZLIB_H is false.
* nix/libstore/globals.hh (CompressionType): Make 'COMPRESSION_BZIP2'
conditional on HAVE_BZLIB_H.
* nix/local.mk (guix_register_LDADD, guix_daemon_LDADD): Add -lbz2 only
when HAVE_LIBBZ2.
* nix/nix-daemon/guix-daemon.cc (parse_opt): Ignore "bzip2" when not
HAVE_BZLIB_H.
---
 config-daemon.ac              | 12 +++++++-----
 nix/libstore/build.cc         | 15 ++++++++++++++-
 nix/libstore/globals.cc       |  4 ++++
 nix/libstore/globals.hh       |  7 +++++--
 nix/local.mk                  | 10 ++++++++--
 nix/nix-daemon/guix-daemon.cc |  2 ++
 6 files changed, 40 insertions(+), 10 deletions(-)

diff --git a/config-daemon.ac b/config-daemon.ac
index 59f6f2713..80d84cbdb 100644
--- a/config-daemon.ac
+++ b/config-daemon.ac
@@ -24,11 +24,12 @@ if test "x$guix_build_daemon" = "xyes"; then
   AC_CHECK_HEADERS([zlib.h], [true],
     [AC_MSG_ERROR([Guix requires zlib.  See http://www.zlib.net/.])])
 
-  dnl Look for libbz2, a required dependency.
-  AC_CHECK_LIB([bz2], [BZ2_bzWriteOpen], [true],
-    [AC_MSG_ERROR([Guix requires libbz2, which is part of bzip2.  See 
http://www.bzip.org/.])])
-  AC_CHECK_HEADERS([bzlib.h], [true],
-    [AC_MSG_ERROR([Guix requires libbz2, which is part of bzip2.  See 
http://www.bzip.org/.])])
+  dnl Look for libbz2, an optional dependency.
+  AC_CHECK_LIB([bz2], [BZ2_bzWriteOpen], [HAVE_LIBBZ2=yes], [HAVE_LIBBZ2=no])
+  if test "x$HAVE_LIBBZ2" = xyes; then
+    AC_CHECK_HEADERS([bzlib.h])
+    HAVE_LIBBZ2="$ac_cv_header_bzlib_h"
+  fi
 
   dnl Look for SQLite, a required dependency.
   PKG_CHECK_MODULES([SQLITE3], [sqlite3 >= 3.6.19])
@@ -169,6 +170,7 @@ if test "x$guix_build_daemon" = "xyes"; then
     [chmod +x nix/scripts/offload])
 fi
 
+AM_CONDITIONAL([HAVE_LIBBZ2], [test "x$HAVE_LIBBZ2" = "xyes"])
 AM_CONDITIONAL([BUILD_DAEMON], [test "x$guix_build_daemon" = "xyes"])
 AM_CONDITIONAL([BUILD_DAEMON_OFFLOAD],                 \
   [test "x$guix_build_daemon" = "xyes"                 \
diff --git a/nix/libstore/build.cc b/nix/libstore/build.cc
index 5bf3e3aac..275d6a5f7 100644
--- a/nix/libstore/build.cc
+++ b/nix/libstore/build.cc
@@ -32,7 +32,10 @@
 #include <grp.h>
 
 #include <zlib.h>
-#include <bzlib.h>
+
+#if HAVE_BZLIB_H
+# include <bzlib.h>
+#endif
 
 /* Includes required for chroot support. */
 #if HAVE_SYS_PARAM_H
@@ -746,7 +749,9 @@ private:
     /* File descriptor for the log file. */
     FILE * fLogFile;
     gzFile   gzLogFile;
+#if HAVE_BZLIB_H
     BZFILE * bzLogFile;
+#endif
     AutoCloseFD fdLogFile;
 
     /* Number of bytes received from the builder's stdout/stderr. */
@@ -895,7 +900,9 @@ DerivationGoal::DerivationGoal(const Path & drvPath, const 
StringSet & wantedOut
     , retrySubstitution(false)
     , fLogFile(0)
     , gzLogFile(0)
+#if HAVE_BZLIB_H
     , bzLogFile(0)
+#endif
     , useChroot(false)
     , buildMode(buildMode)
 {
@@ -2620,6 +2627,7 @@ Path DerivationGoal::openLogFile()
         return logFileName;
       }
 
+#if HAVE_BZLIB_H
       case COMPRESSION_BZIP2: {
         Path logFileName = (format("%1%/%2%.bz2") % dir % string(baseName, 
2)).str();
         AutoCloseFD fd = open(logFileName.c_str(), O_CREAT | O_WRONLY | 
O_TRUNC, 0666);
@@ -2635,6 +2643,7 @@ Path DerivationGoal::openLogFile()
 
         return logFileName;
       }
+#endif
 
       case COMPRESSION_NONE: {
         Path logFileName = (format("%1%/%2%") % dir % string(baseName, 
2)).str();
@@ -2657,12 +2666,14 @@ void DerivationGoal::closeLogFile()
        gzLogFile = NULL;
        if (err != Z_OK) throw Error(format("cannot close compressed log file 
(gzip error = %1%)") % err);
     }
+#if HAVE_BZLIB_H
     else if (bzLogFile) {
         int err;
         BZ2_bzWriteClose(&err, bzLogFile, 0, 0, 0);
         bzLogFile = 0;
         if (err != BZ_OK) throw Error(format("cannot close compressed log file 
(BZip2 error = %1%)") % err);
     }
+#endif
 
     if (fLogFile) {
         fclose(fLogFile);
@@ -2732,10 +2743,12 @@ void DerivationGoal::handleChildOutput(int fd, const 
string & data)
                count = gzwrite(gzLogFile, data.data(), data.size());
                if (count == 0) throw Error(format("cannot write to compressed 
log file (gzip error = %1%)") % gzerror(gzLogFile, &err));
            }
+#if HAVE_BZLIB_H
        } else if (bzLogFile) {
             int err;
             BZ2_bzWrite(&err, bzLogFile, (unsigned char *) data.data(), 
data.size());
             if (err != BZ_OK) throw Error(format("cannot write to compressed 
log file (BZip2 error = %1%)") % err);
+#endif
         } else if (fdLogFile != -1)
             writeFull(fdLogFile, data);
     }
diff --git a/nix/libstore/globals.cc b/nix/libstore/globals.cc
index 82d528dc9..4ab6c3a0f 100644
--- a/nix/libstore/globals.cc
+++ b/nix/libstore/globals.cc
@@ -45,7 +45,11 @@ Settings::Settings()
     useSshSubstituter = false;
     impersonateLinux26 = false;
     keepLog = true;
+#if HAVE_BZLIB_H
     logCompression = COMPRESSION_BZIP2;
+#else
+    logCompression = COMPRESSION_GZIP;
+#endif
     maxLogSize = 0;
     cacheFailure = false;
     pollInterval = 5;
diff --git a/nix/libstore/globals.hh b/nix/libstore/globals.hh
index 81cf2f52d..243993695 100644
--- a/nix/libstore/globals.hh
+++ b/nix/libstore/globals.hh
@@ -1,5 +1,6 @@
 #pragma once
 
+#include "config.h"
 #include "types.hh"
 
 #include <map>
@@ -11,8 +12,10 @@ namespace nix {
 enum CompressionType
 {
     COMPRESSION_NONE = 0,
-    COMPRESSION_GZIP = 1,
-    COMPRESSION_BZIP2 = 2
+    COMPRESSION_GZIP = 1
+#if HAVE_BZLIB_H
+    , COMPRESSION_BZIP2 = 2
+#endif
 };
 
 struct Settings {
diff --git a/nix/local.mk b/nix/local.mk
index d802da617..4452301c6 100644
--- a/nix/local.mk
+++ b/nix/local.mk
@@ -132,7 +132,7 @@ guix_daemon_CPPFLAGS =                              \
   -I$(top_srcdir)/%D%/libstore
 
 guix_daemon_LDADD =                            \
-  libstore.a libutil.a libformat.a -lz -lbz2   \
+  libstore.a libutil.a libformat.a -lz         \
   $(SQLITE3_LIBS) $(LIBGCRYPT_LIBS)
 
 guix_daemon_headers =                          \
@@ -149,9 +149,15 @@ guix_register_CPPFLAGS =                   \
 
 # XXX: Should we start using shared libs?
 guix_register_LDADD =                          \
-  libstore.a libutil.a libformat.a -lz -lbz2   \
+  libstore.a libutil.a libformat.a -lz         \
   $(SQLITE3_LIBS) $(LIBGCRYPT_LIBS)
 
+if HAVE_LIBBZ2
+
+guix_daemon_LDADD += -lbz2
+guix_register_LDADD += -lbz2
+
+endif HAVE_LIBBZ2
 
 noinst_HEADERS =                                               \
   $(libformat_headers) $(libutil_headers) $(libstore_headers)  \
diff --git a/nix/nix-daemon/guix-daemon.cc b/nix/nix-daemon/guix-daemon.cc
index a1ef90dfd..b71b100f6 100644
--- a/nix/nix-daemon/guix-daemon.cc
+++ b/nix/nix-daemon/guix-daemon.cc
@@ -206,8 +206,10 @@ parse_opt (int key, char *arg, struct argp_state *state)
        settings.logCompression = COMPRESSION_NONE;
       else if (strcmp (arg, "gzip") == 0)
        settings.logCompression = COMPRESSION_GZIP;
+#if HAVE_BZLIB_H
       else if (strcmp (arg, "bzip2") == 0)
        settings.logCompression = COMPRESSION_BZIP2;
+#endif
       else
        {
          fprintf (stderr, _("error: %s: unknown compression type\n"), arg);
-- 
2.15.1






reply via email to

[Prev in Thread] Current Thread [Next in Thread]