[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