1b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# Copyright (c) 2013 Brandon Jones, Colin MacKenzie IV
2b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# 
3b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# This software is provided 'as-is', without any express or implied
4b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# warranty. In no event will the authors be held liable for any damages
5b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# arising from the use of this software.
6b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# 
7b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# Permission is granted to anyone to use this software for any purpose,
8b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# including commercial applications, and to alter it and redistribute it
9b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# freely, subject to the following restrictions:
10b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# 
11b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik#  1. The origin of this software must not be misrepresented; you must not
12b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik#     claim that you wrote the original software. If you use this software
13b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik#     in a product, an acknowledgment in the product documentation would be
14b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik#     appreciated but is not required.
15b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# 
16b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik#  2. Altered source versions must be plainly marked as such, and must not
17b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik#     be misrepresented as being the original software.
18b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# 
19b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik#  3. This notice may not be removed or altered from any source distribution.
20b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# 
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