#!/usr/bin/env escript %% The MIT License %% Copyright (c) 2010 Alisdair Sullivan %% Permission is hereby granted, free of charge, to any person obtaining a copy %% of this software and associated documentation files (the "Software"), to deal %% in the Software without restriction, including without limitation the rights %% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell %% copies of the Software, and to permit persons to whom the Software is %% furnished to do so, subject to the following conditions: %% The above copyright notice and this permission notice shall be included in %% all copies or substantial portions of the Software. %% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR %% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, %% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE %% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER %% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, %% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN %% THE SOFTWARE. main(Args) -> case Args of ["compile"|Opts] -> compile(Opts) ; ["examples"|Opts] -> examples(Opts) ; ["clean"|Opts] -> clean(Opts) ; ["install"|Opts] -> install(Opts) ; ["uninstall"|Opts] -> uninstall(Opts) end. compile([]) -> Mods = ["src/jsx"], compile_files(Mods, [{outdir, "ebin"}]), compile_backend(). compile_files([], _) -> ok; compile_files([FileName|Rest], Opts) -> case compile:file(FileName, Opts) of {ok, _} -> ok ; {ok, Name, Bin} -> file:write_file("ebin/" ++ atom_to_list(Name) ++ ".beam", Bin), ok end, compile_files(Rest, Opts). compile_backend() -> [ compile_files(["src/jsx_decoder"], [binary, {d, Backend}, {d, name, to_modname(Backend)}]) || Backend <- [utf8, utf16, utf16le, utf32, utf32le] ]. to_modname(Atom) -> list_to_atom("jsx_" ++ atom_to_list(Atom)). examples([]) -> Mods = ["examples/jsx_prettify", "examples/jsx_parser", "examples/jsx_stream_parser", "examples/jsx_verify" ], compile_files(Mods, [{outdir, "ebin"}]). clean([]) -> [ file:delete(Filename) || Filename <- filelib:wildcard("ebin/*.beam") ]. install([]) -> os:cmd("mkdir -p " ++ appdir()), os:cmd("cp -r " ++ "ebin " ++ appdir()). uninstall([]) -> os:cmd("rm -rf " ++ appdir()). appdir() -> {ok, [{application, jsx, AppInfo}]} = file:consult("ebin/jsx.app"), code:lib_dir() ++ "/jsx-" ++ proplists:get_value(vsn, AppInfo).