package ppx_embed_file

  1. Overview
  2. Docs
A PPX that allows embedding files directly into executables/libraries as strings or bytes

Install

Dune Dependency

Authors

Maintainers

Sources

v0.17.0.tar.gz
sha256=bf53b1c54cc7d542f4f584dd2077e2187b8acbd61088e3c80799fdc0e36021de

Description

Part of the Jane Street's PPX rewriters collection.

Published: 26 May 2024

README

"Ppx_embed_file"

ppx_embed_file is a simple PPX that allows embedding files directly into executables as strings or bytes so that we can embed files into OCaml programs.

How to use

First, in your dune file, specify preprocess to include ppx_embed_file and preprocessor_deps to include any files to be included:

$ cat test/dune
(library (
  (name ppx_embed_test)
  (libraries (core))
  (preprocessor_deps (hello_world.tar.gz hello_world.txt))
  (preprocess (pps (ppx_jane ppx_embed_file)))))

Then, write the appropriate extension nodes in your .ml files:

open! Core

let hello_world_string = [%embed_file_as_string "hello_world.txt"]

let hello_world_string_with_filename =
  [%embed_file_as_string_with_filename "hello_world.txt"]
;;

let hello_world_archived =
  [%embed_file_in_tar_archive_as_string "hello_world.tar.gz:./dir/hello_world.txt"]
;;

let%expect_test "string test" =
  Core.print_string hello_world_string;
  [%expect {xxx| Hello world! |xxx}]
;;

let%expect_test "string with filename test" =
  [%sexp_of: string * string] hello_world_string_with_filename |> Core.print_s;
  [%expect {xxx| (hello_world.txt "Hello world!\n") |xxx}]
;;

let%expect_test "tar test" =
  Core.print_string hello_world_archived;
  [%expect {xxx| Hello world! |xxx}]
;;

Dependencies (6)

  1. ppxlib >= "0.28.0"
  2. dune >= "3.11.0"
  3. shell >= "v0.17" & < "v0.18"
  4. ppx_jane >= "v0.17" & < "v0.18"
  5. core >= "v0.17" & < "v0.18"
  6. ocaml >= "5.1.0"

Dev Dependencies

None

Used by

None

Conflicts

None

OCaml

Innovation. Community. Security.