[Libreoffice-commits] core.git: Branch 'feature/gccwrapper' - 6 commits - libvisio/ExternalPackage_libvisio.mk Repository.mk solenv/Executable_ld-wrapper.mk solenv/gbuild solenv/gcc-wrappers solenv/Module_solenv.mk
Peter Foley
pefoley2 at verizon.net
Fri Mar 8 18:47:17 PST 2013
Repository.mk | 1
libvisio/ExternalPackage_libvisio.mk | 4 +-
solenv/Executable_ld-wrapper.mk | 16 ++++++++
solenv/Module_solenv.mk | 1
solenv/gbuild/ExternalProject.mk | 6 ++-
solenv/gcc-wrappers/ld.cxx | 14 +++++++
solenv/gcc-wrappers/wrapper.cxx | 64 +++++++++++++++++++++++++----------
7 files changed, 85 insertions(+), 21 deletions(-)
New commits:
commit 74ef002adaf53042c19d7cecef13d835b9c389e7
Author: Peter Foley <pefoley2 at verizon.net>
Date: Fri Mar 8 21:45:16 2013 -0500
fix linking with wpftdraw
Change-Id: I9bfea157b68d17e5aa212c34238c27260917192e
diff --git a/solenv/gcc-wrappers/wrapper.cxx b/solenv/gcc-wrappers/wrapper.cxx
index c994d2e..bb2a154 100644
--- a/solenv/gcc-wrappers/wrapper.cxx
+++ b/solenv/gcc-wrappers/wrapper.cxx
@@ -69,8 +69,10 @@ string processldargs(vector<string> rawargs) {
string processccargs(vector<string> rawargs) {
// suppress the msvc banner
string args=" -nologo";
- // TODO: should this be enabled globally or just for libvisio?
+ // TODO: should these options be enabled globally or just for libvisio?
args.append(" -EHsc");
+ args.append(" -MD");
+
for(vector<string>::iterator i = rawargs.begin(); i != rawargs.end(); ++i) {
args.append(" ");
if(*i == "-o") {
commit 5f29ea9a5142e111634a56f70170b62ec0dd8623
Author: Peter Foley <pefoley2 at verizon.net>
Date: Fri Mar 8 21:28:42 2013 -0500
libvisio works now
Change-Id: I33b8ca0be6356d7c24f8bb467b4120963f6a5ee6
diff --git a/libvisio/ExternalPackage_libvisio.mk b/libvisio/ExternalPackage_libvisio.mk
index 76d573a..5838a13 100644
--- a/libvisio/ExternalPackage_libvisio.mk
+++ b/libvisio/ExternalPackage_libvisio.mk
@@ -17,8 +17,8 @@ $(eval $(call gb_ExternalPackage_add_unpacked_files,libvisio,inc/external/libvis
$(eval $(call gb_ExternalPackage_use_external_project,libvisio,libvisio))
-ifeq ($(OS)$(COM),WNTMSC)
-$(eval $(call gb_ExternalPackage_add_file,libvisio,lib/visio-0.0.lib,build/win32/Release/lib/libvisio-0.0.lib))
+ifeq ($(COM),MSC)
+$(eval $(call gb_ExternalPackage_add_file,libvisio,lib/visio-0.0.lib,src/lib/.libs/libvisio-0.0.lib))
else
$(eval $(call gb_ExternalPackage_add_file,libvisio,lib/libvisio-0.0.a,src/lib/.libs/libvisio-0.0.a))
endif
diff --git a/solenv/gcc-wrappers/wrapper.cxx b/solenv/gcc-wrappers/wrapper.cxx
index 21a4eb1..c994d2e 100644
--- a/solenv/gcc-wrappers/wrapper.cxx
+++ b/solenv/gcc-wrappers/wrapper.cxx
@@ -69,6 +69,8 @@ string processldargs(vector<string> rawargs) {
string processccargs(vector<string> rawargs) {
// suppress the msvc banner
string args=" -nologo";
+ // TODO: should this be enabled globally or just for libvisio?
+ args.append(" -EHsc");
for(vector<string>::iterator i = rawargs.begin(); i != rawargs.end(); ++i) {
args.append(" ");
if(*i == "-o") {
commit bce8664d62f989dd773237dbc38ead7facc6a329
Author: Peter Foley <pefoley2 at verizon.net>
Date: Fri Mar 8 19:04:19 2013 -0500
add missing files
Change-Id: Idd131f7f9c6402295c2d83fac415f010039d654a
diff --git a/solenv/Executable_ld-wrapper.mk b/solenv/Executable_ld-wrapper.mk
new file mode 100755
index 0000000..86d0758
--- /dev/null
+++ b/solenv/Executable_ld-wrapper.mk
@@ -0,0 +1,16 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# 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/.
+#
+
+$(eval $(call gb_Executable_Executable,ld-wrapper))
+
+$(eval $(call gb_Executable_add_exception_objects,ld-wrapper,\
+ solenv/gcc-wrappers/ld \
+))
+
+# vim:set noet sw=4 ts=4:
diff --git a/solenv/gbuild/ExternalProject.mk b/solenv/gbuild/ExternalProject.mk
index b6f66c8..d7dddaa 100644
--- a/solenv/gbuild/ExternalProject.mk
+++ b/solenv/gbuild/ExternalProject.mk
@@ -207,7 +207,7 @@ AUTOCONF_WRAPPERS := \
define gb_ExternalProject_run
$(call gb_Helper_print_on_error,cd $(EXTERNAL_WORKDIR)/$(3) && \
- $(if $(filter MSC,$(COM)),$(AUTOCONF_WRAPPERS)) \
+ $(if $(filter MSC,$(COM)),export $(AUTOCONF_WRAPPERS) &&) \
$(2) && touch $@,$(EXTERNAL_WORKDIR)/$(if $(3),$(3)/,)$(if $(4),$(4),$(1).log))
endef
diff --git a/solenv/gcc-wrappers/ld.cxx b/solenv/gcc-wrappers/ld.cxx
new file mode 100755
index 0000000..25faaa1
--- /dev/null
+++ b/solenv/gcc-wrappers/ld.cxx
@@ -0,0 +1,14 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-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/.
+*/
+
+#define REAL_EXE "REAL_LD"
+
+#include "wrapper.cxx"
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit c3d1cb48f4730c95fa94d0113b87318808183380
Author: Peter Foley <pefoley2 at verizon.net>
Date: Fri Mar 8 18:35:31 2013 -0500
add basic support for ld
Change-Id: I8ac529345c6b69ac390c612bf3ee3f4ef9cebf8b
diff --git a/Repository.mk b/Repository.mk
index d0d1bc8..5050250 100644
--- a/Repository.mk
+++ b/Repository.mk
@@ -110,6 +110,7 @@ $(eval $(call gb_Helper_register_executables,OOO,\
gengal \
gcc-wrapper \
g++-wrapper \
+ ld-wrapper \
guiloader \
guistdio \
langsupport \
diff --git a/solenv/Module_solenv.mk b/solenv/Module_solenv.mk
index 40f1580..8791bd5 100644
--- a/solenv/Module_solenv.mk
+++ b/solenv/Module_solenv.mk
@@ -43,6 +43,7 @@ ifeq ($(COM),MSC)
$(eval $(call gb_Module_add_targets,solenv,\
Executable_gcc-wrapper \
Executable_g++-wrapper \
+ Executable_ld-wrapper \
))
endif
diff --git a/solenv/gbuild/ExternalProject.mk b/solenv/gbuild/ExternalProject.mk
index fb2459f..b6f66c8 100644
--- a/solenv/gbuild/ExternalProject.mk
+++ b/solenv/gbuild/ExternalProject.mk
@@ -201,7 +201,9 @@ AUTOCONF_WRAPPERS := \
REAL_CC="$(shell cygpath -w $(CC))" \
CC="$(call gb_Executable_get_target,gcc-wrapper)" \
REAL_CXX="$(shell cygpath -w $(CXX))" \
- CXX="$(call gb_Executable_get_target,g++-wrapper)"
+ CXX="$(call gb_Executable_get_target,g++-wrapper)" \
+ LD="$(call gb_Executable_get_target,ld-wrapper)" \
+ REAL_LD="$(shell cygpath -w $(COMPATH)/bin/link.exe)"
define gb_ExternalProject_run
$(call gb_Helper_print_on_error,cd $(EXTERNAL_WORKDIR)/$(3) && \
diff --git a/solenv/gcc-wrappers/wrapper.cxx b/solenv/gcc-wrappers/wrapper.cxx
index 89bb565..21a4eb1 100644
--- a/solenv/gcc-wrappers/wrapper.cxx
+++ b/solenv/gcc-wrappers/wrapper.cxx
@@ -31,7 +31,7 @@ void setupenv() {
}
// Set-up include path
- string includepath="INCLUDE2=.;";
+ string includepath="INCLUDE=.;";
char* incbuf;
size_t inclen;
_dupenv_s(&incbuf,&inclen,"SOLARINC");
@@ -56,8 +56,19 @@ void setupenv() {
}
}
-string processargs(vector<string> rawargs) {
- string args;
+string processldargs(vector<string> rawargs) {
+ // suppress the msvc banner
+ string args=" -nologo";
+ for(vector<string>::iterator i = rawargs.begin(); i != rawargs.end(); ++i) {
+ args.append(" ");
+ args.append(*i);
+ }
+ return args;
+}
+
+string processccargs(vector<string> rawargs) {
+ // suppress the msvc banner
+ string args=" -nologo";
for(vector<string>::iterator i = rawargs.begin(); i != rawargs.end(); ++i) {
args.append(" ");
if(*i == "-o") {
@@ -143,17 +154,21 @@ int startprocess(string command, string args) {
int main(int argc, char *argv[]) {
vector<string> rawargs(argv + 1, argv + argc);
- char* ccbuf;
- size_t cclen;
- _dupenv_s(&ccbuf,&cclen,REAL_EXE);
- if(!ccbuf) {
+ char* cmdbuf;
+ size_t cmdlen;
+ _dupenv_s(&cmdbuf,&cmdlen,REAL_EXE);
+ if(!cmdbuf) {
cout << "Error " << REAL_EXE << " not defined. Did you forget to source the enviroment?" << endl;
exit(1);
}
- string command(ccbuf);
- free(ccbuf);
+ string command(cmdbuf);
+ free(cmdbuf);
- string args=processargs(rawargs);
+ string args;
+ if(!strcmp(REAL_EXE,"REAL_LD"))
+ args=processldargs(rawargs);
+ else
+ args=processccargs(rawargs);
setupenv();
commit 0602308ed744cd8f791b4c6bb61ebb97cb6d5397
Author: Peter Foley <pefoley2 at verizon.net>
Date: Fri Mar 8 18:09:23 2013 -0500
fix error handling
Change-Id: Iedb7c74b55bc44dd36ab4abf2a4b9fae738260db
diff --git a/solenv/gcc-wrappers/wrapper.cxx b/solenv/gcc-wrappers/wrapper.cxx
index 9f4e357..89bb565 100644
--- a/solenv/gcc-wrappers/wrapper.cxx
+++ b/solenv/gcc-wrappers/wrapper.cxx
@@ -50,7 +50,7 @@ void setupenv() {
}
pos=incvar.find(" -I",pos+len);
}
- if(_putenv(incvar.c_str())<0) {
+ if(_putenv(includepath.c_str())<0) {
cerr << "Error: could not export INCLUDE" << endl;
exit(1);
}
@@ -124,12 +124,13 @@ int startprocess(string command, string args) {
DWORD readlen, writelen, ret;
HANDLE stdouthandle=GetStdHandle(STD_OUTPUT_HANDLE);
while(true) {
- if(!ReadFile(stdout_read,buffer,buflen,&readlen,NULL)) {
+ int success=ReadFile(stdout_read,buffer,buflen,&readlen,NULL);
+ if(GetLastError()==ERROR_BROKEN_PIPE)
+ break;
+ if(!success) {
cerr << "Error: could not read from subprocess stdout" << endl;
exit(1);
}
- if(GetLastError()==ERROR_BROKEN_PIPE)
- break;
if(readlen!=0)
WriteFile(stdouthandle,buffer,readlen,&writelen,NULL);
}
@@ -156,7 +157,7 @@ int main(int argc, char *argv[]) {
setupenv();
- cerr << "CC=" << command << " ARGS=" << args << endl;
+ //cerr << "CC=" << command << " ARGS=" << args << endl;
int ret=startprocess(command,args);
return ret;
commit c470c9f532f61d747e0001424f23f93062878de0
Author: Peter Foley <pefoley2 at verizon.net>
Date: Fri Mar 8 17:58:09 2013 -0500
fix hang
Change-Id: Iab4f25009fe88b2e23de0af22fca5bee724ade80
diff --git a/solenv/gcc-wrappers/wrapper.cxx b/solenv/gcc-wrappers/wrapper.cxx
index e5a6cbb..9f4e357 100644
--- a/solenv/gcc-wrappers/wrapper.cxx
+++ b/solenv/gcc-wrappers/wrapper.cxx
@@ -25,7 +25,10 @@ void setupenv() {
_dupenv_s(&libbuf,&liblen,"ILIB");
libpath.append(libbuf);
free(libbuf);
- _putenv(libpath.c_str());
+ if(_putenv(libpath.c_str())<0) {
+ cerr << "Error: could not export LIB" << endl;
+ exit(1);
+ }
// Set-up include path
string includepath="INCLUDE2=.;";
@@ -47,7 +50,10 @@ void setupenv() {
}
pos=incvar.find(" -I",pos+len);
}
- _putenv(incvar.c_str());
+ if(_putenv(incvar.c_str())<0) {
+ cerr << "Error: could not export INCLUDE" << endl;
+ exit(1);
+ }
}
string processargs(vector<string> rawargs) {
@@ -110,19 +116,23 @@ int startprocess(string command, string args) {
exit(1);
}
+ // if you don't close this the process will hang
+ CloseHandle(stdout_write);
+
// Get Process output
char buffer[buflen];
DWORD readlen, writelen, ret;
HANDLE stdouthandle=GetStdHandle(STD_OUTPUT_HANDLE);
while(true) {
- int success=ReadFile(stdout_read,buffer,buflen,&readlen,NULL);
- DWORD err=GetLastError();
+ if(!ReadFile(stdout_read,buffer,buflen,&readlen,NULL)) {
+ cerr << "Error: could not read from subprocess stdout" << endl;
+ exit(1);
+ }
+ if(GetLastError()==ERROR_BROKEN_PIPE)
+ break;
if(readlen!=0)
WriteFile(stdouthandle,buffer,readlen,&writelen,NULL);
- if(err==ERROR_BROKEN_PIPE)
- break;
}
- //WaitForSingleObject(&pi.hProcess, INFINITE);
GetExitCodeProcess(pi.hProcess, &ret);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
More information about the Libreoffice-commits
mailing list