Skip to content

Commit 70509b1

Browse files
committed
fix(libxau): sandbox template + ACLOCAL/PKG_CONFIG export
Apply bzip2 #49 sandbox-fix template; use shell glob for libXau*.so* enumeration and xau*.pc copy. Verified in iso (xlings 0.4.9): - install OK; install_dir/lib has libXau.so/libXau.so.6/libXau.so.6.0.0 - <subos>/usr/include/X11/Xauth.h present - <subos>/usr/lib/pkgconfig/xau.pc present
1 parent a874b65 commit 70509b1

1 file changed

Lines changed: 58 additions & 70 deletions

File tree

pkgs/l/libxau.lua

Lines changed: 58 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -58,53 +58,54 @@ import("xim.libxpkg.pkginfo")
5858
import("xim.libxpkg.log")
5959
import("xim.libxpkg.xvm")
6060

61+
-- Sandbox file enumeration helper (os.files(glob) is sandbox-nil).
62+
local function _ls_glob(globpat)
63+
local out = {}
64+
local h = io.popen("ls -1 " .. globpat .. " 2>/dev/null")
65+
if not h then return out end
66+
for line in h:lines() do
67+
if line ~= "" then table.insert(out, path.filename(line)) end
68+
end
69+
h:close()
70+
return out
71+
end
72+
73+
local function _sys_usr_includedir()
74+
return path.join(system.subos_sysrootdir(), "usr/include")
75+
end
76+
local function _sys_usr_libdir()
77+
return path.join(system.subos_sysrootdir(), "usr/lib")
78+
end
79+
6180
local function libxau_libs()
6281
local libdir = path.join(pkginfo.install_dir(), "lib/x86_64-linux-gnu")
6382
if not os.isdir(libdir) then
6483
libdir = path.join(pkginfo.install_dir(), "lib")
6584
end
66-
67-
local out = {}
68-
69-
-- Scan for all libXau*.so* files
70-
for _, file in ipairs(os.files(path.join(libdir, "libXau*.so*"))) do
71-
local name = path.filename(file)
72-
table.insert(out, name)
73-
end
74-
75-
-- If no files found via glob, return default set
85+
local out = _ls_glob(path.join(libdir, "libXau*.so*"))
7686
if #out == 0 then
77-
table.insert(out, "libXau.so")
78-
table.insert(out, "libXau.so.6")
87+
out = { "libXau.so", "libXau.so.6" }
7988
end
80-
8189
return out
8290
end
8391

