[Libreoffice-commits] core.git: config_host.mk.in configure.ac external/gpgmepp external/libassuan external/libgpg-error solenv/clang-format solenv/gbuild solenv/gcc-wrappers

Jan-Marek Glogowski (via logerrit) logerrit at kemper.freedesktop.org
Fri Sep 11 16:44:38 UTC 2020


 config_host.mk.in                                     |    3 
 configure.ac                                          |   12 ++-
 external/gpgmepp/ExternalProject_gpgmepp.mk           |   12 +--
 external/libassuan/ExternalProject_libassuan.mk       |   11 +--
 external/libgpg-error/ExternalProject_libgpg-error.mk |   10 +--
 solenv/clang-format/excludelist                       |    2 
 solenv/gbuild/platform/com_MSC_class.mk               |    4 -
 solenv/gbuild/platform/com_MSC_defs.mk                |    8 ++
 solenv/gcc-wrappers/g++.cxx                           |   16 ++---
 solenv/gcc-wrappers/gcc.cxx                           |   16 ++---
 solenv/gcc-wrappers/wrapper.cxx                       |   56 ++++++++++++++++--
 solenv/gcc-wrappers/wrapper.hxx                       |    4 -
 12 files changed, 107 insertions(+), 47 deletions(-)

New commits:
commit 4108665b63ab432732b8b351568c255d872cc3ff
Author:     Jan-Marek Glogowski <glogow at fbihome.de>
AuthorDate: Tue Jul 14 23:06:03 2020 +0200
Commit:     Jan-Marek Glogowski <glogow at fbihome.de>
CommitDate: Fri Sep 11 18:43:48 2020 +0200

    WIN cross: fix gpg-related library builds
    
    Cross compiling these libraries requires to supply the cross-
    compiler via the CC_FOR_BUILD environment variable. Since we have
    to use the gcc-wrappers, we now need two different invocations
    with different inclues and libraries, but just have fixed
    environment variables. Also, the CC_FOR_BUILD clashes with LO's
    own variant, but that is easy to fix.
    
    So this change includes:
    - gcc-wrappers: new option --wrapper-env-prefix to add a prefix
      to the environment variable names
    - gcc-wrappers: new option --wrapper-print-cmdline to dump the
      real command called, when a verbose build is executed
    - gcc-wrappers: default to exe, if the output has no extension
    - unify build flags for gpg related libraries
    
    Change-Id: I4e6a6ba3c6e09237c8ffefa40ce61131290a3852
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/102482
    Tested-by: Jenkins
    Reviewed-by: Jan-Marek Glogowski <glogow at fbihome.de>

diff --git a/config_host.mk.in b/config_host.mk.in
index bcebdb669e29..e3014b015a48 100644
--- a/config_host.mk.in
+++ b/config_host.mk.in
@@ -62,6 +62,7 @@ export BZIP2_LIBS=$(gb_SPACE)@BZIP2_LIBS@
 export CAIRO_CFLAGS=$(gb_SPACE)@CAIRO_CFLAGS@
 export CAIRO_LIBS=$(gb_SPACE)@CAIRO_LIBS@
 export CC=@CC@
+export CC_FOR_BUILD=@CC_FOR_BUILD@
 export CCACHE_DEPEND_MODE=@CCACHE_DEPEND_MODE@
 export CDR_CFLAGS=$(gb_SPACE)@CDR_CFLAGS@
 export CDR_LIBS=$(gb_SPACE)@CDR_LIBS@
@@ -108,6 +109,7 @@ export CURL_LIBS=$(gb_SPACE)@CURL_LIBS@
 export CUSTOM_BRAND_DIR=@CUSTOM_BRAND_DIR@
 export CUSTOM_BRAND_IMAGES=@CUSTOM_BRAND_IMAGES@
 export CXX=@CXX@
+export CXX_FOR_BUILD=@CXX_FOR_BUILD@
 export CXX_X64_BINARY=@CXX_X64_BINARY@
 export CXX_X86_BINARY=@CXX_X86_BINARY@
 @x_CXXFLAGS@ export CXXFLAGS=@CXXFLAGS@
