Skip to content

Add meson build system#471

Open
moi15moi wants to merge 8 commits intoFFMS:masterfrom
moi15moi:Add-meson
Open

Add meson build system#471
moi15moi wants to merge 8 commits intoFFMS:masterfrom
moi15moi:Add-meson

Conversation

@moi15moi
Copy link
Copy Markdown
Contributor

@moi15moi moi15moi commented Jan 29, 2026

This is a second attempt to add meson build system support (#338) since I believe meson is now a bit more mature. It is still pretty new compare to autotools, but as some benefits (ex: easy cross-compilation, IDE support, support MSVC out of the box).

I did it just for fun, but since it allow to build the unit tests with MSVC, I thought it might be a good idea to share it.

I also tested all the possibilities (ffmpeg->shared + ffms2->shared build, ffmpeg->static+ ffms2->shared build, etc...) in this PR to be sure to cover as many use case as possible.

The second commit is a "bonus", but can be useful since, in the last release, I believe you forgot to include the x86 build (see issue #470). If you want, I can add a arm64 build since windows arm is slowly getting a bit more common.

Also, if you want me to add renovate to automatically update subprojects/AviSynth+.wrap version, tell me.

@moi15moi moi15moi force-pushed the Add-meson branch 2 times, most recently from 100349f to 8dcda06 Compare February 2, 2026 01:56
@dwbuiten
Copy link
Copy Markdown
Member

dwbuiten commented Apr 5, 2026

If this covers 100% of the functionality of configure, I would love to just nuke autoconf and use only meson.

meson.build Outdated
if avisynth_dep.found()
avisynth_dep = avisynth_dep.partial_dependency(compile_args: true, includes: true)
else
cmake = import('cmake')
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMO it's not worth it to add an extra dependency on CMake and increase configure time to get the AVS headers via a CMake subproject. It'd be much simpler to write a tiny meson.build for AVS that provides the include directories as a subproject variable.

(I know that my old AVS code in my old Aegisub fork also uses CMake, but if I were still supporting AVS in Aegisub I would no longer do it this way.)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Something like 586a558 ?

@moi15moi moi15moi force-pushed the Add-meson branch 4 times, most recently from 3794c8f to 675daae Compare April 6, 2026 20:32
@moi15moi
Copy link
Copy Markdown
Contributor Author

moi15moi commented Apr 6, 2026

If this covers 100% of the functionality of configure, I would love to just nuke autoconf and use only meson.

Yes, it does.
I removed autotools and msbuild support.

I also decided to add a small test on top of introducing meson.
The test assure that our header are always compatible with c99 (to avoid issue like this one: #472 (comment))

PS: Note that you can also use muon to build the project, but you need at least to use a version that include this commit due to a bug.

moi15moi added 8 commits April 6, 2026 17:46
…lease

The workflow "Release Windows artifacts" will be runned when we create a new github release. It will automatically create the .7z file containing the x86 + x64 build and add it to the release.
We cannot use ffmpeg oackage available on cygwin repo because the build doesn't contain a HEVC decoder.
See: https://cygwin.com/pipermail/cygwin/2026-March/259560.html
…vailable to build the project

This allow to fix these errors when compiling on cygwin:
```
../src/vapoursynth/VSHelper4.h:76:9: error: there are no arguments to 'posix_memalign' that depend on a template parameter, so a declaration of 'posix_memalign' must be available [-fpermissive]
   76 |     if (posix_memalign(&tmp, alignment, size))
      |         ^~~~~~~~~~~~~~
../src/index/ffmsindex.cpp:122:20: error: 'strdup' was not declared in this scope; did you mean 'strcmp'?
  122 |         pair.Key = strdup(en->key);
      |                    ^~~~~~
      |                    strcmp
```
Fix these errors reported by clang:
```
FAILED: [code=1] test/c99_header.p/test.c.o
clang -Itest/c99_header.p -Itest -I../test -I../include -fdiagnostics-color=always -DNDEBUG -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -Wpedantic -Werror -std=c99 -O3 -pedantic -MD -MQ test/c99_header.p/test.c.o -MF test/c99_header.p/test.c.o.d -o test/c99_header.p/test.c.o -c ../test/test.c
In file included from ../test/test.c:2:
../include/ffms.h:436:30: error: a function declaration without a prototype is deprecated in all versions of C [-Werror,-Wstrict-prototypes]
  436 | FFMS_API(int) FFMS_GetVersion();
      |                              ^
      |                               void
../include/ffms.h:437:31: error: a function declaration without a prototype is deprecated in all versions of C [-Werror,-Wstrict-prototypes]
  437 | FFMS_API(int) FFMS_GetLogLevel();
      |                               ^
      |                                void
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants