Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile680
1 files changed, 680 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..de35c8e
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,680 @@
+###############################################################################
+# Global configurations. Protip: set your own overrides in a local.mk file. #
+# #
+# GAIA_DOMAIN : change that if you plan to use a different domain to update #
+# your applications or want to use a local domain #
+# #
+# HOMESCREEN : url of the homescreen to start on #
+# #
+# ADB : if you use a device and plan to send update it with your work #
+# you need to have adb in your path or you can edit this line to#
+# specify its location. #
+# #
+# DEBUG : debug mode enables mode output on the console and disable the #
+# the offline cache. This is mostly for desktop debugging. #
+# #
+# REPORTER : Mocha reporter to use for test output. #
+# #
+# GAIA_APP_SRCDIRS : list of directories to search for web apps #
+# #
+###############################################################################
+-include local.mk
+
+# Headless bot does not need the full output of wget
+# and it can cause crashes in bot.io option is here so
+# -nv can be passed and turn off verbose output.
+WGET_OPTS?=-c
+GAIA_DOMAIN?=gaiamobile.org
+
+DEBUG?=0
+PRODUCTION?=0
+DOGFOOD?=0
+
+LOCAL_DOMAINS?=1
+
+ADB?=adb
+
+ifeq ($(DEBUG),1)
+SCHEME=http://
+else
+SCHEME=app://
+endif
+
+HOMESCREEN?=$(SCHEME)system.$(GAIA_DOMAIN)
+
+BUILD_APP_NAME?=*
+ifneq ($(APP),)
+BUILD_APP_NAME=$(APP)
+endif
+
+REPORTER?=Spec
+
+GAIA_APP_SRCDIRS?=apps test_apps showcase_apps
+GAIA_INSTALL_PARENT?=/data/local
+ADB_REMOUNT?=0
+
+GAIA_ALL_APP_SRCDIRS=$(GAIA_APP_SRCDIRS)
+
+ifeq ($(MAKECMDGOALS), demo)
+GAIA_DOMAIN=thisdomaindoesnotexist.org
+GAIA_APP_SRCDIRS=apps showcase_apps
+else ifeq ($(MAKECMDGOALS), dogfood)
+DOGFOOD=1
+PRODUCTION=1
+B2G_SYSTEM_APPS=1
+else ifeq ($(MAKECMDGOALS), production)
+PRODUCTION=1
+B2G_SYSTEM_APPS=1
+endif
+
+# PRODUCTION is also set for user and userdebug B2G builds
+ifeq ($(PRODUCTION), 1)
+GAIA_APP_SRCDIRS=apps
+ADB_REMOUNT=1
+endif
+
+ifeq ($(MAKECMDGOALS), dogfood)
+GAIA_APP_SRCDIRS=apps dogfood_apps
+endif
+
+ifeq ($(B2G_SYSTEM_APPS), 1)
+GAIA_INSTALL_PARENT=/system/b2g
+endif
+
+ifneq ($(GAIA_OUTOFTREE_APP_SRCDIRS),)
+ $(shell mkdir -p outoftree_apps \
+ $(foreach dir,$(GAIA_OUTOFTREE_APP_SRCDIRS),\
+ $(foreach appdir,$(wildcard $(dir)/*),\
+ && ln -sf $(appdir) outoftree_apps/)))
+ GAIA_APP_SRCDIRS += outoftree_apps
+endif
+
+GAIA_LOCALES_PATH?=locales
+LOCALES_FILE?=shared/resources/languages.json
+GAIA_LOCALE_SRCDIRS=shared $(GAIA_APP_SRCDIRS)
+GAIA_DEFAULT_LOCALE?=en-US
+GAIA_INLINE_LOCALES?=1
+
+###############################################################################
+# The above rules generate the profile/ folder and all its content. #
+# The profile folder content depends on different rules: #
+# 1. webapp manifest #
+# A directory structure representing the applications installed using the #
+# Apps API. In Gaia all applications use this method. #
+# See https://developer.mozilla.org/en/Apps/Apps_JavaScript_API #
+# #
+# 2. offline #
+# An Application Cache database containing Gaia apps, so the phone can be #
+# used offline and application can be updated easily. For details about it#
+# see: https://developer.mozilla.org/en/Using_Application_Cache #
+# #
+# 3. preferences #
+# A preference file used by the platform to configure permissions #
+# #
+###############################################################################
+
+# In debug mode the offline cache is not used (even if it is generated) and
+# Gaia is loaded by a built-in web server via port GAIA_PORT.
+#
+# XXX For now the name of the domain should be mapped to localhost manually
+# by editing /etc/hosts on linux/mac. This steps would not be required
+# anymore once https://bugzilla.mozilla.org/show_bug.cgi?id=722197 will land.
+ifeq ($(DEBUG),1)
+GAIA_PORT?=:8080
+else
+GAIA_PORT?=
+endif
+
+# Force bash for all shell commands since we depend on bash-specific syntax
+SHELL := /bin/bash
+
+# what OS are we on?
+SYS=$(shell uname -s)
+ARCH?=$(shell uname -m)
+MSYS_FIX=
+ifeq (${SYS}/${ARCH},Darwin/i386)
+ARCH=x86_64
+endif
+SEP=/
+ifneq (,$(findstring MINGW32_,$(SYS)))
+CURDIR:=$(shell pwd -W | sed -e 's|/|\\\\|g')
+SEP=\\
+# Mingw mangle path and append c:\mozilla-build\msys\data in front of paths
+MSYS_FIX=/
+endif
+
+ifeq ($(SYS),Darwin)
+MD5SUM = md5 -r
+SED_INPLACE_NO_SUFFIX = /usr/bin/sed -i ''
+DOWNLOAD_CMD = /usr/bin/curl -O
+else
+MD5SUM = md5sum -b
+SED_INPLACE_NO_SUFFIX = sed -i
+DOWNLOAD_CMD = wget $(WGET_OPTS)
+endif
+
+# Test agent setup
+TEST_COMMON=test_apps/test-agent/common
+TEST_AGENT_DIR=tools/test-agent/
+ifeq ($(strip $(NODEJS)),)
+ NODEJS := `which node`
+endif
+
+ifeq ($(strip $(NPM)),)
+ NPM := `which npm`
+endif
+
+TEST_AGENT_CONFIG="./test_apps/test-agent/config.json"
+
+#Marionette testing variables
+#make sure we're python 2.7.x
+ifeq ($(strip $(PYTHON_27)),)
+PYTHON_27 := `which python`
+endif
+PYTHON_FULL := $(wordlist 2,4,$(subst ., ,$(shell $(PYTHON_27) --version 2>&1)))
+PYTHON_MAJOR := $(word 1,$(PYTHON_FULL))
+PYTHON_MINOR := $(word 2,$(PYTHON_FULL))
+MARIONETTE_HOST ?= localhost
+MARIONETTE_PORT ?= 2828
+TEST_DIRS ?= $(CURDIR)/tests
+
+# Generate profile/
+
+profile: multilocale applications-data preferences app-makefiles test-agent-config offline extensions install-xulrunner-sdk profile/settings.json
+ @echo "Profile Ready: please run [b2g|firefox] -profile $(CURDIR)$(SEP)profile"
+
+LANG=POSIX # Avoiding sort order differences between OSes
+
+.PHONY: multilocale
+multilocale:
+ifneq ($(LOCALE_BASEDIR),)
+ $(MAKE) multilocale-clean
+ @echo "Enable locales specified in $(LOCALES_FILE)..."
+ @targets=""; \
+ for appdir in $(GAIA_LOCALE_SRCDIRS); do \
+ targets="$$targets --target $$appdir"; \
+ done; \
+ python $(CURDIR)/build/multilocale.py \
+ --config $(LOCALES_FILE) \
+ --source $(LOCALE_BASEDIR) \
+ $$targets;
+ @echo "Done"
+ifneq ($(LOCALES_FILE),shared/resources/languages.json)
+ cp $(LOCALES_FILE) shared/resources/languages.json
+endif
+endif
+
+.PHONY: multilocale-clean
+multilocale-clean:
+ @echo "Cleaning l10n bits..."
+ifeq ($(wildcard .hg),.hg)
+ @hg update --clean
+ @hg status -n $(GAIA_LOCALE_SRCDIRS) | grep '\.properties' | xargs rm -rf
+else
+ @git ls-files --other --exclude-standard $(GAIA_LOCALE_SRCDIRS) | grep '\.properties' | xargs rm -f
+ @git ls-files --modified $(GAIA_LOCALE_SRCDIRS) | grep '\.properties' | xargs git checkout --
+ifneq ($(DEBUG),1)
+ @# Leave these files modified in DEBUG profiles
+ @git ls-files --modified $(GAIA_LOCALE_SRCDIRS) | grep 'manifest.webapp' | xargs git checkout --
+ @git ls-files --modified $(GAIA_LOCALE_SRCDIRS) | grep '\.ini' | xargs git checkout --
+ @git checkout -- shared/resources/languages.json
+ @echo "Done"
+endif
+endif
+
+app-makefiles:
+ @for d in ${GAIA_APP_SRCDIRS}; \
+ do \
+ for mfile in `find $$d -mindepth 2 -maxdepth 2 -name "Makefile"` ;\
+ do \
+ make -C `dirname $$mfile`; \
+ done; \
+ done;
+
+# Generate profile/webapps/
+# We duplicate manifest.webapp to manifest.webapp and manifest.json
+# to accommodate Gecko builds without bug 757613. Should be removed someday.
+webapp-manifests: install-xulrunner-sdk
+ @mkdir -p profile/webapps
+ @$(call run-js-command, webapp-manifests)
+ @#cat profile/webapps/webapps.json
+
+# Generate profile/webapps/APP/application.zip
+webapp-zip: stamp-commit-hash install-xulrunner-sdk
+ifneq ($(DEBUG),1)
+ @rm -rf apps/system/camera
+ @cp -r apps/camera apps/system/camera
+ @rm apps/system/camera/manifest.webapp
+ @mkdir -p profile/webapps
+ @$(call run-js-command, webapp-zip)
+endif
+
+# Web app optimization steps (like precompling l10n, concatenating js files, etc..).
+webapp-optimize: install-xulrunner-sdk
+ @$(call run-js-command, webapp-optimize)
+
+# Remove temporary l10n files
+optimize-clean: install-xulrunner-sdk
+ @$(call run-js-command, optimize-clean)
+
+# Populate appcache
+offline-cache: webapp-manifests install-xulrunner-sdk
+ @echo "Populate external apps appcache"
+ @$(call run-js-command, offline-cache)
+ @echo "Done"
+
+# Create webapps
+offline: webapp-manifests webapp-optimize webapp-zip optimize-clean
+
+
+# The install-xulrunner target arranges to get xulrunner downloaded and sets up
+# some commands for invoking it. But it is platform dependent
+XULRUNNER_SDK_URL=http://ftp.mozilla.org/pub/mozilla.org/xulrunner/nightly/2012/09/2012-09-20-03-05-43-mozilla-central/xulrunner-18.0a1.en-US.
+
+ifeq ($(SYS),Darwin)
+# For mac we have the xulrunner-sdk so check for this directory
+# We're on a mac
+XULRUNNER_MAC_SDK_URL=$(XULRUNNER_SDK_URL)mac-
+ifeq ($(ARCH),i386)
+# 32-bit
+XULRUNNER_SDK_DOWNLOAD=$(XULRUNNER_MAC_SDK_URL)i386.sdk.tar.bz2
+else
+# 64-bit
+XULRUNNER_SDK_DOWNLOAD=$(XULRUNNER_MAC_SDK_URL)x86_64.sdk.tar.bz2
+endif
+XULRUNNERSDK=./xulrunner-sdk/bin/run-mozilla.sh
+XPCSHELLSDK=./xulrunner-sdk/bin/xpcshell
+
+else ifeq ($(findstring MINGW32,$(SYS)), MINGW32)
+# For windows we only have one binary
+XULRUNNER_SDK_DOWNLOAD=$(XULRUNNER_SDK_URL)win32.sdk.zip
+XULRUNNERSDK=
+XPCSHELLSDK=./xulrunner-sdk/bin/xpcshell
+
+else
+# Otherwise, assume linux
+# downloads and installs locally xulrunner to run the xpchsell
+# script that creates the offline cache
+XULRUNNER_LINUX_SDK_URL=$(XULRUNNER_SDK_URL)linux-
+ifeq ($(ARCH),x86_64)
+XULRUNNER_SDK_DOWNLOAD=$(XULRUNNER_LINUX_SDK_URL)x86_64.sdk.tar.bz2
+else
+XULRUNNER_SDK_DOWNLOAD=$(XULRUNNER_LINUX_SDK_URL)i686.sdk.tar.bz2
+endif
+XULRUNNERSDK=./xulrunner-sdk/bin/run-mozilla.sh
+XPCSHELLSDK=./xulrunner-sdk/bin/xpcshell
+endif
+
+.PHONY: install-xulrunner-sdk
+install-xulrunner-sdk:
+ifndef USE_LOCAL_XULRUNNER_SDK
+ifneq ($(XULRUNNER_SDK_DOWNLOAD),$(shell cat .xulrunner-url 2> /dev/null))
+ rm -rf xulrunner-sdk
+ $(DOWNLOAD_CMD) $(XULRUNNER_SDK_DOWNLOAD)
+ifeq ($(findstring MINGW32,$(SYS)), MINGW32)
+ unzip xulrunner*.zip && rm xulrunner*.zip
+else
+ tar xjf xulrunner*.tar.bz2 && rm xulrunner*.tar.bz2
+endif
+ @echo $(XULRUNNER_SDK_DOWNLOAD) > .xulrunner-url
+endif
+endif # USE_LOCAL_XULRUNNER_SDK
+
+define run-js-command
+ echo "run-js-command $1"; \
+ JS_CONSTS=' \
+ const GAIA_DIR = "$(CURDIR)"; const PROFILE_DIR = "$(CURDIR)$(SEP)profile"; \
+ const GAIA_SCHEME = "$(SCHEME)"; const GAIA_DOMAIN = "$(GAIA_DOMAIN)"; \
+ const DEBUG = $(DEBUG); const LOCAL_DOMAINS = $(LOCAL_DOMAINS); \
+ const HOMESCREEN = "$(HOMESCREEN)"; const GAIA_PORT = "$(GAIA_PORT)"; \
+ const GAIA_APP_SRCDIRS = "$(GAIA_APP_SRCDIRS)"; \
+ const GAIA_LOCALES_PATH = "$(GAIA_LOCALES_PATH)"; \
+ const LOCALES_FILE = "$(LOCALES_FILE)"; \
+ const BUILD_APP_NAME = "$(BUILD_APP_NAME)"; \
+ const PRODUCTION = "$(PRODUCTION)"; \
+ const DOGFOOD = "$(DOGFOOD)"; \
+ const OFFICIAL = "$(MOZILLA_OFFICIAL)"; \
+ const GAIA_DEFAULT_LOCALE = "$(GAIA_DEFAULT_LOCALE)"; \
+ const GAIA_INLINE_LOCALES = "$(GAIA_INLINE_LOCALES)"; \
+ const GAIA_ENGINE = "xpcshell"; \
+ '; \
+ $(XULRUNNERSDK) $(XPCSHELLSDK) -e "$$JS_CONSTS" -f build/utils.js "build/$(strip $1).js"
+endef
+
+# Optional files that may be provided to extend the set of default
+# preferences installed for gaia. If the preferences in these files
+# conflict, the result is undefined.
+EXTENDED_PREF_FILES = \
+ custom-prefs.js \
+ payment-prefs.js \
+ ua-override-prefs.js \
+
+# Generate profile/prefs.js
+preferences: install-xulrunner-sdk
+ @test -d profile || mkdir -p profile
+ @$(call run-js-command, preferences)
+ @$(foreach prefs_file,$(addprefix build/,$(EXTENDED_PREF_FILES)),\
+ if [ -f $(prefs_file) ]; then \
+ cat $(prefs_file) >> profile/user.js; \
+ fi; \
+ )
+
+# Generate profile/
+applications-data: install-xulrunner-sdk
+ test -d profile || mkdir -p profile
+ @$(call run-js-command, applications-data)
+
+# Generate profile/extensions
+EXT_DIR=profile/extensions
+extensions:
+ @mkdir -p profile
+ @rm -rf $(EXT_DIR)
+ifeq ($(DEBUG),1)
+ cp -r tools/extensions $(EXT_DIR)
+endif
+ @echo "Finished: Generating extensions"
+
+
+
+###############################################################################
+# Tests #
+###############################################################################
+
+MOZ_TESTS = "$(MOZ_OBJDIR)/_tests/testing/mochitest"
+INJECTED_GAIA = "$(MOZ_TESTS)/browser/gaia"
+
+TEST_PATH=gaia/tests/${TEST_FILE}
+
+ifeq ($(TESTS),)
+ ifneq ($(APP),)
+ TESTS=$(shell find apps/$(APP)/test/integration/ -name "*_test.js" -type f )
+ else
+ TESTS=$(shell find apps -name "*_test.js" -type f | grep integration)
+ endif
+endif
+.PHONY: test-integration
+test-integration:
+ @./tests/js/bin/runner $(TESTS)
+
+.PHONY: tests
+tests: webapp-manifests offline
+ echo "Checking if the mozilla build has tests enabled..."
+ test -d $(MOZ_TESTS) || (echo "Please ensure you don't have |ac_add_options --disable-tests| in your mozconfig." && exit 1)
+ echo "Checking the injected Gaia..."
+ test -L $(INJECTED_GAIA) || ln -s $(CURDIR) $(INJECTED_GAIA)
+ TEST_PATH=$(TEST_PATH) make -C $(MOZ_OBJDIR) mochitest-browser-chrome EXTRA_TEST_ARGS="--browser-arg=\"\" --extra-profile-file=$(CURDIR)/profile/webapps --extra-profile-file=$(CURDIR)/profile/user.js"
+
+.PHONY: common-install
+common-install:
+ @test -x $(NODEJS) || (echo "Please Install NodeJS -- (use aptitude on linux or homebrew on osx)" && exit 1 )
+ @test -x $(NPM) || (echo "Please install NPM (node package manager) -- http://npmjs.org/" && exit 1 )
+
+ cd $(TEST_AGENT_DIR) && npm install .
+
+.PHONY: update-common
+update-common: common-install
+ # integration tests
+ rm -f tests/vendor/marionette.js
+ cp $(TEST_AGENT_DIR)/node_modules/marionette-client/marionette.js tests/js/vendor/
+
+ # common testing tools
+ mkdir -p $(TEST_COMMON)/vendor/test-agent/
+ mkdir -p $(TEST_COMMON)/vendor/chai/
+ rm -Rf tools/xpcwindow
+ rm -f $(TEST_COMMON)/vendor/test-agent/test-agent*.js
+ rm -f $(TEST_COMMON)/vendor/chai/*.js
+ cp -R $(TEST_AGENT_DIR)/node_modules/xpcwindow tools/xpcwindow
+ rm -R tools/xpcwindow/vendor/
+ cp $(TEST_AGENT_DIR)/node_modules/test-agent/test-agent.js $(TEST_COMMON)/vendor/test-agent/
+ cp $(TEST_AGENT_DIR)/node_modules/test-agent/test-agent.css $(TEST_COMMON)/vendor/test-agent/
+ cp $(TEST_AGENT_DIR)/node_modules/chai/chai.js $(TEST_COMMON)/vendor/chai/
+
+# Create the json config file
+# for use with the test agent GUI
+test-agent-config: test-agent-bootstrap-apps
+ @rm -f $(TEST_AGENT_CONFIG)
+ @touch $(TEST_AGENT_CONFIG)
+ @rm -f /tmp/test-agent-config;
+ @# Build json array of all test files
+ @for d in ${GAIA_APP_SRCDIRS}; \
+ do \
+ find $$d -name '*_test.js' | sed "s:$$d/::g" >> /tmp/test-agent-config; \
+ done;
+ @echo '{"tests": [' >> $(TEST_AGENT_CONFIG)
+ @cat /tmp/test-agent-config | \
+ sed 's:\(.*\):"\1":' | \
+ sed -e ':a' -e 'N' -e '$$!ba' -e 's/\n/,\
+ /g' >> $(TEST_AGENT_CONFIG);
+ @echo ' ]}' >> $(TEST_AGENT_CONFIG);
+ @echo "Finished: test ui config file: $(TEST_AGENT_CONFIG)"
+ @rm -f /tmp/test-agent-config
+
+.PHONY: test-agent-bootstrap-apps
+test-agent-bootstrap-apps:
+ @for d in `find -L ${GAIA_APP_SRCDIRS} -mindepth 1 -maxdepth 1 -type d` ;\
+ do \
+ mkdir -p $$d/test/unit ; \
+ mkdir -p $$d/test/integration ; \
+ cp -f $(TEST_COMMON)/test/boilerplate/_proxy.html $$d/test/unit/_proxy.html; \
+ cp -f $(TEST_COMMON)/test/boilerplate/_sandbox.html $$d/test/unit/_sandbox.html; \
+ done
+ @echo "Finished: bootstrapping test proxies/sandboxes";
+
+# Temp make file method until we can switch
+# over everything in test
+ifneq ($(strip $(APP)),)
+APP_TEST_LIST=$(shell find apps/$(APP)/test/unit -name '*_test.js')
+endif
+.PHONY: test-agent-test
+test-agent-test:
+ifneq ($(strip $(APP)),)
+ @echo 'Running tests for $(APP)';
+ @$(TEST_AGENT_DIR)/node_modules/test-agent/bin/js-test-agent test --reporter $(REPORTER) $(APP_TEST_LIST)
+else
+ @echo 'Running all tests';
+ @$(TEST_AGENT_DIR)/node_modules/test-agent/bin/js-test-agent test --reporter $(REPORTER)
+endif
+
+.PHONY: test-agent-server
+test-agent-server: common-install
+ $(TEST_AGENT_DIR)/node_modules/test-agent/bin/js-test-agent server -c ./$(TEST_AGENT_DIR)/test-agent-server.js --http-path . --growl
+
+.PHONY: marionette
+marionette:
+#need the profile
+ test -d $(GAIA)/profile || $(MAKE) profile
+ifneq ($(PYTHON_MAJOR), 2)
+ @echo "Python 2.7.x is needed for the marionette client. You can set the PYTHON_27 variable to your python2.7 path." && exit 1
+endif
+ifneq ($(PYTHON_MINOR), 7)
+ @echo "Python 2.7.x is needed for the marionette client. You can set the PYTHON_27 variable to your python2.7 path." && exit 1
+endif
+ifeq ($(strip $(MC_DIR)),)
+ @echo "Please have the MC_DIR environment variable point to the top of your mozilla-central tree." && exit 1
+endif
+#if B2G_BIN is defined, we will run the b2g binary, otherwise, we assume an instance is running
+ifneq ($(strip $(B2G_BIN)),)
+ cd $(MC_DIR)/testing/marionette/client/marionette && \
+ sh venv_test.sh $(PYTHON_27) --address=$(MARIONETTE_HOST):$(MARIONETTE_PORT) --b2gbin=$(B2G_BIN) $(TEST_DIRS)
+else
+ cd $(MC_DIR)/testing/marionette/client/marionette && \
+ sh venv_test.sh $(PYTHON_27) --address=$(MARIONETTE_HOST):$(MARIONETTE_PORT) $(TEST_DIRS)
+endif
+
+###############################################################################
+# Utils #
+###############################################################################
+
+# Lint apps
+lint:
+ @# ignore lint on:
+ @# cubevid
+ @# crystalskull
+ @# towerjelly
+ @gjslint --nojsdoc -r apps -e 'homescreen/everything.me,sms/js/ext,pdfjs/content,pdfjs/test,email/js/ext,music/js/ext,calendar/js/ext'
+ @gjslint --nojsdoc -r shared/js
+
+# Generate a text file containing the current changeset of Gaia
+# XXX I wonder if this should be a replace-in-file hack. This would let us
+# let us remove the update-offline-manifests target dependancy of the
+# default target.
+stamp-commit-hash:
+ @(if [ -e gaia_commit_override.txt ]; then \
+ cp gaia_commit_override.txt apps/settings/resources/gaia_commit.txt; \
+ elif [ -d ./.git ]; then \
+ git log -1 --format="%H%n%at" HEAD > apps/settings/resources/gaia_commit.txt; \
+ else \
+ echo 'Unknown Git commit; build date shown here.' > apps/settings/resources/gaia_commit.txt; \
+ date +%s >> apps/settings/resources/gaia_commit.txt; \
+ fi)
+
+# Erase all the indexedDB databases on the phone, so apps have to rebuild them.
+delete-databases:
+ @echo 'Stopping b2g'
+ $(ADB) shell stop b2g
+ $(ADB) shell rm -r $(MSYS_FIX)/data/local/indexedDB/*
+ @echo 'Starting b2g'
+ $(ADB) shell start b2g
+
+# Take a screenshot of the device and put it in screenshot.png
+screenshot:
+ mkdir -p screenshotdata
+ $(ADB) pull $(MSYS_FIX)/dev/graphics/fb0 screenshotdata/fb0
+ dd bs=1920 count=800 if=screenshotdata/fb0 of=screenshotdata/fb0b
+ ffmpeg -vframes 1 -vcodec rawvideo -f rawvideo -pix_fmt rgb32 -s 480x800 -i screenshotdata/fb0b -f image2 -vcodec png screenshot.png
+ rm -rf screenshotdata
+
+# Forward port to use the RIL daemon from the device
+forward:
+ $(ADB) shell touch $(MSYS_FIX)/data/local/rilproxyd
+ $(ADB) shell killall rilproxy
+ $(ADB) forward tcp:6200 localreserved:rilproxyd
+
+
+# update the manifest.appcache files to match what's actually there
+update-offline-manifests:
+ for d in `find -L ${GAIA_APP_SRCDIRS} -mindepth 1 -maxdepth 1 -type d` ;\
+ do \
+ rm -rf $$d/manifest.appcache ;\
+ if [ -f $$d/manifest.webapp ] ;\
+ then \
+ echo \\t$$d ; \
+ ( cd $$d ; \
+ echo "CACHE MANIFEST" > manifest.appcache ;\
+ cat `find * -type f | sort -nfs` | $(MD5SUM) | cut -f 1 -d ' ' | sed 's/^/\#\ Version\ /' >> manifest.appcache ;\
+ find * -type f | grep -v tools | sort >> manifest.appcache ;\
+ $(SED_INPLACE_NO_SUFFIX) -e 's|manifest.appcache||g' manifest.appcache ;\
+ echo "http://$(GAIA_DOMAIN)$(GAIA_PORT)/webapi.js" >> manifest.appcache ;\
+ echo "NETWORK:" >> manifest.appcache ;\
+ echo "http://*" >> manifest.appcache ;\
+ echo "https://*" >> manifest.appcache ;\
+ ) ;\
+ fi \
+ done
+
+
+# If your gaia/ directory is a sub-directory of the B2G directory, then
+# you should use the install-gaia target of the B2G Makefile. But if you're
+# working on just gaia itself, and you already have B2G firmware on your
+# phone, and you have adb in your path, then you can use the install-gaia
+# target to update the gaia files and reboot b2g
+TARGET_FOLDER = webapps/$(BUILD_APP_NAME).$(GAIA_DOMAIN)
+APP_NAME = $(shell cat apps/${BUILD_APP_NAME}/manifest.webapp | grep name | head -1 | cut -d '"' -f 4)
+APP_PID = $(shell adb shell b2g-ps | grep '${APP_NAME}' | tr -s '${APP_NAME}' ' ' | tr -s ' ' ' ' | cut -f 3 -d' ')
+install-gaia: profile
+ $(ADB) start-server
+ @echo 'Stopping b2g'
+ifeq ($(BUILD_APP_NAME),*)
+ $(ADB) shell stop b2g
+else ifeq ($(BUILD_APP_NAME), system)
+ $(ADB) shell stop b2g
+else ifneq (${APP_PID},)
+ $(ADB) shell kill ${APP_PID}
+endif
+ $(ADB) shell rm -r $(MSYS_FIX)/cache/*
+
+ifeq ($(ADB_REMOUNT),1)
+ $(ADB) remount
+endif
+
+ifeq ($(BUILD_APP_NAME),*)
+ python build/install-gaia.py "$(ADB)" "$(MSYS_FIX)$(GAIA_INSTALL_PARENT)"
+else
+ $(ADB) push profile/$(TARGET_FOLDER)/manifest.webapp $(MSYS_FIX)$(GAIA_INSTALL_PARENT)/$(TARGET_FOLDER)/manifest.webapp
+ $(ADB) push profile/$(TARGET_FOLDER)/application.zip $(MSYS_FIX)$(GAIA_INSTALL_PARENT)/$(TARGET_FOLDER)/application.zip
+endif
+ @echo "Installed gaia into profile/."
+ @echo 'Starting b2g'
+ $(ADB) shell start b2g
+
+# Copy demo media to the sdcard.
+# If we've got old style directories on the phone, rename them first.
+install-media-samples:
+ $(ADB) shell 'if test -d /sdcard/Pictures; then mv /sdcard/Pictures /sdcard/DCIM; fi'
+ $(ADB) shell 'if test -d /sdcard/music; then mv /sdcard/music /sdcard/music.temp; mv /sdcard/music.temp /sdcard/Music; fi'
+ $(ADB) shell 'if test -d /sdcard/videos; then mv /sdcard/videos /sdcard/Movies; fi'
+
+ $(ADB) push media-samples/DCIM $(MSYS_FIX)/sdcard/DCIM
+ $(ADB) push media-samples/Movies $(MSYS_FIX)/sdcard/Movies
+ $(ADB) push media-samples/Music $(MSYS_FIX)/sdcard/Music
+
+install-test-media:
+ $(ADB) push test_media/DCIM $(MSYS_FIX)/sdcard/DCIM
+ $(ADB) push test_media/Movies $(MSYS_FIX)/sdcard/Movies
+ $(ADB) push test_media/Music $(MSYS_FIX)/sdcard/Music
+
+dialer-demo:
+ @cp -R apps/contacts apps/dialer
+ @rm apps/dialer/contacts/manifest*
+ @mv apps/dialer/contacts/index.html apps/dialer/contacts/contacts.html
+ @sed -i.bak 's/manifest.appcache/..\/manifest.appcache/g' apps/dialer/contacts/contacts.html
+ @find apps/dialer/ -name '*.bak' -exec rm {} \;
+
+demo: install-media-samples install-gaia
+
+production: reset-gaia
+dogfood: reset-gaia
+
+# Remove everything and install a clean profile
+reset-gaia: purge install-gaia install-settings-defaults
+
+# remove the memories and apps on the phone
+purge:
+ $(ADB) shell stop b2g
+ @(for FILE in `$(ADB) shell ls $(MSYS_FIX)/data/local | tr -d '\r'`; \
+ do \
+ [ $$FILE != 'tmp' ] && $(ADB) shell rm -r $(MSYS_FIX)/data/local/$$FILE; \
+ done);
+ $(ADB) shell rm -r $(MSYS_FIX)/cache/*
+ $(ADB) shell rm -r $(MSYS_FIX)/data/b2g/*
+ $(ADB) shell rm -r $(MSYS_FIX)$(GAIA_INSTALL_PARENT)/webapps
+
+# Build the settings.json file from settings.py
+ifeq ($(NOFTU), 1)
+SETTINGS_ARG=--noftu
+endif
+
+# We want the console to be disabled for device builds using the user variant.
+ifneq ($(TARGET_BUILD_VARIANT),user)
+SETTINGS_ARG += --console
+endif
+
+profile/settings.json: build/settings.py build/wallpaper.jpg
+ python build/settings.py $(SETTINGS_ARG) --locale $(GAIA_DEFAULT_LOCALE) --homescreen $(SCHEME)homescreen.$(GAIA_DOMAIN)$(GAIA_PORT)/manifest.webapp --ftu $(SCHEME)communications.$(GAIA_DOMAIN)$(GAIA_PORT)/manifest.webapp --wallpaper build/wallpaper.jpg --override build/custom-settings.json --output $@
+
+# push profile/settings.json to the phone
+install-settings-defaults: profile/settings.json
+ $(ADB) shell stop b2g
+ $(ADB) remount
+ $(ADB) push profile/settings.json /system/b2g/defaults/settings.json
+ $(ADB) shell start b2g
+
+
+# clean out build products
+clean:
+ rm -rf profile
+
+# clean out build products
+really-clean: clean
+ rm -rf xulrunner-sdk .xulrunner-url
+