-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathautotools.cli.txt
162 lines (135 loc) · 9.68 KB
/
autotools.cli.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
┏━━━━━━━━━━━━━━━┓
┃ AUTOTOOLS ┃
┗━━━━━━━━━━━━━━━┛
PORTABILITE ==> #Les commandes sh des scripts doivent être sh et non Bash, pour la portabilité.
+--------------------------------------------+
| v
| +--------> AUTOHEADER -> config.h.in --------+
| | |
+-----------------------------|--------------+ |
| | v v
configure.in ---> ACLOCAL ---> aclocal.m4 --- AUTOCONF ---> CONFIGURE ---> CONFIG.STATUS --> Makefile (et config.h, stamp.h)
| + | +
| | | |
| acinclude.m4 | |
| | Makefile.in (et COPYING, INSTALL,
| | + install-sh, missing,
| | | mkinstalldirs,
+-----------------------------+------------------------------------------------------> AUTOMAKE stamp.h.in, config.sub,
+ config.guess)
|
Makefile.am
configure.in #Seul fichier à créer. Préférer "configure.ac"
configure.ac #Est en fait un fichier .sh, avec des configure macros sous la forme :
# MACRO([VAL], [VAL]...)
#Mettre dans l'ordre :
#1) Intro
AC_PREREQ(STR) #Version du package
AC_INIT(STR, STR2, STR3)#STR est le nom du programme, STR2 sa version et STR3 l'email de l'auteur. A mettre en premier.
AC_CONFIG_HEADER
AC_REVISION
#2) Configure options :
AC_ARG_ENABLE
#3) Checke présence de programmes tiers :
AC_CHECK_*
AC_PATH_*
AC_PROG_... #Semble remplir des macros par rapport à par exemple le CC installé.
#4) Checke présence de libraries :
#5) Checke existence d'headers :
#6) Checke existence de types et typedefs :
#7) Checke existence de fonctions :
#8) Création finale des fichiers :
AC_CONFIG_FILES(FILE...)#Fichiers à générer
AC_OUTPUT #Crée les fichiers.
aclocal #Prend comme input acinclude.m4 et configure.in et produit aclocal.m4
autoheader #Prend comme input aclocal.m4 et configure.in et produit config.h.in
autoconf #Prend comme input aclocal.m4 et configure.in et produit configure
./configure #Crée config.status et l'exécute.
#config.status prend comme input config.h.in et les Makefile.in, et produit les Makefile mais aussi :
# - config.h
# - stamp.h
--help #Cache configure a ses propres options définies pour ce programme par autoconf, que l'on peut
#checker avec --help. Viennent en deux sortes :
# --disable-FEATURE et --enable-FEATURE[=VAL], pour dés/activer une feature.
# --with[out]-PACKAGE[=DIR], pour indiquer qu'un programme est absent/présent, et qu'il se trouve dans
# DIR (par exemple /usr/local/)
--cache-file=FILE #Crée/utilise un cache, pour improve les performances d'un futur configure, notamment lorsqu'il y a
#plusieurs configure dans des répertoires récursifs.
--no-create #Dry run : ne crée aucun fichier, ne fait qu'imprimer son output.
--srcdir=DIR #Précise où trouver le répertoire src/ du programme courant.
--prefix=DIR #Fait que le programme sera installé dans DIR, par exemple /opt
--exec-prefix=DIR #Pareil pour les exécutables créés
--bindir=DIR #Pareil pour les user binaires
--sbindir=DIR #Pareil pour les root binaires
--libexecdir=DIR #Pareil pour les binaires exécutés jamais par l'end user, mais comme helpers intermédiaires
--datadir=DIR #Pareil pour les data files
--sysconfdir=DIR #Pareil pour les readonly data files pour une seule machine
--localstatedir=DIR #Pareil pour les modifiable data files pour une seule machine
--sharedstatedir=DIR #Pareil pour les modifiable data files partagés
--libdir=DIR #Pareil pour les bibliothèques
--incudedir=DIR #Pareil pour les headers pour GCC
--oldincudedir=DIR #Pareil pour les headers pour autre que GCC
--infodir=DIR #Pareil pour les info files
--mandir=DIR #Pareil pour les man pages
--program-
[prefix|suffix]=STR #Rajoute/append STR au nom du programme.
--program-transform-name
=STR #Pareil avec un sed script STR
--build=STR #Indique architecture de la machine effectuant le build, par défaut pareil qu'--host
#Pas nécessaire de modifier --build, --host ou --target pour un native compiling (cas normal).
#Architecture est indiquée par : cpu-[manufacturer-[kernel-]]os
# - cpu : i386, x86_64, arm, sparc
# - manufacturer : unknown, pc
# - kernel : (principalement pour Linux) linux
# - os : 3.3.2-1-ARCH
--host=STR #Indique architecture de la machine exécutant le programme.
#Si build == host == target, alors native compiling.
#Si host == target, mais que build != host, alors seul cas : création d'un projet devant être
#exécuté sur une autre plateforme (cross-compiling). Pour cela, il faut avoir un cross-compiler.
--target=STR #Indique architecture à laquelle le code produit se conformera, notamment architecture qu'un programme
#de compilation produira.
#Utile seulement d'avoir un target != host pour le ./configure d'un compilateur, pour en faire un
#cross-compiler.
#Si de plus, build != host != target, il s'agit d'un canadian compiling : créer un cross-compiler
#devant être utilisé par un autre OS.
FICHIERS CREES PAR # - config.cache : cache pour improve les performances, si --cache-file
CONFIGURE ==> # - config.log : équivaut à l'output du précédent ./configure, mais avec plus de verbosity
# - config.status : script recréant fichiers créés ? si nécessaire
# - config.h : header C/C++ avec des #define en fonction des caractéristiques du paquet et de
# l'architecture. Les fichiers sources doivent l'inclure :
# #if HAVE_CONFIG_H
# # include <config.h>
# #endif /* HAVE_CONFIG_H */
# - Les Makefile récursivement, à partir de leur Makefile.in
# - éventuellement d'autres fichiers, comme le Doxyfile
PORTABILITE ==> #Penser à faire dans les fichiers source :
# #if HAVE_UNISTD_H
# # include <unistd.h>
# #endif /* HAVE_UNISTD_H */
#pourquoi ???
config.h #Est utilisé par make.
Makefile.am #Seul fichier à créer, dans chaque répertoire source, donc root tree.
#automake crée des Makefile.in
#Définie :
# - des variables VAR = VAL, VAR += VAL
# - des macros (venant d'autoconf) :
# if MACRO
# ...
# endif
#Variables :
SUBDIRS = DIR... #Liste les répertoires sources du répertoire courant
EXTRADIST = DIR... # ???
$DIR_PROGRAMS = FILE... #Fichier à créer et à placer dans /$DIR, notamment :
# - bin_PROGRAMS
#$PROG par la suite désigne FILE précisé ainsi.
$PROG_SOURCES = FILE... #Précise les fichiers sources de $PROG, donc source, headers, etc.
$PROG_LDADD = @libLIB@ #Librairie à lier lors de création de $PROG
automake #Crée des Makefile.in à partir des Makefile.am + configure.in, mais aussi :
# - COPYING et INSTALL
# - install-sh
# - missing
# - mkinstalldirs
# - stamp-h.in
# - config.guess
# - config.sub
Makefile.in #./configure utilise ces fichiers pour créer un Makefile