mirror of https://gitlab.com/ita1024/waf.git
82 lines
1.8 KiB
Python
82 lines
1.8 KiB
Python
|
#! /usr/bin/env python
|
||
|
# encoding: UTF-8
|
||
|
# Thomas Nagy 2020 (ita)
|
||
|
|
||
|
from waflib import Utils
|
||
|
from waflib.Configure import conf
|
||
|
|
||
|
PTHREAD_CHECK = '''
|
||
|
#include <pthread.h>
|
||
|
|
||
|
static void* fun(void* params) {
|
||
|
return NULL;
|
||
|
}
|
||
|
|
||
|
int main() {
|
||
|
pthread_t thread;
|
||
|
pthread_create(&thread, NULL, &fun, NULL);
|
||
|
pthread_join(thread, NULL);
|
||
|
}
|
||
|
'''
|
||
|
|
||
|
@conf
|
||
|
def check_pthreads(self, mode=None):
|
||
|
if not mode:
|
||
|
mode = 'cxx' if self.env.CXX else 'c'
|
||
|
|
||
|
if Utils.unversioned_sys_platform() == 'sunos':
|
||
|
flags = ['-pthreads', '-lpthread', '-mt', '-pthread']
|
||
|
else:
|
||
|
flags = ['', '-lpthreads', '-Kthread', '-kthread', '-llthread', '-pthread', '-pthreads', '-mthreads', '-lpthread', '--thread-safe', '-mt']
|
||
|
|
||
|
features = mode
|
||
|
for flag in flags:
|
||
|
self.env.stash()
|
||
|
|
||
|
self.env[mode.upper() + 'FLAGS_PTHREAD'] = [flag]
|
||
|
|
||
|
if flag:
|
||
|
msg = ' -> Trying pthread compilation flag %s' % flag
|
||
|
okmsg = 'needs %s' % flag
|
||
|
else:
|
||
|
msg = 'Checking if a pthread flag is necessary for compiling'
|
||
|
okmsg = 'None'
|
||
|
|
||
|
try:
|
||
|
self.check(features=features, msg=msg, okmsg=okmsg, use='PTHREAD', fragment=PTHREAD_CHECK)
|
||
|
except self.errors.ConfigurationError:
|
||
|
self.env.revert()
|
||
|
continue
|
||
|
else:
|
||
|
break
|
||
|
else:
|
||
|
self.fatal('Could not find a suitable pthreads flag for compiling')
|
||
|
|
||
|
features = '%s %sprogram' % (mode, mode)
|
||
|
for flag in flags:
|
||
|
self.env.stash()
|
||
|
|
||
|
self.env.LINKFLAGS_PTHREAD = [flag]
|
||
|
|
||
|
if flag:
|
||
|
msg = ' -> Trying pthread link flag %s' % flag
|
||
|
okmsg = 'needs %s' % flag
|
||
|
else:
|
||
|
msg = 'Checking if a pthread flag is necessary for linking'
|
||
|
okmsg = 'None'
|
||
|
|
||
|
try:
|
||
|
self.check(features=features, msg=msg, okmsg=okmsg, use='PTHREAD', fragment=PTHREAD_CHECK)
|
||
|
except self.errors.ConfigurationError:
|
||
|
self.env.revert()
|
||
|
continue
|
||
|
else:
|
||
|
break
|
||
|
else:
|
||
|
self.fatal('Could not find a suitable pthreads flag for linking')
|
||
|
|
||
|
|
||
|
def configure(self):
|
||
|
self.check_pthreads()
|
||
|
|