Re: [PATCHES] pg_regress updates for vc++ bulid

From: Bruce Momjian <bruce(at)momjian(dot)us>
To: Magnus Hagander <magnus(at)hagander(dot)net>
Cc: pgsql-patches(at)postgresql(dot)org
Subject: Re: [PATCHES] pg_regress updates for vc++ bulid
Date: 2007-01-19 17:00:09
Message-ID: 200701191700.l0JH09E17704@momjian.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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(at)momjian(dot)us
EnterpriseDB http://www.enterprisedb.com

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

In response to

Responses

Browse pgsql-patches by date

  From Date Subject
Next Message Bruce Momjian 2007-01-19 17:02:34 Re: Fix for bug in plpython bool type conversion
Previous Message Alvaro Herrera 2007-01-19 16:43:04 Re: partial pg_regress patch from Magnus