summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config_host.mk.in3
-rw-r--r--configure.ac12
-rw-r--r--external/gpgmepp/ExternalProject_gpgmepp.mk12
-rw-r--r--external/libassuan/ExternalProject_libassuan.mk11
-rw-r--r--external/libgpg-error/ExternalProject_libgpg-error.mk10
-rw-r--r--solenv/clang-format/excludelist2
-rw-r--r--solenv/gbuild/platform/com_MSC_class.mk4
-rw-r--r--solenv/gbuild/platform/com_MSC_defs.mk8
-rw-r--r--solenv/gcc-wrappers/g++.cxx16
-rw-r--r--solenv/gcc-wrappers/gcc.cxx16
-rw-r--r--solenv/gcc-wrappers/wrapper.cxx56
-rw-r--r--solenv/gcc-wrappers/wrapper.hxx4
12 files changed, 107 insertions, 47 deletions
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