2011-07-29 10 views
3

私はCで書かれ、automake/autoconfを使ってビルドされたプログラムがあり、2つのテストスイートがあります。一つはCで書かれたユニットテストスイートです。もう一方はエンドツーエンドであり、(現在)Pythonで書かれています。単体テストを常に実行する "make check"と、Pythonがインストールされている場合にのみエンドツーエンドのテストが必要です。これは私が今持っているものです。Pythonが利用可能であればテストプログラムを有効にする - automake

TESTS = unittests 
if HAVE_PYTHON 
TESTS += tester.py 
tester_py_SOURCES = src/test/tester.py.in 

tester.py: src/test/tester.py.in Makefile 
     $(SED) -e 's,[@]PYTHON[@],$(PYTHON),' < $< > [email protected] 
     chmod +x [email protected] 
endif 

HAVE_PYTHON

AM_PATH_PYTHON([2.6],, [:]) 
AM_CONDITIONAL([HAVE_PYTHON], [test "$PYTHON" != ":"]) 

でconfigureスクリプトによって設定されているこれは、UNIX上で正常に動作しますが、「tester.py.exeを作ることなしルール」で吹きますWindowsの場合また、#!行を取得するためのコピー&代用テクニックは、テストスイートを複数のモジュールに分割できないことを意味します。

これを行うより良い方法はありますか?

答えて

4

コンパイル済みのものにのみ_SOURCESを使用する必要があります。そのため、$(EXEEXT)が追加されています。これを試してみてください:

configure.acで置換するだけの理由はありますか?

AS_IF([test "$PYTHON" != ":"], [AC_CONFIG_FILES([src/test/tester.py])]) 

これはconfig.statusを使用してスクリプトをリメイクし、ルールを再構築自動生成されます。

EDIT 1:あなたは本当にmake checkの一部としてのpythonテスターのスクリプトを実行されて何をしたいのか、私はこれを行うたい場合

check-local: 
if HAVE_PYTHON 
     $(PYTHON) $(srcdir)/src/test/tester.py 
endif 

は(私は外 check-localを置きます if HAVE_PYTHONとなりますので、必要に応じて check-localの一部として実行する他のコマンドを定義することができます)。

これを書く代わりに、

check-local: 
     test "$(PYTHON)" != ":" && $(PYTHON) $(srcdir)/src/test/tester.py 

automakeマニュアルのextendingを参照してください。

+0

'check_SCRIPTS'もちろん、私はそれを考えなければなりませんでした。もう一つは 'AS_IF'の中に' AC_CONFIG_FILES'を置くことはできないと思っていましたが、とにかくそれを適切なPythonスタイルに変換しなければならないという問題は解決しませんでした。ここで本当に欲しいのは、 ''。/ tester.py'の代わりに '$(PYTHON)$(srcdir)/ src/test/tester.py'を実行する 'check-TESTS'ターゲットを取得する方法です' (私は結局、あきらめてラッパースクリプトを実行するかもしれませんが、それ以上のWindowsのクラップを処理しなければならないので、避けています) – zwol

+0

@Zack:編集を確認してください。 –

+0

うん、チェックローカルは行く方法だと思われる。ありがとう。 – zwol

関連する問題