Updated Branches: refs/heads/chaz_namespacing 23a381fb6 -> 547d813e4
Start using cached charmonizer.c in Ruby bindings. Simplify the build instructions for the Ruby bindings of both Lucy and the Clownfish runtime by using the version of charmonizer.c cached in version control. Project: http://git-wip-us.apache.org/repos/asf/lucy/repo Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/547d813e Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/547d813e Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/547d813e Branch: refs/heads/chaz_namespacing Commit: 547d813e465947d0787a63c3bab6cfe6b63ba24f Parents: 23a381f Author: Marvin Humphrey <[email protected]> Authored: Fri Nov 2 12:15:23 2012 -0700 Committer: Marvin Humphrey <[email protected]> Committed: Fri Nov 2 12:46:48 2012 -0700 ---------------------------------------------------------------------- clownfish/runtime/ruby/Rakefile | 83 ++++++++++++++++----------------- ruby/Rakefile | 85 +++++++++++++++++---------------- 2 files changed, 84 insertions(+), 84 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lucy/blob/547d813e/clownfish/runtime/ruby/Rakefile ---------------------------------------------------------------------- diff --git a/clownfish/runtime/ruby/Rakefile b/clownfish/runtime/ruby/Rakefile index bc5b6bb..b2fc539 100644 --- a/clownfish/runtime/ruby/Rakefile +++ b/clownfish/runtime/ruby/Rakefile @@ -21,9 +21,15 @@ def rbconfig RbConfig::CONFIG end +def exe_path(*args) + File.join(args).ext(RbConfig::CONFIG["EXEEXT"]) +end + BASE_PATH = '..' CHARMONIZER_ORIG_DIR = File.absolute_path( File.join( BASE_PATH, '..', '..', 'charmonizer' ) ) -CHARMONIZE_EXE_PATH = './charmonize' #TODO: probably will not work on win32 +COMMON_SOURCE_DIR = File.join(BASE_PATH, "common") +CHARMONIZER_C = File.join(COMMON_SOURCE_DIR, 'charmonizer.c') +CHARMONIZER_EXE_PATH = File.absolute_path(exe_path('charmonizer')) CHARMONY_H_PATH = 'charmony.h' CHARMONY_RB_PATH = 'Charmony.rb' CORE_SOURCE_DIR = File.absolute_path( BASE_PATH, 'core' ); @@ -86,57 +92,48 @@ task :build_charmonizer_tests => [:charmonize] do run_make( :dir => CHARMONIZER_ORIG_DIR, :args => [ "DEFS=#{flags}", "tests"]) end -desc "Charmonize" -task :charmonize => [:build_charmonize] do - puts "Charmonizing" - #return if !uptodate?(CHARMONIZE_EXE_PATH, [ CHARMONY_H_PATH, CHARMONY_RB_PATH ] ) - puts "Running #{CHARMONIZE_EXE_PATH}...\n" - CLEAN.include(CHARMONY_H_PATH) - CLEAN.include(CHARMONY_RB_PATH) - CLEAN.include('_charm*') +desc "Build and run charmonizer, creating charmony.h and charmony.rb" +task :charmony do + # Compile charmonizer executable. + if !uptodate? CHARMONIZER_EXE_PATH, [CHARMONIZER_C] + outflag = cc_command.match(/cl\b/) ? "/Fe" : "-o " + command = "#{cc_command} #{outflag}#{CHARMONIZER_EXE_PATH} #{CHARMONIZER_C}" + puts command + if !system(command) + raise "Failed to compile #{CHARMONIZER_EXE_PATH}" + end + end - # TODO: no clue if this is correct + # Return if charmonizer output is current. + if uptodate? CHARMONY_RB_PATH, [CHARMONIZER_EXE_PATH] + next + end + puts "Running #{CHARMONIZER_EXE_PATH}...\n" + + # Prepare arguments to charmonizer. command = [ - CHARMONIZE_EXE_PATH, - '--cc=' + quotify( cc_command ), + CHARMONIZER_EXE_PATH, + '--cc=' + quotify(cc_command), '--enable-c', '--enable-ruby', '--', - extra_ccflags, + all_ccflags, ] - - if ( ENV['CHARM_VALGRIND'] ) + if (ENV['CHARM_VALGRIND']) command.unshift("valgrind", "--leak-check=yes") end - if system(*command).nil? - abort "Failed to run #{CHARMONIZE_EXE_PATH}" - end - -end - -desc "Building Charmonize" -task :build_charmonize do - puts "Buildling #{CHARMONIZE_EXE_PATH}" - meld_c = File.absolute_path('charmonize.c') - - CLEAN.include(meld_c) - CLEAN.include(CHARMONIZE_EXE_PATH) - - charmonize_main = File.join( CHARMONIZER_ORIG_DIR, 'charmonize.c' ) - - # TODO: Build.PL "PERL=$^X" Right is defaulting to system perl? - run_make(:dir => CHARMONIZER_ORIG_DIR, :args => [ "meld", "FILES=#{charmonize_main}", "OUT=#{meld_c}" ]) - - if !uptodate?(CHARMONIZE_EXE_PATH, [meld_c]) - cc = cc_command - outflag = $cc =~ /cl\b/ ? "/Fe" : "-o "; - if system("#{cc} #{meld_c} #{outflag}#{CHARMONIZE_EXE_PATH}").nil? - abort "Failed to compile #{CHARMONIZE_EXE_PATH}" - end + # Run charmonizer. + puts command.join(" ") + if !system(*command) + raise "Failed to run #{CHARMONIZER_EXE_PATH}: " + $? end - end +CLEAN.include(CHARMONIZER_EXE_PATH) +CLEAN.include(CHARMONY_H_PATH) +CLEAN.include(CHARMONY_RB_PATH) +# Clean up after charmonizer if it doesn't succeed on its own. +CLEAN.include("_charm*") task :default => [:build_clownfish] @@ -181,7 +178,7 @@ def make_command return command end -def extra_ccflags +def all_ccflags ccflags = '-DCFCRUBY ' if defined?(rbconfig["CFLAGS"]) @@ -214,7 +211,7 @@ def extra_ccflags end def quotify(string) - return '"' + string.gsub(/[\\\"]/,'\\1') + '"' + return '"' + string.gsub(/([\\\"])/,'\\\\\\1') + '"' end def autogen_header http://git-wip-us.apache.org/repos/asf/lucy/blob/547d813e/ruby/Rakefile ---------------------------------------------------------------------- diff --git a/ruby/Rakefile b/ruby/Rakefile index 474197b..9481380 100644 --- a/ruby/Rakefile +++ b/ruby/Rakefile @@ -78,14 +78,20 @@ def run_make(dir, params) chdir(current_dir) if dir end +def quotify(string) + return '"' + string.gsub(/([\\\"])/,'\\\\\\1') + '"' +end + IS_DISTRO_NOT_DEVEL = File.directory?('core') AUTOGEN_DIR = "autogen" BASE_DIR = File.absolute_path(IS_DISTRO_NOT_DEVEL ? '.' : '..') CHARMONIZER_ORIG_DIR = File.join(BASE_DIR, "charmonizer") -CHARMONIZE_C_PATH = File.absolute_path('charmonize.c') -CHARMONIZE_EXE_PATH = File.absolute_path(exe_path('charmonize')) +COMMON_SOURCE_DIR = File.join(BASE_DIR, "common") +CHARMONIZER_C = File.join(COMMON_SOURCE_DIR, 'charmonizer.c') +CHARMONIZER_EXE_PATH = File.absolute_path(exe_path('charmonizer')) CLOWNFISH_PATH = File.join(BASE_DIR,"clownfish","ruby") -CHARMONY_PATH = "charmony.h" +CHARMONY_H_PATH = "charmony.h" +CHARMONY_RB_PATH = "Charmony.rb" CORE_SOURCE_DIR = File.join(BASE_DIR, "core") desc "Build clownfish" @@ -109,51 +115,48 @@ task :clownfish => [:charmonizer_tests] do end -desc "Build the charmonize executable" -task :charmonize do - puts "Building #{CHARMONIZE_EXE_PATH}...\n" - meld_c = File.absolute_path("charmonize.c") - charmonize_main = File.join(CHARMONIZER_ORIG_DIR, 'charmonize.c') - run_make_args = [ "meld", "FILES=#{charmonize_main}", "OUT=#{meld_c}" ] - run_make(CHARMONIZER_ORIG_DIR, run_make_args) - - if !uptodate?(CHARMONIZE_EXE_PATH, [meld_c]) +desc "Build and run charmonizer, creating charmony.h and charmony.rb" +task :charmony do + # Compile charmonizer executable. + if !uptodate? CHARMONIZER_EXE_PATH, [CHARMONIZER_C] outflag = cc_command.match(/cl\b/) ? "/Fe" : "-o " - command = "#{cc_command} #{outflag}#{CHARMONIZE_EXE_PATH} #{meld_c}" + command = "#{cc_command} #{outflag}#{CHARMONIZER_EXE_PATH} #{CHARMONIZER_C}" puts command - success = system(command) - if !success - raise "Failed to write charmony.h" + if !system(command) + raise "Failed to compile #{CHARMONIZER_EXE_PATH}" end end -end -CLEAN.include(CHARMONIZE_C_PATH) -CLEAN.include(CHARMONIZE_EXE_PATH) - -desc "Run the charmonize executable, creating the charmony.h file" -task :charmony => [:charmonize] do - if !uptodate? CHARMONY_PATH, [CHARMONIZE_EXE_PATH] - puts "Writing #{CHARMONY_PATH}...\n" - command = [ - CHARMONIZE_EXE_PATH, - "--cc=\"#{cc_command}\"", - "--enable-c", - "--", - all_ccflags - ] - if ENV["CHARM_VALGRIND"] - command.unshift("valgrind", "--leak-check=yes") - end - puts command.join(" ") - success = system(*command); - if !success - raise "Failed to write charmony.h" - end + + # Return if charmonizer output is current. + if uptodate? CHARMONY_RB_PATH, [CHARMONIZER_EXE_PATH] + next + end + puts "Running #{CHARMONIZER_EXE_PATH}...\n" + + # Prepare arguments to charmonizer. + command = [ + CHARMONIZER_EXE_PATH, + '--cc=' + quotify(cc_command), + '--enable-c', + '--enable-ruby', + '--', + all_ccflags, + ] + if (ENV['CHARM_VALGRIND']) + command.unshift("valgrind", "--leak-check=yes") + end + + # Run charmonizer. + puts command.join(" ") + if !system(*command) + raise "Failed to run #{CHARMONIZER_EXE_PATH}: " + $? end end -# Clean up after charmonize if it doesn't succeed on its own. +CLEAN.include(CHARMONIZER_EXE_PATH) +CLEAN.include(CHARMONY_H_PATH) +CLEAN.include(CHARMONY_RB_PATH) +# Clean up after charmonizer if it doesn't succeed on its own. CLEAN.include("_charm*") -CLEAN.include(CHARMONY_PATH) desc "Build the charmonizer tests" task :charmonizer_tests => [:charmony] do
