5 PROJECT_NAME = tizen-web-ui-fw
10 PATH := $(CURDIR)/build-tools/bin:$(PATH)
13 JSLINT = jslint --sloppy --eqeq --bitwise --forin --nomen --predef jQuery --color --plusplus --browser --jqmspace
14 COMMON_WIDGET = common
16 OUTPUT_ROOT = $(CURDIR)/build
17 FRAMEWORK_ROOT = ${OUTPUT_ROOT}/${PROJECT_NAME}/${VERSION}
19 LATEST_ROOT = ${OUTPUT_ROOT}/${PROJECT_NAME}/latest
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
28 WIDGETS_DIR = $(CURDIR)/src/widgets
30 THEMES_DIR = $(CURDIR)/src/themes
31 LIBS_DIR = $(CURDIR)/libs
33 COPYING_FILE = $(CURDIR)/COPYING
38 INSTALL_DIR = ${DESTDIR}${PREFIX}
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))
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
51 GEO_VERSION = jquery-geo-1.0a4
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 \
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 \
71 JQUERY_MOBILE_CSS = submodules/jquery-mobile/compiled/jquery.mobile.structure.css \
72 submodules/jquery-mobile/compiled/jquery.mobile.css \
74 JQUERY_MOBILE_IMAGES = submodules/jquery-mobile/css/themes/default/images
76 JQM_VERSION = jquery-mobile-1.1.0
77 JQM_LIB_PATH = $(CURDIR)/libs/js/${JQM_VERSION}
79 JQUERY = jquery-1.7.1.js
80 JQUERY_MIN = $(subst .js,.min.js,$(JQUERY))
85 $(CURDIR)/src/jqm/compiled/jquery.mobile-1.0rc2pre.css \
89 $(CURDIR)/src/jqm/compiled/jquery.mobile-1.0rc2pre.min.css \
94 all: libs_prepare third_party widgets libs_cleanup loader themes version_compat compress
97 # Prepare libs/ build...
98 @@test -d ${LIBS_DIR}.bak && rm -rf ${LIBS_DIR} && mv ${LIBS_DIR}.bak ${LIBS_DIR}; \
99 cp -a ${LIBS_DIR} ${LIBS_DIR}.bak
100 for f in `ls ${LIBS_DIR}/patch/*.patch`; do \
102 echo "Apply patch: $$f"; \
103 cat $$f | patch -p1 -N; \
107 # Cleanup libs/ directory...
108 @@rm -rf ${LIBS_DIR} && mv ${LIBS_DIR}.bak ${LIBS_DIR}
111 # Building jQuery Mobile...
112 cd ${JQM_LIB_PATH} && make js NODE=/usr/bin/node || exit 1; \
113 cp -f ${JQM_LIB_PATH}/compiled/*.js ${JQM_LIB_PATH}/../; \
115 third_party: init jqm
116 # Building third party components...
117 @@cd ${LIBS_DIR}/js; \
118 for f in ${LIBS_JS_FILES}; do \
119 cat $$f >> ${FW_LIB_JS}; \
120 uglifyjs --ascii $$f >> ${FW_LIB_MIN}; \
121 echo "" >> ${FW_LIB_MIN}; \
123 cp ${LIBS_DIR}/js/${JQUERY} ${JS_OUTPUT_ROOT}/jquery.js
124 cp ${LIBS_DIR}/js/${JQUERY_MIN} ${JS_OUTPUT_ROOT}/jquery.min.js
125 @@cd ${LIBS_DIR}/css; \
126 for f in ${LIBS_CSS_FILES}; do \
127 cat $$f >> ${FW_CSS}; \
129 cp -r images/* ${CSS_IMAGES_OUTPUT_DIR}
131 #@@cp -a ${LIBS_DIR}/images ${FRAMEWORK_ROOT}/
134 widgets: init third_party
135 # Building widgets...
136 @@ls -l ${WIDGETS_DIR} | grep '^d' | awk '{print $$NF;}' | \
137 while read REPLY; do \
138 echo " # Building widget $$REPLY"; \
139 if test ${JSLINT_LEVEL} -ge 1; then \
140 if test $$REPLY != ${COMMON_WIDGET}; then \
141 for FNAME in ${WIDGETS_DIR}/$$REPLY/js/*.js; do \
143 if test ${JSLINT_LEVEL} -ge 2 -a $$? -ne 0; then \
149 if test "x${INLINE_PROTO}x" = "x1x"; then \
150 ./tools/inline-protos.sh ${WIDGETS_DIR}/$$REPLY >> ${WIDGETS_DIR}/$$REPLY/js/$$REPLY.js.compiled; \
151 cat ${WIDGETS_DIR}/$$REPLY/js/$$REPLY.js.compiled >> ${FW_JS}; \
153 for f in `find ${WIDGETS_DIR}/$$REPLY -iname 'js/*.js' | sort`; do \
155 cat $$f >> ${FW_JS}; \
158 for f in `find ${WIDGETS_DIR}/$$REPLY -iname '*.js.theme' | sort`; do \
160 cat $$f >> ${FW_JS_THEME}; \
162 for f in `find ${WIDGETS_DIR}/$$REPLY -iname '*.less' | sort`; do \
164 lessc $$f > $$f.css; \
166 for f in `find ${WIDGETS_DIR}/$$REPLY -iname '*.css' | sort`; do \
168 cat $$f >> ${FW_CSS}; \
170 for f in `find ${WIDGETS_DIR}/$$REPLY -iname '*.gif' -or -iname '*.png' -or -iname '*.jpg' | sort`; do \
172 cp $$f ${CSS_IMAGES_OUTPUT_DIR}; \
174 if test "x${INLINE_PROTO}x" != "x1x"; then \
175 for f in `find ${WIDGETS_DIR}/$$REPLY -iname '*.prototype.html' | sort`; do \
177 cp $$f ${PROTOTYPE_HTML_OUTPUT_DIR}; \
183 loader: widgets globalize
184 cat 'src/loader/loader.js' >> ${FW_JS}
188 cat 'libs/js/globalize/lib/globalize.js' >> ${FW_JS}
189 # copy globalize libs...
190 cp -a libs/js/globalize/lib/cultures ${FRAMEWORK_ROOT}/js/
194 make -C src/themes || exit $?
197 compress: widgets loader themes
198 # Javacript code compressing
199 @@echo " # Compressing...."; \
200 echo '/*' > ${FW_MIN}; \
201 cat ${COPYING_FILE} >> ${FW_MIN}; \
202 echo '*/' >> ${FW_MIN}; \
203 uglifyjs --ascii -nc ${FW_JS} >> ${FW_MIN}; \
205 @@cd ${THEME_OUTPUT_ROOT}; \
206 for csspath in */*.css; do \
207 echo "Compressing $$csspath"; \
208 cleancss -o $${csspath/%.css/.min.css} $$csspath; \
213 # Building documentation...
214 @@hash docco 2>&1 /dev/null || (echo "docco not found. Please see README."; exit 1); \
215 ls -l ${WIDGETS_DIR} | grep '^d' | awk '{print $$NF;}' | \
216 while read REPLY; do \
217 echo " # Building docs for widget $$REPLY"; \
218 for f in `find ${WIDGETS_DIR}/$$REPLY -iname '*.js' | sort`; do \
219 docco $$f > /dev/null; \
222 cp docs/docco.custom.css docs/docco.css; \
223 cat docs/index.header > docs/index.html; \
224 for f in `find docs -name '*.html' -not -name index.html | sort`; do \
225 echo "<li><a href=\"$$(basename $$f)\">$$(basename $$f .html)</a></li>" >> docs/index.html; \
227 cat docs/index.footer >> docs/index.html
230 version_compat: third_party widgets
231 # Creating compatible version dirs...
232 for v_compat in ${VERSION_COMPAT}; do \
233 ln -sf ${VERSION} ${FRAMEWORK_ROOT}/../$$v_compat; \
235 ln -sf ${VERSION} ${FRAMEWORK_ROOT}/../latest
238 mkdir -p ${OUTPUT_ROOT}/demos
239 cp -av demos/* ${OUTPUT_ROOT}/demos/
240 cp -f src/template/bootstrap.js ${OUTPUT_ROOT}/demos/gallery/
244 mkdir -p ${INSTALL_DIR}/bin ${INSTALL_DIR}/share/tizen-web-ui-fw/demos/ ${INSTALL_DIR}/share/tizen-web-ui-fw/bin/
245 cp -av ${OUTPUT_ROOT}/tizen-web-ui-fw/* src/template ${INSTALL_DIR}/share/tizen-web-ui-fw/
246 cp -av tools/* ${INSTALL_DIR}/share/tizen-web-ui-fw/bin/
247 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
251 # Checking unit test coverage
252 $(CURDIR)/tests/coverage/instrument.sh
256 # Creating tarball...
258 TMPDIR=$$(mktemp -d tarball.XXXXXXXX); \
259 DESTDIR=$${TMPDIR}/${PROJECT_NAME}; \
261 if test "x${DEBUG}x" = "xnox"; then \
264 TARBALL=${PROJECT_NAME}-${VERSION}-`date +%Y%m%d`$${MIN}.tar.gz; \
265 mkdir -p $${DESTDIR}; \
268 ${THEMES_OUTPUT_ROOT}/tizen/${FW_THEME_CSS_FILE} \
269 ${FW_WIDGET_CSS_FILE} \
270 ${THEMES_OUTPUT_ROOT}/tizen/images \
275 hash git 2>&1 /dev/null && touch $${DESTDIR}/$$(git log | head -n 1 | awk '{print $$2;}'); \
279 --exclude='*.less.css' \
280 --exclude='*.js.compiled' \
281 --exclude='submodules/jquery-mobile' \
282 --exclude='${JQUERY}' \
283 -C $${TMPDIR} ${PROJECT_NAME}; \
288 # Removing destination directory...
289 @@rm -rf ${OUTPUT_ROOT}
290 # Remove generated files...
291 @@rm -f `find . -iname *.less.css`
292 @@rm -f `find . -iname *.js.compiled`
296 # Check build environment...
297 @@hash lessc 2>/dev/null || (echo "lessc not found. Please see HACKING."; exit 1); \
300 @@mkdir -p ${JS_OUTPUT_ROOT}
301 @@mkdir -p ${THEME_OUTPUT_ROOT}
302 @@mkdir -p ${CSS_OUTPUT_ROOT}
303 @@mkdir -p ${CSS_IMAGES_OUTPUT_DIR}
304 @@mkdir -p ${PROTOTYPE_HTML_OUTPUT_DIR}