<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!--*- mode: nxml -*-->
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
<!-- process to HTML with: xmlto xhtml-nochunks -m ../custom.xsl index.docbook -->
<article id="index" lang="ko">
  <articleinfo>
    <title>JHBuild 설명서</title>
    <authorgroup>
      <author role="maintainer"><firstname>James</firstname> <surname>Henstridge</surname></author>
      <author><firstname>C.J.</firstname> <surname>Adams-Collier</surname></author>
      <author><firstname>Frederic</firstname> <surname>Peters</surname></author>
      <author><firstname>David</firstname> <surname>Turner</surname></author>
    </authorgroup>
    <copyright><year>2004, 2008</year> <holder>James Henstridge</holder></copyright>
    <revhistory>
      <revision><revnumber>JHBuild 설명서 v0.5</revnumber> <date>2008년 1월</date></revision>
      <revision><revnumber>JHBuild 설명서 v0.1</revnumber> <date>2007년 8월</date></revision>
    </revhistory>
    <abstract role="description">
      <para>JHBuild는 버전 관리 시스템에서 그놈 데스크톱 전체를 가져와 빌드할 때 사용하는 도구입니다. JHBuild로 다른 프로젝트를 빌드하도록 개별 설정할 수 있습니다.</para>
    </abstract>
  
    <othercredit class="translator">
      <personname>
        <firstname>Seong-ho Cho</firstname>
      </personname>
      <email>shcho@gnome.org</email>
    </othercredit>
    <copyright>
      
        <year>2019</year>
      
      <holder>Seong-ho Cho</holder>
    </copyright>
  </articleinfo>

  <section id="introduction">
    <title>도입부</title>

    <para>JHBuild는 <quote>모듈</quote>이라고 하는 소스 패키지 모음을 쉽게 빌드하도록 설계한 도구입니다. JHBuild는 빌드할 수 있는 모듈을 명시한 <quote>모듈 셋</quote> 파일을 활용합니다. <quote>모듈 셋</quote>파일에는 JHBuild로 하여금 어떤 순서로 어떤 모듈을 빌드할 지 알아내도록 하는 의존 정보가 들어있습니다.</para>

    <para>JHBuild에는 <ulink url="http://www.gnome.org">그놈</ulink> 빌드용으로 작성했으나, 다른 프로젝트에서도 활용할 수 있도록 기능을 확장했습니다. <quote>모듈 셋</quote> 파일에는 JHBuild 프로젝트의 빌드 의존성 규칙을 확보하도록 웹 서버로 제공할 수 있습니다.</para>

    <para>JHBuild는 <ulink url="http://www.cvshome.org/">CVS</ulink>, <ulink url="http://subversion.tigris.org/">서브버전</ulink>, <ulink url="http://www.bazaar-vcs.org/">바자르</ulink>, <ulink url="http://darcs.net/">Darcs</ulink>, <ulink url="http://git.or.cz/">깃</ulink>, <ulink url="http://www.selenic.com/mercurial/">머큐리얼</ulink> 뿐만 아니라, 웹 또는 ftp 사이트에서 제공하는 tar, zip 저장소를 아우른 다양한 공급원에서 모듈을 가져와 빌드할 수 있습니다. JHBuild에서는 autotools, cmake, meson, waf, python distutils, perl makefiles 등의 다양한 빌드 시스템을 활용하여 빌드할 수 있습니다.</para>

    <para>JHBuild는 배포판의 패키지 관리 시스템을 대신하지 않습니다. 대신 시스템의 나머지 부분을 해하지 않으면서 개별적인 설치 위치로 프로그램을 쉽게 빌드해 넣을 수 있게 해줍니다.</para>
  </section>

  <section id="getting-started">
    <title>시작하기</title>

    <para>JHBuild는 프로그램을 빌드하기 전 몇가지 설정 과정 실행이 필요합니다. JHBuild에서는 몇가지 미리 준비할 프로그램이 필요하며, 프로그램 모듈을 구하고 빌드할 사전 준비 도구를 설치해야 합니다.</para>

    <section id="getting-started-install">
      <title>JHBuild 설치</title>

      <para>JHBuild는 파이썬 런타임이 필요합니다. 파이썬 2.3 이상을 설치했는지 확인하십시오.</para>

      <para>JHBuild를 다운로드하는 가장 좋은 방법은 <command>git</command> 버전 관리 시스템을 활용하는 방법입니다. 다음 명령으로 진행할 수 있습니다. <filename>~/jhbuild/checkout</filename>.와 같이 모든 소스 코드를 설치할 새 디렉터리에서 명령을 실행하시는게 좋습니다.</para>

<screen><prompt>$</prompt> <userinput>git clone https://gitlab.gnome.org/GNOME/jhbuild.git</userinput>
<computeroutput>...</computeroutput>
<prompt>$</prompt></screen>

      <para>이 명령은 현재 디렉터리에서 <filename>jhbuild</filename> 폴더를 새로 만들어 이 폴더에 JHBuild를 다운로드합니다. 이제 JHBuild를 빌드하고 설치해보겠습니다:</para>

<screen><prompt>$</prompt> <userinput>cd jhbuild</userinput>
<prompt>$</prompt> <userinput>./autogen.sh</userinput>
<computeroutput>...</computeroutput>
<prompt>$</prompt> <userinput>make</userinput>
<computeroutput>...</computeroutput>
<prompt>$</prompt> <userinput>make install</userinput>
<computeroutput>...</computeroutput>
<prompt>$</prompt></screen>

      <para><application>gnome-common</application>, <application>yelp-tools</application>, <application>autotools</application> 프로그램이 이미 있다면, <filename>autogen.sh</filename> 스크립트는 <application>autotools</application>로 앞으로 설치할 JHBuild 빌드를 설정합니다. <application>gnome-common</application>, <application>yelp-tools</application> and <application>autotools</application> 프로그램이 없다면 Makefile을 활용하여 앞으로 설치할 JHBuild를 설정합니다. Makefile 방식만을 늘 사용하려면 <filename>autogen.sh</filename> 스크립트에 <option>--simple-install</option> 옵션을 전달하십시오.</para>

      <para>위 단계를 제대로 끝냈다면, JHBuild를 시작할 간단한 스크립트가 <filename>~/.local/bin</filename> 디렉터리에 들어갔을 것입니다. <envar>PATH</envar> 환경 변수에 <filename>~/.local/bin</filename> 경로를 추가하십시오:</para>

<screen><prompt>$</prompt> <userinput>PATH=$PATH:~/.local/bin</userinput>
<prompt>$</prompt></screen>

      <para><envar>PATH</envar> 환경 변수에 <filename>~/.local/bin</filename> 경로를 완전히 추가하려면, 다음 명령을 실행하십시오:</para>

<screen>
<prompt>$</prompt> <userinput>echo 'PATH=$PATH:~/.local/bin' &gt;&gt; ~/.bashrc</userinput>
<prompt>$</prompt></screen>
    </section>

    <section id="getting-started-configure">
      <title>JHBuild 설정</title>

      <para>JHBuild는 설정 파일로 빌드 조건을 설정할 수 있습니다. 기본 위치는 <filename>~/.config/jhbuildrc</filename>입니다. 설정 파일이 없으면 기본 설정 파일을 활용합니다. 설정 파일에서는 파이썬 문법을 활용합니다. 제공해드리는 <filename>examples/sample.jhbuildrc</filename> 예제 파일을 살펴보시지요. 필요할 때마다 <filename>examples/sample.jhbuildrc</filename> 파일을 <filename>~/.config/jhbuildrc</filename> 위치에 복사해 넣으시고 원하는대로 설정하시면 됩니다.</para>

      <para>JHBuild는 예제 빌드 설정 파일로 <application>meta-gnome-core</application> 모듈과 <application>meta-gnome-apps-tested</application> 모듈, <systemitem>gnome-apps</systemitem>  모듈셋의 의존 요소를 빌드합니다. JHBuild는 소스 트리를 <filename>~/jhbuild/checkout/</filename> 위치에 패키징 해제한 후 모든 파일을 <filename>~/jhbuild/install/</filename> 위치의 하위 디렉터리에 설치합니다. 두 디렉터리는 기록 가능하도록 권한을 설정해두어야 합니다.</para>

      <para>설정 변수내용은 <xref linkend="config-reference"/> 문서에 있습니다. 대부분 사용하는 변수는 다음과 같습니다:</para>

      <variablelist>
<?dbhtml list-presentation="table"?>
        <varlistentry>
          <term><link linkend="cfg-repos"><varname>repos</varname></link></term>
          <listitem>
            <simpara>일부 저장소에 대한 대체 저장소 위치를 지정할 때 사용하는 딕셔너리입니다. 이 설정 변수는 모듈 개발자가 쓰기에 좋습니다. 기본적으로 JHBuild는 익명 저장소 위치를 활용하여 저장소에서 코드를 가져옵니다. 딕셔너리 키는 짧은 저장소 이름이며 값은 애체 저장소 위치 문자열입니다. 예를 들면:</simpara>

