नेटिव

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

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

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

repository_name

string native.repository_name()

नियम या बिल्ड एक्सटेंशन को इकट्ठा करने की रिपॉज़िटरी का नाम. उदाहरण के लिए, जिन पैकेज को मौजूद होने की जानकारी देने के लिए, SPACE छंद local_repository(name='local', path=...) की मदद ली गई है उन्हें @local पर सेट किया जाएगा. डेटा स्टोर करने की मुख्य जगह के पैकेज में, यह @ पर सेट होगा. यह फ़ंक्शन, काम न करने वाले वैरिएबल REPOSITORY_NAME के बराबर है.

सबपैकेज

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

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

पैरामीटर

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