Makefile 9.76 KB
Newer Older
JC Brand's avatar
JC Brand committed
1
# You can set these variables from the command line.
2
BABEL			?= node_modules/.bin/babel
JC Brand's avatar
JC Brand committed
3
BOURBON_TEMPLATES = ./node_modules/bourbon/app/assets/stylesheets/ 
4 5
BUILDDIR		= ./docs
BUNDLE		  	?= ./.bundle/bin/bundle
6 7 8
CHROMIUM		?= ./node_modules/.bin/run-headless-chromium
CLEANCSS		?= ./node_modules/clean-css-cli/bin/cleancss --skip-rebase
ESLINT		  	?= ./node_modules/.bin/eslint
9 10 11 12
GRUNT		   	?= ./node_modules/.bin/grunt
HTTPSERVE	   	?= ./node_modules/.bin/http-server
PAPER		   	=
PO2JSON		 	?= ./node_modules/.bin/po2json
13
RJS			 	?= ./node_modules/.bin/r.js
14 15
SASS			?= ./.bundle/bin/sass
SPHINXBUILD	 	?= ./bin/sphinx-build
JC Brand's avatar
JC Brand committed
16
SED				?= sed
17
SPHINXOPTS	  	=
18

JC Brand's avatar
JC Brand committed
19 20 21
# Internal variables.
ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) ./docs/source

22
.PHONY: all
JC Brand's avatar
JC Brand committed
23
all: dev dist
24

25
.PHONY: help
JC Brand's avatar
JC Brand committed
26
help:
27 28
	@echo "Please use \`make <target>' where <target> is one of the following:"
	@echo ""
29 30 31
	@echo " all           A synonym for 'make dev'."
	@echo " build         Create minified builds of converse.js and all its dependencies."
	@echo " changes       Make an overview of all changed/added/deprecated items added to the documentation."
32
	@echo " clean         Remove downloaded the stamp-* guard files as well as all NPM and Ruby packages."
33 34 35 36
	@echo " css           Generate CSS from the Sass files."
	@echo " dev           Set up the development environment. To force a fresh start, run 'make clean' first."
	@echo " epub          Export the documentation to epub."
	@echo " html          Make standalone HTML files of the documentation."
37
	@echo " doc           Same as "doc". Make standalone HTML files of the documentation."
38 39 40 41 42 43 44 45 46 47
	@echo " linkcheck     Check all documentation external links for integrity."
	@echo " po            Generate gettext PO files for each i18n language."
	@echo " po2json       Generate JSON files from the language PO files."
	@echo " pot           Generate a gettext POT file to be used for translations."
	@echo " release       Prepare a new release of converse.js. E.g. make release VERSION=0.9.5"
	@echo " serve         Serve this directory via a webserver on port 8000."
	@echo " stamp-npm     Install NPM dependencies and create the guard file stamp-npm which will prevent those dependencies from being installed again."
	@echo " stamp-bundler Install Bundler (Ruby) dependencies and create the guard file stamp-bundler which will prevent those dependencies from being installed again."
	@echo " watch         Tells Sass to watch the .scss files for changes and then automatically update the CSS files."

48 49 50 51

########################################################################
## Miscellaneous

52
.PHONY: serve
53 54 55 56 57 58
serve: dev 
	$(HTTPSERVE) -p 8000 -c-1

.PHONY: serve_bg
serve_bg: dev
	$(HTTPSERVE) -p 8000 -c-1 -s &
59

60 61 62
########################################################################
## Translation machinery

