패키지 만들기

패키지 만들기 (Creating Packages)

Octave 패키지는 내부적으로 gzipped tar 파일이에요. 그 안에는 최상위 디렉토리가 있고, 필요한 파일들과 선택적인 파일들이 함께 들어가죠. 패키지가 어떤 구조를 갖는지 Octave 매뉴얼 37.5절을 정리해 볼게요.

출처: Creating Packages

본문

내부적으로 패키지는 단순히 임의의 이름을 가진 최상위 디렉토리를 포함하는 gzipped tar 파일이에요. 이 디렉토리를 이하에서는 package라고 부르겠고, 다음 파일들을 포함할 수 있어요.

  • package/CITATION — 출판 시 패키지를 어떻게 인용해야 하는지 설명하는 선택 파일. citation 함수가 이를 그대로 표시해요.
  • package/COPYING — 패키지의 라이선스를 담은 필수 파일. 일반적으로 라이선스에는 제한이 없지만, 패키지에 동적 연결 함수가 포함되어 있으면 라이선스가 GNU General Public License와 호환되어야 해요.
  • package/DESCRIPTION — 패키지에 대한 정보를 담은 필수 파일. 자세한 내용은 The DESCRIPTION File 참고.
  • package/ChangeLog — 패키지 소스 파일에 가해진 모든 변경을 설명하는 선택 파일.
  • package/INDEX — 패키지가 제공하는 함수를 설명하는 선택 파일. 이 파일이 주어지지 않으면 패키지의 함수와 DESCRIPTION 파일의 Categories 키워드로부터 자동으로 만들어져요. 자세한 내용은 The INDEX File 참고.
  • package/NEWS — 언급할 만한 사용자에게 보이는 변경을 모두 설명하는 선택 파일. 이 파일의 크기가 커지면 이전 항목들을 package/ONEWS로 옮길 수 있어요.
  • package/ONEWS — NEWS 파일의 이전 항목들을 설명하는 선택 파일.
  • package/PKG_ADD — 패키지가 사용자 경로에 추가될 때 실행되는 명령을 담은 선택 파일. 패키지 소스 코드의 PKG_ADD 지시문도 Octave 패키지 관리자가 이 파일에 추가한다는 점을 유의하세요. 또 패키지에서는 심볼릭 링크를 피해야 하는데, 심볼릭 링크는 일부 파일 시스템에 존재하지 않기 때문이에요. 그래서 이 파일의 전형적인 용도는 심볼릭 링크
ln -s foo.oct bar.oct

를 다음과 같은 autoload 지시문으로 대체하는 것이에요.

autoload ('bar', which ('foo'));

자세한 내용은 PKG_ADD and PKG_DEL Directives 참고.

  • package/PKG_DEL — 패키지가 사용자 경로에서 제거될 때 실행되는 명령을 담은 선택 파일. 패키지 소스 코드의 PKG_DEL 지시문도 Octave 패키지 관리자가 이 파일에 추가한다는 점을 유의하세요. 자세한 내용은 PKG_ADD and PKG_DEL Directives 참고.
  • package/pre_install.m — 패키지 설치 전에 실행되는 선택 함수. 이 함수는 DESCRIPTION의 데이터 이름을 딴 필드를 가진 구조체 하나와 패키지 함수가 설치될 경로들을 인자로 호출됩니다.
  • package/post_install.m — 패키지 설치 후에 실행되는 선택 함수. 이 함수는 DESCRIPTION의 데이터 이름을 딴 필드를 가진 구조체 하나와 패키지 함수가 설치된 경로들을 인자로 호출됩니다.
  • package/on_uninstall.m — 패키지 제거 전에 실행되는 선택 함수. 이 함수는 DESCRIPTION의 데이터 이름을 딴 필드를 가진 구조체, 패키지 함수가 설치된 경로들, 그리고 패키지가 현재 로드되어 있는지 여부를 인자로 호출됩니다.

위에 언급한 파일들 외에도 패키지는 다음 디렉토리 중 하나 이상을 포함할 수 있어요.

  • package/inst — 패키지가 직접 설치하는 파일이 들어 있는 선택 디렉토리. 보통 모든 m-파일이 여기 포함됩니다.
  • package/src — 패키지 설치 전에 빌드해야 하는 코드가 들어 있는 선택 디렉토리. ./configure 스크립트가 이 디렉토리에 있으면 Octave 패키지 관리자가 그것을 실행하고, 이 디렉토리에 Makefile이 있으면 make를 호출해요. 다만 make install은 호출되지 않습니다. configuremake가 호출될 때 환경 변수 MKOCTFILE, OCTAVE_CONFIG, OCTAVE가 올바른 버전의 mkoctfile, octave-config, octave 프로그램의 전체 경로로 설정됩니다. FILES라는 파일이 있으면 그곳에 나열된 모든 파일이 inst 디렉토리로 복사되어 역시 설치돼요. FILES 파일이 없으면 src/*.msrc/*.octinst 디렉토리로 복사됩니다.
  • package/doc — 패키지에 대한 문서를 담은 선택 디렉토리. 이 디렉토리의 파일들은 설치된 패키지의 하위 디렉토리에 직접 설치되어 나중에 참조할 수 있어요. Octave GUI가 실행 중이면, 선택적 Qt 도움말 파일 package/doc/pkg-name.qch가 패키지 로드 중에 문서 브라우저에 추가됩니다. 도움말 파일은 패키지가 언로드될 때 문서 브라우저에서 제거돼요.
  • package/bin — 패키지가 로드될 때 Octave의 EXEC_PATH에 추가될 파일들이 들어 있는 선택 디렉토리. 패키지 안의 함수가 호출하는 외부 스크립트 등을 포함할 수 있어요.

이어지는 절인 The DESCRIPTION File, The INDEX File, PKG_ADD and PKG_DEL Directives, Missing Components 에서 각 파일의 세부 내용을 다룹니다.

더 알아보기

  • octave-background-information — 패키지 설치의 배경 지식
  • octave-external-packages — 외부 패키지 사용
  • octave-installation — Octave 설치