ecpglib supports it.
Change configure (patch from Bruce) and msvc build system to no longer require
pthreads on win32, since all parts of postgresql can be thread-safe using the
native platform functions.
#
echo "$as_me:$LINENO: checking allow thread-safe client libraries" >&5
echo $ECHO_N "checking allow thread-safe client libraries... $ECHO_C" >&6
+if test "$PORTNAME" != "win32"; then
pgac_args="$pgac_args enable_thread_safety"
fi;
+else
+# Win32 should always use threads
+
+pgac_args="$pgac_args enable_thread_safety"
+
+# Check whether --enable-thread-safety or --disable-thread-safety was given.
+if test "${enable_thread_safety+set}" = set; then
+ enableval="$enable_thread_safety"
+
+ case $enableval in
+ yes)
+ :
+ ;;
+ no)
+ :
+ ;;
+ *)
+ { { echo "$as_me:$LINENO: error: no argument expected for --enable-thread-safety option" >&5
+echo "$as_me: error: no argument expected for --enable-thread-safety option" >&2;}
+ { (exit 1); exit 1; }; }
+ ;;
+ esac
+
+else
+ enable_thread_safety=yes
+
+fi;
+
+fi
+
pgac_args="$pgac_args enable_thread_safety_force"
# For each platform, we need to know about any special compile and link
# libraries, and whether the normal C function names are thread-safe.
# See the comment at the top of src/port/thread.c for more information.
-#
-if test "$enable_thread_safety" = yes; then
+# WIN32 doesn't need the pthread tests; it always uses threads
+if test "$enable_thread_safety" = yes -a "$PORTNAME" != "win32"; then
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
LIBS="$LIBS $PTHREAD_LIBS"
+if test "$PORTNAME" != "win32"; then
if test "${ac_cv_header_pthread_h+set}" = set; then
echo "$as_me:$LINENO: checking for pthread.h" >&5
echo $ECHO_N "checking for pthread.h... $ECHO_C" >&6
fi
+fi
dnl Process this file with autoconf to produce a configure script.
-dnl $PostgreSQL: pgsql/configure.in,v 1.506 2007/03/26 21:30:56 momjian Exp $
+dnl $PostgreSQL: pgsql/configure.in,v 1.507 2007/03/29 15:30:51 mha Exp $
dnl
dnl Developers, please strive to achieve this order:
dnl
# Enable thread-safe client libraries
#
AC_MSG_CHECKING([allow thread-safe client libraries])
+if test "$PORTNAME" != "win32"; then
PGAC_ARG_BOOL(enable, thread-safety, no, [ --enable-thread-safety make client libraries thread-safe])
+else
+# Win32 should always use threads
+PGAC_ARG_BOOL(enable, thread-safety, yes, [ --enable-thread-safety make client libraries thread-safe])
+fi
+
PGAC_ARG_BOOL(enable, thread-safety-force, no, [ --enable-thread-safety-force force thread-safety in spite of thread test failure])
if test "$enable_thread_safety" = yes -o \
"$enable_thread_safety_force" = yes; then
# For each platform, we need to know about any special compile and link
# libraries, and whether the normal C function names are thread-safe.
# See the comment at the top of src/port/thread.c for more information.
-#
-if test "$enable_thread_safety" = yes; then
+# WIN32 doesn't need the pthread tests; it always uses threads
+if test "$enable_thread_safety" = yes -a "$PORTNAME" != "win32"; then
ACX_PTHREAD # set thread flags
# Some platforms use these, so just defineed them. They can't hurt if they
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
LIBS="$LIBS $PTHREAD_LIBS"
+if test "$PORTNAME" != "win32"; then
AC_CHECK_HEADER(pthread.h, [], [AC_MSG_ERROR([pthread.h not found, required for --enable-thread-safety])])
+fi
AC_CHECK_FUNCS([strerror_r getpwuid_r gethostbyname_r])
-<!-- $PostgreSQL: pgsql/doc/src/sgml/install-win32.sgml,v 1.37 2007/03/24 22:16:49 mha Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/install-win32.sgml,v 1.38 2007/03/29 15:30:52 mha Exp $ -->
<chapter id="install-win32">
<title>Installation on <productname>Windows</productname></title>
</para></listitem>
</varlistentry>
- <varlistentry>
- <term><productname>pthreads</productname></term>
- <listitem><para>
- Required for building the <application>ECPG</application> libraries.
- Binaries can be downloaded from
- <ulink url="ftp://sources.redhat.com/pub/pthreads-win32"></>.
- </para></listitem>
- </varlistentry>
-
<varlistentry>
<term><productname>Python</productname></term>
<listitem><para>
return 0;
}
#else
+#ifndef WIN32
#include <pthread.h>
+#else
+#include <windows.h>
+#endif
#line 1 "regression.h"
-#line 18 "thread.pgc"
+#line 22 "thread.pgc"
void *test_thread(void *arg);
int main(int argc, char *argv[])
{
+#ifndef WIN32
pthread_t *threads;
+#else
+ HANDLE *threads;
+#endif
int n;
/* exec sql begin declare section */
-#line 30 "thread.pgc"
+#line 38 "thread.pgc"
int l_rows ;
/* exec sql end declare section */
-#line 31 "thread.pgc"
+#line 39 "thread.pgc"
/* Do not switch on debug output for regression tests. The threads get executed in
/* setup test_thread table */
{ ECPGconnect(__LINE__, 0, "regress1" , NULL, NULL , NULL, 0); }
-#line 38 "thread.pgc"
+#line 46 "thread.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, "drop table test_thread ", ECPGt_EOIT, ECPGt_EORT);}
-#line 39 "thread.pgc"
+#line 47 "thread.pgc"
/* DROP might fail */
{ ECPGtrans(__LINE__, NULL, "commit");}
-#line 40 "thread.pgc"
+#line 48 "thread.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, "create table test_thread ( tstamp timestamp not null default cast( timeofday () as timestamp ) , thread TEXT not null , iteration integer not null , primary key( thread , iteration ) ) ", ECPGt_EOIT, ECPGt_EORT);}
-#line 45 "thread.pgc"
+#line 53 "thread.pgc"
{ ECPGtrans(__LINE__, NULL, "commit");}
-#line 46 "thread.pgc"
+#line 54 "thread.pgc"
{ ECPGdisconnect(__LINE__, "CURRENT");}
-#line 47 "thread.pgc"
+#line 55 "thread.pgc"
/* create, and start, threads */
- threads = calloc(nthreads, sizeof(pthread_t));
+ threads = calloc(nthreads, sizeof(threads[0]));
if( threads == NULL )
{
fprintf(stderr, "Cannot alloc memory\n");
}
for( n = 0; n < nthreads; n++ )
{
+#ifndef WIN32
pthread_create(&threads[n], NULL, test_thread, (void *) (n + 1));
+#else
+ threads[n] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)test_thread, (void *) (n + 1), 0, NULL);
+#endif
}
/* wait for thread completion */
+#ifndef WIN32
for( n = 0; n < nthreads; n++ )
{
pthread_join(threads[n], NULL);
}
+#else
+ WaitForMultipleObjects(nthreads, threads, TRUE, INFINITE);
+#endif
free(threads);
/* and check results */
{ ECPGconnect(__LINE__, 0, "regress1" , NULL, NULL , NULL, 0); }
-#line 69 "thread.pgc"
+#line 85 "thread.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, "select count (*) from test_thread ", ECPGt_EOIT,
ECPGt_int,&(l_rows),(long)1,(long)1,sizeof(int),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
-#line 70 "thread.pgc"
+#line 86 "thread.pgc"
{ ECPGtrans(__LINE__, NULL, "commit");}
-#line 71 "thread.pgc"
+#line 87 "thread.pgc"
{ ECPGdisconnect(__LINE__, "CURRENT");}
-#line 72 "thread.pgc"
+#line 88 "thread.pgc"
if( l_rows == (nthreads * iterations) )
printf("Success.\n");
-#line 85 "thread.pgc"
+#line 101 "thread.pgc"
int l_i ;
-#line 86 "thread.pgc"
+#line 102 "thread.pgc"
char l_connection [ 128 ] ;
/* exec sql end declare section */
-#line 87 "thread.pgc"
+#line 103 "thread.pgc"
/* build up connection name, and connect to database */
snprintf(l_connection, sizeof(l_connection), "thread_%03ld", threadnum);
/* exec sql whenever sqlerror sqlprint ; */
-#line 91 "thread.pgc"
+#line 107 "thread.pgc"
{ ECPGconnect(__LINE__, 0, "regress1" , NULL, NULL , l_connection, 0);
-#line 92 "thread.pgc"
+#line 108 "thread.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
-#line 92 "thread.pgc"
+#line 108 "thread.pgc"
if( sqlca.sqlcode != 0 )
{
return( NULL );
}
{ ECPGtrans(__LINE__, l_connection, "begin transaction ");
-#line 98 "thread.pgc"
+#line 114 "thread.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
-#line 98 "thread.pgc"
+#line 114 "thread.pgc"
/* insert into test_thread table */
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L,
ECPGt_int,&(l_i),(long)1,(long)1,sizeof(int),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT);
-#line 103 "thread.pgc"
+#line 119 "thread.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
-#line 103 "thread.pgc"
+#line 119 "thread.pgc"
if( sqlca.sqlcode != 0 )
printf("%s: ERROR: insert failed!\n", l_connection);
/* all done */
{ ECPGtrans(__LINE__, l_connection, "commit");
-#line 109 "thread.pgc"
+#line 125 "thread.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
-#line 109 "thread.pgc"
+#line 125 "thread.pgc"
{ ECPGdisconnect(__LINE__, l_connection);
-#line 110 "thread.pgc"
+#line 126 "thread.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
-#line 110 "thread.pgc"
+#line 126 "thread.pgc"
return( NULL );
}
return 0;
}
#else
+#ifndef WIN32
#include <pthread.h>
+#else
+#include <windows.h>
+#endif
#line 1 "regression.h"
-#line 19 "thread_implicit.pgc"
+#line 23 "thread_implicit.pgc"
void *test_thread(void *arg);
int main(int argc, char *argv[])
{
+#ifndef WIN32
pthread_t *threads;
+#else
+ HANDLE *threads;
+#endif
int n;
/* exec sql begin declare section */
-#line 31 "thread_implicit.pgc"
+#line 39 "thread_implicit.pgc"
int l_rows ;
/* exec sql end declare section */
-#line 32 "thread_implicit.pgc"
+#line 40 "thread_implicit.pgc"
/* Do not switch on debug output for regression tests. The threads get executed in
/* setup test_thread table */
{ ECPGconnect(__LINE__, 0, "regress1" , NULL, NULL , NULL, 0); }
-#line 39 "thread_implicit.pgc"
+#line 47 "thread_implicit.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, "drop table test_thread ", ECPGt_EOIT, ECPGt_EORT);}
-#line 40 "thread_implicit.pgc"
+#line 48 "thread_implicit.pgc"
/* DROP might fail */
{ ECPGtrans(__LINE__, NULL, "commit");}
-#line 41 "thread_implicit.pgc"
+#line 49 "thread_implicit.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, "create table test_thread ( tstamp timestamp not null default cast( timeofday () as timestamp ) , thread TEXT not null , iteration integer not null , primary key( thread , iteration ) ) ", ECPGt_EOIT, ECPGt_EORT);}
-#line 46 "thread_implicit.pgc"
+#line 54 "thread_implicit.pgc"
{ ECPGtrans(__LINE__, NULL, "commit");}
-#line 47 "thread_implicit.pgc"
+#line 55 "thread_implicit.pgc"
{ ECPGdisconnect(__LINE__, "CURRENT");}
-#line 48 "thread_implicit.pgc"
+#line 56 "thread_implicit.pgc"
/* create, and start, threads */
- threads = calloc(nthreads, sizeof(pthread_t));
+ threads = calloc(nthreads, sizeof(threads[0]));
if( threads == NULL )
{
fprintf(stderr, "Cannot alloc memory\n");
}
for( n = 0; n < nthreads; n++ )
{
+#ifndef WIN32
pthread_create(&threads[n], NULL, test_thread, (void *) (n + 1));
+#else
+ threads[n] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) test_thread, (void *) (n+1), 0, NULL);
+#endif
}
/* wait for thread completion */
+#ifndef WIN32
for( n = 0; n < nthreads; n++ )
{
pthread_join(threads[n], NULL);
}
+#else
+ WaitForMultipleObjects(nthreads, threads, TRUE, INFINITE);
+#endif
free(threads);
/* and check results */
{ ECPGconnect(__LINE__, 0, "regress1" , NULL, NULL , NULL, 0); }
-#line 70 "thread_implicit.pgc"
+#line 86 "thread_implicit.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, "select count (*) from test_thread ", ECPGt_EOIT,
ECPGt_int,&(l_rows),(long)1,(long)1,sizeof(int),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
-#line 71 "thread_implicit.pgc"
+#line 87 "thread_implicit.pgc"
{ ECPGtrans(__LINE__, NULL, "commit");}
-#line 72 "thread_implicit.pgc"
+#line 88 "thread_implicit.pgc"
{ ECPGdisconnect(__LINE__, "CURRENT");}
-#line 73 "thread_implicit.pgc"
+#line 89 "thread_implicit.pgc"
if( l_rows == (nthreads * iterations) )
printf("Success.\n");
-#line 86 "thread_implicit.pgc"
+#line 102 "thread_implicit.pgc"
int l_i ;
-#line 87 "thread_implicit.pgc"
+#line 103 "thread_implicit.pgc"
char l_connection [ 128 ] ;
/* exec sql end declare section */
-#line 88 "thread_implicit.pgc"
+#line 104 "thread_implicit.pgc"
/* build up connection name, and connect to database */
snprintf(l_connection, sizeof(l_connection), "thread_%03ld", threadnum);
/* exec sql whenever sqlerror sqlprint ; */
-#line 92 "thread_implicit.pgc"
+#line 108 "thread_implicit.pgc"
{ ECPGconnect(__LINE__, 0, "regress1" , NULL, NULL , l_connection, 0);
-#line 93 "thread_implicit.pgc"
+#line 109 "thread_implicit.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
-#line 93 "thread_implicit.pgc"
+#line 109 "thread_implicit.pgc"
if( sqlca.sqlcode != 0 )
{
return( NULL );
}
{ ECPGtrans(__LINE__, NULL, "begin transaction ");
-#line 99 "thread_implicit.pgc"
+#line 115 "thread_implicit.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
-#line 99 "thread_implicit.pgc"
+#line 115 "thread_implicit.pgc"
/* insert into test_thread table */
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L,
ECPGt_int,&(l_i),(long)1,(long)1,sizeof(int),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT);
-#line 104 "thread_implicit.pgc"
+#line 120 "thread_implicit.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
-#line 104 "thread_implicit.pgc"
+#line 120 "thread_implicit.pgc"
if( sqlca.sqlcode != 0 )
printf("%s: ERROR: insert failed!\n", l_connection);
/* all done */
{ ECPGtrans(__LINE__, NULL, "commit");
-#line 110 "thread_implicit.pgc"
+#line 126 "thread_implicit.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
-#line 110 "thread_implicit.pgc"
+#line 126 "thread_implicit.pgc"
{ ECPGdisconnect(__LINE__, l_connection);
-#line 111 "thread_implicit.pgc"
+#line 127 "thread_implicit.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
-#line 111 "thread_implicit.pgc"
+#line 127 "thread_implicit.pgc"
return( NULL );
}
return 0;
}
#else
+#ifndef WIN32
#include <pthread.h>
+#else
+#include <windows.h>
+#endif
exec sql include ../regression;
int main(int argc, char *argv[])
{
+#ifndef WIN32
pthread_t *threads;
+#else
+ HANDLE *threads;
+#endif
int n;
EXEC SQL BEGIN DECLARE SECTION;
int l_rows;
EXEC SQL DISCONNECT;
/* create, and start, threads */
- threads = calloc(nthreads, sizeof(pthread_t));
+ threads = calloc(nthreads, sizeof(threads[0]));
if( threads == NULL )
{
fprintf(stderr, "Cannot alloc memory\n");
}
for( n = 0; n < nthreads; n++ )
{
+#ifndef WIN32
pthread_create(&threads[n], NULL, test_thread, (void *) (n + 1));
+#else
+ threads[n] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)test_thread, (void *) (n + 1), 0, NULL);
+#endif
}
/* wait for thread completion */
+#ifndef WIN32
for( n = 0; n < nthreads; n++ )
{
pthread_join(threads[n], NULL);
}
+#else
+ WaitForMultipleObjects(nthreads, threads, TRUE, INFINITE);
+#endif
free(threads);
/* and check results */
return 0;
}
#else
+#ifndef WIN32
#include <pthread.h>
+#else
+#include <windows.h>
+#endif
exec sql include ../regression;
int main(int argc, char *argv[])
{
+#ifndef WIN32
pthread_t *threads;
+#else
+ HANDLE *threads;
+#endif
int n;
EXEC SQL BEGIN DECLARE SECTION;
int l_rows;
EXEC SQL DISCONNECT;
/* create, and start, threads */
- threads = calloc(nthreads, sizeof(pthread_t));
+ threads = calloc(nthreads, sizeof(threads[0]));
if( threads == NULL )
{
fprintf(stderr, "Cannot alloc memory\n");
}
for( n = 0; n < nthreads; n++ )
{
+#ifndef WIN32
pthread_create(&threads[n], NULL, test_thread, (void *) (n + 1));
+#else
+ threads[n] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) test_thread, (void *) (n+1), 0, NULL);
+#endif
}
/* wait for thread completion */
+#ifndef WIN32
for( n = 0; n < nthreads; n++ )
{
pthread_join(threads[n], NULL);
}
+#else
+ WaitForMultipleObjects(nthreads, threads, TRUE, INFINITE);
+#endif
free(threads);
/* and check results */
#
# Package that generates build files for msvc build
#
-# $PostgreSQL: pgsql/src/tools/msvc/Mkvcbuild.pm,v 1.6 2007/03/24 14:13:27 mha Exp $
+# $PostgreSQL: pgsql/src/tools/msvc/Mkvcbuild.pm,v 1.7 2007/03/29 15:30:52 mha Exp $
#
use Carp;
use Win32;
$pgtypes->AddReference($postgres,$libpgport);
$pgtypes->AddIncludeDir('src\interfaces\ecpg\include');
- if ($config->{pthread})
- {
- my $libecpg =
- $solution->AddProject('libecpg','dll','interfaces','src\interfaces\ecpg\ecpglib');
- $libecpg->AddDefine('FRONTEND');
- $libecpg->AddIncludeDir('src\interfaces\ecpg\include');
- $libecpg->AddIncludeDir('src\interfaces\libpq');
- $libecpg->AddIncludeDir('src\port');
- $libecpg->AddLibrary('wsock32.lib');
- $libecpg->AddLibrary($config->{'pthread'} . '\pthreadVC2.lib');
- $libecpg->AddReference($libpq,$pgtypes,$libpgport);
-
- my $libecpgcompat =
- $solution->AddProject('libecpg_compat','dll','interfaces',
- 'src\interfaces\ecpg\compatlib');
- $libecpgcompat->AddIncludeDir('src\interfaces\ecpg\include');
- $libecpgcompat->AddIncludeDir('src\interfaces\libpq');
- $libecpgcompat->AddReference($pgtypes,$libecpg);
-
- my $ecpg = $solution->AddProject('ecpg','exe','interfaces','src\interfaces\ecpg\preproc');
- $ecpg->AddIncludeDir('src\interfaces\ecpg\include');
- $ecpg->AddIncludeDir('src\interfaces\libpq');
- $ecpg->AddFiles('src\interfaces\ecpg\preproc','pgc.l','preproc.y');
- $ecpg->AddDefine('MAJOR_VERSION=4');
- $ecpg->AddDefine('MINOR_VERSION=2');
- $ecpg->AddDefine('PATCHLEVEL=1');
- $ecpg->AddReference($libpgport);
- }
- else
- {
- print "Not building ecpg due to lack of pthreads.\n";
- }
+ my $libecpg =$solution->AddProject('libecpg','dll','interfaces','src\interfaces\ecpg\ecpglib');
+ $libecpg->AddDefine('FRONTEND');
+ $libecpg->AddIncludeDir('src\interfaces\ecpg\include');
+ $libecpg->AddIncludeDir('src\interfaces\libpq');
+ $libecpg->AddIncludeDir('src\port');
+ $libecpg->AddLibrary('wsock32.lib');
+ $libecpg->AddReference($libpq,$pgtypes,$libpgport);
+
+ my $libecpgcompat =
+ $solution->AddProject('libecpg_compat','dll','interfaces','src\interfaces\ecpg\compatlib');
+ $libecpgcompat->AddIncludeDir('src\interfaces\ecpg\include');
+ $libecpgcompat->AddIncludeDir('src\interfaces\libpq');
+ $libecpgcompat->AddReference($pgtypes,$libecpg);
+
+ my $ecpg = $solution->AddProject('ecpg','exe','interfaces','src\interfaces\ecpg\preproc');
+ $ecpg->AddIncludeDir('src\interfaces\ecpg\include');
+ $ecpg->AddIncludeDir('src\interfaces\libpq');
+ $ecpg->AddFiles('src\interfaces\ecpg\preproc','pgc.l','preproc.y');
+ $ecpg->AddDefine('MAJOR_VERSION=4');
+ $ecpg->AddDefine('MINOR_VERSION=2');
+ $ecpg->AddDefine('PATCHLEVEL=1');
+ $ecpg->AddReference($libpgport);
# src/bin
my $initdb = AddSimpleFrontend('initdb', 1);
package Project;
+
#
# Package that encapsulates a Visual C++ project file generation
#
-# $PostgreSQL: pgsql/src/tools/msvc/Project.pm,v 1.10 2007/03/17 14:01:01 mha Exp $
+# $PostgreSQL: pgsql/src/tools/msvc/Project.pm,v 1.11 2007/03/29 15:30:52 mha Exp $
#
use Carp;
use strict;
}
$libs =~ s/ $//;
$libs =~ s/__CFGNAME__/$cfgname/g;
- my $pth = $self->{solution}->{options}->{pthread};
- $pth = '' unless $pth;
print $f <<EOF;
<Configuration Name="$cfgname|Win32" OutputDirectory=".\\$cfgname\\$self->{name}" IntermediateDirectory=".\\$cfgname\\$self->{name}"
ConfigurationType="$cfgtype" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="FALSE" CharacterSet="2" WholeProgramOptimization="$p->{wholeopt}">
<Tool Name="VCCLCompilerTool" Optimization="$p->{opt}"
- AdditionalIncludeDirectories="src/include;src/include/port/win32;src/include/port/win32_msvc;$pth;$self->{includes}"
+ AdditionalIncludeDirectories="src/include;src/include/port/win32;src/include/port/win32_msvc;$self->{includes}"
PreprocessorDefinitions="WIN32;_WINDOWS;__WINDOWS__;__WIN32__;EXEC_BACKEND;WIN32_STACK_RLIMIT=4194304;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE$self->{defines}$p->{defs}"
StringPooling="$p->{strpool}"
RuntimeLibrary="$p->{runtime}" DisableSpecificWarnings="$self->{disablewarnings}"
package Solution;
+
#
# Package that encapsulates a Visual C++ solution file generation
-#
-# $PostgreSQL: pgsql/src/tools/msvc/Solution.pm,v 1.19 2007/03/24 22:16:49 mha Exp $
+#
+# $PostgreSQL: pgsql/src/tools/msvc/Solution.pm,v 1.20 2007/03/29 15:30:52 mha Exp $
#
use Carp;
use strict;
}
print O "#define LOCALEDIR \"/share/locale\"\n" if ($self->{options}->{nls});
print O "/* defines added by config steps */\n";
- print O "#ifndef IGNORE_CONFIGURED_SETTINGS\n";
+ print O "#ifndef IGNORE_CONFIGURED_SETTINGS\n";
print O "#define USE_ASSERT_CHECKING 1\n" if ($self->{options}->{asserts});
print O "#define USE_INTEGER_DATETIMES 1\n" if ($self->{options}->{integer_datetimes});
print O "#define USE_LDAP 1\n" if ($self->{options}->{ldap});
print O "#define HAVE_KRB5_TICKET_ENC_PART2 1\n";
print O "#define PG_KRB_SRVNAM \"postgres\"\n";
}
- print O "#endif /* IGNORE_CONFIGURED_SETTINGS */\n";
+ print O "#endif /* IGNORE_CONFIGURED_SETTINGS */\n";
close(O);
close(I);
}
print O <<EOF;
#if (_MSC_VER > 1200)
#define HAVE_LONG_LONG_INT_64
+#define ENABLE_THREAD_SAFETY 1
#endif
EOF
close(O);
krb5=>'c:\prog\pgsql\depend\krb5', # --with-krb5=<path>
ldap=>1, # --with-ldap
openssl=>'c:\openssl', # --with-ssl=<path>
- pthread=>'c:\prog\pgsql\depend\pthread',
xml=>'c:\prog\pgsql\depend\libxml2',
xslt=>'c:\prog\pgsql\depend\libxslt',
iconv=>'c:\prog\pgsql\depend\iconv',