
pkgbase=openldap
pkgver=2.6.3
pkgrel=4
url='https://www.openldap.org/'

pkgname=(
    'openldap'
    'libldap'
)

track="OpenLDAP/openldap-release"
target="$pkgbase-$pkgver"
source=(
    "https://www.openldap.org/software/download/${track}/${target}.tgz"{,.asc}
    openldap.tmpfiles
    openldap.sysusers
)

#----------------------
# BUILD CONFIGURATION ]

makedepends=(
    'libtool'
    'libsasl'
    'e2fsprogs'
    'util-linux'
    'chrpath'
    'unixodbc'
    'libsodium'
)

options=(
    '!makeflags'
    'emptydirs'
    '!lto'
)

# extra modules found in contrib/slapd-modules
_extra_modules=(
    'nssov'
    'autogroup'
    'lastbind'
    'passwd/sha2'
)

#----------------
# BUILD PREPARE ]

prepare() {
    cd $pkgbase-$pkgver

    ## change perms from 0644 to 0755
    sed -i 's|-m 644 $(LIBRARY)|-m 755 $(LIBRARY)|' libraries/{liblber,libldap}/Makefile.in

    ## change rundir to /run/openldap
    sed -i 's|#define LDAPI_SOCK LDAP_RUNDIR LDAP_DIRSEP "run" LDAP_DIRSEP "ldapi"|#define LDAPI_SOCK LDAP_DIRSEP "run" LDAP_DIRSEP "openldap" LDAP_DIRSEP "ldapi"|' include/ldap_defaults.h
    sed -i 's|%LOCALSTATEDIR%/run|/run/openldap|' servers/slapd/slapd.{conf,ldif}
    sed -i 's|-$(MKDIR) $(DESTDIR)$(localstatedir)/run|-$(MKDIR) $(DESTDIR)/run/openldap|' servers/slapd/Makefile.in
}

#----------------
# BUILD CONTROL ]

_flags=(
    --prefix=/usr
    --libexecdir=/usr/lib
    --sysconfdir=/etc
    --localstatedir=/var/lib/openldap
    --sbindir=/usr/bin
    --enable-dynamic
    --enable-syslog
    --enable-ipv6
    --enable-local
    --enable-crypt
    --enable-spasswd
    --enable-modules
    --enable-backends
    --enable-argon2
    --enable-overlays=mod
    --with-argon2=libsodium
    --with-cyrus-sasl
    --with-threads
    --disable-wt
)

#----------------------
# BUILD CONFIGURATION ]

build() {
    cd $pkgbase-$pkgver

    autoconf
    ./configure "${_flags[@]}"
    sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
    make

    ## build extra modules
    for module in "${_extra_modules[@]}"; do
        make -C "contrib/slapd-modules/$module" \
            OPT="$CFLAGS $CPPFLAGS" \
            prefix=/usr \
            libexecdir=/usr/lib \
            sysconfdir=/etc/openldap
    done
}

#---------
# CHECK ]

check() {
    cd $pkgbase-$pkgver
    make test
}

#----------
# PACKAGE ]

package_libldap() {
    pkgdesc="Lightweight Directory Access Protocol (LDAP) client libraries"

    depends=(
        'libsasl'
        'e2fsprogs'
    )
    backup=(
        'etc/openldap/ldap.conf'
    )

    cd $pkgbase-$pkgver

    for dir in include libraries doc/man/man3 ; do
        pushd ${dir}
        make DESTDIR="$pkgdir" install
        popd
    done

    install -Dm644 -t "$pkgdir"/usr/share/man/man5 doc/man/man5/ldap.conf.5

    ## get rid of duplicate default conf files
    rm "$pkgdir"/etc/openldap/*.default

    ## shared library versioning
    ln -sf liblber.so "$pkgdir"/usr/lib/liblber.so.2
    ln -sf libldap.so "$pkgdir"/usr/lib/libldap.so.2

    ## license
    install -Dm644 -t "$pkgdir"/usr/share/licenses/$pkgname LICENSE
}

package_openldap() {
    pkgdesc="Lightweight Directory Access Protocol (LDAP) client and server"

    depends=(
        "libldap>=$pkgver"
        'libtool'
        'unixodbc'
        'perl'
    )
    optdepends=(
        'libsodium: for argon2 password module'
    )
    backup=(
        'etc/openldap/slapd.conf'
        'etc/openldap/slapd.ldif'
    )

    cd $pkgbase-$pkgver

    for dir in clients servers doc/man/man{1,5,8}; do
        pushd ${dir}
        make DESTDIR="$pkgdir" install
        popd
    done

    ## install extra modules
    for module in "${_extra_modules[@]}"; do
        make -C "contrib/slapd-modules/$module" \
            prefix=/usr \
            libexecdir=/usr/lib \
            sysconfdir=/etc/openldap \
            DESTDIR="$pkgdir" install

        ## passwd/sha2 has no man page, so skip it
        if [ "$module" != "passwd/sha2" ]; then
            install -m644 -t "$pkgdir/usr/share/man/man5" \
            "contrib/slapd-modules/$module/slapo-$module.5"
        fi
    done

    ## should be in libldap package
    rm "$pkgdir"/usr/share/man/man5/ldap.conf.5
    rm -r "$pkgdir"/run

    ## get rid of duplicate default conf files
    rm "$pkgdir"/etc/openldap/*.default

    ln -s ../lib/slapd "$pkgdir"/usr/bin/slapd

    chown root:439 "$pkgdir"/etc/openldap/slapd.{conf,ldif}  #,DB_CONFIG.example}
    chmod 640 "$pkgdir"/etc/openldap/slapd.{conf,ldif}  #,DB_CONFIG.example}

    install -dm700 -o 439 -g 439 "$pkgdir"/var/lib/openldap
    chown -R 439:439 "$pkgdir"/var/lib/openldap

    install -dm700 -o 439 -g 439 "$pkgdir"/etc/openldap/slapd.d
    install -Dm644 "$srcdir"/openldap.tmpfiles "$pkgdir"/usr/lib/tmpfiles.d/openldap.conf
    install -Dm644 "$srcdir"/openldap.sysusers "$pkgdir"/usr/lib/sysusers.d/openldap.conf

    ## license
    install -Dm644 -t "$pkgdir"/usr/share/licenses/$pkgname LICENSE
}

#-------------------------
# LICENCE AND VALIDATION ]

arch=(x86_64)
license=(custom)

validpgpkeys=(
    '3CE269B5398BC8B785645E987F67D5FD1CE1CBCE' # OpenLDAP Project <project@openldap.org>
                                               # https://www.openldap.org/software/download/OpenLDAP/gpg-pubkey.txt
)

sha256sums=(d2a2a1d71df3d77396b1c16ad7502e674df446e06072b0e5a4e941c3d06c0d46 # openldap-2.6.3.tgz
	8fbe13b688de3da469dc160947a2425fbe3c2423c9f556c6f1dad73962d916d9 # openldap-2.6.3.tgz.asc
	0be46138e53ff2fa6d4b4c06bfbdd2100426e0bd2ed29bf3419ade6b5974e9a0 # openldap.tmpfiles
	c6e3fa72138edfebb4ecb17f677e217c885ff9eef805b5c8ad1c09169bb0ff8e) #  openldap.sysusers


