2013-01-08 3 views
0

configure.ac에서 Erlang 라이브러리를 확인해야하지만 erlang 응용 프로그램 목록이 별도의 파일에 있으므로 해당 목록을 추출하려면 프로그램을 실행해야합니다.쉘 변수를 autoconf 매크로 입력으로 사용

일반적으로,이 작업을 수행 할 수 있습니다

AC_ERLANG_CHECK_LIB([app1]) 
AC_ERLANG_CHECK_LIB([app2]) 

을하지만, 실제 애플 리케이션을 별도의 파일에있는 (그리고 내가 어디 선가 일을 생각하고, configure.ac에 그들을 반복하지 않기 때문에 의 라인을 따라 :.

DEPS=`some command that gets app1, app2` 
# DEPS=app1 app2 

m4_foreach_w(dep, "$DEPS", [AC_ERLANG_CHECK_LIB([dep])]) 

내가 그의 실제 값을 필요로하기 때문에 "$ DEPS는"잘못된 인수가 여기에 것을 알고 - [APP1 APP2] 같은 것을 또한 알고 그 DEPS의 평가 변수가 완료되지 않았습니다 ./configure가 호출되는 반면 m4_foreach_w는 DE 값을 필요로합니다. PS 이전.

어떻게 해결할 수 있을까요?

답변

1

당신이 시도 할 수 :

m4_foreach_w(dep, m4_esyscmd([some command that generates list]), 
     [AC_ERLANG_CHECK_LIB(dep)]) 

나는이 나쁜 아이디어라고 생각하지만, 잠재적 인 함정에 대한 자세한 정보를 제공 할 수없는입니다. 그것이 나라면, 나는 의존성을 하드 코딩하거나 스크립트를 사용하여 configure.ac을 생성하는 것을 선호합니다.

+0

흠. 왜 그것이 나쁜 생각인지 설명하기위한주의? – jvliwanag

+0

@jvliwanag 내 관심사는 m4 따옴표입니다. 버그 추적에 어려움을 겪는 것은 쉽습니다. 반면에 configure.ac을 생성하는 스크립트는 아마 훨씬 더 취약합니다. 나는 단순히'm4_esyscmd'에주의한다. 아마 지나치게 그렇게. –

0

이 접근법은 총 과잉 공격일지도 모릅니다.

당신이 목록을 가져 GNU Autogen .DEF 파일 형식으로 출력을로 찾으면하기 위해 프로그램을 실행하면 :

이 elib.def

 
autogen definitions elib; 

elib = { name="app1"; }; 
elib = { name="app2"; }; 

다음과 같은 템플릿 파일을 autogen를 호출 :

gen.tpl

,

which'll 출력 elib.m4 매크로 :

 
... 
# whatever comment for the macro 
AC_DEFUN([CHECK_MY_ELIBS], 
[ 
AC_ERLANG_CHECK_LIB([app1]) 
AC_ERLANG_CHECK_LIB([app2]) 
]) 

그런 다음 configure.ac에서 CHECK_MY_ELIBS를 호출 AC_CONFIG_MACRO_DIR에 elib.m4 설치 한 후.

물론 다른 방법 (예 : perl, python)으로 elib.m4를 생성 할 수도 있지만 너무 어렵지 않습니다.

관련 문제