File: generate-dune-rules

package info (click to toggle)
ocaml-stdcompat 21.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 7,648 kB
  • sloc: ml: 34,677; sh: 830; makefile: 239
file content (53 lines) | stat: -rwxr-xr-x 1,000 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/bin/sh

rules_file=dune-rules.inc
generated_files=_generated-files

write_dune_rule()
{
  src=$1
  dst=$2
  echo $dst >> $generated_files
  case $src in
    *.c.in|*.h.in) source_type=c;;
    *) source_type=ocaml    
  esac
  # echo Writing Dune rule to generate $dst from $src, source_type=$source_type
  cat >> $rules_file << EOF
(rule
  (targets $dst)
  (deps
    (:gen tools/stdcompatpp.exe) $src)
    (action
      (with-stdin-from $src
        (with-stdout-to $dst
          (run %{gen} --source-type $source_type)))))
EOF
}

genrule1()
{
  input=$1
  # echo One file: $input
  write_dune_rule $input.in $input
}

genrule2()
{
  input=$1
  src=${input##*:}
  dst=${input%%:*}
  # echo Two files: src=$src dst=$dst
  write_dune_rule $src $dst
}

rm -f $rules_file $generated_files

grep CONFIG_FILES configure.ac | grep -v META | sed 's/AC_CONFIG_FILES([[]\([^]]\+\)[]])/\1/g' | \
(while read input; do
  case "$input" in
    *:*) genrule2 $input;;
    *) genrule1 $input;;
  esac;
done)