openldap/servers/slapd/Makefile.in
Kurt Zeilenga 8c152396b9 Matched Values implementation (ITS#1776) based upon submission
form Mikhail Sahalaev <M.Sahalayev@pgr.salford.ac.uk>.
Further work needed:
	add testxxx-matchedvalues
	rework ldapsearch(1) portion of patch to generalize use of options
---
Copyright 2001, Mikhail Sahalaev, All rights reserved.
This software is not subject to any license of University Of
Salford.

Redistribution and use in source and binary forms are permitted
without restriction or fee of any kind as long as this notice
is preserved.
2002-05-02 18:56:56 +00:00

386 lines
13 KiB
Makefile

# $OpenLDAP$
##
## Makefile.in for slapd
##
PROGRAMS=slapd
XPROGRAMS=sslapd libbackends.a .backend
XSRCS=version.c
NT_SRCS = nt_svc.c
NT_OBJS = nt_svc.o ../../libraries/liblutil/slapdmsg.res
SRCS = main.c daemon.c connection.c search.c filter.c add.c charray.c \
attr.c entry.c config.c backend.c result.c operation.c \
dn.c compare.c modify.c delete.c modrdn.c ch_malloc.c \
value.c ava.c bind.c unbind.c abandon.c filterentry.c \
phonetic.c acl.c str2filter.c aclparse.c init.c user.c \
repl.c lock.c controls.c extended.c kerberos.c passwd.c \
schema.c schema_check.c schema_init.c schema_prep.c \
schemaparse.c ad.c at.c mr.c syntax.c oc.c saslauthz.c \
oidm.c starttls.c index.c sets.c referral.c \
root_dse.c sasl.c module.c suffixalias.c mra.c mods.c \
limits.c backglue.c operational.c matchedValues.c \
$(@PLAT@_SRCS)
OBJS = main.o daemon.o connection.o search.o filter.o add.o charray.o \
attr.o entry.o config.o backend.o result.o operation.o \
dn.o compare.o modify.o delete.o modrdn.o ch_malloc.o \
value.o ava.o bind.o unbind.o abandon.o filterentry.o \
phonetic.o acl.o str2filter.o aclparse.o init.o user.o \
repl.o lock.o controls.o extended.o kerberos.o passwd.o \
schema.o schema_check.o schema_init.o schema_prep.o \
schemaparse.o ad.o at.o mr.o syntax.o oc.o saslauthz.o \
oidm.o starttls.o index.o sets.o referral.o \
root_dse.o sasl.o module.o suffixalias.o mra.o mods.o \
limits.o backglue.o operational.o matchedValues.o \
$(@PLAT@_OBJS)
LDAP_INCDIR= ../../include
LDAP_LIBDIR= ../../libraries
SLAP_DIR=
SLAPD_MODULES=@SLAPD_MODULES_LIST@
SLAPD_STATIC_BACKENDS=@SLAPD_STATIC_BACKENDS@
SLAPD_DYNAMIC_BACKENDS=@SLAPD_DYNAMIC_BACKENDS@
XDEFS = $(MODULES_CPPFLAGS)
XLDFLAGS = $(MODULES_LDFLAGS) $(SLAPD_MODULES)
XLIBS = libbackends.a $(SLAPD_L)
XXLIBS = $(LDBM_LIBS) $(SLAPD_LIBS) $(SECURITY_LIBS) $(LDIF_LIBS) $(LUTIL_LIBS)
XXXLIBS = $(LTHREAD_LIBS) $(MODULES_LIBS)
BUILD_OPT = "--enable-slapd"
BUILD_SRV = @BUILD_SLAPD@
all-local-srv: all-cffiles
NT_SLAPD_DEPENDS = slapd.exp
NT_SLAPD_OBJECTS = slapd.exp symdummy.o $(OBJS) version.o
UNIX_SLAPD_DEPENDS = libbackends.a version.o $(SLAP_L)
UNIX_SLAPD_OBJECTS = $(OBJS) version.o
SLAPD_DEPENDS = $(@PLAT@_SLAPD_DEPENDS)
SLAPD_OBJECTS = $(@PLAT@_SLAPD_OBJECTS)
# Notes about slapd for Windows
# =============================
# slapd.exe must export all of its global symbols, just like a DLL.
# The purpose of this is to allow dynamic modules (dynamic backends
# or external dynamic modules) to bind with the symbols at run-time.
#
# Exporting symbols from an .EXE is a bit tricky and involves multiple
# steps. First a .DEF file must be generated. The .DEF file indicates
# the set of symbols that are to be exported. Many times, it's possible
# to manually create this file with an editor. However, with slapd,
# we want to export EVERY global symbol that it knows about (NOT including
# symbols that are imported from other DLLs). The set of symbols to
# export INCLUDES symbols from all static libraries that slapd gets
# linked with, e.g. avl, ldbm, ldif, lunicode, lutil, etc. This list
# will also include liblber and libldap_r if they were built as static
# libraries. ALSO included will be symbols from other STATIC libraries
# outside the domain of the OpenLDAP source tree, e.g. regex, ltdl,
# crypto, ssl, sasl, etc. (If these libraries are dynamic, we won't want
# to include their symbols in the list). The correct set of symbols
# CAN be determined at build time. The slapd.def target automatically
# determines the correct set of symbols and generates the slapd.def file.
#
# The slapd.def file, serving multiple purposes, will:
#
# 1) be used to generate libslapd.a, the import library for slapd.exe.
#
# 2) be used to generate the symdummy.c file.
#
# 3) be used to help create slapd.exp, the binary-formated slapd export file.
#
# The import library is used by dynamic modules at link time. With this
# library, dynamic modules indicate to the linker that it will resolve
# these symbols from the slapd.exe binary at run-time. Of course, whenever
# a module imports dynamic symbols, those symbols should be marked with
# the __declspec(dllimport) directive in the header files that the dynamic
# modules build with. In OpenLDAP, this is handled automatically in the
# header files. (See ldap_cdefs.h for an explanation). Writers of
# dynamic backend modules should keep in mind that slapd.exe might export
# other global symbols that are not part of OpenLDAP (e.g. regex, ltdl,
# crypto, ssl, sasl, etc.) When a writer actually uses (i.e. imports) these
# symbols, he must verify that the header files from these external packages
# include a mechanism to mark imported symbols with the __declspec(dllimport)
# directive. Whether or not such a mechanism exists, the writer must be
# able to include these directives appropriately when their symbols are
# being imported from slapd.exe. The directive is not completely necessary
# for functions, but it is required for variables.
#
# The symdummy.c file basically references EVERY symbol available to slapd.exe,
# including symbols that slapd.exe never actually refereneced. The file
# is compiled and included at link time. Without this object file, slapd.exe
# would NOT export symbols that it never referenced. The reason that these
# symbols must still be exported is because a dynamic module may want to
# use a symbol even if it had not been referenced by slapd.exe.
#
#
# slapd.def REALLY depends upon all slapd objects and all static libraries
# included in $(LIBS), including static libraries outside of OpenLDAP.
# When slapd.def is built, the absolute paths to all static libraries
# (both inside and outside of OpenLDAP) are generated. We don't have
# any way to include this generated list as a dependency of slapd.def (sigh).
# Thus, we do the best we can by depending on version.o, which depends
# on its own very long list of dependencies.
#
slapd.def: libbackends.a version.o
@for i in $(LDFLAGS) ; do \
path=`expr "$$i" : "-L\(.*\)"`; \
if test $$? != 0; then continue; fi; \
paths="$$paths $$path"; \
done; \
objs=""; \
for i in $(OBJS) version.o $(LIBS) ; do \
obj="" ; \
case $$i in \
-l*) \
done="" ;\
base=`expr "$$i" : "-l\(.*\)"`; \
for p in $$paths ; do \
for ext in la dll a ; do \
path=$$p/lib$$base.$$ext; \
test ! -f $$path && continue; \
if test $$ext = la ; then \
for t in dlname old_library ; do \
line=`grep "^$$t=" $$path`; \
lib=`expr "$$line" : "[^']*'\(.*\)'"`; \
test -n "$$lib" && test -f $$p/$$lib && \
path=$$p/$$lib && break; \
done; \
test $$t = dlname && ext=dll; \
test $$t = old_library && ext=a; \
fi; \
if test $$ext = a ; then \
obj=$$path; \
fi; \
done=done; \
break; \
done; \
test -n "$$done" && break; \
done; \
test -z "$$obj" && continue; \
;; \
*.o | *.a) \
obj=$$i; \
esac; \
objs="$$objs $$obj"; \
done; \
echo dlltool --exclude-symbols main,ServiceMain@8 --export-all-symbols \
--output-def $@.tmp $$objs; \
dlltool --exclude-symbols main,ServiceMain@8 --export-all-symbols \
--output-def $@.tmp $$objs;
echo EXPORTS > $@
$(SED) -e 1,2d -e 's/ @ [0-9][0-9]*//' $@.tmp | sort >> $@
$(RM) $@.tmp
symdummy.c: slapd.def
$(RM) $@
@echo "generating $@..."; \
echo "static void never_called() {" > $@.tmp; \
cat $< | while read line; \
do \
set dummy $$line; \
case $$# in \
3) \
echo "int $$2();" >> $@; \
echo "$$2();" >> $@.tmp; \
;; \
4) \
echo "extern int $$2;" >> $@; \
echo "$$2 = 0;" >> $@.tmp; \
;; \
esac; \
done; \
echo "" >> $@; \
echo "}" >> $@.tmp; \
cat $@.tmp >> $@; \
$(RM) $@.tmp
libslapd.a: symdummy.o
dlltool --dllname slapd.exe --input-def slapd.def --output-lib $@
slapd.exp: libslapd.a
@echo $(LTLINK) -Wl,--base-file,slapd.base -o slapd \
$(OBJS) symdummy.o version.o $(LIBS) $(WRAP_LIBS); \
$(LTLINK) -Wl,--base-file,slapd.base -o slapd \
$(OBJS) symdummy.o version.o $(LIBS) $(WRAP_LIBS)
$(RM) slapd.exe
@echo dlltool --dllname slapd.exe --input-def slapd.def \
--base-file slapd.base --output-exp $@; \
dlltool --dllname slapd.exe --input-def slapd.def \
--base-file slapd.base --output-exp $@; \
echo $(LTLINK) -Wl,--base-file,slapd.base -o slapd $@ \
$(OBJS) symdummy.o version.o $(LIBS) $(WRAP_LIBS); \
$(LTLINK) -Wl,--base-file,slapd.base -o slapd $@ \
$(OBJS) symdummy.o version.o $(LIBS) $(WRAP_LIBS)
$(RM) slapd.exe
@echo dlltool --dllname slapd.exe --input-def slapd.def \
--base-file slapd.base --output-exp $@; \
dlltool --dllname slapd.exe --input-def slapd.def \
--base-file slapd.base --output-exp $@
slapd: $(SLAPD_DEPENDS)
$(LTLINK) -o $@ $(SLAPD_OBJECTS) $(LIBS) $(WRAP_LIBS)
@if test -n "$(SLAPD_DYNAMIC_BACKENDS)"; then \
echo "building dynamic backends..."; \
for i in XX $(SLAPD_DYNAMIC_BACKENDS); do \
if test $$i != XX; then \
echo " "; echo " cd $$i; $(MAKE) $(MFLAGS) all"; \
( cd $$i; $(MAKE) $(MFLAGS) all ); \
if test $$? != 0; then exit 1; fi; \
fi; \
done; \
echo " "; \
fi
cd tools; $(MAKE) $(MFLAGS) all
sslapd: version.o
$(LTLINK) -static -o $@ $(OBJS) version.o $(LIBS) $(WRAP_LIBS)
#
# In Windows, dynamic backends have to be built after slapd. For this
# reason, we only build static backends now and dynamic backends later.
#
.backend: FORCE
@if test -n "$(SLAPD_STATIC_BACKENDS)"; then \
echo "building static backends..."; \
for i in XX $(SLAPD_STATIC_BACKENDS); do \
if test $$i != XX; then \
echo " "; echo " cd $$i; $(MAKE) $(MFLAGS) all"; \
( cd $$i; $(MAKE) $(MFLAGS) all ); \
if test $$? != 0; then exit 1; fi; \
fi; \
done; \
echo " "; \
fi
libbackends.a: .backend
@$(RM) -r tmp
@$(MKDIR) tmp
@-for i in back-*/*.a; do \
( \
cd tmp; \
$(AR) x ../$$i; \
pre=`echo $$i | $(SED) -e 's/\/.*$$//' -e 's/back-//'`; \
for j in *.o; do \
mv $$j $${pre}$$j; \
done; \
$(AR) ruv libbackends.a *.o 2>&1 | grep -v truncated; \
$(RM) *.o __.SYMDEF ________64ELEL_ ; \
echo "added backend library $$i"; \
echo ""; \
); \
done
@mv -f tmp/libbackends.a ./libbackends.a
@$(RM) -r tmp
@if test ! -z "$(RANLIB)" ; then \
$(RANLIB) libbackends.a; \
fi
@ls -l libbackends.a; echo ""
version.c: $(OBJS) $(SLAPD_LIBDEPEND)
@-$(RM) $@
$(MKVERSION) -s -n Versionstr slapd > $@
depend-local-srv: FORCE
@for i in back-* shell-backends tools; do \
if test -d $$i -a -f $$i/Makefile ; then \
echo; echo " cd $$i; $(MAKE) $(MFLAGS) depend"; \
( cd $$i; $(MAKE) $(MFLAGS) depend ); \
if test $$? != 0 ; then exit 1; fi ; \
fi; \
done
@echo ""
clean-local:
rm -f *.exp *.def *.base *.a *.objs symdummy.c
clean-local-srv: FORCE
@for i in back-* shell-backends tools; do \
if test -d $$i -a -f $$i/Makefile ; then \
echo; echo " cd $$i; $(MAKE) $(MFLAGS) clean"; \
( cd $$i; $(MAKE) $(MFLAGS) clean ); \
if test $$? != 0 ; then exit 1; fi ; \
fi; \
done
rm -f *.tmp all-cffiles
veryclean-local-srv: FORCE
@for i in back-* shell-backends tools; do \
if test -d $$i -a -f $$i/Makefile ; then \
echo; echo " cd $$i; $(MAKE) $(MFLAGS) clean"; \
( cd $$i; $(MAKE) $(MFLAGS) veryclean ); \
fi; \
done
install-local-srv: install-slapd install-conf install-schema install-tools
install-slapd: FORCE
-$(MKDIR) $(DESTDIR)$(libexecdir)
-$(MKDIR) $(DESTDIR)$(localstatedir)
$(LTINSTALL) $(INSTALLFLAGS) -s -m 755 \
slapd$(EXEEXT) $(DESTDIR)$(libexecdir)
@for i in back-* shell-backends tools; do \
if test -d $$i -a -f $$i/Makefile ; then \
echo; echo " cd $$i; $(MAKE) $(MFLAGS) install"; \
( cd $$i; $(MAKE) $(MFLAGS) install ); \
if test $$? != 0 ; then exit 1; fi ; \
fi; \
done
all-cffiles: slapd
@if test $(PLAT) = NT; then \
sysconfdir=`cygpath -w $(sysconfdir) | \
$(SED) -e 's/\\\\/\\\\\\\\\\\\\\\\/g'`; \
localstatedir=`cygpath -w $(localstatedir) | \
$(SED) -e 's/\\\\/\\\\\\\\\\\\\\\\/g'`; \
moduledir=`cygpath -w $(moduledir) | \
$(SED) -e 's/\\\\/\\\\\\\\\\\\\\\\/g'`; \
else \
sysconfdir=$(sysconfdir); \
localstatedir=$(localstatedir); \
moduledir=$(moduledir); \
fi; \
$(SED) -e "s;%SYSCONFDIR%;$$sysconfdir;" \
-e "s;%LOCALSTATEDIR%;$$localstatedir;" \
-e "s;%MODULEDIR%;$$moduledir;" \
$(srcdir)/slapd.conf > slapd.conf.tmp ; \
touch all-cffiles
install-schema: FORCE
@-$(MKDIR) $(DESTDIR)$(schemadir)
for i in $(srcdir)/schema/*.schema ; do \
SF=`basename $$i` ; \
SD="$(DESTDIR)$(schemadir)/$$SF" ; \
if test ! -f $$SD ; then \
echo "installing $$SF in $(schemadir)" ; \
echo $(INSTALL) $(INSTALLFLAGS) -m 444 $$i $$SD ; \
$(INSTALL) $(INSTALLFLAGS) -m 444 $$i $$SD ; \
else \
echo "PRESERVING EXISTING SCHEMA FILE $$SD" ; \
fi ; \
$(INSTALL) $(INSTALLFLAGS) -m 444 $$i $$SD.default ; \
done
install-conf: FORCE
@-$(MKDIR) $(DESTDIR)$(sysconfdir)
@-$(INSTALL) -m 700 -d $(DESTDIR)$(localstatedir)/openldap-data
$(INSTALL) $(INSTALLFLAGS) -m 600 slapd.conf.tmp $(DESTDIR)$(sysconfdir)/slapd.conf.default
if test ! -f $(DESTDIR)$(sysconfdir)/slapd.conf; then \
echo "installing slapd.conf in $(sysconfdir)"; \
echo "$(INSTALL) $(INSTALLFLAGS) -m 600 slapd.conf.tmp $(DESTDIR)$(sysconfdir)/slapd.conf"; \
$(INSTALL) $(INSTALLFLAGS) -m 600 slapd.conf.tmp $(DESTDIR)$(sysconfdir)/slapd.conf; \
else \
echo "PRESERVING EXISTING CONFIGURATION FILE $(DESTDIR)$(sysconfdir)/slapd.conf" ; \
fi
install-tools: FORCE
@-$(MKDIR) $(DESTDIR)$(sbindir)
(cd tools; $(MAKE) $(MFLAGS) install)