From 5281260813ad889a17a3150f2435a43e3e36a9e7 Mon Sep 17 00:00:00 2001 From: Christian Ambach Date: Thu, 20 Jun 2013 18:26:04 +0200 Subject: [PATCH 1/5] waf: fix build on AIX7 the same works for AIX 5,6,7 so leave away the version specifics (as autoconf build did) Signed-off-by: Christian Ambach --- buildtools/wafsamba/wscript | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildtools/wafsamba/wscript b/buildtools/wafsamba/wscript index 17aef27..d115b5f 100755 --- a/buildtools/wafsamba/wscript +++ b/buildtools/wafsamba/wscript @@ -322,7 +322,7 @@ def configure(conf): else: conf.env.HAVE_LD_VERSION_SCRIPT = False - if sys.platform == "aix5" or sys.platform == "aix6": + if sys.platform.startswith('aix'): conf.DEFINE('_ALL_SOURCE', 1, add_to_cflags=True) # Might not be needed if ALL_SOURCE is defined # conf.DEFINE('_XOPEN_SOURCE', 600, add_to_cflags=True) -- 1.8.1.2 From effb2f8d1934e19758f90a953521fc438e4b9f96 Mon Sep 17 00:00:00 2001 From: Christian Ambach Date: Thu, 20 Jun 2013 18:27:13 +0200 Subject: [PATCH 2/5] s3:lib/system fix build on AIX 7 AIX uses struct stat64 with struct timespec64, so direct assignment does not work any more. Pair-Programmed-With: Volker Lendecke Signed-off-by: Christian Ambach --- source3/lib/system.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/source3/lib/system.c b/source3/lib/system.c index 8dbf7dc..8252e4f 100644 --- a/source3/lib/system.c +++ b/source3/lib/system.c @@ -228,7 +228,10 @@ static struct timespec get_atimespec(const struct stat *pst) return ret; #else #if defined(HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC) - return pst->st_atim; + struct timespec ret; + ret.tv_sec = pst->st_atim.tv_sec; + ret.tv_nsec = pst->st_atim.tv_nsec; + return ret; #elif defined(HAVE_STRUCT_STAT_ST_MTIMENSEC) struct timespec ret; ret.tv_sec = pst->st_atime; @@ -263,7 +266,10 @@ static struct timespec get_mtimespec(const struct stat *pst) return ret; #else #if defined(HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC) - return pst->st_mtim; + struct timespec ret; + ret.tv_sec = pst->st_mtim.tv_sec; + ret.tv_nsec = pst->st_mtim.tv_nsec; + return ret; #elif defined(HAVE_STRUCT_STAT_ST_MTIMENSEC) struct timespec ret; ret.tv_sec = pst->st_mtime; @@ -298,7 +304,10 @@ static struct timespec get_ctimespec(const struct stat *pst) return ret; #else #if defined(HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC) - return pst->st_ctim; + struct timespec ret; + ret.tv_sec = pst->st_ctim.tv_sec; + ret.tv_nsec = pst->st_ctim.tv_nsec; + return ret; #elif defined(HAVE_STRUCT_STAT_ST_MTIMENSEC) struct timespec ret; ret.tv_sec = pst->st_ctime; -- 1.8.1.2 From 1db350e23b5a7d3f7a0342fb1eb9ed01bd87cc2f Mon Sep 17 00:00:00 2001 From: Christian Ambach Date: Tue, 25 Jun 2013 18:37:35 +0200 Subject: [PATCH 3/5] waf: add --without-gettext option Signed-off-by: Christian Ambach --- buildtools/wafsamba/wscript | 3 +++ 1 file changed, 3 insertions(+) diff --git a/buildtools/wafsamba/wscript b/buildtools/wafsamba/wscript index d115b5f..fe2e515 100755 --- a/buildtools/wafsamba/wscript +++ b/buildtools/wafsamba/wscript @@ -82,6 +82,9 @@ def set_options(opt): help='additional directory to search for gettext', action='store', dest='gettext_location', default='/usr/local', match = ['Checking for library intl', 'Checking for header libintl.h']) + opt.add_option('--without-gettext', + help=("Disable use of gettext"), + action="store_true", dest='disable_gettext', default=False) gr = opt.option_group('developer options') -- 1.8.1.2 From 9059cfe7d0a59e483a93e6f1d97e1a92e87c3e4e Mon Sep 17 00:00:00 2001 From: Christian Ambach Date: Thu, 1 Aug 2013 22:28:05 +0200 Subject: [PATCH 4/5] waf: consolidate libintl related checks consolidate the dealing with functions from libintl and the handling of checking if libiconv is required or not to a common place in lib/replace Signed-off-by: Christian Ambach --- lib/replace/wscript | 36 ++++++++++++++++++++++++--------- source3/wscript | 7 +++---- source4/heimdal_build/wscript_configure | 4 +--- 3 files changed, 30 insertions(+), 17 deletions(-) diff --git a/lib/replace/wscript b/lib/replace/wscript index 2117f56..d7aea6c 100644 --- a/lib/replace/wscript +++ b/lib/replace/wscript @@ -89,7 +89,7 @@ struct foo bar = { .y = 'X', .x = 1 }; sys/sockio.h sys/un.h''', together=True) conf.CHECK_HEADERS('sys/uio.h ifaddrs.h direct.h dirent.h') conf.CHECK_HEADERS('windows.h winsock2.h ws2tcpip.h') - conf.CHECK_HEADERS('libintl.h errno.h') + conf.CHECK_HEADERS('errno.h') conf.CHECK_HEADERS('gcrypt.h getopt.h iconv.h') conf.CHECK_HEADERS('sys/inotify.h memory.h nss.h sasl/sasl.h') conf.CHECK_HEADERS('security/pam_appl.h zlib.h asm/unistd.h') @@ -363,17 +363,33 @@ removeea setea headers='netinet/in.h arpa/nameser.h resolv.h') - if not conf.CHECK_FUNCS_IN('gettext', 'intl', checklibc=True, headers='libintl.h'): - # Some hosts need lib iconv for linking with lib intl - # So we try with flags just in case it helps. - oldflags = conf.env['LDFLAGS_INTL'] - conf.env['LDFLAGS_INTL'] = "-liconv" - if not conf.CHECK_LIB('intl'): - conf.env['LDFLAGS_INTL'] = oldflags + conf.env.intl_libs='' + if not Options.options.disable_gettext: + conf.CHECK_HEADERS('libintl.h') + conf.CHECK_LIB('intl') + # *textdomain functions are not strictly necessary + conf.CHECK_FUNCS_IN('bindtextdomain textdomain bind_textdomain_codeset', + 'intl', checklibc=True, headers='libintl.h') + # gettext and dgettext must exist + if conf.CHECK_FUNCS_IN('dgettext gettext', 'intl', checklibc=True, headers='libintl.h'): + # save for dependency definitions + conf.env.intl_libs='intl' else: - conf.CHECK_FUNCS_IN('gettext', 'intl', checklibc=True, headers='libintl.h') + # Some hosts need lib iconv for linking with lib intl + # So we try with flags just in case it helps. + oldflags = conf.env['EXTRA_LDFLAGS']; + conf.env['EXTRA_LDFLAGS'].extend("-liconv") + conf.CHECK_FUNCS_IN('dgettext gettext bindtextdomain textdomain bind_textdomain_codeset', + 'intl', headers='libintl.h') + conf.env['EXTRA_LDFLAGS'] = oldflags + if conf.env['HAVE_GETTEXT'] and conf.env['HAVE_DGETTEXT']: + # save for dependency definitions + conf.env.intl_libs='iconv intl' + else: + conf.fatal('library gettext not found, try specifying the path to ' + + 'it with --with-gettext= or ' + + '--without-gettext to build without''') - conf.CHECK_FUNCS_IN('dgettext gettext', 'intl', headers='libintl.h') conf.CHECK_FUNCS_IN('pthread_create', 'pthread', checklibc=True, headers='pthread.h') conf.CHECK_FUNCS_IN('crypt', 'crypt', checklibc=True) diff --git a/source3/wscript b/source3/wscript index 3c0145b..9bf443c 100644 --- a/source3/wscript +++ b/source3/wscript @@ -98,7 +98,6 @@ def configure(conf): conf.CHECK_FUNCS('memalign posix_memalign hstrerror') conf.CHECK_FUNCS('shmget') conf.CHECK_FUNCS_IN('shm_open', 'rt', checklibc=True) - conf.CHECK_FUNCS('gettext dgettext bindtextdomain textdomain bind_textdomain_codeset') #FIXME: for some reason this one still fails conf.CHECK_FUNCS_IN('yp_get_default_domain', 'nsl') conf.CHECK_FUNCS_IN('dn_expand _dn_expand __dn_expand', 'resolv') @@ -331,8 +330,8 @@ if (0) { conf.CHECK_FUNCS(''' _acl __acl atexit -bindtextdomain _chdir __chdir chflags chmod _close __close _closedir -__closedir crypt16 devnm dgettext dirfd + _chdir __chdir chflags chmod _close __close _closedir +__closedir crypt16 devnm dirfd DNSServiceRegister _dup __dup _dup2 __dup2 endmntent execl _facl __facl _fchdir __fchdir fchmod fchown _fcntl __fcntl fcvt fcvtl fdatasync @@ -341,7 +340,7 @@ fsetxattr _fstat __fstat fsync futimens futimes __fxstat getauthuid getcwd _getcwd __getcwd getdents __getdents getdirentries getgrent getgrnam getgrouplist getgrset getmntent getpagesize -getpwanam getpwent_r getrlimit gettext +getpwanam getpwent_r getrlimit glob grantpt hstrerror initgroups innetgr llseek _llseek __llseek _lseek __lseek _lstat __lstat lutimes diff --git a/source4/heimdal_build/wscript_configure b/source4/heimdal_build/wscript_configure index 2bb465a..bed63d6 100755 --- a/source4/heimdal_build/wscript_configure +++ b/source4/heimdal_build/wscript_configure @@ -19,7 +19,7 @@ conf.CHECK_HEADERS('ifaddrs.h') conf.CHECK_HEADERS('''crypt.h errno.h inttypes.h netdb.h signal.h sys/bswap.h sys/file.h sys/stropts.h sys/timeb.h sys/times.h sys/uio.h sys/un.h sys/utsname.h time.h timezone.h ttyname.h netinet/in.h - netinet/in6.h netinet6/in6.h libintl.h''') + netinet/in6.h netinet6/in6.h''') conf.CHECK_HEADERS('curses.h term.h termcap.h', together=True) @@ -42,8 +42,6 @@ conf.CHECK_FUNCS_IN('''getnameinfo sendmsg socket getipnodebyname gethostent get 'socket nsl', checklibc=True) -conf.CHECK_FUNCS_IN('dgettext gettext', 'intl', headers='libintl.h') - conf.CHECK_FUNCS('iruserok') conf.CHECK_FUNCS('bswap16') -- 1.8.1.2 From 89ff20e821537767ba62a1f7319ae7dc7d9f2947 Mon Sep 17 00:00:00 2001 From: Christian Ambach Date: Thu, 1 Aug 2013 23:00:21 +0200 Subject: [PATCH 5/5] waf: replace dependency to libintl with calculated dependency depending on the result of the configure checks (and the potential use of the --without-gettext option), the dependency on libintl can also be libintl + libiconv or none of them exchange the dependencies against the one stored as the result of the configure check to make sure the binaries are linked against the correct set of libraries Signed-off-by: Christian Ambach --- nsswitch/wscript_build | 2 +- source3/wscript_build | 4 +++- source4/heimdal_build/wscript_build | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/nsswitch/wscript_build b/nsswitch/wscript_build index a7d6489..d5ba1ac 100644 --- a/nsswitch/wscript_build +++ b/nsswitch/wscript_build @@ -81,7 +81,7 @@ elif (host_os.rfind('aix') > -1): if bld.CONFIG_SET('WITH_PAM_MODULES') and bld.CONFIG_SET('HAVE_PAM_START'): bld.SAMBA_LIBRARY('pamwinbind', source='pam_winbind.c', - deps='intl talloc wbclient winbind-client iniparser pam', + deps='talloc wbclient winbind-client iniparser pam ' + bld.env.intl_libs, cflags='-DLOCALEDIR=\"%s/locale\"' % bld.env.DATADIR, realname='pam_winbind.so', install_path='${PAMMODULESDIR}' diff --git a/source3/wscript_build b/source3/wscript_build index a8bdaf0..4522160 100755 --- a/source3/wscript_build +++ b/source3/wscript_build @@ -1267,7 +1267,9 @@ bld.SAMBA3_BINARY('net', talloc netapi addns - intl + ''' + + bld.env.intl_libs + + ''' popt_samba3 pdb libsmb diff --git a/source4/heimdal_build/wscript_build b/source4/heimdal_build/wscript_build index 8ca8788..b06c149 100644 --- a/source4/heimdal_build/wscript_build +++ b/source4/heimdal_build/wscript_build @@ -670,7 +670,7 @@ if not bld.CONFIG_SET("USING_SYSTEM_KRB5"): HEIMDAL_LIBRARY('krb5', KRB5_SOURCE, version_script='lib/krb5/version-script.map', includes='../heimdal/lib/krb5 ../heimdal/lib/asn1 ../heimdal/include', - deps='roken wind asn1 hx509 hcrypto intl com_err HEIMDAL_CONFIG heimbase execinfo', + deps='roken wind asn1 hx509 hcrypto com_err HEIMDAL_CONFIG heimbase execinfo ' + bld.env.intl_libs, vnum='26.0.0', ) KRB5_PROTO_SOURCE = KRB5_SOURCE + ['lib/krb5/expand_path.c', 'lib/krb5/plugin.c', 'lib/krb5/context.c'] @@ -894,7 +894,7 @@ if not bld.CONFIG_SET('USING_SYSTEM_COM_ERR'): HEIMDAL_LIBRARY('com_err', 'lib/com_err/com_err.c lib/com_err/error.c', includes='../heimdal/lib/com_err', - deps='roken intl', + deps='roken ' + bld.env.intl_libs, vnum='0.25', version_script='lib/com_err/version-script.map', ) -- 1.8.1.2