JC Brand's avatar
JC Brand committed
63
GETTEXT = xgettext --keyword=__ --keyword=___ --from-code=UTF-8 --output=locale/converse.pot src/*.js --package-name=Converse.js --copyright-holder="Jan-Carel Brand" --package-version=3.1.0 -c
64

65
.PHONY: pot
66
pot:
67
	$(GETTEXT) --language="javascript" 2>&1 > /dev/null; test $$? -eq 0 && exit 0 || $(GETTEXT) --language="python" && exit $$?;
JC Brand's avatar
JC Brand committed
68

69
.PHONY: po
70
po:
71 72
	find ./locale -maxdepth 1 -mindepth 1 -type d -exec msgmerge {}/LC_MESSAGES/converse.po ./locale/converse.pot -U \;

73
.PHONY: po2json
74
po2json:
75
	find ./locale -maxdepth 1 -mindepth 1 -type d -exec $(PO2JSON) -p -f jed -d converse {}/LC_MESSAGES/converse.po {}/LC_MESSAGES/converse.json \;
76

77 78 79
########################################################################
## Release management

80
.PHONY: release
JC Brand's avatar
JC Brand committed
81
release:
JC Brand's avatar
JC Brand committed
82 83 84 85 86 87 88 89 90 91
	$(SED) -ri s/Version:\ [0-9]\+\.[0-9]\+\.[0-9]\+/Version:\ $(VERSION)/ src/start.frag
	$(SED) -ri s/Project-Id-Version:\ Converse\.js\ [0-9]\+\.[0-9]\+\.[0-9]\+/Project-Id-Version:\ Converse.js\ $(VERSION)/ locale/converse.pot
	$(SED) -ri s/\"version\":\ \"[0-9]\+\.[0-9]\+\.[0-9]\+\"/\"version\":\ \"$(VERSION)\"/ bower.json
	$(SED) -ri s/\"version\":\ \"[0-9]\+\.[0-9]\+\.[0-9]\+\"/\"version\":\ \"$(VERSION)\"/ package.json
	$(SED) -ri s/--package-version=[0-9]\+\.[0-9]\+\.[0-9]\+/--package-version=$(VERSION)/ Makefile
	$(SED) -ri s/v[0-9]\+\.[0-9]\+\.[0-9]\+\.zip/v$(VERSION)\.zip/ index.html
	$(SED) -ri s/v[0-9]\+\.[0-9]\+\.[0-9]\+\.tar\.gz/v$(VERSION)\.tar\.gz/ index.html
	$(SED) -ri s/version\ =\ \'[0-9]\+\.[0-9]\+\.[0-9]\+\'/version\ =\ \'$(VERSION)\'/ docs/source/conf.py
	$(SED) -ri s/release\ =\ \'[0-9]\+\.[0-9]\+\.[0-9]\+\'/release\ =\ \'$(VERSION)\'/ docs/source/conf.py
	$(SED) -ri "s/(Unreleased)/`date +%Y-%m-%d`/" CHANGES.md
JC Brand's avatar
JC Brand committed
92 93
	make pot
	make po
94
	make po2json
JC Brand's avatar
JC Brand committed
95
	make build
JC Brand's avatar
JC Brand committed
96

97 98 99 100
########################################################################
## Install dependencies

stamp-npm: package.json
101
	npm install
102
	touch stamp-npm
103

104
stamp-bundler: Gemfile
105 106 107 108 109
	mkdir -p .bundle
	gem install --user bundler --bindir .bundle/bin
	$(BUNDLE) install --path .bundle --binstubs .bundle/bin
	touch stamp-bundler

110
.PHONY: clean
111
clean:
112
	-rm -f stamp-npm stamp-bundler
113
	-rm -rf node_modules .bundle
JC Brand's avatar
JC Brand committed
114

115
.PHONY: dev
116
dev: stamp-bundler stamp-npm
117

118 119 120
########################################################################
## Builds

121
.PHONY: css
JC Brand's avatar
JC Brand committed
122 123
css: sass/*.scss css/converse.css css/converse.min.css css/mobile.min.css css/theme.min.css css/converse-muc-embedded.min.css css/inverse.css css/inverse.min.css

124
css/inverse.css:: stamp-bundler sass sass/*
JC Brand's avatar
JC Brand committed
125 126 127 128
	$(SASS) -I $(BOURBON_TEMPLATES) sass/inverse/inverse.scss css/inverse.css

css/inverse.min.css:: css/inverse.css
	$(CLEANCSS) css/inverse.css > css/inverse.min.css
129

130
css/converse-muc-embedded.css:: stamp-bundler sass/*
JC Brand's avatar
JC Brand committed
131
	$(SASS) -I $(BOURBON_TEMPLATES) sass/_muc_embedded.scss css/converse-muc-embedded.css
132

133
css/converse-muc-embedded.min.css:: stamp-bundler sass css/converse-muc-embedded.css
134
	$(CLEANCSS) css/converse-muc-embedded.css > css/converse-muc-embedded.min.css
135

136
css/converse.css:: stamp-bundler sass/*
137
	$(SASS) -I $(BOURBON_TEMPLATES) sass/converse/converse.scss css/converse.css
JC Brand's avatar
JC Brand committed
138

JC Brand's avatar
JC Brand committed
139
css/converse.min.css:: css/converse.css
140 141
	$(CLEANCSS) css/converse.css > css/converse.min.css

JC Brand's avatar
JC Brand committed
142
css/theme.min.css:: stamp-npm css/theme.css
143 144
	$(CLEANCSS) css/theme.css > css/theme.min.css

145
css/mobile.min.css:: stamp-npm sass/*
146 147
	$(CLEANCSS) css/mobile.css > css/mobile.min.css

148 149
.PHONY: watch
watch: stamp-bundler
150
	$(SASS) --watch -I ./node_modules/bourbon/app/assets/stylesheets/ sass/converse.scss:css/converse.css sass/_muc_embedded.scss:css/converse-muc-embedded.css
151

152 153 154 155
.PHONY: watchjs
watchjs: stamp-npm
	$(BABEL) --source-maps --watch=./src --out-dir=./build

JC Brand's avatar
JC Brand committed
156 157
BUILDS = dist/converse.js \
		 dist/converse.min.js \
158 159
         dist/inverse.js \
		 dist/inverse.min.js \
160 161
         dist/converse-mobile.js \
         dist/converse-mobile.min.js \
162 163
         dist/converse-muc-embedded.js \
         dist/converse-muc-embedded.min.js \
164 165
         dist/converse-no-jquery.js \
 		 dist/converse-no-jquery.min.js \
JC Brand's avatar
JC Brand committed
166 167 168
		 dist/converse-no-dependencies.min.js \
		 dist/converse-no-dependencies.js

169
dist/converse.min.js: src locale node_modules *.js
170
	$(RJS) -o src/build.js include=converse out=dist/converse.min.js
171
dist/converse.js: src locale node_modules *.js
172
	$(RJS) -o src/build.js include=converse out=dist/converse.js optimize=none 
173 174 175 176
dist/inverse.js: src locale node_modules *.js
	$(RJS) -o src/build-inverse.js include=inverse out=dist/inverse.js optimize=none 
dist/inverse.min.js: src locale node_modules *.js
	$(RJS) -o src/build-inverse.js include=inverse out=dist/inverse.min.js
177
dist/converse-no-jquery.min.js: src locale node_modules *.js
178
	$(RJS) -o src/build.js include=converse wrap.endFile=end-no-jquery.frag exclude=jquery exclude=jquery.noconflict out=dist/converse-no-jquery.min.js
179
dist/converse-no-jquery.js: src locale node_modules *.js
180
	$(RJS) -o src/build.js include=converse wrap.endFile=end-no-jquery.frag exclude=jquery exclude=jquery.noconflict out=dist/converse-no-jquery.js optimize=none 
181
dist/converse-no-dependencies.min.js: src locale node_modules *.js
182
	$(RJS) -o src/build-no-dependencies.js
183
dist/converse-no-dependencies.js: src locale node_modules *.js
JC Brand's avatar
JC Brand committed
184
	$(RJS) -o src/build-no-dependencies.js optimize=none out=dist/converse-no-dependencies.js
185
dist/converse-mobile.min.js: src locale node_modules *.js
JC Brand's avatar
JC Brand committed
186
	$(RJS) -o src/build.js paths.converse=src/converse-mobile include=converse out=dist/converse-mobile.min.js
187
dist/converse-mobile.js: src locale node_modules *.js
JC Brand's avatar
JC Brand committed
188
	$(RJS) -o src/build.js paths.converse=src/converse-mobile include=converse out=dist/converse-mobile.js optimize=none 
189 190 191 192
dist/converse-muc-embedded.min.js: src locale node_modules *.js
	$(RJS) -o src/build.js paths.converse=src/converse-embedded include=converse out=dist/converse-muc-embedded.min.js
dist/converse-muc-embedded.js: src locale node_modules *.js
	$(RJS) -o src/build.js paths.converse=src/converse-embedded include=converse out=dist/converse-muc-embedded.js optimize=none 
193

194
.PHONY: jsmin
195
jsmin: $(BUILDS)
196

JC Brand's avatar
JC Brand committed
197 198
.PHONY: dist
dist:: build
199

200
.PHONY: build
JC Brand's avatar
JC Brand committed
201
build:: dev css
202
	$(GRUNT) json
203
	make jsmin
JC Brand's avatar
JC Brand committed
204

205 206 207
########################################################################
## Tests

208 209
.PHONY: eslint
eslint: stamp-npm
210 211
	$(ESLINT) src/
	$(ESLINT) spec/
212

JC Brand's avatar
JC Brand committed
213
.PHONY: check
JC Brand's avatar
JC Brand committed
214
check: eslint
215
	LOG_CR_VERBOSITY=INFO $(CHROMIUM) http://localhost:8000/tests.html
JC Brand's avatar
JC Brand committed
216

217 218 219 220

########################################################################
## Documentation

221
.PHONY: html
JC Brand's avatar
JC Brand committed
222
html:
JC Brand's avatar
JC Brand committed
223
	rm -rf $(BUILDDIR)/html
JC Brand's avatar
JC Brand committed
224 225 226 227
	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
	@echo
	@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."

228
.PHONY: html
229 230
doc: html

231
.PHONY: epub
JC Brand's avatar
JC Brand committed
232 233 234 235 236
epub:
	$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
	@echo
	@echo "Build finished. The epub file is in $(BUILDDIR)/epub."

237
.PHONY: changes
JC Brand's avatar
JC Brand committed
238 239 240 241 242
changes:
	$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
	@echo
	@echo "The overview file is in $(BUILDDIR)/changes."

243
.PHONY: linkcheck
JC Brand's avatar
JC Brand committed
244 245 246 247 248
linkcheck:
	$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
	@echo
	@echo "Link check complete; look for any errors in the above output " \
	      "or in $(BUILDDIR)/linkcheck/output.txt."