lib/neutron/valac.rb in neutron-0.1.0 vs lib/neutron/valac.rb in neutron-0.2.0

- old
+ new

@@ -1,14 +1,65 @@ require 'neutron' -class Neutron::Valac +module Neutron::Valac def self.compile(*files, **opts) o = { prog: 'valac', debug: false, + type: :object, + gen_vapi: false, + gen_header: false, args: '' }.merge(opts) + + specific = '' + + if o[:debug] + specific << ' -g' + end + + case o[:type] + when :object + specific << ' -c' + when :ccode + specific << ' -C' + else + raise TypeError, "Invalid output type: #{o[:type]}!" + end + files.each do |file| - Neutron.execute("#{o[:prog]} -c #{file} #{'-X g' if o[:debug]} #{o[:args]}", must_success: true) + file = File.expand_path(file) + + iter_specific = '' + + if o[:gen_vapi] + puts "Warning: this part of Neutron::Valac module is not finished. Use it at own risk!" + iter_specific << " --vapi #{Neutron.file_to_ext(file, '.vapi')}" + end + + if o[:gen_header] + iter_specific << " --header #{Neutron.file_to_ext(file, '.h')}" + end + + Neutron.execute("#{o[:prog]} #{file} #{specific} #{iter_specific} -b ./ --thread #{o[:args]}", must_success: true) end end -end + + def self.to_c(*files, **opts) + o = { + proc: 'valac', + args: '' + } + end + + def self.vapi_header(header) + "[CCode (cheader_filename = \"#{header}\")]\n\n" + end +end + +=begin + valac --vapi library.vapi --header library.h library.vala -C # Compiles library into C code and header to access it + cat *.vapi > libname.vapi # Concatenates all VAPIs into single file. Worked for me + gcc -c library.c -fpic `pkg-config --libs --cflags glib-2.0` # Compiles generated C code + gcc library.vala -o libname.so -shared -fpic `pkg-config --libs --cflags glib-2.0` # Compiles shared library + valac test.vala libname.vapi -X library.so -X -Wl,-rpath=./ # Compiles project using library +=end \ No newline at end of file