<?php

$copyrightInfo = '/*
 * Crypto-JS v2.5.1
 * http://code.google.com/p/crypto-js/
 * (c) 2009-2011 by Jeff Mott. All rights reserved.
 * http://code.google.com/p/crypto-js/wiki/License
 */
';

$files = array('crypto', 'md5', 'sha1', 'sha256', 'hmac', 'pbkdf2', 'pbkdf2async',
               'marc4', 'rabbit', 'aes', 'des', 'blockmodes');
$rollups = array(
	array('crypto', 'md5'),
	array('crypto', 'sha1'),
	array('crypto', 'sha256'),
	array('crypto', 'md5', 'hmac'),
	array('crypto', 'sha1', 'hmac'),
	array('crypto', 'sha256', 'hmac'),
	array('crypto', 'sha1', 'hmac', 'pbkdf2'),
	array('crypto', 'sha1', 'hmac', 'pbkdf2async'),
	array('crypto', 'sha1', 'hmac', 'pbkdf2', 'marc4'),
	array('crypto', 'sha1', 'hmac', 'pbkdf2', 'rabbit'),
	array('crypto', 'sha1', 'hmac', 'pbkdf2', 'blockmodes', 'aes'),
	array('crypto', 'sha1', 'hmac', 'pbkdf2', 'blockmodes', 'des')
);

foreach ($files as $file) {
	mkdir("../build/$file");
	$js = file_get_contents("../src/$file.js");
	file_put_contents("../build/$file/$file.js", $copyrightInfo . $js);
	file_put_contents("../build/$file/$file-min.js", $copyrightInfo . compress($js));
}

foreach ($rollups as $rollup) {
	$rollupName = implode("-", $rollup);
	mkdir("../build/$rollupName");
	$js = '';
	foreach ($rollup as $file) $js .= file_get_contents("../src/$file.js");
	file_put_contents("../build/$rollupName/$rollupName.js", $copyrightInfo . compress($js));
}

function compress($js) {

	$cmd = 'java -jar compiler/compiler.jar';

	$descriptors = array(
		0 => array('pipe', 'r'),
		1 => array('pipe', 'w'),
		2 => array('pipe', 'w')
	);

	$process = proc_open($cmd, $descriptors, $pipes);
	if ($process === false) die();

	fwrite($pipes[0], $js);
	fclose($pipes[0]);

	$compressed = stream_get_contents($pipes[1]);
	fclose($pipes[1]);

	$errors = stream_get_contents($pipes[2]);
	fclose($pipes[2]);

	$exitStatus = proc_close($process);

	if ($exitStatus != 0 or $errors != '') die();

	return $compressed;

}
