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