mirror of
https://github.com/samba-team/samba.git
synced 2025-12-07 20:23:50 +03:00
build: auto-detect platforms which don't support shared libs
This commit is contained in:
@@ -1,7 +1,9 @@
|
|||||||
# a set of config tests that use the samba_autoconf functions
|
# a set of config tests that use the samba_autoconf functions
|
||||||
# to test for commonly needed configuration options
|
# to test for commonly needed configuration options
|
||||||
|
|
||||||
import os, Build, shutil, Utils
|
import os, Build, shutil, Utils
|
||||||
from Configure import conf
|
from Configure import conf
|
||||||
|
from samba_utils import *
|
||||||
|
|
||||||
@conf
|
@conf
|
||||||
def CHECK_ICONV(conf, define='HAVE_NATIVE_ICONV'):
|
def CHECK_ICONV(conf, define='HAVE_NATIVE_ICONV'):
|
||||||
@@ -67,8 +69,15 @@ def CHECK_CHARSET_EXISTS(conf, charset, outcharset='UCS-2LE', headers=None, defi
|
|||||||
# into several parts. I'd quite like to create a set of CHECK_COMPOUND()
|
# into several parts. I'd quite like to create a set of CHECK_COMPOUND()
|
||||||
# functions that make writing complex compound tests like this much easier
|
# functions that make writing complex compound tests like this much easier
|
||||||
@conf
|
@conf
|
||||||
def CHECK_RPATH_SUPPORT(conf):
|
def CHECK_LIBRARY_SUPPORT(conf, rpath=False, msg=None):
|
||||||
'''see if the platform supports rpath for libraries'''
|
'''see if the platform supports building libraries'''
|
||||||
|
|
||||||
|
if msg is None:
|
||||||
|
if rpath:
|
||||||
|
msg = "rpath library support"
|
||||||
|
else:
|
||||||
|
msg = "building library support"
|
||||||
|
|
||||||
k = 0
|
k = 0
|
||||||
while k < 10000:
|
while k < 10000:
|
||||||
dir = os.path.join(conf.blddir, '.conf_check_%d' % k)
|
dir = os.path.join(conf.blddir, '.conf_check_%d' % k)
|
||||||
@@ -127,19 +136,28 @@ def CHECK_RPATH_SUPPORT(conf):
|
|||||||
o = bld(features='cc cprogram',
|
o = bld(features='cc cprogram',
|
||||||
source='main.c',
|
source='main.c',
|
||||||
target='prog1',
|
target='prog1',
|
||||||
uselib_local='lib1',
|
uselib_local='lib1')
|
||||||
rpath=os.path.join(bdir, 'default/libdir'))
|
|
||||||
|
if rpath:
|
||||||
|
o.rpath=os.path.join(bdir, 'default/libdir')
|
||||||
|
|
||||||
# compile the program
|
# compile the program
|
||||||
try:
|
try:
|
||||||
bld.compile()
|
bld.compile()
|
||||||
except:
|
except:
|
||||||
conf.check_message('rpath support', '', False)
|
conf.check_message(msg, '', False)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
# path for execution
|
# path for execution
|
||||||
lastprog = o.link_task.outputs[0].abspath(env)
|
lastprog = o.link_task.outputs[0].abspath(env)
|
||||||
|
|
||||||
|
if not rpath:
|
||||||
|
if 'LD_LIBRARY_PATH' in os.environ:
|
||||||
|
old_ld_library_path = os.environ['LD_LIBRARY_PATH']
|
||||||
|
else:
|
||||||
|
old_ld_library_path = None
|
||||||
|
ADD_LD_LIBRARY_PATH(os.path.join(bdir, 'default/libdir'))
|
||||||
|
|
||||||
# we need to run the program, try to get its result
|
# we need to run the program, try to get its result
|
||||||
args = []
|
args = []
|
||||||
proc = Utils.pproc.Popen([lastprog] + args, stdout=Utils.pproc.PIPE, stderr=Utils.pproc.PIPE)
|
proc = Utils.pproc.Popen([lastprog] + args, stdout=Utils.pproc.PIPE, stderr=Utils.pproc.PIPE)
|
||||||
@@ -151,5 +169,8 @@ def CHECK_RPATH_SUPPORT(conf):
|
|||||||
w('\nreturncode %r\n' % proc.returncode)
|
w('\nreturncode %r\n' % proc.returncode)
|
||||||
ret = (proc.returncode == 0)
|
ret = (proc.returncode == 0)
|
||||||
|
|
||||||
conf.check_message('rpath support', '', ret)
|
if not rpath:
|
||||||
|
os.environ['LD_LIBRARY_PATH'] = old_ld_library_path or ''
|
||||||
|
|
||||||
|
conf.check_message(msg, '', ret)
|
||||||
return ret
|
return ret
|
||||||
|
|||||||
@@ -109,8 +109,12 @@ def configure(conf):
|
|||||||
headers='stdio.h',
|
headers='stdio.h',
|
||||||
msg='Checking simple C program')
|
msg='Checking simple C program')
|
||||||
|
|
||||||
|
# see if we can build shared libs
|
||||||
|
if not conf.CHECK_LIBRARY_SUPPORT():
|
||||||
|
conf.env.DISABLE_SHARED = True
|
||||||
|
|
||||||
# check for rpath
|
# check for rpath
|
||||||
if not conf.env.DISABLE_SHARED and conf.CHECK_RPATH_SUPPORT():
|
if not conf.env.DISABLE_SHARED and conf.CHECK_LIBRARY_SUPPORT(rpath=True):
|
||||||
conf.env.RPATH_ON_BUILD = not Options.options.disable_rpath_build
|
conf.env.RPATH_ON_BUILD = not Options.options.disable_rpath_build
|
||||||
conf.env.RPATH_ON_INSTALL = (conf.env.RPATH_ON_BUILD and
|
conf.env.RPATH_ON_INSTALL = (conf.env.RPATH_ON_BUILD and
|
||||||
not Options.options.disable_rpath_install)
|
not Options.options.disable_rpath_install)
|
||||||
|
|||||||
Reference in New Issue
Block a user