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