Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Restructure build to yield static library
Browse files Browse the repository at this point in the history
Previously, each library that `tiny_tds` required (OpenSSL, iconv, FreeTDS) was built as a dynamic library and then loaded by our entrypoint code prior to loading `tiny_tds` itself.

As a first preparation to precompiled gems for all platforms, this commit revamps the existing build for Windows to be a static library. I was heavily inspired by the `pg` gem: I moved all the ports logic into the `extconf`, updated our OpenSSL build to be smaller, played around with linker arguments to ultimately have a single `tiny_tds.so` file for each Ruby version containing everything needed to run the application.
andyundso committed Jan 7, 2025
1 parent f5cd106 commit 9136dee
Showing 10 changed files with 224 additions and 441 deletions.
26 changes: 10 additions & 16 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -15,15 +15,15 @@ jobs:
- "x64-mingw-ucrt"
name: cross-compile-windows
runs-on: ubuntu-22.04
container:
image: "ghcr.io/rake-compiler/rake-compiler-dock-image:1.7.0-mri-${{ matrix.platform }}"
steps:
- uses: actions/checkout@v4

- run: git config --global --add safe.directory /__w/tiny_tds/tiny_tds # shrug

- name: Install gems
shell: bash
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: "2.7"

- name: "Install dependencies"
run: bundle install

- name: Write used versions into file
@@ -34,14 +34,14 @@ jobs:
uses: actions/cache@v4
with:
path: ports
key: cross-compiled-v3-${{ matrix.platform }}-${{ hashFiles('**/.ports_versions') }}
key: cross-compiled-v4-${{ matrix.platform }}-${{ hashFiles('**/.ports_versions') }}
restore-keys: |
cross-compiled-v3-${{ matrix.platform }}-${{ hashFiles('**/.ports_versions') }}
cross-compiled-v3-${{ matrix.platform }}-
cross-compiled-v4-${{ matrix.platform }}-${{ hashFiles('**/.ports_versions') }}
cross-compiled-v4-${{ matrix.platform }}-
- name: Build gem
shell: bash
run: bundle exec rake gem:for_platform[${{ matrix.platform }}]
run: bundle exec rake gem:native:${{ matrix.platform }}

- uses: actions/upload-artifact@v4
with:
@@ -136,9 +136,6 @@ jobs:
$destination = (Resolve-Path ".\lib\tiny_tds").Path
Get-ChildItem $source -Recurse -Exclude "*.rb" | Copy-Item -Destination {Join-Path $destination $_.FullName.Substring($source.length)}
# Restore ports
Copy-Item -Path ".\tmp\tiny_tds-$gemVersion-$rubyArchitecture\ports" -Destination "." -Recurse
- name: Setup MSSQL
uses: rails-sqlserver/setup-mssql@v1
with:
@@ -263,9 +260,6 @@ jobs:
$destination = (Resolve-Path ".\lib\tiny_tds").Path
Get-ChildItem $source -Recurse -Exclude "*.rb" | Copy-Item -Destination {Join-Path $destination $_.FullName.Substring($source.length)}
# Restore ports
Copy-Item -Path ".\tmp\tiny_tds-$gemVersion-$rubyArchitecture\ports" -Destination "." -Recurse
- name: Setup MSSQL
uses: rails-sqlserver/setup-mssql@v1
with:
33 changes: 18 additions & 15 deletions Rakefile
Original file line number Diff line number Diff line change
@@ -3,23 +3,16 @@ require 'rbconfig'
require 'rake'
require 'rake/clean'
require 'rake/extensiontask'
require_relative './ext/tiny_tds/extconsts'

SPEC = Gem::Specification.load(File.expand_path('../tiny_tds.gemspec', __FILE__))

ruby_cc_ucrt_versions = "3.4.0:3.3.5:3.2.0:3.1.0".freeze
ruby_cc_mingw32_versions = "3.0.0:2.7.0".freeze

