คอมไพล์ GNOME ใช้เองด้วย JHBuild - คอมไพล์

7 September, 2007 - 10:27
Submitted by thep

ติดตั้ง JHBuild พร้อม config ไปแล้วก็ลงมือ build กัน

วิธีที่จะสั่ง build แพกเกจทั้งหมดที่ config ไว้ โดยเริ่มตั้งแต่ check out, configure, make, install ก็คือ:

$ jhbuild build

JHBuild จะตรวจสอบ dependency ของ module ที่กำหนด แล้วไล่ build ตั้งแต่ปลายสุดขึ้นมาตามลำดับ

แต่คุณก็เลือก build เฉพาะสิ่งที่ต้องการ แทนที่จะ build GNOME desktop ทั้งตัวได้เหมือนกัน:

$ jhbuild build gtk+

จะ build สิ่งที่ gtk+ ต้องการตามลำดับขึ้นมาจนถึงตัว gtk+ เอง

ในกรณีที่ build ไม่ผ่านที่บาง module จะมีตัวเลือกขึ้นมาถาม เช่น:

*** error during stage build of ORBit2: ########## Error running make   *** [1/1]


  [1] rerun stage build
  [2] ignore error and continue to install
  [3] give up on module
  [4] start shell
  [5] go to stage force_checkout
  [6] go to stage configure
choice: _

คุณสามารถเลือกตัวเลือกต่าง ๆ ได้ ตามปกติถ้าไม่มีเวลาดู ผมก็อาจจะเลือกข้อ 2 เพื่อฝืนให้มันทำต่อไป แล้ว module ต่อ ๆ ไปก็จะใช้รุ่นเก่าที่ผม build ไว้ครั้งก่อน แต่ถ้าเป็นการ build ครั้งแรก คุณคงเลือกข้อ 3 จะดีกว่า แพกเกจไหนที่ต้องใช้แพกเกจนี้ก็จะไม่ถูก build

ถ้าคิดอยากจะลองแก้บั๊กด้วยตัวเอง ก็เลือกข้อ 4 เพื่อเข้าเชลล์ไปตรวจสอบและแก้บั๊ก แล้ว exit กลับออกมาที่ prompt เดิมนี้ แล้วเลือกข้อ 1 ให้มันพยายาม build ใหม่

คำตอบสำหรับคำถามนี้ คงไม่มีหลักตายตัว อาศัย programming sense ของคุณละกัน :-)

มีวิธี build แบบ non-interactive ด้วย เช่น คุณอาจจะไปสั่ง build แบบ remote ที่เครื่องอื่นในแบบ daemon หรือ cron job ก็ได้ โดยสั่ง:

$ jhbuild tinderbox -o output-dir

โดยมันจะเก็บ build log ในรูป HTML page ลงใน output-dir (ตัวอย่าง) และเลือกตัวเลือก "give up on module" โดยอัตโนมัติสำหรับ module ที่ไม่ผ่าน

ผมชอบใช้แบบ tinderbox มาก เพราะประหยัดเวลาดี ผมสามารถสั่งให้มัน build แบบ background ไว้ แล้วก็ไปทำงานอื่นได้ สักพักก็กลับมาเช็กว่ามี error ที่ module ไหนบ้าง แล้วก็ตามซ่อมเป็นตัว ๆ ไป

การสั่ง build เพียง module เดียวเท่านั้น โดยไม่ต้อง build dependency ของมัน (เช่น ในกรณีที่จะกลับมาซ่อม module ที่ build ไม่ผ่าน) ก็ใช้คำสั่ง:

$ jhbuild buildone module

การใช้งานอีกลักษณะหนึ่งที่หลายคนอาจสนใจ คือการแยกขั้นตอน check out กับการ build ออกจากกัน อาจจะดีสำหรับคนที่ build ในเครื่องที่ไม่ได้ต่อเน็ตตลอดเวลา (คนหิ้วโน้ตบุ๊กอาจจะนึกออก) ก็อาจจะ check out ให้เสร็จทีเดียว แล้วค่อย build แบบ off-line ทีหลัง

สั่ง check out source ทั้งหมดโดยไม่ build ได้โดย:

$ jhbuild update

และ build แบบ off-line ได้โดยเพิ่มตัวเลือก -n หลังคำสั่งของ JHBuild เช่น:

$ jhbuild tinderbox -n -o output-dir

build กันไปก่อนนะครับ คราวหน้ามาดูวิธีเรียกโปรแกรมแบบแบ่งภาคกัน