tiny_tds 0.6.3.rc1 → 0.6.3.rc2
Sign up to get free protection for your applications and to get access to all the features.
- 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}"]
|