mirror of
https://github.com/mpv-player/mpv.git
synced 2025-12-28 05:33:14 +00:00
switch the build system to waf
This commit adds a new build system based on waf. configure and Makefile are deprecated effective immediately and someday in the future they will be removed (they are still available by running ./old-configure). You can find how the choice for waf came to be in `DOCS/waf-buildsystem.rst`. TL;DR: we couldn't get the same level of abstraction and customization with other build systems we tried (CMake and autotools). For guidance on how to build the software now, take a look at README.md and the cross compilation guide. CREDITS: This is a squash of ~250 commits. Some of them are not by me, so here is the deserved attribution: - @wm4 contributed some Windows fixes, renamed configure to old-configure and contributed to the bootstrap script. Also, GNU/Linux testing. - @lachs0r contributed some Windows fixes and the bootstrap script. - @Nikoli contributed a lot of testing and discovered many bugs. - @CrimsonVoid contributed changes to the bootstrap script.
This commit is contained in:
0
waftools/detections/__init__.py
Normal file
0
waftools/detections/__init__.py
Normal file
57
waftools/detections/compiler.py
Normal file
57
waftools/detections/compiler.py
Normal file
@@ -0,0 +1,57 @@
|
||||
from waflib import Utils
|
||||
|
||||
def __get_cc_env_vars__(cc):
|
||||
cmd = cc + ['-dM', '-E', '-']
|
||||
try:
|
||||
p = Utils.subprocess.Popen(cmd, stdin=Utils.subprocess.PIPE,
|
||||
stdout=Utils.subprocess.PIPE,
|
||||
stderr=Utils.subprocess.PIPE)
|
||||
p.stdin.write('\n'.encode())
|
||||
return p.communicate()[0]
|
||||
except Exception:
|
||||
return ""
|
||||
|
||||
def __add_generic_flags__(ctx):
|
||||
ctx.env.CFLAGS += ["-D_ISOC99_SOURCE", "-D_GNU_SOURCE",
|
||||
"-D_LARGEFILE_SOURCE", "-D_FILE_OFFSET_BITS=64",
|
||||
"-D_LARGEFILE64_SOURCE",
|
||||
"-std=gnu99", "-Wall"]
|
||||
|
||||
if ctx.is_debug_build():
|
||||
ctx.env.CFLAGS += ['-g']
|
||||
|
||||
def __add_gcc_flags__(ctx):
|
||||
ctx.env.CFLAGS += ["-Wundef", "-Wmissing-prototypes",
|
||||
"-Wno-switch", "-Wno-parentheses", "-Wpointer-arith",
|
||||
"-Wredundant-decls", "-Wno-pointer-sign",
|
||||
"-Werror=implicit-function-declaration",
|
||||
"-Wno-error=deprecated-declarations",
|
||||
"-Wno-error=unused-function" ]
|
||||
|
||||
def __add_clang_flags__(ctx):
|
||||
ctx.env.CFLAGS += ["-Wno-logical-op-parentheses", "-fcolor-diagnostics"]
|
||||
|
||||
def __add_mingw_flags__(ctx):
|
||||
ctx.env.CFLAGS += ['-D__USE_MINGW_ANSI_STDIO=1']
|
||||
ctx.env.CFLAGS += ['-DBYTE_ORDER=1234']
|
||||
ctx.env.CFLAGS += ['-DLITLE_ENDIAN=1234']
|
||||
ctx.env.CFLAGS += ['-DBIG_ENDIAN=4321']
|
||||
ctx.env.LAST_LINKFLAGS += ['-mconsole']
|
||||
|
||||
__compiler_map__ = {
|
||||
'__GNUC__': __add_gcc_flags__,
|
||||
'__clang__': __add_clang_flags__,
|
||||
'__MINGW32__': __add_mingw_flags__,
|
||||
}
|
||||
|
||||
def __apply_map__(ctx, fnmap):
|
||||
if 'CC_ENV_VARS' not in ctx.env:
|
||||
ctx.env.CC_ENV_VARS = str(__get_cc_env_vars__(ctx.env.CC))
|
||||
for k, fn in fnmap.items():
|
||||
if ctx.env.CC_ENV_VARS.find(k) > 0:
|
||||
fn(ctx)
|
||||
|
||||
def configure(ctx):
|
||||
__add_generic_flags__(ctx)
|
||||
__apply_map__(ctx, __compiler_map__)
|
||||
|
||||
28
waftools/detections/cpu.py
Normal file
28
waftools/detections/cpu.py
Normal file
@@ -0,0 +1,28 @@
|
||||
def x86(ctx):
|
||||
ctx.define('ARCH_X86', 1)
|
||||
ctx.define('ARCH_X86_32', 1)
|
||||
|
||||
def x86_64(ctx):
|
||||
ctx.define('ARCH_X86', 1)
|
||||
ctx.define('ARCH_X86_64', 1)
|
||||
ctx.define('HAVE_FAST_64BIT', 1)
|
||||
|
||||
def ia64(ctx):
|
||||
ctx.define('HAVE_FAST_64BIT', 1)
|
||||
|
||||
def default(ctx):
|
||||
pass
|
||||
|
||||
def configure(ctx):
|
||||
ctx.define('ARCH_X86', 0)
|
||||
ctx.define('ARCH_X86_32', 0)
|
||||
ctx.define('ARCH_X86_64', 0)
|
||||
ctx.define('HAVE_FAST_64BIT', 0)
|
||||
|
||||
ctx.define('HAVE_MMX', 'ARCH_X86', quote=False)
|
||||
ctx.define('HAVE_MMX2', 'ARCH_X86', quote=False)
|
||||
ctx.define('HAVE_SSE', 'ARCH_X86', quote=False)
|
||||
ctx.define('HAVE_SSE2', 'ARCH_X86', quote=False)
|
||||
ctx.define('HAVE_SSSE3', 'ARCH_X86', quote=False)
|
||||
|
||||
globals().get(ctx.env.DEST_CPU, default)(ctx)
|
||||
29
waftools/detections/devices.py
Normal file
29
waftools/detections/devices.py
Normal file
@@ -0,0 +1,29 @@
|
||||
__cdrom_devices_map__ = {
|
||||
'win32': 'D:',
|
||||
'cygwin': 'D:',
|
||||
'darwin': '/dev/disk1',
|
||||
'freebsd': '/dev/cd0',
|
||||
'openbsd': '/dev/rcd0r',
|
||||
'default': '/dev/cdrom'
|
||||
}
|
||||
|
||||
__dvd_devices_map__ = {
|
||||
'win32': 'D:',
|
||||
'cygwin': 'D:',
|
||||
'darwin': '/dev/rdiskN',
|
||||
'freebsd': '/dev/cd0',
|
||||
'openbsd': '/dev/rcd0r',
|
||||
'default': '/dev/dvd'
|
||||
}
|
||||
|
||||
def __default_cdrom_device__(ctx):
|
||||
default = __cdrom_devices_map__['default']
|
||||
return __cdrom_devices_map__.get(ctx.env.DEST_OS, default)
|
||||
|
||||
def __default_dvd_device__(ctx):
|
||||
default = __dvd_devices_map__['default']
|
||||
return __dvd_devices_map__.get(ctx.env.DEST_OS, default)
|
||||
|
||||
def configure(ctx):
|
||||
ctx.define('DEFAULT_DVD_DEVICE', __default_dvd_device__(ctx))
|
||||
ctx.define('DEFAULT_CDROM_DEVICE', __default_cdrom_device__(ctx))
|
||||
Reference in New Issue
Block a user