नेटिव

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

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

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 string का क्रम; यह डिफ़ॉल्ट रूप से []
ग्लॉब पैटर्न की सूची में शामिल होता है.
exclude स्ट्रिंग का क्रम; डिफ़ॉल्ट तौर पर []
होता है बाहर रखने के लिए ग्लोब पैटर्न की सूची.
exclude_directories int; डिफ़ॉल्ट रूप से 1
यह फ़्लैग होता है कि डायरेक्ट्री को शामिल न करना है या नहीं.
allow_empty डिफ़ॉल्ट रूप से unbound
क्या ग्लोब पैटर्न को किसी भी चीज़ से मैच करने की अनुमति है. अगर `allow_empty` की वैल्यू False है, तो हर शामिल किए गए पैटर्न को किसी चीज़ से मैच करना चाहिए. साथ ही, फ़ाइनल नतीजा भी खाली नहीं होना चाहिए. ऐसा तब होगा, जब `exclude` पैटर्न से मैच करने वाले आइटम हटा दिए जाएंगे.

module_name

string native.module_name()

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

module_version

string native.module_version()

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

package_group

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

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

पैरामीटर

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

package_name

string native.package_name()

उस पैकेज का नाम जिसका आकलन किया जा रहा है. इसमें रिपॉज़िटरी का नाम शामिल नहीं है. उदाहरण के लिए, बिल्ड फ़ाइल 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() का इस्तेमाल करें. जैसे, कंपाइलर. जब आपको BUILD फ़ाइल से मिली लेबल स्ट्रिंग को Label ऑब्जेक्ट में सामान्य बनाना हो, तो package_relative_label() का इस्तेमाल करें. (किसी पैकेज के संदर्भ में, स्ट्रिंग को Label में बदलने का कोई तरीका नहीं है. ऐसा करने के लिए, BUILD फ़ाइल या कॉल की जा रही .bzl फ़ाइल का इस्तेमाल करना होगा. इसी वजह से, बाहरी मैक्रो को हमेशा लेबल स्ट्रिंग के बजाय लेबल ऑब्जेक्ट को आंतरिक मैक्रो को पास करना चाहिए.

पैरामीटर

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

repo_name

string native.repo_name()

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

repository_name

string native.repository_name()

एक्सपेरिमेंटल. इस एपीआई को फ़िलहाल आज़माया जा रहा है. इसमें किसी भी समय बदलाव किया जा सकता है. कृपया इस पर भरोसा न करें. इसे एक्सपेरिमेंट के तौर पर चालू किया जा सकता है. इसके लिए, --+incompatible_enable_deprecated_label_apis
अब काम नहीं करता को सेट करें. इसके बजाय, repo_name का इस्तेमाल करें. इसमें शुरुआत में मौजूद गलत @ साइन नहीं होता, लेकिन बाकी कामों में यह वैसा ही काम करता है.

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

सब-पैकेज

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

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

पैरामीटर

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