FreeBSD ports-jp tips 集


1. PLISTを作成する際、漏れなくファイルをリストアップするには?

PLISTファイルのリストアップ は適当な tmp ディレクトリ(/tmp あるいは /var/tmp)に出力してそのリストを取ればいいでしょう。で、しかる後、
  1. Imake な ports でない場合
    # find /tmp/usr/local ! -type d
    (何も出力されないことを確認)
    # make PREFIX=/tmp/usr/local package
    # pkg_delete hoge_pkg_name
    # pkg_add /hoge_pkg_dir/hoge_pkg_name.tgz
    # pkg_delete hoge_pkg_name
    # find /tmp/usr/local ! -type d
    (何も出力されないことを確認)
    
  2. Imake な ports の場合
    # find /tmp/usr/X11R6 ! -type d
    (何も出力されないことを確認)
    # make DESTDIR=/tmp PREFIX=/tmp/usr/X11R6 package
    # pkg_delete hoge_pkg_name
    # pkg_add /hoge_pkg_dir/hoge_pkg_name.tgz
    # pkg_delete hoge_pkg_name
    # find /tmp/usr/X11R6 ! -type d
    (何も出力されないことを確認)
    

2. FreeBSDの浮動小数点例外の扱いを他のUnixと同じにするには?

(FreeBSD-ports-jp/1993より)

現在多くのシステムは浮動小数点例外を IEEE 754 で扱うのですが、 FreeBSD では旧来の SIGFPE を発生します。他のシステムでは、無限大 (Inf, -Inf) なり非数値数 (NaN) を返して通常処理になるところが、 SIGFPE のデフォルト動作はcore dump なので落ちます。

FreeBSD で他のシステムの振舞に合わせる場合、次 のようなコードを main の入口と出口に入れるといいかもしれません。

    #ifdef __FreeBSD__
    #include <floatingpoint.h>
    #endif

    #ifdef __FreeBSD__
         /* allow divide by zero -- Inf */
        fpsetmask(fpgetmask() & ~(FP_X_DZ|FP_X_INV));
    #endif

         :

    #ifdef __FreeBSD__
        fpresetsticky(FP_X_DZ|FP_X_INV);
        fpsetmask(FP_X_DZ|FP_X_INV);
    #endif

www@jp.FreeBSD.org
Copyright (C) 1998-1999 The FreeBSD Project (Japan). All rights reserved.
$Date: 1999/08/11 14:57:30 $