GOL @Wiki

AsteriskでPBXについて学ぼう

最終更新:

divadiva

- view
管理者のみ編集可


OpenSolaris上でオープンPBXであるAsteriskをいじくります。

Asteriskのコンパイル(v1.2.10)

オープンソースIP-PBXであるAsterisk(http://www.asterisk.org/)のコンパイルですが、editline.aあたりのコンパイルが失敗すると思います。
原因は、ED_*、EM_*、VI_* などの定義がないためです。~ not declared などのエラーが出ているはずです。

これらの定義は本来、$SRCDIR/editline/fcns.h に定義されるものです。fcns.hを見てみると、案の定、まったく定義がなされていません。
あれ?おかしいですね・・・

実は fcns.h はmake中に自動生成されるものなのです。makeからは、
 /bin/sh makelist -fh common.h emacs.h vi.h > fcns.h
のようなコマンドが実行され、生成されます。しかし Bad string というエラーが発生し、期待する結果が出力されないのです。
(gmake $> logfile などで確認してみてください)

ここでmakelistのfcns.hを生成する箇所をチェックしてみましょう。

 #  generate fcns.h from various .h files
 #
 -fh)
     cat $FILES | $AWK '/el_action_t/ { print $3 }' | \
     sort | tr '[:lower:]' '[:upper:]' | $AWK '
         BEGIN {
             省略1
           }
         {
             省略2
           }
         END {
             省略3
         }'
         ;;

$FILESには、common.h emacs.h vi.h が入力されます。fcns.hを見てみると、どうやら「省略1」と「省略3」の内容は出力されていますが、「省略2」の内容はまったく出力されていません。つまり、common.h emacs.h vi.h からの入力データをawkで加工してfcns.hに出力するスクリプトに問題があることがわかります。

で、結局原因は何かと言うと、trコマンドの記述です。小文字を大文字に置換するところがSolaris的によろしくありません。Bad stringはtrのエラーです。
 tr '[a-z]' '[A-Z]'
のように書き換えてやれば、期待通り動作します。

ちなみに gmake install で呼び出される install コマンドは、/usr/sbin/install ではなく、/usr/ucb/install になるようにMakefileを書き換えましょう。


ウィキ募集バナー