<programlisting>repos['git.gnome.org'] = 'ssh://<replaceable>username</replaceable>@git.gnome.org/git/'</programlisting>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><link linkend="cfg-moduleset"><varname>moduleset</varname></link></term>
          <listitem>
            <simpara>활용할 모듈 세트 이름을 지정하는 문자열, 문자열 목록입니다. (경로와 확장을 뺀) JHBuild에 들어간 모듈 세트의 파일 이름이거나 모듈 세트를 외부에서 관리하는 전체 HTTP URL일 수 있습니다. HTTP URL 모듈 세트는 로컬에 캐싱할 수 있습니다. 동일한 이름을 지닌 모듈이 모듈 세트에 한번 이상 나타나면 가장 마지막에 나타난 모듈을 우선 활용합니다. JHBuild에서 제공하는 모듈 세트는 현재 그놈 개발 출시 주기에 맞춰 업데이트합니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><link linkend="cfg-modules"><varname>modules</varname></link></term>
          <listitem>
            <simpara>빌드할 모듈을 지정하는 문자열 목록입니다. 모듈 목록은 실제로 <link linkend="command-reference-buildone"> <command>buildone</command></link> 명령을 사용하기까지 모든 의존 요소를 넣으려 재귀적으로 확장합니다. 기본 값은 <literal>['meta-gnome-desktop']</literal> 입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><link linkend="cfg-checkoutroot"><varname>checkoutroot</varname></link></term>
          <listitem>
            <simpara>소스 트리의 패키징을 해제할 대상 디렉터리를 지정하는 문자열입니다. <link linkend="cfg-buildroot"> <varname>buildroot</varname></link> 설정 값이 <constant>None</constant>이면 이 위치로 빌드합니다. 기본 값은 <filename>~/jhbuild/checkout</filename> 입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><link linkend="cfg-prefix"><varname>prefix</varname></link></term>
          <listitem>
            <simpara>모듈 설치 경로를 지정하는 문자열입니다. <varname>prefix</varname>는 절대 경로여야합니다. 이 디렉터리에 기록할 수 있어야합니다. 기본 값은 <literal>'~/jhbuild/install/'</literal> 입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><link linkend="cfg-autogenargs"><varname>autogenargs</varname></link></term>
          <listitem>
            <simpara>모든 모듈의 <command>autogen.sh</command> 스크립트에 전달할 인자 값 문자열입니다. <link linkend="cfg-module-autogenargs"> <varname>module_autogenargs</varname></link> 딕셔너리를 활용하여 일부 모듈에 대해 중복 적용할 수 있습니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><link linkend="cfg-cmakeargs"><varname>cmakeargs</varname></link></term>
          <listitem>
            <simpara>모든 모듈에서 <command>cmake</command>를 실행할 때 전달할 인자 값 문자열입니다. <link linkend="cfg-module-cmakeargs"> <varname>module_cmakeargs</varname></link> 딕셔너리를 활용하여 일부 모듈에 중복 적용할 수 있습니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><link linkend="cfg-makeargs"><varname>makeargs</varname></link></term>
          <listitem>
            <simpara><command>make</command> 명령에 전달할 추가 인자 값 목록 문자열입니다. JHBuild에서는 가용 CPU 코어 수에 따라 자동으로 병렬 실행 옵션(<option>-j</option>)을 붙입니다. 기본값은 <literal>''</literal>입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><link linkend="cfg-mesonargs"><varname>mesonargs</varname></link></term>
          <listitem>
            <simpara>모든 모듈에 대해 <command>meson</command> 명령을 실행할 때 전달할 인자 값 문자열입니다. <link linkend="cfg-module-mesonargs"> <varname>module_mesonargs</varname></link> 딕셔너리를 활용하여 일부 모듈에 중복 적용할 수 있습니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><link linkend="cfg-ninjaargs"><varname>ninjaargs</varname></link></term>
          <listitem>
            <simpara><command>ninja</command> 명령에 전달할 추가 인자 값 목록 문자열입니다. 기본값은 <literal>''</literal>입니다.</simpara>
          </listitem>
        </varlistentry>
      </variablelist>
    </section>

    <section id="getting-started-bootstrap">
      <title>빌드 준비사항</title>

      <para>어떤 모듈을 빌드할 수 있기 전에, 몇가지 빌드 도구를 설치해야 합니다. 어떤 모듈을 빌드하느냐에 따라 GNU Autotools(<application>autoconf</application>, <application>automake</application>, <application>libtool</application> and <application>gettext</application>), GNU 툴체인[(<application>binutils</application>, <application>gcc</application>, <application>g++</application>), make, pkg-config, 파이썬 등의 일반 빌드 도구가 필요합니다.</para>

      <para>JHBuild는 <command>sanitycheck</command> 명령으로 도구를 설치했는지 확인할 수 있습니다:</para>

<screen><prompt>$</prompt> <userinput>jhbuild sanitycheck</userinput></screen>

      <para>이 명령에서 어떤 메시지가 나타난다면 배포판 저장소에서 필요한 패키지를 받아 설치하십시오. 그놈 위키에는 다양한 배포판에 따라 관리하는 <ulink url="http://live.gnome.org/JhbuildDependencies">패키지 이름</ulink> 목록이 있습니다. 배포판의 패키지를 설치한 후 <command>sanitycheck</command> 명령을 다시 실행하여 필요한 도구 이름이 나타나는지 다시 확인하십시오.</para>
    </section>

    <section id="getting-started-use">
      <title>JHBuild 활용법</title>

      <para>설치 과정이 끝나면, JHBuild로 프로그램을 빌드할 수 있습니다. <filename>~/.config/jhbuildrc</filename> 파일에서 선택한 모든 모듈을 빌드하려면 다음 명령을 실행하십시오:</para>

<screen><prompt>$</prompt> <userinput>jhbuild build</userinput></screen>

      <para>JHBuild에서는 각 모듈을 다운로드, 빌드 설정, 컴파일, 설치합니다. 어떤 과정에서 오류가 나타나면 JHBuild에서는 어떻게 할 지 묻는 메뉴를 나타냅니다. 오류 수정을 목적으로 셸로 진입하거나 다양한 단계에서 빌드를 다시 실행하거나, 모듈을 포기하거나, 오류를 무시하고 계속 진행하는 등의 여러가지 선택지가 있습니다.</para>

      <note>
        <simpara>모듈을 포기하면 해당 모듈이 필요한 다른 모듈을 빌드하지 못할 수 있습니다.</simpara>
      </note>

      <para>아래는 화면에 나타나는 메뉴의 예시입니다:</para>

<screen>  [1] Rerun phase build
  [2] Ignore error and continue to install
  [3] Give up on module
  [4] Start shell
  [5] Reload configuration
  [6] Go to phase "wipe directory and start over"
  [7] Go to phase "configure"
  [8] Go to phase "clean"
  [9] Go to phase "distclean"
<prompt>choice:</prompt> </screen>

      <para><command>build</command> 명령에 인자값 형식으로 모듈 이름을 전달하여 다른 모듈 모음과 관련 모듈을 빌드하게 할 수 있습니다. 예를 들어 gtk+를 빌드한다고 하면:</para>

<screen><prompt>$</prompt> <userinput>jhbuild build gtk+</userinput></screen>

      <para>빌드 과정 중간에 JHBuild 동작을 취소하더라도 취소한 부분으로부터 <option>--start-at</option> 옵션을 활용하여 일부 모듈 빌드를 다시 빌드할 수 있습니다:</para>

<screen><prompt>$</prompt> <userinput>jhbuild build --start-at=pango</userinput></screen>

      <para>JHBuild에는 관련 요소를 무시하고 하나 이상의 모듈을 빌드하는 용도로 쓰이는 <command>buildone</command> 명령이 있습니다. <command>buildone</command> 명령을 제대로 끝내려면 모든 관련 요소를 빌드하고 설치하거나 배포판에서 제공하는 관련 패키지를 설치해야합니다.</para>

<screen><prompt>$</prompt> <userinput>jhbuild buildone gtk+</userinput></screen>

      <para>모듈을 개발 중일 경우 개발은 (보통) 소스 작업 디렉터리에서 진행합니다. <command>make</command> 명령은 빌드 시스템을 실행하고 모듈 설치를 진행합니다. 또한 이 명령은 편집-컴파일-설치-테스트 주기의 핵심 부분이기도 합니다.</para>

<screen><prompt>$</prompt> <userinput>jhbuild make</userinput></screen>

      <para>JHBuild에서 빌드할 모듈과 관련 모듈 목록을 빌드 순으로 가져오려면, <command>list</command> 명령을 사용하십시오:</para>

<screen><prompt>$</prompt> <userinput>jhbuild list</userinput></screen>

      <para>일부 모듈 정보만 가져오려면, <command>info</command> 명령을 사용하시면 됩니다:</para>

<screen><prompt>$</prompt> <userinput>jhbuild info gtk+</userinput></screen>

      <para>빌드하지 않고 모든 프로그램 소스코드를 다운로드하고 업데이트하려면 <command>update</command> 명령을 사용하십시오. <command>update</command> 명령은 빌드하기 전 소스를 수정할 기회를 주며, 인터넷 대역폭이 출렁이는 경우 쓸만합니다.</para>

<screen><prompt>$</prompt> <userinput>jhbuild update</userinput></screen>

      <para>이후, JHBuild는 소스코드를 다운로드하거나 업데이트하지 않고도 모든 요소를 빌드할 수 있습니다:</para>

<screen><prompt>$</prompt> <userinput>jhbuild build --no-network</userinput></screen>

      <para>JHBuild에서 동일한 조건으로 일부 명령을 실행하려면, <command>run</command> 명령을 활용해보십시오:</para>

<screen><prompt>$</prompt> <userinput>jhbuild run <replaceable>program</replaceable></userinput></screen>

      <para>JHBuild에서 사용하는 동일한 환경으로 셸을 시작하려면 <command>shell</command> 명령을 사용해보십시오:</para>

<screen><prompt>$</prompt> <userinput>jhbuild shell</userinput></screen>
    </section>
  </section>

  <section id="jhbuild-and-gnome">
    <title>JHBuild와 GNOME</title>

    <para>이 장에서는 그놈을 빌드하고 설치하고 실행하는 일련의 방법을 안내합니다.</para>

    <section id="building-gnome">
      <title>그놈 빌드</title>

      <para>그놈을 빌드하려면 일부 관련 패키지가 필요합니다. 다음 항목이 이에 해당합니다:</para>

      <itemizedlist>
        <listitem>
          <simpara>DocBook XML DTD , XSLT 스타일시트. XML 키달로그(<filename>/etc/xml/catalog</filename>) 등록에 필요함.</simpara>
        </listitem>
        <listitem>
          <simpara>X 라이브러리.</simpara>
        </listitem>
        <listitem>
          <simpara>삼바의 <filename>libsmbclient</filename>(윈도우 네트워크 탐색에 필요).</simpara>
        </listitem>
        <listitem>
          <simpara>bzip2의 <filename>libbz2</filename>.</simpara>
        </listitem>
        <listitem>
          <simpara><filename>libpng</filename>, <filename>libjpeg</filename>, <filename>libtiff</filename> (그림 불러올 때 사용).</simpara>
        </listitem>
      </itemizedlist>

      <para>배포판 패키지를 설치할 때, 사용하시는 배포판에 다음에 해당하는 경우: <quote>dev</quote> 또는 <quote>devel</quote>에 해당하는 패키지를 설치하십시오. 그놈 위키에는 다양한 배포판에 따라 관리하는 <ulink url="http://live.gnome.org/JhbuildDependencies">패키지 이름</ulink> 목록이 있습니다.</para>
    </section>

    <section id="running-single-application">
      <title>단일 그놈 프로그램 실행</title>

      <para>이 장에서는 단일 그놈 프로그램 실행 방법을 자세하게 설명합니다. 현재 데스크톱 환경에서 프로그램을 실행하도록 하겠습니다. 완전한 JHBuild 그놈 환경에서 프로그램을 실행하려면, <xref linkend="running-gnome"/> 문서를 살펴보십시오.</para>

      <para>JHBuild 셸을 실행하십시오. JHBuild 셸에는 필요한 환경 변수 모음이 갖춰져있습니다.</para>

<screen><prompt>$ </prompt><userinput>jhbuild shell</userinput></screen>

      <para>실행할 프로그램이 제대로 갖춰졌는지 확인하십시오. 예를 들면:</para>

<screen><prompt>$ </prompt><userinput>which gedit</userinput>
/home/wanda/jhbuild/install/bin/gedit</screen>

      <para>프로그램을 실행하십시오:</para>

<screen><prompt>$ </prompt><userinput>gedit &amp;</userinput></screen>

      <para>대신 <command>run</command> 명령으로 프로그램을 실행할 수도 있습니다:</para>

<screen><prompt>$ </prompt><userinput>jhbuild run gedit</userinput></screen>
    </section>

    <section id="running-gnome">
      <title>그놈 데스크톱 환경 실행</title>

      <para>JHBuild 그놈을 실행할 새 사용자 계정을 만드십시오. 다른 사용자 계정에서 JHBuild 그놈을 실행하는 방식으로 사용자의 기본 디렉터리(홈 디렉터리)에 저장한 사용자 설정으로 하여금 나타날 문제를 피하는게 좋습니다. 이 설명서에서는 새 계정 이름을 <systemitem class="username">gnomedev</systemitem>라고 하겠습니다.</para>

      <para>JHBuild를 새 <systemitem class="username">gnomedev</systemitem> 계정에 설치하십시오. <filename>~/.config/jhbuildrc</filename>와 <filename>~/.local/bin/jhbuild</filename>를 <systemitem class="username">gnomedev</systemitem> 사용자 기본 디렉터리에 복사하거나 소프트-링크를 만드십시오.</para>

      <para><systemitem class="username">gnomedev</systemitem> 사용자 계정으로 터미널을 여십시오. <envar>PATH</envar> 환경 변수에 <filename>~/.local/bin</filename>을 완전히 추가하고 다음 명령을 실행하십시오:</para>

<screen><prompt>$</prompt> <userinput>echo 'PATH=$PATH:~/.local/bin' &gt;&gt; ~/.bashrc</userinput></screen>

      <para>JHBuild 동작 시험:</para>

<screen><prompt>$</prompt> <userinput>jhbuild run pkg-config gtk+-2.0 --modversion</userinput>
2.20.1</screen>

      <section>
        <title>디스플레이 관리자에서의 그놈 실행 설정</title>

        <para>JHBuild 그놈을 빌드하고 설치합니다.</para>

        <para>시스템 서비스를 사용하도록 설정하십시오. JHBuild에서는 <filename>/usr/bin</filename>의 시스템 <application>D-Bus</application> 데몬과 <filename>/usr/share/dbus-1/system-services/</filename>의 시스템 서비스를 활용합니다. JHBuild 그놈은 JHBuild 세션의 <application>D-Bus</application> 데몬과 <filename><replaceable>~/jhbuild/install/</replaceable>/share/dbus-1/services/</filename>의 서비스를 활용합니다. <filename>~/jhbuild/install</filename> 경로를 다음 명령으로 그놈 설치 <varname>prefix</varname> 경로로 바꾸십시오:</para>

<screen><prompt>$ </prompt><userinput>rm -rf <replaceable>~/jhbuild/install</replaceable>/var/run/dbus</userinput>
<prompt>$ </prompt><userinput>ln -s /var/run/dbus <replaceable>~/jhbuild/install</replaceable>/var/run/dbus</userinput>
<prompt>$ </prompt><userinput>rm -rf <replaceable>~/jhbuild/install</replaceable>/var/lib/dbus/machine-id</userinput>
<prompt>$ </prompt><userinput>ln -s /var/lib/dbus/machine-id <replaceable>~/jhbuild/install</replaceable>/var/lib/dbus/machine-id</userinput></screen>

        <para>다음 스크립트와 마찬가지로 <filename>/usr/bin/gnome-jhbuild-session</filename> 위치에 그놈 시작 스크립트를 만드십시오. <filename>~/jhbuild/install</filename> 경로를 그놈 설치 <varname>prefix</varname> 경로로 바꾸십시오:</para>

<programlisting>#!/bin/sh

GNOME=<replaceable>~/jhbuild/install</replaceable>

GDK_USE_XFT=1
XDG_DATA_DIRS=$XDG_DATA_DIRS:$GNOME/share
XDG_CONFIG_DIRS=$XDG_CONFIG_DIRS:$GNOME/etc/xdg

jhbuild run gnome-session
</programlisting>

        <para><filename>/usr/bin/gnome-jhbuild-session</filename> 파일을 실행 가능하도록 설정하십시오:</para>

<screen><prompt>$ </prompt><userinput>chmod a+x /usr/bin/gnome-jhbuild-session</userinput></screen>

        <para>디스플레이 관리자에 새 세션 항목을 추가하려면 <filename>/usr/share/xsessions/gnome-jhbuild.desktop</filename> 파일을 만들어 파일에 들어가십시오:</para>

<programlisting>[Desktop Entry]
Name=GNOME (JHBuild)
Comment=This session logs you into GNOME testing session
TryExec=/usr/bin/gnome-jhbuild-session
Exec=/usr/bin/gnome-jhbuild-session
Icon=
Type=Application</programlisting>

        <para><command>gdm</command>을 다시 시작하십시오.</para>

        <para/>
      </section>

      <section>
        <title>디스플레이 관리자에서 그놈 실행</title>

        <para>JHBuild 그놈을 실행하려면, <systemitem class="username">gnomedev</systemitem> 계정으로 로그인 후 진입하기 전, 디스플레이 관리자에서 그놈(JHBuild) 세션을 선택하십시오. 성공했다면 JHBuild 그놈 환경이 나타납니다. 실패했다면 로그 파일을 확인해보십시오. 로그 파일은 <filename>~gnomedev/.cache/gdm/session.log</filename> 위치 또는  <filename>~gnomedev/.xsession-errors</filename> 위치에 있습니다.</para>
      </section>
    </section>

    <section id="static-analysis">
      <title>정적 분석</title>

      <para>JHBuild에서는 빌드한 모듈 코드에 대한 정적 분석 도구 실행을 지원합니다. 이 기능을 사용하려면 <filename>.jhbuildrc</filename>  설정 파일의 <varname>static_analyzer</varname> 설정 변수 값을 <constant>True</constant>로 설정하십시오.</para>

      <para>기능을 켰다면, 매번 JHBuild로 모듈을 빌드할 때마다, 빌드 과정에서 정적 분석기가 동시에 동작하며 코드의 문제를 찾아내는 보고서가 나옵니다. 이 보고서는 <filename>/tmp/jhbuild_static_analyzer</filename> 경로의 하위 디렉터리에 HTML 파일로 저장합니다(기본적으로 경로는 <varname>static_analyzer_outputdir</varname> 설정 변수로 바꿀 수 있습니다).</para>

      <para>현재 정적 분석은 빌드 시스템에 따라 autotools를 사용하는 모듈에 대해서만 동작합니다. <varname>static_analyzer_template</varname> 설정 변수 값을 수정하여 명령을 바꿀 수 있다 하더라도 <command>scan-build</command> 프로그램을 설치해야합니다.</para>
    </section>
  </section>

  <section id="command-reference">
    <title>명령 참고</title>

    <para>JHBuild는 CVS와 같은 도구의 명령행 문법을 활용합니다:</para>

    <cmdsynopsis><command>jhbuild</command> <arg><replaceable>global-options</replaceable></arg> <arg choice="plain"><replaceable>command</replaceable></arg> <arg><replaceable>command-arguments</replaceable></arg></cmdsynopsis>

    <para>JHBuild 전역 옵션은 다음과 같습니다:</para>

    <variablelist>
      <varlistentry id="option-file">
        <term><option>-f</option>, <option>--file</option> <replaceable>config</replaceable></term>
        <listitem>
          <simpara><filename>~/.config/jhbuildrc</filename> 기본 파일 대신 다른 설정 파일을 사용합니다.</simpara>
        </listitem>
      </varlistentry>
      <varlistentry>
        <term><option>-m</option>, <option>--moduleset</option> <replaceable>moduleset</replaceable></term>
        <listitem>
          <simpara>설정 파일에 있는 모듈 세트 대신 다른 모듈 세트를 활용합니다. 이 옵션 값은 JHBuild moduleset 폴더에 있을 경우 상대 경로, 다른 위치에 있을 경우 절대 경로입니다.</simpara>
        </listitem>
      </varlistentry>
      <varlistentry>
        <term><option>--no-interact</option></term>
        <listitem>
          <simpara>사용자로부터 어떤 입력도 받지 않습니다. 이 옵션은 의도치 않게 빌드 현장을 떠날 경우 빌드가 어떤 문제로 인해 멈췄는지 확인하는 용도로 활용할 수 있습니다.</simpara>
        </listitem>
      </varlistentry>
      <varlistentry>
        <term><option>--exit-on-error</option></term>
        <listitem>
          <simpara>모듈 빌드에 실패하면 빠져나가는 옵션입니다. JHBuild가 비대화식 모드에서 어떤 추가 모듈을 계속 빌드하지 않고 멈추는지 여부를 확인하난 용도로 활용할 수 있습니다.</simpara>
        </listitem>
      </varlistentry>
      <varlistentry>
        <term><option>--conditions</option></term>
        <listitem>
          <simpara>운영체제와 jhbuildrc의 지정값을 기반으로 결정하기보단 다른 설정 플래그를 사용하도록 수정합니다. 상태를 제거하거나 추가할 목적으로 <literal>-wayland</literal> 또는 <literal>+docs</literal>와 같은 식으로 지정할 수 있습니다. <command>--conditions=+docs,-wayland</command> 또는 <command>--conditions</command> 인자를 여러번 지정하는 식으로 나누어 여러 수정 옵션을 설정할 수 있습니다.</simpara>
        </listitem>
      </varlistentry>
    </variablelist>

    <para>게다가, JHBuild에서는 다음 환경 변수의 존재 여부 및 값을 확인합니다:</para>

    <variablelist>
      <varlistentry>
        <term><envar>JHBUILD_RUN_AS_ROOT</envar></term>
        <listitem>
          <simpara>기본적으로 전체 시스템에 영향을 줄 수 있는 치명적 동작을 막으려 루트 사용자 권한으로는 동작하지 않습니다. 그러나 일부 경우에 한해 JHBuild를 루트 권한으로 실행할 수는 있습니다. 컨테이너 내부에서나 연속 통합 환경일 경우에 해당합니다. <envar>JHBUILD_RUN_AS_ROOT</envar> 환경 변수를 설정하면 시작시 사용자 ID 검사를 하지 않습니다.</simpara>
        </listitem>
      </varlistentry>
    </variablelist>

    <para>명령별 옵션은 다음과 같습니다.</para>

    <section id="command-reference-autobuild">
      <title>autobuild</title>

      <para><command>autobuild</command> 명령은 설정 파일에 지정한대로 모듈을 자동으로 빌드하고 결과를 JhAutobuild에 업로드합니다.</para>

      <cmdsynopsis><command>jhbuild autobuild</command> <arg>--autogen</arg> <arg>--clean</arg> <arg>--distcheck</arg> <arg rep="repeat">--skip=<replaceable>module</replaceable></arg> <arg>--start-at=<replaceable>module</replaceable></arg> <arg>--report-url=<replaceable>reporturl</replaceable></arg> <arg>--verbose</arg></cmdsynopsis>

      <para><option>--autogen</option>, <option>--clean</option>, <option>--distcheck</option>, <option>--skip</option>, <option>--start-at</option> 옵션은 <link linkend="command-reference-build"><command>build</command></link> 명령에서와 동일하게 처리합니다.</para>

      <variablelist>
        <varlistentry>
          <term><option>--report-url=<replaceable>reporturl</replaceable></option>, <option>-r <replaceable>reporturl</replaceable></option></term>
          <listitem>
            <simpara>이 옵션은 보고서를 제출할 JhAutobuild URL을 지정합니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><option>--verbose</option>, <option>-v</option></term>
          <listitem>
            <simpara>이 옵션을 지정하면 JHBuild 출력 내용이 많아집니다.</simpara>
          </listitem>
        </varlistentry>
      </variablelist>
    </section>

    <section id="command-reference-bootstrap">
      <title>bootstrap</title>

      <para><command>bootstrap</command> 명령은 빌드 유틸리티 모음을 설치합니다. 빌드 유틸리티에는 <application>autoconf</application>, <application>automake</application> 같은 프로그램이 있습니다. 배포판의 패키지 관리 시스템으로 빌드 유틸리티를 설치하시는게 좋습니다. <command>bootstrap</command> 명령은 <systemitem class="osname">Mac OS</systemitem>와 같은 배포판 패키지 관리 시스템에서 빌드 유틸리티를 제공하지 않을 경우에만 사용하십시오.</para>

      <cmdsynopsis><command>jhbuild bootstrap</command></cmdsynopsis>

      <para><command>bootstrap</command> 명령은 <command>build</command>명령과 마찬가지 방식으로 모듈을 빌드하지만, <filename>bootstrap.modules</filename> 모듈 세트를 활용합니다.</para>

      <para>가용 옵션 내용은 <link linkend="command-reference-build"><command>build</command></link> 명령 문서에서 살펴보십시오.</para>
    </section>

    <section id="command-reference-build">
      <title>build</title>

      <para><command>build</command> 명령은 하나 이상의 패키지와 관련 모듈을 빌드합니다.</para>

      <cmdsynopsis><command>jhbuild build</command> <arg>--autogen</arg> <arg>--clean</arg> <arg>--check</arg> <arg>--dist</arg> <arg>--distcheck</arg> <arg>--distclean</arg> <arg>--ignore-suggests</arg> <arg>--no-network</arg> <arg rep="repeat">--skip=<replaceable>module</replaceable></arg> <arg>--start-at=<replaceable>module</replaceable></arg> <arg>--tags=<replaceable>tags</replaceable></arg> <arg>-D <replaceable>date</replaceable></arg> <arg>--no-xvfb</arg> <arg>--try-checkout</arg> <arg>--no-poison</arg> <arg>--force</arg> <arg>--build-optional-modules</arg> <arg>--min-age=<replaceable>time</replaceable></arg> <arg>--nodeps</arg> <arg rep="repeat">module</arg></cmdsynopsis>

      <para>명령행에 지정한 모듈 이름이 없을 경우, 설정 파일의 <link linkend="cfg-modules">modules</link> 목록을 활용합니다.</para>

      <variablelist>
        <varlistentry>
          <term><option>-a</option>, <option>--autogen</option></term>
          <listitem>
            <simpara>모듈 빌드 전 항상 <command>autogen.sh</command> 스크립트를 실행합니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><option>-c</option>, <option>--clean</option></term>
          <listitem>
            <simpara>모듈을 빌드하기 전 <command>make clean</command>을 실행합니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><option>--check</option></term>
          <listitem>
            <simpara>모듈을 빌드한 후 <command>make check</command> 명령을 실행합니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><option>-d</option>, <option>--dist</option></term>
          <listitem>
            <simpara>모듈을 빌드한 후 <command>make dist</command> 명령을 실행합니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><option>--distcheck</option></term>
          <listitem>
            <simpara>모듈을 빌드한 후 <command>make distcheck</command> 명령을 실행합니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><option>--distclean</option></term>
          <listitem>
            <simpara>git 모듈에 대해서는 모듈을 빌드하기 전 <command>git clean -dfx</command> 명령을, 다른 모듈에 대해서는 모듈을 빌드하기 전 <command>make distclean</command> 명령을 실행합니다.</simpara>

            <note>
              <simpara>이 옵션은 제출하지 않은 바뀐 내용을 삭제합니다.</simpara>
            </note>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><option>--ignore-suggests</option></term>
          <listitem>
            <simpara>약 의존성 관계는 빌드하지 않습니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><option>-n</option>, <option>--no-network</option></term>
          <listitem>
            <simpara>모듈을 빌드할 때 네트워크에 연결하지 않습니다. 빌드할 때 다운로드 또는 업데이트 과정을 건너뜁니다. 네트워크에 연결하지 않고서 모듈을 빌드할 수 없다면 모듈 빌드에 실패합니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><option>-s</option>, <option>--skip</option>=<replaceable>module,...</replaceable></term>
          <listitem>
            <simpara>목록의 모듈을 빌드하지 않습니다. 특정 의존 관계 요소 빌드를 건너뛸 때 사용합니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><option>--tags</option>=<replaceable>tag,...</replaceable></term>
          <listitem>
            <simpara><replaceable>tag</replaceable>에 일치하지 않는 모듈을 무시합니다. 모듈은 모듈의 모듈 세트 이름과 일치하는 태그를 속성 값으로 갖습니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><option>-t</option>, <option>--start-at</option>=<replaceable>module</replaceable></term>
          <listitem>
            <simpara>목록 시작 항목부터 진행하기보단 이름으로 지정한 모듈부터 시작합니다. 빌드가 멈추었을 경우에 활용할 수 있습니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><option>-D</option> <replaceable>date</replaceable></term>
          <listitem>
            <simpara>버전 관리 시스템에서 지원할 경우 빌드하기 전 지정 날짜로 소스 트리를 업데이트합니다. <literal>"2009-09-18 02:32Z"</literal>와 같은 ISO 날짜 형식으로 지정해야합니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><option>-x</option>, <option>--no-xvfb</option></term>
          <listitem>
            <simpara>Xvfb 시뮬레이션 환경을 사용하기보단 실제 X 서버에서 그래픽 동작 시험을 수행합니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><option>-C</option>, <option>--try-checkout</option></term>
          <listitem>
            <simpara>빌드에 실패했을 때 버전 관리 시스템에서 지원할 경우, 빌드를 다시 진행해보기 전 강제로 체크아웃을 수행하고 <command>autogen.sh</command> 스크립트를 실행합니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><option>-N</option>, <option>--no-poison</option></term>
          <listitem>
            <simpara>하나 이상의 모듈 관련 요소 빌드에 실패했을 경우 이 옵션은 JHBuild로 하여금 모듈을 무조건 빌드하게 합니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><option>-f</option>, <option>--force</option></term>
          <listitem>
            <simpara>정책상 불필요하더라도 모듈을 빌드합니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><option>--build-optional-modules</option></term>
          <listitem>
            <simpara>이 옵션에 추가 의존 요소로 지정한 모듈은 꼭 빌드할 필요는 없습니다. 이 옵션에서는 JHBuild에 추가 의존 요소를 무조건 빌드하도록 합니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><option>--min-age</option>=<replaceable>time</replaceable></term>
          <listitem>
            <simpara>지정 상대 시간보다 최근에 설치한 모듈은 건너뜁니다. <replaceable>time</replaceable> 문자열은 단위가 숫자 뒤에 따라붙는 형식입니다. 초(s), 분(m), 시간(h), 일(d) 단위를 사용할 수 있습니다. 이를테면 <option>--min-age=2h</option> 옵션은 2시간 이내에 필드한 모듈은 건너뜁니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><option>--nodeps</option></term>
          <listitem>
            <simpara>빠진 시스템 의존 요소는 무시합니다. 단일 시스템 의존 요소를 무시하려면 <link linkend="cfg-skip"><varname>skip</varname></link> 변수에 모듈을 추가하십시오.</simpara>
          </listitem>
        </varlistentry>
      </variablelist>
    </section>

    <section id="command-reference-make">
      <title>make</title>

      <para><command>make</command> 명령은 실제로 개발중인 모듈에 한합니다. 현재 디렉터리에 소스를 우선 체크아웃해야 하며, 이 명령은 <command>buildone -nf $(basename $(pwd))</command> 명령과 동일한 동작을 수행합니다.</para>

      <cmdsynopsis><command>jhbuild make</command> <arg>--clean</arg> <arg>--check</arg> <arg>--distcheck</arg> <arg>--quiet</arg></cmdsynopsis>

      <para><link linkend="command-reference-build"><command>buildone</command></link> 명령의 옵션과 동일합니다.</para>
    </section>

    <section id="command-reference-buildone">
      <title>buildone</title>

      <para><command>buildone</command> 명령은 <command>build</command> 명령과 유사하나 의존 모듈을 빌드하지 않는 차이점이 있습니다. 하나 이상의 모듈을 다시 빌드할 경우 활용합니다.</para>

      <cmdsynopsis><command>jhbuild buildone</command> <arg>--autogen</arg> <arg>--clean</arg> <arg>--check</arg> <arg>--distcheck</arg> <arg>--distclean</arg> <arg>--no-network</arg> <arg>-D <replaceable>date</replaceable></arg> <arg>--no-xvfb</arg> <arg>--force</arg> <arg>--min-age=<replaceable>time</replaceable></arg> <arg>--nodeps</arg> <arg choice="plain" rep="repeat">module</arg></cmdsynopsis>

      <para><option>--autogen</option>, <option>--check</option>, <option>--clean</option>, <option>-d</option>, <option>--distcheck</option>, <option>--distclean</option>, <option>--no-network</option>, <option>-D</option>, <option>-x</option>, <option>--nodeps</option> 옵션은 <link linkend="command-reference-build"><command>build</command></link> 명령에서와 동일하게 처리합니다.</para>

      <para>최소한 하나의 모듈을 명령행에 지정해야합니다.</para>
    </section>

    <section id="command-reference-checkbranches">
      <title>checkbranches</title>

      <para><command>checkbranches</command> 명령은 버전 관리 시스템에서 제대로 정의한 모듈의 브랜치를 가져오며 브랜치는 모듈 세트에 대해 늘 존재합니다.</para>

      <cmdsynopsis><command>jhbuild checkbranches</command> <arg rep="repeat">--branch=<replaceable>branch</replaceable></arg></cmdsynopsis>

      <variablelist>
        <varlistentry>
          <term><option>--branch</option>=<replaceable>branch</replaceable>, <option>-b</option> <replaceable>branch</replaceable></term>
          <listitem>
            <simpara>branch는 가져올 대상입니다.</simpara>
          </listitem>
        </varlistentry>
      </variablelist>

<screen><prompt>$</prompt> <userinput>jhbuild -m gnome-2.20 checkbranches</userinput>
libgnomecanvas is missing branch definition for gnome-2-20
<prompt>$</prompt></screen>
    </section>

    <section id="command-reference-clean">
      <title>clean</title>

      <para><command/> 명령은 하나 이상의 모듈의 빌드 디렉터릴르 정리합니다.</para>

      <cmdsynopsis><command>jhbuild clean</command> <arg rep="repeat">--skip=<replaceable>module</replaceable></arg> <arg>--start-at=<replaceable>module</replaceable></arg></cmdsynopsis>

      <para>명령행에 지정한 모듈 이름이 없을 경우, 설정 파일의 <link linkend="cfg-modules">modules</link> 목록을 활용합니다.</para>

      <para>가용 옵션에 대한 설명은 <link linkend="command-reference-build"><command>build</command></link> 명령 문서에서 살펴보십시오.</para>
    </section>

    <section id="command-reference-dot">
      <title>dot</title>

      <para><command>dot</command> 명령은 모듈 세트간 관계를 설명하는 방향성 그래프 파일을 만듭니다. 이 파일은 다이어그램을 만드는 <ulink url="http://www.graphviz.org/">GraphViz</ulink> 프로그램에서 처리해서 만듭니다.</para>

      <cmdsynopsis><command>jhbuild dot</command> <arg>--soft-deps</arg> <arg>--clusters</arg> <arg rep="repeat">module</arg></cmdsynopsis>

      <para>명령행에 지정한 모듈 이름이 없을 경우, 설정 파일의 <link linkend="cfg-modules">modules</link> 목록을 활용합니다.</para>

      <para><option>--soft-deps</option> 옵션은 약 의존성 관계를 가진 모듈에 점선을 추가합니다. <option>--clusters</option> 옵션은 <link linkend="moduleset-syntax-defs-metamodule">metamodules</link>에서 지정한 모듈을 한데 묶어 보여줍니다.</para>

      <para>dot 명령 출력 결과는 포스트스크립트 파일을 만드는 dot 유틸리티로 내보낼 수 있습니다:</para>

<screen><prompt>$</prompt> <userinput>jhbuild dot <replaceable>modules</replaceable> | dot -Tps &gt; dependencies.ps</userinput></screen>

      <para>또는 PNG 이미지로도 가능합니다:</para>

<screen><prompt>$</prompt> <userinput>jhbuild dot <replaceable>modules</replaceable> | dot -Tpng &gt; dependencies.png</userinput></screen>

      <figure id="sample-dot-output">
        <title>JHBuild dot 출력 예제</title>
        <screenshot>
          <mediaobject>
            <imageobject>
              <imagedata fileref="figures/jhbuild_sample_dot_output.png" format="PNG"/>
            </imageobject>
          </mediaobject>
        </screenshot>
      </figure>
    </section>

    <section id="command-reference-gui">
      <title>gui</title>

      <para><command>gui</command> 명령은 모듈을 빌드하고 옵션 값을 바꾸는 JHBuild 그래픽 인터페이스를 시작합니다.</para>

      <cmdsynopsis><command>jhbuild gui</command></cmdsynopsis>

      <para>그래픽 인터페이스는 GTK로 표현하므로 추가 지원 라이브러리가 필요합니다.</para>
    </section>

    <section id="command-reference-info">
      <title>info</title>

      <para><command>info</command> 명령은 하나 이상의 모듈 정보를 보여줍니다.</para>

      <cmdsynopsis><command>jhbuild info</command> <arg choice="opt">--installed</arg> <arg choice="opt" rep="repeat">module</arg></cmdsynopsis>

      <para>명령에서는 모듈 이름, 형식, 의존 관계, 의존 패키지, 소스 디렉터리, JHBuild로 설치한 최근 날짜를 나타냅니다. 가능하다면 CVS 저장소나 다운로드 URL에 해당하는 정보도 나타낼 수 있습니다.</para>

      <para>지정한 모듈이 없다면 명령은 모듈셋에 정의한 모든 모듈 정보를 보여줍니다.</para>

      <para><option>--installed</option> 옵션을 선택하면 설치한 패키지 내용만 따로 걸러서 보여줍니다. 실제 jhbuild로 빌드하고 설치한 모듈만 나타냅니다. 출력 내용에서는 시스템 의존 요소는 없습니다.</para>

      <note>
        <simpara><option>--installed</option> 옵션을 하나 이상의 모듈 이름과 함께 지정했다면 해당 설치 모듈(시스템 의존 요소는 제외) 정보만을 출력합니다. 최소한 하나의 모듈 마저도 설치하지 않았다면 1 값을 반환하며 명령을 끝냅니다.</simpara>
      </note>
    </section>

    <section id="command-reference-list">
      <title>list</title>

      <para><command>list</command> 명령은 <command>build</command> 명령이 빌드할 모듈 목록을 확장해서 보여줍니다.</para>

      <cmdsynopsis><command>jhbuild list</command> <arg>-a</arg> <arg>-r</arg> <arg>-s</arg> <arg>--start-at=<replaceable>module</replaceable></arg> <arg>--tags=<replaceable>tags</replaceable></arg> <arg>--ignore-suggests</arg> <arg>--list-optional-modules</arg> <arg rep="repeat">module</arg></cmdsynopsis>

      <para>명령행에 지정한 모듈 이름이 없을 경우, 설정 파일의 <link linkend="cfg-modules">modules</link> 목록을 활용합니다.</para>

      <para><option>--skip</option>, <option>--start-at</option>, <option>--tags</option>, and <option>--ignore-suggests</option> 옵션은 <link linkend="command-reference-build"><command>build</command></link> 명령에서와 동일하게 처리합니다.</para>

      <variablelist>
        <varlistentry>
          <term><option>-a</option>, <option>--all-modules</option></term>
          <listitem>
            <simpara>빌드 의존 관계와 상관 없이 모듈 세트의 모든 모듈을 나열합니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><option>-r</option>, <option>--show-revision</option></term>
          <listitem>
            <simpara>모듈이 브랜치 모음이라면 모듈 이름과 브랜치 이름을 함께 보여줍니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><option>--list-optional-modules</option></term>
          <listitem>
            <simpara>이 옵션은 JHBuild가 무조건 추가 의존 요소를 보여주게합니다.</simpara>
          </listitem>
        </varlistentry>
      </variablelist>
    </section>

    <section id="command-reference-rdepends">
      <title>rdepends</title>

      <para><command>rdepends</command> 명령은 모듈의 역 의존 관계를 나타냅니다.</para>

      <cmdsynopsis><command>jhbuild rdepends</command> <arg>module</arg></cmdsynopsis>

      <variablelist>
        <varlistentry>
          <term><option>--dependencies</option></term>
          <listitem>
            <simpara>모듈의 의존 경로를 나타냅니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><option>--direct</option></term>
          <listitem>
            <simpara>지정 모듈에 따라 직접적 의존 관계를 가진 모듈만 표시하도록 제한합니다.</simpara>
          </listitem>
        </varlistentry>
      </variablelist>
    </section>

    <section id="command-reference-run">
      <title>run</title>

      <para><command>run</command> 명령은 모듈을 빌드할 때 JHBuild에서 활용하는 동일한 환경을 지정 명령이 활용하도록 합니다.</para>

      <cmdsynopsis><command>jhbuild run</command> <arg>--in-builddir</arg> <arg>--in-checkoutdir</arg> <arg choice="plain"><replaceable>program</replaceable></arg> <arg rep="repeat"><replaceable>argument</replaceable></arg></cmdsynopsis>

      <para>그놈을 빌드할 때 JHBuild를 활용할 경우, 이 명령으로 X 시작 스크립트에 활용할 수 있습니다.</para>

      <variablelist>
        <varlistentry>
          <term><option>--in-builddir</option>=<replaceable>module</replaceable></term>
          <listitem>
            <simpara>지정 모듈의 빌드 디렉터리에서 명령을 실행합니다.</simpara>
          </listitem>
        </varlistentry>
      </variablelist>

      <variablelist>
        <varlistentry>
          <term><option>--in-checkoutdir</option>=<replaceable>module</replaceable></term>
          <listitem>
            <simpara>지정 모듈의 소스 디렉터리에서 명령을 실행합니다.</simpara>
          </listitem>
        </varlistentry>
      </variablelist>
    </section>

    <section id="command-reference-sanitycheck">
      <title>sanitycheck</title>

      <para><command>sanitycheck</command> 명령은 빌드 환경이 양호한지 여러번에 걸쳐 검사를 수행합니다.</para>

      <cmdsynopsis><command>jhbuild sanitycheck</command></cmdsynopsis>

      <para>검사 대상 일부는 다음과 같습니다:</para>

      <itemizedlist>
        <listitem>
          <simpara>체크아웃 대상 디렉터리와 설치 대상 디렉터리에 기록할 수 있는가.</simpara>
        </listitem>
        <listitem>
          <simpara>필요한 빌드 도구를 설치했는가.</simpara>
        </listitem>
        <listitem>
          <simpara>보통 쓰는 일부 매크로는 다양한 <command>automake</command> 버전에서 쓸 수 있는 <command>aclocal</command> 명령의 검색 경로에 있습니다.</simpara>
        </listitem>
        <listitem>
          <simpara>XML 카탈로그에는 닥북 DTD와 스타일시트가 있습니다.</simpara>
        </listitem>
      </itemizedlist>
    </section>

    <section id="command-reference-shell">
      <title>shell</title>

      <para><command>shell</command> 명령은 JHBuild가 모듈을 빌드할 때 활용한 바로 그 동일한 환경의 사용자 쉘을 시작합니다.</para>

      <cmdsynopsis><command>jhbuild shell</command></cmdsynopsis>

      <para>이 명령은 다음 명령과 동일합니다:</para>

<screen><prompt>$</prompt> <userinput>jhbuild run $SHELL</userinput></screen>

      <para>쉘을 활성화했다면 <envar>UNDER_JHBUILD</envar> 환경 변수 값이 "true"가 됩니다. jhbuild에서 제어하는 셸임을 나타내도록 셸 프롬프트 개별 설정 여부를 나타낼 때 사용할 수 있습니다. 예를들면 이 환경 변수는 <filename>.bashrc</filename>에 넣으시면 됩니다:</para>

<screen>
	if [ -n "$UNDER_JHBUILD" ]; then
	    PS1="[jhbuild] $PS1"
	fi
      </screen>

      <para>위 코드로, jhbuild 환경임을 쉽게 알 수 있도록 배시 쉘 일반 프롬프트 앞에 <literal>[jhbuild]</literal>를 나타냅니다.</para>
    </section>

    <section id="command-reference-sysdeps">
      <title>sysdeps</title>

      <para><command>sysdeps</command> 명령은 다음 항목을 나타냅니다:</para>

      <orderedlist>
        <listitem>
          <simpara>빌드에 사용한 시스템 패키지 목록. JHBuild는 이 모듈을 빌드하지 않으며, 대신 시스템 패키지를 활용하도록 선택합니다.</simpara>
        </listitem>
        <listitem>
          <simpara>필요 패키지 목록. 패키지 빌드를 시작하려면 시스템에 있어야합니다.</simpara>
        </listitem>
        <listitem>
          <simpara>추가 패키지 목록. 관련 시스템 패키지를 찾을 수 없거나 너무 오래됐을 경우입니다. JHBuild에서 이 모듈을 빌드합니다. <link linkend="cfg-partial-build"><varname>partial_build</varname></link> 옵션을 <constant>False</constant> 값으로 설정하면 추가 패키지를 나타내지 않습니다.</simpara>
        </listitem>
      </orderedlist>

      <cmdsynopsis><command>jhbuild sysdeps</command> <arg>--install</arg></cmdsynopsis>

      <variablelist>
        <varlistentry>
          <term><option>--install</option></term>
          <listitem>
            <simpara>이 옵션은 모듈 세트의 의존 관계에 있는 시스템 패키지를 설치합니다. 배포판에 따라 다릅니다. 시스템 패키지는 가능할 경우 <application>PackageKit</application> 프로그램으로 설치합니다. <systemitem class="osname">Debian</systemitem> 과 <systemitem class="osname">Ubuntu</systemitem>의 경우 <application>APT</application>를 사용합니다. 이 옵션을 사용하려면  <application>apt-file</application> 프로그램을 설치해야합니다.</simpara>
          </listitem>
        </varlistentry>
      </variablelist>

      <example>
        <title><command>sysdeps</command> 예제</title>
<screen><prompt>$</prompt> <userinput>jhbuild sysdeps</userinput>
System installed packages which are new enough:
  speex (speex.pc required=1.2rc1, installed=1.2rc1)
  lcms2 (lcms2.pc required=2.2, installed=2.2)
...
Required packages:
  System installed packages which are too old:
    (none)
  No matching system package installed:
    zlib (zlib.pc required=1.2)
Optional packages: (JHBuild will build the missing packages)
  System installed packages which are too old:
    WebKit (webkitgtk-3.0.pc required=1.5.1, installed=1.4.0)
    ...
  No matching system package installed:
    pulseaudio (libpulse.pc required=2.0)
    ...</screen>
      </example>
    </section>

    <section id="command-reference-tinderbox">
      <title>tinderbox</title>

      <para><command>tinderbox</command> 명령은 <command>build</command> 명령과 비슷하지만, 터미널 출력을 웹사이트에 공개하는데 적합한 HTML 파일로 기록합니다. 모질라 틴더박스 또는 데비안의 buildd와 같은 시스템을 구축했을 때 이 명령을 활용할 수 있습니다.</para>

      <cmdsynopsis><command>jhbuild tinderbox</command> <arg>--autogen</arg> <arg>--clean</arg> <arg>--distclean</arg> <arg>--no-network</arg> <arg>--output=<replaceable>directory</replaceable></arg> <arg rep="repeat">--skip=<replaceable>module</replaceable></arg> <arg>--start-at=<replaceable>module</replaceable></arg> <arg>-D <replaceable>date</replaceable></arg> <arg>-C</arg> <arg>-N</arg> <arg>-f</arg> <arg>--nodeps</arg> <arg rep="repeat">module</arg></cmdsynopsis>

      <para><option>--autogen</option>, <option>--clean</option>, <option>--distclean</option>, <option>--no-network</option>, <option>--skip</option>, <option>--start-at</option>, <option>-D</option>, <option>-C</option>, <option>-N</option>, <option>-f</option>, <option>--nodeps</option> 옵션은 <link linkend="command-reference-build"><command>build</command></link> 명령에서와 동일하게 처리합니다.</para>

      <variablelist>
        <varlistentry>
          <term><option>-o</option>, <option>--output</option>=<replaceable>directory</replaceable></term>
          <listitem>
            <simpara>HTML 파일을 기록할 디렉터리입니다. JHBuild에서는 인덱스 파일(<filename>index.html</filename>)과 각 모듈별 HTML 파일을 만듭니다.</simpara>
          </listitem>
        </varlistentry>
      </variablelist>
    </section>

    <section id="command-reference-uninstall">
      <title>uninstall</title>

      <para><command>uninstall</command> 명령은 하나 이상의 설치 모듈을 제거합니다.</para>

      <cmdsynopsis><command>jhbuild uninstall</command> <arg choice="plain" rep="repeat">module</arg></cmdsynopsis>
    </section>

    <section id="command-reference-update">
      <title>update</title>

      <para><command>update</command> 명령은 <command>build</command> 명령과 비슷하나, 모듈을 빌드하지 않고 다운로드하거나 모듈 소스 코드를 업데이트하는 과정만 진행합니다.</para>

      <cmdsynopsis><command>jhbuild update</command> <arg rep="repeat">--skip=<replaceable>module</replaceable></arg> <arg>--start-at=<replaceable>module</replaceable></arg> <arg>--tags=<replaceable>tags</replaceable></arg> <arg>--ignore-suggests</arg> <arg>-D <replaceable>date</replaceable></arg> <arg rep="repeat">module</arg></cmdsynopsis>

      <para> <option>--skip</option>, <option>--start-at</option>, <option>--tags</option>, <option>--ignore-suggests</option> and <option>-D</option> 옵션은 <link linkend="command-reference-build"><command>build</command></link> 명령에서와 동일하게 처리합니다.</para>
    </section>

    <section id="command-reference-updateone">
      <title>updateone</title>

      <para><command>updateone</command> 명령은 <command>update</command> 명령과 유사하나, 의존 관계에 있는 모듈은 업데이트하지 않습니다. 하나 이상의 모듈을 업데이트할 경우 활용할 수 있습니다.</para>

      <cmdsynopsis><command>jhbuild updateone</command> <arg>-D <replaceable>date</replaceable></arg> <arg choice="plain" rep="repeat">module</arg></cmdsynopsis>

      <para><option>-D</option> 옵션은 <link linkend="command-reference-build"><command>build</command></link> 명령에서와 동일하게 처리합니다.</para>

      <para>최소한 하나의 모듈을 명령행에 지정해야합니다.</para>
    </section>
  </section>

  <section id="config-reference">
    <title>설정 파일 참고</title>

    <para><filename>~/.config/jhbuildrc</filename> 파일은 표준 파이썬 문법을 활용합니다. 이 파일은 실행 파일이며, 이름 공간에 정의한 결과 변수는 JHBuild 동작 방식을 다룹니다. 기본 값은 사용자 설정 파일 실행 전 이름 공간에 우선 들어갑니다.</para>

    <para>부울린 설정값은 다음 예제에서 나타내는 바와 같은 문법으로 설정합니다:</para>

<programlisting>use_local_modulesets = True</programlisting>

    <para>문자열 설정 변수는 다음 예제에서 나타내는 바와 같은 문법으로 설정합니다:</para>

<programlisting>autogenargs = '--disable-static --disable-gtk-doc'</programlisting>

    <para>리스트 설정 변수는 다음 예제에서 나타내는 바와 같은 문법으로 설정합니다:</para>

<programlisting>skip = ['mozilla', 'pulseaudio']</programlisting>

    <para>딕셔너리 설정 변수는 다음 예제에서 나타내는 바와 같은 문법으로 설정합니다:</para>

<programlisting>repos['git.gnome.org'] = 'ssh://username@git.gnome.org/git/'</programlisting>

    <section id="config-reference-variables">
      <title>설정 변수</title>

      <variablelist>
<?dbhtml list-presentation="table"?>
        <varlistentry id="cfg-alwaysautogen">
          <term><varname>alwaysautogen</varname></term>
          <listitem>
            <simpara>부울린 값. <constant>True</constant>로 설정하면 항상 <command>autogen.sh</command> 스크립트를 실행합니다. JHBuild로 전달하는 <option>--autogen</option> 옵션과 동일합니다. 기본값은 <constant>False</constant>입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-autogenargs">
          <term><varname>autogenargs</varname></term>
          <listitem>
            <simpara>모든 모듈의 <command>autogen.sh</command> 스크립트에 전달할 인자 값이 들어있는 문자열. <varname>module_autogenargs</varname> 딕셔너리를 활용하여 일부 모듈에 중복 적용할 수 있습니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-branches">
          <term><varname>branches</varname></term>
          <listitem>
            <simpara>지정 모듈에서 사용할 브랜치를 설정하는 딕셔너리. 모듈 세트에 지정한 브랜치 대신 모듈의 다른 브랜치로 바꾸어 JHBuild로 빌드할 때 활용하면 좋습니다.</simpara>

            <simpara>모듈 버전 관리 시스템에 따라 브랜치 정의가 다릅니다:</simpara>

            <itemizedlist>
              <listitem>
                <simpara>CVS: 리비전. E.g. <literal>'BRANCH-PROJECT-0_8'</literal></simpara>
              </listitem>
              <listitem>
                <simpara>바자르: 모듈 브랜치 URI. E.g. <literal>'http://bzr.example.net/project/gnome-2-28'</literal></simpara>
              </listitem>
              <listitem>
                <simpara>깃: 튜플값. 첫번째 값은 추가 저장소 URI (또는 None 값), 두번째 값은 브랜치 이름. E.g. <literal>('git://git.example.net/project', 'gnome-2-28')</literal></simpara>

                <example>
                  <title>간단한 예제</title>
<programlisting>branches['modulename'] = (None, 'branchname')</programlisting>
                </example>
              </listitem>
              <listitem>
                <simpara>서브버전: 모듈 브랜치 URI. E.g. <literal>'svn://svn.example.net/project/gnome-2-28'</literal></simpara>
              </listitem>
            </itemizedlist>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-builddir-pattern">
          <term><varname>builddir_pattern</varname></term>
          <listitem>
            <simpara><function>printf</function> 방식의 형식 패턴을 지녔으며 빌드 디렉터리 이름을 만들 때 씁니다. 소스 트리와 빌드 트리를 구분할 때만 씁니다. 형식 문자열에서 <literal>%s</literal> 부분은 <varname>checkoutdir</varname> 변수 값으로 바뀝니다. 기본값은 <literal>'%s'</literal> 입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-buildroot">
          <term><varname>buildroot</varname></term>
          <listitem>
            <simpara>빌드 트리를 둘 상위 디렉터리를 지정하는 문자열. 기본값은 <filename>~/.cache/jhbuild/build</filename> 입니다. <constant>None</constant>으로 지정하면 소스 트리에서 빌드를 진행합니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-buildscript">
          <term><varname>buildscript</varname></term>
          <listitem>
            <simpara>어떤 빌드 스크립트를 사용할 지 지정하는 문자열. 기본값  <literal>terminal</literal>로 그대로 두시는게 좋습니다. 특히, <literal>gtk</literal>로 설정하지 마십시오.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-build-policy">
          <term><varname>build_policy</varname></term>
          <listitem>
            <simpara>어떤 모듈을 빌드할 지 지정하는 문자열. 쓸 수 있는 옵션은, 모든 모듈을 빌드하는 <literal>all</literal>, 최근 바뀐 모듈만 빌드하는 <literal>updated</literal>, 모듈 그 자체가 바뀌거나 의존 요소만 바뀌었을 경우 해당 모듈 또는 의존 요소 모듈만 빌드하는 <literal>updated-deps</literal>입니다. 기본값은 <literal>updated-deps</literal>입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-checkoutroot">
          <term><varname>checkoutroot</varname></term>
          <listitem>
            <simpara>소스트리의 패키지를 해체할 디렉터리를 지정하는 문자열입니다. <varname>buildroot</varname> 변수 값을 설정하기 전에는 이 디렉터리에도 빌드합니다. 기본값은 <filename>~/checkout/gnome</filename> 입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-checkout-mode">
          <term><varname>checkout_mode</varname></term>
          <listitem>
            <simpara>A string specifying how the checkout is performed for
              directories in version control. Defaults to
              <literal>update</literal>. This can be set per module using
              <varname>module_checkout_mode</varname>. Possible values are
              <literal>update</literal> (update checkout directory),
              <literal>clobber</literal> (wipe out directory before checking out
              the sources), <literal>export</literal> (wipe out directory then
              create a tarball of the sources containing any patches) and
              <literal>copy</literal> (checkout in a directory different from
              the one it will build).</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-cmakeargs">
          <term><varname>cmakeargs</varname></term>
          <listitem>
            <simpara>모든 모듈에 대해 <command>cmake</command> 명령을 실행할 때 전달할 인자 값이 들어있는 문자열. <varname>module_cmakeargs</varname> 딕셔너리를 활용하여 일부 모듈에 중복 적용할 수 있습니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-copy-dir">
          <term><varname>copy_dir</varname></term>
          <listitem>
            <simpara>copy <link linkend="cfg-checkout-mode"> <varname>checkout_mode</varname></link> 상태일 때, 복사 대상 디렉터리를 지정하는 문자열. 기본값은 체크아웃 디렉터리입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-export-dir">
          <term>
            <varname>export_dir</varname>
          </term>
          <listitem>
            <simpara>A string specifying the directory to export to, if the export
              <link linkend="cfg-checkout-mode">
              <varname>checkout_mode</varname></link> is in use. Defaults to the
              checkout directory.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-cvs-program">
          <term><varname>cvs_program</varname></term>
          <listitem>
            <simpara>CVS 기능을 수행하는 프로그램을 지정하는 문자열. <literal>git-cvsimport</literal>, <literal>cvs</literal> 둘 중 하나가 될 수 있습니다. 기본값은 <literal>cvs</literal> 입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-disable-Werror">
          <term><varname>disable_Werror</varname></term>
          <listitem>
            <simpara>automake 빌드에 <literal>--disable-Werror</literal> 옵션을 전달하는 부울린 값(기본값 <literal>True</literal>). 대부분 패키지에서는 치명적인 컴파일러 경고를 끄는 방법으로 이 플래그를 사용합니다. <literal>True</literal> 값은 다른 사람의 모듈에서 빌드 실패로 않은 최신 버전을 가져오겠다...는 의미에서 타당한 기본값입니다. <literal>False</literal> 값으로의 설정은 연속 통합 시스템 또는 테스트 시스템의 일부로서 jhbuild를 사용할 때 적절합니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-dvcs-mirror-dir">
          <term><varname>dvcs_mirror_dir</varname></term>
          <listitem>
            <simpara>로컬 미러 디렉터리를 지정하는 문자열. JHBuild에서는 지정 디렉터리에 저장소 로컬 미러를 만듭니다. 이 미러는 다중 저장소 그룹에서 시공간을 절약하는 용도로 공유할 수 있는데, 로컬 클론에 하드링크를 사용하기 때문입니다. <command>update</command> 명령과 <command>updateone</command> 명령은 미러를 만들고 온라인 저장소에서 새 커밋을 가져옵니다. 이 옵션은 깃과 바자르 저장소에 대해서만 지원합니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="exit-on-error">
          <term><varname>exit_on_error</varname></term>
          <listitem>
            <simpara>모듈 빌드에 실패했을 때 즉시 종료 여부를 지정하는 부울린 값. 이후 다른 모듈 빌드시 실패를 막으려는 목적으로(도) 비대화식 모드에서 근본적으로 쓸만합니다. <constant>True</constant> 값 설정은 <option>--exit-on-error</option> 옵션 전달과 동일합니다. 기본값은 <constant>False</constant> 입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-extra-prefixes">
          <term><varname>extra_prefixes</varname></term>
          <listitem>
            <simpara>추가 선행 경로목록을 순서대로 지정하는 문자열 리스트입니다. JHBuild에서는 <varname>prefix</varname> 변수 값에 따라 여러 환경 변수(<envar>LD_LIBRARY_PATH</envar>, <envar>PKG_CONFIG_PATH</envar>, <envar>XDG_DATA_DIRS</envar>)를 설정합니다.  <varname>extra_prefixes</varname> 변수에 디렉터리 값을 추가하면 이 선행 지정 경로 마찬가지로 JHBuild <varname>prefix</varname> 값보단 후순위로 들어가긴 하지만 시스템 디렉터리보다는 우선합니다. 이 변수값은 <filename>/usr/local</filename> 디렉터리에 프로그램을 시스템에 설치할 경우 이 디렉터리를 변수가 값으로 설정하나, 이렇게 하지 않은 이상 기본적으로 값을 넣지 않습니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-help-website">
          <term><varname>help_website</varname></term>
          <listitem>
            <simpara>도움말 웹사이트 이름과 URL을 지정하는 튜플. 실패한 모듈에 대한 틴더박스 html의 내용을 웹사이트로 나타냅니다. URL에서 <varname>%(module)s</varname>은 모듈 이름입니다. 비활성화하려면 <varname>help_website</varname> 값을 <literal>None</literal>으로 설정합니다. 기본값은 <literal>('Gnome Live!', 'http://live.gnome.org/JhbuildIssues/%(module)s')</literal> 입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-installprog">
          <term><varname>installprog</varname></term>
          <listitem>
            <simpara><literal>/usr/bin/install</literal> 프로그램 대신 사용할 프로그램을 지정하는 문자열.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-ignore-suggests">
          <term><varname>ignore_suggests</varname></term>
          <listitem>
            <simpara>의존성 트리를 계산할 때 약 의존성 무시 여부를 지정하는 부울린 값. 기본값은 <constant>False</constant> 입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-interact">
          <term><varname>interact</varname></term>
          <listitem>
            <simpara>사용자와 상호 대화 진행 여부를 지정하는 부울린 값. <constant>False</constant> 값으로의 설정은 <option>--no-interact</option> 옵션 전달과 동일합니다. 기본값은 <constant>True</constant> 입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-makeargs">
          <term><varname>makeargs</varname></term>
          <listitem>
            <simpara><command>make</command> 명령에 전달할 추가 인자 값 목록 문자열입니다. JHBuild에서는 가용 CPU 코어 수에 따라 자동으로 병렬 실행 옵션(<option>-j</option>)을 붙입니다. 기본값은 <literal>''</literal>입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-makecheck">
          <term><varname>makecheck</varname></term>
          <listitem>
            <simpara><command>make</command> 명령 실행 후 <command>make check</command> 명령을 실행 여부를 지정하는 부울린 값. 기본 값은 <constant>False</constant> 입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-makecheck-advistory">
          <term><varname>makecheck_advisory</varname></term>
          <listitem>
            <simpara><command>make check</command> 명령 실행시 문제점 보고 용도로만 동작하고 빌드 실패를 일으키게 하지 못하도록 할 지 여부를 정하는 부울린 값. 기본값은 <constant>False</constant> 입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-makeclean">
          <term><varname>makeclean</varname></term>
          <listitem>
            <simpara><command>make</command> 명령 실행 전 <command>make clean</command> 명령 실행 여부를 지정하는 부울린 값. 기본값은 <constant>False</constant> 입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-makedist">
          <term><varname>makedist</varname></term>
          <listitem>
            <simpara><command>make</command> 명령 실행 후 <command>make dist</command> 명령 실행 여부를 지정하는 부울린 값. 기본값은 <constant>False</constant> 입니다. 이 설정은 <option>--dist</option> 옵션 전달과 동일합니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-makedistcheck">
          <term><varname>makedistcheck</varname></term>
          <listitem>
            <simpara><command>make</command> 명령 실행 후 <command>make distcheck</command> 명령 실행 여부를 지정하는 부울린 값. 기본값은 <constant>False</constant> 입니다. 이 설정은 <option>--distcheck</option> 옵션 전달과 동일합니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-mesonargs">
          <term><varname>mesonargs</varname></term>
          <listitem>
            <simpara>모든 모듈에 대해 <command>meson</command> 실행시 전달하는 인지 값이 들어있는 문자열. <varname>module_mesonargs</varname> 딕셔너리를 활용하여 일부 모듈에 중복 적용할 수 있습니다. 기본값은 <literal>''</literal> 입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-module-autogenargs">
          <term><varname>module_autogenargs</varname></term>
          <listitem>
            <simpara><command>autogen.sh</command> 스크립트에 전달할 인자값을 모듈 이름 별로 문자열로 지정한 딕셔너리. <varname>module_autogenargs</varname> 딕셔너리의 설정 값은 <varname>autogenargs</varname> 전역 설정 대신 사용합니다. 일부 모듈이 딕셔너리에 없으면 <varname>autogenargs</varname> 전역 설정을 사용합니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-module-checkout-mode">
          <term><varname>module_checkout_mode</varname></term>
          <listitem>
            <simpara>모듈에 따라 체크아웃 모드를 지정하는 딕셔너리. <varname>checkout_mode</varname> 전역 설정을 대신합니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-module-cmakeargs">
          <term><varname>module_cmakeargs</varname></term>
          <listitem>
            <simpara><command>cmake</command> 명령으로 전달할 인자값을 모듈 이름 별로 문자열로 지정한 딕셔너리. <varname>module_cmakeargs</varname> 변수의 설정은 <varname>cmakeargs</varname> 전역 설정 대신 사용합니다. 일부 모듈이 딕셔너리에 없으면, <varname>cmakeargs</varname> 전역 설정을 사용합니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-module-makeargs">
          <term><varname>module_makeargs</varname></term>
          <listitem>
            <simpara><command>make</command> 명령으로 전달할 인자값을 모듈 이름 별로 문자열로 지정한 딕셔너리. <varname>module_makeargs</varname> 변수의 설정은 <varname>makeargs</varname> 전역 설정 대신 사용합니다. 일부 모듈이 딕셔너리에 없으면, <varname>makeargs</varname> 전역 설정을 사용합니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-module-makecheck">
          <term><varname>module_makecheck</varname></term>
          <listitem>
            <simpara><command>make</command> 명령 실행 후 <command>make check</command> 명령 실행 여부를 모듈 이름 별로 부울린 값으로 지정한 딕셔너리. <varname>module_makecheck</varname>의 설정은 <varname>makecheck</varname> 값 대신 사용합니다. 일부 모듈이 딕셔너리에 없으면, <varname>makecheck</varname> 전역 설정을 사용합니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-module-mesonargs">
          <term><varname>module_mesonargs</varname></term>
          <listitem>
            <simpara><command>meson</command> 명령으로 전달할 인자값을 모듈 이름별로 문자열로 지정한 딕셔너리. <varname>module_mesonargs</varname> 설정은 <varname>mesonargs</varname> 전역 설정 대신 사용합니다. 일부 모듈이 딕셔너리에 없으면, <varname>mesonargs</varname> 전역 설정을 사용합니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-module-ninjaargs">
          <term><varname>module_ninjaargs</varname></term>
          <listitem>
            <simpara><command>ninja</command> 명령으로 전달할 인자값을 모듈 이름별로 문자열로 지정한 딕셔너리. <varname>module_ninjaargs</varname> 설정은 <varname>ninjaargs</varname> 전역 설정 대신 사용합니다. 일부 모듈이 딕셔너리에 없으면, <varname>ninjaargs</varname> 전역 설정을 사용합니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-module-nopoison">
          <term><varname>module_nopoison</varname></term>
          <listitem>
            <simpara>모듈 이름별로 부울린 값으로 지정하는 딕셔너리. <constant>True</constant>로 설정하면, JHBuild에서는 지정 모듈이 빌드에 실패하더라도 의존 모듈 빌드를 시도합니다. <varname>module_nopoison</varname> 설정은 <varname>nopoison</varname> 값을 대신합니다. 일부 모듈이 딕셔너리에 없으면, <varname>nopoison</varname> 전역 설정을 사용합니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-module-extra-env">
          <term><varname>module_extra_env</varname></term>
          <listitem>
            <simpara>모듈에 대해 명령을 실행할 때 추가로 전달할 환경 변수를 모듈 이름별로 딕셔너리로 지정하는 딕셔너리입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-module-static-analyzer">
          <term><varname>module_static_analyzer</varname></term>
          <listitem>
            <simpara>모듈을 빌드할 때 정적 분석을 수행할 지 여부를 모듈 이름별로 부울린 값으로 설정하는 딕셔너리. 이 설정은 <varname>static_analyzer</varname> 전역 설정 옵션을 대신할 수 있습니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-modules">
          <term><varname>modules</varname></term>
          <listitem>
            <simpara>빌드할 모듈을 지정하는 문자열 목록입니다. 모듈 목록은 실제로 <link linkend="command-reference-buildone"> <command>buildone</command></link> 명령을 사용하기까지 모든 의존 요소를 넣으려 재귀적으로 확장합니다. 기본 값은 <literal>['meta-gnome-desktop']</literal> 입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-moduleset">
          <term><varname>moduleset</varname></term>
          <listitem>
            <simpara>활용할 모듈 세트 이름을 지정하는 문자열, 문자열 목록입니다. (경로와 확장을 뺀) JHBuild에 들어간 모듈 세트의 파일 이름이거나 모듈 세트를 외부에서 관리하는 전체 HTTP URL일 수 있습니다. HTTP URL 모듈 세트는 로컬에 캐싱할 수 있습니다. 동일한 이름을 지닌 모듈이 모듈 세트에 한번 이상 나타나면 가장 마지막에 나타난 모듈을 우선 활용합니다. JHBuild에서 제공하는 모듈 세트는 현재 그놈 개발 출시 주기에 맞춰 업데이트합니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-modulesets-dir">
          <term><varname>modulesets_dir</varname></term>
          <listitem>
            <simpara>활용할 모듈 세트가 들어있는 디렉터리를 지정하는 문자열. 기본 값은 JHBuild 소스가 들어있는 <filename>modulesets/</filename> 디렉터리입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-nice-build">
          <term><varname>nice_build</varname></term>
          <listitem>
            <simpara>리눅스에서는 <constant>SCHED_IDLE</constant> 우선 순위에 따라, 유닉스에서는 <command>nice</command> 명령 기반으로 빌드를 실행합니다. 빌드 처리량에는 미미한 영향을 미치나, 병렬 빌드에 있너서는 어마어마한 데스크톱 반응성의 개선을 볼 수 있습니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-ninjaargs">
          <term><varname>ninjaargs</varname></term>
          <listitem>
            <simpara><command>ninja</command> 명령에 전달할 추가 인자 값 목록 문자열입니다. 기본값은 <literal>''</literal>입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-nobuild">
          <term><varname>nobuild</varname></term>
          <listitem>
            <simpara>부울린 값. <constant>True</constant>로 설정하면 모듈을 빌드하지 않지만 소스를 다운로드하고 패키지를 해제합니다. 기본값은 <constant>False</constant> 입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-nonetwork">
          <term><varname>nonetwork</varname></term>
          <listitem>
            <simpara>네트워크 접근 여부를 지정하는 부울린 값. CVS 모듈을 체크아웃, 업데이트하거나, 타르볼 다운로드, 모듈 세트 업데이트에 영향을 줍니다. <constant>True</constant> 값 설정은 <option>--no-network</option> 옵션 전달과 동일합니다. 기본값은 <constant>False</constant> 입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-nonotify">
          <term><varname>nonotify</varname></term>
          <listitem>
            <simpara>알림 데몬을 활용한 알림 동작 여부를 지정하는 부울린 값. <constant>False</constant>로 설정하면 알림을 울립니다. 기본값은  <constant>True</constant> 입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-nopoison">
          <term><varname>nopoison</varname></term>
          <listitem>
            <simpara>부울린 값. <constant>True</constant>로 설정하면 JHBuild에서 하나 이상의 모듈 의존 요소 빌드에 실패했다 하더라도 모듈 빌드를 시도합니다. 이 옵션은 <option>--no-poison</option> 인자와 동일합니다. 기본값은 <constant>False</constant> 입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-notrayicon">
          <term><varname>notrayicon</varname></term>
          <listitem>
            <simpara>제니티로 시스템 트레이에 아이콘을 표시할 지 여부를 지정하는 부울린 값. <constant>False</constant> 값을 설정하면 아이콘이 나타납니다. 기본값은 <constant>True</constant> 입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-noxvfb">
          <term><varname>noxvfb</varname></term>
          <listitem>
            <simpara>부울린 값. <constant>True</constant>로 설정하면 <command>Xvfb</command> 대신 실제 X 서버에서 그래픽 테스트를 진행합니다. 이 옵션은 <option>--no-xvfb</option> 인자 전달과 동일합니다. 기본값은 <constant>False</constant> 입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-partial-build">
          <term><varname>partial_build</varname></term>
          <listitem>
            <simpara>부울린 값. <constant>True</constant>로 설정하면 JHBuild에서 관련 시스템 패키지를 설치했고 버전 조건이 충분할 경우 의존 관계 모듈을 빌드하지 않습니다. 기본값은 <constant>True</constant> 입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-prefix">
          <term><varname>prefix</varname></term>
          <listitem>
            <simpara>모듈 설치 경로를 지정하는 문자열입니다. <varname>prefix</varname>는 절대 경로여야합니다. 이 디렉터리에 기록할 수 있어야합니다. 기본 값은 <literal>'~/jhbuild/install/'</literal> 입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-pretty-print">
          <term><varname>pretty_print</varname></term>
          <listitem>
            <simpara>하위 프로세스 출력을 깔끔하게 다듬어 보여줄지 여부를 설정하는 부울린 값. CVS 출력에서만 이쁜 출력 기능을 지원합니다. 이쁜 출력 기능에 문제가 있을 경우 끄십시오. 기본값은 <constant>True</constant> 입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-print-command-pattern">
          <term><varname>print_command_pattern</varname></term>
          <listitem>
            <simpara>JHBuild에서 명령을 실행하기 전에 보여줄 문자열. 문자열에서 <varname>%(command)s</varname>는 실행할 명령 문자열로 바뀝니다. <varname>%(cwd)s</varname>는 현재 작업 디렉터리로 바뀝니다. 기본값은 <literal>'%(command)s'</literal> 입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-progress-bar">
          <term><varname>progress_bar</varname></term>
          <listitem>
            <simpara><link linkend="cfg-quiet-mode">quiet mode</link>에서 진행 표시줄 표시 여부를 지정하는 부울린 값. 기본값은 <literal>True</literal> 입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-quiet-mode">
          <term><varname>quiet_mode</varname></term>
          <listitem>
            <simpara>부울린 값. <constant>True</constant> 값으로 설정하면 실행 명령 출력을 끕니다. 기본값은 <constant>False</constant> 입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-repos">
          <term><varname>repos</varname></term>
          <listitem>
            <simpara>개별 저장소의 대체 저장소 위치를 지정하는 딕셔너리. 이 설정 변수는 모듈 개발자에게 쓸모있습니다. 기본적으로 JHBuild에서는 익명 저장소 위치로 저장소에서 코드를 체크아웃합니다. 딕셔너리 키는 단축 저장소 이름이며, 값은 대체 저장소 위치 문자열입니다. 예를 들면:</simpara>

<programlisting>repos['git.gnome.org'] = 'ssh://username@git.gnome.org/git/'</programlisting>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-skip">
          <term><varname>skip</varname></term>
          <listitem>
            <simpara>건너뛸 모듈의 리스트. 이 <option>--skip</option> 명령행 옵션은 목록 원소를 확장합니다. 이 목록은 기본적으로 비어있습니다. 목록에 <literal>'*'</literal> 특수값이 들어있다면, JHBuild에서는 <varname>modules</varname> 변수에 직접 언급하지 않아도 모든 모듈을 건너뜁니다. 암시적 의존성 없이 모듈을 빌드하려 할 경우 쓸만한 변수입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-static-analyzer">
          <term><varname>static_analyzer</varname></term>
          <listitem>
            <simpara>부울린 값. <constant>True</constant>로 설정하면 빌드하는 각각의 모듈에 대해 정적 분석 도구를 실행합니다. 기본값은 <constant>False</constant> 입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-static-analyzer-outputdir">
          <term><varname>static_analyzer_outputdir</varname></term>
          <listitem>
            <simpara>(<varname>static_analyzer</varname> 값이 <constant>True</constant>일 경우)정적 분석 보고서를 저장할 루트 디렉터리입니다. 기본값은 <filename>/tmp/jhbuild_static_analyzer</filename> 입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-static-analyzer-template">
          <term><varname>static_analyzer_template</varname></term>
          <listitem>
            <simpara>정적 분석기의 명령 양식입니다. <varname>outputdir</varname> 매개 변수(<varname>static_analyzer_outputdir</varname> 설정 변수값)와 <varname>module</varname> 매개 변수(현재 빌드할 모듈 이름)를 <function>printf</function> 함수처럼 나누어 지니고 있습니다. 명령 결과는 모듈을 빌드할 때 <command>make</command> 명령의 prefix 값으로 사용할 수 있습니다. 기본 값은 <command>scan-build</command> 입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-sticky-date">
          <term><varname>sticky_date</varname></term>
          <listitem>
            <simpara>이 문자열 값을 설정했으며 버전 관리 시스템에서 지원할 경우 JHBuild에서 빌드를 시작하기 전 소스 트리를 지정 날짜로 업데이트합니다. ISO 날짜 형식(<literal>'<replaceable>yyyy</replaceable>-<replaceable>mm</replaceable>-<replaceable>dd</replaceable>'</literal>)이 필요합니다. 기본값은 <constant>None</constant> 입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-svn-program">
          <term><varname>svn_program</varname></term>
          <listitem>
            <simpara>서브버전 기능을 지원하는 프로그램을 지정하는 문자열. <literal>svn</literal>, <literal>git-svn</literal>, <literal>bzr</literal> 값을 설정할 수 있습니다. 기본값은 <literal>svn</literal> 입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-system-libdirs">
          <term><varname>system_libdirs</varname></term>
          <listitem>
            <simpara>시스템 라이브러리 경로를 지정하는 문자열의 리스트. <envar>PKG_CONFIG_PATH</envar>와 같은 일부 환경 변수의 기본 값을 설정할 때 씁니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-tarballdir">
          <term><varname>tarballdir</varname></term>
          <listitem>
            <simpara>이 변수에 문자열을 지정하면, 타르볼을 <varname>checkoutroot</varname> 대신 지정 디렉터리로 다운로드합니다. 여러 JHBuild 환경에서 또는 주기적으로 <varname>checkoutroot</varname> 위치를 비우고 대역폭 사용량을 줄이려 할 경우, 이 설정 값을 용이하게 활용할 수 있습니다. 기본값은 <literal>'~/.cache/jhbuild/downloads'</literal> 입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-tinderbox-outputdir">
          <term><varname>tinderbox_outputdir</varname></term>
          <listitem>
            <simpara><command>jhbuild tinderbox</command> 출력을 저장할 디렉터리를 지정하는 문자열. <option>--output</option> 옵션이 이 문자열 값을 대신할 수 있습니다. 기본값은 <constant>None</constant> 이기에, 명령행 옵션을 사용하거나 이 변수 값을 설정 파일에 설정해야 합니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-trycheckout">
          <term><varname>trycheckout</varname></term>
          <listitem>
            <simpara>부울린 값. <constant>True</constant>로 설정하면 1) <command>autogen.sh</command> 스크립트를 다시 실행하고, 2) 버전 관리 시스템에서 모듈 새 버전을 체크아웃 하는 방식으로 JHBuild에서 실패 상황을 자동으로 만회 시도합니다. 이 설정은 <option>--try-checkout</option> 옵션 전달과 동일합니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-use-local-modulesets">
          <term><varname>use_local_modulesets</varname></term>
          <listitem>
            <simpara>JHBuild 소스 코드를 따라 체크아웃한 모듈 세트의 사용 여부를 지정하는 부울린 값. 그놈 버전 관리 시스템에서 실시간으로 다운로드하는 동작을 대신합니다. 기본값은 <constant>False</constant> 입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-xvfbargs">
          <term><varname>xvfbargs</varname></term>
          <listitem>
            <simpara>그래픽 테스트를 실행할 경우 <command>Xvfb</command>에 전달할 인자 값 목록 문자열입니다.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry id="cfg-conditions">
          <term><varname>conditions</varname></term>
          <listitem>
            <simpara>빌드할 모듈과 빌드할 때 사용할 옵션에 영향을 줄 조건(문자열) 집합입니다. 설정을 바꾸려 할 경우 리스트를 수정할 때 <literal>conditions.add()</literal> 함수와 <literal>conditions.discard()</literal> 함수를 사용해야합니다.</simpara>
            <simpara>기본 조건 세트는 운영체제에 따라 다르게 결정하지만 <option>--conditions=</option> 명령행 인자를 사용하여 수정할 수 있습니다. jhbuildrc에 <option>--conditions</option> 옵션을 넣었다면 바꾼 설정이 보이므로, 세트의 현재 값에 기반하여 다른 변수도 보일 수 있겠지만, jhbuildrc에서 설정을 바꾸고 난 후면 <option>--conditions</option> 설정이 다시 적용됩니다.</simpara>
          </listitem>
        </varlistentry>
      </variablelist>
    </section>

    <section id="config-reference-other">
      <title>기타 설정 파일 구조</title>

      <para>위 변수에 덧붙여 설정 파일을 설정할 수 있는 다른 설정도 있습니다:</para>

      <variablelist>
        <varlistentry id="cfg-os-environ">
          <term><varname>os.environ</varname></term>
          <listitem>
            <para>환경을 나타내는 딕셔너리. 이 환경 변수 값은 JHBuild 배포 프로세스에 전달합니다.</para>

            <para><envar>CPPFLAGS</envar>, <envar>CFLAGS</envar>, <envar>INSTALL</envar>, <envar>LDFLAGS</envar> 과 같이 영향도가 높은 환경 변수도 있습니다. 예를 들면:</para>

