तारीख सेव करें: BazelCon 2023, 24 से 25 अक्टूबर तक Google म्यूनिख में होगा! ज़्यादा जानें

नेटिव

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

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

पैसे चुकाकर बने सदस्य

मौजूदा नियम

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'.

नतीजे की वैल्यू, एट्रिब्यूट की वैल्यू को इस तरह दिखाती हैं:

  • एसटीआर, इंट, और बूल के एट्रिब्यूट पहले जैसे ही दिखाए जाते हैं.
  • एक ही पैकेज में मौजूद टारगेट के लिए लेबल को ':foo' फ़ॉर्म की स्ट्रिंग में बदला जाता है या किसी दूसरे पैकेज में टारगेट के लिए '//pkg:name' में बदला जाता है.
  • सूचियों को टूपल के तौर पर दिखाया जाता है और लिखवाने की सुविधा नए और बदले जा सकने वाले लिखवाने की सुविधा में बदल जाती है. इनके एलिमेंट बार-बार एक ही तरह से बदलते हैं.
  • जैसा कि ऊपर बताया गया है, select वैल्यू को उनके कॉन्टेंट में बदल दिया जाता है.
  • नियम एट्रिब्यूट के दौरान जिन एट्रिब्यूट के लिए कोई वैल्यू तय नहीं की गई थी और जिनके डिफ़ॉल्ट मान का हिसाब लगाया जा रहा है, उन्हें खोज नतीजों में शामिल नहीं किया जाता. (विश्लेषण चरण तक, कंप्यूट डिफ़ॉल्ट की गिनती नहीं की जा सकती).

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

पैरामीटर

पैरामीटर जानकारी
name ज़रूरी है
टारगेट का नाम.

मौजूदा_नियम

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 फ़्लैग को सेट किया जाता है, तो यह फ़ंक्शन बहुत महंगा हो सकता है. खास तौर पर, जब यह लूप में कॉल किया जाए.

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

मॉड्यूल_का नाम

string native.module_name()

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

मॉड्यूल_वर्शन

string native.module_version()

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

पैरामीटर

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

रिपॉज़िटरी_नाम

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