[lib] update git submodule exiv2 #1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Build pyexiv2 on Linux, MacOS, and Windows. Then test it. | |
| name: Build | |
| on: | |
| push: | |
| branches: | |
| - master | |
| workflow_dispatch: | |
| inputs: | |
| exiv2_version: | |
| default: 0.28.7 | |
| jobs: | |
| on_linux: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| runner: | |
| - { os: ubuntu-22.04, exiv2_platform_name: Linux-x86_64 } | |
| - { os: ubuntu-22.04-arm, exiv2_platform_name: Linux-aarch64 } | |
| exiv2_version: | |
| - ${{ inputs.EXIV2_VERSION || '0.28.7' }} | |
| python_version: ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13', '3.14'] | |
| runs-on: ${{ matrix.runner.os }} | |
| env: | |
| PLATFORM_NAME: ${{matrix.runner.exiv2_platform_name}} | |
| EXIV2_VERSION: ${{matrix.exiv2_version}} | |
| EXIV2_URL: https://github.com/Exiv2/exiv2/releases/download/v${{matrix.exiv2_version}} | |
| EXIV2_BUILD_NAME: exiv2-${{matrix.exiv2_version}}-${{matrix.runner.exiv2_platform_name}} | |
| EXIV2_BUILD_EXT: .tar.gz | |
| PYTHON_VERSION: ${{matrix.python_version}} | |
| steps: | |
| - name: Set environment variables | |
| run: | | |
| set -u | |
| echo EXIV2_BUILDS_URL=${EXIV2_URL}/${EXIV2_BUILD_NAME}${EXIV2_BUILD_EXT} >> $GITHUB_ENV | |
| echo EXIV2_DIR=`pwd`/${EXIV2_BUILD_NAME} >> $GITHUB_ENV | |
| echo LIB_DIR=`pwd`/pyexiv2/lib >> $GITHUB_ENV | |
| - uses: actions/checkout@v4 | |
| - name: Download Exiv2 build | |
| run: | | |
| curl -LO ${EXIV2_BUILDS_URL} | |
| tar -zxf ${EXIV2_BUILD_NAME}${EXIV2_BUILD_EXT} | |
| cp -f ${EXIV2_DIR}/lib/libexiv2.so.${EXIV2_VERSION} ${LIB_DIR}/libexiv2.so | |
| - name: Set up Python ${{matrix.python_version}} | |
| uses: actions/setup-python@v4 | |
| with: | |
| python-version: ${{matrix.python_version}} | |
| - name: Install dependencies | |
| run: | | |
| # apt install python3-dev | |
| python -m pip install pybind11 pytest psutil | |
| - name: Build | |
| run: | | |
| cd $LIB_DIR | |
| rm -f exiv2api.so | |
| g++ exiv2api.cpp -o exiv2api.so \ | |
| -O3 -Wall -std=c++11 -shared -fPIC \ | |
| `python -m pybind11 --includes` \ | |
| -I ${EXIV2_DIR}/include \ | |
| -L ${EXIV2_DIR}/lib \ | |
| -l exiv2 | |
| - name: Upload artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: py${{matrix.python_version}}-${{env.PLATFORM_NAME}} | |
| path: | | |
| pyexiv2/lib/libexiv2.so | |
| pyexiv2/lib/exiv2api.so | |
| if-no-files-found: error | |
| retention-days: 3 | |
| - name: Test | |
| run: | | |
| python -m pytest -sv | |
| on_macos: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| runner: | |
| - { os: macos-13, exiv2_platform_name: Darwin-x86_64 } | |
| - { os: macos-14, exiv2_platform_name: Darwin-arm64 } | |
| exiv2_version: | |
| - ${{ inputs.EXIV2_VERSION || '0.28.7' }} | |
| python_version: ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13', '3.14'] | |
| runs-on: ${{ matrix.runner.os }} | |
| env: | |
| PLATFORM_NAME: ${{matrix.runner.exiv2_platform_name}} | |
| EXIV2_VERSION: ${{matrix.exiv2_version}} | |
| EXIV2_URL: https://github.com/Exiv2/exiv2/releases/download/v${{matrix.exiv2_version}} | |
| EXIV2_BUILD_NAME: exiv2-${{matrix.exiv2_version}}-${{matrix.runner.exiv2_platform_name}} | |
| EXIV2_BUILD_EXT: .tar.gz | |
| PYTHON_VERSION: ${{matrix.python_version}} | |
| steps: | |
| - name: Set environment variables | |
| run: | | |
| set -u | |
| echo EXIV2_BUILDS_URL=${EXIV2_URL}/${EXIV2_BUILD_NAME}${EXIV2_BUILD_EXT} >> $GITHUB_ENV | |
| echo EXIV2_DIR=`pwd`/${EXIV2_BUILD_NAME} >> $GITHUB_ENV | |
| echo LIB_DIR=`pwd`/pyexiv2/lib >> $GITHUB_ENV | |
| - uses: actions/checkout@v4 | |
| - name: Download Exiv2 build | |
| run: | | |
| curl -LO ${EXIV2_BUILDS_URL} | |
| tar -zxf ${EXIV2_BUILD_NAME}${EXIV2_BUILD_EXT} | |
| cp -f ${EXIV2_DIR}/lib/libexiv2.${EXIV2_VERSION}.dylib $LIB_DIR/libexiv2.dylib | |
| - name: Set up Python ${{matrix.python_version}} | |
| uses: actions/setup-python@v4 | |
| with: | |
| python-version: ${{matrix.python_version}} | |
| - name: Install dependencies | |
| run: | | |
| python -m pip install pybind11 pytest psutil | |
| - name: Build | |
| run: | | |
| cd $LIB_DIR | |
| rm -f exiv2api.so | |
| g++ exiv2api.cpp -o exiv2api.so \ | |
| -O3 -Wall -std=c++11 -shared -fPIC \ | |
| `python -m pybind11 --includes` \ | |
| -I ${EXIV2_DIR}/include \ | |
| -L ${EXIV2_DIR}/lib \ | |
| -l exiv2 \ | |
| -undefined dynamic_lookup | |
| - name: Upload artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: py${{matrix.python_version}}-${{env.PLATFORM_NAME}} | |
| path: | | |
| pyexiv2/lib/libexiv2.dylib | |
| pyexiv2/lib/exiv2api.so | |
| if-no-files-found: error | |
| retention-days: 3 | |
| - name: Test | |
| run: | | |
| brew install inih | |
| python -m pytest -sv | |
| on_windows: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| runner: | |
| - { os: windows-2022, exiv2_platform_name: 2022msvc-AMD64 } | |
| exiv2_version: | |
| - ${{ inputs.EXIV2_VERSION || '0.28.7' }} | |
| python_version: ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13', '3.14'] | |
| runs-on: ${{ matrix.runner.os }} | |
| env: | |
| PLATFORM_NAME: ${{matrix.runner.exiv2_platform_name}} | |
| EXIV2_VERSION: ${{matrix.exiv2_version}} | |
| EXIV2_URL: https://github.com/Exiv2/exiv2/releases/download/v${{matrix.exiv2_version}} | |
| EXIV2_BUILD_NAME: exiv2-${{matrix.exiv2_version}}-${{matrix.runner.exiv2_platform_name}} | |
| EXIV2_BUILD_EXT: .zip | |
| PYTHON_VERSION: ${{matrix.python_version}} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set environment variables | |
| shell: cmd | |
| run: | | |
| echo set EXIV2_BUILDS_URL=%EXIV2_URL%/%EXIV2_BUILD_NAME%%EXIV2_BUILD_EXT%>> env.bat | |
| echo set EXIV2_DIR=%CD%\%EXIV2_BUILD_NAME%>> env.bat | |
| echo set LIB_DIR=%CD%\pyexiv2\lib>> env.bat | |
| - name: Download Exiv2 build | |
| shell: cmd | |
| run: | | |
| call env.bat | |
| curl -LO %EXIV2_BUILDS_URL% | |
| python -m zipfile -e %EXIV2_BUILD_NAME%%EXIV2_BUILD_EXT% . | |
| copy %EXIV2_DIR%\bin\exiv2.dll %LIB_DIR% | |
| - name: Set up Python ${{matrix.python_version}} | |
| uses: actions/setup-python@v4 | |
| with: | |
| python-version: ${{matrix.python_version}} | |
| - name: Install dependencies | |
| run: | | |
| python -m pip install pybind11 pytest psutil | |
| - name: Set up Visual Studio shell | |
| uses: ilammy/msvc-dev-cmd@v1 | |
| - name: Build | |
| shell: cmd | |
| run: | | |
| call env.bat | |
| call "C:\Program Files (x86)\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat" | |
| python -c "import sys; print(sys.exec_prefix)" > tmp.out | |
| set /p PY_HOME=<tmp.out | |
| del tmp.out | |
| cd %LIB_DIR% | |
| if exist exiv2api.pyd del exiv2api.pyd | |
| cl /MD /LD exiv2api.cpp /EHsc ^ | |
| -I %EXIV2_DIR%\include ^ | |
| -I %PY_HOME%\include ^ | |
| -I %PY_HOME%\Lib\site-packages\pybind11\include ^ | |
| /link %EXIV2_DIR%\lib\exiv2.lib ^ | |
| %PY_HOME%\libs\python%PYTHON_VERSION:.=%.lib ^ | |
| /OUT:exiv2api.pyd | |
| - name: Upload artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: py${{matrix.python_version}}-${{env.PLATFORM_NAME}} | |
| path: | | |
| pyexiv2\lib\exiv2.dll | |
| pyexiv2\lib\exiv2api.pyd | |
| if-no-files-found: error | |
| retention-days: 3 | |
| - name: Test | |
| run: | | |
| python -m pytest -sv |