Makefile 43.1 KB
Newer Older
1 2
#!/usr/bin/make

Xavier Guimard's avatar
Xavier Guimard committed
3 4 5 6 7 8 9 10
# This Makefile contains 2 main sections
#  - Variables
#  - targets

# ---------
# VARIABLES
# ---------

11 12 13
# Prefix for packaging
DESTDIR=

14
# Flag for optimizations
15 16
USEDEBIANLIBS=no
PROD=$(USEDEBIANLIBS)
17
USEEXTERNALLIBS=no
18
PARA=$(shell perl -000 -e 'print ( "$(MAKEFLAGS)" =~ /-j(\d+)/ ? "j$1:c" : "")')
19

Xavier Guimard's avatar
Xavier Guimard committed
20 21 22 23
# Perl options
#PERLOPTIONS="INSTALLDIRS=vendor"
PERLOPTIONS=

24 25 26 27
# Compression
JSCOMPRESS=$(PROD)
CSSCOMPRESS=$(PROD)

Xavier Guimard's avatar
Xavier Guimard committed
28
# External commands
29
PERL=$$(which perl)
30
PERLVERSION=`perl -e '$$version = $$^V; $$version =~ s/v//; print $$version'`
31
export PERL5LIB=$(shell echo `pwd`/${SRCCOMMONDIR}/blib/lib:`pwd`/${SRCHANDLERDIR}/blib/lib:`pwd`/${SRCMANAGERDIR}/blib/lib/:`pwd`/${SRCPORTALDIR}/blib/lib/)
Xavier Guimard's avatar
Xavier Guimard committed
32 33 34
SU=su -c
COMPRESS=tar czf
UNCOMPRESS=tar xzf
Clément OUDOT's avatar
Clément OUDOT committed
35
LISTCOMPRESSED=tar tzf
Xavier Guimard's avatar
Xavier Guimard committed
36
COMPRESSSUFFIX=tar.gz
Xavier Guimard's avatar
Xavier Guimard committed
37
NGINX=/usr/sbin/nginx
38 39

# Default directories install
Xavier Guimard's avatar
Xavier Guimard committed
40 41 42
# ---------------------------

# Common dirs
43 44
PREFIX=/usr/local
LMPREFIX=$(PREFIX)/lemonldap-ng
45
# BIN dirs
46
BINDIR=$(LMPREFIX)/bin
47 48 49
SBINDIR=$(LMPREFIX)/sbin
INITDIR=$(LMPREFIX)/etc/init.d
ETCDEFAULTDIR=$(LMPREFIX)/etc/default
50
DATADIR=$(LMPREFIX)/data
51 52

# Document roots for Apache VirtualHosts
53 54
DOCUMENTROOT=$(LMPREFIX)/htdocs
PORTALDIR=$(DOCUMENTROOT)/portal
55 56
PORTALSITEDIR=$(PORTALDIR)/htdocs
PORTALSTATICDIR=$(PORTALSITEDIR)/static
57
PORTALRELATIVESTATICDIR=/static
58
PORTALTEMPLATESDIR=$(PORTALDIR)/templates
59

60
MANAGERDIR=$(DOCUMENTROOT)/manager
61 62
MANAGERSITEDIR=$(MANAGERDIR)/htdocs
MANAGERSTATICDIR=$(MANAGERSITEDIR)/static
Xavier Guimard's avatar
Xavier Guimard committed
63
MANAGERRELATIVESTATICDIR=/static
64
MANAGERTEMPLATESDIR=$(MANAGERSITEDIR)/templates
65 66
DOCDIR=$(DOCUMENTROOT)
DEFDOCDIR=$(DOCUMENTROOT)/doc
67 68 69
TESTDIR=$(DOCUMENTROOT)/test
EXAMPLESDIR=$(LMPREFIX)/examples
TOOLSDIR=$(LMPREFIX)/tools
70 71

# Handler dir
72
HANDLERDIR=$(LMPREFIX)/handler
73 74

# Configuration dir
75 76
CONFDIR=$(LMPREFIX)/etc
CRONDIR=$(LMPREFIX)/etc/cron.d
77 78
CONFFILENAME=lemonldap-ng.ini
STORAGECONFFILE=$(CONFDIR)/$(CONFFILENAME)
79

80
# LL::NG configuration storage dir
81
FILECONFIGDIR=$(DATADIR)/conf
82

83
# LL::NG sessions storage dir
84 85
APACHESESSIONFILEDIR=$(DATADIR)/sessions
APACHESESSIONFILELOCKDIR=$(APACHESESSIONFILEDIR)/lock
86

87 88 89 90 91
# LL::NG persistent sessions storage dir
APACHEPSESSIONFILEDIR=$(DATADIR)/psessions
APACHEPSESSIONFILELOCKDIR=$(APACHEPSESSIONFILEDIR)/lock

# LL::NG notifications storage dir
92
APACHEFILENOTIFDIR=$(DATADIR)/notifications
93

94 95
# LL::NG captcha dir
CAPTCHADIR=$(DATADIR)/captcha
96

97
# Apache user/group
98 99
APACHEUSER=
APACHEGROUP=
100 101 102

# FastCGI
FASTCGISOCKDIR=$(PREFIX)/run
103 104
FASTCGIUSER=$(APACHEUSER)
FASTCGIGROUP=$(APACHEGROUP)
105

Xavier Guimard's avatar
Xavier Guimard committed
106 107 108 109 110 111
# uWSGI
UWSGIYAMLDIR=$(LMPREFIX)/uwsgi
LLNGAPPDIR=$(LMPREFIX)/llng-server
UWSGIUSER=$(APACHEUSER)
UWSGIGROUP=$(APACHEGROUP)

112
# Apache version
113
APACHEVERSION=2.X
114

115 116 117
# Apache log dir
APACHELOGDIR=/var/log/apache2

118
# DNS Domain for cookie and virtual hosts
119 120
DNSDOMAIN=example.com

121
# Virtual Host Listen IP and Port (*, *:80, ...)
Xavier Guimard's avatar
Xavier Guimard committed
122 123
PORT=80
VHOSTLISTEN="*:$(PORT)"
124
TESTWEBSERVER=apache
Xavier Guimard's avatar
Xavier Guimard committed
125
TESTWEBSERVERPORT=19876
126
TESTUSESSL=0
127
E2E_TESTS='portal/*.js'
128

129
# LDAP backend test
130 131 132
LLNGTESTLDAP_SLAPD_BIN=/usr/sbin/slapd
LLNGTESTLDAP_SLAPADD_BIN=/usr/sbin/slapdadd
LLNGTESTLDAP_SCHEMA_DIR=/etc/slapd/schema
133

