Skip to content

Add /opt/homebrew to search path on Apple Silicon #545

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Dec 3, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
105 changes: 91 additions & 14 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -99,8 +99,8 @@ jobs:
- restore_cache:
name: restore ports cache
keys:
- ports-<< parameters.ruby_version >>-{{ checksum ".ports_versions" }}
- ports-<< parameters.ruby_version >>-
- ports-<< parameters.ruby_version >>-{{ arch }}-{{ checksum ".ports_versions" }}
- ports-<< parameters.ruby_version >>-{{ arch }}-

- run:
name: compile ports
Expand All @@ -126,7 +126,7 @@ jobs:
name: save ports cache
paths:
- ./ports
key: ports-<< parameters.ruby_version >>-{{ checksum ".ports_versions" }}
key: ports-<< parameters.ruby_version >>-{{ arch }}-{{ arch }}-{{ checksum ".ports_versions" }}

- store_test_results:
path: test/reports
Expand Down Expand Up @@ -155,9 +155,9 @@ jobs:
- restore_cache:
name: restore gem cache
keys:
- v1-bundle-<< parameters.ruby_version >>-{{ .Branch }}-{{ checksum "tiny_tds.gemspec" }}
- v1-bundle-<< parameters.ruby_version >>-{{ .Branch }}-
- v1-bundle-<< parameters.ruby_version >>-
- v1-bundle-<< parameters.ruby_version >>-{{ arch }}-{{ .Branch }}-{{ checksum "tiny_tds.gemspec" }}
- v1-bundle-<< parameters.ruby_version >>-{{ arch }}-{{ .Branch }}-
- v1-bundle-<< parameters.ruby_version >>-{{ arch }}-

- run:
name: bundle install gems
Expand All @@ -169,7 +169,7 @@ jobs:
name: save gem cache
paths:
- ./vendor/bundle
key: v1-bundle-<< parameters.ruby_version >>-{{ .Branch }}-{{ checksum "tiny_tds.gemspec" }}
key: v1-bundle-<< parameters.ruby_version >>-{{ arch }}-{{ .Branch }}-{{ checksum "tiny_tds.gemspec" }}

- attach_workspace:
at: artifacts
Expand Down Expand Up @@ -261,8 +261,8 @@ jobs:
- restore_cache:
name: restore ports cache
keys:
- ports-win-{{ checksum ".ports_versions" }}
- ports-win-
- ports-win-{{ arch }}-{{ checksum ".ports_versions" }}
- ports-win-{{ arch }}-

- run:
name: Build gem
Expand All @@ -288,7 +288,7 @@ jobs:
name: save ports cache
paths:
- ./ports
key: ports-win-{{ checksum ".ports_versions" }}
key: ports-win-{{ arch }}-{{ checksum ".ports_versions" }}

- persist_to_workspace:
name: save gems into workspace
Expand Down Expand Up @@ -333,9 +333,9 @@ jobs:
- restore_cache:
name: restore gem cache
keys:
- v1-bundle-<< parameters.ruby_version >>-{{ .Branch }}-{{ checksum "tiny_tds.gemspec" }}
- v1-bundle-<< parameters.ruby_version >>-{{ .Branch }}-
- v1-bundle-<< parameters.ruby_version >>-
- v1-bundle-<< parameters.ruby_version >>-{{ arch }}-{{ .Branch }}-{{ checksum "tiny_tds.gemspec" }}
- v1-bundle-<< parameters.ruby_version >>-{{ arch }}-{{ .Branch }}-
- v1-bundle-<< parameters.ruby_version >>-{{ arch }}-

- run:
name: bundle install gems
Expand All @@ -347,7 +347,7 @@ jobs:
name: save gem cache
paths:
- ./vendor/bundle
key: v1-bundle-<< parameters.ruby_version >>-{{ .Branch }}-{{ checksum "tiny_tds.gemspec" }}
key: v1-bundle-<< parameters.ruby_version >>-{{ arch }}-{{ .Branch }}-{{ checksum "tiny_tds.gemspec" }}

