(* -*- tuareg -*- *)
(*
 * Copyright (c) 2018-present, Facebook, Inc.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 *)

let common_flags =
  {|(-w +a-4-9-18-40-42-44-48@50
     -strict-formats -strict-sequence
     -short-paths -bin-annot -keep-docs
     -unboxed-types)|}

let ocamlc_flags =
  match Jbuild_plugin.V1.context with
  | "release" -> "-w -26-32 -noassert"
  | _ -> "-g"

let ocamlopt_flags =
  match Jbuild_plugin.V1.context with
  | "release" -> ocamlc_flags ^ " -w -a -O3"
  | _ -> ocamlc_flags

let coverage_ppx =
  match Jbuild_plugin.V1.context with "coverage" -> "bisect_ppx" | _ -> ""

let ppx_flags =
  match Jbuild_plugin.V1.context with "dev" -> "--debug" | _ -> ""

let flags exe_or_lib deps =
  Printf.sprintf
    {|(flags (%s %s))
      (ocamlc_flags (%s))
      (ocamlopt_flags (%s))
      (preprocess
       (pps
         ppx_compare
         ppx_custom_printf
         ppx_deriving_cmdliner
         ppx_expect
         ppx_hash
         ppx_here
         ppx_inline_test
         ppx_sexp_conv
         ppx_sexp_value
         ppx_trace
         %s
         %s))
      %s|}
    common_flags
    (String.concat " "
       (List.map (fun d -> "-open " ^ String.capitalize_ascii d) deps))
    ocamlc_flags ocamlopt_flags ppx_flags coverage_ppx
    (match exe_or_lib with `lib -> "(inline_tests)" | _ -> "")

let libraries deps = String.concat " " deps