Homebrew 自动在dist_bin_脚本上正确设置+x位,从brew公式安装时除外
我有一些脚本来设置我的tmux开发环境,我正试图将它们打包成brew公式,但我遇到了一个障碍 本地运行:Homebrew 自动在dist_bin_脚本上正确设置+x位,从brew公式安装时除外,homebrew,file-permissions,automake,Homebrew,File Permissions,Automake,我有一些脚本来设置我的tmux开发环境,我正试图将它们打包成brew公式,但我遇到了一个障碍 本地运行: % ./configure % make install 从*.in生成两个脚本,并在每个脚本上成功运行chmod+x。它生成的文件都是可执行文件0755 手动运行./configure&&make后,项目文件夹中ls的输出为: homebrew安装文件夹中ls的输出为: /usr/local/Cellar/tmuxide/0.0.3.j/bin on :master (3fec4c9)
% ./configure
% make install
从*.in生成两个脚本,并在每个脚本上成功运行chmod+x。它生成的文件都是可执行文件0755
手动运行./configure&&make后,项目文件夹中ls的输出为:
homebrew安装文件夹中ls的输出为:
/usr/local/Cellar/tmuxide/0.0.3.j/bin on :master (3fec4c9)
*****@****(ttys002)[1056] % ls
total 16
drwxr-xr-x 4 frankjmattia admin 136B Jun 16 22:11 .
drwxr-xr-x 6 frankjmattia admin 204B Jun 16 22:11 ..
-r--r--r-- 1 frankjmattia admin 1.7K Jun 16 22:11 log-pane
-r--r--r-- 1 frankjmattia admin 2.1K Jun 16 22:11 tmuxide
以下是文件的重要部分:
配置.ac
脚本/Makefile.am
但是,当我将其包装到brew公式中时,生成的文件只能读取0444
自制/tmuxide.rb
我不知道哪里出了问题,任何建议都将不胜感激
您可以在上找到完整的源代码,最终使其生效 我运行了brew安装tmuxide-vd,在运行结束时,我注意到了这个宝石
==> Cleaning
Fixing /usr/local/Cellar/tmuxide/0.0.3.k/bin/log-pane permissions from 755 to 444
Fixing /usr/local/Cellar/tmuxide/0.0.3.k/bin/tmuxide permissions from 755 to 444
深入挖掘自制源代码,我发现:
[@f.bin,@f.sbin,@f.lib]。选择{| d | d.exist?}。每个{| d | clean | u dir d}
clean_dir基本上遍历每个文件,如果它是二进制可执行文件或文本可执行文件,它会相应地调整执行位。如果不是,则删除执行位
然后我偶然发现了这个问题,这让我相信我应该使用libexec来分发这些文件。clean_dir方法没有改变libexec中的任何内容,因此保留了我的文件权限,但我的旅程还远远没有结束
在这项工作完成后,我不得不将它们符号链接到/usr/local/bin,因为libexec不在路径中。因此,我在公式中添加了bin.install_symlink{libexec}/tmuxide。这是可行的,但不是正确的解决方案。经过反复讨论之后,我返回并再次查看clean_dir方法,看看是什么构成了一个text_可执行文件?路径名
def text_executable?
%r[^#!\s*\S+] === open('r') { |f| f.read(1024) }
end
我回到我的剧本,因为我知道我有一个shebang在那里,并意识到我的shebang线没有正确形成。我做了一个普通的评论/usr/bin/env zsh。在把它改成之后/usr/bin/env zsh一切正常
@ldav1s感谢关于汽车制造的好提示。非常感谢您的帮助。顺便说一句,configure确实会像您在scripts/Makefile.am中使用AC\u CONFIG\u文件的构建步骤中那样进行替换。这是一个能做到这一点的方法。谢谢你的要点。我尝试了一下您的版本,不幸的是brew安装的文件仍然只能读取。另外,“make clean”现在无法删除生成的文件。当我尝试在不使用brew的情况下进行“make install”时,脚本是以正确的权限安装的,正如您的帖子所述。因此,brew路径上的某个地方就是问题所在。《要点》中的脚本仍然遵循以下原则。它们不是由make制造的,而是配置的,所以make-distclean将清理它们。啊,很高兴知道,make-distclean已经处理好了。与Makefile相比,我更喜欢puting-it-in-configure.ac方法。但我仍然无法理解为什么brew安装会扼杀它。搜索仍在继续。
dist_bin_SCRIPTS = tmuxide log-pane
CLEANFILES = $(dist_bin_SCRIPTS)
EXTRA_DIST = tmuxide.in log-pane.in
do_subst = sed \
-e 's,[@]PACKAGE[@],$(PACKAGE),g' \
-e 's,[@]PACKAGE_VERSION[@],$(PACKAGE_VERSION),g'
tmuxide: tmuxide.in Makefile
$(do_subst) < $(srcdir)/tmuxide.in > tmuxide
chmod +x tmuxide
log-pane: log-pane.in Makefile
$(do_subst) < $(srcdir)/log-pane.in > log-pane
chmod +x log-pane
require "formula"
class Tmuxide < Formula
homepage 'https://github.com/frankjmattia/tmuxide'
url 'https://frankjmattia.github.io/tmuxide/tmuxide-0.0.3.j.tar.gz'
sha1 '5e51b66013a4afd60c362ce448b7e976cf7d6d6e'
depends_on 'gnu-getopt'
def install
system './configure', '--disable-silent-rules',
"--prefix=#{prefix}"
system 'make', 'install'
end
end
==> Cleaning
Fixing /usr/local/Cellar/tmuxide/0.0.3.k/bin/log-pane permissions from 755 to 444
Fixing /usr/local/Cellar/tmuxide/0.0.3.k/bin/tmuxide permissions from 755 to 444
def text_executable?
%r[^#!\s*\S+] === open('r') { |f| f.read(1024) }
end