अतिरिक्त कार्रवाइयों के नियम

किसी समस्या की शिकायत करें सोर्स देखें Nightly · 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

नियम

action_listener

नियम का सोर्स देखें
action_listener(name, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, extra_actions, features, licenses, mnemonics, restricted_to, tags, target_compatible_with, testonly, visibility)

चेतावनी: अतिरिक्त कार्रवाइयों का इस्तेमाल बंद कर दिया गया है. इसके बजाय, aspects का इस्तेमाल करें.

action_listener नियम से कोई आउटपुट नहीं मिलता. इसके बजाय, यह टूल डेवलपर को बिल्ड सिस्टम में extra_action डालने की अनुमति देता है. इसके लिए, ऐक्शन से extra_action की मैपिंग की जाती है.

इस नियम के आर्ग्युमेंट, ऐक्शन के लिए याद रखने लायक शब्दों को extra_action नियमों पर मैप करते हैं.

--experimental_action_listener=<label> विकल्प चुनने पर, बिल्ड ग्राफ़ में extra_action डालने के लिए, बिल्ड में बताए गए action_listener का इस्तेमाल किया जाएगा.

उदाहरण

action_listener(
    name = "index_all_languages",
    mnemonics = [
        "Javac",
        "CppCompile",
        "Python",
    ],
    extra_actions = [":indexer"],
)

action_listener(
    name = "index_java",
    mnemonics = ["Javac"],
    extra_actions = [":indexer"],
)

extra_action(
    name = "indexer",
    tools = ["//my/tools:indexer"],
    cmd = "$(location //my/tools:indexer)" +
          "--extra_action_file=$(EXTRA_ACTION_FILE)",
)

तर्क

विशेषताएं
name

नाम; यह ज़रूरी है

इस टारगेट के लिए यूनीक नाम.

extra_actions

लेबल की सूची; ज़रूरी है

extra_action टारगेट की सूची इस action_listener को बिल्ड ग्राफ़ में जोड़ना चाहिए. उदाहरण के लिए, [ "//my/tools:analyzer" ].
mnemonics

स्ट्रिंग की सूची; ज़रूरी है

ऐक्शन के उन मेनेमोनिक की सूची जिन पर इस action_listener को ध्यान देना चाहिए, जैसे कि [ "Javac" ].

मेमोनेमिक, सार्वजनिक इंटरफ़ेस नहीं होते. इस बात की कोई गारंटी नहीं है कि स्मृति सहायक और उनकी कार्रवाइयां न बदलें.

extra_action

नियम का सोर्स देखें
extra_action(name, data, cmd, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, out_templates, requires_action_output, restricted_to, tags, target_compatible_with, testonly, toolchains, tools, visibility)

चेतावनी: अतिरिक्त कार्रवाइयों के इस्तेमाल पर रोक लगा दी गई है. इसके बजाय, aspects का इस्तेमाल करें.

extra_action नियम, रेगुलर बिल्ड टारगेट के तौर पर बताए जाने पर कोई काम का आउटपुट नहीं देता. इसके बजाय, यह टूल डेवलपर को बिल्ड ग्राफ़ में ऐसी अतिरिक्त कार्रवाइयां डालने की अनुमति देता है जो मौजूदा कार्रवाइयों को शैडो करती हैं.

extra_action को चालू करने के तरीके के बारे में जानकारी पाने के लिए, action_listener देखें.

extra_action, कमांड-लाइन के तौर पर काम करते हैं. कमांड-लाइन टूल को, $(EXTRA_ACTION_FILE) के तौर पर प्रोटोकॉल बफ़र वाली फ़ाइल का ऐक्सेस मिलता है. इसमें, ओरिजनल ऐक्शन के बारे में पूरी जानकारी होती है. इसके पास उन सभी इनपुट फ़ाइलों का ऐक्सेस भी होता है जिनका ऐक्सेस ओरिजनल ऐक्शन के पास है. प्रोटोकॉल बफ़र में सेव किए गए डेटा की जानकारी के लिए, extra_actions_base.proto पर जाएं. हर प्रोटो फ़ाइल में ExtraActionInfo मैसेज होता है.

