ref: e1bd55e7d0fd87b66041c1f90cc4cba370cb25ed
dir: /mbld/install.myr/
use std use "config.use" use "deps.use" use "opts.use" use "parse.use" use "types.use" use "util.use" use "build.use" pkg bld = const install : (p : build# -> bool) const uninstall : (p : build# -> bool) ;; const install = {b buildall(b) -> movetargs(b, false) } const uninstall = {b -> movetargs(b, true) } const movetargs = {b, rm var libarchive for tn in b.all match gettarg(b.targs, tn) | `Bin bt: if bt.install && !bt.istest movefile(b, rm, bt.dir, bt.name, config.Binpath, 0o755) ;; | `Lib lt: if lt.install && !lt.istest movefile(b, rm, lt.dir, lt.name, config.Libpath, 0o644) libarchive = std.fmt("lib{}.a", lt.name) movefile(b, rm, lt.dir, libarchive, config.Libpath, 0o644) std.slfree(libarchive) ;; | `Gen gt: /* nothing to do */ | `Cmd ct: /* nothing to do */ | `Man mt: /* FIXME: figure out man section by number */ for m in mt.pages moveman(b, rm, mt.dir, m) ;; ;; ;; -> true } const movefile = {b, rm, dir, file, prefix, perm var path setdir(b, dir) path = std.pathjoin([opt_destdir, opt_instroot, prefix, file][:]) if rm std.put("\trm {}\n", path) if !std.remove(path) std.put("\t\tno such file {}\n", file) ;; else std.put("\t{} => {}\n", file, path) std.remove(path) match std.slurp(file) | `std.Fail m: std.fatal("Could not open {} for reading\n", file) | `std.Ok buf: if !std.blat(path, buf, perm) std.put("Could not write {}\n", file) ;; std.slfree(buf) ;; ;; std.slfree(path) } const moveman = {b, rm, dir, man var sect, manrel match std.strrfind(man, ".") | `std.None: std.fatal("manpage {} has no section\n", man) | `std.Some s: sect = s + 1 if s + 1 == man.len std.fatal("manpage {} missing suffix\n", man) ;; ;; manrel = std.fmt("{}{}", opt_manpath, man[sect:]) movefile(b, rm, dir, man, manrel, 0o644) std.slfree(manrel) }