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