@@ -20,7 +20,14 @@ file(MAKE_DIRECTORY "${WORK_DIR}")
2020set (_src_jpg "${WORK_DIR} /source.jpg" )
2121set (_src_icc_jpg "${WORK_DIR} /source_icc.jpg" )
2222set (_target_jpg "${WORK_DIR} /target.jpg" )
23+ set (_target_jpg_xmp "${WORK_DIR} /target_xmp.jpg" )
2324set (_edited_jpg "${WORK_DIR} /edited.jpg" )
25+ set (_dual_jpg "${WORK_DIR} /dual_write.jpg" )
26+ set (_dual_jpg_sidecar "${WORK_DIR} /dual_write.xmp" )
27+ set (_embed_only_strip_jpg "${WORK_DIR} /embed_only_strip.jpg" )
28+ set (_embed_only_strip_sidecar "${WORK_DIR} /embed_only_strip.xmp" )
29+ set (_sidecar_only_strip_jpg "${WORK_DIR} /sidecar_only_strip.jpg" )
30+ set (_sidecar_only_strip_sidecar "${WORK_DIR} /sidecar_only_strip.xmp" )
2431set (_target_tif "${WORK_DIR} /target.tif" )
2532set (_edited_tif "${WORK_DIR} /edited.tif" )
2633set (_target_jxl "${WORK_DIR} /target.jxl" )
@@ -85,6 +92,18 @@ if(NOT _rv_target_jpg EQUAL 0)
8592 "failed to write python metatransfer target jpeg fixture (${_rv_target_jpg} )\n stdout:\n ${_out_target_jpg} \n stderr:\n ${_err_target_jpg} " )
8693endif ()
8794
95+ execute_process (
96+ COMMAND "${OPENMETA_PYTHON_EXECUTABLE} " -c
97+ "from pathlib import Path; xml=b\" <x:xmpmeta xmlns:x='adobe:ns:meta/'><rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'><rdf:Description xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:CreatorTool>Target Embedded Existing</xmp:CreatorTool></rdf:Description></rdf:RDF></x:xmpmeta>\" ; app1=b'http://ns.adobe.com/xap/1.0/\\ x00'+xml; ln=(len(app1)+2).to_bytes(2,'big'); Path(r'''${_target_jpg_xmp} ''').write_bytes(b'\\ xFF\\ xD8\\ xFF\\ xE1'+ln+app1+b'\\ xFF\\ xD9')"
98+ RESULT_VARIABLE _rv_target_jpg_xmp
99+ OUTPUT_VARIABLE _out_target_jpg_xmp
100+ ERROR_VARIABLE _err_target_jpg_xmp
101+ )
102+ if (NOT _rv_target_jpg_xmp EQUAL 0)
103+ message (FATAL_ERROR
104+ "failed to write python metatransfer target jpeg xmp fixture (${_rv_target_jpg_xmp} )\n stdout:\n ${_out_target_jpg_xmp} \n stderr:\n ${_err_target_jpg_xmp} " )
105+ endif ()
106+
88107execute_process (
89108 COMMAND "${OPENMETA_PYTHON_EXECUTABLE} " -c
90109 "from pathlib import Path; b=bytearray(); b+=b'II'; b+=(42).to_bytes(2,'little'); b+=(8).to_bytes(4,'little'); b+=(0).to_bytes(2,'little'); b+=(0).to_bytes(4,'little'); Path(r'''${_target_tif} ''').write_bytes(bytes(b))"
@@ -199,6 +218,116 @@ if(NOT _rv_jpg_check EQUAL 0)
199218 "python metatransfer jpeg output check failed (${_rv_jpg_check} )\n stdout:\n ${_out_jpg_check} \n stderr:\n ${_err_jpg_check} " )
200219endif ()
201220
221+ execute_process (
222+ COMMAND "${CMAKE_COMMAND} " -E env
223+ "PYTHONPATH=${OPENMETA_PYTHONPATH} "
224+ "${OPENMETA_PYTHON_EXECUTABLE} " -m openmeta.python.metatransfer
225+ --no-build-info
226+ --target-jpeg "${_target_jpg} "
227+ --xmp-writeback embedded_and_sidecar
228+ -o "${_dual_jpg} "
229+ "${_src_jpg} "
230+ RESULT_VARIABLE _rv_dual
231+ OUTPUT_VARIABLE _out_dual
232+ ERROR_VARIABLE _err_dual
233+ )
234+ if (NOT _rv_dual EQUAL 0)
235+ message (FATAL_ERROR
236+ "python metatransfer dual-write jpeg edit failed (${_rv_dual} )\n stdout:\n ${_out_dual} \n stderr:\n ${_err_dual} " )
237+ endif ()
238+ if (NOT EXISTS "${_dual_jpg} " )
239+ message (FATAL_ERROR
240+ "python metatransfer dual-write did not write jpeg output\n stdout:\n ${_out_dual} \n stderr:\n ${_err_dual} " )
241+ endif ()
242+ if (NOT EXISTS "${_dual_jpg_sidecar} " )
243+ message (FATAL_ERROR
244+ "python metatransfer dual-write did not write xmp sidecar\n stdout:\n ${_out_dual} \n stderr:\n ${_err_dual} " )
245+ endif ()
246+ if (NOT _out_dual MATCHES "xmp_sidecar_output=.*dual_write\\ .xmp" )
247+ message (FATAL_ERROR
248+ "python metatransfer dual-write missing xmp sidecar summary\n stdout:\n ${_out_dual} \n stderr:\n ${_err_dual} " )
249+ endif ()
250+ execute_process (
251+ COMMAND "${OPENMETA_PYTHON_EXECUTABLE} " -c
252+ "from pathlib import Path; b=Path(r'''${_dual_jpg_sidecar} ''').read_bytes(); import sys; sys.exit(0 if (b.find(b'<x:xmpmeta')!=-1 or b.find(b'<rdf:RDF')!=-1) else 1)"
253+ RESULT_VARIABLE _rv_dual_check
254+ OUTPUT_VARIABLE _out_dual_check
255+ ERROR_VARIABLE _err_dual_check
256+ )
257+ if (NOT _rv_dual_check EQUAL 0)
258+ message (FATAL_ERROR
259+ "python metatransfer dual-write sidecar content check failed (${_rv_dual_check} )\n stdout:\n ${_out_dual_check} \n stderr:\n ${_err_dual_check} " )
260+ endif ()
261+
262+ file (WRITE "${_embed_only_strip_sidecar} " "stale sidecar\n " )
263+ execute_process (
264+ COMMAND "${CMAKE_COMMAND} " -E env
265+ "PYTHONPATH=${OPENMETA_PYTHONPATH} "
266+ "${OPENMETA_PYTHON_EXECUTABLE} " -m openmeta.python.metatransfer
267+ --no-build-info
268+ --target-jpeg "${_target_jpg} "
269+ --xmp-destination-sidecar strip_existing
270+ -o "${_embed_only_strip_jpg} "
271+ "${_src_jpg} "
272+ RESULT_VARIABLE _rv_embed_strip
273+ OUTPUT_VARIABLE _out_embed_strip
274+ ERROR_VARIABLE _err_embed_strip
275+ )
276+ if (NOT _rv_embed_strip EQUAL 0)
277+ message (FATAL_ERROR
278+ "python metatransfer embedded-only sidecar cleanup failed (${_rv_embed_strip} )\n stdout:\n ${_out_embed_strip} \n stderr:\n ${_err_embed_strip} " )
279+ endif ()
280+ if (NOT EXISTS "${_embed_only_strip_jpg} " )
281+ message (FATAL_ERROR
282+ "python metatransfer embedded-only cleanup did not write jpeg output\n stdout:\n ${_out_embed_strip} \n stderr:\n ${_err_embed_strip} " )
283+ endif ()
284+ if (EXISTS "${_embed_only_strip_sidecar} " )
285+ message (FATAL_ERROR
286+ "python metatransfer embedded-only cleanup did not remove stale sidecar\n stdout:\n ${_out_embed_strip} \n stderr:\n ${_err_embed_strip} " )
287+ endif ()
288+ if (NOT _out_embed_strip MATCHES "xmp_sidecar_removed=.*embed_only_strip\\ .xmp" )
289+ message (FATAL_ERROR
290+ "python metatransfer embedded-only cleanup missing sidecar removal summary\n stdout:\n ${_out_embed_strip} \n stderr:\n ${_err_embed_strip} " )
291+ endif ()
292+
293+ execute_process (
294+ COMMAND "${CMAKE_COMMAND} " -E env
295+ "PYTHONPATH=${OPENMETA_PYTHONPATH} "
296+ "${OPENMETA_PYTHON_EXECUTABLE} " -m openmeta.python.metatransfer
297+ --no-build-info
298+ --target-jpeg "${_target_jpg_xmp} "
299+ --xmp-writeback sidecar
300+ --xmp-destination-embedded strip_existing
301+ -o "${_sidecar_only_strip_jpg} "
302+ "${_src_jpg} "
303+ RESULT_VARIABLE _rv_sidecar_strip
304+ OUTPUT_VARIABLE _out_sidecar_strip
305+ ERROR_VARIABLE _err_sidecar_strip
306+ )
307+ if (NOT _rv_sidecar_strip EQUAL 0)
308+ message (FATAL_ERROR
309+ "python metatransfer sidecar-only embedded-strip failed (${_rv_sidecar_strip} )\n stdout:\n ${_out_sidecar_strip} \n stderr:\n ${_err_sidecar_strip} " )
310+ endif ()
311+ if (NOT EXISTS "${_sidecar_only_strip_jpg} " )
312+ message (FATAL_ERROR
313+ "python metatransfer sidecar-only embedded-strip did not write jpeg output\n stdout:\n ${_out_sidecar_strip} \n stderr:\n ${_err_sidecar_strip} " )
314+ endif ()
315+ if (NOT EXISTS "${_sidecar_only_strip_sidecar} " )
316+ message (FATAL_ERROR
317+ "python metatransfer sidecar-only embedded-strip did not write xmp sidecar\n stdout:\n ${_out_sidecar_strip} \n stderr:\n ${_err_sidecar_strip} " )
318+ endif ()
319+ execute_process (
320+ COMMAND "${OPENMETA_PYTHON_EXECUTABLE} " -c
321+ "from pathlib import Path; b=Path(r'''${_sidecar_only_strip_jpg} ''').read_bytes(); import sys; sys.exit(0 if (b.find(b'Target Embedded Existing')==-1 and b.find(b'http://ns.adobe.com/xap/1.0/')==-1) else 1)"
322+ RESULT_VARIABLE _rv_sidecar_strip_check
323+ OUTPUT_VARIABLE _out_sidecar_strip_check
324+ ERROR_VARIABLE _err_sidecar_strip_check
325+ )
326+ if (NOT _rv_sidecar_strip_check EQUAL 0)
327+ message (FATAL_ERROR
328+ "python metatransfer sidecar-only embedded-strip output still contains embedded xmp (${_rv_sidecar_strip_check} )\n stdout:\n ${_out_sidecar_strip} \n stderr:\n ${_err_sidecar_strip} \n check_stderr:\n ${_err_sidecar_strip_check} " )
329+ endif ()
330+
202331file (WRITE "${_check_tiff_py} " [=[
203332import sys
204333from pathlib import Path
0 commit comments