我有几个脚本来设置我的tmux开发环境,我试图将它们打包成brew公式,但我遇到了麻烦。
本地跑步:
% ./configure
% make install
从* .in生成两个脚本,并在每个脚本上成功运行chmod +x
。它生成的文件都是可执行的(0755)。
手动运行ls
后项目文件夹中./configure && make
的输出为:
~/repositories/tmuxide/scripts on :master? (2895bf9) tracking origin/master
frankjmattia@lappy-i686(ttys002)[1062] % ls
total 104
drwxr-xr-x 9 frankjmattia staff 306B Jun 16 22:10 .
drwxr-xr-x 24 frankjmattia staff 816B Jun 16 22:10 ..
-rw-r--r-- 1 frankjmattia staff 14K Jun 16 22:09 Makefile
-rw-r--r-- 1 frankjmattia staff 405B Jun 16 22:08 Makefile.am
-rw-r--r-- 1 frankjmattia staff 14K Jun 16 22:09 Makefile.in
-rwxr-xr-x 1 frankjmattia staff 1.7K Jun 16 22:10 log-pane
-rw-r--r-- 1 frankjmattia staff 1.7K Jun 12 20:35 log-pane.in
-rwxr-xr-x 1 frankjmattia staff 2.1K Jun 16 22:10 tmuxide
-rw-r--r-- 1 frankjmattia staff 2.1K Jun 16 22:04 tmuxide.in
Homebrew安装文件夹中的ls
输出为:
/usr/local/Cellar/tmuxide/0.0.3.j/bin on :master (3fec4c9)
frankjmattia@lappy-i686(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
以下是正在播放的文件的重要部分:
configure.ac
AC_PREREQ([2.69])
AC_INIT([tmuxide], [0.0.3.j], [frankjmattia+tmuxide@gmail.com])
AM_INIT_AUTOMAKE
AC_OUTPUT(Makefile man/Makefile scripts/Makefile)
AC_OUTPUT
脚本/ Makefile.am
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
但是,当我将它包装在brew公式中时,生成的文件只能读取(0444)。
自制/ tmuxide.rb
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
我无法弄清楚哪里出了问题,我们将非常感谢任何建议。
找到完整的来源答案 0 :(得分:0)
最后让它发挥作用。
我跑了brew install 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].select{ |d| d.exist? }.each{ |d| clean_dir d }
clean_dir
基本上遍历每个文件,如果它是二进制可执行文件或文本可执行文件,则相应地调整执行位。如果不是,则删除执行位。
然后我偶然发现了这个stack overflow question,这让我相信我应该使用libexec
分发这些文件。 clean_dir
方法没有改变libexec中的任何内容,因此我的文件权限得以保留,但我的旅程远未结束。
让这个工作后,我必须将这些符号链接到/usr/local/bin
,因为libexec
不在路径中。所以我在公式中添加了bin.install_symlink "#{libexec}/tmuxide"
。这很有效 - 但它不是正确的解决方案。放了一下之后,我又回去看了一遍clean_dir方法,看看是什么构成了text_executable?
路径名。
def text_executable?
%r[^#!\s*\S+] === open('r') { |f| f.read(1024) }
end
我回到我的剧本(因为我知道我在那里有一个shebang)并且意识到我的shebang线没有正确形成。我把它作为普通评论# /usr/bin/env zsh
。将其更正为#!/usr/bin/env zsh
后,一切都正常进行。
@ ldav1s感谢您对automake的好建议。感谢您的帮助。