|
|
|
package("sfml")
|
|
|
|
set_homepage("https://www.sfml-dev.org")
|
|
|
|
set_description("Simple and Fast Multimedia Library")
|
|
|
|
set_license("zlib")
|
|
|
|
|
|
|
|
add_urls("https://github.com/SFML/SFML/archive/refs/tags/$(version).tar.gz",
|
|
|
|
"https://github.com/SFML/SFML.git")
|
|
|
|
|
|
|
|
-- Before 2.6.0 only x86 is supported for Mac
|
|
|
|
if not is_plat("macosx") or not is_arch("arm.*") then
|
|
|
|
add_versions("2.5.1", "438c91a917cc8aa19e82c6f59f8714da353c488584a007d401efac8368e1c785")
|
|
|
|
end
|
|
|
|
|
|
|
|
add_versions("2.6.0", "0c3f84898ea1db07dc46fa92e85038d8c449e3c8653fe09997383173de96bc06")
|
|
|
|
|
|
|
|
add_configs("graphics", {description = "Use the graphics module", default = true, type = "boolean"})
|
|
|
|
add_configs("window", {description = "Use the window module", default = true, type = "boolean"})
|
|
|
|
add_configs("audio", {description = "Use the audio module", default = true, type = "boolean"})
|
|
|
|
add_configs("network", {description = "Use the network module", default = true, type = "boolean"})
|
|
|
|
if is_plat("windows", "mingw") then
|
|
|
|
add_configs("main", {description = "Link to the sfml-main library", default = true, type = "boolean"})
|
|
|
|
end
|
|
|
|
|
|
|
|
if is_plat("macosx") then
|
|
|
|
add_extsources("brew::sfml/sfml-all")
|
|
|
|
elseif not is_host("windows") then
|
|
|
|
add_extsources("pkgconfig::sfml-all")
|
|
|
|
end
|
|
|
|
|
|
|
|
on_component("graphics", function (package, component)
|
|
|
|
local e = package:config("shared") and "" or "-s"
|
|
|
|
if package:debug() then
|
|
|
|
e = e .. "-d"
|
|
|
|
end
|
|
|
|
component:add("links", "sfml-graphics" .. e)
|
|
|
|
component:add("deps", "window", "system")
|
|
|
|
component:add("extsources", "brew::sfml/sfml-graphics")
|
|
|
|
component:add("extsources", "pkgconfig::sfml-graphics")
|
|
|
|
end)
|
|
|
|
|
|
|
|
on_component("window", function (package, component)
|
|
|
|
local e = package:config("shared") and "" or "-s"
|
|
|
|
if package:debug() then
|
|
|
|
e = e .. "-d"
|
|
|
|
end
|
|
|
|
component:add("links", "sfml-window" .. e)
|
|
|
|
component:add("deps", "system")
|
|
|
|
component:add("extsources", "brew::sfml/sfml-window")
|
|
|
|
component:add("extsources", "pkgconfig::sfml-window")
|
|
|
|
if not package:config("shared") then
|
|
|
|
if package:is_plat("windows", "mingw") then
|
|
|
|
component:add("syslinks", "opengl32", "gdi32", "advapi32", "user32")
|
|
|
|
elseif package:is_plat("linux") then
|
|
|
|
component:add("syslinks", "dl")
|
|
|
|
elseif package:is_plat("bsd") then
|
|
|
|
component:add("syslinks", "usbhid")
|
|
|
|
elseif package:is_plat("macosx") then
|
|
|
|
component:add("frameworks", "Foundation", "AppKit", "IOKit", "Carbon")
|
|
|
|
elseif package:is_plat("iphoneos") then
|
|
|
|
component:add("frameworks", "Foundation", "UIKit", "CoreGraphics", "QuartzCore", "CoreMotion")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end)
|
|
|
|
|
|
|
|
on_component("audio", function (package, component)
|
|
|
|
local e = package:config("shared") and "" or "-s"
|
|
|
|
if package:debug() then
|
|
|
|
e = e .. "-d"
|
|
|
|
end
|
|
|
|
component:add("links", "sfml-audio" .. e)
|
|
|
|
component:add("deps", "system")
|
|
|
|
component:add("extsources", "brew::sfml/sfml-audio")
|
|
|
|
component:add("extsources", "pkgconfig::sfml-audio")
|
|
|
|
if not package:config("shared") and package:is_plat("windows", "mingw") then
|
|
|
|
component:add("links", "openal32", "flac", "vorbisenc", "vorbisfile", "vorbis", "ogg")
|
|
|
|
end
|
|
|
|
end)
|
|
|
|
|
|
|
|
on_component("network", function (package, component)
|
|
|
|
local e = package:config("shared") and "" or "-s"
|
|
|
|
if package:debug() then
|
|
|
|
e = e .. "-d"
|
|
|
|
end
|
|
|
|
component:add("links", "sfml-network" .. e)
|
|
|
|
component:add("deps", "system")
|
|
|
|
component:add("extsources", "brew::sfml/sfml-network")
|
|
|
|
component:add("extsources", "pkgconfig::sfml-network")
|
|
|
|
component:add("extsources", "apt::sfml-network")
|
|
|
|
if not package:config("shared") and package:is_plat("windows", "mingw") then
|
|
|
|
component:add("syslinks", "ws2_32")
|
|
|
|
end
|
|
|
|
end)
|
|
|
|
|
|
|
|
on_component("system", function (package, component)
|
|
|
|
local e = package:config("shared") and "" or "-s"
|
|
|
|
if package:debug() then
|
|
|
|
e = e .. "-d"
|
|
|
|
end
|
|
|
|
component:add("links", "sfml-system" .. e)
|
|
|
|
if package:is_plat("windows", "mingw") then
|
|
|
|
component:add("syslinks", "winmm")
|
|
|
|
end
|
|
|
|
if package:is_plat("windows", "mingw") and package:config("main") then
|
|
|
|
component:add("deps", "main")
|
|
|
|
end
|
|
|
|
component:add("extsources", "brew::sfml/sfml-system")
|
|
|
|
component:add("extsources", "pkgconfig::sfml-system")
|
|
|
|
if not package:config("shared") then
|
|
|
|
if package:is_plat("windows", "mingw") then
|
|
|
|
component:add("syslinks", "winmm")
|
|
|
|
elseif package:is_plat("linux") then
|
|
|
|
component:add("syslinks", "rt", "pthread")
|
|
|
|
elseif package:is_plat("bsd", "macosx") then
|
|
|
|
component:add("syslinks", "pthread")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end)
|
|
|
|
|
|
|
|
on_component("main", function (package, component)
|
|
|
|
if package:is_plat("windows", "mingw") then
|
|
|
|
local main_module = "sfml-main"
|
|
|
|
if package:debug() then
|
|
|
|
main_module = main_module .. "-d"
|
|
|
|
end
|
|
|
|
component:add("links", main_module)
|
|
|
|
end
|
|
|
|
end)
|
|
|
|
|
|
|
|
on_load("windows", "linux", "macosx", "mingw", function (package)
|
|
|
|
if package:is_plat("windows", "linux", "macosx") then
|
|
|
|
package:add("deps", "cmake")
|
|
|
|
end
|
|
|
|
|
|
|
|
if not package:config("shared") then
|
|
|
|
package:add("defines", "SFML_STATIC")
|
|
|
|
end
|
|
|
|
|
|
|
|
if package:config("graphics") then
|
|
|
|
package:add("deps", "freetype")
|
|
|
|
end
|
|
|
|
|
|
|
|
if package:is_plat("linux") then
|
|
|
|
if package:config("window") or package:config("graphics") then
|
|
|
|
package:add("deps", "libx11", "libxcursor", "libxrandr", "libxrender", "libxfixes", "libxext", "eudev")
|
|
|
|
package:add("deps", "opengl", "glx", {optional = true})
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
if package:config("audio") then
|
|
|
|
package:add("deps", "libogg", "libflac", "libvorbis", "openal-soft")
|
|
|
|
end
|
|
|
|
|
|
|
|
package:add("components", "system")
|
|
|
|
for _, component in ipairs({"graphics", "window", "audio", "network"}) do
|
|
|
|
if package:config(component) then
|
|
|
|
package:add("components", component)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
if package:is_plat("windows", "mingw") and package:config("main") then
|
|
|
|
package:add("components", "main")
|
|
|
|
end
|
|
|
|
end)
|
|
|
|
|
|
|
|
on_install("windows", "linux", "macosx", "mingw", function (package)
|
|
|
|
local configs = {"-DSFML_BUILD_DOC=OFF", "-DSFML_BUILD_EXAMPLES=OFF"}
|
|
|
|
table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release"))
|
|
|
|
if package:config("shared") then
|
|
|
|
table.insert(configs, "-DBUILD_SHARED_LIBS=ON")
|
|
|
|
-- Fix missing system libs
|
|
|
|
if package:config("audio") then
|
|
|
|
if package:is_plat("windows", "mingw") then
|
|
|
|
local file = io.open("src/SFML/Audio/CMakeLists.txt", "a")
|
|
|
|
file:print("target_link_libraries(OpenAL INTERFACE winmm)")
|
|
|
|
file:close()
|
|
|
|
end
|
|
|
|
end
|
|
|
|
if package:config("graphics") then
|
|
|
|
local freetype = package:dep("freetype")
|
|
|
|
if freetype then
|
|
|
|
local fetchinfo = freetype:fetch()
|
|
|
|
if fetchinfo then
|
|
|
|
if not freetype:config("shared") then
|
|
|
|
local libfiles = {}
|
|
|
|
for _, dep in ipairs(freetype:librarydeps()) do
|
|
|
|
local depinfo = dep:fetch()
|
|
|
|
if depinfo then
|
|
|
|
table.join2(libfiles, depinfo.libfiles)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
if #libfiles > 0 then
|
|
|
|
local libraries = {}
|
|
|
|
for _, libfile in ipairs(libfiles) do
|
|
|
|
table.insert(libraries, (libfile:gsub("\\", "/")))
|
|
|
|
end
|
|
|
|
local file = io.open("src/SFML/Graphics/CMakeLists.txt", "a")
|
|
|
|
file:print("target_link_libraries(Freetype INTERFACE " .. table.concat(libraries, " ") .. ")")
|
|
|
|
file:close()
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
if package:config("window") and package:is_plat("linux") then
|
|
|
|
local libfiles = {}
|
|
|
|
for _, name in ipairs({"libx11", "libxcursor", "libxrandr", "libxrender", "libxfixes", "libxext"}) do
|
|
|
|
local dep = package:dep(name)
|
|
|
|
if dep then
|
|
|
|
local fetchinfo = dep:fetch()
|
|
|
|
if fetchinfo then
|
|
|
|
table.join2(libfiles, fetchinfo.libfiles)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
if #libfiles > 0 then
|
|
|
|
libfiles = table.reverse_unique(libfiles)
|
|
|
|
local libraries = {}
|
|
|
|
for _, libfile in ipairs(libfiles) do
|
|
|
|
table.insert(libraries, (libfile:gsub("\\", "/")))
|
|
|
|
end
|
|
|
|
local file = io.open("src/SFML/Window/CMakeLists.txt", "a")
|
|
|
|
file:print("target_link_libraries(sfml-window PRIVATE " .. table.concat(libraries, " ") .. ")")
|
|
|
|
file:close()
|
|
|
|
end
|
|
|
|
end
|
|
|
|
else
|
|
|
|
table.insert(configs, "-DBUILD_SHARED_LIBS=OFF")
|
|
|
|
if package:is_plat("windows") and package:config("vs_runtime"):startswith("MT") then
|
|
|
|
table.insert(configs, "-DSFML_USE_STATIC_STD_LIBS=ON")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
table.insert(configs, "-DSFML_BUILD_AUDIO=" .. (package:config("audio") and "ON" or "OFF"))
|
|
|
|
table.insert(configs, "-DSFML_BUILD_GRAPHICS=" .. (package:config("graphics") and "ON" or "OFF"))
|
|
|
|
table.insert(configs, "-DSFML_BUILD_WINDOW=" .. (package:config("window") and "ON" or "OFF"))
|
|
|
|
table.insert(configs, "-DSFML_BUILD_NETWORK=" .. (package:config("network") and "ON" or "OFF"))
|
|
|
|
table.insert(configs, "-DWARNINGS_AS_ERRORS=OFF")
|
|
|
|
table.insert(configs, "-DSFML_USE_SYSTEM_DEPS=TRUE")
|
|
|
|
local packagedeps
|
|
|
|
if package:config("audio") then
|
|
|
|
packagedeps = packagedeps or {}
|
|
|
|
table.insert(packagedeps, "openal-soft")
|
|
|
|
end
|
|
|
|
if package:config("graphics") then
|
|
|
|
packagedeps = packagedeps or {}
|
|
|
|
table.insert(packagedeps, "freetype")
|
|
|
|
table.insert(packagedeps, "zlib")
|
|
|
|
end
|
|
|
|
|
|
|
|
import("package.tools.cmake").install(package, configs, {packagedeps = packagedeps})
|
|
|
|
end)
|
|
|
|
|
|
|
|
on_test(function (package)
|
|
|
|
assert(package:check_cxxsnippets({test = [[
|
|
|
|
void test(int args, char** argv) {
|
|
|
|
sf::Clock c;
|
|
|
|
c.restart();
|
|
|
|
}
|
|
|
|
]]}, {includes = "SFML/System.hpp"}))
|
|
|
|
if package:config("graphics") then
|
|
|
|
assert(package:check_cxxsnippets({test = [[
|
|
|
|
void test(int args, char** argv) {
|
|
|
|
sf::Text text;
|
|
|
|
text.setString("Hello world");
|
|
|
|
}
|
|
|
|
]]}, {includes = "SFML/Graphics.hpp"}))
|
|
|
|
end
|
|
|
|
if package:config("window") or package:config("graphics") then
|
|
|
|
assert(package:check_cxxsnippets({test = [[
|
|
|
|
void test(int args, char** argv) {
|
|
|
|
sf::Window window(sf::VideoMode(1280, 720), "Title");
|
|
|
|
|
|
|
|
sf::Event event;
|
|
|
|
window.pollEvent(event);
|
|
|
|
}
|
|
|
|
]]}, {includes = "SFML/Window.hpp"}))
|
|
|
|
end
|
|
|
|
if package:config("audio") then
|
|
|
|
assert(package:check_cxxsnippets({test = [[
|
|
|
|
void test(int args, char** argv) {
|
|
|
|
sf::Music music;
|
|
|
|
music.openFromFile("music.ogg");
|
|
|
|
music.play();
|
|
|
|
}
|
|
|
|
]]}, {includes = "SFML/Audio.hpp"}))
|
|
|
|
end
|
|
|
|
if package:config("network") then
|
|
|
|
assert(package:check_cxxsnippets({test = [[
|
|
|
|
void test(int args, char** argv) {
|
|
|
|
sf::UdpSocket socket;
|
|
|
|
socket.bind(54000);
|
|
|
|
|
|
|
|
char data[100];
|
|
|
|
std::size_t received;
|
|
|
|
sf::IpAddress sender;
|
|
|
|
unsigned short port;
|
|
|
|
socket.receive(data, 100, received, sender, port);
|
|
|
|
}
|
|
|
|
]]}, {includes = "SFML/Network.hpp"}))
|
|
|
|
end
|
|
|
|
end)
|