नेटिव

यह एक इन-बिल्ट मॉड्यूल है. इसका इस्तेमाल, नेटिव नियमों और पैकेज के अन्य हेल्पर फ़ंक्शन के लिए किया जाता है. इस मॉड्यूल में, सभी नेटिव नियम फ़ंक्शन के तौर पर दिखते हैं. जैसे, 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() को सपोर्ट करता है.

अगर --noincompatible_existing_rules_immutable_view फ़्लैग सेट किया गया है, तो इसके बजाय, उसी कॉन्टेंट वाली एक नई डिक्शनरी दिखाई जाती है जिसे बदला जा सकता है.

नतीजे में, हर एट्रिब्यूट के लिए एक एंट्री होती है. हालांकि, इसमें निजी एट्रिब्यूट (जिनके नाम किसी अक्षर से शुरू नहीं होते) और कुछ ऐसे पुराने एट्रिब्यूट टाइप शामिल नहीं होते जिन्हें दिखाया नहीं जा सकता. इसके अलावा, डिक्शनरी में नियम इंस्टेंस के name और kind (उदाहरण के लिए, 'cc_binary') के लिए एंट्री होती हैं.

नतीजे की वैल्यू, एट्रिब्यूट की वैल्यू को इस तरह दिखाती हैं:

  • str, int, और bool टाइप के एट्रिब्यूट, जैसे हैं वैसे ही दिखाए जाते हैं.
  • एक ही पैकेज में मौजूद टारगेट के लिए, लेबल को ':foo' फ़ॉर्मैट वाली स्ट्रिंग में बदला जाता है. वहीं, किसी दूसरे पैकेज में मौजूद टारगेट के लिए, लेबल को '//pkg:name' फ़ॉर्मैट वाली स्ट्रिंग में बदला जाता है.
  • सूचियों को टपल के तौर पर दिखाया जाता है. वहीं, डिक्शनरी को नई डिक्शनरी में बदला जाता है जिसे बदला जा सकता है. इनके एलिमेंट को भी उसी तरीके से बदला जाता है.
  • select वैल्यू को, ऊपर बताए गए तरीके से बदलकर दिखाया जाता है.
  • नियम को इंस्टैंशिएट करते समय, जिन एट्रिब्यूट के लिए कोई वैल्यू तय नहीं की गई थी और जिनकी डिफ़ॉल्ट वैल्यू कंप्यूट की गई है उन्हें नतीजे में शामिल नहीं किया जाता. (कंप्यूट की गई डिफ़ॉल्ट वैल्यू, विश्लेषण के फ़ेज़ तक कंप्यूट नहीं की जा सकती.).

अगर हो सके, तो इस फ़ंक्शन का इस्तेमाल न करें. इससे BUILD फ़ाइलें, आसानी से टूट सकती हैं और ऑर्डर पर निर्भर हो सकती हैं. इसके अलावा, ध्यान रखें कि यह फ़ंक्शन, नियम के एट्रिब्यूट की वैल्यू को इंटरनल फ़ॉर्म से 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 फ़्लैग सेट किया गया है, तो इसके बजाय, उसी कॉन्टेंट वाली एक नई डिक्शनरी दिखाई जाती है जिसे बदला जा सकता है.

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

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 डिफ़ॉल्ट वैल्यू 1
है यह फ़्लैग तय करता है कि डायरेक्ट्री को शामिल करना है या नहीं.
allow_empty डिफ़ॉल्ट वैल्यू unbound
है यह फ़्लैग तय करता है कि ग्लोब पैटर्न को किसी भी चीज़ से मैच करने की अनुमति देनी है या नहीं. अगर `allow_empty` की वैल्यू 'गलत' है, तो हर शामिल किए जाने वाले पैटर्न को किसी न किसी चीज़ से मैच करना होगा. साथ ही, फ़ाइनल नतीजे में कुछ न कुछ शामिल होना चाहिए. ऐसा तब होगा, जब `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_group

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

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

पैरामीटर

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

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 में बदलने का कोई तरीका नहीं है. इसलिए, बाहरी मैक्रो को हमेशा लेबल स्ट्रिंग के बजाय, Label ऑब्जेक्ट को अंदरूनी मैक्रो में पास करना चाहिए.)

पैरामीटर

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

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 पर सेट किया जाएगा. मुख्य डेटाबेस में मौजूद पैकेज में, इसे @ पर सेट किया जाएगा.

subpackages

sequence native.subpackages(include, exclude=[], allow_empty=False)

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

पैरामीटर

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