diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e34ac8e..46a970b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -21,17 +21,15 @@ jobs: steps: - uses: actions/checkout@v6 - with: - submodules: recursive - uses: pypa/cibuildwheel@v3.4.0 env: - CIBW_BUILD: cp312-* - CIBW_SKIP: cp312-musllinux* - CIBW_CONFIG_SETTINGS: setup-args="-Db_lto=true" + CIBW_BUILD: cp314-* + CIBW_SKIP: cp314-musllinux* + CIBW_BUILD_FRONTEND: uv CIBW_ENVIRONMENT_MACOS: MACOSX_DEPLOYMENT_TARGET=15 CIBW_BEFORE_ALL_LINUX: > - dnf -y install nasm && + dnf -y install libass-devel nasm && git clone https://git.ffmpeg.org/ffmpeg.git --branch n8.1 --depth 1 && cd ffmpeg && ./configure --enable-gpl --enable-version3 --disable-programs --disable-doc --disable-avdevice --disable-swresample --disable-swscale --disable-avfilter --disable-encoders --disable-muxers --enable-pic --disable-debug && @@ -40,7 +38,7 @@ jobs: cd .. && rm -rf ffmpeg CIBW_BEFORE_ALL_MACOS: > - brew install nasm && + brew install libass nasm && git clone https://git.ffmpeg.org/ffmpeg.git --branch n8.1 --depth 1 && cd ffmpeg && ./configure --enable-gpl --enable-version3 --disable-programs --disable-doc --disable-avdevice --disable-swresample --disable-swscale --disable-avfilter --disable-encoders --disable-muxers --enable-pic --disable-debug && @@ -50,6 +48,7 @@ jobs: rm -rf ffmpeg with: output-dir: dist + extras: uv - name: Fix tag run: | @@ -72,8 +71,6 @@ jobs: steps: - uses: actions/checkout@v6 - with: - submodules: recursive - uses: msys2/setup-msys2@v2 with: @@ -82,11 +79,11 @@ jobs: install: >- mingw-w64-clang-x86_64-autotools mingw-w64-clang-x86_64-git + mingw-w64-clang-x86_64-libass mingw-w64-clang-x86_64-nasm - mingw-w64-clang-x86_64-meson - mingw-w64-clang-x86_64-python-build - mingw-w64-clang-x86_64-python-wheel + mingw-w64-clang-x86_64-ninja mingw-w64-clang-x86_64-toolchain + mingw-w64-clang-x86_64-uv - name: Install FFmpeg run: | @@ -99,13 +96,13 @@ jobs: - name: Build run: | - python -m build -Csetup-args="-Dprefer_static=true" -Csetup-args="-Db_lto=true" -Csetup-args="-Dcpp_link_args=-static" + uv build -Csetup-args="-Dprefer_static=true" -Csetup-args="-Dcpp_link_args=-static" - name: Fix tag run: | cd dist for whl in *.whl; do - wheel tags --remove --python-tag py3 --abi-tag none --platform-tag win_amd64 $whl + uvx wheel tags --remove --python-tag py3 --abi-tag none $whl done - uses: actions/upload-artifact@v7 diff --git a/.gitignore b/.gitignore index 8487ac3..3973dd6 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,12 @@ *.gch *.pch +# Linker files +*.ilk + +# Debugger Files +*.pdb + # Compiled Dynamic libraries *.so *.dylib @@ -31,4 +37,30 @@ *.out *.app -/build \ No newline at end of file +# debug information files +*.dwo + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[codz] +*$py.class + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST diff --git a/meson.build b/meson.build index 28881d6..d08dcc6 100644 --- a/meson.build +++ b/meson.build @@ -1,27 +1,20 @@ project('SubText', 'c', 'cpp', - default_options: ['buildtype=release', 'warning_level=2', 'b_lto=true', 'b_ndebug=if-release', 'cpp_std=c++17'], + default_options: [ + 'buildtype=release', 'warning_level=2', 'b_lto=true', 'b_ndebug=if-release', 'c_std=c99', 'cpp_std=c++17', + ], license: 'MIT', license_files: 'LICENSE', meson_version: '>=1.2.3', version: '6.0', ) -sources = [ - 'src/common.c', - 'src/common.h', - 'src/image.cpp', - 'src/text.c', - 'src/toass.cpp', - 'src/toutf8.c' +deps = [ + dependency('libass', version: '>=0.12.0'), + dependency('libavcodec'), + dependency('libavformat'), + dependency('libavutil'), ] -libass_dep = dependency('libass', version: '>=0.12.0') -libavcodec_dep = dependency('libavcodec') -libavutil_dep = dependency('libavutil') -libavformat_dep = dependency('libavformat') - -deps = [libass_dep, libavcodec_dep, libavutil_dep, libavformat_dep] - incdir = include_directories( run_command( find_program('python', 'python3'), @@ -31,14 +24,21 @@ incdir = include_directories( ).stdout().strip(), ) +link_args = [] + py = import('python').find_installation(pure: false) -shared_module('dmetrics', - sources, - dependencies : deps, +if meson.get_compiler('cpp').get_linker_id() in ['ld.bfd', 'ld.gold', 'ld.mold'] + link_args += '-Wl,-Bsymbolic' +endif + +shared_module('subtext', + files('src/common.c', 'src/image.cpp', 'src/text.c', 'src/toass.cpp', 'src/toutf8.c'), + dependencies: deps, gnu_symbol_visibility: 'hidden', include_directories: incdir, install: true, install_dir: py.get_install_dir() / 'vapoursynth/plugins', + link_args: link_args, name_prefix: '', -) \ No newline at end of file +) diff --git a/pyproject.toml b/pyproject.toml index 3288c56..23d3f48 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [build-system] -requires = ["meson-python", "vapoursynth"] +requires = ["meson-python", "VapourSynth>=74"] build-backend = "mesonpy" [project] @@ -24,7 +24,7 @@ classifiers = [ "Programming Language :: C++", "Topic :: Multimedia :: Video", ] -dependencies = ["VapourSynth"] +dependencies = ["VapourSynth>=74"] dynamic = ["version"] [project.urls] @@ -32,4 +32,4 @@ Repository = "https://github.com/vapoursynth/subtext.git" Issues = "https://github.com/vapoursynth/subtext/issues" [tool.meson-python.wheel] -exclude = ["*/*.dll.a", "*/*.lib"] +exclude = ["*.dll.a", "*.lib"]