#
#
#
NULL=
MODULE=xmlsec
SOURCE_DIR=$(top_srcdir)/src
SOURCE_DIR2=$(top_builddir)/src
INCLUDE_DIR=$(top_srcdir)/include
INCLUDE_DIR2=$(top_builddir)/include
SCAN_DIR=$(builddir)
SGML_DIR=$(builddir)/sgml.tmp
XML_DIR=$(builddir)/xml.tmp
EXAMPLES_DIR=$(SGML_DIR)/examples
SOURCE_CODE_DIR=$(builddir)/code
# We need to copy some files to make gkdoc happy that
# everything is in one folder
TMPL_DIR=$(builddir)/tmpl
TMPL_SRC_DIR=$(srcdir)/tmpl
MAIN_SGML_FILE=$(SGML_DIR)/xmlsec-main.sgml
MAIN_SGML_SRC_FILE=$(srcdir)/src/xmlsec.sgml
SGML_CHAPTERS_DIR=$(SGML_DIR)/chapters
SGML_CHAPTERS_SRC_DIR=$(srcdir)/src/chapters
EXTRA_DIST = \
$(TMPL_DIR) \
$(srcdir)/src \
$(srcdir)/images \
$(NULL)
SOURCE_FILES_TO_COPY = \
$(srcdir)/src \
$(srcdir)/images \
$(srcdir)/*.html \
$(srcdir)/*.png \
$(NULL)
#
# We need to pre-process original source files
# because gtkdoc does not understand some C features
#
SOURCE_CODE_FILES=\
$(shell find $(SOURCE_DIR) -name '*.c' -print ) \
$(shell find $(SOURCE_DIR2) -name '*.c' -print ) \
$(shell find $(INCLUDE_DIR) -name '*.h' -a ! -name "symbols.h" -print ) \
$(shell find $(INCLUDE_DIR2) -name '*.h' -a ! -name "symbols.h" -print )
EXAMPLES_SOURCE_DIR=$(top_srcdir)/examples
EXAMPLES_SOURCE_FILES=\
$(shell find $(EXAMPLES_SOURCE_DIR) -name '*.c' -print) \
$(shell find $(EXAMPLES_SOURCE_DIR) -name '*.xml' -print)
#
# This script removes gtkdoc crap from final html
#
REMOVE_GTKDOCLINK=$(top_srcdir)/scripts/remove-gtkdoclink.pl
# docs is legacy
all: docs
# if build API docs, then we also have xsltproc
if BUILD_API_DOCS
docs: html-cleanup
else
docs:
@( \
echo "Copying api-docs..."; \
if [ z"$(srcdir)" != z"$(builddir)" ]; \
then \
$(CP) -ru $(SOURCE_FILES_TO_COPY) $(builddir)/ ; \
fi \
)
endif
html-cleanup: html
( echo "Cleaning up result files"; \
$(PERL) $(REMOVE_GTKDOCLINK) `find . -name "*.html" -print` \
)
# need to cleanup "bad" chars
html: sgml $(MAIN_SGML_FILE) $(SGML_CHAPTERS_DIR) xmlsec-index
$(GTKDOC_MKHTML) xmlsec $(MAIN_SGML_FILE)
$(SGML_CHAPTERS_DIR): $(SGML_CHAPTERS_SRC_DIR) $(SGML_CHAPTERS_DIR)/.sentinel
$(CP) -ru $(SGML_CHAPTERS_SRC_DIR)/* $(SGML_CHAPTERS_DIR)
$(MAIN_SGML_FILE): $(MAIN_SGML_SRC_FILE)
$(CP) -u $(MAIN_SGML_SRC_FILE) $(MAIN_SGML_FILE)
#
# Prepeare sgml files from sources for each library. We are also
# doing some "magic" here by automatically adding links to XML DSig and
# XML Enc specification, we also remove "Ptr" from the end of the link
# targets to make more references.
#
# We also fix a bunch of stupid errors from gtkdoc
#
sgml: sgml-base
(for i in `find $(SGML_DIR) -name "*.sgml" -print` ; do \
echo "Fixing up '$$i'" ; \
cat $$i | \
sed 's!\(\)!\<dsig:\2\/\>!g' | \
sed 's!\(\)!\<enc:\2\/\>!g' | \
sed 's!\(\)!\<dsig:\2\/\>!g' | \
sed 's!\(\)!\<enc:\2\/\>!g' | \
sed 's!\(<dsig:\)\([^/]*\)\(\/>\)!\1\2\3!g' | \
sed 's!\(<enc:\)\([^/]*\)\(\/>\)!\1\2\3!g' | \
sed 's!!!g' | \
sed 's!linkend=\"\(.*\)Ptr\"!linkend=\"\1\"!g' | \
sed 's!!!g' | \
sed 's!\n!title>!g' | \
$(PERL) -pe 's!title>\n!title>!g' | \
$(PERL) -pe 's!<\/title><\/refsect1>\n!<\/title><\/para><\/refsect1>!g' | \
$(PERL) -pe 's!para>\n!para>!g' > \
$$i.tmp; \
mv -f $$i.tmp $$i; \
done);
sgml-base: templates $(SGML_DIR)/.sentinel
$(GTKDOC_MKDB) --module=xmlsec \
--main-sgml-file=$(SGML_DIR)/xmlsec-base.sgml \
--output-dir=$(SGML_DIR)/ \
--tmpl-dir=$(TMPL_DIR)/base \
--source-dir=$(SOURCE_CODE_DIR)/src/base \
--source-dir=$(SOURCE_CODE_DIR)/include/xmlsec/base
$(GTKDOC_MKDB) --module=xmlsec-openssl \
--main-sgml-file=$(SGML_DIR)/xmlsec-openssl.sgml \
--tmpl-dir=$(TMPL_DIR)/openssl \
--output-dir=$(SGML_DIR)/openssl \
--source-dir=$(SOURCE_CODE_DIR)/src/openssl \
--source-dir=$(SOURCE_CODE_DIR)/include/xmlsec/openssl
$(GTKDOC_MKDB) --module=xmlsec-gnutls \
--main-sgml-file=$(SGML_DIR)/xmlsec-gnutls.sgml \
--tmpl-dir=$(TMPL_DIR)/gnutls \
--output-dir=$(SGML_DIR)/gnutls \
--source-dir=$(SOURCE_CODE_DIR)/src/gnutls \
--source-dir=$(SOURCE_CODE_DIR)/include/xmlsec/gnutls
$(GTKDOC_MKDB) --module=xmlsec-gcrypt \
--main-sgml-file=$(SGML_DIR)/xmlsec-gcrypt.sgml \
--tmpl-dir=$(TMPL_DIR)/gcrypt \
--output-dir=$(SGML_DIR)/gcrypt \
--source-dir=$(SOURCE_CODE_DIR)/src/gcrypt \
--source-dir=$(SOURCE_CODE_DIR)/include/xmlsec/gcrypt
$(GTKDOC_MKDB) --module=xmlsec-nss \
--main-sgml-file=$(SGML_DIR)/xmlsec-nss.sgml \
--tmpl-dir=$(TMPL_DIR)/nss \
--output-dir=$(SGML_DIR)/nss \
--source-dir=$(SOURCE_CODE_DIR)/src/nss \
--source-dir=$(SOURCE_CODE_DIR)/include/xmlsec/nss
$(GTKDOC_MKDB) --module=xmlsec-mscrypto \
--main-sgml-file=$(SGML_DIR)/xmlsec-mscrypto.sgml \
--tmpl-dir=$(TMPL_DIR)/mscrypto \
--output-dir=$(SGML_DIR)/mscrypto \
--source-dir=$(SOURCE_CODE_DIR)/src/mscrypto \
--source-dir=$(SOURCE_CODE_DIR)/include/xmlsec/mscrypto
templates: scan templates-copy
$(GTKDOC_MKTMPL) --module=xmlsec \
--output-dir=$(TMPL_DIR)/base
$(GTKDOC_MKTMPL) --module=xmlsec-openssl \
--output-dir=$(TMPL_DIR)/openssl
$(GTKDOC_MKTMPL) --module=xmlsec-gnutls \
--output-dir=$(TMPL_DIR)/gnutls
$(GTKDOC_MKTMPL) --module=xmlsec-gcrypt \
--output-dir=$(TMPL_DIR)/gcrypt
$(GTKDOC_MKTMPL) --module=xmlsec-nss \
--output-dir=$(TMPL_DIR)/nss
$(GTKDOC_MKTMPL) --module=xmlsec-mscrypto \
--output-dir=$(TMPL_DIR)/mscrypto
# make sure to run chmod since we will update templates
templates-copy: $(TMPL_SRC_DIR) $(TMPL_DIR)/.sentinel
@echo "Copying original template files into '$(TMPL_DIR)' ..."
( if [ z"$(TMPL_DIR)" != z"$(TMPL_SRC_DIR)" ] ; then \
$(CP) -ru $(TMPL_SRC_DIR)/* $(TMPL_DIR)/ ; \
fi ; )
chmod -R u+w $(TMPL_DIR)
scan: SOURCE_CODEs example_sources
$(GTKDOC_SCAN) --module=xmlsec \
--rebuild-sections \
--output-dir=$(SCAN_DIR) \
--source-dir=$(SOURCE_CODE_DIR)/src/base \
--source-dir=$(SOURCE_CODE_DIR)/include/xmlsec/base
$(GTKDOC_SCAN) --module=xmlsec-openssl \
--rebuild-sections \
--output-dir=$(SCAN_DIR) \
--source-dir=$(SOURCE_CODE_DIR)/src/openssl \
--source-dir=$(SOURCE_CODE_DIR)/include/xmlsec/openssl
$(GTKDOC_SCAN) --module=xmlsec-gnutls \
--rebuild-sections \
--output-dir=$(SCAN_DIR) \
--source-dir=$(SOURCE_CODE_DIR)/src/gnutls \
--source-dir=$(SOURCE_CODE_DIR)/include/xmlsec/gnutls
$(GTKDOC_SCAN) --module=xmlsec-gcrypt \
--rebuild-sections \
--output-dir=$(SCAN_DIR) \
--source-dir=$(SOURCE_CODE_DIR)/src/gcrypt \
--source-dir=$(SOURCE_CODE_DIR)/include/xmlsec/gcrypt
$(GTKDOC_SCAN) --module=xmlsec-nss \
--rebuild-sections \
--output-dir=$(SCAN_DIR) \
--source-dir=$(SOURCE_CODE_DIR)/src/nss \
--source-dir=$(SOURCE_CODE_DIR)/include/xmlsec/nss
$(GTKDOC_SCAN) --module=xmlsec-mscrypto \
--rebuild-sections \
--output-dir=$(SCAN_DIR) \
--source-dir=$(SOURCE_CODE_DIR)/src/mscrypto \
--source-dir=$(SOURCE_CODE_DIR)/include/xmlsec/mscrypto
#
# Prepare source files by coping them to "code" folder and
# removing XMLSEC_EXPORT_* stuff that makes gtkdoc crazy
#
SOURCE_CODEs: $(SOURCE_CODE_FILES) $(SOURCE_CODE_DIR)/.sentinel SOURCE_CODEs_cleanup
@echo "Preprocessing source files into '$(SOURCE_CODE_DIR)' ..."
@mkdir -p $(SOURCE_CODE_DIR)/src/base $(SOURCE_CODE_DIR)/include/xmlsec/base
@( \
for i in $(SOURCE_CODE_FILES) ; do \
folder_name=`echo "$$i" | \
sed 's#$(top_srcdir)/##' | \
sed 's#$(top_builddir)/##' | \
sed 's#/[^/]*$$##'`; \
file_name=`echo "$$i" | \
sed 's#.*/##'`; \
mkdir -p "$(SOURCE_CODE_DIR)/$$folder_name"; \
cat "$$i" | \
sed 's/#if.*//' | \
sed 's/#el.*//' | \
sed 's/#end.*//' | \
sed 's/XMLSEC_CRYPTO_EXPORT//' | \
sed 's/XMLSEC_EXPORT_VAR//' | \
sed 's/XMLSEC_EXPORT//' | \
sed 's/XMLSEC_ERRORS_PRINTF_ATTRIBUTE//' > \
$(SOURCE_CODE_DIR)/$$folder_name/$$file_name; \
done);
-@mv -f $(SOURCE_CODE_DIR)/src/*.c $(SOURCE_CODE_DIR)/src/base
-@mv -f $(SOURCE_CODE_DIR)/include/xmlsec/*.h $(SOURCE_CODE_DIR)/include/xmlsec/base
-@rm -f $(SOURCE_CODE_DIR)/include/xmlsec/*/symbols.h
SOURCE_CODEs_cleanup: $(SOURCE_CODE_DIR)/.sentinel
@rm -rf $(SOURCE_CODE_DIR)/*
#
# Create index for all functions. For macros and defines need to add -CAPS suffix
#
xmlsec-index: scan $(SGML_DIR)/.sentinel
@grep -h '.*' $(SCAN_DIR)/xmlsec-*decl.txt | \
grep -v 'extern' | \
sort -u | \
sed 's#_#-#g' | \
sed 's#\([^-]*\)-\([^<]*\)#\1-\2#g' | \
sed 's#\([^<]*\)#\1#g' > \
$(SGML_DIR)/xmlsec-index.sgml
#
# The following code converts C example file to sgml RefEntry files.
# We get file title from a string "XML Security Library example: ..."
# which is usually placed at the top of the file. Also all "unsafe" xml
# characters (<, >, &) are escaped.
#
example_sources: $(EXAMPLES_DIR)/.sentinel
@echo "Preprocessing example source files into '$(EXAMPLES_DIR)' ..."
@rm -rf $(EXAMPLES_DIR)/*
@(for i in $(EXAMPLES_SOURCE_FILES) ; do \
file_name=`echo $$i | sed 's#.*/##' | sed 's#\..*$$##'`; \
file_ext=`echo $$i | sed 's#.*/##' | sed 's#.*\.##'`; \
echo Converting $$file_name.$$file_ext to $$file_name.sgml ...; \
file_title=`cat $$i | grep 'XML Security Library example: ' | sed 's#^.*: *##'`; \
echo "" > \
$(EXAMPLES_DIR)/$$file_name.sgml; \
echo "$$file_name.$$file_ext" >> \
$(EXAMPLES_DIR)/$$file_name.sgml; \
cat $$i | \
sed "s#\&#g" | \
sed "s#<#\<#g" | \
sed "s#>#\>#g" >> \
$(EXAMPLES_DIR)/$$file_name.sgml; \
echo "" >> \
$(EXAMPLES_DIR)/$$file_name.sgml; \
done);
# A single pattern rule will create all appropriate folders as required
# otherwise make (annoyingly) deletes it
.PRECIOUS: %/.sentinel
%/.sentinel:
@echo "Creating folder '${@D}' ..."
mkdir -p ${@D}
touch $@
dist-hook:
@cp -p $(srcdir)/*.html $(srcdir)/*.png $(distdir)/
(for i in `find $(distdir) -name ".sentinel" -print` ; do \
echo "Removing some files '$$i' before dist ... " ; \
rm $$i ; \
done )
(for i in `find $(distdir) -name "*.sgml.bak" -print` ; do \
echo "Removing some files '$$i' before dist ... " ; \
rm "$$i" ; \
done ; )
clean-local:
-rm -rf $(SOURCE_CODE_DIR) $(EXAMPLES_DIR) $(SCAN_DIR)/*.txt $(SGML_DIR) $(XML_DIR)
-rm -f *.stamp *.types *.css index.sgml
( if [ z"$(TMPL_SRC_DIR)" != z"$(TMPL_DIR)" ] && [ -d "$(TMPL_DIR)" ] ; then \
chmod -R u+w $(TMPL_DIR) && rm -rf $(TMPL_DIR) ; \
fi ; )
( if [ z"$(builddir)" != z"$(srcdir)" ] ; then \
chmod -R u+w $(builddir)/src && rm -rf $(builddir)/src ; \
chmod -R u+w $(builddir)/images && rm -rf $(builddir)/images ; \
chmod -R u+w $(builddir)/*.png && rm -rf $(builddir)/*.png ; \
fi ; )
distclean-local: clean-local
maintainer-clean-local: clean-local
-rm -f *.html