pkg 부디렉토리
포트가 공유 라이브러리를 설치한다면 post-install
타겟을 Makefile에 추가하고 `/sbin/ldconfig -m'를
새 라이브러리가 설치되는 디렉토리에 대해 실행하여
(보통 ${PREFIX}/lib) 공유 라이브러리 캐시에
등록하세요.
또한, pkg/PLIST파일에 대응하는 `@exec /sbin/ldconfig
-m'/`@unexec /sbin/ldconfig -R' 행을 추가하여
패키지를 설치하는 사용자가 공유 라이브러리를 즉시 사용할 수
있고 삭제시 시스템이 라이브러리가 여전히 거기 있다고 생각하지
않도록 해야 합니다. 이 행은 공유 라이브러리를 나타내는 행 바로
다음에 나타나야 합니다.
다음처럼:
lib/libtcl80.so.1.0
@exec /sbin/ldconfig -m %D/lib
@unexec /sbin/ldconfig -R
Makefile이나 pkg/PLIST에 인수 없이 `ldconfig'를
실행하는 행을 결코, 절대, 꼭 추가하면 안됩니다.
이는 공유 라이브러리 캐시의 내용을 /usr/lib만으로
되돌리므로, 사용자 PC를 완전히 엉망으로 만들 것입니다
("도와줘요, 이 포트를 설치한 뒤에 xinit아 안되요!").
이렇게 하는 사람은 총에 맞고 녹슨 칼에 65,536 조각으로 나뉘고
까마귀 무리에게 간을 쪼일 것이고 영원히 지옥의 가장 깊은 곳에서
죽어 썩어갈 것입니다(꼭 위 순서대로일 필요는 없지만)....
FreeBSD는 3.0-release에서부터 ELF로 옮겨가고 있기 때문에, ELF를 지원하기 위해 공유 라이브러리를 만드는 많은 포트를 변환할 필요가 있습니다. 이 작업을 복잡하게 하는 것은 3.0 시스템이 ELF와 a.out을 실행할 수 있다는 것과 2.2 가지에서 릴리즈가 하나 더 있을 것(2.2.8)이라는 사실입니다. 아래는 a.out과 ELF 컴파일을 모두 지원하기 위해 a.out만으로 작성된 포트를 어떻게 변환하는지에 대한 가이드라인입니다.
이 목록의 일부는 변환 중에만 적용 가능하지만, 여러분이 업그레이드를 원하는 어떤 오래된 포트를 만날 경우에 대비하여 참조 할 수 있도록 잠시 남아 있을 것입니다.
a.out 라이브러리는 /usr/local/lib 밖으로
옮겨서 `aout' 부디렉토리에 넣어야 합니다. (이들을 밖으로 옮기지
않으면 ELF 포트는 행복하게 a.out 라이브러리를 겹쳐 쓸 것입니다.)
-current src/Makefile에 있는 `move-aout-libs'
타겟은(`aout-to-elf'에서 부르는) 이 일을 해 줄 것입니다. 이는
a.out 라이브러리만 옮겨줄 것이므로 표준 디렉토리에 ELF와 a.out
라이브러리가 시스템에서 안전하게 공존할 수 있도록 합니다.
포트 트리는 PC에서 사용하는 포맷으로 패키지를
만듭니다. 이는 2.2에서는 a.out이고 3.0에서는 `objformat`이
돌려주는 값에 따라 a.out이나 ELF라는 것을 의미합니다. 또한 일단
사용자가 a.out 라이브러리를 부디렉토리로 옮기면, a.out 라이브러리를
만드는 것은 지원하지 않습니다. (여러분이 어떻게 하는지 안다면 할 수
있지만, 그건 알아서 하세요)
포트가 a.out에서만 된다면, BROKEN_ELF 를 이유를
지정하는 문자열로 지정하세요. 그런 포트는 ELF시스템에서 만들 때
건너뛰게 됩니다.
bsd.port.mk 는 PORTOBJFORMAT를
`aout'이나 `elf'로 지정하고
CONFIGURE_ENV, SCRIPTS_ENV,
MAKE_ENV 환경변수에 지정해 줍니다. (2.2-stable에서는
항상 `aout'입니다) 또한 PLIST_SUB 에는
`PORTOBJFORMAT=${PORTOBJFORMAT}'로 넘겨줍니다. (아래의
ldconfig 줄에 대한 주석을 보세요.)
이 변수는 bsd.port.mk 에서 다음 행을 사용하여 지정합니다:
PORTOBJFORMAT!= test -x /usr/bin/objformat && /usr/bin/objformat || echo aout
포트의 make 과정은 이 변수를 사용하여 어떻게 해야 할지
결정해야 합니다. 그러나 포트의 configure 스크립트가 이미 ELF
시스템을 자동적으로 탐지하면, PORTOBJFORMAT을 참조할 필요는
없습니다
다음은 a.out과 ELF를 위한 공유 라이브러리를 다루는 데 있어서의 차이점입니다
ELF 공유 라이브러리는 "libfoo.so.M"이라고 부르며,
M은 하나의 버전 번호이고, a.out 라이브러리는
"libfoo.so.M.N"이라고 부르며 M은 주 버전이고 N 은 부
버전 번호입니다. 이 둘을 혼동하지 마세요; ELF 공유 라이브러리를
"libfoo.so.N.M" 이라고 설치해서는 결코 안되며 a.out 공유
라이브러리(또는 심볼릭 링크)를 "libfoo.so.N"로 설치해서는
안됩니다.
`cc -shared가 `ld'보다 직접적으로
사용되며, 차이점은 ELF에서는 명령행에
`-Wl,-soname,libfoo.so.M'를 추가할 필요가 있다는 것입니다.
ELF 링커를 행복하게 해 주기 위해서는 libfoo.so ->
libfoo.so.N 로 가는 심볼릭 링크를 설치해 주어야
합니다. 이는 PLIST 에도 있어야 하며, a.out 의 경우에도 문제가
없고(어떤 포트는 동적 로딩을 위해 링크를 필요로 하기까지 합니다),
PORTOBJFORMAT의 지정에 관계없이 이 링크를 만들어야 합니다.
LIB_DEPENDS모든 포트 Makefile들은 LIB_DEPENDS에서 부 번호를
없애고 정규식 지원을 하지 않도록 편집해야 합니다. (예:
`foo\\.1\\.\\(33|40\\)' -> `foo.2'.)
이는 `grep -wF'을 사용하여 검사합니다.
PLISTPLIST 는 반드시 a.out 부 번호가 0이면 짧은(ELF)
공유 라이브러리 이름을 포함해야 하며, 그 이외의 경우에는ㅁ
긴(a.out)이름이어야 합니다. bsd.port.mk는
PORTOBJFORMAT 가 aout 과 같으면 자동적으로 짧은 공유
라이브러리의 이름 끝에 `.0'을 추가하고, PORTOBJFORMAT가
elf와 같으면 긴 공유 라이브러리 이름에서 부 번호를 뺍니다
ELF시스템에서 두 버전의 공유 라이브러리를 설치할 필요가
있는 경우나 a.out 시스템에서 한 버전을 설치해야 하는 경우에는(예를
들면, 다른 운영체제를 위한 호환 라이브러리를 설치하는 포트의 경우)
NO_FILTER_SHLIBS 환경변수를 정의하세요. 이것은 이전 문단에서
이야기하였던 PLIST의 편집을 하지 않도록 합니다
ldconfig Makefile의 ldconfig 가 있는 행은 다음과 같아야 합니다:
${SETENV} OBJFORMAT=${PORTOBJFORMAT} ${LDCONFIG} -m ....
그리고 PLIST에서는 다음과 같습니다:
@exec /usr/bin/env OBJFORMAT=%%PORTOBJFORMAT%% /sbin/ldconfig -m ...
@unexec /usr/bin/env OBJFORMAT=%%PORTOBJFORMAT%% /sbin/ldconfig -R
이것은 시스템의 기본 포맷이 아니라 패키지의 포맷에
따라 ldconfig가 올바르게 불러지도록 해 줍니다.
사용자가 변수를 지정하여 여러가지 다른 버전의 패키지를 만들
수 있도록 하려면, LOOP_VAR와 LOOP_OPTIONS를
사용하세요. 전자는 변수의 이름이며 후자는 얻고자 하는
값의 목록입니다. 또한
${LOOP_VAR}를
PKGNAME의 일부에 넣어서
패키지가 실제로 다른 이름을 가지도록 합니다.
또한 사용자가 변수의 값을 지정하지 않았으면 기본값을 지정하고 사용할 수 있는 선택에 대해 메시지를 표시하는 것을 권장합니다. 다음 예를 보세요:
:
PKGNAME= ja-xdvi${RESOLUTION}-17
:
LOOP_VAR= RESOLUTION
LOOP_OPTIONS= 118 240 300 400
:
.if !defined(RESOLUTION)
RESOLUTION= 300
RESOLUTION_UNSPECIFIED= yes
.else
.if ${RESOLUTION} != 118 && ${RESOLUTION} != 240 && \
${RESOLUTION} != 300 && ${RESOLUTION} != 400
RESOLUTION_INVALID= yes
.endif
.endif
pre-fetch:
.if defined(RESOLUTION_UNSPECIFIED)
@echo "Building xdvi with ${RESOLUTION}dpi fonts."
@echo "Set the environment variable RESOLUTION if you want"
@echo "it to use other resolutions."
@echo "Possible values are: 118, 240, 300 (default) and 400."
.elif defined(RESOLUTION_INVALID)
@echo "Error: invalid value for RESOLUTION: \"${RESOLUTION}\""
@echo "Possible values are: 118, 240, 300 (default) and 400."
@/usr/bin/false
.endif
bsd.port.mk는 RESOLUTION의 값을 118, 240, 300, 400으로
지정하여 4개의 패키지를 만들기 위해
"make clean package" 루프를 4번 부르게 하는
특별 타겟 package-loop을 정의할 것입니다.
I
또한, describe 타겟이 ${RESOLUTION}의
각 값에 대해 4줄을 표시하도록 합니다. 이런 방법으로 모든
패키지 이름이 INDEX 파일에 들어가서 설치 메뉴에서
볼 수 있도록 합니다.
먼저, 일반적인 공유 라이브러리 버전에 대해 이해하기 위해
우리의
공유 라이브러리 버전 붙이는 법에 대한 정책
을 읽어보세요.
소프트웨어 저자들이 자신이 잘 하고 있다고 무조건 가정하지
마세요. 많은 사람들이 그렇지 않습니다. 이런 자세한 부분까지
주의깊게 고려하는 것이 아주 중요한데, 우리는 잠재적으로
서로 호환되지 않는 수많은 소프트웨어들이 공존하도록 해야
하는 아주 독특한 상황에 처해 있기 때문입니다.
주의깊지 못한 포트 작성은 이전의 공유 라이브러리에 대한
큰 문제를 일으킬 수 있습니다(왜
jpeg-6b 포트가 `9.0'이란 공유 라이브러리 번호를
갖는지 생각해 본 적은 있습니까?).
의심스럽다면, FreeBSD 포트 메일링 리스트
<freebsd-ports@FreeBSD.ORG> 로 편지를 보내세요. 대부분의 경우
여러분이 해야 할 일은 올바른 공유 라이브러리 버전을 결정하고
이를 구현하기 위해 적절한 패치를 만드는 일입니다.
그러나, 트리에 같은 소프트웨어의 서로 다른 버전이 있다면,
상황은 더 복잡해집니다. 간단히 말해서, FreeBSD의 구현 방식은
사용자가 링커에게 링크할 공유 라이브러리의 버전을 지정할 수
없도록 합니다(링커는 항상 가장 높은 번호의 버전을 찾습니다).
따라서 libfoo.so.3.2와 libfoo.so.4.0이 한 시스템
안에 있다면, 특정 어플리케이션에게 링커가 libfoo.so.3.2
를 링크하라고 알려줄 방법이 없습니다. 이는 컴파일시 링크라는
말을 완전히 무색하게 합니다. 이 경우에는 유일한 해결책은
공유 라이브러리의 `기반' 부분의 이름을 바꾸는 것입니다.
예를 들면, libfoo.so.4.0을 libfoo4.so.1.0으로 바꾸어서
버전 3.2와 4.0을 서로 다른 포트에서 링크하게 할 수 있습니다.
MAN[1-9LN]변수는 자동적으로
어떤 매뉴얼 페이지도 pkg/PLIST에 추가되도록
합니다(이는 여러분이 PLIST에 매뉴얼 페이지를 나열하면
안된다는 것을 의미합니다 --
PLIST 만들기를 읽어보세요).
이는 설치 단계에서 /etc/make.conf의
NOMANCOMPRESS의 설정에 따라 자동적으로 매뉴얼 페이지를
압축하거나 압축하지 않을 것입니다.
매뉴얼 페이지가 경우에 따라 압축되지의 여부를 지정하기 위해서는
MANCOMPRESSED 변수를 사용하세요. 이 변수는 세가지 값을
가질 수 있는데, `yes', `no', `maybe'입니다.
`yes'는 매뉴얼 페이지가 이미 설치되었다는 것을 의미하고,
`no'는 그렇지 않음을, `maybe'는 소프트웨어가 이미
NOMANCOMPRESS의 값에 따라 처리했다는 것을 의미하므로
bsd.port.mk는 별도로 특별한 일을 하지 않습니다.
USE_IMAKE가 지정되었고 NO_INSTALL_MANPAGES가
지정되지 않았다면 MANCOMPRESSED는 자동적으로 `yes'가
되며, 그렇지 않은 경우 `no'가 됩니다. 기본값이 포트에 알맞지
않은 한, 일부러 정의할 필요는 없습니다.
PREFIX 이외의 다른 곳에 매뉴얼 트리를 설치한다면,
MANPREFIX를 사용하여 지정할 수 있습니다.
또한 Perl 모듈 포트처럼 어떤 섹션의 매뉴얼 페이지만
비표준 위치에 설치해야 한다면, 각각의 매뉴얼 경로를
MANsectPREFIX(sect은 1-9, L 또는 N
중의 하나)로 지정할 수 있습니다.
매뉴얼 페이지가 특정 언어의 부디렉토리로 간다면,
언어의 이름을 MANLANG로 지정하세요. 이 변수의 기본값은
""(예: 영어만)입니다.
앞에서 설명한 내용으로 모두 포함하는 예제입니다.
MAN1= foo.1
MAN3= bar.3
MAN4= baz.4
MANLANG= "" ja
MAN3PREFIX= ${PREFIX}/share/foobar
MANCOMPRESSED= yes
위 내용은 포트가 다음의 여섯개의 파일을 설치하도록 합니다.
${PREFIX}/man/man1/foo.1.gz
${PREFIX}/man/ja/man1/foo.1.gz
${PREFIX}/share/foobar/man/man3/bar.3.gz
${PREFIX}/share/foobar/man/ja/man3/bar.3.gz
${PREFIX}/man/man4/baz.4.gz
${PREFIX}/man/ja/man4/baz.4.gz
컴파일하기 위해 Motif 라이브러리를 필요로 하는 많은
프로그램이 있습니다(여러 회사에서 상용으로 판매하고 있으며,
x11-toolkits/lesstif에 많은 어플리케이션을 실행할 수
있다고 알려진 공개 복제품이 있습니다).
이것은 인기있는
툴킷이며 그 라이센스가 보통 정적으로 링크된 바이너리의 재배포를
허용하므로, 동적으로나(포트에서 컴파일하는 사람들을 위해)
정적으로(패키지를 배포하는 사람들을 위해) 링크된 바이너리를
쉽게 컴파일할 수
있도록 Motif를 필요로 하는 포트를 다루는 특별한 준비를 하였습니다.
포트가 Motif를 필요로 하면, 이 변수를 Makefile에 지정하세요. 이는 Motif를 갖고 있지 않은 사람들이 포트를 컴파일하지도 못하게 합니다.
이 변수는 bsd.port.mk에서 지정되며 Motif
라이브러리의 적당한 위치를 가리킵니다. Motif 라이브러리가 Makefile이나
Imakefile에서 참조되는 경우에는 언제나 이것을 사용하도록 소스를
패치하세요.
두가지 공통적인 경우가 있습니다:
-lXm'로 참조한다면, 단순히 그것을
`${MOTIFLIB}'로 바꾸세요.
XmClientLibs'을
사용한다면, `${MOTIFLIB} ${XTOOLLIB}
${XLIB}'로 바꾸세요. ${MOTIFLIB}는 (보통)
`-L/usr/X11R6/lib -lXm'이나
`/usr/X11R6/lib/libXm.a'로 확장된다는 것에
주의하세요, 따라서 앞에 `-L' 이나 `-l'을 붙일 필요는
없습니다.
texinfo의 새 버전(2.2.2-RELEASE와 그 다음 릴리즈에 포함된)은
`dir' 파일에 목록을 추가하고 삭제할 수 있는
`install-info'라는 유틸리티를 포함합니다. 포트가 info 문서를
설치한다면, 다음 순서에 따라 포트/패키지가 사용자의
${PREFIX}/info/dir 파일을 올바르게 갱신할 수 있도록
하세요. (이 섹션이 길어서 죄송합니다만, 모든 info 파일을 같이 맞추기
위해서는 필수적입니다. 올바르게 된다면, 아름다운 목록을
생성할 수 있으므로, 참아 주세요! :)
먼저, 이것은 여러분이(포터로서) 알아야 할 것입니다:
% install-info --help
install-info [OPTION]... [INFO-FILE [DIR-FILE]]
Install INFO-FILE in the Info directory file DIR-FILE.
INFO-FILE을 Info 디렉토리 파일 DIR-FILE에 설치한다.
Options:
--delete Delete existing entries in INFO-FILE;
INFO-FILE의 기존의 엔트리를 삭제한다;
don't insert any new entries.
새 엔트리를 추가하지 않는다.
:
--entry=TEXT Insert TEXT as an Info directory entry.
TEXT를 Info 디렉토리 엔트리에 추가한다.
:
--section=SEC Put this file's entries in section SEC of the directory.
이 파일의 엔트리를 디렉토리의 섹션 SEC에 넣는다.
:
이 프로그램은 실제로 info 파일을 설치 하지 않을
것입니다; 단지 dir 파일의 목록을 추가하거나 삭제합니다.
다음은 포트가 install-info를 사용하도록 변환하는 일곱단계의
과정입니다. 저는 예로 editors/emacs를 사용하겠습니다.
@dircategory 와 @direntry가 없는
파일에 그 문장을 삽입하는 패치를 만듭니다. 다음은 제 패치의 일부입니다:
--- ./man/vip.texi.org Fri Jun 16 15:31:11 1995
+++ ./man/vip.texi Tue May 20 01:28:33 1997
@@ -2,6 +2,10 @@
@setfilename ../info/vip
@settitle VIP
+@dircategory The Emacs editor and associated tools
+@direntry
+* VIP: (vip). A VI-emulation for Emacs.
+@end direntry
@iftex
@finalout
:
형식은 그 자체로 알아보기 쉬워야 합니다. 많은 저자들은 소스
트리에 필요한 모든 엔트리를 포함하는 dir 파일을 소스 트리에
남겨두므로, 새로 쓰기 전에 한번 살펴보세요. 또한 관련된 포트를
살펴보아 섹션 이름과 엔트리 들여쓰기가 일관성 있는지 확인하세요(우리는
모든 엔트리 텍스트가 4번째 탭 지점에서 시작하는 것을 권장합니다).
@direntry 섹션에 여러개의 엔트리를 지정하면 첫번째 엔트리만
지우는 `install-info --delete'의 버그 때문에 파일당 하나의
info 엔트리를 넣을 수 있다는 사실에 주의하세요.
texinfo 소스를 패치하는 대신 dir 엔트리를
install-info의 인수로 (--section 와 --entry)
줄 수 있습니다. 이것은 포트에서는 좋은 생각이 아니라고 보는데,
같은 정보를 세 군데에서 중복하여야 할 필요가 있기 때문입니다
(Makefile 와 PLIST의 @exec/@unexec;
아래를 보세요). 그러나, 여러분이 일본어(또는 다른 멀티바이트
인코딩) info 파일을 갖고 있다면 makeinfo 가 이런 texinfo
소스를 다룰 수 없기 때문에 install-info에 별도의 인수를
주어야 할 것입니다. (japanese/skk의 Makefile 과
PLIST는 이를 어떻게 해야 하는지에 대한 예입니다).
make clean; make'를 실행하여
info 파일이 texinfo 소스에서 다시 만들어지는지 검사하세요.
texinfo 소스는 info 파일보다 새로운 것이므로, make를
입력하면 다시 만들어져야 합니다. 그러나 많은 Makefile은
info 파일의 올바른 의존성을 포함하지 않습니다. emacs의 경우에는
주 Makefile.in을 패치해서 info 페이지를 다시 만들기 위해
man 부디렉토리로 내려가도록 해야 했습니다.
--- ./Makefile.in.org Mon Aug 19 21:12:19 1996
+++ ./Makefile.in Tue Apr 15 00:15:28 1997
@@ -184,7 +184,7 @@
# Subdirectories to make recursively. `lisp' is not included
# because the compiled lisp files are part of the distribution
# and you cannot remake them without installing Emacs first.
-SUBDIR = lib-src src
+SUBDIR = lib-src src man
# The makefiles of the directories in $SUBDIR.
SUBDIR_MAKEFILES = lib-src/Makefile man/Makefile src/Makefile oldXMenu/Makefile lwlib/Makefile
--- ./man/Makefile.in.org Thu Jun 27 15:27:19 1996
+++ ./man/Makefile.in Tue Apr 15 00:29:52 1997
@@ -66,6 +66,7 @@
${srcdir}/gnu1.texi \
${srcdir}/glossary.texi
+all: info
info: $(INFO_TARGETS)
dvi: $(DVI_TARGETS)
패치의 두번째 부분은 man 부디렉토리의 기본 타겟이 info
를 부르게 해야 하지만 주 Makefile은 all을 부르기 때문에
필요합니다. 또한 info info 파일의 설치를 삭제하였는데,
/usr/share/info에 같은 이름의 파일을 이미 갖고 있기
때문입니다(그에 대한 패치는 여기 나타내지 않았습니다).
Makefile 이 dir 파일을 설치하는 곳이 있다면, 삭제하세요.
포트는 그렇게 하지 말아야 합니다. 또한 dir 파일을 망치게 하는
모든 명령을 지우세요.
--- ./Makefile.in.org Mon Aug 19 21:12:19 1996
+++ ./Makefile.in Mon Apr 14 23:38:07 1997
@@ -368,14 +368,8 @@
if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd ${infodir} && /bin/pwd)` ]; \
then \
(cd ${infodir}; \
- if [ -f dir ]; then \
- if [ ! -f dir.old ]; then mv -f dir dir.old; \
- else mv -f dir dir.bak; fi; \
- fi; \
cd ${srcdir}/info ; \
- (cd $${thisdir}; ${INSTALL_DATA} ${srcdir}/info/dir ${infodir}/dir); \
- (cd $${thisdir}; chmod a+r ${infodir}/dir); \
for f in ccmode* cl* dired-x* ediff* emacs* forms* gnus* info* message* mh-e* sc* vip*; do \
(cd $${thisdir}; \
${INSTALL_DATA} ${srcdir}/info/$$f ${infodir}/$$f; \
chmod a+r ${infodir}/$$f); \
pkg/PLIST를 살펴보고 info/dir를 패치하려 하는
모든 것을 지우세요. 이런 동작은 pkg/INSTALL나
다른 파일에 있을 수 있으므로, 잘 찾아보아야 합니다.
Index: pkg/PLIST
===================================================================
RCS file: /usr/cvs/ports/editors/emacs/pkg/PLIST,v
retrieving revision 1.15
diff -u -r1.15 PLIST
--- PLIST 1997/03/04 08:04:00 1.15
+++ PLIST 1997/04/15 06:32:12
@@ -15,9 +15,6 @@
man/man1/emacs.1.gz
man/man1/etags.1.gz
man/man1/ctags.1.gz
-@unexec cp %D/info/dir %D/info/dir.bak
-info/dir
-@unexec cp %D/info/dir.bak %D/info/dir
info/cl
info/cl-1
info/cl-2
post-install 타겟을 Makefile에 추가하여 dir 파일이
없는 경우 만들도록 합시다. 또한 설치된 info 파일에 대해
install-info를 부릅니다.
Index: Makefile
===================================================================
RCS file: /usr/cvs/ports/editors/emacs/Makefile,v
retrieving revision 1.26
diff -u -r1.26 Makefile
--- Makefile 1996/11/19 13:14:40 1.26
+++ Makefile 1997/05/20 10:25:09 1.28
@@ -20,5 +20,11 @@
post-install:
.for file in emacs-19.34 emacsclient etags ctags b2m
strip ${PREFIX}/bin/${file}
.endfor
+ if [ ! -f ${PREFIX}/info/dir ]; then \
+ ${SED} -ne '1,/Menu:/p' /usr/share/info/dir > ${PREFIX}/info/dir; \
+ fi
+.for info in emacs vip viper forms gnus mh-e cl sc dired-x ediff ccmode
+ install-info ${PREFIX}/info/${info} ${PREFIX}/info/dir
+.endfor
.include <bsd.port.mk>
새 info 파일을 만들기 위해
/usr/share/info/dir과 위 명령 이외에 다른 것은
절대 사용하지 마세요.
사실, 여러분(포터)가 PLIST에서 스스로 해야 하지 않을
것이라면 제가 bsd.port.mk에 추가했을 것입니다.
PLIST 를 편집하여 동일한 @exec 문과
pkg_delete를 위해 @unexec 문을 추가하세요.
info/dir를 @unexec로 지울 필요는 없습니다.
Index: pkg/PLIST
===================================================================
RCS file: /usr/cvs/ports/editors/emacs/pkg/PLIST,v
retrieving revision 1.15
diff -u -r1.15 PLIST
--- PLIST 1997/03/04 08:04:00 1.15
+++ PLIST 1997/05/20 10:25:12 1.17
@@ -16,7 +14,15 @@
man/man1/etags.1.gz
man/man1/ctags.1.gz
+@unexec install-info --delete %D/info/emacs %D/info/dir
:
+@unexec install-info --delete %D/info/ccmode %D/info/dir
info/cl
info/cl-1
@@ -87,6 +94,18 @@
info/viper-3
info/viper-4
+@exec [ -f %D/info/dir ] || sed -ne '1,/Menu:/p' /usr/share/info/dir > %D/info/dir
+@exec install-info %D/info/emacs %D/info/dir
:
+@exec install-info %D/info/ccmode %D/info/dir
libexec/emacs/19.34/i386--freebsd/cvtmail
libexec/emacs/19.34/i386--freebsd/digest-doc
`@unexec install-info --delete' 명령은
info 파일 자체보다 먼저 나열되어서 이 명령이 파일을 읽을 수
있도록 해야 합니다. 또한
`@exec install-info' 명령은 info 파일과
dir 파일을 만드는 @exec 명령 뒤에 있어야 합니다.
:)
각 단계의 앞뒤에서 dir 파일을 검사하세요.
pkg 부디렉토리