File: build

package info (click to toggle)
laby 0.7.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 908 kB
  • sloc: ml: 3,823; xml: 133; sh: 115; pascal: 88; java: 70; perl: 69; php: 69; ansic: 68; javascript: 64; cpp: 59; makefile: 51; ruby: 48; python: 40; lisp: 32
file content (114 lines) | stat: -rwxr-xr-x 3,175 bytes parent folder | download | duplicates (2)
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#!/bin/bash

cd $(dirname $0)

[ -f project.conf ] && source project.conf
source build.conf || exit 1

export PREFIX=${PREFIX-/usr}
export DATADIR=${DATADIR-${PREFIX}/share}
export TMPDIR=${TMPDIR-/tmp}

export PROJECT_NAME=${PROJECT_NAME-unknown}
export PROJECT_VERSION=${PROJECT_VERSION-unknown}

export OCAMLFIND=${OCAMLFIND-ocamlfind}
export OCAMLBUILD=${OCAMLBUID-ocamlbuild}

export OCAML_VERSION=$($OCAMLFIND ocamlc -version)
ocaml_config () {
  ${OCAMLFIND} ocamlc -config | sed -n 's/^'"$1"': //p' | tr -c -d '[:alnum:]'
}
export OCAML_SYSTEM=$(ocaml_config system)
export OCAML_ARCH=$(ocaml_config architecture)

SYSARCH="${OCAML_SYSTEM}-${OCAML_ARCH}"
BUILDDIR="_build-${SYSARCH}"

[ -n "${OCAML_VERSION}" -a -n "${SYSARCH}" ] || \
  { echo "Error: compilation requires OCaml compilers and ocamlfind"; exit 1; }

export PKG_VERSION="${OCAMLFIND} query -format %v"

[ -n "${THREADS}" ] && OCBF="${OCBF} -tag thread"
[ -n "${TAGS}" ] && OCBF="${OCBF} -tags ${TAGS}"
[ -n "${TAGLINE}" ] && OCBF="${OCBF} -tag-line ${TAGLINE}"
[ -n "${JOBS}" ] && OCBF="${OCBF} -j ${JOBS}"

OCBF="${OCBF} -use-ocamlfind -pkgs $PACKAGES -libs $LIBRARIES -Is $SRCDIRS"

OCBI="${OCAMLBUILD} -no-sanitize -no-hygiene -build-dir ${BUILDDIR} ${OCBF}"

ACT="${1---all}"
shift
[ $# == 0 ] && set ${BINS} ${LIBS}

BINTARGETS=""
LIBTARGETS=""
for i in "$@"; do
  for k in ${BINS}; do [ "$k" == "$i" ] && BINTARGETS="${BINTARGETS} $i"; done
  for k in ${LIBS}; do [ "$k" == "$i" ] && LIBTARGETS="${LIBTARGETS} $i"; done
done

tclean () {
      for i in ${AUXTARGETS}; do rm -rf "$i"; done
      for i in ${BINTARGETS}; do rm -rf "$(basename $i)"; done
      for i in ${LIBTARGETS}; do
	  for j in cma cmxa d.cma p.cmxa; do rm -rf "$(basename $i).$j"; done
      done
}

case ${ACT} in
  --help|-h)
      echo "usage: $0 action [targets]"
      echo "options:"
      echo "  --all (-a)"
      echo "  --byte (-b)"
      echo "  --native (-n)"
      echo "  --byte-debug (-bd)"
      echo "  --native-profile (-np)"
      echo "  --clean (-c)"
      exit 0;;
  --clean|-c)
      ${OCBI} -clean
      [ -f "${CONF}.sh" ] && rm -rf "${CONF}.ml"
      tclean
      exit 0;;
  --target|-t)
      ${OCBI} "$@"
      exit 0;;
  --all|-a) LNK="native"; BINEXT="native byte"; LIBEXT="cmxa cma";;
  --byte|-b) LNK="byte"; BINEXT="byte"; LIBEXT="cma";;
  --byte-debug|-bd) LNK="d.byte"; BINEXT="d.byte"; LIBEXT="d.cma";;
  --native|-n) LNK="native"; BINEXT="native"; LIBEXT="cmxa";;
  --native-profile|-np) LNK="p.native"; BINEXT="p.native"; LIBEXT="p.cmxa";;
  *) echo "unknown action"; exit 1;;
esac

TARGETS=""
for i in ${BINTARGETS}; do
  for j in ${BINEXT}; do TARGETS="${TARGETS} $i.$j"; done
done
for i in ${LIBTARGETS}; do
  for j in ${LIBEXT}; do TARGETS="${TARGETS} $i.$j"; done
done

echo Building "${PROJECT_NAME}-${PROJECT_VERSION} for ${SYSARCH}"
export THREADS
[ -f "${CONF}.sh" ] && sh "${CONF}.sh" > "${CONF}.ml"

tclean

${OCBI} ${TARGETS} ${AUXTARGETS} || exit 1

# linking

[ -n "${LNK}" ] &&
for i in ${BINTARGETS}; do cp "${BUILDDIR}/${i}.${LNK}" "$(basename $i)"; done

for i in ${LIBTARGETS}; do
  for j in ${LIBEXT}; do cp "${BUILDDIR}/$i.$j" "$(basename $i.$j)"; done
done

exit 0