сделать целевой файл для проверки установленных зависимостей - PullRequest
0 голосов
/ 24 мая 2019

У меня есть make-файл, где у меня есть цели, которые зависят от наличия установленных внешних клиентов (python3, libxml2 и т. Д.).

Вот мой make-файл

.PHONY: test install-packages mac-setup checkenv target help

EXTERNALS = python3 pip3 xmllint pytest pipenv
P := $(foreach exec,$(EXTERNALS),$(if $(shell which $(exec)),missing,$(warning "===>>>WARNING:  No required `$(exec)` in PATH, run `make mac-setup` + `make install-packages` <<<===")))

test: ## run all tests in test directory
    pipenv run pytest -v --ignore=path payload_files .

install-packages: ##install python packages listed in Pipfile
    pipenv install

mac-setup: ## setup mac for testing
    brew install libxml2
    brew install python3
    brew install pipenv


# see https://github.mycompany.com/ea/ea_test_player_unified/blob/master/run-feature.sh

help:
    @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'

.DEFAULT_GOAL := help

Обратите внимание на строку

P := $(foreach exec,$(EXTERNALS),$(if $(shell which $(exec)),missing,$(warning "===>>>WARNING:  No required `$(exec)` in PATH, run `make mac-setup` + `make install-packages` <<<===")))

Эта проверка необходимых двоичных файлов.Это работает .... однако я предпочел бы иметь цель checkenv, которая выполняет это, и ошибки, чтобы я мог прикрепить ее к слишком конкретным целям, таким как test, вместо распечатки ПРЕДУПРЕЖДЕНИЯ, которое может быть пропущено.

Хотите:

checkenv:  # error if which ${binary} fails or *even better* if if binary --version doesn't return the right version:  python3 pip3 xmllint pytest pipenv 

Я пробовал различные методы, которые я нашел в Интернете, включая stackoverflow .... но большинство используют технику, которую я использую выше, которые не используют make target или просто проверяют один двоичный файл,Я пытался создать цикл через массив двоичных файлов, но просто не смог получить правильный синтаксис, потому что он был PITA:)

Есть предложения?

Примечание. Я новичок в Python,задача состоит в том, чтобы переписать некоторые тесты jmeter в python .... поэтому, если у вас есть какие-либо мысли по поводу вышеупомянутого подхода, не стесняйтесь поделиться.

Спасибо, Фил

1 Ответ

0 голосов
/ 25 мая 2019

Не понимаю, в чем проблема. Это выглядит очень просто для меня, так как make позволяет использовать несколько целей на одной линии:

EXTERNALS := python3 pip3 xmllint pytest pipenv
python3_version := Python 3.7.3
pip3_version := ...
...

.PHONY: checkenv $(EXTERNALS)
checkenv: $(EXTERNALS)
$(EXTERNALS):
    if [ "`$@ --version`" != "$($@_version)" ]; then echo "$@ check failed"; false; fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...