@@ -305,6 +307,7 @@ export ICU_RECLASSIFIED_PREPEND_SET_EMPTY=@ICU_RECLASSIFIED_PREPEND_SET_EMPTY@
 export ICU_UCHAR_TYPE=@ICU_UCHAR_TYPE@
 export INTROSPECTION_SCANNER=@INTROSPECTION_SCANNER@
 export ILIB=@ILIB@
+export ILIB_FOR_BUILD=@ILIB_FOR_BUILD@
 export INSTALLDIR=@INSTALLDIR@
 export INSTALLDIRNAME=@INSTALLDIRNAME@
 export INSTALL_NAME_TOOL=@INSTALL_NAME_TOOL@
diff --git a/configure.ac b/configure.ac
index 6b7c4562db8e..6ae8f714e5fa 100644
--- a/configure.ac
+++ b/configure.ac
@@ -5006,14 +5006,14 @@ if test "$cross_compiling" = "yes"; then
     mv config_host/*.h ../config_build
 
     OLD_PATH=$PATH
-    . ./bin/get_config_variables CC CXX INSTDIR INSTROOT LIBO_BIN_FOLDER LIBO_LIB_FOLDER LIBO_URE_LIB_FOLDER LIBO_URE_MISC_FOLDER OS PATH SDKDIRNAME SYSTEM_LIBXML SYSTEM_LIBXSLT WORKDIR
+    . ./bin/get_config_variables CC CXX ILIB INSTDIR INSTROOT LIBO_BIN_FOLDER LIBO_LIB_FOLDER LIBO_URE_LIB_FOLDER LIBO_URE_MISC_FOLDER OS PATH SDKDIRNAME SYSTEM_LIBXML SYSTEM_LIBXSLT WORKDIR
     BUILD_PATH=$PATH
     PATH=$OLD_PATH
 
     line=`echo "LO_PATH_FOR_BUILD='${BUILD_PATH}'" | sed -e 's,/CONF-FOR-BUILD,,g'`
     echo "$line" >>build-config
 
-    for V in CC CXX LIBO_BIN_FOLDER LIBO_LIB_FOLDER LIBO_URE_LIB_FOLDER LIBO_URE_MISC_FOLDER OS SDKDIRNAME SYSTEM_LIBXML SYSTEM_LIBXSLT; do
+    for V in CC CXX ILIB LIBO_BIN_FOLDER LIBO_LIB_FOLDER LIBO_URE_LIB_FOLDER LIBO_URE_MISC_FOLDER OS SDKDIRNAME SYSTEM_LIBXML SYSTEM_LIBXSLT; do
         VV='$'$V
         VV=`eval "echo $VV"`
         if test -n "$VV"; then
@@ -5065,6 +5065,8 @@ AC_SUBST(LIBO_URE_LIB_FOLDER_FOR_BUILD)
 AC_SUBST(LIBO_URE_MISC_FOLDER_FOR_BUILD)
 AC_SUBST(SDKDIRNAME_FOR_BUILD)
 AC_SUBST(WORKDIR_FOR_BUILD)
+AC_SUBST(CC_FOR_BUILD)
+AC_SUBST(CXX_FOR_BUILD)
 
 dnl ===================================================================
 dnl Check for syslog header
@@ -13361,8 +13363,12 @@ if test "$build_os" = "cygwin"; then
         ILIB="$ILIB;$DOTNET_FRAMEWORK_HOME/Lib/um/$WIN_HOST_ARCH"
     fi
 
-    AC_SUBST(ILIB)
+    if test "$cross_compiling" != "yes"; then
+        ILIB_FOR_BUILD="$ILIB"
+    fi
 fi
+AC_SUBST(ILIB)
+AC_SUBST(ILIB_FOR_BUILD)
 
 # ===================================================================
 # Creating bigger shared library to link against
diff --git a/external/gpgmepp/ExternalProject_gpgmepp.mk b/external/gpgmepp/ExternalProject_gpgmepp.mk
index c2263413ee18..313f1e41be83 100644
--- a/external/gpgmepp/ExternalProject_gpgmepp.mk
+++ b/external/gpgmepp/ExternalProject_gpgmepp.mk
@@ -21,12 +21,11 @@ $(eval $(call gb_ExternalProject_use_externals,gpgmepp,\
 ))
 
 ifeq ($(COM),MSC)
-gb_ExternalProject_gpgmepp_host := $(if $(filter INTEL,$(CPUNAME)),i686-mingw32,x86_64-w64-mingw32)
-gb_ExternalProject_gpgmepp_target := $(if $(filter INTEL,$(CPUNAME)),pe-i386,pe-x86-64)
-$(call gb_ExternalProject_get_state_target,gpgmepp,build): $(call gb_Executable_get_target,cpp)
+$(call gb_ExternalProject_get_state_target,gpgmepp,build): $(call gb_Executable_get_target_for_build,cpp)
 	$(call gb_Trace_StartRange,gpgmepp,EXTERNAL)
-	$(call gb_ExternalProject_run,build,\
-		autoreconf \
+	$(call gb_ExternalProject_run,build, \
+		$(gb_WIN_GPG_cross_setup_exports) \
+		&& autoreconf \
 		&& ./configure \
 		   --disable-shared \
 		   --disable-languages \
@@ -38,8 +37,7 @@ $(call gb_ExternalProject_get_state_target,gpgmepp,build): $(call gb_Executable_
 				$(if $(ENABLE_OPTIMIZED), \
 					$(gb_COMPILEROPTFLAGS),$(gb_COMPILERNOOPTFLAGS)) \
 				$(if $(call gb_Module__symbols_enabled,gpgmepp),$(gb_DEBUGINFO_FLAGS))' \
-           --host=$(gb_ExternalProject_gpgmepp_host) \
-		   RC='windres -O COFF --target=$(gb_ExternalProject_gpgmepp_target) --preprocessor='\''$(call gb_Executable_get_target,cpp) -+ -DRC_INVOKED -DWINAPI_FAMILY=0 $(SOLARINC)'\' \
+		   $(gb_WIN_GPG_platform_switches) \
 		   MAKE=$(MAKE) \
 	    && $(MAKE) \
 	)
diff --git a/external/libassuan/ExternalProject_libassuan.mk b/external/libassuan/ExternalProject_libassuan.mk
index 565d38ff9a1c..e4e24aeac7fd 100644
--- a/external/libassuan/ExternalProject_libassuan.mk
+++ b/external/libassuan/ExternalProject_libassuan.mk
@@ -19,13 +19,13 @@ $(eval $(call gb_ExternalProject_use_externals,libassuan,\
        libgpg-error \
 ))
 
+
 ifeq ($(COM),MSC)
-gb_ExternalProject_libassuan_host := $(if $(filter INTEL,$(CPUNAME)),i686-mingw32,x86_64-w64-mingw32)
-gb_ExternalProject_libassuan_target := $(if $(filter INTEL,$(CPUNAME)),pe-i386,pe-x86-64)
-$(call gb_ExternalProject_get_state_target,libassuan,build): $(call gb_Executable_get_target,cpp)
+$(call gb_ExternalProject_get_state_target,libassuan,build): $(call gb_Executable_get_target_for_build,cpp)
 	$(call gb_Trace_StartRange,libassuan,EXTERNAL)
 	$(call gb_ExternalProject_run,build,\
-	  autoreconf \
+	  $(gb_WIN_GPG_cross_setup_exports) \
+	  && autoreconf \
 	  && ./configure \
 		--enable-static \
 		--disable-shared \
@@ -34,8 +34,7 @@ $(call gb_ExternalProject_get_state_target,libassuan,build): $(call gb_Executabl
 		CXXFLAGS="$(CXXFLAGS)" \
 		GPG_ERROR_CFLAGS="$(GPG_ERROR_CFLAGS)" \
 		GPG_ERROR_LIBS="$(GPG_ERROR_LIBS)" \
-        --host=$(gb_ExternalProject_libassuan_host) \
-		RC='windres -O COFF --target=$(gb_ExternalProject_libassuan_target) --preprocessor='\''$(call gb_Executable_get_target,cpp) -+ -DRC_INVOKED -DWINAPI_FAMILY=0 $(SOLARINC)'\' \
+		$(gb_WIN_GPG_platform_switches) \
 		MAKE=$(MAKE) \
 	  && $(MAKE) \
 	)
diff --git a/external/libgpg-error/ExternalProject_libgpg-error.mk b/external/libgpg-error/ExternalProject_libgpg-error.mk
index cf0b594dca24..736079c77aec 100644
--- a/external/libgpg-error/ExternalProject_libgpg-error.mk
+++ b/external/libgpg-error/ExternalProject_libgpg-error.mk
@@ -16,20 +16,18 @@ $(eval $(call gb_ExternalProject_register_targets,libgpg-error,\
 $(eval $(call gb_ExternalProject_use_autoconf,libgpg-error,build))
 
 ifeq ($(COM),MSC)
-gb_ExternalProject_libgpg-error_host := $(if $(filter INTEL,$(CPUNAME)),i686-mingw32,x86_64-w64-mingw32)
-gb_ExternalProject_libgpg-error_target := $(if $(filter INTEL,$(CPUNAME)),pe-i386,pe-x86-64)
-$(call gb_ExternalProject_get_state_target,libgpg-error,build): $(call gb_Executable_get_target,cpp)
+$(call gb_ExternalProject_get_state_target,libgpg-error,build): $(call gb_Executable_get_target_for_build,cpp)
 	$(call gb_Trace_StartRange,libgpg-error,EXTERNAL)
 	$(call gb_ExternalProject_run,build,\
-		MAKE=$(MAKE) ./configure \
+		$(gb_WIN_GPG_cross_setup_exports) \
+		&& MAKE=$(MAKE) ./configure \
 			--enable-static \
 			--disable-shared \
 			--disable-rpath \
 			--disable-languages \
 			--disable-doc \
 			--disable-tests \
-			--host=$(gb_ExternalProject_libgpg-error_host) \
-			RC='windres -O COFF --target=$(gb_ExternalProject_libgpg-error_target) --preprocessor='\''$(call gb_Executable_get_target,cpp) -+ -DRC_INVOKED -DWINAPI_FAMILY=0 $(SOLARINC)'\' \
+			$(gb_WIN_GPG_platform_switches) \
 	    && $(MAKE) \
 	)
 	$(call gb_Trace_EndRange,libgpg-error,EXTERNAL)
diff --git a/solenv/clang-format/excludelist b/solenv/clang-format/excludelist
index e78748adc6a8..ee51f6caf2a1 100644
--- a/solenv/clang-format/excludelist
+++ b/solenv/clang-format/excludelist
@@ -12573,8 +12573,6 @@ smoketest/libtest.cxx
 smoketest/smoketest.cxx
 solenv/bin/concat-deps.c
 solenv/gbuildtojson/gbuildtojson.cxx
-solenv/gcc-wrappers/g++.cxx
-solenv/gcc-wrappers/gcc.cxx
 solenv/gcc-wrappers/wrapper.cxx
 soltools/cpp/_cpp.c
 soltools/cpp/_eval.c
diff --git a/solenv/gbuild/platform/com_MSC_class.mk b/solenv/gbuild/platform/com_MSC_class.mk
index 996c5a4b06c5..c27fc0c95446 100644
--- a/solenv/gbuild/platform/com_MSC_class.mk
+++ b/solenv/gbuild/platform/com_MSC_class.mk
@@ -598,10 +598,10 @@ endef
 gb_AUTOCONF_WRAPPERS = \
 	REAL_CC="$(shell cygpath -w $(filter-out -%,$(CC)))" \
 	REAL_CC_FLAGS="$(filter -%,$(CC))" \
-	CC="$(call gb_Executable_get_target_for_build,gcc-wrapper)" \
+	CC="$(call gb_Executable_get_target_for_build,gcc-wrapper) $(if $(verbose),--wrapper-print-cmdline)" \
 	REAL_CXX="$(shell cygpath -w $(filter-out -%,$(CXX)))" \
 	REAL_CXX_FLAGS="$(filter -%,$(CXX))" \
-	CXX="$(call gb_Executable_get_target_for_build,g++-wrapper)" \
+	CXX="$(call gb_Executable_get_target_for_build,g++-wrapper) $(if $(verbose),--wrapper-print-cmdline)" \
     LD="$(shell cygpath -w $(COMPATH)/bin/link.exe) -nologo"
 
 gb_ExternalProject_INCLUDE := \
diff --git a/solenv/gbuild/platform/com_MSC_defs.mk b/solenv/gbuild/platform/com_MSC_defs.mk
index 05de2691a03e..5a02731bac7b 100644
--- a/solenv/gbuild/platform/com_MSC_defs.mk
+++ b/solenv/gbuild/platform/com_MSC_defs.mk
@@ -361,4 +361,12 @@ define gb_Helper_extend_ld_path
 $(gb_Helper_set_ld_path)';$(shell cygpath $(gb_MAKE_CYGPATH) $(1))'
 endef
 
+# common macros to build GPG related libraries
+# we explicitly have to replace cygwin with mingw32 for the host, but the build must stay cygwin, or cmd.exe processes will be spawned
+gb_WIN_GPG_WINDRES_target := $(if $(filter INTEL,$(CPUNAME)),pe-i386,pe-x86-64)
+gb_WIN_GPG_platform_switches := --build=$(BUILD_PLATFORM) --host=$(subst cygwin,mingw32,$(HOST_PLATFORM))
+gb_WIN_GPG_cross_setup_exports = export REAL_BUILD_CC="$(CC_FOR_BUILD)" \
+    && export CC_FOR_BUILD="$(call gb_Executable_get_target_for_build,gcc-wrapper) $(if $(verbose),--wrapper-print-cmdline) --wrapper-env-prefix=REAL_BUILD_ $(SOLARINC) -L$(subst ;, -L,$(ILIB_FOR_BUILD))" \
+    && export RC='windres -O COFF --target=$(gb_WIN_GPG_WINDRES_target) --preprocessor='\''$(call gb_Executable_get_target_for_build,cpp) -+ -DRC_INVOKED -DWINAPI_FAMILY=0 $(SOLARINC)'\'
+
 # vim: set noet sw=4:
diff --git a/solenv/gcc-wrappers/g++.cxx b/solenv/gcc-wrappers/g++.cxx
index 626b1643590c..2f99d4606ac7 100644
--- a/solenv/gcc-wrappers/g++.cxx
+++ b/solenv/gcc-wrappers/g++.cxx
@@ -9,19 +9,21 @@
 
 #include "wrapper.hxx"
 
-int main(int argc, char *argv[]) {
+int main(int argc, char* argv[])
+{
     vector<string> rawargs(argv + 1, argv + argc);
 
-    string command=getexe("REAL_CXX");
-    string flags=getexe("REAL_CXX_FLAGS", true);
+    string env_prefix; // defaults to REAL_
+    bool verbose = false;
+    string args = processccargs(rawargs, env_prefix, verbose);
 
-    string args=flags.empty() ? string() : flags + " ";
-    args += processccargs(rawargs);
+    string command = getexe(env_prefix + "CXX");
+    string flags = getexe(env_prefix + "CXX_FLAGS", true);
+    args.insert(0, flags.empty() ? string() : flags + " ");
 
     setupccenv();
 
-    return startprocess(command,args);
-
+    return startprocess(command, args, verbose);
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/solenv/gcc-wrappers/gcc.cxx b/solenv/gcc-wrappers/gcc.cxx
index f34c2dba8c99..8accb8216a11 100644
--- a/solenv/gcc-wrappers/gcc.cxx
+++ b/solenv/gcc-wrappers/gcc.cxx
@@ -9,19 +9,21 @@
 
 #include "wrapper.hxx"
 
-int main(int argc, char *argv[]) {
+int main(int argc, char* argv[])
+{
     vector<string> rawargs(argv + 1, argv + argc);
 
-    string command=getexe("REAL_CC");
-    string flags=getexe("REAL_CC_FLAGS", true);
+    string env_prefix; // defaults to REAL_
+    bool verbose = false;
+    string args = processccargs(rawargs, env_prefix, verbose);
 
-    string args=flags.empty() ? string() : flags + " ";
-    args += processccargs(rawargs);
+    string command = getexe(env_prefix + "CC");
+    string flags = getexe(env_prefix + "CC_FLAGS", true);
+    args.insert(0, flags.empty() ? string() : flags + " ");
 
     setupccenv();
 
-    return startprocess(command,args);
-
+    return startprocess(command, args, verbose);
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/solenv/gcc-wrappers/wrapper.cxx b/solenv/gcc-wrappers/wrapper.cxx
index b156c89dc220..56936155fa47 100644
--- a/solenv/gcc-wrappers/wrapper.cxx
+++ b/solenv/gcc-wrappers/wrapper.cxx
@@ -82,7 +82,13 @@ void setupccenv() {
     }
 }
 
-string processccargs(vector<string> rawargs) {
+string processccargs(vector<string> rawargs, string &env_prefix, bool &verbose)
+{
+    // default env var prefix
+    env_prefix = "REAL_";
+    verbose = false;
+    bool env_prefix_next_arg = false;
+
     // suppress the msvc banner
     string args=" -nologo";
     // TODO: should these options be enabled globally?
@@ -101,6 +107,13 @@ string processccargs(vector<string> rawargs) {
     string linkargs(" -link -debug");
 
     for(vector<string>::iterator i = rawargs.begin(); i != rawargs.end(); ++i) {
+        if (env_prefix_next_arg)
+        {
+            env_prefix = *i;
+            env_prefix_next_arg = false;
+            continue;
+        }
+
         args.append(" ");
         if(*i == "-o") {
             // TODO: handle more than just exe output
@@ -121,10 +134,15 @@ string processccargs(vector<string> rawargs) {
                 linkargs.append(" -dll -out:");
                 linkargs.append(*i);
             }
+            else if (dot == string::npos)
+            {
+                args.append("-Fe");
+                args.append(*i + ".exe");
+            }
             else
             {
                 cerr << "unknown -o argument - please adapt gcc-wrapper for \""
-                     << (*i) << "\"";
+                     << (*i) << "\"" << endl;
                 exit(1);
             }
         }
@@ -159,14 +177,41 @@ string processccargs(vector<string> rawargs) {
         }
         else if(*i == "-Werror")
             args.append("-WX");
+        else if (*i == "--wrapper-print-cmdline")
+            verbose = true;
         else
-            args.append(*i);
+        {
+            size_t pos = i->find("=");
+            if (0 == i->compare(0, pos, "--wrapper-env-prefix"))
+            {
+                if (pos == string::npos)
+                    env_prefix_next_arg = true;
+                else if (pos + 1 == i->length())
+                {
+                    // bailout - missing arg
+                    env_prefix_next_arg = true;
+                    break;
+                }
+                else
+                    env_prefix = i->substr(pos + 1);
+            }
+            else
+                args.append(*i);
+        }
     }
+
+    if (env_prefix_next_arg)
+    {
+        cerr << "wrapper-env-prefix needs an argument!" << endl;
+        exit(1);
+    }
+
     args.append(linkargs);
     return args;
 }
 
-int startprocess(string command, string args) {
+int startprocess(string command, string args, bool verbose)
+{
     STARTUPINFO si;
     PROCESS_INFORMATION pi;
     SECURITY_ATTRIBUTES sa;
@@ -200,7 +245,8 @@ int startprocess(string command, string args) {
 
     auto cmdline = "\"" + command + "\" " + args;
 
-    //cerr << "CMD= " << command << " " << args << endl;
+    if (verbose)
+        cerr << "CMD= " << command << " " << args << endl;
 
     // Commandline may be modified by CreateProcess
     char* cmdlineBuf=_strdup(cmdline.c_str());
diff --git a/solenv/gcc-wrappers/wrapper.hxx b/solenv/gcc-wrappers/wrapper.hxx
index 789bc9280267..208d9b82c449 100644
--- a/solenv/gcc-wrappers/wrapper.hxx
+++ b/solenv/gcc-wrappers/wrapper.hxx
@@ -20,9 +20,9 @@ string getexe(string exename, bool maybeempty = false);
 
 void setupccenv();
 
-string processccargs(vector<string> rawargs);
+string processccargs(vector<string> rawargs, string& env_prefix, bool& verbose);
 
-int startprocess(string command, string args);
+int startprocess(string command, string args, bool verbose);
 
 #endif // INCLUDED_SOLENV_GCC_WRAPPERS_WRAPPER_HXX
 


More information about the Libreoffice-commits mailing list