summaryrefslogtreecommitdiff
path: root/xmake/rules/xcode/info_plist
diff options
context:
space:
mode:
authorruki <[email protected]>2020-04-08 23:44:59 +0800
committerruki <[email protected]>2020-04-08 16:29:55 +0800
commitefe6609bb668d34a4beb5b9b06f36b7556796c7b (patch)
tree747263b31b08cb644fee54b24e855870564f06ae /xmake/rules/xcode/info_plist
parentef120036428f173d235b1822a242173b12c7a6b8 (diff)
improve xcode.app rule
Diffstat (limited to 'xmake/rules/xcode/info_plist')
-rw-r--r--xmake/rules/xcode/info_plist/xmake.lua77
1 files changed, 77 insertions, 0 deletions
diff --git a/xmake/rules/xcode/info_plist/xmake.lua b/xmake/rules/xcode/info_plist/xmake.lua
new file mode 100644
index 000000000..733079dcc
--- /dev/null
+++ b/xmake/rules/xcode/info_plist/xmake.lua
@@ -0,0 +1,77 @@
+--!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-2020, TBOOX Open Source Group.
+--
+-- @author ruki
+-- @file xmake.lua
+--
+
+-- define rule
+rule("xcode.info_plist")
+
+ -- support add_files("Info.plist")
+ set_extensions(".plist")
+
+ -- build Info.plist
+ on_build_file(function (target, sourcefile, opt)
+
+ -- imports
+ import("core.base.option")
+ import("core.theme.theme")
+ import("core.project.depend")
+
+ -- check
+ assert(path.filename(sourcefile) == "Info.plist", "we only support Info.plist file!")
+
+ -- get contents directory
+ local contentsdir = assert(target:data("xcode.bundle.contentsdir"), "contents directory not found!")
+
+ -- need re-compile it?
+ local dependfile = target:dependfile(sourcefile)
+ local dependinfo = option.get("rebuild") and {} or (depend.load(dependfile) or {})
+ if not depend.is_changed(dependinfo, {lastmtime = os.mtime(dependfile)}) then
+ return
+ end
+
+ -- trace progress info
+ cprintf("${color.build.progress}" .. theme.get("text.build.progress_format") .. ":${clear} ", opt.progress)
+ if option.get("verbose") then
+ cprint("${dim color.build.object}processing.xcode.$(mode) %s", sourcefile)
+ else
+ cprint("${color.build.object}processing.xcode.$(mode) %s", sourcefile)
+ end
+
+ -- process and generate Info.plist
+ local info_plist_file = path.join(contentsdir, path.filename(sourcefile))
+ local maps =
+ {
+ DEVELOPMENT_LANGUAGE = "en",
+ EXECUTABLE_NAME = target:basename(),
+ PRODUCT_BUNDLE_IDENTIFIER = "org.tboox." .. target:name(),
+ PRODUCT_NAME = target:name(),
+ PRODUCT_BUNDLE_PACKAGE_TYPE = "APPL", -- application
+ CURRENT_PROJECT_VERSION = target:version() and tostring(target:version()) or "1.0",
+ MACOSX_DEPLOYMENT_TARGET = get_config("target_minver")
+ }
+
+ os.vcp(sourcefile, info_plist_file)
+ io.gsub(info_plist_file, "(%$%((.-)%))", function (_, variable)
+ return maps[variable]
+ end)
+
+ -- update files and values to the dependent file
+ dependinfo.files = {sourcefile}
+ depend.save(dependinfo, dependfile)
+ end)