summaryrefslogtreecommitdiff
path: root/solenv/gbuild/UnoApiTarget.mk
diff options
context:
space:
mode:
Diffstat (limited to 'solenv/gbuild/UnoApiTarget.mk')
-rw-r--r--solenv/gbuild/UnoApiTarget.mk210
1 files changed, 210 insertions, 0 deletions
diff --git a/solenv/gbuild/UnoApiTarget.mk b/solenv/gbuild/UnoApiTarget.mk
new file mode 100644
index 000000000000..951d2051225b
--- /dev/null
+++ b/solenv/gbuild/UnoApiTarget.mk
@@ -0,0 +1,210 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+define gb_UnoApiTarget_autopackage_inc
+$$(eval $$(call gb_Package_Package,$(1)_inc,$$(patsubst %/empty,%,$$(call gb_UnoApiTarget_get_header_target,empty))))
+$(foreach onefile,$(gb_UnoApiTarget_HPPFILES_$(1)), \
+ $$(eval $$(call gb_Package_add_file,$(1)_inc,$(patsubst $(1)/%,inc/$(1)/%,$(onefile)),$(onefile))))
+
+$(call gb_Package_get_target,$(1)_inc) : $(call gb_UnoApiTarget_get_target,$(1))
+
+endef
+
+# TODO: make multi repo safe
+define gb_UnoApiTarget_autopackage_idl
+$$(eval $$(call gb_Package_Package,$(1)_idl,$(SRCDIR)))
+$(foreach onefile,$(gb_UnoApiTarget_IDLFILES_$(1)), \
+ $$(eval $$(call gb_Package_add_file,$(1)_idl,$(patsubst $(1)/%,idl/%,$(onefile)),$(onefile))))
+
+endef
+
+$(call gb_UnoApiTarget_get_header_target,$(1))/% : $(call gb_UnoApiTarget_get_target,$(1))
+ mkdir -p $$(dir $$@)
+
+define gb_UnoApiTarget_UnoApiTarget
+$$(eval $$(call gb_Module_register_target,$(call gb_UnoApiOutTarget_get_target,$(1)),$(call gb_UnoApiOutTarget_get_clean_target,$(1))))
+$(call gb_UnoApiOutTarget_get_target,$(1)) : $(call gb_UnoApiTarget_get_target,$(1))
+$(call gb_UnoApiOutTarget_get_clean_target,$(1)) : $(call gb_UnoApiTarget_get_clean_target,$(1))
+gb_UnoApiTarget_HPPFILES_$(1) :=
+gb_UnoApiTarget_IDLFILES_$(1) :=
+
+.DELETE_ON_ERROR : \
+ $(call gb_UnoApiTarget_get_clean_target,$(1)) \
+ $(call gb_UnoApiTarget_get_target,$(1))
+
+endef
+
+define gb_UnoApiTarget_add_idlfiles
+$(foreach idl,$(2),$(call gb_UnoApiTarget_add_idlfile,$(1),$(idl)))
+
+endef
+
+define gb_UnoApiTarget_add_idlfile
+$(call gb_UnoApiTarget_get_target,$(1)) : $(call gb_UnoApiPartTarget_get_target,$(2).urd)
+$(call gb_UnoApiPartTarget_get_target,$(2).urd) : $(foreach repo,$(gb_REPOS),$(realpath $(repo)/$(2).idl))
+gb_UnoApiTarget_HPPFILES_$(1) += $(2).hdl
+gb_UnoApiTarget_HPPFILES_$(1) += $(2).hpp
+gb_UnoApiTarget_IDLFILES_$(1) += $(2).idl
+
+$(call gb_UnoApiTarget_get_header_target,)$(2).hpp :| $(call gb_UnoApiTarget_get_target,$(1))
+$(call gb_UnoApiTarget_get_header_target,)$(2).hdl :| $(call gb_UnoApiTarget_get_target,$(1))
+
+endef
+
+define gb_UnoApiTarget_add_idlfiles_noheader
+$(foreach idl,$(2),$(call gb_UnoApiTarget_add_idlfile_noheader,$(1),$(idl)))
+
+endef
+
+define gb_UnoApiTarget_add_idlfile_noheader
+$(call gb_UnoApiTarget_get_target,$(1)) : $(call gb_UnoApiPartTarget_get_target,$(2).urd)
+$(call gb_UnoApiPartTarget_get_target,$(2).urd) : $(foreach repo,$(gb_REPOS),$(realpath $(repo)/$(2).idl))
+gb_UnoApiTarget_IDLFILES_$(1) += $(2).idl
+
+endef
+
+define gb_UnoApiTarget_add_idlfiles_nohdl
+$(foreach idl,$(2),$(call gb_UnoApiTarget_add_idlfile_nohdl,$(1),$(idl)))
+
+endef
+
+define gb_UnoApiTarget_add_idlfile_nohdl
+$(call gb_UnoApiTarget_get_target,$(1)) : $(call gb_UnoApiPartTarget_get_target,$(2).urd)
+$(call gb_UnoApiPartTarget_get_target,$(2).urd) : $(foreach repo,$(gb_REPOS),$(realpath $(repo)/$(2).idl))
+gb_UnoApiTarget_HPPFILES_$(1) += $(2).hpp
+gb_UnoApiTarget_IDLFILES_$(1) += $(2).idl
+
+$(call gb_UnoApiTarget_get_header_target,)$(2).hpp :| $(call gb_UnoApiTarget_get_target,$(1))
+
+endef
+
+define gb_UnoApiTarget_add_rdbfiles
+$(foreach rdb,$(2),$(call gb_UnoApiTarget_add_rdbfile,$(1),$(rdb)))
+
+endef
+
+define gb_UnoApiTarget_add_rdbfile
+$(call gb_UnoApiTarget_get_target,$(1)) : UNOAPI_DEPS += -X$(call gb_UnoApiOutTarget_get_target,$(2))
+$(call gb_UnoApiTarget_get_target,$(1)) : \
+ $(call gb_UnoApiOutTarget_get_target,$(2)) \
+ $(call gb_Package_get_target,$(2)_idl)
+
+endef
+
+define gb_UnoApiTarget_add_merge_rdbfiles
+$(foreach rdb,$(2),$(call gb_UnoApiTarget_add_merge_rdbfile,$(1),$(rdb)))
+
+endef
+
+define gb_UnoApiTarget_add_merge_rdbfile
+$(call gb_UnoApiTarget_get_target,$(1)) : UNOAPI_MERGE += $(call gb_UnoApiOutTarget_get_target,$(2))
+$(call gb_UnoApiTarget_get_target,$(1)) : $(call gb_UnoApiOutTarget_get_target,$(2))
+
+endef
+
+#UNOAPI_REFERENCE_$(1) := $(foreach repo,$(gb_REPOS),$(realpath $(repo)/$(strip $(2)).rdb))
+define gb_UnoApiTarget_add_reference_rdbfile
+$(call gb_UnoApiTarget_get_target,$(1)) : UNOAPI_REFERENCE := $(foreach repo,$(gb_REPOS),$(realpath $(repo)/$(strip $(2)).rdb))
+
+endef
+
+define gb_UnoApiTarget_set_include
+$(call gb_UnoApiTarget_get_target,$(1)) : INCLUDE := $(2)
+
+endef
+
+.PHONY : $(call gb_UnoApiOutTarget_get_clean_target,%)
+$(call gb_UnoApiOutTarget_get_clean_target,%) :
+ $(call gb_Output_announce,$*,$(false),UNOAPI,1)
+ -$(call gb_Helper_abbreviate_dirs,\
+ rm -f $(call gb_UnoApiOutTarget_get_target,$*))
+
+.PHONY : $(call gb_UnoApiTarget_get_clean_target,%)
+$(call gb_UnoApiTarget_get_clean_target,%) :
+ $(call gb_Output_announce,$*,$(false),UNOAPI,1)
+ -$(call gb_Helper_abbreviate_dirs,\
+ rm -f $(call gb_UnoApiTarget_get_target,$*))
+ -rm -rf $(call gb_UnoApiTarget_get_header_target,$*)\
+ $(call gb_UnoApiPartTarget_get_target,$*)
+
+# idlc doesn't return error codes != 0 in case of an error, so
+# check self
+define gb_UnoApiPartTarget__command
+mkdir -p $(dir $(1)) && \
+ mkdir -p $(gb_Helper_MISC) && \
+ RESPONSEFILE=`$(gb_MKTEMP)` && \
+ echo "$(call gb_Helper_convert_native,$(5) $(6) -O $(call gb_UnoApiPartTarget_get_target,$(2)) -verbose -C $(4))" > $${RESPONSEFILE} && \
+ $(gb_UnoApiTarget_IDLCCOMMAND) @$${RESPONSEFILE} > /dev/null && \
+ rm -f $${RESPONSEFILE} && \
+ test -f $(@)
+
+endef
+
+$(call gb_UnoApiPartTarget_get_target,%) :
+ $(call gb_Output_announce,$*,$(true),IDL,2)
+ $(call gb_UnoApiPartTarget__command,$@,$(dir $*),$<,$?,$(INCLUDE),$(DEFS))
+
+
+define gb_UnoApiTarget__command
+ mkdir -p $(dir $(1)) && \
+ RESPONSEFILE=$(call var2file,$(shell $(gb_MKTEMP)),500,$(call gb_Helper_convert_native,$(1) $(4) $(5))) && \
+ $(gb_UnoApiTarget_REGMERGECOMMAND) @$${RESPONSEFILE} && \
+ rm -f $${RESPONSEFILE}
+
+endef
+
+define gb_UnoApiHeaderTarget__command
+$(call gb_Helper_abbreviate_dirs_native,\
+ mkdir -p $(dir $(1)) && \
+ mkdir -p $(gb_Helper_MISC) && \
+ RESPONSEFILE=`$(gb_MKTEMP)` && \
+ echo " -Gc -L -BUCR -O$(call gb_UnoApiTarget_get_header_target,$*) $(7) \
+ $(1) \
+ " > $${RESPONSEFILE} && \
+ $(gb_UnoApiTarget_CPPUMAKERCOMMAND) @$${RESPONSEFILE} && \
+ rm -f $${RESPONSEFILE})
+
+endef
+
+# TODO:
+# - get idlc switch "-P" (generate .urd into package dir)
+# - generate dependencies for included idls
+# - empty $? in headertarget?
+
+# TODO: reenable the check
+$(call gb_UnoApiTarget_get_target,%):
+ $(call gb_Output_announce,$*,$(true),RDB,3)
+ $(if $(gb_UnoApiTarget_IDLFILES_$*),$(call gb_UnoApiTarget__command,$@,$*,$<,UCR,$(addprefix $(call gb_UnoApiPartTarget_get_target,),$(patsubst %.idl,%.urd,$(gb_UnoApiTarget_IDLFILES_$*)))))
+ $(if $(UNOAPI_MERGE),$(call gb_UnoApiTarget__command,$@,$*,$<,/,$(UNOAPI_MERGE)))
+ $(if $(and $(false),$(UNOAPI_REFERENCE)), \
+ $(call gb_Output_announce,$*,$(true),RDBCHEK,4) \
+ $(gb_UnoApiTarget_REGCOMPARECOMMAND) -f -t -r1 $(call gb_Helper_convert_native,$(UNOAPI_REFERENCE)) -r2 $(call gb_Helper_convert_native,$@))
+ $(if $(gb_UnoApiTarget_IDLFILES_$*), \
+ $(call gb_Output_announce,$*,$(true),HPP,4) \
+ $(call gb_UnoApiHeaderTarget__command,$@,$*,$<,$?,$(INCLUDE),$(DEFS),$(UNOAPI_DEPS)))
+
+# vim: set noet sw=4 ts=4: