summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Tardon <dtardon@redhat.com>2012-03-12 10:03:03 +0100
committerDavid Tardon <dtardon@redhat.com>2012-03-12 10:52:01 +0100
commitf24ccecbeef52ecb822f1bd111ffe573ec41c142 (patch)
tree2dd36e57c83b84e5d809e18fb745d2789aa6a6c4
parent295b09a63240d0a591921a40dc949784a441ce99 (diff)
add InternalUnoApi class
-rw-r--r--solenv/gbuild/InternalUnoApi.mk83
-rw-r--r--solenv/gbuild/Library.mk3
-rw-r--r--solenv/gbuild/LinkTarget.mk30
-rw-r--r--solenv/gbuild/TargetLocations.mk2
-rw-r--r--solenv/gbuild/UnoApiTarget.mk53
-rw-r--r--solenv/gbuild/gbuild.mk1
6 files changed, 164 insertions, 8 deletions
diff --git a/solenv/gbuild/InternalUnoApi.mk b/solenv/gbuild/InternalUnoApi.mk
new file mode 100644
index 000000000000..0c1b3f6604d7
--- /dev/null
+++ b/solenv/gbuild/InternalUnoApi.mk
@@ -0,0 +1,83 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+# Version: MPL 1.1 / GPLv3+ / LGPLv3+
+#
+# The contents of this file are subject to the Mozilla Public License Version
+# 1.1 (the "License"); you may not use this file except in compliance with
+# the License or as specified alternatively below. You may obtain a copy of
+# the License at http://www.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS IS" basis,
+# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+# for the specific language governing rights and limitations under the
+# License.
+#
+# Major Contributor(s):
+# Copyright (C) 2010 Red Hat, Inc., David Tardon <dtardon@redhat.com>
+# (initial developer)
+#
+# All Rights Reserved.
+#
+# For minor contributions see the git repository.
+#
+# Alternatively, the contents of this file may be used under the terms of
+# either the GNU General Public License Version 3 or later (the "GPLv3+"), or
+# the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
+# in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
+# instead of those above.
+
+$(call gb_InternalUnoApi_get_target,%) :
+ $(call gb_Output_announce,$*,$(true),UNI,4)
+ $(call gb_Deliver_deliver,$(call gb_UnoApiTarget_get_target,$*),$@)
+
+.PHONY : $(call gb_InternalUnoApi_get_clean_target,%)
+$(call gb_InternalUnoApi_get_clean_target,%) :
+ $(call gb_Output_announce,$*,$(false),UNI,4)
+ $(call gb_Helper_abbreviate_dirs_native,\
+ rm -f $(call gb_InternalUnoApi_get_target,$*))
+
+define gb_InternalUnoApi_InternalUnoApi
+$(call gb_UnoApiTarget_UnoApiTarget,$(1))
+$(call gb_UnoApiHeadersTarget_UnoApiHeadersTarget,$(1))
+
+$(call gb_InternalUnoApi_get_target,$(1)) : $(call gb_UnoApiTarget_get_target,$(1))
+$(call gb_InternalUnoApi_get_clean_target,$(1)) : $(call gb_UnoApiTarget_get_clean_target,$(1))
+$(call gb_InternalUnoApi_get_clean_target,$(1)) : $(call gb_UnoApiHeadersTarget_get_clean_target,$(1))
+
+$(call gb_Deliver_add_deliverable,$(call gb_InternalUnoApi_get_target,$(1)),$(call gb_UnoApiTarget_get_target,$(1)),$(1))
+
+$$(eval $$(call gb_Module_register_target,$(call gb_InternalUnoApi_get_target,$(1)),$(call gb_InternalUnoApi_get_clean_target,$(1))))
+
+endef
+
+define gb_InternalUnoApi_add_idlfile
+$(call gb_UnoApiTarget_add_idlfile,$(1),$(2))
+
+endef
+
+define gb_InternalUnoApi_add_idlfiles
+$(call gb_UnoApiTarget_add_idlfiles,$(1),$(2))
+
+endef
+
+define gb_InternalUnoApi__add_api
+$(call gb_UnoApiHeadersTarget_add_rdbfile,$(1),$(2))
+$(call gb_InternalUnoApi_get_target,$(1)) : $(call gb_UnoApiTarget_get_target,$(2))
+
+endef
+
+define gb_InternalUnoApi_add_api
+$(foreach rdb,$(2),$(call gb_InternalUnoApi__add_api,$(1),$(rdb)))
+
+endef
+
+define gb_InternalUnoApi_set_xmlfile
+$(call gb_UnoApiTarget_set_xmlfile,$(1),$(2))
+
+endef
+
+define gb_InternalUnoApi_set_include
+$(call gb_UnoApiTarget_set_include,$(1),$(2))
+
+endef
+
+# vim: set noet sw=4 ts=4:
diff --git a/solenv/gbuild/Library.mk b/solenv/gbuild/Library.mk
index 72599c69704c..8cc71b56562d 100644
--- a/solenv/gbuild/Library.mk
+++ b/solenv/gbuild/Library.mk
@@ -172,6 +172,9 @@ $(eval $(foreach method,\
add_libs \
set_library_path_flags \
add_api \
+ add_internal_api \
+ add_internal_bootstrap_api \
+ add_internal_comprehensive_api \
add_linked_libs \
add_linked_static_libs \
use_external \
diff --git a/solenv/gbuild/LinkTarget.mk b/solenv/gbuild/LinkTarget.mk
index 227fe96f3c81..a0a63e385cb7 100644
--- a/solenv/gbuild/LinkTarget.mk
+++ b/solenv/gbuild/LinkTarget.mk
@@ -634,6 +634,36 @@ endif
endef
+define gb_LinkTarget__add_internal_api_one
+$(call gb_LinkTarget__add_internal_headers,$(1),$(call gb_UnoApiHeadersTarget_get_$(3)target,$(api)))
+$(call gb_LinkTarget_get_headers_target,$(1)) \
+$(call gb_LinkTarget_get_target,$(1)) : INCLUDE += -I$(call gb_UnoApiHeadersTarget_get_$(3)dir,$(api))
+ifeq ($(gb_FULLDEPS),$(true))
+$(call gb_LinkTarget_get_dep_target,$(1)) : INCLUDE += -I$(call gb_UnoApiHeadersTarget_get_$(3)dir,$(api))
+endif
+
+endef
+
+define gb_LinkTarget__add_internal_api
+$(foreach api,$(2),$(call gb_LinkTarget__add_internal_api_one,$(1),$(api),$(3)))
+
+endef
+
+define gb_LinkTarget_add_internal_api
+$(call gb_LinkTarget__add_internal_api,$(1),$(2),lightweight_)
+
+endef
+
+define gb_LinkTarget_add_internal_bootstrap_api
+$(call gb_LinkTarget__add_internal_api,$(1),$(2))
+
+endef
+
+define gb_LinkTarget_add_internal_comprehensive_api
+$(call gb_LinkTarget__add_internal_api,$(1),$(2),comprehensive_)
+
+endef
+
define gb_LinkTarget_add_linked_libs
ifneq (,$$(filter-out $(gb_Library_KNOWNLIBS),$(2)))
$$(eval $$(call gb_Output_info,currently known libraries are: $(sort $(gb_Library_KNOWNLIBS)),ALL))
diff --git a/solenv/gbuild/TargetLocations.mk b/solenv/gbuild/TargetLocations.mk
index 858045e7fd8e..b22931059349 100644
--- a/solenv/gbuild/TargetLocations.mk
+++ b/solenv/gbuild/TargetLocations.mk
@@ -42,6 +42,7 @@ gb_PackagePart_get_destinations = \
$(OUTDIR)/unittest \
$(OUTDIR)/xml \
+gb_InternalUnoApi_get_target = $(OUTDIR)/rdb/$(1).rdb
gb_PackagePart_get_target = $(OUTDIR)/$(1)
gb_Rdb_get_outdir_target = $(OUTDIR)/xml/$(1).rdb
gb_ResTarget_get_outdir_imagelist_target = $(OUTDIR)/res/img/$(1).ilst
@@ -197,6 +198,7 @@ $(eval $(call gb_Helper_make_clean_targets,\
$(eval $(call gb_Helper_make_outdir_clean_targets,\
Executable \
+ InternalUnoApi \
Library \
StaticLibrary \
UnoApi \
diff --git a/solenv/gbuild/UnoApiTarget.mk b/solenv/gbuild/UnoApiTarget.mk
index eaf4aa204b70..0fa2857d2848 100644
--- a/solenv/gbuild/UnoApiTarget.mk
+++ b/solenv/gbuild/UnoApiTarget.mk
@@ -75,23 +75,46 @@ endif
# UnoApiTarget
+gb_UnoApiTarget_RDBMAKERTARGET := $(call gb_Executable_get_target_for_build,rdbmaker)
+gb_UnoApiTarget_RDBMAKERCOMMAND := $(gb_Helper_set_ld_path) SOLARBINDIR=$(OUTDIR_FOR_BUILD)/bin $(gb_UnoApiTarget_RDBMAKERTARGET)
gb_UnoApiTarget_REGCOMPARETARGET := $(call gb_Executable_get_target_for_build,regcompare)
gb_UnoApiTarget_REGCOMPARECOMMAND := $(gb_Helper_set_ld_path) SOLARBINDIR=$(OUTDIR_FOR_BUILD)/bin $(gb_UnoApiTarget_REGCOMPARETARGET)
gb_UnoApiTarget_REGMERGETARGET := $(call gb_Executable_get_target_for_build,regmerge)
gb_UnoApiTarget_REGMERGECOMMAND := $(gb_Helper_set_ld_path) SOLARBINDIR=$(OUTDIR_FOR_BUILD)/bin $(gb_UnoApiTarget_REGMERGETARGET)
+gb_UnoApiTarget_XML2CMPTARGET := $(call gb_Executable_get_target_for_build,xml2cmp)
+gb_UnoApiTarget_XML2CMPCOMMAND := $(gb_Helper_set_ld_path) $(gb_UnoApiTarget_XML2CMPTARGET)
+
+gb_UnoApiTarget_XMLRDB := $(call gb_UnoApiTarget_get_target,types)
+
+define gb_UnoApiTarget__get_types
+$(if $(1),$(foreach type,$(shell $(gb_UnoApiTarget_XML2CMPCOMMAND) -types stdout $(1)),$(addprefix -T,$(type))))
+endef
define gb_UnoApiTarget__command_impl
-RESPONSEFILE=$(call var2file,$(shell $(gb_MKTEMP)),500,$(call gb_Helper_convert_native,$(1) $(2) $(3))) && \
-$(gb_UnoApiTarget_REGMERGECOMMAND) @$${RESPONSEFILE} && \
+RESPONSEFILE=$(call var2file,$(shell $(gb_MKTEMP)),500,$(call gb_Helper_convert_native,$(2))) && \
+$(1) @$${RESPONSEFILE} && \
rm -f $${RESPONSEFILE}
endef
+define gb_UnoApiTarget__regmerge_command_impl
+$(call gb_UnoApiTarget__command_impl,$(gb_UnoApiTarget_REGMERGECOMMAND),$(1) $(2) $(3))
+endef
+
+# TODO: -bUCR changes content of the RDB files; the old build system
+# uses -b/ (by default)
+define gb_UnoApiTarget__rdbmaker_command_impl
+$(call gb_UnoApiTarget__command_impl,$(gb_UnoApiTarget_RDBMAKERCOMMAND),-O$(1) -B$(2) -b$(2) $(3) $(4))
+endef
+
define gb_UnoApiTarget__command
$(call gb_Output_announce,$*,$(true),RDB,3)
mkdir -p $(dir $(1)) && \
$(if $(UNOAPI_FILES),\
- $(call gb_UnoApiTarget__command_impl,$(1),UCR,$(UNOAPI_FILES)),\
- $(call gb_UnoApiTarget__command_impl,$(1),/,$(UNOAPI_MERGE))) \
+ $(call gb_UnoApiTarget__regmerge_command_impl,$(1),UCR,$(UNOAPI_FILES)),\
+ $(if $(UNOAPI_MERGE),\
+ $(call gb_UnoApiTarget__regmerge_command_impl,$(1),/,$(UNOAPI_MERGE)),\
+ $(call gb_UnoApiTarget__rdbmaker_command_impl,$(1),UCR,\
+ $(call gb_UnoApiTarget__get_types,$(UNOAPI_XML)),$(gb_UnoApiTarget_XMLRDB)))) \
$(if $(UNOAPI_REFERENCE), \
$(call gb_Output_announce,$*,$(true),DBc,3) \
&& $(gb_UnoApiTarget_REGCOMPARECOMMAND) \
@@ -100,11 +123,15 @@ $(if $(UNOAPI_REFERENCE), \
-r2 $(call gb_Helper_convert_native,$(1)))
endef
+define gb_UnoApiTarget__check_mode
+$(if $(or $(and $(1),$(2),$(3)),$(and $(1),$(2)),$(and $(2),$(3)),$(and $(1),$(3))),\
+ $(error More than one mode of function of UnoApiTarget used: this is not supported),\
+ $(if $(or $(1),$(2),$(3)),,\
+ $(error Neither IDL files nor merged RDBs nor XML desc. were used: nothing will be produced)))
+endef
+
$(call gb_UnoApiTarget_get_target,%):
- $(if $(and $(UNOAPI_FILES),$(UNOAPI_MERGE)),\
- $(error Both IDL files and merged RDBs were added: this is not supported),\
- $(if $(or $(UNOAPI_FILES),$(UNOAPI_MERGE)),,\
- $(error Neither IDL files nor merged RDBs were added: nothing will be produced)))
+ $(call gb_UnoApiTarget__check_mode,$(UNOAPI_FILES),$(UNOAPI_MERGE),$(UNOAPI_XML))
$(call gb_UnoApiTarget__command,$@,$*,$<,$?)
.PHONY : $(call gb_UnoApiTarget_get_clean_target,%)
@@ -139,6 +166,7 @@ define gb_UnoApiTarget_UnoApiTarget
$(call gb_UnoApiTarget_get_target,$(1)) : INCLUDE :=
$(call gb_UnoApiTarget_get_target,$(1)) : UNOAPI_FILES :=
$(call gb_UnoApiTarget_get_target,$(1)) : UNOAPI_MERGE :=
+$(call gb_UnoApiTarget_get_target,$(1)) : UNOAPI_XML :=
$(call gb_UnoApiTarget_get_target,$(1)) : UNOAPI_REFERENCE :=
ifeq ($(gb_FULLDEPS),$(true))
@@ -199,6 +227,14 @@ $(call gb_UnoApiTarget_get_target,$(1)) : $(call gb_UnoApiTarget_get_target,$(2)
endef
+# Set XML component dependencies description.
+define gb_UnoApiTarget_set_xmlfile
+$(call gb_UnoApiTarget_get_target,$(1)) : UNOAPI_XML := $(SRCDIR)/$(2)
+$(call gb_UnoApiTarget_get_target,$(1)) : $(SRCDIR)/$(2)
+$(call gb_UnoApiTarget_get_target,$(1)) : $(gb_UnoApiTarget_XMLRDB)
+
+endef
+
define gb_UnoApiTarget_add_reference_rdbfile
$(call gb_UnoApiTarget_get_target,$(1)) : UNOAPI_REFERENCE := $(SRCDIR)/$(strip $(2)).rdb
@@ -248,6 +284,7 @@ $(call gb_UnoApiHeadersTarget_get_clean_target,%) :
$(call gb_UnoApiHeadersTarget_get_lightweight_target,$*) \
$(call gb_UnoApiHeadersTarget_get_target,$*))
+# TODO: add second parameter: root of rdb file (UCR vs. /)
define gb_UnoApiHeadersTarget_UnoApiHeadersTarget
$(call gb_UnoApiHeadersTarget_get_target,$(1)) : $(call gb_UnoApiTarget_get_target,$(1))
$(call gb_UnoApiHeadersTarget_get_comprehensive_target,$(1)) : $(call gb_UnoApiTarget_get_target,$(1))
diff --git a/solenv/gbuild/gbuild.mk b/solenv/gbuild/gbuild.mk
index 198e167c886f..f35a84b77917 100644
--- a/solenv/gbuild/gbuild.mk
+++ b/solenv/gbuild/gbuild.mk
@@ -292,6 +292,7 @@ include $(foreach class, \
UnoApiTarget \
UnoApi \
UnoApiMerge \
+ InternalUnoApi \
Zip \
Configuration \
Extension \