84-
local sys_usr_includedir = path.join(system.subos_sysrootdir(), "usr/include")
85-
8692
function install()
87-
local scode_libxau_dir = path.absolute("libXau-" .. pkginfo.version())
88-
local build_libxau_dir = "build-libxau"
89-
90-
log.info("1.Creating build dir -" .. build_libxau_dir)
91-
os.tryrm(build_libxau_dir)
92-
os.mkdir(build_libxau_dir)
93-
94-
log.info("2.Configuring libxau with autotools...")
95-
os.cd(build_libxau_dir)
96-
local libxau_prefix = pkginfo.install_dir()
97-
system.exec("" .. scode_libxau_dir .. "/configure"
98-
.. " --prefix=" .. libxau_prefix
99-
.. " --disable-static"
100-
.. " --enable-shared"
101-
)
102-
103-
log.info("3.Building libxau...")
104-
system.exec(string.format("make -j%d", os.cpuinfo("ncpu") or 4))
105-
106-
log.info("4.Installing libxau...")
107-
system.exec("make install")
93+
-- sandbox template (#49 bzip2)
94+
local runtime_dir = path.directory(pkginfo.install_file())
95+
local scode_dir = path.join(runtime_dir, "libXau-" .. pkginfo.version())
96+
local build_dir = path.join(runtime_dir, "build-libxau")
97+
local prefix = pkginfo.install_dir()
98+
99+
os.tryrm(build_dir)
100+
os.mkdir(build_dir)
101+
102+
log.info("Configuring + building + installing libxau (autotools)...")
103+
system.exec(string.format(
104+
"sh -c 'export PKG_CONFIG_PATH=%s/usr/lib/pkgconfig; "
105+
.. "cd %s && %s/configure --prefix=%s --disable-static --enable-shared "
106+
.. "&& make -j8 && make install'",
107+
system.subos_sysrootdir(), build_dir, scode_dir, prefix
108+
))
108109

109110
return os.isdir(pkginfo.install_dir())
110111
end
@@ -116,63 +117,50 @@ function config()
116117
libdir = path.join(pkginfo.install_dir(), "lib")
117118
end
118119

119-
local config = {
120+
local cfg = {
120121
type = "lib",
121122
version = "libxau-" .. pkginfo.version(),
122123
bindir = libdir,
123124
}
124125

125126
for _, lib in ipairs(libxau_libs()) do
126-
config.alias = lib
127-
config.filename = lib
128-
xvm.add(lib, config)
127+
cfg.alias = lib
128+
cfg.filename = lib
129+
xvm.add(lib, cfg)
129130
end
130131

131132
log.info("Adding header files to sysroot...")
132-
local libxau_hdr_dir = path.join(pkginfo.install_dir(), "include")
133-
os.mkdir(sys_usr_includedir)
134-
135-
-- Copy X11 headers
136-
local x11_include_dir = path.join(libxau_hdr_dir, "X11")
137-
if os.isdir(x11_include_dir) then
138-
os.cp(x11_include_dir, sys_usr_includedir, { force = true })
133+
local sys_inc = _sys_usr_includedir()
134+
os.mkdir(sys_inc)
135+
local x11_dir = path.join(pkginfo.install_dir(), "include", "X11")
136+
if os.isdir(x11_dir) then
137+
os.cp(x11_dir, sys_inc, { force = true })
139138
end
140139

141-
-- Copy pkgconfig files
142-
local sys_pc_dir = path.join(system.subos_sysrootdir(), "usr/lib/pkgconfig")
140+
local sys_pc_dir = path.join(_sys_usr_libdir(), "pkgconfig")
143141
os.mkdir(sys_pc_dir)
144-
local pc_dirs = {
145-
path.join(pkginfo.install_dir(), "lib/pkgconfig"),
146-
path.join(pkginfo.install_dir(), "lib/x86_64-linux-gnu/pkgconfig"),
147-
}
148-
for _, pc_dir in ipairs(pc_dirs) do
149-
if os.isdir(pc_dir) then
150-
for _, pc in ipairs(os.files(path.join(pc_dir, "xau*.pc"))) do
151-
os.cp(pc, sys_pc_dir)
152-
end
142+
for _, pc_subdir in ipairs({"lib/pkgconfig", "lib/x86_64-linux-gnu/pkgconfig"}) do
143+
local src = path.join(pkginfo.install_dir(), pc_subdir)
144+
if os.isdir(src) then
145+
system.exec(string.format(
146+
"sh -c 'cp -f %s/xau*.pc %s/ 2>/dev/null || true'",
147+
src, sys_pc_dir
148+
))
153149
end
154150
end
155151

156152
xvm.add("libxau")
157-
158153
return true
159154
end
160155

161156
function uninstall()
162157
xvm.remove("libxau")
163-
164158
for _, lib in ipairs(libxau_libs()) do
165159
xvm.remove(lib, "libxau-" .. pkginfo.version())
166160
end
167-
168-
-- Remove header files (only Xauth.h)
169-
os.tryrm(path.join(sys_usr_includedir, "X11/Xauth.h"))
170-
171-
-- Remove pkgconfig files
172-
local sys_pc_dir = path.join(system.subos_sysrootdir(), "usr/lib/pkgconfig")
173-
for _, pc in ipairs(os.files(path.join(sys_pc_dir, "xau*.pc"))) do
174-
os.tryrm(pc)
175-
end
176-
161+
os.tryrm(path.join(_sys_usr_includedir(), "X11/Xauth.h"))
162+
system.exec(string.format(
163+
"sh -c 'rm -f %s/pkgconfig/xau*.pc'", _sys_usr_libdir()
164+
))
177165
return true
178166
end

0 commit comments

Comments
 (0)