@@ -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"
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