134
# Other
135 136 137 138
SRCCOMMONDIR=lemonldap-ng-common
SRCHANDLERDIR=lemonldap-ng-handler
SRCPORTALDIR=lemonldap-ng-portal
SRCMANAGERDIR=lemonldap-ng-manager
Xavier Guimard's avatar
Xavier Guimard committed
139 140 141 142 143 144 145 146
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)
Xavier Guimard's avatar
Xavier Guimard committed
147 148
RUWSGIYAMLDIR=$(DESTDIR)/$(UWSGIYAMLDIR)
RLLNGAPPDIR=$(DESTDIR)/$(LLNGAPPDIR)
Xavier Guimard's avatar
Xavier Guimard committed
149 150 151 152
RINITDIR=$(DESTDIR)/$(INITDIR)
RETCDEFAULTDIR=$(DESTDIR)/$(ETCDEFAULTDIR)
RDATADIR=$(DESTDIR)/$(DATADIR)
RPORTALDIR=$(DESTDIR)/$(PORTALDIR)
153 154 155
RPORTALSITEDIR=$(DESTDIR)/$(PORTALSITEDIR)
RPORTALSTATICDIR=$(DESTDIR)/$(PORTALSTATICDIR)
RPORTALTEMPLATESDIR=$(DESTDIR)/$(PORTALTEMPLATESDIR)
Xavier Guimard's avatar
Xavier Guimard committed
156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
RMANAGERDIR=$(DESTDIR)/$(MANAGERDIR)
RMANAGERSITEDIR=$(DESTDIR)/$(MANAGERSITEDIR)
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)
RFASTCGISOCKDIR=$(DESTDIR)/$(FASTCGISOCKDIR)
176 177

VERSION=`head -n1 changelog |sed -e 's/lemonldap-ng (//' -e 's/).*$$//'`
178
PORTALSKINS=`ls $(SRCPORTALDIR)/site/templates/`
179
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.*'
180 181
DIFFPREFIX=

182

183 184
MANAGERLIBSTOREMOVEFORDEBIAN=$(RMANAGERSTATICDIR)/bwr/jquery/ \
			$(RMANAGERSTATICDIR)/bwr/angular/ \
185
			$(RMANAGERSTATICDIR)/bwr/angular-animate/ \
186 187 188
			$(RMANAGERSTATICDIR)/bwr/angular-cookie/ \
			$(RMANAGERSTATICDIR)/bwr/bootstrap/ \
			$(RMANAGERSTATICDIR)/bwr/es5-shim/
189
PORTALLIBSTOREMOVEFORDEBIAN=$(RPORTALSTATICDIR)/bwr/bootstrap/ \
190
			$(RPORTALSTATICDIR)/bwr/font-awesome \
191 192 193
			$(RPORTALSTATICDIR)/bwr/jquery-ui \
			$(RPORTALSTATICDIR)/bwr/jquery.cookie \
			$(RPORTALSTATICDIR)/bwr/jquery
Xavier Guimard's avatar
Xavier Guimard committed
194 195 196
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
Xavier Guimard's avatar
Xavier Guimard committed
197
DOCEXTERNALLIBS=$(DOCLIBSTOREMOVEFORDEBIAN)
198
MANAGEREXTERNALLIBS=$(RMANAGERSTATICDIR)/bwr/
199
PORTALEXTERNALLIBS=$(PORTALLIBSTOREMOVEFORDEBIAN)
200

Xavier Guimard's avatar
Xavier Guimard committed
201
# GENERATED SRC FILES
202
MANAGERJSONSRC= scripts/jsongenerator.pl \
Xavier Guimard's avatar
Xavier Guimard committed
203
		$(SRCMANAGERDIR)/lib/Lemonldap/NG/Manager/Build.pm \
204
		$(SRCMANAGERDIR)/lib/Lemonldap/NG/Manager/Build/Attributes.pm \
205
		$(SRCMANAGERDIR)/lib/Lemonldap/NG/Manager/Build/Tree.pm \
206
		$(SRCMANAGERDIR)/lib/Lemonldap/NG/Manager/Build/CTrees.pm \
207
		$(SRCMANAGERDIR)/lib/Lemonldap/NG/Manager/Conf/Zero.pm
208 209
MANAGERJSONDST=$(SRCMANAGERDIR)/site/htdocs/static/struct.json \
		$(SRCMANAGERDIR)/site/htdocs/static/js/conftree.js \
Xavier Guimard's avatar
Xavier Guimard committed
210
		$(SRCMANAGERDIR)/lib/Lemonldap/NG/Manager/Attributes.pm \
211
		$(SRCCOMMONDIR)/lib/Lemonldap/NG/Common/Conf/ReConstants.pm \
212
		$(SRCCOMMONDIR)/lib/Lemonldap/NG/Common/Conf/DefaultValues.pm \
213
		$(SRCCOMMONDIR)/lib/Lemonldap/NG/Common/Conf/Constants.pm \
214
		_example/conf/lmConf-1.json
215 216

# Javascript and CSS to minify
217 218
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
Xavier Guimard's avatar
Xavier Guimard committed
219
CSSSRCFILES:=$(shell find $(SRCMANAGERDIR)/site/htdocs/static  $(SRCPORTALDIR)/site/htdocs/static -type f -name '*.css' ! -name '*.min.css')
220

221
# Coffee files
222 223 224
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)
225
MANAGERCOFFEEDSTFILES:=$(subst coffee/,htdocs/static/js/,$(MANAGERCOFFEESRCFILES:.coffee=.js))
226 227
PORTALCOFFEEDSTFILES:=$(subst coffee/,htdocs/static/common/js/,$(PORTALCOFFEESRCFILES:.coffee=.js))
COFFEEDSTFILES:=$(MANAGERCOFFEEDSTFILES) $(PORTALCOFFEEDSTFILES)
228

229 230 231
# Minified files
JSDSTFILES=$(JSSRCFILES:.js=.min.js)
CSSDSTFILES=$(CSSSRCFILES:.css=.min.css)
Xavier Guimard's avatar
Xavier Guimard committed
232

Xavier Guimard's avatar
Xavier Guimard committed
233 234 235 236 237
# -------
# TARGETS
# -------

# Targets section contains the following subsections:
238
#  - 'all' that must be defined at first
Xavier Guimard's avatar
Xavier Guimard committed
239 240 241 242 243 244 245 246 247 248
#  - configure targets
#  - make targets
#  - test targets
#  - end-to-end tests
#  - install targets
#  - cleaning targets
#  - Perl libraries uninstall targets
#  - packaging targets
#  - developper corner

249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271
all:	configure common handler manager portal
	@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))"
Xavier Guimard's avatar
Xavier Guimard committed
272
	@echo " * FastCGI (or uWSGI) server install (required for Nginx)"
273
	@echo "   - install_fastcgi_server ($(SBINDIR))"
Xavier Guimard's avatar
Xavier Guimard committed
274
	@echo "   - install_uwsgi_server   ($(UWSGIYAMLDIR))"
275 276 277 278 279 280 281 282 283 284
	@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

Xavier Guimard's avatar
Xavier Guimard committed
285 286 287
# Configure targets
# -----------------

288
configure:	common_conf handler_conf portal_conf manager_conf
Xavier Guimard's avatar
Xavier Guimard committed
289

Xavier Guimard's avatar
Xavier Guimard committed
290 291 292
js: $(COFFEEDSTFILES)

