Homebrew 自动在dist_bin_脚本上正确设置+x位,从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)

我有一些脚本来设置我的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)
*****@****(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