नेटिव नियमों और पैकेज के अन्य हेल्पर फ़ंक्शन के साथ काम करने के लिए, पहले से मौजूद मॉड्यूल. सभी नेटिव नियम, इस मॉड्यूल में फ़ंक्शन के तौर पर दिखते हैं, जैसे कि 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
दिखाया जाता है.यहां, डिकशनरी जैसे ऐसे ऑब्जेक्ट का मतलब है जिसे बदला नहीं जा सकता. यह ऑब्जेक्ट x
, डिक्शनरी जैसे दोहराव, 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
वैल्यू, ऊपर बताए गए कॉन्टेंट के हिसाब से बदली जाती हैं.- जिन एट्रिब्यूट के लिए नियम लागू करने के दौरान कोई वैल्यू नहीं दी गई थी और जिनकी डिफ़ॉल्ट वैल्यू का हिसाब लगाया गया है उन्हें नतीजे से बाहर रखा जाता है. (विश्लेषण के चरण से पहले, कैलकुलेट की गई डिफ़ॉल्ट वैल्यू को कैलकुलेट नहीं किया जा सकता.).
अगर हो सके, तो इस फ़ंक्शन का इस्तेमाल सिर्फ़ नियम को लागू करने वाले सिंबल मैक्रो के फ़ंक्शन में करें. हमारा सुझाव है कि इस फ़ंक्शन का इस्तेमाल दूसरे संदर्भों में न करें. आने वाले समय में, Bazel की रिलीज़ में इसे बंद कर दिया जाएगा. इसकी वजह यह है कि इससे BUILD
फ़ाइलें अस्थिर और क्रम पर निर्भर हो जाती हैं. साथ ही, ध्यान रखें कि यह इंटरनल फ़ॉर्म से Starlark में, नियम के एट्रिब्यूट की वैल्यू के दो अन्य कन्वर्ज़न से थोड़ा अलग है: एक का इस्तेमाल, कैलकुलेट किए गए डिफ़ॉल्ट वैल्यू के लिए किया जाता है और दूसरे का इस्तेमाल ctx.attr.foo
के लिए किया जाता है.
पैरामीटर
पैरामीटर | ब्यौरा |
---|---|
name
|
string;
ज़रूरी टारगेट का नाम. |
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()
.
अगर हो सके, तो इस फ़ंक्शन का इस्तेमाल सिर्फ़ नियम को लागू करने वाले सिंबल मैक्रो के फ़ंक्शन में करें. हमारा सुझाव है कि इस फ़ंक्शन का इस्तेमाल दूसरे संदर्भों में न करें. आने वाले समय में, 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
|
string का क्रम;
यह डिफ़ॉल्ट रूप से [] ग्लॉब पैटर्न की सूची में शामिल होता है. |
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
|
string की क्रम;
डिफ़ॉल्ट रूप से [] इस ग्रुप में पैकेज की पूरी गिनती होती है. |
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
का इस्तेमाल करें. इसमें शुरुआत में मौजूद गलत @ साइन नहीं होता, लेकिन बाकी कामों में यह वैसा ही काम करता है.उस रिपॉज़िटरी का कैननिकल नाम जिसमें मौजूद पैकेज का फ़िलहाल आकलन किया जा रहा है. इसके आगे एक ऐट-साइन (@
) लगा होता है. उदाहरण के लिए, जिन पैकेज को वर्कस्पेस पद के local_repository(name='local', path=...)
में आने की जानकारी दी जाती है उनमें @local
को सेट किया जाएगा. मुख्य रिपॉज़िटरी के पैकेज में, यह @
पर सेट हो जाएगा.
सब-पैकेज
sequence native.subpackages(include, exclude=[], allow_empty=False)
पैरामीटर
पैरामीटर | ब्यौरा |
---|---|
include
|
स्ट्रिंग का क्रम;
ज़रूरी है सब-पैकेज स्कैन में शामिल करने के लिए, ग्लोब पैटर्न की सूची. |
exclude
|
स्ट्रिंग का क्रम;
डिफ़ॉल्ट [] है सब-पैकेज को स्कैन करने से बाहर रखने के लिए, ग्लोब पैटर्न की सूची. |
allow_empty
|
bool;
डिफ़ॉल्ट तौर पर, इसकी वैल्यू False होती है अगर कॉल से खाली सूची मिलती है, तो क्या हमें गड़बड़ी का मैसेज देना है. डिफ़ॉल्ट रूप से, खाली सूची से पता चलता है कि BUILD फ़ाइल में संभावित गड़बड़ी है. इसमें subpackages() को कॉल करना ज़रूरी नहीं है. सही पर सेट करने से यह फ़ंक्शन उस मामले में सफल होता है. |