2016-01-02 18:10:34 +00:00
|
|
|
-- Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org>
|
2015-06-21 15:33:46 +00:00
|
|
|
--
|
|
|
|
-- 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>
|
|
|
|
|
|
|
|
-- This is kept just for windows because the other platforms use different means
|
|
|
|
-- for determining dependence or compatibility.
|
|
|
|
|
|
|
|
--[[
|
|
|
|
sdl_depends.lua
|
|
|
|
|
|
|
|
This file simply contains a function for determining whether a dependency
|
|
|
|
exists on the Windows platform, given a possible environmental variable,
|
|
|
|
delimited search paths, and a main and/or sub-directory paths for more
|
|
|
|
elaborate pattern matching.
|
|
|
|
]]
|
|
|
|
|
|
|
|
-- find_dependency_dir_windows(env, main_search_path, main_dir_path)
|
|
|
|
-- Attempt to resolve a dependency (true or false) folder based on either an
|
|
|
|
-- environmental variable, start search path, or both. If both are present,
|
|
|
|
-- the environmental variable will be preferred. If neither are present, this
|
|
|
|
-- function returns false.
|
|
|
|
--
|
|
|
|
-- Arguments:
|
|
|
|
-- env The name of the environmental variable to treat as a path
|
|
|
|
-- main_search_paths Paths to look for the main directory in
|
|
|
|
-- main_dir_path The a path that must be contained between main_search_path and sub_dir_path
|
|
|
|
-- sub_dir_path The path of the directories that should exist at the searched path
|
|
|
|
function find_dependency_dir_windows(env, main_search_paths, main_dir_path, sub_dir_path)
|
|
|
|
if not os.is("windows") then -- if not windows, then fail
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
if env == nil and (main_search_paths == nil or #main_search_paths == 0) then
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
local env_path = nil
|
|
|
|
local main_path = nil
|
|
|
|
if env ~= nil then env_path = os.getenv(env) end
|
|
|
|
local search_table = { n = 0 }
|
|
|
|
if main_search_paths ~= nil then
|
|
|
|
for k,main_search_path in ipairs(explode(main_search_paths, ";")) do
|
|
|
|
local directories = os.matchdirs(main_search_path .. "/**" .. main_dir_path .. "*")
|
|
|
|
for k,v in pairs(directories) do
|
|
|
|
table.insert(search_table, v)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
if env_path ~= nil then table.insert(search_table, env_path) end
|
|
|
|
local search_path = table.concat(search_table, ";")
|
|
|
|
local result_path = os.dirpathsearch(sub_dir_path, search_path, ";")
|
|
|
|
if result_path == nil then
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
local found_dir = os.isdir(result_path)
|
|
|
|
local abs_path = path.getabsolute(result_path)
|
|
|
|
if found_dir and env_path ~= nil then
|
|
|
|
abs_path = abs_path:gsub("\\", "/")
|
|
|
|
env_path = env_path:gsub("\\", "/")
|
|
|
|
local pos = abs_path:indexOf(env_path)
|
|
|
|
if pos ~= nil then
|
|
|
|
abs_path = abs_path:sub(1, pos - 1) .. "$(" .. env .. ")/" .. abs_path:sub(pos + #env_path)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
-- we want the path in terms of '/'
|
|
|
|
return found_dir, abs_path
|
|
|
|
end
|