| # -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- |
| |
| .PHONY : all bootstrap build check clean clean-build clean-host dev-install distclean distro-pack-install docs download fetch findunusedcode get-submodules id install install-strip install-tb subsequentcheck tags |
| |
| ifeq ($(MAKECMDGOALS),) |
| MAKECMDGOALS:=all |
| endif |
| |
| all: build |
| |
| SHELL=/usr/bin/env bash |
| SRCDIR:=$(patsubst %/,%,$(dir $(realpath $(firstword $(MAKEFILE_LIST))))) |
| |
| ifeq ($(gb_Side),) |
| gb_Side:=host |
| endif |
| |
| include $(SRCDIR)/config_$(gb_Side).mk |
| |
| ifeq ($(GMAKE_OPTIONS),) |
| ifeq ($(verbose)$(VERBOSE),) |
| export GMAKE_OPTIONS:=-rs |
| else |
| export GMAKE_OPTIONS:=-r |
| endif |
| endif |
| |
| # This list tells which modules are gbuild ones. It does *not* tell which modules to build. That is directed |
| # by the module being mentioned in packimages/prj/build.lst, etc, recursively. |
| $(WORKDIR)/modules.mk: $(wildcard */Module_*.mk) $(wildcard */prj/dmake) $(SRCDIR)/config_host.mk |
| mkdir -p $(dir $@) |
| echo "gbuild_modules:= tail_build \\" > $@ |
| for m in */Module_*.mk; do echo $$m | sed -e 's/\/.*$$/ \\/'; done >> $@ |
| echo >> $@ |
| echo -n "dmake_modules:= " >> $@ |
| for m in */prj/dmake; do echo $$m | sed -e 's/\/.*$$/ \\/'; done >> $@ |
| echo >> $@ |
| |
| include $(WORKDIR)/modules.mk |
| include $(SRCDIR)/solenv/gbuild/Output.mk |
| $(if $(filter $(gbuild_modules),$(dmake_modules)),$(eval $(call gb_Output_warn,The following modules claim to be both dmake and gbuild: $(filter $(gbuild_modules),$(dmake_modules))))) |
| |
| export gb_TAILBUILDTARGET=all slowcheck |
| |
| define gbuild_module_rules |
| .PHONY: $(1) $(1).all $(1).build $(1).check $(1).clean $(1).subsequentcheck $(1).deliver |
| |
| $(1): bootstrap fetch |
| cd $(1) && $(GNUMAKE) -j $(PARALLELISM) $(GMAKE_OPTIONS) gb_PARTIALBUILD=T |
| |
| $(1).all: bootstrap fetch |
| $$(if $$(filter $(1),$$(shell $(GNUMAKE) -r -f $(SRCDIR)/tail_build/Makefile showmodules)), \ |
| cd tail_build && unset MAKEFLAGS && \ |
| export gb_TAILBUILDTARGET="$(WORKDIR)/Module/$(1) $(WORKDIR)/Module/check/$(1) $(WORKDIR)/Module/slowcheck/$(1)" && \ |
| , \ |
| cd $(1) && unset MAKEFLAGS && \ |
| ) \ |
| $(SOLARENV)/bin/build.pl -P$(PARALLELISM) --all -- -P$(PARALLELISM) |
| |
| $(1).build $(1).check $(1).clean: |
| cd $(1) && $(GNUMAKE) -j $(PARALLELISM) $(GMAKE_OPTIONS) $$(patsubst $(1).%,%,$$@) gb_PARTIALBUILD=T |
| |
| $(1).subsequentcheck: |
| cd $(1) && $(GNUMAKE) -j $(CHECK_PARALLELISM) $(GMAKE_OPTIONS) subsequentcheck gb_PARTIALBUILD=T |
| |
| $(1).deliver: |
| @true |
| |
| endef |
| |
| define gbuild_modules_rules |
| $(foreach m,$(1),$(call gbuild_module_rules,$(m))) |
| endef |
| |
| define dmake_module_rules |
| .PHONY: $(1) $(1).all $(1).deliver $(1).clean |
| |
| $(1): bootstrap fetch |
| cd $(1) && unset MAKEFLAGS && \ |
| $(SOLARENV)/bin/build.pl -P$(PARALLELISM) -- -P$(PARALLELISM) |
| |
| $(1).all: bootstrap fetch |
| cd $(1) && unset MAKEFLAGS && \ |
| $(SOLARENV)/bin/build.pl -P$(PARALLELISM) --all -- -P$(PARALLELISM) |
| |
| $(1).deliver: $(1) |
| cd $(1) && $(SOLARENV)/bin/deliver.pl |
| |
| $(1).clean: |
| cd $(1) && $(SOLARENV)/bin/deliver.pl -delete |
| rm -fr $(1)/$(INPATH) |
| |
| endef |
| |
| define dmake_modules_rules |
| $(foreach m,$(1),$(call dmake_module_rules,$(m))) |
| endef |
| |
| # |
| # Partial Build |
| # |
| $(eval $(call gbuild_modules_rules,$(gbuild_modules))) |
| |
| $(eval $(call dmake_modules_rules,$(dmake_modules))) |
| |
| # run a JunitTest - relies on naming convention (module prefix) |
| $(WORKDIR)/JunitTest/%/done : |
| cd $(firstword $(subst _, ,$*)) && $(GNUMAKE) $(GMAKE_OPTIONS) $@ gb_PARTIALBUILD=T |
| |
| # run a CppunitTest - relies on naming convention (module prefix) |
| $(WORKDIR)/CppunitTest/%.test : |
| cd $(firstword $(subst _, ,$*)) && $(GNUMAKE) $(GMAKE_OPTIONS) $@ gb_PARTIALBUILD=T |
| |
| # |
| # Clean |
| # |
| clean: clean-host clean-build |
| |
| clean-host: |
| ifeq ($(BUILD_DMAKE),YES) |
| if [ -f dmake/Makefile ] ; then $(GNUMAKE) -j $(PARALLELISM) -C dmake clean; fi |
| endif |
| rm -fr $(DEVINSTALLDIR) |
| rm -fr $(OUTDIR) |
| rm -fr $(WORKDIR) |
| rm -fr $(SRCDIR)/*/$(INPATH) |
| rm -fr $(SRCDIR)/solenv/$(OUTPATH) |
| rm -fr install |
| |
| clean-build: |
| ifeq ($(CROSS_COMPILING),YES) |
| rm -rf $(SOLARVER)/$(INPATH_FOR_BUILD) # not necessarily below SRCDIR |
| rm -rf $(SRCDIR)/*/$(INPATH_FOR_BUILD) |
| endif |
| |
| include $(SRCDIR)/compilerplugins/Makefile.mk |
| |
| # |
| # Distclean |
| # |
| distclean : clean compilerplugins-clean |
| ifeq ($(BUILD_DMAKE),YES) |
| (if [ -f dmake/Makefile ] ; then $(GNUMAKE) -j $(PARALLELISM) -C dmake distclean; fi) && \ |
| rm -f solenv/*/bin/dmake* |
| endif |
| rm -fr config_host.mk config_build.mk aclocal.m4 autom4te.cache \ |
| config.log config.status configure \ |
| config_host.mk.last config_host.mk.stamp src.downloaded warn |
| find $(SOLARENV)/gdb -name "*.pyc" -exec rm {} \; |
| |
| # |
| # custom command |
| # |
| ifneq ( $(MAKECMDGOALS),cmd) |
| cmd: |
| echo "custom cmd" && ( $(cmd) ) |
| |
| endif |
| |
| ifneq ($(filter-out clean distclean,$(MAKECMDGOALS)),) |
| # |
| # Fetch |
| # |
| ifneq ($(DO_FETCH_TARBALLS),NO) |
| include $(SRCDIR)/Makefile.fetch |
| fetch: download |
| fetch: get-submodules |
| fetch: $(SRCDIR)/src.downloaded |
| |
| ifneq (,$(wildcard .git)) |
| get-submodules: |
| ifneq ($(foreach i,$(GIT_NEEDED_SUBMODULES),$(i)/.git),$(wildcard $(foreach i,$(GIT_NEEDED_SUBMODULES),$(i)/.git))) |
| ifeq (,$(GIT_LINK_SRC)) |
| ./g -f clone |
| else # space-saving clone from another local workdir |
| @echo "FIXME: GIT_LINK_SRC method is not yet implemented with submodules" 1>&2 |
| true $(foreach i,$(GIT_NEEDED_SUBMODULES),\ |
| && rm -r $(i) && cp -R $(GIT_LINK_SRC)/$(i) $(i)) |
| # bin/git-new-workdir $GIT_LINK_SRC/$i $i |
| git submodule update $(GIT_NEEDED_SUBMODULES) |
| endif |
| endif |
| |
| else # these sources are from a tarball, so get the other source tarballs |
| gb_LO_VER := $(shell . $(SRCDIR)/sources.ver && echo $$lo_sources_ver) |
| $(if $(gb_LO_VER),,$(error Error while retrieving $$lo_sources_ver from $(SRCDIR)/sources.ver)) |
| |
| get-submodules: | download |
| ifneq ($(foreach i,$(subst helpcontent2,help,$(GIT_NEEDED_SUBMODULES)),$(SRCDIR)/src/libreoffice-$(i)-$(gb_LO_VER)),$(wildcard $(foreach i,$(subst helpcontent2,help,$(GIT_NEEDED_SUBMODULES)),$(SRCDIR)/src/libreoffice-$(i)-$(gb_LO_VER)))) |
| $(foreach i,$(subst helpcontent2,help,$(GIT_NEEDED_SUBMODULES)),\ |
| $(call fetch_Download_item,http://download.documentfoundation.org/libreoffice/src/$(shell echo $(gb_LO_VER) | sed -e "s/\([0-9]*\.[0-9]*\.[0-9]*\).*/\1/"),libreoffice-$(i)-$(gb_LO_VER).tar.xz,no-check)) |
| $(SRCDIR)/bin/unpack-sources $(SRCDIR) $(foreach i,$(subst helpcontent2,help,$(GIT_NEEDED_SUBMODULES)),\ |
| $(TARFILE_LOCATION)/libreoffice-$(i)-$(gb_LO_VER).tar.xz) |
| endif |
| |
| endif |
| |
| # TODO: This should be really in external/ module, I think. |
| $(SRCDIR)/src.downloaded : $(SRCDIR)/download $(SRCDIR)/config_host.mk | download |
| ifeq ($(COM),MSC) |
| $< && touch $@ |
| endif |
| |
| else |
| fetch: |
| @echo "Automatic fetching of external tarballs is disabled." |
| |
| endif |
| |
| # |
| # Bootstap |
| # |
| bootstrap: $(WORKDIR)/bootstrap compilerplugins |
| |
| $(WORKDIR)/bootstrap: |
| @cd $(SRCDIR) && ./bootstrap |
| @mkdir -p $(dir $@) && touch $@ |
| |
| # |
| # Build |
| # |
| build-packimages: bootstrap fetch $(if $(filter $(INPATH),$(INPATH_FOR_BUILD)),,cross-toolset) |
| ifeq ($(DISABLE_SCRIPTING),TRUE) |
| # We must get the headers from vbahelper "delivered" because |
| # as we don't link to any libs from there they won't otherwise be, or |
| # something. And we still do include those headers always even if the |
| # libs aren't built in the --disable-scripting case. (Ifdefs for |
| # DISABLE_SCRIPTING will be added to the code later as necessary.) |
| $(GNUMAKE) vbahelper |
| endif |
| ifeq ($(DISABLE_DBCONNECTIVITY),TRUE) |
| # Ditto for dbconnectivity in the --disable-database-connectivity case |
| cd connectivity && sed -e 's/^\(export [A-Z0-9_]*=\)\(.*\)$$/\1"\2"/' <../config_host.mk >conftmp.sh && . conftmp.sh && rm conftmp.sh && $(SOLARENV)/bin/deliver.pl |
| endif |
| cd packimages && unset MAKEFLAGS && \ |
| $(SOLARENV)/bin/build.pl -P$(PARALLELISM) --all -- -P$(PARALLELISM) && \ |
| $(GNUMAKE) -j $(PARALLELISM) $(GMAKE_OPTIONS) |
| |
| build: build-packimages |
| ifeq ($(OS_FOR_BUILD),WNT) |
| cd instsetoo_native && unset MAKEFLAGS && $(SOLARENV)/bin/build.pl |
| else |
| cd instsetoo_native && unset MAKEFLAGS && \ |
| $(SOLARENV)/bin/build.pl -P$(PARALLELISM) -- -P$(PARALLELISM) |
| endif |
| ifeq ($(OS),ANDROID) |
| cd android && $(GNUMAKE) -j $(PARALLELISM) $(GMAKE_OPTIONS) |
| endif |
| |
| build-nocheck : export SKIP_TESTS := YES |
| build-nocheck : build |
| |
| cross-toolset: bootstrap fetch |
| cd cross_toolset && $(GNUMAKE) -j $(PARALLELISM) $(GMAKE_OPTIONS) |
| ifneq (,$(filter DESKTOP,$(BUILD_TYPE))) |
| ifneq (WNT,$(OS)) |
| # We need to build nss for nsinstall... See NSINSTALL=... in nss/makefile.mk |
| $(GNUMAKE) gb_Side=build nss |
| endif |
| endif |
| |
| # |
| # Install |
| # |
| |
| install: |
| echo "Installing in $(INSTALLDIR)..." && \ |
| ooinstall "$(INSTALLDIR)" && \ |
| echo "" && \ |
| echo "Installation finished, you can now execute:" && \ |
| echo "$(INSTALLDIR)/program/soffice" |
| |
| install-strip: |
| echo "Installing and stripping binaries in $(INSTALLDIR)..." && \ |
| ooinstall --strip "$(INSTALLDIR)" && \ |
| echo "" && \ |
| echo "Installation finished, you can now execute:" && \ |
| echo "$(INSTALLDIR)/program/soffice" |
| |
| dev-install: build |
| @rm -rf $(DEVINSTALLDIR) |
| @mkdir $(DEVINSTALLDIR) |
| ifeq ($(OS_FOR_BUILD),WNT) |
| cd instsetoo_native && unset MAKEFLAGS && $(SOLARENV)/bin/build.pl LIBO_DEV_INSTALL=TRUE |
| unzip -q -d "$(DEVINSTALLDIR)" "$(SRCDIR)/instsetoo_native/$(INPATH)/LibreOffice/archive/install/en-US/LibreOffice*_archive.zip" |
| mv "$(DEVINSTALLDIR)"/LibreOffice*_archive/* "$(DEVINSTALLDIR)"/opt |
| else |
| ifeq ($(DISABLE_LINKOO),TRUE) |
| @ooinstall $(DEVINSTALLDIR)/opt |
| @install-gdb-printers -L |
| else |
| @ooinstall -l $(DEVINSTALLDIR)/opt |
| endif |
| endif |
| @rm -f $(SRCDIR)/install && ln -s $(DEVINSTALLDIR)/opt/ $(SRCDIR)/install |
| |
| dev-install-nocheck : export SKIP_TESTS := YES |
| dev-install-nocheck : dev-install |
| |
| dev-update: |
| ifeq ($(DISABLE_LINKOO),TRUE) |
| @linkoo --copy $(DEVINSTALLDIR)/opt $(SRCDIR) |
| else |
| @linkoo $(DEVINSTALLDIR)/opt $(SRCDIR) |
| endif |
| |
| install-tb: |
| @rm -rf $(DEVINSTALLDIR) |
| @mkdir $(DEVINSTALLDIR) |
| ifeq ($(OS_FOR_BUILD),WNT) |
| cd instsetoo_native && unset MAKEFLAGS && $(SOLARENV)/bin/build.pl LIBO_DEV_INSTALL=TRUE |
| unzip -q -d "$(DEVINSTALLDIR)" "$(SRCDIR)/instsetoo_native/$(INPATH)/LibreOffice/archive/install/en-US/LibreOffice*_archive.zip" |
| mv "$(DEVINSTALLDIR)"/LibreOffice*_archive/* "$(DEVINSTALLDIR)"/opt |
| else |
| @ooinstall $(DEVINSTALLDIR)/opt |
| @install-gdb-printers |
| endif |
| @rm -f $(SRCDIR)/install && ln -s $(DEVINSTALLDIR)/opt/ $(SRCDIR)/install |
| |
| distro-pack-install: install |
| $(SRCDIR)/bin/distro-install-clean-up |
| $(SRCDIR)/bin/distro-install-desktop-integration |
| $(SRCDIR)/bin/distro-install-sdk |
| $(SRCDIR)/bin/distro-install-file-lists |
| |
| id: |
| @create-ids |
| |
| tags: |
| @create-tags |
| |
| docs: |
| @mkdocs.sh $(SRCDIR)/docs $(SOLARENV)/inc/doxygen.cfg |
| |
| findunusedcode: |
| @which callcatcher > /dev/null 2>&1 || \ |
| (echo "callcatcher not installed" && false) |
| @sed -e s,$$INPATH,callcatcher,g $(SRCDIR)/config_host.mk | sed -e s,"export OOO_JUNIT_JAR=.*","export OOO_JUNIT_JAR=",g > $(SRCDIR)/config_host_callcatcher.mk |
| @echo unexport ARCH_FLAGS >> $(SRCDIR)/config_host_callcatcher.mk |
| @echo unexport CFLAGS >> $(SRCDIR)/config_host_callcatcher.mk |
| @echo unexport CXXFLAGS >> $(SRCDIR)/config_host_callcatcher.mk |
| @mkdir -p $(SRCDIR)/solenv/callcatcher/bin && \ |
| ln -sf $(SRCDIR)/solenv/$(INPATH)/bin/dmake \ |
| $(SRCDIR)/solenv/callcatcher/bin/dmake |
| @$(GNUMAKE) -f $(SOLARENV)/bin/callcatcher.Makefile findunusedcode |
| @grep ::.*\( unusedcode.all \ |
| | grep -v ^Atom \ |
| | grep -v ^atom:: \ |
| | grep -v ^boost:: \ |
| | grep -v ^CIcc \ |
| | grep -v ^CLuceneError:: \ |
| | grep -v ^cppu:: \ |
| | grep -v ^Dde \ |
| | grep -v ^graphite2:: \ |
| | grep -v ^jvmaccess:: \ |
| | grep -v ^libcdr:: \ |
| | grep -v ^libcmis:: \ |
| | grep -v ^libmspub:: \ |
| | grep -v ^libvisio:: \ |
| | grep -v ^libwpg:: \ |
| | grep -v ^libwps_tools_win:: \ |
| | grep -v ^lucene:: \ |
| | grep -v ^Matrix3d:: \ |
| | grep -v ^RelatedMultipart:: \ |
| | grep -v ^salhelper:: \ |
| | grep -v ^VSDInternalStream:: \ |
| | grep -v ^WP1 \ |
| | grep -v ^WP3 \ |
| | grep -v ^WP42 \ |
| | grep -v ^WP6 \ |
| | grep -v ^WPG \ |
| | grep -v ^WPS \ |
| | grep -v WPX \ |
| | grep -v ^WSObject \ |
| > unusedcode.easy |
| |
| check: dev-install subsequentcheck |
| |
| subsequentcheck :| $(if $(filter-out subsequentcheck,$(MAKECMDGOALS)),dev-install) |
| $(GNUMAKE) -j $(CHECK_PARALLELISM) $(GMAKE_OPTIONS) -f Makefile.post $@ |
| |
| unitcheck slowcheck debugrun: |
| $(GNUMAKE) -j $(PARALLELISM) $(GMAKE_OPTIONS) -f Makefile.post $@ |
| |
| endif # not clean or distclean |
| |
| # vim: set noet sw=4 ts=4: |