BUILD फ़ाइलों में उपलब्ध तरीके. ज़्यादा फ़ंक्शन और बिल्ड के नियमों के लिए, Build Encyclopedia भी देखें. इनका इस्तेमाल BUILD फ़ाइलों में भी किया जा सकता है.
सदस्य
- depset
- existing_rule
- existing_rules
- exports_files
- glob
- module_name
- module_version
- package_group
- package_name
- package_relative_label
- repo_name
- repository_name
- चुनें
- सब-पैकेज
Depset
depset depset(direct=None, order="default", *, transitive=None)
direct
पैरामीटर, डिप्सेट के डायरेक्ट एलिमेंट की सूची है. वहीं, transitive
पैरामीटर, उन डिप्सेट की सूची है जिनके एलिमेंट, बनाए गए डिप्सेट के इनडायरेक्ट एलिमेंट बन जाते हैं. डिप्सेट को सूची में बदलने पर, एलिमेंट किस क्रम में दिखाए जाते हैं, यह order
पैरामीटर से तय होता है. ज़्यादा जानकारी के लिए, डेप्सेट की खास जानकारी देखें.
किसी डेपसेट के सभी एलिमेंट (डायरेक्ट और इनडायरेक्ट) एक ही तरह के होने चाहिए, जैसा कि एक्सप्रेशन type(x)
से मिलता है.
हैश-आधारित सेट का इस्तेमाल, बार-बार होने वाली गड़बड़ियों को हटाने के लिए किया जाता है. इसलिए, किसी डिपेंडेंसी सेट के सभी एलिमेंट को हैश किया जा सकता है. हालांकि, फ़िलहाल सभी कन्स्ट्रक्टर में इस इनवैरिएंट की जांच लगातार नहीं की जाती. लगातार जांच करने की सुविधा चालू करने के लिए, --incompatible_always_check_depset_elements फ़्लैग का इस्तेमाल करें. आने वाले समय में रिलीज़ होने वाले वर्शन में, यह सुविधा डिफ़ॉल्ट रूप से चालू रहेगी. समस्या 10313 देखें.
साथ ही, यह ज़रूरी है कि मौजूदा समय में एलिमेंट में बदलाव न किया जा सके. हालांकि, आने वाले समय में यह पाबंदी हट जाएगी.
बनाए गए डिप्सेट का क्रम इसके transitive
डिप्सेट के क्रम के साथ काम करने वाला होना चाहिए. "default"
ऑर्डर, किसी भी अन्य ऑर्डर के साथ काम करता है. अन्य सभी ऑर्डर, सिर्फ़ अपने साथ काम करते हैं.
पैरामीटर
पैरामीटर | ब्यौरा |
---|---|
direct
|
sequence या None ;
डिफ़ॉल्ट तौर पर None किसी डेपसेट के डायरेक्ट एलिमेंट की सूची. |
order
|
स्ट्रिंग;
डिफ़ॉल्ट तौर पर "default" होता है नए डेपसेट के लिए ट्रैवर्सल की रणनीति. संभावित वैल्यू के लिए, यहां देखें. |
transitive
|
depset का sequence या None ;
डिफ़ॉल्ट तौर पर None उन depset की सूची जिनके एलिमेंट, depset के इनडायरेक्ट एलिमेंट बन जाएंगे. |
existing_rule
unknown existing_rule(name)
None
दिखाया जाता है.यहां, डिकशनरी जैसे ऐसे ऑब्जेक्ट का मतलब है जिसे बदला नहीं जा सकता. यह ऑब्जेक्ट x
, डिक्शनरी जैसे दोहराव, len(x)
, name in x
, x[name]
, x.get(name)
, x.items()
, x.keys()
, और x.values()
के साथ काम करता है.
नतीजे में हर एट्रिब्यूट के लिए एक एंट्री होती है. हालांकि, इसमें निजी एट्रिब्यूट (जिनके नाम अक्षर से नहीं शुरू होते) और कुछ ऐसे लेगसी एट्रिब्यूट टाइप शामिल नहीं होते जिन्हें दिखाया नहीं जा सकता. इसके अलावा, डिक्शनरी में नियम के इंस्टेंस के name
और kind
(उदाहरण के लिए, 'cc_binary'
) के लिए एंट्री शामिल होती हैं.
नतीजे की वैल्यू, एट्रिब्यूट की वैल्यू इस तरह दिखाती हैं:
- str, int, और bool टाइप की विशेषताओं को वैसा ही दिखाया जाता है जैसा वे हैं.
- उसी पैकेज में मौजूद टारगेट के लिए लेबल को
':foo'
फ़ॉर्म वाली स्ट्रिंग में या किसी दूसरे पैकेज के टारगेट के लिए'//pkg:name'
फ़ॉर्मैट में बदला जाता है. - सूचियों को ट्यूपल के तौर पर दिखाया जाता है और डिक्शनरी को नए और बदलाव किए जा सकने वाले डिक्शनरी में बदल दिया जाता है. उनके एलिमेंट को उसी तरह बार-बार बदला जाता है.
select
वैल्यू, ऊपर बताए गए तरीके से बदले गए कॉन्टेंट के साथ दिखाए जाते हैं.- ऐसे एट्रिब्यूट जिनके लिए, नियम बनाने के दौरान कोई वैल्यू नहीं दी गई थी और जिनकी डिफ़ॉल्ट वैल्यू कैलकुलेट की गई है उन्हें नतीजे से बाहर रखा गया है. (विश्लेषण के चरण से पहले, कैलकुलेट की गई डिफ़ॉल्ट वैल्यू को कैलकुलेट नहीं किया जा सकता.).
अगर हो सके, तो इस फ़ंक्शन का इस्तेमाल सिर्फ़ नियम को लागू करने वाले सिंबल मैक्रो के फ़ंक्शन में करें. हमारा सुझाव है कि इस फ़ंक्शन का इस्तेमाल दूसरे संदर्भों में न करें. आने वाले समय में, Bazel की रिलीज़ में इसे बंद कर दिया जाएगा. इसकी वजह यह है कि इससे BUILD
फ़ाइलें अस्थिर और क्रम पर निर्भर हो जाती हैं. साथ ही, ध्यान रखें कि यह इंटरनल फ़ॉर्म से Starlark में, नियम के एट्रिब्यूट की वैल्यू के दो अन्य कन्वर्ज़न से थोड़ा अलग है: एक का इस्तेमाल, कैलकुलेट किए गए डिफ़ॉल्ट वैल्यू के लिए किया जाता है और दूसरे का इस्तेमाल ctx.attr.foo
के लिए किया जाता है.
पैरामीटर
पैरामीटर | ब्यौरा |
---|---|
name
|
string;
ज़रूरी है टारगेट का नाम. |
existing_rules
unknown existing_rules()
existing_rule(name)
के बाद मिलता है.यहां, डिकशनरी जैसे ऐसे ऑब्जेक्ट का मतलब है जिसे बदला नहीं जा सकता. यह ऑब्जेक्ट x
, डिक्शनरी जैसे दोहराव, len(x)
, name in x
, x[name]
, x.get(name)
, x.items()
, x.keys()
, और x.values()
के साथ काम करता है.
अगर हो सके, तो इस फ़ंक्शन का इस्तेमाल सिर्फ़ नियम को लागू करने वाले सिंबल मैक्रो के फ़ंक्शन में करें. हमारा सुझाव है कि इस फ़ंक्शन का इस्तेमाल दूसरे संदर्भों में न करें. आने वाले समय में, Bazel की रिलीज़ में इसे बंद कर दिया जाएगा. इसकी वजह यह है कि इससे BUILD
फ़ाइलें अस्थिर और क्रम पर निर्भर हो जाती हैं.
exports_files
None
exports_files(srcs, visibility=None, licenses=None)
पैरामीटर
पैरामीटर | ब्यौरा |
---|---|
srcs
|
string की क्रम;
ज़रूरी है एक्सपोर्ट की जाने वाली फ़ाइलों की सूची. |
visibility
|
sequence या None ;
डिफ़ॉल्ट तौर पर None है विज़िबिलिटी का एलान किया जा सकता है. फ़ाइलें बताए गए टारगेट पर दिखेंगी. अगर फ़ाइलों के दिखने की कोई जानकारी नहीं दी गई है, तो वे हर पैकेज में दिखेंगी. |
licenses
|
स्ट्रिंग का क्रम या None ;
डिफ़ॉल्ट तौर पर None लाइसेंस की जानकारी देनी होगी. |
glob
sequence glob(include=[], exclude=[], exclude_directories=1, allow_empty=unbound)
include
में मौजूद कम से कम एक पैटर्न से मेल खाता हो.exclude
(डिफ़ॉल्ट[]
) में मौजूद किसी भी पैटर्न से मेल नहीं खाता.
exclude_directories
आर्ग्युमेंट को चालू किया जाता है (1
पर सेट किया जाता है), तो डायरेक्ट्री टाइप की फ़ाइलें, नतीजों से हटा दी जाएंगी (डिफ़ॉल्ट 1
).
पैरामीटर
पैरामीटर | ब्यौरा |
---|---|
include
|
स्ट्रिंग का क्रम;
डिफ़ॉल्ट तौर पर [] होता है शामिल किए जाने वाले ग्लोब पैटर्न की सूची. |
exclude
|
स्ट्रिंग का क्रम;
डिफ़ॉल्ट तौर पर [] होता है बाहर रखने के लिए ग्लोब पैटर्न की सूची. |
exclude_directories
|
int;
डिफ़ॉल्ट रूप से 1 होता है यह एक फ़्लैग है, जो यह तय करता है कि डायरेक्ट्री को शामिल करना है या नहीं. |
allow_empty
|
डिफ़ॉल्ट रूप से unbound क्या ग्लोब पैटर्न को किसी भी चीज़ से मैच करने की अनुमति है. अगर `allow_empty` की वैल्यू False है, तो हर शामिल किए गए पैटर्न को किसी चीज़ से मैच करना चाहिए. साथ ही, फ़ाइनल नतीजा भी खाली नहीं होना चाहिए. ऐसा तब होगा, जब `exclude` पैटर्न से मैच करने वाले आइटम हटा दिए जाएंगे. |
module_name
string module_name()
module_ctx.modules
में दिखने वाले module.name
फ़ील्ड जैसा ही है.
None
को वापस किया जा सकता है.
module_version
string module_version()
module_ctx.modules
में दिखने वाले module.version
फ़ील्ड के जैसा ही है.
None
को वापस किया जा सकता है.
package_group
None
package_group(name, packages=[], includes=[])
visibility
एट्रिब्यूट में दिया जा सकता है.
पैरामीटर
पैरामीटर | ब्यौरा |
---|---|
name
|
स्ट्रिंग;
ज़रूरी है इस नियम का यूनीक नाम. |
packages
|
स्ट्रिंग का क्रम;
डिफ़ॉल्ट [] है इस ग्रुप में मौजूद पैकेज की पूरी जानकारी. |
includes
|
स्ट्रिंग का क्रम;
डिफ़ॉल्ट [] है इस पैकेज में शामिल अन्य पैकेज ग्रुप. |
package_name
string package_name()
some/package/BUILD
में इसकी वैल्यू some/package
होगी. अगर BUILD फ़ाइल, .bzl फ़ाइल में तय किए गए किसी फ़ंक्शन को कॉल करती है, तो package_name()
, कॉल करने वाले BUILD फ़ाइल पैकेज से मैच करेगा.
package_relative_label
Label package_relative_label(input)
BUILD
फ़ाइल जिसके लिए मौजूदा मैक्रो चल रहा है. अगर इनपुट पहले से ही Label
है, तो इसमें कोई बदलाव नहीं किया जाता.इस फ़ंक्शन को सिर्फ़ BUILD फ़ाइल और उन मैक्रो का आकलन करते समय कॉल किया जा सकता है जिन्हें यह सीधे या किसी दूसरे तरीके से कॉल करता है. उदाहरण के लिए, इसे नियम लागू करने वाले फ़ंक्शन में कॉल नहीं किया जा सकता.
इस फ़ंक्शन का नतीजा वही Label
वैल्यू होती है जो BUILD फ़ाइल में बताए गए टारगेट के लेबल-वैल्यू वाले एट्रिब्यूट में दी गई स्ट्रिंग को पास करने पर मिलती है.
इस्तेमाल से जुड़ी जानकारी: इस फ़ंक्शन और Label() के बीच का अंतर यह है कि Label()
, .bzl
फ़ाइल के पैकेज के कॉन्टेक्स्ट का इस्तेमाल करता है, न कि BUILD
फ़ाइल के पैकेज का. जब आपको किसी ऐसे तय टारगेट के बारे में बताने की ज़रूरत हो जिसे मैक्रो में हार्डकोड किया गया हो, जैसे कि कंपाइलर, तो Label()
का इस्तेमाल करें. जब आपको BUILD फ़ाइल से मिली लेबल स्ट्रिंग को Label
ऑब्जेक्ट में सामान्य बनाना हो, तो package_relative_label()
का इस्तेमाल करें. (BUILD फ़ाइल या कॉलिंग .bzl फ़ाइल के अलावा किसी दूसरे पैकेज के लिए स्ट्रिंग को Label
में बदलने का कोई तरीका नहीं है. इसलिए, बाहरी मैक्रो को हमेशा लेबल स्ट्रिंग के बजाय, लेबल ऑब्जेक्ट को अंदरूनी मैक्रो में पास करना चाहिए.)
पैरामीटर
पैरामीटर | ब्यौरा |
---|---|
input
|
स्ट्रिंग या लेबल;
ज़रूरी है इनपुट लेबल स्ट्रिंग या लेबल ऑब्जेक्ट. अगर कोई लेबल ऑब्जेक्ट पास किया जाता है, तो उसे वैसे ही दिखाया जाता है. |
repo_name
string repo_name()
repository_name
string repository_name()
--+incompatible_enable_deprecated_label_apis
अब काम नहीं करता को सेट करें. इसके बजाय,
repo_name
का इस्तेमाल करें. इसमें नकली लीडिंग एट-साइन नहीं होता, लेकिन यह वैसे ही काम करता है.डेटा स्टोर करने की उस जगह का कैननिकल नाम जिसमें फ़िलहाल आकलन किया जा रहा पैकेज शामिल है. इससे पहले एक चिह्न (@
) लगा होता है. उदाहरण के लिए, जिन पैकेज को वर्कस्पेस पद के local_repository(name='local', path=...)
में आने की जानकारी दी जाती है उनमें @local
को सेट किया जाएगा. मुख्य रिपॉज़िटरी के पैकेज में, यह @
पर सेट हो जाएगा.
चुनें
unknown select(x, no_match_error='')
select()
एक हेल्पर फ़ंक्शन है, जो नियम एट्रिब्यूट को कॉन्फ़िगर करने लायक बनाता है. ज़्यादा जानकारी के लिए बिल्ड एनसाइक्लोपीडिया देखें.
पैरामीटर
पैरामीटर | ब्यौरा |
---|---|
x
|
dict;
ज़रूरी है एक डिक्शनरी, जो कॉन्फ़िगरेशन की शर्तों को वैल्यू पर मैप करती है. हर कुंजी एक लेबल या लेबल स्ट्रिंग होती है, जो config_setting या constraint_value इंस्टेंस की पहचान करती है. स्ट्रिंग के बजाय लेबल का इस्तेमाल कब करना है, यह जानने के लिए मैक्रो के बारे में दस्तावेज़ देखें. |
no_match_error
|
string; डिफ़ॉल्ट तौर पर '' हैअगर कोई शर्त मेल नहीं खाती है, तो रिपोर्ट करने के लिए कस्टम गड़बड़ी की सुविधा ज़रूरी नहीं है. |
सबपैकेज
sequence subpackages(include, exclude=[], allow_empty=False)
पैरामीटर
पैरामीटर | ब्यौरा |
---|---|
include
|
स्ट्रिंग का क्रम;
ज़रूरी है सब-पैकेज स्कैन में शामिल करने के लिए, ग्लोब पैटर्न की सूची. |
exclude
|
स्ट्रिंग का क्रम;
डिफ़ॉल्ट [] है सब-पैकेज को स्कैन करने से बाहर रखने के लिए, ग्लोब पैटर्न की सूची. |
allow_empty
|
bool;
डिफ़ॉल्ट तौर पर, इसकी वैल्यू False होती है अगर कॉल से खाली सूची मिलती है, तो क्या हमें गड़बड़ी का मैसेज देना है. डिफ़ॉल्ट रूप से, खाली सूची से पता चलता है कि BUILD फ़ाइल में संभावित गड़बड़ी है. इसमें subpackages() को कॉल करना ज़रूरी नहीं है. सही पर सेट करने से, इस फ़ंक्शन को उस स्थिति में काम करने की अनुमति मिलती है. |