<programlisting>os.environ['CFLAGS'] = '-O0 -g'</programlisting>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><function>addpath</function>(<parameter>envvar</parameter>, <parameter>pathname</parameter>)</term>
          <listitem>
            <para>이 코드는 <envar>PATH</envar> 환경 변수에 디렉터리를 추가합니다. 환경 변수가 완전히 비어있을 경우 <function>addpath</function>가 이 경우를 제대로 다룹니다(환경 변수 앞 뒤 어딘가에 콜론이 남아있으면 예상치 못한 결과를 가져올 수 있습니다).</para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><function>prependpath</function>(<parameter>envvar</parameter>, <parameter>pathname</parameter>)</term>
          <listitem>
            <para>설정 파일을 처리하고 나면, JHBuild에서 <varname>prefix</varname> 와 같은 변수를 기반으로 일부 경로를 대체합니다(예: <envar>PATH</envar>에 <literal>$prefix/bin</literal> 추가)</para>

            <para><function>prependpath</function> 함수는 <function>addpath</function> 처럼 동작하나 JHBuild에서 환경을 바꾸고 나서 환경 변수가 바뀌고 난 경우는 제외합니다.</para>
          </listitem>
        </varlistentry>
      </variablelist>
    </section>
  </section>

  <section id="moduleset-syntax">
    <title>모듈 세트 파일 문법</title>

    <para>JHBuild는 모듈간 의존성을 설명할 때 XML 파일을 활용합니다. RELAX-NG 스키마와 문서 형 정의는 <filename>modulesets/</filename> 디렉터리에 있습니다. RELAX-NG 스키마는 이맥스의 <literal>nxml-mode</literal>로 모듈 세트 파일을 편집할 때 사용합니다.</para>

    <para>모듈 세트 파일의 최정점에 있는 요소는 <sgmltag class="element">moduleset</sgmltag> 요소입니다. 어떤 XML 이름 공간도 사용하지 않습니다. 최상단 바로 아래 요소로는 모듈 소스, 지정 설정, 모듈 정의 형식이 따라옵니다.</para>

    <para>moduleset 파일의 내용은 경우에 따라 조건에 따른 내용을 감싸는 &lt;if&gt; 태그를 사용한 부분이 들어있을 수 있습니다.현재 &lt;if condition-set='cond'&gt; 또는 &lt;if condition-unset='cond'&gt; 를사용하여 일부 조건 플래그를 설정했는 지에 따라서만 포함 여부를 단정할 수 있습니다. 조건은 운영체제 기반으로 기본 설정이지만, jhbuildrc에서 <varname>conditions</varname> 변수를 쓰거나 <command>--conditions=</command> 명령행 인자 값을 넘겨 반영할 수 있습니다.</para>

    <section id="moduleset-syntax-sources">
      <title>모듈 소스</title>

      <para>모든 모듈에 대해 완전한 위치를 보여주기보단 모듈 세트에서 "모듈 소스"를 보여주며, 모듈 정의에서 이름으로 참조합니다. 모듈 세트 여러 군데에 있는 중복 정보를 줄이듯, 해당 모듈의 대체 소스를 사용자가 쉽게 지정할 수 있습니다(CVS와 서브버전의 경우 개발자, 사용자에게 다른 저장소 접근 방식을 제공하는게 일반적입니다).</para>

      <para><sgmltag class="element">repository</sgmltag> 요소에서는 모든 저장소 형식을 지정합니다. <sgmltag class="element">branch</sgmltag> 요소에서는 추가 설정을 지정할 때 모듈 정의 내에서 사용합니다.</para>

