123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- (*
- * Haxe installer
- * Copyright (c)2005 Nicolas Cannasse
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *)
- #load "unix.cma"
- (* ----- BEGIN CONFIGURATION ---- *)
- let bytecode = false
- let native = true
- (* ------ END CONFIGURATION ----- *)
- let os_type = Sys.os_type
- (* remove the comment to compile with windows using ocaml cygwin *)
- (* let os_type = "Cygwin" *)
- let obj_ext = match os_type with "Win32" -> ".obj" | _ -> ".o"
- let exe_ext = match os_type with "Win32" | "Cygwin" -> ".exe" | _ -> ""
- let ocamloptflags = match os_type with "Unix" -> "-cclib -fno-stack-protector " | _ -> ""
- let zlib_path = match os_type with
- | "Win32" -> "libs/extc/zlib/"
- | _ -> "./"
- let zlib = match os_type with
- | "Win32" -> zlib_path ^ "zlib.lib"
- | _ ->
- try
- List.find Sys.file_exists ["/usr/lib/libz.dylib";"/usr/lib64/libz.so.1";"/usr/lib/libz.so.1";"/lib/libz.so.1";"/usr/lib/libz.so.4.1";"/lib/x86_64-linux-gnu/libz.so.1"]
- with
- Not_found ->
- failwith "LibZ was not found on your system, please install it or modify the search directories in the install script"
- let msg m =
- prerr_endline m;
- flush stdout
- let command c =
- msg ("> " ^ c);
- if Sys.command c <> 0 then failwith ("Error while running " ^ c)
- let cvs root cmd =
- command ("cvs -z3 -d" ^ root ^ " " ^ cmd)
- let ocamlc file =
- if bytecode then command ("ocamlc -c " ^ file);
- if native then command ("ocamlopt -c " ^ ocamloptflags ^ file)
- let modules l ext =
- String.concat " " (List.map (fun f -> f ^ ext) l)
- ;;
- let download() =
- command "svn co http://haxe.googlecode.com/svn/trunk haxe";
- in
- let compile_libs() =
- Sys.chdir "haxe/libs";
- (* EXTLIB *)
- Sys.chdir "extlib";
- command ("ocaml install.ml -nodoc -d .. " ^ (if bytecode then "-b " else "") ^ (if native then "-n" else ""));
- msg "";
- Sys.chdir "..";
- (* EXTC *)
- Sys.chdir "extc";
- let c_opts = (if Sys.ocaml_version < "3.08" then " -ccopt -Dcaml_copy_string=copy_string " else " ") in
- command ("ocamlc" ^ c_opts ^ " -I .. -I ../../" ^ zlib_path ^ " extc_stubs.c");
- let options = "-cclib libs/extc/extc_stubs" ^ obj_ext ^ " -cclib " ^ zlib ^ " extc.ml" in
- let options = if Sys.os_type = "Win32" then options ^ " -cclib shell32.lib" else options in
- if bytecode then command ("ocamlc -a -I .. -o extc.cma " ^ options);
- if native then command ("ocamlopt -a -I .. -o extc.cmxa " ^ options);
- Sys.chdir "..";
- (* SWFLIB *)
- Sys.chdir "swflib";
- let files = "-I .. -I ../extc as3.mli as3hl.mli as3code.ml as3parse.ml as3hlparse.ml swf.ml actionScript.ml swfParser.ml png.mli png.ml" in
- if bytecode then command ("ocamlc -a -o swflib.cma " ^ files);
- if native then command ("ocamlopt -a -o swflib.cmxa " ^ files);
- Sys.chdir "..";
- (* NEKO *)
- Sys.chdir "neko";
- let files = "-I .. nast.ml nxml.ml binast.ml nbytecode.ml ncompile.ml" in
- if bytecode then command ("ocamlc -a -o neko.cma " ^ files);
- if native then command ("ocamlopt -a -o neko.cmxa " ^ files);
- Sys.chdir "..";
- (* ZIPLIB *)
- Sys.chdir "ziplib";
- let files = "-I .. -I ../extc zlib.mli zlib.ml zip.mli zip.ml" in
- if bytecode then command ("ocamlc -a -o zip.cma " ^ files);
- if native then command ("ocamlopt -a -o zip.cmxa " ^ files);
- Sys.chdir "..";
- (* JAVALIB *)
- Sys.chdir "javalib";
- let files = "-I .. jData.ml jReader.ml" in
- if bytecode then command ("ocamlc -a -o java.cma " ^ files);
- if native then command ("ocamlopt -a -o java.cmxa " ^ files);
- Sys.chdir "..";
- (* TTFLIB *)
- Sys.chdir "ttflib";
- let files = "-I .. -I ../extlib -I ../swflib tTFData.ml tTFParser.ml tTFTools.ml tTFSwfWriter.ml tTFCanvasWriter.ml tTFJsonWriter.ml main.ml" in
- if bytecode then command ("ocamlc -a -o ttf.cma " ^ files);
- if native then command ("ocamlopt -a -o ttf.cmxa " ^ files);
- Sys.chdir "..";
- (* XML-LIGHT *)
- Sys.chdir "xml-light";
- command ("ocamlyacc xml_parser.mly");
- command ("ocamlc xml.mli dtd.mli xml_parser.mli xml_lexer.mli");
- command ("ocamllex xml_lexer.mll");
- let files = "xml_parser.ml xml_lexer.ml dtd.ml xmlParser.mli xmlParser.ml xml.ml" in
- if bytecode then command ("ocamlc -a -o xml-light.cma " ^ files);
- if native then command ("ocamlopt -a -o xml-light.cmxa " ^ files);
- Sys.chdir "..";
- Sys.chdir "../..";
- in
- let compile() =
- (try Unix.mkdir "bin" 0o740 with Unix.Unix_error(Unix.EEXIST,_,_) -> ());
- Sys.chdir "haxe";
- (* HAXE *)
- command "ocamllex lexer.mll";
- let libs = [
- "libs/extLib";
- "libs/extc/extc";
- "libs/swflib/swflib";
- "libs/xml-light/xml-light";
- "libs/neko/neko";
- "libs/javalib/java";
- "unix";
- "libs/ziplib/zip";
- "str";
- "libs/ttflib/ttf"
- ] in
- let paths = [
- "libs";
- "libs/swflib";
- "libs/xml-light";
- "libs/extc";
- "libs/neko";
- "libs/ziplib";
- "libs/javalib";
- "libs/ttflib"
- ] in
- let mlist = [
- "ast";"lexer";"type";"common";"parser";"typecore";
- "genxml";"optimizer";"typeload";"codegen";
- "gencommon"; "genneko";"genas3";"genjs";"genswf8";"genswf9";"genswf";"genphp";"gencpp"; "gencs";"genjava";
- "interp";"typer";"matcher";"dce";"main";
- ] in
- let path_str = String.concat " " (List.map (fun s -> "-I " ^ s) paths) in
- let libs_str ext = " " ^ String.concat " " (List.map (fun l -> l ^ ext) libs) ^ " " in
- ocamlc (path_str ^ " -pp camlp4o " ^ modules mlist ".ml");
- if bytecode then command ("ocamlc -custom -o ../bin/haxe-byte" ^ exe_ext ^ libs_str ".cma" ^ modules mlist ".cmo");
- if native then command ("ocamlopt -o ../bin/haxe" ^ exe_ext ^ libs_str ".cmxa" ^ modules mlist ".cmx");
- in
- let make_std() =
- if Sys.file_exists "../bin/std" then command (if os_type = "Win32" then "rmdir /S /Q ..\\bin\\std" else "rm -rf ../bin/std");
- command "svn export -q std ../bin/std";
- in
- let startdir = Sys.getcwd() in
- try
- download();
- compile_libs();
- compile();
- make_std();
- Sys.chdir startdir;
- with
- Failure msg ->
- Sys.chdir startdir;
- prerr_endline msg; exit 1
|