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