From 61fe5c1574644b441948e9329116f583f35acdf4 Mon Sep 17 00:00:00 2001 From: Bourgerie Quentin Date: Wed, 17 Oct 2012 11:47:27 +0200 Subject: [PATCH] [fix] compiler: Update JavaScriptServer generation using JsPackage --- .../opa/pass_ServerJavascriptOptimization.ml | 2 +- compiler/qml2js/qml2js.ml | 53 ++++++++----------- 2 files changed, 22 insertions(+), 33 deletions(-) diff --git a/compiler/opa/pass_ServerJavascriptOptimization.ml b/compiler/opa/pass_ServerJavascriptOptimization.ml index b12c532f..75abbe7c 100644 --- a/compiler/opa/pass_ServerJavascriptOptimization.ml +++ b/compiler/opa/pass_ServerJavascriptOptimization.ml @@ -111,7 +111,7 @@ let process_code extrajs env_bsl is_exported code = let opp_requires = List.filter_map (fun plugin -> - if List.is_empty plugin.BslPluginInterface.nodejs_code then None + if JsPackage.is_empty plugin.BslPluginInterface.nodejs_pack then None else plugin.BslPluginInterface.basename ) env_bsl.BslLib.direct_external_plugins in diff --git a/compiler/qml2js/qml2js.ml b/compiler/qml2js/qml2js.ml index 8f38dfd3..77be767b 100644 --- a/compiler/qml2js/qml2js.ml +++ b/compiler/qml2js/qml2js.ml @@ -88,7 +88,7 @@ let plugin_main_file plugin = type loaded_bsl = { regular : loaded_file list; - bundled : string option; + bundled : JsPackage.t option; generated_ast: JA.code } @@ -119,7 +119,7 @@ struct (* Write shell script incantation to check dependencies, set load path, etc *) - let launcher_header env_bsl fmt () = + let launcher_header env_bsl = let node_path = ObjectFiles.fold_dir ~packages:true ~deep:true (fun node_path filename -> @@ -135,7 +135,7 @@ struct | Some path -> StringSet.add (Filename.dirname path) node_path ) node_path env_bsl.BslLib.all_plugins in - Format.fprintf fmt + Format.sprintf "#!/usr/bin/env sh /*usr/bin/env true export NODE_PATH=\"%a\" @@ -155,13 +155,11 @@ var opa_dependencies = ['opa-js-runtime-cps']; | "" -> [] | package -> [ "README.md", - (fun fmt () -> - Format.fprintf fmt "\ + (Format.sprintf "\ # %s.opx This is a module generated by Opa compiler (%s) -" package BuildInfos.opa_version_name - ) +" package BuildInfos.opa_version_name) ] (* JS statement to require library [lib] *) @@ -218,11 +216,11 @@ This is a module generated by Opa compiler (%s) let loaded_files = let plugins = env_bsl.BslLib.all_external_plugins in let fold acc loader = - if not (List.is_empty loader.BslPluginInterface.nodejs_code) then + if not (JsPackage.is_empty loader.BslPluginInterface.nodejs_pack) then match plugin_main_file loader with | Some filename -> - let content = File.content filename in - (Plugin filename, content) :: acc + let content = File.content filename in + (Plugin filename, content) :: acc | None -> acc else acc @@ -246,20 +244,11 @@ This is a module generated by Opa compiler (%s) (* Correct reverse order produced by fold *) let loaded_files = List.rev loaded_files in - let bundled, ast = match env_bsl.BslLib.bundled_plugin with | Some plugin -> - let content = String.concat_map "" (fun (filename, content, _) -> - Printf.sprintf "// From file %s\n%s\n" filename content - ) plugin.BPI.nodejs_code in - let code = - try - JsParse.String.code ~throw_exn:true content - with JsParse.Exception error -> ( - OManager.error "JavaScript parser error on bundled plugin\n%a\n" - JsParse.pp error; - ) in - Some content, code @ ast + let pack = plugin.BPI.nodejs_pack in + let code = JsPackage.get_code pack in + Some pack, code @ ast | None -> None, ast in { regular = loaded_files; bundled; generated_ast = ast; } @@ -280,28 +269,28 @@ This is a module generated by Opa compiler (%s) match package with | None -> let package = - JsPackage.default ~name:(ObjectFiles.get_current_package_name ()) in + JsPackage.default + ~name:(Printf.sprintf "%s.opx" (ObjectFiles.get_current_package_name ())) in JsPackage.set_build_dir package env_opt.compilation_directory | Some package -> package in - let package = JsPackage.add_header package - (fun fmt () -> - Format.pp_print_string fmt (Option.default "" bundled_plugin) - ) + let package = match bundled_plugin with + | None -> package + | Some p -> JsPackage.merge p package in let package = List.fold_left JsPackage.add_file package (extrafiles ()) in let package = - Format.eprintf "depends:%a \n" (Format.pp_list ", " Format.pp_print_string) depends; let depends = List.map (fun d -> d, BuildInfos.opa_version_name) depends in JsPackage.add_dependencies package depends in - JsPackage.write package js_code + let package = JsPackage.add_code package js_code in + JsPackage.write package let linking_generation ?depends env_opt env_bsl loaded_bsl env_js_input = let package = JsPackage.default ~name:"link" in let package = JsPackage.set_build_dir package (Filename.dirname env_opt.target) in let package = JsPackage.set_main package (Filename.basename env_opt.target) in - let package = JsPackage.add_header package (launcher_header env_bsl) in + let package = JsPackage.add_verbatim package (launcher_header env_bsl) in let package = JsPackage.set_perm package 0o755 in compilation_generation ?depends ~package env_opt loaded_bsl.bundled env_js_input @@ -341,8 +330,8 @@ This is a module generated by Opa compiler (%s) ); (* Opa plugins *) List.iter - (fun {BPI. has_server_code; path; basename; nodejs_code; _} -> - if not has_server_code || nodejs_code = [] then () + (fun {BPI. has_server_code; path; basename; _} -> + if not has_server_code then () else match path, basename with | Some path, Some name -> let copy file =