Inclure et hériter des instructions dans Starlark

Dans make, une instruction include peut inclure des chemins de fichiers avec des variables et ignorera les fichiers inexistants lorsqu'ils sont précédés d'un signe moins. L'équivalent de la configuration du produit est la fonction inherit-product-if-exists . Starlark utilise des instructions load avec des fichiers identifiés par un littéral de chaîne, et si un fichier n'existe pas, Starlark génère une erreur.

Pour contourner cette limitation, le convertisseur Starlark :

  • trouve tous les Makefiles qui pourraient correspondre au chemin qui implique des variables
  • émet des instructions load Starlark pour chacun d'eux
  • choisit le bon à l'exécution

Notez que le code Starlark généré peut sembler anormal car il répertorie tous les chemins correspondants même si un seul sera exécuté.

Nous vous recommandons de supprimer les références de variables dans les instructions include / inherit-product .

Lorsque les références variables ne peuvent pas être évitées, essayez de minimiser la partie variable. Par exemple:

MY_DIR := path/to/$(TARGET_PRODUCT)
include $(MY_DIR)/file.mk

fait que le convertisseur génère une instruction load pour chaque file.mk dans l'arborescence source, alors que

include path/to/$(TARGET_PRODUCT)/file.mk

le limite aux fichiers file.mk sous path/to . Bien sûr, supprimer également l'utilisation de TARGET_PRODUCT serait idéal.