s3: add --with-libarchive to build configuration
authorAurélien Aptel <aurelien.aptel@gmail.com>
Wed, 7 Aug 2013 14:34:22 +0000 (16:34 +0200)
committerAndreas Schneider <asn@samba.org>
Wed, 19 Feb 2014 17:22:29 +0000 (18:22 +0100)
* skip tar tests if disabled
* print error message when using disabled command
* autodetection of libarchive

Signed-off-by: Aurélien Aptel <aurelien.aptel@gmail.com>
[ddiss@samba.org: rebased against makefile cleanup]
Reviewed-by: David Disseldorp <ddiss@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
source3/client/clitar.c
source3/selftest/tests.py
source3/wscript
source3/wscript_build

index 265a77bff6c3b76a8aac8fef6eaa58c8911f4d39..1e2b4f0840a9d5791e4d67533418197f350822b0 100644 (file)
@@ -71,6 +71,9 @@
 #include "client/client_proto.h"
 #include "client/clitar_proto.h"
 #include "libsmb/libsmb.h"
+
+#ifdef HAVE_LIBARCHIVE
+
 #include <archive.h>
 #include <archive_entry.h>
 
@@ -1671,3 +1674,58 @@ static char *path_base_name (const char *path)
 
     return base;
 }
+
+#else
+
+#define NOT_IMPLEMENTED DEBUG(0, ("tar mode not compiled. build with --with-libarchive\n"))
+
+struct tar
+{
+    int dummy;
+};
+
+struct tar tar_ctx;
+
+int cmd_block(void)
+{
+    NOT_IMPLEMENTED;
+    return 1;
+}
+
+int cmd_tarmode(void)
+{
+    NOT_IMPLEMENTED;
+    return 1;
+}
+
+int cmd_setmode(void)
+{
+    NOT_IMPLEMENTED;
+    return 1;
+}
+
+int cmd_tar(void)
+{
+    NOT_IMPLEMENTED;
+    return 1;
+}
+
+int tar_process(struct tar* tar)
+{
+    NOT_IMPLEMENTED;
+    return 1;
+}
+
+int tar_parse_args(struct tar *tar, const char *flag, const char **val, int valsize)
+{
+    NOT_IMPLEMENTED;
+    return 1;
+}
+
+bool tar_to_process(struct tar *tar)
+{
+    NOT_IMPLEMENTED;
+    return false;
+}
+
+#endif
index 9676b74141801c9a8232e378ac8c5abf071d3df1..b8f477a8494b5a14a9f821e0c2cbac09106eca04 100755 (executable)
@@ -201,15 +201,39 @@ for env in ["s3dc"]:
     # encrypted
     plantestsuite("samba3.blackbox.smbclient_s3.crypt (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_s3.sh"), '$SERVER', '$SERVER_IP', '$DOMAIN', '$USERNAME', '$PASSWORD', '$USERID', '$LOCAL_PATH', '$PREFIX', smbclient3, wbinfo, net, configuration, "-e"])
 