GEM_PLATFORM_HOSTS = {
'x64-mingw32' => {
host: 'x86_64-w64-mingw32',
ruby_versions: ruby_cc_mingw32_versions
},
'x64-mingw-ucrt' => {
host: 'x86_64-w64-mingw32',
ruby_versions: ruby_cc_ucrt_versions
},
}
CrossLibrary = Struct.new :platform, :openssl_config, :toolchain
CrossLibraries = [
['x64-mingw-ucrt', 'mingw64', 'x86_64-w64-mingw32'],
['x64-mingw32', 'mingw64', 'x86_64-w64-mingw32'],
].map do |platform, openssl_config, toolchain|
CrossLibrary.new platform, openssl_config, toolchain
end

# Add our project specific files to clean for a rebuild
CLEAN.include FileList["{ext,lib}/**/*.{so,#{RbConfig::CONFIG['DLEXT']},o}"],
@@ -35,7 +28,7 @@ Dir['tasks/*.rake'].sort.each { |f| load f }
Rake::ExtensionTask.new('tiny_tds', SPEC) do |ext|
ext.lib_dir = 'lib/tiny_tds'
ext.cross_compile = true
ext.cross_platform = GEM_PLATFORM_HOSTS.keys
ext.cross_platform = CrossLibraries.map(&:platform)

# Add dependent DLLs to the cross gems
ext.cross_compiling do |spec|
@@ -52,6 +45,16 @@ Rake::ExtensionTask.new('tiny_tds', SPEC) do |ext|

spec.files += Dir.glob('exe/*')
end

ext.cross_config_options += CrossLibraries.map do |xlib|
{
xlib.platform => [
"--with-cross-build=#{xlib.platform}",
"--with-openssl-platform=#{xlib.openssl_config}",
"--with-toolchain=#{xlib.toolchain}",
]
}
end
end

task build: [:clean, :compile]
243 changes: 173 additions & 70 deletions ext/tiny_tds/extconf.rb
Original file line number Diff line number Diff line change
@@ -1,91 +1,194 @@
ENV['RC_ARCHS'] = '' if RUBY_PLATFORM =~ /darwin/

# :stopdoc:

require 'mkmf'
require 'rbconfig'
require_relative './extconsts'

# Shamelessly copied from nokogiri
#

def do_help
print <<HELP
usage: ruby #{$0} [options]
--with-freetds-dir=DIR
Use the freetds library placed under DIR.
HELP
exit! 0
require_relative 'extconsts'

if ENV['MAINTAINER_MODE']
$stderr.puts "Maintainer mode enabled."
$CFLAGS <<
' -Wall' <<
' -ggdb' <<
' -DDEBUG' <<
' -pedantic'
$LDFLAGS <<
' -ggdb'
end

do_help if arg_config('--help')
if gem_platform=with_config("cross-build")
require 'mini_portile2'

openssl_platform = with_config("openssl-platform")
toolchain = with_config("toolchain")

class BuildRecipe < MiniPortile
def initialize(name, version, files)
super(name, version)
self.files = files
rootdir = File.expand_path('../../..', __FILE__)
self.target = File.join(rootdir, "ports")
self.patch_files = Dir[File.join("patches", self.name, self.version, "*.patch")].sort
end

# this will yield all ports into the same directory, making our path configuration for the linker easier
def port_path
"#{@target}/#{host}"
end

def tmp_path
"tmp/#{host}/ports/#{@name}/#{@version}"
end

def cook_and_activate
checkpoint = File.join(self.target, "#{self.name}-#{self.version}-#{RUBY_PLATFORM}.installed")

unless File.exist?(checkpoint)
self.cook
FileUtils.touch checkpoint
end

self.activate
self
end
end

# Make sure to check the ports path for the configured host
architecture = RbConfig::CONFIG['arch']
openssl_recipe = BuildRecipe.new("openssl", OPENSSL_VERSION, [OPENSSL_SOURCE_URI]).tap do |recipe|
class << recipe
attr_accessor :openssl_platform

def configure
envs = []
envs << "CFLAGS=-DDSO_WIN32 -DOPENSSL_THREADS" if RUBY_PLATFORM =~ /mingw|mswin/
envs << "CFLAGS=-fPIC -DOPENSSL_THREADS" if RUBY_PLATFORM =~ /linux/
execute('configure', ['env', *envs, "./Configure", openssl_platform, "threads", "-static", "CROSS_COMPILE=#{host}-", configure_prefix, "--libdir=lib"], altlog: "config.log")
end

