Commits

Anonymous committed 2d31061

i10000# fix Windows build

  • Participants
  • Parent commits 0289c87

Comments (0)

Files changed (3)

 		AC_MSG_CHECKING([for friendly registry keys])
 		# VS.Net 2003, VS.Net 2005
 		if test -z "$with_cl_home"; then
-			vctest=`./solenv/bin/oowintool --msvc-productdir`;
+			vctest=`./oowintool --msvc-productdir`;
 			if test -x "$vctest/bin/cl.exe"; then
 				with_cl_home=$vctest;
 			fi
 		MIDL_PATH="$with_cl_home/../Common7/Tools/Bin"
 	fi
 	if test -z "$MIDL_PATH" ; then
-      vstest=`./solenv/bin/oowintool --msvs-productdir`;
+      vstest=`./oowintool --msvs-productdir`;
       if test -x "$vstest/Common7/Tools/Bin/midl.exe" ; then
 		  MIDL_PATH="$vstest/Common7/Tools/Bin"
       fi
 	fi
 	if test -z "$MIDL_PATH" ; then
-		psdktest=`./solenv/bin/oowintool --psdk-home`
+		psdktest=`./oowintool --psdk-home`
 		if test -x "$psdktest/Bin/midl.exe" ; then
 			MIDL_PATH="$psdktest/Bin"
 		fi
 	if test -x "$with_csc_path/csc.exe"; then
 		CSC_PATH="$with_csc_path"
 	else
-	   csctest=`./solenv/bin/oowintool --csc-compilerdir`;
+	   csctest=`./oowintool --csc-compilerdir`;
 	   if test -x "$csctest/csc.exe"; then
 	      CSC_PATH="$csctest"
 	   fi
 		    FRAME_HOME="$with_cl_home/../SDK/v1.1"
 	    fi
 	    if test -z "$FRAME_HOME" ; then
-          frametest=`./solenv/bin/oowintool --dotnetsdk-dir`
+          frametest=`./oowintool --dotnetsdk-dir`
           if test -f "$frametest/lib/mscoree.lib"; then
              FRAME_HOME="$frametest"
           else
-             frametest=`./solenv/bin/oowintool --psdk-home`
+             frametest=`./oowintool --psdk-home`
              if test -f "$frametest/lib/mscoree.lib"; then
                 FRAME_HOME="$frametest"
              fi
 
 if test "$_os" = "WINNT"; then
    if test -z "$with_jdk_home"; then
-      _jdk_home=`./solenv/bin/oowintool --jdk-home`
+      _jdk_home=`./oowintool --jdk-home`
        if test -d "$_jdk_home"; then
           with_jdk_home="$_jdk_home"
        fi
 	AC_MSG_CHECKING([for PSDK files])
 	if test -z "$with_psdk_home"; then
 		# This first line will detect a February 2003 Microsoft Platform SDK
-		PSDK_HOME=`./solenv/bin/oowintool --psdk-home`
+		PSDK_HOME=`./oowintool --psdk-home`
         # But there might be also an April 2005 PSDK, unfortunately MS changed
         # the registry entry. (we prefer the old version!?)
         if test -z "$PSDK_HOME"; then
     if test -e "$with_nsis_path/nsis.exe"; then
         NSIS_PATH="$with_nsis_path"
     fi
-    nsistest=`./solenv/bin/oowintool --nsis-dir`;
+    nsistest=`./oowintool --nsis-dir`;
     if test -x "$nsistest/nsis.exe"; then
         NSIS_PATH="$nsistest"
     fi
 fi
 
 dnl ===================================================================
-dnl Windows builds - use solenv/bin/oowintool to copy CRT dlls and manifest
+dnl Windows builds - use oowintool to copy CRT dlls and manifest
 dnl ===================================================================
 if test "$_os" = "WINNT"; then
-       if ./solenv/bin/oowintool --msvc-copy-dlls ./external/msvcp ; then
+       if ./oowintool --msvc-copy-dlls ./external/msvcp ; then
           :
        else
-          AC_MSG_ERROR([solenv/bin/oowintool failed to copy CRT])
+          AC_MSG_ERROR([oowintool failed to copy CRT])
        fi
 fi
 
 dnl Windows builds - attempt to auto-copy required instmsiX.exe into external/
 dnl ===================================================================
 if test "$_os" = "WINNT"; then
