gratifiant > comp.lang.* > comp.lang.ada

Lionel Draghi (28/11/2018, 01h18)
Bonjour à tous,

smk est un essai pour produire un make intelligent et très simple à utiliser.
Il suffit en effet de lui donner la liste des commandes à exécuter.
smk de demande ni règles, ni target, ni sources/prérequis, ni aucune forme de définition des dépendances : tout cela est déduit automatiquement pour chaque commande pendant son exécution, grâce aux fonction de trace du kernel Linux.

Smk est une abréviation de simple make. Ou de smart make. Au choix.

Soit le fichier MyBuild.txt contenant la liste de mes commandes :

gcc -o hello.o -c hello.c
gcc -o main.o -c main.c
gcc -o hello hello.o main.o

Il suffit de lancer:

> smk MyBuild.txt


Et c'est tout.

A chaque exécution, smk vérifie si des fichiers sources ont étés mis à jour, ou si des fichiers targets sont manquants, et le cas échéant lance les lignes de commandes nécessaires.

Pour l'essayer:

> git clone
> cd smk
> gprbuild -P smk.gpr


Pour un quickstart et plus d'infos :
-
- smk -h

Je suis preneur de tous vos retours!

Merci d'avance,

Lionel
Blady (29/11/2018, 09h17)
Le 28/11/2018 à 00:18, Lionel Draghi a écrit :
> Bonjour à tous,
> smk est un essai pour produire un make intelligent et très simple à utiliser.
> Il suffit en effet de lui donner la liste des commandes à exécuter.
> smk de demande ni règles, ni target, ni sources/prérequis, ni aucune forme de définition des dépendances : tout cela est déduit automatiquement pour chaque commande pendant son exécution, grâce aux fonction de trace du kernel Linux.
> Smk est une abréviation de simple make. Ou de smart make. Au choix.


Bonjour Lionel,

Voici une bonne idée très prometteuse.

Penses-tu que smk puisse se charger d'un makefile comme celui de Gnoga ?


Est-il utilisable sur macOS ?

Merci Pascal.
Lionel Draghi (30/11/2018, 14h34)
Le jeudi 29 novembre 2018 08:17:42 UTC+1, Blady a écrit :
> Bonjour Lionel,
> Voici une bonne idée très prometteuse.


Merci Pascal pour le retour!
> Penses-tu que smk puisse se charger d'un makefile comme celui de Gnoga ?
>


Très beau Makefile en tout cas, que je garde en exemple!

A priori non, le but n'est pas de prendre en compte la complexité (et donc en partie la puissance) de Makefiles (ou même de shell scripts). J'ai introduit cette compatibilité pour faciliter la transition sur des cas simple.

Pour des Makefile plus complexes, cela obligerait à développer uninterpréteur pour les "ifeq else endif", pour les variables "$(MAKE)", etc.
Ce serait un effort de développement important, alors que l'esprit du nouvel outil est de répondre plus simplement à certains besoins, pas d'être compatible.

Ce que je pense ajouter qui augmentera la compatibilité avec les Makefile :
- la prise en compte des commandes multi-lignes (avec \ final);
- l?exécution partielle, c'est à dire la capacité à lancer un classique "smk build" ou un "smk "clean" avec le mêmefichier Makefile. (Actuellement, smk exécute tout le fichier, ce qui n'a pas de sens lorsqu'il y a un build suivi d'un clean)
Ce que je prendrais peut-être en compte, mais qui déjà ne mesemble pas trivial :
- le Makefile récursif (Makefile lancé dans un sous-répertoire)

Ce que je pense ne pense pas faire de la même façon:
- la production conditionnelle (différentiation plateforme, build debug vs prod, etc.)

> Est-il utilisable sur macOS ?


Je ne sais pas, mais j'en doute.
smk repose sur l'utilisation de strace, qui lui même repose sur l'interface ptrace du kernel Linux. Pour être compatible, il faut :*
- que smk trouve strace dans le PATH,
- que strace ait le même format de fichier de sortie,
- que strace ait une ligne de commande identique (ce qui n'est pas évident, le premier patch qui m'a été remonté concernait une icompatibilité sur le '%' de l'option "-e trace=%file")

La page wikipedia de strace dit :
"Mac OS X provides ktrace (10.4 and earlier), DTrace (from Solaris) and associated dtruss in 10.5 and later". Donc a priori, pas de strace, mais à vérifier.

Dans ce cas, il y a deux sources Ada à modifier :
- la procédure Run_Command, qui lance (actuellement) strace,
- et la procédure Analyze_Run, qui lit le fichier d'output et en déduit les fichiers accédés en read et en write.

Au total, il y a très peu de ligne à modifier, mais bien sûrje ne garanti pas du tout que les adaptations seront triviales! :-)

Lionel
Lionel Draghi (30/11/2018, 14h49)
Le vendredi 30 novembre 2018 13:34:03 UTC+1, Lionel Draghi a écrit :
> La page wikipedia de strace dit :
> "Mac OS X provides ktrace (10.4 and earlier), DTrace (from Solaris) and associated dtruss in 10.5 and later". Donc a priori, pas de strace, mais à vérifier.


Le portage ne devrait pas être trop problématique, sous réserve d'un équivalent de l'option -y de strace qui me facilite beaucoup la vie :


Lionel
Discussions similaires