Makefile 43.3 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
Xavier Guimard's avatar
Xavier Guimard committed
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
Xavier Guimard's avatar
Xavier Guimard committed
38
UGLIFYJSVERSION:=$(shell uglifyjs --version|perl -pe 's/^[^\d]*(\d).*$$/$$1/')
39 40

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

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

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

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

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

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

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

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

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

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

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

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

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

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

113
# Apache version
114
APACHEVERSION=2.X
115

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

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

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

130
# LDAP backend test
131
LLNGTESTLDAP_SLAPD_BIN=/usr/sbin/slapd
132 133
LLNGTESTLDAP_SLAPADD_BIN=/usr/sbin/slapadd
LLNGTESTLDAP_SCHEMA_DIR=/etc/ldap/schema
134

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

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

183

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

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

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

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

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

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

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

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

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

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

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

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

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

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

%.min.js: %.js
	@echo "Compressing $*.js"
Xavier Guimard's avatar
Xavier Guimard committed
315 316 317 318 319
	if test "$(UGLIFYJSVERSION)" = 2; then \
		uglifyjs $*.js --compress --mangle --comments='/Copyr/i' --source-map $*.min.js.map -o $*.min.js; \
	else \
		uglifyjs $*.js --compress --mangle --comments='/Copyr/i' --source-map -o $*.min.js; \
	fi
Xavier Guimard's avatar
Xavier Guimard committed
320

321
fastcgi-server/man/llng-fastcgi-server.8p: fastcgi-server/sbin/llng-fastcgi-server
Xavier Guimard's avatar
Xavier Guimard committed
322
	@echo Update FastCGI server man page
323
	@pod2man -s 8 -name llng-fastcgi-server fastcgi-server/sbin/llng-fastcgi-server >fastcgi-server/man/llng-fastcgi-server.8p
Xavier Guimard's avatar
Xavier Guimard committed
324 325 326

# Perl libraries configuration

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

330 331 332 333 334 335 336 337 338 339
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
340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365
$(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
# ------------

366
common:		common_conf
367
	@$(MAKE) -C ${SRCCOMMONDIR}
368

Xavier Guimard's avatar
Xavier Guimard committed
369
handler:	handler_conf common
370
	@$(MAKE) -C ${SRCHANDLERDIR}
371

372
portal:		portal_conf handler
373
	@$(MAKE) -C ${SRCPORTALDIR}
374

Xavier Guimard's avatar
Xavier Guimard committed
375
manager:	manager_conf handler
376
	$(MAKE) -C ${SRCMANAGERDIR}
377

Xavier Guimard's avatar
Xavier Guimard committed
378 379
# Test targets
# ------------
380
test:		all common_test handler_test portal_test manager_test
381 382

common_test:	common
Xavier Guimard's avatar
Xavier Guimard committed
383
	@HARNESS_OPTIONS=$(PARA) $(MAKE) -C ${SRCCOMMONDIR} test
384

Xavier Guimard's avatar
Xavier Guimard committed
385
handler_test:	handler
386
	@$(MAKE) -C ${SRCHANDLERDIR} test
387

Xavier Guimard's avatar
Xavier Guimard committed
388
portal_test:	portal
Xavier Guimard's avatar
Xavier Guimard committed
389
	@HARNESS_OPTIONS=$(PARA) $(MAKE) -C ${SRCPORTALDIR} test
390

Xavier Guimard's avatar
Xavier Guimard committed
391
manager_test:	manager
392
	@$(MAKE) -C ${SRCMANAGERDIR} test
393

Xavier Guimard's avatar
Xavier Guimard committed
394
autopkgtest: all autopkg_common autopkg_handler autopkg_portal autopkg_manager autopkg_runner
Xavier Guimard's avatar
Xavier Guimard committed
395 396 397

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

Xavier Guimard's avatar
Xavier Guimard committed
399 400 401
autopkg_runner:
	./debian/tests/runner runtime-deps

402
# End-to-end tests
Xavier Guimard's avatar
Xavier Guimard committed
403 404
# ----------------

405 406
e2e_test:	all prepare_test_server start_web_server launch_protractor stop_web_server

Xavier Guimard's avatar
Xavier Guimard committed
407
nox_e2e_test:
408
	xvfb-run -a -s "-screen 0 800x600x16" $(MAKE) e2e_test
409

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

Xavier Guimard's avatar
Xavier Guimard committed
451 452 453
e2e-tests/conf/apache2.pid: start_web_server

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

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

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

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

588 589
restart_web_server: start_web_server

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

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

Xavier Guimard's avatar
Xavier Guimard committed
598 599
# Install targets
# ---------------
Xavier Guimard's avatar
Xavier Guimard committed
600
install:	install_libs install_bin install_fastcgi_server install_uwsgi_server install_site
601

602
# Perl libraires install
Xavier Guimard's avatar
Xavier Guimard committed
603

Xavier Guimard's avatar
Xavier Guimard committed
604
install_libs:	common_install_libs install_handler_libs install_portal_libs install_manager_libs
605 606

common_install_libs:		common
607
	@$(MAKE) -C ${SRCCOMMONDIR} install
608

609
install_handler_libs:	handler
610
	@$(MAKE) -C ${SRCHANDLERDIR} install
611

612
install_portal_libs:		portal
613
	@$(MAKE) -C ${SRCPORTALDIR} install
614

615
install_manager_libs:	manager
616
	@$(MAKE) -C ${SRCMANAGERDIR} install
617

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

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

Xavier Guimard's avatar
Xavier Guimard committed
675 676 677
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
678
	@install -m 644 -v $(SRCHANDLERDIR)/eg/llng-server.psgi $(RLLNGAPPDIR)/llng-server.psgi
Xavier Guimard's avatar
Xavier Guimard committed
679
	$(PERL) -pi -e 's#__APPDIR__#$(LLNGAPPDIR)#;s#__UID__#$(UWSGIUSER)#;s#__GID__#$(UWSGIGROUP)#;' $(RUWSGIYAMLDIR)/llng-server.yaml
Xavier Guimard's avatar
Xavier Guimard committed
680

Xavier Guimard's avatar
Xavier Guimard committed
681 682
# Site install

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

724 725 726
install_webserver_conf:
	@install -m 755 -v -d $(RCONFDIR)
	@if [ "$(ERASECONFIG)" -eq "1" ]; then \
727 728 729 730 731
		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); \
