Let Linux build upstream libcoap again 99/22699/2
authorMats Wichmann <mats@linux.com>
Tue, 3 Oct 2017 20:39:24 +0000 (14:39 -0600)
committerMats Wichmann <mats@linux.com>
Sat, 14 Oct 2017 18:35:01 +0000 (18:35 +0000)
Cherry pick from master

Two problems:
(1) in a debug build, Linux builds with gcov options. Linux options
(build_common/linux/SConscript) add --coverage to build, -lgcov to link.
However before the two places that do configure checks for functions start
doing so, they clone an environment with LIBS cleared.  Thus when built
in debug mode, all of the links of the generated configure test programs
-lgcov is missing and the binaries don't link, so the tests report
fail. Fix is to add --coverage to link instead, that implies adding the
library at link time, but is not affected by the clearing of the LIBS var.

(2) upstream libcoap was depending on ipv6 features that only are included
if __GNU_SOURCE is defined, change the define from __DEFAULT_SOURCE to
__GNU_SOURCE only for the coap build environment.

This is like Bug IOT-2334 but since that one reports a windows problem
and thus can't be gcov related, it's not a direct linkage.

Change-Id: I5cab20eeeb10ccefe74d403dd204b33b39ed9a26
Signed-off-by: Mats Wichmann <mats@linux.com>
build_common/linux/SConscript
extlibs/libcoap/SConscript
resource/c_common/SConscript

index d835464..0806539 100644 (file)
@@ -22,8 +22,8 @@ else:
 
 # Test Coverage Flags and Library (if RELEASE=0)
 if not env.get('RELEASE'):
-    env.AppendUnique(LIBS=['gcov'])
     env.AppendUnique(CCFLAGS=['--coverage', '-fPIC', '-O0'])
+    env.AppendUnique(LINKFLAGS=['--coverage'])
 
 env.AppendUnique(CPPDEFINES=['WITH_POSIX', '__linux__'])
 env.AppendUnique(CFLAGS=['-std=gnu99'])
index ec545a7..547b67c 100644 (file)
@@ -121,7 +121,9 @@ if target_os == 'arduino':
 
 # Build flags
 if target_os not in ['arduino', 'windows', 'winrt', 'msys_nt']:
-    libcoap_env.AppendUnique(CPPDEFINES=['WITH_POSIX', '_DEFAULT_SOURCE'])
+    # libcoap uses ipv6 features from <netinet/in.h> which only
+    # turn on if __GNU_SOURCE is defined
+    libcoap_env.AppendUnique(CPPDEFINES=['WITH_POSIX', '_GNU_SOURCE'])
     libcoap_env.AppendUnique(CFLAGS=['-std=gnu99','-fPIC'])
 
 if target_os not in ['windows', 'winrt']:
@@ -162,7 +164,7 @@ if with_upstream_libcoap == '1':
     target_arch = env.get('TARGET_ARCH')
     lib_prefix = '' + str(libcoap_env.get('PREFIX'))
 
-    if not os.path.isfile(config_h_file_path) and not env.GetOption('clean'):
+    if not os.path.isfile(config_h_file_path) and env.GetOption not in ('clean', 'help'):
         conf = Configure(libcoap_env.Clone(LIBS=[]))
 
         config_h_header = '''
@@ -259,7 +261,9 @@ if with_upstream_libcoap == '1':
                 'malloc',
                 'snprintf',
                 'strnlen',
-                'vprintf'
+                'vprintf',
+                'fls',
+                'flsll',
             ]
 
             if target_os == 'arduino':
index df6f515..92291e2 100644 (file)
@@ -35,7 +35,7 @@ config_h_file_path = os.path.join(src_dir, 'resource', 'c_common',
 if (os.path.exists(config_h_file_path)) and (env.GetOption('clean')):
     os.remove(config_h_file_path)
 
-if (not os.path.isfile(config_h_file_path)) and (not env.GetOption('clean')):
+if not os.path.isfile(config_h_file_path) and env.GetOption not in ('clean', 'help'):
     conf = Configure(env.Clone(LIBS=[]))
 
     config_h_header = '''