Discussion:
ANN: smk v0.0.3, le make sans makefile, première sortie!
(trop ancien pour répondre)
Lionel Draghi
2018-11-27 23:18:03 UTC
Permalink
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
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.
git clone https://github.com/LionelDraghi/smk.git
cd smk
gprbuild -P smk.gpr
Pour un quickstart et plus d'infos :
- http://lionel.draghi.free.fr/smk/
- smk -h


Je suis preneur de tous vos retours!

Merci d'avance,

Lionel
Blady
2018-11-29 07:17:41 UTC
Permalink
Post by Lionel Draghi
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 ?
https://sourceforge.net/p/gnoga/code/ci/dev_1.4/tree/Makefile

Est-il utilisable sur macOS ?

Merci Pascal.
Lionel Draghi
2018-11-30 12:34:02 UTC
Permalink
Post by Blady
Bonjour Lionel,
Voici une bonne idée très prometteuse.
Merci Pascal pour le retour!
Post by Blady
Penses-tu que smk puisse se charger d'un makefile comme celui de Gnoga ?
https://sourceforge.net/p/gnoga/code/ci/dev_1.4/tree/Makefile
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 un interpré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ême fichier 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 me semble 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.)
Post by Blady
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ûr je ne garanti pas du tout que les adaptations seront triviales! :-)

Lionel
Lionel Draghi
2018-11-30 12:49:34 UTC
Permalink
Post by Lionel Draghi
"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 :
https://8thlight.com/blog/colin-jones/2015/11/06/dtrace-even-better-than-strace-for-osx.html

Lionel

Continuer la lecture sur narkive:
Loading...