Re: [PATCHES] pg_regress updates for vc++ bulid - Mailing list pgsql-patches

From Bruce Momjian
Subject Re: [PATCHES] pg_regress updates for vc++ bulid
Date
Msg-id 200701191700.l0JH09E17704@momjian.us
Whole thread Raw
In response to Re: pg_regress updates for vc++ bulid  (Magnus Hagander <magnus@hagander.net>)
Responses Re: [PATCHES] pg_regress updates for vc++ bulid
List pgsql-patches
A modified version of this was applied by Alvaro.

---------------------------------------------------------------------------

Magnus Hagander wrote:
> 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

--
  Bruce Momjian   bruce@momjian.us
  EnterpriseDB    http://www.enterprisedb.com

  + If your life is a hard drive, Christ can be your backup. +

pgsql-patches by date:

Previous
From: Alvaro Herrera
Date:
Subject: Re: partial pg_regress patch from Magnus
Next
From: Alvaro Herrera
Date:
Subject: Re: [PATCHES] pg_regress updates for vc++ bulid