-       ./solenv/bin/oowintool --msvc-copy-instmsi ./external/msi
+       ./oowintool --msvc-copy-instmsi ./external/msi
 fi
 
 dnl ===================================================================
     argument[loc] = to;
   }
 }
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- * 
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: guw.cc,v $
- * $Revision: 1.7 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org.  If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// guw - A wrapper program to execute windows programs with parameters that
-// contain cygwin (POSIX) style pathnames.
-
-// Todo: Add a -? switch to guw to issue a help page.
-
-#include <string>
-#include <list>
-#include <vector>
-
-#include <iostream>
-#include <sstream>
-#include <fstream>
-
-#include <cstddef>
-#include <cerrno>
-
-#include <sys/cygwin.h>
-#include <windows.h>
-#include <regex.h>
-
-
-using std::string;
-using std::list;
-using std::vector;
-using std::cout;
-using std::cerr;
-using std::endl;
-using std::size_t;
-
-void init_ignorepara(string command);
-bool is_ignorepara(const string &para);
-int winFormat(string &para);
-void do_atcommand(string &para);
-void myCygpath(string &path, int shortname = 1 );
-void replace_cyg_env( void );
-void Fatal( const string text );
-
-int match2s(const string argument, const char *pattern, string &sub1, string &sub2);
-void rep_subn_cyg(string &argument);
-void rep_subn( string &argument, const char *pattern, int subexp, const char repl);
-void rep_char( string &argument, const char from, const char to);
-
-bool debug = false;
-bool debug_light = false;
-
-// The commands are treated case insensitive, the parameters
-// are case sensitive.
-const string ignorepara[] = { "echo /TEST",
-                              "cl -clr: -Z",
-                              "climaker StarOffice/OpenOffice",
-                              "csc -target:",
-                              "g++ -DLOCAL_RULE_LANGS -DUPD -DMINOR"
-                                " -DBUILD_ID -DSC_INFO_OSVERSION",
-                              "gcc -DUDATA_SO_SUFFIX -DSTATIC_O"
-                                " -DPACKAGE -DU_MAKE",
-                              "lib /OUT: -out: -def: -machine:",
-                              "link /BASE: /COMMENT: /DEBUG: /DLL /ENTRY:"
-                                " /MACHINE: /MAP /NODEFAULTLIB /OPT: /RELEASE"
-                                " /STACK: /SUBSYSTEM: -NODEFAULTLIB:"
-                                " -def: delayload: -implib: -map: -out:",
-                              "rc -D",
-                              "regcomp -env: vnd.sun.star.expand:"
-                                " vnd.openoffice.pymodule: file:",
-                              "regmerge /UCR",
-                              "rsc -DOOO_" };
-
-vector<string> ignorepara_vec;
-
-// environment variables that are "winformatted" when -env is given
-const string transformvars[] = { "SOLAR_VERSION",
-                                 "SOLARVERSION",
-                                 "SOLARVER",
-                                 "SRC_ROOT",
-                                 "LOCALINI",
-                                 "GLOBALINI",
-                                 "SOLARENV",
-                                 "STAR_INSTPATH",
-                                 "STAR_SOLARPATH",
-                                 "STAR_PACKMISC",
-                                 "STAR_SOLARENVPATH",
-                                 "STAR_INITROOT",
-                                 "STAR_STANDLST",
-                                 "CLASSPATH",
-                                 "JAVA_HOME" };
-
-
-int main(int argc, char **argv) {
-
-  // initialize arglist with arguments
-  list<string> arglist(argv, argv + argc);
-
-  // Drop the first (filename) argument
-  arglist.pop_front();
-
-  // iterarot over cmdline elements
-  list<string>::iterator ele = arglist.begin();
-
-  // Allowed switch values
-  bool conv_cyg_arg = false;
-
-  // Look for switches to guw
-  // Supported: -env
-  //            -dbg
-  //            -ldbg
-  while ( !arglist.empty()
-          && ele!=arglist.end()
-          && (ele->find("-", 0) == 0) ) {
-    if (ele->find("-env", 0) == 0) {
-      if ( conv_cyg_arg )
-        Fatal("-env used twice!");
-
-      conv_cyg_arg = true;
-      ele = arglist.erase(ele);
-      continue;
-    }
-    else if (ele->find("-dbg", 0) == 0) {
-
-      debug = true;
-      ele = arglist.erase(ele);
-      continue;
-    }
-    else if (ele->find("-ldbg", 0) == 0) {
-
-      debug_light = true;
-      ele = arglist.erase(ele);
-      continue;
-    }
-    else {
-      // Ignore this switch
-      ++ele;
-    }
-  }
-
-  // The next entry must be the program
-  string command;
-  if ( !arglist.empty() ) {
-    command.assign(*arglist.begin());
-    arglist.pop_front();
-  }
-  else
-    Fatal("guw needs at least one parameter.");
-
-  if ( debug )
-    cerr << "Command: " << command << "\n" << endl;
-  // Initialize parameter exception list (for this command)
-  init_ignorepara(command);
-
-
-  // Do something if -env was found
-  if ( conv_cyg_arg )
-    replace_cyg_env();
-
-
-  // loop and and DOSify the parameters
-  if ( debug )
-    cerr << "Transform the parameter\n" << endl;
-
-  ele=arglist.begin();
-  while ( ele != arglist.end() ) {
-
-    if ((*ele)[0] == '@')
-      do_atcommand(*ele);
-    else if (!is_ignorepara(*ele)) {
-      if ( debug ) {
-        cerr << "----------------" << endl;
-        cerr << "Process parameter: " << *ele << endl;
-      }
-      winFormat(*ele);
-      if ( debug )
-        cerr << "Transformed to: " << *ele << "\n" << endl;
-    }
-
-    ++ele;
-  }
-
-  // create the argv[] for execvp(argv[0], argv);
-  ele=arglist.begin();
-
-  // const char *nargv[arglist.size()+2]; // or ..
-  char *nargv[arglist.size()+2];
-
-  // nargv[0] = command.c_str(); // or ..
-  nargv[0] = new char[command.length()+1];
-  // strcpy(nargv[0], command.c_str());
-  command.copy(nargv[0], command.length());
-  nargv[0][command.length()] = 0;
-
-  if ( debug )
-    cerr << "----------------\n" << endl;
-  if ( debug || debug_light )
-    cerr << "Execute: " << nargv[0];
-
-  int count = 1, sLen;
-  while ( ele != arglist.end() ) {
-    // nargv[count] = ele->c_str(); // or ..
-    sLen = ele->length();
-    nargv[count] = new char[sLen+1];
-    //    strcpy(nargv[count], ele->c_str());
-    ele->copy(nargv[count], sLen);
-    nargv[count][sLen] = 0;
-
-    if ( debug || debug_light )
-      cerr << " " << nargv[count];
-
-    ++count;
-    ++ele;
-  }
-  // last nargv[] must be NULL
-  nargv[count] = NULL;
-  if ( debug || debug_light )
-    cerr << endl;
-
-  // Unfortunately the prototype of execvp does not like const char*,
-  // actually not const char* nargv[] coming from .c_str(). So either
-  // we copy everything into newly allocated variables or we force it
-  // with a cast. const_cast<char * const *>()
-  // execvp(nargv[0], const_cast<char * const *>(nargv) );
-  if ( execvp(nargv[0], nargv ) < 0 ) {
-    perror("Execvp error.  Aborting.");
-    exit(1);       
-  }
-
-  // Omit the deleting of the dynamically allocated nargv[] elements
-  // here as this part will never be reached.
-
-  return 0;
-}
-
-// Initialize exception list from global var ignorepara[]
-void init_ignorepara(string fullcommand) {
-  const size_t kplen = sizeof(ignorepara)/sizeof(string *);
-  string shortcommand, cmd, para, sub2;
-
-  // First lowercase everything
-  for(size_t i=0;i<fullcommand.length();i++)
-    fullcommand[i] = tolower(fullcommand[i]);
-
-  // Remove a potential .exe
-  size_t slen = fullcommand.length();
-
-  // for slen == 3 this would yield string::npos otherwise
-  if ( slen > 4 && fullcommand.rfind(".exe") == slen - 4 )
-    fullcommand.erase(slen-4);
-
-  // get the program name - Only one subexpression
-  if (!match2s(fullcommand, "([[:alnum:]_~. +-]+)$",
-               shortcommand, sub2)) {
-    Fatal("No basename found in: " + fullcommand);
-  }
-
-  for (size_t i=0; i != kplen; ++i) {
-    std::istringstream line(ignorepara[i]);
-    line >> cmd;
-    if (shortcommand == cmd)
-      while (line >> para) {
-        ignorepara_vec.push_back(para);
-      }
-  }
-  return ;
-}
-
-// Check if command/parameter is in exception list.
-bool is_ignorepara(const string &para) {
-
-  for( vector<string>::iterator it = ignorepara_vec.begin();
-       it != ignorepara_vec.end(); it++ ) {
-    if ( para.find(*it) != string::npos ) {
-      if ( debug )
-        cerr << "Found execption para: " << para << endl;
-
-      return true;
-    }
-  }
-
-  return false;
-}
-
-// Reformat para to DOSish format
-int winFormat(string &para) {
-  string su1, su2;
-
-  // Instead of ([/[:alnum:]_~. +-]+)   use   ((/?[[:alnum:]_~. +-]+)+)
-
-  // find [-][-]X<something>=<path>, sometimes with quotes or "/" at the end
-  if (match2s(para, "^(-?-?[[:alpha:]][[:alnum:]_.-]*=)[\'\"]?((/?[[:alnum:]_~. +-]+)+)[\'\"]?$",
-              su1, su2)) {
-
-    myCygpath(su2);
-    para.assign(su1 + su2);
-    if ( debug )
-      cerr << "   WinFormat - ([-][-]<something>=<path>)\n"
-           << "      " << para << endl;
-
-  }
-  // find -X<something>:<path>, sometimes with quotes or "/" at the end
-  else if (match2s(para, "^(-[[:alpha:]][[:alnum:]_.]*:)[\'\"]?((/?[[:alnum:]_~. +-]+)+)[\'\"]?$",
-                   su1, su2)) {
-
-    myCygpath(su2);
-    para.assign(su1 + su2);
-    if ( debug )
-      cerr << "   WinFormat - (-<something>:<path>)\n"
-           << "      " << para << endl;
-
-  }
-  // find -X<something>:<NO-path>, and prevents translating of these.
-  else if (match2s(para, "^(-[[:alpha:]][[:alnum:]_]*:)(.*)$",
-                   su1, su2)) {
-
-    // myCygpath(su2);
-    // para.assign(su1 + su2);
-    if ( debug )
-      cerr << "   WinFormat - (-<something>:<NO-path>)\n"
-           << "      " << para << endl;
-
-  }
-  // See iz35982 for the reason for the special treatment of this switch.
-  // This regex evaluates <something>:///<path>, sometimes with
-  // quotes or "/" at the end
-  else if (match2s(para, "^([[:alpha:]][[:alnum:]_]*:)[\'\"]?///((/?[[:alnum:]_~. +-]+)+)[\'\"]?$",
-                   su1, su2)) {
-
-    myCygpath(su2);
-    para.assign(su1 + "///" + su2);
-    // Replace \ to /
-    rep_char( para, '\\', '/');
-
-    if ( debug )
-      cerr << "   WinFormat - (<something>:///<path>)\n"
-           << "      " << para << endl;
-
-  }
-  // find -X<absolute path>, sometimes with quotes or "/" at the end
-  else if (match2s(para, "^(-[[:alpha:]])[\'\"]?((/[[:alnum:]_~. +-]+)+)[\'\"]?$",
-                   su1, su2)) {
-
-    myCygpath(su2);
-    para.assign(su1 + su2);
-    if ( debug )
-      cerr << "   WinFormat - (-X<absolute path>)\n"
-           << "      " << para << endl;
-
-  }
-  // find -FX<path> (MSVC switches for output naming), sometimes with quotes
-  // or "/" at the end
-  else if (match2s(para, "^(-F[ARdemopr])[\'\"]?(/[/[:alnum:]_~. +-]+)[\'\"]?$",
-                   su1, su2)) {
-
-    myCygpath(su2);
-    para.assign(su1 + su2);
-    if ( debug )
-      cerr << "   WinFormat - (compiler naming (-FX<absolute path>) path)\n"
-           << "      " << para << endl;
-
-  }
-  else{
-    // No parameter found, assume a path
-
-    // replace the colon in drives with 0x1F"
-    // (Unused ascii US - unit separator)
-    rep_subn( para, "(^|[;,])[[:alpha:]](:)", 2, 0x1F);
-
-    // Replace remaining : to ;
-    rep_char( para, ':', ';');
-
-    // Replace back US to ':';
-    rep_char( para, 0x1F, ':');
-
-    /* Search for posix path ;entry; (The regex accepts valid paths with at
-     * least one /) and replace with DOS path, accept quotes.
-     * since iz28717 we also accept ',' as path seperator. */
-    rep_subn_cyg(para);
-
-    if ( debug )
-      cerr << "   WinFormat - full path\n"
-           << "      " << para << endl;
-
-  }
-
-  // Sanity check for -X<abspath>
-  if (match2s(para, "^(-[[:alpha:]])[\'\"]?((/[[:alnum:]_~. +-]+)+)",
-              su1, su2)) {
-    Fatal("Not converted -X/... type switch in :" + para);
-  }
-  // Sanity check for [-]X<something>(:|=)<abspath> case
-  if (match2s(para, "^(-?[[:alpha:]][[:alnum:]_.]+[=:])[\'\"]?((/[[:alnum:]_~. +-]+)+)",
-              su1, su2)) {
-    Fatal("Not processed [-]X<something>(=|:)/... in :" + para);
-  }
-
-
-  return 1;
-}
-
-// Reformat para to DOSish format
-void do_atcommand(string &para) {
-  string at, filename, token;
-
-  // Workaround, iz28717, keep number of @'s.
-  match2s(para, "^(@+)(.*)",at ,filename);
-  if ( debug ) {
-    cerr << "----------------" << endl;
-    cerr << "Process @-file" << endl;
-    cerr << "   :" << at << ": before filename :" << filename << ":" << endl;
-  }
-
-  // Read at file into memory
-  std::ifstream atin(filename.c_str());
-  list<string> newtoken;
-  while (atin >> token) {
-    // Read / transform tokens
-    if ( debug )
-      cerr << "@ token :" << token << ":" << endl;
-    if (!is_ignorepara(token))
-      winFormat(token);
-
-    newtoken.push_back(token);
-  }
-  atin.close();
-
-  // Write token tokens bak to file
-  if ( debug  || debug_light )
-    cerr << "New @-file parameter:" << endl;
-
-  // for debugging ..
-  // filename += ".bak";
-
-  std::ofstream atout(filename.c_str());
-  list<string>::iterator tok = newtoken.begin();
-  while ( tok != newtoken.end() ) {
-    if ( debug || debug_light )
-      cerr << ( tok != newtoken.begin() ? " " : "" ) << *tok ;
-
-    atout << ( tok != newtoken.begin() ? " " : "" ) << *tok ;
-    ++tok;
-  }
-  // We want a dos file
-  atout << '\r' << endl;
-  atout.close();
-
-  // Transform the filename
-  winFormat(filename);
-  para = at + filename;
-  if ( debug || debug_light ) {
-    cerr << "\nNew @-file name: " << para << "\n" << endl;
-  }
-}
-
-void myCygpath(string &path, int shortname /* =1 */ )
-{
-  static char convpath[MAX_PATH];
-  static char buf[MAX_PATH];
-  int err;
-
-  // Only use cygwin_conv_to_win32_path() on absolute paths as it errors
-  // out if its path doen't exist. Unfortunatelt there are a lot of not
-  // existing relative pathes used as parameters during an OOo build.
-  if( path.find("/", 0) == 0) {
-    err = cygwin_conv_to_win32_path( path.c_str(), convpath );
-  }
-  else {
-    rep_char( path, '/', '\\');
-    // see below, we copy convpath back to path, that's stupid
-    path.copy( convpath, path.length());
-    convpath[path.length()] = 0;
-    err = 0;
-  }
-
-  if (err)
-    Fatal("converting: " + path + " - " + strerror(errno) );
-
-  // Only convert to short dos names when space is present
-  if (shortname && (path.find(" ", 0) != string::npos) ) {
-    DWORD len = GetShortPathName (convpath, buf, MAX_PATH);
-    if (!len) {
-      Fatal("cannot create short name of " + string(convpath) );
-    }
-
-    path.assign(buf);
-  }
-  else
-    path.assign(convpath);
-
-}
-
-void replace_cyg_env( void ) {
-  // Transform certain environment variables
-  if ( debug )
-    cerr << "Transforming some environment variables" << endl;
-
-  const size_t nvars = sizeof(transformvars)/sizeof(string *);
-
-  char *currvar;
-  string newvar;
-
-  for (size_t i=0; i != nvars; ++i) {
-    if ( currvar = getenv(transformvars[i].c_str() ) ) {
-      // Only transform existent vars
-      if ( debug )
-        cerr << "Transform variable: " << transformvars[i] << "="
-             << currvar << endl;
-      newvar.assign(currvar);
-      winFormat(newvar);
-      if( setenv(transformvars[i].c_str(), newvar.c_str(), 1) )
-        Fatal("setenv failed on " + transformvars[i] + "=" + newvar +
-              " with error: " + strerror(errno));
-      if ( debug )
-        cerr << "To: " << transformvars[i] << "="
-             << newvar << "\n" << endl;
-    }
-  }
-}
-
-
-void Fatal( const string text ) {
-  // End with error
-  cerr << "Error: " << text << endl;
-  exit(1);
-}
-
-
-int
-match2s(const string argument, const char *pattern, string &sub1, string &sub2)
-{
-  int status;
-  regex_t re;
-
-  const int maxsub = 3;  // Only 3 needed, 4 is for debug
-  regmatch_t match[maxsub];
-
-  if (regcomp(&re, pattern, REG_EXTENDED) != 0) {
-    Fatal("regcomp had a problem.");      /* report error */
-  }
-  status = regexec(&re, argument.c_str(), maxsub, match, 0);
-  regfree(&re);
-
-  if (status == REG_NOMATCH) {
-    return(0);      /* no match */
-  } else if (status == 0) {
-    string tstr(argument.c_str() + match[0].rm_so,
-                match[0].rm_eo - match[0].rm_so);
-    // cout << "Match: " << tstr << endl;
-
-    sub1.assign(argument.c_str() + match[1].rm_so, match[1].rm_eo - match[1].rm_so);
-    // cout << "Match1: " << sub1 << endl;
-
-    sub2.assign(argument.c_str() + match[2].rm_so, match[2].rm_eo - match[2].rm_so);
-    // cout << "Match2: " << sub2 << endl;
-
-    return(1);      /* match found */
-  } else {
-    Fatal("regexec had a problem.");
-  }
-
-  // Not reached.
-  return(1);
-}
-
-
-// Replace path entry with myCygpath() version
-void rep_subn_cyg(string &argument)
-{
-  // accept ["']<entry>["']:["']<entry>["']:... to make the
-  // $(WRAPCMD) echo 1 ICON $(EMQ)"$(APP1ICON)$(EMQ)"
-  // work in ?tg_app.mk.
-  // FIXME: Better would be to use a DOSified $(APP1ICON) there and remove
-  // the special " treatment here.
-  const char *pattern = "(^|[;,])[\'\"]?([[:alnum:]_~. +-]*(/[[:alnum:]_~. +-]+)+/?)[\'\"]?([;,]|$)";
-  const int subexp = 2;
-
-  int status, pos=0;
-  regex_t re;
-
-  string repstr;
-  string::size_type oLen, nLen;
-
-  const int maxsub = subexp+1;  // One more than the maximal subexpression
-  regmatch_t match[maxsub];
-
-  if (regcomp(&re, pattern, REG_EXTENDED) != 0) {
-    Fatal("regcomp had a problem.");      /* report error */
-  }
-  status = regexec (&re, argument.c_str() + pos, maxsub, match, 0);
-  while (status == 0) {  /* While matches found. */
-    // Classical assert()
-    if (match[subexp].rm_eo == -1) {
-      Fatal("Nonexisting subexpression specified!");
-    }
-
-    oLen = match[subexp].rm_eo - match[subexp].rm_so;
-    repstr.assign(argument.c_str() + pos + match[subexp].rm_so, oLen);
-
-    // Do not replace with shortpaths
-    myCygpath(repstr, 0);
-    nLen = repstr.length();
-
-    // replace 
-    argument.replace( pos + match[subexp].rm_so, oLen, repstr );
-
-    /* Substring found between match[0].rm_so and match[0].rm_eo. */
-    /* This call to regexec() finds the next match. */
-
-    pos += match[0].rm_eo + nLen - oLen ;
-
-    // Either the last match did end in ';' or we are at the end of para.
-    // REG_NOTBOL is not used because we skip over the ';' by using pos.
-    status = regexec (&re, argument.c_str() + pos, maxsub, match, 0);
-  }
-
-  if (status != REG_NOMATCH) {
-    Fatal("regexec had a problem.");
-  }
-
-  regfree(&re);
-}
-
-// Replace all occurences of subexpression number "subexp" with "repl"
-void rep_subn( string &argument, const char *pattern, int subexp, const char repl)
-{
-  int status, pos=0;
-  regex_t re;
-
-  const int maxsub = subexp+1;  // One more than the maximal subexpression
-  regmatch_t match[maxsub];
-
-  if (regcomp(&re, pattern, REG_EXTENDED) != 0) {
-    Fatal("regcomp had a problem.");      /* report error */
-  }
-  status = regexec (&re, argument.c_str() + pos, maxsub, match, 0);
-  while (status == 0) {  /* While matches found. */
-    // Classical assert()
-    if (match[subexp].rm_eo == -1) {
-      Fatal("Nonexisting subexpression specified!");
-    }
-
-    argument[pos + match[subexp].rm_so] = repl;
-
-    /* Substring found between match[0].rm_so and match[0].rm_eo. */
-    /* This call to regexec() finds the next match. */
-    pos += match[0].rm_eo;
-    status = regexec (&re, argument.c_str() + pos, maxsub, match, REG_NOTBOL);
-  }
-
-  if (status != REG_NOMATCH) {
-    Fatal("regexec had a problem.");
-  }
-
-  regfree(&re);
-}
-
-// Replace all char1 with char2
-void rep_char( string &argument, const char from, const char to)
-{
-  string::size_type loc = 0;
-
-  while ( (loc = argument.find( from, loc )) != string::npos ) {
-    argument[loc] = to;
-  }
-}
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- * 
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: guw.cc,v $
- * $Revision: 1.7 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org.  If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// guw - A wrapper program to execute windows programs with parameters that
-// contain cygwin (POSIX) style pathnames.
-
-// Todo: Add a -? switch to guw to issue a help page.
-
-#include <string>
-#include <list>
-#include <vector>
-
-#include <iostream>
-#include <sstream>
-#include <fstream>
-
-#include <cstddef>
-#include <cerrno>
-
-#include <sys/cygwin.h>
-#include <windows.h>
-#include <regex.h>
-
-
-using std::string;
-using std::list;
-using std::vector;
-using std::cout;
-using std::cerr;
-using std::endl;
-using std::size_t;
-
-void init_ignorepara(string command);
-bool is_ignorepara(const string &para);
-int winFormat(string &para);
-void do_atcommand(string &para);
-void myCygpath(string &path, int shortname = 1 );
-void replace_cyg_env( void );
-void Fatal( const string text );
-
-int match2s(const string argument, const char *pattern, string &sub1, string &sub2);
-void rep_subn_cyg(string &argument);
-void rep_subn( string &argument, const char *pattern, int subexp, const char repl);
-void rep_char( string &argument, const char from, const char to);
-
-bool debug = false;
-bool debug_light = false;
-
-// The commands are treated case insensitive, the parameters
-// are case sensitive.
-const string ignorepara[] = { "echo /TEST",
-                              "cl -clr: -Z",
-                              "climaker StarOffice/OpenOffice",
-                              "csc -target:",
-                              "g++ -DLOCAL_RULE_LANGS -DUPD -DMINOR"
-                                " -DBUILD_ID -DSC_INFO_OSVERSION",
-                              "gcc -DUDATA_SO_SUFFIX -DSTATIC_O"
-                                " -DPACKAGE -DU_MAKE",
-                              "lib /OUT: -out: -def: -machine:",
-                              "link /BASE: /COMMENT: /DEBUG: /DLL /ENTRY:"
-                                " /MACHINE: /MAP /NODEFAULTLIB /OPT: /RELEASE"
-                                " /STACK: /SUBSYSTEM: -NODEFAULTLIB:"
-                                " -def: delayload: -implib: -map: -out:",
-                              "rc -D",
-                              "regcomp -env: vnd.sun.star.expand:"
-                                " vnd.openoffice.pymodule: file:",
-                              "regmerge /UCR",
-                              "rsc -DOOO_" };
-
-vector<string> ignorepara_vec;
-
-// environment variables that are "winformatted" when -env is given
-const string transformvars[] = { "SOLAR_VERSION",
-                                 "SOLARVERSION",
-                                 "SOLARVER",
-                                 "SRC_ROOT",
-                                 "LOCALINI",
-                                 "GLOBALINI",
-                                 "SOLARENV",
-                                 "STAR_INSTPATH",
-                                 "STAR_SOLARPATH",
-                                 "STAR_PACKMISC",
-                                 "STAR_SOLARENVPATH",
-                                 "STAR_INITROOT",
-                                 "STAR_STANDLST",
-                                 "CLASSPATH",
-                                 "JAVA_HOME" };
-
-
-int main(int argc, char **argv) {
-
-  // initialize arglist with arguments
-  list<string> arglist(argv, argv + argc);
-
-  // Drop the first (filename) argument
-  arglist.pop_front();
-
-  // iterarot over cmdline elements
-  list<string>::iterator ele = arglist.begin();
-
-  // Allowed switch values
-  bool conv_cyg_arg = false;
-
-  // Look for switches to guw
-  // Supported: -env
-  //            -dbg
-  //            -ldbg
-  while ( !arglist.empty()
-          && ele!=arglist.end()
-          && (ele->find("-", 0) == 0) ) {
-    if (ele->find("-env", 0) == 0) {
-      if ( conv_cyg_arg )
-        Fatal("-env used twice!");
-
-      conv_cyg_arg = true;
-      ele = arglist.erase(ele);
-      continue;
-    }
-    else if (ele->find("-dbg", 0) == 0) {
-
-      debug = true;
-      ele = arglist.erase(ele);
-      continue;
-    }
-    else if (ele->find("-ldbg", 0) == 0) {
-
-      debug_light = true;
-      ele = arglist.erase(ele);
-      continue;
-    }
-    else {
-      // Ignore this switch
-      ++ele;
-    }
-  }
-
-  // The next entry must be the program
-  string command;
-  if ( !arglist.empty() ) {
-    command.assign(*arglist.begin());
-    arglist.pop_front();
-  }
-  else
-    Fatal("guw needs at least one parameter.");
-
-  if ( debug )
-    cerr << "Command: " << command << "\n" << endl;
-  // Initialize parameter exception list (for this command)
-  init_ignorepara(command);
-
-
-  // Do something if -env was found
-  if ( conv_cyg_arg )
-    replace_cyg_env();
-
-
-  // loop and and DOSify the parameters
-  if ( debug )
-    cerr << "Transform the parameter\n" << endl;
-
-  ele=arglist.begin();
-  while ( ele != arglist.end() ) {
-
-    if ((*ele)[0] == '@')
-      do_atcommand(*ele);
-    else if (!is_ignorepara(*ele)) {
-      if ( debug ) {
-        cerr << "----------------" << endl;
-        cerr << "Process parameter: " << *ele << endl;
-      }
-      winFormat(*ele);
-      if ( debug )
-        cerr << "Transformed to: " << *ele << "\n" << endl;
-    }
-
-    ++ele;
-  }
-
-  // create the argv[] for execvp(argv[0], argv);
-  ele=arglist.begin();
-
-  // const char *nargv[arglist.size()+2]; // or ..
-  char *nargv[arglist.size()+2];
-
-  // nargv[0] = command.c_str(); // or ..
-  nargv[0] = new char[command.length()+1];
-  // strcpy(nargv[0], command.c_str());
-  command.copy(nargv[0], command.length());
-  nargv[0][command.length()] = 0;
-
-  if ( debug )
-    cerr << "----------------\n" << endl;
-  if ( debug || debug_light )
-    cerr << "Execute: " << nargv[0];
-
-  int count = 1, sLen;
-  while ( ele != arglist.end() ) {
-    // nargv[count] = ele->c_str(); // or ..
-    sLen = ele->length();
-    nargv[count] = new char[sLen+1];
-    //    strcpy(nargv[count], ele->c_str());
-    ele->copy(nargv[count], sLen);
-    nargv[count][sLen] = 0;
-
-    if ( debug || debug_light )
-      cerr << " " << nargv[count];
-
-    ++count;
-    ++ele;
-  }
-  // last nargv[] must be NULL
-  nargv[count] = NULL;
-  if ( debug || debug_light )
-    cerr << endl;
-
-  // Unfortunately the prototype of execvp does not like const char*,
-  // actually not const char* nargv[] coming from .c_str(). So either
-  // we copy everything into newly allocated variables or we force it
-  // with a cast. const_cast<char * const *>()
-  // execvp(nargv[0], const_cast<char * const *>(nargv) );
-  if ( execvp(nargv[0], nargv ) < 0 ) {
-    perror("Execvp error.  Aborting.");
-    exit(1);       
-  }
-
-  // Omit the deleting of the dynamically allocated nargv[] elements
-  // here as this part will never be reached.
-
-  return 0;
-}
-
-// Initialize exception list from global var ignorepara[]
-void init_ignorepara(string fullcommand) {
-  const size_t kplen = sizeof(ignorepara)/sizeof(string *);
-  string shortcommand, cmd, para, sub2;
-
-  // First lowercase everything
-  for(size_t i=0;i<fullcommand.length();i++)
-    fullcommand[i] = tolower(fullcommand[i]);
-
-  // Remove a potential .exe
-  size_t slen = fullcommand.length();
-
-  // for slen == 3 this would yield string::npos otherwise
-  if ( slen > 4 && fullcommand.rfind(".exe") == slen - 4 )
-    fullcommand.erase(slen-4);
-
-  // get the program name - Only one subexpression
-  if (!match2s(fullcommand, "([[:alnum:]_~. +-]+)$",
-               shortcommand, sub2)) {
-    Fatal("No basename found in: " + fullcommand);
-  }
-
-  for (size_t i=0; i != kplen; ++i) {
-    std::istringstream line(ignorepara[i]);
-    line >> cmd;
-    if (shortcommand == cmd)
-      while (line >> para) {
-        ignorepara_vec.push_back(para);
-      }
-  }
-  return ;
-}
-
-// Check if command/parameter is in exception list.
-bool is_ignorepara(const string &para) {
-
-  for( vector<string>::iterator it = ignorepara_vec.begin();
-       it != ignorepara_vec.end(); it++ ) {
-    if ( para.find(*it) != string::npos ) {
-      if ( debug )
-        cerr << "Found execption para: " << para << endl;
-
-      return true;
-    }
-  }
-
-  return false;
-}
-
-// Reformat para to DOSish format
-int winFormat(string &para) {
-  string su1, su2;
-
-  // Instead of ([/[:alnum:]_~. +-]+)   use   ((/?[[:alnum:]_~. +-]+)+)
-
-  // find [-][-]X<something>=<path>, sometimes with quotes or "/" at the end
-  if (match2s(para, "^(-?-?[[:alpha:]][[:alnum:]_.-]*=)[\'\"]?((/?[[:alnum:]_~. +-]+)+)[\'\"]?$",
-              su1, su2)) {
-
-    myCygpath(su2);
-    para.assign(su1 + su2);
-    if ( debug )
-      cerr << "   WinFormat - ([-][-]<something>=<path>)\n"
-           << "      " << para << endl;
-
-  }
-  // find -X<something>:<path>, sometimes with quotes or "/" at the end
-  else if (match2s(para, "^(-[[:alpha:]][[:alnum:]_.]*:)[\'\"]?((/?[[:alnum:]_~. +-]+)+)[\'\"]?$",
-                   su1, su2)) {
-
-    myCygpath(su2);
-    para.assign(su1 + su2);
-    if ( debug )
-      cerr << "   WinFormat - (-<something>:<path>)\n"
-           << "      " << para << endl;
-
-  }
-  // find -X<something>:<NO-path>, and prevents translating of these.
-  else if (match2s(para, "^(-[[:alpha:]][[:alnum:]_]*:)(.*)$",
-                   su1, su2)) {
-
-    // myCygpath(su2);
-    // para.assign(su1 + su2);
-    if ( debug )
-      cerr << "   WinFormat - (-<something>:<NO-path>)\n"
-           << "      " << para << endl;
-
-  }
-  // See iz35982 for the reason for the special treatment of this switch.
-  // This regex evaluates <something>:///<path>, sometimes with
-  // quotes or "/" at the end
-  else if (match2s(para, "^([[:alpha:]][[:alnum:]_]*:)[\'\"]?///((/?[[:alnum:]_~. +-]+)+)[\'\"]?$",
-                   su1, su2)) {
-
-    myCygpath(su2);
-    para.assign(su1 + "///" + su2);
-    // Replace \ to /
-    rep_char( para, '\\', '/');
-
-    if ( debug )
-      cerr << "   WinFormat - (<something>:///<path>)\n"
-           << "      " << para << endl;
-
-  }
-  // find -X<absolute path>, sometimes with quotes or "/" at the end
-  else if (match2s(para, "^(-[[:alpha:]])[\'\"]?((/[[:alnum:]_~. +-]+)+)[\'\"]?$",
-                   su1, su2)) {
-
-    myCygpath(su2);
-    para.assign(su1 + su2);
-    if ( debug )
-      cerr << "   WinFormat - (-X<absolute path>)\n"
-           << "      " << para << endl;
-
-  }
-  // find -FX<path> (MSVC switches for output naming), sometimes with quotes
-  // or "/" at the end
-  else if (match2s(para, "^(-F[ARdemopr])[\'\"]?(/[/[:alnum:]_~. +-]+)[\'\"]?$",
-                   su1, su2)) {
-
-    myCygpath(su2);
-    para.assign(su1 + su2);
-    if ( debug )
-      cerr << "   WinFormat - (compiler naming (-FX<absolute path>) path)\n"
-           << "      " << para << endl;
-
-  }
-  else{
-    // No parameter found, assume a path
-
-    // replace the colon in drives with 0x1F"
-    // (Unused ascii US - unit separator)
-    rep_subn( para, "(^|[;,])[[:alpha:]](:)", 2, 0x1F);
-
-    // Replace remaining : to ;
-    rep_char( para, ':', ';');
-
-    // Replace back US to ':';
-    rep_char( para, 0x1F, ':');
-
-    /* Search for posix path ;entry; (The regex accepts valid paths with at
-     * least one /) and replace with DOS path, accept quotes.
-     * since iz28717 we also accept ',' as path seperator. */
-    rep_subn_cyg(para);
-
-    if ( debug )
-      cerr << "   WinFormat - full path\n"
-           << "      " << para << endl;
-
-  }
-
-  // Sanity check for -X<abspath>
-  if (match2s(para, "^(-[[:alpha:]])[\'\"]?((/[[:alnum:]_~. +-]+)+)",
-              su1, su2)) {
-    Fatal("Not converted -X/... type switch in :" + para);
-  }
-  // Sanity check for [-]X<something>(:|=)<abspath> case
-  if (match2s(para, "^(-?[[:alpha:]][[:alnum:]_.]+[=:])[\'\"]?((/[[:alnum:]_~. +-]+)+)",
-              su1, su2)) {
-    Fatal("Not processed [-]X<something>(=|:)/... in :" + para);
-  }
-
-
-  return 1;
-}
-
-// Reformat para to DOSish format
-void do_atcommand(string &para) {
-  string at, filename, token;
-
-  // Workaround, iz28717, keep number of @'s.
-  match2s(para, "^(@+)(.*)",at ,filename);
-  if ( debug ) {
-    cerr << "----------------" << endl;
-    cerr << "Process @-file" << endl;
-    cerr << "   :" << at << ": before filename :" << filename << ":" << endl;
-  }
-
-  // Read at file into memory
-  std::ifstream atin(filename.c_str());
-  list<string> newtoken;
-  while (atin >> token) {
-    // Read / transform tokens
-    if ( debug )
-      cerr << "@ token :" << token << ":" << endl;
-    if (!is_ignorepara(token))
-      winFormat(token);
-
-    newtoken.push_back(token);
-  }
-  atin.close();
-
-  // Write token tokens bak to file
-  if ( debug  || debug_light )
-    cerr << "New @-file parameter:" << endl;
-
-  // for debugging ..
-  // filename += ".bak";
-
-  std::ofstream atout(filename.c_str());
-  list<string>::iterator tok = newtoken.begin();
-  while ( tok != newtoken.end() ) {
-    if ( debug || debug_light )
-      cerr << ( tok != newtoken.begin() ? " " : "" ) << *tok ;
-
-    atout << ( tok != newtoken.begin() ? " " : "" ) << *tok ;
-    ++tok;
-  }
-  // We want a dos file
-  atout << '\r' << endl;
-  atout.close();
-
-  // Transform the filename
-  winFormat(filename);
-  para = at + filename;
-  if ( debug || debug_light ) {
-    cerr << "\nNew @-file name: " << para << "\n" << endl;
-  }
-}
-
-void myCygpath(string &path, int shortname /* =1 */ )
-{
-  static char convpath[MAX_PATH];
-  static char buf[MAX_PATH];
-  int err;
-
-  // Only use cygwin_conv_to_win32_path() on absolute paths as it errors
-  // out if its path doen't exist. Unfortunatelt there are a lot of not
-  // existing relative pathes used as parameters during an OOo build.
-  if( path.find("/", 0) == 0) {
-    err = cygwin_conv_to_win32_path( path.c_str(), convpath );
-  }
-  else {
-    rep_char( path, '/', '\\');
-    // see below, we copy convpath back to path, that's stupid
-    path.copy( convpath, path.length());
-    convpath[path.length()] = 0;
-    err = 0;
-  }
-
-  if (err)
-    Fatal("converting: " + path + " - " + strerror(errno) );
-
-  // Only convert to short dos names when space is present
-  if (shortname && (path.find(" ", 0) != string::npos) ) {
-    DWORD len = GetShortPathName (convpath, buf, MAX_PATH);
-    if (!len) {
-      Fatal("cannot create short name of " + string(convpath) );
-    }
-
-    path.assign(buf);
-  }
-  else
-    path.assign(convpath);
-
-}
-
-void replace_cyg_env( void ) {
-  // Transform certain environment variables
-  if ( debug )
-    cerr << "Transforming some environment variables" << endl;
-
-  const size_t nvars = sizeof(transformvars)/sizeof(string *);
-
-  char *currvar;
-  string newvar;
-
-  for (size_t i=0; i != nvars; ++i) {
-    if ( currvar = getenv(transformvars[i].c_str() ) ) {
-      // Only transform existent vars
-      if ( debug )
-        cerr << "Transform variable: " << transformvars[i] << "="
-             << currvar << endl;
-      newvar.assign(currvar);
-      winFormat(newvar);
-      if( setenv(transformvars[i].c_str(), newvar.c_str(), 1) )
-        Fatal("setenv failed on " + transformvars[i] + "=" + newvar +
-              " with error: " + strerror(errno));
-      if ( debug )
-        cerr << "To: " << transformvars[i] << "="
-             << newvar << "\n" << endl;
-    }
-  }
-}
-
-
-void Fatal( const string text ) {
-  // End with error
-  cerr << "Error: " << text << endl;
-  exit(1);
-}
-
-
-int
-match2s(const string argument, const char *pattern, string &sub1, string &sub2)
-{
-  int status;
-  regex_t re;
-
-  const int maxsub = 3;  // Only 3 needed, 4 is for debug
-  regmatch_t match[maxsub];
-
-  if (regcomp(&re, pattern, REG_EXTENDED) != 0) {
-    Fatal("regcomp had a problem.");      /* report error */
-  }
-  status = regexec(&re, argument.c_str(), maxsub, match, 0);
-  regfree(&re);
-
-  if (status == REG_NOMATCH) {
-    return(0);      /* no match */
-  } else if (status == 0) {
-    string tstr(argument.c_str() + match[0].rm_so,
-                match[0].rm_eo - match[0].rm_so);
-    // cout << "Match: " << tstr << endl;
-
-    sub1.assign(argument.c_str() + match[1].rm_so, match[1].rm_eo - match[1].rm_so);
-    // cout << "Match1: " << sub1 << endl;
-
-    sub2.assign(argument.c_str() + match[2].rm_so, match[2].rm_eo - match[2].rm_so);
-    // cout << "Match2: " << sub2 << endl;
-
-    return(1);      /* match found */
-  } else {
-    Fatal("regexec had a problem.");
-  }
-
-  // Not reached.
-  return(1);
-}
-
-
-// Replace path entry with myCygpath() version
-void rep_subn_cyg(string &argument)
-{
-  // accept ["']<entry>["']:["']<entry>["']:... to make the
-  // $(WRAPCMD) echo 1 ICON $(EMQ)"$(APP1ICON)$(EMQ)"
-  // work in ?tg_app.mk.
-  // FIXME: Better would be to use a DOSified $(APP1ICON) there and remove
-  // the special " treatment here.
-  const char *pattern = "(^|[;,])[\'\"]?([[:alnum:]_~. +-]*(/[[:alnum:]_~. +-]+)+/?)[\'\"]?([;,]|$)";
-  const int subexp = 2;
-
-  int status, pos=0;
-  regex_t re;
-
-  string repstr;
-  string::size_type oLen, nLen;
-
-  const int maxsub = subexp+1;  // One more than the maximal subexpression
-  regmatch_t match[maxsub];
-
-  if (regcomp(&re, pattern, REG_EXTENDED) != 0) {
-    Fatal("regcomp had a problem.");      /* report error */
-  }
-  status = regexec (&re, argument.c_str() + pos, maxsub, match, 0);
-  while (status == 0) {  /* While matches found. */
-    // Classical assert()
-    if (match[subexp].rm_eo == -1) {
-      Fatal("Nonexisting subexpression specified!");
-    }
-
-    oLen = match[subexp].rm_eo - match[subexp].rm_so;
-    repstr.assign(argument.c_str() + pos + match[subexp].rm_so, oLen);
-
-    // Do not replace with shortpaths
-    myCygpath(repstr, 0);
-    nLen = repstr.length();
-
-    // replace 
-    argument.replace( pos + match[subexp].rm_so, oLen, repstr );
-
-    /* Substring found between match[0].rm_so and match[0].rm_eo. */
-    /* This call to regexec() finds the next match. */
-
-    pos += match[0].rm_eo + nLen - oLen ;
-
-    // Either the last match did end in ';' or we are at the end of para.
-    // REG_NOTBOL is not used because we skip over the ';' by using pos.
-    status = regexec (&re, argument.c_str() + pos, maxsub, match, 0);
-  }
-
-  if (status != REG_NOMATCH) {
-    Fatal("regexec had a problem.");
-  }
-
-  regfree(&re);
-}
-
-// Replace all occurences of subexpression number "subexp" with "repl"
-void rep_subn( string &argument, const char *pattern, int subexp, const char repl)
-{
-  int status, pos=0;
-  regex_t re;
-
-  const int maxsub = subexp+1;  // One more than the maximal subexpression
-  regmatch_t match[maxsub];
-
-  if (regcomp(&re, pattern, REG_EXTENDED) != 0) {
-    Fatal("regcomp had a problem.");      /* report error */
-  }
-  status = regexec (&re, argument.c_str() + pos, maxsub, match, 0);
-  while (status == 0) {  /* While matches found. */
-    // Classical assert()
-    if (match[subexp].rm_eo == -1) {
-      Fatal("Nonexisting subexpression specified!");
-    }
-
-    argument[pos + match[subexp].rm_so] = repl;
-
-    /* Substring found between match[0].rm_so and match[0].rm_eo. */
-    /* This call to regexec() finds the next match. */
-    pos += match[0].rm_eo;
-    status = regexec (&re, argument.c_str() + pos, maxsub, match, REG_NOTBOL);
-  }
-
-  if (status != REG_NOMATCH) {
-    Fatal("regexec had a problem.");
-  }
-
-  regfree(&re);
-}
-
-// Replace all char1 with char2
-void rep_char( string &argument, const char from, const char to)
-{
-  string::size_type loc = 0;
-
-  while ( (loc = argument.find( from, loc )) != string::npos ) {
-    argument[loc] = to;
-  }
-}
 
 guw : $(sources)
 	g++ -Wall -o guw $(sources)
-sources = guw.cc
 
-guw : $(sources)
-	g++ -Wall -o guw $(sources)
-sources = guw.cc
-
-guw : $(sources)
-	g++ -Wall -o guw $(sources)