操作
サポート #4032
完了ソースからインストールした時のヘッダのタイムスタンプ
開始日:
2017/05/06
期日:
進捗率:
100%
予定工数:
説明
ソースからビルドしてインストールするとインストールされたヘッダのタイムスタンプはインストールした時のタイムスタンプになるようです。
そのためOpenRTMをインストールすると、実際には変更がなくてもOpenRTMに変更があったとみなされ、OpenRTMに依存するソフトウェアをビルドするとすべてコンパイルし直しになってしまいます。
インストール時にファイルのタイムスタンプを維持するようにはできないでしょうか。
n-ando さんが7年以上前に更新
- ステータス を 新規 から 解決 に変更
- 対象バージョン を RELEASE_1_2_0 にセット
- 進捗率 を 0 から 100 に変更
install-sh/install コマンド実行時に、-Cオプションまたは-pオプションを追加する必要がある。
- install-sh: autoconf/autoreconf が生成するinstallコマンドの代替
- install: システムに標準で含まれるコマンド
タイプスタンプを保持するためのオプションとして -Cと-pがある。
-C ファイルをコピーします。コピー先ファイルがすでに存在しかつ内容が
同一である場合には、ターゲットの修正時刻を変更しません。-p 修正時刻を保存します。 -C (比較してコピー) オプションが指定された
場合のようにコピーを行いますが、ターゲットファイルが存在しないも
しくは内容が異なる場合、ファイルの修正時刻を保存します。
-Cの場合は、コピー先にファイルがない場合、インストールした時間のタイムスタンプでファイルがコピーされるので、十分でない。
オプションとしては-pの方がふさわしいが、install-shには-pは実装されておらず、-pを常に指定することはできない。
したがって、installコマンドの有無を調べ、存在すれば-pオプションを使用、出なければ-Cを使用するようにconfigure.acを変更した。
dnl Adding -C/-p option to header install command
install_exists=`which install`
if test "x$install_exists" = "x" ; then
AC_SUBST([INSTALL_HEADER], ['${INSTALL} -c -C -m 644'])
else
AC_SUBST([INSTALL_HEADER], ['${INSTALL} -c -p -m 644'])
fi
以上で、元のヘッダのタイムスタンプが保持された。
操作