pg 1.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +3 -0
  3. data.tar.gz.sig +0 -0
  4. data/.gemtest +0 -0
  5. data/BSDL +22 -0
  6. data/ChangeLog +6595 -0
  7. data/Contributors.rdoc +46 -0
  8. data/History.rdoc +492 -0
  9. data/LICENSE +56 -0
  10. data/Manifest.txt +72 -0
  11. data/POSTGRES +23 -0
  12. data/README-OS_X.rdoc +68 -0
  13. data/README-Windows.rdoc +56 -0
  14. data/README.ja.rdoc +14 -0
  15. data/README.rdoc +178 -0
  16. data/Rakefile +215 -0
  17. data/Rakefile.cross +298 -0
  18. data/ext/errorcodes.def +968 -0
  19. data/ext/errorcodes.rb +45 -0
  20. data/ext/errorcodes.txt +478 -0
  21. data/ext/extconf.rb +94 -0
  22. data/ext/gvl_wrappers.c +17 -0
  23. data/ext/gvl_wrappers.h +241 -0
  24. data/ext/pg.c +640 -0
  25. data/ext/pg.h +365 -0
  26. data/ext/pg_binary_decoder.c +229 -0
  27. data/ext/pg_binary_encoder.c +162 -0
  28. data/ext/pg_coder.c +549 -0
  29. data/ext/pg_connection.c +4252 -0
  30. data/ext/pg_copy_coder.c +596 -0
  31. data/ext/pg_errors.c +95 -0
  32. data/ext/pg_result.c +1501 -0
  33. data/ext/pg_text_decoder.c +981 -0
  34. data/ext/pg_text_encoder.c +682 -0
  35. data/ext/pg_tuple.c +541 -0
  36. data/ext/pg_type_map.c +166 -0
  37. data/ext/pg_type_map_all_strings.c +116 -0
  38. data/ext/pg_type_map_by_class.c +239 -0
  39. data/ext/pg_type_map_by_column.c +312 -0
  40. data/ext/pg_type_map_by_mri_type.c +284 -0
  41. data/ext/pg_type_map_by_oid.c +355 -0
  42. data/ext/pg_type_map_in_ruby.c +299 -0
  43. data/ext/util.c +149 -0
  44. data/ext/util.h +65 -0
  45. data/ext/vc/pg.sln +26 -0
  46. data/ext/vc/pg_18/pg.vcproj +216 -0
  47. data/ext/vc/pg_19/pg_19.vcproj +209 -0
  48. data/lib/pg.rb +74 -0
  49. data/lib/pg/basic_type_mapping.rb +459 -0
  50. data/lib/pg/binary_decoder.rb +22 -0
  51. data/lib/pg/coder.rb +83 -0
  52. data/lib/pg/connection.rb +291 -0
  53. data/lib/pg/constants.rb +11 -0
  54. data/lib/pg/exceptions.rb +11 -0
  55. data/lib/pg/result.rb +31 -0
  56. data/lib/pg/text_decoder.rb +47 -0
  57. data/lib/pg/text_encoder.rb +69 -0
  58. data/lib/pg/tuple.rb +30 -0
  59. data/lib/pg/type_map_by_column.rb +15 -0
  60. data/spec/data/expected_trace.out +26 -0
  61. data/spec/data/random_binary_data +0 -0
  62. data/spec/helpers.rb +380 -0
  63. data/spec/pg/basic_type_mapping_spec.rb +508 -0
  64. data/spec/pg/connection_spec.rb +1872 -0
  65. data/spec/pg/connection_sync_spec.rb +41 -0
  66. data/spec/pg/result_spec.rb +491 -0
  67. data/spec/pg/tuple_spec.rb +280 -0
  68. data/spec/pg/type_map_by_class_spec.rb +138 -0
  69. data/spec/pg/type_map_by_column_spec.rb +222 -0
  70. data/spec/pg/type_map_by_mri_type_spec.rb +136 -0
  71. data/spec/pg/type_map_by_oid_spec.rb +149 -0
  72. data/spec/pg/type_map_in_ruby_spec.rb +164 -0
  73. data/spec/pg/type_map_spec.rb +22 -0
  74. data/spec/pg/type_spec.rb +949 -0
  75. data/spec/pg_spec.rb +50 -0
  76. metadata +322 -0
  77. metadata.gz.sig +0 -0
