calculix-ccx
The source URLs are hosted on the project maintainer's personal domain (dhondt.de), which is not a standard forge but is the official source for CalculiX; the tarballs are the project's own source code, built locally, and the checksums are verified, so the risk is low despite the non-whitelisted host.
Triggered rules
llm_review
The static rules flagged this MEDIUM, but an AI model (qwen/qwen3-235b-a22b-07-25) reviewed the full PKGBUILD and judged it LOW (confidence 95%): The source URLs are hosted on the project maintainer's personal domain (dhondt.de), which is not a standard forge but is the official source for CalculiX; the tarballs are the project's own source code, built locally, and the checksums are verified, so the risk is low despite the non-whitelisted host.
1 higher static finding superseded - not the current verdict (shown for transparency)
source_untrusted_domain
One or more source=() URLs point to a host outside the trusted allowlist (github.com, gitlab.com, codeberg.org, pypi.org, …).
-
PKGBUILD:26
"http://www.dhondt.de/ccx_${pkgver}.src.tar.bz2"
PKGBUILD
1 offending line(s) highlighted# Maintainer: Maurizio D'Addona <mauritiusdadd@gmail.com>
# Contributor: Sven Niese <Fd3querm@yahoo.de>
# Contributor: Daniel Murphy <mosquitogang201@gmail.com>
# NOTE: If build fails try to add the option "!makeflags" to options array
# !buildflags is needed in order to compile the code
pkgname=calculix-ccx
pkgver=2.23
pkgrel=1
provides=('calculix')
replaces=('calculix')
conflicts=('calculix')
pkgdesc="CalculiX: 3D Structural Finite Element Program - Solver"
arch=('i686' 'x86_64')
options=(!buildflags)
url="http://www.calculix.de/"
license=('GPL2')
depends=('arpack' 'spooles' 'blas')
optdepends=('calculix-doc: documentation and examples'
'tetgen: for tet meshing')
makedepends=('gcc-fortran' 'perl')
checkdepends=('perl')
source=(
"http://www.dhondt.de/ccx_${pkgver}.src.tar.bz2"
"http://www.dhondt.de/ccx_${pkgver}.test.tar.bz2"
"http://www.dhondt.de/ccx_${pkgver}.fluidtest.tar.bz2"
"http://www.dhondt.de/ccx_${pkgver}.structest.tar.bz2"
)
sha256sums=('9c88385c10fb04f5dc6c4e98027a51bebdd8aee3920e05190d6c1dd08357d6e7'
'be2259fd9a7b990d0453b30708e1b05f2cd4b6df4a90fa96f0e4abd1ae7beaa0'
'db8b1361b89e357266d1dcebc071b3fd9fd37b83b4b7bb6f4a0f99b1759fbe80'
'3407b2ce1366df62b1ab43a21ea76ff54386b8842e6cd8660fd9047526be5dec')
#
# NOTE: remove -Wno-implicit when code is fixed by upstream
# idem for -Wno-return-mismatch
#
build()
{
cd "${srcdir}/CalculiX/ccx_${pkgver}/src"
make CFLAGS="${CFLAGS} -Wno-return-mismatch -Wno-implicit -O2 -fopenmp \
-I /usr/include/spooles \
-DARCH=\"Linux\" -DSPOOLES -DARPACK -DMATRIXSTORAGE \
-DNETWORKOUT -DUSE_MT=1" \
FFLAGS='-Wall -O2 -cpp -fopenmp -fpic -fallow-argument-mismatch' \
LIBS='-lpthread -lm -lc -lspooles -larpack -lblas -llapack -lgomp'
}
check()
{
tests=('beamp' 'ball' 'pipe' 'pipe2' 'planestress'
'gap' 'gap2' 'capacitor' 'carbonseal' 'beamptied1'
'beamp1rotate' 'beamp2' 'beamp2rotate' 'beamf' 'beamhf'
'furnace' 'gaspipe1' 'gaspipe1-oil' 'gaspipe2'
'gaspipe3' 'gaspipe4' 'gaspipe5' 'gaspipe6' 'gaspipe7'
'gaspipe8' 'gaspipe-cfd-pressure' 'gaspipe8-cfd-pressure'
'gaspipe8-cfd-massflow' 'gaspipe8-cfd-pressure'
'gaspipe8-cfd-pressure-split' 'green1' 'green2' 'green3'
'green4' 'hinge' 'hueeber1' 'hueeber2' 'induction' 'induction2'
'inistrain' 'largerot1' 'linearnet' 'mass1' 'mass2' 'mass3'
'massflow_percent_ccx' 'membrane1' 'metalforming' 'modelchel'
'networkmpc' 'oneel' 'pendel' 'resstress1'
'restrictor' 'segment' 'sensitivity_I' 'shell1'
'shellbeam' 'shellf' 'simplebeam' 'spring1' 'spring2'
'small_pressure_gradient' 'square' 'substructure' 'swing'
'thermomech' 'transition' 'truss' 'vortex1' 'wire')
msg "Testing solver..."
cd ${srcdir}/CalculiX/ccx_${pkgver}/test
error_status=0
start_time="$(date -u +%s)"
for test_name in "${tests[@]}" ; do
ref_file=${test_name}.dat.ref
dat_file=${test_name}.dat
frd_file=${test_name}.frd
log_file=${test_name}.log
msg2 "testing ${test_name}"
rm -f ${dat_file}
rm -f ${frd_file}
# Testing on maximum 4 cores
OMP_NUM_THREADS=4 ../src/ccx_${pkgver} ${test_name} &> ${log_file} ||\
warning "check $(pwd)/${log_file}"
if [ ! -f ${dat_file} ]; then
warning "${dat_file} does not exist"
error_status=1
fi
sum1="$(wc -l ${dat_file})"
sum2="$(wc -l ${ref_file})"
if [ ${sum1%* *} != ${sum2%* *} ]; then
warning "The data file generated by ccx is not valid"
error_status=1
fi
if grep "NaN" ${dat_file} ; then
warning "${dat_file} contains NaNs!"
error_status=1
fi
if ! ./datcheck.pl ${test_name} ; then
warning "Result is inconsistent with reference data!"
error_status=1
fi
done
cd ${srcdir}/CalculiX/ccx_${pkgver}/fluidtest
for test_name in ./*.inp ; do
msg2 "testing ${test_name}"
OMP_NUM_THREADS=4 ../src/ccx_${pkgver} ${test_name} &> ${log_file} ||\
error_status=1 warning "check $(pwd)/${log_file}"
done
cd ${srcdir}/CalculiX/ccx_${pkgver}/structest
for test_name in ./*.inp ; do
msg2 "testing ${test_name}"
OMP_NUM_THREADS=4 ../src/ccx_${pkgver} ${test_name} &> ${log_file} ||\
error_status=1 warning "check $(pwd)/${log_file}"
done
end_time="$(date -u +%s)"
elapsed="$(($end_time-$start_time))"
msg "Total of $elapsed seconds elapsed for tesing"
return $error_status
}
package()
{
install -d ${pkgdir}/usr/bin
install -Dm755 ${srcdir}/CalculiX/ccx_${pkgver}/src/ccx_${pkgver} ${pkgdir}/usr/bin/ccx
}
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-09-17 00:27:14 | Low | 2 |
| 2026-09-16 00:03:17 | Low | 2 |
| 2026-09-15 00:25:31 | Low | 2 |
| 2026-09-14 00:27:57 | Low | 2 |
| 2026-09-13 00:19:54 | Low | 2 |
| 2026-09-12 00:25:17 | Low | 2 |
| 2026-09-11 00:19:22 | Low | 2 |
| 2026-09-10 00:22:44 | Low | 2 |
| 2026-09-09 00:04:09 | Low | 2 |
| 2026-09-08 00:18:08 | Low | 2 |
| 2026-09-07 00:30:15 | Low | 2 |
| 2026-09-06 00:17:06 | Low | 2 |
| 2026-09-05 00:16:27 | Low | 2 |
| 2026-09-04 00:03:13 | Low | 2 |
| 2026-09-03 00:15:47 | Low | 2 |
| 2026-09-02 00:02:31 | Low | 2 |
| 2026-09-01 00:11:19 | Low | 2 |
| 2026-08-31 00:19:57 | Low | 2 |
| 2026-08-30 00:04:14 | Low | 2 |
| 2026-08-29 00:29:17 | Low | 2 |