From 32cabe08be37cbc98d02a81076cbe8fe2fadda9b Mon Sep 17 00:00:00 2001 From: ruki Date: Thu, 5 Sep 2024 00:57:17 +0800 Subject: [PATCH 1/3] add writeable for os.cp #5138 --- core/src/tbox/tbox | 2 +- core/src/xmake/os/cpfile.c | 4 ++++ xmake/actions/create/main.lua | 2 +- xmake/core/base/os.lua | 3 ++- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/core/src/tbox/tbox b/core/src/tbox/tbox index 57e57a3271a..e222f61667f 160000 --- a/core/src/tbox/tbox +++ b/core/src/tbox/tbox @@ -1 +1 @@ -Subproject commit 57e57a3271ad925936b3fbf37877f9eceb49ee4e +Subproject commit e222f61667fdafb9189849d2970c01e13940b0b9 diff --git a/core/src/xmake/os/cpfile.c b/core/src/xmake/os/cpfile.c index 153f51de0e4..06184cf21e4 100644 --- a/core/src/xmake/os/cpfile.c +++ b/core/src/xmake/os/cpfile.c @@ -49,6 +49,10 @@ tb_int_t xm_os_cpfile(lua_State* lua) if (is_symlink) flags |= TB_FILE_COPY_LINK; + tb_bool_t is_writeable = lua_toboolean(lua, 4); + if (is_writeable) + flags |= TB_FILE_COPY_WRITEABLE; + // do copy lua_pushboolean(lua, tb_file_copy(src, dst, flags)); return 1; diff --git a/xmake/actions/create/main.lua b/xmake/actions/create/main.lua index 69aa52997c5..14a7dc0a674 100644 --- a/xmake/actions/create/main.lua +++ b/xmake/actions/create/main.lua @@ -98,7 +98,7 @@ function _create_project(language, templateid, targetname) local sourcedir = path.join(tempinst:scriptdir(), "project") if os.isdir(sourcedir) then for _, filedir in ipairs(os.filedirs(path.join(sourcedir, "*"))) do - os.cp(filedir, projectdir) + os.cp(filedir, projectdir, {writeable = true}) table.insert(filedirs, path.relative(filedir, sourcedir)) end os.cp(path.join(os.programdir(), "scripts", "gitignore"), path.join(projectdir, ".gitignore")) diff --git a/xmake/core/base/os.lua b/xmake/core/base/os.lua index 2dba50509c4..6a1151e23d4 100644 --- a/xmake/core/base/os.lua +++ b/xmake/core/base/os.lua @@ -70,6 +70,7 @@ function os._cp(src, dst, rootdir, opt) -- is file or link? local symlink = opt.symlink + local writeable = opt.writeable if os.isfile(src) or (symlink and os.islink(src)) then -- the destination is directory? append the filename @@ -85,7 +86,7 @@ function os._cp(src, dst, rootdir, opt) if opt.force and os.isfile(dst) then os.rmfile(dst) end - if not os.cpfile(src, dst, symlink) then + if not os.cpfile(src, dst, symlink, writeable) then local errors = os.strerror() if symlink and os.islink(src) then local reallink = os.readlink(src) From 9d824b19fdf646557585c9a74bae05b6d970e0af Mon Sep 17 00:00:00 2001 From: ruki Date: Thu, 5 Sep 2024 00:57:57 +0800 Subject: [PATCH 2/3] improve debian xpack --- xmake/actions/create/main.lua | 1 + xmake/plugins/pack/deb/main.lua | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/xmake/actions/create/main.lua b/xmake/actions/create/main.lua index 14a7dc0a674..6f65b2785e9 100644 --- a/xmake/actions/create/main.lua +++ b/xmake/actions/create/main.lua @@ -98,6 +98,7 @@ function _create_project(language, templateid, targetname) local sourcedir = path.join(tempinst:scriptdir(), "project") if os.isdir(sourcedir) then for _, filedir in ipairs(os.filedirs(path.join(sourcedir, "*"))) do + -- https://github.com/xmake-io/xmake/issues/5138#issuecomment-2329238617 os.cp(filedir, projectdir, {writeable = true}) table.insert(filedirs, path.relative(filedir, sourcedir)) end diff --git a/xmake/plugins/pack/deb/main.lua b/xmake/plugins/pack/deb/main.lua index 076b88da393..8088d39bdc1 100644 --- a/xmake/plugins/pack/deb/main.lua +++ b/xmake/plugins/pack/deb/main.lua @@ -191,7 +191,7 @@ function _pack_deb(debuild, package) local debiandir = path.join(sourcedir, "debian") if not os.isdir(debiandir) then local debiandir_template = package:get("specfile") or path.join(os.programdir(), "scripts", "xpack", "deb", "debian") - os.cp(debiandir_template, debiandir) + os.cp(debiandir_template, debiandir, {writeable = true}) end -- replace variables in specfile From ee4935050a6165e1da500731fb00f3b08265c266 Mon Sep 17 00:00:00 2001 From: ruki Date: Thu, 5 Sep 2024 00:59:16 +0800 Subject: [PATCH 3/3] improve xpack spec --- xmake/plugins/pack/runself/main.lua | 2 +- xmake/plugins/pack/srpm/main.lua | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/xmake/plugins/pack/runself/main.lua b/xmake/plugins/pack/runself/main.lua index 4343b1a764b..91284edc0d9 100644 --- a/xmake/plugins/pack/runself/main.lua +++ b/xmake/plugins/pack/runself/main.lua @@ -111,7 +111,7 @@ function _pack_runself(makeself, package) local specfile = path.join(package:buildir(), package:basename() .. ".lsm") if not os.isfile(specfile) then local specfile_template = package:get("specfile") or path.join(os.programdir(), "scripts", "xpack", "runself", "makeself.lsm") - os.cp(specfile_template, specfile) + os.cp(specfile_template, specfile, {writeable = true}) end -- replace variables in specfile diff --git a/xmake/plugins/pack/srpm/main.lua b/xmake/plugins/pack/srpm/main.lua index a0b2d2dadbe..72b76563e29 100644 --- a/xmake/plugins/pack/srpm/main.lua +++ b/xmake/plugins/pack/srpm/main.lua @@ -205,7 +205,7 @@ function _pack_srpm(rpmbuild, package) local specfile = path.join(package:buildir(), package:basename() .. ".spec") if not os.isfile(specfile) then local specfile_template = package:get("specfile") or path.join(os.programdir(), "scripts", "xpack", "srpm", "srpm.spec") - os.cp(specfile_template, specfile) + os.cp(specfile_template, specfile, {writeable = true}) end -- replace variables in specfile