Export 0.1.43
[framework/web/web-ui-fw.git] / Makefile
1 SHELL := /bin/bash
2
3 ## Project setting
4 DEBUG ?= yes
5 PROJECT_NAME = tizen-web-ui-fw
6 VERSION = 0.1
7 VERSION_COMPAT =
8 THEME_NAME = default
9
10 PATH := $(CURDIR)/build-tools/bin:$(PATH)
11
12 JSLINT_LEVEL = 1
13 JSLINT = jslint --sloppy --eqeq --bitwise --forin --nomen --predef jQuery --color --plusplus --browser --jqmspace
14 COMMON_WIDGET = common
15 INLINE_PROTO = 1
16 OUTPUT_ROOT = $(CURDIR)/build
17 FRAMEWORK_ROOT = ${OUTPUT_ROOT}/${PROJECT_NAME}/${VERSION}
18
19 LATEST_ROOT = ${OUTPUT_ROOT}/${PROJECT_NAME}/latest
20
21 JS_OUTPUT_ROOT = ${FRAMEWORK_ROOT}/js
22 export THEME_OUTPUT_ROOT = ${FRAMEWORK_ROOT}/themes
23 CSS_OUTPUT_ROOT = ${FRAMEWORK_ROOT}/themes/${THEME_NAME}
24 CSS_IMAGES_OUTPUT_DIR = ${CSS_OUTPUT_ROOT}/images
25 WIDGET_CSS_OUTPUT_ROOT = ${FRAMEWORK_ROOT}/widget-css
26 PROTOTYPE_HTML_OUTPUT_DIR = proto-html
27
28 WIDGETS_DIR = $(CURDIR)/src/widgets
29
30 THEMES_DIR = $(CURDIR)/src/themes
31 LIBS_DIR = $(CURDIR)/libs
32
33 COPYING_FILE = $(CURDIR)/COPYING
34
35 DESTDIR ?=
36
37 PREFIX ?= /usr
38 INSTALL_DIR = ${DESTDIR}${PREFIX}
39
40 FW_JS = ${JS_OUTPUT_ROOT}/${PROJECT_NAME}.js
41 FW_MIN = $(subst .js,.min.js,$(FW_JS))
42 FW_LIB_JS = ${JS_OUTPUT_ROOT}/${PROJECT_NAME}-libs.js
43 FW_LIB_MIN = $(subst .js,.min.js,$(FW_LIB_JS))
44
45 FW_JS_THEME = ${JS_OUTPUT_ROOT}/${PROJECT_NAME}-${THEME_NAME}-theme.js
46 FW_CSS = ${CSS_OUTPUT_ROOT}/${PROJECT_NAME}-theme.css
47 FW_LIBS_JS = ${JS_OUTPUT_ROOT}/${PROJECT_NAME}-libs.js
48 FW_THEME_CSS_FILE = ${PROJECT_NAME}-theme.css
49 FW_WIDGET_CSS_FILE = ${WIDGET_CSS_OUTPUT_ROOT}/${PROJECT_NAME}-widget.css
50
51 GEO_VERSION = jquery-geo-1.0a4
52
53 LIBS_JS_FILES = jlayout/jquery.sizes.js \
54                                 jlayout/jlayout.border.js \
55                                 jlayout/jlayout.grid.js \
56                                 jlayout/jlayout.flexgrid.js \
57                                 jlayout/jlayout.flow.js \
58                                 jlayout/jquery.jlayout.js \
59                                 jquery.easing.1.3.js \
60                                 jquery.tmpl.js \
61                                 jquery.mobile.js \
62                                 ${GEO_VERSION}/js/jquery.geo.head.js \
63                                 ${GEO_VERSION}/js/jquery.mousewheel.js \
64                                 ${GEO_VERSION}/js/jquery.geo.core.js \
65                                 ${GEO_VERSION}/js/jquery.geo.geographics.js \
66                                 ${GEO_VERSION}/js/jquery.geo.geomap.js \
67                                 ${GEO_VERSION}/js/jquery.geo.tiled.js \
68                                 ${GEO_VERSION}/js/jquery.geo.shingled.js \
69                 $(NULL)
70
71 JQUERY_MOBILE_CSS = submodules/jquery-mobile/compiled/jquery.mobile.structure.css \
72                     submodules/jquery-mobile/compiled/jquery.mobile.css \
73                     $(NULL)
74 JQUERY_MOBILE_IMAGES = submodules/jquery-mobile/css/themes/default/images
75
76 JQM_VERSION = jquery-mobile-1.1.0
77 JQM_LIB_PATH = $(CURDIR)/libs/js/${JQM_VERSION}
78
79 ifeq (${DEBUG},yes)
80 JQUERY = jquery-1.7.1.js
81 else
82 LIBS_JS_FILES +=\
83         jquery.mobile.min.js \
84     $(NULL)
85 JQUERY = jquery-1.7.1.min.js
86 endif
87
88 LIBS_CSS_FILES =
89 ifeq (${DEBUG},yes)
90 LIBS_CSS_FILES +=\
91     $(CURDIR)/src/jqm/compiled/jquery.mobile-1.0rc2pre.css \
92     $(NULL)
93 else
94 LIBS_CSS_FILES +=\
95     $(CURDIR)/src/jqm/compiled/jquery.mobile-1.0rc2pre.min.css \
96     $(NULL)
97 endif
98
99
100 all: libs_prepare third_party widgets libs_cleanup loader themes version_compat compress
101
102 libs_prepare:
103         # Prepare libs/ build...
104         @@test -d ${LIBS_DIR}.bak && rm -rf ${LIBS_DIR} && mv ${LIBS_DIR}.bak ${LIBS_DIR}; \
105         cp -a ${LIBS_DIR} ${LIBS_DIR}.bak
106         for f in `ls ${LIBS_DIR}/patch/*.patch`; do \
107                 cd $(CURDIR); \
108                 echo "Apply patch: $$f";  \
109                 cat $$f | patch -p1 -N; \
110         done; \
111
112 libs_cleanup:
113         # Cleanup libs/ directory...
114         @@rm -rf ${LIBS_DIR} && mv ${LIBS_DIR}.bak ${LIBS_DIR}
115
116 jqm: init
117         # Building jQuery Mobile...
118         cd ${JQM_LIB_PATH} && make js NODE=/usr/bin/node || exit 1; \
119         cp -f ${JQM_LIB_PATH}/compiled/*.js ${JQM_LIB_PATH}/../; \
120
121 third_party: init jqm
122         # Building third party components...
123         @@cd ${LIBS_DIR}/js; \
124             for f in ${LIBS_JS_FILES}; do \
125                 cat $$f >> ${FW_LIB_JS}; \
126                 uglifyjs --ascii $$f >> ${FW_LIB_MIN}; \
127                 echo "" >> ${FW_LIB_MIN}; \
128             done; \
129             cp ${LIBS_DIR}/js/${JQUERY} ${JS_OUTPUT_ROOT}/jquery.js
130         @@cd ${LIBS_DIR}/css; \
131             for f in ${LIBS_CSS_FILES}; do \
132                 cat $$f >> ${FW_CSS}; \
133             done; \
134             cp -r images/* ${CSS_IMAGES_OUTPUT_DIR}
135
136         #@@cp -a ${LIBS_DIR}/images ${FRAMEWORK_ROOT}/
137
138
139 widgets: init third_party
140         # Building widgets...
141         @@ls -l ${WIDGETS_DIR} | grep '^d' | awk '{print $$NF;}' | \
142             while read REPLY; do \
143                 echo "  # Building widget $$REPLY"; \
144                         if test ${JSLINT_LEVEL} -ge 1; then \
145                                 if test $$REPLY != ${COMMON_WIDGET}; then \
146                                         for FNAME in ${WIDGETS_DIR}/$$REPLY/js/*.js; do \
147                                                 ${JSLINT} $$FNAME; \
148                                                 if test ${JSLINT_LEVEL} -ge 2 -a $$? -ne 0; then \
149                                                         exit 1; \
150                                                 fi; \
151                                         done; \
152                                 fi; \
153                         fi; \
154                         if test "x${INLINE_PROTO}x" = "x1x"; then \
155                                 ./tools/inline-protos.sh ${WIDGETS_DIR}/$$REPLY >> ${WIDGETS_DIR}/$$REPLY/js/$$REPLY.js.compiled; \
156                                 cat ${WIDGETS_DIR}/$$REPLY/js/$$REPLY.js.compiled >> ${FW_JS}; \
157                         else \
158                                 for f in `find ${WIDGETS_DIR}/$$REPLY -iname 'js/*.js' | sort`; do \
159                                         echo "          $$f"; \
160                                         cat $$f >> ${FW_JS}; \
161                                 done; \
162             fi; \
163                 for f in `find ${WIDGETS_DIR}/$$REPLY -iname '*.js.theme' | sort`; do \
164                     echo "              $$f"; \
165                     cat $$f >> ${FW_JS_THEME}; \
166                 done; \
167                 for f in `find ${WIDGETS_DIR}/$$REPLY -iname '*.less' | sort`; do \
168                     echo "              $$f"; \
169                     lessc $$f > $$f.css; \
170                 done; \
171                 for f in `find ${WIDGETS_DIR}/$$REPLY -iname '*.css' | sort`; do \
172                     echo "              $$f"; \
173                     cat $$f >> ${FW_CSS}; \
174                 done; \
175                 for f in `find ${WIDGETS_DIR}/$$REPLY -iname '*.gif' -or -iname '*.png' -or -iname '*.jpg' | sort`; do \
176                     echo "              $$f"; \
177                     cp $$f ${CSS_IMAGES_OUTPUT_DIR}; \
178                 done; \
179                 if test "x${INLINE_PROTO}x" != "x1x"; then \
180                   for f in `find ${WIDGETS_DIR}/$$REPLY -iname '*.prototype.html' | sort`; do \
181                       echo "            $$f"; \
182                       cp $$f ${PROTOTYPE_HTML_OUTPUT_DIR}; \
183                   done; \
184                 fi; \
185             done
186
187
188 loader: widgets globalize
189         cat 'src/loader/loader.js' >> ${FW_JS}
190
191
192 globalize: widgets
193         cat 'libs/js/globalize/lib/globalize.js' >> ${FW_JS}
194         # copy globalize libs...
195         cp -a libs/js/globalize/lib/cultures ${FRAMEWORK_ROOT}/js/
196
197
198 themes:
199         make -C src/themes || exit $?
200
201
202 compress: widgets loader themes
203         # Javacript code compressing
204         @@echo "        # Compressing...."; \
205         echo '/*' > ${FW_MIN}; \
206         cat ${COPYING_FILE} >> ${FW_MIN}; \
207         echo '*/' >> ${FW_MIN}; \
208         uglifyjs --ascii -nc ${FW_JS} >> ${FW_MIN}; \
209         # CSS compressing
210         @@cd ${THEME_OUTPUT_ROOT}; \
211         for csspath in */*.css; do \
212                 echo "Compressing $$csspath"; \
213                 cleancss -o $${csspath/%.css/.min.css} $$csspath; \
214         done
215
216
217 docs: init
218         # Building documentation...
219         @@hash docco 2>&1 /dev/null || (echo "docco not found. Please see README."; exit 1); \
220         ls -l ${WIDGETS_DIR} | grep '^d' | awk '{print $$NF;}' | \
221         while read REPLY; do \
222                 echo "  # Building docs for widget $$REPLY"; \
223                 for f in `find ${WIDGETS_DIR}/$$REPLY -iname '*.js' | sort`; do \
224                         docco $$f > /dev/null; \
225                 done; \
226         done; \
227         cp docs/docco.custom.css docs/docco.css; \
228         cat docs/index.header > docs/index.html; \
229         for f in `find docs -name '*.html' -not -name index.html | sort`; do \
230                 echo "<li><a href=\"$$(basename $$f)\">$$(basename $$f .html)</a></li>" >> docs/index.html; \
231         done; \
232         cat docs/index.footer >> docs/index.html
233
234
235 version_compat: third_party widgets
236         # Creating compatible version dirs...
237         for v_compat in ${VERSION_COMPAT}; do \
238                 ln -sf ${VERSION} ${FRAMEWORK_ROOT}/../$$v_compat; \
239         done;
240         ln -sf ${VERSION} ${FRAMEWORK_ROOT}/../latest
241
242 demo: widgets 
243         mkdir -p ${OUTPUT_ROOT}/demos
244         cp -av demos/* ${OUTPUT_ROOT}/demos/
245         cp -f src/template/bootstrap.js ${OUTPUT_ROOT}/demos/gallery/
246
247
248 install: all
249         mkdir -p ${INSTALL_DIR}/bin ${INSTALL_DIR}/share/tizen-web-ui-fw/demos/ ${INSTALL_DIR}/share/tizen-web-ui-fw/bin/
250         cp -av ${OUTPUT_ROOT}/tizen-web-ui-fw/* src/template ${INSTALL_DIR}/share/tizen-web-ui-fw/
251         cp -av tools/* ${INSTALL_DIR}/share/tizen-web-ui-fw/bin/
252         cp -av demos/tizen-winsets ${INSTALL_DIR}/share/tizen-web-ui-fw/demos/ && cd ${INSTALL_DIR}/share/tizen-web-ui-fw/demos/tizen-winsets && sed -i -e "s#../../build#../../..#g" *.html
253
254
255 coverage: clean all
256         # Checking unit test coverage
257         $(CURDIR)/tests/coverage/instrument.sh
258
259
260 dist: clean all docs
261         # Creating tarball...
262         @@ \
263         TMPDIR=$$(mktemp -d tarball.XXXXXXXX); \
264         DESTDIR=$${TMPDIR}/${PROJECT_NAME}; \
265         MIN=''; \
266         if test "x${DEBUG}x" = "xnox"; then \
267                 MIN='.min'; \
268         fi; \
269         TARBALL=${PROJECT_NAME}-${VERSION}-`date +%Y%m%d`$${MIN}.tar.gz; \
270         mkdir -p $${DESTDIR}; \
271         cp -a ${FW_JS} \
272                 ${FW_LIBS_JS} \
273                 ${THEMES_OUTPUT_ROOT}/tizen/${FW_THEME_CSS_FILE} \
274                 ${FW_WIDGET_CSS_FILE} \
275                 ${THEMES_OUTPUT_ROOT}/tizen/images \
276                 docs \
277                 README.md \
278                 COPYING \
279                 $${DESTDIR}; \
280         hash git 2>&1 /dev/null && touch $${DESTDIR}/$$(git log | head -n 1 | awk '{print $$2;}'); \
281         tar cfzps \
282                 $${TARBALL} \
283                 --exclude='.git' \
284                 --exclude='*.less.css' \
285                 --exclude='*.js.compiled' \
286                 --exclude='submodules/jquery-mobile' \
287                 --exclude='${JQUERY}' \
288                 -C $${TMPDIR} ${PROJECT_NAME}; \
289         rm -rf $${TMPDIR}
290
291
292 clean:
293         # Removing destination directory...
294         @@rm -rf ${OUTPUT_ROOT}
295         # Remove generated files...
296         @@rm -f `find . -iname *.less.css`
297         @@rm -f `find . -iname *.js.compiled`
298
299
300 init: clean
301         # Check build environment...
302         @@hash lessc 2>/dev/null || (echo "lessc not found. Please see HACKING."; exit 1); \
303
304         # Initializing...
305         @@mkdir -p ${JS_OUTPUT_ROOT}
306         @@mkdir -p ${THEME_OUTPUT_ROOT}
307         @@mkdir -p ${CSS_OUTPUT_ROOT}
308         @@mkdir -p ${CSS_IMAGES_OUTPUT_DIR}
309         @@mkdir -p ${PROTOTYPE_HTML_OUTPUT_DIR}
310         @@rm -f docs/*.html