native.cc_library
. ध्यान दें कि नेटिव मॉड्यूल सिर्फ़ लोड होने के चरण में उपलब्ध होता है. उदाहरण के लिए, मैक्रो के लिए, नियम लागू करने के दौरान नहीं. एट्रिब्यूट, None
की वैल्यू को अनदेखा करेंगे. साथ ही, उन्हें ऐसा मानेंगे जैसे एट्रिब्यूट को सेट नहीं किया गया हो.ये फ़ंक्शन भी उपलब्ध हैं:
सदस्य
- existing_rule
- existing_rules
- exports_files
- ग्लोब
- module_name
- module_version
- package_group
- package_name
- package_relative_label
- repository_name
- सबपैकेज
existing_rule
unknown native.existing_rule(name)
None
बताता है.यहां, लिखने के तरीके जैसे ऑब्जेक्ट का मतलब है, बहुत ज़्यादा बदलाव न किए जा सकने वाले ऑब्जेक्ट x
का मतलब, len(x)
, name in x
, x[name]
, x.get(name)
, x.items()
, x.keys()
, और x.values()
के लिए.
अगर --noincompatible_existing_rules_immutable_view
फ़्लैग सेट किया गया है, तो यह दिखाने के बजाय, उसी कॉन्टेंट का नया म्यूटेबल लिखता है.
नतीजे में हर एट्रिब्यूट के लिए एक एंट्री शामिल होती है. इसमें निजी एट्रिब्यूट (जिनके नाम अक्षर से शुरू नहीं होते) और कुछ ऐसे लेगसी एट्रिब्यूट टाइप को छोड़कर शामिल हैं जिन्हें दिखाया नहीं जा सकता. साथ ही, इस डिक्शनरी में नियम के इंस्टेंस के name
और kind
(उदाहरण के लिए, 'cc_binary'
) के लिए एंट्री शामिल हैं.
नतीजे की वैल्यू, एट्रिब्यूट की वैल्यू इस तरह दिखाती हैं:
- str, int, और bool टाइप एट्रिब्यूट की विशेषताएं ऐसे दिखाई गई हैं.
- उसी पैकेज में मौजूद टारगेट के लिए लेबल को
':foo'
फ़ॉर्म वाली स्ट्रिंग में या किसी दूसरे पैकेज के टारगेट के लिए'//pkg:name'
फ़ॉर्मैट में बदला जाता है. - सूचियों को टूपल के तौर पर दिखाया जाता है और लिखवाने की संख्या को नए और बदले जा सकने वाले डिक्शनरी में बदल दिया जाता है. इन्हें एक ही तरीके से बार-बार बदला जाता है.
select
वैल्यू, ऊपर बताए गए कॉन्टेंट के हिसाब से बदली जाती हैं.- ऐसे एट्रिब्यूट जिनके लिए, नियम बनाने के दौरान कोई वैल्यू नहीं दी गई थी और जिनकी डिफ़ॉल्ट वैल्यू कैलकुलेट की गई है उन्हें नतीजे से बाहर रखा गया है. (विश्लेषण के चरण से पहले, कैलकुलेट की गई डिफ़ॉल्ट वैल्यू को कैलकुलेट नहीं किया जा सकता.).
अगर हो सके, तो इस फ़ंक्शन का इस्तेमाल करने से बचें. इससे फ़ाइलें मज़बूत बनती हैं और फ़ाइलों के क्रम पर निर्भर रहता है. साथ ही, ध्यान रखें कि यह नियम के दो अन्य कन्वर्ज़न एट्रिब्यूट की वैल्यू से काफ़ी अलग है. वैल्यू के अंदरूनी फ़ॉर्मैट से Starlark भी अलग है: एक का इस्तेमाल डिफ़ॉल्ट वैल्यू के लिए और दूसरे का इस्तेमाल ctx.attr.foo
करता है.
पैरामीटर
पैरामीटर | ब्यौरा |
---|---|
name
|
ज़रूरी है टारगेट का नाम. |
existing_rules
unknown native.existing_rules()
existing_rule(name)
के बाद मिलता है.यहां, लिखने के तरीके जैसे ऑब्जेक्ट का मतलब है, बहुत ज़्यादा बदलाव न किए जा सकने वाले ऑब्जेक्ट x
का मतलब, len(x)
, name in x
, x[name]
, x.get(name)
, x.items()
, x.keys()
, और x.values()
के लिए.
अगर --noincompatible_existing_rules_immutable_view
फ़्लैग सेट किया गया है, तो यह दिखाने के बजाय, उसी कॉन्टेंट का नया म्यूटेबल लिखता है.
ध्यान दें: अगर हो सके, तो इस फ़ंक्शन का इस्तेमाल करने से बचें. इससे फ़ाइलें मज़बूत बनती हैं और फ़ाइलों के क्रम पर निर्भर रहता है. इसके अलावा, अगर --noincompatible_existing_rules_immutable_view
फ़्लैग सेट है, तो यह फ़ंक्शन बहुत महंगा पड़ सकता है. खास तौर पर तब, जब इसे लूप में इस्तेमाल किया जाता हो.
exports_files
None native.exports_files(srcs, visibility=None, licenses=None)
पैरामीटर
पैरामीटर | ब्यौरा |
---|---|
srcs
|
sequence of strings ;
ज़रूरी हैएक्सपोर्ट की जाने वाली फ़ाइलों की सूची. |
visibility
|
sequence; or None ;
डिफ़ॉल्ट = कोई नहींआपके पास 'किसको दिखे' सेटिंग का एलान करने का विकल्प है. फ़ाइलें तय किए गए टारगेट के लिए दिखेंगी. अगर कोई 'किसको दिखे' सेटिंग तय नहीं की गई है, तो फ़ाइलें हर पैकेज को दिखेंगी. |
licenses
|
sequence of strings; or None ;
डिफ़ॉल्ट = कोई नहींचुने जाने वाले लाइसेंस. |
ग्लोब
sequence native.glob(include=[], exclude=[], exclude_directories=1, allow_empty=unbound)
include
में कम से कम एक पैटर्न से मेल खाता है.exclude
में किसी भी पैटर्न से मेल नहीं खाता (डिफ़ॉल्ट[]
).
exclude_directories
आर्ग्युमेंट को चालू किया गया (1
पर सेट किया गया) है, तो डायरेक्ट्री टाइप वाली फ़ाइलें, नतीजों से हटा दी जाएंगी (डिफ़ॉल्ट 1
).
पैरामीटर
पैरामीटर | ब्यौरा |
---|---|
include
|
sequence of strings ;
डिफ़ॉल्ट = []शामिल किए जाने वाले ग्लोब पैटर्न की सूची. |
exclude
|
sequence of strings ;
डिफ़ॉल्ट = []शामिल नहीं किए जाने वाले ग्लोब पैटर्न की सूची. |
exclude_directories
|
डिफ़ॉल्ट = 1 डायरेक्ट्री को हटाना है या नहीं, इसके लिए फ़्लैग. |
allow_empty
|
डिफ़ॉल्ट = अनबाउंड क्या हम ग्लोब पैटर्न को किसी भी चीज़ से मैच करने की अनुमति न दें. अगर `allow_खाली` 'गलत' है, तो हर एक इनक्लूड पैटर्न को कुछ हद तक मैच करना चाहिए. साथ ही, फ़ाइनल नतीजा भी खाली नहीं होना चाहिए (`बाहर रखने` वाले पैटर्न के मैच को बाहर रखने के बाद). |
module_name
string native.module_name()
module_ctx.modules
में दिखने वाले module.name
फ़ील्ड के जैसा ही है.
None
को वापस किया जा सकता है.
module_version
string native.module_version()
module_ctx.modules
में दिखने वाले module.version
फ़ील्ड के जैसा ही है.
None
को वापस किया जा सकता है.
package_group
None native.package_group(name, packages=[], includes=[])
visibility
एट्रिब्यूट में दिया जा सकता है.
पैरामीटर
पैरामीटर | ब्यौरा |
---|---|
name
|
ज़रूरी है इस नियम के लिए यूनीक नाम. |
packages
|
sequence of strings ;
डिफ़ॉल्ट = []इस ग्रुप में पैकेज की पूरी सूची. |
includes
|
sequence of strings ;
डिफ़ॉल्ट = []इस ग्रुप में शामिल अन्य पैकेज ग्रुप. |
package_name
string native.package_name()
some/package/BUILD
में इसकी वैल्यू some/package
होगी. अगर BUILD फ़ाइल, .bzl फ़ाइल में दिए गए फ़ंक्शन को कॉल करती है, तो package_name()
, कॉलर BUILD फ़ाइल पैकेज से मैच करेगा. यह फ़ंक्शन, काम न करने वाले वैरिएबल PACKAGE_NAME
के बराबर है.
package_relative_label
Label native.package_relative_label(input)
BUILD
फ़ाइल, जिसके लिए मौजूदा मैक्रो चलाया जा रहा है) के संदर्भ में, इनपुट स्ट्रिंग को किसी लेबल ऑब्जेक्ट में बदलता है. अगर इनपुट पहले से ही Label
है, तो इसमें कोई बदलाव नहीं किया जाता.इस फ़ंक्शन को सिर्फ़ बिल्ड फ़ाइल का मूल्यांकन करते समय कॉल किया जा सकता है और मैक्रो को सीधे तौर पर या किसी अन्य तरीके से कॉल किया जा सकता है; हो सकता है कि उसे (उदाहरण के लिए) नियम लागू करने वाले फ़ंक्शन में कॉल न किया जाए.
इस फ़ंक्शन के नतीजे के तौर पर एक ही Label
वैल्यू मिलती है, जो दी गई स्ट्रिंग को बिल्ड फ़ाइल में तय किए गए टारगेट के लेबल की वैल्यू वाले एट्रिब्यूट को पास करने पर मिलती है.
इस्तेमाल से जुड़ी जानकारी: इस फ़ंक्शन और Label() में यह अंतर यह है कि Label()
, .bzl
फ़ाइल को कॉल करने वाली फ़ाइल के पैकेज के कॉन्टेक्स्ट का इस्तेमाल करता है, न कि BUILD
फ़ाइल के पैकेज का. जब आपको किसी ऐसे तय टारगेट के बारे में बताने की ज़रूरत हो जिसे मैक्रो में हार्डकोड किया गया हो, जैसे कि कंपाइलर, तो Label()
का इस्तेमाल करें. जब आपको BUILD फ़ाइल से मिली लेबल स्ट्रिंग को Label
ऑब्जेक्ट के लिए नॉर्मलाइज़ करना हो, तब package_relative_label()
का इस्तेमाल करें. (BUILD फ़ाइल या कॉलिंग .bzl फ़ाइल के अलावा किसी दूसरे पैकेज के लिए स्ट्रिंग को Label
में बदलने का कोई तरीका नहीं है. इसी वजह से, बाहरी मैक्रो को हमेशा लेबल स्ट्रिंग के बजाय लेबल ऑब्जेक्ट को आंतरिक मैक्रो को पास करना चाहिए.
पैरामीटर
पैरामीटर | ब्यौरा |
---|---|
input
|
string; or Label ;
ज़रूरी हैइनपुट लेबल स्ट्रिंग या लेबल ऑब्जेक्ट. अगर लेबल ऑब्जेक्ट को पास किया जाता है, तो उसे पहले जैसा किया जाता है. |
repository_name
string native.repository_name()
local_repository(name='local', path=...)
की मदद ली गई है उन्हें @local
पर सेट किया जाएगा. डेटा स्टोर करने की मुख्य जगह के पैकेज में, यह @
पर सेट होगा. यह फ़ंक्शन, काम न करने वाले वैरिएबल REPOSITORY_NAME
के बराबर है.
सबपैकेज
sequence native.subpackages(include, exclude=[], allow_empty=False)
पैरामीटर
पैरामीटर | ब्यौरा |
---|---|
include
|
sequence of strings ;
ज़रूरी हैसबपैकेज स्कैन में शामिल किए जाने वाले ग्लोब पैटर्न की सूची. |
exclude
|
sequence of strings ;
डिफ़ॉल्ट = []सबपैकेज स्कैन में शामिल नहीं किए जाने वाले ग्लोब पैटर्न की सूची. |
allow_empty
|
डिफ़ॉल्ट = गलत कॉल के खाली सूची मिलने पर, हम टास्क पूरा नहीं कर पाते हैं या नहीं. डिफ़ॉल्ट रूप से खाली सूची, BUILD फ़ाइल में संभावित गड़बड़ी की जानकारी देती है, जहां सब-पैकेज() का इस्तेमाल करना ज़रूरत से ज़्यादा नहीं होता है. सही पर सेट करने से यह फ़ंक्शन उस मामले में सफल होता है. |