-    # Test smbclient/tarmode
-    plantestsuite("samba3.blackbox.smbclient_tarmode (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_tarmode.sh"), '$SERVER', '$SERVER_IP', '$USERNAME', '$PASSWORD', '$LOCAL_PATH', '$PREFIX', smbclient3, configuration])
-
-    # Test suite for new smbclient/tar with libarchive (GSoC 13)
-    plantestsuite("samba3.blackbox.smbclient_tar (%s)" % env, env,
-                  [os.path.join(samba3srcdir, "script/tests/test_smbclient_tarmode.pl"),
-                   '-n', '$SERVER', '-i', '$SERVER_IP', '-s', 'tmp',
-                   '-u', '$USERNAME', '-p', '$PASSWORD', '-l', '$LOCAL_PATH', '-d', '$PREFIX',
-                   '-b', smbclient3, '--subunit', '--', configuration])
+
+    #
+    # tar command tests
+    #
+
+    # find config.h
+    try:
+        config_h = os.environ["CONFIG_H"]
+    except KeyError:
+        config_h = os.path.join(samba4bindir, "default/include/config.h")
+
+    # see if libarchive is supported
+    f = open(config_h, 'r')
+    try:
+        have_libarchive = ("HAVE_LIBARCHIVE 1" in f.read())
+    finally:
+        f.close()
+
+    # tar command enabled only if built with libarchive
+    if have_libarchive:
+        # Test smbclient/tarmode
+        plantestsuite("samba3.blackbox.smbclient_tarmode (%s)" % env, env,
+                      [os.path.join(samba3srcdir, "script/tests/test_smbclient_tarmode.sh"),
+                       '$SERVER', '$SERVER_IP', '$USERNAME', '$PASSWORD',
+                       '$LOCAL_PATH', '$PREFIX', smbclient3, configuration])
+
+        # Test suite for new smbclient/tar with libarchive (GSoC 13)
+        plantestsuite("samba3.blackbox.smbclient_tar (%s)" % env, env,
+                      [os.path.join(samba3srcdir, "script/tests/test_smbclient_tarmode.pl"),
+                       '-n', '$SERVER', '-i', '$SERVER_IP', '-s', 'tmp',
+                       '-u', '$USERNAME', '-p', '$PASSWORD', '-l', '$LOCAL_PATH',
+                       '-d', '$PREFIX', '-b', smbclient3,
+                       '--subunit', '--', configuration])
 
 #TODO encrypted against member, with member creds, and with DC creds
 plantestsuite("samba3.blackbox.net.misc", "s3dc:local",
index 31ec1a24118f83e43d53442f032cfeeb80ffeed0..8382160d1c8d39db1ee406f3337e9dc51d9b1757 100644 (file)
@@ -43,6 +43,7 @@ def set_options(opt):
     opt.SAMBA3_ADD_OPTION('dmapi', default=None) # None means autodetection
     opt.SAMBA3_ADD_OPTION('fam', default=None) # None means autodetection
     opt.SAMBA3_ADD_OPTION('profiling-data', default=False)
+    opt.SAMBA3_ADD_OPTION('libarchive', default=None)
 
     opt.SAMBA3_ADD_OPTION('cluster-support', default=None)
 
@@ -75,10 +76,6 @@ def configure(conf):
     if sys.platform != 'openbsd5':
         conf.ADD_LDFLAGS("-Wl,--export-dynamic", testflags=True)
 
-    # libarchive in smbclient
-    conf.CHECK_HEADERS('archive.h')
-    conf.CHECK_LIB('libarchive')
-
     conf.CHECK_HEADERS('execinfo.h libexc.h libunwind.h netdb.h')
     conf.CHECK_HEADERS('linux/falloc.h')
 
@@ -197,6 +194,21 @@ main() {
         elif check_for_fam:
             Logs.warn('no suitable FAM library found')
 
+    # check for libarchive (tar command in smbclient)
+    use_libarchive = False
+    # None means autodetect
+    if Options.options.with_libarchive is None:
+        Logs.info("Checking for libarchive existence")
+        if conf.CHECK_HEADERS('archive.h') and conf.CHECK_LIB('archive'):
+            use_libarchive = True
+    elif Options.options.with_libarchive == True:
+        conf.CHECK_HEADERS('archive.h', mandatory=True)
+        conf.CHECK_LIB('archive', mandatory=True)
+        use_libarchive = True
+
+    if use_libarchive:
+        conf.DEFINE('SAMBA_LIBARCHIVE_LIBS', '-larchive')
+
     # check for DMAPI libs
     Logs.info("Checking for DMAPI library existence")
     conf.env['dmapi_lib'] = ''
index fb98e543e9ed4d35c85460ede3036866beb36465..9265e00c395d3494272f5072de8b08b5236ff913 100755 (executable)
@@ -995,7 +995,6 @@ bld.SAMBA3_BINARY('client/smbclient',
                  source='''client/client.c
                  client/clitar.c
                  client/dnsbrowse.c''',
-                 ldflags='-larchive',
                  deps='''
                  talloc
                  popt_samba3
@@ -1005,7 +1004,9 @@ bld.SAMBA3_BINARY('client/smbclient',
                  libsmb
                  msrpc3
                  RPC_NDR_SRVSVC
-                 cli_smb_common''')
+                 cli_smb_common
+                 '''+
+                  ('archive' if bld.CONFIG_SET('HAVE_LIBARCHIVE') else ''))
 
 bld.SAMBA3_BINARY('net',
                  source='''utils/net.c