]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Meson: Refactor pthread_setname variant detection
authorFred Morcos <fred.morcos@open-xchange.com>
Tue, 13 Jun 2023 19:43:43 +0000 (21:43 +0200)
committerFred Morcos <fred.morcos@open-xchange.com>
Wed, 20 Mar 2024 12:28:23 +0000 (13:28 +0100)
meson.build

index fc50f801c6848b8189ee217114f2f31252895a08..65b04b122fe62afb671500ea52aa3162e09d1207 100644 (file)
@@ -143,44 +143,45 @@ pthread_np_prefix = '''
 #endif
 '''
 
-if cxx.links(pthread_np_prefix + '''
-             int main() {
-                 pthread_setname_np(pthread_self(), "foo");
-                 return 0;
-             }
-             ''',
-             name: 'for 2-arg pthread_setname_np')
-  conf.set('HAVE_PTHREAD_SETNAME_NP_2', 1, description: 'pthread_setname_np takes 2 arguments (Linux/glibc, QNX, IBM)')
-elif cxx.links(pthread_np_prefix + '''
-               int main() {
-                   return pthread_set_name_np(pthread_self(), "foo");
-               }
-               ''',
-               name: '2-arg pthread_set_name_np')
-  conf.set('HAVE_PTHREAD_SET_NAME_NP_2', 1, description: 'pthread_set_name_np takes 2 arguments and does not return void (FreeBSD, OpenBSD)')
-elif cxx.links(pthread_np_prefix + '''
-               int main() {
-                   pthread_set_name_np(pthread_self(), "foo");
-                   return 0;
-               }
-               ''',
-               name: '2-arg void pthread_set_name_np')
-  conf.set('HAVE_PTHREAD_SET_NAME_NP_2_VOID', 1, description: 'pthread_set_name_np takes 2 arguments and returns void (FreeBSD, OpenBSD)')
-elif cxx.links(pthread_np_prefix + '''
-               int main() {
-                   return pthread_setname_np("foo");
-               }
-               ''',
-               name: '1-arg pthread_setname_np')
-  conf.set('HAVE_PTHREAD_SETNAME_NP_1', 1, description: 'pthread_setname_np takes 1 argument (Darwin, MacOS)')
-elif cxx.links(pthread_np_prefix + '''
-               int main() {
-                   return pthread_setname_np(pthread_self(), "foo", NULL);
-               }
-               ''',
-               name: '3-arg pthread_setname_np')
-  conf.set('HAVE_PTHREAD_SETNAME_NP_3', 1, description: 'pthread_setname_np takes 3 arguments (NetBSD)')
-else
+variants = [
+  [
+    '2-arg pthread_setname_np', 'HAVE_PTHREAD_SETNAME_NP_2', 'pthread_setname_np takes 2 arguments (Linux/glibc, QNX, IBM)',
+    '''int main() { pthread_setname_np(pthread_self(), "foo"); return 0; }''',
+  ],
+  [
+    '2-arg pthread_set_name_np', 'HAVE_PTHREAD_SET_NAME_NP_2', 'pthread_set_name_np takes 2 arguments and does not return void (FreeBSD, OpenBSD)',
+    '''int main() { return pthread_set_name_np(pthread_self(), "foo"); }''',
+  ],
+  [
+    '2-arg void pthread_set_name_np', 'HAVE_PTHREAD_SET_NAME_NP_2_VOID', 'pthread_set_name_np takes 2 arguments and returns void (FreeBSD, OpenBSD)',
+    '''int main() { pthread_set_name_np(pthread_self(), "foo"); return 0; }''',
+  ],
+  [
+    '1-arg pthread_setname_np', 'HAVE_PTHREAD_SETNAME_NP_1', 'pthread_setname_np takes 1 argument (Darwin, MacOS)',
+    '''int main() { return pthread_setname_np("foo"); }''',
+  ],
+  [
+    '3-arg pthread_setname_np', 'HAVE_PTHREAD_SETNAME_NP_3', 'pthread_setname_np takes 3 arguments (NetBSD)',
+    '''int main() { return pthread_setname_np(pthread_self(), "foo", NULL); }''',
+  ],
+]
+
+found_variant = false
+foreach variant: variants
+  variant_name = variant[0]
+  variant_define = variant[1]
+  variant_description = variant[2]
+  variant_program = variant[3]
+
+  if cxx.links(pthread_np_prefix + variant_program, name: variant_name)
+    found_variant = true
+    conf.set(variant_define, 1, description: variant_description)
+    summary('pthread_setname', variant_define + ' - ' + variant_description, section: 'System')
+    break
+  endif
+endforeach
+
+if not found_variant
   error('Could not find a suitable pthread_setname function')
 endif