summaryrefslogtreecommitdiffstats
path: root/meta-oe/recipes-support/openldap/openldap_2.4.23.bb
blob: b9441efc5e428a7c4e65aa3293dc5f2813004ea3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
# OpenLDAP, a license free (see http://www.OpenLDAP.org/license.html)
#
DESCRIPTION = "OpenLDAP Software is an open source implementation of the Lightweight Directory Access Protocol."
HOMEPAGE = "http://www.OpenLDAP.org/license.html"
# The OpenLDAP Public License - see the HOMEPAGE - defines
# the license.  www.openldap.org claims this is Open Source
# (see http://www.openldap.org), the license appears to be
# basically BSD.  opensource.org does not record this license
# at present (so it is apparently not OSI certified).
LICENSE = "OpenLDAP"
LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=3d82d3085f228af211a6502c7ea7c3c7"
SECTION = "libs"

LDAP_VER = "${@'.'.join(d.getVar('PV',1).split('.')[0:2])}"

SRC_URI = "ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/${P}.tgz"
SRC_URI += "file://openldap-m4-pthread.patch"
SRC_URI += "file://initscript"
SRC_URI[md5sum] = "90150b8c0d0192e10b30157e68844ddf"
SRC_URI[sha256sum] = "5a5ede91d5e8ab3c7f637620aa29a3b96eb34318a8b26c8eef2d2c789fc055e3"

# The original top.mk used INSTALL, not INSTALL_STRIP_PROGRAM when
# installing .so and executables, this fails in cross compilation
# environments
SRC_URI += "file://install-strip.patch"

inherit autotools

# OPTIONS
# The following two variables can be set in a distro or local.conf
# to switch features on.  Each feature foo defines OPENLDAP_OPTION_foo
# and OPENLDAP_DEPENDS_foo in this file - to include feature foo add
# the two variables into the setting of the options below (please use
# += because that means this can be done in *both* distro.conf and
# local.conf!
OPENLDAP_OPTIONS ?= ""
OPENLDAP_DEPENDS ?= ""

# CV SETTINGS
# Required to work round AC_FUNC_MEMCMP which gets the wrong answer
# when cross compiling (should be in site?)
EXTRA_OECONF += "ac_cv_func_memcmp_working=yes"

# CONFIG DEFINITIONS
# The following is necessary because it cannot be determined for a
# cross compile automagically.  Select should yield fine on all OE
# systems...
EXTRA_OECONF += "--with-yielding-select=yes"
# Shared libraries are nice...
EXTRA_OECONF += "--enable-dynamic"
#
# Disable TLS to remove the need for openssl/libcrypto
OPENLDAP_OPTION_tls  ?= "--with-tls"
# set the following to "openssl" to build tls support
OPENLDAP_DEPENDS_tls ?= "gnutls"
EXTRA_OECONF += "${OPENLDAP_OPTION_tls}"
DEPENDS += "${OPENLDAP_DEPENDS_tls}"
#
# Disable Cyrus SASL, which may or may not be working at present...
OPENLDAP_OPTION_sasl  ?= "--without-cyrus-sasl"
# set the following to "cyrus-sasl" to build SASL support
OPENLDAP_DEPENDS_sasl ?= ""
EXTRA_OECONF += "${OPENLDAP_OPTION_sasl}"
DEPENDS += "${OPENLDAP_DEPENDS_sasl}"

# SLAPD options
#
# UNIX crypt(3) passwd support:
EXTRA_OECONF += "--enable-crypt"
#
# Enable dynamic module loading.  If this is *disabled* the
# dependency on libtool is removed (to disable set the following
# to variables to "" in a .conf file).
OPENLDAP_OPTION_modules += "lt_cv_dlopen_self=yes --enable-modules"
OPENLDAP_DEPENDS_modules += "libtool"
EXTRA_OECONF += " ${OPENLDAP_OPTION_modules}"
DEPENDS += "${OPENLDAP_DEPENDS_modules}"

