नेटिव

समस्या की शिकायत करें सोर्स देखें Nightly · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

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

सदस्य

existing_rule

unknown native.existing_rule(name)

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

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

अगर हो सके, तो इस फ़ंक्शन का इस्तेमाल न करें. इससे BUILD फ़ाइलें कमज़ोर हो जाती हैं और क्रम पर निर्भर हो जाती हैं. यह भी ध्यान रखें कि यह, नियम एट्रिब्यूट की वैल्यू को इंटरनल फ़ॉर्म से Starlark में बदलने वाले दो अन्य कन्वर्ज़न से थोड़ा अलग होता है: एक का इस्तेमाल कंप्यूट किए गए डिफ़ॉल्ट के लिए किया जाता है, जबकि दूसरे का इस्तेमाल ctx.attr.foo के लिए किया जाता है.

पैरामीटर

पैरामीटर ब्यौरा
name string; ज़रूरी है
टारगेट का नाम.

existing_rules

unknown native.existing_rules()

यह फ़ंक्शन, नियमों के बारे में जानकारी देने वाला एक ऐसा डिक्शनरी जैसा ऑब्जेक्ट दिखाता है जिसे बदला नहीं जा सकता. इसमें इस थ्रेड के पैकेज में अब तक लागू किए गए नियमों की जानकारी होती है. डिक्शनरी जैसे ऑब्जेक्ट की हर एंट्री, नियम के इंस्टेंस के नाम को उस नतीजे से मैप करती है जो existing_rule(name) से मिलेगा.

यहां, बदलाव नहीं किया जा सकने वाला dict-like ऑब्जेक्ट का मतलब है कि x एक ऐसा ऑब्जेक्ट है जिसमें बदलाव नहीं किया जा सकता. यह dict-like इटरेशन, len(x), name in x, x[name], x.get(name), x.items(), x.keys(), और x.values() को सपोर्ट करता है.

ध्यान दें: अगर हो सके, तो इस फ़ंक्शन का इस्तेमाल न करें. इससे BUILD फ़ाइलें कमज़ोर हो जाती हैं और क्रम पर निर्भर हो जाती हैं.

exports_files

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

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

पैरामीटर

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

glob

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

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

पैरामीटर

पैरामीटर ब्यौरा
include string का sequence; डिफ़ॉल्ट रूप से []
होता है शामिल किए जाने वाले ग्लोब पैटर्न की सूची.
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()

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

package_group

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

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

पैरामीटर

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

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)

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

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

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

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

पैरामीटर

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

repo_name

string native.repo_name()

यह उस रिपॉज़िटरी का कैननिकल नाम है जिसमें फ़िलहाल पैकेज का आकलन किया जा रहा है. इसमें @ का निशान नहीं होता.

repository_name

string native.repository_name()

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

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

सब-पैकेज

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

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

पैरामीटर

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