SVN::Coreについてくるsubversionが古い
ちょっと用事があって、PerlにSVN::Coreをインストール。Buildを走らせるとこんなエラー。
_svn/util.c subversion/mod_dav_svn/util.c: In function 'dav_svn__log_err': subversion/mod_dav_svn/util.c:630: error: 'dav_error' has no member named 'save_errno' subversion/mod_dav_svn/util.c:631: error: 'dav_error' has no member named 'save_errno' make: *** [subversion/mod_dav_svn/util.lo] エラー 1 building subversion failed at inc/My/SVN/Builder.pm line 126.
構造体のメンバがないらしいです。
ソースを読んでみると、このdav_errorって構造体はapacheのmod_dav中のmod_dav.hで定義されています。
最新の2.4.6だとこんな。
typedef struct dav_error { int status; /* suggested HTTP status (0 for no error) */ int error_id; /* DAV-specific error ID */ const char *desc; /* DAV:responsedescription and error log */ apr_status_t aprerr; /* APR error if any, or 0/APR_SUCCESS */ const char *namespace; /* [optional] namespace of error */ const char *tagname; /* name of error-tag */ struct dav_error *prev; /* previous error (in stack) */ } dav_error;
確かに、save_errnoってメンバはいません。
2.2.25だとこんなのです。
typedef struct dav_error { int status; /* suggested HTTP status (0 for no error) */ int error_id; /* DAV-specific error ID */ const char *desc; /* DAV:responsedescription and error log */ int save_errno; /* copy of errno causing the error */ const char *namespace; /* [optional] namespace of error */ const char *tagname; /* name of error-tag */ struct dav_error *prev; /* previous error (in stack) */ } dav_error;
ありますね。save_errno。ふーむ、2.2って随分昔だぞ。
つまり、SVN::Coreに付属しているsubversionがちょっと古めだってことですね。
ということで Alien-SVN-v1.7.3.1/src/subversion を Alien-SVN-v1.7.3.1/src/_subversionとリネーム*1した上で、subversionの最新版をダウンロードして、Alien-SVN-v1.7.3.1/src/subversionへ展開。その上で、Buildを実行して解決。
*1:まぁ消してもいいんですけど