# SLAPD BACKEND
#
# The backend must be set by the configuration.  This controls the
# required database, the default database, bdb, is turned off but
# can be turned back on again and it *is* below!  The monitor backend
# is also disabled.  If you try to change the backends but fail to
# enable a single one the build will fail in an obvious way.
#
EXTRA_OECONF += "--disable-bdb --disable-hdb --disable-monitor"
#
# Backends="bdb dnssrv hdb ldap ldbm meta monitor null passwd perl shell sql"
#
# Note that multiple backends can be built.  The ldbm backend requires a
# build-time choice of database API.  The bdb backend forces this to be
# DB4.  To use the gdbm (or other) API the Berkely database module must
# be removed from the build.
md = "${libexecdir}/openldap"
#
#--enable-bdb          enable Berkeley DB backend no|yes|mod yes
# The Berkely DB is the standard choice.  This version of OpenLDAP requires
# the version 4 implementation or better.
# To disable this set all three of the following variables to <empty> in
# a .conf file (this will allow ldbm to be build with gdbm).
#OPENLDAP_OPTION_bdb   ?= "--enable-bdb=mod"
OPENLDAP_DEPENDS_bdb  ?= "db"
EXTRA_OECONF += "${OPENLDAP_OPTION_bdb}"
DEPENDS += "${OPENLDAP_DEPENDS_bdb}"
#
#--enable-dnssrv       enable dnssrv backend no|yes|mod no
# This has no dependencies.
EXTRA_OECONF += "--enable-dnssrv=mod"
#
#--enable-hdb          enable Hierarchical DB backend no|yes|mod no
# This forces ldbm to use Berkeley too, remove to use gdbm
#OPENLDAP_OPTION_hdb   ?= "--enable-hdb=mod"
OPENLDAP_DEPENDS_hdb  ?= "db"
OPENLDAP_PACKAGE_hdb  ?= "${PN}-backend-hdb"
EXTRA_OECONF += "${OPENLDAP_OPTION_hdb}"
DEPENDS += "${OPENLDAP_DEPENDS_hdb}"
#
#--enable-ldap         enable ldap backend no|yes|mod no
# This has no dependencies
EXTRA_OECONF += "--enable-ldap=mod"
#
#--enable-ldbm         enable ldbm backend no|yes|mod no
# ldbm requires further specification of the underlying database API, because
# bdb is enabled above this must be set to berkeley, however the config
# defaults this correctly so --with-ldbm-api is *not* set.  The build will
# fail if bdb is removed (above) but not database is built to provide the
# support for ldbm (because the 'DEPENDS_ldbm' is empty below.)
#
# So to use gdbm set:
OPENLDAP_OPTION_ldbm = "--enable-ldbm=mod --with-ldbm-api=gdbm"
OPENLDAP_DEPENDS_ldbm = "gdbm"
# And clear the bdb and hdb settings.
OPENLDAP_OPTION_ldbm ?= "--enable-ldbm=mod"
OPENLDAP_DEPENDS_ldbm ?= ""
EXTRA_OECONF += "${OPENLDAP_OPTION_ldbm}"
DEPENDS += "${OPENLDAP_DEPENDS_ldbm}"
#
#--enable-meta         enable metadirectory backend no|yes|mod no
# No dependencies
EXTRA_OECONF += "--enable-meta=mod"
#
#--enable-monitor      enable monitor backend no|yes|mod yes
EXTRA_OECONF += "--enable-monitor=mod"
#
#--enable-null         enable null backend no|yes|mod no
EXTRA_OECONF += "--enable-null=mod"
#
#--enable-passwd       enable passwd backend no|yes|mod no
EXTRA_OECONF += " --enable-passwd=mod"
#
#--enable-perl         enable perl backend no|yes|mod no
#  This requires a loadable perl dynamic library, if enabled without
#  doing something appropriate (building perl?) the build will pick
#  up the build machine perl - not good.
OPENLDAP_OPTION_perl ?= "--enable-perl=mod"
OPENLDAP_DEPENDS_perl ?= "perl"
#EXTRA_OECONF += "${OPENLDAP_OPTION_perl}"
#DEPENDS += "${OPENLDAP_DEPENDS_perl}"
#
#--enable-shell        enable shell backend no|yes|mod no
EXTRA_OECONF += "--enable-shell=mod"
#
#--enable-sql          enable sql backend no|yes|mod no
# sql requires some sql backend which provides sql.h, sqlite* provides
# sqlite.h (which may be compatible but hasn't been tried.)
OPENLDAP_OPTION_sql ?= "--enable-sql=mod"
OPENLDAP_DEPENDS_sql ?= "sql"
#EXTRA_OECONF += "${OPENLDAP_OPTION_sql}"
#DEPENDS += "${OPENLDAP_DEPENDS_sql}"
#
#--enable-dyngroup     Dynamic Group overlay no|yes|mod no
#  This is a demo, Proxy Cache defines init_module which conflicts with the
#  same symbol in dyngroup
#EXTRA_OECONF += "--enable-dyngroup=mod"
#
#--enable-proxycache   Proxy Cache overlay no|yes|mod no
EXTRA_OECONF += "--enable-proxycache=mod"
FILES_${PN}-overlay-proxycache = "${md}/pcache-*.so.*"
PACKAGES += "${PN}-overlay-proxycache"
#
# LOCAL OPTION OVERRIDES
# The distro/lcoal options must be added in *last*
EXTRA_OECONF += "${OPENLDAP_OPTIONS}"
DEPENDS      += "${OPENLDAP_DEPENDS}"