- run:
name: build gem
Expand All @@ -369,6 +369,72 @@ jobs:
ruby -e "require 'tiny_tds'; puts TinyTds::Gem.root_path"
exit $LASTEXITCODE

install_mac_silicon:
parameters:
ruby_version:
description: "version tag for rubydev environment"
type: string

# the XCode version on Mac OS also determines the Mac OS version you get
# so for 15.0, we get 13.5.1
macos:
xcode: "15.0.0"
resource_class: macos.m1.medium.gen1

steps:
- run:
name: Install rbenv and freetds from Homebrew
command: |
brew install freetds rbenv

- run:
name: Install Ruby
command: |
latest_version=$(rbenv install --list-all | grep "<< parameters.ruby_version >>" | grep -v - | tail -1)
rbenv install --skip-existing $latest_version
rbenv global $latest_version

- run:
name: Install bundler
command: |
gem install bundler -v 2.3.26

- checkout

- restore_cache:
name: restore gem cache
keys:
- v1-bundle-<< parameters.ruby_version >>-{{ arch }}-{{ .Branch }}-{{ checksum "tiny_tds.gemspec" }}
- v1-bundle-<< parameters.ruby_version >>-{{ arch }}-{{ .Branch }}-
- v1-bundle-<< parameters.ruby_version >>-{{ arch }}-

- run:
name: bundle install gems
command: |
bundle install --path vendor/bundle

- save_cache:
name: save gem cache
paths:
- ./vendor/bundle
key: v1-bundle-<< parameters.ruby_version >>-{{ arch }}-{{ .Branch }}-{{ checksum "tiny_tds.gemspec" }}

- run:
name: build gem
command: |
gem build tiny_tds.gemspec

- run:
name: Install gem
command: |
gemVersion=$(sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' < VERSION)
gem install --local "tiny_tds-$gemVersion.gem"

- run:
name: Check if gem loads correctly
command: |
ruby -e "require 'tiny_tds'; puts TinyTds::Gem.root_path"

workflows:
test_supported_ruby_versions:
jobs:
Expand Down Expand Up @@ -405,3 +471,14 @@ workflows:
- '3.0'
- '3.1'
- '3.2'

- install_mac_silicon:
matrix:
parameters:
# Ruby 2.4 and Ruby 2.5 do not build on Silicon anymore
ruby_version:
- '2.6'
- '2.7'
- '3.0'
- '3.1'
- '3.2'
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
* Fix segfault when asking if client was dead after closing it. Fixes #519.
* Mark `alloc` function as undefined on `TinyTds::Result`. Fixes #515.
* Fix Gem installation on Windows by adding default freetds msys path. Fixes #522
* Search for `freetds` in `/opt/homebrew` when installing on Apple Silicon. Fixes #484, #492 and #508.

## 2.1.5

Expand Down
13 changes: 13 additions & 0 deletions ext/tiny_tds/extconf.rb
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,19 @@ def do_help
/usr/local
)

if RbConfig::CONFIG['host_os'] =~ /darwin/i
# Ruby below 2.7 seems to label the host CPU on Apple Silicon as aarch64
# 2.7 and above print is as ARM64
target_host_cpu = Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.7') ? 'aarch64' : 'arm64'

if RbConfig::CONFIG['host_cpu'] == target_host_cpu
# Homebrew on Apple Silicon installs into /opt/hombrew
# https://docs.brew.sh/Installation
# On Intel Macs, it is /usr/local, so no changes necessary to DIRS
DIRS.unshift("/opt/homebrew")
end
end

if ENV["RI_DEVKIT"] && ENV["MINGW_PREFIX"] # RubyInstaller Support
DIRS.unshift(File.join(ENV["RI_DEVKIT"], ENV["MINGW_PREFIX"]))
end
Expand Down