diff --git a/configure b/configure index 72d66b988a..c5a20b1e12 100755 --- a/configure +++ b/configure @@ -3683,6 +3683,7 @@ IFS=$ac_save_IFS # 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" @@ -3709,6 +3710,36 @@ else 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" @@ -16701,8 +16732,8 @@ fi # 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 @@ -17236,6 +17267,7 @@ _LIBS="$LIBS" 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 @@ -17382,6 +17414,7 @@ echo "$as_me: error: pthread.h not found, required for --enable-thread-safety" > fi +fi diff --git a/configure.in b/configure.in index 194c56a567..03511fbd46 100644 --- a/configure.in +++ b/configure.in @@ -1,5 +1,5 @@ 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 @@ -416,7 +416,13 @@ IFS=$ac_save_IFS # 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 @@ -1108,8 +1114,8 @@ AC_FUNC_FSEEKO # 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 @@ -1137,7 +1143,9 @@ _LIBS="$LIBS" 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]) diff --git a/doc/src/sgml/install-win32.sgml b/doc/src/sgml/install-win32.sgml index 4244a0e6fb..f2fbdb8440 100644 --- a/doc/src/sgml/install-win32.sgml +++ b/doc/src/sgml/install-win32.sgml @@ -1,4 +1,4 @@ - + Installation on <productname>Windows</productname> @@ -161,15 +161,6 @@ - - pthreads - - Required for building the ECPG libraries. - Binaries can be downloaded from - . - - - Python diff --git a/src/interfaces/ecpg/test/expected/thread-thread.c b/src/interfaces/ecpg/test/expected/thread-thread.c index 5011640b32..9555a79bfa 100644 --- a/src/interfaces/ecpg/test/expected/thread-thread.c +++ b/src/interfaces/ecpg/test/expected/thread-thread.c @@ -23,7 +23,11 @@ main(void) return 0; } #else +#ifndef WIN32 #include +#else +#include +#endif #line 1 "regression.h" @@ -33,7 +37,7 @@ main(void) -#line 18 "thread.pgc" +#line 22 "thread.pgc" void *test_thread(void *arg); @@ -43,15 +47,19 @@ int iterations = 20; 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 @@ -60,26 +68,26 @@ int main(int argc, char *argv[]) /* setup test_thread table */ { ECPGconnect(__LINE__, 0, "regress1" , NULL, NULL , NULL, 0); } -#line 38 "thread.pgc" - - { ECPGdo(__LINE__, 0, 1, NULL, "drop table test_thread ", ECPGt_EOIT, ECPGt_EORT);} -#line 39 "thread.pgc" - /* DROP might fail */ - { ECPGtrans(__LINE__, NULL, "commit");} -#line 40 "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" - - { ECPGtrans(__LINE__, NULL, "commit");} #line 46 "thread.pgc" - { ECPGdisconnect(__LINE__, "CURRENT");} + { ECPGdo(__LINE__, 0, 1, NULL, "drop table test_thread ", ECPGt_EOIT, ECPGt_EORT);} #line 47 "thread.pgc" + /* DROP might fail */ + { ECPGtrans(__LINE__, NULL, "commit");} +#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 53 "thread.pgc" + + { ECPGtrans(__LINE__, NULL, "commit");} +#line 54 "thread.pgc" + + { ECPGdisconnect(__LINE__, "CURRENT");} +#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"); @@ -87,30 +95,38 @@ int main(int argc, char *argv[]) } 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"); @@ -127,25 +143,25 @@ void *test_thread(void *arg) -#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 ) { @@ -153,10 +169,10 @@ if (sqlca.sqlcode < 0) sqlprint();} 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 */ @@ -167,10 +183,10 @@ if (sqlca.sqlcode < 0) sqlprint();} 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); @@ -178,16 +194,16 @@ if (sqlca.sqlcode < 0) sqlprint();} /* 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 ); } diff --git a/src/interfaces/ecpg/test/expected/thread-thread_implicit.c b/src/interfaces/ecpg/test/expected/thread-thread_implicit.c index 1fd3faa48d..f48db90559 100644 --- a/src/interfaces/ecpg/test/expected/thread-thread_implicit.c +++ b/src/interfaces/ecpg/test/expected/thread-thread_implicit.c @@ -24,7 +24,11 @@ main(void) return 0; } #else +#ifndef WIN32 #include +#else +#include +#endif #line 1 "regression.h" @@ -34,7 +38,7 @@ main(void) -#line 19 "thread_implicit.pgc" +#line 23 "thread_implicit.pgc" void *test_thread(void *arg); @@ -44,15 +48,19 @@ int iterations = 20; 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 @@ -61,26 +69,26 @@ int main(int argc, char *argv[]) /* setup test_thread table */ { ECPGconnect(__LINE__, 0, "regress1" , NULL, NULL , NULL, 0); } -#line 39 "thread_implicit.pgc" - - { ECPGdo(__LINE__, 0, 1, NULL, "drop table test_thread ", ECPGt_EOIT, ECPGt_EORT);} -#line 40 "thread_implicit.pgc" - /* DROP might fail */ - { ECPGtrans(__LINE__, NULL, "commit");} -#line 41 "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" - - { ECPGtrans(__LINE__, NULL, "commit");} #line 47 "thread_implicit.pgc" - { ECPGdisconnect(__LINE__, "CURRENT");} + { ECPGdo(__LINE__, 0, 1, NULL, "drop table test_thread ", ECPGt_EOIT, ECPGt_EORT);} #line 48 "thread_implicit.pgc" + /* DROP might fail */ + { ECPGtrans(__LINE__, NULL, "commit");} +#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 54 "thread_implicit.pgc" + + { ECPGtrans(__LINE__, NULL, "commit");} +#line 55 "thread_implicit.pgc" + + { ECPGdisconnect(__LINE__, "CURRENT");} +#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"); @@ -88,30 +96,38 @@ int main(int argc, char *argv[]) } 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"); @@ -128,25 +144,25 @@ void *test_thread(void *arg) -#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 ) { @@ -154,10 +170,10 @@ if (sqlca.sqlcode < 0) sqlprint();} 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 */ @@ -168,10 +184,10 @@ if (sqlca.sqlcode < 0) sqlprint();} 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); @@ -179,16 +195,16 @@ if (sqlca.sqlcode < 0) sqlprint();} /* 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 ); } diff --git a/src/interfaces/ecpg/test/thread/thread.pgc b/src/interfaces/ecpg/test/thread/thread.pgc index e7f0b4d1dc..726121d2ca 100644 --- a/src/interfaces/ecpg/test/thread/thread.pgc +++ b/src/interfaces/ecpg/test/thread/thread.pgc @@ -13,7 +13,11 @@ main(void) return 0; } #else +#ifndef WIN32 #include +#else +#include +#endif exec sql include ../regression; @@ -24,7 +28,11 @@ int iterations = 20; 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; @@ -47,7 +55,7 @@ int main(int argc, char *argv[]) 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"); @@ -55,14 +63,22 @@ int main(int argc, char *argv[]) } 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 */ diff --git a/src/interfaces/ecpg/test/thread/thread_implicit.pgc b/src/interfaces/ecpg/test/thread/thread_implicit.pgc index e403384960..010a8e5205 100644 --- a/src/interfaces/ecpg/test/thread/thread_implicit.pgc +++ b/src/interfaces/ecpg/test/thread/thread_implicit.pgc @@ -14,7 +14,11 @@ main(void) return 0; } #else +#ifndef WIN32 #include +#else +#include +#endif exec sql include ../regression; @@ -25,7 +29,11 @@ int iterations = 20; 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; @@ -48,7 +56,7 @@ int main(int argc, char *argv[]) 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"); @@ -56,14 +64,22 @@ int main(int argc, char *argv[]) } 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 */ diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm index 35294adca7..35412ae6fe 100644 --- a/src/tools/msvc/Mkvcbuild.pm +++ b/src/tools/msvc/Mkvcbuild.pm @@ -3,7 +3,7 @@ package Mkvcbuild; # # 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; @@ -131,38 +131,28 @@ sub mkvcbuild $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 $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 $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 $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); diff --git a/src/tools/msvc/Project.pm b/src/tools/msvc/Project.pm index 0623a4f998..f35580bfac 100644 --- a/src/tools/msvc/Project.pm +++ b/src/tools/msvc/Project.pm @@ -1,8 +1,9 @@ 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; @@ -462,13 +463,11 @@ sub WriteConfiguration } $libs =~ s/ $//; $libs =~ s/__CFGNAME__/$cfgname/g; - my $pth = $self->{solution}->{options}->{pthread}; - $pth = '' unless $pth; print $f < {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}); @@ -124,7 +125,7 @@ s{PG_VERSION_STR "[^"]+"}{__STRINGIFY(x) #x\n#define __STRINGIFY2(z) __STRINGIFY 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); } @@ -239,6 +240,7 @@ s{PG_VERSION_STR "[^"]+"}{__STRINGIFY(x) #x\n#define __STRINGIFY2(z) __STRINGIFY print O < 1200) #define HAVE_LONG_LONG_INT_64 +#define ENABLE_THREAD_SAFETY 1 #endif EOF close(O); diff --git a/src/tools/msvc/config.pl b/src/tools/msvc/config.pl index 40c0f85dcf..755f27ec97 100644 --- a/src/tools/msvc/config.pl +++ b/src/tools/msvc/config.pl @@ -12,7 +12,6 @@ our $config = { krb5=>'c:\prog\pgsql\depend\krb5', # --with-krb5= ldap=>1, # --with-ldap openssl=>'c:\openssl', # --with-ssl= - pthread=>'c:\prog\pgsql\depend\pthread', xml=>'c:\prog\pgsql\depend\libxml2', xslt=>'c:\prog\pgsql\depend\libxslt', iconv=>'c:\prog\pgsql\depend\iconv',