]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
waf: check for pragma init/fini support for constructors/destructors
authorBjörn Jacke <bj@sernet.de>
Fri, 30 Oct 2020 11:55:54 +0000 (12:55 +0100)
committerAndrew Bartlett <abartlet@samba.org>
Tue, 10 Nov 2020 06:53:43 +0000 (06:53 +0000)
Signed-off-by: Bjoern Jacke <bjacke@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
buildtools/wafsamba/wscript

index f68f46e03ec7b7341e4a80bebe3a44904a441d8b..65cc8d3cd5e6e9edbceb2a343d2f62436f91b1bd 100644 (file)
@@ -391,7 +391,26 @@ def configure(conf):
             strict=True,
             msg='Checking for library constructor support')
 
-        # check HAVE_DESTRUCTOR_ATTRIBUTE
+    # check HAVE_PRAGMA_INIT alternatively
+    if not conf.env.HAVE_CONSTRUCTOR_ATTRIBUTE:
+           conf.CHECK_CODE('''
+                #pragma init (test_init)
+
+                void test_init(void)
+                {
+                    return;
+                }
+
+                int main(void) {
+                    return 0;
+                }
+                ''',
+                'HAVE_PRAGMA_INIT',
+                addmain=False,
+                strict=True,
+                msg='Checking for pragma init support')
+
+    # check HAVE_DESTRUCTOR_ATTRIBUTE
     conf.CHECK_CODE('''
             void test_destructor_attribute(void) __attribute__ ((destructor));
 
@@ -409,6 +428,25 @@ def configure(conf):
             strict=True,
             msg='Checking for library destructor support')
 
+    # check HAVE_PRAGMA_FINI alternatively
+    if not conf.env.HAVE_DESTRUCTOR_ATTRIBUTE:
+           conf.CHECK_CODE('''
+                #pragma fini (test_fini)
+
+                void test_fini(void)
+                {
+                    return;
+                }
+
+                int main(void) {
+                    return 0;
+                }
+                ''',
+                'HAVE_PRAGMA_FINI',
+                addmain=False,
+                strict=True,
+                msg='Checking for pragma fini support')
+
     conf.CHECK_CODE('''
             void test_attribute(void) __attribute__ (());