1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-07 01:58:28 +03:00

r10456: More SCons fixes:

- Add framework for fallback generating code
 - Move pread / pwrite replacement functions to libreplace
 - Support pidl builds correctly
 - Support asn1 builds correctly
 - Move OS-specific checks to lib/replace/SConscript
This commit is contained in:
Jelmer Vernooij 2005-09-23 16:32:52 +00:00 committed by Gerald (Jerry) Carter
parent 7be3ec4dbb
commit fbbfad0a1f
16 changed files with 282 additions and 142 deletions

View File

@ -6,6 +6,11 @@
# #
# Copyright (C) 2005 Jelmer Vernooij <jelmer@samba.org> # Copyright (C) 2005 Jelmer Vernooij <jelmer@samba.org>
# Published under the GNU GPL # Published under the GNU GPL
#
# TODO:
# - finish fallback code
# - finish proto code
# - support for init functions
import cPickle, string, os import cPickle, string, os
@ -21,7 +26,7 @@ hostenv = Environment(
tools=['default','pidl','proto','et','asn1'], tools=['default','pidl','proto','et','asn1'],
options=opts, options=opts,
CPPPATH=['#include','#','#lib'], CPPPATH=['#include','#','#lib'],
CPPDEFINES={'_SAMBA_BUILD_': None}, CPPDEFINES={'_SAMBA_BUILD_': None},
) )
# We don't care about NFS builds... # We don't care about NFS builds...
@ -114,23 +119,17 @@ if hostenv['configure']:
['strings.h','stdlib.h','sys/vfs.h','sys/fs/s5param.h','sys/filsys.h'] + \ ['strings.h','stdlib.h','sys/vfs.h','sys/fs/s5param.h','sys/filsys.h'] + \
['termios.h','termio.h','fnmatch.h','pwd.h','sys/termio.h'] + \ ['termios.h','termio.h','fnmatch.h','pwd.h','sys/termio.h'] + \
['sys/time.h','sys/statfs.h','sys/statvfs.h','stdarg.h'] + \ ['sys/time.h','sys/statfs.h','sys/statvfs.h','stdarg.h'] + \
['security/pam_modules.h','security/_pam_macros.h','dlfcn.h'] + \
['sys/syslog.h','syslog.h','stdint.h','inttypes.h','locale.h'] + \ ['sys/syslog.h','syslog.h','stdint.h','inttypes.h','locale.h'] + \
['shadow.h','nss.h','nss_common.h','ns_api.h','sys/security.h'] + \ ['shadow.h','nss.h','nss_common.h','ns_api.h','sys/security.h'] + \
['security/pam_appl.h','sys/capability.h','syscall.h','sys/syscall.h'] + \ ['security/pam_appl.h','sys/capability.h'] + \
['sys/acl.h','stdbool.h']: ['sys/acl.h','stdbool.h']:
if conf.CheckCHeader(h): if conf.CheckCHeader(h):
defines['HAVE_' + h.upper().replace('.','_').replace('/','_')] = 1 defines['HAVE_' + h.upper().replace('.','_').replace('/','_')] = 1
for f in ['dlopen','dlsym','dlerror','waitpid','getcwd','strdup'] + \ for f in ['setsid','pipe','crypt16','getauthuid','strftime','sigprocmask',
['strndup','strnlen','strerror','chroot','bzero','memset','strlcpy'] + \ 'sigblock','sigaction','initgroups','setgroups','sysconf', 'getpwanam',
['strlcat','memmove','vsnprintf','snprintf','asprintf','vasprintf'] + \ 'setlinebuf','srandom','random','srand','rand','usleep','timegm',
['setsid','pipe','crypt16','getauthuid','strftime','sigprocmask'] + \ 'backtrace','setbuffer']:
['sigblock','sigaction','innetgr','setnetgrent','getnetgrent'] + \
['endnetgrent','initgroups','setgroups','sysconf','mktime','rename'] + \
['ftruncate','chsize','getpwanam','setlinebuf','srandom','random'] + \
['srand','rand','setenv','usleep','syslog','vsyslog','timegm'] + \
['backtrace','setbuffer','pread','pwrite']:
if conf.CheckFunc(f): if conf.CheckFunc(f):
defines['HAVE_' + f.upper()] = 1 defines['HAVE_' + f.upper()] = 1
@ -210,7 +209,7 @@ SConscript(
dirs=['lib','torture','rpc_server','cldap_server','libcli', dirs=['lib','torture','rpc_server','cldap_server','libcli',
'nbt_server','client','ldap_server','libnet','nsswitch','web_server', 'nbt_server','client','ldap_server','libnet','nsswitch','web_server',
'smbd','dsdb','heimdal_build','ntptr','kdc','smb_server','ntvfs', 'smbd','dsdb','heimdal_build','ntptr','kdc','smb_server','ntvfs',
'winbind','scripting','auth', 'librpc']) 'winbind','scripting','auth', 'librpc','script/tests'])
hostenv.CProtoHeader(target='include/proto.h',source=proto_files) hostenv.CProtoHeader(target='include/proto.h',source=proto_files)

