नेटिव

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

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

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

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

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

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

पैरामीटर

पैरामीटर ब्यौरा
include sequence of strings; डिफ़ॉल्ट = []
शामिल करने के लिए ग्लोब के पैटर्न की सूची.
exclude sequence of strings; डिफ़ॉल्ट = []
बाहर निकालने के लिए ग्लोब के पैटर्न की सूची.
exclude_directories डिफ़ॉल्ट = 1
यह एक फ़्लैग के बारे में बताएं कि डायरेक्ट्री को बाहर रखना है या नहीं.
allow_empty डिफ़ॉल्ट = अनबाउंड
क्या हम ग्लोब पैटर्न को किसी भी तरह से मिलान करने की अनुमति देते हैं या नहीं. अगर `allow_blank` 'गलत' है, तो हर व्यक्ति के पैटर्न में कुछ मिलान होना चाहिए. साथ ही, आखिरी नतीजा खाली नहीं होना चाहिए ('बाहर रखें' पैटर्न के मिलान शामिल न किए जाने के बाद).

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()

पैकेज का नाम जिसकी जांच की जा रही है. उदाहरण के लिए, CREATED फ़ाइल some/package/BUILD में, इसका मान some/package होगा. अगर Build फ़ाइल, .bzl फ़ाइल में दिए गए किसी फ़ंक्शन को कॉल करती है, तो package_name() कॉलर Build फ़ाइल पैकेज से मेल खाएगा. यह फ़ंक्शन, काम न करने वाले वैरिएबल PACKAGE_NAME के बराबर है.

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

string native.repository_name()

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