native.cc_library
. ध्यान दें कि नेटिव मॉड्यूल सिर्फ़ लोड होने के चरण में उपलब्ध होता है. उदाहरण के लिए, मैक्रो के लिए, नियम लागू करने के दौरान नहीं. एट्रिब्यूट, None
की वैल्यू को अनदेखा करेंगे. साथ ही, उन्हें ऐसा मानेंगे जैसे एट्रिब्यूट को सेट नहीं किया गया हो.ये फ़ंक्शन भी उपलब्ध हैं:
पैसे चुकाकर बने सदस्यों के लिए
- existing_rule
- existing_rules
- exports_files
- ग्लोब
- module_name
- module_version
- package_group
- package_name
- package_relative_label
- repo_name
- repository_name
- सबपैकेज
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
|
string की क्रम;
ज़रूरी है एक्सपोर्ट की जाने वाली फ़ाइलों की सूची. |
visibility
|
सीक्वेंस या None ;
डिफ़ॉल्ट रूप से None 'किसको दिखे' सेटिंग से जुड़ा एलान सबमिट किया जा सकता है. फ़ाइलें तय किए गए टारगेट के लिए दिखेंगी. अगर कोई 'किसको दिखे' सेटिंग तय नहीं की गई है, तो फ़ाइलें हर पैकेज को दिखेंगी. |
licenses
|
string या None का क्रम;
यह डिफ़ॉल्ट रूप से None लाइसेंस होते हैं. |
ग्लोब
sequence native.glob(include=[], exclude=[], exclude_directories=1, allow_empty=unbound)Glob मौजूदा पैकेज में, हर फ़ाइल की ऐसी नई, बदली जा सकने वाली, क्रम से लगाई गई सूची दिखाता है जो:
include
में कम से कम एक पैटर्न से मेल खाता है.exclude
में किसी भी पैटर्न से मेल नहीं खाता (डिफ़ॉल्ट[]
).
exclude_directories
आर्ग्युमेंट को चालू किया जाता है (1
पर सेट किया जाता है), तो डायरेक्ट्री टाइप की फ़ाइलें, नतीजों से हटा दी जाएंगी (डिफ़ॉल्ट 1
).
पैरामीटर
पैरामीटर | कंपनी का ब्यौरा |
---|---|
include
|
string का क्रम;
यह डिफ़ॉल्ट रूप से [] ग्लॉब पैटर्न की सूची में शामिल होता है. |
exclude
|
string का क्रम;
डिफ़ॉल्ट [] शामिल नहीं किए जाने वाले ग्लोब पैटर्न की सूची है. |
exclude_directories
|
डिफ़ॉल्ट तौर पर 1 यह फ़्लैग होता है कि डायरेक्ट्री को हटाना है या नहीं. |
allow_empty
|
unbound डिफ़ॉल्ट हैक्या हम ग्लोब पैटर्न को किसी भी वैल्यू से मैच न करने दें. अगर `allow_खाली` 'गलत' है, तो हर एक इनक्लूड पैटर्न को कुछ हद तक मैच करना चाहिए. साथ ही, फ़ाइनल नतीजा भी खाली नहीं होना चाहिए (`बाहर रखने` वाले पैटर्न के मैच को बाहर रखने के बाद). |
module_name
string native.module_name()यह पैकेज, रेपो के साथ जुड़े बेज़ल मॉड्यूल का नाम है. अगर यह पैकेज MODULE.basel के बजाय वर्कस्पेस में बताए गए रेपो से है, तो यह खाली है. मॉड्यूल एक्सटेंशन से जनरेट हुए डेटा का संग्रह, यह एक्सटेंशन को होस्ट करने वाले मॉड्यूल का नाम है. यह
module_ctx.modules
में दिखने वाले module.name
फ़ील्ड के जैसा ही है.
None
को वापस किया जा सकता है.
module_version
string native.module_version()यह पैकेज, रेपो के साथ जुड़े Basel मॉड्यूल का वर्शन है. अगर यह पैकेज MODULE.basel के बजाय वर्कस्पेस में बताए गए रेपो से है, तो यह खाली है. मॉड्यूल एक्सटेंशन के ज़रिए जनरेट किए गए डेटा संग्रह स्थान के लिए, यह एक्सटेंशन को होस्ट करने वाले मॉड्यूल का वर्शन है. यह
module_ctx.modules
में दिखने वाले module.version
फ़ील्ड के जैसा ही है.
None
को वापस किया जा सकता है.
package_group
None
native.package_group(name, packages=[], includes=[])
यह फ़ंक्शन, पैकेज के सेट के बारे में बताता है और ग्रुप को एक लेबल असाइन करता है. इस लेबल का रेफ़रंस visibility
एट्रिब्यूट में दिया जा सकता है.
पैरामीटर
पैरामीटर | कंपनी का ब्यौरा |
---|---|
name
|
ज़रूरी है इस नियम के लिए यूनीक नाम. |
packages
|
string की क्रम;
डिफ़ॉल्ट रूप से [] इस ग्रुप में पैकेज की पूरी गिनती होती है. |
includes
|
string का क्रम;
डिफ़ॉल्ट रूप से [] इस ग्रुप में शामिल अन्य पैकेज ग्रुप होते हैं. |
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
है, तो इसमें कोई बदलाव नहीं किया जाता.इस फ़ंक्शन को सिर्फ़ बिल्ड फ़ाइल और मैक्रो को, सीधे तौर पर या किसी अन्य तरीके से कॉल करते समय कॉल किया जा सकता है. इसलिए, हो सकता है कि इसे नियम लागू करने वाले फ़ंक्शन में कॉल न किया जाए.
इस फ़ंक्शन के नतीजे के तौर पर एक ही Label
वैल्यू मिलती है, जो दी गई स्ट्रिंग को बिल्ड फ़ाइल में तय किए गए टारगेट के लेबल की वैल्यू वाले एट्रिब्यूट को पास करने पर मिलती है.
इस्तेमाल से जुड़ी जानकारी: इस फ़ंक्शन और Label() में यह अंतर यह है कि Label()
, .bzl
फ़ाइल को कॉल करने वाली फ़ाइल के पैकेज के कॉन्टेक्स्ट का इस्तेमाल करता है, न कि BUILD
फ़ाइल के पैकेज का. जब आपको किसी ऐसे तय टारगेट के बारे में बताने की ज़रूरत हो जिसे मैक्रो में हार्डकोड किया गया हो, जैसे कि कंपाइलर, तो Label()
का इस्तेमाल करें. जब आपको BUILD फ़ाइल से मिली लेबल स्ट्रिंग को Label
ऑब्जेक्ट के लिए नॉर्मलाइज़ करना हो, तब package_relative_label()
का इस्तेमाल करें. (BUILD फ़ाइल या कॉलिंग .bzl फ़ाइल के अलावा किसी दूसरे पैकेज के लिए स्ट्रिंग को Label
में बदलने का कोई तरीका नहीं है. इसी वजह से, बाहरी मैक्रो को हमेशा लेबल स्ट्रिंग के बजाय लेबल ऑब्जेक्ट को आंतरिक मैक्रो को पास करना चाहिए.
पैरामीटर
पैरामीटर | कंपनी का ब्यौरा |
---|---|
input
|
string; या Label;
ज़रूरी है इनपुट लेबल स्ट्रिंग या लेबल ऑब्जेक्ट. अगर लेबल ऑब्जेक्ट को पास किया जाता है, तो उसे पहले जैसा किया जाता है. |
repo_name
string native.repo_name()डेटा स्टोर करने की उस जगह का कैननिकल नाम जिसमें फ़िलहाल आकलन किया जा रहा पैकेज शामिल है. इसमें पहले से कोई साइन नहीं होना चाहिए.
repository_name
string native.repository_name()प्रयोग के तौर पर. इस एपीआई को फ़िलहाल आज़माया जा रहा है. इसमें किसी भी समय बदलाव किया जा सकता है. कृपया इस पर निर्भर न रहें. इसे
--+incompatible_enable_deprecated_label_apis
अब काम नहीं करता पर सेट करके, एक्सपेरिमेंट के तौर पर चालू किया जा सकता है. इसके बजाय,
repo_name
का इस्तेमाल करें. इसमें नकली लीडिंग एट-साइन नहीं होता, लेकिन यह वैसे ही काम करता है.डेटा स्टोर करने की उस जगह का कैननिकल नाम जिसमें फ़िलहाल आकलन किया जा रहा पैकेज शामिल है. इससे पहले एक चिह्न (@
) लगा होता है. उदाहरण के लिए, जिन पैकेज को मौजूद होने की जानकारी देने के लिए, SPACE छंद local_repository(name='local', path=...)
की मदद ली गई है उन्हें @local
पर सेट किया जाएगा. डेटा स्टोर करने की मुख्य जगह के पैकेज में, यह @
पर सेट होगा.
सबपैकेज
sequence native.subpackages(include, exclude=[], allow_empty=False)मौजूदा पैकेज के हर डायरेक्ट सबपैकेज की नई म्यूटेबल सूची दिखाता है, चाहे फ़ाइल सिस्टम डायरेक्ट्री की गहराई कितनी भी हो. लौटाए गए पैकेज की सूची क्रम से लगाई जाती है. इसमें मौजूदा पैकेज से मिलते-जुलते सबपैकेज के नाम होते हैं. हमारा सुझाव है कि सीधे इस फ़ंक्शन को कॉल करने के बजाय, baज़ेन_skylib.subpackages मॉड्यूल में दिए गए तरीकों का इस्तेमाल करें.
पैरामीटर
पैरामीटर | कंपनी का ब्यौरा |
---|---|
include
|
string का क्रम;
ज़रूरी है सबपैकेज स्कैन में शामिल किए जाने वाले ग्लोब पैटर्न की सूची. |
exclude
|
string का क्रम;
यह डिफ़ॉल्ट रूप से [] ग्लोब पैटर्न की सूची होती है, जिसे सबपैकेज स्कैन से बाहर रखा जाना है. |
allow_empty
|
False डिफ़ॉल्ट हैकॉल के खाली सूची में मिलने पर, हम टास्क पूरा नहीं कर पाते हैं. डिफ़ॉल्ट रूप से खाली सूची, BUILD फ़ाइल में संभावित गड़बड़ी की जानकारी देती है, जहां सब-पैकेज() का इस्तेमाल करना ज़रूरत से ज़्यादा नहीं होता है. सही पर सेट करने से यह फ़ंक्शन उस मामले में सफल होता है. |