नेटिव

पहले से मौजूद मॉड्यूल, जो नेटिव नियमों और पैकेज हेल्पर फ़ंक्शन के साथ काम करता है. इस मॉड्यूल में सभी नेटिव नियम, फ़ंक्शन के तौर पर दिखते हैं, जैसे कि 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, और bul टाइप के एट्रिब्यूट इस तरह दिखाए जाते हैं.
  • लेबल को एक ही पैकेज में मौजूद टारगेट के लिए, ':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 sequence of strings; ज़रूरी है
एक्सपोर्ट की जाने वाली फ़ाइलों की सूची.
visibility sequence; or None; डिफ़ॉल्ट = कोई नहीं
'किसे दिखे' एलान तय किया जा सकता है. ये फ़ाइलें, तय किए गए टारगेट को दिखेंगी. अगर कोई दृश्यता तय नहीं है, तो फ़ाइलें हर पैकेज को दिखाई देंगी.
licenses sequence of strings; or None; डिफ़ॉल्ट = कोई नहीं
दिए जाने वाले लाइसेंस.

ग्लोब

sequence native.glob(include=[], exclude=[], exclude_directories=1, allow_empty=unbound)

Glob मौजूदा पैकेज की हर फ़ाइल की एक नई, बदली जा सकने वाली, क्रम से लगाई गई सूची देता है जो:
  • include में मौजूद कम से कम एक पैटर्न से मेल खाता है.
  • exclude (डिफ़ॉल्ट []) में से किसी भी पैटर्न से मेल नहीं खाता.
अगर exclude_directories आर्ग्युमेंट को 1 पर सेट किया जाता है, तो इस टाइप की डायरेक्ट्री वाली फ़ाइलें, खोज के नतीजों (डिफ़ॉल्ट 1) में शामिल नहीं होंगी.

पैरामीटर

पैरामीटर ब्यौरा
include sequence of strings; डिफ़ॉल्ट = []
शामिल किए जाने वाले ग्लोब पैटर्न की सूची.
exclude sequence of strings; डिफ़ॉल्ट = []
बाहर रखे जाने वाले ग्लोब पैटर्न की सूची.
exclude_directories डिफ़ॉल्ट = 1
यह फ़्लैग करें कि डायरेक्ट्री को बाहर रखना है या नहीं.
allow_empty डिफ़ॉल्ट = अनबाउंड
क्या हम ग्लोब पैटर्न को किसी भी चीज़ से मैच नहीं करने की अनुमति देते हैं. अगर `allow_खाली` गलत है, तो हर एक शामिल पैटर्न को किसी चीज़ से मेल खाना चाहिए और साथ ही, आखिरी नतीजा खाली नहीं होना चाहिए ('बाहर रखने` के पैटर्न से मेल खाने के बाद).

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 sequence of strings; डिफ़ॉल्ट = []
इस ग्रुप में पैकेज की पूरी सूची.
includes sequence of strings; डिफ़ॉल्ट = []
इस सूची में शामिल अन्य पैकेज ग्रुप.

package_name

string native.package_name()

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

package_relative_label

Label native.package_relative_label(input)

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

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

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

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

पैरामीटर

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

repository_name

string native.repository_name()

उस रिपॉज़िटरी का नाम जिससे नियम या बिल्ड एक्सटेंशन को कॉल किया गया है. उदाहरण के लिए, जिन पैकेज को Workspace stanza local_repository(name='local', path=...) से कॉल किया गया है उनमें इसे @local पर सेट किया जाएगा. मुख्य डेटा स्टोर करने की जगह में मौजूद पैकेज में, इसे @ पर सेट किया जाएगा. यह फ़ंक्शन, काम न करने वाले वैरिएबल REPOSITORY_NAME के बराबर है.

सबपैकेज

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

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

पैरामीटर

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