<programlisting>
&lt;repository name="<replaceable>name</replaceable>"
  type="<replaceable>type</replaceable>"
  [ default="<replaceable>default</replaceable>" ]
  [ password="<replaceable>password</replaceable>" ]
  [ cvsroot="<replaceable>cvsroot</replaceable>" ]
  [ archive="<replaceable>archive</replaceable>" ]
  [ href="<replaceable>href</replaceable>" ]
  [ server="<replaceable>server</replaceable>" ]
  [ database="<replaceable>database</replaceable>" ]
  [ defbranch="<replaceable>defbranch</replaceable>" ]
  [ trunk-template="<replaceable>trunk-template</replaceable>" ]
  [ branches-template="<replaceable>branches-template</replaceable>" ]
  [ tags-template="<replaceable>tags-template</replaceable>" ]
  [ developer-href-example="<replaceable>developer-href-example</replaceable>" ] /&gt;
</programlisting>

      <para><sgmltag class="attribute">name</sgmltag> 속성은 저장소 유일 식별자를 지정합니다.</para>

      <para><sgmltag class="attribute">default</sgmltag> 속성은 저장소가 모듈세트의 기본 소스인지 여부를 지정합니다.</para>

      <para><sgmltag class="attribute">type</sgmltag> 속성은 저장소 형식을 지정합니다. <literal>bzr</literal>, <literal>cvs</literal>, <literal>darcs</literal>, <literal>fossil</literal>, <literal>git</literal>, <literal>hg</literal>, <literal>mnt</literal>, <literal>svn</literal>, <literal>tarball</literal> 중 하나가 될 수 있습니다. <sgmltag class="attribute">type</sgmltag>과 <sgmltag class="element">branch</sgmltag> 모두에 따라 다른 속성을 모듈 정의 내에서 사용하기도 합니다. 아래 저장소 형식 하위 섹션에서 해당 속성의 활용을 설명하겠습니다.</para>

      <para><sgmltag class="attribute">developer-href-example</sgmltag> 속성은 개발자가 사용하는 저장소의 URL 형식을 지정합니다. 정보 제공용일 뿐입니다.</para>

      <para><sgmltag class="element">branch</sgmltag> 요소는 모듈 정의내에서 사용합니다.</para>

