नेटिव

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

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` की वैल्यू 'गलत' है, तो हर शामिल किए गए पैटर्न से कोई न कोई मैच होना चाहिए. साथ ही, फ़ाइनल नतीजे में कुछ न कुछ शामिल होना चाहिए. यह तब तय होता है, जब `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 स्ट्रिंग; ज़रूरी है
इस नियम के लिए यूनीक नाम.
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)

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

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

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

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

पैरामीटर

पैरामीटर ब्यौरा
input स्ट्रिंग; या 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() को कॉल करना ज़रूरी नहीं है. इसे 'सही है' पर सेट करने से, इस मामले में यह फ़ंक्शन काम कर सकता है.