नेटिव

यह एक बिल्ट-इन मॉड्यूल है. इसका इस्तेमाल, नेटिव नियमों और पैकेज हेल्पर फ़ंक्शन के लिए किया जाता है. इस मॉड्यूल में सभी नेटिव नियम, फ़ंक्शन के तौर पर दिखते हैं. जैसे, native.cc_library. ध्यान दें कि नेटिव मॉड्यूल, सिर्फ़ लोडिंग फ़ेज़ में उपलब्ध होता है. इसका मतलब है कि यह मैक्रो के लिए उपलब्ध होता है, न कि नियम लागू करने के लिए. एट्रिब्यूट, None वैल्यू को अनदेखा करेंगे और उन्हें इस तरह से प्रोसेस करेंगे जैसे एट्रिब्यूट सेट नहीं किया गया है.
ये फ़ंक्शन भी उपलब्ध हैं:

सदस्य

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)

Glob, मौजूदा पैकेज में मौजूद हर फ़ाइल की नई, बदली जा सकने वाली, और क्रम से लगाई गई सूची दिखाता है. इसमें ये शामिल हैं:
  • 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()

उस Bazel मॉड्यूल का नाम जिससे यह पैकेज जुड़ा है. अगर यह पैकेज MODULE.bazel के बजाय WORKSPACE में तय किए गए किसी रेपो से है, तो यह खाली होता है. मॉड्यूल एक्सटेंशन से जनरेट की गई रिपॉज़िटरी के लिए, यह एक्सटेंशन को होस्ट करने वाले मॉड्यूल का नाम होता है. यह module_ctx.modules में दिखने वाले module.name फ़ील्ड की तरह ही होता है. इसमें None मिल सकता है.

module_version

string native.module_version()

Bazel मॉड्यूल का वह वर्शन जिससे यह पैकेज जुड़ा है. अगर यह पैकेज MODULE.bazel के बजाय WORKSPACE में तय किए गए किसी रेपो से है, तो यह खाली होता है. मॉड्यूल एक्सटेंशन से जनरेट किए गए रेपो के लिए, यह एक्सटेंशन को होस्ट करने वाले मॉड्यूल का वर्शन है. यह module_ctx.modules में दिखने वाले module.version फ़ील्ड की तरह ही होता है. इसमें None मिल सकता है.

package_default_visibility

List native.package_default_visibility()

यह फ़ंक्शन, जांच किए जा रहे पैकेज की डिफ़ॉल्ट दृश्यता दिखाता है. यह package() के default_visibility पैरामीटर की वैल्यू है. इसमें पैकेज को भी शामिल किया गया है.

package_group

None native.package_group(*, name, packages=[], includes=[])

यह फ़ंक्शन, पैकेज का एक सेट तय करता है और ग्रुप को एक लेबल असाइन करता है. इस लेबल का इस्तेमाल visibility एट्रिब्यूट में किया जा सकता है.

पैरामीटर

पैरामीटर ब्यौरा
name string; ज़रूरी है
इस नियम के लिए यूनीक नाम.
packages sequence of strings; डिफ़ॉल्ट रूप से []
होता है इस ग्रुप में मौजूद सभी पैकेज की पूरी सूची.
includes sequence of strings; default is []
इस पैकेज ग्रुप में शामिल अन्य पैकेज ग्रुप.

package_name

string native.package_name()

जिस पैकेज का आकलन किया जा रहा है उसका नाम. इसमें रिपॉज़िटरी का नाम शामिल नहीं होता. उदाहरण के लिए, BUILD फ़ाइल some/package/BUILD में इसकी वैल्यू some/package होगी. अगर BUILD फ़ाइल, .bzl फ़ाइल में तय किए गए किसी फ़ंक्शन को कॉल करती है, तो package_name(), कॉलर BUILD फ़ाइल पैकेज से मेल खाएगा. रूट पैकेज के लिए, वैल्यू हमेशा एक खाली स्ट्रिंग होगी.

package_relative_label

Label native.package_relative_label(input)

