166a37686207944273ced825e0e8b6b6375f8c3deJamie GennisCopyright (c) 2013 Brandon Jones, Colin MacKenzie IV
266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
366a37686207944273ced825e0e8b6b6375f8c3deJamie GennisThis software is provided 'as-is', without any express or implied
466a37686207944273ced825e0e8b6b6375f8c3deJamie Genniswarranty. In no event will the authors be held liable for any damages
566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisarising from the use of this software.
666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
766a37686207944273ced825e0e8b6b6375f8c3deJamie GennisPermission is granted to anyone to use this software for any purpose,
866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisincluding commercial applications, and to alter it and redistribute it
966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisfreely, subject to the following restrictions:
1066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
1166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 1. The origin of this software must not be misrepresented; you must not
1266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    claim that you wrote the original software. If you use this software
1366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    in a product, an acknowledgment in the product documentation would be
1466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    appreciated but is not required.
1566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
1666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 2. Altered source versions must be plainly marked as such, and must not
1766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    be misrepresented as being the original software.
1866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
1966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 3. This notice may not be removed or altered from any source distribution.
2066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
2166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis$:.unshift File.expand_path('.', File.dirname(__FILE__))
2266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisrequire 'sprockets'
2366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisrequire 'jasmine'
2466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
2566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisclass Jasmine::Config
2666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  def simple_config_file
2766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    File.expand_path GLMatrix.base_path.join('spec/jasmine.yml')
2866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  end
2966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisend
3066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
3166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisclass Rack::Jasmine::Runner
3266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  alias_method :jasmine_call, :call
3366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  def call(env)
3466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    GLMatrix.compile
3566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    jasmine_call env
3666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  end
3766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisend
3866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
3966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennismodule GLMatrix
4066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  autoload :ReleaseHelper, 'gl-matrix/release_helper'
4166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  autoload :Version,       'gl-matrix/version'
4266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  autoload :VERSION,       'gl-matrix/version'
4366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
4466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  module_function
4566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
4666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  def release(&block)
4766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    GLMatrix::ReleaseHelper.release &block
4866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  end
4966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
5066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  def sprockets
5166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    env = Sprockets::Environment.new base_path
5266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    env.append_path base_path.join('src')
5366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    env
5466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  end
5566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
5666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  def base_path
5766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    Pathname.new File.expand_path('../..', File.dirname(__FILE__))
5866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  end
5966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
6066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  # Compiles the source file to the dest file. If a block
6166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  # is given, the source file is yielded and replaced with
6266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  # the result. Returns the destination as a Pathname.
6366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  def compile(source = 'gl-matrix.js', dest = 'dist/gl-matrix.js')
6466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    dest = base_path.join dest
6566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    js = sprockets[source]
6666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    js = yield js if block_given?
6766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
6866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    File.open dest, "w" do |f|
6966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      f.puts js
7066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    end
7166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
7266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    puts "compiled #{source} to #{dest.relative_path_from base_path}"
7366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    dest
7466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  end
7566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
7666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  def minify(source = 'gl-matrix.js', dest = 'dist/gl-matrix-min.js')
7766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    dest = compile source, dest do |js|
7866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      Uglifier.compile js
7966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    end
8066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
8166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    puts "minified #{source} to #{dest.relative_path_from base_path}"
8266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  end
8366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
8466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisend
85