# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

SHELL := bash

BUILD_DIR=build
PAR_BUILD_DIR=$(BUILD_DIR)/par
PAR_NAME=factory.par
DESTDIR=$(BUILD_DIR)/image
TARGET_DIR=/usr/local/factory
PYTHON=python

# The list of binaries to install has been moved to misc/symlinks.yaml.

TEST_RUNNER=py/tools/run_tests.py
# Maximum number of parallel tests to run.
MAX_TESTS=$(shell grep -c ^processor /proc/cpuinfo)

FACTORY=$(DESTDIR)/$(TARGET_DIR)
FACTORY_BUNDLE=$(FACTORY)/bundle

PYLINTRC=pylintrc

# Extra arguments to give to the make_par command (e.g., to add
# files from overlays).
MAKE_PAR_ARGS=

# TODO(shik): Re-enable R0801 once flash_firmware.py and
# setup_netboot.py are fixed.
PYLINT_OPTIONS=--rcfile=$(PYLINTRC) --msg-template='{path}:{line}: {msg_id}: {msg}'

LINT_BLACKLIST=\
	py/argparse.py \
	py/gooftool/vblock.py \
	py/goofy/invocation.py \
	py/goofy/prespawner.py \
	py/goofy/test_environment.py \
	py/goofy/updater.py \
	py/goofy/web_socket_manager.py \
	py/hwdb/convert_to_v2_test_files/components_SAMS_TEST-ALFA_1111 \
	py/hwdb/convert_to_v2_test_files/components_SAMS_TEST-BETA_2222 \
	py/hwdb/convert_to_v2_test_files/components_SAMS_TEST-CHARLIE_3333 \
	py/hwdb/convert_to_v2_test_files/components_SAMS_TEST-DELTA_4444 \
	py/hwdb/convert_to_v2_test_files/v15_TEST_FILE \
	py/shopfloor/shopfloor_standalone_unittest.py \
	py/shopfloor/template.py \
	py/system/charge_manager_unittest.py \
	py/test/event.py \
	py/test/gooftools.py \
	py/test/leds.py \
	py/test/line_item_check.py \
	py/test/media_util_unittest.py \
	py/test/pytests/execpython.py \
	py/test/state_machine.py \
	py/test/state.py \
	py/test/state_unittest.py \
	py/test/task.py \
	py/test/ui.py \
	py/test/unicode_to_string.py \
	py/test/unicode_to_string_unittest.py \
	py/test/utils.py \
	py/test/utils_unittest.py \
	py/test/fixture/camera/grid_mapper.py \
	py/minijack/apiclient/% \
	py/minijack/gflags.py \
	py/minijack/gflags_validators.py \
	py/minijack/httplib2/% \
	py/minijack/oauth2client/% \
	py/minijack/uritemplate/% \
	py/proto/%_pb2.py

LINT_FILES=$(shell find py go -name '*.py' -type f | sort)
LINT_WHITELIST=$(filter-out $(LINT_BLACKLIST),$(LINT_FILES))

UNITTESTS=$(shell find py go -name '*_unittest.py' | sort)
# TODO(sheckylin): Get py/test/media_util_unittest.py working.
UNITTESTS_BLACKLIST=\
	py/test/media_util_unittest.py
UNITTESTS_WHITELIST=$(filter-out $(UNITTESTS_BLACKLIST),$(UNITTESTS))
# Tests need to run in isolate mode.

INSTALL_MASK=*.pyc \
	     *_unittest.py \
	     py/doc


# TODO(jsalz): remove the hard-coded path once the icedtea6-bin
# package is fixed and /usr/bin/java works
# (https://bugs.gentoo.org/416341)
default:
	for goofy_path in py/goofy/static; do\
	    env PATH=/opt/icedtea6-bin-1.6.2/bin:$(PATH) \
	        $(MAKE) -C "$${goofy_path}" \
	          $(if $(CLOSURE_LIB_DIR), \
	                CLOSURE_LIB_DIR="$(CLOSURE_LIB_DIR)",) ; \
	done


# Build par (Python archive) file containing all py and pyc files.
par:
	rm -rf $(PAR_BUILD_DIR)
	mkdir -p $(PAR_BUILD_DIR)
	# First build factory.par.
	bin/make_par -v \
	  -o $(PAR_BUILD_DIR)/$(PAR_NAME) \
	  $(MAKE_PAR_ARGS)
	# Sanity check: make sure we can import state using only
	# factory.par.
	PYTHONPATH=$(PAR_BUILD_DIR)/$(PAR_NAME) $(PYTHON) -c \
	  'import cros.factory.test.state'; \
	# Sanity check: make sure we can run "gooftool --help" using
	# factory.par.
	$(PAR_BUILD_DIR)/$(PAR_NAME) gooftool --help | \
	  grep -q '^usage: gooftool'
	$(if $(PAR_DEST_DIR), \
	  cp $(PAR_BUILD_DIR)/$(PAR_NAME) \
	  $(PAR_DEST_DIR))

