VinePlusのgnuplotのバグについて
VinePlusにあるgnuplotのパッケージ(gnuplot-3.7.1-16vl1)を
使っていて困ったことがあった。
それは、日付を軸として使用すると、
データを読込んだときとグラフを書いたときとで、
1ヶ月ほどずれてしまうのだ。
調べた結果次のようなことが分かった。
- gnuplot-3.7.1のソースファイルtime.cの中に、2種類のgstrptime関数がある。
- この二つは、configure時もしくはmake時のオプションで、
どちらを使用するか決定する。
- 下の方の関数には、月の扱いに不整合がある。(gnuplot-3.7.3でも同様)
- 何もしなければ、普通は上の方の関数を使う。
- Vineのパッケージは下の方の関数を使うような記述となっている。
ここで言う不整合とは、月をどの様な数値で表すのかということである。
内部表現は西洋風にできているため、
日付に関しては1日〜31日を1〜31の数値で表すが、
月に関しては1月〜12月を0-11の数値で表すように記述されている。
しかし、そのための補正が下の方のgstrptime関数内に記述されていないのである。
(上の方にはある)
解決策は二つだろう。
- SRPMのパッケージを展開した後、
gnuplot.spec内の「-DUSE_SYSTEM_TIME」の記述を消して、
time.cの上の方の関数を使うようにして、バイナリパッケージの生成をする。
生成したバイナリパッケージをインストールする。
- time.cの「LETTER('m', 2, tm_mon, NOTHING);」を、
「LETTER('m', 2, tm_mon, tm->tm_mon--);」の様に書き換えて、
下の関数の方でも補正するようにする。
私は一つ目を採用し、この問題の解決ができた。
ただ、他に副次的な影響が無いことを保証するわけではない。