Android makefile 내 함수 하나만 해석해주세요.

yo-tteum의 이미지

제가 envsetup.sh부터 따라왔는데 makefile 메뉴얼을 봐도 실제 응용된 코드는 난해하고 인터넷 예제도 제가 보는 코드와 일치하는 예제를 찾기가 힘드네요.
build/core/product.mk 파일 내의 resolve-short-product-name 함수입니다.
TARGET_DEVICE값을 구하기 위해서 TARGET_PRODUCT값을 받아서 처리를 하는것으로 보여집니다.
만약에 SKT에 출시될 갤럭시S4라고 하면 TARGET_PRODUCT값은 "s3_skt_kr" 이 될텐데 TARGET_DEVICE는 "s3"로만 나오면 되거든요.
그런데 이 함수를 호출하는 build/core/product_config.mk 에는 INTERNAL_PRODUCT값을 먼저 구합니다. 뭐하자는 건지 잘..
line-by-line으로 해석해주시면 가장 좋고 조그만 단서라도 부탁드려요.

200 # Convert a short name like "sooner" into the path to the product
201 # file defining that product.
202 #
203 INTERNAL_PRODUCT := $(call resolve-short-product-name, $(TARGET_PRODUCT))
204 #$(error TARGET_PRODUCT $(TARGET_PRODUCT) --> $(INTERNAL_PRODUCT))
205
206 # Find the device that this product maps to.
207 TARGET_DEVICE := $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_DEVICE)

168 #
169 # Returns the product makefile path for the product with the provided name
170 #
171 # $(1): short product name like "generic"
172 #
173 define _resolve-short-product-name
174   $(eval pn := $(strip $(1)))
175   $(eval p := \
176       $(foreach p,$(PRODUCTS), \
177           $(if $(filter $(pn),$(PRODUCTS.$(p).PRODUCT_NAME)), \
178             $(p) \
179        )) \
180    )
181   $(eval p := $(sort $(p)))
182   $(if $(filter 1,$(words $(p))), \
183     $(p), \
184     $(if $(filter 0,$(words $(p))), \
185       $(error No matches for product "$(pn)"), \
186       $(error Product "$(pn)" ambiguous: matches $(p)) \
187     ) \
188   )
189 endef
190 define resolve-short-product-name
191 $(strip $(call _resolve-short-product-name,$(1)))
192 endef

실행할 때 넘겨받는 인자값은 "TARGET_PRODUCT"입니다.

$(eval pn := $(strip $(1)))

위 내용도 pn에 TARGET_PRODUCT를 저장하는것으로 보이는데 eval은 왜 저기 붙어있나요.

그리고 더 어려운게 $(PRODUCTS) 요놈이 도대체 어디서 설정되는지 find로 문자열 검색해도 안나오네요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.