[Momonga-devel.ja:00194] @を含むディレクトリ


ほそのひでともです。FYI.

非常に稀なケースだとは思うのですが、
HEADのfreetypeパッケージをビルド中、
ビルド用ディレクトリのパス名に"@"が入っているためにエラーが出てしまう、
というトラブルがありました。

具体的にはこんなトラブルです。

  make[1]: Entering directory `/home/h12o.org/h/work/h@xxxxxxxxxxxxxxxxxxxxx/home/cvs/pkgs/freetype/BUILD/freetype-1.3.1/po'
  ( if test 'x/home/h12o.org/h/work/h@xxxxxxxxxxxxxxxxxxxxx/home/cvs/pkgs/freetype/BUILD/freetype-1.3.1/po' != 'x.'; then \
      posrcprefix='/home/h12o.org/h/work/h@xxxxxxxxxxxxxxxxxxxxx/home/cvs/pkgs/freetype/BUILD/freetype-1.3.1/'; \
    else \
      posrcprefix="../"; \
    fi; \
    sed -e '/^#/d' -e '/^[ 	]*$/d' \
        -e "s@.*@	$posrcprefix& \\\\@" \
        -e '$s/\(.*\) \\/\1/' < /home/h12o.org/h/work/h@xxxxxxxxxxxxxxxxxxxxx/home/cvs/pkgs/freetype/BUILD/freetype-1.3.1/po/POTFILES.in > POTFILES )
  sed: -e expression #3, char 31: Unknown option to 's'
  make[1]: *** [POTFILES] Error 1
  make[1]: Leaving directory `/home/h12o.org/h/work/h@xxxxxxxxxxxxxxxxxxxxx/home/cvs/pkgs/freetype/BUILD/freetype-1.3.1/po'
  make: *** [ttpo] Error 2
  error: Bad exit status from /var/tmp/rpm-tmp.34749 (%build)

私は、CVSの作業コピーを格納する場所として、

  ${HOME}/work/<アカウント>/<CVSリポジトリまでのパス>

というパス名でディレクトリを掘ってから作業をはじめることにしています。
私の場合、Momonga Linux HEADのCVS作業コピー格納場所は
Momonga Projectのアカウントがあるので、以下のようになります。
(${HOME} == /home/h12o.org/h)

  /home/h12o.org/h/work/h@xxxxxxxxxxxxxxxxxxxxx/home/cvs

そして、%{builddir}/freetype-1.3.1/po/Makefileの中で、
エラーを起こしている個所を見ると、以下のようになっています。

  POTFILES: POTFILES.in
  	( if test 'x$(srcdir)' != 'x.'; then \
  	    posrcprefix='$(top_srcdir)/'; \
  	  else \
  	    posrcprefix="../"; \
  	  fi; \
  	  sed -e '/^#/d' -e '/^[ 	]*$$/d' \
  	      -e "s@.*@	$$posrcprefix& \\\\@" \
  	      -e '$$s/\(.*\) \\/\1/' < $(srcdir)/POTFILES.in > POTFILES )

ここで、$$posrcprefixとある部分に、最終的に
  /home/h12o.org/h/work/h@xxxxxxxxxxxxxxxxxxxxx/home/cvs
が入ります。すると、引用個所の下から2行目は以下のようになります。

  	      -e "s@.*@	/home/h12o.org/h/work/h@xxxxxxxxxxxxxxxxxxxxx/home/cvs& \\\\@" \

お分かりでしょうか。sedで特別な意味を持つ"@"が
意図しないところに入ってしまうのです。
そこで、この部分がsedの文法エラーを引き起こし、makeは止まります。

さて。教訓くらい書いとくとして…
教訓は…えーと…
「あまり変な文字列を含むディレクトリを開発に使わないようにしよう」
てな感じでしょうか。

私の場合は最終的にDNSのゾーンファイルっぽく(?)
"@"を"."に置き換えて対処しました。

--
ほそのひでとも