Magnus Hagander wrote:
> Hello!
> 
> Per some previous discussion that I can't really recall if it was on or
> off list, here is a WIP patch to make pg_regress run completely outside
> of msys on win32.
> 
> The change needed is that the processing of files from input/ and
> output/ into sql/ and expected/ is moved from the Makefile and into
> pg_regress itself.
> 
> I have tested on Win32 non-MSVC and on Linux (non-VPATH), and it appears
> to work there.
> 
> Still to be done is the "make install" part on MSVC build, currently
> #ifdef:ed out. While working on that, I'd appreciate some comments on
> the patch in general - if there are more things I need to fix before it
> can be considered. Particularly I'm concerned around the VPATH stuff,
> since I've never used that myself.


Here's the patch without the WIP tag. It works for me per above, and
also for a "check" (not just "installcheck") on msvc built without msys.

Again, the vpath part is the one I'm most unsure about, but I'm sure
there could be other parts.

Hopefully this will make it possible to get the msvc build up on the
buildfarm not too long from now.

Also, as in the first patch but not noted, this one makes it possible to
run the regression tests as an admin account "the proper way" on both
mingw and msvc.

//Magnus
Index: src/include/port.h
===================================================================
RCS file: c:/prog/cvsrepo/pgsql/pgsql/src/include/port.h,v
retrieving revision 1.107
diff -c -r1.107 port.h
*** src/include/port.h  5 Jan 2007 22:19:50 -0000       1.107
--- src/include/port.h  7 Jan 2007 15:11:12 -0000
***************
*** 46,51 ****
--- 46,56 ----
  extern bool get_home_path(char *ret_path);
  extern void get_parent_directory(char *path);
  
+ 
+ /* port/dirmod.c */
+ extern char **pgfnames(char *path);
+ extern void pgfnames_cleanup(char **filenames);
+ 
  /*
   *    is_absolute_path
   *
Index: src/port/dirmod.c
===================================================================
RCS file: c:/prog/cvsrepo/pgsql/pgsql/src/port/dirmod.c,v
retrieving revision 1.46
diff -c -r1.46 dirmod.c
*** src/port/dirmod.c   5 Jan 2007 22:20:02 -0000       1.46
--- src/port/dirmod.c   7 Jan 2007 15:13:27 -0000
***************
*** 287,298 ****
  
  
  /*
!  * fnames
   *
   * return a list of the names of objects in the argument directory
   */
! static char **
! fnames(char *path)
  {
        DIR                *dir;
        struct dirent *file;
--- 287,298 ----
  
  
  /*
!  * pgfnames
   *
   * return a list of the names of objects in the argument directory
   */
! char **
! pgfnames(char *path)
  {
        DIR                *dir;
        struct dirent *file;
***************
*** 357,368 ****
  
  
  /*
!  *    fnames_cleanup
   *
   *    deallocate memory used for filenames
   */
! static void
! fnames_cleanup(char **filenames)
  {
        char      **fn;
  
--- 357,368 ----
  
  
  /*
!  *    pgfnames_cleanup
   *
   *    deallocate memory used for filenames
   */
! void
! pgfnames_cleanup(char **filenames)
  {
        char      **fn;
  
***************
*** 394,400 ****
         * we copy all the names out of the directory before we start modifying
         * it.
         */
!       filenames = fnames(path);
  
        if (filenames == NULL)
                return false;
--- 394,400 ----
         * we copy all the names out of the directory before we start modifying
         * it.
         */
!       filenames = pgfnames(path);
  
        if (filenames == NULL)
                return false;
***************
*** 415,421 ****
                        if (!rmtree(filepath, true))
                        {
                                /* we already reported the error */
!                               fnames_cleanup(filenames);
                                return false;
                        }
                }
--- 415,421 ----
                        if (!rmtree(filepath, true))
                        {
                                /* we already reported the error */
!                               pgfnames_cleanup(filenames);
                                return false;
                        }
                }
***************
*** 433,439 ****
                        goto report_and_fail;
        }
  
!       fnames_cleanup(filenames);
        return true;
  
  report_and_fail:
--- 433,439 ----
                        goto report_and_fail;
        }
  
