native.cc_library
. ध्यान दें कि नेटिव मॉड्यूल सिर्फ़ लोडिंग फ़ेज़ में उपलब्ध होता है. इसका मतलब है कि यह नियम लागू करने के लिए नहीं, बल्कि मैक्रो के लिए उपलब्ध होता है. एट्रिब्यूट, None
वैल्यू को अनदेखा कर देंगे और उन्हें वैसे ही इस्तेमाल करेंगे जैसे एट्रिब्यूट सेट न किया गया हो.ये फ़ंक्शन भी उपलब्ध हैं:
सदस्य
- existing_rule
- existing_rules
- exports_files
- glob
- module_name
- module_version
- package_group
- package_name
- package_relative_label
- 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
वैल्यू, ऊपर बताए गए तरीके से बदले गए कॉन्टेंट के साथ दिखाए जाते हैं.- जिन एट्रिब्यूट के लिए नियम लागू करने के दौरान कोई वैल्यू नहीं दी गई थी और जिनकी डिफ़ॉल्ट वैल्यू का हिसाब लगाया गया है उन्हें नतीजे से बाहर रखा जाता है. (एनालिसिस के फ़ेज़ तक, कैलकुलेट किए गए डिफ़ॉल्ट वैल्यू का हिसाब नहीं लगाया जा सकता.).
अगर हो सके, तो इस फ़ंक्शन का इस्तेमाल न करें. इससे 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
|
sequence of strings ;
ज़रूरी हैएक्सपोर्ट की जाने वाली फ़ाइलों की सूची. |
visibility
|
sequence; or None ;
default = Noneविज्ञापन दिखने की जानकारी दी जा सकती है. फ़ाइलें, तय किए गए टारगेट को दिखेंगी. अगर फ़ाइलों के दिखने की कोई जानकारी नहीं दी गई है, तो वे हर पैकेज में दिखेंगी. |
licenses
|
sequence of strings; or None ;
डिफ़ॉल्ट = कोई नहींलाइसेंस की जानकारी देनी होगी. |
glob
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 ;
default = []बाहर रखे जाने वाले ग्लोब पैटर्न की सूची. |
exclude_directories
|
डिफ़ॉल्ट = 1 यह फ़्लैग बताता है कि डायरेक्ट्री को शामिल करना है या नहीं. |
allow_empty
|
default = 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
|
sequence of strings ;
default = []इस ग्रुप में मौजूद पैकेज की पूरी जानकारी. |
includes
|
sequence of strings ;
default = []इस पैकेज में शामिल अन्य पैकेज ग्रुप. |
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)फ़िलहाल शुरू किए जा रहे पैकेज के संदर्भ में, इनपुट स्ट्रिंग को Label ऑब्जेक्ट में बदलता है. इसका मतलब है कि वह
BUILD
फ़ाइल जिसके लिए मौजूदा मैक्रो चल रहा है. अगर इनपुट पहले से ही Label
है, तो उसे बिना किसी बदलाव के दिखाया जाता है.इस फ़ंक्शन को सिर्फ़ BUILD फ़ाइल और उन मैक्रो का आकलन करते समय कॉल किया जा सकता है जिन्हें यह सीधे या किसी दूसरे तरीके से कॉल करता है. उदाहरण के लिए, इसे नियम लागू करने वाले फ़ंक्शन में कॉल नहीं किया जा सकता.
इस फ़ंक्शन का नतीजा वही Label
वैल्यू होती है जो BUILD फ़ाइल में बताए गए टारगेट के लेबल-वैल्यू वाले एट्रिब्यूट में दी गई स्ट्रिंग को पास करने पर मिलती है.
इस्तेमाल से जुड़ी जानकारी: इस फ़ंक्शन और Label() के बीच का अंतर यह है कि Label()
, .bzl
फ़ाइल के पैकेज के कॉन्टेक्स्ट का इस्तेमाल करता है, न कि BUILD
फ़ाइल के पैकेज का. जब आपको किसी ऐसे तय टारगेट के बारे में बताने की ज़रूरत हो जिसे मैक्रो में हार्डकोड किया गया हो, जैसे कि कंपाइलर, तो Label()
का इस्तेमाल करें. जब आपको BUILD फ़ाइल से मिली लेबल स्ट्रिंग को Label
ऑब्जेक्ट में सामान्य बनाना हो, तो package_relative_label()
का इस्तेमाल करें. (किसी पैकेज के संदर्भ में, स्ट्रिंग को Label
में बदलने का कोई तरीका नहीं है. ऐसा करने के लिए, BUILD फ़ाइल या कॉल की जा रही .bzl फ़ाइल का इस्तेमाल करना होगा. इसलिए, बाहरी मैक्रो को हमेशा लेबल स्ट्रिंग के बजाय, लेबल ऑब्जेक्ट को अंदरूनी मैक्रो में पास करना चाहिए.)
पैरामीटर
पैरामीटर | ब्यौरा |
---|---|
input
|
string; or Label ;
ज़रूरी हैइनपुट लेबल स्ट्रिंग या लेबल ऑब्जेक्ट. अगर कोई लेबल ऑब्जेक्ट पास किया जाता है, तो उसे वैसे ही दिखाया जाता है. |
repository_name
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 ;
default = []सब-पैकेज के स्कैन से बाहर रखने के लिए, ग्लोब पैटर्न की सूची. |
allow_empty
|
default = False कॉल के खाली होने पर, क्या हम फ़ेल हो जाते हैं. डिफ़ॉल्ट रूप से खाली सूची, BUILD फ़ाइल में संभावित गड़बड़ी की जानकारी देती है, जहां सब-पैकेज() का इस्तेमाल करना ज़रूरत से ज़्यादा नहीं होता है. सही पर सेट करने से, इस फ़ंक्शन को उस स्थिति में काम करने की अनुमति मिलती है. |