저는 개발자들이 Membase를 더 쉽게 컴파일하고 설치할 수 있도록 노력해왔는데, 오늘 오토메이크의 마법을 좀 더 배웠습니다. 저는 빌드 시스템 작업에 많은 시간을 소비하고 싶지 않고 코드 작업에 시간을 보내고 싶은 개발자 중 한 명입니다. 동시에 빌드 시스템이 대신 해줄 불필요한 지루한 수작업을 하고 싶지 않습니다.
Membase의 일부는 Python으로 구현되어 있는데, 그 부분을 설치하는 방법을 알아내려고 노력해 왔습니다. "라이브러리" 파일로 /bin 디렉터리를 엉망으로 만들고 싶지 않았기 때문에 Python 비트를 더 잘 패키징할 방법이 필요했습니다. 이전에도 파이썬 경로 변수를 설정하는 래퍼 스크립트를 사용해 본 적은 있지만, 이를 자동 생성 메이크파일에 통합해 본 적은 없었습니다.
항상 그렇듯이 처음에는 구글에 도움을 요청했지만 좋은 예제를 찾지 못해서 결국 오토메이크 매뉴얼을 읽게 되었습니다. 제가 원하는 것을 정확히 수행하는 것이 상당히 쉽다는 것이 밝혀져서 블로그 게시물로 지식을 공유하기로 결정했습니다 :-)
바이너리 경로를 어디에도 하드코딩하고 싶지 않으므로 가장 먼저 해야 할 일은 configure.ac를 업데이트하여 래퍼 스크립트도 생성하는 것입니다:
AC_CONFIG_FILES(메이크파일 파이썬_랩퍼)
파이썬으로 구현한 프로그램이 여러 개 있는데, 많은 래퍼를 만들고 싶지 않아서 제 python_wrapper.in은 다음과 같습니다:
#! /bin/sh
if test -z "${PYTHONPATH}"; then
PYTHONPATH=@libdir@/python
else
파이썬 경로=@libdir@/python:${PYTHONPATH}
fi
파이썬 경로 내보내기
실행 @libdir@/python/베이스네임 $0
.py "$@"
즉, 이 스크립트를 /opt/membase/bin/stats로 설치하면 동일한 인수를 사용하여 /opt/membase/lib/python/stats.py를 실행하려고 시도합니다. 이제 Makefile.am에 올바른 이름의 스크립트를 생성하는 규칙을 추가해 보겠습니다:
PYTHON_TOOLS=통계
${PYTHON_TOOLS}: python_wrapper
cp $< $@
built_sources += ${python_tools}
cleanfiles+= ${python_tools}
bin_SCRIPTS+= ${PYTHON_TOOLS}
이제 래퍼 스크립트가 준비되었고 프로그램을 시작하기 위한 모든 스크립트를 생성했습니다. 다음으로 할 일은 파이썬 비트의 대상 디렉터리를 만들고 거기에 모든 비트를 설치하는 것입니다. 그러기 위해서는 디렉터리 이름을 포함하도록 "dir"로 끝나는 변수를 만들어야 합니다. 이름을 "pythonlibdir"로 지정하고 지정된 libdir의 python이라는 하위 디렉터리에 넣겠습니다:
pythonlibdir=$(libdir)/python
마지막으로 이동하려는 모든 파일을 나열해야 합니다:
pythonlib_DATA=
mc_bin_client.py
mc_bin_server.py
memcacheConstants.py
pythonlib_SCRIPTS=
stats.py
마지막에 pythonlib_SCRIPTS를 사용하는 이유는 파일에 실행 비트가 설정되기를 원하기 때문입니다.