#!/usr/bin/make # This Makefile contains 2 main sections # - Variables # - targets # --------- # VARIABLES # --------- # Prefix for packaging DESTDIR= # Flag for optimizations USEDEBIANLIBS=no PROD=$(USEDEBIANLIBS) USEEXTERNALLIBS=no PARA=$(shell perl -000 -e 'print ( "$(MAKEFLAGS)" =~ /-j(\d+)/ ? "j$1:c" : "")') # Perl options #PERLOPTIONS="INSTALLDIRS=vendor" PERLOPTIONS= # Compression JSCOMPRESS=$(PROD) CSSCOMPRESS=$(PROD) # External commands PERL=$$(which perl) PERLVERSION=`perl -e '$$version = $$^V; $$version =~ s/v//; print $$version'` export PERL5LIB=$(shell echo `pwd`/${SRCCOMMONDIR}/blib/lib:`pwd`/${SRCHANDLERDIR}/blib/lib:`pwd`/${SRCMANAGERDIR}/blib/lib/:`pwd`/${SRCPORTALDIR}/blib/lib/) SU=su -c COMPRESS=tar czf UNCOMPRESS=tar xzf LISTCOMPRESSED=tar tzf COMPRESSSUFFIX=tar.gz NGINX=/usr/sbin/nginx UGLIFYJSVERSION:=$(shell uglifyjs --version|perl -pe 's/^[^\d]*(\d).*$$/$$1/') CHOWN=chown CHMOD=chmod # Default directories install # --------------------------- # Common dirs PREFIX=/usr/local LMPREFIX=$(PREFIX)/lemonldap-ng # BIN dirs BINDIR=$(LMPREFIX)/bin SBINDIR=$(LMPREFIX)/sbin INITDIR=$(LMPREFIX)/etc/init.d ETCDEFAULTDIR=$(LMPREFIX)/etc/default DATADIR=$(LMPREFIX)/data # Document roots for Apache VirtualHosts DOCUMENTROOT=$(LMPREFIX)/htdocs PORTALDIR=$(DOCUMENTROOT)/portal PORTALSITEDIR=$(PORTALDIR)/htdocs PORTALSTATICDIR=$(PORTALSITEDIR)/static PORTALRELATIVESTATICDIR=/static PORTALTEMPLATESDIR=$(PORTALDIR)/templates MANAGERDIR=$(DOCUMENTROOT)/manager MANAGERSITEDIR=$(MANAGERDIR)/htdocs MANAGERAPIDIR=$(MANAGERDIR)/api MANAGERSTATICDIR=$(MANAGERSITEDIR)/static MANAGERRELATIVESTATICDIR=/static MANAGERRELATIVEDOCDIR=/doc MANAGERTEMPLATESDIR=$(MANAGERSITEDIR)/templates DOCDIR=$(DOCUMENTROOT) DEFDOCDIR=$(DOCUMENTROOT)/doc TESTDIR=$(DOCUMENTROOT)/test EXAMPLESDIR=$(LMPREFIX)/examples TOOLSDIR=$(LMPREFIX)/tools # Handler dir HANDLERDIR=$(LMPREFIX)/handler # Configuration dir CONFDIR=$(LMPREFIX)/etc CRONDIR=$(LMPREFIX)/etc/cron.d CONFFILENAME=lemonldap-ng.ini STORAGECONFFILE=$(CONFDIR)/$(CONFFILENAME) # LL::NG configuration storage dir FILECONFIGDIR=$(DATADIR)/conf # LL::NG sessions storage dir APACHESESSIONFILEDIR=$(DATADIR)/sessions APACHESESSIONFILELOCKDIR=$(APACHESESSIONFILEDIR)/lock # LL::NG persistent sessions storage dir APACHEPSESSIONFILEDIR=$(DATADIR)/psessions APACHEPSESSIONFILELOCKDIR=$(APACHEPSESSIONFILEDIR)/lock # LL::NG notifications storage dir APACHEFILENOTIFDIR=$(DATADIR)/notifications # LL::NG captcha dir CAPTCHADIR=$(DATADIR)/captcha # LL::NG cache dir CACHEDIR=$(DATADIR)/cache # Apache user/group APACHEUSER= APACHEGROUP= # FastCGI FASTCGISOCKDIR=$(PREFIX)/run FASTCGIUSER=$(APACHEUSER) FASTCGIGROUP=$(APACHEGROUP) # uWSGI UWSGIYAMLDIR=$(LMPREFIX)/uwsgi LLNGAPPDIR=$(LMPREFIX)/llng-server UWSGIUSER=$(APACHEUSER) UWSGIGROUP=$(APACHEGROUP) # Apache version APACHEVERSION=2.X # Apache log dir APACHELOGDIR=/var/log/apache2 # DNS Domain for cookie and virtual hosts DNSDOMAIN=example.com # Virtual Host Listen IP and Port (*, *:80, ...) PORT=80 VHOSTLISTEN="*:$(PORT)" TESTWEBSERVER=apache TESTWEBSERVERPORT=19876 TESTUSESSL=0 E2E_TESTS='portal/*.js' # LDAP backend test LLNGTESTLDAP_SLAPD_BIN=/usr/sbin/slapd LLNGTESTLDAP_SLAPADD_BIN=/usr/sbin/slapadd LLNGTESTLDAP_SCHEMA_DIR=/etc/ldap/schema # Default website destination WEBSITE_DIR=doc/sources/admin/_build/html # Other SRCCOMMONDIR=lemonldap-ng-common SRCHANDLERDIR=lemonldap-ng-handler SRCPORTALDIR=lemonldap-ng-portal SRCMANAGERDIR=lemonldap-ng-manager ERASECONFIG=1 # Set to 0 if you do not want to replace your configuration # INTERNAL VARIABLES # Internal variables used to install in $(DESTDIR) RLMPREFIX=$(DESTDIR)/$(LMPREFIX) RBINDIR=$(DESTDIR)/$(BINDIR) RSBINDIR=$(DESTDIR)/$(SBINDIR) RUWSGIYAMLDIR=$(DESTDIR)/$(UWSGIYAMLDIR) RLLNGAPPDIR=$(DESTDIR)/$(LLNGAPPDIR) RINITDIR=$(DESTDIR)/$(INITDIR) RETCDEFAULTDIR=$(DESTDIR)/$(ETCDEFAULTDIR) RDATADIR=$(DESTDIR)/$(DATADIR) RPORTALDIR=$(DESTDIR)/$(PORTALDIR) RPORTALSITEDIR=$(DESTDIR)/$(PORTALSITEDIR) RPORTALSTATICDIR=$(DESTDIR)/$(PORTALSTATICDIR) RPORTALTEMPLATESDIR=$(DESTDIR)/$(PORTALTEMPLATESDIR) RMANAGERDIR=$(DESTDIR)/$(MANAGERDIR) RMANAGERSITEDIR=$(DESTDIR)/$(MANAGERSITEDIR) RMANAGERAPIDIR=$(DESTDIR)/$(MANAGERAPIDIR) RMANAGERSTATICDIR=$(DESTDIR)/$(MANAGERSTATICDIR) RMANAGERTEMPLATESDIR=$(DESTDIR)/$(MANAGERTEMPLATESDIR) RDOCDIR=$(DESTDIR)/$(DOCDIR) RDEFDOCDIR=$(DESTDIR)/$(DEFDOCDIR) RTESTDIR=$(DESTDIR)/$(TESTDIR) REXAMPLESDIR=$(DESTDIR)/$(EXAMPLESDIR) RTOOLSDIR=$(DESTDIR)/$(TOOLSDIR) RHANDLERDIR=$(DESTDIR)/$(HANDLERDIR) RCONFDIR=$(DESTDIR)/$(CONFDIR) RCRONDIR=$(DESTDIR)/$(CRONDIR) RFILECONFIGDIR=$(DESTDIR)/$(FILECONFIGDIR) RAPACHESESSIONFILEDIR=$(DESTDIR)/$(APACHESESSIONFILEDIR) RAPACHESESSIONFILELOCKDIR=$(DESTDIR)/$(APACHESESSIONFILELOCKDIR) RAPACHEPSESSIONFILEDIR=$(DESTDIR)/$(APACHEPSESSIONFILEDIR) RAPACHEPSESSIONFILELOCKDIR=$(DESTDIR)/$(APACHEPSESSIONFILELOCKDIR) RFILENOTIFDIR=$(DESTDIR)/$(APACHEFILENOTIFDIR) RCAPTCHADIR=$(DESTDIR)/$(CAPTCHADIR) RCACHEDIR=$(DESTDIR)/$(CACHEDIR) RFASTCGISOCKDIR=$(DESTDIR)/$(FASTCGISOCKDIR) VERSION=`head -n1 changelog |sed -e 's/lemonldap-ng (//' -e 's/).*$$//'` PORTALSKINS=`ls $(SRCPORTALDIR)/site/templates/` DIFF=diff -aurN -x '*.tpl' -x '*.bak' -x .svn -x '*.map' -x '*.min.js' -x '*.min.css' -x '*.swp' --ignore-matching-lines='.*jquery.*' --ignore-matching-lines='.*lemonldap-ng\.ini.*' DIFFPREFIX= MANAGERLIBSTOREMOVEFORDEBIAN=$(RMANAGERSTATICDIR)/bwr/jquery/ \ $(RMANAGERSTATICDIR)/bwr/angular/ \ $(RMANAGERSTATICDIR)/bwr/angular-animate/ \ $(RMANAGERSTATICDIR)/bwr/angular-cookie/ \ $(RMANAGERSTATICDIR)/bwr/bootstrap/ \ $(RMANAGERSTATICDIR)/bwr/es5-shim/ PORTALLIBSTOREMOVEFORDEBIAN=$(RPORTALSTATICDIR)/bwr/bootstrap/ \ $(RPORTALSTATICDIR)/bwr/font-awesome \ $(RPORTALSTATICDIR)/bwr/jquery-ui \ $(RPORTALSTATICDIR)/bwr/jquery.cookie \ $(RPORTALSTATICDIR)/bwr/jquery DOCLIBSTOREMOVEFORDEBIAN=pages/documentation/current/lib/tpl/bootstrap3 \ pages/documentation/current/lib/scripts/jquery-ui*.js \ pages/documentation/current/bootswatch/3.3.4/flatly/bootstrap.min.css DOCEXTERNALLIBS=$(DOCLIBSTOREMOVEFORDEBIAN) MANAGEREXTERNALLIBS=$(RMANAGERSTATICDIR)/bwr/ PORTALEXTERNALLIBS=$(PORTALLIBSTOREMOVEFORDEBIAN) # GENERATED SRC FILES MANAGERJSONSRC= scripts/jsongenerator.pl \ $(SRCMANAGERDIR)/lib/Lemonldap/NG/Manager/Build.pm \ $(SRCMANAGERDIR)/lib/Lemonldap/NG/Manager/Build/Attributes.pm \ $(SRCMANAGERDIR)/lib/Lemonldap/NG/Manager/Build/Tree.pm \ $(SRCMANAGERDIR)/lib/Lemonldap/NG/Manager/Build/CTrees.pm \ $(SRCMANAGERDIR)/lib/Lemonldap/NG/Manager/Conf/Zero.pm \ $(SRCMANAGERDIR)/lib/Lemonldap/NG/Manager/Build/PortalConstants.pm MANAGERJSONDST=$(SRCMANAGERDIR)/site/htdocs/static/struct.json \ $(SRCMANAGERDIR)/site/htdocs/static/reverseTree.json \ $(SRCMANAGERDIR)/site/htdocs/static/js/conftree.js \ $(SRCMANAGERDIR)/lib/Lemonldap/NG/Manager/Attributes.pm \ $(SRCCOMMONDIR)/lib/Lemonldap/NG/Common/Conf/ReConstants.pm \ $(SRCCOMMONDIR)/lib/Lemonldap/NG/Common/Conf/DefaultValues.pm \ $(SRCCOMMONDIR)/lib/Lemonldap/NG/Common/Conf/Constants.pm \ $(SRCPORTALDIR)/lib/Lemonldap/NG/Portal/Main/Constants.pm \ $(SRCHANDLERDIR)/lib/Lemonldap/NG/Handler/Lib/StatusConstants.pm \ _example/conf/lmConf-1.json # Javascript and CSS to minify JSSRCFILES:=$(shell find */site/htdocs/static/js $(SRCPORTALDIR)/site/htdocs/static -type f -name '*.js' ! -name '*.min.js') \ $(SRCMANAGERDIR)/site/htdocs/static/bwr/file-saver.js/FileSaver.js CSSSRCFILES:=$(shell find $(SRCMANAGERDIR)/site/htdocs/static $(SRCPORTALDIR)/site/htdocs/static -type f -name '*.css' ! -name '*.min.css') # Coffee files MANAGERCOFFEESRCFILES:=$(shell find lemonldap-ng-manager/site/coffee -type f -name '*.coffee') PORTALCOFFEESRCFILES:=$(shell find lemonldap-ng-portal/site/coffee -type f -name '*.coffee') COFFEESRCFILES=$(MANAGERCOFFEESRCFILES) $(PORTALCOFFEESRCFILES) MANAGERCOFFEEDSTFILES:=$(subst coffee/,htdocs/static/js/,$(MANAGERCOFFEESRCFILES:.coffee=.js)) PORTALCOFFEEDSTFILES:=$(subst coffee/,htdocs/static/common/js/,$(PORTALCOFFEESRCFILES:.coffee=.js)) COFFEEDSTFILES:=$(MANAGERCOFFEEDSTFILES) $(PORTALCOFFEEDSTFILES) # Minified files JSDSTFILES=$(JSSRCFILES:.js=.min.js) CSSDSTFILES=$(CSSSRCFILES:.css=.min.css) # ------- # TARGETS # ------- # Targets section contains the following subsections: # - 'all' that must be defined at first # - configure targets # - make targets # - test targets # - end-to-end tests # - install targets # - cleaning targets # - Perl libraries uninstall targets # - packaging targets # - developper corner all: configure common handler manager portal documentation @echo @echo "Building succeed. Now run :" @echo " - 'make test' to verify your installation" @echo " - 'make install PROD=yes' to install all" @echo @echo " MAKE INSTALL OPTIONS:" @echo " - PROD=yes : use js/css minified files" @echo " - USEDEBIANLIBS=yes : use some Debian shared js/css files" @echo " - USEEXTERNALLIBS=yes : use external links for some js/css files" @echo @echo 'Other targets :' @echo " * Partial build :" @echo " - portal, manager, handler" @echo @echo 'Other targets launched by "make install" :' @echo " * Perl libraries install :" @echo " - install_libs (all Perl libraries)" @echo " - install_portal_libs" @echo " - install_manager_libs" @echo " - install_handler_libs" @echo " * Binaries install :" @echo " - install_bin ($(BINDIR))" @echo " * FastCGI (or uWSGI) server install (required for Nginx)" @echo " - install_fastcgi_server ($(SBINDIR))" @echo " - install_uwsgi_server ($(UWSGIYAMLDIR))" @echo " * Web sites install :" @echo " - install_site (all sites including install_doc_site)" @echo " - install_portal_site ($(PORTALDIR))" @echo " - install_manager_site ($(MANAGERDIR))" @echo " - install_handler_site ($(HANDLERDIR))" @echo " * Documentation install :" @echo " - install_doc_site ($(DEFDOCDIR))" @echo " - install_examples_site ($(EXAMPLESDIR))" @echo # Configure targets # ----------------- configure: common_conf handler_conf portal_conf manager_conf js: $(COFFEEDSTFILES) minify: js $(JSDSTFILES) $(CSSDSTFILES) $(SRCPORTALDIR)/site/htdocs/static/common/js/%.js: $(SRCPORTALDIR)/site/coffee/%.coffee @if which coffee >/dev/null; then \ echo "Compiling $(SRCPORTALDIR)/site/coffee/$*.coffee"; \ coffee -c -o $(SRCPORTALDIR)/site/htdocs/static/common/js/ $(SRCPORTALDIR)/site/coffee/$*.coffee; \ else \ echo "Can't find coffee"; \ fi $(SRCMANAGERDIR)/site/htdocs/static/js/%.js: $(SRCMANAGERDIR)/site/coffee/%.coffee @if which coffee >/dev/null; then \ echo "Compiling $(SRCMANAGERDIR)/site/coffee/$*.coffee"; \ coffee -c -o $(SRCMANAGERDIR)/site/htdocs/static/js/ $(SRCMANAGERDIR)/site/coffee/$*.coffee; \ fi %.min.css: %.css @echo "Compressing $*.css" @yui-compressor $*.css > $*.min.css %.min.js: %.js @echo "Compressing $*.js" if test "$(UGLIFYJSVERSION)" = 2; then \ cd `dirname $*`; \ uglifyjs `basename $*`.js --compress --mangle --comments '/Copyr/i' --source-map `basename $*`.min.js.map -o `basename $*`.min.js; \ else \ cd `dirname $*`; \ uglifyjs `basename $*`.js --compress --mangle --comments '/Copyr/i' --source-map -o `basename $*`.min.js; \ fi fastcgi-server/man/llng-fastcgi-server.8p: fastcgi-server/sbin/llng-fastcgi-server @echo Update FastCGI server man page @pod2man -s 8 -name llng-fastcgi-server fastcgi-server/sbin/llng-fastcgi-server >fastcgi-server/man/llng-fastcgi-server.8p # Perl libraries configuration json: $(MANAGERJSONDST) fastcgi-server/man/llng-fastcgi-server.8p debian/*cron* @if which yui-compressor >/dev/null; then $(MAKE) minify; fi debian/liblemonldap-ng-handler-perl.cron.d: lemonldap-ng-handler/eg/scripts/purgeLocalCache.cron.d @perl -pe 's/__APACHEUSER__/www-data/g;s@__BINDIR__@/usr/share/lemonldap-ng/bin@g' \ lemonldap-ng-handler/eg/scripts/purgeLocalCache.cron.d \ > debian/liblemonldap-ng-handler-perl.cron.d debian/liblemonldap-ng-portal-perl.cron.d: lemonldap-ng-portal/site/cron/purgeCentralCache.cron.d @perl -pe 's/__APACHEUSER__/www-data/g;s@__BINDIR__@/usr/share/lemonldap-ng/bin@g' \ lemonldap-ng-portal/site/cron/purgeCentralCache.cron.d \ > debian/liblemonldap-ng-portal-perl.cron.d $(MANAGERJSONDST): $(MANAGERJSONSRC) ./scripts/jsongenerator.pl common_conf: ${SRCCOMMONDIR}/Makefile handler_conf: ${SRCHANDLERDIR}/Makefile portal_conf: ${SRCPORTALDIR}/Makefile manager_conf: ${SRCMANAGERDIR}/Makefile ${SRCCOMMONDIR}/Makefile: @cd ${SRCCOMMONDIR}; \ LMNGCONFFILE=$(STORAGECONFFILE) \ LMNGCONFDIR=$(FILECONFIGDIR) \ $(PERL) Makefile.PL $(PERLOPTIONS) ${SRCHANDLERDIR}/Makefile: @cd ${SRCHANDLERDIR}; $(PERL) Makefile.PL $(PERLOPTIONS) ${SRCPORTALDIR}/Makefile: @cd ${SRCPORTALDIR}; $(PERL) Makefile.PL $(PERLOPTIONS) ${SRCMANAGERDIR}/Makefile: @cd ${SRCMANAGERDIR}; $(PERL) Makefile.PL $(PERLOPTIONS) # Make targets # ------------ common: common_conf @$(MAKE) -C ${SRCCOMMONDIR} handler: handler_conf common @$(MAKE) -C ${SRCHANDLERDIR} portal: portal_conf handler @$(MAKE) -C ${SRCPORTALDIR} manager: manager_conf handler $(MAKE) -C ${SRCMANAGERDIR} # Test targets # ------------ test: all common_test handler_test portal_test manager_test common_test: common @HARNESS_OPTIONS=$(PARA) $(MAKE) -C ${SRCCOMMONDIR} test handler_test: handler @$(MAKE) -C ${SRCHANDLERDIR} test portal_test: portal @HARNESS_OPTIONS=$(PARA) $(MAKE) -C ${SRCPORTALDIR} test manager_test: manager @$(MAKE) -C ${SRCMANAGERDIR} test autopkgtest: all autopkg_common autopkg_handler autopkg_portal autopkg_manager autopkg_runner autopkg_%: ./debian/tests/runner build-deps lemonldap-ng-$* autopkg_runner: ./debian/tests/runner runtime-deps # End-to-end tests # ---------------- e2e_test: all prepare_test_server start_web_server launch_protractor stop_web_server nox_e2e_test: xvfb-run -a -s "-screen 0 800x600x16" $(MAKE) e2e_test prepare_test_server: -@mkdir -p e2e-tests/conf/sessions/lock e2e-tests/conf/persistents/lock -@mkdir e2e-tests/conf/manager e2e-tests/conf/portal e2e-tests/conf/api $(MAKE) install_webserver_conf install_test_site install_fastcgi_server \ CONFDIR=`pwd`/e2e-tests/conf \ RCONFDIR=e2e-tests/conf \ ERASECONFIG=1 \ VHOSTLISTEN='*:$(TESTWEBSERVERPORT)' \ PORT=$(TESTWEBSERVERPORT) \ FASTCGISOCKDIR=`pwd`/e2e-tests/conf \ PORTALSITEDIR=`pwd`/e2e-tests/conf/portal \ PORTALSTATICDIR=`pwd`/$(SRCPORTALDIR)/site/htdocs/static \ MANAGERSITEDIR=`pwd`/e2e-tests/conf/manager \ MANAGERSTATICDIR=`pwd`/$(SRCMANAGERDIR)/site/htdocs/static \ TESTDIR=`pwd`/e2e-tests/conf/site \ DEFDOCDIR=`pwd`/doc \ SBINDIR=`pwd`/e2e-tests/conf/sbin \ INITDIR=`pwd`/e2e-tests/conf/init \ ETCDEFAULTDIR=`pwd`/e2e-tests/conf/def #@cp -f e2e-tests/index.* e2e-tests/conf/ @cp -f $(SRCMANAGERDIR)/site/htdocs/manager* e2e-tests/conf/manager @cp -f $(SRCMANAGERDIR)/site/api/api* e2e-tests/conf/api @cp -f $(SRCPORTALDIR)/site/htdocs/index* e2e-tests/conf/portal @cp e2e-tests/persistent/5efe8af397fc3577e05b483aca964f1b e2e-tests/conf/persistents @cp e2e-tests/saml-sp.xml e2e-tests/conf/site/saml-sp.xml @cp e2e-tests/rules.json e2e-tests/conf/site/test.json @for f in $$(find e2e-tests/conf -name '*.fcgi'); do \ perl -i -pe 'if($$.==2){print "BEGIN{\n"; print qq(use lib q('`pwd`'/lemonldap-ng-$$_/blib/lib);\n) foreach qw(common handler portal manager); print "}\n"; }' $$f; \ done @cp e2e-tests/lmConf-1.json e2e-tests/lemonldap-ng*.ini e2e-tests/env.conf e2e-tests/test-nginx.conf e2e-tests/conf/ @cp e2e-tests/form.html e2e-tests/conf/site @perl -i -pe 'BEGIN{$$p=`pwd`;chomp $$p}s#__pwd__#$$p#;s#__port__#$(TESTWEBSERVERPORT)#;s#__FASTCGISOCKDIR__#$(FASTCGISOCKDIR)#;' \ e2e-tests/conf/lemonldap-ng*.ini \ e2e-tests/conf/lmConf-1.json \ e2e-tests/conf/env.conf \ e2e-tests/conf/test-nginx.conf @perl -i -pe 's/#CustomLog.*$$/CustomLog conf\/apache2.log llng/' e2e-tests/conf/portal-apache2.X.conf e2e-tests/conf/manager-apache2.X.conf @if test "$(TESTUSESSL)" = "1"; then \ perl -i -pe 's#http://(test|mana|auth)#https://$$1#' e2e-tests/conf/lmConf-1.json e2e-tests/conf/handler-apache2.X.conf e2e-tests/conf/site/index.pl; \ perl -i -pe 's#"https": 0#"https": 1#' e2e-tests/conf/lmConf-1.json; \ fi e2e-tests/conf/apache2.pid: start_web_server start_web_server: all prepare_test_server # Clean old server if launched mkdir -p e2e-tests/conf @if test "$(TESTBACKEND)" = "DBI"; then \ echo 'create table lmConfig (cfgNum int, data text);'|sqlite3 e2e-tests/conf/config.db; \ echo 'create table sessions (id text, a_session text, LastUpdated int);'|sqlite3 e2e-tests/conf/sessions.db; \ perl lemonldap-ng-common/scripts/convertConfig \ --current=e2e-tests/conf/lemonldap-ng.ini \ --new=e2e-tests/conf/lemonldap-ng-sql.ini; \ mv e2e-tests/conf/lemonldap-ng-sql.ini e2e-tests/conf/lemonldap-ng.ini; \ LLNG_DEFAULTCONFFILE=e2e-tests/conf/lemonldap-ng.ini \ perl lemonldap-ng-common/scripts/lemonldap-ng-cli --yes 1 \ set globalStorage Apache::Session::SQLite3; \ LLNG_DEFAULTCONFFILE=e2e-tests/conf/lemonldap-ng.ini \ perl lemonldap-ng-common/scripts/lemonldap-ng-cli --yes 1 \ addKey globalStorageOptions DataSource 'dbi:SQLite:dbname='`pwd`'/e2e-tests/conf/sessions.db'; \ fi @# Debian: make start_web_server TESTBACKEND=LDAP LLNGTESTLDAP_SCHEMA_DIR=/etc/ldap/schema LLNGTESTLDAP_SLAPADD_BIN=/usr/sbin/slapadd @if test "$(TESTBACKEND)" = "LDAP"; then \ cp lemonldap-ng-portal/t/testslapd/slapd.ldif e2e-tests/conf/; \ mkdir e2e-tests/conf/slapd.d; \ mkdir e2e-tests/conf/data; \ sed -i 's:__SCHEMA_DIR__:${LLNGTESTLDAP_SCHEMA_DIR}:' e2e-tests/conf/slapd.ldif; \ sed -i 's|olcDbDirectory.*|olcDbDirectory: e2e-tests/conf/data|' e2e-tests/conf/slapd.ldif; \ sed -i 's|olcPidFile.*|olcPidFile: e2e-tests/conf/slapd.pid|' e2e-tests/conf/slapd.ldif; \ ${LLNGTESTLDAP_SLAPADD_BIN} -F e2e-tests/conf/slapd.d -n 0 -l e2e-tests/conf/slapd.ldif; \ ${LLNGTESTLDAP_SLAPADD_BIN} -F e2e-tests/conf/slapd.d -n 1 -l lemonldap-ng-portal/t/testslapd/users.ldif; \ ${LLNGTESTLDAP_SLAPADD_BIN} -F e2e-tests/conf/slapd.d -n 1 -l lemonldap-ng-portal/t/testslapd/confs-sessions.ldif; \ ${LLNGTESTLDAP_SLAPD_BIN} -s 511 -h "ldap://127.0.0.1:20389/" -F e2e-tests/conf/slapd.d; \ perl ./lemonldap-ng-common/scripts/convertConfig \ --current=e2e-tests/conf/lemonldap-ng.ini \ --new=e2e-tests/conf/lemonldap-ng-ldap.ini; \ mv e2e-tests/conf/lemonldap-ng-ldap.ini e2e-tests/conf/lemonldap-ng.ini; \ LLNG_DEFAULTCONFFILE=e2e-tests/conf/lemonldap-ng.ini \ perl lemonldap-ng-common/scripts/lemonldap-ng-cli --yes 1 \ set globalStorage Apache::Session::LDAP; \ LLNG_DEFAULTCONFFILE=e2e-tests/conf/lemonldap-ng.ini \ perl lemonldap-ng-common/scripts/lemonldap-ng-cli --yes 1 \ addKey globalStorageOptions ldapServer 'ldap://localhost:20389'; \ LLNG_DEFAULTCONFFILE=e2e-tests/conf/lemonldap-ng.ini \ perl lemonldap-ng-common/scripts/lemonldap-ng-cli --yes 1 \ addKey globalStorageOptions ldapConfBase 'ou=configurations,dc=example,dc=com'; \ LLNG_DEFAULTCONFFILE=e2e-tests/conf/lemonldap-ng.ini \ perl lemonldap-ng-common/scripts/lemonldap-ng-cli --yes 1 \ addKey globalStorageOptions ldapBindDN 'cn=admin,dc=example,dc=com'; \ LLNG_DEFAULTCONFFILE=e2e-tests/conf/lemonldap-ng.ini \ perl lemonldap-ng-common/scripts/lemonldap-ng-cli --yes 1 \ addKey globalStorageOptions ldapBindPassword admin; \ fi -@[ -e e2e-tests/conf/apache2.pid ] && kill `cat e2e-tests/conf/apache2.pid` || true -@[ -e e2e-tests/conf/nginx.pid ] && kill `cat e2e-tests/conf/nginx.pid` || true -@[ -e e2e-tests/conf/llng-fastcgi.pid ] && kill `cat e2e-tests/conf/llng-fastcgi.pid` && rm -f e2e-tests/conf/llng-fastcgi.pid || true # Start web server (designed for Debian, path may be broken else) @if test "$(TESTWEBSERVER)" = "apache"; then \ if test "$(TESTUSESSL)" = "1"; then \ APACHEARGS=-DUseSSL; \ else \ APACHEARGS=; \ fi; \ LLNG_DEFAULTCONFFILE=`pwd`/e2e-tests/conf/lemonldap-ng.ini /usr/sbin/apache2 -d `pwd`/e2e-tests -f apache2.conf $$APACHEARGS -k start; \ elif test "$(TESTWEBSERVER)" = "nginx"; then \ echo "Testing nginx conf"; \ $(NGINX) -t -p `pwd`/e2e-tests \ -g 'error_log '`pwd`'/e2e-tests/conf/nginx.log;' \ -c `pwd`/e2e-tests/nginx.conf \ 2>&1 | grep -v 'Permission denied' || true; \ echo "Launching nginx"; \ $(NGINX) -p `pwd`/e2e-tests \ -g 'error_log '`pwd`'/e2e-tests/conf/nginx.log;' \ -c `pwd`/e2e-tests/nginx.conf \ 2>&1 | grep -v 'Permission denied' || true; \ echo "Launching plackup"; \ $(MAKE) plackup; \ elif test "$(TESTWEBSERVER)" = "starman"; then \ if test "$(TESTUSESSL)" = "1"; then \ ARGS="--ssl-cert-file e2e-tests/cert.pem --ssl-key-file e2e-tests/key.pem --enable-ssl"; \ else \ ARGS=; \ fi; \ echo "ARGS=$$ARGS"; \ LLNG_DEFAULTCONFFILE=`pwd`/e2e-tests/conf/lemonldap-ng.ini \ PERL5LIB=`pwd`/lemonldap-ng-common/blib/lib/:`pwd`/lemonldap-ng-handler/blib/lib/:`pwd`/lemonldap-ng-portal/blib/lib/:`pwd`/lemonldap-ng-manager/blib/lib/ \ /usr/bin/start_server \ --log-file=e2e-tests/conf/starman.log \ --pid-file=e2e-tests/conf/server.pid \ --status-file=e2e-tests/conf/server-status.pid \ --daemonize \ -- starman \ --port=$(TESTWEBSERVERPORT) \ --workers 3 \ $$ARGS \ e2e-tests/llng.psgi; \ else \ echo "!!!!! Unknown test server: $(TESTWEBSERVER) !!!!!" >&2; \ exit 1; \ fi reload_web_server: @if [ -e e2e-tests/conf/apache2.pid ]; then \ LLNG_DEFAULTCONFFILE=`pwd`/e2e-tests/conf/lemonldap-ng.ini \ /usr/sbin/apache2 -d `pwd`/e2e-tests -f apache2.conf -k graceful; \ elif [ -e e2e-tests/conf/nginx.pid ]; then \ $(NGINX) -p `pwd`/e2e-tests \ -g 'error_log '`pwd`'/e2e-tests/conf/nginx.log;' \ -c `pwd`/e2e-tests/nginx.conf \ -s reload \ 2>&1 | grep -v 'Permission denied' || true; \ kill `cat e2e-tests/conf/llng-fastcgi.pid` || true; \ $(MAKE) plackup; \ elif [ -e e2e-tests/conf/server.pid ]; then \ /usr/bin/start_server\ --pid-file=e2e-tests/conf/server.pid \ --status-file=e2e-tests/conf/server-status.pid \ --restart; \ else \ $(MAKE) start_web_server; \ fi launch_protractor: # Start e2e tests # NB: you must have protractor installed (using npm install -g protractor) # and have run update-webdriver at least once and have a node.js > 4.0 # Install test keys cp -f e2e-tests/persistent/5efe8af397fc3577e05b483aca964f1b.e2e-test e2e-tests/conf/persistents/5efe8af397fc3577e05b483aca964f1b @E2E_TESTS=$(E2E_TESTS) TESTWEBSERVERPORT=$(TESTWEBSERVERPORT) protractor e2e-tests/protractor-conf.js stop_web_server: # Stop web server -@[ -e e2e-tests/conf/apache2.pid ] && kill `cat e2e-tests/conf/apache2.pid` || true -@[ -e e2e-tests/conf/nginx.pid ] && kill `cat e2e-tests/conf/nginx.pid` ||true -@[ -e e2e-tests/conf/llng-fastcgi.pid ] && kill `cat e2e-tests/conf/llng-fastcgi.pid` && rm -f e2e-tests/conf/llng-fastcgi.pid || true -@[ -e e2e-tests/conf/slapd.pid ] && kill `cat e2e-tests/conf/slapd.pid` || true -@[ -e e2e-tests/conf/server.pid ] && kill `cat e2e-tests/conf/server.pid` || true # Clean @rm -rf e2e-tests/conf restart_web_server: start_web_server plackup: @LLNG_DEFAULTCONFFILE=`pwd`/e2e-tests/conf/lemonldap-ng.ini \ perl -I . e2e-tests/conf/sbin/llng-fastcgi-server \ -F >e2e-tests/conf/fastcgi.log 2>&1 & install_test: @E2E_TESTS=$(E2E_TESTS) TESTWEBSERVERPORT=$(PORT) protractor e2e-tests/protractor-conf.js # Install targets # --------------- install: install_libs install_bin install_fastcgi_server install_uwsgi_server install_site # Perl libraires install install_libs: common_install_libs install_handler_libs install_portal_libs install_manager_libs common_install_libs: common @$(MAKE) -C ${SRCCOMMONDIR} install install_handler_libs: handler @$(MAKE) -C ${SRCHANDLERDIR} install install_portal_libs: portal @$(MAKE) -C ${SRCPORTALDIR} install install_manager_libs: manager @$(MAKE) -C ${SRCMANAGERDIR} install install_bin: install_conf_dir # Binary install @install -v -d $(RBINDIR) @cp -f\ ${SRCHANDLERDIR}/eg/scripts/purgeLocalCache \ ${SRCPORTALDIR}/site/cron/purgeCentralCache \ ${SRCPORTALDIR}/scripts/llngDeleteSession \ ${SRCCOMMONDIR}/scripts/convertConfig \ ${SRCCOMMONDIR}/scripts/convertSessions \ ${SRCCOMMONDIR}/scripts/encryptTotpSecrets \ ${SRCCOMMONDIR}/scripts/lmMigrateConfFiles2ini \ ${SRCCOMMONDIR}/scripts/rotateOidcKeys \ ${SRCMANAGERDIR}/scripts/lmConfigEditor \ ${SRCCOMMONDIR}/scripts/lemonldap-ng-cli \ ${SRCCOMMONDIR}/scripts/lemonldap-ng-sessions \ ${SRCCOMMONDIR}/scripts/importMetadata \ $(RBINDIR) @if [ ! "$(APACHEUSER)" ]; then \ $(PERL) -i -pe 's#__APACHEUSER__#nobody#g;' \ $(RBINDIR)/lmConfigEditor \ $(RBINDIR)/lemonldap-ng-cli \ $(RBINDIR)/lemonldap-ng-sessions; \ else \ $(PERL) -i -pe 's#__APACHEUSER__#$(APACHEUSER)#g;' \ $(RBINDIR)/lmConfigEditor \ $(RBINDIR)/lemonldap-ng-cli \ $(RBINDIR)/lemonldap-ng-sessions; \ fi @if [ ! "$(APACHEGROUP)" ]; then \ $(PERL) -i -pe 's#__APACHEGROUP__#nobody#g;' \ $(RBINDIR)/lmConfigEditor \ $(RBINDIR)/lemonldap-ng-cli \ $(RBINDIR)/lemonldap-ng-sessions; \ else \ $(PERL) -i -pe 's#__APACHEGROUP__#$(APACHEGROUP)#g;' \ $(RBINDIR)/lmConfigEditor \ $(RBINDIR)/lemonldap-ng-cli \ $(RBINDIR)/lemonldap-ng-sessions; \ fi @$(CHMOD) +x $(RBINDIR)/* install_fastcgi_server: @install -v -d $(RSBINDIR) $(RINITDIR) $(RETCDEFAULTDIR) $(RFASTCGISOCKDIR) @cp -f fastcgi-server/sbin/llng-fastcgi-server $(RSBINDIR) @$(CHMOD) +x $(RSBINDIR)/llng-fastcgi-server @cp -f fastcgi-server/rc/llng-fastcgi-server $(RINITDIR) @cp -f fastcgi-server/default/llng-fastcgi-server $(RETCDEFAULTDIR) @$(PERL) -pi -e 's#__SBINDIR__#$(SBINDIR)#;s#__DEFAULTDIR__#$(ETCDEFAULTDIR)#;s#__FASTCGISOCKDIR__#$(FASTCGISOCKDIR)#g;' \ $(RETCDEFAULTDIR)/llng-fastcgi-server \ $(RSBINDIR)/llng-fastcgi-server \ $(RINITDIR)/llng-fastcgi-server @if [ ! "$(FASTCGIUSER)" ]; then \ $(PERL) -pi -e 's#__USER__#nobody#' $(RETCDEFAULTDIR)/llng-fastcgi-server; \ else \ $(PERL) -pi -e 's#__USER__#$(FASTCGIUSER)#' $(RETCDEFAULTDIR)/llng-fastcgi-server; \ fi @if [ ! "$(FASTCGIGROUP)" ]; then \ $(PERL) -pi -e 's#__GROUP__#nobody#' $(RETCDEFAULTDIR)/llng-fastcgi-server; \ else \ $(PERL) -pi -e 's#__GROUP__#$(FASTCGIGROUP)#' $(RETCDEFAULTDIR)/llng-fastcgi-server; \ fi @if [ "$(FASTCGIUSER)" != "" ]; then \ $(CHOWN) $(FASTCGIUSER) $(RFASTCGISOCKDIR) || exit 1; \ if [ "$(FASTCGIGROUP)" != "" ]; then \ chgrp $(FASTCGIGROUP) $(RFASTCGISOCKDIR) || exit 1; \ fi; \ $(CHMOD) 770 $(RFASTCGISOCKDIR); \ else \ $(CHMOD) 777 $(RFASTCGISOCKDIR); \ fi install_uwsgi_server: @install -v -d $(RUWSGIYAMLDIR) $(RLLNGAPPDIR) @install -m 644 -v fastcgi-server/uwsgi/llng-server.yaml $(RUWSGIYAMLDIR)/llng-server.yaml @install -m 644 -v $(SRCHANDLERDIR)/eg/llng-server.psgi $(RLLNGAPPDIR)/llng-server.psgi $(PERL) -pi -e 's#__APPDIR__#$(LLNGAPPDIR)#;s#__UID__#$(UWSGIUSER)#;s#__GID__#$(UWSGIGROUP)#;' $(RUWSGIYAMLDIR)/llng-server.yaml # Site install install_site: install_manager_site install_portal_site install_handler_site install_test_site install_examples_site install_doc_site install_webserver_conf # Site install @install -v -d $(RCONFDIR) # Check if erase is wanted @if [ "$(ERASECONFIG)" -eq "1" ]; then \ cp -f _example/etc/for_etc_hosts $(RCONFDIR); \ fi @$(PERL) -i -pe 's/__DNSDOMAIN__/$(DNSDOMAIN)/g' $(RCONFDIR)/for_etc_hosts # Fix a lost of rights on the main directory @$(CHMOD) 755 $(RBINDIR) $(RDOCUMENTROOT) $(REXAMPLESDIR) $(RHANDLERDIR) $(RPORTALSTATICDIR) $(RMANAGERSITEDIR) $(RMANAGERAPIDIR) $(RTOOLSDIR) $(RCONFDIR) $(RDATADIR) @echo @echo "LemonLDAP::NG v${VERSION} is installed with these parameters:" @echo " - System configuration: ${CONFDIR}" @echo " - DNS domain (for cookies and virtual hosts): ${DNSDOMAIN}" @echo @echo "To finish configuration:" @echo @echo "1 - Add this in your Apache $(APACHEVERSION) configuration file:" @echo " include ${CONFDIR}/portal-apache$(APACHEVERSION).conf" @echo " include ${CONFDIR}/handler-apache$(APACHEVERSION).conf" @echo " include ${CONFDIR}/manager-apache$(APACHEVERSION).conf" @echo " include ${CONFDIR}/api-apache$(APACHEVERSION).conf" @echo " include ${CONFDIR}/test-apache$(APACHEVERSION).conf" @echo @echo "2 - Restart Apache:" @echo " apache$(APACHEVERSION)ctl restart" @echo @echo "3 - Run 'make postconf' as root to update /etc/hosts if your DNS service does not known auth.$(DNSDOMAIN) and manager.$(DNSDOMAIN)" @echo @echo "4 - Try to connect to http://test1.${DNSDOMAIN}/ or http://test2.${DNSDOMAIN}/ with demonstration accounts:" @echo " - rtyler/rtyler" @echo " - msmith/msmith" @echo " - dwho/dwho" @echo @echo "5 - Connect to Manager at http://manager.${DNSDOMAIN}/ to edit configuration" @echo @if [ ! "$(APACHEUSER)" ]; then \ echo;echo " Warning, since APACHEUSER was not set, $(APACHESESSIONFILEDIR), $(APACHEPSESSIONFILEDIR), $(CAPTCHADIR), $(CACHEDIR) and $(CONFDIR) have permissive permissions."; \ echo " Fix them by yourself to restrict their view to apache process only"; \ fi @echo install_webserver_conf: @install -m 755 -v -d $(RCONFDIR) @if [ "$(ERASECONFIG)" -eq "1" ]; then \ cp -f _example/etc/*-apache$(APACHEVERSION).conf $(RCONFDIR); \ cp -f _example/etc/*nginx*.conf $(RCONFDIR); \ fi @$(PERL) -i -pe 's/__DNSDOMAIN__/$(DNSDOMAIN)/g; \ s#__PORTALDIR__#$(PORTALDIR)/#g; \ s#__PORTALSITEDIR__#$(PORTALSITEDIR)/#g; \ s#__PORTALSTATICDIR__#$(PORTALSTATICDIR)/#g; \ s#__MANAGERDIR__#$(MANAGERDIR)/#g; \ s#__MANAGERAPIDIR__#$(MANAGERAPIDIR)/#g; \ s#__MANAGERSITEDIR__#$(MANAGERSITEDIR)/#g; \ s#__MANAGERSTATICDIR__#$(MANAGERSTATICDIR)/#g; \ s#__TESTDIR__#$(TESTDIR)/#g; \ s#__APACHELOGDIR__#$(APACHELOGDIR)#g; \ s#__PORT__#$(PORT)#g; \ s#__CONFDIR__#$(CONFDIR)#g; \ s#__FASTCGISOCKDIR__#$(FASTCGISOCKDIR)#g; \ s#__VHOSTLISTEN__#$(VHOSTLISTEN)#g; \ s#__DEFDOCDIR__#$(DEFDOCDIR)/#g;' $(RCONFDIR)/*apache*.conf $(RCONFDIR)/*nginx*.conf install_manager_site: install_conf_dir # Manager install @install -v -d $(RMANAGERDIR) $(RMANAGERSTATICDIR) \ $(RMANAGERTEMPLATESDIR) $(RMANAGERAPIDIR) @cp -pR -f $(SRCMANAGERDIR)/site/api/* $(RMANAGERAPIDIR) @cp -pR -f $(SRCMANAGERDIR)/site/htdocs/manager.* $(RMANAGERSITEDIR) @cp -pR $(SRCMANAGERDIR)/site/htdocs/static/* $(RMANAGERSTATICDIR) @for f in $(SRCMANAGERDIR)/site/templates/*.tpl; do \ ./scripts/transform-templates \ usedebianlibs $(USEDEBIANLIBS) \ useexternallibs $(USEEXTERNALLIBS) \ jsminified $(JSCOMPRESS) \ cssminified $(CSSCOMPRESS) <$$f \ > $(RMANAGERTEMPLATESDIR)/`basename $$f`; \ done @if test "$(USEEXTERNALLIBS)" = "yes"; then \ rm -rvf $(MANAGEREXTERNALLIBS); \ elif test "$(USEDEBIANLIBS)" = "yes"; then \ rm -rvf $(MANAGERLIBSTOREMOVEFORDEBIAN); \ fi # Clean svn files @rm -rf $$(find ${RMANAGERSTATICDIR} \ $(RMANAGERTEMPLATESDIR) $(RCONFDIR) -type d -name .svn) @$(PERL) -i -pe 's#__MANAGERSTATICDIR__#$(MANAGERRELATIVESTATICDIR)#g' $(RCONFDIR)/$(CONFFILENAME) @$(PERL) -i -pe 's#__MANAGERDOCDIR__#$(MANAGERRELATIVEDOCDIR)#g' $(RCONFDIR)/$(CONFFILENAME) @$(PERL) -i -pe 's#__MANAGERTEMPLATESDIR__#$(MANAGERTEMPLATESDIR)#g' $(RCONFDIR)/$(CONFFILENAME) install_portal_site: install_conf_dir # Portal install @install -v -d $(RPORTALDIR) $(RPORTALSTATICDIR) \ $(RPORTALTEMPLATESDIR) \ $(RCRONDIR) $(RCONFDIR) @cp -pR -f $(SRCPORTALDIR)/site/htdocs/index.* $(RPORTALSITEDIR) @cp -pR -f $(SRCPORTALDIR)/site/htdocs/static/* $(RPORTALSTATICDIR) @cd $(SRCPORTALDIR)/site/templates; for f in `find * -type f -name '*.tpl'`; do \ echo "$$f => $(RPORTALTEMPLATESDIR)/$$f"; \ mkdir -p $(RPORTALTEMPLATESDIR)/`dirname $$f`; \ ../../../scripts/transform-templates \ usedebianlibs $(USEDEBIANLIBS) \ useexternallibs $(USEEXTERNALLIBS) \ jsminified $(JSCOMPRESS) \ cssminified $(CSSCOMPRESS) <$$f \ >$(RPORTALTEMPLATESDIR)/$$f; \ done; cd - @cd $(SRCPORTALDIR)/site/templates; for f in `find * -type f ! -name '*.tpl'`; do \ mkdir -p $(RPORTALTEMPLATESDIR)/`dirname $$f`; \ install -m 644 -v $$f $(RPORTALTEMPLATESDIR)/$$f; \ done; cd - @cd $(SRCPORTALDIR)/site/templates; for l in `find * -type l`; do \ echo link to do $$l `readlink $$l`; \ target=`readlink $$l`; \ cd $(RPORTALTEMPLATESDIR); \ ln -s $$target $$l; \ cd -; \ done @if test "$(USEEXTERNALLIBS)" = "yes"; then \ rm -rvf $(PORTALEXTERNALLIBS); \ elif test "$(USEDEBIANLIBS)" = "yes"; then \ rm -rvf $(PORTALLIBSTOREMOVEFORDEBIAN); \ fi # Cron files @cp -f $(SRCPORTALDIR)/site/cron/purgeCentralCache.cron.d $(RCRONDIR)/lemonldap-ng-portal @if [ ! "$(APACHEUSER)" ]; then \ $(PERL) -i -pe 's#__APACHEUSER__#nobody#g;' $(RCRONDIR)/lemonldap-ng-portal; \ else \ $(PERL) -i -pe 's#__APACHEUSER__#$(APACHEUSER)#g;' $(RCRONDIR)/lemonldap-ng-portal; \ fi @$(PERL) -i -pe 's#__BINDIR__#$(BINDIR)#g;' $(RCRONDIR)/lemonldap-ng-portal # Clean SVN files @rm -rf $$(find ${RPORTALDIR} $(RPORTALSKINSDIR) $(RCRONDIR) $(RCONFDIR) -type d -name .svn) @$(PERL) -i -pe 's#__PORTALSTATICDIR__#$(PORTALRELATIVESTATICDIR)#g' $(RCONFDIR)/$(CONFFILENAME) @$(PERL) -i -pe 's#__PORTALTEMPLATESDIR__#$(PORTALTEMPLATESDIR)#g' $(RCONFDIR)/$(CONFFILENAME) install_handler_site: install_conf_dir # Handler install @install -v -d ${RHANDLERDIR} @cp -f $(SRCHANDLERDIR)/eg/scripts/purgeLocalCache.cron.d $(RCRONDIR)/lemonldap-ng-handler @if [ ! "$(APACHEUSER)" ]; then \ $(PERL) -i -pe 's#__APACHEUSER__#nobody#g;' $(RCRONDIR)/lemonldap-ng-handler; \ else \ $(PERL) -i -pe 's#__APACHEUSER__#$(APACHEUSER)#g;' $(RCRONDIR)/lemonldap-ng-handler; \ fi @$(PERL) -i -pe 's#__BINDIR__#$(BINDIR)#g;' $(RCRONDIR)/lemonldap-ng-handler @rm -rf $$(find $(RHANDLERDIR) -type d -name .svn) install_test_site: # Test site install @install -v -d $(RTESTDIR) @cp -pR -f _example/test/* $(RTESTDIR) @rm -rf $$(find $(RTESTDIR) -type d -name .svn) @$(PERL) -i -pe 's/__DNSDOMAIN__/$(DNSDOMAIN)/g' $(RTESTDIR)/index.pl @rm -rf $$(find $(RTESTDIR) -type d -name .svn) install_examples_site: # Examples install @install -v -d $(REXAMPLESDIR) @for i in portal manager handler; do \ cp -a -f lemonldap-ng-$$i/eg $(REXAMPLESDIR)/$$i; \ done @cp -a -f fastcgi-server/psgi/llngapp.psgi $(REXAMPLESDIR)/$$i @rm -rf $(REXAMPLESDIR)/portal/skins \ $(REXAMPLESDIR)/manager/skins \ @rm -rf $$(find $(REXAMPLESDIR) -type d -name .svn) install_doc_site: # Offline documentation install @rm -rf $(RDEFDOCDIR) @install -v -d -m 755 $(RDEFDOCDIR) @cd doc && find index.html pages/* -type f ! -path '*/.*' -exec install -v -m 644 -D '{}' $(RDEFDOCDIR)/'{}' \; && cd - # Remove js @cd $(RDEFDOCDIR) && if test "$(USEEXTERNALLIBS)" = "yes"; then \ rm -rvf $(DOCEXTERNALLIBS); \ elif test "$(USEDEBIANLIBS)" = "yes"; then \ rm -rvf $(DOCLIBSTOREMOVEFORDEBIAN); \ fi && cd - install_conf_dir: install_sessions_dir install_notif_dir install_captcha_dir install_cache_dir # Configuration files install @install -v -d $(RCONFDIR) $(RFILECONFIGDIR) $(RTOOLSDIR) @if [ "$(ERASECONFIG)" -eq "1" ]; then \ cp -f $(SRCCOMMONDIR)/$(CONFFILENAME) $(RCONFDIR); \ $(PERL) -i -pe 's#^dirName\s*=\s*.*#dirName = $(FILECONFIGDIR)#g' $(RCONFDIR)/$(CONFFILENAME); \ fi @cp _example/conf/lmConf-1.json $(RFILECONFIGDIR) @$(PERL) -i -pe 's/__DNSDOMAIN__/$(DNSDOMAIN)/g;\ s#__SESSIONDIR__#$(APACHESESSIONFILEDIR)#g;\ s#__PSESSIONDIR__#$(APACHEPSESSIONFILEDIR)#g;\ s#__NOTIFICATIONDIR__#$(APACHEFILENOTIFDIR)#g;\ s#__CACHEDIR__#$(CACHEDIR)#g;' $(RFILECONFIGDIR)/lmConf-1.json @if [ "$(APACHEUSER)" != "" ]; then \ $(CHOWN) $(APACHEUSER) $(RFILECONFIGDIR) || exit 1; \ if [ "$(APACHEGROUP)" != "" ]; then \ chgrp $(APACHEGROUP) $(RFILECONFIGDIR) || exit 1; \ fi; \ $(CHMOD) 770 $(RFILECONFIGDIR); \ else \ $(CHMOD) 777 $(RFILECONFIGDIR); \ fi @cp $(SRCCOMMONDIR)/tools/lmConfig.* $(SRCCOMMONDIR)/tools/apache-session-mysql.sql $(RTOOLSDIR) @cp $(SRCCOMMONDIR)/tools/sso.schema $(RTOOLSDIR) $(PERL) -i -pe 's/__DNSDOMAIN__/$(DNSDOMAIN)/g; s#__CACHEDIR__#$(CACHEDIR)#g;' \ $(RCONFDIR)/$(CONFFILENAME) @rm -rf $$(find $(RCONFDIR) $(RFILECONFIGDIR) $(RTOOLSDIR) -type d -name .svn) install_sessions_dir: @install -m 777 -v -d $(RAPACHESESSIONFILEDIR) $(RAPACHESESSIONFILELOCKDIR) $(RAPACHEPSESSIONFILEDIR) $(RAPACHEPSESSIONFILELOCKDIR) # Fix Apache::Session directories permissions @if [ "$(APACHEUSER)" != "" ]; then \ $(CHOWN) $(APACHEUSER) $(RAPACHESESSIONFILEDIR) $(RAPACHESESSIONFILELOCKDIR) $(RAPACHEPSESSIONFILEDIR) $(RAPACHEPSESSIONFILELOCKDIR) || exit 1; \ if [ "$(APACHEGROUP)" != "" ]; then \ chgrp $(APACHEGROUP) $(RAPACHESESSIONFILEDIR) $(RAPACHESESSIONFILELOCKDIR) $(RAPACHEPSESSIONFILEDIR) $(RAPACHEPSESSIONFILELOCKDIR) || exit 1; \ fi; \ $(CHMOD) 770 $(RAPACHESESSIONFILEDIR) $(RAPACHESESSIONFILELOCKDIR) $(RAPACHEPSESSIONFILEDIR) $(RAPACHEPSESSIONFILELOCKDIR); \ else \ $(CHMOD) 777 $(RAPACHESESSIONFILEDIR) $(RAPACHESESSIONFILELOCKDIR) $(RAPACHEPSESSIONFILEDIR) $(RAPACHEPSESSIONFILELOCKDIR); \ fi install_notif_dir: @install -m 777 -v -d $(RFILENOTIFDIR) # Fix notifications directory permissions @if [ "$(APACHEUSER)" != "" ]; then \ $(CHOWN) $(APACHEUSER) $(RFILENOTIFDIR) || exit 1; \ if [ "$(APACHEGROUP)" != "" ]; then \ chgrp $(APACHEGROUP) $(RFILENOTIFDIR) || exit 1; \ fi; \ $(CHMOD) 770 $(RFILENOTIFDIR); \ else \ $(CHMOD) 777 $(RFILENOTIFDIR); \ fi install_captcha_dir: @install -m 777 -v -d $(RCAPTCHADIR) # Fix captcha directory permissions @if [ "$(APACHEUSER)" != "" ]; then \ $(CHOWN) $(APACHEUSER) $(RCAPTCHADIR) || exit 1; \ if [ "$(APACHEGROUP)" != "" ]; then \ chgrp $(APACHEGROUP) $(RCAPTCHADIR) || exit 1; \ fi; \ $(CHMOD) 770 $(RCAPTCHADIR); \ else \ $(CHMOD) 777 $(RCAPTCHADIR); \ fi install_cache_dir: @install -m 777 -v -d $(RCACHEDIR) # Fix captcha directory permissions @if [ "$(APACHEUSER)" != "" ]; then \ $(CHOWN) $(APACHEUSER) $(RCACHEDIR) || exit 1; \ if [ "$(APACHEGROUP)" != "" ]; then \ chgrp $(APACHEGROUP) $(RCACHEDIR) || exit 1; \ fi; \ $(CHMOD) 770 $(RCACHEDIR); \ else \ $(CHMOD) 777 $(RCACHEDIR); \ fi postconf_hosts: @cat ${CONFDIR}/for_etc_hosts >> /etc/hosts @echo "/etc/hosts was updated" postconf: postconf_hosts @echo "Post configuration done" debian-install: @echo "You have now to choose between:" @echo " - make debian-install-for-apache" @echo " - make ubuntu-install-for-apache" @echo " - make debian-install-for-nginx" @echo " - make ubuntu-install-for-nginx" @echo @echo "All packages will be built in /tmp/ but only those needed by the" @echo "server you will choose will be installed" @exit 1 debian-install-for-apache: debian-packages perl -i -ne 'next if/(?:fastcgi|uwsgi).*deb$$/;s/lemonldap-ng-(?:fastcgi-server|uwsgi-app)//;print' /tmp/lemonldap-ng_$(VERSION)*.changes cd /tmp/lemonldap-ng-$(VERSION) && \ $(SU) debi debian-install-for-nginx: debian-packages perl -i -ne 'next if/(?:uwsgi).*deb$$/;s/lemonldap-ng-(?:uwsgi-app)//;print' /tmp/lemonldap-ng_$(VERSION)*.changes cd /tmp/lemonldap-ng-$(VERSION) && \ $(SU) debi debian-install-for-nginx-uwsgi: debian-packages perl -i -ne 'next if/(?:fastcgi).*deb$$/;s/lemonldap-ng-(?:fastcgi-server)//;print' /tmp/lemonldap-ng_$(VERSION)*.changes cd /tmp/lemonldap-ng-$(VERSION) && \ $(SU) debi ubuntu-install: debian-install ubuntu-install-for-apache: $(MAKE) debian-install-for-apache SU=sudo ubuntu-install-for-nginx: $(MAKE) debian-install-for-nginx SU=sudo # Cleaning targets # ---------------- distclean: clean clean: common_clean handler_clean portal_clean manager_clean stop_web_server @rm -f $$(find */ -name '*bak' -delete) @rm -rf doc/devel @rm -rf doc/pages/documentation/current/* @rm -rf "$(WEBSITE_DIR)" @rm -vf *gz *zip @rm -rf lemonldap-ng-$(VERSION) @echo "Cleaned" common_clean: -@if test -e ${SRCCOMMONDIR}/Makefile;then $(MAKE) -C ${SRCCOMMONDIR} distclean;fi @rm -vf common* handler_clean: -@if test -e ${SRCHANDLERDIR}/Makefile;then $(MAKE) -C ${SRCHANDLERDIR} distclean;fi @rm -vf handler* portal_clean: -@if test -e ${SRCPORTALDIR}/Makefile;then $(MAKE) -C ${SRCPORTALDIR} distclean;fi @rm -vf portal* manager_clean: -@if test -e ${SRCMANAGERDIR}/Makefile;then $(MAKE) -C ${SRCMANAGERDIR} distclean;fi @rm -vf manager* # Perl libraries uninstall targets # -------------------------------- uninstall: configure handler_uninstall portal_uninstall manager_uninstall common_uninstall: common @$(MAKE) -C ${SRCCOMMONDIR} uninstall @rm -vf common_uninstall handler_uninstall: handler @$(MAKE) -C ${SRCHANDLERDIR} uninstall @rm -vf handler_uninstall portal_uninstall: portal @$(MAKE) -C ${SRCPORTALDIR} uninstall @rm -vf portal_uninstall manager_uninstall: manager @$(MAKE) -C ${SRCMANAGERDIR} uninstall @rm -vf manager_uninstall # Packaging target # ---------------- dist: clean @mkdir -p lemonldap-ng-$(VERSION) @cp -pRH $$(find * -maxdepth 0|grep -v -e "lemonldap-ng-$(VERSION)") lemonldap-ng-$(VERSION) @find $$dir -name '*.bak' -delete @rm -rf lemonldap-ng-$(VERSION)/lemonldap-ng-$(VERSION) @find lemonldap-ng-$(VERSION)/ -name node_modules -exec rm -rf '{}' \; @$(COMPRESS) lemonldap-ng-$(VERSION).$(COMPRESSSUFFIX) lemonldap-ng-$(VERSION) @rm -rf lemonldap-ng-$(VERSION) debian-dist: clean @mkdir -p lemonldap-ng-$(VERSION) @cp -pRH $$(find * -maxdepth 0|grep -v -e "\(lemonldap-ng-$(VERSION)\|rpm\)") lemonldap-ng-$(VERSION) @find $$dir -name '*.bak' -delete @cp lemonldap-ng-$(VERSION)/_example/etc/handler-apache2.X.conf lemonldap-ng-$(VERSION)/_example/etc/handler-apache2.conf @cp lemonldap-ng-$(VERSION)/_example/etc/manager-apache2.X.conf lemonldap-ng-$(VERSION)/_example/etc/manager-apache2.conf @cp lemonldap-ng-$(VERSION)/_example/etc/portal-apache2.X.conf lemonldap-ng-$(VERSION)/_example/etc/portal-apache2.conf @cp lemonldap-ng-$(VERSION)/_example/etc/api-apache2.X.conf lemonldap-ng-$(VERSION)/_example/etc/api-apache2.conf @cp lemonldap-ng-$(VERSION)/_example/etc/test-apache2.X.conf lemonldap-ng-$(VERSION)/_example/etc/test-apache2.conf @rm -rf lemonldap-ng-$(VERSION)/lemonldap-ng-$(VERSION) -@find lemonldap-ng-$(VERSION)/ -name node_modules -exec rm -rf '{}' \; @$(COMPRESS) lemonldap-ng_$(VERSION).orig.$(COMPRESSSUFFIX) lemonldap-ng-$(VERSION) @rm -rf lemonldap-ng-$(VERSION) zip-dist: $(MAKE) dist "COMPRESS=zip -r" COMPRESSSUFFIX=zip manifest: configure @for i in ${SRCCOMMONDIR} ${SRCHANDLERDIR} ${SRCPORTALDIR} ${SRCMANAGERDIR}; do \ cd $$i; \ rm -vf MANIFEST MANIFEST*bak; \ $(MAKE) manifest; \ cd -; \ done perl -i -ne 'print unless/proverc/' */MANIFEST cpan: clean configure common_cpan handler_cpan portal_cpan manager_cpan for i in Common Portal Handler Manager; do \ $(UNCOMPRESS) Lemonldap-NG-$$i-*.$(COMPRESSSUFFIX) \ $$($(LISTCOMPRESSED) Lemonldap-NG-$$i-*.$(COMPRESSSUFFIX) |grep META.); \ mv Lemonldap-NG-$$i-*/META.* lemonldap-ng-$$($(PERL) -e "print lc('$$i')")/; \ rm -rf Lemonldap-NG-$$i*/; \ done debian-local-packages: debian-packages debian-packages: debian-dist mv lemonldap-ng_$(VERSION).orig.$(COMPRESSSUFFIX) /tmp/ version=$(VERSION) && \ cd /tmp/ && \ rm -rf lemonldap-ng-$$version && \ $(UNCOMPRESS) lemonldap-ng_$$version.orig.$(COMPRESSSUFFIX) && \ cd lemonldap-ng-$$version && \ debuild -us -uc # Developper corner # ----------------- common_cpan: common_conf @$(MAKE) -C ${SRCCOMMONDIR} dist @mv ${SRCCOMMONDIR}/Lemonldap*.gz . handler_cpan: handler_conf @$(MAKE) -C ${SRCHANDLERDIR} dist @mv ${SRCHANDLERDIR}/Lemonldap*.gz . portal_cpan: portal_conf @$(MAKE) -C ${SRCPORTALDIR} dist @mv ${SRCPORTALDIR}/Lemonldap*.gz . manager_cpan: manager_conf @$(MAKE) -C ${SRCMANAGERDIR} dist @mv ${SRCMANAGERDIR}/Lemonldap*.gz . documentation: @if [ "$(SKIP_DOCUMENTATION)" ] ; then \ echo "Skipped documentation building" ;\ else \ sphinx-build -b html -d /tmp/doctrees \ -Dhtml_theme=bootstrap\ doc/sources/admin/ doc/pages/documentation/current/ ;\ fi website_documentation: LLNGSPHINXWEBSITE=1 sphinx-build -b html -d /tmp/doctrees \ doc/sources/admin/ "$(WEBSITE_DIR)" test-diff: @for file in `find lemonldap-ng-*/lib -type f`; do \ $(DIFF) $$file `echo $$file|sed -e s/lib/blib\\\/lib/`; \ done tidy: clean @if perltidy -v|grep v20220217 >/dev/null; then \ for f in `find lemon*/ -type f \( -name '*.pm' -or -name '*.pl' -or -name '*.fcgi' -or -name '*.t' \)`; do \ echo -n $$f; \ perltidy -se -b $$f; \ echo; \ done; \ else echo "Wrong perltidy version, please install Perl::Tidy@20220217" ; exit 1 ;\ fi find lemon*/ -name '*.bak' -delete $(MAKE) json tidy-js: clean @find e2e-tests/ \ -type f \ -name '*.js' \ ! -name 'jq*' \ ! -name 'bootstrap*' \ ! -name '*.min.js' \ ! -name conftree.js \ -print \ -exec js_beautify -o -s=2 {} \; html_spelling: @for i in $$(find doc/ -type f -name '*.html'); do \ text=$$(html2text $$i|spellintian --picky); \ if [ "$$text" != "" ]; then echo "### $$i ###"; echo $$text; fi \ done spelling: @for i in $$(find * -type f -name '*.pm'); do \ if grep '=head1' $$i >/dev/null; then \ text=$$(pod2text $$i|spellintian --picky); \ if [ "$$text" != "" ]; then echo "### $$i ###"; echo $$text; fi \ fi \ done e2e_cert: openssl req -x509 \ -newkey rsa:2048 \ -keyout e2e-tests/key.pem \ -out e2e-tests/cert.pem \ -days 3650 \ -nodes \ -subj "/C=PL/ST=Programming Republic of Perl/O=Security Dept/CN=auth.example.com" \ -reqexts SAN \ -extensions SAN \ -config e2e-tests/openssl.cnf api_doc: doc/sources/manager-api/openapi-spec.yaml doc/sources/manager-api/config-codegen.json @if [ -f "$(SWAGGER_CODEGEN)" ] ; then \ java -jar "$(SWAGGER_CODEGEN)" generate -i doc/sources/manager-api/openapi-spec.yaml -l html2 -o doc/pages/manager-api/ -c doc/sources/manager-api/config-codegen.json; \ else \ echo "Please run me with SWAGGER_CODEGEN=/path/to/swagger-codegen.jar"; \ fi