732 733 734
	fi
	@$(PERL) -i -pe 's/__DNSDOMAIN__/$(DNSDOMAIN)/g; \
			s#__PORTALDIR__#$(PORTALDIR)/#g; \
Xavier Guimard's avatar
Xavier Guimard committed
735
			s#__PORTALSITEDIR__#$(PORTALSITEDIR)/#g; \
736
			s#__PORTALSTATICDIR__#$(PORTALSTATICDIR)/#g; \
737
			s#__MANAGERDIR__#$(MANAGERDIR)/#g; \
Xavier Guimard's avatar
Xavier Guimard committed
738
			s#__MANAGERSITEDIR__#$(MANAGERSITEDIR)/#g; \
739 740
			s#__MANAGERSTATICDIR__#$(MANAGERSTATICDIR)/#g; \
			s#__TESTDIR__#$(TESTDIR)/#g; \
741
			s#__APACHELOGDIR__#$(APACHELOGDIR)#g; \
Xavier Guimard's avatar
Xavier Guimard committed
742
			s#__PORT__#$(PORT)#g; \
743
			s#__CONFDIR__#$(CONFDIR)#g; \
Xavier Guimard's avatar
Xavier Guimard committed
744
			s#__FASTCGISOCKDIR__#$(FASTCGISOCKDIR)#g; \
745
			s#__VHOSTLISTEN__#$(VHOSTLISTEN)#g; \
Xavier Guimard's avatar
Xavier Guimard committed
746
			s#__DEFDOCDIR__#$(DEFDOCDIR)/#g;' $(RCONFDIR)/*apache*.conf $(RCONFDIR)/*nginx*.conf
747

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

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

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

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

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

850
install_doc_site:
851
	# Offline documentation install
852
	@rm -rf $(RDEFDOCDIR)
853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871
	# 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
872
	# Remove js
Xavier Guimard's avatar
Xavier Guimard committed
873
	@cd $(RDEFDOCDIR) && if test "$(USEEXTERNALLIBS)" = "yes"; then \
Xavier Guimard's avatar
Xavier Guimard committed
874 875 876
		rm -rvf $(DOCEXTERNALLIBS); \
	elif test "$(USEDEBIANLIBS)" = "yes"; then \
		rm -rvf $(DOCLIBSTOREMOVEFORDEBIAN); \
Xavier Guimard's avatar
Xavier Guimard committed
877
	fi && cd -
878

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

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

918 919