From 9c78cf38476248c2e42d31416f71b06e5c76576b Mon Sep 17 00:00:00 2001 From: Louis Leseur Date: Wed, 19 Apr 2023 17:23:41 +0200 Subject: [PATCH] net-fs/samba: bump to 4.16.8 From ::gentoo. This version adds python 3.11 to PYTHON_COMPAT. Signed-off-by: Louis Leseur --- net-fs/samba/Manifest | 1 + .../ldb-2.5.2-skip-wav-tevent-check.patch | 12 + .../samba-4.15.12-configure-clang16.patch | 117 ++++++ .../samba-4.15.9-libunwind-automagic.patch | 118 ++++++ .../files/samba-4.16.1-netdb-defines.patch | 25 ++ ...amba-4.16.2-fix-musl-without-innetgr.patch | 25 ++ net-fs/samba/samba-4.16.8.ebuild | 377 ++++++++++++++++++ 7 files changed, 675 insertions(+) create mode 100644 net-fs/samba/files/ldb-2.5.2-skip-wav-tevent-check.patch create mode 100644 net-fs/samba/files/samba-4.15.12-configure-clang16.patch create mode 100644 net-fs/samba/files/samba-4.15.9-libunwind-automagic.patch create mode 100644 net-fs/samba/files/samba-4.16.1-netdb-defines.patch create mode 100644 net-fs/samba/files/samba-4.16.2-fix-musl-without-innetgr.patch create mode 100644 net-fs/samba/samba-4.16.8.ebuild diff --git a/net-fs/samba/Manifest b/net-fs/samba/Manifest index 03fe06205..fefa78bdd 100644 --- a/net-fs/samba/Manifest +++ b/net-fs/samba/Manifest @@ -1 +1,2 @@ DIST samba-4.15.7.tar.gz 19290930 BLAKE2B 4a295f79d38212d4c6917ed61a22e4204b5ea3d5e26f30b65d1e7e81842e92405870dd40fd4d05ec1126a532bdb1ddea300848387a4c64370ba5c2c1354ee8e5 SHA512 beffb09b5bcd62991398d39c7a8aec5fed0c51d550e2f0fb42b2e0a09094f4c6a8f29adf708c4969db12329f5c7343d2debd04315107b79bef59e99a4a7e4ce4 +DIST samba-4.16.8.tar.gz 30682100 BLAKE2B bbb9a89a39cc0bae88ba350df38aae35df0bd18c27dd37b093eb023cf71274c12f14c44037e9704404ee3ba27ab930e866b3b951bcc7a5f4499cbc544f231e6b SHA512 55fa977e046de4470a9f1cb4c7956ca1368a21fc88e6bb6ae93d3cadb5400caaebd5b7d51a5ff1aaea884ec58d8abe6c90f448168aaa175d0f6c018f1a913c70 diff --git a/net-fs/samba/files/ldb-2.5.2-skip-wav-tevent-check.patch b/net-fs/samba/files/ldb-2.5.2-skip-wav-tevent-check.patch new file mode 100644 index 000000000..457843506 --- /dev/null +++ b/net-fs/samba/files/ldb-2.5.2-skip-wav-tevent-check.patch @@ -0,0 +1,12 @@ +--- ldb-1.3.6/lib/tevent/wscript ++++ ldb-1.3.6/lib/tevent/wscript +@@ -34,8 +34,7 @@ + if conf.CHECK_BUNDLED_SYSTEM_PKG('tevent', minversion=VERSION, + onlyif='talloc', implied_deps='replace talloc'): + conf.define('USING_SYSTEM_TEVENT', 1) +- if not conf.env.disable_python and \ +- conf.CHECK_BUNDLED_SYSTEM_PYTHON('pytevent', 'tevent', minversion=VERSION): ++ if not conf.env.disable_python: + conf.define('USING_SYSTEM_PYTEVENT', 1) + + if conf.CHECK_FUNCS('epoll_create', headers='sys/epoll.h'): diff --git a/net-fs/samba/files/samba-4.15.12-configure-clang16.patch b/net-fs/samba/files/samba-4.15.12-configure-clang16.patch new file mode 100644 index 000000000..0d9c919bd --- /dev/null +++ b/net-fs/samba/files/samba-4.15.12-configure-clang16.patch @@ -0,0 +1,117 @@ +https://bugs.gentoo.org/870043 +https://gitlab.com/samba-team/samba/-/merge_requests/2807 + +From afc5144819e0db141aa9c58de385e5829b952096 Mon Sep 17 00:00:00 2001 +From: Florian Weimer +Date: Mon, 21 Nov 2022 13:37:41 +0100 +Subject: [PATCH 1/3] buildtools/wafsamba: Avoid calling lib_func without a + prototype + +This is a backport of commit f4c0a750d4adebcf2342a44e85f04526c34 +("WAF: Fix detection of linker features") +to buildtools/wafsamba/samba_conftests.py. It fixes the check for +rpath support with compilers in strict C99 mode. + +Signed-off-by: Florian Weimer +--- a/buildtools/wafsamba/samba_waf18.py ++++ b/buildtools/wafsamba/samba_waf18.py +@@ -209,7 +209,8 @@ def CHECK_LIBRARY_SUPPORT(conf, rpath=False, version_script=False, msg=None): + lib_node.parent.mkdir() + lib_node.write('int lib_func(void) { return 42; }\n', 'w') + main_node = bld.srcnode.make_node('main.c') +- main_node.write('int main(void) {return !(lib_func() == 42);}', 'w') ++ main_node.write('int lib_func(void);\n' ++ 'int main(void) {return !(lib_func() == 42);}', 'w') + linkflags = [] + if version_script: + script = bld.srcnode.make_node('ldscript') +GitLab +From d8c6a9e5558085dfdb144bb64365822415affe84 Mon Sep 17 00:00:00 2001 +From: Florian Weimer +Date: Mon, 21 Nov 2022 13:53:17 +0100 +Subject: [PATCH 2/3] source3/wscript: Fix detection of major/minor macros + +These macros are only available via as of glibc +commit e16deca62e16f645213dffd4ecd1153c37765f17 ("[BZ #19239] Don't +include sys/sysmacros.h from sys/types.h."), which went into +glibc 2.28. + +This is different from the usual C99 cleanups because it changes +the configure check result with existing compilers that usually +accept implicit function declarations. + +Signed-off-by: Florian Weimer +--- a/source3/wscript ++++ b/source3/wscript +@@ -603,11 +603,11 @@ msg.msg_accrightslen = sizeof(fd); + conf.CHECK_HEADERS('asm/types.h') + + conf.CHECK_CODE('dev_t dev; int i = major(dev); return 0', "HAVE_DEVICE_MAJOR_FN", +- headers='unistd.h sys/types.h', ++ headers='sys/sysmacros.h unistd.h sys/types.h', + msg="Checking for major macro") + + conf.CHECK_CODE('dev_t dev; int i = minor(dev); return 0', "HAVE_DEVICE_MINOR_FN", +- headers='unistd.h sys/types.h', ++ headers='sys/sysmacros.h unistd.h sys/types.h', + msg="Checking for minor macro") + + conf.CHECK_STRUCTURE_MEMBER('struct dirent', 'd_off', +GitLab +From 1f5c44d982c112e21879b64911a4184c063ba4d4 Mon Sep 17 00:00:00 2001 +From: Florian Weimer +Date: Mon, 21 Nov 2022 14:12:43 +0100 +Subject: [PATCH 3/3] source3/wscript: Remove implict int and implicit function + declarations + +This should fix the remaining C89isms in these configure checks. + +Signed-off-by: Florian Weimer +--- a/source3/wscript ++++ b/source3/wscript +@@ -1314,7 +1314,7 @@ syscall(SYS_initgroups, 16, NULL, NULL, 0); + + if conf.CHECK_CODE(''' + #include +-main() { ++int main() { + struct tm *tm; + if (sizeof(time_t) == 8) { + time_t max_time = 0x7fffffffffffffffll; +@@ -1345,7 +1345,7 @@ main() { + #if defined(HAVE_SYS_SYSMACROS_H) + #include + #endif +-main() { dev_t dev = makedev(1,2); return 0; } ++int main() { dev_t dev = makedev(1,2); return 0; } + ''', + 'HAVE_MAKEDEV', + addmain=False, +@@ -1355,12 +1355,13 @@ main() { dev_t dev = makedev(1,2); return 0; } + #include + #include + #include ++#include + + void exit_on_core(int ignored) { + exit(1); + } + +-main() { ++int main() { + char *newpath; + signal(SIGSEGV, exit_on_core); + newpath = realpath("/tmp", NULL); +@@ -1517,9 +1518,9 @@ main() { + # Check for getcwd allowing a NULL arg. + conf.CHECK_CODE(''' + #include +-main() { ++int main() { + char *s = getcwd(NULL,0); +- exit(s != NULL ? 0 : 1); ++ return s != NULL ? 0 : 1; + }''', 'GETCWD_TAKES_NULL', addmain=False, execute=True, + msg="getcwd takes a NULL argument") + +GitLab diff --git a/net-fs/samba/files/samba-4.15.9-libunwind-automagic.patch b/net-fs/samba/files/samba-4.15.9-libunwind-automagic.patch new file mode 100644 index 000000000..c3a2c802e --- /dev/null +++ b/net-fs/samba/files/samba-4.15.9-libunwind-automagic.patch @@ -0,0 +1,118 @@ +https://gitlab.com/samba-team/samba/-/commit/14feb93d481011765f62614ab49b304e17e4f6fd +https://gitlab.com/samba-team/samba/-/merge_requests/2401?commit_id=ac8064cb0d79db377df75a22a240632dbc37f99f +https://bugs.gentoo.org/791349 + +From 14feb93d481011765f62614ab49b304e17e4f6fd Mon Sep 17 00:00:00 2001 +From: Andrew Bartlett +Date: Tue, 7 Jun 2022 15:07:59 +1200 +Subject: [PATCH] lib/util: Prefer backtrace_symbols() for internal backtraces + +Backtraces when Samba is in PANIC state are better with +backtrace_symbols() than with libunwind on Ubuntu 20.04 x86_64 +so move libunwind to a off-by-default option, prompted for +if backtrace_symbols() is not available. + +Based on a request by Fco Javier Felix + +Signed-off-by: Andrew Bartlett +Reviewed-by: Joseph Sutton +--- a/lib/util/fault.c ++++ b/lib/util/fault.c +@@ -222,9 +222,13 @@ _PUBLIC_ void smb_panic(const char *why) + void log_stack_trace(void) + { + #ifdef HAVE_LIBUNWIND +- /* Try to use libunwind before any other technique since on ia64 +- * libunwind correctly walks the stack in more circumstances than +- * backtrace. ++ /* ++ * --with-libunwind is required to use libunwind, the ++ * backtrace_symbols() code below is the default. ++ * ++ * This code is available because a previous version of this ++ * comment asserted that on ia64 libunwind correctly walks the ++ * stack in more circumstances than backtrace. + */ + unw_cursor_t cursor; + unw_context_t uc; +--- a/lib/util/wscript ++++ b/lib/util/wscript +@@ -2,6 +2,15 @@ def options(opt): + ''' This is a bit strange, but disable is the flag, not enable. ''' + opt.add_option('--disable-fault-handling', action='store_true', dest='disable_fault_handling', help=('disable the fault handlers'), default=False) + ++ # We do not want libunwind by default (backtrace_symbols() in ++ # glibc is better) but allow (eg) IA-64 to build with it where it ++ # might be better (per old comment in fault.c) ++ opt.samba_add_onoff_option('libunwind', ++ default=None, ++ help='''Use libunwind instead of the default backtrace_symbols() ++ from libc, for example on IA-64 where it might give a better ++ backtrace.''') ++ + opt.add_option('--with-systemd', + help=("Enable systemd integration"), + action='store_true', dest='enable_systemd') +--- a/lib/util/wscript_configure ++++ b/lib/util/wscript_configure +@@ -1,23 +1,35 @@ + #!/usr/bin/env python +-from waflib import Logs, Options ++from waflib import Logs, Options, Errors + + import os, sys + + if Options.options.disable_fault_handling: + conf.DEFINE('HAVE_DISABLE_FAULT_HANDLING',1) + +-# backtrace could be in libexecinfo or in libc ++# backtrace could be in libexecinfo or in libc. ++# This is our preferred backtrace handler (more useful output than libunwind as at Ubuntu 20.04 x86_64) + conf.CHECK_FUNCS_IN('backtrace backtrace_symbols', 'execinfo', checklibc=True, headers='execinfo.h') + conf.CHECK_HEADERS('execinfo.h') + + conf.SET_TARGET_TYPE('LIBUNWIND', 'EMPTY') +-if conf.check_cfg(package='libunwind-generic', +- args='--cflags --libs', +- msg='Checking for libunwind', +- uselib_store='LIBUNWIND', +- mandatory=False): +- if conf.CHECK_HEADERS('libunwind.h'): +- conf.SET_TARGET_TYPE('LIBUNWIND', 'SYSLIB') ++if Options.options.with_libunwind: ++ if conf.check_cfg(package='libunwind-generic', ++ args='--cflags --libs', ++ msg='Checking for libunwind', ++ uselib_store='LIBUNWIND', ++ mandatory=False): ++ if conf.CHECK_HEADERS('libunwind.h'): ++ conf.SET_TARGET_TYPE('LIBUNWIND', 'SYSLIB') ++ else: ++ raise Errors.WafError('--with-libunwind specified but libunwind not found') ++elif Options.options.with_libunwind == None: ++ if not conf.CONFIG_SET('HAVE_BACKTRACE_SYMBOLS') \ ++ and not Options.options.disable_fault_handling: ++ raise Errors.WafError( ++'''backtrace_symbols() not found but ++--with-libunwind not specified. ++Use --without-libunwind to build without internal backtrace support or ++--disable-fault-handling to totally defer fault handling to the OS.''') + + conf.CHECK_STRUCTURE_MEMBER('struct statvfs', 'f_frsize', define='HAVE_FRSIZE', headers='sys/statvfs.h') + +--- a/script/autobuild.py ++++ b/script/autobuild.py +@@ -480,10 +480,11 @@ tasks = { + # MIT Kerberos from the current system. Runtime behaviour is + # confirmed via the ktest (static ccache and keytab) environment + ++ # This environment also used to confirm we can still build with --with-libunwind + "samba-ktest-mit": { + "sequence": [ + ("random-sleep", random_sleep(300, 900)), +- ("configure", "./configure.developer --without-ad-dc --with-system-mitkrb5 " + samba_configure_params), ++ ("configure", "./configure.developer --without-ad-dc --with-libunwind --with-system-mitkrb5 " + samba_configure_params), + ("make", "make -j"), + ("test", make_test(include_envs=[ + "ktest", # ktest is also tested in fileserver, samba and +GitLab diff --git a/net-fs/samba/files/samba-4.16.1-netdb-defines.patch b/net-fs/samba/files/samba-4.16.1-netdb-defines.patch new file mode 100644 index 000000000..6f5a82505 --- /dev/null +++ b/net-fs/samba/files/samba-4.16.1-netdb-defines.patch @@ -0,0 +1,25 @@ +https://gitlab.com/samba-team/samba/-/commit/e13875601ff6f488b48e7de0f6838db3565401d4 +https://gitlab.com/samba-team/samba/-/merge_requests/2617 +https://gitlab.com/samba-team/samba/-/merge_requests/1025 + +# Define NETDB_INTERNAL and NETDB_SUCCESS if they are not defined +# +# Gentoo bug 832629 and 835017 + +--- a/nsswitch/wins.c ++++ b/nsswitch/wins.c +@@ -40,6 +40,14 @@ static pthread_mutex_t wins_nss_mutex = PTHREAD_MUTEX_INITIALIZER; + #define INADDRSZ 4 + #endif + ++#ifndef NETDB_INTERNAL ++#define NETDB_INTERNAL -1 ++#endif ++ ++#ifndef NETDB_SUCCESS ++#define NETDB_SUCCESS 0 ++#endif ++ + _PUBLIC_ON_LINUX_ + NSS_STATUS _nss_wins_gethostbyname_r(const char *hostname, + struct hostent *he, diff --git a/net-fs/samba/files/samba-4.16.2-fix-musl-without-innetgr.patch b/net-fs/samba/files/samba-4.16.2-fix-musl-without-innetgr.patch new file mode 100644 index 000000000..19abe8ffb --- /dev/null +++ b/net-fs/samba/files/samba-4.16.2-fix-musl-without-innetgr.patch @@ -0,0 +1,25 @@ +https://gitlab.com/samba-team/samba/-/commit/fb937ddc838043deb82b6a557dce8f29001d0a19 + +# Gentoo bug 855047 +--- a/lib/util/access.c ++++ b/lib/util/access.c +@@ -115,7 +115,7 @@ static bool string_match(const char *tok,const char *s) + return true; + } + } else if (tok[0] == '@') { /* netgroup: look it up */ +-#ifdef HAVE_NETGROUP ++#if defined(HAVE_NETGROUP) && defined(HAVE_INNETGR) + DATA_BLOB tmp; + char *mydomain = NULL; + char *hostname = NULL; +--- a/source3/auth/user_util.c ++++ b/source3/auth/user_util.c +@@ -135,7 +135,7 @@ static void store_map_in_gencache(TALLOC_CTX *ctx, const char *from, const char + + bool user_in_netgroup(TALLOC_CTX *ctx, const char *user, const char *ngname) + { +-#ifdef HAVE_NETGROUP ++#if defined(HAVE_NETGROUP) && defined(HAVE_INNETGR) + char nis_domain_buf[256]; + const char *nis_domain = NULL; + char *lowercase_user = NULL; diff --git a/net-fs/samba/samba-4.16.8.ebuild b/net-fs/samba/samba-4.16.8.ebuild new file mode 100644 index 000000000..e010218fa --- /dev/null +++ b/net-fs/samba/samba-4.16.8.ebuild @@ -0,0 +1,377 @@ +# Copyright 1999-2023 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +PYTHON_COMPAT=( python3_{9..11} ) +PYTHON_REQ_USE="threads(+),xml(+)" +inherit python-single-r1 flag-o-matic waf-utils multilib-minimal linux-info systemd pam tmpfiles + +DESCRIPTION="Samba Suite Version 4" +HOMEPAGE="https://samba.org/" + +MY_PV="${PV/_rc/rc}" +MY_P="${PN}-${MY_PV}" +if [[ ${PV} == *_rc* ]]; then + SRC_URI="mirror://samba/rc/${MY_P}.tar.gz" +else + SRC_URI="mirror://samba/stable/${MY_P}.tar.gz" + KEYWORDS="amd64 arm arm64 ppc ppc64 x86" +fi +S="${WORKDIR}/${MY_P}" + +LICENSE="GPL-3" +SLOT="0" +IUSE="acl addc ads ceph client cluster cpu_flags_x86_aes cups debug fam glusterfs gpg" +IUSE+=" iprint json ldap llvm-libunwind pam profiling-data python quota +regedit selinux" +IUSE+=" snapper spotlight syslog system-heimdal +system-mitkrb5 systemd test unwind winbind" +IUSE+=" zeroconf" + +REQUIRED_USE="${PYTHON_REQUIRED_USE} + addc? ( json python !system-mitkrb5 winbind ) + ads? ( acl ldap python winbind ) + cluster? ( ads ) + gpg? ( addc ) + spotlight? ( json ) + test? ( python ) + !ads? ( !addc ) + ?? ( system-heimdal system-mitkrb5 ) +" + +# the test suite is messed, it uses system-installed samba +# bits instead of what was built, tests things disabled via use +# flags, and generally just fails to work in a way ebuilds could +# rely on in its current state +RESTRICT="test" + +MULTILIB_WRAPPED_HEADERS=( + /usr/include/samba-4.0/policy.h + /usr/include/samba-4.0/dcerpc_server.h + /usr/include/samba-4.0/ctdb.h + /usr/include/samba-4.0/ctdb_client.h + /usr/include/samba-4.0/ctdb_protocol.h + /usr/include/samba-4.0/ctdb_private.h + /usr/include/samba-4.0/ctdb_typesafe_cb.h + /usr/include/samba-4.0/ctdb_version.h +) + +TALLOC_VERSION="2.3.3" +TDB_VERSION="1.4.6" +TEVENT_VERSION="0.11.0" + +COMMON_DEPEND=" + >=app-arch/libarchive-3.1.2:=[${MULTILIB_USEDEP}] + dev-lang/perl:= + dev-libs/icu:=[${MULTILIB_USEDEP}] + dev-libs/libbsd[${MULTILIB_USEDEP}] + dev-libs/libtasn1:=[${MULTILIB_USEDEP}] + dev-libs/popt[${MULTILIB_USEDEP}] + dev-perl/Parse-Yapp + >=net-libs/gnutls-3.4.7:=[${MULTILIB_USEDEP}] + >=sys-fs/e2fsprogs-1.46.4-r51[${MULTILIB_USEDEP}] + >=sys-libs/ldb-2.5.2:=[ldap(+)?,${MULTILIB_USEDEP}] + =sys-libs/talloc-${TALLOC_VERSION}[${MULTILIB_USEDEP}] + >=sys-libs/tdb-${TDB_VERSION}[${MULTILIB_USEDEP}] + >=sys-libs/tevent-${TEVENT_VERSION}[${MULTILIB_USEDEP}] + sys-libs/zlib[${MULTILIB_USEDEP}] + virtual/libcrypt:=[${MULTILIB_USEDEP}] + virtual/libiconv + $(python_gen_cond_dep ' + addc? ( + dev-python/dnspython:=[${PYTHON_USEDEP}] + dev-python/markdown[${PYTHON_USEDEP}] + ) + ads? ( + dev-python/dnspython:=[${PYTHON_USEDEP}] + net-dns/bind-tools[gssapi] + ) + ') + acl? ( virtual/acl ) + ceph? ( sys-cluster/ceph ) + cluster? ( net-libs/rpcsvc-proto ) + cups? ( net-print/cups ) + debug? ( dev-util/lttng-ust ) + fam? ( virtual/fam ) + gpg? ( app-crypt/gpgme:= ) + json? ( dev-libs/jansson:= ) + ldap? ( net-nds/openldap:=[${MULTILIB_USEDEP}] ) + pam? ( sys-libs/pam ) + python? ( + sys-libs/ldb[python,${PYTHON_SINGLE_USEDEP}] + sys-libs/talloc[python,${PYTHON_SINGLE_USEDEP}] + sys-libs/tdb[python,${PYTHON_SINGLE_USEDEP}] + sys-libs/tevent[python,${PYTHON_SINGLE_USEDEP}] + ) + snapper? ( sys-apps/dbus ) + system-heimdal? ( >=app-crypt/heimdal-1.5[-ssl,${MULTILIB_USEDEP}] ) + system-mitkrb5? ( >=app-crypt/mit-krb5-1.19[${MULTILIB_USEDEP}] ) + systemd? ( sys-apps/systemd:= ) + unwind? ( + llvm-libunwind? ( sys-libs/llvm-libunwind:= ) + !llvm-libunwind? ( sys-libs/libunwind:= ) + ) + zeroconf? ( net-dns/avahi[dbus] ) +" +DEPEND="${COMMON_DEPEND} + dev-perl/JSON + net-libs/libtirpc[${MULTILIB_USEDEP}] + net-libs/rpcsvc-proto + spotlight? ( dev-libs/glib ) + test? ( + >=dev-util/cmocka-1.1.3[${MULTILIB_USEDEP}] + $(python_gen_cond_dep "dev-python/subunit[\${PYTHON_USEDEP},${MULTILIB_USEDEP}]" ) + !system-mitkrb5? ( + >=net-dns/resolv_wrapper-1.1.4 + >=net-libs/socket_wrapper-1.1.9 + >=sys-libs/nss_wrapper-1.1.3 + >=sys-libs/uid_wrapper-1.2.1 + ) + )" +RDEPEND="${COMMON_DEPEND} + client? ( net-fs/cifs-utils[ads?] ) + python? ( ${PYTHON_DEPS} ) + selinux? ( sec-policy/selinux-samba ) +" +BDEPEND="${PYTHON_DEPS} + app-text/docbook-xsl-stylesheets + dev-libs/libxslt + virtual/pkgconfig +" + +PATCHES=( + "${FILESDIR}/${PN}-4.4.0-pam.patch" + "${FILESDIR}/${PN}-4.16.1-netdb-defines.patch" + "${FILESDIR}/${PN}-4.16.2-fix-musl-without-innetgr.patch" + "${FILESDIR}/ldb-2.5.2-skip-wav-tevent-check.patch" + "${FILESDIR}/${PN}-4.15.9-libunwind-automagic.patch" + "${FILESDIR}/${PN}-4.15.12-configure-clang16.patch" +) + +CONFDIR="${FILESDIR}/4.4" +WAF_BINARY="${S}/buildtools/bin/waf" +SHAREDMODS="" + +pkg_setup() { + # Package fails to build with distcc + export DISTCC_DISABLE=1 + export PYTHONHASHSEED=1 + + python-single-r1_pkg_setup + + SHAREDMODS="$(usev !snapper '!')vfs_snapper" + if use cluster ; then + SHAREDMODS+=",idmap_rid,idmap_tdb2,idmap_ad" + elif use ads ; then + SHAREDMODS+=",idmap_ad" + fi +} + +check_samba_dep_versions() { + actual_talloc_version=$(sed -En '/^VERSION =/{s/[^0-9.]//gp}' lib/talloc/wscript || die) + if [[ ${actual_talloc_version} != ${TALLOC_VERSION} ]] ; then + eerror "Source talloc version: ${TALLOC_VERSION}" + eerror "Ebuild talloc version: ${actual_talloc_version}" + die "Ebuild needs to fix TALLOC_VERSION!" + fi + + actual_tdb_version=$(sed -En '/^VERSION =/{s/[^0-9.]//gp}' lib/tdb/wscript || die) + if [[ ${actual_tdb_version} != ${TDB_VERSION} ]] ; then + eerror "Source tdb version: ${TDB_VERSION}" + eerror "Ebuild tdb version: ${actual_tdb_version}" + die "Ebuild needs to fix TDB_VERSION!" + fi + + actual_tevent_version=$(sed -En '/^VERSION =/{s/[^0-9.]//gp}' lib/tevent/wscript || die) + if [[ ${actual_tevent_version} != ${TEVENT_VERSION} ]] ; then + eerror "Source tevent version: ${TEVENT_VERSION}" + eerror "Ebuild tevent version: ${actual_tevent_version}" + die "Ebuild needs to fix TEVENT_VERSION!" + fi +} + +src_prepare() { + default + + check_samba_dep_versions + + # Unbundle dnspython + sed -i -e '/"dns.resolver":/d' "${S}"/third_party/wscript || die + + # Unbundle iso8601 unless tests are enabled + if ! use test ; then + sed -i -e '/"iso8601":/d' "${S}"/third_party/wscript || die + fi + + # Ugly hackaround for bug #592502 + #cp /usr/include/tevent_internal.h "${S}"/lib/tevent/ || die + + sed -e 's:::' \ + -i source4/dsdb/samdb/ldb_modules/password_hash.c \ + || die + + if use elibc_musl ; then + eapply "${FILESDIR}"/add_missing___compar_fn_t.patch + eapply "${FILESDIR}"/add-missing_signal_h.patch + eapply "${FILESDIR}"/getpwent_r.patch + eapply "${FILESDIR}"/missing-headers.patch + eapply "${FILESDIR}"/musl_rm_unistd_incl.patch + eapply "${FILESDIR}"/musl_uintptr.patch + fi + + # WAF + multilib_copy_sources +} + +multilib_src_configure() { + # When specifying libs for samba build you must append NONE to the end to + # stop it automatically including things + local bundled_libs="NONE" + if ! use system-heimdal && ! use system-mitkrb5 ; then + bundled_libs="heimbase,heimntlm,hdb,kdc,krb5,wind,gssapi,hcrypto,hx509,roken,asn1,com_err,NONE" + fi + + # We "use" bundled cmocka when we're not running tests as we're + # not using it anyway. Means we avoid making users install it for + # no reason. bug #802531 + if ! use test ; then + bundled_libs="cmocka,${bundled_libs}" + fi + + local myconf=( + --enable-fhs + --sysconfdir="${EPREFIX}/etc" + --localstatedir="${EPREFIX}/var" + --with-modulesdir="${EPREFIX}/usr/$(get_libdir)/samba" + --with-piddir="${EPREFIX}/run/${PN}" + --bundled-libraries="${bundled_libs}" + --builtin-libraries=NONE + --disable-rpath + --disable-rpath-install + --nopyc + --nopyo + --without-winexe + --accel-aes=$(usex cpu_flags_x86_aes intelaesni none) + $(multilib_native_use_with acl acl-support) + $(multilib_native_usex addc '' '--without-ad-dc') + $(multilib_native_use_with ads) + $(multilib_native_use_enable ceph cephfs) + $(multilib_native_use_with cluster cluster-support) + $(multilib_native_use_enable cups) + --without-dmapi + $(multilib_native_use_with fam) + $(multilib_native_use_enable glusterfs) + $(multilib_native_use_with gpg gpgme) + $(multilib_native_use_with json) + $(multilib_native_use_enable iprint) + $(multilib_native_use_with pam) + $(multilib_native_usex pam "--with-pammodulesdir=${EPREFIX}/$(get_libdir)/security" '') + $(multilib_native_use_with quota quotas) + $(multilib_native_use_with regedit) + $(multilib_native_use_enable spotlight) + $(multilib_native_use_with syslog) + $(multilib_native_use_with systemd) + --systemd-install-services + --with-systemddir="$(systemd_get_systemunitdir)" + $(multilib_native_use_with unwind libunwind) + $(multilib_native_use_with winbind) + $(multilib_native_usex python '' '--disable-python') + $(multilib_native_use_enable zeroconf avahi) + $(multilib_native_usex test '--enable-selftest' '') + $(usev system-mitkrb5 "--with-system-mitkrb5 $(multilib_native_usex addc --with-experimental-mit-ad-dc '')") + $(use_with debug lttng) + $(use_with ldap) + $(use_with profiling-data) + # bug #683148 + --jobs 1 + ) + + if multilib_is_native_abi ; then + myconf+=( --with-shared-modules=${SHAREDMODS} ) + else + myconf+=( --with-shared-modules=DEFAULT,!vfs_snapper ) + fi + + append-cppflags "-I${ESYSROOT}/usr/include/et" + + waf-utils_src_configure ${myconf[@]} +} + +multilib_src_compile() { + waf-utils_src_compile +} + +multilib_src_test() { + if multilib_is_native_abi ; then + "${WAF_BINARY}" test || die "Test failed" + fi +} + +multilib_src_install() { + waf-utils_src_install + + # Make all .so files executable + find "${ED}" -type f -name "*.so" -exec chmod +x {} + || die + # smbspool_krb5_wrapper must only be accessible to root, bug #880739 + find "${ED}" -type f -name "smbspool_krb5_wrapper" -exec chmod go-rwx {} + || die + + # Remove empty runtime dirs created by build system (bug #892341) + find "${ED}"/{run,var} -type d -empty -delete || die + + if multilib_is_native_abi ; then + # Install ldap schema for server (bug #491002) + if use ldap ; then + insinto /etc/openldap/schema + doins examples/LDAP/samba.schema + fi + + # Create symlink for cups (bug #552310) + if use cups ; then + dosym ../../../bin/smbspool \ + /usr/libexec/cups/backend/smb + fi + + # Install example config file + insinto /etc/samba + doins examples/smb.conf.default + + # Fix paths in example file (bug #603964) + sed \ + -e '/log file =/s@/usr/local/samba/var/@/var/log/samba/@' \ + -e '/include =/s@/usr/local/samba/lib/@/etc/samba/@' \ + -e '/path =/s@/usr/local/samba/lib/@/var/lib/samba/@' \ + -e '/path =/s@/usr/local/samba/@/var/lib/samba/@' \ + -e '/path =/s@/usr/spool/samba@/var/spool/samba@' \ + -i "${ED}"/etc/samba/smb.conf.default || die + + # Install init script and conf.d file + newinitd "${CONFDIR}/samba4.initd-r1" samba + newconfd "${CONFDIR}/samba4.confd" samba + + dotmpfiles "${FILESDIR}"/samba.conf + if ! use addc ; then + rm "${D}/$(systemd_get_systemunitdir)/samba.service" \ + || die + fi + + # Preserve functionality for old gentoo-specific unit names + dosym nmb.service "$(systemd_get_systemunitdir)/nmbd.service" + dosym smb.service "$(systemd_get_systemunitdir)/smbd.service" + dosym winbind.service "$(systemd_get_systemunitdir)/winbindd.service" + fi + + if use pam && use winbind ; then + newpamd "${CONFDIR}/system-auth-winbind.pam" system-auth-winbind + # bugs #376853 and #590374 + insinto /etc/security + doins examples/pam_winbind/pam_winbind.conf + fi +} + +pkg_postinst() { + tmpfiles_process samba.conf +}