summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Stebbins <[email protected]>2019-04-16 07:54:02 -0600
committerJohn Stebbins <[email protected]>2019-04-16 07:54:02 -0600
commit9f575664d3db2e90bb75c4fed512ef2f810236b1 (patch)
treed96023ceb67b53d03930cc455c2a0e3a69b783e9
parent9a4790d0fc3c8a453ba17c23c2a2658a140e93b6 (diff)
configure: make separate LDTest and PkgConfigTest functions
Using LDProbe and PkgConfigProbe Actions within ChkLib Action resulted in somewhat ugly log output. Moving the work into separate Test functions allows it to be reused without using the Actions
-rw-r--r--make/configure.py150
1 files changed, 74 insertions, 76 deletions
diff --git a/make/configure.py b/make/configure.py
index c0a6f7662..b4f891a14 100644
--- a/make/configure.py
+++ b/make/configure.py
@@ -364,6 +364,34 @@ class CCProbe( Action ):
## returns true if feature successfully compiles
##
##
+def PkgConfigTest(args, lib):
+ msg_end = ''
+ if Tools.pkgconfig.fail:
+ fail = True
+ session = []
+ msg_end = 'No pkg-config'
+ return fail, msg_end, session
+
+ ## pipe and redirect stderr to stdout; effects communicate result
+ pipe = subprocess.Popen( '%s %s %s' %
+ (Tools.pkgconfig.pathname, args, lib),
+ shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT )
+
+ ## read data into memory buffers, only first element (stdout)
+ ## data is used
+ data = pipe.communicate()
+ fail = pipe.returncode != 0
+
+ if data[0]:
+ session = data[0].splitlines()
+ else:
+ session = []
+
+ if pipe.returncode:
+ msg_end = 'code %d' % (pipe.returncode)
+
+ return fail, msg_end, session
+
class PkgConfigProbe( Action ):
def __init__( self, pretext, args, lib ):
super( PkgConfigProbe, self ).__init__( 'probe', pretext )
@@ -371,29 +399,8 @@ class PkgConfigProbe( Action ):
self.lib = lib
def _action( self ):
- if Tools.pkgconfig.fail:
- self.fail = True
- self.session = []
- self.msg_end = 'No pkg-config'
- return
-
- ## pipe and redirect stderr to stdout; effects communicate result
- pipe = subprocess.Popen( '%s %s %s' %
- (Tools.pkgconfig.pathname, self.args, self.lib),
- shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT )
-
- ## read data into memory buffers, only first element (stdout)
- ## data is used
- data = pipe.communicate()
- self.fail = pipe.returncode != 0
-
- if data[0]:
- self.session = data[0].splitlines()
- else:
- self.session = []
-
- if pipe.returncode:
- self.msg_end = 'code %d' % (pipe.returncode)
+ self.fail, self.msg_end, self.session = PkgConfigTest(self.args,
+ self.lib)
def _dumpSession( self, printf ):
printf( ' + %s %s\n', Tools.pkgconfig.pathname, self.args )
@@ -407,6 +414,38 @@ class PkgConfigProbe( Action ):
## returns true if feature successfully compiles
##
##
+def LDTest(command, lib, test_file):
+ ## write program file
+ with open( 'conftest.c', 'w' ) as out_file:
+ out_file.write( test_file )
+ ## pipe and redirect stderr to stdout; effects communicate result
+ pipe = subprocess.Popen( '%s -o conftest conftest.c %s' % (command, lib), shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT )
+
+ ## read data into memory buffers, only first element (stdout) data is used
+ data = pipe.communicate()
+ fail = pipe.returncode != 0
+
+ if data[0]:
+ session = data[0].splitlines()
+ else:
+ session = []
+
+ msg_end = ''
+ if pipe.returncode:
+ msg_end = 'code %d' % (pipe.returncode)
+
+ os.remove( 'conftest.c' )
+ if not fail:
+ try:
+ os.remove( 'conftest.exe' )
+ except:
+ pass
+ try:
+ os.remove( 'conftest' )
+ except:
+ pass
+ return (fail, msg_end, session)
+
class LDProbe( Action ):
def __init__( self, pretext, command, lib, test_file ):
super( LDProbe, self ).__init__( 'probe', pretext )
@@ -415,34 +454,8 @@ class LDProbe( Action ):
self.lib = lib
def _action( self ):
- ## write program file
- with open( 'conftest.c', 'w' ) as out_file:
- out_file.write( self.test_file )
- ## pipe and redirect stderr to stdout; effects communicate result
- pipe = subprocess.Popen( '%s -o conftest conftest.c %s' % (self.command, self.lib), shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT )
-
- ## read data into memory buffers, only first element (stdout) data is used
- data = pipe.communicate()
- self.fail = pipe.returncode != 0
-
- if data[0]:
- self.session = data[0].splitlines()
- else:
- self.session = []
-
- if pipe.returncode:
- self.msg_end = 'code %d' % (pipe.returncode)
-
- os.remove( 'conftest.c' )
- if not self.fail:
- try:
- os.remove( 'conftest.exe' )
- except:
- pass
- try:
- os.remove( 'conftest' )
- except:
- pass
+ self.fail, self.msg_end, self.session = LDTest(
+ self.command, self.lib, self.test_file)
def _dumpSession( self, printf ):
printf( ' + %s\n', self.command )
@@ -457,8 +470,8 @@ class LDProbe( Action ):
##
##
class ChkLib( Action ):
- def __init__( self, pretext, command, lib, test_file ):
- super( ChkLib, self ).__init__( 'probe', pretext )
+ def __init__( self, pretext, command, lib, test_file, abort=False ):
+ super( ChkLib, self ).__init__( 'probe', pretext, abort=abort )
self.command = command
self.test_file = test_file
self.lib = lib
@@ -466,28 +479,15 @@ class ChkLib( Action ):
def _action( self ):
## First try pkg-config
if not Tools.pkgconfig.fail:
- pkgconfig = PkgConfigProbe( 'pkgconfig %s' % self.pretext,
- '--libs', self.lib )
- pkgconfig.run()
- if not pkgconfig.fail:
- self.session = pkgconfig.session
- self.fail = False
+ self.fail, self.msg_end, self.session = PkgConfigTest(
+ '--libs', self.lib)
+ if not self.fail:
return
- ld = LDProbe( 'link %s' % self.pretext, self.command,
- '-l%s' % self.lib, self.test_file )
- ld.run()
- self.session = ld.session
- self.fail = ld.fail
- if self.fail:
- self.msg_end = ld.msg_end
-
- def _actionEnd( self ):
- pass
-
- def _dumpSession( self, printf ):
- printf( ' + %s\n', self.command )
- super( ChkLib, self )._dumpSession( printf )
+ ## If pkg-config fails, try compiling and linking test file
+ self.fail, self.msg_end, session = LDTest(
+ self.command, '-l%s' % self.lib, self.test_file)
+ self.session.append(session)
###############################################################################
##
@@ -1850,11 +1850,9 @@ return 0;
"""
numa = ChkLib( 'numa', '%s' % Tools.gcc.pathname,
- 'numa', numa_test )
+ 'numa', numa_test, abort=True )
numa.run()
- if numa.fail:
- cfg.errln( 'Failed to find libnuma' )
## cfg hook before doc prep
cfg.doc_ready()