!       pgfnames_cleanup(filenames);
        return true;
  
  report_and_fail:
***************
*** 444,449 ****
        fprintf(stderr, _("could not remove file or directory \"%s\": %s\n"),
                        filepath, strerror(errno));
  #endif
!       fnames_cleanup(filenames);
        return false;
  }
--- 444,449 ----
        fprintf(stderr, _("could not remove file or directory \"%s\": %s\n"),
                        filepath, strerror(errno));
  #endif
!       pgfnames_cleanup(filenames);
        return false;
  }
Index: src/test/regress/GNUmakefile
===================================================================
RCS file: c:/prog/cvsrepo/pgsql/pgsql/src/test/regress/GNUmakefile,v
retrieving revision 1.63
diff -c -r1.63 GNUmakefile
*** src/test/regress/GNUmakefile        5 Jan 2007 22:20:03 -0000       1.63
--- src/test/regress/GNUmakefile        7 Jan 2007 15:13:40 -0000
***************
*** 40,46 ****
  # stuff to pass into build of pg_regress
  EXTRADEFS = '-DHOST_TUPLE="$(host_tuple)"' \
        '-DMAKEPROG="$(MAKE)"' \
!       '-DSHELLPROG="$(SHELL)"'

  ##
  ## Prepare for tests
--- 40,47 ----
  # stuff to pass into build of pg_regress
  EXTRADEFS = '-DHOST_TUPLE="$(host_tuple)"' \
        '-DMAKEPROG="$(MAKE)"' \
!       '-DSHELLPROG="$(SHELL)"' \
!       '-DDLSUFFIX="$(DLSUFFIX)"'

  ##
  ## Prepare for tests
***************
*** 83,96 ****
        rm -f $(NAME)$(DLSUFFIX)
        $(LN_S) $(shlib) $(NAME)$(DLSUFFIX)

- # Build test input and expected files
-
- file_list := copy create_function_1 create_function_2 misc constraints 
tablespace
- input_files  := $(foreach file, $(file_list), sql/$(file).sql)
- output_files := $(foreach file, $(file_list), expected/$(file).out)
- 
- all: $(input_files) $(output_files)
- 
  ifneq ($(PORTNAME),win32)
  abs_srcdir := $(shell cd $(srcdir) && pwd)
  abs_builddir := $(shell pwd)
--- 84,89 ----
***************
*** 99,120 ****
  abs_builddir := $(shell pwd -W)
  endif
  
- testtablespace := $(abs_builddir)/testtablespace
- 
- 
- define sed-command
- sed -e 's,@abs_srcdir@,$(abs_srcdir),g' \
-     -e 's,@abs_builddir@,$(abs_builddir),g' \
-     -e 's,@testtablespace@,$(testtablespace),g' \
-     -e 's/@DLSUFFIX@/$(DLSUFFIX)/g' $< >$@
- endef
- 
- $(input_files): sql/%.sql: input/%.source
-       $(sed-command)
- 
- $(output_files): expected/%.out: output/%.source
-       $(sed-command)
- 
  # When doing a VPATH build, copy over the remaining .sql and .out
  # files so that the driver script can find them.  We have to use an
  # absolute path for the targets, because otherwise make will try to
--- 92,97 ----
***************
*** 148,154 ****
  check: all
        -rm -rf ./testtablespace
        mkdir ./testtablespace
!       ./pg_regress --temp-install=./tmp_check --top-builddir=$(top_builddir) 
--temp-port=$(TEMP_PORT) --schedule=$(srcdir)/parallel_schedule 
--multibyte=$(MULTIBYTE) --load-language=plpgsql $(MAXCONNOPT) $(NOLOCALE)
  
  installcheck: all
        -rm -rf ./testtablespace
--- 125,131 ----
  check: all
        -rm -rf ./testtablespace
        mkdir ./testtablespace
