diff options
| author | ruki <[email protected]> | 2017-07-17 15:40:25 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2017-07-17 15:40:25 +0800 |
| commit | 90c118045794457feb9c5e7a36c9625a25841cb1 (patch) | |
| tree | 701afcaeb1d2e3c07d7acb49cb5d318f2f404f90 | |
| parent | 4ca160c02b5755d816b60f202be4bced59dcdd76 (diff) | |
improve pkg-config and add some builtin packages
| -rw-r--r-- | xmake/core/project/target.lua | 2 | ||||
| -rw-r--r-- | xmake/core/sandbox/modules/import/lib/detect/find_library.lua | 4 | ||||
| -rw-r--r-- | xmake/modules/detect/packages/find_mbedtls.lua | 40 | ||||
| -rw-r--r-- | xmake/modules/detect/packages/find_mysql.lua | 40 | ||||
| -rw-r--r-- | xmake/modules/detect/packages/find_pcre.lua | 45 | ||||
| -rw-r--r-- | xmake/modules/detect/packages/find_pcre2.lua | 46 | ||||
| -rw-r--r-- | xmake/modules/lib/detect/pkg_config.lua | 26 |
7 files changed, 192 insertions, 11 deletions
diff --git a/xmake/core/project/target.lua b/xmake/core/project/target.lua index af013c46f..ee56708a9 100644 --- a/xmake/core/project/target.lua +++ b/xmake/core/project/target.lua @@ -380,7 +380,7 @@ end function target:objectfile(sourcefile) -- translate: [lib]xxx*.[a|lib] => xxx/*.[o|obj] object file - sourcefile = sourcefile:gsub(target.filename("([%w_]+)", "static"):gsub("%.", "%%.") .. "$", "%1/*") + sourcefile = sourcefile:gsub(target.filename("([%w%-_]+)", "static"):gsub("%.", "%%.") .. "$", "%1/*") -- get the object directory local objectdir = self:objectdir() diff --git a/xmake/core/sandbox/modules/import/lib/detect/find_library.lua b/xmake/core/sandbox/modules/import/lib/detect/find_library.lua index fbf3cf3c6..0452288b7 100644 --- a/xmake/core/sandbox/modules/import/lib/detect/find_library.lua +++ b/xmake/core/sandbox/modules/import/lib/detect/find_library.lua @@ -39,9 +39,9 @@ local find_file = import("lib.detect.find_file") function sandbox_lib_detect_find_library._link(filename) -- get link - local link, count = filename:gsub(target.filename("([%w_]+)", "static"):gsub("%.", "%%.") .. "$", "%1") + local link, count = filename:gsub(target.filename("([%w%-_]+)", "static"):gsub("%.", "%%.") .. "$", "%1") if count == 0 then - link, count = filename:gsub(target.filename("([%w_]+)", "shared"):gsub("%.", "%%.") .. "$", "%1") + link, count = filename:gsub(target.filename("([%w%-_]+)", "shared"):gsub("%.", "%%.") .. "$", "%1") end -- ok? diff --git a/xmake/modules/detect/packages/find_mbedtls.lua b/xmake/modules/detect/packages/find_mbedtls.lua new file mode 100644 index 000000000..e92efddac --- /dev/null +++ b/xmake/modules/detect/packages/find_mbedtls.lua @@ -0,0 +1,40 @@ +--!The Make-like 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. +-- +-- @author ruki +-- @file find_mbedtls.lua +-- + +-- imports +import("lib.detect.pkg_config") + +-- find mbedtls +-- +-- @param opt the package options. e.g. see the options of find_package() +-- +-- @return see the return value of find_package() +-- +function main(opt) + + -- find package from the current host platform + if opt.plat == os.host() and opt.arch == os.arch() then + return pkg_config.find("mbedtls", {links = {"mbedtls", "mbedcrypto", "mbedx509"}}) + end +end diff --git a/xmake/modules/detect/packages/find_mysql.lua b/xmake/modules/detect/packages/find_mysql.lua new file mode 100644 index 000000000..21694e86b --- /dev/null +++ b/xmake/modules/detect/packages/find_mysql.lua @@ -0,0 +1,40 @@ +--!The Make-like 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. +-- +-- @author ruki +-- @file find_mysql.lua +-- + +-- imports +import("lib.detect.pkg_config") + +-- find mysql +-- +-- @param opt the package options. e.g. see the options of find_package() +-- +-- @return see the return value of find_package() +-- +function main(opt) + + -- find package from the current host platform + if opt.plat == os.host() and opt.arch == os.arch() then + return pkg_config.find("mysqlclient") + end +end diff --git a/xmake/modules/detect/packages/find_pcre.lua b/xmake/modules/detect/packages/find_pcre.lua new file mode 100644 index 000000000..a4284dc94 --- /dev/null +++ b/xmake/modules/detect/packages/find_pcre.lua @@ -0,0 +1,45 @@ +--!The Make-like 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. +-- +-- @author ruki +-- @file find_pcre.lua +-- + +-- imports +import("lib.detect.pkg_config") + +-- find pcre +-- +-- @param opt the package options. e.g. see the options of find_package() +-- +-- @return see the return value of find_package() +-- +function main(opt) + + -- find package from the current host platform + if opt.plat == os.host() and opt.arch == os.arch() then + for _, width in ipairs({"", "16", "32"}) do + local result = pkg_config.find("libpcre" .. width) + if result then + return result + end + end + end +end diff --git a/xmake/modules/detect/packages/find_pcre2.lua b/xmake/modules/detect/packages/find_pcre2.lua new file mode 100644 index 000000000..66f6e8a29 --- /dev/null +++ b/xmake/modules/detect/packages/find_pcre2.lua @@ -0,0 +1,46 @@ +--!The Make-like 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. +-- +-- @author ruki +-- @file find_pcre2.lua +-- + +-- imports +import("lib.detect.pkg_config") + +-- find pcre2 +-- +-- @param opt the package options. e.g. see the options of find_package() +-- +-- @return see the return value of find_package() +-- +function main(opt) + + -- find package from the current host platform + if opt.plat == os.host() and opt.arch == os.arch() then + for _, width in ipairs({"8", "16", "32"}) do + local result = pkg_config.find("libpcre2-" .. width) + if result then + result.defines = {"PCRE2_CODE_UNIT_WIDTH=" .. width} + return result + end + end + end +end diff --git a/xmake/modules/lib/detect/pkg_config.lua b/xmake/modules/lib/detect/pkg_config.lua index 322977dbd..fc299d94a 100644 --- a/xmake/modules/lib/detect/pkg_config.lua +++ b/xmake/modules/lib/detect/pkg_config.lua @@ -60,13 +60,15 @@ function info(name, opt) -- get pkg-config path from brew local brew = find_brew() + local brewprefix = nil local configdirs = opt.configdirs or {} if brew then - local prefix = try { function () return os.iorunv(brew, {"--prefix", name}) end } - if prefix then - prefix = path.join(prefix:trim(), "lib", "pkgconfig") - if os.isdir(prefix) then - table.insert(configdirs, prefix) + brewprefix = try { function () return os.iorunv(brew, {"--prefix", name}) end } + if brewprefix then + brewprefix = brewprefix:trim() + local configdir = path.join(brewprefix, "lib", "pkgconfig") + if os.isdir(configdir) then + table.insert(configdirs, configdir) end end end @@ -109,6 +111,8 @@ function info(name, opt) table.insert(result.includedirs, includedir) end end + elseif brewprefix then + result = {linkdirs = {path.join(brewprefix, "lib")}, includedirs = {path.join(brewprefix, "include")}} end -- get version @@ -137,7 +141,7 @@ end -- find package -- -- @param name the package name --- @param opt the argument options, {plat = "", arch = "", version = "1.0.1"} +-- @param opt the argument options, {plat = "", arch = "", version = "1.0.1", links = {...}} -- -- @return {links = {"ssl", "crypto", "z"}, linkdirs = {""}, includedirs = {""}} -- @@ -160,10 +164,16 @@ function find(name, opt) if opt.version and pkginfo.version ~= opt.version then return end - + + -- get links + local links = pkginfo.links + if not links or #links == 0 then + links = opt.links + end + -- find library local result = nil - for _, link in ipairs(table.wrap(pkginfo.links)) do + for _, link in ipairs(table.wrap(links)) do local libinfo = find_library(link, pkginfo.linkdirs) if libinfo then result = result or {} |
