aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bldit.lua78
-rw-r--r--config/init.lua98
-rw-r--r--config/pkgit.lua53
-rw-r--r--config/types.lua2
4 files changed, 143 insertions, 88 deletions
diff --git a/bldit.lua b/bldit.lua
index 04100ab..e266b7d 100644
--- a/bldit.lua
+++ b/bldit.lua
@@ -18,43 +18,47 @@
]]
-bldit_version = "1.2.0"
-package_version = "1.2.0"
-
-dependencies = {
- luajit = {
- url = "https://luajit.org/git/luajit.git",
- version = "v2.1",
- target = "default",
- },
- git = {
- url = "https://github.com/git/git",
- version = "HEAD",
- target = "default",
- },
+local bldit = {}
+bldit.version = "1.2.0"
+bldit.package_version = bldit.version
+
+
+-- fetchers, entirely made by the developer --
+local fetchers = {}
+fetchers.git = {
+ get_source = function(url, version) return pkgit.run({
+ "git clone "..url.." --branch "..version
+ }) end,
+ get_version = function(url) return io.popen(
+ "git -c 'versionsort.suffix=-' \
+ ls-remote --exit-code --refs --sort='version:refname' \
+ --tags "..url.." '*.*.*' \
+ | tail --lines=1 \
+ | cut --delimiter='/' --fields=3"
+ ):read("*a") end,
+}
+-- fetchers, entirely made by the developer --
+
+
+bldit.dependencies = {
+ luajit = {
+ url = "https://luajit.org/git/luajit.git",
+ version = "v2.1",
+ fetcher = fetchers.git,
+ recipe = recpies.make
+ }
}
-targets = {
- default = {
- build = function()
- return os.execute("make")
- end,
- install = function()
- return os.execute("make install PREFIX="..prefix)
- end,
- uninstall = function()
- return os.execute("make uninstall PREFIX="..prefix)
- end,
- },
- quiet = {
- build = function()
- return os.execute("make &>/tmp/pkgit_build.log")
- end,
- install = function()
- return os.execute("make install PREFIX="..prefix.." &>/tmp/pkgit_build.log")
- end,
- uninstall = function()
- return os.execute("make uninstall PREFIX="..prefix.." &>/tmp/pkgit_build.log")
- end,
- },
+bldit.recipe = {
+ build = function()
+ return os.execute("make")
+ end,
+ install = function()
+ return os.execute("make install PREFIX="..user.dirs.prefix)
+ end,
+ uninstall = function()
+ return os.execute("make uninstall PREFIX="..user.dirs.prefix)
+ end,
}
+
+return bldit
diff --git a/config/init.lua b/config/init.lua
index 2a9dce2..a6a2044 100644
--- a/config/init.lua
+++ b/config/init.lua
@@ -1,70 +1,68 @@
local pkgit = require("pkgit")
local cfg = {}
-local prefix = os.getenv("HOME") .. "/.local"
+local prefix = os.getenv("HOME").."/.local"
cfg.dirs = {
- prefix = prefix,
- src = prefix .. "/share/pkgit",
- bin = prefix .. "/bin",
- lib = prefix .. "/lib",
- include = prefix .. "/include",
+ prefix = prefix,
+ src = prefix.."/share/pkgit",
+ bin = prefix.."/bin",
+ lib = prefix.."/lib",
+ include = prefix.."/include",
}
-cfg.pkgs = {
- ["gmp"] = {},
- ["mpfr"] = {},
- ["mpc"] = {},
- ["gcc"] = {
- url = "https://ftp.gnu.org/gnu/gcc/gcc-16.1.0/gcc-16.1.0.tar.xz",
- version = "16.1.0",
- fetcher = cfg.fetchers.tarball,
- dependencies = {
- "gmp", "mpfr", "mpc"
- }
- },
- ["luajit"] = {
- url = "https://luajit.org/git/luajit.git",
- version = "v2.1",
- fetcher = cfg.fetchers.git,
- dependencies = {
- "gcc"
- },
- },
- ["pkgit"] = {
- url = "https://git.symlinx.net/pkgit",
- version = "HEAD",
- fetcher = cfg.fetchers.git,
- dependencies = {
- "luajit",
- },
- opts = {},
- recipe = cfg.recipes.make,
- }
-}
-
-cfg.fetchers = {
- git = {
- get_source = function(url, version, target_dir) return 0 end,
- get_version = function(url, target_dir) return "HEAD" end,
- },
- tarball = {
- get_source = function(url, version, target_dir) return 0 end,
- get_version = function(url, target_dir) return "" end,
- }
+cfg.fetchers = {}
+cfg.fetchers.git = {
+ get_source = function(url, version) return pkgit.run({
+ "git clone --branch "..version.." --recursive --depth 1 "..url
+ }) end,
+ get_version = function(url) return io.popen(
+ "git -c 'versionsort.suffix=-' \
+ ls-remote --exit-code --refs --sort='version:refname' \
+ --tags "..url.." '*.*.*' \
+ | tail --lines=1 \
+ | cut --delimiter='/' --fields=3"
+ ):read("*a") end,
}
cfg.fetchers.default = cfg.fetchers.git
cfg.recipes = {}
cfg.recipes.make = {
build = function(bldit_build)
- return pkgit.run({ "make" })
+ return pkgit.run({"make"})
end,
install = function(bldit_install)
- return pkgit.run({ "make install PREFIX=" .. prefix })
+ return pkgit.run({"make install PREFIX="..prefix})
end,
remove = function(bldit_remove)
- return pkgit.run({ "make uninstall PREFIX=" .. prefix })
+ return pkgit.run({"make uninstall PREFIX="..prefix})
end,
}
+local builds = {
+ make = {
+ files = {
+ "makefile",
+ "Makefile",
+ "Makefile.am",
+ },
+ recipe = cfg.recipes.make
+ }
+}
+cfg.recipes.default = function(final_dir) return pkgit.autodetect(builds, final_dir) end
+
+cfg.pkgs = {}
+cfg.pkgs.pkgit = {
+ url = "https://git.symlinx.net/pkgit",
+ version = "HEAD",
+ fetcher = cfg.fetchers.git,
+ dependencies = {
+ luajit = {
+ url = "https://luajit.org/git/luajit.git",
+ version = "v2.1",
+ fetcher = cfg.fetchers.git,
+ }
+ },
+ opts = {},
+ recipe = cfg.recipes.make,
+}
return cfg
diff --git a/config/pkgit.lua b/config/pkgit.lua
new file mode 100644
index 0000000..718e761
--- /dev/null
+++ b/config/pkgit.lua
@@ -0,0 +1,53 @@
+-- std pkgit functions
+
+local M = {}
+
+function M.run(items, verbose)
+ local cmd = io.popen('set -e &&\n'..table.concat(items,"&&\n"))
+ if cmd == nil then return 1 end
+ if verbose then print(cmd:read("*a")) end
+ local rc = {cmd:close()}
+ if rc[1] then return 0
+ else return 1
+ end
+end
+
+function M.join(t1, ...)
+ local new = t1
+ local tables = { ... }
+ for _, new_table in ipairs(tables) do
+ for index, val in ipairs(new_table) do
+ if val ~= nil then
+ new[index] = val
+ end
+ end
+ end
+ return new
+end
+
+function M.exists(s)
+ local file = io.open(s, "r")
+ if file ~= nil then
+ io.close(file)
+ return true
+ else
+ return false
+ end
+end
+
+function M.autodetect(builds, final_dir)
+ for k, system in pairs(builds) do
+ for i, file in pairs(system.files) do
+ if M.exists(final_dir.."/"..file) then
+ return system.step
+ end
+ end
+ end
+end
+
+function M.destdir(name, version)
+ if version == nil then version = "HEAD" end
+ return cfg.dirs.src.."/"..name.."/"..version
+end
+
+return M
diff --git a/config/types.lua b/config/types.lua
index 10a444d..8f80369 100644
--- a/config/types.lua
+++ b/config/types.lua
@@ -26,7 +26,7 @@
---@field fetcher Fetcher | nil
---@field dependencies { [string]: Package } | "bldit" | nil
---@field opts table?
----@field recipe Recipe | "bldit" | nil
+---@field recipe Recipe | fun(final_dir: string): Recipe | "bldit" | nil
---@class (exact) Config
---@field dirs Dirs