copied everything over from 2012 and removed all of the actual robot code except the drivetrain stuff


git-svn-id: https://robotics.mvla.net/svn/frc971/2013/trunk/src@4078 f308d9b7-e957-4cde-b6ac-9a88185e7312
diff --git a/aos/build/queues/compiler.rb b/aos/build/queues/compiler.rb
new file mode 100644
index 0000000..aef5cbf
--- /dev/null
+++ b/aos/build/queues/compiler.rb
@@ -0,0 +1,151 @@
+["tokenizer.rb","q_file.rb","queue_group.rb","queue.rb","namespaces.rb",
+"interface.rb","errors.rb"].each do |name|
+	require File.dirname(__FILE__) + "/objects/" + name
+end
+["standard_types.rb","auto_gen.rb","file_pair_types.rb",
+"dep_file_pair.rb","swig.rb"].each do |name|
+	require File.dirname(__FILE__) + "/cpp_pretty_print/" + name
+end
+["q_file.rb","message_dec.rb","queue_dec.rb"].each do |name|
+	require File.dirname(__FILE__) + "/output/" + name
+end
+require "fileutils"
+require "pathname"
+
+def parse_args(globals,args)
+	i = 0
+	$swig = false
+	$swigccout_path = ""
+	while(i < args.length)
+		if(args[i] == "-I")
+			args.delete_at(i)
+			if(!args[i])
+				$stderr.puts "hey! -I is followed by nothing."
+				$stderr.puts "\tnot a supported usage..."
+				$stderr.puts "\tWot. Wot."
+				exit!(-1)
+			end
+			path = args.delete_at(i)
+			globals.add_path(path)
+		elsif(args[i] == "--swigccout")
+			args.delete_at(i)
+			$swigccout_path = args.delete_at(i)
+		elsif(args[i] == "-cpp_out")
+			args.delete_at(i)
+			path = args.delete_at(i)
+			if(path =~ /\./)
+				$stderr.puts "hey! path #{path} has a \".\" char which is "
+				$stderr.puts "\tnot a supported usage..."
+				$stderr.puts "\tWot. Wot."
+				exit!(-1)
+			elsif(!path)
+				$stderr.puts "hey! No cpp_out path provided."
+				$stderr.puts "\tumm, you could try -cpp_out \"\""
+				$stderr.puts "\tThat might do the trick"
+				$stderr.puts "\tWot. Wot."
+				exit!(-1)
+			end
+			$cpp_out = path.split(/\\|\//)
+		elsif(args[i] == "--swig")
+			$swig = true
+			args.delete_at(i)
+		elsif(args[i] == "-cpp_base")
+			args.delete_at(i)
+			path = args.delete_at(i)
+			$cpp_base = File.expand_path(path)
+			if(!File.exists?($cpp_base))
+				$stderr.puts "output directory #{$cpp_base.inspect} does not exist."
+				$stderr.puts "\tI'm not going to make that! sheesh, who do you think I am?"
+				$stderr.puts "\tWot. Wot."
+				exit!(-1)
+			end
+		elsif(args[i] =~ /^-/)
+			$stderr.puts "hey! unknown argument #{args[i]}."
+			$stderr.puts "\tWot. Wot."
+			exit!(-1)
+		else
+			i += 1
+		end
+	end
+	if(!$cpp_base)
+		$stderr.puts "hey! missing -cpp_base argument."
+		$stderr.puts "\tWot. Wot."
+		exit!(-1)
+	end
+	if(!$cpp_out)
+		$stderr.puts "hey! missing -cpp_out argument."
+		$stderr.puts "\tWot. Wot."
+		exit!(-1)
+	end
+end
+def build(filename,globals_template)
+	globals = Globals.new()
+	globals_template.paths.each do |path|
+		globals.add_path(path)
+	end
+	filename = File.expand_path(filename)
+	q_file = QFile.parse(filename)
+	output_file = q_file.q_eval(globals)
+	q_filename = File.basename(filename)
+	rel_path = ($cpp_out + [q_filename]).join("/")
+
+	FileUtils.mkdir_p(Pathname.new($cpp_base) + $cpp_out.join("/"))
+
+	cpp_tree = output_file.make_cpp_tree(rel_path)
+
+	h_file_path = $cpp_base + "/" + rel_path + ".h"
+	cc_file_path = $cpp_base + "/" + rel_path + ".cc"
+	swig_file_path = $cpp_base + "/" + rel_path + ".swig"
+	java_directory = $cpp_base + "/" + rel_path + "_java/"
+	cpp_tree.add_cc_include((rel_path + ".h").inspect)
+	cpp_tree.add_cc_include("aos/common/byteorder.h".inspect)
+	cpp_tree.add_cc_include("aos/common/inttypes.h".inspect)
+	cpp_tree.add_cc_using("::aos::to_network")
+	cpp_tree.add_cc_using("::aos::to_host")
+	cpp_tree.add_swig_header_include("aos/common/queue.h".inspect)
+	cpp_tree.add_swig_body_include("aos/atom_code/queue-tmpl.h".inspect)
+	cpp_tree.add_swig_header_include("aos/common/time.h".inspect)
+	cpp_tree.add_swig_include((rel_path + ".h").inspect)
+
+	header_file = File.open(h_file_path,"w+")
+	cc_file = File.open(cc_file_path,"w+")
+	cpp_tree.write_header_file($cpp_base,header_file)
+	cpp_tree.write_cc_file($cpp_base,cc_file)
+	cc_file.close()
+	header_file.close()
+	if ($swig)
+		swig_file = File.open(swig_file_path,"w+")
+		cpp_tree.write_swig_file($cpp_base,swig_file,q_filename)
+		swig_file.close()
+		namespace = q_file.namespace.get_name()[1..-1]
+		FileUtils.mkdir_p(java_directory)
+		includes = globals.paths.collect { |a| "-I#{a}" }
+
+		if (!system('/usr/bin/swig', *(includes + ['-I' + $cpp_base + '/',
+				    '-package', namespace,
+				    '-outdir', java_directory,
+				    '-o', $swigccout_path,
+				    '-c++', '-Wall', '-Wextra', '-java', swig_file_path])))
+			puts "Swig failed."
+			exit -1
+		end
+	end
+end
+begin
+	args = ARGV.dup
+	globals = Globals.new()
+	parse_args(globals,args)
+	if(args.length == 0)
+		$stderr.puts "hey! you want me to do something,"
+		$stderr.puts "\tbut you gave me no q files to build!"
+		$stderr.puts "\tWot. Wot."
+		exit!(-1)
+	end
+	args.each do |filename|
+		build(filename,globals)
+	end
+	exit(0)
+rescue QError => e
+	$stderr.print(e.to_s)
+	exit!(-1)
+end