@@ -14,6 +14,7 @@ PTESTS_FAST_META_OE = "\
function2 \
fwupd \
gcab \
+ imagemagick \
jemalloc \
jq \
leveldb \
new file mode 100755
@@ -0,0 +1,128 @@
+#!/bin/sh
+#
+# ImageMagick ptest:
+# We ceate an BASERGB file for our usage using "convert"
+# We convert this RGB file to BASEPNG
+# Using BASEPNG we recreate RGB named REGENERATEDRGB
+#
+# BASERGB to BASEPNG to REGENERATEDRGB
+# - Then compare BASERGB with REGENERATEDRGB
+#
+# 1) We are checking if the binaries are present in RFS or not
+# 2) We Created an RBG of size : WIDTH x HEIGHT pixels
+# 3) Return value is captured after every major actio to capture the status
+# 4) cmp -s is used to compare binary byte by byte data and
+# capture only exit status
+# 5) Important parametsrs used are :
+# -depth : How many bits for each colour pixel
+# -alpha off : Don't consider transparency
+# -define png:color-type=2 : Make PNG work with truecolour RGB
+# -strip : Remove all non-pixel metadata og PNG
+# so file is reproducible
+# -set gamma 1.0 : No PNG brightness correction
+# gradient:red-blue : Data moves liberly from RED to Blue vertically
+
+
+WIDTH=16
+HEIGHT=16
+BASERGB=base.rgb
+BASEPNG=base.png
+REGENERATEDRGB=roundtrip.rgb
+
+echo "[DEBUG] Starting ImageMagick Ptest with ${WIDTH}x${HEIGHT} pixels "
+
+# Verify required binaries
+for bin in convert cmp wc rm; do
+ if [ -z "$(command -v "$bin" 2>/dev/null)" ]; then
+ echo "[ERROR] Required binary '$bin' not found $PATH"
+ exit 127
+ fi
+done
+
+# Generate raw RGB
+convert -size ${WIDTH}x${HEIGHT} -depth 8 -type TrueColor \
+ -alpha off -define png:color-type=2 \
+ -strip -set gamma 1.0 \
+ gradient:red-blue rgb:${BASERGB}
+
+returnvalue=$?
+if [ "$returnvalue" -ne 0 ]; then
+ echo "[FAIL] Failed to generate RGB pattern "
+ exit 1
+else
+ echo "[DEBUG] Generated raw RGB ${BASERGB} for test case"
+fi
+
+
+
+# Convert raw RGB to PNG
+convert -size ${WIDTH}x${HEIGHT} -depth 8 -type TrueColor \
+ -alpha off -define png:color-type=2 \
+ -strip -set gamma 1.0 \
+ rgb:${BASERGB} ${BASEPNG}
+
+returnvalue=$?
+if [ $returnvalue -ne 0 ]; then
+ echo "[FAIL] Failed to convert RGB to PNG"
+ rm -f ${BASERGB}
+ exit 1
+else
+ echo "[DEBUG] ${BASEPNG} generated from ${BASERGB}"
+fi
+
+
+
+# Regenrate raw RGB from PNG
+convert -size ${WIDTH}x${HEIGHT} -depth 8 -type TrueColor \
+ -alpha off -define png:color-type=2 \
+ -strip -set gamma 1.0 \
+ ${BASEPNG} rgb:${REGENERATEDRGB}
+
+returnvalue=$?
+if [ $returnvalue -ne 0 ]; then
+ echo "[FAIL] Failed to re generate RGB from PNG "
+ rm -f ${BASERGB} ${BASEPNG}
+ exit 1
+else
+ echo "[DEBUG] ${REGENERATEDRGB} generated from ${BASEPNG}"
+fi
+
+
+
+# Compare original and recreated RGB
+if cmp -s ${BASERGB} ${REGENERATEDRGB}; then
+ echo "[PASS] RGB data identical after PNG round-trip"
+ RESULT=0
+else
+ echo "[FAIL] RGB mismatch detected, printing their size "
+ echo "[INFO] Base RGB size: $(wc -c < ${BASERGB}) bytes"
+ echo "[INFO] Round-trip RGB size: $(wc -c < ${REGENERATEDRGB}) bytes"
+ RESULT=1
+fi
+
+
+
+# Checking the identify tool from imagemagick to get the PNG metadata
+# True is added in end to ensure that test script doesnt fail even if
+# identify fails for any reason
+echo "[DEBUG] PNG file info:"
+identify -verbose ${BASEPNG} | grep -E "Depth|Type|Colorspace" || true
+
+
+
+# Cleanup of files create by test code
+echo "[DEBUG] Cleaning up temporary files"
+rm -f ${BASERGB} ${BASEPNG} ${REGENERATEDRGB}
+returnvalue=$?
+echo "[DEBUG] Cleanup exit=$returnvalue"
+
+
+# Logging the final result
+if [ ${RESULT} -eq 0 ]; then
+ echo "[DEBUG]: imagemagick-ptest.sh sucessfull "
+else
+ echo "[DEBUG]: imagemagick-ptest.sh failed "
+fi
+
+
+exit ${RESULT}
new file mode 100644
@@ -0,0 +1,43 @@
+#!/bin/sh
+#
+# run-ptest — ImageMagick ptest harness
+# POSIX-safe and BusyBox compatible
+
+PTDIR=$(dirname "$0")
+TESTDIR="$PTDIR"
+PASSCOUNT=0
+FAILCOUNT=0
+TOTAL=0
+
+echo "======================================="
+echo "ImageMagick ptest: Runtime Validation"
+echo "======================================="
+
+for t in "$TESTDIR"/*.sh; do
+ [ -x "$t" ] || chmod +x "$t"
+ TOTAL=$((TOTAL + 1))
+ echo
+ echo "[DEBUG] Launching test script $t"
+
+ if sh "$t" 2>&1; then
+ echo "PASS: $(basename "$t")"
+ PASSCOUNT=$((PASSCOUNT + 1))
+ else
+ rc=$?
+ if [ "$rc" -eq 77 ]; then
+ echo "SKIP: $(basename "$t")"
+ else
+ echo "FAIL: $(basename "$t")"
+ FAILCOUNT=$((FAILCOUNT + 1))
+ fi
+ fi
+
+done
+
+echo
+echo "======================================="
+echo "[SUMMARY] Total: $TOTAL | PASS: $PASSCOUNT | FAIL: $FAILCOUNT"
+echo "======================================="
+echo
+[ "$FAILCOUNT" -eq 0 ]
+
@@ -11,12 +11,15 @@ DEPENDS = "lcms bzip2 jpeg libpng tiff zlib fftw freetype libtool"
BASE_PV := "${PV}"
PV .= "-26"
-SRC_URI = "git://github.com/ImageMagick/ImageMagick.git;branch=main;protocol=https"
+SRC_URI = "git://github.com/ImageMagick/ImageMagick.git;branch=main;protocol=https \
+ file://run-ptest \
+ file://imagemagick-ptest.sh \
+"
SRCREV = "570a9a048bb0e3a5c221ca87be9408ae35f711e2"
S = "${WORKDIR}/git"
-inherit autotools pkgconfig update-alternatives
+inherit autotools pkgconfig update-alternatives ptest
export ac_cv_sys_file_offset_bits="64"
EXTRA_OECONF = "--program-prefix= --program-suffix=.im7 --without-perl --enable-largefile"
@@ -56,6 +59,13 @@ do_install:append:class-target() {
fi
}
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}
+ install -m 0755 ${WORKDIR}/run-ptest ${D}${PTEST_PATH}/
+ install -m 0755 ${WORKDIR}/imagemagick-ptest.sh ${D}${PTEST_PATH}/
+}
+
+
FILES:${PN} += "${libdir}/ImageMagick-${BASE_PV}/config-Q16* \
${datadir}/ImageMagick-7"
Backport of the commit 96b97c0c6490b713b559a4e82bd699a2ebe357d3 from master This patch enables ptest for imagemagick, improving test coverage for continuous integration and runtime validation. No functional changes are introduced to the core package. The logic used is : - We check if the required tools are present or not - We used convert to create an raw RGB file - The created RGB is then converted to PNG using convert - We re-gerenate RGB from PNG and compare the original and re-generated RGB - Enabled the ptest in ptest-packagelists-meta-oe.inc as suggested by Gyorgy Sarvari and incorporated logging suggestion - This was done as standard imagemagick test like drawtest requires manual internetion to verify the file. Signed-off-by: AshishKumar Mishra <ashishkumar.mishra@bmwtechworks.in> --- .../include/ptest-packagelists-meta-oe.inc | 1 + .../imagemagick/imagemagick-ptest.sh | 128 ++++++++++++++++++ .../imagemagick/imagemagick/run-ptest | 43 ++++++ .../imagemagick/imagemagick_7.1.1.bb | 14 +- 4 files changed, 184 insertions(+), 2 deletions(-) create mode 100755 meta-oe/recipes-support/imagemagick/imagemagick/imagemagick-ptest.sh create mode 100644 meta-oe/recipes-support/imagemagick/imagemagick/run-ptest