Skip to content

Instantly share code, notes, and snippets.

@stucka
Last active December 16, 2015 07:49
Show Gist options
  • Save stucka/5401571 to your computer and use it in GitHub Desktop.
Save stucka/5401571 to your computer and use it in GitHub Desktop.
Patches for ruby-opencv to work without photo and gpu modules. Alas, it still wants nonfree, so this doesn't help Tabula.
#!/usr/bin/env ruby
require "mkmf"
def cv_version_suffix(incdir)
major, minor, subminor = nil, nil, nil
open("#{incdir}/opencv2/core/version.hpp", 'r') { |f|
f.read.lines.each { |line|
major = $1.to_s if line =~ /\A#define\s+CV_MAJOR_VERSION\s+(\d+)\s*\Z/
minor = $1.to_s if line =~ /\A#define\s+CV_MINOR_VERSION\s+(\d+)\s*\Z/
subminor = $1.to_s if line =~ /\A#define\s+CV_SUBMINOR_VERSION\s+(\d+)\s*\Z/
}
}
major + minor + subminor
end
# Quick fix for 2.0.0
# @libdir_basename is set to nil and dir_config() sets invalid libdir '${opencv-dir}/' when --with-opencv-dir option passed.
@libdir_basename ||= 'lib'
incdir, libdir = dir_config("opencv", "/usr/local/include", "/usr/local/lib")
dir_config("libxml2", "/usr/include", "/usr/lib")
opencv_headers = ["opencv2/core/core_c.h", "opencv2/core/core.hpp", "opencv2/imgproc/imgproc_c.h",
"opencv2/imgproc/imgproc.hpp", "opencv2/video/tracking.hpp", "opencv2/features2d/features2d.hpp",
"opencv2/flann/flann.hpp", "opencv2/calib3d/calib3d.hpp", "opencv2/objdetect/objdetect.hpp",
"opencv2/legacy/compat.hpp", "opencv2/legacy/legacy.hpp", "opencv2/highgui/highgui_c.h",
"opencv2/highgui/highgui.hpp", "opencv2/nonfree/nonfree.hpp"]
#purging references only to photo.hpp
opencv_libraries = ["opencv_calib3d", "opencv_contrib", "opencv_core", "opencv_features2d",
"opencv_flann", "opencv_highgui", "opencv_imgproc",
"opencv_legacy", "opencv_ml", "opencv_objdetect", "opencv_video",
"opencv_nonfree"]
#purging references only to opencv_photo and opencv_gpu. Maybe this'll work. Maybe.
puts ">> Check the required libraries..."
case CONFIG["arch"]
when /mswin32/
suffix = cv_version_suffix(incdir)
opencv_libraries.map! {|lib| lib + suffix }
have_library("msvcrt")
opencv_libraries.each {|lib|
raise "#{lib}.lib not found." unless have_library(lib)
}
$CFLAGS << ' /EHsc'
when /mingw32/
suffix = cv_version_suffix(incdir)
opencv_libraries.map! {|lib| lib + suffix }
have_library("msvcrt")
opencv_libraries.each {|lib|
raise "lib#{lib} not found." unless have_library(lib)
}
else
opencv_libraries.each {|lib|
raise "lib#{lib} not found." unless have_library(lib)
}
have_library("stdc++")
end
# Check the required headers
puts ">> Check the required headers..."
opencv_headers.each {|header|
unless have_header(header)
if CONFIG["arch"] =~ /mswin32/ and File.exists? "#{incdir}/#{header}"
# In mswin32, have_header('opencv2/nonfree/nonfree.hpp') fails because of a syntax problem.
warn "warning: #{header} found but `have_header` failed."
$defs << "-DHAVE_#{header.tr_cpp}"
else
raise "#{header} not found."
end
end
}
have_header("stdarg.h")
$warnflags.slice!('-Wdeclaration-after-statement')
$warnflags.slice!('-Wimplicit-function-declaration')
# Quick fix for 1.8.7
$CFLAGS << " -I#{File.dirname(__FILE__)}/ext/opencv"
# Create Makefile
create_makefile('opencv')
source "https://rubygems.org"
group :production do
platforms :mri_19, :mri_20 do
gem "algorithms"
gem "nokogiri"
gem "cuba"
gem "foreman"
gem "rake"
gem "resque"
gem "resque-progress"
gem "resque-status"
gem "ruby-opencv", :path => "./ruby-opencv"
end
end
group :test do
platforms :mri_19, :mri_20 do
gem "minitest"
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment