Closed knight-rider closed 11 years ago
version.hがこける原因は DebianやUbuntuで使われているdashが配列に対応してないからみたい 回避策さがしてますがどうしよう
bashism の問題は dkms 2.1.0.1-4 で修正されているようです。wheezy であれば 2.2.0.3-1.2 が入っているはずですが…… cf. http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=560267
dkmsの問題ではなくて、単純にmakeした場合です。 Makefileでdkms.confを読んでversion.hを作成する処理があるんですが、 makeがデフォルトでは/bin/shを参照するらしく、/bin/shがdashへのシンボリックリンクになっているのが原因っぽいです。
安直に回避する方法としてはmakeからはdkms.confの内容を整形して利用すればいいんですが、もっと良い方法がないか模索中です。 例: sed -e "s/[0]//" dkms.conf
ということであれば、Makefile の頭の方に SHELL := /bin/bash を追加して、make から bash を呼ばせるのはいかがですか? cf. http://www.gnu.org/software/make/manual/html_node/Choosing-the-Shell.html
それも考えたんですが、/bin/bashが無い環境を考えるとBourne Shell系なら動きそうな上記の例の方がいいかなと。
(/bin/sh が dash を向いていて、問題の発端となった) debian/ubuntu の場合は bash は必ず存在します、念の為。 ただ、/bin/sh の portability を重視されるのであれば、仰る対応が望ましいと思います。
その場合のやり方は、おおむね「sedとかで頑張る」「変数置換を駆使しまくる」あたりに落ち着くようですね……。
デバイス名の変更はDKMSと関係ありますか? 変更するとrecpt1等に影響するので(自力で解決できる人たちだけではないので) できるだけ変えたくないです。
あと、Debian Wheezyの環境でmake version.hがこけるみたい。 シェルの違いでしょうか。
以下エラーメッセージ . ./dkms.conf ; \ GREV=
git rev-list HEAD | wc -l 2> /dev/null
; \ if [ $GREV != 0 ] ; then \ printf "#define DRV_VERSION \"${PACKAGE_VERSION}rev$GREV\"\n#define DRV_RELDATE \"git show --date=short --format=%ad | sed -n '1p' 2> /dev/null
\"\n#define DRV_NAME \"${BUILT_MODULE_NAME[0]}\"\n" > version.h; \ else \ printf "#define DRV_VERSION \"${PACKAGE_VERSION}\"\n#define DRV_RELDATE \"$PACKAGE_RELDATE\"\n#define DRV_NAME \"${BUILT_MODULE_NAME[0]}\"\n" > version.h; \ fi /bin/sh: 5: ./dkms.conf: BUILT_MODULE_NAME[0]=pt3_drv: not found /bin/sh: 6: ./dkms.conf: DEST_MODULE_LOCATION[0]=/kernel/drivers/video/: not found /bin/sh: 4: Bad substitution