def compile
execute('compile', "#{make_cmd} build_libs")
end

def install
execute('install', "#{make_cmd} install_dev")
end
end

recipe.openssl_platform = openssl_platform
recipe.host = toolchain
recipe.cook_and_activate
end

project_dir = File.expand_path("../../..", __FILE__)
freetds_ports_dir = File.join(project_dir, 'ports', architecture, 'freetds', FREETDS_VERSION)
freetds_ports_dir = File.expand_path(freetds_ports_dir)
libiconv_recipe = BuildRecipe.new("libiconv", ICONV_VERSION, [ICONV_SOURCE_URI]).tap do |recipe|
recipe.configure_options << "CFLAGS=-fPIC" if RUBY_PLATFORM =~ /linux/
recipe.host = toolchain

# Add all the special path searching from the original tiny_tds build
# order is important here! First in, first searched.
DIRS = %w(
/opt/local
/usr/local
)
recipe.cook_and_activate
end

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'
freetds_recipe = BuildRecipe.new("freetds", FREETDS_VERSION, [FREETDS_SOURCE_URI]).tap do |recipe|
# i am not 100% what is going on behind the scenes
# it seems that FreeTDS build system prefers OPENSSL_CFLAGS and OPENSSL_LIBS
# but the linker still relies on LIBS and CPPFLAGS
# removing one or the other leads to build failures in any case of FreeTDS
recipe.configure_options << "CFLAGS=-fPIC" if RUBY_PLATFORM =~ /linux/
recipe.configure_options << "LDFLAGS=-L#{openssl_recipe.path}/lib"
recipe.configure_options << "LIBS=-liconv -lssl -lcrypto #{"-lwsock32 -lgdi32 -lws2_32 -lcrypt32" if RUBY_PLATFORM =~ /mingw|mswin/}"
recipe.configure_options << "CPPFLAGS=-I#{openssl_recipe.path}/include"

recipe.configure_options << "OPENSSL_CFLAGS=-L#{openssl_recipe.path}/lib"
recipe.configure_options << "OPENSSL_LIBS=-lssl -lcrypto #{"-lwsock32 -lgdi32 -lws2_32 -lcrypt32" if RUBY_PLATFORM =~ /mingw|mswin/}"

recipe.configure_options << "--with-openssl=#{openssl_recipe.path}"
recipe.configure_options << "--with-libiconv-prefix=#{libiconv_recipe.path}"
recipe.configure_options << "--disable-odbc"

recipe.host = toolchain
recipe.cook_and_activate
end

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")
ENV["LDFLAGS"] = "-Wl,-rpath -Wl,#{openssl_recipe.path}/lib"
dir_config('freetds', "#{freetds_recipe.path}/include", "#{freetds_recipe.path}/lib")

# here we check that all our libraries are now available to the compiler
# by calling "find_library", mkmf will compile a small programm that check for the existence of the library
# and will append it to "LIBS" environment variable when compiling tiny_tds itself
# on one hand, this is a check for us that building all the ports worked as expected
# but is also required that linking all the libraries to tiny_tds will work

# order matters heavily here when linking the resulting tiny_tds.so
# for example, libcrypto by OpenSSL needs to see libcrypt32 on Windows in order to have all references resolved
# same for sybdb, which needs to see all OpenSSL and libiconv stuff to have all references resolved
if RUBY_PLATFORM =~ /mingw|mswin/
find_library("crypt32", nil)
find_library("ws2_32", nil)
find_library("gdi32", nil)
find_library("wsock32", nil)
end
end

if ENV["RI_DEVKIT"] && ENV["MINGW_PREFIX"] # RubyInstaller Support
DIRS.unshift(File.join(ENV["RI_DEVKIT"], ENV["MINGW_PREFIX"]))
end
find_library("crypto", nil)
find_library("ssl", nil)
find_library("iconv", "libiconv_open")
find_library('sybdb', 'dbanydatecrack')
else
# Make sure to check the ports path for the configured host
architecture = RbConfig::CONFIG['arch']