अन्य सभी कार्रवाइयों की तरह ही, अतिरिक्त कार्रवाइयों को सैंडबॉक्स किया जाता है. साथ ही, उन्हें इस तरह से डिज़ाइन किया जाना चाहिए कि वे सैंडबॉक्स में काम कर सकें.

तर्क

विशेषताएं
name

नाम; ज़रूरी है

इस टारगेट के लिए यूनीक नाम.

इस नियम का रेफ़रंस देने के लिए, action_listener नियमों के extra_actions आर्ग्युमेंट में label का इस्तेमाल करें.
cmd

स्ट्रिंग; आवश्यक है

चलाने के लिए निर्देश.

यह genrule cmd एट्रिब्यूट की तरह ही है. हालांकि, इनमें ये अंतर हैं:

  1. ह्यूरिस्टिक लेबल एक्सपैंशन नहीं. सिर्फ़ $(location ...) का इस्तेमाल करने वाले लेबल बड़े किए जाते हैं.

  2. out_templates एट्रिब्यूट से बनाए गए सभी आउटपुट की जगह पर वैल्यू डालने के लिए, स्ट्रिंग पर एक और पास लागू किया जाता है. $(output out_template) सभी इंस्टेंस को उस फ़ाइल के पाथ से बदल दिया जाता है जो label से दिखाया गया है.

    उदाहरण के लिए, out_template $(ACTION_ID).analysis का मिलान $(output $(ACTION_ID).analysis) से किया जा सकता है.

    इस मामले में, यह $(location) जैसा ही है, लेकिन इसके स्कोप अलग है.

out_templates

स्ट्रिंग की सूची; डिफ़ॉल्ट रूप से []

extra_action निर्देश से जनरेट की गई फ़ाइलों के लिए टेंप्लेट की सूची.

टेंप्लेट में इन वैरिएबल का इस्तेमाल किया जा सकता है:

  • $(ACTION_ID), एक आईडी है जो इस extra_action की खास तौर पर पहचान करता है. इसका इस्तेमाल, यूनीक आउटपुट फ़ाइल जनरेट करने के लिए किया जाता है.

requires_action_output

बूलियन; डिफ़ॉल्ट तौर पर False

इससे पता चलता है कि इस extra_action के लिए, ओरिजनल ऐक्शन का आउटपुट, इस extra_action के इनपुट के तौर पर मौजूद होना चाहिए.

अगर यह 'सही है' (डिफ़ॉल्ट रूप से 'गलत है') पर सेट है, तो extra_action यह मान सकता है कि ओरिजनल ऐक्शन के आउटपुट, इनपुट के तौर पर उपलब्ध हैं.

tools

लेबल की सूची; डिफ़ॉल्ट [] है

इस नियम के लिए tool डिपेंडेंसी की सूची.

ज़्यादा जानकारी के लिए, डिपेंडेंसी की परिभाषा देखें.

बिल्ड सिस्टम यह पक्का करता है कि extra_action कमांड को चलाने से पहले, ये ज़रूरी शर्तें पूरी हो गई हों. इन्हें execकॉन्फ़िगरेशन का इस्तेमाल करके बनाया जाता है, क्योंकि इन्हें बिल्ड के दौरान टूल के तौर पर चलाना ज़रूरी होता है. किसी एक tools टारगेट //x:y का पाथ, $(location //x:y) का इस्तेमाल करके पाया जा सकता है.

सभी टूल और उनकी डेटा डिपेंडेंसी एक ही ट्री में एक साथ रखी जाती हैं. इसमें कमांड, मिलते-जुलते पाथ का इस्तेमाल कर सकती है. काम करने वाली डायरेक्ट्री, उस यूनिफ़ाइड ट्री का रूट होगी.