install:
	mkdir -p $(FACTORY)
	rsync -a --chmod=go=rX $(addprefix --exclude ,$(INSTALL_MASK)) \
	  bin misc py py_pkg sh init $(FACTORY)
	ln -sf bin/gooftool bin/edid bin/hwid_tool ${FACTORY}
	mkdir -m755 -p ${DESTDIR}/var/log
	mkdir -m755 -p $(addprefix ${DESTDIR}/var/factory/,log state tests)
	ln -sf $(addprefix ../factory/log/,factory.log console.log) \
	    ${DESTDIR}/var/log

bundle: par
	# Make factory bundle overlay
	mkdir -p $(FACTORY_BUNDLE)/factory_setup/
	rsync -a --exclude testdata --exclude README.txt \
	  setup/ $(FACTORY_BUNDLE)/factory_setup/
	mkdir -p $(FACTORY_BUNDLE)/shopfloor
	cp -a $(PAR_BUILD_DIR)/$(PAR_NAME) \
	  $(FACTORY_BUNDLE)/shopfloor
	ln -sf $(PAR_NAME) $(FACTORY_BUNDLE)/shopfloor/shopfloor_server
	ln -sf $(PAR_NAME) $(FACTORY_BUNDLE)/shopfloor/manage
	ln -sf $(PAR_NAME) $(FACTORY_BUNDLE)/shopfloor/minijack
	ln -sf $(PAR_NAME) $(FACTORY_BUNDLE)/shopfloor/shopfloor
	mkdir -p $(FACTORY_BUNDLE)/factory_flow
	# Create a dedicated directory for factory flow tools.
	cp -a $(PAR_BUILD_DIR)/$(PAR_NAME) $(FACTORY_BUNDLE)/factory_flow
	ln -sf $(PAR_NAME) $(FACTORY_BUNDLE)/factory_flow/factory_flow
	ln -sf $(PAR_NAME) $(FACTORY_BUNDLE)/factory_flow/finalize_bundle
	ln -sf $(PAR_NAME) $(FACTORY_BUNDLE)/factory_flow/test_factory_flow
	# Archive docs into bundle
	$(MAKE) doc
	cp build/doc.tar.bz2 $(FACTORY_BUNDLE)
	# Install cgpt, used by factory_setup.
	# TODO(jsalz/hungte): Find a better way to do this.
	mkdir -p $(FACTORY_BUNDLE)/factory_setup/bin
	cp /usr/bin/cgpt $(FACTORY_BUNDLE)/factory_setup/bin
	cp /usr/bin/futility $(FACTORY_BUNDLE)/factory_setup/bin

lint:
	@set -e -o pipefail; \
	out=$$(mktemp); \
	echo Linting $(shell echo $(LINT_WHITELIST) | wc -w) files...; \
	if [ -n "$(LINT_WHITELIST)" ] && \
			! env PYTHONPATH=py_pkg:py/minijack:setup \
			pylint $(PYLINT_OPTIONS) $(LINT_WHITELIST) \
	    |& tee $$out; then \
	  echo; \
	  echo To re-lint failed files, run:; \
	  echo make lint LINT_WHITELIST=\""$$( \
	    grep '^\*' $$out | cut -c22- | tr . / | \
	    sed 's/$$/.py/' | tr '\n' ' ' | sed -e 's/ $$//')"\"; \
	  echo; \
	  rm -f $$out; \
	  exit 1; \
	fi; \
	echo ...no lint errors! You are awesome!; \
	rm -f $$out

# Target to lint only files that have changed.  (We allow either
# "smartlint" or "smart_lint".)
smartlint smart_lint:
	bin/smart_lint

# Substitute PRESUBMIT_FILES to relative path (similar to
# GNU realpath "--relative-to=.", but works on non-GNU realpath).
PRESUBMIT_FILES := $(if $(PRESUBMIT_FILES), \
	             $(shell realpath $$PRESUBMIT_FILES | \
		       sed "s'^$$(realpath $$(pwd))/''g"))

chroot-presubmit:
	$(MAKE) -s deps-presubmit
	$(MAKE) -s lint-presubmit
	$(MAKE) -s test-presubmit
	$(MAKE) -s make-factory-package-presubmit

lint-presubmit:
	$(MAKE) lint \
	    LINT_FILES="$(filter %.py,$(PRESUBMIT_FILES))" \
	    2>/dev/null

