(ปรับปรุง 2009.04.21 พบท่าง่ายกว่าเดิม ดูด้านล่าง)
เอา libthai Python binding ที่วีร์ทำเอาไว้มาใช้บน Mac OS X + MacPorts ต้องดัดแปลง setup script นิดนึง
เนื่องจากผมติดตั้ง libthai ผ่านทาง MacPorts (ด้วยคำสั่ง sudo port install libthai
) ดังนั้นแฟ้มไลบรารี (libthai.a) กับแฟ้ม include (*.h) ทั้งหลาย จึงไม่ได้อยู่ในตำแหน่งปกติที่ apple-gcc จะวิ่งไปหา (ผมใช้ i686-apple-darwin9-gcc-4.0.1 ลองใช้ gcc-4.2, gcc-mp-4.4 ที่อยู่ในเครื่องแล้ว มันบอกไม่รู้จัก flag โน้น flag นี้ ผมก็เซ็ตไม่เป็นด้วย เลยใช้ gcc ตัวที่เขาให้มาแต่เดิมนี่แหละ) จึงจำเป็นต้องแก้ไข setup.py นิดหน่อย เพื่อบอกตำแหน่งของ include_dirs และ library_dirs ใหม่ ตามนี้ :
from distutils.core import setup, Extension
setup(name="libthai", version="0.0.1",
ext_modules=[
Extension('libthai',
include_dirs = ['/opt/local/include'],
libraries = ['thai'],
library_dirs = ['/opt/local/lib'],
sources = ['libthai.c']
)])
ก็จะสามารถ build และ install ได้ครับ - ของใครอยู่ที่อื่น ก็แก้ไปตามนั้นครับ - ผมดูตัวอย่างจากเอกสารหน้านี้ : 3. Building C and C++ Extensions with distutils
หมายเหตุ: libthai ที่ใช้นี้ยังเป็นรุ่น 0.1.9 อยู่ ตอนนี้รุ่นล่าสุดคือ 0.1.11 ออกมาไล่ ๆ กับ libdatrie และ swath ตัวใหม่ ติดตามข่าวได้ที่ linux.thai.net / ขอบคุณคุณวีร์ พี่เทพ และทุกท่าน
อัปเดต 2009.04.21: เพิ่งเจอท่าที่ง่ายกว่า ไม่ต้องแก้ setup.py คือเรากำหนดไดเรกทอรีได้ที่บรรทัดคำสั่งเลย ตอน build จากนั้นค่อยสั่ง install อีกที เช่น :
$ sudo python setup.py build_ext --include-dirs=/opt/local/include --library-dirs=/opt/local/lib
$ sudo python setup.py install
หรือจะกำหนดไว้ในแฟ้ม setup.cfg ก็ได้ เผื่อใช้หลายรอบ :
[build_ext]
include-dirs=/opt/local/include
library-dirs=/opt/local/lib
ทั้งหมดนี้ ดูตามเอกสาร 3. Writing the Setup Configuration File
ก่อน build อย่าลืมเปลี่ยน gcc ให้เป็นรุ่นที่เหมาะสม=ใช้แล้วคอมไพล์ผ่าน เช่นกรณีนี้ ผมต้องใช้ gcc 4.0 ก็ให้เลือกด้วย gcc_select (หรือ ln symbolic link เอาเองก็ได้)
$ sudo gcc_select gcc40
ถ้าอยากรู้ว่ามีอะไรให้เลือกบ้าง สั่ง gcc_select -l (ไม่ต้องตกใจ ถ้ามันแสดงน้อยกว่าที่เรามี gcc_select มันแสดงเฉพาะตัวที่มันหาเจอเท่านั้น ก็คือที่มี symbolic link อยู่ในไดเรกทอรีเดียวกับตัว gcc_select มันเอง ... กรณีนั้น ก็ แหะ ๆ ใช้ ln ไปตามเดิมครับ - -")
เช่นเดียวกัน ก่อน install ก็อย่าลืมเปลี่ยน Python ให้เป็นรุ่นที่เหมาะสม=รุ่นที่เราอยากจะติดตั้งตัว extension นี้เข้าไป กรณีผม ผมอยากติดตั้งลงไปใช้กับ Python 2.5 ก็คล้าย ๆ เดิม เลือกด้วย python_select (หรือ ln symbolic link เอาเองก็ได้ เช่นกัน)
$ sudo python_select python25-apple
ป.ล. อะไรคือ mp-gcc ?
4 comments:
มันจะมีท่าที่ได้ทั่วไปไม่ต้องแก้ไปแก้มาเปล่าครับ?
เพิ่งเห็นว่า เราสั่งพวกนี้ที่ command line ได้แฮะ
http://docs.python.org/distutils/configfile.htmlpython setup.py build_ext --include-dirs
หรือจะกำหนดในแฟ้ม setup.cfg ก็ได้
[build_ext]
include-dirs=/opt/local/include
ผมยังไม่ได้ลองนะ แต่น่าจะได้
แบบนี้ก็ไม่ต้องแก้ setup.py ของวีร์
แต่อาจจะเขียนใน doc หน่อยนึง ว่าถ้าลงไม่ได้ ก็ลองท่านี้ดู
pkg-config จะมีประโยชน์หรือเปล่าครับ? เผื่อผมเขียนเพิ่มเข้าไป
คือไรอ่ะ ใช้ไม่เป็น :p
Post a Comment