mirror of
git://git.openembedded.org/meta-openembedded
synced 2026-01-01 13:58:06 +00:00
imagemagick: adds ptest for imagemagick
The logic used is : - We check if the required tools are present or not - We used magick 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> Signed-off-by: Khem Raj <raj.khem@gmail.com>
This commit is contained in:
parent
78e81c6390
commit
96b97c0c64
|
|
@ -16,6 +16,7 @@ PTESTS_FAST_META_OE = "\
|
|||
function2 \
|
||||
fwupd \
|
||||
gcab \
|
||||
imagemagick \
|
||||
jemalloc \
|
||||
jq \
|
||||
leveldb \
|
||||
|
|
|
|||
132
meta-oe/recipes-support/imagemagick/imagemagick/imagemagick-ptest.sh
Executable file
132
meta-oe/recipes-support/imagemagick/imagemagick/imagemagick-ptest.sh
Executable file
|
|
@ -0,0 +1,132 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# ImageMagick ptest:
|
||||
# We ceate an BASERGB file for our usage using "magick"
|
||||
# We convert this RGB file to BASEPNG
|
||||
# Using BASEPNG we recreate RGB named REGENERATEDRGB
|
||||
#
|
||||
# BASERGB to BASEPNG to REGENERATEDRGB
|
||||
# - Then compare BASERGB with REGENERATEDRGB
|
||||
#
|
||||
# 0) The convert command is deprecated in IMv7
|
||||
# used "magick" instead of "convert"
|
||||
# 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 magick 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
|
||||
magick -size ${WIDTH}x${HEIGHT} gradient:red-blue \
|
||||
-depth 8 -type TrueColor \
|
||||
-alpha off -define png:color-type=2 \
|
||||
-strip -set gamma 1.0 \
|
||||
rgb:${BASERGB}
|
||||
|
||||
returnvalue=$?
|
||||
if [ "$returnvalue" -ne 0 ]; then
|
||||
echo "[FAIL] Failed to generate RGB pattern "
|
||||
exit 1
|
||||
else
|
||||
echo "[DEBUG] ${BASERGB} generated from gradient"
|
||||
fi
|
||||
|
||||
|
||||
# Convert raw RGB to PNG
|
||||
magick -depth 8 -size ${WIDTH}x${HEIGHT} rgb:${BASERGB} \
|
||||
-type TrueColor -alpha off \
|
||||
-define png:color-type=2 -strip -set gamma 1.0 \
|
||||
${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
|
||||
|
||||
|
||||
|
||||
# Regenerate raw RGB from PNG
|
||||
magick ${BASEPNG} \
|
||||
-size ${WIDTH}x${HEIGHT} -depth 8 -type TrueColor \
|
||||
-alpha off -define png:color-type=2 \
|
||||
-strip -set gamma 1.0 \
|
||||
rgb:${REGENERATEDRGB}
|
||||
|
||||
returnvalue=$?
|
||||
if [ $returnvalue -ne 0 ]; then
|
||||
echo "[FAIL] Failed to regenerate 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}
|
||||
43
meta-oe/recipes-support/imagemagick/imagemagick/run-ptest
Normal file
43
meta-oe/recipes-support/imagemagick/imagemagick/run-ptest
Normal file
|
|
@ -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 ]
|
||||
|
||||
|
|
@ -12,11 +12,15 @@ DEPENDS = "lcms bzip2 jpeg libpng tiff zlib fftw freetype libtool"
|
|||
BASE_PV = "${@d.getVar('PV').split('-')[0]}"
|
||||
UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>([0-9][\.|_|-]?)+)"
|
||||
|
||||
SRC_URI = "git://github.com/ImageMagick/ImageMagick.git;branch=main;protocol=https;tag=${PV}"
|
||||
SRC_URI = "git://github.com/ImageMagick/ImageMagick.git;branch=main;protocol=https;tag=${PV} \
|
||||
file://run-ptest \
|
||||
file://imagemagick-ptest.sh \
|
||||
"
|
||||
|
||||
SRCREV = "a3b13d143fd7dea44cd71d31aa02f411b597688f"
|
||||
|
||||
|
||||
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"
|
||||
|
|
@ -55,6 +59,13 @@ do_install:append:class-target() {
|
|||
fi
|
||||
}
|
||||
|
||||
do_install_ptest() {
|
||||
install -d ${D}${PTEST_PATH}
|
||||
install -m 0755 ${UNPACKDIR}/run-ptest ${D}${PTEST_PATH}/
|
||||
install -m 0755 ${UNPACKDIR}/imagemagick-ptest.sh ${D}${PTEST_PATH}/
|
||||
}
|
||||
|
||||
|
||||
FILES:${PN} += "${libdir}/ImageMagick-${BASE_PV}/config-Q16* \
|
||||
${datadir}/ImageMagick-7"
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user