home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

技術/Linux/uClibc/01, "make install_headers" 関連PATCH(uClibc-0.9.31)

技術/Linux/uClibc/01, "make install_headers" 関連PATCH(uClibc-0.9.31)

技術 / Linux / uClibc / 01, "make install_headers" 関連PATCH(uClibc-0.9.31)
id: 945 所有者: msakamoto-sf    作成日: 2011-04-10 18:55:03
カテゴリ: Linux 

uClibc-0.9.31をソースツリーの外でビルドしたとき、"include/bits", "include/sys" が "install_headers"ターゲットのmakeでコピーされない問題がある。
例:

$ tar jxf uClibc-0.9.31.tar.bz2
$ cd uClibc-0.9.31
$ make O=`pwd`/../build defconfig
$ make O=`pwd`/../build all
$ make O=`pwd`/../build PREFIX=`pwd`/../dev install_headers

この状態では

`pwd`/../dev/usr/(...)/include

以下に "bits", "sys" ディレクトリとその配下のヘッダーファイルがコピーされないため、uClibcのヘッダーファイルをincludeするアプリをコンパイルするときにエラーになる。

原因はソースツリーの "extra/scripts/install_headers.sh" にある。
O="..." オプションを使わない場合は、バイナリのビルド時にソースツリー内部の"include"以下に "bits", "sys" が適切にコピーされるため問題とならない。
O="..." オプションを使う場合は、"bits", "sys" はビルドディレクトリの "include" 以下にシンボリックリンクとして作成されるが、install_headers.sh はこのディレクトリを無視している。

下記patchはこの問題を解決する。Makefile.in内では "install_headers" ターゲットで

top_builddir=(ビルドディレクトリ) \
   ./extra/scripts/install_headers.sh include (インストール先ディレクトリ)

の形でinstall_headers.sh を実行する。下記patchではtop_builddirのincludeもチェックし、もしソースツリーの外部にある場合はそちらもコピーするよう修正する。

--- install_headers.sh.bak      2011-04-10 16:16:42.000000000 +0900
+++ install_headers.sh  2011-04-10 17:41:30.000000000 +0900
@@ -32,19 +32,27 @@
        exit 1
 fi

+include_srcdir=`pwd`/${srcdir}
+include_srcdir=`readlink -f ${include_srcdir}`
+include_builddir=`readlink -f ${top_builddir}/include`
+
+function copy_ulibc_headers()
+{
+local srcdir_a=$1
+local dstdir_a=$2

 # Sanitize and copy uclibc headers
 (
 # We must cd, or else we'll prepend "${srcdir}" to filenames!
-cd "${srcdir}" || exit 1
+cd "${srcdir_a}" || exit 1
 find . ! -name '.' -a ! -path '*/.*' | sed -e 's/^\.\///' -e '/^config\//d' \
        -e '/^config$/d'
 ) | \
 (
 IFS=''
 while read -r filename; do
-       if test -d "${srcdir}/$filename"; then
-               mkdir -p "${dstdir}/$filename" 2>/dev/null
+       if test -d "${srcdir_a}/$filename"; then
+               mkdir -p "${dstdir_a}/$filename" 2>/dev/null
                continue
        fi
        if test x"${filename##libc-*.h}" = x""; then
@@ -59,13 +67,18 @@
                -U_LIBC \
                -U__UCLIBC_GEN_LOCALE \
                -U__NO_CTYPE \
-               "${srcdir}/$filename" \
+               "${srcdir_a}/$filename" \
        | sed -e '/^rtld_hidden_proto[  ]*([a-zA-Z0-9_]*)$/d' \
        | sed -e '/^lib\(c\|m\|resolv\|dl\|intl\|rt\|nsl\|util\|crypt\|pthread\)_hidden_proto[  ]*([a-zA-Z0-9_]*)$/d' \
-       >"${dstdir}/$filename"
+       >"${dstdir_a}/$filename"
 done
 )
+}

+copy_ulibc_headers ${srcdir} ${dstdir}
+if test x"${include_srcdir}" != x"${include_builddir}"; then
+    copy_ulibc_headers ${include_builddir} ${dstdir}
+fi

 # Fix mode/owner bits
 cd "${dstdir}" || exit 1


プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2011-04-11 17:45:04
md5:d989dfe50e6b33bb444926fab377560b
sha1:1681798cd4a557da275050a1600d6e3270307abd
コメント
コメントを投稿するにはログインして下さい。