@@ -0,0 +1,149 @@
1
+ /*
2
+ * util.c - Utils for ruby-pg
3
+ * $Id: util.c,v fc1c4deb1398 2018/06/25 12:02:09 kanis $
4
+ *
5
+ */
6
+
7
+ #include "pg.h"
8
+ #include "util.h"
9
+
10
+ static const char base64_encode_table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
11
+
12
+ /* Encode _len_ bytes at _in_ as base64 and write output to _out_.
13
+ *
14
+ * This encoder runs backwards, so that it is possible to encode a string
15
+ * in-place (with _out_ == _in_).
16
+ */
17
+ void
18
+ base64_encode( char *out, const char *in, int len)
19
+ {
20
+ const unsigned char *in_ptr = (const unsigned char *)in + len;
21
+ char *out_ptr = out + BASE64_ENCODED_SIZE(len);
22
+ int part_len = len % 3;
23
+
24
+ if( part_len > 0 ){
25
+ long byte2 = part_len > 2 ? *--in_ptr : 0;
26
+ long byte1 = part_len > 1 ? *--in_ptr : 0;
27
+ long byte0 = *--in_ptr;
28
+ long triple = (byte0 << 16) + (byte1 << 8) + byte2;
29
+
30
+ *--out_ptr = part_len > 2 ? base64_encode_table[(triple >> 0 * 6) & 0x3F] : '=';
31
+ *--out_ptr = part_len > 1 ? base64_encode_table[(triple >> 1 * 6) & 0x3F] : '=';
32
+ *--out_ptr = base64_encode_table[(triple >> 2 * 6) & 0x3F];
33
+ *--out_ptr = base64_encode_table[(triple >> 3 * 6) & 0x3F];
34
+ }
35
+
36
+ while( out_ptr > out ){
37
+ long byte2 = *--in_ptr;
38
+ long byte1 = *--in_ptr;
39
+ long byte0 = *--in_ptr;
40
+ long triple = (byte0 << 16) + (byte1 << 8) + byte2;
41
+
42
+ *--out_ptr = base64_encode_table[(triple >> 0 * 6) & 0x3F];
43
+ *--out_ptr = base64_encode_table[(triple >> 1 * 6) & 0x3F];
44
+ *--out_ptr = base64_encode_table[(triple >> 2 * 6) & 0x3F];
45
+ *--out_ptr = base64_encode_table[(triple >> 3 * 6) & 0x3F];
46
+ }
47
+ }
48
+
49
+ /*
50
+ * 0.upto(255).map{|a| "\\x#{ (base64_encode_table.index([a].pack("C")) || 0xff).to_s(16) }" }.join
51
+ */
52
+ static const unsigned char base64_decode_table[] =
53
+ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
54
+ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
55
+ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3e\xff\xff\xff\x3f"
56
+ "\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\xff\xff\xff\xff\xff\xff"
57
+ "\xff\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e"
58
+ "\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\xff\xff\xff\xff\xff"
59
+ "\xff\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28"
60
+ "\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\xff\xff\xff\xff\xff"
61
+ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
62
+ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
63
+ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
64
+ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
65
+ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
66
+ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
67
+ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
68
+ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff";
69
+
70
+ /* Decode _len_ bytes of base64 characters at _in_ and write output to _out_.
71
+ *
72
+ * It is possible to decode a string in-place (with _out_ == _in_).
73
+ */
74
+ int
75
+ base64_decode( char *out, const char *in, unsigned int len)
76
+ {
77
+ unsigned char a, b, c, d;
78
+ const unsigned char *in_ptr = (const unsigned char *)in;
79
+ unsigned char *out_ptr = (unsigned char *)out;
80
+ const unsigned char *iend_ptr = (unsigned char *)in + len;
81
+
82
+ for(;;){
83
+ if( in_ptr+3 < iend_ptr &&
84
+ (a=base64_decode_table[in_ptr[0]]) != 0xff &&
85
+ (b=base64_decode_table[in_ptr[1]]) != 0xff &&
86
+ (c=base64_decode_table[in_ptr[2]]) != 0xff &&
87
+ (d=base64_decode_table[in_ptr[3]]) != 0xff )
88
+ {
89
+ in_ptr += 4;
90
+ *out_ptr++ = (a << 2) | (b >> 4);
91
+ *out_ptr++ = (b << 4) | (c >> 2);
92
+ *out_ptr++ = (c << 6) | d;
93
+ } else if (in_ptr < iend_ptr){
94
+ a = b = c = d = 0xff;
95
+ while ((a = base64_decode_table[*in_ptr++]) == 0xff && in_ptr < iend_ptr) {}
96
+ if (in_ptr < iend_ptr){
97
+ while ((b = base64_decode_table[*in_ptr++]) == 0xff && in_ptr < iend_ptr) {}
98
+ if (in_ptr < iend_ptr){
99
+ while ((c = base64_decode_table[*in_ptr++]) == 0xff && in_ptr < iend_ptr) {}
100
+ if (in_ptr < iend_ptr){
101
+ while ((d = base64_decode_table[*in_ptr++]) == 0xff && in_ptr < iend_ptr) {}
102
+ }
103
+ }
104
+ }
105
+ if (a != 0xff && b != 0xff) {
106
+ *out_ptr++ = (a << 2) | (b >> 4);
107
+ if (c != 0xff) {
108
+ *out_ptr++ = (b << 4) | (c >> 2);
109
+ if (d != 0xff)
110
+ *out_ptr++ = (c << 6) | d;
111
+ }
112
+ }
113
+ } else {
114
+ break;
115
+ }
116
+ }
117
+
118
+
119
+ return (char*)out_ptr - out;
120
+ }
121
+
122
+ /*
123
+ * Case-independent comparison of two not-necessarily-null-terminated strings.
124
+ * At most n bytes will be examined from each string.
125
+ */
126
+ int
127
+ rbpg_strncasecmp(const char *s1, const char *s2, size_t n)
128
+ {
129
+ while (n-- > 0)
130
+ {
131
+ unsigned char ch1 = (unsigned char) *s1++;
132
+ unsigned char ch2 = (unsigned char) *s2++;
133
+
134
+ if (ch1 != ch2){
135
+ if (ch1 >= 'A' && ch1 <= 'Z')
136
+ ch1 += 'a' - 'A';
137
+
138
+ if (ch2 >= 'A' && ch2 <= 'Z')
139
+ ch2 += 'a' - 'A';
140
+
141
+ if (ch1 != ch2)
142
+ return (int) ch1 - (int) ch2;
143
+ }
144
+ if (ch1 == 0)
145
+ break;
146
+ }
147
+ return 0;
148
+ }
149
+
@@ -0,0 +1,65 @@
1
+ /*
2
+ * utils.h
3
+ *
4
+ */
5
+
6
+ #ifndef __utils_h
7
+ #define __utils_h
8
+
9
+ #define write_nbo16(l,c) ( \
10
+ *((unsigned char*)(c)+0)=(unsigned char)(((l)>>8)&0xff), \
11
+ *((unsigned char*)(c)+1)=(unsigned char)(((l) )&0xff)\
12
+ )
13
+
14
+ #define write_nbo32(l,c) ( \
15
+ *((unsigned char*)(c)+0)=(unsigned char)(((l)>>24L)&0xff), \
16
+ *((unsigned char*)(c)+1)=(unsigned char)(((l)>>16L)&0xff), \
17
+ *((unsigned char*)(c)+2)=(unsigned char)(((l)>> 8L)&0xff), \
18
+ *((unsigned char*)(c)+3)=(unsigned char)(((l) )&0xff)\
19
+ )
20
+
21
+ #define write_nbo64(l,c) ( \
22
+ *((unsigned char*)(c)+0)=(unsigned char)(((l)>>56LL)&0xff), \
23
+ *((unsigned char*)(c)+1)=(unsigned char)(((l)>>48LL)&0xff), \
24
+ *((unsigned char*)(c)+2)=(unsigned char)(((l)>>40LL)&0xff), \
25
+ *((unsigned char*)(c)+3)=(unsigned char)(((l)>>32LL)&0xff), \
26
+ *((unsigned char*)(c)+4)=(unsigned char)(((l)>>24LL)&0xff), \
27
+ *((unsigned char*)(c)+5)=(unsigned char)(((l)>>16LL)&0xff), \
28
+ *((unsigned char*)(c)+6)=(unsigned char)(((l)>> 8LL)&0xff), \
29
+ *((unsigned char*)(c)+7)=(unsigned char)(((l) )&0xff)\
30
+ )
31
+
32
+ #define read_nbo16(c) ((int16_t)( \
33
+ (((uint16_t)(*((unsigned char*)(c)+0)))<< 8L) | \
34
+ (((uint16_t)(*((unsigned char*)(c)+1))) ) \
35
+ ))
36
+
37
+ #define read_nbo32(c) ((int32_t)( \
38
+ (((uint32_t)(*((unsigned char*)(c)+0)))<<24L) | \
39
+ (((uint32_t)(*((unsigned char*)(c)+1)))<<16L) | \
40
+ (((uint32_t)(*((unsigned char*)(c)+2)))<< 8L) | \
41
+ (((uint32_t)(*((unsigned char*)(c)+3))) ) \
42
+ ))
43
+
44
+ #define read_nbo64(c) ((int64_t)( \
45
+ (((uint64_t)(*((unsigned char*)(c)+0)))<<56LL) | \
46
+ (((uint64_t)(*((unsigned char*)(c)+1)))<<48LL) | \
47
+ (((uint64_t)(*((unsigned char*)(c)+2)))<<40LL) | \
48
+ (((uint64_t)(*((unsigned char*)(c)+3)))<<32LL) | \
49
+ (((uint64_t)(*((unsigned char*)(c)+4)))<<24LL) | \
50
+ (((uint64_t)(*((unsigned char*)(c)+5)))<<16LL) | \
51
+ (((uint64_t)(*((unsigned char*)(c)+6)))<< 8LL) | \
52
+ (((uint64_t)(*((unsigned char*)(c)+7))) ) \
53
+ ))
54
+
55
+
56
+
57
+ #define BASE64_ENCODED_SIZE(strlen) (((strlen) + 2) / 3 * 4)
58
+ #define BASE64_DECODED_SIZE(base64len) (((base64len) + 3) / 4 * 3)
59
+
60
+ void base64_encode( char *out, const char *in, int len);
61
+ int base64_decode( char *out, const char *in, unsigned int len);
62
+
63
+ int rbpg_strncasecmp(const char *s1, const char *s2, size_t n);
64
+
65
+ #endif /* end __utils_h */
@@ -0,0 +1,26 @@
1
+ 
2
+ Microsoft Visual Studio Solution File, Format Version 10.00
3
+ # Visual Studio 2008
4
+ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pg", "pg_18\pg.vcproj", "{9A8BF0C8-1D75-4DC0-8D84-BAEFD693795E}"
5
+ EndProject
6
+ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pg_19", "pg_19\pg_19.vcproj", "{2EE30C74-074F-4611-B39B-38D5F3C9B071}"
7
+ EndProject
8
+ Global
9
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
10
+ Debug|Win32 = Debug|Win32
11
+ Release|Win32 = Release|Win32
12
+ EndGlobalSection
13
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
14
+ {9A8BF0C8-1D75-4DC0-8D84-BAEFD693795E}.Debug|Win32.ActiveCfg = Debug|Win32
15
+ {9A8BF0C8-1D75-4DC0-8D84-BAEFD693795E}.Debug|Win32.Build.0 = Debug|Win32
16
+ {9A8BF0C8-1D75-4DC0-8D84-BAEFD693795E}.Release|Win32.ActiveCfg = Release|Win32
17
+ {9A8BF0C8-1D75-4DC0-8D84-BAEFD693795E}.Release|Win32.Build.0 = Release|Win32
18
+ {2EE30C74-074F-4611-B39B-38D5F3C9B071}.Debug|Win32.ActiveCfg = Debug|Win32
19
+ {2EE30C74-074F-4611-B39B-38D5F3C9B071}.Debug|Win32.Build.0 = Debug|Win32
20
+ {2EE30C74-074F-4611-B39B-38D5F3C9B071}.Release|Win32.ActiveCfg = Release|Win32
21
+ {2EE30C74-074F-4611-B39B-38D5F3C9B071}.Release|Win32.Build.0 = Release|Win32
22
+ EndGlobalSection
23
+ GlobalSection(SolutionProperties) = preSolution
24
+ HideSolutionNode = FALSE
25
+ EndGlobalSection
26
+ EndGlobal
@@ -0,0 +1,216 @@
1
+ <?xml version="1.0" encoding="Windows-1252"?>
2
+ <VisualStudioProject
3
+ ProjectType="Visual C++"
4
+ Version="9.00"
5
+ Name="pg"
6
+ ProjectGUID="{9A8BF0C8-1D75-4DC0-8D84-BAEFD693795E}"
7
+ RootNamespace="pg"
8
+ Keyword="Win32Proj"
9
+ TargetFrameworkVersion="196613"
10
+ >
11
+ <Platforms>
12
+ <Platform
13
+ Name="Win32"
14
+ />
15
+ </Platforms>
16
+ <ToolFiles>
17
+ </ToolFiles>
18
+ <Configurations>
19
+ <Configuration
20
+ Name="Debug|Win32"
21
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
22
+ IntermediateDirectory="$(ConfigurationName)"
23
+ ConfigurationType="2"
24
+ CharacterSet="1"
25
+ >
26
+ <Tool
27
+ Name="VCPreBuildEventTool"
28
+ />
29
+ <Tool
30
+ Name="VCCustomBuildTool"
31
+ />
32
+ <Tool
33
+ Name="VCXMLDataGeneratorTool"
34
+ />
35
+ <Tool
36
+ Name="VCWebServiceProxyGeneratorTool"
37
+ />
38
+ <Tool
39
+ Name="VCMIDLTool"
40
+ />
41
+ <Tool
42
+ Name="VCCLCompilerTool"
43
+ Optimization="0"
44
+ AdditionalIncludeDirectories="&quot;C:\Development\ruby\lib\ruby\1.8\i386-mswin32&quot;;C:\Development\msys\local\include"
45
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;PG_EXPORTS;HAVE_LIBPQ_FE_H;HAVE_LIBPQ_LIBPQ_FS_H;HAVE_PQCONNECTIONUSEDPASSWORD;HAVE_PQISTHREADSAFE;HAVE_LO_CREATE;HAVE_PQPREPARE;HAVE_PQEXECPARAMS;HAVE_PQESCAPESTRING;HAVE_PQESCAPESTRINGCONN;HAVE_PG_ENCODING_TO_CHAR;HAVE_PQSETCLIENTENCODING"
46
+ MinimalRebuild="true"
47
+ BasicRuntimeChecks="3"
48
+ RuntimeLibrary="3"
49
+ UsePrecompiledHeader="0"
50
+ WarningLevel="3"
51
+ DebugInformationFormat="4"
52
+ DisableSpecificWarnings="4996"
53
+ />
54
+ <Tool
55
+ Name="VCManagedResourceCompilerTool"
56
+ />
57
+ <Tool
58
+ Name="VCResourceCompilerTool"
59
+ />
60
+ <Tool
61
+ Name="VCPreLinkEventTool"
62
+ />
63
+ <Tool
64
+ Name="VCLinkerTool"
65
+ AdditionalDependencies="libpq.lib msvcrt-ruby18.lib"
66
+ OutputFile="C:\Development\ruby\lib\ruby\gems\1.8\gems\pg-0.7.9.2009.03.14-x86-mswin32-60\lib\$(ProjectName).so"
67
+ LinkIncremental="2"
68
+ AdditionalLibraryDirectories="C:\Development\ruby\lib;C:\Development\msys\local\lib"
69
+ GenerateDebugInformation="true"
70
+ SubSystem="2"
71
+ TargetMachine="1"
72
+ />
73
+ <Tool
74
+ Name="VCALinkTool"
75
+ />
76
+ <Tool
77
+ Name="VCManifestTool"
78
+ />
79
+ <Tool
80
+ Name="VCXDCMakeTool"
81
+ />
82
+ <Tool
83
+ Name="VCBscMakeTool"
84
+ />
85
+ <Tool
86
+ Name="VCFxCopTool"
87
+ />
88
+ <Tool
89
+ Name="VCAppVerifierTool"
90
+ />
91
+ <Tool
92
+ Name="VCPostBuildEventTool"
93
+ />
94
+ </Configuration>
95
+ <Configuration
96
+ Name="Release|Win32"
97
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
98
+ IntermediateDirectory="$(ConfigurationName)"
99
+ ConfigurationType="2"
100
+ CharacterSet="1"
101
+ WholeProgramOptimization="1"
102
+ >
103
+ <Tool
104
+ Name="VCPreBuildEventTool"
105
+ />
106
+ <Tool
107
+ Name="VCCustomBuildTool"
108
+ />
109
+ <Tool
110
+ Name="VCXMLDataGeneratorTool"
111
+ />
112
+ <Tool
113
+ Name="VCWebServiceProxyGeneratorTool"
114
+ />
115
+ <Tool
116
+ Name="VCMIDLTool"
117
+ />
118
+ <Tool
119
+ Name="VCCLCompilerTool"
120
+ Optimization="2"
121
+ EnableIntrinsicFunctions="true"
122
+ AdditionalIncludeDirectories="C:\Development\msys\local\include;&quot;C:\Development\ruby\lib\ruby\1.8\i386-mswin32_90&quot;"
123
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;PG_EXPORTS"
124
+ RuntimeLibrary="2"
125
+ EnableFunctionLevelLinking="true"
126
+ UsePrecompiledHeader="2"
127
+ WarningLevel="3"
128
+ DebugInformationFormat="3"
129
+ />
130
+ <Tool
131
+ Name="VCManagedResourceCompilerTool"
132
+ />
133
+ <Tool
134
+ Name="VCResourceCompilerTool"
135
+ />
136
+ <Tool
137
+ Name="VCPreLinkEventTool"
138
+ />
139
+ <Tool
140
+ Name="VCLinkerTool"
141
+ OutputFile="$(OutDir)\$(ProjectName).so"
142
+ LinkIncremental="1"
143
+ GenerateDebugInformation="true"
144
+ SubSystem="2"
145
+ OptimizeReferences="2"
146
+ EnableCOMDATFolding="2"
147
+ TargetMachine="1"
148
+ />
149
+ <Tool
150
+ Name="VCALinkTool"
151
+ />
152
+ <Tool
153
+ Name="VCManifestTool"
154
+ />
155
+ <Tool
156
+ Name="VCXDCMakeTool"
157
+ />
158
+ <Tool
159
+ Name="VCBscMakeTool"
160
+ />
161
+ <Tool
162
+ Name="VCFxCopTool"
163
+ />
164
+ <Tool
165
+ Name="VCAppVerifierTool"
166
+ />
167
+ <Tool
168
+ Name="VCPostBuildEventTool"
169
+ />
170
+ </Configuration>
171
+ </Configurations>
172
+ <References>
173
+ </References>
174
+ <Files>
175
+ <Filter
176
+ Name="Source Files"
177
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
178
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
179
+ >
180
+ <File
181
+ RelativePath="..\..\compat.c"
182
+ >
183
+ </File>
184
+ <File
185
+ RelativePath="..\..\pg.c"
186
+ >
187
+ </File>
188
+ </Filter>
189
+ <Filter
190
+ Name="Header Files"
191
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
192
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
193
+ >
194
+ <File
195
+ RelativePath="..\..\compat.h"
196
+ >
197
+ </File>
198
+ <File
199
+ RelativePath="..\..\pg.h"
200
+ >
201
+ </File>
202
+ </Filter>
203
+ <Filter
204
+ Name="Resource Files"
205
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
206
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
207
+ >
208
+ </Filter>
209
+ <File
210
+ RelativePath=".\ReadMe.txt"
211
+ >
212
+ </File>
213
+ </Files>
214
+ <Globals>
215
+ </Globals>
216
+ </VisualStudioProject>