View File

@ -102,7 +102,7 @@ AC_FUNC_MEMCMP
AC_CHECK_FUNCS(setsid pipe crypt16 getauthuid) AC_CHECK_FUNCS(setsid pipe crypt16 getauthuid)
AC_CHECK_FUNCS(strftime sigprocmask sigblock sigaction) AC_CHECK_FUNCS(strftime sigprocmask sigblock sigaction)
AC_CHECK_FUNCS(setgroups sysconf getpwanam srandom random srand rand usleep) AC_CHECK_FUNCS(setgroups sysconf getpwanam srandom random srand rand usleep)
AC_CHECK_FUNCS(backtrace setbuffer pread pwrite) AC_CHECK_FUNCS(backtrace setbuffer)
# Assume non-shared by default and override below # Assume non-shared by default and override below
BLDSHARED="false" BLDSHARED="false"
@ -393,9 +393,6 @@ if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes]) AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
fi fi
AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[ AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
AC_TRY_COMPILE([#include <sys/types.h> AC_TRY_COMPILE([#include <sys/types.h>
#include <fcntl.h>], #include <fcntl.h>],

View File

@ -17,17 +17,20 @@ def asn1_emitter(target,source,env):
contents = node.get_contents() contents = node.get_contents()
for j in output_re.findall(contents): for j in output_re.findall(contents):
targets.append(str(node.get_dir()) + '/asn1_' + j + '.c') targets.append(str(node.get_dir()) + '/asn1_' + j + '.c')
targets.append("%s/%s.h" % (str(node.get_dir()), env['ASN1PREFIX']))
return targets, source return targets, source
asn1_builder = SCons.Builder.Builder(action='$ASN1COM', asn1_builder = SCons.Builder.Builder(action='$ASN1COM',
src_suffix = '.asn1', src_suffix = '.asn1',
suffix='.c', suffix='.c',
single_source=True,
emitter = asn1_emitter) emitter = asn1_emitter)
def generate(env): def generate(env):
env['ASN1'] = './bin/asn1_compile' env['ASN1'] = './bin/asn1_compile'
env['ASN1COM'] = '$ASN1 $SOURCE' env['ASN1PREFIX'] = 'asn1'
env['BUILDERS']['ASN1'] = asn1_builder env['ASN1COM'] = 'cd ${SOURCE.dir} && $ASN1 $ASN1PREFIX ${SOURCE.file}'
env['BUILDERS']['ASN1'] = asn1_builder
def exists(env): def exists(env):
return env.Detect('asn1_compile') return env.Detect('asn1_compile')

View File

@ -0,0 +1,34 @@
# Generate fallback configure + Makefile
# Copyright (C) 2005 Jelmer Vernooij <jelmer@samba.org>
# No support for:
# - cross-compilation
# - caching
# - config.status (?)
import SCons.Defaults
import SCons.Util
import SCons.Tool
# Configure structure:
# - Check for available tools first
# - Check for available tool capabilities (C99, volatile, etc)
# - Check for available `base' headers
# - Check for available types
# - Check for libs / headers
def configure_builder(target, source, env):
pass
# Makefile structure:
# - Declare all variables first
# - Declare targets + dependencies + actions
def makefile_builder(target, source, env):
pass
def generate(env):
env['BUILDERS']['ConfigureScript'] = configure_builder
env['BUILDERS']['MakefileIn'] = makefile_in_builder
def exists(env):
return 1

View File

@ -1,81 +0,0 @@
# Based on the M4 macro by Bruno Haible.
def exists(env):
return True
def generate(env):
env['custom_tests']['CheckIconv'] = CheckIconv
def _CheckIconvPath(context,path):
# Some systems have iconv in libc, some have it in libiconv (OSF/1 and
# those with the standalone portable libiconv installed).
context.Message("checking for iconv in " + path)
main = """
int main()
{
iconv_t cd = iconv_open("","");
iconv(cd,NULL,NULL,NULL,NULL);
iconv_close(cd);
return 0;
}"""
have_giconv_iconv = context.TryLink("""
#include <stdlib.h>
#include <giconv.h>
""" + main, '.c')
if have_giconv_iconv:
context.Result(1)
return ("giconv.h", "")
have_iconv_iconv = context.TryLink("""
#include <stdlib.h>
#include <iconv.h>
""" + main, '.c')
if have_iconv_iconv:
context.Result(1)
return ("iconv.h", "")
#FIXME: Add -lgiconv
have_giconv_lib_iconv = context.TryLink("""
#include <stdlib.h>
#include <giconv.h>
""" + main, '.c')
if have_giconv_lib_iconv:
context.Result(1)
return ("giconv.h", "-lgiconv")
#FIXME: Add -liconv
have_iconv_lib_iconv = context.TryLink("""
#include <stdlib.h>
#include <iconv.h>
"""+main,'.c')
if have_iconv_lib_iconv:
context.Result(1)
return ("iconv.h", "-liconv")
return None
def CheckIconv(context):
context.Message("checking for iconv")
look_dirs = ['/usr','/usr/local','/sw']
for p in look_dirs:
_CheckIconvPath(context,p) #FIXME: Handle return value
if context.TryRun("""
#include <iconv.h>
main() {
iconv_t cd = iconv_open("ASCII", "UCS-2LE");
if (cd == 0 || cd == (iconv_t)-1) return -1;
return 0;
}
""", '.c'):
context.Result(1)
return (1,[])
context.Result(0)
return (0,[])

View File

@ -10,7 +10,7 @@ import SCons.Scanner
idl_scanner = SCons.Scanner.ClassicCPP("PIDLScan", '.idl', 'CPPPATH', r'depends\(([^,]+),+\)', SCons.Node.FS.default_fs) idl_scanner = SCons.Scanner.ClassicCPP("PIDLScan", '.idl', 'CPPPATH', r'depends\(([^,]+),+\)', SCons.Node.FS.default_fs)
def idl_emitter(target, source, env): def ndr_emitter(target, source, env):
result = [] result = []
for s in source: for s in source:
base, ext = SCons.Util.splitext(str(s).split('/')[-1]) base, ext = SCons.Util.splitext(str(s).split('/')[-1])
@ -19,16 +19,34 @@ def idl_emitter(target, source, env):
result.append('gen_ndr/%s.h' % base) result.append('gen_ndr/%s.h' % base)
return result, source return result, source
pidl_builder = SCons.Builder.Builder(action='$PIDLCOM', ndr_builder = SCons.Builder.Builder(action='$NDRCOM',
emitter = idl_emitter, emitter = ndr_emitter,
src_suffix = '.idl', src_suffix = '.idl',
scanner = idl_scanner) scanner = idl_scanner)
def tdr_emitter(target, source, env):
result = []
for s in source:
base, ext = SCons.Util.splitext(str(s).split('/')[-1])
result.append('%s/tdr_%s.c' % (s.get_dir(), base))
result.append('%s/tdr_%s.h' % (s.get_dir(), base))
result.append('%s/%s.h' % (s.get_dir(), base))
return result, source
tdr_builder = SCons.Builder.Builder(action='$TDRCOM',
emitter = tdr_emitter,
src_suffix = '.idl',
single_source = True,
scanner = idl_scanner)
def generate(env): def generate(env):
env['PIDL'] = env.Detect(['./pidl/pidl', 'pidl']) env['PIDL'] = env.Detect(['./pidl/pidl', 'pidl'])
env['PIDLFLAGS'] = ['--outputdir', 'librpc/gen_ndr', '--ndr-header', '--ndr-parser', '--header'] env['NDRFLAGS'] = ['--outputdir', 'librpc/gen_ndr','--ndr-header', '--ndr-parser','--header']
env['PIDLCOM'] = '$PIDL $PIDLFLAGS -- $SOURCE' env['TDRFLAGS'] = ['--tdr-parser', '--tdr-header','--header']
env['BUILDERS']['NdrMarshaller'] = pidl_builder env['NDRCOM'] = '$PIDL $NDRFLAGS -- $SOURCES'
env['TDRCOM'] = 'cd ${SOURCE.dir} && $PIDL $TDRFLAGS -- ${SOURCE.file}'
env['BUILDERS']['NdrMarshaller'] = ndr_builder
env['BUILDERS']['TdrMarshaller'] = tdr_builder
def exists(env): def exists(env):
return env.Detect(['./pidl/pidl','pidl']) return env.Detect(['./pidl/pidl','pidl'])

View File

@ -5,9 +5,9 @@ hostenv.StaticLibrary('heimdal_kdc',
'../kdc/log.c','../kdc/misc.c','../kdc/524.c','../kdc/kerberos4.c', '../kdc/log.c','../kdc/misc.c','../kdc/524.c','../kdc/kerberos4.c',
'../kdc/kaserver.c','../kdc/process.c']) '../kdc/kaserver.c','../kdc/process.c'])
hdb_asn1 = hostenv.ASN1('../heimdal/lib/hdb/hdb.asn1') hdb_asn1 = hostenv.ASN1('../heimdal/lib/hdb/hdb.asn1',ASN1PREFIX='hdb_asn1')
gssapi_asn1 = hostenv.ASN1('../heimdal/lib/gssapi/spnego.asn1') gssapi_asn1 = hostenv.ASN1('../heimdal/lib/gssapi/spnego.asn1',ASN1PREFIX='spnego_asn1')
k5_asn1 = hostenv.ASN1('../heimdal/lib/asn1/k5.asn1') k5_asn1 = hostenv.ASN1('../heimdal/lib/asn1/k5.asn1',ASN1PREFIX='k5_asn1')
hostenv.StaticLibrary('heimdal_hdb', hostenv.StaticLibrary('heimdal_hdb',
['../heimdal/lib/hdb/db.c','../heimdal/lib/hdb/hdb.c','../heimdal/lib/hdb/ext.c','../heimdal/lib/hdb/keys.c', ['../heimdal/lib/hdb/db.c','../heimdal/lib/hdb/hdb.c','../heimdal/lib/hdb/ext.c','../heimdal/lib/hdb/keys.c',

View File

@ -1,15 +1,91 @@
#!/usr/bin/env python
# tastes like -*- python -*-
Import('hostenv') Import('hostenv')
SConscript('../../build/scons/iconv.py')
# tastes like -*- python -*-
#conf = Configure( custom_tests = { 'CheckIconv' : CheckIconv }) def _CheckIconvPath(context,path):
#(have_iconv,iconv) = conf.CheckIconv() # Some systems have iconv in libc, some have it in libiconv (OSF/1 and
#conf.Finish() # those with the standalone portable libiconv installed).
context.Message("checking for iconv in " + path + " ... ")
#if not have_iconv: main = """
# print "Install iconv for better charset compatibility" int main()
{
iconv_t cd = iconv_open("","");
iconv(cd,NULL,NULL,NULL,NULL);
iconv_close(cd);
return 0;
}"""
iconv = [] have_giconv_iconv = context.TryLink("""
#include <stdlib.h>
#include <giconv.h>
""" + main, '.c')
if have_giconv_iconv:
context.Result(1)
return ("giconv.h", "")
have_iconv_iconv = context.TryLink("""
#include <stdlib.h>
#include <iconv.h>
""" + main, '.c')
if have_iconv_iconv:
context.Result(1)
return ("iconv.h", "")
#FIXME: Add -lgiconv
have_giconv_lib_iconv = context.TryLink("""
#include <stdlib.h>
#include <giconv.h>
""" + main, '.c')
if have_giconv_lib_iconv:
context.Result(1)
return ("giconv.h", "-lgiconv")
#FIXME: Add -liconv
have_iconv_lib_iconv = context.TryLink("""
#include <stdlib.h>
#include <iconv.h>
"""+main,'.c')
if have_iconv_lib_iconv:
context.Result(1)
return ("iconv.h", "-liconv")
return None
def CheckIconv(context):
context.Message("checking for iconv ... ")
look_dirs = ['/usr','/usr/local','/sw']
for p in look_dirs:
_CheckIconvPath(context,p) #FIXME: Handle return value
if context.TryRun("""
#include <iconv.h>
main() {
iconv_t cd = iconv_open("ASCII", "UCS-2LE");
if (cd == 0 || cd == (iconv_t)-1) return -1;
return 0;
}
""", '.c'):
context.Result(1)
return (1,[])
context.Result(0)
return (0,[])
if hostenv['configure']:
conf = hostenv.Configure( custom_tests = { 'CheckIconv' : CheckIconv })
(have_iconv,iconv) = conf.CheckIconv()
conf.Finish()
if not have_iconv:
print "Install iconv for better charset compatibility"
else:
iconv = [] # FIXME
charset = hostenv.StaticLibrary('charset',['iconv.c','charcnv.c',iconv]) charset = hostenv.StaticLibrary('charset',['iconv.c','charcnv.c',iconv])
Export('charset') Export('charset')

View File

@ -9,4 +9,12 @@ regshell = hostenv.Program('regshell', ['tools/regshell.c',registry,talloc,basic
regpatch = hostenv.Program('regpatch', ['tools/regpatch.c',registry,talloc,basic,popt_common,popt,param]) regpatch = hostenv.Program('regpatch', ['tools/regpatch.c',registry,talloc,basic,popt_common,popt,param])
regdiff = hostenv.Program('regdiff', ['tools/regdiff.c',registry,talloc,basic,popt_common,popt,param]) regdiff = hostenv.Program('regdiff', ['tools/regdiff.c',registry,talloc,basic,popt_common,popt,param])
hostenv.StaticLibrary('reg_backend_dir.c')
hostenv.StaticLibrary('reg_backend_gconf.c')
hostenv.StaticLibrary('reg_backend_ldb.c')
hostenv.StaticLibrary('reg_backend_nt4', ['reg_backend_nt4.c',hostenv.TdrMarshaller('regf.idl')])
hostenv.StaticLibrary('reg_backend_rpc.c')
hostenv.StaticLibrary('reg_backend_w95.c')
hostenv.StaticLibrary('reg_backend_wine.c')
hostenv.Install(paths['BINDIR'], [regtree,regshell,regpatch,regdiff]) hostenv.Install(paths['BINDIR'], [regtree,regshell,regpatch,regdiff])

View File

@ -46,6 +46,8 @@ bzero
strerror strerror
errno errno
mkstemp (a secure one!) mkstemp (a secure one!)
pread
pwrite
Types: Types:
socklen_t socklen_t

View File

@ -1,11 +1,31 @@
Import('hostenv') #!/usr/bin/env python
Import('hostenv defines')
if hostenv['configure']: if hostenv['configure']:
conf = Configure(hostenv) conf = Configure(hostenv)
#FIXME: conf.CheckBrokenInetNtoa() for f in ['memset','syslog','setnetgrent','getnetgrent','endnetgrent', \
'mktemp']:
if not conf.CheckFunc(f,'c'):
print "Required function `%s' not found" % f
exit(1)
for f in ['strtoull','__strtoull','strtouq','strtoll','__strtoll','strtoq', for f in ['strtoull','__strtoull','strtouq','strtoll','__strtoll','strtoq',
'seteuid','setresuid','setegid','setresgid']: 'seteuid','setresuid','setegid','setresgid','dlsym','dlopen',
conf.CheckFunc(f,'c') 'dlerror','dlclose','waitpid','getcwd','strdup','strndup',
'strnlen','strerror','bzero','chroot','strlcpy','strlcat',
'memmove','vsnprintf','asprintf','snprintf','vasprintf',
'innetgr','mktime','rename','ftruncate','chsize','setlinebuf',
'setenv','vsyslog','pread','pwrite']:
if conf.CheckFunc(f,'c'):
defines['HAVE_' + f.upper()] = 1
for h in ['dlfcn.h']:
if conf.CheckCHeader('dlfcn.h'):
defines['HAVE_' + h.upper().replace('.','_').replace('/','_')] = 1
if not conf.CheckType('socklen_t'):
defines['socklen_t'] = 'int'
conf.Finish() conf.Finish()
hostenv.StaticLibrary('repdir', ['repdir/repdir.c']) hostenv.StaticLibrary('repdir', ['repdir/repdir.c'])

View File

@ -22,6 +22,7 @@ AC_CHECK_FUNCS(strtoull __strtoull strtouq strtoll __strtoll strtoq)
AC_CHECK_FUNCS(seteuid setresuid setegid setresgid chroot bzero strerror) AC_CHECK_FUNCS(seteuid setresuid setegid setresgid chroot bzero strerror)
AC_CHECK_FUNCS(timegm setenv vsyslog setlinebuf mktime ftruncate chsize rename) AC_CHECK_FUNCS(timegm setenv vsyslog setlinebuf mktime ftruncate chsize rename)
AC_CHECK_FUNCS(waitpid strnlen strlcpy strlcat innetgr initgroups memmove strdup) AC_CHECK_FUNCS(waitpid strnlen strlcpy strlcat innetgr initgroups memmove strdup)
AC_CHECK_FUNCS(pread pwrite)
AC_HAVE_DECL(setresuid, [#include <unistd.h>]) AC_HAVE_DECL(setresuid, [#include <unistd.h>])
AC_HAVE_DECL(setresgid, [#include <unistd.h>]) AC_HAVE_DECL(setresgid, [#include <unistd.h>])
AC_HAVE_DECL(errno, [#include <errno.h>]) AC_HAVE_DECL(errno, [#include <errno.h>])

View File

@ -523,3 +523,25 @@ int rep_mkstemp(char *template)
return open(p, O_CREAT|O_EXCL|O_RDWR, 0600); return open(p, O_CREAT|O_EXCL|O_RDWR, 0600);
} }
#endif #endif
#ifndef HAVE_PREAD
static ssize_t pread(int __fd, void *__buf, size_t __nbytes, off_t __offset)
{
if (lseek(__fd, __offset, SEEK_SET) != __offset) {
return -1;
}
return read(__fd, __buf, __nbytes);
}
#endif
#ifndef HAVE_PWRITE
static ssize_t pwrite(int __fd, const void *__buf, size_t __nbytes, off_t __offset)
{
if (lseek(__fd, __offset, SEEK_SET) != __offset) {
return -1;
}
return write(__fd, __buf, __nbytes);
}
#endif

View File

@ -1,5 +1,64 @@
#!/usr/bin/env python
Import('hostenv') Import('hostenv')
if hostenv['configure']:
conf = hostenv.Configure()
conf.CheckCHeader('sys/socket.h')
conf.CheckCHeader('sys/sockio.h')
conf.CheckCHeader('sys/un.h')
#HAVE_SOCK_SIN_LEN
conf.TryCompile("""
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main(void)
{
struct sockaddr_in sock; sock.sin_len = sizeof(sock);
return 0;
}""", '.c')
#HAVE_UNIXSOCKET
conf.TryCompile("""
#include <sys/types.h>
#include <stdlib.h>
#include <stddef.h>
#include <sys/socket.h>
#include <sys/un.h>],
int main(void)
{
struct sockaddr_un sunaddr;
sunaddr.sun_family = AF_UNIX;
return 0;
}""", '.c')
# HAVE_IPV6
conf.CheckFunc('gethostbyname2')
# The following test taken from the cvs sources
# If we can't find connect, try looking in -lsocket, -lnsl, and -linet.
# The Irix 5 libc.so has connect and gethostbyname, but Irix 5 also has
# libsocket.so which has a bad implementation of gethostbyname (it
# only looks in /etc/hosts), so we only look for -lsocket if we need
# it.
connect_libs = []
if not conf.CheckFunc('connect'):
for l in ['nsl_s','nsl','socket','inet']:
if conf.CheckLib(l, 'connect'):
connect_libs.append(l)
break
# HAVE_WORKING_AF_LOCAL
# FIXME: Try compiling build/tests/unixsock.c
conf.Finish()
hostenv.StaticLibrary('socket_ipv4.c') hostenv.StaticLibrary('socket_ipv4.c')
hostenv.StaticLibrary('socket_ipv6.c') hostenv.StaticLibrary('socket_ipv6.c')
hostenv.StaticLibrary('socket_unix.c') hostenv.StaticLibrary('socket_unix.c')
hostenv.StaticLibrary('socket', ['socket.c','access.c','connect.c']) hostenv.StaticLibrary('socket', ['socket.c','access.c','connect.c'])

View File

@ -40,26 +40,6 @@
#define CHECK_READ_ONLY(req) do { if (lp_readonly(req->tcon->service)) return NT_STATUS_ACCESS_DENIED; } while (0) #define CHECK_READ_ONLY(req) do { if (lp_readonly(req->tcon->service)) return NT_STATUS_ACCESS_DENIED; } while (0)
#ifndef HAVE_PREAD
static ssize_t pread(int __fd, void *__buf, size_t __nbytes, off_t __offset)
{
if (lseek(__fd, __offset, SEEK_SET) != __offset) {
return -1;
}
return read(__fd, __buf, __nbytes);
}
#endif
#ifndef HAVE_PWRITE
static ssize_t pwrite(int __fd, const void *__buf, size_t __nbytes, off_t __offset)
{
if (lseek(__fd, __offset, SEEK_SET) != __offset) {
return -1;
}
return write(__fd, __buf, __nbytes);
}
#endif
/* /*
connect to a share - used when a tree_connect operation comes connect to a share - used when a tree_connect operation comes
in. For a disk based backend we needs to ensure that the base in. For a disk based backend we needs to ensure that the base

View File

@ -0,0 +1,2 @@
Alias('quicktest', '#selftest.sh st quick SOCKET_WRAPPER')
Alias('test', '#selftest.sh st all SOCKET_WRAPPER')