native.cc_library. ध्यान दें कि नेटिव मॉड्यूल, सिर्फ़ लोडिंग फ़ेज़ में उपलब्ध होता है. इसका मतलब है कि यह मैक्रो के लिए उपलब्ध होता है, न कि नियम लागू करने के लिए. एट्रिब्यूट, None वैल्यू को अनदेखा करेंगे और उन्हें इस तरह से प्रोसेस करेंगे जैसे एट्रिब्यूट सेट न किया गया हो.ये फ़ंक्शन भी उपलब्ध हैं:
सदस्य
- existing_rule
- existing_rules
- exports_files
- glob
- 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वैल्यू को ऊपर बताए गए तरीके से बदलकर दिखाया जाता है.- जिन एट्रिब्यूट के लिए नियम बनाते समय कोई वैल्यू नहीं दी गई थी और जिनकी डिफ़ॉल्ट वैल्यू का हिसाब लगाया गया है उन्हें नतीजे में शामिल नहीं किया जाता. (विश्लेषण के चरण तक, डिफ़ॉल्ट वैल्यू का हिसाब नहीं लगाया जा सकता.).
अगर हो सके, तो इस फ़ंक्शन का इस्तेमाल न करें. इससे 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;
requiredएक्सपोर्ट की जाने वाली फ़ाइलों की सूची. |
visibility
|
sequence; or None;
default = Noneदिखने की सेटिंग के बारे में बताया जा सकता है. फ़ाइलें, तय किए गए टारगेट को दिखेंगी. अगर फ़ाइलों को दिखाने की सेटिंग नहीं दी गई है, तो वे हर पैकेज में दिखेंगी. |
licenses
|
sequence of strings; or None;
default = Noneलाइसेंस की जानकारी दी जानी है. |
glob
sequence native.glob(include=[], exclude=[], exclude_directories=1, allow_empty=unbound)
- यह वैल्यू,
includeएट्रिब्यूट में मौजूद कम से कम एक पैटर्न से मेल खाती हो. exclude(डिफ़ॉल्ट[]) में मौजूद किसी भी पैटर्न से मेल नहीं खाता.
exclude_directories आर्ग्युमेंट चालू है (1 पर सेट है), तो डायरेक्ट्री टाइप की फ़ाइलों को नतीजों से हटा दिया जाएगा (डिफ़ॉल्ट 1).
पैरामीटर
| पैरामीटर | ब्यौरा |
|---|---|
include
|
sequence of strings;
default = []शामिल किए जाने वाले ग्लोब पैटर्न की सूची. |
exclude
|
sequence of strings;
default = []ग्लोब पैटर्न की वह सूची जिसे बाहर रखना है. |
exclude_directories
|
default = 1 यह फ़्लैग यह तय करता है कि डायरेक्ट्री को बाहर रखा जाए या नहीं. |
allow_empty
|
default = unbound Whether we allow glob patterns to match nothing. अगर `allow_empty` की वैल्यू False है, तो शामिल किए गए हर पैटर्न का किसी न किसी वैल्यू से मेल खाना ज़रूरी है. साथ ही, `exclude` पैटर्न से मेल खाने वाली वैल्यू को हटाने के बाद, फ़ाइनल नतीजे में कोई वैल्यू मौजूद होनी चाहिए. |
module_name
string native.module_name()
module_ctx.modules में दिखने वाले module.name फ़ील्ड जैसा ही होता है.
None को वापस किया जा सकता है.
module_version
string native.module_version()
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 = []Other package groups that are included in this one. |
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 है, तो उसे बिना किसी बदलाव के दिखाया जाता है.इस फ़ंक्शन को सिर्फ़ BUILD फ़ाइल और सीधे या किसी दूसरे तरीके से कॉल किए गए मैक्रो का आकलन करते समय कॉल किया जा सकता है. इसे (उदाहरण के लिए) नियम लागू करने वाले फ़ंक्शन में कॉल नहीं किया जा सकता.
इस फ़ंक्शन का नतीजा, Label वैल्यू के बराबर होता है. यह वैल्यू, BUILD फ़ाइल में टारगेट के लेबल-वैल्यू वाले एट्रिब्यूट को दी गई स्ट्रिंग से मिलती है.
इस्तेमाल से जुड़ी जानकारी: इस फ़ंक्शन और Label() के बीच का अंतर यह है कि Label(), BUILD फ़ाइल के पैकेज के कॉन्टेक्स्ट का इस्तेमाल करता है, न कि .bzl फ़ाइल के पैकेज के कॉन्टेक्स्ट का. Label() का इस्तेमाल तब करें, जब आपको किसी ऐसे तय टारगेट का रेफ़रंस देना हो जिसे मैक्रो में हार्डकोड किया गया है. जैसे, कंपाइलर. package_relative_label() का इस्तेमाल तब करें, जब आपको BUILD फ़ाइल से मिली लेबल स्ट्रिंग को package_relative_label() ऑब्जेक्ट में बदलना हो.Label (BUILD फ़ाइल या कॉल करने वाली .bzl फ़ाइल के अलावा, किसी अन्य पैकेज के कॉन्टेक्स्ट में स्ट्रिंग को Label में बदलने का कोई तरीका नहीं है. इसलिए, बाहरी मैक्रो को हमेशा लेबल स्ट्रिंग के बजाय, लेबल ऑब्जेक्ट को इनर मैक्रो में पास करना चाहिए.)
पैरामीटर
| पैरामीटर | ब्यौरा |
|---|---|
input
|
string; or Label;
requiredइनपुट लेबल स्ट्रिंग या लेबल ऑब्जेक्ट. अगर कोई Label ऑब्जेक्ट पास किया जाता है, तो उसे वैसे ही लौटा दिया जाता है. |
repo_name
string native.repo_name()
repository_name
string native.repository_name()
--+incompatible_enable_deprecated_label_apis Deprecated. को सेट करना होगा. इसके बजाय,
repo_name का इस्तेमाल करें. इसमें फ़ालतू ऐट-साइन नहीं होता है. हालांकि, यह अन्य मामलों में एक जैसा काम करता है.यह उस रिपॉज़िटरी का कैननिकल नाम है जिसमें फ़िलहाल पैकेज का आकलन किया जा रहा है. इसमें एक ऐट-साइन (@) प्रीफ़िक्स किया गया है. उदाहरण के लिए, WORKSPACE स्टैंज़ा local_repository(name='local', path=...) से बनाए गए पैकेज में, इसे @local पर सेट किया जाएगा. मुख्य रिपॉज़िटरी में मौजूद पैकेज के लिए, इसे @ पर सेट किया जाएगा.
सब-पैकेज
sequence native.subpackages(include, exclude=[], allow_empty=False)
पैरामीटर
| पैरामीटर | ब्यौरा |
|---|---|
include
|
sequence of strings;
requiredयह सबपैकेज स्कैन में शामिल किए जाने वाले ग्लोब पैटर्न की सूची है. |
exclude
|
sequence of strings;
default = []ग्लोब पैटर्न की वह सूची जिसे सबपैकेज स्कैन करने के दौरान शामिल नहीं किया जाना चाहिए. |
allow_empty
|
default = False Whether we fail if the call returns an empty list. डिफ़ॉल्ट रूप से, खाली सूची से पता चलता है कि BUILD फ़ाइल में संभावित गड़बड़ी है. इसमें subpackages() को कॉल करना ज़रूरी नहीं है. इस सेटिंग को सही पर सेट करने से, इस फ़ंक्शन को उस मामले में काम करने की अनुमति मिलती है. |