project_dir = File.expand_path("../../..", __FILE__)
freetds_ports_dir = File.join(project_dir, 'ports', architecture, 'freetds', FREETDS_VERSION)
freetds_ports_dir = File.expand_path(freetds_ports_dir)

# Add all the special path searching from the original tiny_tds build
# order is important here! First in, first searched.
DIRS = %w(
/opt/local
/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

# Add the ports directory if it exists for local developer builds
DIRS.unshift(freetds_ports_dir) if File.directory?(freetds_ports_dir)
if ENV["RI_DEVKIT"] && ENV["MINGW_PREFIX"] # RubyInstaller Support
DIRS.unshift(File.join(ENV["RI_DEVKIT"], ENV["MINGW_PREFIX"]))
end

# Grab freetds environment variable for use by people on services like
# Heroku who they can't easily use bundler config to set directories
DIRS.unshift(ENV['FREETDS_DIR']) if ENV.has_key?('FREETDS_DIR')
# Add the ports directory if it exists for local developer builds
DIRS.unshift(freetds_ports_dir) if File.directory?(freetds_ports_dir)

# Add the search paths for freetds configured above
ldirs = DIRS.flat_map do |path|
ldir = "#{path}/lib"
[ldir, "#{ldir}/freetds"]
end
# Grab freetds environment variable for use by people on services like
# Heroku who they can't easily use bundler config to set directories
DIRS.unshift(ENV['FREETDS_DIR']) if ENV.has_key?('FREETDS_DIR')

idirs = DIRS.flat_map do |path|
idir = "#{path}/include"
[idir, "#{idir}/freetds"]
end
# Add the search paths for freetds configured above
ldirs = DIRS.flat_map do |path|
ldir = "#{path}/lib"
[ldir, "#{ldir}/freetds"]
end

puts "looking for freetds headers in the following directories:\n#{idirs.map{|a| " - #{a}\n"}.join}"
puts "looking for freetds library in the following directories:\n#{ldirs.map{|a| " - #{a}\n"}.join}"
dir_config('freetds', idirs, ldirs)
idirs = DIRS.flat_map do |path|
idir = "#{path}/include"
[idir, "#{idir}/freetds"]
end

have_dependencies = [
find_header('sybfront.h'),
find_header('sybdb.h'),
find_library('sybdb', 'tdsdbopen'),
find_library('sybdb', 'dbanydatecrack')
].inject(true) do |memo, current|
memo && current
puts "looking for freetds headers in the following directories:\n#{idirs.map{|a| " - #{a}\n"}.join}"
puts "looking for freetds library in the following directories:\n#{ldirs.map{|a| " - #{a}\n"}.join}"
dir_config('freetds', idirs, ldirs)

unless find_library('sybdb', 'dbanydatecrack')
abort "Failed! Do you have FreeTDS 1.0.0 or higher installed?"
end
end

unless have_dependencies
abort 'Failed! Do you have FreeTDS 1.0.0 or higher installed?'
if /solaris/ =~ RUBY_PLATFORM
append_cppflags( '-D__EXTENSIONS__' )
end

create_makefile('tiny_tds/tiny_tds')
find_header('sybfront.h') or abort "Can't find the 'sybfront.h' header"
find_header('sybdb.h') or abort "Can't find the 'sybdb.h' header"

# :startdoc:
create_makefile("tiny_tds/tiny_tds")
54 changes: 5 additions & 49 deletions lib/tiny_tds.rb
Original file line number Diff line number Diff line change
@@ -9,53 +9,9 @@
require 'tiny_tds/result'
require 'tiny_tds/gem'

# Support multiple ruby versions, fat binaries under Windows.
if RUBY_PLATFORM =~ /mingw|mswin/ && RUBY_VERSION =~ /(\d+.\d+)/
ver = Regexp.last_match(1)

add_dll_path = proc do |path, &block|
begin
require 'ruby_installer/runtime'
RubyInstaller::Runtime.add_dll_directory(path, &block)
rescue LoadError
old_path = ENV['PATH']
ENV['PATH'] = "#{path};#{old_path}"
begin
block.call
ensure
ENV['PATH'] = old_path
end
end
end

add_dll_paths = proc do |paths, &block|
if path=paths.shift
add_dll_path.call(path) do
add_dll_paths.call(paths, &block)
end
else
block.call
end
end

# Temporary add bin directories for DLL search, so that freetds DLLs can be found.
add_dll_paths.call( TinyTds::Gem.ports_bin_paths ) do
begin
require "tiny_tds/#{ver}/tiny_tds"
rescue LoadError
require 'tiny_tds/tiny_tds'
end
end
else
# Load dependent shared libraries into the process, so that they are already present,
# when tiny_tds.so is loaded. This ensures, that shared libraries are loaded even when
# the path is different between build and run time (e.g. Heroku).
ports_libs = File.join(TinyTds::Gem.ports_root_path,
"#{RbConfig::CONFIG['host']}/lib/*.so")
Dir[ports_libs].each do |lib|
require 'fiddle'
Fiddle.dlopen(lib)
end

require 'tiny_tds/tiny_tds'
begin
RUBY_VERSION =~ /(\d+\.\d+)/
require "tiny_tds/#{$1}/tiny_tds"
rescue LoadError
require "tiny_tds/tiny_tds"
end
33 changes: 13 additions & 20 deletions tasks/native_gem.rake
Original file line number Diff line number Diff line change
@@ -1,23 +1,16 @@
# encoding: UTF-8
CrossLibraries.each do |xlib|
platform = xlib.platform

desc "Build fat binary gem for platform #{platform}"
task "gem:native:#{platform}" do
require "rake_compiler_dock"

desc 'Build the native binary gems using rake-compiler-dock'
task 'gem:native' => ['ports:cross'] do
require 'rake_compiler_dock'
RakeCompilerDock.sh <<-EOT, platform: platform
bundle install &&
rake native:#{platform} pkg/#{SPEC.full_name}-#{platform}.gem MAKEOPTS=-j`nproc` RUBY_CC_VERSION=3.4.1:3.3.5:3.2.0:3.1.0:3.0.0:2.7.0
EOT
end

# make sure to install our bundle
sh "bundle package --all" # Avoid repeated downloads of gems by using gem files from the host.

GEM_PLATFORM_HOSTS.each do |plat, meta|
RakeCompilerDock.sh "bundle --local && RUBY_CC_VERSION=#{meta[:ruby_versions]} rake native:#{plat} gem", platform: plat
end
end

# assumes you are in a container provided by Rake compiler
# if not, use the task above
task 'gem:for_platform', [:gem_platform] do |_task, args|
args.with_defaults(gem_platform: RbConfig::CONFIG["arch"])

sh "bundle install"
Rake::Task["ports:compile"].invoke(GEM_PLATFORM_HOSTS[args.gem_platform][:host], args.gem_platform)
sh "RUBY_CC_VERSION=#{GEM_PLATFORM_HOSTS[args.gem_platform][:ruby_versions]} rake native:#{args.gem_platform} gem"
desc "Build the native binary gems"
multitask 'gem:native' => "gem:native:#{platform}"
end
92 changes: 5 additions & 87 deletions tasks/ports.rake
Original file line number Diff line number Diff line change
@@ -1,99 +1,20 @@
# encoding: UTF-8
require 'mini_portile2'
require 'fileutils'
require_relative 'ports/libiconv'
require_relative 'ports/openssl'
require_relative 'ports/freetds'
require_relative '../ext/tiny_tds/extconsts'

namespace :ports do
libraries_to_compile = {
openssl: Ports::Openssl.new(OPENSSL_VERSION),
libiconv: Ports::Libiconv.new(ICONV_VERSION),
freetds: Ports::Freetds.new(FREETDS_VERSION)
openssl: OPENSSL_VERSION,
libiconv: ICONV_VERSION,
freetds: FREETDS_VERSION
}

directory "ports"
CLEAN.include "ports/*mingw*"
CLEAN.include "ports/*.installed"

task :openssl, [:host, :gem_platform] do |_task, args|
args.with_defaults(host: RbConfig::CONFIG['host'], gem_platform: RbConfig::CONFIG["arch"])

libraries_to_compile[:openssl].files = [OPENSSL_SOURCE_URI]
libraries_to_compile[:openssl].host = args.host
libraries_to_compile[:openssl].gem_platform = args.gem_platform

libraries_to_compile[:openssl].cook
libraries_to_compile[:openssl].activate
end

task :libiconv, [:host, :gem_platform] do |_task, args|
args.with_defaults(host: RbConfig::CONFIG['host'], gem_platform: RbConfig::CONFIG["arch"])

libraries_to_compile[:libiconv].files = [ICONV_SOURCE_URI]
libraries_to_compile[:libiconv].host = args.host
libraries_to_compile[:libiconv].gem_platform = args.gem_platform
libraries_to_compile[:libiconv].cook
libraries_to_compile[:libiconv].activate
end

task :freetds, [:host, :gem_platform] do |_task, args|
args.with_defaults(host: RbConfig::CONFIG['host'], gem_platform: RbConfig::CONFIG["arch"])

libraries_to_compile[:freetds].files = [FREETDS_SOURCE_URI]
libraries_to_compile[:freetds].host = args.host
libraries_to_compile[:freetds].gem_platform = args.gem_platform

if libraries_to_compile[:openssl]
# freetds doesn't have an option that will provide an rpath
# so we do it manually
ENV['OPENSSL_CFLAGS'] = "-Wl,-rpath -Wl,#{libraries_to_compile[:openssl].path}/lib64"
# Add the pkgconfig file with MSYS2'ish path, to prefer our ports build
# over MSYS2 system OpenSSL.
ENV['PKG_CONFIG_PATH'] = "#{libraries_to_compile[:openssl].path.gsub(/^(\w):/i) { "/" + $1.downcase }}/lib64/pkgconfig:#{ENV['PKG_CONFIG_PATH']}"
libraries_to_compile[:freetds].configure_options << "--with-openssl=#{libraries_to_compile[:openssl].path}"
end

if libraries_to_compile[:libiconv]
libraries_to_compile[:freetds].configure_options << "--with-libiconv-prefix=#{libraries_to_compile[:libiconv].path}"
end

libraries_to_compile[:freetds].cook
libraries_to_compile[:freetds].activate
end

task :compile, [:host, :gem_platform] do |_task, args|
args.with_defaults(host: RbConfig::CONFIG['host'], gem_platform: RbConfig::CONFIG["arch"])

puts "Compiling ports for #{args.host} (Ruby platform #{args.gem_platform}) ..."

libraries_to_compile.keys.each do |lib|
Rake::Task["ports:#{lib}"].invoke(args.host, args.gem_platform)
end
end

desc 'Build the ports windows binaries via rake-compiler-dock'
task 'cross' do
require 'rake_compiler_dock'

# build the ports for all our cross compile hosts
GEM_PLATFORM_HOSTS.each do |gem_platform, meta|
# make sure to install our bundle
build = ['bundle']
build << "RUBY_CC_VERSION=#{meta[:ruby_versions]} rake ports:compile[#{meta[:host]},#{gem_platform}] MAKE='make -j`nproc`'"
RakeCompilerDock.sh build.join(' && '), platform: gem_platform
end
end

desc "Notes the actual versions for the compiled ports into a file"
task "version_file", [:gem_platform] do |_task, args|
args.with_defaults(gem_platform: RbConfig::CONFIG["arch"])

ports_version = {}

libraries_to_compile.each do |library, library_recipe|
ports_version[library] = library_recipe.version
libraries_to_compile.each do |library, version|
ports_version[library] = version
end

ports_version[:platform] = args.gem_platform
@@ -103,6 +24,3 @@ namespace :ports do
end
end
end

desc 'Build ports and activate libraries for the current architecture.'
task :ports => ['ports:compile']
32 changes: 0 additions & 32 deletions tasks/ports/freetds.rb

This file was deleted.

26 changes: 0 additions & 26 deletions tasks/ports/libiconv.rb

This file was deleted.

62 changes: 0 additions & 62 deletions tasks/ports/openssl.rb

This file was deleted.

64 changes: 0 additions & 64 deletions tasks/ports/recipe.rb

This file was deleted.

0 comments on commit 9136dee

Please sign in to comment.