gcc-4.0.1 & gcc-4.3.1 on Panther

悲しくなった、一因には、これもあったかもしれない。

職場Webサーバの改定を促進するため、あるプログラムを創っていた。Perlで書いた。
まず、自宅サーバに導入、関係委員にテストをしてもらった。
うまく動いたので、公式サーバでテストをしたのだが、うまく動かない。

厳密に考えれば、自宅サーバはLeopard、公式サーバはPanther、Perlは共に5.10.0。
違うといえば違うし、同じといえば同じ、だ。
で、ハマる。

Leopardのgccは4.0.1、Pantherのそれは3.3だ。
この違いか、と、思ってしまったのだな。
で、gccの導入に週末を潰した。
結局、ここに書いたように、原因はあたしの勘違いにあったのだけれども、悔しいので、記事にしちまう。

1.gcc-4.0.1 on Panther
まず、portで必要な部品を導入。
port install gmp
port install mpfr
port install autogen

環境変数をセット。
setenv LD “/usr/bin/ld”
setenv CC “/usr/local/bin/gcc”

gccは、元々導入されている3.3を使うことにした。
gcc_select gcc33

で、だ。この、gcc_select、portで導入したのだが、妙なファイルを作ってくれる。
選択するgccの関連ファイルを
/usr/local/etc/select/gcc/
に1つずつファイルとして保存しているのだが、この中の、gcc33の中身が、
/usr/bin/gcc-3.3
/usr/bin/cpp-3.3
/usr/bin/c++-3.3
/usr/bin/bin/g++-3.3

/usr/bin/gcov-3.3

となっているのだな。Leopardは元々gcc4.0.1だ。その場合も、
/usr/bin/gcc-4.0
/usr/bin/cpp-4.0
/usr/bin/c++-4.0
/usr/bin/bin/g++-4.0

/usr/bin/gcov-4.0

と記述されている。
/usr/bin/bin/g++-3.3

/usr/bin/bin/g++-4.0
も、存在してないよぉ〜ん。
誰も不具合を指摘しないのかな。
切り替えてしまえば、元々導入していたgccは利用しないのかも、ね。特に、g++は…
気持ち悪いので、手動で編集し直しておいた。
それはそれとして、gcc-4.0.1、ね。
以下の作業は、
http://wistaria.ap.t.u-tokyo.ac.jp/Members/wistaria/log/gcc-4.3

を参考にさせていただいた。

適当なサブディレクトリに移動して、
curl -O http://ftp.gnu.org/gnu/gcc/gcc-4.0.1/gcc-4.0.1.tar.bz2
mkdir gcc-4.0.1-build ; cd gcc-4.0.1-build
tar jxf gcc-4.0.1.tar.bz2
mkdir gcc-4.0.1-build ; cd gcc-4.0.1-build
../gcc-4.0.1/configure –prefix=/usr/local/gcc-4.3.1

The following languages will be built: c,c++,fortran,java,objc
*** This configuration is not supported in the following subdirectories:
     target-libmudflap target-libada gnattools
    (Any other directories should still work fine.)
なんて表示されるけど、多分、使わないので、無視。

gmake -j4
gmake check

