require 'fileutils' def build_extension(name, arch, src_files) objects = [] mkdir_p $tempdir unless File.exists? $tempdir use_own_stlport = false $std_includes = File.join ENV['ANDROID_NDK'], "sources", "cxx-stl", "stlport", "stlport" unless File.directory? $std_includes $stlport_includes = "#{$rootdir}/platform/shared/stlport/stlport" use_own_stlport = true end #Dir.glob("*.c").each do |f| src_files.each do |f| objname = File.join( $tempdir, File.basename( f.gsub(/\.c$/, '.o') ) ) objects << objname args = [] args << "-I." args << "-I#{$rootdir}/platform/shared/ruby/include" args << "-I#{$rootdir}/platform/shared" args << "-I#{$std_includes}" unless $std_includes.nil? args << "-D__NEW__" if use_own_stlport args << "-I#{$stlport_includes}" if use_own_stlport args << "-I#{$rootdir}/platform/shared/ruby/android" args << "-I#{$rootdir}/platform/shared/ruby/generated" args << "-I#{$rootdir}/platform/android/Rhodes/jni/include" cc_compile f, $tempdir, args or exit 1 end mkdir_p $targetdir unless File.exist? $targetdir cc_ar File.join( $targetdir, 'lib' + name + '.a' ), Dir.glob($tempdir + "/**/*.o") or exit 1 end namespace "build" do task :config do $targetdir = ENV['TARGET_TEMP_DIR'] raise "TARGET_TEMP_DIR is not set" if $targetdir.nil? $tempdir = ENV['TEMP_FILES_DIR'] raise "TEMP_FILES_DIR is not set" if $tempdir.nil? $rootdir = ENV['RHO_ROOT'] raise "RHO_ROOT is not set" if $rootdir.nil? curdir = pwd $barcodedir = curdir.gsub('/ext/barcode/platform/android',''); require File.join($rootdir, 'platform/android/build/androidcommon.rb') setup_ndk(ENV['ANDROID_NDK'],ENV['ANDROID_API_LEVEL']) end task :all => :config do fixed_path = ENV['RHO_ROOT'] + '/lib/extensions/barcode/ext' fixed_path = fixed_path.gsub("\\","/") src_files = [] src_files << fixed_path + '/barcode/shared/ruby/barcode_wrap.c' #src_files << fixed_path + '/barcode/shared/src/zbar.c' #src_files << fixed_path + '/barcode/shared/zbar/rho_bridge.c' #src_files << fixed_path + '/barcode/shared/zbar/zbar/zbar/error.c' #src_files << fixed_path + '/barcode/shared/zbar/zbar/zbar/decoder/code128.c' #src_files << fixed_path + '/barcode/shared/zbar/zbar/zbar/decoder/code39.c' #src_files << fixed_path + '/barcode/shared/zbar/zbar/zbar/decoder/ean.c' #src_files << fixed_path + '/barcode/shared/zbar/zbar/zbar/decoder/i25.c' #src_files << fixed_path + '/barcode/shared/zbar/zbar/zbar/processor/null.c' #src_files << fixed_path + '/barcode/shared/zbar/zbar/zbar/video/null.c' #src_files << fixed_path + '/barcode/shared/zbar/zbar/zbar/window/null.c' #src_files << fixed_path + '/barcode/shared/zbar/zbar/zbar/config.c' #src_files << fixed_path + '/barcode/shared/zbar/zbar/zbar/convert.c' #src_files << fixed_path + '/barcode/shared/zbar/zbar/zbar/decoder.c' #src_files << fixed_path + '/barcode/shared/zbar/zbar/zbar/image.c' #src_files << fixed_path + '/barcode/shared/zbar/zbar/zbar/img_scanner.c' #src_files << fixed_path + '/barcode/shared/zbar/zbar/zbar/refcnt.c' #src_files << fixed_path + '/barcode/shared/zbar/zbar/zbar/scanner.c' #src_files << fixed_path + '/barcode/shared/zbar/zbar/zbar/symbol.c' #src_files << fixed_path + '/barcode/platform/android/jni/src/imageprovider.cpp' src_files << fixed_path + '/barcode/platform/android/jni/src/barcode.cpp' build_extension('Barcode', $arch, src_files) #build java part #javafiles = [] #File.open('ext_build.files', "r") do |f| # while line = f.gets # javafiles << line # end #end #flname = $targetdir + '/ext_build.files' #File.open(flname, "a") do |f| # javafiles.each do |j| # f.puts $barcodedir + '/' + j # end #end end end task :default => "build:all"