tjmiuraの日記

気づいたら技術リンクメモになっていた。

Solairs10上でGNU Screenをコンパイル

で、これは何のためだったかというと、これ。

どっちかっつうと、misc.cの619行目

setenv(var, value);

を編集しちゃうよりは、この部分をくくってる条件マクロの方を編集するべきではないかと。

diff -ur screen-4.0.3.org/misc.c screen-4.0.3/misc.c
--- screen-4.0.3.org/misc.c     2003-12-05 22:45:41.000000000 +0900
+++ screen-4.0.3/misc.c 2008-07-21 17:55:44.950202000 +0900
@@ -613,7 +613,7 @@
    */
 # endif /* NEEDSETENV */
 #else /* USESETENV */
-# if defined(linux) || defined(__convex__) || (BSD >= 199103)
+# if defined(linux) || defined(__convex__) || (BSD >= 199103) || defined(__sun__)
   setenv(var, value, 1);
 # else
   setenv(var, value);

補足すると、Solarissetenv(3C)が備わったのはSolaris10以降なので、SunOSバージョン識別は結局不要で、条件分岐としてはこれでよかった。
Solaris9以前ではputenv(3C)が使われるのでこれまで問題にならなかったわけだ。

なお、本家では議論済みらしい。

Cソース上でSolarisのバージョンを識別するには

いつも、「どうやるんだったっけ……?」となるネタ。

cpp -dM /dev/null

または

gcc -dM -xc -E /dev/null

って、Solarisのバージョンを表す文字列が含まれてないじゃん…