!       ./pg_regress --temp-install=./tmp_check --top-builddir=$(top_builddir) 
--srcdir=$(abs_srcdir) --temp-port=$(TEMP_PORT) 
--schedule=$(srcdir)/parallel_schedule --multibyte=$(MULTIBYTE) 
--load-language=plpgsql $(MAXCONNOPT) $(NOLOCALE)
  
  installcheck: all
        -rm -rf ./testtablespace
***************
*** 168,174 ****
  runtest-parallel: installcheck-parallel
  
  bigtest:
!       ./pg_regress --psqldir=$(PSQLDIR) --schedule=$(srcdir)/serial_schedule 
--multibyte=$(MULTIBYTE) --load-language=plpgsql $(NOLOCALE) numeric_big 
  
  bigcheck:
        ./pg_regress --temp-install=./tmp_check --top-builddir=$(top_builddir) 
--temp-port=$(TEMP_PORT) --schedule=$(srcdir)/parallel_schedule 
--multibyte=$(MULTIBYTE) --load-language=plpgsql $(MAXCONNOPT) $(NOLOCALE) 
numeric_big
--- 145,151 ----
  runtest-parallel: installcheck-parallel
  
  bigtest:
!       ./pg_regress --psqldir=$(PSQLDIR) --schedule=$(srcdir)/serial_schedule 
--multibyte=$(MULTIBYTE) --load-language=plpgsql $(NOLOCALE) numeric_big
  
  bigcheck:
        ./pg_regress --temp-install=./tmp_check --top-builddir=$(top_builddir) 
--temp-port=$(TEMP_PORT) --schedule=$(srcdir)/parallel_schedule 
--multibyte=$(MULTIBYTE) --load-language=plpgsql $(MAXCONNOPT) $(NOLOCALE) 
numeric_big
Index: src/test/regress/pg_regress.c
===================================================================
RCS file: c:/prog/cvsrepo/pgsql/pgsql/src/test/regress/pg_regress.c,v
retrieving revision 1.25
diff -c -r1.25 pg_regress.c
*** src/test/regress/pg_regress.c       5 Jan 2007 22:20:03 -0000       1.25
--- src/test/regress/pg_regress.c       7 Jan 2007 15:13:41 -0000
***************
*** 67,73 ****
--- 67,75 ----
  static char *libdir = LIBDIR;
  static char *datadir = PGSHAREDIR;
  static char *host_platform = HOST_TUPLE;
+ #ifndef WIN32_ONLY_COMPILER
  static char *makeprog = MAKEPROG;
+ #endif

  #ifndef WIN32                                 /* not used in WIN32 case */
  static char *shellprog = SHELLPROG;
***************
*** 95,100 ****
--- 97,103 ----
  static char *hostname = NULL;
  static int    port = -1;
  static char *user = NULL;
+ static char *srcdir = NULL;
  
  /* internal variables */
  static const char *progname;
***************
*** 111,116 ****
--- 114,124 ----
  static int    fail_count = 0;
  static int    fail_ignore_count = 0;
  
+ static bool
+ directory_exists(const char *dir);
+ static void
+ make_directory(const char *dir);
+ 
  static void
  header(const char *fmt,...)
  /* This extension allows gcc to check the format string for consistency with
***************
*** 152,157 ****
--- 160,169 ----
  #endif
  
  
+ #ifdef WIN32
+ typedef               BOOL(WINAPI * __CreateRestrictedToken) (HANDLE, DWORD, 
DWORD, PSID_AND_ATTRIBUTES, DWORD, PLUID_AND_ATTRIBUTES, DWORD, 
PSID_AND_ATTRIBUTES, PHANDLE);
+ #endif
+ 
  /*
   * Add an item at the end of a stringlist.
   */
