2012-09-13 5 views
2

J'essaie de dire à l'utilisateur si la version de virtualenv qu'il utilise n'est pas à jour.Test d'une version d'un logiciel dans un Makefile

Mais ça ne marche pas encore. Une idée ?

virtualenv: 
    if [ ! -f $(PYTHON) ]; then \ 
     version=`$(VIRTUALENV) --version`;\ 
     check="1.8.2";\ 
     winner=`echo -e "$${version}\n$${check}" | sed '/^$$/d' | sort -nr | head -1`;\ 
     if [[ "$(winner)" = "$(version)" ]]; then \ 
      $(VIRTUALENV) $(ROOT_DIR)/lib/virtualenv; \ 
     else \ 
      echo "Please upgrade your virtualenv>=1.8.2";\ 
      exit 1;\ 
     fi \ 
    fi 
+0

Pourquoi ne pas tout simplement 'cas $$ ($ (VIRTUALENV) --version) en 1.8.2) vrai ;; *) faux;; esac' Vous pouvez ajouter des diagnostics, etc, mais le code de comparaison semble beaucoup trop complexe et fragile. – tripleee

Répondre

3

Ok, il était un petit truc de Makefile avec

$
virtualenv: 
    if [ ! -f $(PYTHON) ]; then \ 
     version=`$(VIRTUALENV) --version`;\ 
     check="1.8.2";\ 
     winner=`echo -e "$${version}\n$${check}" | sed '/^$$/d' | sort -nr | head -1`;\ 
     if [[ "$${winner}" = "$${version}" ]]; then \ 
      $(VIRTUALENV) $(ROOT_DIR)/lib/virtualenv; \ 
     else \ 
      echo "Please upgrade your $${version} version of virtualenv to >= 1.8.2";\ 
      echo " $ sudo pip install -U distribute pip virtualenv";\ 
      exit 1;\ 
     fi \ 
    fi 
+0

Vous pourriez envisager de mettre cela dans un fichier .sh, et appelant le fichier .sh dans la cible. J'utilise faire pour bash de script beaucoup, et juste pour éviter de quantités massives de l \ « s et $$ », je tendance à avoir un mélange de « inline » commandes bash une seule ligne dans les cibles, et bash accroches pour la plus grande scripts qui n'utilisent pas beaucoup de variables faire. YMMV –