2014-06-17 2 views
0

필자는 tmux 개발 환경을 설정하기위한 몇 가지 스크립트가 있으며 양조 수식으로 패키징하려고하지만 걸림돌을 맞았습니다. automake가 양조 수식에서 설치 한 경우를 제외하고 dist_bin_SCRIPTS에서 + x 비트를 올바르게 설정합니다.

로컬로 실행 :

% ./configure 
% make install 

*이 .IN에서 두 개의 스크립트를 생성하고 성공적으로 각각에 chmod +x를 실행합니다. 생성 된 파일은 모두 실행 가능합니다 (0755).

수동 ./configure && make 실행 후 프로젝트 폴더에 ls의 출력은 다음과 같습니다

~/repositories/tmuxide/scripts on :master? (2895bf9) tracking origin/master 
[email protected](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 

그리고 사제가 그것이 설치 폴더에 ls의 출력 : 여기에

/usr/local/Cellar/tmuxide/0.0.3.j/bin on :master (3fec4c9) 
[email protected](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], [[email protected]]) 
AM_INIT_AUTOMAKE 
AC_OUTPUT(Makefile man/Makefile scripts/Makefile) 
AC_OUTPUT 

스크립트/

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 

Makefile.am 그러나, 나는 양조 공식이 포장 할 때, 생성 된 파일 (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 

어디 일이 잘못되어 가고 것으로, 어떤 제안을 주시면 감사하겠습니다. 마지막으로 작동있어

당신은 github.com/frankjmattia/tmuxide

+0

BTW, configure는 ** scripts/Makefile.am **에서'AC_CONFIG_FILES'를 사용하여 빌드 단계에서 수행하는 것처럼 대체 작업을 수행합니다. 이 작업을 수행하는 [요점] (https://gist.github.com/ldav1s/2abb86695dec50c96742)이 있습니다. – ldav1s

+0

요점을 찾아 주셔서 감사합니다. 난 당신의 버전을 쏜과 불행히도 파일 양조 설치는 여전히 읽을 수 있습니다. 또한 make clean은 생성 된 파일을 제거하지 않습니다. –

+0

'make install' (brew없이)을 시도했을 때 스크립트는 올바른 권한으로 설치되었습니다. 따라서 양조 경로의 어딘가에 문제가있는 곳이 있습니다. 요지의 스크립트는 여전히 [automake clean rules] (http://www.gnu.org/software/automake/manual/html_node/Clean.html)를 따릅니다. 그것들은'make'에 의해 만들어지지는 않지만'configure' 때문에'make distclean'은 그들을 정리할 것입니다. – ldav1s

답변

0

에서 전체 소스를 찾을 수 있습니다. 그것의 경우

[@f.bin, @f.sbin, @f.lib].select{ |d| d.exist? }.each{ |d| clean_dir d } 

clean_dir은 기본적으로 각 파일을 거친 :

나는 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 

을 발견 바이너리 실행 파일 또는 텍스트 실행 파일은 실행 비트를 적절하게 조정합니다. 그렇지 않으면 실행 비트를 제거합니다.

그런데 나는 libexec을 사용하여이 파일들을 배포해야한다고 믿게하는이 stack overflow question을 발견했습니다. clean_dir 메서드는 libexec에서 아무 것도 변경하지 않았으므로 내 파일 권한이 보존되었지만 여행은 끝났습니다.

이 작업을 수행 한 후에 libexec이 경로에 있지 않기 때문에이 기호를 /usr/local/bin으로 심볼 링크해야했습니다. 그래서 수식에 bin.install_symlink "#{libexec}/tmuxide"을 추가했습니다. 그것은 효과가 있었지만 올바른 해결책은 아니 었습니다.주위에 putzing 후 나는 돌아 갔고 무엇이 text_executable? 경로 이름을 이루 었는지보기 위해 clean_dir 메소드를 다시 보았다. 내 오두막 라인이 제대로 형성되지 깨달았다 (나는 내가 거기에 오두막을 알고 있었다 때문에)

def text_executable? 
    %r[^#!\s*\S+] === open('r') { |f| f.read(1024) } 
end 

나는 다시 내 스크립트에 갔다. 나는 보통의 코멘트 # /usr/bin/env zsh을 만들었다. 수정 후 #!/usr/bin/env zsh 모든 것이 정상적으로 진행되었습니다.

@ ldav1s automake에 대한 좋은 조언 주셔서 감사합니다. 귀하의 도움을 주셨습니다.

관련 문제