summaryrefslogtreecommitdiff
path: root/xmake/core/base
diff options
context:
space:
mode:
authorruki <[email protected]>2017-10-15 23:43:33 +0800
committerruki <[email protected]>2017-10-15 23:43:33 +0800
commite6b23ffc316822a52b374e1c38dff738c7be6b91 (patch)
tree2747ccf724916cf69a327810904cc808ea728423 /xmake/core/base
parent3c990e889dc116dec50c950f5c1a1a91fb5d6600 (diff)
enable log output
Diffstat (limited to 'xmake/core/base')
-rw-r--r--xmake/core/base/colors.lua12
-rw-r--r--xmake/core/base/log.lua109
-rw-r--r--xmake/core/base/os.lua1
-rw-r--r--xmake/core/base/utils.lua41
4 files changed, 156 insertions, 7 deletions
diff --git a/xmake/core/base/colors.lua b/xmake/core/base/colors.lua
index d44e4da0d..ca2113f74 100644
--- a/xmake/core/base/colors.lua
+++ b/xmake/core/base/colors.lua
@@ -267,5 +267,17 @@ function colors.translate(str, force)
return str
end
+-- ignore all colors
+function colors.ignore(str)
+
+ -- check string
+ if not str then
+ return nil
+ end
+
+ -- ignore it
+ return (string.gsub(str, "(%${(.-)})", ""))
+end
+
-- return module
return colors
diff --git a/xmake/core/base/log.lua b/xmake/core/base/log.lua
new file mode 100644
index 000000000..57f2dc1a2
--- /dev/null
+++ b/xmake/core/base/log.lua
@@ -0,0 +1,109 @@
+--!A cross-platform build utility based on Lua
+--
+-- Licensed to the Apache Software Foundation (ASF) under one
+-- or more contributor license agreements. See the NOTICE file
+-- distributed with this work for additional information
+-- regarding copyright ownership. The ASF licenses this file
+-- to you 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 - 2017, TBOOX Open Source Group.
+--o
+-- @author ruki
+-- @file log.lua
+--
+
+-- define module: log
+local log = log or {}
+
+-- get the log file
+function log.file()
+ if log._FILE == nil then
+ local outputfile = log.outputfile()
+ if outputfile and os.isfile(outputfile) then
+ log._FILE = io.open(outputfile, 'w')
+ end
+ log._FILE = log._FILE or false
+ end
+ return log._FILE
+end
+
+-- get the output file
+function log.outputfile()
+ if log._LOGFILE == nil then
+ log._LOGFILE = os.getenv("XMAKE_LOGFILE") or false
+ end
+ return log._LOGFILE
+end
+
+-- flush log to file
+function log.flush()
+ local file = log.file()
+ if file then
+ file:flush()
+ end
+end
+
+-- close the log file
+function log.close()
+ local file = log.file()
+ if file then
+ file:close()
+ end
+end
+
+-- print log to the log file
+function log.print(...)
+ local file = log.file()
+ if file then
+ file:write(string.format(...) .. "\n")
+ end
+end
+
+-- print variables to the log file
+function log.printv(...)
+ local file = log.file()
+ if file then
+ local values = {...}
+ for i, v in ipairs(values) do
+ -- dump basic type
+ if type(v) == "string" or type(v) == "boolean" or type(v) == "number" then
+ file:write(tostring(v))
+ else
+ file:write("<" .. tostring(v) .. ">")
+ end
+ if i ~= #values then
+ file:write(" ")
+ end
+ end
+ file:write('\n')
+ end
+end
+
+-- printf log to the log file
+function log.printf(...)
+ local file = log.file()
+ if file then
+ file:write(string.format(...))
+ end
+end
+
+-- write log the log file
+function log:write(...)
+ local file = log.file()
+ if file then
+ file:write(...)
+ end
+end
+
+-- return module: log
+return log
diff --git a/xmake/core/base/os.lua b/xmake/core/base/os.lua
index 03487a65a..fd414b54b 100644
--- a/xmake/core/base/os.lua
+++ b/xmake/core/base/os.lua
@@ -27,6 +27,7 @@ local os = os or {}
-- load modules
local io = require("base/io")
+local log = require("base/log")
local path = require("base/path")
local table = require("base/table")
local utils = require("base/utils")
diff --git a/xmake/core/base/utils.lua b/xmake/core/base/utils.lua
index 772d1f162..49b05ea0a 100644
--- a/xmake/core/base/utils.lua
+++ b/xmake/core/base/utils.lua
@@ -30,6 +30,7 @@ local option = require("base/option")
local colors = require("base/colors")
local string = require("base/string")
local table = require("base/table")
+local log = require("base/log")
-- print string with newline
function utils._print(...)
@@ -70,8 +71,14 @@ function utils.print(format, ...)
-- check
assert(format)
+ -- init message
+ local message = string.tryformat(format, ...)
+
-- trace
- utils._print(string.tryformat(format, ...))
+ utils._print(message)
+
+ -- write to the log file
+ log.printv(message)
end
-- print format string without newline
@@ -80,8 +87,14 @@ function utils.printf(format, ...)
-- check
assert(format)
+ -- init message
+ local message = string.tryformat(format, ...)
+
-- trace
- utils._iowrite(string.tryformat(format, ...))
+ utils._iowrite(message)
+
+ -- write to the log file
+ log.write(message)
end
-- print format string and colors with newline
@@ -90,8 +103,16 @@ function utils.cprint(format, ...)
-- check
assert(format)
+ -- init message
+ local message = string.tryformat(format, ...)
+
-- trace
- utils._print(colors.translate(string.tryformat(format, ...)))
+ utils._print(colors.translate(message))
+
+ -- write to the log file
+ if log.file() then
+ log.printv(colors.ignore(message))
+ end
end
-- print format string and colors without newline
@@ -100,8 +121,16 @@ function utils.cprintf(format, ...)
-- check
assert(format)
+ -- init message
+ local message = string.tryformat(format, ...)
+
-- trace
- utils._iowrite(colors.translate(string.tryformat(format, ...)))
+ utils._iowrite(colors.translate(message))
+
+ -- write to the log file
+ if log.file() then
+ log.write(colors.ignore(message))
+ end
end
-- the verbose function
@@ -109,9 +138,7 @@ function utils.verbose(format, ...)
-- enable verbose?
if option.get("verbose") and format ~= nil then
-
- -- trace
- utils._print(string.tryformat(format, ...))
+ utils.print(format, ...)
end
end