नेटिव

समस्या की शिकायत करें सोर्स देखें

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

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

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

exports_files

None native.exports_files(srcs, visibility=None, licenses=None)

इस पैकेज से जुड़ी उन फ़ाइलों की सूची के बारे में बताता है जिन्हें दूसरे पैकेज में एक्सपोर्ट किया गया है.

पैरामीटर

पैरामीटर ब्यौरा
srcs string का क्रम; ज़रूरी है
एक्सपोर्ट की जाने वाली फ़ाइलों की सूची.
visibility क्रम; या None; डिफ़ॉल्ट रूप से None होता है
'किसे दिखे' एलान तय किया जा सकता है. फ़ाइलें तय किए गए टारगेट के लिए दिखेंगी. अगर कोई दृश्यता तय नहीं की गई है, तो फ़ाइलें हर पैकेज के लिए दृश्यमान होंगी.
licenses स्ट्रिंग का क्रम; या None; डिफ़ॉल्ट रूप से, None
तय किए जाने वाले लाइसेंस होते हैं.

ग्लोब

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_खाली` है, तो हर व्यक्ति का शामिल किया गया पैटर्न किसी चीज़ से मेल खाना चाहिए. साथ ही, आखिरी नतीजा खाली नहीं होना चाहिए ('बाहर रखें` पैटर्न के मिलान के बाद शामिल न होने पर).

module_name

string native.module_name()

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

module_version

string native.module_version()

इस पैकेज की डेटा स्टोर करने की जगह से जुड़े Bazel मॉड्यूल का वर्शन. इसमें शामिल है. अगर यह पैकेज MODULE.bazel के बजाय, google में तय किए गए रेपो से लिया गया है, तो यह खाली है. मॉड्यूल एक्सटेंशन से जनरेट किए गए डेटा स्टोर करने के लिए, यह एक्सटेंशन को होस्ट करने वाले मॉड्यूल का वर्शन है. यह 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_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; या लेबल; ज़रूरी है
इनपुट लेबल स्ट्रिंग या लेबल ऑब्जेक्ट. अगर कोई लेबल ऑब्जेक्ट पास किया जाता है, तो वह वैसे ही दिखेगा.

repository_name

string native.repository_name()

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

सबपैकेज

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

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

पैरामीटर

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