***************
*** 331,336 ****
--- 343,468 ----
  }
  
  /*
+  * Replace all occurances of a string in a string with a different stirng.
+  * NOTE: Assumes there is enough room in the target buffer!
+  */
+ static void
+ replace_string(char *string, char *replace, char *replacement)
+ {
+       char *ptr;
+ 
+       while ((ptr = strstr(string, replace)) != NULL) 
+       {
+               char *dup = strdup(string);
+ 
+               strncpy(string, dup, ptr-string);
+               string[ptr-string]=0;
+               strcat(string, replacement);
+               strcat(string, dup+(ptr-string)+strlen(replace));
+               free(dup);
+       }
+ }
+ 
+ /*
+  * Convert *.source in input/ and output/ into actual files used by the
+  * regression tests in sql/ and expected/.
+  */
+ static void
+ convert_sourcefiles_in(char *source, char *dest, char *suffix)
+ {
+       char abs_srcdir[MAXPGPATH];
+       char abs_builddir[MAXPGPATH];
+       char testtablespace[MAXPGPATH];
+       char **name;
+       char **names = pgfnames(source);
+ #ifdef WIN32
+       char *c;
+ #endif
+ 
+       if (!names)
+               /* Error logged in pgfnames */
+               exit_nicely(2);
+ 
+       if (!getcwd(abs_builddir, sizeof(abs_builddir)))
+       {
+               fprintf(stderr, _("%s: could not get current directory: %s\n"),
+                       progname, strerror(errno));
+               exit_nicely(2);
+       }
+       if (srcdir)
+               strcpy(abs_srcdir, srcdir);
+       else
+               strcpy(abs_srcdir, abs_builddir);
+ #ifdef WIN32
+       for (c = abs_builddir; *c; c++)
+               if (*c == '\\')
+                       *c = '/';
+       for (c = abs_srcdir; *c; c++)
+               if (*c == '\\')
+                       *c = '/';
+ #endif
+ 
+ 
+       snprintf(testtablespace, sizeof(testtablespace), "%s/testtablespace", 
abs_builddir);
+       if (directory_exists(testtablespace))
+               rmtree(testtablespace, true);
+       make_directory(testtablespace);
+ 
+       for (name = names; *name; name++)
+       {
+               char srcfile[MAXPGPATH];
+               char destfile[MAXPGPATH];
+               FILE *infile, *outfile;
+               char line[1024];
+ 
+               if (strlen(*name) < 8)
+                       continue;
+               if (strcmp(*name+strlen(*name)-7,".source"))
+                       continue;
+ 
+               strcpy(srcfile,source);
+               strcat(srcfile, *name);
+               strcpy(destfile,dest);
+               strncat(destfile, *name, strlen(*name)-6);
+               strcat(destfile,suffix);
+ 
+               infile = fopen(srcfile,"r");
+               if (!infile)
+               {
+                       fprintf(stderr, _("%s: could not open file \"%s\" for 
reading: %s\n"),
+                                       progname, srcfile, strerror(errno));
+                       exit_nicely(2);
+               }
+               outfile = fopen(destfile,"w");
+               if (!outfile)
+               {
+                       fprintf(stderr, _("%s: could not open file \"%s\" for 
writing: %s\n"),
+                               progname, destfile, strerror(errno));
+                       exit_nicely(2);
+               }
+               while (fgets(line, sizeof(line), infile))
+               {
+                       replace_string(line,"@abs_srcdir@", abs_srcdir);
+                       replace_string(line,"@abs_builddir@", abs_builddir);
+                       replace_string(line,"@testtablespace@", testtablespace);
+                       replace_string(line,"@DLSUFFIX@", DLSUFFIX);
+                       fputs(line, outfile);
+               }
+               fclose(infile);
+               fclose(outfile);
+       }
+       
+     pgfnames_cleanup(names);
+ }
+ 
+ static void
+ convert_sourcefiles(void)
+ {
+       convert_sourcefiles_in("input/","sql/","sql");
+       convert_sourcefiles_in("output/","expected/","out");
+ }
+ 
+ /*
   * Scan resultmap file to find which platform-specific expected files to use.
   *
   * The format of each line of the file is
***************
*** 593,598 ****
--- 725,731 ----
                        printf(_("(using postmaster on Unix socket, default 
port)\n"));
        }
  
+       convert_sourcefiles();
        load_resultmap();
  }
  
***************
*** 690,705 ****
        return pid;
  #else
        char       *cmdline2;
        STARTUPINFO si;
        PROCESS_INFORMATION pi;
  
        ZeroMemory(&si, sizeof(si));
        si.cb = sizeof(si);
  
        cmdline2 = malloc(strlen(cmdline) + 8);
        sprintf(cmdline2, "cmd /c %s", cmdline);
  
!       if (!CreateProcess(NULL, cmdline2, NULL, NULL, FALSE, 0, NULL, NULL, 
&si, &pi))
        {
                fprintf(stderr, _("could not start process for \"%s\": %lu\n"),
                                cmdline2, GetLastError());
--- 823,898 ----
        return pid;
  #else
        char       *cmdline2;
+       BOOL b;
        STARTUPINFO si;
        PROCESS_INFORMATION pi;
+       HANDLE          origToken;
+       HANDLE          restrictedToken;
+       SID_IDENTIFIER_AUTHORITY NtAuthority = {SECURITY_NT_AUTHORITY};
+       SID_AND_ATTRIBUTES dropSids[2];
+       __CreateRestrictedToken _CreateRestrictedToken = NULL;
+       HANDLE          Advapi32Handle;
  
        ZeroMemory(&si, sizeof(si));
        si.cb = sizeof(si);
  
+       Advapi32Handle = LoadLibrary("ADVAPI32.DLL");
+       if (Advapi32Handle != NULL)
+       {
+               _CreateRestrictedToken = (__CreateRestrictedToken) 
GetProcAddress(Advapi32Handle, "CreateRestrictedToken");
+       }
+ 
+       if (_CreateRestrictedToken == NULL)
+       {
+               fprintf(stderr, "WARNING: Unable to create restricted tokens on 
this platform\n");
+               if (Advapi32Handle != NULL)
+                       FreeLibrary(Advapi32Handle);
+               return 0;
+       }
+ 
+       /* Open the current token to use as a base for the restricted one */
+       if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, 
&origToken))
+       {
+               fprintf(stderr, "Failed to open process token: %lu\n", 
GetLastError());
+               return 0;
+       }
+ 
+       /* Allocate list of SIDs to remove */
+       ZeroMemory(&dropSids, sizeof(dropSids));
+       if (!AllocateAndInitializeSid(&NtAuthority, 2,
+                SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 
0, 0,
+                                                                 0, 
&dropSids[0].Sid) ||
+               !AllocateAndInitializeSid(&NtAuthority, 2,
+       SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_POWER_USERS, 0, 0, 0, 0, 
0,
+                                                                 0, 
&dropSids[1].Sid))
+       {
+               fprintf(stderr, "Failed to allocate SIDs: %lu\n", 
GetLastError());
+               return 0;
+       }
+ 
+       b = _CreateRestrictedToken(origToken,
+                                                          
DISABLE_MAX_PRIVILEGE,
+                                                          sizeof(dropSids) / 
sizeof(dropSids[0]),
+                                                          dropSids,
+                                                          0, NULL,
+                                                          0, NULL,
+                                                          &restrictedToken);
+ 
+       FreeSid(dropSids[1].Sid);
+       FreeSid(dropSids[0].Sid);
+       CloseHandle(origToken);
+       FreeLibrary(Advapi32Handle);
+ 
+       if (!b)
+       {
+               fprintf(stderr, "Failed to create restricted token: %lu\n", 
GetLastError());
+               return 0;
+       }
+ 
        cmdline2 = malloc(strlen(cmdline) + 8);
        sprintf(cmdline2, "cmd /c %s", cmdline);
  