<programlisting>
&lt;branch
  [ repo="<replaceable>repository</replaceable>" ]
  [ module="<replaceable>module name</replaceable>" ]
  [ checkoutdir="<replaceable>checkoutdir</replaceable>" ]
  [ revision="<replaceable>revision</replaceable>" ]
  [ tag="<replaceable>tag</replaceable>" ]
  [ update-new-dirs="<replaceable>update-new-dirs</replaceable>" ]
  [ override-checkoutdir="<replaceable>override-checkoutdir</replaceable>" ]
  [ subdir="<replaceable>subdir</replaceable>" ]
  [ branch="<replaceable>branch</replaceable>" ]
  [ version="<replaceable>version</replaceable>" ]
  [ size="<replaceable>size</replaceable>" ]
  [ source-subdir="<replaceable>source-subdir</replaceable>" ]
  [ hash="<replaceable>hash</replaceable>" ]/&gt;
</programlisting>

      <para>모든 속성은 타당한 기본 값을 가지고 있으며 모듈과 저장소 정의에 따릅니다. 일반 속성의 자세한 설명은 아래에 있습니다.</para>

      <para><sgmltag class="attribute">repo</sgmltag> 속성은 기본이 아닌 저장소 이름을 지정합니다.</para>

      <para><sgmltag class="attribute">module</sgmltag> 속성은 저장소에서 가져올 모듈 이름을 정의합니다. 기본 값은 모듈 ID 입니다.</para>

      <para><sgmltag class="attribute">checkoutdir</sgmltag> 속성은 소스트리를 가져올 디렉터리 이름을 지정합니다. 기본값은 모듈 ID 입니다.</para>

      <para>다른 속성은 아래에 설명하도록 하겠습니다</para>

      <section id="moduleset-syntax-sources-bzr">
        <title>Bazaar</title>

        <para>이 저장소 형식은 바자르 저장소 성격을 정의합니다. 바자르 1.16 이상 사용을 추천합니다.</para>

