]> granicus.if.org Git - postgresql/commitdiff
Disable linker warning 4197 on Win64, that is caused by the fact that we export
authorMagnus Hagander <magnus@hagander.net>
Tue, 5 Jan 2010 11:12:50 +0000 (11:12 +0000)
committerMagnus Hagander <magnus@hagander.net>
Tue, 5 Jan 2010 11:12:50 +0000 (11:12 +0000)
symbols both using __declspec(dllexport) (via the PGDLLIMPORT macro) and using
full-dll-export. This works without warning on Win32, but not on Win64.

In passing, fix the fact that the framework could never deal with more than
one disbled linker warning - because MSVC wants commas between linker warnings,
and semicolons between compiler warnings...

src/tools/msvc/Project.pm

index 3b30b72aaae2776cd46f25568cc700f7453e9c49..8eee8c118755543ee6aafc529cc860a16ba63b03 100644 (file)
@@ -3,7 +3,7 @@ package Project;
 #
 # Package that encapsulates a Visual C++ project file generation
 #
-# $PostgreSQL: pgsql/src/tools/msvc/Project.pm,v 1.24 2010/01/02 15:18:42 mha Exp $
+# $PostgreSQL: pgsql/src/tools/msvc/Project.pm,v 1.25 2010/01/05 11:12:50 mha Exp $
 #
 use Carp;
 use strict;
@@ -333,7 +333,7 @@ sub DisableLinkerWarnings
 {
     my ($self, $warnings) = @_;
 
-    $self->{disablelinkerwarnings} .= ';' unless ($self->{disablelinkerwarnings} eq '');
+    $self->{disablelinkerwarnings} .= ',' unless ($self->{disablelinkerwarnings} eq '');
     $self->{disablelinkerwarnings} .= $warnings;
 }
 
@@ -348,6 +348,10 @@ sub Save
         $self->FullExportDLL($self->{name} . ".lib");
     }
 
+       # Warning 4197 is about double exporting, disable this per
+       # http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=99193
+       $self->DisableLinkerWarnings('4197') if ($self->{platform} eq 'x64');
+
     # Dump the project
     open(F, ">$self->{name}.vcproj") || croak("Could not write to $self->{name}.vcproj\n");
     $self->WriteHeader(*F);
@@ -494,7 +498,9 @@ sub WriteConfiguration
     }
     $libs =~ s/ $//;
     $libs =~ s/__CFGNAME__/$cfgname/g;
+
     my $targetmachine = $self->{platform} eq 'Win32' ? 1 : 17;
+
     print $f <<EOF;
   <Configuration Name="$cfgname|$self->{platform}" OutputDirectory=".\\$cfgname\\$self->{name}" IntermediateDirectory=".\\$cfgname\\$self->{name}"
        ConfigurationType="$cfgtype" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="FALSE" CharacterSet="2" WholeProgramOptimization="$p->{wholeopt}">