Skip to content

[lib] update git submodule exiv2 #1

[lib] update git submodule exiv2

[lib] update git submodule exiv2 #1

Workflow file for this run

# 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