]> git.ipfire.org Git - people/ms/pakfire.git/blob - configure.ac
configure: Ask for a modern C compiler
[people/ms/pakfire.git] / configure.ac
1 ###############################################################################
2 # #
3 # Pakfire - The IPFire package management system #
4 # Copyright (C) 2013 Pakfire development team #
5 # #
6 # This program is free software: you can redistribute it and/or modify #
7 # it under the terms of the GNU General Public License as published by #
8 # the Free Software Foundation, either version 3 of the License, or #
9 # (at your option) any later version. #
10 # #
11 # This program is distributed in the hope that it will be useful, #
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of #
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
14 # GNU General Public License for more details. #
15 # #
16 # You should have received a copy of the GNU General Public License #
17 # along with this program. If not, see <http://www.gnu.org/licenses/>. #
18 # #
19 ###############################################################################
20
21 AC_PREREQ([2.64])
22
23 AC_INIT([pakfire],
24 [0.9.27],
25 [info@ipfire.org],
26 [pakfire],
27 [http://git.ipfire.org/?p=pakfire.git;a=summary])
28
29 AC_CONFIG_MACRO_DIR([m4])
30 AC_CONFIG_HEADERS([config.h])
31 AC_CONFIG_AUX_DIR([build-aux])
32
33 AC_USE_SYSTEM_EXTENSIONS
34 AC_SYS_LARGEFILE
35 AC_PREFIX_DEFAULT([/usr])
36
37 AM_INIT_AUTOMAKE([
38 foreign
39 1.11
40 -Wall
41 -Wno-portability
42 silent-rules
43 tar-pax
44 subdir-objects
45 ])
46 AM_SILENT_RULES([yes])
47 LT_PREREQ(2.2)
48 LT_INIT([disable-static])
49
50 IT_PROG_INTLTOOL([0.40.0])
51
52 XGETTEXT="${XGETTEXT} --keyword=_:1,2 --keyword=N_:1,2 --no-location"
53
54 GETTEXT_PACKAGE=pakfire
55 AC_SUBST(GETTEXT_PACKAGE)
56
57 AC_PROG_LN_S
58 AC_PROG_MKDIR_P
59 AC_PROG_SED
60
61 AC_ARG_ENABLE([debug],
62 AS_HELP_STRING([--enable-debug], [enable debug messages @<:@default=disabled@:>@]),
63 [], [enable_debug=no])
64 AS_IF([test "x$enable_debug" = "xyes"], [
65 AC_DEFINE(ENABLE_DEBUG, [1], [Debug messages.])
66 ])
67
68 # Online Tests
69 AC_ARG_ENABLE([online-tests],
70 AS_HELP_STRING(
71 [--enable-online-tests],
72 [enable tests that require internet access @<:@default=disabled@:>@]
73 ), [], [enable_online_tests=no]
74 )
75 AS_IF([test "x$enable_online_tests" = "xyes"], [
76 AC_DEFINE(ENABLE_ONLINE_TESTS, [1], [Online Tests])
77 ])
78
79 # Man Pages
80
81 have_man_pages=no
82 AC_ARG_ENABLE(man_pages, AS_HELP_STRING([--disable-man-pages],
83 [do not install man pages]))
84 AS_IF([test "x$enable_man_pages" != xno], [have_man_pages=yes])
85 AM_CONDITIONAL(ENABLE_MAN_PAGES, [test "x$have_man_pages" = "xyes"])
86
87 AC_PATH_PROG([XSLTPROC], [xsltproc])
88
89 AC_CHECK_PROGS(ASCIIDOC, [asciidoc])
90 if test "${have_man_pages}" = "yes" && test -z "${ASCIIDOC}"; then
91 AC_MSG_ERROR([Required program 'asciidoc' not found])
92 fi
93
94 # pkg-config
95 PKG_PROG_PKG_CONFIG
96 # This makes sure pkg.m4 is available.
97 m4_pattern_forbid([^_?PKG_[A-Z_]+$],[*** pkg.m4 missing, please install pkg-config])
98
99 # C Compiler
100 AC_PROG_CC_STDC
101
102 CC_CHECK_FLAGS_APPEND([with_cflags], [CFLAGS], [\
103 -pipe \
104 -Wall \
105 -Wextra \
106 -Wno-inline \
107 -Wundef \
108 "-Wformat=2 -Wformat-security -Wformat-nonliteral" \
109 -Wno-unused-parameter \
110 -Wno-unused-result \
111 -fno-strict-aliasing \
112 -ffunction-sections \
113 -fdata-sections \
114 -fstack-protector-all \
115 --param=ssp-buffer-size=4])
116
117 # Enable -fanalyzer if requested
118 AC_ARG_ENABLE([analyzer],
119 AS_HELP_STRING([--enable-analyzer], [enable static analyzer (-fanalyzer) @<:@default=disabled@:>@]),
120 [], [enable_analyzer=no])
121 AS_IF([test "x$enable_analyzer" = "xyes"],
122 CC_CHECK_FLAGS_APPEND([with_cflags], [CFLAGS], [-fanalyzer])
123 )
124
125 AS_CASE([$CFLAGS], [*-O[[12345g\ ]]*],
126 [CC_CHECK_FLAGS_APPEND([with_cppflags], [CPPFLAGS], [\
127 -Wp,-D_FORTIFY_SOURCE=2])],
128 [AC_MSG_RESULT([skipping -D_FORTIFY_SOURCE, optimization not enabled])])
129
130 CC_CHECK_FLAGS_APPEND([with_ldflags], [LDFLAGS], [\
131 -Wl,--as-needed \
132 -Wl,--no-undefined \
133 -Wl,--gc-sections \
134 -Wl,-z,relro \
135 -Wl,-z,now])
136
137 # Enable -fno-semantic-interposition (if available)
138 CC_CHECK_FLAGS_APPEND([with_CFLAGS], [CFLAGS], [-fno-semantic-interposition])
139 CC_CHECK_FLAGS_APPEND([with_LDFLAGS], [LDFLAGS], [-fno-semantic-interposition])
140
141 AC_SUBST([OUR_CPPFLAGS], $with_cppflags)
142 AC_SUBST([OUR_CFLAGS], $with_cflags)
143 AC_SUBST([OUR_LDFLAGS], $with_ldflags)
144
145 # Bison
146 AC_PROG_YACC
147
148 if test -z "${ac_cv_prog_YACC}"; then
149 echo "*** Error: No suitable bison/yacc found. ***"
150 echo " Please install the 'bison' package."
151 exit 1
152 fi
153
154 # Flex
155 AM_PROG_LEX
156
157 if test -z "${ac_cv_prog_LEX}"; then
158 echo "*** Error: No suitable flex/lex found. ***"
159 echo " Please install the 'flex' package."
160 exit 1
161 fi
162
163 AC_C_CONST
164 AC_CHECK_LIB([m], [round])
165
166 AC_CHECK_HEADERS([ \
167 ctype.h \
168 dirent.h \
169 errno.h \
170 fcntl.h \
171 fnmatch.h \
172 fts.h \
173 ftw.h \
174 glob.h \
175 grp.h \
176 libgen.h \
177 libintl.h \
178 linux/limits.h \
179 linux/magic.h \
180 linux/sched.h \
181 math.h \
182 pwd.h \
183 regex.h \
184 sched.h \
185 signal.h \
186 stdarg.h \
187 stdint.h \
188 stdio.h \
189 stdlib.h \
190 string.h \
191 syslog.h \
192 sys/epoll.h \
193 sys/ioctl.h \
194 sys/mount.h \
195 sys/personality.h \
196 sys/random.h \
197 sys/resource.h \
198 sys/sendfile.h \
199 sys/stat.h \
200 sys/sysmacros.h \
201 sys/types.h \
202 sys/user.h \
203 sys/utsname.h \
204 sys/vfs.h \
205 sys/wait.h \
206 time.h \
207 unistd.h \
208 utime.h
209 ])
210
211 AC_CHECK_FUNCS([ \
212 asprintf \
213 epoll_ctl \
214 epoll_create1 \
215 epoll_wait \
216 fnctl \
217 fts_close \
218 fts_open \
219 fts_read \
220 getpid \
221 glob \
222 nftw \
223 openlog \
224 personality \
225 remove \
226 secure_getenv \
227 sendfile \
228 snprintf \
229 strcmp \
230 strdup \
231 syslog \
232 qsort \
233 uname \
234 unlink \
235 vasprintf \
236 vsnprintf
237 ])
238
239 # Python Stuff
240 AM_PATH_PYTHON([3.6])
241
242 AX_PYTHON_MODULE([systemd], [fatal])
243 AX_PYTHON_MODULE([tornado], [fatal])
244
245 # Libraries we depend on
246 PKG_CHECK_MODULES([ARCHIVE], [libarchive >= 3.5.0])
247 PKG_CHECK_MODULES([CURL], [libcurl])
248 PKG_CHECK_MODULES([PYTHON_DEVEL], [python-${PYTHON_VERSION}-embed],
249 [], [PKG_CHECK_MODULES([PYTHON_DEVEL], [python-${PYTHON_VERSION}])])
250 PKG_CHECK_MODULES([JSON_C], [json-c >= 0.15])
251 PKG_CHECK_MODULES([LZMA], [liblzma])
252 PKG_CHECK_MODULES([OPENSSL], [openssl >= 1.1.1])
253 PKG_CHECK_MODULES([PCRE2], [libpcre2-8])
254 PKG_CHECK_MODULES([SOLV], [libsolv >= 0.7.5])
255 PKG_CHECK_MODULES([SOLVEXT], [libsolvext >= 0.7.5])
256 PKG_CHECK_MODULES([SQLITE3], [sqlite3])
257 PKG_CHECK_MODULES([SYSTEMD], [libsystemd],
258 [AC_DEFINE([HAVE_SYSTEMD], [1], [Use systemd])])
259 PKG_CHECK_MODULES([UUID], [uuid])
260 PKG_CHECK_MODULES([ZSTD], [libzstd])
261
262 AM_PATH_GPGME([1.6.0], [], [AC_MSG_ERROR([*** GPGME not found])])
263
264 AC_ARG_WITH([systemdsystemunitdir],
265 AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]),
266 [], [with_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)])
267 AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])
268 AM_CONDITIONAL(HAVE_SYSTEMD, [test -n "$with_systemdsystemunitdir"])
269
270 AC_DEFINE_UNQUOTED([PAKFIRE_CONFIG_DIR], ["${sysconfdir}/${PACKAGE_NAME}"],
271 [The path where Pakfire stores configuration files])
272 AC_DEFINE_UNQUOTED([PAKFIRE_CACHE_DIR], ["/var/cache/${PACKAGE_NAME}"],
273 [The path where Pakfire caches downloaded data])
274 AC_DEFINE_UNQUOTED([PAKFIRE_PRIVATE_DIR], ["/var/lib/${PACKAGE_NAME}"],
275 [The path where Pakfire stores its private data])
276 AC_DEFINE_UNQUOTED([PAKFIRE_SCRIPTS_DIR], ["${PREFIX}/lib/${PACKAGE_NAME}"],
277 [The path where Pakfire stores its scripts])
278 AC_DEFINE_UNQUOTED([PAKFIRE_TMP_DIR], ["/var/tmp/${PACKAGE_NAME}"],
279 [The path where Pakfire stores temporary data])
280
281 AC_CONFIG_FILES([
282 Makefile
283 po/Makefile.in
284 src/pakfire/__version__.py
285 ])
286
287 AC_OUTPUT
288 AC_MSG_RESULT([
289 $PACKAGE_NAME $VERSION
290
291 Debug: ${enable_debug}
292 Online Tests: ${enable_online_tests}
293
294 CFLAGS: ${OUR_CFLAGS} ${CFLAGS}
295 CPPFLAGS: ${OUR_CPPFLAGS} ${CPPFLAGS}
296 LDFLAGS: ${OUR_LDFLAGS} ${LDFLAGS}
297 PYTHON_CFLAGS: ${PYTHON_DEVEL_CFLAGS}
298 PYTHON_LIBS: ${PYTHON_DEVEL_LIBS}
299 ])