BUILD फ़ाइलों में उपलब्ध तरीके. ज़्यादा functions और बिल्ड के नियमों के लिए, Build Encyclopedia भी देखें. इनका इस्तेमाल BUILD फ़ाइलों में भी किया जा सकता है.
सदस्य
- depset
- existing_rule
- existing_rules
- exports_files
- glob
- module_name
- module_version
- package
- 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
दिखाया जाता है.यहां, बदलाव न करने लायक डिक्शनरी जैसे ऑब्जेक्ट का मतलब है कि डिक्शनरी जैसे दोहराव, len(x)
, name in x
, x[name]
, x.get(name)
, x.items()
, x.keys()
, और x.values()
का इस्तेमाल करने वाला, पूरी तरह से बदलाव न करने लायक ऑब्जेक्ट x
.
नतीजे में हर एट्रिब्यूट के लिए एक एंट्री होती है. हालांकि, इसमें निजी एट्रिब्यूट (जिनके नाम अक्षर से नहीं शुरू होते) और कुछ ऐसे लेगसी एट्रिब्यूट टाइप शामिल नहीं होते जिन्हें दिखाया नहीं जा सकता. इसके अलावा, डिक्शनरी में नियम के इंस्टेंस के name
और kind
(उदाहरण के लिए, 'cc_binary'
) के लिए एंट्री शामिल होती हैं.
नतीजे की वैल्यू, एट्रिब्यूट की वैल्यू इस तरह दिखाती हैं:
- str, int, और bool टाइप की विशेषताओं को वैसा ही दिखाया जाता है जैसा वे हैं.
- लेबल को एक ही पैकेज में मौजूद टारगेट के लिए
':foo'
या किसी दूसरे पैकेज में मौजूद टारगेट के लिए'//pkg:name'
फ़ॉर्मैट की स्ट्रिंग में बदल दिया जाता है. - सूचियों को ट्यूपल के तौर पर दिखाया जाता है और डिक्शनरी को नए और बदलाव किए जा सकने वाले डिक्शनरी में बदल दिया जाता है. उनके एलिमेंट को उसी तरह बार-बार बदला जाता है.
select
वैल्यू, ऊपर बताए गए तरीके से बदले गए कॉन्टेंट के साथ दिखाए जाते हैं.- जिन एट्रिब्यूट के लिए नियम लागू करने के दौरान कोई वैल्यू नहीं दी गई थी और जिनकी डिफ़ॉल्ट वैल्यू का हिसाब लगाया गया है उन्हें नतीजे से बाहर रखा जाता है. (एनालिसिस के फ़ेज़ तक, कैलकुलेट किए गए डिफ़ॉल्ट का हिसाब नहीं लगाया जा सकता.).
अगर हो सके, तो इस फ़ंक्शन का इस्तेमाल न करें. इससे BUILD फ़ाइलें अस्थिर और क्रम पर निर्भर हो जाती हैं. साथ ही, ध्यान रखें कि यह इंटरनल फ़ॉर्म से Starlark में, नियम के एट्रिब्यूट की वैल्यू के दो अन्य कन्वर्ज़न से थोड़ा अलग है: एक का इस्तेमाल, कैलकुलेट किए गए डिफ़ॉल्ट वैल्यू के लिए किया जाता है और दूसरे का इस्तेमाल ctx.attr.foo
के लिए किया जाता है.
पैरामीटर
पैरामीटर | ब्यौरा |
---|---|
name
|
string;
ज़रूरी है टारगेट का नाम. |
existing_rules
unknown existing_rules()
existing_rule(name)
से वापस मिलेगा.यहां, बदलाव न करने लायक डिक्शनरी जैसे ऑब्जेक्ट का मतलब है कि डिक्शनरी जैसे दोहराव, len(x)
, name in x
, x[name]
, x.get(name)
, x.items()
, x.keys()
, और x.values()
का इस्तेमाल करने वाला, पूरी तरह से बदलाव न करने लायक ऑब्जेक्ट x
.
ध्यान दें: अगर हो सके, तो इस फ़ंक्शन का इस्तेमाल करने से बचें. इससे BUILD फ़ाइलें अस्थिर और क्रम पर निर्भर हो जाती हैं.
exports_files
None
exports_files(srcs, visibility=None, licenses=None)
पैरामीटर
पैरामीटर | ब्यौरा |
---|---|
srcs
|
स्ट्रिंग का क्रम;
ज़रूरी है एक्सपोर्ट की जाने वाली फ़ाइलों की सूची. |
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
को वापस किया जा सकता है.
पैकेज
unknown package(**kwargs)
load()
स्टेटमेंट के ठीक बाद, पहला कॉल होना चाहिए.
पैरामीटर
पैरामीटर | ब्यौरा |
---|---|
kwargs
|
ज़रूरी लागू होने वाले आर्ग्युमेंट के लिए, Build एनसाइक्लोपीडिया में package() फ़ंक्शन देखें.
|
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()
का इस्तेमाल करें. (किसी पैकेज के संदर्भ में, स्ट्रिंग को Label
में बदलने का कोई तरीका नहीं है. ऐसा करने के लिए, BUILD फ़ाइल या कॉल की जा रही .bzl फ़ाइल का इस्तेमाल करना होगा. इसलिए, बाहरी मैक्रो को हमेशा लेबल स्ट्रिंग के बजाय, लेबल ऑब्जेक्ट को अंदरूनी मैक्रो में पास करना चाहिए.)
पैरामीटर
पैरामीटर | ब्यौरा |
---|---|
input
|
स्ट्रिंग या लेबल;
ज़रूरी है इनपुट लेबल स्ट्रिंग या लेबल ऑब्जेक्ट. अगर कोई लेबल ऑब्जेक्ट पास किया जाता है, तो उसे वैसे ही दिखाया जाता है. |
repo_name
string repo_name()
repository_name
string repository_name()
--+incompatible_enable_deprecated_label_apis
अब काम नहीं करता को सेट करें. इसके बजाय,
repo_name
का इस्तेमाल करें. इसमें शुरुआत में मौजूद ग़लत @ साइन नहीं होता, लेकिन बाकी कामों के लिए यह वैसा ही काम करता है.उस रिपॉज़िटरी का कैननिकल नाम जिसमें मौजूद पैकेज का फ़िलहाल आकलन किया जा रहा है. इसके आगे एक ऐट-साइन (@
) लगा होता है. उदाहरण के लिए, WORKSPACE स्टैंश 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() को कॉल करना ज़रूरी नहीं है. इस विकल्प को 'सही' पर सेट करने से, इस फ़ंक्शन को काम करने में मदद मिलती है. |