1# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
2#
3# This file is part of the LibreOffice project.
4#
5# This Source Code Form is subject to the terms of the Mozilla Public
6# License, v. 2.0. If a copy of the MPL was not distributed with this
7# file, You can obtain one at http://mozilla.org/MPL/2.0/.
8#
9
10gb_Top_MODULE_CHECK_TARGETS := slowcheck unitcheck subsequentcheck perfcheck uicheck screenshot
11
12.PHONY : check-if-root bootstrap gbuild build build-non-l10n-only build-l10n-only check clean clean-build clean-host test-install distclean distro-pack-install docs download etags fetch get-submodules id install install-gdb-printers install-strip tags debugrun help showmodules translations packageinfo internal.clean $(gb_Top_MODULE_CHECK_TARGETS)
13
14MAKECMDGOALS?=build
15build_goal:=$(if $(filter build build-nocheck uicheck,$(MAKECMDGOALS)),build)\
16 $(if $(filter check,$(MAKECMDGOALS)),unitcheck slowcheck subsequentcheck $(if $(filter Linux, $(shell uname)), uicheck))\
17 $(filter build-l10n-only build-non-l10n-only debugrun help showmodules translations $(gb_Top_MODULE_CHECK_TARGETS) check packageinfo gbuildtojson,$(MAKECMDGOALS))
18
19SRCDIR := @SRC_ROOT@
20BUILDDIR := @BUILDDIR@
21COMPILER_PLUGINS := @COMPILER_PLUGINS@
22GIT_BUILD := $(if $(wildcard $(SRCDIR)/.git),T)
23
24# Run autogen.sh if needed and force make to restart itself.
25# ... but there are several cases where we do not want to run
26# autogen.sh:
27# 1. if we are building from tarballs, not git checkout (I do not
28#    think packagers would ever want that. I certainly do not.)
29# 2. if we are making help, clean or distclean, because they do not
30#    need updated configuration
31ifeq (,$(MAKE_RESTARTS)$(if $(GIT_BUILD),,T)$(if $(filter-out help showmodules clean distclean,$(MAKECMDGOALS)),,T))
32
33# note: this must touch both Makefile and $(BUILDDIR)/Makefile, because make
34# may be invoked using either of these paths, and it will restart itself only
35# if the updated target is exactly the same path as the Makefile it is using
36.PHONY : force-restart
37Makefile $(BUILDDIR)/Makefile: $(BUILDDIR)/config_host.mk $(BUILDDIR)/config_host_lang.mk force-restart
38	@touch $@
39
40# run configure in an environment not polluted by config_host.mk
41$(BUILDDIR)/config_host.mk : $(wildcard \
42		$(SRCDIR)/config_host.mk.in \
43		$(SRCDIR)/config_host_lang.mk.in \
44		$(SRCDIR)/Makefile.in \
45		$(SRCDIR)/instsetoo_native/util/openoffice.lst.in \
46		$(SRCDIR)/configure.ac \
47		$(SRCDIR)/config_host/*.h.in \
48		$(SRCDIR)/download.lst \
49		$(BUILDDIR)/autogen.input \
50		$(BUILDDIR)/autogen.lastrun \
51		$(BUILDDIR)/autogen.sh \
52		) \
53		$(shell . $(SRCDIR)/bin/get_config_variables JAVA_HOME && \
54			if test -n "$${JAVA_HOME}" -a ! -d "$${JAVA_HOME}/bin"; then echo force-restart; fi)
55	sh -c $(SRCDIR)/autogen.sh
56
57else # MAKE_RESTARTS
58
59.DEFAULT_GOAL := build
60
61check-if-root:
62	@if test ! `uname` = 'Haiku' -a `id -u` = 0; then \
63		# if the systemd-detect-virt command doesn't exist or it reports we're not in a container \
64		if test ! -x "$$(command -v systemd-detect-virt)" || ! systemd-detect-virt -c -q; then \
65			echo; \
66			echo 'Building LibreOffice as root is a very bad idea, use a regular user.'; \
67			echo; \
68			exit 1; \
69		fi \
70	fi
71
72gb_Side ?= host
73
74include $(BUILDDIR)/config_$(gb_Side).mk
75
76export GMAKE_OPTIONS?=-r$(if $(verbose),,s)$(value $(MAKEFLAGS))
77
78PARALLELISM_OPTION := $(if $(filter-out 0,$(PARALLELISM)),-j $(PARALLELISM),)
79
80IWYU_OPTION := $(if $(IWYU_PATH),-k CC=$(IWYU_PATH) CXX=$(IWYU_PATH),)
81
82# don't want to have a dependency to iwyudummy.generate because it's
83# useful to manually edit the generated StaticLibrary_iwyudummy.mk
84iwyudummy: bootstrap fetch
85	$(if $(wildcard $(BUILDDIR)/iwyudummy),,$(error first call "make iwyudummy.generate"))
86	cd $(BUILDDIR)/iwyudummy && $(MAKE) $(IWYU_OPTION) $(GMAKE_OPTIONS)
87
88iwyudummy.generate:
89	$(SRCDIR)/bin/gen-iwyu-dummy-lib
90
91#
92# Partial Build
93#
94define gb_Top_GbuildModuleRules
95.PHONY: $(1) $(1).build $(1).all $(1).check $(1).clean $(1).showdeliverables $(foreach target,$(gb_Top_MODULE_CHECK_TARGETS),$(1).$(target))
96
97$(1): bootstrap fetch
98	cd $(SRCDIR)/$(2) && $$(MAKE) $(IWYU_OPTION) $(PARALLELISM_OPTION) $(GMAKE_OPTIONS)
99
100$(1).build $(1).check $(foreach target,$(gb_Top_MODULE_CHECK_TARGETS),$(1).$(target)): bootstrap fetch
101	cd $(SRCDIR)/$(2) && $$(MAKE) $(PARALLELISM_OPTION) $(GMAKE_OPTIONS) $$(patsubst $(1).%,%,$$@)
102
103$(1).clean $(1).showdeliverables:
104	cd $(SRCDIR)/$(2) && $$(MAKE) $(PARALLELISM_OPTION) $(GMAKE_OPTIONS) $$(patsubst $(1).%,%,$$@)
105
106$(1).all: bootstrap fetch
107	$$(MAKE) $(PARALLELISM_OPTION) $(IWYU_OPTION) $(GMAKE_OPTIONS) -f $(SRCDIR)/Makefile.gbuild $(WORKDIR)/Module/$(1) $(WORKDIR)/Module/check/$(1) $(WORKDIR)/Module/slowcheck/$(1)
108
109endef
110
111define gb_Top_GbuildModulesRules
112$(foreach m,$(1),$(call gb_Top_GbuildModuleRules,$(notdir $(m)),$(m)))
113endef
114
115gbuild_modules := $(patsubst $(SRCDIR)/%/,%,$(dir $(wildcard $(SRCDIR)/*/Module_*.mk $(SRCDIR)/external/*/Module_*.mk)))
116
117gbuild_internal_modules := $(filter-out odk external,$(patsubst $(SRCDIR)/%/,%,$(dir $(wildcard $(SRCDIR)/*/Module_*.mk))))
118
119internal.clean: $(addsuffix .clean,$(gbuild_internal_modules))
120
121
122$(eval $(call gb_Top_GbuildModulesRules,$(gbuild_modules)))
123
124gbuild_TARGETS := AllLangHelp \
125	AllLangMoTarget \
126	AllLangPackage \
127	AutoInstall \
128	CliLibrary \
129	CliNativeLibrary \
130	CliUnoApi \
131	CompilerTest \
132	Configuration \
133	CppunitTest \
134	CustomTarget \
135	Dictionary \
136	Executable \
137	Extension \
138	ExtensionPackage \
139	ExtensionPackageSet \
140	ExternalPackage \
141	ExternalProject \
142	Gallery \
143	GeneratedPackage \
144	InstallModule \
145	InstallScript \
146	InternalUnoApi \
147	Jar \
148	JunitTest \
149	Library \
150	Module \
151	Package \
152	PackageSet \
153	Pagein \
154	Postprocess \
155	Pyuno \
156	PythonTest \
157	Rdb \
158	SdiTarget \
159	StaticLibrary \
160	UIConfig \
161	UITest \
162	UnoApi \
163	UnpackedTarball \
164	WinResTarget \
165	Zip \
166
167# build a generic gbuild target
168$(foreach target,$(gbuild_TARGETS),$(target)_% $(foreach module,$(gbuild_modules),$(target)_$(module)/%)) UIConfig_modules/% %.genpatch: bootstrap fetch
169	$(MAKE) $(PARALLELISM_OPTION) $(GMAKE_OPTIONS) -f $(SRCDIR)/Makefile.gbuild $@
170
171$(gbuild_TARGETS):
172	$(MAKE) $(PARALLELISM_OPTION) $(GMAKE_OPTIONS) -f $(SRCDIR)/Makefile.gbuild $@
173
174#
175# Clean
176#
177clean: clean-host clean-build
178
179clean-host:
180	rm -fr $(TESTINSTALLDIR)
181	rm -fr $(INSTDIR)
182	rm -fr $(WORKDIR)
183
184clean-build:
185ifneq ($(CROSS_COMPILING),)
186	rm -fr $(INSTDIR_FOR_BUILD)
187	rm -fr $(WORKDIR_FOR_BUILD)
188ifeq ($(OS),ANDROID)
189	rm -fr $(BUILDDIR)/android/obj
190	rm -fr $(BUILDDIR)/android/jniLibs
191	rm -fr $(SRCDIR)/android/source/build
192	rm -fr $(SRCDIR)/android/source/assets
193	rm -fr $(SRCDIR)/android/source/assets_fullUI
194	rm -fr $(SRCDIR)/android/source/assets_strippedUI
195endif
196endif
197
198include $(SRCDIR)/compilerplugins/Makefile.mk
199
200#
201# Distclean
202#
203distclean : clean compilerplugins-clean
204	rm -fr \
205        $(BUILDDIR)/Makefile \
206        $(BUILDDIR)/aclocal.m4 \
207        $(BUILDDIR)/autom4te.cache \
208        $(BUILDDIR)/bin/bffvalidator.sh \
209        $(BUILDDIR)/bin/odfvalidator.sh \
210        $(BUILDDIR)/bin/officeotron.sh \
211        $(BUILDDIR)/config.Build.log \
212        $(BUILDDIR)/config.Build.warn \
213        $(BUILDDIR)/config.log \
214        $(BUILDDIR)/config.status \
215        $(BUILDDIR)/config.warn \
216        $(BUILDDIR)/config_build.mk \
217        $(BUILDDIR)/config_build_lang.mk \
218        $(BUILDDIR)/config_build \
219        $(BUILDDIR)/config_host.mk \
220        $(BUILDDIR)/config_host.mk.stamp \
221        $(BUILDDIR)/config_host_lang.mk \
222        $(BUILDDIR)/config_host_lang.mk.stamp \
223        $(BUILDDIR)/config_host/*.h \
224        $(BUILDDIR)/configure \
225        $(BUILDDIR)/hardened_runtime.xcent \
226        $(BUILDDIR)/instsetoo_native/util/openoffice.lst \
227        $(BUILDDIR)/sysui/desktop/macosx/Info.plist \
228        $(BUILDDIR)/vs-code-template.code-workspace
229	$(if $(filter WNT,$(OS)),env -i PATH="$$PATH") $(FIND) $(SRCDIR)/solenv/gdb -name \*.pyc -exec rm {} \;
230
231#
232# custom command
233#
234cmd:
235	echo "custom cmd" && ( $(cmd) )
236
237#
238# Fetch
239#
240ifneq ($(DO_FETCH_TARBALLS),)
241include $(SRCDIR)/Makefile.fetch
242fetch: download
243fetch: get-submodules
244
245ifneq (,$(wildcard $(SRCDIR)/.git))
246get-submodules:
247ifneq ($(foreach i,$(GIT_NEEDED_SUBMODULES),$(SRCDIR)/$(i)/.git),$(wildcard $(foreach i,$(GIT_NEEDED_SUBMODULES),$(SRCDIR)/$(i)/.git)))
248	cd $(SRCDIR) && ./g -f clone
249endif
250ifeq ($(shell test -d $(SRCDIR)/.git; echo $$?),0)
251	@cd $(SRCDIR) && ./g -z # make sure the git hooks are in place even if no submodules are needed
252endif
253
254else # these sources are from a tarball, so get the other source tarballs
255gb_LO_VER := $(shell . $(SRCDIR)/sources.ver && echo $$lo_sources_ver)
256$(if $(gb_LO_VER),,$(error Error while retrieving $$lo_sources_ver from $(SRCDIR)/sources.ver))
257
258get-submodules: | download
259ifneq ($(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))))
260	$(foreach i,$(subst helpcontent2,help,$(GIT_NEEDED_SUBMODULES)),\
261		$(call fetch_Download_item_unchecked,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))
262	$(SRCDIR)/bin/unpack-sources $(SRCDIR) $(foreach i,$(subst helpcontent2,help,$(GIT_NEEDED_SUBMODULES)),\
263		$(TARFILE_LOCATION)/libreoffice-$(i)-$(gb_LO_VER).tar.xz)
264endif
265
266endif
267
268else
269fetch:
270	@echo "Automatic fetching of external tarballs is disabled."
271
272endif
273
274#
275# Bootstrap
276#
277bootstrap: compilerplugins
278
279#
280# Build
281#
282# Note: this will pipe through all gbuild targets to ... gbuild
283#       with some translations like "check"->"unitcheck subsequentcheck uicheck" for historic reasons
284#
285build: bootstrap fetch $(if $(CROSS_COMPILING),cross-toolset,install-gdb-printers) \
286    $(if $(filter check,$(MAKECMDGOALS)),$(if $(COMPILER_PLUGINS),$(if $(LODE_HOME),clang-format-check)))
287	$(MAKE) $(PARALLELISM_OPTION) $(IWYU_OPTION) $(GMAKE_OPTIONS) -f $(SRCDIR)/Makefile.gbuild $(build_goal)
288ifeq ($(OS),iOS)
289	$(MAKE) $(PARALLELISM_OPTION) $(GMAKE_OPTIONS) ios
290endif
291
292build-non-l10n-only build-l10n-only build-nocheck check debugrun translations packageinfo $(gb_Top_MODULE_CHECK_TARGETS): build
293
294help showmodules gbuildtojson:
295	$(MAKE) $(PARALLELISM_OPTION) $(GMAKE_OPTIONS) -f $(SRCDIR)/Makefile.gbuild $@
296
297cross-toolset: bootstrap fetch install-gdb-printers
298# fetch again in case there are externals only needed on build platform
299ifneq ($(OS),iOS)
300	$(MAKE) gb_Side=build $(PARALLELISM_OPTION) $(GMAKE_OPTIONS) -f $(BUILDDIR)/Makefile fetch
301endif
302	$(MAKE) gb_Side=build $(PARALLELISM_OPTION) $(GMAKE_OPTIONS) -f $(SRCDIR)/Makefile.gbuild build-tools
303
304install-gdb-printers:
305ifneq ($(filter-out WNT MACOSX iOS,$(OS)),)
306ifneq ($(INSTDIR_FOR_BUILD),$(INSTDIR))
307	mkdir -p $(INSTDIR_FOR_BUILD)
308	$(SRCDIR)/solenv/bin/install-gdb-printers -a $(INSTDIR_FOR_BUILD) -c
309endif
310	mkdir -p $(INSTDIR)
311	$(SRCDIR)/solenv/bin/install-gdb-printers -a $(INSTDIR) -c
312endif
313
314
315#
316# Install
317#
318
319define gb_Top_DoInstall
320echo "$(1) in $(INSTALLDIR) ..." && \
321$(SRCDIR)/solenv/bin/ooinstall $(2) "$(INSTALLDIR)"
322
323endef
324
325ifneq ($(OS),MACOSX)
326define gb_Top_InstallFinished
327echo && echo "If you want to edit the .ui files with glade first execute:" && \
328echo && echo "export GLADE_CATALOG_SEARCH_PATH=$(2)/share/glade" && \
329echo && echo "$(1) finished, you can now execute:" && \
330echo "$(2)/program/soffice"
331
332endef
333else
334define gb_Top_InstallFinished
335echo && echo "$(1) finished, you can now run: " && \
336echo "open $(2)/$(PRODUCTNAME).app" && \
337echo "" && \
338echo "To debug: gdb $(2)/$(PRODUCTNAME).app/Contents/MacOS/soffice"
339
340endef
341endif
342
343ifneq ($(OS),MACOSX)
344install:
345	@$(call gb_Top_DoInstall,Installing,)
346	@$(call gb_Top_InstallFinished,Installation,$(INSTALLDIR))
347
348install-strip:
349	@$(call gb_Top_DoInstall,Installing and stripping binaries,--strip)
350	@$(call gb_Top_InstallFinished,Installation,$(INSTALLDIR))
351endif # !MACOSX
352
353test-install: build
354	@rm -rf $(TESTINSTALLDIR)
355	@mkdir -p $(TESTINSTALLDIR)
356ifeq ($(OS_FOR_BUILD),WNT)
357	cd $(SRCDIR)/instsetoo_native && $(MAKE) LIBO_TEST_INSTALL=TRUE $(GMAKE_OPTIONS)
358else
359	@$(SRCDIR)/solenv/bin/ooinstall $(TESTINSTALLDIR)
360#
361# Create Resources/*.lproj directories for languages supported by macOS
362	set -x; for lang in ca cs da de el en es fi fr hr hu id it ja ko ms nl no pl pt pt_PT ro ru sk sv th tr uk vi zh_CN zh_TW; do \
363		lproj=$(TESTINSTALLDIR)/$(PRODUCTNAME_WITHOUT_SPACES).app/Contents/Resources/$$lang.lproj; \
364		mkdir "$$lproj"; \
365	done
366#
367# Remove unnecessary executables in the LibreOfficePython framework
368	rm -rf $(TESTINSTALLDIR)/$(PRODUCTNAME_WITHOUT_SPACES).app/Contents/Frameworks/LibreOfficePython.framework/Versions/[1-9]*/bin
369#
370# Remove the python.o object file which is weird and interferes with app store uploading
371# And with it removed, presumably the other stuff in the Python lib/python3.3/config-3.3m probably does not make sense either.
372	rm -rf $(TESTINSTALLDIR)/$(PRODUCTNAME_WITHOUT_SPACES).app/Contents/Frameworks/LibreOfficePython.framework/Versions/[1-9]*/lib/python[1-9]*/config-[1-9]*
373#
374ifneq ($(ENABLE_MACOSX_SANDBOX),)
375
376# Remove the gengal binary that we hardly need and the shell scripts
377# for which code signatures (stored as extended attributes) won't
378# survive upload to the App Store anyway. See
379# https://developer.apple.com/library/content/documentation/Security/Conceptual/CodeSigningGuide/Procedures/Procedures.html#//apple_ref/doc/uid/TP40005929-CH4-TNTAG201
380# We could put the shell scripts somewhere in Resources instead, but
381# no 3rd-party code that would be interested in them would look there
382# anyway.
383	rm $(TESTINSTALLDIR)/$(PRODUCTNAME_WITHOUT_SPACES).app/Contents/MacOS/gengal
384	rm $(TESTINSTALLDIR)/$(PRODUCTNAME_WITHOUT_SPACES).app/Contents/MacOS/unopkg
385	rm $(TESTINSTALLDIR)/$(PRODUCTNAME_WITHOUT_SPACES).app/Contents/MacOS/unoinfo
386endif
387#
388ifneq ($(MACOSX_CODESIGNING_IDENTITY),)
389# Then use the macosx-codesign-app-bundle script
390	@$(SRCDIR)/solenv/bin/macosx-codesign-app-bundle $(TESTINSTALLDIR)/$(PRODUCTNAME_WITHOUT_SPACES).app
391endif
392endif
393	@$(call gb_Top_InstallFinished,Test Installation,$(TESTINSTALLDIR))
394
395mac-app-store-package: test-install
396ifneq ($(MACOSX_PACKAGE_SIGNING_IDENTITY),)
397	rm -rf "$(PRODUCTNAME).app"
398	mv "$(TESTINSTALLDIR)/$(PRODUCTNAME_WITHOUT_SPACES).app" "$(PRODUCTNAME).app"
399	productbuild --component "$(PRODUCTNAME).app" /Applications --sign $(MACOSX_PACKAGE_SIGNING_IDENTITY) $(PRODUCTNAME_WITHOUT_SPACES).pkg
400else
401	@echo You did not provide an installer signing identity with --enable-macosx-package-signing
402	@exit 1
403endif
404
405distro-pack-install: install-strip
406	$(SRCDIR)/bin/distro-install-clean-up
407	$(SRCDIR)/bin/distro-install-desktop-integration
408	$(SRCDIR)/bin/distro-install-sdk
409	$(SRCDIR)/bin/distro-install-file-lists
410
411install-package-%:
412	$(MAKE) $(GMAKE_OPTIONS) -f $(SRCDIR)/Makefile.gbuild $@
413
414id:
415	@$(SRCDIR)/solenv/bin/create-ids
416
417tags:
418	@$(SRCDIR)/solenv/bin/create-tags
419
420etags:
421	@$(SRCDIR)/solenv/bin/create-tags -e
422
423docs:
424	@$(SRCDIR)/solenv/bin/mkdocs.sh $(SRCDIR)/docs $(SRCDIR)/solenv/inc/doxygen.cfg
425
426findunusedheaders:
427	$(SRCDIR)/bin/find-unusedheaders.py
428
429symbols:
430	rm -fr $(WORKDIR)/symbols/
431	mkdir -p $(WORKDIR)/symbols/
432ifeq ($(OS),WNT)
433	$(SRCDIR)/bin/symbolstore.py $(WORKDIR)/UnpackedTarball/breakpad/src/tools/windows/dump_syms/Release/dump_syms.exe $(WORKDIR)/symbols/ $(INSTDIR)/program/
434	$(SRCDIR)/bin/symstore.sh
435else
436	$(SRCDIR)/bin/symbolstore.py $(WORKDIR)/UnpackedTarball/breakpad/src/tools/linux/dump_syms/dump_syms $(WORKDIR)/symbols/ $(INSTDIR)/program/*
437endif
438
439	cd $(WORKDIR)/symbols/ && zip -r $(WORKDIR)/symbols.zip *
440
441create-mar:
442	rm -fr $(WORKDIR)/installation/mar/
443	rm -fr $(WORKDIR)/installation/temp/
444	mkdir -p $(WORKDIR)/installation/temp/
445	mkdir -p $(WORKDIR)/installation/mar/
446	tar -xzf $(WORKDIR)/installation/LibreOfficeDev/archive/install/en-US/LibreOffice* -C $(WORKDIR)/installation/temp/
447	$(SRCDIR)/bin/update/make_full_update.sh $(WORKDIR)/installation/mar/test.mar $(WORKDIR)/installation/temp/*/
448
449upload-symbols:
450	$(MAKE) -f $(SRCDIR)/Makefile.gbuild upload-symbols
451
452create-update-info:
453	$(MAKE) -f $(SRCDIR)/Makefile.gbuild create-update-info
454
455upload-update-info:
456	$(MAKE) -f $(SRCDIR)/Makefile.gbuild upload-update-info
457
458create-partial-info:
459	$(MAKE) -f $(SRCDIR)/Makefile.gbuild create-partial-info
460
461dump-deps:
462	@$(SRCDIR)/bin/module-deps.pl $(MAKE) $(SRCDIR)/Makefile.gbuild
463
464dump-deps-png:
465	@$(SRCDIR)/bin/module-deps.pl $(MAKE) $(SRCDIR)/Makefile.gbuild | dot -Tpng -o lo.png
466
467dump-deps-sort:
468	@$(SRCDIR)/bin/module-deps.pl -t $(MAKE) $(SRCDIR)/Makefile.gbuild
469
470clang-format-check:
471	@$(SRCDIR)/solenv/clang-format/check-last-commit
472
473define gb_Top_GbuildToIdeIntegration
474$(1)-ide-integration: gbuildtojson $(if $(filter MACOSX,$(OS_FOR_BUILD)),python3.all)
475	cd $(SRCDIR) && \
476		$(if $(filter MACOSX,$(OS_FOR_BUILD)),PATH="$(INSTROOT_FOR_BUILD)/Frameworks/LibreOfficePython.framework/Versions/Current/bin:$(PATH)") \
477		$(SRCDIR)/bin/gbuild-to-ide --ide $(1) --make $(MAKE)
478
479endef
480
481$(foreach ide,\
482	codelite \
483	vs2017 \
484	vs2019 \
485	kdevelop \
486	vim \
487	qtcreator \
488	xcode \
489        eclipsecdt,\
490$(eval $(call gb_Top_GbuildToIdeIntegration,$(ide))))
491
492fuzzers: StaticLibrary_dtoa StaticLibrary_zlib Library_sal Library_salhelper Library_reg Library_store Library_unoidl codemaker Library_cppu Library_i18nlangtag Library_cppuhelper Library_comphelper StaticLibrary_ulingu StaticLibrary_findsofficepath Library_tl Library_basegfx Library_canvastools Library_cppcanvas Library_dbtools Library_deploymentmisc Library_editeng Library_i18nutil Library_localebe1 Library_sax Library_sofficeapp Library_ucbhelper Rdb_services udkapi offapi Library_icg Library_reflection Library_invocadapt Library_bootstrap Library_introspection Library_stocservices Library_xmlreader Library_gcc3_uno instsetoo_native more_fonts StaticLibrary_boost_locale StaticLibrary_fuzzerstubs StaticLibrary_fuzzer_core StaticLibrary_fuzzer_calc StaticLibrary_fuzzer_draw StaticLibrary_fuzzer_writer StaticLibrary_fuzzer_math Library_forui Library_binaryurp Library_io Library_invocation Library_namingservice Library_proxyfac Library_uuresolver Module_ure Library_wpftwriter Library_vbahelper Executable_pptfuzzer Executable_cgmfuzzer Executable_ww2fuzzer Executable_ww6fuzzer Executable_ww8fuzzer Executable_qpwfuzzer Executable_slkfuzzer Executable_fodtfuzzer Executable_fodsfuzzer Executable_fodpfuzzer Executable_xlsfuzzer Executable_scrtffuzzer Executable_wksfuzzer Executable_diffuzzer Executable_docxfuzzer Executable_xlsxfuzzer Executable_pptxfuzzer Executable_htmlfuzzer Executable_rtffuzzer Executable_mmlfuzzer Executable_mtpfuzzer Executable_olefuzzer Executable_lwpfuzzer Executable_hwpfuzzer Executable_wmffuzzer Executable_dxffuzzer Executable_sftfuzzer Executable_svmfuzzer Executable_tiffuzzer Executable_epsfuzzer Executable_jpgfuzzer Executable_metfuzzer Executable_bmpfuzzer Executable_giffuzzer Executable_pngfuzzer Executable_602fuzzer Executable_tgafuzzer Executable_pcxfuzzer Executable_psdfuzzer Executable_ppmfuzzer Executable_pcdfuzzer Executable_rasfuzzer Executable_pctfuzzer Executable_xpmfuzzer Executable_xbmfuzzer
493
494endif # MAKE_RESTARTS
495
496# vim: set noet sw=4 ts=4:
497