(library
 (name batteries_unthreaded)
 (public_name batteries.unthreaded)
 (synopsis "Batteries Included (for use in unthreaded programs)")
 (modules (:standard \ batteries_compattest batConcreteQueue_402 batConcreteQueue_403 batteriesThread batRMutex batMutex))
 (preprocess
  (action (run %{project_root}/build/prefilter.exe %{input-file})))
 (flags (:standard -w -3-32-50-52))
 (libraries num str camlp-streams unix bigarray)
 (inline_tests
   (backend qtest_batteries)
   (deps %{project_root}/qtest/qtest_preamble.ml)
 )
 (wrapped false)
)

(library
 (name batteries)
 (public_name batteries)
 (synopsis "Batteries Included is a community-maintained standard library extension")
 (modules batteriesThread batRMutex batMutex)
 (preprocess
  (action (run %{project_root}/build/prefilter.exe %{input-file})))
 (flags (:standard -w -3-32-50-52))
 (libraries batteries.unthreaded threads)
 (inline_tests
   (backend qtest_batteries)
   (deps %{project_root}/qtest/qtest_preamble.ml)
 )
 (wrapped false)
)

(rule
  (action (copy# batConcreteQueue_402.ml batConcreteQueue.ml))
  (enabled_if (< %{ocaml_version} 4.03))
)

(rule
  (action (copy# batConcreteQueue_403.ml batConcreteQueue.ml))
  (enabled_if (>= %{ocaml_version} 4.03))
)

(library
 (name qtest_batteries)
 (modules)
 (inline_tests.backend
    (generate_runner (pipe-stdout (run qtest extract --preamble-file %{dep:../qtest/qtest_preamble.ml} --quiet %{impl-files} %{intf-files}) (run ../build/prefilter.exe))) ; inline_tests gets unpreprocessed files, so apply prefilter here as well
    (runner_libraries qcheck ounit2)
 ))

(rule
  (target batteriesConfig.ml)
  (deps %{project_root}/build/mkconf.exe %{project_root}/VERSION batteriesConfig.mlp)
  (action
    (run %{project_root}/build/mkconf.exe %{project_root}/VERSION batteriesConfig.mlp %{target})))

(test
 (name batteries_compattest)
 (modules batteries_compattest)
 (preprocess
  (action (run %{project_root}/build/prefilter.exe %{input-file})))
 (libraries batteries))

; documentation works!
;   dune build @doc
;   xdg-open _build/default/_doc/_html/index.html
(documentation
 (mld_files index))

; note: temporary, intro.text should be renamed
(rule (copy ../build/intro.text index.mld))



; note: these copy rules will go away once we have completely
; transitioned to Dune, but for now they are necessary to preserve
; ocamlbuild-friendly source filenames.
(rule (copy batArray.mlv batArray.ml))
(rule (copy batArray.mliv batArray.mli))
(rule (copy batBig_int.mlv batBig_int.ml))
(rule (copy batBig_int.mliv batBig_int.mli))
(rule (copy batBigarray.mlv batBigarray.ml))
(rule (copy batBigarray.mliv batBigarray.mli))
(rule (copy batBuffer.mlv batBuffer.ml))
(rule (copy batBuffer.mliv batBuffer.mli))
(rule (copy batBytes.mlv batBytes.ml))
(rule (copy batBytes.mliv batBytes.mli))
(rule (copy batBytesCompat.mlv batBytesCompat.ml))
(rule (copy batChar.mlv batChar.ml))
(rule (copy batCharParser.mlv batCharParser.ml))
(rule (copy batDigest.mlv batDigest.ml))
(rule (copy batDynArray.mlv batDynArray.ml))
(rule (copy batEither.mlv batEither.ml))
(rule (copy batEither.mliv batEither.mli))
(rule (copy batEnum.mlv batEnum.ml))
(rule (copy batFilename.mlv batFilename.ml))
(rule (copy batFilename.mliv batFilename.mli))
(rule (copy batFloat.mlv batFloat.ml))
(rule (copy batFloat.mliv batFloat.mli))
(rule (copy batFormat.mlv batFormat.ml))
(rule (copy batFormat.mliv batFormat.mli))
(rule (copy batGc.mliv batGc.mli))
(rule (copy batGenlex.mlv batGenlex.ml))
(rule (copy batHashcons.mlv batHashcons.ml))
(rule (copy batHashtbl.mlv batHashtbl.ml))
(rule (copy batInnerIO.mlv batInnerIO.ml))
(rule (copy batInnerPervasives.mlv batInnerPervasives.ml))
(rule (copy batInnerWeaktbl.mlv batInnerWeaktbl.ml))
(rule (copy batInnerWeaktbl.mliv batInnerWeaktbl.mli))
(rule (copy batInt.mlv batInt.ml))
(rule (copy batInt32.mlv batInt32.ml))
(rule (copy batInt32.mliv batInt32.mli))
(rule (copy batInt64.mlv batInt64.ml))
(rule (copy batInt64.mliv batInt64.mli))
(rule (copy batLazyList.mlv batLazyList.ml))
(rule (copy batLexing.mlv batLexing.ml))
(rule (copy batLexing.mliv batLexing.mli))
(rule (copy batList.mlv batList.ml))
(rule (copy batList.mliv batList.mli))
(rule (copy batMap.mlv batMap.ml))
(rule (copy batMap.mliv batMap.mli))
(rule (copy batMarshal.mlv batMarshal.ml))
(rule (copy batMarshal.mliv batMarshal.mli))
(rule (copy batNativeint.mlv batNativeint.ml))
(rule (copy batNativeint.mliv batNativeint.mli))
(rule (copy batOption.mlv batOption.ml))
(rule (copy batOptParse.mlv batOptParse.ml))
(rule (copy batOrd.mlv batOrd.ml))
(rule (copy batPervasives.mlv batPervasives.ml))
(rule (copy batPervasives.mliv batPervasives.mli))
(rule (copy batPrintexc.mliv batPrintexc.mli))
(rule (copy batPrintf.mlv batPrintf.ml))
(rule (copy batPrintf.mliv batPrintf.mli))
(rule (copy batQueue.mliv batQueue.mli))
(rule (copy batRandom.mlv batRandom.ml))
(rule (copy batRandom.mliv batRandom.mli))
(rule (copy batScanf.mlv batScanf.ml))
(rule (copy batScanf.mliv batScanf.mli))
(rule (copy batSeq.mlv batSeq.ml))
(rule (copy batSeq.mliv batSeq.mli))
(rule (copy batSet.mlv batSet.ml))
(rule (copy batSplay.mlv batSplay.ml))
(rule (copy batStream.mlv batStream.ml))
(rule (copy batString.mlv batString.ml))
(rule (copy batString.mliv batString.mli))
(rule (copy batSys.mlv batSys.ml))
(rule (copy batSys.mliv batSys.mli))
(rule (copy batTuple.mlv batTuple.ml))
(rule (copy batUnix.mlv batUnix.ml))
(rule (copy batUTF8.mlv batUTF8.ml))
(rule (copy batteries.mlv batteries.ml))
(rule (copy batteries_compattest.mlv batteries_compattest.ml))
