नेटिव

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

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 के बराबर है.

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