Open Dylan Debian 빌드 디버깅

Open Dylan Debian 빌드 디버깅

디버깅 좀 하려고 하는데매우기본적이고 미완성데비안 패키징~을 위한오픈 딜런.

오류가 발생합니다.데비안 빌드 로그(요지).

관련 비트는 끝에 있습니다. 즉:

Preparing to install Open Dylan...
Copying sources...
cp: cannot create directory ‘/usr/local/sources’: Permission denied
Makefile:328: recipe for target 'install-stage' failed

이는 분명히 342에서 시작하는 줄과 일치합니다. Makefile.in, 즉:

# Install stage installs stage 3 into prefix
install-stage:
    @echo Preparing to install Open Dylan in $(prefix)...
    @install -d $(prefix)
    @echo Copying sources to $(prefix)/sources...
    @rm -rf $(prefix)/sources
    @cp -R $(abs_srcdir)/sources $(prefix)

아마도 마지막 줄이 범인일 것 같은데, 무엇이 잘못되었는지 파악하기가 어렵습니다.

빌드를 실행하기 전에 모든 라인을 일관되게 에코하도록 빌드를 얻을 수 있다면 큰 도움이 될 것입니다. 그러나 위에 인용된 추출에서 볼 수 있듯이 필요할 때 그런 일이 발생하지 않았습니다. 즉, 그 cp라인에 있습니다.

참고: Open Dylan은 Autoconf를 사용하지만 Automake를 사용하지 않습니다. 그래서 그들은 손으로 쓴 Makefile.in.

업데이트: 및 재정의 make -n에 추가하면 작동합니다. 따라서:dh_auto_builddh_auto_install

override_dh_auto_build:
        PATH=$(binpath):$$PATH make -n

override_dh_auto_install:
        PATH=$(binpath):$$PATH make -n install

그만큼새 빌드 로그(요지) 이제 업스트림 Open Dylan Makefile 설치 대상에 대해 다음이 있습니다.

echo Preparing to install Open Dylan...
install -d /usr/local
echo Copying sources...
rm -rf /usr/local/sources
cp -R /usr/local/src/opendylan/opendylan-2014.1/sources /usr/local
find /usr/local/sources -depth -name '.*' -exec rm -rf {} \;
rm -rf /usr/local/sources/bootstrap1-registry
echo Installing Open Dylan in /usr/local
install -d /usr/local/bin /usr/local/databases /usr/local/lib /usr/local/lib/runtime
install -d /usr/local/share/opendylan /usr/local/include/opendylan
cp -R /usr/local/src/opendylan/opendylan-2014.1/Bootstrap.3/bin /usr/local
cp -R /usr/local/src/opendylan/opendylan-2014.1/Bootstrap.3/databases /usr/local
cp -R /usr/local/src/opendylan/opendylan-2014.1/Bootstrap.3/include/opendylan /usr/local/include
# We use force here because on Mac OS X, the lib directory likely contains read-only
# static libraries for the Boehm GC.
cp -Rf /usr/local/src/opendylan/opendylan-2014.1/Bootstrap.3/lib /usr/local
cp -Rf /usr/local/src/opendylan/opendylan-2014.1/Bootstrap.3/share/opendylan /usr/local/share
cp -R /usr/local/src/opendylan/opendylan-2014.1/tools/lldb /usr/local/share/opendylan
cp -R /usr/local/src/opendylan/opendylan-2014.1/tools/bash_completion /usr/local/share/opendylan
cp /usr/local/src/opendylan/opendylan-2014.1/License.txt /usr/local
cp /usr/local/src/opendylan/opendylan-2014.1/packages/unix/README /usr/local
echo Done!

이것은 분명히 처음부터 모두 잘못된 것입니다. 어떤 이유에서 prefix인지 여기에 있지만 /usr/local그래야 합니다 /debian/tmp/usr(제 생각에는).

첫 번째 줄은Dylan Makefile.in 열기가지다:

prefix          = $(DESTDIR)@prefix@

비표준처럼 보입니다. 생성된 Makefile에서는 다음과 같습니다.

prefix          = $(DESTDIR)/usr/local

일반적으로 데비안은 기본적으로 /usr에 전달되므로 여기서 무슨 일이 일어났는지, 또는 왜 (분명히) 비어 있는지 ./configure잘 모르겠습니다 .DESTDIR

답변1

@일부 행 앞에는 "이 행을 에코하지 마십시오"라고 알려줍니다 .

다음을 사용 하여 일부를 편집 및 제거하거나 @Makefile에서 모두 제거할 수 있습니다.

sed -i -e 's/^\(\t\+)@/\1/ ; s/\(^\t\+\)echo/\1@echo/' Makefile

@Ortomala Lokni의 make doc 추출이 에 대해 좋은 지적을 했기 echo때문에 sed 스크립트를 수정하여 명령 @앞에 back을 추가했습니다 echo.

Automake를 처리하려면 문자 제거에 좀 더 주의를 기울이고 싶을 것입니다. @Automake는 @NAME@출력 Makefile에 변수를 대체하는 데 사용합니다.

어쩌면 다음과 같이 시작하는 줄이 변경되지 않도록 할 수도 있습니다 \t+@NAME@.

sed -ire 's/^(\t+)@([^ @]+ )/(\t)\1/ ; s/(^\t+)echo/\1@echo/' Makefile.in

답변2

CAS 답변을 완료하려면 다음을 읽어보세요.GNU 매뉴얼 만들기이는 다음과 같이 말합니다.

일반적으로 make는 레시피가 실행되기 전에 레시피의 각 라인을 인쇄합니다. 이를 에코라고 부르는 이유는 사용자가 직접 줄을 입력하는 것처럼 보이기 때문입니다.

줄이 '@'으로 시작하면 해당 줄의 에코가 억제됩니다. 해당 줄이 쉘에 전달되기 전에 '@'는 삭제됩니다. 일반적으로 makefile의 진행 상황을 나타내는 echo 명령과 같이 무언가를 인쇄하는 것만 효과가 있는 명령에 대해 이것을 사용합니다.

@echo About to make distribution files

make에 '-n' 또는 '--just-print' 플래그가 지정되면 실행하지 않고 대부분의 레시피만 에코합니다. 옵션 요약을 참조하세요. 이 경우 '@'으로 시작하는 레시피 라인도 인쇄됩니다. 이 플래그는 실제로 실행하지 않고도 어떤 레시피가 필요하다고 생각하는지 알아내는 데 유용합니다.

make의 '-s' 또는 '--silent' 플래그는 마치 모든 레시피가 '@'으로 시작하는 것처럼 모든 에코를 방지합니다. 전제 조건이 없는 특수 대상 .SILENT에 대한 makefile의 규칙은 동일한 효과를 갖습니다(특별 내장 대상 이름 참조). .SILENT는 '@'이 더 유연하기 때문에 본질적으로 더 이상 사용되지 않습니다.

관련 정보