この時、autogenが活躍するのだけど、
*** 12,18 ****
  #if defined( X11_NEW_CHECK )
  struct wedge {
  #ifdef __cplusplus
! Widget        old, c_new;
  #else
     Widget     old, new; /* fixinc check FAILS ON BSD */
  #endif
— 12,18 —-
  #if defined( X11_NEW_CHECK )
  struct wedge {
  #ifdef __cplusplus
!       Widget  old, c_new;
  #else
     Widget     old, new; /* fixinc check FAILS ON BSD */
  #endif

といったような、ホワイトスペースに関係する違いを指摘してくれる。
ご苦労さん。
気にしないで…勿論、単なるホワイトスペースの違いだとチェックはした…

gmake install

後は、gcc_select用のファイルを用意する。
cd /usr/local/etc/select/gcc/
vi gcc401

/usr/local/gcc-4.0.1/bin/gcc
/usr/local/gcc-4.0.1/bin/cpp
/usr/local/gcc-4.0.1/bin/c++
/usr/local/gcc-4.0.1/bin/g++
/usr/local/gcc-4.0.1/bin/gcj
/usr/local/gcc-4.0.1/bin/gcov
/usr/local/gcc-4.0.1/bin/gfortran

こんな感じ。

2.gcc-4.3.1 on Panther
前項で用意したので、は、あるが、念のため。手順としては、
port install gmp
port install mpfr
port install autogen

と、部品を用意。
環境変数をセット、
setenv LD “/usr/bin/ld”
setenv CC “/usr/local/bin/gcc”

しといて…この場合のgccは、4.0.1を使ってみた。
cd /tmp/
curl -O http://ftp.gnu.org/gnu/gcc/gcc-4.3.1/gcc-4.3.1.tar.bz2
tar jxf gcc-4.3.1.tar.bz2

mkdir gcc-4.3.1-build ; cd gcc-4.3.1-build
../gcc-4.3.1/configure –prefix=/usr/local/gcc-4.3.1

やはり、
The following languages will be built: c,c++,fortran,java,objc
*** This configuration is not supported in the following subdirectories:
     target-libmudflap target-libada gnattools
    (Any other directories should still work fine.)

と表示される。無視。

make -j4 bootstrap
を実行したら、
checking assembler for .machine directive support… no
*** This target requires an assembler supporting “.machine”
you can get it from: ftp://gcc.gnu.org/pub/gcc/infrastructure/cctools-528.5.dmg
make: *** [configure-gcc] Error 1
と、表示されて止まってしまった。
実は、4.0.1の導入を先に書いたのだけれども、作業時間は4.3.1の導入が先だった。
だから、前項の通りに進めても、うまくできないかも。

さて、
ftp://gcc.gnu.org/pub/gcc/infrastructure/cctools-528.5.dmg
は、存在していなかった。

http://gcc.gnu.org/install/specific.html#powerpc-x-darwin
http://gcc.gnu.org/ml/gcc/2006-03/msg00507.html

を探って、
ftp://gcc.gnu.org/pub/gcc/infrastructure/cctools-590.36.dmg

を見つける。
ちなみに、自宅の実験機、元自宅サーバPowerMac Cubeには、Xcode 1.5が導入されている。さらに、このcctoolsを導入。
この実験機で作業を進めると、
/sw/lib/odcctools/bin/ld: unknown flag: -macosx_version_min
なんてエラーが出てしまう。
gcc-4.0.2をfinkだったかsvnだったか、で、導入していて、ldが悪さをするのだな。
だから、あえて、
setenv LD “/usr/bin/ld”
setenv CC “/usr/local/bin/gcc”

と、設定したのでした。
それと、再度gmakeを使う時には、
gmake clean
と実行しただけでは、
configure: error: run `make distclean’ and/or `rm ./config.cache’ and start over
といった具合に、怒られてしまう。
へいへい。

気を取り直して、
gmake -j4 bootstrap
gmake check

例のように、ホワイトスペースに関するエラーがでまして、無視。
後は、

gmake install

最後に、gcc_select用のファイルを用意。
cd /usr/local/etc/select/gcc/
vi gcc431

/usr/local/gcc-4.3.1/bin/gcc
/usr/local/gcc-4.3.1/bin/cpp
/usr/local/gcc-4.3.1/bin/c++
/usr/local/gcc-4.3.1/bin/g++
/usr/local/gcc-4.3.1/bin/gcj
/usr/local/gcc-4.3.1/bin/gcov
/usr/local/gcc-4.3.1
/bin/gfortran

gccを導入すると、FORTRANが使えるようになるのだよねぇ〜
ある人が、FORTRANのプログラムを表示することは、公然猥褻罪だ、と、言っていたな。
ある人は、FORTRANでプログラミングを覚えた人は、ダメだ、と、言っていたな。
別の人は、BASICでプログラミングを覚えた人は、ダメだ、と、言っていたな。

だから、あたしは、ダメな人、なんだな。
ちょっと、ダメでない、という、言い訳をすれば、FORTRANでもBASICでも、奇麗にプログラムを書く、という努力はしたよ。何しろ、数日過ぎれば、書いた自分でさえ、何をするためのプログラムなのかわからなくなったから、明日の自分への手紙だと思って書いたのであります。ちょっと、カッコいい、と、思うのは、あたしだけ、だろうね。

とは言え、今は、どちらのプログラムも、参考書が無いと書けない。
否、アルゴル系のプログラムは、全て、参考書が無いと書けない、よ。
論理だけが勝負、で、それをどう表現するのか、は、いちいち記憶していない。
何しろ、今日の昼、何を食べたのかさえ忘れているもん。
…食べてないかも


Comments are closed