* move libffi to base/ Category
[t2sde.git] / package / develop / vlang / new_buildscript.patch
blob8adf94e682a376d9899e15ac4b72648083acc250
1 # --- T2-COPYRIGHT-BEGIN ---
2 # t2/package/*/vlang/new_buildscript.patch
3 # Copyright (C) 2025 The T2 SDE Project
4 # SPDX-License-Identifier: GPL-2.0 or patched project license
5 # --- T2-COPYRIGHT-END ---
7 diff --git a/build.sh b/build.sh
8 new file mode 100755
9 index 000000000..aae8070be
10 --- /dev/null
11 +++ b/build.sh
12 @@ -0,0 +1,215 @@
13 +#/bin/bash
14 +set -e
16 +install=0
17 +force_boostrap=0
18 +show_help=0
19 +while [[ $# -gt 0 ]]; do
20 + arg="$1"
22 + key=$(echo $arg | cut -sd'=' -f1)
23 + val=$(echo $arg | cut -sd'=' -f2)
25 + case $arg in
26 + help)
27 + show_help=1
28 + ;;
29 + --help)
30 + show_help=1
31 + ;;
32 + -help)
33 + show_help=1
34 + ;;
35 + build)
36 + if ! [ -z $val ]; then
37 + echo "argument $arg expected no value"
38 + exit 1
39 + fi
40 + # ignore for now
41 + ;;
42 + install)
43 + if ! [ -z $val ]; then
44 + echo "argument $arg expected no value"
45 + exit 1
46 + fi
47 + install=1
48 + ;;
49 + clean)
50 + if ! [ -z $val ]; then
51 + echo "argument $arg expected no value"
52 + exit 1
53 + fi
54 + # ignore for now
55 + ;;
56 + force-bootstrap)
57 + if ! [ -z $val ]; then
58 + echo "argument $arg expected no value"
59 + exit 1
60 + fi
61 + force_boostrap=1
62 + ;;
63 + *)
64 + echo "unknown argument: $arg"
65 + ;;
66 + esac
68 + shift # Move to the next argument
69 +done
71 +if ((show_help)); then
72 + echo "usage: ./build.sh [build|install|clean] (force-bootstrap)"
73 + exit 0
74 +fi
77 +test_prog () {
78 + echo "$1" > ".check.c"
79 + if $CC $2 ".check.c" -o ".check.exe" 2>/dev/null; then
80 + echo 1
81 + else
82 + echo 0
83 + fi
86 +check_cc_arg () {
87 + test_prog "int main() {return 0;}" $1
90 +check_include () {
91 + test_prog "#include <$1>
92 + int main() { return 0; }"
96 +# ==================================== #
97 +echo -n "checking for cc: "
98 +if [ -z $CC ]; then
99 + if command -v cc 2>&1 > /dev/null; then
100 + CC=$(which cc)
101 + echo $CC
102 + else
103 + echo no
104 + echo Please manually set \$CC
105 + exit 1
106 + fi
108 +# ==================================== #
109 +echo -n "can cc compile simple program: "
110 +if [ $(test_prog "int main() {return 0;}") = 1 ]; then
111 + echo yes
112 +else
113 + echo no
114 + echo Please set \$CC to a working C compiler
115 + exit 1
117 +# ==================================== #
118 +backtrace=0
119 +echo -n "checking for backtrace(): "
120 +if [ $(test_prog "int main() {void* buf[1]; (void) backtrace(buf, 1);}") = 1 ]; then
121 + echo yes
122 + backtrace=1
123 +else
124 + echo no
126 +# ==================================== #
127 +echo -n "checking for v: "
128 +have_v=0
129 +if command -v v 2>&1 > /dev/null; then
130 + have_v=1
131 + echo yes
132 +else
133 + echo no
135 +# ==================================== #
136 +echo -n "checking for downloader: "
137 +if command -v wget 2>&1 > /dev/null; then
138 + downloader=wget
139 + echo wget
140 +elif command -v curl 2>&1 > /dev/null; then
141 + downloader=curl
142 + echo curl
143 +else
144 + echo no curl or wget found in path
145 + exit 1
147 +# ==================================== #
148 +echo -n "checking for libgc: "
149 +if [ "$(check_cc_arg "-lgc")" = "1" ]; then
150 + echo yes
151 +else
152 + echo no
153 + echo please install libgc / gc-boehem
154 + exit 1
156 +# ==================================== #
157 +echo -n "checking for bindir: "
158 +if ! [ -z $BINDIR ]; then
159 + echo $BINDIR
160 +elif [ -d /usr/bin ]; then
161 + BINDIR=/usr/bin
162 + echo $BINDIR
163 +else
164 + echo could not find bin dir. manually set \$BINDIR
165 + exit 1
167 +# ==================================== #
170 +download () {
171 + if [ "$downloader" = "wget" ]; then
172 + wget "$2" -O "$1"
173 + elif [ "$downloader" = "curl" ]; then
174 + curl "$2" -o "$1"
175 + fi
179 +VFLAGS="-d dynamic_boehm"
180 +if ((!backtrace)); then
181 + VFLAGS+=" -d no_backtrace"
184 +if ((!have_v)); then
185 + force_boostrap=1
188 +if ((!force_boostrap)); then
189 + echo "skipping stage 1 (boostrap) because V in path, and force-bootstrap argument not set"
190 + stage1_cmd="v"
191 +else
192 + if [ -f "v.c" ]; then
193 + echo "boostrap (v.c) already downloaded, skipping"
194 + else
195 + echo "download boostrap (v.c)"
196 + download "v.c" "https://raw.githubusercontent.com/vlang/vc/f553add34becae265cd107b55d0d0b9907fc1b6d/v.c"
197 + fi
199 + echo "compile stage 1 (boostrap)"
200 + $CC v.c -o v1.exe -std=c99 -lpthread -lm -w
202 + stage1_cmd="./v1.exe"
205 +echo "compile stage 2"
206 +"$stage1_cmd" -no-parallel -o v2.exe $VFLAGS -d tools_vflags="$VFLAGS" cmd/v
208 +echo "compile stage 3"
209 +./v2.exe -nocache -o v3.exe $VFLAGS -d tools_vflags="$VFLAGS" cmd/v
211 +if ((install)); then
212 + echo "installing to /opt/vlang"
213 + mkdir -p /opt/vlang
214 + cp v3.exe "/opt/vlang/v"
215 + cp -r vlib "/opt/vlang/"
216 + cp -r thirdparty "/opt/vlang/"
217 + cp -r doc "/opt/vlang/"
218 + cp -r cmd "/opt/vlang/"
219 + cp v.mod "/opt/vlang/"
220 + cp LICENSE "/opt/vlang/"
222 + echo "creating symlink"
223 + if [ -f "$BINDIR/v" ]; then
224 + rm "$BINDIR/v"
225 + fi
226 + ln -s "/opt/vlang/v" "$BINDIR/v"