2024-01-30 11:10:24 +01:00
|
|
|
#!/bin/bash
|
2023-03-09 19:58:08 +01:00
|
|
|
set -e
|
|
|
|
try(){ set +e; "$@" 2>/dev/null; set -e; }
|
2023-11-09 11:24:30 +01:00
|
|
|
trace(){ set -x; "$@"; set +x; }
|
2023-03-09 19:58:08 +01:00
|
|
|
|
|
|
|
install(){
|
2024-04-29 16:28:50 +02:00
|
|
|
|
|
|
|
general(){
|
|
|
|
which haxe || {
|
|
|
|
echo -e "installing haxe..if this fails:\n\n"
|
|
|
|
echo " 1. install haxe from haxe.org"
|
|
|
|
echo "[2.] download neko for cpp output"
|
|
|
|
echo "[3.] install mono openjdk14 for csharp + java output"
|
|
|
|
which apt-get && {
|
|
|
|
sudo apt-get update -y
|
|
|
|
sudo apt-get install neko haxe -y
|
|
|
|
}
|
2023-03-09 21:55:03 +01:00
|
|
|
}
|
2024-04-29 16:28:50 +02:00
|
|
|
mkdir ~/.haxe
|
|
|
|
haxelib setup ~/.haxe
|
|
|
|
haxelib install hxcpp
|
|
|
|
haxelib install hxjava
|
|
|
|
haxelib install hxcs
|
|
|
|
haxelib install hscript
|
|
|
|
which javac && haxelib install hxjava 4.2.0 || "[!] skipping java (no javac found)"
|
|
|
|
which mono && haxelib install hxcs 4.2.0 || "[!] skipping C# (no mono found)"
|
|
|
|
}
|
|
|
|
|
|
|
|
godot(){
|
2024-05-10 13:41:20 +02:00
|
|
|
DIR_GODOT=example/godot
|
|
|
|
test -d $DIR_GODOT/addons || mkdir -p $DIR_GODOT/addons
|
|
|
|
test -d $DIR_GODOT/addons/godot-xr-tools || {
|
|
|
|
cd $DIR_GODOT
|
2024-05-08 09:40:09 +02:00
|
|
|
wget "https://github.com/GodotVR/godot-xr-tools/releases/download/4.3.1/godot-xr-tools.zip"
|
|
|
|
unzip godot-xr-tools.zip
|
|
|
|
mv godot-xr-tools/addons/godot-xr-tools addons/.
|
|
|
|
rm -rf godot-xr-tools*
|
|
|
|
}
|
2023-03-09 19:58:08 +01:00
|
|
|
}
|
2024-04-29 16:28:50 +02:00
|
|
|
|
|
|
|
test -z $1 && general
|
|
|
|
test -z $1 || "$@"
|
2023-03-09 19:58:08 +01:00
|
|
|
}
|
|
|
|
|
2023-03-17 16:06:24 +01:00
|
|
|
tests(){
|
2023-03-30 19:51:32 +02:00
|
|
|
{
|
2023-05-23 17:56:31 +02:00
|
|
|
which node && node test/generated/test.js src/spec/*.json | awk '{ print "js: "$0 } END{ print "\n"}'
|
2023-11-10 18:22:47 +01:00
|
|
|
which python3 && python3 test/generated/test.py src/spec/*.json | awk '{ print "py: "$0 } END{ print "\n"}'
|
2023-03-30 21:32:36 +02:00
|
|
|
} | awk '$2 ~ /src/ { $2=sprintf("%-30s",$2); print $0; next; } 1' | tee /tmp/log.txt
|
2023-03-30 20:08:17 +02:00
|
|
|
grep error /tmp/log.txt && exit 1 || exit 0
|
2023-03-09 19:58:08 +01:00
|
|
|
}
|
|
|
|
|
2023-03-30 15:44:29 +02:00
|
|
|
doc(){
|
2023-06-27 12:15:10 +02:00
|
|
|
set -x
|
|
|
|
awk -f doc/generate.awk src/xrfragment/URI.hx
|
|
|
|
read -p "press enter after copy/pasting into wiki" a
|
|
|
|
awk -f doc/generate.awk src/xrfragment/Parser.hx
|
|
|
|
read -p "press enter after copy/pasting into wiki" a
|
|
|
|
awk -f doc/generate.awk src/xrfragment/Query.hx
|
|
|
|
read -p "press enter after copy/pasting into wiki" a
|
2023-03-30 15:44:29 +02:00
|
|
|
}
|
|
|
|
|
2023-04-21 17:36:03 +02:00
|
|
|
server(){
|
2023-08-04 09:11:26 +02:00
|
|
|
dir=$(pwd)
|
|
|
|
cd /tmp
|
|
|
|
test -f redbean.com || wget https://redbean.dev/redbean-2.2.com -O redbean.com && chmod 755 redbean.com
|
|
|
|
test -f cert.pem || openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem
|
2023-08-08 12:40:38 +02:00
|
|
|
./redbean.com -c 0 -C cert.pem -K key.pem -D $dir
|
2023-04-21 17:36:03 +02:00
|
|
|
}
|
|
|
|
|
2023-04-20 22:30:04 +02:00
|
|
|
build(){
|
2023-05-04 16:26:22 +02:00
|
|
|
|
2024-02-23 23:02:07 +01:00
|
|
|
aframe(){
|
|
|
|
test -d src/3rd/js/aframe/build/aframe || git clone https://github.com/aframevr/aframe src/3rd/js/aframe/build/aframe --depth=1
|
|
|
|
curdir=$(pwd)
|
|
|
|
cd src/3rd/js/aframe/build && cp three.module.js aframe/src/lib/. # override to add extra loaders like fbx/collada e.g.
|
2024-02-29 10:57:20 +01:00
|
|
|
#cd aframe && npm install && npm install troika-three-text && npm run dist
|
|
|
|
cd aframe && npm install && npm run dist
|
2024-02-23 23:02:07 +01:00
|
|
|
cd "$curdir"
|
|
|
|
cp src/3rd/js/aframe/build/aframe/dist/aframe-master.min.js dist/aframe.min.js
|
|
|
|
test -f dist/aframe-blink-controls.min.js || {
|
|
|
|
wget "https://cdn.jsdelivr.net/npm/aframe-blink-controls/dist/aframe-blink-controls.min.js" -O dist/aframe-blink-controls.min.js
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-11-09 11:24:30 +01:00
|
|
|
parser(){
|
2024-02-01 20:10:41 +01:00
|
|
|
try rm dist/xrfragment.*
|
2023-11-16 14:50:57 +01:00
|
|
|
haxe build.hxml || exit 1
|
2023-11-09 11:24:30 +01:00
|
|
|
sed -i 's|.*nonlocal .*||g' dist/xrfragment.py
|
|
|
|
ls -lah dist/*
|
|
|
|
echo -e "[OK] parser build\n"
|
2023-11-09 12:15:09 +01:00
|
|
|
return $ok
|
2023-11-09 11:24:30 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
js(){
|
2024-01-03 15:23:34 +01:00
|
|
|
|
|
|
|
jscat(){ echo "(function(){"; cat "$@"; echo "}).apply({})"; }
|
|
|
|
|
2023-11-09 11:24:30 +01:00
|
|
|
# add js module
|
2023-11-09 11:55:26 +01:00
|
|
|
cat dist/xrfragment.js >> dist/xrfragment.module.js
|
2023-11-09 11:24:30 +01:00
|
|
|
echo "export default xrfragment;" >> dist/xrfragment.module.js
|
2023-12-06 15:20:58 +01:00
|
|
|
|
2023-11-09 11:24:30 +01:00
|
|
|
# add THREE
|
|
|
|
cat dist/xrfragment.js \
|
|
|
|
src/3rd/js/*.js \
|
|
|
|
src/3rd/js/three/*.js \
|
|
|
|
src/3rd/js/three/xrf/*.js \
|
2023-11-09 11:27:04 +01:00
|
|
|
src/3rd/js/three/util/*.js \
|
2023-11-09 11:24:30 +01:00
|
|
|
src/3rd/js/three/xrf/dynamic/*.js \
|
|
|
|
src/3rd/js/three/xrf/src/*.js > dist/xrfragment.three.js
|
2023-12-06 15:20:58 +01:00
|
|
|
|
2023-11-09 11:24:30 +01:00
|
|
|
# add THREE module
|
|
|
|
cat dist/xrfragment.three.js > dist/xrfragment.three.module.js
|
|
|
|
echo "export default xrf;" >> dist/xrfragment.three.module.js
|
2023-12-06 15:20:58 +01:00
|
|
|
|
2023-11-09 11:24:30 +01:00
|
|
|
# add AFRAME
|
|
|
|
cat dist/xrfragment.three.js \
|
2023-12-06 15:20:58 +01:00
|
|
|
src/3rd/js/aframe/*.js \
|
|
|
|
example/assets/js/qr.js > dist/xrfragment.aframe.js
|
2023-12-19 20:40:40 +01:00
|
|
|
|
2023-12-28 10:46:48 +01:00
|
|
|
# plugins
|
2024-06-04 19:00:48 +02:00
|
|
|
jscat src/3rd/js/plugin/frontend/{network,\$connections,\$chat,debug}.js > dist/xrfragment.plugin.network.js
|
2024-03-18 18:14:16 +01:00
|
|
|
cp src/3rd/js/plugin/frontend/\$editor.js dist/xrfragment.plugin.editor.js
|
|
|
|
|
|
|
|
cp src/3rd/js/plugin/frontend/css.js dist/xrfragment.plugin.frontend.css.js
|
2024-12-11 10:52:27 +01:00
|
|
|
jscat src/3rd/js/plugin/frontend/{snackbar,accessibility,\$menu,frontend,chatcommand/*,joystick}.js > dist/xrfragment.plugin.frontend.js
|
2024-03-18 18:14:16 +01:00
|
|
|
|
2024-01-03 15:23:34 +01:00
|
|
|
jscat src/3rd/js/plugin/matrix/{matrix-crdt,matrix}.js > dist/xrfragment.plugin.matrix.js
|
|
|
|
jscat src/3rd/js/plugin/p2p/{trystero-torrent.min,trystero}.js > dist/xrfragment.plugin.p2p.js
|
2024-07-17 15:54:57 +02:00
|
|
|
|
|
|
|
# all in one
|
2024-01-30 11:08:03 +01:00
|
|
|
cat dist/aframe.min.js dist/aframe-blink-controls.min.js dist/xrfragment.aframe.js > dist/xrfragment.aframe.all.js
|
2024-07-17 15:54:57 +02:00
|
|
|
|
|
|
|
# model-viewer
|
|
|
|
cat dist/xrfragment.aframe.all.js src/3rd/js/model-viewer/*.js > dist/xrfragment.model-viewer.js
|
2023-12-06 15:20:58 +01:00
|
|
|
|
2023-11-09 11:55:26 +01:00
|
|
|
# add license headers
|
2024-08-01 16:25:05 +02:00
|
|
|
for file in dist/xrfragmen*.js; do
|
2023-11-09 12:15:09 +01:00
|
|
|
awk 'BEGIN{
|
|
|
|
print "/*"
|
2024-04-24 12:18:57 +02:00
|
|
|
print " * '"$(git tag | head -n1)"' generated at '"$(date)"'"
|
2023-11-09 12:15:09 +01:00
|
|
|
print " * https://xrfragment.org"
|
2024-08-01 16:25:05 +02:00
|
|
|
print " * SPDX-License-Identifier: AGPL-3.0-or-later"
|
2023-11-09 12:15:09 +01:00
|
|
|
print " */"
|
|
|
|
system("cat '$file'")
|
|
|
|
}' > /tmp/tmp.js
|
|
|
|
mv /tmp/tmp.js $file
|
|
|
|
done
|
2023-12-06 15:20:58 +01:00
|
|
|
|
|
|
|
|
2023-11-09 12:15:09 +01:00
|
|
|
ls -la dist | grep js
|
|
|
|
return $ok
|
2023-11-09 11:24:30 +01:00
|
|
|
}
|
|
|
|
|
2024-02-29 10:57:20 +01:00
|
|
|
test -z $1 && { parser && aframe && js; }
|
2023-11-09 11:24:30 +01:00
|
|
|
test -z $1 || "$@"
|
2023-04-20 22:30:04 +02:00
|
|
|
}
|
|
|
|
|
2023-12-06 15:20:58 +01:00
|
|
|
repos(){
|
|
|
|
release_dir(){
|
|
|
|
slug=xrfragment-$1-helloworld
|
|
|
|
test -d ../$slug || git clone git@github.com:coderofsalvation/$slug.git ../$slug
|
|
|
|
pushd $(pwd)
|
|
|
|
cp example/assets/index.glb ../$2/index.glb
|
|
|
|
cat example/$1/sandbox/index.html | \
|
|
|
|
sed 's|href=".*/assets|href="https://xrfragment.org/example/assets|g' | \
|
|
|
|
sed 's|"\./.*/dist|"https://xrfragment.org/dist|g' | \
|
|
|
|
sed 's|"\./.*/assets|"https://xrfragment.org/example/assets|g' \
|
|
|
|
> ../$2/index.html
|
|
|
|
test -z $COMMIT || {
|
|
|
|
set -x; cd ../$slug ; set +x
|
|
|
|
git add index.html
|
|
|
|
git commit -m "update index.html to commit $(git log | awk '{ print $1; exit 0; }') from xrfragment-repo"
|
|
|
|
git push origin main
|
|
|
|
popd
|
|
|
|
}
|
|
|
|
echo " "
|
|
|
|
}
|
|
|
|
|
2023-12-08 13:35:19 +01:00
|
|
|
release_dir aframe xrfragment-aframe-helloworld
|
|
|
|
release_dir three xrfragment-three-helloworld
|
|
|
|
release_dir aframe xrfragment-helloworld
|
2023-12-06 15:20:58 +01:00
|
|
|
|
|
|
|
# remove aframe reference
|
|
|
|
sed -i 's|<script src="https:\/\/aframe.*||g' ../xrfragment-helloworld/index.html
|
2023-12-19 20:40:40 +01:00
|
|
|
sed -i 's|<script src=".*extras.*||g' ../xrfragment-helloworld/index.html
|
2023-12-06 15:20:58 +01:00
|
|
|
sed -i 's|<script src=".*blink-controls.*||g' ../xrfragment-helloworld/index.html
|
2024-02-01 20:10:41 +01:00
|
|
|
sed -i 's|aframe\.js|aframe.js|g' ../xrfragment-helloworld/index.html
|
2023-12-06 15:20:58 +01:00
|
|
|
}
|
|
|
|
|
2023-04-20 22:30:04 +02:00
|
|
|
test -z $1 && build
|
2023-03-09 19:58:08 +01:00
|
|
|
test -z $1 || "$@"
|
2023-12-13 19:18:12 +01:00
|
|
|
|