minify: js $(JSDSTFILES) $(CSSDSTFILES)
Xavier Guimard's avatar
Xavier Guimard committed
293

294
$(SRCPORTALDIR)/site/htdocs/static/common/js/%.js: $(SRCPORTALDIR)/site/coffee/%.coffee
Xavier Guimard's avatar
Xavier Guimard committed
295 296
	@if which coffee >/dev/null; then \
		echo "Compiling $(SRCPORTALDIR)/site/coffee/$*.coffee"; \
297
		coffee -c -o $(SRCPORTALDIR)/site/htdocs/static/common/js/ $(SRCPORTALDIR)/site/coffee/$*.coffee; \
298 299
	else \
		echo "Can't find coffee"; \
Xavier Guimard's avatar
Xavier Guimard committed
300 301
	fi

Xavier Guimard's avatar
Typo  
Xavier Guimard committed
302
$(SRCMANAGERDIR)/site/htdocs/static/js/%.js: $(SRCMANAGERDIR)/site/coffee/%.coffee
303 304
	@if which coffee >/dev/null; then \
		echo "Compiling $(SRCMANAGERDIR)/site/coffee/$*.coffee"; \
305
		coffee -c -o $(SRCMANAGERDIR)/site/htdocs/static/js/ $(SRCMANAGERDIR)/site/coffee/$*.coffee; \
306 307
	fi

Xavier Guimard's avatar
Xavier Guimard committed
308 309 310 311 312 313
%.min.css: %.css
	@echo "Compressing $*.css"
	@yui-compressor $*.css > $*.min.css

%.min.js: %.js
	@echo "Compressing $*.js"
314
	@uglifyjs $*.js --compress --mangle --comments='/Copyr/i' --source-map $*.min.js.map -o $*.min.js
Xavier Guimard's avatar
Xavier Guimard committed
315 316

fastcgi-server/man/llng-fastcgi-server.1p: fastcgi-server/sbin/llng-fastcgi-server
Xavier Guimard's avatar
Xavier Guimard committed
317
	@echo Update FastCGI server man page
Xavier Guimard's avatar
Xavier Guimard committed
318 319 320 321
	@pod2man -name llng-fastcgi-server fastcgi-server/sbin/llng-fastcgi-server >fastcgi-server/man/llng-fastcgi-server.1p

# Perl libraries configuration

