rails-sqlserver / tiny_tds

TinyTDS - Simple and fast FreeTDS bindings for Ruby using DB-Library.
Other
606 stars 190 forks source link

Install fails when FreeTDS installed via Homebrew #508

Closed bemky closed 8 months ago

bemky commented 2 years ago

Environment

Operating System ProductName: macOS ProductVersion: 11.4 BuildVersion: 20F71

TinyTDS Version and Information

Compile-time settings (established with the "configure" script)
                            Version: freetds v1.2.18
             freetds.conf directory: /opt/homebrew/etc
     MS db-lib source compatibility: no
        Sybase binary compatibility: yes
                      Thread safety: yes
                      iconv library: yes
                        TDS version: 7.3
                              iODBC: no
                           unixodbc: yes
              SSPI "trusted" logins: no
                           Kerberos: yes
                            OpenSSL: yes
                             GnuTLS: no
                               MARS: yes

FreeTDS Version

~  % brew info freetds
freetds: stable 1.2.18 (bottled), HEAD
Libraries to talk to Microsoft SQL Server and Sybase databases
https://www.freetds.org/
/opt/homebrew/Cellar/freetds/1.2.18 (1,259 files, 14.2MB) *
  Poured from bottle on 2021-10-01 at 09:45:12
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/freetds.rb
License: LGPL-2.0-or-later
==> Dependencies
Build: pkg-config ✔
Required: openssl@1.1 ✔, unixodbc ✔
==> Options
--HEAD
    Install HEAD version
==> Analytics
install: 94,301 (30 days), 254,798 (90 days), 908,686 (365 days)
install-on-request: 29,753 (30 days), 63,114 (90 days), 183,600 (365 days)
build-error: 0 (30 days)

Description

When installing gem, I get the following error even though FreeTDS is installed

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /opt/homebrew/lib/ruby/gems/3.0.0/gems/tiny_tds-2.1.5/ext/tiny_tds
/opt/homebrew/opt/ruby/bin/ruby -I /opt/homebrew/Cellar/ruby/3.0.1/lib/ruby/3.0.0 -r ./siteconf20211001-80117-pc99xg.rb extconf.rb
looking for freetds headers in the following directories:
 - /opt/local/include
 - /opt/local/include/freetds
 - /usr/local/include
 - /usr/local/include/freetds
looking for freetds library in the following directories:
 - /opt/local/lib
 - /opt/local/lib/freetds
 - /usr/local/lib
 - /usr/local/lib/freetds
checking for sybfront.h... no
checking for sybdb.h... no
checking for tdsdbopen() in -lsybdb... yes
checking for dbanydatecrack() in -lsybdb... yes
Failed! Do you have FreeTDS 0.95.80 or higher installed?
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

It looks like tiny_tds can't find freetds. FreeTDS is installed via homebrew in the default location where homebrew puts it. When I install gem with the following it installs correctly.

gem install tiny_tds -- --with-freetds-dir=/opt/homebrew/Cellar/freetds/1.2.18

I'm not sure exactly how to fix, but can tiny_tds use $PATH to find freetds?

vkalach commented 2 years ago

gem install tiny_tds -- --with-freetds-include=/opt/homebrew/include --with-freetds-lib=/opt/homebrew/lib

Peter-Oliver commented 1 year ago

@vkalach that got me almost all the way there. I ran the following three commands to fully fix: brew install freetds sudo chown -R $(whoami) /Users/USERNAME/.rbenv/versions/VERSION NO./lib/ruby/gems/* gem install tiny_tds -- --with-freetds-include=/opt/homebrew/include --with-freetds-lib=/opt/homebrew/lib

leedrum commented 1 year ago

@Peter-Oliver same here, I just have to run brew install freetds and then gem install tiny_tds Successfully installed tiny_tds-2.1.5

fa11enangel commented 8 months ago

Check this pull request #531. It'll fix the problem for newer homebrew installations.

It adds the new homebrew path /opt/homebrew to be used for freetds lookup.

andyundso commented 8 months ago

Fix has been merged with #545 (original PR: #531) and was released with 2.1.6. It should no longer be necessary to pass --with-freetds-include or --with-freetds-lib on Macs with Apple Silicon.