Get a bunch of new languages working

This commit is contained in:
Radon Rosborough 2021-01-09 14:07:10 -08:00
parent 670fabe177
commit f50c177007
11 changed files with 130 additions and 46 deletions

View File

@ -66,9 +66,15 @@ pkg-debug:
@: $${L} $${T}
make pkg-build L=$(L) T=$(T) CMD=bash
ifneq (,$(Z))
NO_COMPRESS :=
else
NO_COMPRESS := -Znone
endif
pkg-deb:
@: $${L} $${T}
fakeroot dpkg-deb --build $(BUILD)/pkg $(BUILD)/$(DEB)
fakeroot dpkg-deb --build $(NO_COMPRESS) $(BUILD)/pkg $(BUILD)/$(DEB)
pkg: pkg-clean pkg-build pkg-deb
@ -113,7 +119,7 @@ endif
install:
@: $${L} $${T}
if [[ -z "$$(ls -A /var/lib/apt/lists)" ]]; then sudo apt update; fi
sudo apt reinstall -y ./$(BUILD)/$(DEB)
DEBIAN_FRONTEND=noninteractive sudo -E apt reinstall -y ./$(BUILD)/$(DEB)
installs:
@: $${L}

View File

@ -15,16 +15,20 @@ function has {
get "$@" | grep -vq '^null$'
}
function riju-exec {
bash -c "set -euo pipefail; $1"
}
function daemon {
has daemon && eval "$(get daemon)"
has daemon && riju-exec "$(get daemon)"
}
function setup {
has setup && eval "$(get setup)"
has setup && riju-exec "$(get setup)"
}
function repl {
has repl && eval "$(get repl)"
has repl && riju-exec "$(get repl)"
}
function main {
@ -35,11 +39,11 @@ function main {
}
function compile {
has compile && echo "$(get compile)" && eval "$(get compile)"
has compile && echo "$(get compile)" && riju-exec "$(get compile)"
}
function run-only {
has run && echo "$(get run)" && eval "$(get run)"
has run && echo "$(get run)" && riju-exec "$(get run)"
}
function run {
@ -47,12 +51,12 @@ function run {
}
function format {
has format && echo "$(get format.run)" && eval "( $(get format.run) ) < $(get main)"
has format && echo "$(get format.run)" && riju-exec "( $(get format.run) ) < $(get main)"
}
function lsp {
has lsp.setup && echo "$(get lsp.setup)" && eval "$(get lsp.setup)"
has lsp && echo "$(get lsp.start)" && eval "$(get lsp.start)"
has lsp.setup && echo "$(get lsp.setup)" && riju-exec "$(get lsp.setup)"
has lsp && echo "$(get lsp.start)" && riju-exec "$(get lsp.start)"
}
if [[ -z "$NS" ]]; then

View File

@ -114,7 +114,7 @@ export function privilegedTeardown({ uid, uuid }) {
}
export function bash(cmdline) {
if (!cmdline.match(/[;|&(){}=]/)) {
if (!cmdline.match(/[;|&(){}=\n]/)) {
// Reduce number of subshells we generate, if we're just running a
// single command (no shell logic).
cmdline = "exec " + cmdline;

View File

@ -33,9 +33,9 @@ install:
wget https://dl.bintray.com/reznikmm/ada-language-server/linux-latest.tar.gz
tar -xf linux-latest.tar.gz
install -d "${pkg}/usr/local/bin"
install -d "${pkg}/usr/lib/x86_64-linux-gnu"
install -d "${pkg}/usr/local/lib/x86_64-linux-gnu"
mv linux/ada_language_server "${pkg}/usr/local/bin/ada_language_server"
mv linux/*.so* "${pkg}/usr/lib/x86_64-linux-gnu/"
mv linux/*.so* "${pkg}/usr/local/lib/x86_64-linux-gnu/"
main: "main.adb"
template: |

View File

@ -20,6 +20,8 @@ install:
# error: unrecognized command-line option -Wnewline-eof.
CC=/usr/bin/clang CXX=/usr/bin/clang++ llvmenv build-entry -G Makefile -j$(nproc) 10.0.0
llvmenv global 10.0.0
apt:
- gcc
manual: |
git clone https://github.com/jfecher/ante.git
pushd ante
@ -36,7 +38,7 @@ setup: |
main: "main.an"
template: |
puts("Hello, world!".cStr)
print "Hello, world!"
compile: |
ante main.an

View File

@ -6,6 +6,7 @@ name: "AspectC++"
install:
apt:
- aspectc++
- libstdc++-9-dev
main: "main.cpp"
template: |
@ -17,6 +18,6 @@ template: |
}
compile: |
ag++ main.cpp -o main | (grep -v "TO BE FIXED" || true)
CPLUS_INCLUDE_PATH=/usr/include/c++/9 ag++ main.cpp -o main
run: |
./main

View File

@ -24,6 +24,14 @@ install:
- golang
apt:
- yasm
manual: |
install -d "${pkg}/usr/local/bin"
git clone https://github.com/xyproto/battlestar.git
pushd battlestar
make
cp cmd/battlestarc/battlestarc "${pkg}/usr/local/bin/"
cp scripts/bts.sh "${pkg}/usr/local/bin/bts"
popd
main: "main.bts"
template: |

View File

@ -1,6 +1,15 @@
id: "beatnik"
name: "Beatnik"
install:
apt:
- python2
manual: |
install -d "${pkg}/usr/local/bin"
git clone https://github.com/catseye/Beatnik.git
sed -i 's#env python#env python2#' Beatnik/script/beatnik.py
cp Beatnik/script/beatnik.py "${pkg}/usr/local/bin/beatnik"
info:
impl: "Cat's Eye Beatnik"
year: 2001

View File

@ -7,6 +7,34 @@ install:
npm:
- befunge93
- prompt-sync
scripts:
befunge: |
#!/usr/bin/env -S NODE_PATH=/opt/befunge93/lib/node_modules:/opt/prompt-sync/lib/node_modules node
const fs = require("fs");
const Befunge = require("befunge93");
const prompt = require("prompt-sync")();
const befunge = new Befunge();
befunge.onInput = prompt;
befunge.onOutput = (output) => {
if (typeof output === "string") {
process.stdout.write(output);
} else {
process.stdout.write(output + " ");
}
};
const args = process.argv.slice(2);
if (args.length !== 1) {
console.error("usage: befunge FILE");
process.exit(1);
}
befunge.run(fs.readFileSync(args[0], { encoding: "utf-8" })).catch((err) => {
console.error(err);
process.exit(1);
});
info:
impl: "amicloud Befunge-93"
@ -39,4 +67,4 @@ template: |
64+"!dlrow ,olleH">:#,_@
run: |
befunge-repl main.be
befunge main.be

View File

@ -4,4 +4,4 @@ set -euo pipefail
echo "${DOCKER_PASSWORD}" | sudo -E docker login --username "${DOCKER_USERNAME}" --password-stdin
make publish
make publish Z=1

View File

@ -1,3 +1,4 @@
import nodePath from "path";
import process from "process";
import { Command } from "commander";
@ -15,47 +16,72 @@ import { readLangConfig, readSharedDepConfig } from "./config.js";
// package riju-shared-foo rather than a language installation
// package.
function makeLangScript(langConfig, isShared) {
const {
id,
name,
install: { prepare, apt, riju, pip, manual, deb },
} = langConfig;
const { id, name, install } = langConfig;
let parts = [];
parts.push(`\
#!/usr/bin/env bash
set -euxo pipefail`);
if (prepare) {
const { apt, manual } = prepare;
if (apt && apt.length > 0) {
parts.push(`\
let depends = [];
if (install) {
const { prepare, apt, riju, npm, pip, deb, scripts, manual } = install;
if (prepare) {
const { apt, manual } = prepare;
if (apt && apt.length > 0) {
parts.push(`\
export DEBIAN_FRONTEND=noninteractive
sudo apt-get update
sudo apt-get install -y ${apt.join(" ")}`);
}
if (manual) {
parts.push(manual);
}
}
if (npm) {
for (const fullname of npm) {
const basename = fullname.replace(/^[^\/]+\//g, "");
parts.push(`\
install -d "\${pkg}/usr/local/bin"
install -d "\${pkg}/opt/${basename}/lib"
npm install ${fullname} -g --prefix "\${pkg}/opt/${basename}"
if [[ -d "$\{pkg}/opt/${basename}/bin" ]]; then
ls "$\{pkg}/opt/${basename}/bin" | while read name; do
if readlink "\${pkg}/opt/${basename}/bin/\${name}" | grep -q '/${fullname}/'; then
ln -s "/opt/${basename}/bin/\${name}" "\${pkg}/usr/local/bin/\${name}"
fi
done
fi`);
}
}
if (deb) {
parts.push(
deb.map((deb) => `dpkg-deb --extract "${deb}" "\${pkg}"`).join("\n")
);
}
if (scripts) {
for (const [script, contents] of Object.entries(scripts)) {
const path = "${pkg}" + nodePath.resolve("/usr/local/bin", script);
parts.push(`install -d "\${pkg}/usr/local/bin"
cat <<"RIJU-EOF" > "${path}"
${contents}
RIJU-EOF
chmod +x "${path}"`);
}
}
if (manual) {
parts.push(manual);
}
}
if (manual) {
parts.push(manual);
}
if (deb) {
parts.push(
deb.map((deb) => `dpkg-deb --extract "${deb}" "\${pkg}"`).join("\n")
);
}
let depends = [];
if (apt) {
depends = depends.concat(apt);
}
if (riju) {
depends = depends.concat(riju.map((name) => `riju-shared-${name}`));
}
if (deb) {
depends = depends.concat(
deb.map((fname) => `\$(dpkg-deb -f "${fname}" Depends)`)
);
if (apt) {
depends = depends.concat(apt);
}
if (riju) {
depends = depends.concat(riju.map((name) => `riju-shared-${name}`));
}
if (deb) {
depends = depends.concat(
deb.map((fname) => `\$(dpkg-deb -f "${fname}" Depends)`)
);
}
}
parts.push(`depends=(${depends.map((dep) => `"${dep}"`).join(" ")})`);
let debianControlData = `\