322
json:	$(MANAGERJSONDST) fastcgi-server/man/llng-fastcgi-server.1p debian/*cron*
323
	@if which yui-compressor >/dev/null; then $(MAKE) minify; fi
Xavier Guimard's avatar
Xavier Guimard committed
324

325 326 327 328 329 330 331 332 333 334
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

Xavier Guimard's avatar
Xavier Guimard committed
335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360
$(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) $(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
# ------------

361
common:		common_conf
362
	@$(MAKE) -C ${SRCCOMMONDIR}
363

Xavier Guimard's avatar
Xavier Guimard committed
364
handler:	handler_conf common
365
	@$(MAKE) -C ${SRCHANDLERDIR}
366

367
portal:		portal_conf handler
368
	@$(MAKE) -C ${SRCPORTALDIR}
369

Xavier Guimard's avatar
Xavier Guimard committed
370
manager:	manager_conf handler
371
	$(MAKE) -C ${SRCMANAGERDIR}
372

Xavier Guimard's avatar
Xavier Guimard committed
373 374
# Test targets
# ------------
375
test:		all common_test handler_test portal_test manager_test
376 377

common_test:	common
378
	@HARNESS_OPTIONS=$(PARA) $(MAKE) -C ${SRCCOMMONDIR} test
379

Xavier Guimard's avatar
Xavier Guimard committed
380
handler_test:	handler
381
	@$(MAKE) -C ${SRCHANDLERDIR} test
382

Xavier Guimard's avatar
Xavier Guimard committed
383
portal_test:	portal
384
	@HARNESS_OPTIONS=$(PARA) $(MAKE) -C ${SRCPORTALDIR} test
385

Xavier Guimard's avatar
Xavier Guimard committed
386
manager_test:	manager
387
	@$(MAKE) -C ${SRCMANAGERDIR} test
388

Xavier Guimard's avatar
Xavier Guimard committed
389 390
autopkgtest: all
	$(MAKE) autopkg_common autopkg_handler autopkg_portal autopkg_manager autopkg_runner
Xavier Guimard's avatar
Xavier Guimard committed
391 392 393 394

autopkg_%:
	./debian/tests/runner build-deps lemonldap-ng-$*

Xavier Guimard's avatar
Xavier Guimard committed
395
autopkg_runner:
396 397
	./debian/tests/runner runtime-deps

398
# End-to-end tests
Xavier Guimard's avatar
Xavier Guimard committed
399 400
# ----------------

401 402
e2e_test:	all prepare_test_server start_web_server launch_protractor stop_web_server

Xavier Guimard's avatar
Xavier Guimard committed
403
nox_e2e_test:
404
	xvfb-run -a -s "-screen 0 800x600x16" $(MAKE) e2e_test
405

406
prepare_test_server:
407 408
	-@mkdir -p e2e-tests/conf/sessions/lock e2e-tests/conf/persistents/lock
	-@mkdir e2e-tests/conf/manager e2e-tests/conf/portal
409 410
	$(MAKE) install_webserver_conf install_test_site install_fastcgi_server \
		CONFDIR=`pwd`/e2e-tests/conf \
411 412
		RCONFDIR=e2e-tests/conf \
		ERASECONFIG=1 \
Xavier Guimard's avatar
Xavier Guimard committed
413 414
		VHOSTLISTEN='*:$(TESTWEBSERVERPORT)' \
		PORT=$(TESTWEBSERVERPORT) \
Xavier Guimard's avatar
Xavier Guimard committed
415
		FASTCGISOCKDIR=`pwd`/e2e-tests/conf \
Xavier Guimard's avatar
Xavier Guimard committed
416 417 418 419
		PORTALSITEDIR=`pwd`/e2e-tests/conf/portal \
		PORTALSTATICDIR=`pwd`/$(SRCPORTALDIR)/site/htdocs/static \
		MANAGERSITEDIR=`pwd`/e2e-tests/conf/manager \
		MANAGERSTATICDIR=`pwd`/$(SRCMANAGERDIR)/site/htdocs/static \
Xavier Guimard's avatar
Xavier Guimard committed
420
		TESTDIR=`pwd`/e2e-tests/conf/site \
421
		DEFDOCDIR=`pwd`/doc \
422 423 424
		SBINDIR=`pwd`/e2e-tests/conf/sbin \
		INITDIR=`pwd`/e2e-tests/conf/init \
		ETCDEFAULTDIR=`pwd`/e2e-tests/conf/def
425 426 427
	#@cp -f e2e-tests/index.* e2e-tests/conf/
	@cp -f $(SRCMANAGERDIR)/site/htdocs/manager* e2e-tests/conf/manager
	@cp -f $(SRCPORTALDIR)/site/htdocs/index* e2e-tests/conf/portal
428
	@cp e2e-tests/persistent/5efe8af397fc3577e05b483aca964f1b e2e-tests/conf/persistents
429
	@cp e2e-tests/saml-sp.xml e2e-tests/conf/site/saml-sp.xml
430
	@cp e2e-tests/rules.json e2e-tests/conf/site/test.json
431 432 433
	@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
Xavier Guimard's avatar
Xavier Guimard committed
434
	@cp e2e-tests/lmConf-1.json e2e-tests/lemonldap-ng*.ini e2e-tests/env.conf e2e-tests/test-nginx.conf e2e-tests/conf/
Xavier Guimard's avatar
Xavier Guimard committed
435
	@cp e2e-tests/form.html e2e-tests/conf/site
Xavier Guimard's avatar
Xavier Guimard committed
436
	@perl -i -pe 'BEGIN{$$p=`pwd`;chomp $$p}s#__pwd__#$$p#;s#__port__#$(TESTWEBSERVERPORT)#;s#__FASTCGISOCKDIR__#$(FASTCGISOCKDIR)#;' \
Xavier Guimard's avatar
Xavier Guimard committed
437
		e2e-tests/conf/lemonldap-ng*.ini \
438
		e2e-tests/conf/lmConf-1.json \
439 440
		e2e-tests/conf/env.conf \
		e2e-tests/conf/test-nginx.conf
441
	@perl -i -pe 's/#CustomLog.*$$/CustomLog conf\/apache2.log llng/' e2e-tests/conf/portal-apache2.X.conf e2e-tests/conf/manager-apache2.X.conf
442 443 444 445
	@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
446

Xavier Guimard's avatar
Xavier Guimard committed
447 448 449
e2e-tests/conf/apache2.pid: start_web_server

start_web_server:	all prepare_test_server
Xavier Guimard's avatar
Xavier Guimard committed
450
	# Clean old server if launched
Xavier Guimard's avatar
Hide  
Xavier Guimard committed
451
	@if test "$(TESTBACKEND)" = "DBI"; then \
Xavier Guimard's avatar
Xavier Guimard committed
452 453
		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; \
Xavier Guimard's avatar
Xavier Guimard committed
454 455
		perl lemonldap-ng-common/scripts/convertConfig \
			--current=e2e-tests/conf/lemonldap-ng.ini \
Xavier Guimard's avatar
Xavier Guimard committed
456 457
			--new=e2e-tests/conf/lemonldap-ng-sql.ini; \
		mv e2e-tests/conf/lemonldap-ng-sql.ini e2e-tests/conf/lemonldap-ng.ini; \
Xavier Guimard's avatar
Xavier Guimard committed
458
		LLNG_DEFAULTCONFFILE=e2e-tests/conf/lemonldap-ng.ini \
459
			perl lemonldap-ng-common/scripts/lemonldap-ng-cli --yes 1 \
Xavier Guimard's avatar
Xavier Guimard committed
460 461
				set globalStorage Apache::Session::SQLite3; \
		LLNG_DEFAULTCONFFILE=e2e-tests/conf/lemonldap-ng.ini \
462
			perl lemonldap-ng-common/scripts/lemonldap-ng-cli --yes 1 \
Xavier Guimard's avatar
Xavier Guimard committed
463
				addKey globalStorageOptions DataSource 'dbi:SQLite:dbname='`pwd`'/e2e-tests/conf/sessions.db'; \
Xavier Guimard's avatar
Xavier Guimard committed
464
	fi
Xavier Guimard's avatar
Tidy  
Xavier Guimard committed
465
	@# Debian: make start_web_server TESTBACKEND=LDAP LLNGTESTLDAP_SCHEMA_DIR=/etc/ldap/schema LLNGTESTLDAP_SLAPADD_BIN=/usr/sbin/slapadd
Xavier Guimard's avatar
Xavier Guimard committed
466
	@if test "$(TESTBACKEND)" = "LDAP"; then \
Xavier Guimard's avatar
Tidy  
Xavier Guimard committed
467 468 469 470 471 472 473
		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; \
474
		${LLNGTESTLDAP_SLAPADD_BIN} -F e2e-tests/conf/slapd.d -n 1 -l lemonldap-ng-portal/t/testslapd/users.ldif; \
Xavier Guimard's avatar
Tidy  
Xavier Guimard committed
475 476
		${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; \
477
		perl ./lemonldap-ng-common/scripts/convertConfig \
478 479 480
			--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; \
481
		LLNG_DEFAULTCONFFILE=e2e-tests/conf/lemonldap-ng.ini \
482
			perl lemonldap-ng-common/scripts/lemonldap-ng-cli --yes 1 \
483 484
				set globalStorage Apache::Session::LDAP; \
		LLNG_DEFAULTCONFFILE=e2e-tests/conf/lemonldap-ng.ini \
485
			perl lemonldap-ng-common/scripts/lemonldap-ng-cli --yes 1 \
486 487
				addKey globalStorageOptions ldapServer 'ldap://localhost:20389'; \
		LLNG_DEFAULTCONFFILE=e2e-tests/conf/lemonldap-ng.ini \
488
			perl lemonldap-ng-common/scripts/lemonldap-ng-cli --yes 1 \
489 490
				addKey globalStorageOptions ldapConfBase 'ou=configurations,dc=example,dc=com'; \
		LLNG_DEFAULTCONFFILE=e2e-tests/conf/lemonldap-ng.ini \
491
			perl lemonldap-ng-common/scripts/lemonldap-ng-cli --yes 1 \
492 493
				addKey globalStorageOptions ldapBindDN 'cn=admin,dc=example,dc=com'; \
		LLNG_DEFAULTCONFFILE=e2e-tests/conf/lemonldap-ng.ini \
494
			perl lemonldap-ng-common/scripts/lemonldap-ng-cli --yes 1 \
495
				addKey globalStorageOptions ldapBindPassword admin; \
Xavier Guimard's avatar
Tidy  
Xavier Guimard committed
496
	fi
497 498
	-@[ -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
499
	-@[ -e e2e-tests/conf/llng-fastcgi.pid ] && kill `cat e2e-tests/conf/llng-fastcgi.pid` && rm -f e2e-tests/conf/llng-fastcgi.pid || true
500
	# Start web server (designed for Debian, path may be broken else)
Xavier Guimard's avatar
Xavier Guimard committed
501
	@if test "$(TESTWEBSERVER)" = "apache"; then \
502 503 504 505 506 507
		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; \
508
	elif test "$(TESTWEBSERVER)" = "nginx"; then \
Xavier Guimard's avatar
Xavier Guimard committed
509 510 511 512 513
		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; \
514 515
		echo "Launching nginx"; \
		$(NGINX) -p `pwd`/e2e-tests \
516
			-g 'error_log '`pwd`'/e2e-tests/conf/nginx.log;' \
517 518
			-c `pwd`/e2e-tests/nginx.conf \
			2>&1 | grep -v 'Permission denied' || true; \
519
		echo "Launching plackup"; \
Xavier Guimard's avatar
Xavier Guimard committed
520
		$(MAKE) plackup; \
Xavier Guimard's avatar
Xavier Guimard committed
521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539
	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; \
540 541 542 543
	else \
		echo "!!!!! Unknown test server: $(TESTWEBSERVER) !!!!!" >&2; \
		exit 1; \
	fi
544

Xavier Guimard's avatar
Xavier Guimard committed
545
reload_web_server:
546
	@if [ -e e2e-tests/conf/apache2.pid ]; then \
Xavier Guimard's avatar
Xavier Guimard committed
547 548
		LLNG_DEFAULTCONFFILE=`pwd`/e2e-tests/conf/lemonldap-ng.ini \
		/usr/sbin/apache2 -d `pwd`/e2e-tests -f apache2.conf -k graceful; \
549
	elif [ -e e2e-tests/conf/nginx.pid ]; then \
Xavier Guimard's avatar
Xavier Guimard committed
550 551 552 553 554
		$(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; \
555
		kill `cat e2e-tests/conf/llng-fastcgi.pid` || true; \
Xavier Guimard's avatar
Xavier Guimard committed
556
		$(MAKE) plackup; \
Xavier Guimard's avatar
Xavier Guimard committed
557 558 559 560 561
	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; \
562 563 564 565
	else \
		$(MAKE) start_web_server; \
	fi

566
launch_protractor:
567
	# Start e2e tests
Xavier Guimard's avatar
Xavier Guimard committed
568
	# NB: you must have protractor installed (using npm install -g protractor)
Xavier Guimard's avatar
Xavier Guimard committed
569
	# and have run update-webdriver at least once and have a node.js > 4.0
570
	# Install test keys
Xavier Guimard's avatar
Xavier Guimard committed
571
	cp -f e2e-tests/persistent/5efe8af397fc3577e05b483aca964f1b.e2e-test e2e-tests/conf/persistents/5efe8af397fc3577e05b483aca964f1b
572
	@E2E_TESTS=$(E2E_TESTS) TESTWEBSERVERPORT=$(TESTWEBSERVERPORT) protractor e2e-tests/protractor-conf.js
573 574 575

stop_web_server:
	# Stop web server
576 577
	-@[ -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
578
	-@[ -e e2e-tests/conf/llng-fastcgi.pid ] && kill `cat e2e-tests/conf/llng-fastcgi.pid` && rm -f e2e-tests/conf/llng-fastcgi.pid || true
579
	-@[ -e e2e-tests/conf/slapd.pid ] && kill `cat e2e-tests/conf/slapd.pid` || true
Xavier Guimard's avatar
Xavier Guimard committed
580
	-@[ -e e2e-tests/conf/server.pid ] && kill `cat e2e-tests/conf/server.pid` || true
581
	# Clean
582
	@rm -rf e2e-tests/conf
583

584 585
restart_web_server: start_web_server

Xavier Guimard's avatar
Xavier Guimard committed
586
plackup:
Xavier Guimard's avatar
Xavier Guimard committed
587
	@LLNG_DEFAULTCONFFILE=`pwd`/e2e-tests/conf/lemonldap-ng.ini \
588 589
	perl -I . e2e-tests/conf/sbin/llng-fastcgi-server \
		-F >e2e-tests/conf/fastcgi.log 2>&1 &
Xavier Guimard's avatar
Xavier Guimard committed
590

Xavier Guimard's avatar
Xavier Guimard committed
591
install_test:
592
	@E2E_TESTS=$(E2E_TESTS) TESTWEBSERVERPORT=$(PORT) protractor e2e-tests/protractor-conf.js
Xavier Guimard's avatar
Xavier Guimard committed
593

Xavier Guimard's avatar
Xavier Guimard committed
594 595
# Install targets
# ---------------
Xavier Guimard's avatar
Xavier Guimard committed
596
install:	install_libs install_bin install_fastcgi_server install_uwsgi_server install_site
597

598
# Perl libraires install
Xavier Guimard's avatar
Xavier Guimard committed
599

Xavier Guimard's avatar
Xavier Guimard committed
600
install_libs:	common_install_libs install_handler_libs install_portal_libs install_manager_libs
601 602

common_install_libs:		common
603
	@$(MAKE) -C ${SRCCOMMONDIR} install
604

605
install_handler_libs:	handler
606
	@$(MAKE) -C ${SRCHANDLERDIR} install
607

608
install_portal_libs:		portal
609
	@$(MAKE) -C ${SRCPORTALDIR} install
610

611
install_manager_libs:	manager
612
	@$(MAKE) -C ${SRCMANAGERDIR} install
613

Xavier Guimard's avatar
Xavier Guimard committed
614
install_bin:	install_conf_dir
615 616
	# Binary install
	@install -v -d $(RBINDIR)
617
	@cp -f\
Xavier Guimard's avatar
Xavier Guimard committed
618
		${SRCHANDLERDIR}/eg/scripts/purgeLocalCache \
619
		${SRCPORTALDIR}/site/cron/purgeCentralCache \
620
		${SRCPORTALDIR}/scripts/llngDeleteSession \
Xavier Guimard's avatar
Xavier Guimard committed
621
		${SRCCOMMONDIR}/scripts/convertConfig \
Xavier Guimard's avatar
Xavier Guimard committed
622
		${SRCCOMMONDIR}/scripts/lmMigrateConfFiles2ini \
623
		${SRCCOMMONDIR}/scripts/rotateOidcKeys \
Xavier Guimard's avatar
Xavier Guimard committed
624
		${SRCMANAGERDIR}/scripts/lmConfigEditor \
Xavier Guimard's avatar
Xavier Guimard committed
625
		${SRCCOMMONDIR}/scripts/lemonldap-ng-cli \
626
		${SRCCOMMONDIR}/scripts/importMetadata \
627
			$(RBINDIR)
628
	@if [ ! "$(APACHEUSER)" ]; then \
629
		$(PERL) -i -pe 's#__APACHEUSER__#nobody#g;' $(RBINDIR)/lmConfigEditor $(RBINDIR)/lemonldap-ng-cli; \
630
	else \
631
		$(PERL) -i -pe 's#__APACHEUSER__#$(APACHEUSER)#g;' $(RBINDIR)/lmConfigEditor $(RBINDIR)/lemonldap-ng-cli; \
632 633
	fi
	@if [ ! "$(APACHEGROUP)" ]; then \
634
		$(PERL) -i -pe 's#__APACHEGROUP__#nobody#g;' $(RBINDIR)/lmConfigEditor $(RBINDIR)/lemonldap-ng-cli; \
635
	else \
636
		$(PERL) -i -pe 's#__APACHEGROUP__#$(APACHEGROUP)#g;' $(RBINDIR)/lmConfigEditor $(RBINDIR)/lemonldap-ng-cli; \
637
	fi
638
	@chmod +x $(RBINDIR)/*
639

640
install_fastcgi_server:
641
	@install -v -d $(RSBINDIR) $(RINITDIR) $(RETCDEFAULTDIR) $(RFASTCGISOCKDIR)
642
	@cp -f fastcgi-server/sbin/llng-fastcgi-server $(RSBINDIR)
643
	@chmod +x $(RSBINDIR)/llng-fastcgi-server
644 645
	@cp -f fastcgi-server/rc/llng-fastcgi-server $(RINITDIR)
	@cp -f fastcgi-server/default/llng-fastcgi-server $(RETCDEFAULTDIR)
646
	@$(PERL) -pi -e 's#__SBINDIR__#$(SBINDIR)#;s#__DEFAULTDIR__#$(ETCDEFAULTDIR)#;s#__FASTCGISOCKDIR__#$(FASTCGISOCKDIR)#g;' \
647 648
		$(RETCDEFAULTDIR)/llng-fastcgi-server \
		$(RSBINDIR)/llng-fastcgi-server \
649
		$(RINITDIR)/llng-fastcgi-server
650 651 652 653 654 655
	@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 \
656
		$(PERL) -pi -e 's#__GROUP__#nobody#' $(RETCDEFAULTDIR)/llng-fastcgi-server; \
657
	else \
658
		$(PERL) -pi -e 's#__GROUP__#$(FASTCGIGROUP)#' $(RETCDEFAULTDIR)/llng-fastcgi-server; \
659
	fi
660
	@if [ "$(FASTCGIUSER)" != "" ]; then \
661 662 663 664 665 666 667 668
		chown $(FASTCGIUSER) $(RFASTCGISOCKDIR) || exit 1; \
		if [ "$(FASTCGIGROUP)" != "" ]; then \
			chgrp $(FASTCGIGROUP) $(RFASTCGISOCKDIR) || exit 1; \
		fi; \
		chmod 770 $(RFASTCGISOCKDIR); \
	else \
		chmod 777 $(RFASTCGISOCKDIR); \
	fi
669

Xavier Guimard's avatar
Xavier Guimard committed
670 671 672
install_uwsgi_server:
	@install -v -d $(RUWSGIYAMLDIR) $(RLLNGAPPDIR)
	@install -m 644 -v fastcgi-server/uwsgi/llng-server.yaml $(RUWSGIYAMLDIR)/llng-server.yaml
Xavier Guimard's avatar
Xavier Guimard committed
673
	@install -m 644 -v $(SRCHANDLERDIR)/eg/llng-server.psgi $(RLLNGAPPDIR)/llng-server.psgi
Xavier Guimard's avatar
Xavier Guimard committed
674
	$(PERL) -pi -e 's#__APPDIR__#$(LLNGAPPDIR)#;s#__UID__#$(UWSGIUSER)#;s#__GID__#$(UWSGIGROUP)#;' $(RUWSGIYAMLDIR)/llng-server.yaml
Xavier Guimard's avatar
Xavier Guimard committed
675

Xavier Guimard's avatar
Xavier Guimard committed
676 677
# Site install

678
install_site:	install_manager_site install_portal_site install_handler_site install_test_site install_examples_site install_doc_site install_webserver_conf
679
	# Site install
680
	@install -v -d $(RCONFDIR)
Clément OUDOT's avatar
Clément OUDOT committed
681 682
	# Check if erase is wanted
	@if [ "$(ERASECONFIG)" -eq "1" ]; then \
683
		cp -f _example/etc/for_etc_hosts $(RCONFDIR); \
684
	fi
Xavier Guimard's avatar
Xavier Guimard committed
685
	@$(PERL) -i -pe 's/__DNSDOMAIN__/$(DNSDOMAIN)/g' $(RCONFDIR)/for_etc_hosts
686
	# Fix a lost of rights on the main directory
687
	@chmod 755 $(RBINDIR) $(RDOCUMENTROOT) $(REXAMPLESDIR) $(RHANDLERDIR) $(RPORTALSTATICDIR) $(RMANAGERSITEDIR) $(RTOOLSDIR) $(RCONFDIR) $(RDATADIR)
688
	@echo
689
	@echo "LemonLDAP::NG v${VERSION} is installed with these parameters:"
690 691 692 693 694
	@echo "  - System configuration: ${CONFDIR}"
	@echo "  - DNS domain (for cookies and virtual hosts): ${DNSDOMAIN}"
	@echo
	@echo "To finish configuration:"
	@echo
695 696 697 698
	@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"
699
	@echo "      include ${CONFDIR}/test-apache$(APACHEVERSION).conf"
700
	@echo
701 702
	@echo "2 - Restart Apache:"
	@echo "      apache$(APACHEVERSION)ctl restart"
703
	@echo
704
	@echo "3 - Run 'make postconf' as root to update /etc/hosts if your DNS service does not known auth.$(DNSDOMAIN) and manager.$(DNSDOMAIN)"
705
	@echo
706 707 708 709 710 711
	@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"
712
	@echo
713
	@if [ ! "$(APACHEUSER)" ]; then \
714
		echo;echo "    Warning, since APACHEUSER was not set, $(APACHESESSIONFILEDIR), $(APACHEPSESSIONFILEDIR), $(CAPTCHADIR) and $(CONFDIR) have permissive permissions."; \
715 716 717
		echo "    Fix them by yourself to restrict their view to apache process only"; \
	fi
	@echo
718

719 720 721
install_webserver_conf:
	@install -m 755 -v -d $(RCONFDIR)
	@if [ "$(ERASECONFIG)" -eq "1" ]; then \
722 723 724 725 726
		cp -f _example/etc/portal-apache$(APACHEVERSION).conf $(RCONFDIR); \
		cp -f _example/etc/handler-apache$(APACHEVERSION).conf $(RCONFDIR); \
		cp -f _example/etc/manager-apache$(APACHEVERSION).conf $(RCONFDIR); \
		cp -f _example/etc/test-apache$(APACHEVERSION).conf $(RCONFDIR); \
		cp -f _example/etc/*nginx*.conf $(RCONFDIR); \
727 728 729
	fi
	@$(PERL) -i -pe 's/__DNSDOMAIN__/$(DNSDOMAIN)/g; \
			s#__PORTALDIR__#$(PORTALDIR)/#g; \
Xavier Guimard's avatar
Xavier Guimard committed
730
			s#__PORTALSITEDIR__#$(PORTALSITEDIR)/#g; \
731
			s#__PORTALSTATICDIR__#$(PORTALSTATICDIR)/#g; \
732
			s#__MANAGERDIR__#$(MANAGERDIR)/#g; \
Xavier Guimard's avatar
Xavier Guimard committed
733
			s#__MANAGERSITEDIR__#$(MANAGERSITEDIR)/#g; \
734 735
			s#__MANAGERSTATICDIR__#$(MANAGERSTATICDIR)/#g; \
			s#__TESTDIR__#$(TESTDIR)/#g; \
736
			s#__APACHELOGDIR__#$(APACHELOGDIR)#g; \
Xavier Guimard's avatar
Xavier Guimard committed
737
			s#__PORT__#$(PORT)#g; \
738
			s#__CONFDIR__#$(CONFDIR)#g; \
Xavier Guimard's avatar
Xavier Guimard committed
739
			s#__FASTCGISOCKDIR__#$(FASTCGISOCKDIR)#g; \
740
			s#__VHOSTLISTEN__#$(VHOSTLISTEN)#g; \
Xavier Guimard's avatar
Xavier Guimard committed
741
			s#__DEFDOCDIR__#$(DEFDOCDIR)/#g;' $(RCONFDIR)/*apache*.conf $(RCONFDIR)/*nginx*.conf
742

743 744
install_manager_site:	install_conf_dir
	# Manager install
745
	@install -v -d $(RMANAGERDIR) $(RMANAGERSTATICDIR) \
746
		$(RMANAGERTEMPLATESDIR)
747
	@cp -pR -f $(SRCMANAGERDIR)/site/htdocs/manager.* $(RMANAGERSITEDIR)
748
	@cp -pR $(SRCMANAGERDIR)/site/htdocs/static/* $(RMANAGERSTATICDIR)
749
	@for f in $(SRCMANAGERDIR)/site/templates/*.tpl; do \
750 751 752 753 754
		./scripts/transform-templates \
			usedebianlibs $(USEDEBIANLIBS) \
			useexternallibs $(USEEXTERNALLIBS) \
			jsminified $(JSCOMPRESS) \
			cssminified $(CSSCOMPRESS) <$$f \
755 756
			> $(RMANAGERTEMPLATESDIR)/`basename $$f`; \
	done
757
	@if test "$(USEEXTERNALLIBS)" = "yes"; then \
758
		rm -rvf $(MANAGEREXTERNALLIBS); \
759
	elif test "$(USEDEBIANLIBS)" = "yes"; then \
760 761
		rm -rvf $(MANAGERLIBSTOREMOVEFORDEBIAN); \
	fi
762
	# Clean svn files
763
	@rm -rf $$(find ${RMANAGERSTATICDIR} \
764
		$(RMANAGERTEMPLATESDIR) $(RCONFDIR) -type d -name .svn)
765 766
	@$(PERL) -i -pe 's#__MANAGERSTATICDIR__#$(MANAGERRELATIVESTATICDIR)#g' $(RCONFDIR)/$(CONFFILENAME)
	@$(PERL) -i -pe 's#__MANAGERTEMPLATESDIR__#$(MANAGERTEMPLATESDIR)#g' $(RCONFDIR)/$(CONFFILENAME)
767 768 769

install_portal_site:	install_conf_dir
	# Portal install
770
	@install -v -d $(RPORTALDIR) $(RPORTALSTATICDIR) \
Xavier Guimard's avatar
Xavier Guimard committed
771
		$(RPORTALTEMPLATESDIR) \
772
		$(RCRONDIR) $(RCONFDIR)
773
	@cp -pR -f $(SRCPORTALDIR)/site/htdocs/index.* $(RPORTALSITEDIR)
774
	@cp -pR -f $(SRCPORTALDIR)/site/htdocs/static/* $(RPORTALSTATICDIR)
775
	@cd $(SRCPORTALDIR)/site/templates; for f in `find * -type f -name '*.tpl'`; do \
Xavier Guimard's avatar
Xavier Guimard committed
776 777
		echo "$$f => $(RPORTALTEMPLATESDIR)/$$f"; \
		mkdir -p $(RPORTALTEMPLATESDIR)/`dirname $$f`; \
Xavier Guimard's avatar
Xavier Guimard committed
778
		../../../scripts/transform-templates \
779 780 781 782
			usedebianlibs $(USEDEBIANLIBS) \
			useexternallibs $(USEEXTERNALLIBS) \
			jsminified $(JSCOMPRESS) \
			cssminified $(CSSCOMPRESS) <$$f \
Xavier Guimard's avatar
Xavier Guimard committed
783 784
			>$(RPORTALTEMPLATESDIR)/$$f; \
	done; cd -
785 786
	@cd $(SRCPORTALDIR)/site/templates; for f in `find * -type f ! -name '*.tpl'`; do \
		mkdir -p $(RPORTALTEMPLATESDIR)/`dirname $$f`; \
Xavier Guimard's avatar
Xavier Guimard committed
787
		install -m 644 -v $$f $(RPORTALTEMPLATESDIR)/$$f; \
788 789
	done; cd -
	@cd $(SRCPORTALDIR)/site/templates; for l in `find * -type l`; do \
Xavier Guimard's avatar
Xavier Guimard committed
790
		echo link to do $$l `readlink $$l`; \
Xavier Guimard's avatar
Xavier Guimard committed
791 792 793 794
		target=`readlink $$l`; \
		cd $(RPORTALTEMPLATESDIR); \
		ln -s $$target $$l; \
		cd -; \
795
	done
Xavier Guimard's avatar
Xavier Guimard committed
796
	@if test "$(USEEXTERNALLIBS)" = "yes"; then \
797
		rm -rvf $(PORTALEXTERNALLIBS); \
798
	elif test "$(USEDEBIANLIBS)" = "yes"; then \
799 800
		rm -rvf $(PORTALLIBSTOREMOVEFORDEBIAN); \
	fi
801
	# Cron files
802
	@cp -f $(SRCPORTALDIR)/site/cron/purgeCentralCache.cron.d $(RCRONDIR)/lemonldap-ng-portal
803
	@if [ ! "$(APACHEUSER)" ]; then \
804
		$(PERL) -i -pe 's#__APACHEUSER__#nobody#g;' $(RCRONDIR)/lemonldap-ng-portal; \
805
	else \
806
		$(PERL) -i -pe 's#__APACHEUSER__#$(APACHEUSER)#g;' $(RCRONDIR)/lemonldap-ng-portal; \
807
	fi
808
	@$(PERL) -i -pe 's#__BINDIR__#$(BINDIR)#g;' $(RCRONDIR)/lemonldap-ng-portal
809
	# Clean SVN files
810
	@rm -rf $$(find ${RPORTALDIR} $(RPORTALSKINSDIR) $(RCRONDIR) $(RCONFDIR) -type d -name .svn)
Xavier Guimard's avatar
Xavier Guimard committed
811 812
	@$(PERL) -i -pe 's#__PORTALSTATICDIR__#$(PORTALRELATIVESTATICDIR)#g' $(RCONFDIR)/$(CONFFILENAME)
	@$(PERL) -i -pe 's#__PORTALTEMPLATESDIR__#$(PORTALTEMPLATESDIR)#g' $(RCONFDIR)/$(CONFFILENAME)
813 814

install_handler_site:	install_conf_dir
815
	# Handler install
816
	@install -v -d ${RHANDLERDIR}
Xavier Guimard's avatar
Xavier Guimard committed
817
	@cp -f $(SRCHANDLERDIR)/eg/scripts/purgeLocalCache.cron.d $(RCRONDIR)/lemonldap-ng-handler
818
	@if [ ! "$(APACHEUSER)" ]; then \
819
		$(PERL) -i -pe 's#__APACHEUSER__#nobody#g;' $(RCRONDIR)/lemonldap-ng-handler; \
820 821 822 823
	else \
		$(PERL) -i -pe 's#__APACHEUSER__#$(APACHEUSER)#g;' $(RCRONDIR)/lemonldap-ng-handler; \
	fi
	@$(PERL) -i -pe 's#__BINDIR__#$(BINDIR)#g;' $(RCRONDIR)/lemonldap-ng-handler
824
	@rm -rf $$(find $(RHANDLERDIR) -type d -name .svn)
825 826

install_test_site:
827
	# Test site install
828
	@install -v -d $(RTESTDIR)
829
	@cp -pR -f _example/test/* $(RTESTDIR)
830
	@rm -rf $$(find $(RTESTDIR) -type d -name .svn)
Xavier Guimard's avatar
Xavier Guimard committed
831
	@$(PERL) -i -pe 's/__DNSDOMAIN__/$(DNSDOMAIN)/g' $(RTESTDIR)/index.pl
832
	@rm -rf $$(find $(RTESTDIR) -type d -name .svn)
833 834

install_examples_site:
835
	# Examples install
836
	@install -v -d $(REXAMPLESDIR)
Xavier Guimard's avatar
Xavier Guimard committed
837
	@for i in portal manager handler; do \
838
		cp -a -f lemonldap-ng-$$i/eg $(REXAMPLESDIR)/$$i; \
839
	done
840
	@cp -a -f fastcgi-server/psgi/llngapp.psgi $(REXAMPLESDIR)/$$i
841
	@rm -rf $(REXAMPLESDIR)/portal/skins \
Xavier Guimard's avatar
Xavier Guimard committed
842
		$(REXAMPLESDIR)/manager/skins \
843
	@rm -rf $$(find $(REXAMPLESDIR) -type d -name .svn)
844

845
install_doc_site:
846
	# Offline documentation install
847
	@rm -rf $(RDEFDOCDIR)
848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866
	# Install doc directories
	@install -v -d -m 755 $(RDEFDOCDIR)
	@cd doc && find * -type d |(cd $(RDEFDOCDIR); xargs install -v -d -m 755) && cd -
	# Install HTML files
	@cd doc && for f in `find * -type f -name '*.html'`; do \
		echo "Installing $$f"; \
		../scripts/transform-templates \
			usedebianlibs $(USEDEBIANLIBS) \
			useexternallibs $(USEEXTERNALLIBS) \
			jsminified $(JSCOMPRESS) \
			cssminified $(CSSCOMPRESS) <$$f \
		> $(RDEFDOCDIR)/$$f; \
	done && cd -
	# Install other files
	@cd doc && for f in `find * -type f ! -name '*.html'`; do \
		install -v -m 644 $$f $(RDEFDOCDIR)/$$f; \
	done && cd -
	# Install symlinks
	@cd doc && tar cf - `find * -type l` | tar xvf - -C $(RDEFDOCDIR) && cd -
Xavier Guimard's avatar
Xavier Guimard committed
867
	# Remove js
Xavier Guimard's avatar
Xavier Guimard committed
868
	@cd $(RDEFDOCDIR) && if test "$(USEEXTERNALLIBS)" = "yes"; then \
Xavier Guimard's avatar
Xavier Guimard committed
869 870 871
		rm -rvf $(DOCEXTERNALLIBS); \
	elif test "$(USEDEBIANLIBS)" = "yes"; then \
		rm -rvf $(DOCLIBSTOREMOVEFORDEBIAN); \
Xavier Guimard's avatar
Xavier Guimard committed
872
	fi && cd -
873

874
install_conf_dir:	install_sessions_dir install_notif_dir install_captcha_dir
875
	# Configuration files install
876
	@install -v -d $(RCONFDIR) $(RFILECONFIGDIR) $(RTOOLSDIR)
Clément OUDOT's avatar
Clément OUDOT committed
877
	@if [ "$(ERASECONFIG)" -eq "1" ]; then \
878
		cp -f $(SRCCOMMONDIR)/$(CONFFILENAME) $(RCONFDIR); \
Xavier Guimard's avatar
Xavier Guimard committed
879
		$(PERL) -i -pe 's#^dirName\s*=\s*.*#dirName = $(FILECONFIGDIR)#g' $(RCONFDIR)/$(CONFFILENAME); \
Clément OUDOT's avatar
Clément OUDOT committed
880
	fi
881
	@cp _example/conf/lmConf-1.json $(RFILECONFIGDIR)
Xavier Guimard's avatar
Xavier Guimard committed
882
	@$(PERL) -i -pe 's/__DNSDOMAIN__/$(DNSDOMAIN)/g;\
883
		s#__SESSIONDIR__#$(APACHESESSIONFILEDIR)#g;\
884
		s#__PSESSIONDIR__#$(APACHEPSESSIONFILEDIR)#g;\
885
		s#__NOTIFICATIONDIR__#$(APACHEFILENOTIFDIR)#g;' $(RFILECONFIGDIR)/lmConf-1.json
886 887 888 889 890 891 892 893 894
	@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
895 896
	@cp $(SRCCOMMONDIR)/tools/lmConfig.* $(SRCCOMMONDIR)/tools/apache-session-mysql.sql $(RTOOLSDIR)
	@cp $(SRCCOMMONDIR)/tools/sso.schema $(RTOOLSDIR)
897
	$(PERL) -i -pe 's/__DNSDOMAIN__/$(DNSDOMAIN)/g' $(RCONFDIR)/$(CONFFILENAME)
898
	@rm -rf $$(find $(RCONFDIR) $(RFILECONFIGDIR) $(RTOOLSDIR) -type d -name .svn)
899 900

install_sessions_dir:
901
	@install -m 777 -v -d $(RAPACHESESSIONFILEDIR) $(RAPACHESESSIONFILELOCKDIR) $(RAPACHEPSESSIONFILEDIR) $(RAPACHEPSESSIONFILELOCKDIR)
902 903
	# Fix Apache::Session directories permissions
	@if [ "$(APACHEUSER)" != "" ]; then \
904
		chown $(APACHEUSER) $(RAPACHESESSIONFILEDIR) $(RAPACHESESSIONFILELOCKDIR) $(RAPACHEPSESSIONFILEDIR) $(RAPACHEPSESSIONFILELOCKDIR) || exit 1; \
905
		if [ "$(APACHEGROUP)" != "" ]; then \
906
			chgrp $(APACHEGROUP) $(RAPACHESESSIONFILEDIR) $(RAPACHESESSIONFILELOCKDIR) $(RAPACHEPSESSIONFILEDIR) $(RAPACHEPSESSIONFILELOCKDIR) || exit 1; \
907
		fi; \
908
		chmod 770 $(RAPACHESESSIONFILEDIR) $(RAPACHESESSIONFILELOCKDIR) $(RAPACHEPSESSIONFILEDIR) $(RAPACHEPSESSIONFILELOCKDIR); \
909
	else \
910
		chmod 777 $(RAPACHESESSIONFILEDIR) $(RAPACHESESSIONFILELOCKDIR) $(RAPACHEPSESSIONFILEDIR) $(RAPACHEPSESSIONFILELOCKDIR); \
911 912
	fi

913 914 915 916 917 918 919 920 921 922