tiny_tds 0.6.3.rc1 → 0.6.3.rc2
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.
- checksums.yaml +4 -4
- data/.gitignore +0 -1
- data/CHANGELOG +4 -0
- data/CODE_OF_CONDUCT.md +31 -0
- data/README.md +4 -17
- data/Rakefile +51 -58
- data/appveyor.yml +48 -0
- data/ext/tiny_tds/client.c +9 -9
- data/ext/tiny_tds/extconf.rb +203 -6
- data/lib/tiny_tds.rb +25 -6
- data/lib/tiny_tds/version.rb +1 -1
- data/test/test_helper.rb +1 -1
- metadata +31 -31
- data/compile/rake-compiler-dev-box.patch +0 -31
- data/ext/patch/Makefile.in.diff +0 -29
- data/ext/patch/dblib-30-char-username.diff +0 -11
- data/tasks/ports.rake +0 -73
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 93f0e6a826fc86c7517b4c7735b7d39b46075689
|
|
4
|
+
data.tar.gz: d64e8e16bdb9cbf6c83e427c70aa7a1e70c206f9
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 55811f95960940a21c87c4235ab84b910b2ae465c73f06e9eca6305f0486569d7b8ca2c41223ac6b8c499ce55ab4404a5081f168dd9a739c07c77326ed267f62
|
|
7
|
+
data.tar.gz: c654528c4174aee664b40c8a4c281bc51de2df4a697efb7f881a5e0f681b3d88b4e97369ec57471fcbf2adfafe36a8e6c4abb0fa944ddea6d07d3c0ce15120ba
|
data/.gitignore
CHANGED
data/CHANGELOG
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
|
|
2
2
|
* 0.6.3.rc1 *
|
|
3
3
|
|
|
4
|
+
* Ensure zero terminated strings, where C-str pointers are expected. Use StringValueCStr() Fixes #208.
|
|
5
|
+
|
|
6
|
+
* Revert 999fa571 so timeouts do not kill the client. Fixes #179.
|
|
7
|
+
|
|
4
8
|
* Remove `sspi_w_kerberos.diff` patch. Not needed anymore.
|
|
5
9
|
|
|
6
10
|
* Tested again on Azure. Added notes to README on recommended settings.
|
data/CODE_OF_CONDUCT.md
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
Contributor Code of Conduct
|
|
2
|
+
|
|
3
|
+
As contributors and maintainers of this project, we pledge to respect all
|
|
4
|
+
people who contribute through reporting issues, posting feature requests,
|
|
5
|
+
updating documentation, submitting pull requests or patches, and other
|
|
6
|
+
activities.
|
|
7
|
+
|
|
8
|
+
We are committed to making participation in this project a harassment-free
|
|
9
|
+
experience for everyone, regardless of level of experience, gender, gender
|
|
10
|
+
identity and expression, sexual orientation, disability, personal appearance,
|
|
11
|
+
body size, race, ethnicity, age, or religion.
|
|
12
|
+
|
|
13
|
+
Examples of unacceptable behavior by participants include the use of sexual
|
|
14
|
+
language or imagery, derogatory comments or personal attacks, trolling, public
|
|
15
|
+
or private harassment, insults, or other unprofessional conduct.
|
|
16
|
+
|
|
17
|
+
Project maintainers have the right and responsibility to remove, edit, or
|
|
18
|
+
reject comments, commits, code, wiki edits, issues, and other contributions
|
|
19
|
+
that are not aligned to this Code of Conduct. Project maintainers who do not
|
|
20
|
+
follow the Code of Conduct may be removed from the project team.
|
|
21
|
+
|
|
22
|
+
This code of conduct applies both within project spaces and in public spaces
|
|
23
|
+
when an individual is representing the project or its community.
|
|
24
|
+
|
|
25
|
+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
|
26
|
+
reported by opening an issue or contacting one or more of the project
|
|
27
|
+
maintainers.
|
|
28
|
+
|
|
29
|
+
This Code of Conduct is adapted from the Contributor Covenant
|
|
30
|
+
(http://contributor-covenant.org), version 1.1.0, available at
|
|
31
|
+
http://contributor-covenant.org/version/1/1/0/
|
data/README.md
CHANGED
|
@@ -318,27 +318,15 @@ To find out more about the FreeTDS release system [visit this thread](http://lis
|
|
|
318
318
|
|
|
319
319
|
## Compiling Gems for Windows
|
|
320
320
|
|
|
321
|
-
For the convenience of Windows users, TinyTDS ships pre-compiled for Ruby 1.9.3, 2.0 and 2.
|
|
321
|
+
For the convenience of Windows users, TinyTDS ships pre-compiled for Ruby 1.9.3, 2.0, 2.1 and 2.2 on Windows. In order to generate these gems, [rake-compiler-dock](https://github.com/rake-compiler/rake-compiler-dock) is used. This project provides a [Docker image](https://registry.hub.docker.com/u/larskanis/rake-compiler-dock/) with rvm, cross-compilers and a number of different target versions of ruby.
|
|
322
322
|
|
|
323
|
-
|
|
323
|
+
Run the following rake task to compile the gem for Windows. This will check the availability of [Docker](https://www.docker.com/) (and boot2docker on Windows or OS-X) and will give some advice for download and installation. When docker is running, it will download the docker image (once-only) and start the build:
|
|
324
324
|
|
|
325
325
|
```
|
|
326
|
-
$ rake
|
|
326
|
+
$ rake gem:windows
|
|
327
327
|
```
|
|
328
328
|
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
```
|
|
332
|
-
$ rake cross-compile
|
|
333
|
-
```
|
|
334
|
-
|
|
335
|
-
The compiled gems will exist in `./rake-compile-dev-box/tiny_tds/pkg/`.
|
|
336
|
-
|
|
337
|
-
If you want to clean up the dependent ports, temp files and resulting gems, run:
|
|
338
|
-
|
|
339
|
-
```
|
|
340
|
-
$ rake cross-compile:clean
|
|
341
|
-
```
|
|
329
|
+
The compiled gems will exist in `./pkg/`.
|
|
342
330
|
|
|
343
331
|
|
|
344
332
|
## Development & Testing
|
|
@@ -372,7 +360,6 @@ $ rake TINYTDS_SKIP_PORTS=1
|
|
|
372
360
|
|
|
373
361
|
## TODO List
|
|
374
362
|
|
|
375
|
-
* Include OpenSSL with Windows binaries for SQL Azure.
|
|
376
363
|
* Install an interrupt handler.
|
|
377
364
|
* Allow #escape to accept all ruby primitives.
|
|
378
365
|
|
data/Rakefile
CHANGED
|
@@ -18,6 +18,20 @@ def test_files
|
|
|
18
18
|
end
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
+
def add_file_to_gem(spec, relative_path)
|
|
22
|
+
target_path = File.join gem_build_path(spec), relative_path
|
|
23
|
+
target_dir = File.dirname(target_path)
|
|
24
|
+
mkdir_p target_dir
|
|
25
|
+
rm_f target_path
|
|
26
|
+
safe_ln relative_path, target_path
|
|
27
|
+
spec.files += [relative_path]
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def gem_build_path(spec)
|
|
31
|
+
File.join 'pkg', spec.full_name
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
|
|
21
35
|
gemspec = Gem::Specification::load(File.expand_path('../tiny_tds.gemspec', __FILE__))
|
|
22
36
|
|
|
23
37
|
Rake::TestTask.new do |t|
|
|
@@ -31,7 +45,7 @@ Gem::PackageTask.new(gemspec) do |pkg|
|
|
|
31
45
|
pkg.need_zip = false
|
|
32
46
|
end
|
|
33
47
|
|
|
34
|
-
task :compile
|
|
48
|
+
task :compile
|
|
35
49
|
|
|
36
50
|
task :build => [:clean, :compile]
|
|
37
51
|
|
|
@@ -41,71 +55,50 @@ Dir["tasks/*.rake"].sort.each { |f| load f }
|
|
|
41
55
|
|
|
42
56
|
Rake::ExtensionTask.new('tiny_tds', gemspec) do |ext|
|
|
43
57
|
ext.lib_dir = 'lib/tiny_tds'
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
ext.cross_platform = []
|
|
51
|
-
ext.cross_config_options << "--disable-lookup"
|
|
52
|
-
config_opts = {}
|
|
58
|
+
ext.cross_compile = true
|
|
59
|
+
ext.cross_platform = ['x86-mingw32', 'x64-mingw32']
|
|
60
|
+
ext.cross_config_options += %w[ --disable-lookup --enable-cross-build ]
|
|
61
|
+
|
|
62
|
+
# Add dependent DLLs to the cross gems
|
|
63
|
+
ext.cross_compiling do |spec|
|
|
53
64
|
platform_host_map = {
|
|
54
|
-
'x86-mingw32' => '
|
|
65
|
+
'x86-mingw32' => 'i686-w64-mingw32',
|
|
55
66
|
'x64-mingw32' => 'x86_64-w64-mingw32'
|
|
56
67
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
68
|
+
|
|
69
|
+
gemplat = spec.platform.to_s
|
|
70
|
+
host = platform_host_map[gemplat]
|
|
71
|
+
|
|
72
|
+
dlls = [
|
|
73
|
+
"libeay32-1.0.2d-#{host}.dll",
|
|
74
|
+
"ssleay32-1.0.2d-#{host}.dll",
|
|
75
|
+
"libiconv-2.dll",
|
|
76
|
+
"libsybdb-5.dll",
|
|
77
|
+
]
|
|
78
|
+
|
|
79
|
+
# We don't need the sources in a fat binary gem
|
|
80
|
+
spec.files = spec.files.reject{|f| f=~/^ports\/archives/ }
|
|
81
|
+
spec.files += dlls.map{|dll| "ports/#{host}/bin/#{File.basename(dll)}" }
|
|
82
|
+
|
|
83
|
+
dlls.each do |dll|
|
|
84
|
+
file "ports/#{host}/bin/#{dll}" do |t|
|
|
85
|
+
sh "x86_64-w64-mingw32-strip", t.name
|
|
86
|
+
end
|
|
73
87
|
end
|
|
74
|
-
ext.cross_config_options << config_opts
|
|
75
88
|
end
|
|
76
|
-
end
|
|
77
89
|
|
|
78
|
-
desc "Checks out rake-compiler-dev-box and sets up the cross-compiling box. This can take a long time."
|
|
79
|
-
task 'cross-compile:setup' do
|
|
80
|
-
# Make sure we have the command-line programs we need
|
|
81
|
-
sh 'git', '--version'
|
|
82
|
-
sh 'vagrant', '-v'
|
|
83
|
-
if Dir.exists? 'rake-compiler-dev-box'
|
|
84
|
-
Dir.chdir 'rake-compiler-dev-box'
|
|
85
|
-
else
|
|
86
|
-
sh 'git', 'clone', 'https://github.com/tjschuck/rake-compiler-dev-box.git'
|
|
87
|
-
Dir.chdir 'rake-compiler-dev-box'
|
|
88
|
-
sh 'patch -p1 < ../compile/rake-compiler-dev-box.patch'
|
|
89
|
-
end
|
|
90
|
-
sh 'vagrant', 'up'
|
|
91
90
|
end
|
|
92
91
|
|
|
93
|
-
|
|
94
|
-
task
|
|
95
|
-
|
|
96
|
-
if not Dir.exists?(build_dir)
|
|
97
|
-
Dir.mkdir build_dir
|
|
98
|
-
end
|
|
99
|
-
# Copy the current version of tiny_tds into the box directory
|
|
100
|
-
Dir.entries('./').each do |entry|
|
|
101
|
-
next if ['.', '..', 'rake-compiler-dev-box'].include?(entry)
|
|
102
|
-
cp_r entry, build_dir, :remove_destination => true
|
|
103
|
-
end
|
|
104
|
-
Dir.chdir './rake-compiler-dev-box'
|
|
105
|
-
sh 'vagrant ssh -c "package_win32_fat_binary tiny_tds"'
|
|
92
|
+
# Bundle the freetds sources to avoid download while gem install
|
|
93
|
+
task gem_build_path(gemspec) do
|
|
94
|
+
add_file_to_gem(gemspec, "ports/archives/freetds-0.91.112.tar.gz")
|
|
106
95
|
end
|
|
107
96
|
|
|
108
|
-
desc "
|
|
109
|
-
task '
|
|
110
|
-
|
|
97
|
+
desc "Build the windows binary gems per rake-compiler-dock"
|
|
98
|
+
task 'gem:windows' do
|
|
99
|
+
require 'rake_compiler_dock'
|
|
100
|
+
RakeCompilerDock.sh <<-EOT
|
|
101
|
+
# bundle install &&
|
|
102
|
+
rake cross native gem RUBY_CC_VERSION=1.9.3:2.0.0:2.1.6:2.2.2
|
|
103
|
+
EOT
|
|
111
104
|
end
|
data/appveyor.yml
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
services:
|
|
2
|
+
- mssql2014
|
|
3
|
+
|
|
4
|
+
install:
|
|
5
|
+
- SET PATH=C:\Ruby%ruby_version%\bin;%PATH%
|
|
6
|
+
- SET PATH=C:\MinGW\msys\1.0\bin;%PATH%
|
|
7
|
+
- SET RAKEOPT=-rdevkit
|
|
8
|
+
- SET TINYTDS_UNIT_DATASERVER=localhost\SQL2014
|
|
9
|
+
- SET TINYTDS_UNIT_DATABASE=master
|
|
10
|
+
- SET TINYTDS_UNIT_USER=sa
|
|
11
|
+
- SET TINYTDS_UNIT_PASS=Password12!
|
|
12
|
+
- ruby --version
|
|
13
|
+
- gem --version
|
|
14
|
+
- bundle install
|
|
15
|
+
- ps: |
|
|
16
|
+
[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | Out-Null
|
|
17
|
+
[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.SqlWmiManagement") | Out-Null
|
|
18
|
+
|
|
19
|
+
$serverName = $env:COMPUTERNAME
|
|
20
|
+
$instanceName = 'SQL2014'
|
|
21
|
+
$smo = 'Microsoft.SqlServer.Management.Smo.'
|
|
22
|
+
$wmi = new-object ($smo + 'Wmi.ManagedComputer')
|
|
23
|
+
|
|
24
|
+
# Enable TCP/IP
|
|
25
|
+
$uri = "ManagedComputer[@Name='$serverName']/ServerInstance[@Name='$instanceName']/ServerProtocol[@Name='Tcp']"
|
|
26
|
+
$Tcp = $wmi.GetSmoObject($uri)
|
|
27
|
+
$Tcp.IsEnabled = $true
|
|
28
|
+
$TCP.alter()
|
|
29
|
+
|
|
30
|
+
# Start services
|
|
31
|
+
Set-Service SQLBrowser -StartupType Manual
|
|
32
|
+
Start-Service SQLBrowser
|
|
33
|
+
Start-Service "MSSQL`$$instanceName"
|
|
34
|
+
|
|
35
|
+
build: off
|
|
36
|
+
|
|
37
|
+
test_script:
|
|
38
|
+
- bundle exec rake
|
|
39
|
+
|
|
40
|
+
environment:
|
|
41
|
+
matrix:
|
|
42
|
+
- ruby_version: "193"
|
|
43
|
+
#- ruby_version: "200"
|
|
44
|
+
#- ruby_version: "200-x64"
|
|
45
|
+
#- ruby_version: "21"
|
|
46
|
+
#- ruby_version: "21-x64"
|
|
47
|
+
#- ruby_version: "22"
|
|
48
|
+
- ruby_version: "22-x64"
|
data/ext/tiny_tds/client.c
CHANGED
|
@@ -233,7 +233,7 @@ static VALUE rb_tinytds_execute(VALUE self, VALUE sql) {
|
|
|
233
233
|
GET_CLIENT_WRAPPER(self);
|
|
234
234
|
rb_tinytds_client_reset_userdata(cwrap->userdata);
|
|
235
235
|
REQUIRE_OPEN_CLIENT(cwrap);
|
|
236
|
-
dbcmd(cwrap->client,
|
|
236
|
+
dbcmd(cwrap->client, StringValueCStr(sql));
|
|
237
237
|
if (dbsqlsend(cwrap->client) == FAIL) {
|
|
238
238
|
rb_warn("TinyTds: dbsqlsend() returned FAIL.\n");
|
|
239
239
|
return Qfalse;
|
|
@@ -316,25 +316,25 @@ static VALUE rb_tinytds_connect(VALUE self, VALUE opts) {
|
|
|
316
316
|
if (!NIL_P(version))
|
|
317
317
|
dbsetlversion(cwrap->login, NUM2INT(version));
|
|
318
318
|
if (!NIL_P(user))
|
|
319
|
-
dbsetluser(cwrap->login,
|
|
319
|
+
dbsetluser(cwrap->login, StringValueCStr(user));
|
|
320
320
|
if (!NIL_P(pass))
|
|
321
|
-
dbsetlpwd(cwrap->login,
|
|
321
|
+
dbsetlpwd(cwrap->login, StringValueCStr(pass));
|
|
322
322
|
if (!NIL_P(app))
|
|
323
|
-
dbsetlapp(cwrap->login,
|
|
323
|
+
dbsetlapp(cwrap->login, StringValueCStr(app));
|
|
324
324
|
if (!NIL_P(ltimeout))
|
|
325
325
|
dbsetlogintime(NUM2INT(ltimeout));
|
|
326
326
|
if (!NIL_P(timeout))
|
|
327
327
|
dbsettime(NUM2INT(timeout));
|
|
328
328
|
if (!NIL_P(charset))
|
|
329
|
-
DBSETLCHARSET(cwrap->login,
|
|
329
|
+
DBSETLCHARSET(cwrap->login, StringValueCStr(charset));
|
|
330
330
|
if (!NIL_P(database) && (azure == Qtrue)) {
|
|
331
331
|
#ifdef DBSETLDBNAME
|
|
332
|
-
DBSETLDBNAME(cwrap->login,
|
|
332
|
+
DBSETLDBNAME(cwrap->login, StringValueCStr(database));
|
|
333
333
|
#else
|
|
334
334
|
rb_warn("TinyTds: Azure connections not supported in this version of FreeTDS.\n");
|
|
335
335
|
#endif
|
|
336
336
|
}
|
|
337
|
-
cwrap->client = dbopen(cwrap->login,
|
|
337
|
+
cwrap->client = dbopen(cwrap->login, StringValueCStr(dataserver));
|
|
338
338
|
if (cwrap->client) {
|
|
339
339
|
cwrap->closed = 0;
|
|
340
340
|
cwrap->charset = charset;
|
|
@@ -343,10 +343,10 @@ static VALUE rb_tinytds_connect(VALUE self, VALUE opts) {
|
|
|
343
343
|
dbsetuserdata(cwrap->client, (BYTE*)cwrap->userdata);
|
|
344
344
|
cwrap->userdata->closed = 0;
|
|
345
345
|
if (!NIL_P(database) && (azure != Qtrue)) {
|
|
346
|
-
dbuse(cwrap->client,
|
|
346
|
+
dbuse(cwrap->client, StringValueCStr(database));
|
|
347
347
|
}
|
|
348
348
|
VALUE transposed_encoding = rb_funcall(cTinyTdsClient, intern_transpose_iconv_encoding, 1, charset);
|
|
349
|
-
cwrap->encoding = rb_enc_find(
|
|
349
|
+
cwrap->encoding = rb_enc_find(StringValueCStr(transposed_encoding));
|
|
350
350
|
if (dbtds(cwrap->client) <= 7) {
|
|
351
351
|
cwrap->identity_insert_sql = "SELECT CAST(@@IDENTITY AS bigint) AS Ident";
|
|
352
352
|
} else {
|
data/ext/tiny_tds/extconf.rb
CHANGED
|
@@ -3,10 +3,54 @@ ENV['RC_ARCHS'] = '' if RUBY_PLATFORM =~ /darwin/
|
|
|
3
3
|
# :stopdoc:
|
|
4
4
|
|
|
5
5
|
require 'mkmf'
|
|
6
|
+
require 'mini_portile'
|
|
7
|
+
require 'fileutils'
|
|
8
|
+
|
|
9
|
+
# If your using 0.82, you may have to make a conf file to get it to work. For example:
|
|
10
|
+
# $ export FREETDSCONF='/opt/local/etc/freetds/freetds.conf'
|
|
11
|
+
ICONV_VERSION = ENV['TINYTDS_ICONV_VERSION'] || "1.14"
|
|
12
|
+
ICONV_SOURCE_URI = "http://ftp.gnu.org/pub/gnu/libiconv/libiconv-#{ICONV_VERSION}.tar.gz"
|
|
13
|
+
|
|
14
|
+
OPENSSL_VERSION = ENV['TINYTDS_OPENSSL_VERSION'] || '1.0.2d'
|
|
15
|
+
OPENSSL_SOURCE_URI = "http://www.openssl.org/source/openssl-#{OPENSSL_VERSION}.tar.gz"
|
|
16
|
+
|
|
17
|
+
FREETDS_VERSION = ENV['TINYTDS_FREETDS_VERSION'] || "0.91"
|
|
18
|
+
FREETDS_VERSION_INFO = Hash.new { |h,k|
|
|
19
|
+
h[k] = {:files => "ftp://ftp.freetds.org/pub/freetds/stable/freetds-#{k}.tar.gz"}
|
|
20
|
+
}.merge({
|
|
21
|
+
"0.82" => {:files => "ftp://ftp.freetds.org/pub/freetds/old/0.82/freetds-0.82.tar.gz"},
|
|
22
|
+
"0.91" => {:files => "ftp://ftp.freetds.org/pub/freetds/stable/freetds-0.91.112.tar.gz"},
|
|
23
|
+
"current" => {:files => "ftp://ftp.freetds.org/pub/freetds/current/freetds-current.tar.gz"}
|
|
24
|
+
})
|
|
25
|
+
FREETDS_SOURCE_URI = FREETDS_VERSION_INFO[FREETDS_VERSION][:files]
|
|
6
26
|
|
|
7
27
|
# Shamelessly copied from nokogiri
|
|
8
28
|
#
|
|
9
29
|
|
|
30
|
+
def do_help
|
|
31
|
+
print <<HELP
|
|
32
|
+
usage: ruby #{$0} [options]
|
|
33
|
+
|
|
34
|
+
--enable-system-freetds / --disable-system-freetds
|
|
35
|
+
--enable-system-iconv / --disable-system-iconv
|
|
36
|
+
--enable-system-openssl / --disable-system-openssl
|
|
37
|
+
Force use of system or builtin freetds/iconv/openssl library.
|
|
38
|
+
Default is to prefer system libraries and fallback to builtin.
|
|
39
|
+
|
|
40
|
+
--with-freetds-dir=DIR
|
|
41
|
+
Use the freetds library placed under DIR.
|
|
42
|
+
|
|
43
|
+
--enable-lookup
|
|
44
|
+
Search for freetds through all paths in the PATH environment variable.
|
|
45
|
+
|
|
46
|
+
--enable-cross-build
|
|
47
|
+
Do cross-build.
|
|
48
|
+
HELP
|
|
49
|
+
exit! 0
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
do_help if arg_config('--help')
|
|
53
|
+
|
|
10
54
|
FREETDSDIR = ENV['FREETDS_DIR']
|
|
11
55
|
|
|
12
56
|
if FREETDSDIR.nil? || FREETDSDIR.empty?
|
|
@@ -40,6 +84,144 @@ def searchable_paths_with_directories(*directories)
|
|
|
40
84
|
end.flatten.compact
|
|
41
85
|
end
|
|
42
86
|
|
|
87
|
+
class BuildRecipe < MiniPortile
|
|
88
|
+
def initialize(name, version, files)
|
|
89
|
+
super(name, version)
|
|
90
|
+
self.files = files
|
|
91
|
+
self.target = File.expand_path('../../../ports', __FILE__)
|
|
92
|
+
# Prefer host_alias over host in order to use i586-mingw32msvc as
|
|
93
|
+
# correct compiler prefix for cross build, but use host if not set.
|
|
94
|
+
self.host = consolidated_host(RbConfig::CONFIG["host_alias"].empty? ? RbConfig::CONFIG["host"] : RbConfig::CONFIG["host_alias"])
|
|
95
|
+
self.patch_files = Dir[File.join(self.target, "patches", self.name, self.version, "*.diff")].sort
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def consolidated_host(name)
|
|
99
|
+
# For ruby-1.9.3 we use newer mingw-w64 (i686-w64-mingw32) to build the shared libraries
|
|
100
|
+
# and mingw32 (i586-mingw32msvc) to build the extension.
|
|
101
|
+
name.gsub('i586-mingw32msvc', 'i686-w64-mingw32').
|
|
102
|
+
gsub('i686-pc-mingw32', 'i686-w64-mingw32')
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def configure_defaults
|
|
106
|
+
[
|
|
107
|
+
"--host=#{host}", # build for specific target (host)
|
|
108
|
+
"--disable-static",
|
|
109
|
+
"--enable-shared",
|
|
110
|
+
]
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def port_path
|
|
114
|
+
"#{target}/#{host}"
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
# When using rake-compiler-dock on Windows, the underlying Virtualbox shared
|
|
118
|
+
# folders don't support symlinks, but libiconv expects it for a build on
|
|
119
|
+
# Linux. We work around this limitation by using the temp dir for cooking.
|
|
120
|
+
def chdir_for_build
|
|
121
|
+
build_dir = ENV['RCD_HOST_RUBY_PLATFORM'].to_s =~ /mingw|mswin|cygwin/ ? '/tmp' : '.'
|
|
122
|
+
Dir.chdir(build_dir) do
|
|
123
|
+
yield
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def cook_and_activate
|
|
128
|
+
checkpoint = File.join(self.target, "#{self.name}-#{self.version}-#{self.host}.installed")
|
|
129
|
+
unless File.exist?(checkpoint)
|
|
130
|
+
chdir_for_build do
|
|
131
|
+
self.cook
|
|
132
|
+
end
|
|
133
|
+
FileUtils.touch checkpoint
|
|
134
|
+
end
|
|
135
|
+
self.activate
|
|
136
|
+
self
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def define_libssl_recipe(host)
|
|
141
|
+
BuildRecipe.new("openssl", OPENSSL_VERSION, [OPENSSL_SOURCE_URI]).tap do |recipe|
|
|
142
|
+
class << recipe
|
|
143
|
+
def extract_file(file, target)
|
|
144
|
+
filename = File.basename(file)
|
|
145
|
+
FileUtils.mkdir_p target
|
|
146
|
+
|
|
147
|
+
message "Extracting #{filename} into #{target}... "
|
|
148
|
+
result = `#{tar_exe} #{tar_compression_switch(filename)}xf "#{file}" -C "#{target}" 2>&1`
|
|
149
|
+
if $?.success?
|
|
150
|
+
output "OK"
|
|
151
|
+
else
|
|
152
|
+
# tar on windows returns error exit code, because it can not extract symlinks
|
|
153
|
+
output "ERROR (ignored)"
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def configure
|
|
158
|
+
config = if host=~/mingw/
|
|
159
|
+
host=~/x86_64/ ? 'mingw64' : 'mingw'
|
|
160
|
+
end
|
|
161
|
+
args = [ "CFLAGS=-DDSO_WIN32",
|
|
162
|
+
"./Configure",
|
|
163
|
+
"no-shared",
|
|
164
|
+
configure_prefix,
|
|
165
|
+
config,
|
|
166
|
+
]
|
|
167
|
+
args.unshift("CROSS_COMPILE=#{host}-") if enable_config("cross-build")
|
|
168
|
+
|
|
169
|
+
execute "configure", "sh -c \"#{args.join(" ")}\""
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
def compile
|
|
173
|
+
super
|
|
174
|
+
# OpenSSL DLLs are called "libeay32.dll" and "ssleay32.dll" per default,
|
|
175
|
+
# regardless to the version. This is best suited to meet the Windows DLL hell.
|
|
176
|
+
# To avoid any conflicts we do a static build and build DLLs afterwards,
|
|
177
|
+
# with our own naming scheme.
|
|
178
|
+
execute "mkdef-libeay32", "(perl util/mkdef.pl 32 libeay >libeay32.def)"
|
|
179
|
+
execute "mkdef-ssleay32", "(perl util/mkdef.pl 32 ssleay >ssleay32.def)"
|
|
180
|
+
dllwrap = consolidated_host(RbConfig::CONFIG["DLLWRAP"])
|
|
181
|
+
execute "dllwrap-libeay32", "#{dllwrap} --dllname libeay32-#{version}-#{host}.dll --output-lib libcrypto.dll.a --def libeay32.def libcrypto.a -lwsock32 -lgdi32 -lcrypt32"
|
|
182
|
+
execute "dllwrap-ssleay32", "#{dllwrap} --dllname ssleay32-#{version}-#{host}.dll --output-lib libssl.dll.a --def ssleay32.def libssl.a libcrypto.dll.a"
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
def install
|
|
186
|
+
super
|
|
187
|
+
FileUtils.cp "#{work_path}/libeay32-#{version}-#{host}.dll", "#{path}/bin/"
|
|
188
|
+
FileUtils.cp "#{work_path}/ssleay32-#{version}-#{host}.dll", "#{path}/bin/"
|
|
189
|
+
FileUtils.cp "#{work_path}/libcrypto.dll.a", "#{path}/lib/"
|
|
190
|
+
FileUtils.cp "#{work_path}/libssl.dll.a", "#{path}/lib/"
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
def define_libiconv_recipe(host)
|
|
197
|
+
BuildRecipe.new("libiconv", ICONV_VERSION, [ICONV_SOURCE_URI])
|
|
198
|
+
.tap do |recipe|
|
|
199
|
+
# always produce position independent code
|
|
200
|
+
recipe.configure_options << "CFLAGS=-fPIC"
|
|
201
|
+
end
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
def define_freetds_recipe(host, libiconv, libssl)
|
|
205
|
+
BuildRecipe.new("freetds", FREETDS_VERSION, [FREETDS_SOURCE_URI])
|
|
206
|
+
.tap do |recipe|
|
|
207
|
+
with_tdsver = FREETDS_VERSION =~ /0\.8/ ? "--with-tdsver=8.0" : "--with-tdsver=7.1"
|
|
208
|
+
for_windows = recipe.host =~ /mswin|mingw/i
|
|
209
|
+
recipe.configure_options << '--with-pic'
|
|
210
|
+
recipe.configure_options << "--with-libiconv-prefix=#{libiconv.path}" if libiconv
|
|
211
|
+
recipe.configure_options << "--with-openssl=#{libssl.path}" if libssl
|
|
212
|
+
recipe.configure_options << '--sysconfdir=C:/Sites' if for_windows
|
|
213
|
+
recipe.configure_options << '--enable-sspi' if for_windows
|
|
214
|
+
recipe.configure_options << "--disable-odbc"
|
|
215
|
+
recipe.configure_options << with_tdsver
|
|
216
|
+
if libiconv
|
|
217
|
+
# For some reason freetds doesn't honor --with-libiconv-prefix
|
|
218
|
+
# so we have do add it by hand:
|
|
219
|
+
recipe.configure_options << "\"CFLAGS=-I#{libiconv.path}/include\""
|
|
220
|
+
recipe.configure_options << "\"LDFLAGS=-L#{libiconv.path}/lib -liconv\""
|
|
221
|
+
end
|
|
222
|
+
end
|
|
223
|
+
end
|
|
224
|
+
|
|
43
225
|
if RbConfig::CONFIG['target_os'] =~ /mswin32|mingw32/
|
|
44
226
|
lib_prefix = 'lib' unless RbConfig::CONFIG['target_os'] =~ /mingw32/
|
|
45
227
|
# There's no default include/lib dir on Windows. Let's just add the Ruby ones
|
|
@@ -77,10 +259,8 @@ FREETDS_LIB_DIRS = (searchable_paths_with_directories(['lib'],['lib','freetds'])
|
|
|
77
259
|
# lookup over searchable paths is great for native compilation, however, when
|
|
78
260
|
# cross compiling we need to specify our own paths.
|
|
79
261
|
if enable_config("lookup", true)
|
|
80
|
-
dir_config('iconv', FREETDS_HEADER_DIRS, FREETDS_LIB_DIRS)
|
|
81
262
|
dir_config('freetds', FREETDS_HEADER_DIRS, FREETDS_LIB_DIRS)
|
|
82
263
|
else
|
|
83
|
-
dir_config('iconv')
|
|
84
264
|
dir_config('freetds')
|
|
85
265
|
|
|
86
266
|
# remove LDFLAGS
|
|
@@ -91,11 +271,28 @@ def asplode(lib)
|
|
|
91
271
|
abort "-----\n#{lib} is missing.\n-----"
|
|
92
272
|
end
|
|
93
273
|
|
|
94
|
-
|
|
95
|
-
|
|
274
|
+
def freetds_usable?(lib_prefix)
|
|
275
|
+
have_header('sybfront.h') && have_header('sybdb.h') &&
|
|
276
|
+
find_library("#{lib_prefix}sybdb", 'tdsdbopen') &&
|
|
277
|
+
find_library("#{lib_prefix}ct", 'ct_bind')
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
# We use freetds, when available already, and fallback to compilation of ports
|
|
281
|
+
system_freetds = enable_config('system-freetds', ENV['TINYTDS_SKIP_PORTS'] || freetds_usable?(lib_prefix))
|
|
282
|
+
|
|
283
|
+
# We expect to have iconv and OpenSSL available on non-Windows systems
|
|
284
|
+
host = RbConfig::CONFIG["host"]
|
|
285
|
+
system_iconv = enable_config('system-iconv', host =~ /mingw|mswin/ ? false : true)
|
|
286
|
+
system_openssl = enable_config('system-openssl', host =~ /mingw|mswin/ ? false : true )
|
|
287
|
+
|
|
288
|
+
unless system_freetds
|
|
289
|
+
libssl = define_libssl_recipe(host).cook_and_activate unless system_openssl
|
|
290
|
+
libiconv = define_libiconv_recipe(host).cook_and_activate unless system_iconv
|
|
291
|
+
freetds = define_freetds_recipe(host, libiconv, libssl).cook_and_activate
|
|
292
|
+
dir_config('freetds', freetds.path + "/include", freetds.path + "/lib")
|
|
293
|
+
end
|
|
96
294
|
|
|
97
|
-
asplode 'freetds' unless
|
|
98
|
-
asplode 'freetds' unless find_library("#{lib_prefix}ct", 'ct_bind')
|
|
295
|
+
asplode 'freetds' unless freetds_usable?(lib_prefix)
|
|
99
296
|
|
|
100
297
|
create_makefile('tiny_tds/tiny_tds')
|
|
101
298
|
|
data/lib/tiny_tds.rb
CHANGED
|
@@ -9,11 +9,30 @@ require 'tiny_tds/client'
|
|
|
9
9
|
require 'tiny_tds/result'
|
|
10
10
|
|
|
11
11
|
# Support multiple ruby versions, fat binaries under Windows.
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
if RUBY_PLATFORM =~ /mingw|mswin/ && RUBY_VERSION =~ /(\d+.\d+)/
|
|
13
|
+
ver = $1
|
|
14
|
+
# Set the PATH environment variable, so that the DLLs can be found.
|
|
15
|
+
old_path = ENV['PATH']
|
|
16
|
+
begin
|
|
17
|
+
# Do the same host consolidation as in extconf.rb
|
|
18
|
+
ports_dir = RbConfig::CONFIG["host"].gsub('i586-mingw32msvc', 'i686-w64-mingw32').
|
|
19
|
+
gsub('i686-pc-mingw32', 'i686-w64-mingw32')
|
|
20
|
+
ENV['PATH'] = "#{File.expand_path("../../ports/#{ports_dir}/bin", __FILE__)};#{old_path}"
|
|
21
|
+
require "tiny_tds/#{ver}/tiny_tds"
|
|
22
|
+
rescue LoadError
|
|
23
|
+
require 'tiny_tds/tiny_tds'
|
|
24
|
+
ensure
|
|
25
|
+
ENV['PATH'] = old_path
|
|
26
|
+
end
|
|
27
|
+
else
|
|
28
|
+
# Load dependent shared libraries into the process, so that they are already present,
|
|
29
|
+
# when tiny_tds.so is loaded. This ensures, that shared libraries are loaded even when
|
|
30
|
+
# the path is different between build and run time (e.g. Heroku).
|
|
31
|
+
ports_libs = File.expand_path("../../ports/#{RbConfig::CONFIG["host"]}/lib/*.so", __FILE__)
|
|
32
|
+
Dir[ports_libs].each do |lib|
|
|
33
|
+
require "fiddle"
|
|
34
|
+
Fiddle.dlopen(lib)
|
|
35
|
+
end
|
|
36
|
+
|
|
16
37
|
require 'tiny_tds/tiny_tds'
|
|
17
38
|
end
|
|
18
|
-
|
|
19
|
-
|
data/lib/tiny_tds/version.rb
CHANGED
data/test/test_helper.rb
CHANGED
|
@@ -78,7 +78,7 @@ module TinyTds
|
|
|
78
78
|
:tds_version => ENV['TINYTDS_UNIT_VERSION'],
|
|
79
79
|
:username => username,
|
|
80
80
|
:password => password,
|
|
81
|
-
:database => 'tinytdstest',
|
|
81
|
+
:database => ENV['TINYTDS_UNIT_DATABASE'] || 'tinytdstest',
|
|
82
82
|
:appname => 'TinyTds Dev',
|
|
83
83
|
:login_timeout => 5,
|
|
84
84
|
:timeout => connection_timeout,
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: tiny_tds
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.6.3.
|
|
4
|
+
version: 0.6.3.rc2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ken Collins
|
|
@@ -10,8 +10,22 @@ authors:
|
|
|
10
10
|
autorequire:
|
|
11
11
|
bindir: bin
|
|
12
12
|
cert_chain: []
|
|
13
|
-
date: 2015-
|
|
13
|
+
date: 2015-07-31 00:00:00.000000000 Z
|
|
14
14
|
dependencies:
|
|
15
|
+
- !ruby/object:Gem::Dependency
|
|
16
|
+
name: mini_portile
|
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
|
18
|
+
requirements:
|
|
19
|
+
- - '='
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
21
|
+
version: 0.6.2
|
|
22
|
+
type: :runtime
|
|
23
|
+
prerelease: false
|
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
+
requirements:
|
|
26
|
+
- - '='
|
|
27
|
+
- !ruby/object:Gem::Version
|
|
28
|
+
version: 0.6.2
|
|
15
29
|
- !ruby/object:Gem::Dependency
|
|
16
30
|
name: rake
|
|
17
31
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -27,33 +41,33 @@ dependencies:
|
|
|
27
41
|
- !ruby/object:Gem::Version
|
|
28
42
|
version: '10.4'
|
|
29
43
|
- !ruby/object:Gem::Dependency
|
|
30
|
-
name:
|
|
44
|
+
name: rake-compiler
|
|
31
45
|
requirement: !ruby/object:Gem::Requirement
|
|
32
46
|
requirements:
|
|
33
47
|
- - '='
|
|
34
48
|
- !ruby/object:Gem::Version
|
|
35
|
-
version: 0.
|
|
49
|
+
version: 0.9.5
|
|
36
50
|
type: :development
|
|
37
51
|
prerelease: false
|
|
38
52
|
version_requirements: !ruby/object:Gem::Requirement
|
|
39
53
|
requirements:
|
|
40
54
|
- - '='
|
|
41
55
|
- !ruby/object:Gem::Version
|
|
42
|
-
version: 0.
|
|
56
|
+
version: 0.9.5
|
|
43
57
|
- !ruby/object:Gem::Dependency
|
|
44
|
-
name: rake-compiler
|
|
58
|
+
name: rake-compiler-dock
|
|
45
59
|
requirement: !ruby/object:Gem::Requirement
|
|
46
60
|
requirements:
|
|
47
|
-
- -
|
|
61
|
+
- - "~>"
|
|
48
62
|
- !ruby/object:Gem::Version
|
|
49
|
-
version: 0.
|
|
63
|
+
version: 0.4.3
|
|
50
64
|
type: :development
|
|
51
65
|
prerelease: false
|
|
52
66
|
version_requirements: !ruby/object:Gem::Requirement
|
|
53
67
|
requirements:
|
|
54
|
-
- -
|
|
68
|
+
- - "~>"
|
|
55
69
|
- !ruby/object:Gem::Version
|
|
56
|
-
version: 0.
|
|
70
|
+
version: 0.4.3
|
|
57
71
|
- !ruby/object:Gem::Dependency
|
|
58
72
|
name: minitest
|
|
59
73
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -94,13 +108,12 @@ extra_rdoc_files: []
|
|
|
94
108
|
files:
|
|
95
109
|
- ".gitignore"
|
|
96
110
|
- CHANGELOG
|
|
111
|
+
- CODE_OF_CONDUCT.md
|
|
97
112
|
- Gemfile
|
|
98
113
|
- MIT-LICENSE
|
|
99
114
|
- README.md
|
|
100
115
|
- Rakefile
|
|
101
|
-
-
|
|
102
|
-
- ext/patch/Makefile.in.diff
|
|
103
|
-
- ext/patch/dblib-30-char-username.diff
|
|
116
|
+
- appveyor.yml
|
|
104
117
|
- ext/tiny_tds/client.c
|
|
105
118
|
- ext/tiny_tds/client.h
|
|
106
119
|
- ext/tiny_tds/extconf.rb
|
|
@@ -113,7 +126,9 @@ files:
|
|
|
113
126
|
- lib/tiny_tds/error.rb
|
|
114
127
|
- lib/tiny_tds/result.rb
|
|
115
128
|
- lib/tiny_tds/version.rb
|
|
116
|
-
-
|
|
129
|
+
- ports/archives/freetds-0.91.112.tar.gz
|
|
130
|
+
- ports/patches/freetds/0.91/Makefile.in.diff
|
|
131
|
+
- ports/patches/freetds/0.91/dblib-30-char-username.diff
|
|
117
132
|
- test/benchmark/query.rb
|
|
118
133
|
- test/benchmark/query_odbc.rb
|
|
119
134
|
- test/benchmark/query_tinytds.rb
|
|
@@ -150,23 +165,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
150
165
|
version: 1.3.1
|
|
151
166
|
requirements: []
|
|
152
167
|
rubyforge_project:
|
|
153
|
-
rubygems_version: 2.4.
|
|
168
|
+
rubygems_version: 2.4.8
|
|
154
169
|
signing_key:
|
|
155
170
|
specification_version: 4
|
|
156
171
|
summary: TinyTDS - A modern, simple and fast FreeTDS library for Ruby using DB-Library.
|
|
157
|
-
test_files:
|
|
158
|
-
- test/benchmark/query.rb
|
|
159
|
-
- test/benchmark/query_odbc.rb
|
|
160
|
-
- test/benchmark/query_tinytds.rb
|
|
161
|
-
- test/client_test.rb
|
|
162
|
-
- test/result_test.rb
|
|
163
|
-
- test/schema/1px.gif
|
|
164
|
-
- test/schema/sqlserver_2000.sql
|
|
165
|
-
- test/schema/sqlserver_2005.sql
|
|
166
|
-
- test/schema/sqlserver_2008.sql
|
|
167
|
-
- test/schema/sqlserver_2014.sql
|
|
168
|
-
- test/schema/sqlserver_azure.sql
|
|
169
|
-
- test/schema/sybase_ase.sql
|
|
170
|
-
- test/schema_test.rb
|
|
171
|
-
- test/test_helper.rb
|
|
172
|
-
- test/thread_test.rb
|
|
172
|
+
test_files: []
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
diff --git a/bin/package_win32_fat_binary b/bin/package_win32_fat_binary
|
|
2
|
-
index b336eb7..8ef4f98 100755
|
|
3
|
-
--- a/bin/package_win32_fat_binary
|
|
4
|
-
+++ b/bin/package_win32_fat_binary
|
|
5
|
-
@@ -12,9 +12,8 @@ cd '/vagrant'
|
|
6
|
-
# passed in path of gem to be cross-compiled
|
|
7
|
-
cd $1
|
|
8
|
-
|
|
9
|
-
-# need to use 1.8.7 for fat-binaries (1.9.3 can't cross-build 1.8.7)
|
|
10
|
-
-rvm use 1.8.7
|
|
11
|
-
+rvm use 1.9.3
|
|
12
|
-
bundle install
|
|
13
|
-
|
|
14
|
-
bundle exec rake clean
|
|
15
|
-
-bundle exec rake cross native gem RUBY_CC_VERSION=1.8.7:1.9.3:2.0.0
|
|
16
|
-
+bundle exec rake cross native gem RUBY_CC_VERSION=1.9.3:2.0.0:2.1.1
|
|
17
|
-
diff --git a/bin/prepare_xrubies b/bin/prepare_xrubies
|
|
18
|
-
index 0e2043c..bd1d3c8 100755
|
|
19
|
-
--- a/bin/prepare_xrubies
|
|
20
|
-
+++ b/bin/prepare_xrubies
|
|
21
|
-
@@ -18,10 +18,6 @@ rvm all do gem install rake-compiler -v "~> 0.9.2"
|
|
22
|
-
# Use just one CPU for building 1.8.7 and 1.9.3
|
|
23
|
-
export MAKE="make"
|
|
24
|
-
|
|
25
|
-
-# Build 1.8.7 with mingw32 compiler (GCC 4.2)
|
|
26
|
-
-rvm use 1.8.7
|
|
27
|
-
-rake-compiler cross-ruby VERSION=1.8.7-p374 HOST=i586-mingw32msvc
|
|
28
|
-
-
|
|
29
|
-
# Build 1.9.3 using 1.9.3 as base
|
|
30
|
-
rvm use 1.9.3
|
|
31
|
-
rake-compiler cross-ruby VERSION=1.9.3-p545 HOST=i586-mingw32msvc
|
data/ext/patch/Makefile.in.diff
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
--- a/Makefile.in 2011-08-17 18:57:36.000000000 -0700
|
|
2
|
-
+++ b/Makefile.in 2014-05-02 10:27:01.275813000 -0700
|
|
3
|
-
@@ -772,13 +772,6 @@
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
install-data-local:
|
|
7
|
-
- $(mkinstalldirs) $(ETC)
|
|
8
|
-
- if test ! -f $(ETC)/freetds.conf; then \
|
|
9
|
-
- $(INSTALL_DATA) $(srcdir)/freetds.conf $(ETC)/freetds.conf; \
|
|
10
|
-
- fi
|
|
11
|
-
- if test ! -f $(ETC)/locales.conf; then \
|
|
12
|
-
- $(INSTALL_DATA) $(srcdir)/locales.conf $(ETC)/locales.conf; \
|
|
13
|
-
- fi
|
|
14
|
-
|
|
15
|
-
clean-local:
|
|
16
|
-
find . \( -name \*.test_output -o -name \*.bb -o -name \*.bbg -o -name \*.da -o -name \*.gc\* \) -exec rm -f {} \;
|
|
17
|
-
--- a/src/pool/Makefile.in 2011-08-17 18:57:36.000000000 -0700
|
|
18
|
-
+++ b/src/pool/Makefile.in 2014-05-02 10:32:39.628347600 -0700
|
|
19
|
-
@@ -574,10 +574,6 @@
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
install-data-local:
|
|
23
|
-
- $(mkinstalldirs) $(ETC)
|
|
24
|
-
- if test ! -f $(ETC)/pool.conf; then \
|
|
25
|
-
- $(INSTALL_DATA) $(srcdir)/pool.conf $(ETC)/pool.conf; \
|
|
26
|
-
- fi
|
|
27
|
-
|
|
28
|
-
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
|
29
|
-
# Otherwise a system limit (for SysV at least) may be exceeded.
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
--- a/src/dblib/dblib.c
|
|
2
|
-
+++ b/src/dblib/dblib.c
|
|
3
|
-
@@ -765,7 +765,7 @@ dbsetlname(LOGINREC * login, const char *value, int which)
|
|
4
|
-
return FAIL;
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
- if (TDS_MAX_LOGIN_STR_SZ < strlen(value)) {
|
|
8
|
-
+ if (login->tds_login->tds_version < 0x700 && TDS_MAX_LOGIN_STR_SZ < strlen(value)) {
|
|
9
|
-
dbperror(NULL, SYBENTLL, 0);
|
|
10
|
-
return FAIL;
|
|
11
|
-
}
|
data/tasks/ports.rake
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
require 'mini_portile'
|
|
2
|
-
|
|
3
|
-
# If your using 0.82, you may have to make a conf file to get it to work. For example:
|
|
4
|
-
# $ export FREETDSCONF='/opt/local/etc/freetds/freetds.conf'
|
|
5
|
-
ICONV_VERSION = "1.14"
|
|
6
|
-
FREETDS_VERSION = ENV['TINYTDS_FREETDS_VERSION'] || "0.91"
|
|
7
|
-
FREETDS_VERSION_INFO = Hash.new { |h,k|
|
|
8
|
-
h[k] = {:files => "ftp://ftp.freetds.org/pub/freetds/stable/freetds-#{k}.tar.gz"}
|
|
9
|
-
}.merge({
|
|
10
|
-
"0.82" => {:files => "ftp://ftp.freetds.org/pub/freetds/old/0.82/freetds-0.82.tar.gz"},
|
|
11
|
-
"0.91" => {:files => "ftp://ftp.freetds.org/pub/freetds/stable/freetds-0.91.112.tar.gz"},
|
|
12
|
-
"current" => {:files => "ftp://ftp.freetds.org/pub/freetds/current/freetds-current.tgz"}
|
|
13
|
-
})
|
|
14
|
-
|
|
15
|
-
# all ports depends on this directory to exist
|
|
16
|
-
directory "ports"
|
|
17
|
-
|
|
18
|
-
def define_libiconv_recipe(platform, host)
|
|
19
|
-
recipe = MiniPortile.new "libiconv", ICONV_VERSION
|
|
20
|
-
recipe.files << "http://ftp.gnu.org/pub/gnu/libiconv/libiconv-#{ICONV_VERSION}.tar.gz"
|
|
21
|
-
recipe.host = host
|
|
22
|
-
desc "Compile libiconv for '#{platform}' (#{host})"
|
|
23
|
-
task "ports:libiconv:#{platform}" => ["ports"] do
|
|
24
|
-
checkpoint = "ports/.#{recipe.name}-#{recipe.version}-#{recipe.host}.installed"
|
|
25
|
-
unless File.exist?(checkpoint)
|
|
26
|
-
# always produce position independent code
|
|
27
|
-
recipe.configure_options << "CFLAGS='-fPIC'"
|
|
28
|
-
recipe.cook
|
|
29
|
-
touch checkpoint
|
|
30
|
-
recipe.activate
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
recipe
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def define_freetds_recipe(platform, host, libiconv)
|
|
37
|
-
recipe = MiniPortile.new "freetds", FREETDS_VERSION
|
|
38
|
-
recipe.files << FREETDS_VERSION_INFO[FREETDS_VERSION][:files]
|
|
39
|
-
recipe.host = host
|
|
40
|
-
if recipe.respond_to?(:patch_files) && FREETDS_VERSION == "0.91"
|
|
41
|
-
recipe.patch_files << File.expand_path(File.join('..', '..', 'ext', 'patch', 'dblib-30-char-username.diff'), __FILE__)
|
|
42
|
-
unless RUBY_PLATFORM =~ /mswin|mingw/
|
|
43
|
-
recipe.patch_files << File.expand_path(File.join('..', '..', 'ext', 'patch', 'Makefile.in.diff'), __FILE__)
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
desc "Compile freetds for '#{platform}' (#{host})"
|
|
47
|
-
task "ports:freetds:#{platform}" => ["ports", "ports:libiconv:#{platform}"] do
|
|
48
|
-
checkpoint = "ports/.#{recipe.name}-#{recipe.version}-#{recipe.host}.installed"
|
|
49
|
-
unless File.exist?(checkpoint)
|
|
50
|
-
with_tdsver = ENV['TINYTDS_FREETDS_VERSION'] =~ /0\.8/ ? "--with-tdsver=8.0" : "--with-tdsver=7.1"
|
|
51
|
-
for_windows = recipe.host =~ /mswin|mingw/i
|
|
52
|
-
recipe.configure_options << '--with-pic'
|
|
53
|
-
recipe.configure_options << "--with-libiconv-prefix=#{libiconv.path}"
|
|
54
|
-
recipe.configure_options << '--sysconfdir="C:/Sites"' if for_windows
|
|
55
|
-
recipe.configure_options << '--enable-sspi' if for_windows
|
|
56
|
-
recipe.configure_options << "--disable-odbc"
|
|
57
|
-
recipe.configure_options << with_tdsver
|
|
58
|
-
recipe.cook
|
|
59
|
-
touch checkpoint
|
|
60
|
-
recipe.activate
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
recipe
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
# native compilation of ports
|
|
67
|
-
host = RbConfig::CONFIG["host"]
|
|
68
|
-
libiconv = define_libiconv_recipe(RUBY_PLATFORM, host)
|
|
69
|
-
freetds = define_freetds_recipe(RUBY_PLATFORM, host, libiconv)
|
|
70
|
-
|
|
71
|
-
# compile native FreeTDS
|
|
72
|
-
desc "Compile native freetds"
|
|
73
|
-
task "ports:freetds" => ["ports:freetds:#{RUBY_PLATFORM}"]
|