!       if (!CreateProcessAsUser(restrictedToken, NULL, cmdline2, NULL, NULL, 
FALSE, 0, NULL, NULL, &si, &pi))
        {
                fprintf(stderr, _("could not start process for \"%s\": %lu\n"),
                                cmdline2, GetLastError());
***************
*** 1322,1327 ****
--- 1515,1521 ----
        printf(_("  --outputdir=DIR           place output files in DIR 
(default \".\")\n"));
        printf(_("  --schedule=FILE           use test ordering schedule from 
FILE\n"));
        printf(_("                            (may be used multiple times to 
concatenate)\n"));
+       printf(_("  --srcdir=DIR              absolute path to source directory 
(for VPATH builds)\n"));
        printf(_("  --temp-install=DIR        create a temporary installation 
in DIR\n"));
        printf(_("  --no-locale               use C locale\n"));
        printf(_("\n"));
***************
*** 1369,1374 ****
--- 1563,1569 ----
                {"port", required_argument, NULL, 14},
                {"user", required_argument, NULL, 15},
                {"psqldir", required_argument, NULL, 16},
+               {"srcdir", required_argument, NULL, 17},
                {NULL, 0, NULL, 0}
        };
  
***************
*** 1461,1466 ****
--- 1656,1664 ----
                                if (strlen(optarg))
                                        psqldir = strdup(optarg);
                                break;
+                       case 17:
+                               srcdir = strdup(optarg);
+                               break;
                        default:
                                /* getopt_long already emitted a complaint */
                                fprintf(stderr, _("\nTry \"%s -h\" for more 
information.\n"),
***************
*** 1520,1528 ****
--- 1718,1732 ----
                        make_directory(buf);
  
                /* "make install" */
+ #ifndef WIN32_ONLY_COMPILER
                snprintf(buf, sizeof(buf),
                                 SYSTEMQUOTE "\"%s\" -C \"%s\" 
DESTDIR=\"%s/install\" install with_perl=no with_python=no > 
\"%s/log/install.log\" 2>&1" SYSTEMQUOTE,
                                 makeprog, top_builddir, temp_install, 
outputdir);
+ #else
+               snprintf(buf, sizeof(buf),
+                               SYSTEMQUOTE "perl 
\"%s/src/tools/msvc/install.pl\" \"%s/install\" >\"%s/log/install.log\" 2>&1" 
SYSTEMQUOTE,
+                               top_builddir, temp_install, outputdir);
+ #endif
                if (system(buf))
                {
                        fprintf(stderr, _("\n%s: installation failed\nExamine 
%s/log/install.log for the reason.\nCommand was: %s\n"), progname, outputdir, 
buf);
Index: src/test/regress/resultmap
===================================================================
RCS file: c:/prog/cvsrepo/pgsql/pgsql/src/test/regress/resultmap,v
retrieving revision 1.83
diff -c -r1.83 resultmap
*** src/test/regress/resultmap  3 Aug 2006 17:04:00 -0000       1.83
--- src/test/regress/resultmap  29 Dec 2006 19:51:45 -0000
***************
*** 1,8 ****
--- 1,11 ----
  float4/i.86-pc-mingw32=float4-exp-three-digits
+ float4/i.86-pc-win32vc=float4-exp-three-digits
  float8/i.86-.*-freebsd=float8-small-is-zero
  float8/i.86-.*-openbsd=float8-small-is-zero
  float8/i.86-.*-netbsd=float8-small-is-zero
  float8/m68k-.*-netbsd=float8-small-is-zero
  float8/i.86-pc-mingw32=float8-exp-three-digits-win32
+ float8/i.86-pc-win32vc=float8-exp-three-digits-win32
  float8/i.86-pc-cygwin=float8-small-is-zero
  int8/i.86-pc-mingw32=int8-exp-three-digits
+ int8/i.86-pc-win32vc=int8-exp-three-digits
Index: src/tools/msvc/Solution.pm
===================================================================
RCS file: c:/prog/cvsrepo/pgsql/pgsql/src/tools/msvc/Solution.pm,v
retrieving revision 1.5
diff -c -r1.5 Solution.pm
*** src/tools/msvc/Solution.pm  29 Dec 2006 16:49:02 -0000      1.5
--- src/tools/msvc/Solution.pm  1 Jan 2007 14:57:21 -0000
***************
*** 197,213 ****
                print "Generating pg_config_paths.h...\n";
                open(O,'>', 'src\port\pg_config_paths.h') || confess "Could not 
open pg_config_paths.h";
                print O  <<EOF;
! #define PGBINDIR "/usr/local/pgsql/bin"
! #define PGSHAREDIR "/usr/local/pgsql/share"
! #define SYSCONFDIR "/usr/local/pgsql/etc"
! #define INCLUDEDIR "/usr/local/pgsql/include"
! #define PKGINCLUDEDIR "/usr/local/pgsql/include"
! #define INCLUDEDIRSERVER "/usr/local/pgsql/include/server"
! #define LIBDIR "/usr/local/pgsql/lib"
! #define PKGLIBDIR "/usr/local/pgsql/lib"
! #define LOCALEDIR "/usr/local/pgsql/share/locale"
! #define DOCDIR "/usr/local/pgsql/doc"
! #define MANDIR "/usr/local/pgsql/man"
  EOF
                close(O);
        }
--- 197,213 ----
                print "Generating pg_config_paths.h...\n";
                open(O,'>', 'src\port\pg_config_paths.h') || confess "Could not 
open pg_config_paths.h";
                print O  <<EOF;
! #define PGBINDIR "/bin"
! #define PGSHAREDIR "/share"
! #define SYSCONFDIR "/etc"
! #define INCLUDEDIR "/include"
! #define PKGINCLUDEDIR "/include"
! #define INCLUDEDIRSERVER "/include/server"
! #define LIBDIR "/lib"
! #define PKGLIBDIR "/lib"
! #define LOCALEDIR "/share/locale"
! #define DOCDIR "/doc"
! #define MANDIR "/man"
  EOF
                close(O);
        }
Index: src/tools/msvc/install.pl
===================================================================
RCS file: c:/prog/cvsrepo/pgsql/pgsql/src/tools/msvc/install.pl,v
retrieving revision 1.1
diff -c -r1.1 install.pl
*** src/tools/msvc/install.pl   29 Nov 2006 19:49:31 -0000      1.1
--- src/tools/msvc/install.pl   1 Jan 2007 14:53:42 -0000
***************
*** 70,78 ****
        open($D, "dir /b /s $spec |") || croak "Could not list $spec\n";
        while (<$D>) {
                chomp;
                my $tgt = $target . basename($_);
                print ".";
!               copy($_, $tgt) || croak "Could not copy $_\n";
        }
        close($D);
        print "\n";
--- 70,79 ----
        open($D, "dir /b /s $spec |") || croak "Could not list $spec\n";
        while (<$D>) {
                chomp;
+                 next if /regress/;   # Skip temporary install in regression 
subdir
                my $tgt = $target . basename($_);
                print ".";
!               copy($_, $tgt) || croak "Could not copy $_: $!\n";
        }
        close($D);
        print "\n";
Index: src/tools/msvc/mkvcbuild.pl
===================================================================
RCS file: c:/prog/cvsrepo/pgsql/pgsql/src/tools/msvc/mkvcbuild.pl,v
retrieving revision 1.8
diff -c -r1.8 mkvcbuild.pl
*** src/tools/msvc/mkvcbuild.pl 21 Nov 2006 17:54:26 -0000      1.8
--- src/tools/msvc/mkvcbuild.pl 29 Dec 2006 19:50:59 -0000
***************
*** 255,264 ****
  }


! # Regression DLLs
  my $regress = $solution->AddProject('regress','dll','misc');
  $regress->AddFile('src\test\regress\regress.c');
  $regress->AddReference($postgres);

  $solution->Save();

--- 255,271 ----
  }


! # Regression DLL and EXE
  my $regress = $solution->AddProject('regress','dll','misc');
  $regress->AddFile('src\test\regress\regress.c');
  $regress->AddReference($postgres);
+
+ my $pgregress = $solution->AddProject('pg_regress','exe','misc');
+ $pgregress->AddFile('src\test\regress\pg_regress.c');
+ $pgregress->AddIncludeDir('src\port');
+ $pgregress->AddDefine('HOST_TUPLE="i686-pc-win32vc"');
+ $pgregress->AddDefine('FRONTEND');
+ $pgregress->AddReference($libpgport);

  $solution->Save();

---------------------------(end of broadcast)---------------------------
TIP 3: Have you checked our extensive FAQ?

               http://www.postgresql.org/docs/faq

Reply via email to