toge's diary

コンピュータ関連の趣味をつらつらと。

Google Code Hostingに属性つける

下を参考にGoogle Code Hostingに属性をつけた。
svn:needs-lockなんて知らないうちに追加されたのね。付けておこっと。
http://subversion.bluegate.org/doc/ch07s02.html

属性つけるとファイルのアップロードし直しになるのね。今まではローカルだったから気にもしてなかったけれど、Google Code Hostingが遅いのでよーく分かる。

完全に作業メモだな・・・。

-MMで無駄な依存ファイルを表示させない

さらに作業メモ。

makeで必要な依存関係を自動生成するために"gcc -MM"ってやるのは常套手段ですが、この際にboostとか変更の可能性が低いヘッダへの依存がばらばらでてきて邪魔だった。
"gcc -I /usr/hoge/include"ではなくて、"gcc -isystem /usr/hoge/include"ってすれば良かったのね。
でやってみた結果。

gl2d/SDL_gl2d_pfont.o: gl2d/SDL_gl2d_pfont.c glee/GLee.h \
  gl2d/SDL_gl2d_pfont.h gl2d/SDL_gl2d.h /usr/include/SDL/SDL.h \
  /usr/include/SDL/SDL_main.h /usr/include/SDL/SDL_types.h \
  /usr/include/SDL/SDL_getenv.h /usr/include/SDL/SDL_error.h \
  /usr/include/SDL/begin_code.h /usr/include/SDL/close_code.h \
  /usr/include/SDL/SDL_rwops.h /usr/include/SDL/SDL_timer.h \
  /usr/include/SDL/SDL_audio.h /usr/include/SDL/SDL_byteorder.h \
  /usr/include/SDL/SDL_cdrom.h /usr/include/SDL/SDL_joystick.h \
  /usr/include/SDL/SDL_events.h /usr/include/SDL/SDL_active.h \
  /usr/include/SDL/SDL_keyboard.h /usr/include/SDL/SDL_keysym.h \
  /usr/include/SDL/SDL_mouse.h /usr/include/SDL/SDL_video.h \
  /usr/include/SDL/SDL_mutex.h /usr/include/SDL/SDL_quit.h \
  /usr/include/SDL/SDL_version.h 

ぐあ、sdl-configの馬鹿っ。/usr/bin/sdl-configを弄るわけにもいかないので、

/usr/bin/sdl-config --cflags | sed 's/-I/-isystem /' 

とやって逃げることにしました。ああ、これですっきり。参照するファイルが減った分、コンパイルも速くなったに違いない。

・・・しかしどんどん変態的なMakefileになってきたな。

シングルトン実装

ああ、なんでわざわざ劣化コピーみたいなタイトルつけるかなぁと自分にツッコミをいれつつ。
id:shinichiro_h:20060817#1155781747 に心動かされたので、眠ることも出来ないのでちょっと遊んでみる。
素人考えでマクロ化してみると、こんな感じか。
GCCのバージョンって事前定義マクロになかったっけか?
あと、後者はPOSIXとか使った方がよさげ。

#if defined(__i386__)   ||                       \
    defined(__alpha__)  ||                       \
    defined(__ia64__)   ||                       \
    defined(__rs6000__) ||                       \
    defined(__s390__)   || defined(__s390x__)

#define EXIT_NOT_FIRST()                                        \
  {                                                             \
    static volatile int flag__value;                            \
    if (1 == __sync_val_compare_and_swap(&flag__value, 0, 1))   \
      return;                                                   \
  }                                                             

#else 

#define EXIT_NOT_FIRST()                        \
  {                                             \
    static volatile int flag__value;            \
    if (1 == flag__value)                       \
      return;                                   \
    flag__value = 1;                            \
  }                                                             

#endif 

あ、ちなみに __builtin プレフィクスがついてないのは Itanium の ABI にあわせるためとか書いてありました。

というのはgccの4.0.x系のgcc/config/ia64/ia64intrin.hに既に__sync_val_compare_and_swapが定義されているからみたいですな。なるぅ。