cscg22-gearboy

CSCG 2022 Challenge 'Gearboy'
git clone https://git.sinitax.com/sinitax/cscg22-gearboy
Log | Files | Refs | sfeed.txt

sdl_dependency_checkers.lua (7874B)


      1-- Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org>
      2--
      3-- This software is provided 'as-is', without any express or implied
      4-- warranty.  In no event will the authors be held liable for any damages
      5-- arising from the use of this software.
      6--
      7-- Permission is granted to anyone to use this software for any purpose,
      8-- including commercial applications, and to alter it and redistribute it
      9-- freely.
     10--
     11-- Meta-build system using premake created and maintained by
     12-- Benjamin Henning <b.henning@digipen.edu>
     13
     14--[[
     15sdl_dependency_checkers.lua
     16
     17	This script contains a bunch of functions which determine whether certain
     18	dependencies exist on the current platform. These functions are able to use
     19	any and all available utilities for trying to determine both whether the
     20	dependency is available on this platform, and how to build to the dependency.
     21	There are a few limitations with these functions, but many of the limitations
     22	can be mitigated by using the dependency definition functions in the project
     23	definition files.
     24	
     25	Each function in this file, in order to be a valid dependency function, must
     26	return a table with the following entries:
     27	
     28	'found' = boolean value indicating whether the dependency was found
     29	'incDirs' = table of include directory strings, or nil if none are needed
     30	'libDirs' = table of library directory strings, or nil if none are needed
     31	'libs' = table of libraries to link to, or nil if none are needed
     32	
     33	All functions must be properly registered with the project definition system
     34	in order to be properly referenced by projects.
     35]]
     36
     37-- dependency functions must return the following:
     38-- table with an element found, incDirs, libDirs, and libs
     39function openGLDep()
     40	print("Checking OpenGL dependencies...")
     41	if SDL_getos() == "macosx" then
     42		-- mac should always have support for OpenGL...
     43		return { found = true, libs = { "OpenGL.framework" } }
     44	elseif SDL_getos() == "ios" then
     45		--...unless on iOS
     46		print("Desktop OpenGL is not supported on iOS targets.")
     47		return { found = false, libs = { "OpenGL.framework" } }
     48	elseif SDL_getos() == "cygwin" then
     49		print("OpenGL is not currently supported on Cygwin.")
     50		return { found = false, libDirs = { }, libs = { "OpenGL32" } }
     51	end
     52	local libpath = nil
     53  local libname = nil
     54	if SDL_getos() == "windows" or SDL_getos() == "mingw" then
     55		libpath = os.findlib("OpenGL32")
     56		libname = "OpenGL32"
     57	else -- *nix
     58		libpath = os.findlib("libGL")
     59		libname = "GL"
     60	end
     61	local foundLib = libpath ~= nil
     62	-- another way to possibly find the dependency on windows
     63	--if not foundLib then
     64	--	foundLib, libpath = find_dependency_dir_windows(nil, "C:/Program Files (x86);C:/Program Files", "Microsoft SDKs", "Lib")
     65	--end
     66	if not foundLib then return { found = false } end
     67	if SDL_getos() == "mingw" then
     68		libpath = libpath:gsub("\\", "/"):gsub("//", "/")
     69	end
     70	return { found = foundLib, libDirs = { }, libs = { libname } }
     71end
     72
     73function directXDep()
     74	print("Checking DirectX dependencies...")
     75	-- enable this for more correct searching, but it's much slower
     76	local searchPath = nil --os.getenvpath("ProgramFiles", "ProgramFiles(x86)")
     77	local foundInc, incpath = find_dependency_dir_windows("DXSDK_DIR", searchPath, "DirectX", "Include")
     78	local foundLib, libpath = find_dependency_dir_windows("DXSDK_DIR", searchPath, "DirectX", "Lib/x86")
     79	if not foundInc or not foundLib then return { found = false } end
     80	-- XXX: hacked mingw check...
     81	if foundInc and SDL_getos() == "mingw" then
     82		incpath = incpath:gsub("%$%(DXSDK_DIR%)", os.getenv("DXSDK_DIR")):gsub("\\", "/"):gsub("//", "/")
     83		libpath = libpath:gsub("%$%(DXSDK_DIR%)", os.getenv("DXSDK_DIR")):gsub("\\", "/"):gsub("//", "/")
     84	end
     85	if SDL_getos() == "mingw" then
     86		print("DirectX is not currently supported on MinGW targets.")
     87		return { found = false, incDirs = { incpath }, libDirs = { libpath } }
     88	end
     89	if SDL_getos() == "cygwin" then
     90		print("DirectX is not currently supported on Cygwin targets.")
     91		return { found = false, incDirs = { incpath }, libDirs = { libpath } }
     92	end
     93	return { found = true, incDirs = { incpath }, libDirs = { libpath } }
     94end
     95
     96function dbusDep()
     97	print("Checking for D-Bus support...")
     98	if not check_include_directories("/usr/include/dbus-1.0", "/usr/lib/x86_64-linux-gnu/dbus-1.0/include") then
     99		print("Warning: D-Bus unsupported!")
    100		return { found = false }
    101	end
    102	return { found = true, incDirs = { "/usr/include/dbus-1.0", "/usr/lib/x86_64-linux-gnu/dbus-1.0/include" } }
    103end
    104
    105function alsaDep()
    106	print("Checking for ALSA support...")
    107	if not check_include_files("alsa/asoundlib.h")
    108			or os.findlib("asound") == nil
    109			or not check_library_exists_lookup("asound", "snd_pcm_open", "alsa/asoundlib.h")
    110			or not SDL_assertdepfunc("DLOpen") then
    111		print("Warning: ALSA unsupported!")
    112		return { found = false }
    113	end
    114	return { found = true }
    115end
    116
    117function pulseAudioDep()
    118	print("Checking for PulseAudio support...")
    119	if os.findlib("libpulse-simple") == nil
    120			or not SDL_assertdepfunc("DLOpen") then
    121		print("Warning: PulseAudio unsupported!")
    122		return { found = false }
    123	end
    124	return { found = true }
    125end
    126
    127function esdDep()
    128	print("Checking for ESD support...")
    129	if os.findlib("esd") == nil
    130			or not SDL_assertdepfunc("DLOpen") then
    131		print("Warning: ESD unsupported!")
    132		return { found = false }
    133	end
    134	return { found = true }
    135end
    136
    137function nasDep()
    138	print("Checking for NAS support...")
    139	if not check_include_file("audio/audiolib.h")
    140			or not SDL_assertdepfunc("DLOpen") then
    141		print("Warning: NAS unsupported!")
    142		return { found = false }
    143	end
    144	return { found = true }
    145end
    146
    147function ossDep()
    148	print("Checking for OSS support...")
    149	if not check_cxx_source_compiles([[
    150				#include <sys/soundcard.h>
    151				int main() { int arg = SNDCTL_DSP_SETFRAGMENT; return 0; }]])
    152			and not check_cxx_source_compiles([[
    153				#include <soundcard.h>
    154				int main() { int arg = SNDCTL_DSP_SETFRAGMENT; return 0; }]]) then
    155		print("Warning: OSS unsupported!")
    156		return { found = false }
    157	end
    158	return { found = true }
    159end
    160
    161function dlOpenDep()
    162	print("Checking for DLOpen support...")
    163	if not check_library_exists_multiple("dlopen", "dlfcn.h", "dl", "tdl") then
    164		print("Warning: DLOpen unsupported!")
    165		return { found = false }
    166	end
    167	return { found = true, libs = { "dl" } }
    168end
    169
    170function x11Dep()
    171	print("Checking for X11 support...")
    172	for _, v in ipairs { "X11", "Xext", "Xcursor", "Xinerama", "Xi", "Xrandr", "Xrender", "Xss", "Xxf86vm" } do
    173		if os.findlib(v) == nil then
    174			print("Warning: X11 unsupported!")
    175			return { found = false }
    176		end
    177	end
    178	if not check_include_files("X11/Xcursor/Xcursor.h", "X11/extensions/Xinerama.h",
    179			"X11/extensions/XInput2.h", "X11/extensions/Xrandr.h", "X11/extensions/Xrender.h",
    180			"X11/extensions/scrnsaver.h", "X11/extensions/shape.h", "X11/Xlib.h",
    181			"X11/extensions/xf86vmode.h") then
    182		print("Warning: X11 unsupported!")
    183		return { found = false }
    184	end
    185	if not SDL_assertdepfunc("DLOpen") then
    186		print("Warning: X11 unsupported!")
    187		return { found = false }
    188	end
    189	-- XXX: shared memory check...
    190	-- there's a LOT more to check to properly configure X11...
    191	return { found = true, libs = { "X11" } }
    192end
    193
    194-- register all of these dependency functions with the definition system
    195SDL_registerDependencyChecker("OpenGL", openGLDep)
    196SDL_registerDependencyChecker("DirectX", directXDep)
    197SDL_registerDependencyChecker("DBus", dbusDep)
    198SDL_registerDependencyChecker("ALSA", alsaDep)
    199SDL_registerDependencyChecker("PulseAudio", pulseAudioDep)
    200SDL_registerDependencyChecker("ESD", esdDep)
    201SDL_registerDependencyChecker("NAS", nasDep)
    202SDL_registerDependencyChecker("OSS", ossDep)
    203SDL_registerDependencyChecker("DLOpen", dlOpenDep)
    204SDL_registerDependencyChecker("X11", x11Dep)