यह फ़ंक्शन, इनपुट स्ट्रिंग को Label ऑब्जेक्ट में बदलता है. यह बदलाव, फ़िलहाल शुरू किए जा रहे पैकेज के हिसाब से होता है. इसका मतलब है कि यह बदलाव, उस BUILD फ़ाइल के लिए होता है जिसके लिए मौजूदा मैक्रो चल रहा है. अगर इनपुट पहले से ही Label है, तो उसे बिना किसी बदलाव के दिखाया जाता है.

इस फ़ंक्शन को सिर्फ़ BUILD फ़ाइल और सीधे या किसी दूसरे तरीके से कॉल किए जाने वाले मैक्रो का आकलन करते समय कॉल किया जा सकता है. इसे (उदाहरण के लिए) नियम लागू करने वाले फ़ंक्शन में कॉल नहीं किया जा सकता.

इस फ़ंक्शन का नतीजा, Label वैल्यू के बराबर होता है. यह वैल्यू, BUILD फ़ाइल में एलान किए गए टारगेट के लेबल-वैल्यू वाले एट्रिब्यूट को दी गई स्ट्रिंग से मिलती है.

इस्तेमाल से जुड़ी जानकारी: इस फ़ंक्शन और Label() फ़ंक्शन के बीच का अंतर यह है कि Label(), .bzl फ़ाइल के पैकेज के कॉन्टेक्स्ट का इस्तेमाल करता है, न कि BUILD फ़ाइल के पैकेज के कॉन्टेक्स्ट का. Label() का इस्तेमाल तब करें, जब आपको किसी ऐसे तय टारगेट का रेफ़रंस देना हो जिसे मैक्रो में हार्डकोड किया गया है. जैसे, कंपाइलर. package_relative_label() का इस्तेमाल तब करें, जब आपको BUILD फ़ाइल से मिली लेबल स्ट्रिंग को Label ऑब्जेक्ट में बदलना हो. (BUILD फ़ाइल या कॉल करने वाली .bzl फ़ाइल के अलावा, किसी अन्य पैकेज के कॉन्टेक्स्ट में स्ट्रिंग को Label में बदलने का कोई तरीका नहीं है. इसलिए, बाहरी मैक्रो को हमेशा लेबल स्ट्रिंग के बजाय, लेबल ऑब्जेक्ट को इनर मैक्रो में पास करना चाहिए.) ctx.package_relative_label(), नियम या पहलू को लागू करने वाले फ़ंक्शन में एक जैसी सुविधा देता है.

पैरामीटर

पैरामीटर ब्यौरा
input स्ट्रिंग; या लेबल; ज़रूरी है
इनपुट लेबल स्ट्रिंग या लेबल ऑब्जेक्ट. अगर कोई 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)

यह फ़ंक्शन, मौजूदा पैकेज के हर डायरेक्ट सबपैकेज की नई और बदली जा सकने वाली सूची दिखाता है. फ़ाइल-सिस्टम डायरेक्ट्री की डेप्थ का इस पर कोई असर नहीं पड़ता. यह फ़ंक्शन, क्रम से लगाई गई सूची दिखाता है. इसमें मौजूदा पैकेज के हिसाब से सबपैकेज के नाम शामिल होते हैं. हमारा सुझाव है कि इस फ़ंक्शन को सीधे तौर पर कॉल करने के बजाय, bazel_skylib.subpackages मॉड्यूल में दिए गए तरीकों का इस्तेमाल करें.

पैरामीटर

पैरामीटर ब्यौरा
include sequence of strings; ज़रूरी है
सबपैकेज स्कैन में शामिल करने के लिए, ग्लोब पैटर्न की सूची.
exclude स्ट्रिंग का क्रम; डिफ़ॉल्ट वैल्यू []
है यह सबपैकेज स्कैन से बाहर रखे जाने वाले ग्लोब पैटर्न की सूची होती है.
allow_empty बूलियन; डिफ़ॉल्ट वैल्यू False
है अगर कॉल से खाली सूची मिलती है, तो क्या हमें गड़बड़ी दिखानी चाहिए. डिफ़ॉल्ट रूप से खाली सूची, BUILD फ़ाइल में संभावित गड़बड़ी के बारे में बताती है. इसमें subpackages() को कॉल करना ज़रूरी नहीं है. इस सेटिंग को सही पर सेट करने से, इस फ़ंक्शन को उस मामले में काम करने की अनुमति मिलती है.