[Libreoffice-commits] core.git: solenv/gbuild

Michael Stahl mstahl at redhat.com
Thu Feb 18 10:28:35 UTC 2016


 solenv/gbuild/AutoInstall.mk     |   94 +++++++++------------------------------
 solenv/gbuild/gen-autoinstall.py |   81 +++++++++++++++++++++++++++++++++
 2 files changed, 105 insertions(+), 70 deletions(-)

New commits:
commit e2884ab9c17b797f39833bf0381bd2fa1b5ea205
Author: Michael Stahl <mstahl at redhat.com>
Date:   Wed Feb 17 16:33:19 2016 +0100

    gbuild: AutoInstall: rewrite scp2 file generation in Python
    
    Much more readable.
    
    Change-Id: I87c696e3f2f17a98c83eab9ed8149b79902be0fe
    Reviewed-on: https://gerrit.libreoffice.org/22431
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: David Ostrovsky <david at ostrovsky.org>
    Reviewed-by: Michael Stahl <mstahl at redhat.com>

diff --git a/solenv/gbuild/AutoInstall.mk b/solenv/gbuild/AutoInstall.mk
index 1fa2d38..5bf4d98 100644
--- a/solenv/gbuild/AutoInstall.mk
+++ b/solenv/gbuild/AutoInstall.mk
@@ -9,82 +9,36 @@
 
 # AutoInstall class
 
