Mercurial > repo
view share/lua/5.2/luarocks/build/make.lua @ 8065:591b1467ccdf
<int-e> le/rn paste/"Paste" is a short story by Henry James. Its contents has been cut into pieces and distributed over numerous tin boxes on the World Wide Web, little pearls of wisdom buried among ordinary pastes.
author | HackBot |
---|---|
date | Sun, 15 May 2016 13:14:57 +0000 |
parents | d137f631bad5 |
children |
line wrap: on
line source
--- Build back-end for using Makefile-based packages. module("luarocks.build.make", package.seeall) local fs = require("luarocks.fs") local util = require("luarocks.util") local cfg = require("luarocks.cfg") --- Call "make" with given target and variables -- @param make_cmd string: the make command to be used (typically -- configured through variables.MAKE in the config files, or -- the appropriate platform-specific default). -- @param pass boolean: If true, run make; if false, do nothing. -- @param target string: The make target; an empty string indicates -- the default target. -- @param variables table: A table containing string-string key-value -- pairs representing variable assignments to be passed to make. -- @return boolean: false if any errors occurred, true otherwise. local function make_pass(make_cmd, pass, target, variables) assert(type(pass) == "boolean") assert(type(target) == "string") assert(type(variables) == "table") local assignments = {} for k,v in pairs(variables) do table.insert(assignments, k.."="..v) end if pass then return fs.execute(make_cmd.." "..target, unpack(assignments)) else return true end end --- Driver function for the "make" build back-end. -- @param rockspec table: the loaded rockspec. -- @return boolean or (nil, string): true if no errors ocurred, -- nil and an error message otherwise. function run(rockspec) assert(type(rockspec) == "table") local build = rockspec.build if build.build_pass == nil then build.build_pass = true end if build.install_pass == nil then build.install_pass = true end build.build_variables = build.build_variables or {} build.install_variables = build.install_variables or {} build.build_target = build.build_target or "" build.install_target = build.install_target or "install" local makefile = build.makefile or cfg.makefile if makefile then -- Assumes all make's accept -f. True for POSIX make, GNU make and Microsoft nmake. build.build_target = "-f "..makefile.." "..build.build_target build.install_target = "-f "..makefile.." "..build.install_target end if build.variables then for var, val in pairs(build.variables) do build.build_variables[var] = val build.install_variables[var] = val end end util.warn_if_not_used(build.build_variables, { CFLAGS=true }, "variable %s was not passed in build_variables") util.variable_substitutions(build.build_variables, rockspec.variables) util.variable_substitutions(build.install_variables, rockspec.variables) local auto_variables = { "CC" } for _, variable in pairs(auto_variables) do if not build.build_variables[variable] then build.build_variables[variable] = rockspec.variables[variable] end if not build.install_variables[variable] then build.install_variables[variable] = rockspec.variables[variable] end end -- backwards compatibility local make_cmd = cfg.make or rockspec.variables.MAKE local ok = make_pass(make_cmd, build.build_pass, build.build_target, build.build_variables) if not ok then return nil, "Failed building." end ok = make_pass(make_cmd, build.install_pass, build.install_target, build.install_variables) if not ok then return nil, "Failed installing." end return true end