cadcraft-studio
LOW
maintainer alerque
0 votes
scanned 2026-10-19 09:25:06.082550
Why flagged
Uploaded within the last 14 days with 2 or fewer community votes — little peer review so far.
Triggered rules
Low
Few votes, recently uploaded
zero_votes_recent
Uploaded within the last 14 days with 2 or fewer community votes — little peer review so far.
PKGBUILD
1
# Maintainer: Caleb Maclennan <caleb@alerque.com>
2
3
pkgname=cadcraft-studio
4
pkgver=0.6.0
5
pkgrel=1
6
url="https://getcadcraft.com/studio"
7
_url="https://github.com/getcadcraft"
8
pkgdesc='Every CadCraft app in one desktop install, on one license'
9
arch=(x86_64)
10
license=(Apache-2.0)
11
depends=(alsa-lib
12
cairo
13
dbus
14
gdk-pixbuf2
15
glib2
16
glibc # libc.so libm.so
17
gtk3
18
hicolor-icon-theme
19
libgcc
20
libstdc++
21
libsoup3
22
openssl
23
pango
24
shared-mime-info
25
webkit2gtk-4.1)
26
makedepends=(cargo
27
clang
28
cmake
29
git
30
nodejs
31
php
32
python-pillow)
33
options=(!lto)
34
_apps=(cadcraft
35
bimcraft
36
civilcraft
37
detailcraft
38
markupcraft
39
modelcraft
40
partcraft
41
takeoffcraft)
42
_appver=0.4.0
43
_build=0.4
44
_studio=57640c4a050843d44abf6abf694ed7543b5a5065
45
_shell=d132555bd0bc191c8045eefa12ccd4a8dad6ce02
46
source=(studio::git+$_url/studio#commit=$_studio
47
desktop-shell::git+$_url/desktop-shell#commit=$_shell
48
site-bootstrap.php
49
site-edition.php
50
$pkgname.desktop)
51
for _a in "${_apps[@]}"; do
52
source+=("$pkgname-$_a-$_appver.tar.gz::$_url/$_a/archive/refs/tags/$_a-v$_appver.tar.gz")
53
done
54
sha256sums=('2bdc69d33cacb8297517454d232c3a48d9fba4d2058d699bd41dd3809d0b09e9'
55
'33b463e05ce1e02eff8f5c57b6fb65741c7bf8c3e2585bb5b254335864e99b3c'
56
'b571def5924d57801bd2225b0e57667ae805e669ced070d6ae571c14c24b2dfb'
57
'c4347169c28ae2205218df6ca3d1d8761a27e9fcd9a8775a51442c6259cb5dc7'
58
'6d078b7f042dbe7ca89c42021b39339d4e8c5d2f9baf9dbc13accf0642d9db4f'
59
'427b4b165544d9a299ddc1cd886a2d714a1082d08727c7e433a2e843fd6a4569'
60
'9683fb3bc45baba6cf7f570d41703ee0432d0d07e5c83c489b86076cfa66f09b'
61
'd4dd8f8e939c99763217f6cc23b2c605f3377aa413a8227de43db479c23244dd'
62
'11c32ac84230c008e45199a1857fd68274849f55d38f4ef06972f7cf69ad642a'
63
'a9b274dfc3cd8b03ad4cfd2e8731d35bd7c0be7eef2447f61084c30a6e139ebd'
64
'6559d2e6e7f78a1de97a499074b629a778944f73bc76cf4f107f5238ad635c92'
65
'ea4a2e11b481695e272c99f4bda81af17c8706a329d1732a4801d7acc54c4a91'
66
'a8124d6ca0be3ec778da3006240419461a4612ce95adc1dc6f5c72466c810d57')
67
68
_srcenv() {
69
cd "${1:-$srcdir/desktop-shell}"
70
export CARGO_HOME="$srcdir"
71
export CARGO_PROFILE_RELEASE_DEBUG=2
72
export CARGO_PROFILE_RELEASE_STRIP=false
73
export CARGO_PROFILE_RELEASE_LTO=thin
74
export CARGO_PROFILE_RELEASE_CODEGEN_UNITS=1
75
export CARGO_PROFILE_RELEASE_OPT_LEVEL=3
76
export CARGO_TARGET_DIR=target
77
export RUSTUP_TOOLCHAIN=stable
78
export PATH="$srcdir/.cargo/bin:$PATH"
79
RUSTFLAGS+=" --remap-path-prefix $PWD=/"
80
}
81
82
_site() {
83
local site="$srcdir/site" app="$srcdir/cadcraft-cadcraft-v$_appver"
84
install -d "$site"/{bin,devshell} \
85
"$site/public_html/core/classes" \
86
"$site/public_html/core/components" \
87
"$site/public_html/assets/js" \
88
"$site/public_html/assets/lang"
89
# A real copy: bootstrap.php reads dirname(__DIR__) for CC_PUBLIC, which must resolve inside the site.
90
rm -f "$site/public_html/core/bootstrap.php" "$site/devshell/edition.php"
91
cp "$srcdir/site-bootstrap.php" "$site/public_html/core/bootstrap.php"
92
cp "$srcdir/site-edition.php" "$site/devshell/edition.php"
93
ln -sf "$app/devshell/render.php" "$site/devshell/render.php"
94
ln -sf "$app/devshell/stubs.php" "$site/devshell/stubs.php"
95
ln -sf "$app/devshell/site/core/classes/Lang.php" "$site/public_html/core/classes/Lang.php"
96
ln -sf "$app/devshell/site/core/components/app-settings.inc" "$site/public_html/core/components/app-settings.inc"
97
ln -sf "$app/devshell/site/assets/lang/shell" "$site/public_html/assets/lang/shell"
98
ln -sf "$app/devshell/site/assets/js/i18n.js" "$site/public_html/assets/js/i18n.js"
99
ln -sf "$app/web/v$_build/assets/apps/cadcraft/$_build/host.js" "$site/public_html/assets/js/host.js"
100
}
101
102
_shelljson() {
103
local root="$1"
104
node - "$root" <<-'JS'
105
const fs = require('fs'), path = require('path');
106
const root = process.argv[2];
107
let headers = {};
108
const apps = path.join(root, 'apps');
109
if (fs.existsSync(apps)) {
110
for (const a of fs.readdirSync(apps)) {
111
const d = path.join(apps, a, 'assets/apps', a);
112
if (!fs.existsSync(d) || !fs.statSync(d).isDirectory()) continue;
113
for (const v of fs.readdirSync(d)) {
114
const m = path.join(d, v, 'manifest.json');
115
if (!fs.existsSync(m)) continue;
116
try {
117
const iso = JSON.parse(fs.readFileSync(m, 'utf8')).isolate;
118
if (iso) headers = { 'Cross-Origin-Opener-Policy': 'same-origin', 'Cross-Origin-Embedder-Policy': iso };
119
} catch (e) {}
120
}
121
}
122
}
123
const rel = fs.existsSync(path.join(root, 'release.json'))
124
? JSON.parse(fs.readFileSync(path.join(root, 'release.json'), 'utf8'))
125
: {};
126
process.stdout.write(JSON.stringify({ app: 'studio', name: rel.name || 'CadCraft Studio', version: String(rel.build || '0.4'), headers, suite: true }, null, 2) + '\n');
127
JS
128
}
129
130
_icon() {
131
python3 "$srcdir/desktop-shell/make-icon.py" studio icon.png
132
install -d icons
133
python3 - icon.png icons <<-'PY'
134
import os, sys
135
from PIL import Image
136
img = Image.open(sys.argv[1])
137
for s in (16, 24, 32, 48, 64, 128, 256, 512):
138
img.resize((s, s), Image.LANCZOS).save(os.path.join(sys.argv[2], f'{s}x{s}.png'))
139
PY
140
}
141
142
prepare() {
143
local slug
144
for slug in "${_apps[@]}"; do
145
install -d "editions/$slug/browser-edition"
146
rm -rf "editions/$slug/browser-edition/v$_build"
147
cp -a "$slug-$slug-v$_appver/web/v$_build" "editions/$slug/browser-edition/v$_build"
148
done
149
for slug in "${_apps[@]}"; do
150
install -d "builds/$slug"
151
ln -sf "$srcdir/$slug-$slug-v$_appver/app" "builds/$slug/$_build"
152
ln -sf "$srcdir/$slug-$slug-v$_appver/devshell" "builds/$slug/devshell"
153
done
154
_site
155
_srcenv "$srcdir/desktop-shell/src-tauri"
156
cargo fetch --locked --target host-tuple
157
}
158
159
build() {
160
CADCRAFT_SITE="$srcdir/site" \
161
CADCRAFT_APPS="$srcdir/builds" \
162
CADCRAFT_EDITIONS="$srcdir/editions" \
163
node "$srcdir/studio/pack/suite.mjs" --build "$_build" --editions "$srcdir/editions" --out "$srcdir/out" --allow-gate
164
_shelljson "$srcdir/out/studio-suite/v$_build" > "$srcdir/shell.json"
165
_icon
166
_srcenv "$srcdir/desktop-shell"
167
node licenses.mjs --target x86_64-unknown-linux-gnu --out THIRD_PARTY.md
168
_srcenv "$srcdir/desktop-shell/src-tauri"
169
TAURI_CONFIG="$_tauriconf" cargo build --frozen --release --features tauri/custom-protocol
170
}
171
172
package() {
173
depends+=(libasound.so libcairo.so libdbus-1.so libgcc_s.so
174
libgdk-3.so libgdk_pixbuf-2.0.so libgtk-3.so libwebkit2gtk-4.1.so
175
libgio-2.0.so libglib-2.0.so libgobject-2.0.so libjavascriptcoregtk-4.1.so libsoup-3.0.so)
176
local root="$pkgdir/usr/lib/$pkgname"
177
install -Dm0755 "$srcdir/desktop-shell/src-tauri/target/release/cadcraft-desktop" "$pkgdir/usr/bin/$pkgname"
178
install -d "$root"
179
cp -a "$srcdir/out/studio-suite/v$_build" "$root/app"
180
rm -f "$root/app/.htaccess" "$root/app/web.config"
181
install -Dm0644 "$srcdir/shell.json" "$root/shell.json"
182
install -Dm0644 -t "$root/" "$srcdir/desktop-shell/THIRD_PARTY.md" "$srcdir/desktop-shell/LICENSE"
183
install -Dm0644 -t "$pkgdir/usr/share/applications/" "$srcdir/$pkgname.desktop"
184
install -Dm0644 -t "$pkgdir/usr/share/licenses/$pkgname/" "$srcdir/desktop-shell/LICENSE"
185
# The apps' shared-mime-info definitions for the types the desktop entry declares.
186
local m slug
187
for slug in "${_apps[@]}"; do
188
for m in "$srcdir/$slug-$slug-v$_appver"/linux/flathub/*.mime.xml; do
189
[[ -e $m ]] || continue
190
install -Dm0644 "$m" "$pkgdir/usr/share/mime/packages/$slug.xml"
191
done
192
done
193
local d
194
for d in 16 24 32 48 64 128 256 512; do
195
install -Dm0644 "$srcdir/icons/${d}x${d}.png" "$pkgdir/usr/share/icons/hicolor/${d}x${d}/apps/$pkgname.png"
196
done
197
}
198
199
_tauriconf='{"productName":"cadcraft-studio","mainBinaryName":"cadcraft-desktop","identifier":"com.getcadcraft.studio","version":"0.4.0"}'
200
Changes since previous scan
--- PKGBUILD @ 2026-10-17 00:21+++ PKGBUILD @ 2026-10-19 09:25@@ -1,7 +1,7 @@ # Maintainer: Caleb Maclennan <caleb@alerque.com> pkgname=cadcraft-studio-pkgver=0.4.0+pkgver=0.6.0 pkgrel=1 url="https://getcadcraft.com/studio" _url="https://github.com/getcadcraft"Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-10-19 09:25:06 | Low | 1 |
| 2026-10-17 00:21:55 | Clean | 2 |
| 2026-10-16 13:16:10 | Low | 1 |