deps-presubmit:
	@echo "Checking dependency..."
	@if ! py/tools/deps.py $(PRESUBMIT_FILES) ; then \
	    echo "Dependency check failed." ; \
	    echo "Please read py/tools/deps.conf for more information." ; \
	    exit 1; \
	fi

# Check that test_make_factory_package.py has been run, if
# make_factory_package.sh has changed.
make-factory-package-presubmit:
	if [ "$(filter setup/make_factory_package.sh,$(PRESUBMIT_FILES))" ]; \
	then \
	  if [ ! setup/make_factory_package.sh -ot \
	       py/tools/.test_make_factory_package.passed ]; then \
	    echo setup/make_factory_package.sh has changed.; \
	    echo Please run py/tools/test_make_factory_package.py; \
	    echo \(use --help for more information on how to use it if; \
	    echo you do not have access to release repositories\).; \
	    exit 1; \
	  fi; \
	fi

test-presubmit:
	if [ ! -e .tests-passed ]; then \
	    echo 'Unit tests have not passed.  Please run "make test".'; \
	    exit 1; \
	fi
	changed=$$(find $(filter-out doc/%,$(PRESUBMIT_FILES)) \
	    -newer .tests-passed); \
	if [ -n "$$changed" ]; then \
	    echo "Files have changed since last time unit tests passed:"; \
	    echo "$$changed" | sed -e 's/^/  /'; \
	    echo 'Please run "make test" inside chroot.'; \
	    exit 1; \
	fi

presubmit:
	@if [ ! -e /etc/debian_chroot ]; then \
		echo "Running presubmit checks inside chroot..."; \
		cros_sdk PRESUBMIT_FILES="$(PRESUBMIT_FILES)" -- \
		make -C ../platform/factory -s chroot-presubmit; \
	else \
		$(MAKE) -s chroot-presubmit; \
	fi

clean:
	rm -rf $(BUILD_DIR)

test:
        # Run tests with POSIX locale to avoid localized output.
	find . -name '*.pyc' -delete
	@logdir=/tmp/test.logs.$$(date +%Y%m%d_%H%M%S); \
	mkdir $$logdir; \
	echo "Test logs will be written to $$logdir"; \
	test -d "$(CURDIR)/../../private-overlays" \
	    || echo "$$(tput setaf 1)Warning: Private components are missing."\
	            "Some tests are likely to fail without them.$$(tput sgr0)";\
	echo; \
	LC_ALL="C" $(TEST_RUNNER) $(UNITTESTS_WHITELIST) -i $(UNITTESTS_ISOLATE_LIST) \
            -j $(MAX_TESTS) -l $$logdir $(EXTRA_TEST_FLAGS)

# Trick to make sure that overlays are rebuilt every time overlay-xxx is run.
.PHONY: .phony

# Builds an overlay of the given board.  Use "private" to overlay
# factory-private (e.g., to build private API docs).
overlay-%: .phony
	rm -rf $@
	mkdir $@
	rsync -aK --exclude build --exclude overlay-\* ./ $@/
	if [ "$@" = overlay-private ]; then \
	  rsync -aK --exclude Makefile ../factory-private/ $@/; \
	else \
	  rsync -aK ../../private-overlays/\
overlay*-$(subst overlay-,,$@)-private/chromeos-base/chromeos-factory-board/\
files/ $@/; \
	fi

# Tests the overlay of the given board.
test-overlay-%: overlay-%
	make -C $< test && touch .tests-passed

# Lints the overlay of the given board.
lint-overlay-%: overlay-%
	make -C $< lint

testall:
	@make --no-print-directory test EXTRA_TEST_FLAGS=--nofilter

# Regenerates the reg code proto.  TODO(jsalz): Integrate this as a
# "real" part of the build, rather than relying on regenerating it
# only if/when it changes.  This is OK for now since this proto should
# change infrequently or never.
proto:
	protoc proto/reg_code.proto --python_out=py

# Creates build/doc and build/doc.tar.bz2, containing the factory SDK
# docs.
doc: .phony
	# Do the actual build in the "build/docsrc" directory, since we need to
	# munge the docs a bit.
	rm -rf $(BUILD_DIR)/docsrc
	mkdir -p $(BUILD_DIR)/docsrc
	rsync -av doc/ $(BUILD_DIR)/docsrc/
	# Generate rst sources for test cases
	bin/generate_rsts -o $(BUILD_DIR)/docsrc

	make -C $(BUILD_DIR)/docsrc html
	rm -rf $(BUILD_DIR)/doc
	mkdir -p $(BUILD_DIR)/doc
	rsync -a $(BUILD_DIR)/docsrc/_build/ $(BUILD_DIR)/doc/
	cd $(BUILD_DIR) && tar cfj doc.tar.bz2 doc
