[PATCHES] Fix configure time detection of some features

Lukas Slebodnik lslebodn at redhat.com
Tue Dec 27 15:41:21 UTC 2016


ehlo,

There was an attempt to have enabled stricter CFLAGS by default
in fedora rawhide. They changed few warnings to errors:
  -Werror=implicit-function-declaration -Werror=implicit-int

Attached patches fix detections for samba related/bundled libraries
(talloc, tevent, tdb, ldb). It does not fix all detections for samba itself
becuase I am not sure whether you will like such solution.

The other possible solution is to ignore CFLAGS for detections
of features. Something like following code in autotools
    SAFE_LIBS="$LIBS"
    LIBS="$DBUS_LIBS"
    SAFE_CFLAGS=$CFLAGS
    CFLAGS="$DBUS_CFLAGS"

    AC_CHECK_FUNC([dbus_watch_get_unix_fd],
                  AC_DEFINE([HAVE_DBUS_WATCH_GET_UNIX_FD], [1],
                            [Define if dbus_watch_get_unix_fd exists]))
    AC_CHECK_TYPES([DBusBasicValue],
                   [],
                   [],
                   [ #include <dbus/dbus.h> ])

    LIBS="$SAFE_LIBS"
    CFLAGS=$SAFE_CFLAGS

But I am not sure how to implement it with waf.

LS
-------------- next part --------------
From b301522ef3190261ea3094aa7b5717c88854db9a Mon Sep 17 00:00:00 2001
From: Lukas Slebodnik <lslebodn at redhat.com>
Date: Tue, 6 Dec 2016 18:07:18 +0100
Subject: [PATCH 1/4] lib replace: Fix detection of features
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

If configure script is executed with stricter cflags
"-Werrorr=implicit-function-declaration -Werror=implicit-int"
then detection of few features will fail.

 Checking for C99 vsnprintf : not found
 Checking for HAVE_SHARED_MMAP : not found
 Checking for HAVE_MREMAP : not found

lib/replace/test/shared_mmap.c:18:1:
    error: return type defaults to ‘int’ [-Werror=implicit-int]
 main()
 ^~~~
lib/replace/test/shared_mmap.c: In function ‘main’:
lib/replace/test/shared_mmap.c:25:16:
    error: implicit declaration of function ‘exit’
    [-Werror=implicit-function-declaration]
  if (fd == -1) exit(1);
                ^~~~
lib/replace/test/shared_mmap.c:25:16:
    warning: incompatible implicit declaration of built-in function ‘exit’
lib/replace/test/shared_mmap.c:25:16:
    note: include ‘<stdlib.h>’ or provide a declaration of ‘exit’

Signed-off-by: Lukas Slebodnik <lslebodn at redhat.com>
---
 lib/replace/test/shared_mmap.c   | 5 ++++-
 lib/replace/test/shared_mremap.c | 5 ++++-
 lib/replace/test/snprintf.c      | 2 +-
 3 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/lib/replace/test/shared_mmap.c b/lib/replace/test/shared_mmap.c
index 50dad8d..9d6e3fc 100644
--- a/lib/replace/test/shared_mmap.c
+++ b/lib/replace/test/shared_mmap.c
@@ -4,6 +4,9 @@
 #if defined(HAVE_UNISTD_H)
 #include <unistd.h>
 #endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
 #include <sys/mman.h>
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -15,7 +18,7 @@
 #define MAP_FILE 0
 #endif
 
-main()
+int main(void)
 {
 	int *buf;
 	int i; 
diff --git a/lib/replace/test/shared_mremap.c b/lib/replace/test/shared_mremap.c
index 05032ad..08040e2 100644
--- a/lib/replace/test/shared_mremap.c
+++ b/lib/replace/test/shared_mremap.c
@@ -3,6 +3,9 @@
 #if defined(HAVE_UNISTD_H)
 #include <unistd.h>
 #endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
 #include <sys/mman.h>
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -18,7 +21,7 @@
 #define MAP_FAILED (int *)-1
 #endif
 
-main()
+int main(void)
 {
 	int *buf;
 	int fd;
diff --git a/lib/replace/test/snprintf.c b/lib/replace/test/snprintf.c
index d06630b..77473f0 100644
--- a/lib/replace/test/snprintf.c
+++ b/lib/replace/test/snprintf.c
@@ -26,4 +26,4 @@ void foo(const char *format, ...)
 	printf("1");
 	exit(0);
 }
-main() { foo("hello"); }
+int main(void) { foo("hello"); }
-- 
2.11.0

From b2cbef6f9478fa53de60ac6aecb3af7336ce1bff Mon Sep 17 00:00:00 2001
From: Lukas Slebodnik <lslebodn at redhat.com>
Date: Tue, 6 Dec 2016 18:07:36 +0100
Subject: [PATCH 2/4] WAF: Fix detection of linker features
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Following check of linker feature failed with strict CFLAGS
"-Werrorr=implicit-function-declaration -Werror=implicit-int"

  Checking for rpath library support       : not found
  Checking for -Wl,--version-script support  : not found

../main.c: In function ‘main’:
../main.c:1:26: error: implicit declaration of function ‘lib_func’
    [-Werror=implicit-function-declaration]
 int main(void) {return !(lib_func() == 42);}
                          ^~~~~~~~

Signed-off-by: Lukas Slebodnik <lslebodn at redhat.com>
---
 buildtools/wafsamba/samba_conftests.py | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/buildtools/wafsamba/samba_conftests.py b/buildtools/wafsamba/samba_conftests.py
index 045f858..c9f8fdc 100644
--- a/buildtools/wafsamba/samba_conftests.py
+++ b/buildtools/wafsamba/samba_conftests.py
@@ -286,7 +286,9 @@ def CHECK_LIBRARY_SUPPORT(conf, rpath=False, version_script=False, msg=None):
     os.makedirs(subdir)
 
     Utils.writef(os.path.join(subdir, 'lib1.c'), 'int lib_func(void) { return 42; }\n')
-    Utils.writef(os.path.join(dir, 'main.c'), 'int main(void) {return !(lib_func() == 42);}\n')
+    Utils.writef(os.path.join(dir, 'main.c'),
+                 'int lib_func(void);\n'
+                 'int main(void) {return !(lib_func() == 42);}\n')
 
     bld = Build.BuildContext()
     bld.log = conf.log
-- 
2.11.0

From 0e771ae92a484f9f382e4b2abb1659996b270fc5 Mon Sep 17 00:00:00 2001
From: Lukas Slebodnik <lslebodn at redhat.com>
Date: Tue, 6 Dec 2016 18:07:43 +0100
Subject: [PATCH 3/4] WAF: Fix detection os sysname ...
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Detection of sysname failed with stricter CFLAGS
"-Werrorr=implicit-function-declaration -Werror=implicit-int"

  Checking uname sysname type              : not found
  Checking uname machine type              : not found
  Checking uname release type              : not found
  Checking uname version type              : not found

../test.c: In function ‘main’:
../test.c:8:32: error: implicit declaration of function ‘printf’
    [-Werror=implicit-function-declaration]
                                printf("%s", n.sysname);
                                ^~~~~~
../test.c:8:32: warning: incompatible implicit declaration
    of built-in function ‘printf’
../test.c:8:32: note: include ‘<stdio.h>’ or provide a declaration of ‘printf’

Signed-off-by: Lukas Slebodnik <lslebodn at redhat.com>
---
 buildtools/wafsamba/samba_conftests.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/buildtools/wafsamba/samba_conftests.py b/buildtools/wafsamba/samba_conftests.py
index c9f8fdc..72e4321 100644
--- a/buildtools/wafsamba/samba_conftests.py
+++ b/buildtools/wafsamba/samba_conftests.py
@@ -438,6 +438,7 @@ def CHECK_UNAME(conf):
     ret = True
     for v in "sysname machine release version".split():
         if not conf.CHECK_CODE('''
+                               int printf(const char *format, ...);
                                struct utsname n;
                                if (uname(&n) == -1) return -1;
                                printf("%%s", n.%s);
-- 
2.11.0

From 1bcb7f0bc82976f71ceb364248b77f024d003298 Mon Sep 17 00:00:00 2001
From: Lukas Slebodnik <lslebodn at redhat.com>
Date: Tue, 6 Dec 2016 18:07:50 +0100
Subject: [PATCH 4/4] WAF: Fix detection of IPv6
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Detection of IPv6 failed with strict CFLAGS due to missing
header file.

  Checking for HAVE_IPV6       : not found

../test.c: In function ‘main’:
../test.c:226:34: error: implicit declaration of function
    ‘if_nametoindex’ [-Werror=implicit-function-declaration]
                        int idx = if_nametoindex("iface1");
                                  ^~~~~~~~~~~~~~

Signed-off-by: Lukas Slebodnik <lslebodn at redhat.com>
---
 lib/replace/wscript | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/replace/wscript b/lib/replace/wscript
index 145300d..172657b 100644
--- a/lib/replace/wscript
+++ b/lib/replace/wscript
@@ -189,7 +189,7 @@ def configure(conf):
                        ''',
                     define='HAVE_IPV6',
                     lib='nsl socket',
-                    headers='sys/socket.h netdb.h netinet/in.h')
+                    headers='sys/socket.h netdb.h netinet/in.h net/if.h')
 
     if conf.CONFIG_SET('HAVE_SYS_UCONTEXT_H') and conf.CONFIG_SET('HAVE_SIGNAL_H'):
         conf.CHECK_CODE('''
-- 
2.11.0



More information about the samba-technical mailing list