ruby 1.9.1-p243 @ Visual C++ 2008 -落とし穴 GL/LTCG Reloaded
ruby 1.9.1-p243 @ Visual C++ 2008 -落とし穴 GL/LTCG Edition は本当に落とし穴で泣かされたが、そのままGL/LTCG無しで通すのも癪だし、再チャレンジ枠を設けることにした。
まず始めに、GL/LTCGなしで configure + nmake。msvcr90-ruby-191.libが出来た辺りでCtrl+Cで強制終了する。こうすることで、清く正しいsh……じゃない、清く正しいdef/libを回収する。
次に、-GL/LTCG + configure + nmakeで、encのビルドで死ぬまで流す。
(snip) ライブラリ enc/encdb.lib とオブジェクト enc/encdb.exp を作成中 encdb.obj : error LNK2001: 外部シンボル "_rb_encdb_dummy" は未解決です。 encdb.obj : error LNK2001: 外部シンボル "_rb_encdb_replicate" は未解決です。 encdb.obj : error LNK2001: 外部シンボル "_rb_encdb_alias" は未解決です。 encdb.obj : error LNK2001: 外部シンボル "_rb_encdb_declare" は未解決です。 .ext/i386-mswin32_90/enc/encdb.so : fatal error LNK1120: 外部参照 4 が未解決です。 NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 9.0\VC\BIN\cl.EXE"' : リターン コード '0x2' Stop. NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 9.0\VC\BIN\nmake.EXE"' : リターン コード '0x2' Stop.
そして、回収したdef, libを適用してnmake。タイムスタンプを更新しておかないと死ぬハメになる。
そして
OpenSSLモジュールのコンパイルではまった。
問題はOpenSSL 使用トラブル - BiBoLoGらしいので、さくっと修正してやったが、Ruby1.9 上のopensslライブラリがビルドできない。 - サイログ。MiyakoとかRubyとかなんとか+Miyako ACCESS MAPまで派生してくれた、なんてことだ……。
少々調べてみると、事は簡単で、
/* +++ ossl_x509attr.c (164- +++ */ #if defined(HAVE_ST_X509_ATTRIBUTE_SINGLE) || defined(HAVE_ST_SINGLE) // x509_attributes_st.singleがあるかどうかで切り替えていて # define OSSL_X509ATTR_IS_SINGLE(attr) ((attr)->single) # define OSSL_X509ATTR_SET_SINGLE(attr) ((attr)->single = 1) #else # define OSSL_X509ATTR_IS_SINGLE(attr) (!(attr)->set) # define OSSL_X509ATTR_SET_SINGLE(attr) ((attr)->set = 0) #endif
で、
/* +++ x509.h (213- +++ */ /* a sequence of these are used */ typedef struct x509_attributes_st { ASN1_OBJECT *object; int single; /* 0 for a set, 1 for a single item (which is wrong) */ // ← x509_attributes_st.singleがあるのに union { char *ptr; /* 0 */ STACK_OF(ASN1_TYPE) *set; /* 1 */ ASN1_TYPE *single; } value; } X509_ATTRIBUTE;
/* extconf.h */ #ifndef EXTCONF_H #define EXTCONF_H #define HAVE_ASSERT_H 1 #define HAVE_OPENSSL_SSL_H 1 #define HAVE_OPENSSL_CONF_API_H 1 #define HAVE_RB_STR_SET_LEN 1 #define HAVE_RB_BLOCK_CALL 1 #define HAVE_ERR_PEEK_LAST_ERROR 1 #define HAVE_BN_MOD_ADD 1 #define HAVE_BN_MOD_SQR 1 #define HAVE_BN_MOD_SUB 1 #define HAVE_BN_PSEUDO_RAND_RANGE 1 #define HAVE_BN_RAND_RANGE 1 #define HAVE_CONF_GET1_DEFAULT_CONFIG_FILE 1 #define HAVE_EVP_CIPHER_CTX_SET_PADDING 1 #define HAVE_EVP_CIPHERFINAL_EX 1 #define HAVE_EVP_CIPHERINIT_EX 1 #define HAVE_EVP_DIGESTFINAL_EX 1 #define HAVE_EVP_DIGESTINIT_EX 1 #define HAVE_EVP_MD_CTX_CLEANUP 1 #define HAVE_EVP_MD_CTX_CREATE 1 #define HAVE_EVP_MD_CTX_DESTROY 1 #define HAVE_EVP_MD_CTX_INIT 1 #define HAVE_HMAC_CTX_CLEANUP 1 #define HAVE_HMAC_CTX_INIT 1 #define HAVE_PEM_DEF_CALLBACK 1 #define HAVE_PKCS5_PBKDF2_HMAC_SHA1 1 #define HAVE_X509V3_SET_NCONF 1 #define HAVE_X509V3_EXT_NCONF_NID 1 #define HAVE_X509_CRL_ADD0_REVOKED 1 #define HAVE_X509_CRL_SET_ISSUER_NAME 1 #define HAVE_X509_CRL_SET_VERSION 1 #define HAVE_X509_CRL_SORT 1 #define HAVE_OBJ_NAME_DO_ALL_SORTED 1 #define HAVE_SSL_SESSION_GET_ID 1 #define HAVE_OPENSSL_CLEANSE 1 #define HAVE_VA_ARGS_MACRO 1 #define HAVE_OPENSSL_ENGINE_H 1 #define HAVE_ENGINE_ADD 1 #define HAVE_ENGINE_LOAD_BUILTIN_ENGINES 1 #define HAVE_ENGINE_GET_DIGEST 1 #define HAVE_ENGINE_GET_CIPHER 1 #define HAVE_ENGINE_CLEANUP 1 #define HAVE_OPENSSL_OCSP_H 1 #endif // HAVE_ST_X509_ATTRIBUTE_SINGLE がない!
と言う理由だった。まったく……