CPPFLAGS_append = " -D_GNU_SOURCE"

do_configure() {
    cp ${STAGING_DATADIR_NATIVE}/libtool/config/ltmain.sh ${S}/build
    rm -f ${S}/libtool
    aclocal
    libtoolize --force --copy
    gnu-configize
    autoconf
    oe_runconf
}

#FIXME: this is a hack, at present an openldap build will pick up the header
# files from staging rather than the local ones (bad -I order), so remove
# the headers (from openldap-old.x) before compiling...
do_compile_prepend() {
    (
        cd ${STAGING_INCDIR}
        rm -f ldap.h ldap_*.h
    )
    (
        cd ${STAGING_LIBDIR}
        rm -f libldap* liblber*
    )
}

LEAD_SONAME = "libldap-${LDAP_VER}.so.*"

# The executables go in a separate package.  This allows the
# installation of the libraries with no daemon support.
# Each module also has its own package - see above.
PACKAGES += "${PN}-slapd ${PN}-slurpd ${PN}-bin"

# Package contents - shift most standard contents to -bin
FILES_${PN} = "${libdir}/lib*.so.* ${sysconfdir}/openldap/ldap.* ${localstatedir}/openldap-data"
FILES_${PN}-slapd = "${sysconfdir}/init.d ${libexecdir}/slapd ${sbindir} ${localstatedir}/run \
    ${sysconfdir}/openldap/slapd.* ${sysconfdir}/openldap/schema \
    ${sysconfdir}/openldap/DB_CONFIG.example"
FILES_${PN}-slurpd = "${libexecdir}/slurpd ${localstatedir}/openldap-slurp ${localstatedir}/run"
FILES_${PN}-bin = "${bindir}"
FILES_${PN}-dev = "${includedir} ${libdir}/lib*.so ${libdir}/*.la ${libdir}/*.a ${libexecdir}/openldap/*.a ${libexecdir}/openldap/*.la ${libexecdir}/openldap/*.so"
FILES_${PN}-dbg += "${libexecdir}/openldap/.debug"

do_install_append() {
    install -d ${D}${sysconfdir}/init.d
    cat ${WORKDIR}/initscript > ${D}${sysconfdir}/init.d/openldap
    chmod 755 ${D}${sysconfdir}/init.d/openldap
    # This is duplicated in /etc/openldap and is for slapd
    rm -f ${D}${localstatedir}/openldap-data/DB_CONFIG.example
}

pkg_postinst_${PN}-slapd () {
    if test -n "${D}"; then
        D="-r $D"
    fi
    update-rc.d $D openldap defaults
}

pkg_prerm_${PN}-slapd () {
    if test -n "${D}"; then
        D="-r $D"
    fi
    update-rc.d $D openldap remove
}

PACKAGES_DYNAMIC += "^openldap-backends.* ^openldap-backend-.*"

python populate_packages_prepend () {
    backend_dir    = d.expand('${libexecdir}/openldap')
    do_split_packages(d, backend_dir, 'back_([a-z]*)\-.*\.so\..*$', 'openldap-backend-%s', 'OpenLDAP %s backend', extra_depends='', allow_links=True)

    metapkg = "openldap-backends"
    d.setVar('ALLOW_EMPTY_' + metapkg, "1")
    d.setVar('FILES_' + metapkg, "")
    metapkg_rdepends = []
    packages = d.getVar('PACKAGES', 1).split()
    for pkg in packages[1:]:
        if pkg.count("openldap-backend-") and not pkg in metapkg_rdepends and not pkg.count("-dev") and not pkg.count("-dbg") and not pkg.count("static") and not pkg.count("locale"):
            metapkg_rdepends.append(pkg)
    d.setVar('RDEPENDS_' + metapkg, ' '.join(metapkg_rdepends))
    d.setVar('DESCRIPTION_' + metapkg, 'OpenLDAP backends meta package')
    packages.append(metapkg)
    d.setVar('PACKAGES', ' '.join(packages))
}