--!A cross-platform build utility based on Lua
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
--     http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
--
-- Copyright (C) 2015-present, Xmake Open Source Community.
--
-- @author      ruki
-- @file        xmake.lua
--

task("global")
    set_category("action")
    on_run("main")
    set_menu {
                usage = "xmake global|g [options] [target]",
                description = "Configure the global options for xmake.",
                shortname = 'g',
                options = {
                    {'c', "clean",          "k",  nil       , "Clean the cached user configs and detection cache."},
                    {nil, "check",          "k",  nil       , "Just ignore detection cache and force to check all, it will reserve the cached user configs."},
                    {nil, "menu",           "k" , nil       , "Configure with a menu-driven user interface."              },
                    {category = "."},
                    {nil, "theme",          "kv", "default" , "The theme name."
                                                          , values = function ()
                                                               return import("core.theme.theme.names")()
                                                           end},
                    {nil, "debugger",       "kv", "auto"    , "The debugger program path."                                },
                    {nil, "ccache",         "kv", nil       , "Enable or disable the c/c++ compiler cache."               },
                    {category = "Build Configuration"},
                    {nil, "cachedir",       "kv", nil       , "The global cache directory."                               },
                    {nil, "policies",       "kv", nil       , "Set the global project policies.",
                                                            "    e.g.",
                                                            "    - xmake g --policies=run.autobuild",
                                                            "    - xmake g --policies=build.warning:n"                      },
                    -- network configuration
                    {category = "Network Configuration"},
                    {nil, "network",        "kv", "public" , "Set the network mode."
                                                           , values = {"public", "private"}                               },
                    {nil, "insecure-ssl",   "kv", nil      , "Disable to check ssl certificates for downloading."         },
                    {'x', "proxy",          "kv", nil      , "Use proxy on given port. [protocol://]host[:port]"
                                                           , "    e.g."
                                                           , "    - xmake g --proxy='http://host:port'"
                                                           , "    - xmake g --proxy='https://host:port'"
                                                           , "    - xmake g --proxy='socks5://host:port'"                },
                    {nil, "proxy_hosts",    "kv", nil       , "Only enable proxy for the given hosts list, it will enable all if be unset,"
                                                           , "and we can pass match pattern to list:"
                                                           , "    e.g."
                                                           , "    - xmake g --proxy_hosts='github.com,gitlab.*,*.xmake.io'"},
                    {nil, "proxy_pac",      "kv", "pac.lua" , "Set the auto proxy configuration file."
                                                           , "    e.g."
                                                           , "    - xmake g --proxy_pac=pac.lua (in $(globaldir) or absolute path)"
                                                           , "    - function main(url, host)"
                                                           , "          if host == 'github.com' then"
                                                           , "               return true"
                                                           , "          end"
                                                           , "      end"
                                                           , ""
                                                           , "Builtin pac files:"
                                                           , function ()
                                                                local description = {}
                                                                local pacfiles = os.files(path.join(os.programdir(), "scripts", "pac", "*.lua"))
                                                                for _, pacfile in ipairs(pacfiles) do
                                                                    table.insert(description, "    - " .. path.filename(pacfile))
                                                                end
                                                                return description
                                                             end},

                    -- package configuration
                    {category = "Package Configuration"},
                    {nil, "pkg_searchdirs", "kv", nil      , "The search directories of the remote package."
                                                           , "    e.g."
                                                           , "    - xmake g --pkg_searchdirs=/dir1" .. path.envsep() .. "/dir2"},
                    {nil, "pkg_cachedir",   "kv", nil      , "The cache root directory of the remote package."},
                    {nil, "pkg_installdir", "kv", nil      , "The install root directory of the remote package."},

                    -- show platform menu options
                    {category = "Platform Configuration"},
                    function ()
                       import("core.platform.menu")
                       return menu.options("global")
                    end
                }
            }



