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, और bul टाइप के एट्रिब्यूट इस तरह दिखाए जाते हैं.
- लेबल को एक ही पैकेज में मौजूद टारगेट के लिए,
':foo'
फ़ॉर्म वाली स्ट्रिंग में या किसी दूसरे पैकेज में मौजूद टारगेट के लिए'//pkg:name'
में बदला जाता है. - सूचियों को टपल के तौर पर दिखाया जाता है. साथ ही, लिखवाने की सुविधा को नए और बदले जा सकने वाले लिखवाने की सुविधा में बदल दिया जाता है. उनके एलिमेंट एक ही तरह से बार-बार बदल दिए जाते हैं.
select
वैल्यू दिखाई जाती हैं. साथ ही, उनके कॉन्टेंट में ऊपर बताए गए तरीके से बदलाव किया जाता है.- जिन एट्रिब्यूट के लिए, नियम बनाने के दौरान कोई वैल्यू तय नहीं की गई थी और डिफ़ॉल्ट वैल्यू का हिसाब लगाया गया है उन्हें नतीजे में शामिल नहीं किया जाता. (विश्लेषण के चरण से पहले, कंप्यूट किए गए डिफ़ॉल्ट का हिसाब नहीं लगाया जा सकता.).
अगर हो सके, तो इस फ़ंक्शन का इस्तेमाल न करें. इससे BUILD फ़ाइलें नाज़ुक और ऑर्डर पर निर्भर करती हैं. साथ ही, ध्यान रखें कि यह आंतरिक रूप से 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
फ़्लैग सेट है, तो उसी कॉन्टेंट वाला नया म्यूटेबल डिक्शनरी दिखाता है.
ध्यान दें: अगर हो सके, तो इस फ़ंक्शन का इस्तेमाल न करें. इससे BUILD फ़ाइलें नाज़ुक और ऑर्डर पर निर्भर करती हैं. इसके अलावा, --noincompatible_existing_rules_immutable_view
फ़्लैग सेट होने पर यह फ़ंक्शन बहुत महंगा हो सकता है. खास तौर पर तब, जब इसे लूप में कॉल किया जाए.
exports_files
None
native.exports_files(srcs, visibility=None, licenses=None)
इस पैकेज से जुड़ी उन फ़ाइलों की सूची के बारे में बताता है जिन्हें अन्य पैकेज में एक्सपोर्ट किया जाता है.
पैरामीटर
पैरामीटर | ब्यौरा |
---|---|
srcs
|
स्ट्रिंग के क्रम;
ज़रूरी है एक्सपोर्ट की जाने वाली फ़ाइलों की सूची. |
visibility
|
क्रम या None ;
डिफ़ॉल्ट तौर पर None पर सेट होता है'किसको दिखे' का एलान किया जा सकता है. ये फ़ाइलें, तय किए गए टारगेट को दिखेंगी. अगर कोई दृश्यता तय नहीं है, तो फ़ाइलें हर पैकेज को दिखाई देंगी. |
licenses
|
स्ट्रिंग के क्रम या None ;
डिफ़ॉल्ट तौर पर यह None लाइसेंस तय करने के लिए होता है. |
ग्लोब
sequence native.glob(include=[], exclude=[], exclude_directories=1, allow_empty=unbound)Glob मौजूदा पैकेज की हर फ़ाइल की एक नई, बदली जा सकने वाली, क्रम से लगाई गई सूची देता है जो:
include
में मौजूद कम से कम एक पैटर्न से मेल खाता है.exclude
(डिफ़ॉल्ट[]
) में से किसी भी पैटर्न से मेल नहीं खाता.
exclude_directories
आर्ग्युमेंट को 1
पर सेट किया जाता है, तो इस टाइप की डायरेक्ट्री वाली फ़ाइलें, खोज के नतीजों (डिफ़ॉल्ट 1
) में शामिल नहीं होंगी.
पैरामीटर
पैरामीटर | ब्यौरा |
---|---|
include
|
स्ट्रिंग का क्रम;
डिफ़ॉल्ट रूप से [] हैशामिल किए जाने वाले ग्लोब पैटर्न की सूची. |
exclude
|
स्ट्रिंग का क्रम;
डिफ़ॉल्ट रूप से [] बाहर रखे जाने वाले ग्लोब पैटर्न की सूची होती है. |
exclude_directories
|
डिफ़ॉल्ट पर सेट है 1 डायरेक्ट्री, बाहर रखने के लिए है या नहीं, यह फ़्लैग. |
allow_empty
|
डिफ़ॉल्ट वैल्यू unbound हैहम ग्लोब पैटर्न को किसी भी मैच से मैच नहीं करने देते या नहीं. अगर `allow_खाली` गलत है, तो हर एक शामिल पैटर्न को किसी चीज़ से मेल खाना चाहिए और साथ ही, आखिरी नतीजा खाली नहीं होना चाहिए ('बाहर रखने` के पैटर्न से मेल खाने के बाद). |
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
|
ज़रूरी है इस नियम के लिए यूनीक नाम. |
packages
|
स्ट्रिंग का क्रम;
डिफ़ॉल्ट तौर पर [] इस ग्रुप में पैकेज की पूरी सूची होती है. |
includes
|
स्ट्रिंग का क्रम;
डिफ़ॉल्ट तौर पर यह [] इस सूची में शामिल अन्य पैकेज ग्रुप होता है. |
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)फ़िलहाल शुरू किए जा रहे पैकेज के संदर्भ में, इनपुट स्ट्रिंग को एक लेबल ऑब्जेक्ट में बदलता है (यानी, वह
BUILD
फ़ाइल जिसके लिए मौजूदा मैक्रो एक्ज़ीक्यूट किया जा रहा है). अगर इनपुट पहले से ही Label
है, तो इसमें कोई बदलाव नहीं किया जाएगा.इस फ़ंक्शन को सिर्फ़ BUILD फ़ाइल और वह मैक्रो का आकलन करते समय कॉल किया जा सकता है जिन्हें वह प्रत्यक्ष या अप्रत्यक्ष रूप से कॉल करता है; हो सकता है कि इसे (उदाहरण के लिए) नियम लागू करने के फ़ंक्शन में कॉल न किया जाए.
इस फ़ंक्शन से मिलने वाला नतीजा वही Label
वैल्यू होता है जो BUILD फ़ाइल में तय किए गए टारगेट की लेबल वैल्यू वाले एट्रिब्यूट में दी गई स्ट्रिंग को पास करने पर मिलेगा.
इस्तेमाल से जुड़ी जानकारी: इस फ़ंक्शन और Label() के बीच यह अंतर है कि Label()
, .bzl
फ़ाइल के पैकेज के कॉन्टेक्स्ट का इस्तेमाल करता है, न कि BUILD
फ़ाइल के पैकेज का. जब आपको मैक्रो में हार्डकोड किए गए किसी तय टारगेट को रेफ़र करने की ज़रूरत हो, जैसे कि कंपाइलर, तब Label()
का इस्तेमाल करें. जब आपको BUILD फ़ाइल से किसी Label
ऑब्जेक्ट को दी गई लेबल स्ट्रिंग को सामान्य बनाने की ज़रूरत हो, तो package_relative_label()
का इस्तेमाल करें. (BUILD फ़ाइल या कॉलिंग .bzl फ़ाइल के अलावा किसी पैकेज के संदर्भ में स्ट्रिंग को Label
में बदलने का कोई तरीका नहीं है. इसी वजह से, बाहरी मैक्रो हमेशा लेबल ऑब्जेक्ट को लेबल स्ट्रिंग के बजाय अंदरूनी मैक्रो में पास करने को प्राथमिकता दें.)
पैरामीटर
पैरामीटर | ब्यौरा |
---|---|
input
|
string; या लेबल;
ज़रूरी है इनपुट लेबल स्ट्रिंग या लेबल ऑब्जेक्ट. अगर कोई लेबल ऑब्जेक्ट पास किया जाता है, तो वह ऐसे ही वापस दिखता है. |
repo_name
string native.repo_name()उस रिपॉज़िटरी का कैननिकल नाम जिसमें पैकेज का अभी आकलन किया जा रहा है. इसकी शुरुआत में कोई हस्ताक्षर नहीं है.
repository_name
string native.repository_name()प्रयोग के तौर पर. इस एपीआई पर एक्सपेरिमेंट जारी है और इसे किसी भी समय बदला जा सकता है. कृपया इस पर निर्भर न रहें. इसे
--+incompatible_enable_deprecated_label_apis
अब काम नहीं करता पर सेट करके, प्रयोग के तौर पर चालू किया जा सकता है. इसके बजाय,
repo_name
का इस्तेमाल करता है, जिसमें नकली शुरुआत में इस्तेमाल होने वाला ऐट-साइन शामिल नहीं होता है. हालांकि, यह अलग तरह से काम करता है.उस डेटा स्टोर करने की जगह का कैननिकल नाम जिसमें वह पैकेज शामिल है जिसका फ़िलहाल आकलन किया जा रहा है. इसमें, प्रीफ़िक्स वाला सिंगल-साइन (@
) लगा होगा. उदाहरण के लिए, जिन पैकेज को Workspace stanza local_repository(name='local', path=...)
से कॉल किया गया है उनमें इसे @local
पर सेट किया जाएगा. मुख्य डेटा स्टोर करने की जगह में मौजूद पैकेज में, इसे @
पर सेट किया जाएगा.
सबपैकेज
sequence native.subpackages(include, exclude=[], allow_empty=False)यह फ़ंक्शन मौजूदा पैकेज के हर डायरेक्ट सबपैकेज की नई बदली जा सकने वाली सूची दिखाता है. भले ही, फ़ाइल-सिस्टम डायरेक्ट्री की गहराई कुछ भी हो. दिखाई गई सूची को क्रम से लगाया जाता है और उसमें मौजूदा पैकेज से जुड़े सबपैकेज के नाम होते हैं. हमारा सुझाव है कि इस फ़ंक्शन को सीधे कॉल करने के बजाय, bazel_skylib.subpackages मॉड्यूल में दिए गए तरीकों का इस्तेमाल करें.
पैरामीटर
पैरामीटर | ब्यौरा |
---|---|
include
|
स्ट्रिंग के क्रम;
ज़रूरी हैं सबपैकेज स्कैन में शामिल किए जाने वाले ग्लोब पैटर्न की सूची. |
exclude
|
स्ट्रिंग का क्रम;
डिफ़ॉल्ट रूप से [] हैसबपैकेज स्कैन से बाहर रखे जाने वाले ग्लोब पैटर्न की सूची. |
allow_empty
|
डिफ़ॉल्ट वैल्यू False हैअगर कॉल के लिए कोई खाली सूची मिलती है, तो क्या होगा. डिफ़ॉल्ट रूप से, खाली सूची BUILD फ़ाइल में संभावित गड़बड़ी की जानकारी देती है, जहां सबपैकेज() को किया जाने वाला कॉल ज़रूरत से ज़्यादा होता है. इस नीति को 'सही है' पर सेट करने पर, इस फ़ंक्शन को काम करने की अनुमति मिलती है. |