#navi_header|技術| 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もチェックし、もしソースツリーの外部にある場合はそちらもコピーするよう修正する。 #more|| #pre||> --- 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 ||< #navi_footer|技術|