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