-# this is pretty horrible because
-# a) make sucks
-# b) this is an abuse of make anyway
-# c) make 4.0 has $(file) but Apple prefers to ship 10 year old version instead
-# d) Win32 make has an 8k command line lengh limit so needs to use $(file)
-# maybe generation should be moved to some python script or something
-
-define gb_AutoInstall__escape
-$(subst .,_,$(subst -,_,$(subst /,_,$(1))))
-endef
-
-define gb_AutoInstall__make_define
-echo "#define auto_$*_ALL \ " >> $@
-$(foreach binary,$(filter-out $(lastword $(1)),$(1)),echo "    $(call gb_AutoInstall__escape,$(binary)), \ " >> $@;)
-echo "    $(call gb_AutoInstall__escape,$(lastword $(1)))" >> $@;
-echo "" >> $@
-endef
-
-define gb_AutoInstall__gen_define
-$(file >>$@,#define auto_$*_ALL \)
-$(foreach binary,$(filter-out $(lastword $(1)),$(1)),$(file >>$@,\
-	$(call gb_AutoInstall__escape,$(binary)), \))
-$(file >>$@,\
-	$(call gb_AutoInstall__escape,$(lastword $(1))))
-
-endef
-
-define gb_AutoInstall__gen_lib
-$(SCP2LIBTEMPLATE)(auto_$*_lib_$(call gb_AutoInstall__escape,$(1)),$(call gb_Library_get_runtime_filename,$(1))$(if $(SCP2COMPONENTCONDITION),$(COMMA)$(SCP2COMPONENTCONDITION)))
-
-endef
-
-define gb_AutoInstall__gen_pkg
-PACKAGE_FILELIST(auto_$*_pkg_$(call gb_AutoInstall__escape,$(1)),$(1).filelist)
-
-endef
-
 $(dir $(call gb_AutoInstall_get_target,%)).dir :
 	$(if $(wildcard $(dir $@)),,mkdir -p $(dir $@))
 
 $(call gb_AutoInstall_get_target,%) : $(GBUILDDIR)/AutoInstall.mk \
 		$(SRCDIR)/Repository.mk $(SRCDIR)/RepositoryExternal.mk \
-		$(BUILDDIR)/config_host.mk
+		$(BUILDDIR)/config_host.mk \
+		$(call gb_ExternalExecutable_get_dependencies,python)
 	$(call gb_Output_announce,$*,$(true),AIN,3)
-ifeq ($(HAVE_GNUMAKE_FILE_FUNC),)
-	echo "/* autogenerated installs for group $* */" > $@
-	$(call gb_AutoInstall__make_define,\
-		$(foreach lib,$(gb_Library_MODULE_$*),auto_$*_lib_$(lib)) \
-		$(foreach lib,$(gb_SdkLinkLibrary_MODULE_$*),auto_$*_link_$(lib)) \
-		$(foreach exe,$(gb_Executable_MODULE_$*),auto_$*_exe_$(exe)) \
-		$(foreach jar,$(gb_Jar_MODULE_$*),auto_$*_jar_$(jar)) \
-		$(foreach pkg,$(gb_Package_MODULE_$*),auto_$*_pkg_$(pkg)))
-	$(foreach lib,$(gb_Library_MODULE_$*),\
-		echo '$(SCP2LIBTEMPLATE)(auto_$*_lib_$(call gb_AutoInstall__escape,$(lib)),$(call gb_Library_get_runtime_filename,$(lib))$(if $(SCP2COMPONENTCONDITION),$(COMMA)$(SCP2COMPONENTCONDITION)))' >> $@;)
-else
-	$(file >$@,/* autogenerated installs for group $* */)
-	$(call gb_AutoInstall__gen_define,\
-		$(foreach lib,$(gb_Library_MODULE_$*),auto_$*_lib_$(lib)) \
-		$(foreach lib,$(gb_SdkLinkLibrary_MODULE_$*),auto_$*_link_$(lib)) \
-		$(foreach exe,$(gb_Executable_MODULE_$*),auto_$*_exe_$(exe)) \
-		$(foreach jar,$(gb_Jar_MODULE_$*),auto_$*_jar_$(jar)) \
-		$(foreach pkg,$(gb_Package_MODULE_$*),auto_$*_pkg_$(pkg)))
-	$(file >>$@,$(foreach lib,$(gb_Library_MODULE_$*),$(call gb_AutoInstall__gen_lib,$(lib))))
-endif
-	$(foreach lib,$(gb_SdkLinkLibrary_MODULE_$*),\
-		echo 'SDK_LIBRARY_LINK(auto_$*_link_$(lib),$(notdir $(call gb_Library_get_sdk_link_lib,$(lib))),../../program/$(call gb_Library_get_runtime_filename,$(lib)))' >> $@;)
-	$(foreach exe,$(gb_Executable_MODULE_$*),\
-		echo "$(SCP2EXETEMPLATE)(auto_$*_exe_$(call gb_AutoInstall__escape,$(exe)),$(call gb_Executable_get_filename,$(exe))$(if $(SCP2COMPONENTCONDITION),$(COMMA)$(SCP2COMPONENTCONDITION)))" >> $@;)
-	$(foreach jar,$(gb_Jar_MODULE_$*),\
-		echo '$(SCP2JARTEMPLATE)(auto_$*_jar_$(call gb_AutoInstall__escape,$(jar)),$(jar).jar)' >> $@;)
-ifeq ($(HAVE_GNUMAKE_FILE_FUNC),)
-	$(foreach pkg,$(gb_Package_MODULE_$*),\
-		echo 'PACKAGE_FILELIST(auto_$*_pkg_$(call gb_AutoInstall__escape,$(pkg)),$(pkg).filelist)' >> $@;)
-else
-	$(file >>$@,$(foreach pkg,$(gb_Package_MODULE_$*),$(call gb_AutoInstall__gen_pkg,$(pkg))))
-endif
+	SDKLIBFILE=$(call var2file,$(shell $(gb_MKTEMP)),100,\
+	   $(foreach lib,$(gb_SdkLinkLibrary_MODULE_$*),\
+			$(lib) \
+			$(notdir $(call gb_Library_get_sdk_link_lib,$(lib))) \
+			../../program/$(call gb_Library_get_runtime_filename,$(lib)))) \
+	&& LIBFILE=$(call var2file,$(shell $(gb_MKTEMP)),100,\
+		$(foreach lib,$(gb_Library_MODULE_$*),\
+			$(lib) \
+			$(call gb_Library_get_runtime_filename,$(lib)))) \
+	&& EXEFILE=$(call var2file,$(shell $(gb_MKTEMP)),100,\
+		$(foreach exe,$(gb_Executable_MODULE_$*),\
+			$(exe) \
+			$(call gb_Executable_get_filename,$(exe)))) \
+	&& JARFILE=$(call var2file,$(shell $(gb_MKTEMP)),100,$(gb_Jar_MODULE_$*)) \
+	&& PKGFILE=$(call var2file,$(shell $(gb_MKTEMP)),100,$(gb_Package_MODULE_$*)) \
+	&& $(call gb_ExternalExecutable_get_command,python) \
+			$(GBUILDDIR)/gen-autoinstall.py \
+			'$*' '$(SCP2COMPONENTCONDITION)' \
+			'$(SCP2LIBTEMPLATE)' '$(SCP2EXETEMPLATE)' '$(SCP2JARTEMPLATE)' \
+			$${SDKLIBFILE} $${LIBFILE} $${EXEFILE} $${JARFILE} $${PKGFILE} \
+			> $@ \
+	&& rm -f $${SDKLIBFILE} $${LIBFILE} $${EXEFILE} $${JARFILE} $${PKGFILE}
 
 
 $(call gb_AutoInstall_get_clean_target,%) :
diff --git a/solenv/gbuild/gen-autoinstall.py b/solenv/gbuild/gen-autoinstall.py
new file mode 100644
index 0000000..6c0e4ad
--- /dev/null
+++ b/solenv/gbuild/gen-autoinstall.py
@@ -0,0 +1,81 @@
+# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+# generate AutoInstall files from gbuild data for further scp2 processing
+
+from __future__ import print_function
+
+import sys
+
+module = sys.argv[1]
+scp2componentcondition = sys.argv[2]
+scp2libtemplate = sys.argv[3]
+scp2exetemplate = sys.argv[4]
+scp2jartemplate = sys.argv[5]
+sdklibs = open(sys.argv[6]).readline().split()
+libs = open(sys.argv[7]).readline().split()
+exes = open(sys.argv[8]).readline().split()
+jars = open(sys.argv[9]).readline().split()
+pkgs = open(sys.argv[10]).readline().split()
+
+if len(scp2componentcondition) > 0:
+    scp2componentcondition = "," + scp2componentcondition
+
+def escape(string):
+    return string.replace(".", "_").replace("-", "_").replace("/", "_")
+
+def to_tuple(l):
+    ret = []
+    i = 0
+    while i < len(l):
+        ret.append((l[i], l[i+1]))
+        i += 2
+    return ret
+
+def to_triple(l):
+    ret = []
+    i = 0
+    while i < len(l):
+        ret.append((l[i], l[i+1], l[i+2]))
+        i += 3
+    return ret
+
+print("/* autogenerated installs for group " + module + " */")
+print("#define auto_" + module + "_ALL \\")
+
+autosdklibs = [("auto_" + module + "_link_" + escape(lib),link,target) for (lib,link,target) in to_triple(sdklibs)]
+autolibs = [("auto_" + module + "_lib_" + escape(lib),libfile) for (lib,libfile) in to_tuple(libs)]
+autoexes = [("auto_" + module + "_exe_" + escape(exe),exefile) for (exe,exefile) in to_tuple(exes)]
+autojars = [("auto_" + module + "_jar_" + escape(jar),jar + ".jar") for jar in jars]
+autopkgs = [("auto_" + module + "_pkg_" + escape(pkg),pkg + ".filelist") for pkg in pkgs]
+
+allgids = [gid for (gid,_,_) in autosdklibs] + \
+          [gid for (gid,_) in autolibs] + \
+          [gid for (gid,_) in autoexes] + \
+          [gid for (gid,_) in autojars] + \
+          [gid for (gid,_) in autopkgs]
+
+print(", \\\n".join(["    " + gid for gid in allgids]))
+
+for (gid, link, target) in autosdklibs:
+    print("SDK_LIBRARY_LINK(" + gid + "," + link + "," + target + ")")
+
+for (gid, libfile) in autolibs:
+    print(scp2libtemplate + "(" + gid + "," + libfile + scp2componentcondition + ")")
+
+for (gid, exefile) in autoexes:
+    print(scp2exetemplate + "(" + gid + "," + exefile + scp2componentcondition + ")")
+
+for (gid, jarfile) in autojars:
+    print(scp2jartemplate + "(" + gid + "," + jarfile + scp2componentcondition + ")")
+
+for (gid, pkgfilelist) in autopkgs:
+    print("PACKAGE_FILELIST(" + gid + "," + pkgfilelist + scp2componentcondition + ")")
+
+# vim:set shiftwidth=4 softtabstop=4 expandtab:


More information about the Libreoffice-commits mailing list