<programlisting>
&lt;repository type="bzr" name="launchpad.net"
      href="lp:"/&gt;
        </programlisting>

        <para>추가 속성으로 <sgmltag class="attribute">trunk-template</sgmltag> (기본값 <literal>"%(module)s"</literal>)과 <sgmltag class="attribute">branches-template</sgmltag> (기본값 <literal>"%(module)s/%(branch)s</literal>")이 있습니다. 이 속성은 URL을 구성하는 템플릿을 지정합니다. 모듈 정의에서 <sgmltag class="element">branch</sgmltag> 요소는 <sgmltag class="attribute">branch</sgmltag>속성과 <sgmltag class="attribute">user</sgmltag>속성을 지정할 수 있습니다. 이 값은 템플릿으로 따로 둘 수 있습니다. 모두를 지정하면 <sgmltag class="attribute">branches-template</sgmltag> 을 사용하며, 그렇지 않으면 <sgmltag class="attribute">trunk-template</sgmltag>을 사용합니다. 이 방식으로 개인 브랜치에서 모듈을 빌드하거나 비표준 레이아웃을 가진 저장소에서 여러 모듈을 빌드할 경우 저장소를 대체할 수 있습니다.</para>

        <para>추가 <sgmltag class="element">branch</sgmltag> 요소에서는 <sgmltag class="attribute">revspec</sgmltag> 속성을 수용하여 다른 일부 리비전과 연결합니다. 유효한 어떤 값이든 <literal>bzr revspec</literal> 에서 받아들이는데, 유효한 값을 예로 들자면, <literal>date:yesterday, -5, tag:0.1</literal>이며, 어제로부터 첫번째 리비전, 최근 커밋으로부터 5 커밋 이전, 또는 태그 "0.1"을 가져옵니다. 가능한 모든 값은 <literal>bzr help revisionspec</literal> 명령을 참고하십시오.</para>

        <para><sgmltag class="attribute">template</sgmltag> 속성을 지정한 저장소의 경우:</para>

<programlisting>
&lt;repository type="bzr" name="launchpad.net"
      href="lp:"
      trunk-template="~bzr-pqm/%(module)s/bzr.dev"
      branches-template="~bzr-pqm/%(module)s/%(branch)s"/&gt;
        </programlisting>

        <para>위 저장소에 대한 <sgmltag class="element">branch</sgmltag> 요소 예제는 다음과 같습니다:</para>

<programlisting>
&lt;branch repo="launchpad.net"
      module="bzr"
      checkoutdir="bzr-next"/&gt;
        </programlisting>

<programlisting>
&lt;branch repo="launchpad.net"
      module="bzr"
      branch="2.2"
      checkoutdir="bzr-beta"/&gt;
        </programlisting>
      </section>

      <section id="moduleset-syntax-sources-cvs">
        <title>CVS</title>

        <para>이 저장소 형식은 CVS 저장소 성격을 정의합니다.</para>

        <para><sgmltag class="attribute">password</sgmltag> 속성은 저장소 암호를 지정합니다.</para>

        <para><sgmltag class="attribute">cvsroot</sgmltag> 속성은 저장소 루트를 지정합니다.</para>

<programlisting>
&lt;repository type="cvs" name="tango.freedesktop.org"
    cvsroot=":pserver:anoncvs@anoncvs.freedesktop.org:/cvs/tango"
    password=""/&gt;
        </programlisting>

<!-- TODO describe these attributes -->

        <para>추가 속성으로 <sgmltag class="attribute">revision</sgmltag>, <sgmltag class="attribute">update-new-dirs</sgmltag>, <sgmltag class="attribute">override-checkoutdir</sgmltag>이 있습니다.</para>
      </section>

      <section id="moduleset-syntax-sources-darcs">
        <title>Darcs</title>

        <para>이 저장소 형식은 Darcs 저장소 성격을 정의합니다.</para>

<programlisting>
&lt;repository type="darcs" name="telepathy.freedesktop.org"
      href="http://projects.collabora.co.uk/darcs/telepathy/"/&gt;
</programlisting>
      </section>

      <section id="moduleset-syntax-sources-git">
        <title>Git</title>

        <para>이 저장소 형식은 깃 저장소 성격을 정의합니다.</para>

<programlisting>
&lt;repository type="git" name="git.freedesktop.org"
    href="git://anongit.freedesktop.org/git/"/&gt;
        </programlisting>

        <para><sgmltag class="element">branch</sgmltag> 요소에서 다음 속성을 사용할 수 있습니다:</para>

        <para><sgmltag class="attribute">revision</sgmltag> 속성으로 업데이트 단계에서 전환할 로컬 또는 원격 추적 브랜치를 지정합니다. 기본값은 'master' 입니다. <varname>branches</varname> 설정 변수로 대신 우선 적용할 수 있습니다. 현재 브랜치가 원격 브랜치를 추적하고 있지만 여러분의 진행 작업에 지장을 주지 않을 경우에만 전환 동작을 수행합니다.</para>

        <para><sgmltag class="attribute">tag</sgmltag> 속성은 업데이트 단계에서 무조건적인 체크 아웃을 수행할 리비전을 지정합니다. <sgmltag class="attribute">revision</sgmltag> 속성에 우선합니다.</para>

<!-- TODO I can't say much about the subdir attribute. In the
        end it will just be appended to checkoutdir.
        https://bugzilla.gnome.org/show_bug.cgi?id=342846
        -->

<programlisting>
&lt;branch repo="git.freedesktop.org" module="swfdec/swfdec"
        checkoutdir="swfdec"
        revision="<replaceable>local-or-remote-branch</replaceable>"
        tag="<replaceable>tree-ish</replaceable>"/&gt;
        </programlisting>
      </section>

      <section id="moduleset-syntax-sources-hg">
        <title>Mercurial</title>

        <para>이 저장소 형식은 머큐리얼 저장소 성격을 정의합니다.</para>

<programlisting>
&lt;repository type="hg" name="hg.gtk-vnc"
    href="http://gtk-vnc.codemonkey.ws/hg/" /&gt;
</programlisting>

<programlisting>
&lt;branch repo="hg.gtk-vnc" module="outgoing.hg" checkoutdir="gtk-vnc"/&gt;
</programlisting>
      </section>

      <section id="moduleset-syntax-sources-mtn">
        <title>Monotone</title>

        <para>이 저장소 형식은 모노톤 저장소 성격을 정의합니다.</para>

        <para> <sgmltag class="attribute">server</sgmltag> 속성은 저장소 서버를 지정합니다.</para>

        <para><sgmltag class="attribute">database</sgmltag> 속성은 저장소에서 사용할 데이터베이스를 지정합니다.</para>

        <para> <sgmltag class="attribute">defbranch</sgmltag> 속성은 사용할 저장소의 브랜치를 지정합니다.</para>

