-- Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | |
-- | |
-- This software is provided 'as-is', without any express or implied | |
-- warranty. In no event will the authors be held liable for any damages | |
-- arising from the use of this software. | |
-- | |
-- Permission is granted to anyone to use this software for any purpose, | |
-- including commercial applications, and to alter it and redistribute it | |
-- freely. | |
-- | |
-- Meta-build system using premake created and maintained by | |
-- Benjamin Henning <b.henning@digipen.edu> | |
--[[ | |
sdl_dependency_checkers.lua | |
This script contains a bunch of functions which determine whether certain | |
dependencies exist on the current platform. These functions are able to use | |
any and all available utilities for trying to determine both whether the | |
dependency is available on this platform, and how to build to the dependency. | |
There are a few limitations with these functions, but many of the limitations | |
can be mitigated by using the dependency definition functions in the project | |
definition files. | |
Each function in this file, in order to be a valid dependency function, must | |
return a table with the following entries: | |
'found' = boolean value indicating whether the dependency was found | |
'incDirs' = table of include directory strings, or nil if none are needed | |
'libDirs' = table of library directory strings, or nil if none are needed | |
'libs' = table of libraries to link to, or nil if none are needed | |
All functions must be properly registered with the project definition system | |
in order to be properly referenced by projects. | |
]] | |
-- dependency functions must return the following: | |
-- table with an element found, incDirs, libDirs, and libs | |
function openGLDep() | |
print("Checking OpenGL dependencies...") | |
if SDL_getos() == "macosx" then | |
-- mac should always have support for OpenGL... | |
return { found = true, libs = { "OpenGL.framework" } } | |
elseif SDL_getos() == "ios" then | |
--...unless on iOS | |
print("Desktop OpenGL is not supported on iOS targets.") | |
return { found = false, libs = { "OpenGL.framework" } } | |
elseif SDL_getos() == "cygwin" then | |
print("OpenGL is not currently supported on Cygwin.") | |
return { found = false, libDirs = { }, libs = { "OpenGL32" } } | |
end | |
local libpath = nil | |
local libname = nil | |
if SDL_getos() == "windows" or SDL_getos() == "mingw" then | |
libpath = os.findlib("OpenGL32") | |
libname = "OpenGL32" | |
else -- *nix | |
libpath = os.findlib("libGL") | |
libname = "GL" | |
end | |
local foundLib = libpath ~= nil | |
-- another way to possibly find the dependency on windows | |
--if not foundLib then | |
-- foundLib, libpath = find_dependency_dir_windows(nil, "C:/Program Files (x86);C:/Program Files", "Microsoft SDKs", "Lib") | |
--end | |
if not foundLib then return { found = false } end | |
if SDL_getos() == "mingw" then | |
libpath = libpath:gsub("\\", "/"):gsub("//", "/") | |
end | |
return { found = foundLib, libDirs = { }, libs = { libname } } | |
end | |
function directXDep() | |
print("Checking DirectX dependencies...") | |
-- enable this for more correct searching, but it's much slower | |
local searchPath = nil --os.getenvpath("ProgramFiles", "ProgramFiles(x86)") | |
local foundInc, incpath = find_dependency_dir_windows("DXSDK_DIR", searchPath, "DirectX", "Include") | |
local foundLib, libpath = find_dependency_dir_windows("DXSDK_DIR", searchPath, "DirectX", "Lib/x86") | |
if not foundInc or not foundLib then return { found = false } end | |
-- XXX: hacked mingw check... | |
if foundInc and SDL_getos() == "mingw" then | |
incpath = incpath:gsub("%$%(DXSDK_DIR%)", os.getenv("DXSDK_DIR")):gsub("\\", "/"):gsub("//", "/") | |
libpath = libpath:gsub("%$%(DXSDK_DIR%)", os.getenv("DXSDK_DIR")):gsub("\\", "/"):gsub("//", "/") | |
end | |
if SDL_getos() == "mingw" then | |
print("DirectX is not currently supported on MinGW targets.") | |
return { found = false, incDirs = { incpath }, libDirs = { libpath } } | |
end | |
if SDL_getos() == "cygwin" then | |
print("DirectX is not currently supported on Cygwin targets.") | |
return { found = false, incDirs = { incpath }, libDirs = { libpath } } | |
end | |
return { found = true, incDirs = { incpath }, libDirs = { libpath } } | |
end | |
function dbusDep() | |
print("Checking for D-Bus support...") | |
if not check_include_directories("/usr/include/dbus-1.0", "/usr/lib/x86_64-linux-gnu/dbus-1.0/include") then | |
print("Warning: D-Bus unsupported!") | |
return { found = false } | |
end | |
return { found = true, incDirs = { "/usr/include/dbus-1.0", "/usr/lib/x86_64-linux-gnu/dbus-1.0/include" } } | |
end | |
function alsaDep() | |
print("Checking for ALSA support...") | |
if not check_include_files("alsa/asoundlib.h") | |
or os.findlib("asound") == nil | |
or not check_library_exists_lookup("asound", "snd_pcm_open", "alsa/asoundlib.h") | |
or not SDL_assertdepfunc("DLOpen") then | |
print("Warning: ALSA unsupported!") | |
return { found = false } | |
end | |
return { found = true } | |
end | |
function pulseAudioDep() | |
print("Checking for PulseAudio support...") | |
if os.findlib("libpulse-simple") == nil | |
or not SDL_assertdepfunc("DLOpen") then | |
print("Warning: PulseAudio unsupported!") | |
return { found = false } | |
end | |
return { found = true } | |
end | |
function esdDep() | |
print("Checking for ESD support...") | |
if os.findlib("esd") == nil | |
or not SDL_assertdepfunc("DLOpen") then | |
print("Warning: ESD unsupported!") | |
return { found = false } | |
end | |
return { found = true } | |
end | |
function nasDep() | |
print("Checking for NAS support...") | |
if not check_include_file("audio/audiolib.h") | |
or not SDL_assertdepfunc("DLOpen") then | |
print("Warning: NAS unsupported!") | |
return { found = false } | |
end | |
return { found = true } | |
end | |
function ossDep() | |
print("Checking for OSS support...") | |
if not check_cxx_source_compiles([[ | |
#include <sys/soundcard.h> | |
int main() { int arg = SNDCTL_DSP_SETFRAGMENT; return 0; }]]) | |
and not check_cxx_source_compiles([[ | |
#include <soundcard.h> | |
int main() { int arg = SNDCTL_DSP_SETFRAGMENT; return 0; }]]) then | |
print("Warning: OSS unsupported!") | |
return { found = false } | |
end | |
return { found = true } | |
end | |
function dlOpenDep() | |
print("Checking for DLOpen support...") | |
if not check_library_exists_multiple("dlopen", "dlfcn.h", "dl", "tdl") then | |
print("Warning: DLOpen unsupported!") | |
return { found = false } | |
end | |
return { found = true, libs = { "dl" } } | |
end | |
function x11Dep() | |
print("Checking for X11 support...") | |
for _, v in ipairs { "X11", "Xext", "Xcursor", "Xinerama", "Xi", "Xrandr", "Xrender", "Xss", "Xxf86vm" } do | |
if os.findlib(v) == nil then | |
print("Warning: X11 unsupported!") | |
return { found = false } | |
end | |
end | |
if not check_include_files("X11/Xcursor/Xcursor.h", "X11/extensions/Xinerama.h", | |
"X11/extensions/XInput2.h", "X11/extensions/Xrandr.h", "X11/extensions/Xrender.h", | |
"X11/extensions/scrnsaver.h", "X11/extensions/shape.h", "X11/Xlib.h", | |
"X11/extensions/xf86vmode.h") then | |
print("Warning: X11 unsupported!") | |
return { found = false } | |
end | |
if not SDL_assertdepfunc("DLOpen") then | |
print("Warning: X11 unsupported!") | |
return { found = false } | |
end | |
-- XXX: shared memory check... | |
-- there's a LOT more to check to properly configure X11... | |
return { found = true, libs = { "X11" } } | |
end | |
-- register all of these dependency functions with the definition system | |
SDL_registerDependencyChecker("OpenGL", openGLDep) | |
SDL_registerDependencyChecker("DirectX", directXDep) | |
SDL_registerDependencyChecker("DBus", dbusDep) | |
SDL_registerDependencyChecker("ALSA", alsaDep) | |
SDL_registerDependencyChecker("PulseAudio", pulseAudioDep) | |
SDL_registerDependencyChecker("ESD", esdDep) | |
SDL_registerDependencyChecker("NAS", nasDep) | |
SDL_registerDependencyChecker("OSS", ossDep) | |
SDL_registerDependencyChecker("DLOpen", dlOpenDep) | |
SDL_registerDependencyChecker("X11", x11Dep) |