cscg22-gearboy

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

sdl_depends.lua (2976B)


      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-- This is kept just for windows because the other platforms use different means
     15-- for determining dependence or compatibility.
     16
     17--[[
     18sdl_depends.lua
     19
     20	This file simply contains a function for determining whether a dependency
     21	exists on the Windows platform, given a possible environmental variable,
     22	delimited search paths, and a main and/or sub-directory paths for more
     23	elaborate pattern matching.
     24]]
     25
     26-- find_dependency_dir_windows(env, main_search_path, main_dir_path)
     27--   Attempt to resolve a dependency (true or false) folder based on either an
     28--   environmental variable, start search path, or both. If both are present,
     29--   the environmental variable will be preferred. If neither are present, this
     30--   function returns false.
     31--
     32--   Arguments:
     33--     env                The name of the environmental variable to treat as a path
     34--     main_search_paths  Paths to look for the main directory in
     35--     main_dir_path      The a path that must be contained between main_search_path and sub_dir_path
     36--     sub_dir_path       The path of the directories that should exist at the searched path
     37function find_dependency_dir_windows(env, main_search_paths, main_dir_path, sub_dir_path)
     38	if not os.is("windows") then -- if not windows, then fail
     39		return false
     40	end
     41	if env == nil and (main_search_paths == nil or #main_search_paths == 0) then
     42		return false
     43	end
     44	local env_path = nil
     45	local main_path = nil
     46	if env ~= nil then env_path = os.getenv(env) end
     47	local search_table = { n = 0 }
     48	if main_search_paths ~= nil then
     49		for k,main_search_path in ipairs(explode(main_search_paths, ";")) do
     50			local directories = os.matchdirs(main_search_path .. "/**" .. main_dir_path .. "*")
     51			for k,v in pairs(directories) do
     52				table.insert(search_table, v)
     53			end
     54		end
     55	end
     56	if env_path ~= nil then table.insert(search_table, env_path) end
     57	local search_path = table.concat(search_table, ";")
     58	local result_path = os.dirpathsearch(sub_dir_path, search_path, ";")
     59	if result_path == nil then
     60		return false
     61	end
     62	local found_dir = os.isdir(result_path)
     63	local abs_path = path.getabsolute(result_path)
     64	if found_dir and env_path ~= nil then
     65		abs_path = abs_path:gsub("\\", "/")
     66		env_path = env_path:gsub("\\", "/")
     67		local pos = abs_path:indexOf(env_path)
     68		if pos ~= nil then
     69			abs_path = abs_path:sub(1, pos - 1) .. "$(" .. env .. ")/" .. abs_path:sub(pos + #env_path)
     70		end
     71	end
     72	-- we want the path in terms of '/'
     73	return found_dir, abs_path
     74end