<programlisting>
&lt;repository type="mtn" name="pidgin.im"
    server="pidgin.im" database="pidgin.im.mtn"
    defbranch="im.pidgin.pidgin"/&gt;
</programlisting>
      </section>

      <section id="moduleset-syntax-sources-svn">
        <title>Subversion</title>

        <para>이 저장소 형식은 서브버전 저장소 성격을 정의합니다.</para>

<programlisting>
&lt;repository type="svn" name="svn.gnome.org" default="yes"
    href="http://svn.gnome.org/svn/"/&gt;
        </programlisting>

<!-- So how do I checkout a branch at a specific revision? -->

        <para><sgmltag class="element">branch</sgmltag> 요소에서 <sgmltag class="attribute">revision</sgmltag> 속성을 쓸 수 있습니다. 이 속성은 체크아웃할 브랜치, 또는 숫자일 경우 체크아웃할 대상 리비전을 지정합니다.</para>

<programlisting>
&lt;branch revision="gnome-2-20"/&gt;
        </programlisting>

        <para><sgmltag class="attribute">trunk-template</sgmltag>(기본값 "%(module)s/trunk"), <sgmltag class="attribute">branches-template</sgmltag> (기본값 "%(module)s/branches/%(branch)s"), <sgmltag class="attribute">tags-template</sgmltag> (기본값 "%(module)s/tags/%(tag)s") 속성으로 개별 <literal>svn</literal> 레이아웃을 지정할 수 있습니다.</para>
      </section>

      <section id="moduleset-syntax-sources-system">
        <title>System</title>

        <para>이 저장소 형식은 모조 시스템 저장소 성격을 정의합니다. 시스템 저장소는 <link linkend="moduleset-syntax-defs-systemmodule"><sgmltag class="element">systemmodules</sgmltag></link>을 만들 때 필요합니다.</para>

<programlisting>
&lt;repository type="system" name="system"/&gt;
</programlisting>
      </section>

      <section id="moduleset-syntax-sources-tarball">
        <title>Tarballs</title>

        <para>이 저장소 형식은 타르볼 저장소 성격을 정의합니다.</para>

<programlisting>
&lt;repository type="tarball" name="dbus/dbus-python"
    href="http://dbus.freedesktop.org/releases/dbus-python/"/&gt;
</programlisting>

        <para><sgmltag class="element">branch</sgmltag> 요소에서 다음 속성을 사용할 수 있습니다:</para>

        <para><sgmltag class="attribute">module</sgmltag> 속성은 다운로드하고 컴파일 할 파일을 지정하며, <sgmltag class="attribute">version</sgmltag> 속성은 모듈 버전을 지정합니다.</para>

        <para> <sgmltag class="attribute">size</sgmltag> and <sgmltag class="attribute">hash</sgmltag>, 그리고 오래된 <sgmltag class="attribute">md5sum</sgmltag> 속성은 선택입니다. 이 속성이 보이면 소스 패키지를 제대로 다운로드했는지 확인할 때 활용합니다.</para>

        <para>원본 이름이 다른 모듈 이름과 겹칠 경우, 타르볼 파일을 다운로드할 때 <sgmltag class="attribute">rename-tarball</sgmltag> 속성을 사용하여 이름을 바꿀 수 있습니다.</para>

        <para>몇가지 <sgmltag class="element">patch</sgmltag> 요소는 <sgmltag class="element">branch</sgmltag> 요소 안에 계층 구조로 겹칩니다. 이 패치는 패키지를 해제한 후 소스트리에 순서대로 반영합니다. <sgmltag class="attribute">file</sgmltag> 속성은 패치 파일 이름을, <sgmltag class="attribute">strip</sgmltag> 속성은 패치를 적용할 때 쳐낼 디렉터리 단계 수를 지정합니다.</para>

        <para>JHBuild에 실어둔 모듈 세트에 대한 패치 파일은 <filename>jhbuild/patches/</filename> 디렉터리에 있습니다. URI로 참조하는 모듈 세트에 대해 패치 파일은 moduleset 파일과 동일한 디렉터리를 찾아보거나 <filename>patches/</filename> 하위 디렉터리를 검색합니다. <sgmltag class="attribute">file</sgmltag> 속성에 URI를 지정하여 해당 위치로 다운로드할 수도 있습니다.</para>

<programlisting>
&lt;branch module="dbus-python-0.80.2.tar.gz" version="0.80.2"
    repo="dbus/dbus-python"
    hash="md5:2807bc85215c995bd595e01edd9d2077" size="453499"&gt;
  &lt;patch file="dbus-glib-build.patch" strip="1" /&gt;
&lt;/branch&gt;
</programlisting>

        <para>타르볼의 <sgmltag class="element">branch</sgmltag> 요소는 <sgmltag class="element">quilt</sgmltag> 요소도 들어있기도 한데, 이 요소에는 하위 계층으로 가져올 <sgmltag class="element">branch</sgmltag>를 지정합니다.</para>
      </section>
    </section>

    <section id="moduleset-syntax-includes">
      <title>기타 모듈 세트 설정</title>

      <para>JHBuild에서는 어떤 모듈 세트에 <sgmltag class="element">include</sgmltag> 요소의 참조로 다른 내용을 include 할 수 있습니다.</para>

<programlisting>
&lt;include href="<replaceable>uri</replaceable>"/&gt;
</programlisting>

      <para><sgmltag class="attribute">href</sgmltag>는 포함할 모듈 세트의 URI 참조이며, <sgmltag class="element">include</sgmltag> 요소가 들어있는 파일에 상대적인 위치입니다.</para>

      <para>참조한 모듈 세트에서 모듈 정의만을 가져옵니다. 모듈 소스는 아닙니다. 다중 포함 레벨은 허용하지만 include 루프는 허용하지 않습니다(해당 시점에 루프를 처리할 어떤 코드도 없습니다).</para>
    </section>

    <section id="moduleset-syntax-defs">
      <title>모듈 정의</title>

      <para>모듈 세트 파일에서 사용할 수 있는 다양한 형식의 모듈 정의가 있으며, 해당 목록을 쉽게 확장할 수 있습니다. 주로 사용하는 모듈만 언급하도록 하겠습니다.</para>

      <para>기본적으로 <sgmltag class="element">branch</sgmltag> 요소를 통해 모듈을 가져오는 방법을 설명하고, <sgmltag class="element">dependencies</sgmltag>, <sgmltag class="element">suggests</sgmltag>, <sgmltag class="element">after</sgmltag> 요소를 통해 모듈 의존 관계를 설명합니다.</para>

      <para><sgmltag class="element">dependencies</sgmltag> 요소에 있는 모듈중 포함하지 않았을 경우 <command>jhbuild build</command> 명령에서 사용할 모듈 목록으로 추가하며, 해당 모듈을 먼저 빌드했는지 확인합니다.</para>

      <para>모듈 목록을 만들고 나면 <sgmltag class="element">suggests</sgmltag> 요소에 언급한 모듈을 모듈 목록 정렬에 사용합니다(더 많은 모듈을 끌어오지 않겠지만 말이죠). 다른 모듈에 추가로 의존하는 모듈에만 해당합니다.</para>

      <section id="moduleset-syntax-defs-autotools">
        <title>autotools</title>

        <para><sgmltag class="element">autotools</sgmltag> 요소는 GNU Autotools 빌드 시스템으로 컴파일한 모듈을 지정합니다.</para>

<programlisting>
&lt;autotools id="<replaceable>id</replaceable>"
	      [ autogenargs="<replaceable>autogenargs</replaceable>" ]
	      [ makeargs="<replaceable>makeargs</replaceable>" ]
	      [ makeinstallargs="<replaceable>makeinstallargs</replaceable>" ]
	      [ autogen-sh="<replaceable>autogen-sh</replaceable>" ]
	      [ makefile="<replaceable>makefile</replaceable>" ]
	      [ skip-autogen="<replaceable>skip-autogen</replaceable>" ]
	      [ skip-install="<replaceable>skip-install</replaceable>" ]
	      [ uninstall-before-install="<replaceable>uninstall-before-install</replaceable>" ]
	      [ autogen-template="<replaceable>autogen-template</replaceable>" ]
	      [ check-target="<replaceable>check-target</replaceable>" ]
	      [ supports-non-srcdir-builds="<replaceable>supports-non-srcdir-builds</replaceable>" ]
	      [ force-non-srcdir-builds="<replaceable>force-non-srcdir-builds</replaceable>" ]
	      [ supports-unknown-configure-options="<replaceable>supports-unknown-configure-options</replaceable>" ]
	      [ supports-static-analyzer="<replaceable>supports-static-analyzer</replaceable>" ]&gt;

  &lt;branch [ ... ] &gt;
    [...]
  &lt;/branch&gt;

  &lt;dependencies&gt;
    &lt;dep package="<replaceable>modulename</replaceable>"/&gt;
    ...
  &lt;/dependencies&gt;
  &lt;after&gt;
    &lt;dep package="<replaceable>modulename</replaceable>"/&gt;
    ...
  &lt;/after&gt;

&lt;/autotools&gt;
</programlisting>

        <para><sgmltag class="attribute">autogenargs</sgmltag>, <sgmltag class="attribute">makeargs</sgmltag>, <sgmltag class="attribute">makeinstallargs</sgmltag> 속성은 각각 <command>autogen.sh</command>, <command>make</command>, <command>make install</command> 명령에 전달할 추가 인자 값을 지정합니다.</para>

        <para><sgmltag class="attribute">autogen-sh</sgmltag> 속성은 실행할 autogen.sh 스크립트의 이름을 지정합니다. <literal>autoreconf</literal> 값은 모듈에 <command>autogen.sh</command> 스크립트와 동일한 그 무엇이 없을 경우 활용할 수 있습니다. 이 경우 JHBuild에서는 <command>autoreconf -fi</command>를 실행하고, 다시 이에 맞는 <command>configure</command> 명령을 실행합니다. <sgmltag class="attribute">skip-autogen</sgmltag> 속성은 autogen.sh 스크립트 실행 여부를 선택하는데 JHBuild에 <command>autogen.sh</command> 명령을 무조건 실행하지 말라는 <literal>never</literal> 추가 값이 있습니다. <sgmltag class="attribute">skip-install</sgmltag> 속성 형식은 부울린이며 모듈에 대해 <command>make install</command> 명령을 건너뛸 지 여부를 지정합니다. <sgmltag class="attribute">makefile</sgmltag> 속성은 사용할 makefile의 파일 이름을 지정합니다.</para>

	<para><sgmltag class="attribute">uninstall-before-install</sgmltag> 속성은 설치 단계를 진행하기 전 모듈에서 오래된 설치 파일의 제거여부를 지정합니다. libtool에서 어떤 라이브러리를 링크할 때 설치할 모듈을 다른 라이브러리로 링크하려는데 jhbuild는 DESTDIR 변수를 사용하므로 대신 예전에 설치한 라이브러리를 찾아, 발생하는 문제를 해결하는데 이 속성을 활용할 수 있습니다. 사용자가 모듈로 설치한 파일을 기반으로 코드를 실행하고 있을 경우, 이 속성을 설정하면 (오히려) 문제가 나타날 수 있습니다.</para>

        <para><sgmltag class="attribute">supports-non-srcdir-builds</sgmltag> 속성은 개별 소스 디렉터리로 깔끔하게 빌드할 수 없는 모듈을 표시합니다.</para>

        <para><sgmltag class="attribute">force-non-srcdir-builds</sgmltag> 속성은 소스 디렉터리에서 깔끔하게 빌드할 수 없지만, 그 외의 위치에서 가능한 모듈을 표시합니다.</para>

        <para><sgmltag class="attribute">autogen-template</sgmltag> 속성은 autogen 명령행을 통해 세밀한 설정을 할 경우에 사용할 수 있습니다. <varname>srcdir</varname>, <varname>autogen-sh</varname>, <varname>prefix</varname>, <varname>libdir</varname>, <varname>autogenargs</varname> 변수로 나뉘는 파이썬 형식 문자열입니다. 예로, 기본 autogen-template을 보여드리도록 하겠습니다:</para>

<programlisting>
%(srcdir)s/%(autogen-sh)s --prefix %(prefix)s --libdir %(libdir)s %(autogenargs)s
</programlisting>

        <para><sgmltag class="attribute">check-target</sgmltag> 속성은 <command>make check</command> 대상이 없는 모듈에 (false를 값으로) 지정해야 합니다.</para>

        <para><sgmltag class="attribute">supports-static-analyzer</sgmltag> 속성은 <command>scan-build</command>와 같은 정적 분석 도구를 사용하여 빌드하지 않은 모듈에 (false 값으로) 지정해야합니다.</para>

        <para><sgmltag class="attribute">supports-unknown-configure-options</sgmltag> 속성은 알 수 없는 옵션을 <filename>configure</filename> 로 전달할 경우 오류를 표시하도록 모듈에 대해 설정합니다. 전역 configure 옵션에서는 해당 모듈을 사용하지 않습니다.</para>
      </section>

      <section id="moduleset-syntax-defs-cmake">
        <title>cmake</title>

        <para><sgmltag class="element">cmake</sgmltag> 요소는 CMake 빌드 시스템으로 빌드할 모듈을 정의합니다.</para>

<programlisting>
  &lt;cmake id="<replaceable>modulename</replaceable>"
            [ cmakeargs="<replaceable>cmakeargs</replaceable>" ]
            [ ninjaargs="<replaceable>ninjaargs</replaceable>" ]
            [ makeargs="<replaceable>makeargs</replaceable>" ]
            [ skip-install="<replaceable>skip-install</replaceable>" ]
            [ cmakedir="<replaceable>cmakedir</replaceable>" ]
            [ use-ninja="<replaceable>use-ninja</replaceable>" ]
            [ force-non-srcdir-builds="<replaceable>force-non-srcdir-builds</replaceable>" ]&gt;
  &lt;branch [ ... ] &gt;
    [...]
  &lt;/branch&gt;

  &lt;dependencies&gt;
    &lt;dep package="<replaceable>modulename</replaceable>"/&gt;
    ...
  &lt;/dependencies&gt;
  &lt;after&gt;
    &lt;dep package="<replaceable>modulename</replaceable>"/&gt;
    ...
  &lt;/after&gt;
&lt;/cmake&gt;
</programlisting>
        <para><sgmltag class="attribute">cmakeargs</sgmltag> 속성은 <command>cmake</command> 명령에 전달할 추가 인자 값을 지정합니다.</para>

        <para><sgmltag class="attribute">ninjaargs</sgmltag> 속성은 <command>ninja</command> 명령에 전달할 추가 인자 값을 지정합니다.</para>

        <para><sgmltag class="attribute">makeargs</sgmltag> 속성은 <command>make</command> 명령에 전달할 추가 인자 값을 지정합니다.</para>

        <para><sgmltag class="attribute">cmakedir</sgmltag> 속성은 srcdir 중심의 상대 경로상에서 cmake를 실행할 하위 디렉터리를 지정합니다.</para>

        <para><sgmltag class="attribute">force-non-srcdir-builds</sgmltag> 속성은 소스 디렉터리에서 깔끔하게 빌드할 수 없지만, 그 외의 위치에서 가능한 모듈을 표시합니다.</para>

        <para><sgmltag class="attribute">use-ninja</sgmltag> 속성은 Make 백엔드 대신 cmake의 닌자 백엔드로 빌드할 모듈을 표시합니다. 기본 값은 닌저 백엔드 사용입니다.</para>
      </section>

      <section id="moduleset-syntax-defs-meson">
        <title>Meson</title>

        <para><sgmltag class="element">meson</sgmltag> 요소는 메존 빌드 시스템으로 설정하고 닌자 빌드 도구로 빌드하는 모듈을 정의합니다.</para>

<programlisting>
  &lt;meson id="<replaceable>modulename</replaceable>"
            [ mesonargs="<replaceable>mesonargs</replaceable>" ]
            [ ninjaargs="<replaceable>ninjaargs</replaceable>" ]
            [ skip-install="<replaceable>skip-install</replaceable>" ]&gt;
  &lt;branch [ ... ] &gt;
    [...]
  &lt;/branch&gt;

  &lt;dependencies&gt;
    &lt;dep package="<replaceable>modulename</replaceable>"/&gt;
    ...
  &lt;/dependencies&gt;
  &lt;after&gt;
    &lt;dep package="<replaceable>modulename</replaceable>"/&gt;
    ...
  &lt;/after&gt;
&lt;/meson&gt;
</programlisting>
        <para><sgmltag class="attribute">mesonargs</sgmltag> 속성은 <command>meson</command> 명령으로 전달할 추가 인자 값을 지정합니다.</para>
        <para><sgmltag class="attribute">ninjaargs</sgmltag> 속성은 <command>ninja</command> 명령에 전달할 추가 인자 값을 지정합니다.</para>
      </section>

      <section id="moduleset-syntax-defs-distutils">
        <title>distutils</title>

        <para><sgmltag class="element">distutils</sgmltag> 요소는 파이썬 distutils로 빌드할 모듈을 정의합니다.</para>

<programlisting>
&lt;distutils id="<replaceable>modulename</replaceable>"
            [ supports-non-srcdir-builds="<replaceable>yes|no</replaceable>" ]&gt;
  &lt;branch [ ... ] &gt;
    [...]
  &lt;/branch&gt;

  &lt;dependencies&gt;
    &lt;dep package="<replaceable>modulename</replaceable>"/&gt;
    ...
  &lt;/dependencies&gt;
  &lt;after&gt;
    &lt;dep package="<replaceable>modulename</replaceable>"/&gt;
    ...
  &lt;/after&gt;
