2011-12-24 3 views
2

私はmy_application.pyを生成するautomakeのためにmy_application.py.inと言っています。 $ {prefix}を展開してアプリケーションにdatadirを取得するにはどうすればよいですか?今のところ、私が考えることができる最良の方法は、私のpythonアプリケーションでreplace()を使用することですが、もっと適切な方法があると仮定しています。Automakeのdatadirとprefix in python

if __name__ == "__main__": 
    app = Application() 
    app.VERSION = '@[email protected]' 
    app.PACKAGE = '@[email protected]' 
    # How should I get the DATA_DIR in this next line? 
    app.DATA_DIR = "@[email protected]".replace("${prefix}", "@[email protected]") 
    app.run() 
+0

注:automakeは.inファイルからファイルを生成しません。これは、ファイルの作成に使用されるconfig.statusを生成するautoconf生成のconfigureスクリプトです。 –

答えて

3

あなたはmake時に置換を行う必要があります。これは、あなたが#defineを設定することができますC、で簡単ですが、Pythonのために、私はこのような何かを試してみた:

foo.py: foo.py.in 
     [ -f [email protected] ] && rm -f [email protected] 
     $(SED) -e "s:[@][email protected]:$(datarootdir):" $< > [email protected] 
     chmod a-w [email protected] 

configure.acAC_PROG_SEDを追加)

+0

備考: '[@]'構造体は '@'のみからなる文字クラスです。 'Makefile.in'から' Makefile'を作成するときに 'config.status'が' sed'パターンを取得しないようにしています。 –

+1

datarootdirには '/'が含まれていることがほぼ確実であるため、sの別の区切り文字を指定することを推奨します。これは最初の近似値ですが、config.statusによって実行される他の置換は見逃されます。 –

+0

@WilliamPursell:ありがとう、ありがとう。私は自分自身が、特定のプロジェクトに関わるすべての置換を持つ 'dirs.py'(または' dirs.rb'など)というファイルを作成しているのを見つけました。 –

0

一つの一般的な手法は、(adl_RECURSIVE_EVALを使用することですautoconfアーカイブから)をconfigure.acにコピーして、完全に展開されたパスを生成します。

+0

よくあることだが、私はそれが正しい動作だとは思わない。 http://www.gnu.org/prep/standards/standards.html#Directory-Variablesによれば、これらの変数は 'make'時に変更可能でなければならないと言います。つまり、' make'時に展開する必要があります。 –