diff options
| author | ruki <[email protected]> | 2018-09-15 00:06:25 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2018-09-14 18:38:35 +0800 |
| commit | 1811b84c21ccfc2fe35b7b9ada2219a7a2b7db73 (patch) | |
| tree | 1e4c6715b5806c6defa5d8b6b1b3bd3d175b0fa7 | |
| parent | 370fb6fb63d61de86edd503a173f438bba90064f (diff) | |
add cmake package module
| -rw-r--r-- | xmake/actions/require/install.lua | 2 | ||||
| -rw-r--r-- | xmake/actions/require/list.lua | 2 | ||||
| -rw-r--r-- | xmake/actions/require/package.lua | 22 | ||||
| -rw-r--r-- | xmake/actions/require/remove.lua | 2 | ||||
| -rw-r--r-- | xmake/modules/detect/sdks/find_vcpkgdir.lua | 4 | ||||
| -rw-r--r-- | xmake/modules/package/builder/cmake.lua | 54 |
6 files changed, 73 insertions, 13 deletions
diff --git a/xmake/actions/require/install.lua b/xmake/actions/require/install.lua index 9c7d61be1..c4da493a9 100644 --- a/xmake/actions/require/install.lua +++ b/xmake/actions/require/install.lua @@ -125,7 +125,7 @@ function main(requires) end -- install packages - local packages = package.install_packages(requires, requires_extra) + local packages = package.install_packages(requires, {requires_extra = requires_extra}) if packages then -- check missing packages diff --git a/xmake/actions/require/list.lua b/xmake/actions/require/list.lua index 51f7d86fa..54356d14d 100644 --- a/xmake/actions/require/list.lua +++ b/xmake/actions/require/list.lua @@ -72,7 +72,7 @@ function main() end -- list all packages - for _, instance in ipairs(package.load_packages(requires, requires_extra)) do + for _, instance in ipairs(package.load_packages(requires, {requires_extra = requires_extra})) do local packageopt = project.option(instance:alias() or instance:name()) if packageopt then cprint(" ${magenta}require${clear}(%s): %s", instance:requireinfo().originstr, _info(instance)) diff --git a/xmake/actions/require/package.lua b/xmake/actions/require/package.lua index 301f960ef..27aabda82 100644 --- a/xmake/actions/require/package.lua +++ b/xmake/actions/require/package.lua @@ -244,7 +244,7 @@ function _sort_packagedeps(package) end -- load all required packages -function _load_packages(requires, requires_extra, parentinfo) +function _load_packages(requires, opt) -- no requires? if not requires or #requires == 0 then @@ -253,7 +253,7 @@ function _load_packages(requires, requires_extra, parentinfo) -- load packages local packages = {} - for packagename, requireinfo in pairs(load_requires(requires, requires_extra, parentinfo)) do + for packagename, requireinfo in pairs(load_requires(requires, opt.requires_extra, opt.parentinfo)) do -- attempt to get project option about this package local packageopt = project.option(packagename) @@ -267,9 +267,9 @@ function _load_packages(requires, requires_extra, parentinfo) -- load dependent packages and save them first of this package local deps = package:get("deps") - if deps then + if deps and opt.nodeps ~= true then local packagedeps = {} - for _, dep in ipairs(_load_packages(deps, package:get("__extra_deps"), requireinfo)) do + for _, dep in ipairs(_load_packages(deps, {requires_extra = package:get("__extra_deps"), parentinfo = requireinfo, nodeps = opt.nodeps})) do table.insert(packages, dep) packagedeps[dep:name()] = dep end @@ -415,10 +415,13 @@ function load_requires(requires, requires_extra, parentinfo) end -- load all required packages -function load_packages(requires, requires_extra) +function load_packages(requires, opt) + + -- init options + opt = opt or {} -- laod all required packages recursively - local packages = _load_packages(requires, requires_extra) + local packages = _load_packages(requires, opt) -- sort package urls _sort_packages_urls(packages) @@ -431,10 +434,13 @@ function load_packages(requires, requires_extra) end -- install packages -function install_packages(requires, requires_extra) +function install_packages(requires, opt) + + -- init options + opt = opt or {} -- load packages - local packages = load_packages(requires, requires_extra) + local packages = load_packages(requires, opt) -- fetch packages from local first local packages_remote = {} diff --git a/xmake/actions/require/remove.lua b/xmake/actions/require/remove.lua index fe02d45ad..d58a780ee 100644 --- a/xmake/actions/require/remove.lua +++ b/xmake/actions/require/remove.lua @@ -49,7 +49,7 @@ function main(requires) cache.clear() -- remove all packages - for _, instance in ipairs(package.load_packages(requires)) do + for _, instance in ipairs(package.load_packages(requires, {nodeps = true})) do local requireinfo = instance:requireinfo() or {} if os.isdir(instance:directory()) then diff --git a/xmake/modules/detect/sdks/find_vcpkgdir.lua b/xmake/modules/detect/sdks/find_vcpkgdir.lua index faa312b15..2c82ddf63 100644 --- a/xmake/modules/detect/sdks/find_vcpkgdir.lua +++ b/xmake/modules/detect/sdks/find_vcpkgdir.lua @@ -87,11 +87,11 @@ function main(sdkdir, opt) if vcpkg then -- save to config - config.set("vcpkg", vcpkg.sdkdir, {force = true, readonly = true}) + config.set("vcpkg", vcpkg, {force = true, readonly = true}) -- trace if opt.verbose or option.get("verbose") then - cprint("checking for the vcpkg directory ... ${green}%s", vcpkg.sdkdir) + cprint("checking for the vcpkg directory ... ${green}%s", vcpkg) end else diff --git a/xmake/modules/package/builder/cmake.lua b/xmake/modules/package/builder/cmake.lua new file mode 100644 index 000000000..05b576399 --- /dev/null +++ b/xmake/modules/package/builder/cmake.lua @@ -0,0 +1,54 @@ +--!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 cmake.lua +-- + +-- imports +import("core.base.option") +import("lib.detect.find_file") + +-- build package +function build(package) + os.mkdir("build/install") + os.cd("build") + os.vrun("cmake -DCMAKE_INSTALL_PREFIX=\"%s\" ..", path.absolute("install")) + if is_host("windows") then + local slnfile = assert(find_file("*.sln", os.curdir()), "*.sln file not found!") + os.vrun("msbuild %s -nologo -t:Rebuild -p:Configuration=%s -p:Platform=%s", slnfile, is_mode("debug") and "Debug" or "Release", is_arch("x64") and "x64" or "Win32") + else + os.vrun("make") + end +end + +-- install package +function install(package) + os.cd("build") + if is_host("windows") then + local projfile = os.isfile("INSTALL.vcxproj") and "INSTALL.vcxproj" or "INSTALL.vcproj" + os.vrun("msbuild %s /property:configuration=%s", projfile, is_mode("debug") and "Debug" or "Release") + else + os.vrun("make install") + end + os.cp("install/lib", package:installdir()) + os.cp("install/include", package:installdir()) +end + |
