# @configure_input@

SHELL=/usr/bin/env bash

ifeq (@CROSS_COMPILING@,YES)
CROSS_TOOLSET_RULE:=cross-build-toolset
else
CROSS_TOOLSET_RULE:=
endif

ifeq ($(filter all check unitcheck,$(MAKECMDGOALS)),)
gb_MAKETARGET=build
else
# fail early
gb_MAKETARGET=all
endif

.PHONY : build dev-install all cross-build-toolset install distro-pack-install clean clean-host clean-build distclean findunusedcode

all: build unitcheck
	@echo
	@echo "LibreOffice build succesfully finished :-)"
	@echo
ifeq (@CROSS_COMPILING@,YES)
	@echo "Please consult README.cross how to install it."
else
	@echo "To install, issue: @GNUMAKE@ install"
	@echo "Developers might prefer this way: @GNUMAKE@ dev-install -o build"
	@echo "To run smoketest, issue: @GNUMAKE@ check"
endif
	@echo

build: Makefile dmake/dmake@EXEEXT_FOR_BUILD@ src.downloaded $(CROSS_TOOLSET_RULE)
	@. ./Env.Host.sh && \
		cd instsetoo_native && \
		gb_MAKETARGET=$(gb_MAKETARGET) build.pl -P@BUILD_NCPUS@ --all -- -P@BUILD_MAX_JOBS@

dev-install: build
	@. ./Env.Host.sh && \
            cd smoketestoo_native && \
            build.pl -P@BUILD_NCPUS@ -- -P@BUILD_MAX_JOBS@ && \
            rm -f "@abs_builddir@"/install && \
            ln -s "$$SOLARVER/$$INPATH"/installation/opt/ \
                "@abs_builddir@"/install && \
            printf '\n' && \
            printf \
                '\nDeveloper installation finished, you can now execute:\n\n' \
                && \
            if test `uname -s` = Linux; then \
                printf 'make debugrun\n'; \
            elif test `uname -s` = Darwin; then \
                printf 'open %s/install/LibreOffice.app\n' "@abs_builddir@"; \
            else \
                printf 'cd %s/install/program\n. ./ooenv\n./soffice.bin\n' \
                    "@abs_builddir@"; \
            fi

debugrun:
	@ @GNUMAKE@ -f $(dir $(realpath $(firstword $(MAKEFILE_LIST))))/GNUmakefile.mk debugrun

check : allcheck
	@true

%check:
	@ @GNUMAKE@ -f $(dir $(realpath $(firstword $(MAKEFILE_LIST))))/GNUmakefile.mk -r \
		$(if @VERBOSE@,,-s) --jobs="$(if \
		   $(CHECK_PARALLELISM),$(CHECK_PARALLELISM),@GMAKE_PARALLELISM@)" \
		$(patsubst allcheck,check,$@)

cross-build-toolset:
	@. ./Env.Build.sh && \
	cd cross_toolset && \
	build.pl -P@BUILD_NCPUS@ --all -- -P@BUILD_MAX_JOBS@

install: build
	@. ./Env.Host.sh && \
	echo "Installing in @INSTALLDIR@..." && \
	ooinstall "@INSTALLDIR@" && \
	echo "" && \
	echo "Installation finished, you can now execute:" && \
	echo "@INSTALLDIR@/program/soffice"

distro-pack-install: install
	./bin/distro-install-clean-up
	./bin/distro-install-desktop-integration
	./bin/distro-install-sdk
	./bin/distro-install-file-lists

distclean: clean
ifeq (@BUILD_DMAKE@,YES)
	-test -f dmake/Makefile && $(MAKE) -C dmake distclean
endif
	rm -rf Env.Host.sh Makefile aclocal.m4 autogen.lastrun autom4te.cache \
	bin/repo-list build_env config.log config.status configure \
	desktop/scripts/soffice.sh ooo.lst post_download post_download.log \
	set_soenv set_soenv.last set_soenv.stamp src.downloaded warn

clean: clean-host clean-build

clean-host:
	. ./Env.Host.sh && \
	rm -rf */$$INPATH && \
	rm -rf install

clean-build:
ifeq (@BUILD_DMAKE@,YES)
	. ./Env.Host.sh && \
	(if [ -f dmake/Makefile ] ; then $$GNUMAKE -C dmake clean; fi) && \
	rm -f solenv/*/bin/dmake*
endif
ifeq (@CROSS_COMPILING@,YES)
	. ./Env.Host.sh && \
	rm -rf */$$INPATH_FOR_BUILD
endif

dmake/dmake@EXEEXT_FOR_BUILD@:
	./bootstrap

src.downloaded: ooo.lst download
ifeq (@DO_FETCH_TARBALLS@,YES)
	@. ./Env.Host.sh && \
	$$SRC_ROOT/download $$SRC_ROOT/ooo.lst && touch $@
else
	@echo "Automatic fetching of external tarballs is disabled."
endif

fetch: src.downloaded

ifneq ($(MAKECMDGOALS),clean)
ifneq ($(MAKECMDGOALS),distclean)
Makefile: autogen.lastrun configure.in ooo.lst.in set_soenv.in Makefile.in
	./autogen.sh
endif
endif

id:
	@. ./Env.Host.sh && \
		create-ids

tags:
	@. ./Env.Host.sh && \
		create-tags

docs:
	@. ./Env.Host.sh && \
		mkdocs.sh $$SRC_ROOT/docs $$SOLARENV/inc/doxygen.cfg

findunusedcode:
# experimental callcatcher target
# http://www.skynet.ie/~caolan/Packages/callcatcher.html
	@which callcatcher > /dev/null 2>&1 || \
	 (echo "callcatcher not installed" && false)
	@. ./Env.Host.sh && \
           mkdir -p $$SRC_ROOT/solenv/callcatcher/bin && \
	   ln -sf $$SRC_ROOT/solenv/$$INPATH/bin/dmake \
                  $$SRC_ROOT/solenv/callcatcher/bin/dmake && \
	   source <(sed -e s,$$INPATH,callcatcher,g ./Env.Host.sh) && \
	   . ./solenv/bin/callcatchEnv.Set.sh && \
	   cd instsetoo_native && \
	   build.pl -P@BUILD_NCPUS@ --all -- -P@BUILD_MAX_JOBS@
	@. ./Env.Host.sh && \
	   source <(sed -e s,$$INPATH,callcatcher,g ./Env.Host.sh) && \
	   callanalyse \
		   $$WORKDIR/LinkTarget/*/* \
		   */$$OUTPATH/bin/* \
		   */$$OUTPATH/lib/* > unusedcode.all
#because non-c++ symbols could be dlsymed lets make a list of class level
#unused methods which don't require much effort to determine if they need
#to be just removed, or put behind appropiate platform or debug level ifdefs
	@grep ::.*\( unusedcode.all | grep -v ^cppu:: > unusedcode.easy

#as long as we are not completely gbuildified we need to explicitly depend on the build/install
unitcheck: build
subsequentcheck: dev-install
allcheck : dev-install
#debugrun : dev-install # disabled for now, this dep seems to poison the debugrun !?