Add: pip-install-iccdev#1701
Conversation
There was a problem hiding this comment.
Pull request overview
This PR significantly expands iccDEV’s “consumer-facing” surface by adding a pip-installable Python package (with tests and CI), MATLAB MEX wrapper examples, and a browser-based WASM tool UI suite, while also tightening/aligning core library exports (IccConnect/IccJSON) across CMake, vcpkg, Docker, and CI.
Changes:
- Add Python packaging + parity tests, plus supporting CI workflow(s) and build documentation.
- Add MATLAB MEX OOP wrapper layer and example scripts.
- Add WASM HTML front-ends for multiple CLI tools and supporting docs, alongside C++/CMake export/linkage updates for JSON/Connect libraries.
Reviewed changes
Copilot reviewed 134 out of 138 changed files in this pull request and generated 19 comments.
Show a summary per file
| File | Description |
|---|---|
| wasm/toxml.html | WASM UI page for iccToXml |
| wasm/tojson.html | WASM UI page for iccToJson |
| wasm/tiffdump.html | WASM UI page for iccTiffDump |
| wasm/search.html | WASM UI page for iccApplySearch |
| wasm/roundtrip.html | WASM UI page for iccRoundTrip |
| wasm/README.md | WASM tool suite documentation |
| wasm/pngdump.html | WASM UI page for iccPngDump |
| wasm/jpegdump.html | WASM UI page for iccJpegDump |
| wasm/fromxml.html | WASM UI page for iccFromXml |
| wasm/fromjson.html | WASM UI page for iccFromJson |
| wasm/fromcube.html | WASM UI page for iccFromCube |
| wasm/dump.html | WASM UI page for iccDumpProfile |
| Tools/CmdLine/IccApplyToLink/Readme.md | CLI doc updates for ApplyToLink args |
| Testing/Readme.md | Document CI round-trip classification |
| Testing/expected-invalid-fromxml.tsv | Manifest of expected invalid fromxml fixtures |
| python/vendor_iccproflib.py | Script to vendor sources for sdist |
| python/tests/test_xml_json_parity.py | XML/JSON parity + helper tests |
| python/tests/test_proflib_parity.py | Proflib/CMM parity + CLI smoke tests |
| python/tests/conftest.py | Installed-package import guard |
| python/tests/init.py | Test package marker |
| python/pyproject.toml | Python package metadata/build config |
| python/MANIFEST.in | sdist inclusion rules |
| python/iccdev/py.typed | PEP 561 typing marker |
| python/iccdev/init.py | Python package exports/version |
| python/examples/read_profile.py | Python example: header inspection |
| python/examples/color_transform.py | Python example: CMM transform |
| ports/iccdev/vcpkg.json | vcpkg feature description tweak |
| ports/iccdev/usage | vcpkg usage adds IccConnect targets |
| matlab/examples/read_profile.m | MATLAB example: header inspection |
| matlab/examples/color_transform.m | MATLAB example: transforms/perf |
| matlab/+iccdev/sig_to_str.m | MATLAB utility for ICC signatures |
| matlab/+iccdev/RenderingIntent.m | MATLAB intent constants |
| matlab/+iccdev/Interpolation.m | MATLAB interpolation constants |
| matlab/+iccdev/IccProfile.m | MATLAB profile wrapper class |
| matlab/+iccdev/IccCmm.m | MATLAB CMM wrapper class |
| matlab/+iccdev/IccApply.m | MATLAB thread-safe apply handle |
| matlab/+iccdev/ColorSpace.m | MATLAB colorspace constants |
| IccXML/CmdLine/IccToXml/IccToXml.cpp | Tool exit codes use EXIT_SUCCESS/FAILURE |
| IccXML/CmdLine/IccFromXml/IccFromXml.cpp | Tool exit codes use EXIT_SUCCESS/FAILURE |
| IccProfLib/IccWrapper.cpp | Fix apply-handle ownership semantics |
| IccProfLib/IccUtil.cpp | Copyright header cleanup |
| IccProfLib/IccProfLibConf.h | Cross-compiler export macro updates |
| IccProfLib/IccPcc.cpp | PCC observer helper adjustment |
| IccProfLib/IccMpeSpectral.cpp | Spectral Describe safety/limits |
| IccProfLib/IccColorimetry.cpp | Safer vector fill helper |
| IccProfLib/IccCmmThread.cpp | Whitespace/style cleanup |
| IccProfLib/IccCmmSearch.cpp | Fix interp/lut selection for dst leg |
| IccProfLib/IccCmm.cpp | Adjust abs-to-rel PCS scaling logic |
| IccJSON/IccLibJSON/IccUtilJson.h | Include path cleanup for JSON types |
| IccJSON/IccLibJSON/IccTagJson.h | Include path cleanup for JSON types |
| IccJSON/IccLibJSON/IccProfileJson.h | Exported destructor declaration |
| IccJSON/IccLibJSON/IccProfileJson.cpp | Exported destructor definition |
| IccJSON/IccLibJSON/IccMpeJson.h | Include path cleanup for JSON types |
| IccJSON/CmdLine/IccToJson/IccToJson.cpp | Tool exit codes use EXIT_SUCCESS/FAILURE |
| IccJSON/CmdLine/IccFromJson/IccFromJson.cpp | Return EXIT_SUCCESS |
| IccConnect/IccLibConnect/IccJsonUtil.h | Include path cleanup for Connect |
| docs/tools-cli-reference.md | CLI reference update for ApplyToLink |
| docs/regression-workflow-governance.md | Governance doc tightening |
| docs/index.md | Docs index links python release doc |
| docs/build.md | Add Python wheel validation section |
| Dockerfile.nixos | Include IccConnect in checks/paths |
| Dockerfile.mcp | New MCP runtime Docker image |
| Dockerfile.ci-regression | CI regression container tweak (GIT_COMMIT env) |
| Dockerfile | Include IccConnect runtime/lib paths |
| Build/Cmake/Tools/IccIisIsapi/CMakeLists.txt | Link/export anchoring notes updated |
| Build/Cmake/Tools/IccDEVCmm/CMakeLists.txt | Switch to target_precompile_headers |
| Build/Cmake/Testing/RunWindowsIccJsonExportTest.cmake | New Windows JSON export regression |
| Build/Cmake/Testing/RunWindowsBatchTest.cmake | Safer bounded PATH composition |
| Build/Cmake/RefIccMAXConfig.cmake.in | Expose IccConnect targets/aliases |
| Build/Cmake/IccXML/CMakeLists.txt | Shared-build symbol visibility tweaks |
| Build/Cmake/IccProfLib/CMakeLists.txt | Install JSON types header + wrapper source |
| Build/Cmake/IccConnect/CMakeLists.txt | Install/export targets + disable LTO for static |
| Build/Cmake/CMakeLists.txt | GCC auto-detect includes newer versions |
| AGENTS.md | Add pointers to new instructions/skills |
| .gitignore | Ignore Python + MATLAB build artifacts |
| .github/workflows/ci-vcpkg-ports.yml | vcpkg CI validates Connect + ApplyNamedCmm |
| .github/workflows/ci-preflight-safety.yml | Resolve additional CodeQL query pack |
| .github/workflows/ci-pr-unix.yml | Ensure Connect static lib presence |
| .github/workflows/ci-json-python.yml | New Python CI orchestrator workflow |
| .github/workflows/ci-docker.yml | Add push trigger + safer git log handling |
| .github/skills/wasm-build-test/SKILL.md | WASM build/test guidance doc |
| .github/skills/python-bindings-test/SKILL.md | Python bindings build/test guidance doc |
| .github/skills/pre-pr-security-cycle/SKILL.md | Add conservative review loop notes |
| .github/skills/maintainer-ci-ctest/SKILL.md | Add guidance to grep key counts |
| .github/scripts/preflight-safety-checks.sh | Tighten cache policy canaries |
| .github/scripts/iccdev-tool-coverage-baseline.sh | Expand ApplyToLink regression checks |
| .github/scripts/iccdev-json-parser-regression-tests.sh | Fail-closed regression assertion fix |
| .github/scripts/iccdev-classify-fromxml-logs.sh | New fromxml log classification helper |
| .github/scripts/check-workflow-cache-policy.sh | Rework cache-policy scanner parsing |
| .github/pull_request_template.md | Add maintainer/test checklist items |
| .github/prompts/vcpkg-port-debug.prompt.md | Update vcpkg debug prompt for Connect/tool |
| .github/prompts/debug-python-bindings.prompt.md | New Python/Cython debug prompt |
| .github/prompts/debug-mcp-subprocess.prompt.md | New MCP subprocess debug prompt |
| .github/prompts/bisect-regression.prompt.md | Include JSON/Connect in LD_LIBRARY_PATH |
| .github/prompts/audit-workflow-governance.prompt.md | Expand audit guidance (Docker/zizmor/etc.) |
| .github/instructions/workflow-governance.instructions.md | Mention MCP + extra CodeQL pack |
| .github/instructions/vcpkg-port.instructions.md | Document Connect via json feature |
| .github/instructions/testing.instructions.md | Document issue-1009 suite + PATH bounding |
| .github/instructions/python-bindings.instructions.md | New python path-specific instructions |
| .github/instructions/matlab-mex.instructions.md | New matlab path-specific instructions |
| .github/copilot-instructions.md | Register python/matlab instructions + skills |
| .github/codeql-config.yml | Switch to explicit query suite files |
| .github/ci/regression/README.md | Register new Connect regression tests |
| .github/ci/regression/iccconnect-config-parser.cpp | New Connect config parser regression helper |
| .dockerignore | Broaden exclusions; include Connect artifacts |
PR Author Comment2026-07-08 14:34:09 UTC Copilot Review is useless.
If this were to be a requirement for any PR I would not waste my time. |
PR Author Comment (2)2026-07-08 14:41:33 UTC I'm done with the Copilot Review and will not subject any other potential Contributor to the process. This PR is Merge Ready |
PR Author comment (3)2026-07-08 16:24:33 UTC The Copilot Review Process is absolutely absurd. Whoever designed that should be fired. |
PR Summary
#765
Checklist
docs/build.mdm_membersLegal Requirements
All official software projects hosted by the International Color Consoritum (ICC)
follows the open source software best practice policies. The International Color Consoritum IP policy governs ICC specification development and contributions to ICC open source software. Software contributions are also covered by the Contributor License Agreement (CLA).
Contributor License Agreements
Developers who wish to contribute code to be considered for inclusion
in ICC software must first complete a Contributor License Agreement
(CLA).
There is no cost or membership requirement to sign the ICC Contributor License Agreement (CLA). Please note that this is different from membership in the International Color Consortium (ICC). If your organization relies on our projects, please become a member. Membership dues are an essential source of funding and investment for these projects.
If you are an individual writing the code on your own time and you are SURE you are the sole owner of any intellectual property you contribute, you can sign the CLA as an individual contributor.
If you are writing the code as part of your job, or if there is any possibility that your employer might think they own any intellectual property you create, then you should use the Corporate Contributor Licence Agreement
License
ICC software is licensed under the BSD 3-Clause "New" or "Revised" License. Contributions to ICC software projects should abide by that license unless otherwised specified or approved by the ICC.
Copyright Notices
All new source files must begin with the ICC Copyright notice and include or reference the BSD 3-Clause "New" or "Revised" License.
INTELLECTUAL PROPERTY & PATENTS
Participation in ICC's development activities is subject to ICC's Patent Policy.
Maintainer Review Required
If you have questions, contact a listed Maintainer.