From aa6cba4025f0a255e24072153c6c55f273b8b7eb Mon Sep 17 00:00:00 2001 From: 夕伽 Date: Tue, 4 Sep 2018 11:29:24 +0800 Subject: add windows mfc rule useage: target("test") add_files("*.cpp") add_files("*.rc") -- use sharedmfc add_rules("win.sdk.mfcapp.shared") -- or add_rules("win.sdk.mfcapp.static") to use staticmfc target_end() --- xmake/rules/winsdk/xmake.lua | 120 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) diff --git a/xmake/rules/winsdk/xmake.lua b/xmake/rules/winsdk/xmake.lua index 9e389de36..2ae7f7955 100644 --- a/xmake/rules/winsdk/xmake.lua +++ b/xmake/rules/winsdk/xmake.lua @@ -22,6 +22,69 @@ -- @file xmake.lua -- +-- remove exists md or mt +function _rule_remove_mt_md_flags(target, flagsname) + local flags = target:get(flagsname) + if type(flags) == "table" then + for key, flag in pairs(flags) do + flag = flag:lower() + if flag:find("[/%-]mt") or flag:find("[/%-]md") then + flags[key] = nil + end + end + elseif type(flags) == "string" then + local flag = flags:lower() + if flag:find("[/%-]mt") or flag:find("[/%-]md") then + flags = {} + end + end + target:set(flagsname, flags) +end + +-- remove exists settings +function _rule_remove_exists_flags(target) + local ldflags = target:get("ldflags") + for key, ldflag in pairs(ldflags) do + ldflag = ldflag:lower() + if ldflag:find("[/%-]subsystem:") then + ldflags[key] = nil + break + end + end + target:set("ldflags", ldflags) + + -- remove defines /DMT /DMTd /DMD /DMDd + local defines = target:get("defines") + for key, define in pairs(defines) do + define = define:lower() + if define:find("[/%-]dmt") or define:find("[/%-]dmd") then + defines[key] = nil + end + end + target:set("defines", defines) + + -- remove c /MD,/MT + _rule_remove_mt_md_flags(target, "cflags") + + -- remove c,cpp /MD,/MT + _rule_remove_mt_md_flags(target, "cxflags") + + -- remove cpp /MD,/MT + _rule_remove_mt_md_flags(target, "cxxflags") +end + +-- check unicode +function _rule_check_is_unicode(target) + local defines = target:get("defines") + for key, define in pairs(defines) do + define = define:lower() + if define:find("unicode") or define:find("_unicode") then + return true + end + end + return false +end + -- define rule: application rule("win.sdk.application") @@ -53,3 +116,60 @@ rule("win.sdk.application") target:add("links", "cfgmgr32", "comdlg32", "setupapi", "strsafe", "shlwapi") end) +-- define rule: sharedmfcapp +rule("win.sdk.mfcapp.shared") + + -- save local functions + local remove_exists_flags = _rule_remove_exists_flags + local check_is_unicode = _rule_check_is_unicode + + -- after load + after_load(function (target) + + -- set kind: binary + target:set("kind", "binary") + + -- remove some exists flags + remove_exists_flags(target) + + -- add flags + target:add("ldflags", "-subsystem:windows", {force = true}) + target:add("ldflags", ifelse(check_is_unicode(target), "-entry:wWinMainCRTStartup", "-entry:WinMainCRTStartup"), {force = true}) + + -- set runtimelibrary + target:add("cxflags", ifelse(is_mode("debug"), "-MDd", "-MD")) + target:add("defines", "AFX", "_AFXDLL") + + -- add mfc flags + target:values_set("project.vs.mfc", true) + end) + + +-- define rule: staticmfcapp +rule("win.sdk.mfcapp.static") + + -- save local functions + local remove_exists_flags = _rule_remove_exists_flags + local check_is_unicode = _rule_check_is_unicode + + -- after load + after_load(function (target) + + -- set kind: binary + target:set("kind", "binary") + + -- remove some exists flags + remove_exists_flags(target) + + -- add flags + target:add("ldflags", "-subsystem:windows", {force = true}) + target:add("ldflags", "-force", {force = true}) + target:add("ldflags", ifelse(check_is_unicode(target), "-entry:wWinMainCRTStartup", "-entry:WinMainCRTStartup"), {force = true}) + + -- set runtimelibrary + target:add("cxflags", ifelse(is_mode("debug"), "-MTd", "-MT")) + + -- add mfc flags + target:values_set("project.vs.mfc", true) + end) + -- cgit v1.3.1 From 3cb295e071987b72cb78223781a7632d0a41d5cf Mon Sep 17 00:00:00 2001 From: 夕伽 Date: Tue, 4 Sep 2018 13:37:45 +0800 Subject: move mfc'rule to mfc/xmake.lua from xmake.lua --- xmake/rules/winsdk/mfc/mfc.lua | 140 +++++++++++++++++++++++++++++++++++++++ xmake/rules/winsdk/mfc/xmake.lua | 51 ++++++++++++++ xmake/rules/winsdk/xmake.lua | 123 +--------------------------------- 3 files changed, 192 insertions(+), 122 deletions(-) create mode 100644 xmake/rules/winsdk/mfc/mfc.lua create mode 100644 xmake/rules/winsdk/mfc/xmake.lua diff --git a/xmake/rules/winsdk/mfc/mfc.lua b/xmake/rules/winsdk/mfc/mfc.lua new file mode 100644 index 000000000..1cba4752e --- /dev/null +++ b/xmake/rules/winsdk/mfc/mfc.lua @@ -0,0 +1,140 @@ +--!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 - 2018, TBOOX Open Source Group. +-- +-- @author ruki +-- @file xmake.lua +-- + +-- remove exists md or mt +function _mfc_remove_mt_md_flags(target, flagsname) + local flags = target:get(flagsname) + if type(flags) == "table" then + for key, flag in pairs(flags) do + flag = flag:lower() + if flag:find("[/%-]mt") or flag:find("[/%-]md") then + flags[key] = nil + end + end + elseif type(flags) == "string" then + local flag = flags:lower() + if flag:find("[/%-]mt") or flag:find("[/%-]md") then + flags = {} + end + end + target:set(flagsname, flags) +end + +-- remove exists settings +function _mfc_remove_flags(target) + local ldflags = target:get("ldflags") + for key, ldflag in pairs(ldflags) do + ldflag = ldflag:lower() + if ldflag:find("[/%-]subsystem:") then + ldflags[key] = nil + break + end + end + target:set("ldflags", ldflags) + + -- remove defines /DMT /DMTd /DMD /DMDd + local defines = target:get("defines") + for key, define in pairs(defines) do + define = define:lower() + if define:find("[/%-]dmt") or define:find("[/%-]dmd") then + defines[key] = nil + end + end + target:set("defines", defines) + + -- remove c /MD,/MT + _mfc_remove_mt_md_flags(target, "cflags") + + -- remove c,cpp /MD,/MT + _mfc_remove_mt_md_flags(target, "cxflags") + + -- remove cpp /MD,/MT + _mfc_remove_mt_md_flags(target, "cxxflags") +end + +-- check unicode +function _mfc_check_is_unicode(target) + local defines = target:get("defines") + for key, define in pairs(defines) do + define = define:lower() + if define:find("unicode") or define:find("_unicode") then + return true + end + end + return false +end + +-- apply shared mfc settings +function _mfc_shared(target) + + -- remove some exists flags + _mfc_remove_flags(target) + + -- add flags + target:add("ldflags", "-subsystem:windows", {force = true}) + + -- set runtimelibrary + target:add("cxflags", ifelse(is_mode("debug"), "-MDd", "-MD")) + target:add("defines", "AFX", "_AFXDLL") +end + +-- apply static mfc settings +function _mfc_static(target) + + -- remove some exists flags + _mfc_remove_flags(target) + + -- add flags + target:add("ldflags", "-subsystem:windows", {force = true}) + target:add("ldflags", "-force", {force = true}) + + -- set runtimelibrary + target:add("cxflags", ifelse(is_mode("debug"), "-MTd", "-MT")) +end + +-- apply appliction settings use static mfc +function mfc_static_app(target) + + -- static common + _mfc_static(target) + + -- set kind: binary + target:set("kind", "binary") + + -- set entry + target:add("ldflags", ifelse(_mfc_check_is_unicode(target), "-entry:wWinMainCRTStartup", "-entry:WinMainCRTStartup"), {force = true}) +end + +-- apply appliction settings use shared mfc +function mfc_shared_app(target) + + -- static common + _mfc_shared(target) + + -- set kind: binary + target:set("kind", "binary") + + -- set entry + target:add("ldflags", ifelse(_mfc_check_is_unicode(target), "-entry:wWinMainCRTStartup", "-entry:WinMainCRTStartup"), {force = true}) +end \ No newline at end of file diff --git a/xmake/rules/winsdk/mfc/xmake.lua b/xmake/rules/winsdk/mfc/xmake.lua new file mode 100644 index 000000000..6e1761e48 --- /dev/null +++ b/xmake/rules/winsdk/mfc/xmake.lua @@ -0,0 +1,51 @@ +--!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 - 2018, TBOOX Open Source Group. +-- +-- @author ruki +-- @file xmake.lua +-- + +-- define rule: shared mfcapp +rule("win.sdk.mfcapp.shared") + + -- FIXME: before load need check of vs's minverion, if defined + --before_load(function (target) + --end) + + -- after load + after_load(function (target) + + -- apply mfc settings + import("mfc").mfc_shared_app(target) + end) + +-- define rule: static mfcapp +rule("win.sdk.mfcapp.static") + + -- FIXME: before load need check of vs's minverion, if defined + --before_load(function (target) + --end) + + -- after load + after_load(function (target) + + -- apply mfc settings + import("mfc").mfc_static_app(target) + end) \ No newline at end of file diff --git a/xmake/rules/winsdk/xmake.lua b/xmake/rules/winsdk/xmake.lua index 2ae7f7955..123829019 100644 --- a/xmake/rules/winsdk/xmake.lua +++ b/xmake/rules/winsdk/xmake.lua @@ -22,69 +22,6 @@ -- @file xmake.lua -- --- remove exists md or mt -function _rule_remove_mt_md_flags(target, flagsname) - local flags = target:get(flagsname) - if type(flags) == "table" then - for key, flag in pairs(flags) do - flag = flag:lower() - if flag:find("[/%-]mt") or flag:find("[/%-]md") then - flags[key] = nil - end - end - elseif type(flags) == "string" then - local flag = flags:lower() - if flag:find("[/%-]mt") or flag:find("[/%-]md") then - flags = {} - end - end - target:set(flagsname, flags) -end - --- remove exists settings -function _rule_remove_exists_flags(target) - local ldflags = target:get("ldflags") - for key, ldflag in pairs(ldflags) do - ldflag = ldflag:lower() - if ldflag:find("[/%-]subsystem:") then - ldflags[key] = nil - break - end - end - target:set("ldflags", ldflags) - - -- remove defines /DMT /DMTd /DMD /DMDd - local defines = target:get("defines") - for key, define in pairs(defines) do - define = define:lower() - if define:find("[/%-]dmt") or define:find("[/%-]dmd") then - defines[key] = nil - end - end - target:set("defines", defines) - - -- remove c /MD,/MT - _rule_remove_mt_md_flags(target, "cflags") - - -- remove c,cpp /MD,/MT - _rule_remove_mt_md_flags(target, "cxflags") - - -- remove cpp /MD,/MT - _rule_remove_mt_md_flags(target, "cxxflags") -end - --- check unicode -function _rule_check_is_unicode(target) - local defines = target:get("defines") - for key, define in pairs(defines) do - define = define:lower() - if define:find("unicode") or define:find("_unicode") then - return true - end - end - return false -end - -- define rule: application rule("win.sdk.application") @@ -114,62 +51,4 @@ rule("win.sdk.application") target:add("links", "kernel32", "user32", "gdi32", "winspool", "comdlg32", "advapi32") target:add("links", "shell32", "ole32", "oleaut32", "uuid", "odbc32", "odbccp32", "comctl32") target:add("links", "cfgmgr32", "comdlg32", "setupapi", "strsafe", "shlwapi") - end) - --- define rule: sharedmfcapp -rule("win.sdk.mfcapp.shared") - - -- save local functions - local remove_exists_flags = _rule_remove_exists_flags - local check_is_unicode = _rule_check_is_unicode - - -- after load - after_load(function (target) - - -- set kind: binary - target:set("kind", "binary") - - -- remove some exists flags - remove_exists_flags(target) - - -- add flags - target:add("ldflags", "-subsystem:windows", {force = true}) - target:add("ldflags", ifelse(check_is_unicode(target), "-entry:wWinMainCRTStartup", "-entry:WinMainCRTStartup"), {force = true}) - - -- set runtimelibrary - target:add("cxflags", ifelse(is_mode("debug"), "-MDd", "-MD")) - target:add("defines", "AFX", "_AFXDLL") - - -- add mfc flags - target:values_set("project.vs.mfc", true) - end) - - --- define rule: staticmfcapp -rule("win.sdk.mfcapp.static") - - -- save local functions - local remove_exists_flags = _rule_remove_exists_flags - local check_is_unicode = _rule_check_is_unicode - - -- after load - after_load(function (target) - - -- set kind: binary - target:set("kind", "binary") - - -- remove some exists flags - remove_exists_flags(target) - - -- add flags - target:add("ldflags", "-subsystem:windows", {force = true}) - target:add("ldflags", "-force", {force = true}) - target:add("ldflags", ifelse(check_is_unicode(target), "-entry:wWinMainCRTStartup", "-entry:WinMainCRTStartup"), {force = true}) - - -- set runtimelibrary - target:add("cxflags", ifelse(is_mode("debug"), "-MTd", "-MT")) - - -- add mfc flags - target:values_set("project.vs.mfc", true) - end) - + end) \ No newline at end of file -- cgit v1.3.1 From b5fbcacc984da4f5c6095fae0c9f321e4561e328 Mon Sep 17 00:00:00 2001 From: 夕伽 Date: Tue, 4 Sep 2018 14:14:38 +0800 Subject: add win.sdk.mfc for checking the env of vs rename: win.sdk.mfcapp.shared -> win.sdk.mfc.shared_app win.sdk.mfcapp.static -> win.sdk.mfc.static_app --- xmake/rules/winsdk/mfc/env/xmake.lua | 30 ++++++++++++++++++++++++++++++ xmake/rules/winsdk/mfc/mfc.lua | 2 +- xmake/rules/winsdk/mfc/xmake.lua | 20 +++++++++----------- 3 files changed, 40 insertions(+), 12 deletions(-) create mode 100644 xmake/rules/winsdk/mfc/env/xmake.lua diff --git a/xmake/rules/winsdk/mfc/env/xmake.lua b/xmake/rules/winsdk/mfc/env/xmake.lua new file mode 100644 index 000000000..dbf28907d --- /dev/null +++ b/xmake/rules/winsdk/mfc/env/xmake.lua @@ -0,0 +1,30 @@ +--!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 - 2018, TBOOX Open Source Group. +-- +-- @author xigal +-- @file xmake.lua +-- + +-- define rule: mfc +rule("win.sdk.mfc") + + -- FIXME: before load need check of vs's minverion, if defined + --before_load(function (target) + --end) \ No newline at end of file diff --git a/xmake/rules/winsdk/mfc/mfc.lua b/xmake/rules/winsdk/mfc/mfc.lua index 1cba4752e..3e3f013ac 100644 --- a/xmake/rules/winsdk/mfc/mfc.lua +++ b/xmake/rules/winsdk/mfc/mfc.lua @@ -18,7 +18,7 @@ -- -- Copyright (C) 2015 - 2018, TBOOX Open Source Group. -- --- @author ruki +-- @author xigal -- @file xmake.lua -- diff --git a/xmake/rules/winsdk/mfc/xmake.lua b/xmake/rules/winsdk/mfc/xmake.lua index 6e1761e48..e711d986b 100644 --- a/xmake/rules/winsdk/mfc/xmake.lua +++ b/xmake/rules/winsdk/mfc/xmake.lua @@ -18,16 +18,15 @@ -- -- Copyright (C) 2015 - 2018, TBOOX Open Source Group. -- --- @author ruki +-- @author xigal -- @file xmake.lua -- --- define rule: shared mfcapp -rule("win.sdk.mfcapp.shared") +-- define rule: sharedcapp +rule("win.sdk.mfc.shared_app") - -- FIXME: before load need check of vs's minverion, if defined - --before_load(function (target) - --end) + -- add mfc base rule + add_deps("win.sdk.mfc") -- after load after_load(function (target) @@ -36,12 +35,11 @@ rule("win.sdk.mfcapp.shared") import("mfc").mfc_shared_app(target) end) --- define rule: static mfcapp -rule("win.sdk.mfcapp.static") +-- define rule: staticapp +rule("win.sdk.mfc.static_app") - -- FIXME: before load need check of vs's minverion, if defined - --before_load(function (target) - --end) + -- add mfc base rule + add_deps("win.sdk.mfc") -- after load after_load(function (target) -- cgit v1.3.1 From e3038f3dce1bc843e3f19dba182f64b5bfda29f7 Mon Sep 17 00:00:00 2001 From: 夕伽 Date: Tue, 4 Sep 2018 14:34:33 +0800 Subject: make mfcrule's codes to be beautiful --- xmake/rules/winsdk/mfc/mfc.lua | 38 ++++++---------------------------- xmake/rules/winsdk/mfc/xmake.lua | 44 ++++++++++++++++++++++++++++++++++------ 2 files changed, 44 insertions(+), 38 deletions(-) diff --git a/xmake/rules/winsdk/mfc/mfc.lua b/xmake/rules/winsdk/mfc/mfc.lua index 3e3f013ac..5232ae046 100644 --- a/xmake/rules/winsdk/mfc/mfc.lua +++ b/xmake/rules/winsdk/mfc/mfc.lua @@ -73,20 +73,20 @@ function _mfc_remove_flags(target) _mfc_remove_mt_md_flags(target, "cxxflags") end --- check unicode -function _mfc_check_is_unicode(target) +-- get application entry +function mfc_application_entry(target) local defines = target:get("defines") for key, define in pairs(defines) do define = define:lower() if define:find("unicode") or define:find("_unicode") then - return true + return "-entry:wWinMainCRTStartup" end end - return false + return "-entry:WinMainCRTStartup" end -- apply shared mfc settings -function _mfc_shared(target) +function mfc_shared(target) -- remove some exists flags _mfc_remove_flags(target) @@ -100,7 +100,7 @@ function _mfc_shared(target) end -- apply static mfc settings -function _mfc_static(target) +function mfc_static(target) -- remove some exists flags _mfc_remove_flags(target) @@ -111,30 +111,4 @@ function _mfc_static(target) -- set runtimelibrary target:add("cxflags", ifelse(is_mode("debug"), "-MTd", "-MT")) -end - --- apply appliction settings use static mfc -function mfc_static_app(target) - - -- static common - _mfc_static(target) - - -- set kind: binary - target:set("kind", "binary") - - -- set entry - target:add("ldflags", ifelse(_mfc_check_is_unicode(target), "-entry:wWinMainCRTStartup", "-entry:WinMainCRTStartup"), {force = true}) -end - --- apply appliction settings use shared mfc -function mfc_shared_app(target) - - -- static common - _mfc_shared(target) - - -- set kind: binary - target:set("kind", "binary") - - -- set entry - target:add("ldflags", ifelse(_mfc_check_is_unicode(target), "-entry:wWinMainCRTStartup", "-entry:WinMainCRTStartup"), {force = true}) end \ No newline at end of file diff --git a/xmake/rules/winsdk/mfc/xmake.lua b/xmake/rules/winsdk/mfc/xmake.lua index e711d986b..02ce49798 100644 --- a/xmake/rules/winsdk/mfc/xmake.lua +++ b/xmake/rules/winsdk/mfc/xmake.lua @@ -22,8 +22,8 @@ -- @file xmake.lua -- --- define rule: sharedcapp -rule("win.sdk.mfc.shared_app") +-- define rule: shared +rule("win.sdk.mfc.shared") -- add mfc base rule add_deps("win.sdk.mfc") @@ -32,11 +32,11 @@ rule("win.sdk.mfc.shared_app") after_load(function (target) -- apply mfc settings - import("mfc").mfc_shared_app(target) + import("mfc").mfc_shared(target) end) --- define rule: staticapp -rule("win.sdk.mfc.static_app") +-- define rule: static +rule("win.sdk.mfc.static") -- add mfc base rule add_deps("win.sdk.mfc") @@ -45,5 +45,37 @@ rule("win.sdk.mfc.static_app") after_load(function (target) -- apply mfc settings - import("mfc").mfc_static_app(target) + import("mfc").mfc_static(target) + end) + +-- define rule: sharedcapp +rule("win.sdk.mfc.shared_app") + + -- add mfc base rule + add_deps("win.sdk.mfc.shared") + + -- after load + after_load(function (target) + + -- set kind: binary + target:set("kind", "binary") + + -- set entry + target:add("ldflags", import("mfc").mfc_application_entry(target), {force = true}) + end) + +-- define rule: staticapp +rule("win.sdk.mfc.static_app") + + -- add mfc base rule + add_deps("win.sdk.mfc.static") + + -- after load + after_load(function (target) + + -- set kind: binary + target:set("kind", "binary") + + -- set entry + target:add("ldflags", import("mfc").mfc_application_entry(target), {force = true}) end) \ No newline at end of file -- cgit v1.3.1 From 26b8ecc0d3d69fb57d7be53fee59f619232db9d6 Mon Sep 17 00:00:00 2001 From: 夕伽 Date: Tue, 4 Sep 2018 15:02:25 +0800 Subject: rename rule: win.sdk.mfc -> win.sdk.mfc.env --- xmake/rules/winsdk/mfc/env/xmake.lua | 4 ++-- xmake/rules/winsdk/mfc/xmake.lua | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/xmake/rules/winsdk/mfc/env/xmake.lua b/xmake/rules/winsdk/mfc/env/xmake.lua index dbf28907d..38ce77925 100644 --- a/xmake/rules/winsdk/mfc/env/xmake.lua +++ b/xmake/rules/winsdk/mfc/env/xmake.lua @@ -22,8 +22,8 @@ -- @file xmake.lua -- --- define rule: mfc -rule("win.sdk.mfc") +-- define rule: mfc.env +rule("win.sdk.mfc.env") -- FIXME: before load need check of vs's minverion, if defined --before_load(function (target) diff --git a/xmake/rules/winsdk/mfc/xmake.lua b/xmake/rules/winsdk/mfc/xmake.lua index 02ce49798..d22752a94 100644 --- a/xmake/rules/winsdk/mfc/xmake.lua +++ b/xmake/rules/winsdk/mfc/xmake.lua @@ -26,7 +26,7 @@ rule("win.sdk.mfc.shared") -- add mfc base rule - add_deps("win.sdk.mfc") + add_deps("win.sdk.mfc.env") -- after load after_load(function (target) @@ -39,7 +39,7 @@ rule("win.sdk.mfc.shared") rule("win.sdk.mfc.static") -- add mfc base rule - add_deps("win.sdk.mfc") + add_deps("win.sdk.mfc.env") -- after load after_load(function (target) -- cgit v1.3.1 From a95991384a08d1876dd20814f3652abb2fedd23d Mon Sep 17 00:00:00 2001 From: 夕伽 Date: Tue, 4 Sep 2018 15:50:51 +0800 Subject: mfc's rule full match flags on remove or check --- xmake/rules/winsdk/mfc/mfc.lua | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/xmake/rules/winsdk/mfc/mfc.lua b/xmake/rules/winsdk/mfc/mfc.lua index 5232ae046..2b70ba920 100644 --- a/xmake/rules/winsdk/mfc/mfc.lua +++ b/xmake/rules/winsdk/mfc/mfc.lua @@ -27,8 +27,8 @@ function _mfc_remove_mt_md_flags(target, flagsname) local flags = target:get(flagsname) if type(flags) == "table" then for key, flag in pairs(flags) do - flag = flag:lower() - if flag:find("[/%-]mt") or flag:find("[/%-]md") then + flag = flag:lower():trim() + if flag:find("^[/%-]?mt[d]?$") or flag:find("^[/%-]?md[d]?$") then flags[key] = nil end end @@ -45,20 +45,28 @@ end function _mfc_remove_flags(target) local ldflags = target:get("ldflags") for key, ldflag in pairs(ldflags) do - ldflag = ldflag:lower() + ldflag = ldflag:lower():trim() if ldflag:find("[/%-]subsystem:") then - ldflags[key] = nil + if type(ldflags) == "table" then + ldflags[key] = nil + else + ldflags = {} + end break end end target:set("ldflags", ldflags) - -- remove defines /DMT /DMTd /DMD /DMDd + -- remove defines MT MTd MD MDd local defines = target:get("defines") for key, define in pairs(defines) do - define = define:lower() - if define:find("[/%-]dmt") or define:find("[/%-]dmd") then - defines[key] = nil + define = define:lower():trim() + if define:find("^[/%-]?mt[d]?$") or define:find("^[/%-]?md[d]?$") then + if type(defines) == "table" then + defines[key] = nil + else + defines = {} + end end end target:set("defines", defines) @@ -77,8 +85,8 @@ end function mfc_application_entry(target) local defines = target:get("defines") for key, define in pairs(defines) do - define = define:lower() - if define:find("unicode") or define:find("_unicode") then + define = define:lower():trim() + if define:find("^[_]?unicode$") then return "-entry:wWinMainCRTStartup" end end -- cgit v1.3.1 From cf23dd6e26a9f9e2e1f3beeaa9d3be6cbc499c43 Mon Sep 17 00:00:00 2001 From: 夕伽 Date: Tue, 4 Sep 2018 16:25:07 +0800 Subject: use table.wrap replace check type(table) --- xmake/rules/winsdk/mfc/mfc.lua | 31 ++++++++----------------------- 1 file changed, 8 insertions(+), 23 deletions(-) diff --git a/xmake/rules/winsdk/mfc/mfc.lua b/xmake/rules/winsdk/mfc/mfc.lua index 2b70ba920..2dd7209df 100644 --- a/xmake/rules/winsdk/mfc/mfc.lua +++ b/xmake/rules/winsdk/mfc/mfc.lua @@ -25,17 +25,10 @@ -- remove exists md or mt function _mfc_remove_mt_md_flags(target, flagsname) local flags = target:get(flagsname) - if type(flags) == "table" then - for key, flag in pairs(flags) do - flag = flag:lower():trim() - if flag:find("^[/%-]?mt[d]?$") or flag:find("^[/%-]?md[d]?$") then - flags[key] = nil - end - end - elseif type(flags) == "string" then - local flag = flags:lower() - if flag:find("[/%-]mt") or flag:find("[/%-]md") then - flags = {} + for key, flag in pairs(table.wrap(flags)) do + flag = flag:lower():trim() + if flag:find("^[/%-]?mt[d]?$") or flag:find("^[/%-]?md[d]?$") then + flags[key] = nil end end target:set(flagsname, flags) @@ -44,14 +37,10 @@ end -- remove exists settings function _mfc_remove_flags(target) local ldflags = target:get("ldflags") - for key, ldflag in pairs(ldflags) do + for key, ldflag in pairs(table.wrap(ldflags)) do ldflag = ldflag:lower():trim() if ldflag:find("[/%-]subsystem:") then - if type(ldflags) == "table" then - ldflags[key] = nil - else - ldflags = {} - end + ldflags[key] = nil break end end @@ -59,14 +48,10 @@ function _mfc_remove_flags(target) -- remove defines MT MTd MD MDd local defines = target:get("defines") - for key, define in pairs(defines) do + for key, define in pairs(table.wrap(defines)) do define = define:lower():trim() if define:find("^[/%-]?mt[d]?$") or define:find("^[/%-]?md[d]?$") then - if type(defines) == "table" then - defines[key] = nil - else - defines = {} - end + defines[key] = nil end end target:set("defines", defines) -- cgit v1.3.1 From 8d0d7c81b543c365411ad586a0cf0001edbaa7a3 Mon Sep 17 00:00:00 2001 From: 夕伽 Date: Wed, 5 Sep 2018 08:14:58 +0800 Subject: use table.wrap replace check type(table) --- xmake/rules/winsdk/mfc/mfc.lua | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/xmake/rules/winsdk/mfc/mfc.lua b/xmake/rules/winsdk/mfc/mfc.lua index 2dd7209df..a5508a033 100644 --- a/xmake/rules/winsdk/mfc/mfc.lua +++ b/xmake/rules/winsdk/mfc/mfc.lua @@ -24,8 +24,8 @@ -- remove exists md or mt function _mfc_remove_mt_md_flags(target, flagsname) - local flags = target:get(flagsname) - for key, flag in pairs(table.wrap(flags)) do + local flags = table.wrap(target:get(flagsname)) + for key, flag in pairs(flags) do flag = flag:lower():trim() if flag:find("^[/%-]?mt[d]?$") or flag:find("^[/%-]?md[d]?$") then flags[key] = nil @@ -36,8 +36,8 @@ end -- remove exists settings function _mfc_remove_flags(target) - local ldflags = target:get("ldflags") - for key, ldflag in pairs(table.wrap(ldflags)) do + local ldflags = table.wrap(target:get("ldflags")) + for key, ldflag in pairs(ldflags) do ldflag = ldflag:lower():trim() if ldflag:find("[/%-]subsystem:") then ldflags[key] = nil @@ -47,8 +47,8 @@ function _mfc_remove_flags(target) target:set("ldflags", ldflags) -- remove defines MT MTd MD MDd - local defines = target:get("defines") - for key, define in pairs(table.wrap(defines)) do + local defines = table.wrap(target:get("defines")) + for key, define in pairs(defines) do define = define:lower():trim() if define:find("^[/%-]?mt[d]?$") or define:find("^[/%-]?md[d]?$") then defines[key] = nil -- cgit v1.3.1 From e8af37c32549f54059f6e7635064c623b80c039c Mon Sep 17 00:00:00 2001 From: 夕伽 Date: Thu, 6 Sep 2018 11:13:47 +0800 Subject: fix bug: remove item from table --- xmake/rules/winsdk/mfc/mfc.lua | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/xmake/rules/winsdk/mfc/mfc.lua b/xmake/rules/winsdk/mfc/mfc.lua index a5508a033..b51ab0733 100644 --- a/xmake/rules/winsdk/mfc/mfc.lua +++ b/xmake/rules/winsdk/mfc/mfc.lua @@ -25,10 +25,10 @@ -- remove exists md or mt function _mfc_remove_mt_md_flags(target, flagsname) local flags = table.wrap(target:get(flagsname)) - for key, flag in pairs(flags) do - flag = flag:lower():trim() + for i = #flags, 1, -1 do + flag = flags[i]:lower():trim() if flag:find("^[/%-]?mt[d]?$") or flag:find("^[/%-]?md[d]?$") then - flags[key] = nil + table.remove(flags, i) end end target:set(flagsname, flags) @@ -37,10 +37,10 @@ end -- remove exists settings function _mfc_remove_flags(target) local ldflags = table.wrap(target:get("ldflags")) - for key, ldflag in pairs(ldflags) do - ldflag = ldflag:lower():trim() + for i = #ldflags, 1, -1 do + ldflag = ldflags[i]:lower():trim() if ldflag:find("[/%-]subsystem:") then - ldflags[key] = nil + table.remove(ldflags, i) break end end @@ -48,10 +48,10 @@ function _mfc_remove_flags(target) -- remove defines MT MTd MD MDd local defines = table.wrap(target:get("defines")) - for key, define in pairs(defines) do - define = define:lower():trim() + for i = #defines, 1, -1 do + define = defines[i]:lower():trim() if define:find("^[/%-]?mt[d]?$") or define:find("^[/%-]?md[d]?$") then - defines[key] = nil + table.remove(defines, i) end end target:set("defines", defines) -- cgit v1.3.1