&lt;/distutils&gt;
</programlisting>
      </section>

      <section id="moduleset-syntax-defs-linux">
        <title>linux</title>

        <para><sgmltag class="element">linux</sgmltag> 요소는 리눅스 커널을 빌드할 때 사용할 모듈을 정의합니다. 추가로, <sgmltag class="element">kconfig</sgmltag> 하위 요소를 활용하면 별개 커널 설정을 선택할 수 있습니다.</para>

<programlisting>
&lt;linux id="<replaceable>id</replaceable>"
	  [ makeargs="<replaceable>makeargs</replaceable>" ]&gt;

  &lt;branch [ ... ] &gt;
    [...]
  &lt;/branch&gt;

  &lt;dependencies&gt;
    &lt;dep package="<replaceable>modulename</replaceable>"/&gt;
    ...
  &lt;/dependencies&gt;
  &lt;after&gt;
    &lt;dep package="<replaceable>modulename</replaceable>"/&gt;
    ...
  &lt;/after&gt;

  &lt;kconfig [ repo="<replaceable>repo</replaceable>" ]
	    version="<replaceable>version</replaceable>"
	    [ module="<replaceable>module</replaceable>" ]
	    [ config="<replaceable>config</replaceable>" ] /&gt;

&lt;/linux&gt;
</programlisting>
      </section>

      <section id="moduleset-syntax-defs-perl">
        <title>perl</title>

        <para><sgmltag class="element">perl</sgmltag> 요소는 펄 모듈 빌드에 사용합니다.</para>

        <para><sgmltag class="attribute">makeargs</sgmltag> 속성은 <command>make</command> 명령에 전달할 추가 인자 값을 지정합니다.</para>

<programlisting>
&lt;perl id="<replaceable>modulename</replaceable>"
	 [ makeargs="<replaceable>makeargs</replaceable>" ]&gt;

  &lt;branch [ ... ] &gt;
    [...]
  &lt;/branch&gt;

  &lt;dependencies&gt;
    &lt;dep package="<replaceable>modulename</replaceable>"/&gt;
    ...
  &lt;/dependencies&gt;
  &lt;after&gt;
    &lt;dep package="<replaceable>modulename</replaceable>"/&gt;
    ...
  &lt;/after&gt;

&lt;/perl&gt;
</programlisting>
      </section>

      <section id="moduleset-syntax-defs-systemmodule">
        <title>systemmodule</title>

        <para><sgmltag class="element">systemmodule</sgmltag> 요소는 시스템에서 제공해야 하는 모듈을 지정할 때 사용합니다. 모듈은 배포판 패키지 관리 시스템으로 설치해야합니다.</para>

<programlisting>
&lt;systemmodule id="<replaceable>modulename</replaceable>"&gt;
  &lt;pkg-config&gt;<replaceable>pkg-config</replaceable>.pc&lt;/pkg-config&gt;

  &lt;branch repo="<replaceable>system</replaceable>" version="<replaceable>version</replaceable>" /&gt;
&lt;/systemmodule&gt;
</programlisting>

        <para>시스템 모듈에서 pkg-config 파일을 제공하지 않으면, <sgmltag class="element">systemdependencies</sgmltag> 태그를 사용하여 의존성을 명시할 수 있습니다. <sgmltag class="element">dep</sgmltag> 태그의 <sgmltag class="attribute">type</sgmltag> 속성에서 두 값을 지원합니다:</para>

        <orderedlist>
          <listitem>
            <simpara><sgmltag class="attvalue">path</sgmltag> 값. 일치하는 프로그램 이름을 검색할 경로입니다.</simpara>
          </listitem>
          <listitem>
            <simpara><sgmltag class="attvalue">c_include</sgmltag> 값. C include 경로는 일치하는 헤더 이름을 검색할 때 사용합니다. <sgmltag class="attribute">name</sgmltag>은 하위 디렉터리가 들어갑니다. <varname>cflags</varname> 또는 <link linkend="cfg-module-autogenargs"><varname>module_autogenargs</varname></link> 설정 변수에서 <varname>CPPFLAGS</varname> 변수를 설정하면 C include 검색 경로를 수정할 수 있습니다.</simpara>
          </listitem>
        </orderedlist>

<programlisting>
&lt;systemmodule id="<replaceable>modulename</replaceable>"&gt;
  &lt;branch repo="<replaceable>system</replaceable>" version="<replaceable>version</replaceable>" /&gt;
  &lt;systemdependencies&gt;
    &lt;dep type="path" name="<replaceable>executable-name</replaceable>" /&gt;
  &lt;/systemdependencies&gt;
&lt;/systemmodule&gt;

&lt;systemmodule id="<replaceable>modulename</replaceable>"&gt;
  &lt;branch repo="<replaceable>system</replaceable>" version="<replaceable>version</replaceable>" /&gt;
  &lt;systemdependencies&gt;
    &lt;dep type="c_include" name="<replaceable>header-name</replaceable>" /&gt;
  &lt;/systemdependencies&gt;
&lt;/systemmodule&gt;
</programlisting>

        <para>시스템 모듈을 다른 위치에 설치하거나 다른 배포판에서 다른 이름으로 설치할 경우, 대체 위치 또는 대체 이름을 설정할 목적으로 <sgmltag class="element">altdep</sgmltag> 태그를 <sgmltag class="element">dep</sgmltag> 태그의 하위 요소처럼 사용할 수 있습니다. <sgmltag class="element">altdep</sgmltag> 태그는 <sgmltag class="element">dep</sgmltag> 태그의 역할과 동일한 속성을 지원합니다.</para>

<programlisting>
&lt;systemmodule id="<replaceable>modulename</replaceable>"&gt;
  &lt;branch repo="<replaceable>system</replaceable>" version="<replaceable>version</replaceable>" /&gt;
  &lt;systemdependencies&gt;
    &lt;dep type="path" name="<replaceable>executable-name</replaceable>"&gt;
      &lt;altdep type="path" name="<replaceable>alternative-executable-name-1</replaceable>" /&gt;
      &lt;altdep type="path" name="<replaceable>alternative-executable-name-2</replaceable>" /&gt;
      ...
    &lt;dep&gt;
  &lt;/systemdependencies&gt;
&lt;/systemmodule&gt;

&lt;systemmodule id="<replaceable>modulename</replaceable>"&gt;
  &lt;branch repo="<replaceable>system</replaceable>" version="<replaceable>version</replaceable>" /&gt;
  &lt;systemdependencies&gt;
    &lt;dep type="c_include" name="<replaceable>header-name</replaceable>"&gt;
      &lt;altdep type="c_include" name="<replaceable>alternative-header-name-1</replaceable>" /&gt;
      &lt;altdep type="c_include" name="<replaceable>alternative-header-name-2</replaceable>" /&gt;
      ...
    &lt;dep&gt;
  &lt;/systemdependencies&gt;
&lt;/systemmodule&gt;
</programlisting>
      </section>

      <section id="moduleset-syntax-defs-waf">
        <title>waf</title>

        <para><sgmltag class="element">waf</sgmltag> 요소는 waf 빌드 시스템으로 어떤 모듈을 빌드할 지 정의합니다.</para>

        <para><sgmltag class="attribute">waf-command</sgmltag> 속성은 사용할 waf 명령 스크립트를 지정합니다. 기본값은 <command>waf</command> 입니다.</para>

        <para><sgmltag class="attribute">python-command</sgmltag> 속성은 사용할 파이썬 실행 명령을 지정합니다. 기본값은 <command>python</command> 입니다. 파이썬 3 버전으로 모듈을 빌드할 때 쓸만합니다.</para>

<programlisting>
&lt;waf id="<replaceable>modulename</replaceable>"&gt;
	 [ python-command="<replaceable>python-command</replaceable>" ]
	 [ waf-command="<replaceable>waf-command</replaceable>" ]&gt;
  &lt;branch [ ... ] &gt;
    [...]
  &lt;/branch&gt;

  &lt;dependencies&gt;
    &lt;dep package="<replaceable>modulename</replaceable>"/&gt;
    ...
  &lt;/dependencies&gt;
  &lt;after&gt;
    &lt;dep package="<replaceable>modulename</replaceable>"/&gt;
    ...
  &lt;/after&gt;
&lt;/waf&gt;
</programlisting>
      </section>

      <section id="moduleset-syntax-defs-testmodule">
        <title>testmodule</title>

        <para> <sgmltag class="element">testmodule</sgmltag> 요소는 LDTP 또는 Dogtail로 테스트 여건을 실행하는 모듈을 만듭니다.</para>

<programlisting>
&lt;testmodule id="<replaceable>id</replaceable>"
	       type="<replaceable>type</replaceable>"&gt;

  &lt;branch [ ... ] &gt;
    [...]
  &lt;/branch&gt;

  &lt;dependencies&gt;
    &lt;dep package="<replaceable>modulename</replaceable>"/&gt;
    ...
  &lt;/dependencies&gt;
  &lt;after&gt;
    &lt;dep package="<replaceable>modulename</replaceable>"/&gt;
    ...
  &lt;/after&gt;

  &lt;testedmodules&gt;
    &lt;tested package="<replaceable>package</replaceable>" /&gt;
  &lt;/testedmodules&gt;

&lt;/testmodule&gt;
</programlisting>

        <para><sgmltag class="attribute">type</sgmltag> 속성은 모듈에서 실행할 테스트 형식입니다. 'dogtail' 값을 지정하면 모든 .py 파일을 실행합니다. 'ldtp' 값은 'ldtprunner run.xml' 명령을 실행합니다.</para>

        <para>noxvfb 옵션 값을 설정하기까지는, 테스트를 실행할 환경으로서 xvfb 서버를 시작합니다.</para>
      </section>

      <section id="moduleset-syntax-defs-metamodule">
        <title>metamodule</title>

        <para><sgmltag class="element">metamodule</sgmltag> 요소는 실제로는 아무것도 하지 않는 모듈을 정의합니다. 이 형식을 갖춘 모듈의 존재 목적은 의존성때문입니다.</para>

        <para>예를 들면, meta-gnome-desktop은 그놈 데스크톱의 모든 핵심 구성 요소에 의존하기에, 실제로는 JHBuild로 하여금 데스크톱 전체 패키지를 설치하게 합니다.</para>

<programlisting>
&lt;metamodule id="<replaceable>modulename</replaceable>"&gt;
  &lt;dependencies&gt;
    &lt;dep package="<replaceable>modulename</replaceable>"/&gt;
    ...
  &lt;/dependencies&gt;
  &lt;suggests&gt;
    &lt;dep package="<replaceable>modulename</replaceable>"/&gt;
    ...
  &lt;/suggests&gt;
&lt;/metamodule&gt;
</programlisting>

        <para><sgmltag class="attribute">id</sgmltag> 속성은 모듈의 이름이며, 하위 요소는 <link linkend="moduleset-syntax-defs-autotools"><sgmltag class="element">autotools</sgmltag></link>의 요소처럼 취급합니다.</para>
      </section>
    </section>

    <section id="moduleset-deprecated-elements">
      <title>오래된 요소</title>

      <section id="moduleset-deprecated-elements-syntax-sources">
        <title>모듈 소스</title>

        <section id="moduleset-syntax-sources-cvsroot">
          <title>cvsroot</title>

          <para><sgmltag class="element">cvsroot</sgmltag> 요소는 오래됐습니다. <sgmltag class="element">repository</sgmltag> 요소를 대신 사용하십시오.</para>

          <para><sgmltag class="element">cvsroot</sgmltag> 요소는 CVS 저장소를 설명합니다.</para>

<programlisting>
  &lt;cvsroot name="<replaceable>rootname</replaceable>"
           [ default="<replaceable>yes|no</replaceable>" ]
           root="<replaceable>anon-cvsroot</replaceable>"
           password="<replaceable>anon-password</replaceable>"/&gt;
</programlisting>

          <para><sgmltag class="attribute">name</sgmltag> 모듈은 CVS 저장소의 유일 식별자입니다.</para>

          <para><sgmltag class="attribute">default</sgmltag> 속성은 이 모듈 세트 파일에 대한 기본 모듈 소스 여부를 언급합니다.</para>

          <para><sgmltag class="attribute">root</sgmltag> 속성은 이 저장소 익명 접근에 사용할 CVS 루트 목록을 지정하고, <sgmltag class="attribute">password</sgmltag> 속성은 익명 접근시 사용할 암호를 설정합니다.</para>
        </section>

        <section id="moduleset-syntax-sources-svnroot">
          <title>svnroot</title>

          <para><sgmltag class="element">svnroot</sgmltag> 요소는 이제 오래됐습니다. 대신 <sgmltag class="element">repository</sgmltag> 요소를 사용하십시오.</para>

          <para><sgmltag class="element">svnroot</sgmltag> 요소는 서브버전 저장소를 설명합니다.</para>

<programlisting>
  &lt;svnroot name="<replaceable>rootname</replaceable>"
           [ default="<replaceable>yes|no</replaceable>" ]
           href="<replaceable>anon-svnroot</replaceable>"/&gt;
</programlisting>

          <para><sgmltag class="attribute">name</sgmltag> 속성은 서브버전 저장소의 유일 식별자입니다.</para>

          <para><sgmltag class="attribute">default</sgmltag> 속성은 이 모듈 세트 파일에 대한 기본 모듈 소스 여부를 언급합니다.</para>

          <para><sgmltag class="attribute">href</sgmltag> 속성은 저장소 기본 URL을 나열합니다.  <literal>http</literal>, <literal>https</literal>, <literal>svn</literal> 중 하나입니다.</para>
        </section>
      </section>

<!-- end of deprecated module sources -->

      <section>
        <title>오래된 모듈 형식</title>

        <warning>
          <para>이 장에서는 오래된 요소를 설명하며, 기존 모듈 세트에선 쓸 수 있지만 더 이상 안쓰기를 권장합니다.</para>
        </warning>

        <section id="moduleset-syntax-defs-tarball">
          <title>tarball</title>

          <important>
            <para>이 오래된 요소는 <sgmltag class="element">autotools</sgmltag> 모듈 형식과 <sgmltag class="element">tarball</sgmltag> 저장소 형식을 감싸는 단순 래퍼입니다.</para>
          </important>

          <para><sgmltag class="element">tarball</sgmltag> 은 타르볼에서 빌드할 모듈을 정의합니다.</para>

<programlisting>
  &lt;tarball id="<replaceable>modulename</replaceable>"
              [ version="<replaceable>version</replaceable>" ]
              [ checkoutdir="<replaceable>checkoutdir</replaceable>" ]
              [ autogenargs="<replaceable>autogenargs</replaceable>" ]
              [ makeargs="<replaceable>makeargs</replaceable>" ]
              [ autogen-sh="<replaceable>autogen-sh</replaceable>" ]
              [ supports-non-srcdir-builds="<replaceable>yes|no</replaceable>" ]&gt;
    &lt;source href="<replaceable>source-url</replaceable>"
            [ size="<replaceable>source-size</replaceable>" ]
            [ hash="<replaceable>source-algo:source-hash</replaceable>" ]
            [ md5sum="<replaceable>source-md5sum</replaceable>" ]/&gt;
    &lt;patches&gt;
      &lt;patch file="<replaceable>filename</replaceable>" strip="<replaceable>level</replaceable>"/&gt;
      ...
    &lt;/patches&gt;
    &lt;dependencies&gt;
      &lt;dep package="<replaceable>modulename</replaceable>"/&gt;
      ...
    &lt;/dependencies&gt;
    &lt;suggests&gt;
      &lt;dep package="<replaceable>modulename</replaceable>"/&gt;
      ...
    &lt;/suggests&gt;
  &lt;/tarball&gt;
</programlisting>

          <para><sgmltag class="attribute">id</sgmltag> 와 <sgmltag class="attribute">version</sgmltag> 속성으로 모듈을 식별합니다.</para>

          <para><sgmltag class="element">source</sgmltag> 요소는 다운로드하고 컴파일 할 파일을 지정합니다. <sgmltag class="attribute">href</sgmltag> 속성은 필수이며, <sgmltag class="attribute">size</sgmltag>, <sgmltag class="attribute">hash</sgmltag>, 그리고 오래된 <sgmltag class="attribute">md5sum</sgmltag> 속성은 선택 사항입니다. 후자로 언급한 2개 속성 값은, 소스 패키지를 올바르게 다운로드했는지 검사할 때 사용합니다.</para>

          <para><sgmltag class="element">patches</sgmltag> 요소는 패키지 해제 후 소스트리에 반영할 하나 이상의 패치를 지정하고, <sgmltag class="attribute">file</sgmltag> 속성은 패치 파일 이름을 지정하며, <sgmltag class="attribute">strip</sgmltag> 속성에서는 패치를 적용할 때 쳐낼 디렉터리 단계 수를 지정합니다.</para>

          <para>JHBuild에 실어둔 모듈 세트에 대한 패치 파일은 <filename>jhbuild/patches/</filename> 디렉터리에 있습니다. URI로 참조하는 모듈 세트에 대해 패치 파일은 moduleset 파일과 동일한 디렉터리를 찾아보거나 <filename>patches/</filename> 하위 디렉터리를 검색합니다. <sgmltag class="attribute">file</sgmltag> 속성에 URI를 지정하여 해당 위치로 다운로드할 수도 있습니다.</para>

          <para>다른 속성과 <sgmltag class="element">dependencies</sgmltag>, <sgmltag class="element">suggests</sgmltag>, <sgmltag class="element">after</sgmltag> 요소는 <link linkend="moduleset-syntax-defs-autotools">autotools</link>와 동일하게 처리합니다.</para>
        </section>
      </section>

<!-- end of deprecated module types -->
    </section>

<!-- end of deprecated elements -->
  </section>
</article>
