~vcs-imports/gparted/master

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
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
AC_INIT([gparted],[0.31.0-git],[https://bugzilla.gnome.org/enter_bug.cgi?product=gparted])
AC_PREREQ([2.50])

AC_CONFIG_SRCDIR([src/main.cc])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_MACRO_DIR([m4])

AM_INIT_AUTOMAKE([1.9 subdir-objects])
AM_MAINTAINER_MODE


dnl======================
dnl checks for programs
dnl======================
AC_PROG_CXX
AC_PROG_CC
AC_PROG_LIBTOOL
AC_PROG_AWK
dnl Check for pkg-config early to avoid splitting message when first used.
PKG_CHECK_EXISTS


dnl======================
dnl Find graphical privilege escalation program
dnl======================
dnl Check for pkexec >= 0.102 for it's ability to run X11 apps.
AM_CONDITIONAL([INSTALL_POLKIT_ACTIONS], false)
PKEXEC_REQUIRED_VERSION='0.102'
AC_MSG_CHECKING([for pkexec >= $PKEXEC_REQUIRED_VERSION])
PKEXEC_REQUIRED_INT=`echo "$PKEXEC_REQUIRED_VERSION" | $AWK -F. '{print $1 * 10000 + $2}'`
PKEXEC_VERSION_OUTPUT=`pkexec --version 2> /dev/null` ||
	AC_MSG_RESULT([not found])
if test "x$PKEXEC_VERSION_OUTPUT" != 'x'; then
	PKEXEC_FOUND_VERSION=`echo "$PKEXEC_VERSION_OUTPUT" | head -1 | cut -d' ' -f3`
	PKEXEC_FOUND_INT=`echo "$PKEXEC_FOUND_VERSION" | $AWK -F. '{print $1 * 10000 + $2}'`
	AC_MSG_RESULT([$PKEXEC_FOUND_VERSION found])
	if test "$PKEXEC_FOUND_INT" -ge "$PKEXEC_REQUIRED_INT"; then
		GKSUPROG='pkexec --disable-internal-agent'
		AC_SUBST([GKSUPROG])
		AM_CONDITIONAL([INSTALL_POLKIT_ACTIONS], true)
	fi
fi

dnl Check for alternative graphical privilege escalation programs.
if test "x$GKSUPROG" = 'x'; then
	AC_CHECK_PROGS([GKSUPROG], [gksudo gksu kdesudo "xdg-su -c"], [])
fi


dnl======================
dnl i18n stuff
dnl======================
GETTEXT_PACKAGE=gparted
AC_SUBST([GETTEXT_PACKAGE])
AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE], "$GETTEXT_PACKAGE", [description])

AM_GLIB_GNU_GETTEXT
IT_PROG_INTLTOOL([0.36.0])


dnl======================
dnl checks for libs
dnl======================
AC_CHECK_LIB([uuid], [uuid_generate], [], AC_MSG_ERROR([*** libuuid not found.]))
AC_CHECK_LIB([dl], [dlopen], [], AC_MSG_ERROR([*** libdl not found.]))
AC_CHECK_LIB([parted], [ped_device_read], [], AC_MSG_ERROR([*** libparted not found.]))


dnl Check for minimum required libparted version.
dnl 1) Check using pkg-config.
dnl    (Older distros tend to not provide pkg-config information for libparted).
dnl 2) Check by linking and running a program to report libparted version directly.
LIBPARTED_REQUIRED_VERSION='1.7.1'
AC_MSG_CHECKING([for libparted >= $LIBPARTED_REQUIRED_VERSION (querying pkg-config)])
LIBPARTED_REQUIRED_INT=`echo "$LIBPARTED_REQUIRED_VERSION" |
	$AWK -F. '{print $1 * 1000000 + $2 * 10000 + $3}'`
dnl 1) Check using pkg-config.
PKG_CHECK_EXISTS(
	[libparted],
	[LIBPARTED_FOUND_VERSION=`$PKG_CONFIG --modversion libparted`
	 LIBPARTED_FOUND_INT=`echo "$LIBPARTED_FOUND_VERSION" |
		$AWK -F. '{print $1 * 1000000 + $2 * 10000 + $3}'`
	 AC_MSG_RESULT([$LIBPARTED_FOUND_VERSION])
	 test "$LIBPARTED_FOUND_INT" -ge "$LIBPARTED_REQUIRED_INT" ||
		AC_MSG_ERROR([*** libparted too old.  Require libparted >= $LIBPARTED_REQUIRED_VERSION but only found libparted $LIBPARTED_FOUND_VERSION.])
	],
	[AC_MSG_RESULT([not found])
	 dnl 2) Check by linking and running a program to report libparted version
	 dnl    directly.
	 AC_MSG_CHECKING([for libparted >= $LIBPARTED_REQUIRED_VERSION (querying libparted)])
	 AC_RUN_IFELSE(
		[AC_LANG_SOURCE(
			[[
#include <stdio.h>
#include <stdlib.h>
#include <parted/parted.h>

int main()
{
	const char *version = ped_get_version();
	if (version == NULL)
	{
		fprintf(stderr, "ERROR: ped_get_version() returned NULL\n");
		return EXIT_FAILURE;
	}
	printf("%s\n", version);
	return EXIT_SUCCESS;
}
			]]
		)],
		dnl Run test program again to cache libparted version.
		[LIBPARTED_FOUND_VERSION=`./conftest$EXEEXT`
		 LIBPARTED_FOUND_INT=`echo "$LIBPARTED_FOUND_VERSION" |
			$AWK -F. '{print $1 * 1000000 + $2 * 10000 + $3}'`
		 test "$LIBPARTED_FOUND_INT" -ge "$LIBPARTED_REQUIRED_INT" ||
			AC_MSG_ERROR([*** libparted too old.  Require libparted >= $LIBPARTED_REQUIRED_VERSION but only found libparted $LIBPARTED_FOUND_VERSION.])
		],
		[AC_MSG_ERROR([*** Error querying libparted version.  Check config.log for details.])]
	)]
)


dnl Check for libparted 2.0 to 3.0 inclusive for a bug where loop table
dnl creation doesn't delete old partitions.
LIBPARTED_MIN_WANTED_VERSION='2.0'
LIBPARTED_MAX_WANTED_VERSION='3.0'
AC_MSG_CHECKING([for $LIBPARTED_MIN_WANTED_VERSION <= libparted <= $LIBPARTED_MAX_WANTED_VERSION (loop table creation doesn't delete old partitions)])
LIBPARTED_MIN_WANTED_INT=`echo "$LIBPARTED_MIN_WANTED_VERSION" |
	$AWK -F. '{print $1 * 1000000 + $2 * 10000 + $3}'`
LIBPARTED_MAX_WANTED_INT=`echo "$LIBPARTED_MAX_WANTED_VERSION" |
	$AWK -F. '{print $1 * 1000000 + $2 * 10000 + $3}'`
if test "$LIBPARTED_MIN_WANTED_INT" -le "$LIBPARTED_FOUND_INT" -a \
        "$LIBPARTED_FOUND_INT" -le "$LIBPARTED_MAX_WANTED_INT"; then
	need_loop_delete_old_ptns_workaround=yes
	AC_DEFINE([ENABLE_LOOP_DELETE_OLD_PTNS_WORKAROUND], 1,
	          [Define to 1 to enable deletion of old partitions before creating a loop table workaround])
	AC_MSG_RESULT([(cached) yes])
else
	need_loop_delete_old_ptns_workaround=no
	AC_MSG_RESULT([(cached) no])
fi


dnl Check for libparted >= 2.2 for improved informing the kernel to
dnl re-read the partition table code and support of larger sector sizes
dnl (> 512 bytes).
LIBPARTED_WANTED_VERSION='2.2'
AC_MSG_CHECKING([for libparted >= $LIBPARTED_WANTED_VERSION (improved pt re-read)])
LIBPARTED_WANTED_INT=`echo "$LIBPARTED_WANTED_VERSION" |
	$AWK -F. '{print $1 * 1000000 + $2 * 10000 + $3}'`
if test "$LIBPARTED_FOUND_INT" -ge "$LIBPARTED_WANTED_INT"; then
	AC_DEFINE([USE_LIBPARTED_LARGE_SECTOR_SUPPORT], 1,
	          [Define to 1 to use libparted large sector support])
	need_pt_reread_workaround=no; support_large_sector_sizes=yes
	AC_MSG_RESULT([(cached) yes])
else
	AC_DEFINE([ENABLE_PT_REREAD_WORKAROUND], 1,
	          [Define to 1 to enable partition re-read workaround])
	need_pt_reread_workaround=yes; support_large_sector_sizes=no
	AC_MSG_RESULT([(cached) no])
fi


dnl Check for ped_file_system_resize() function to determine the existence
dnl of the API in the original parted library.  Available in parted <= 2.4.
dnl
dnl NOTE:
dnl For AC_CHECK_LIB the default action-if-found ($3) includes extending
dnl LIBS with the newly found library ($1) thus:
dnl     LIBS="-l$1 $LIBS"
dnl
dnl As the default action-if-found is overridden, LIBS isn't extended so
dnl saving and restoring LIBS isn't required.
have_old_lp_fs_resize_api=no
AC_CHECK_LIB(
	[parted], [ped_file_system_resize],
	[have_old_lp_fs_resize_api=yes]
)


dnl If not already found, check for ped_file_system_resize() function in
dnl the parted-fs-resize library to determine the need to use the new
dnl library.  Available in parted >= 3.1.
have_new_lp_fs_resize_lib=no
AS_IF(
	[test "x$have_old_lp_fs_resize_api" != xyes],
	[AC_CHECK_LIB(
		[parted-fs-resize], [ped_file_system_resize],
		[have_new_lp_fs_resize_lib=yes
		 LIBS="-lparted-fs-resize $LIBS"
		]
	)]
)


dnl Check for libparted >= 3.2 for online resize support.
LIBPARTED_WANTED_VERSION='3.2'
AC_MSG_CHECKING([for libparted >= $LIBPARTED_WANTED_VERSION (online resize)])
LIBPARTED_WANTED_INT=`echo "$LIBPARTED_WANTED_VERSION" |
	$AWK -F. '{print $1 * 1000000 + $2 * 10000 + $3}'`
if test "$LIBPARTED_FOUND_INT" -ge "$LIBPARTED_WANTED_INT"; then
	have_online_resize=yes
	AC_MSG_RESULT([(cached) yes])
else
	have_online_resize=no
	AC_MSG_RESULT([(cached) no])
fi


dnl Check if have libparted fs resize capability
if test [ ${have_old_lp_fs_resize_api} = yes -o ${have_new_lp_fs_resize_lib} = yes ]; then
	AC_DEFINE([HAVE_LIBPARTED_FS_RESIZE], [1], [Define to 1 if have libparted fs resize capability])
fi


dnl gthread
PKG_CHECK_MODULES([GTHREAD], [gthread-2.0])
AC_SUBST([GTHREAD_LIBS])
AC_SUBST([GTHREAD_CFLAGS])

dnl GTKMM
PKG_CHECK_MODULES([GTKMM], [gtkmm-2.4 >= 2.16.0])
AC_SUBST([GTKMM_LIBS])
AC_SUBST([GTKMM_CFLAGS])


dnl Check for glibmm minimum required version.
PKG_CHECK_MODULES([GLIBMM], [glibmm-2.4 >= 2.14.0])


dnl Check for gtkmm >= 2.22 to determine availability of Gtk::MessageDialog::get_message_area().
AC_MSG_CHECKING([for Gtk::MessageDialog::get_message_area() method])
PKG_CHECK_EXISTS(
	[gtkmm-2.4 >= 2.22.0],
	[AC_DEFINE([HAVE_GET_MESSAGE_AREA], 1,
	           [Define to 1 if gtkmm provides Gtk::MessageDialog::get_message_area() method.])
	 AC_MSG_RESULT([yes])
	],
	[AC_MSG_RESULT([no])]
)


need_cxx_compile_stdcxx_11=no
dnl Check for glibmm >= 2.45.40 which requires C++11 compilation.
AC_MSG_CHECKING([for glibmm >= 2.45.40 which requires C++11 compilation])
PKG_CHECK_EXISTS(
	[glibmm-2.4 >= 2.45.40],
	[need_cxx_compile_stdcxx_11=yes
	 AC_MSG_RESULT([yes])
	],
	[AC_MSG_RESULT([no])]
)
dnl Check for libsigc++ >= 2.5.1 which requires C++11 compilation.
AC_MSG_CHECKING([for libsigc++ >= 2.5.1 which requires C++11 compilation])
PKG_CHECK_EXISTS(
	[sigc++-2.0 >= 2.5.1],
	[need_cxx_compile_stdcxx_11=yes
	 AC_MSG_RESULT([yes])
	],
	[AC_MSG_RESULT([no])]
)
dnl Enable C++11 compilation only if required.
if test "x$need_cxx_compile_stdcxx_11" = xyes; then
	AX_CXX_COMPILE_STDCXX_11()
fi



dnl Definitions for building of and with gtest.  Gets flags for pthread via earlier
dnl gthread package check.
GTEST_CPPFLAGS="-DGTEST_HAS_PTHREAD=1"
GTEST_CXXFLAGS="$GTHREAD_CFLAGS $GTKMM_CFLAGS"
GTEST_LDFLAGS=
GTEST_LIBS="$GTHREAD_LIBS $GTKMM_LIBS"
AC_SUBST([GTEST_CPPFLAGS])
AC_SUBST([GTEST_CXXFLAGS])
AC_SUBST([GTEST_LDFLAGS])
AC_SUBST([GTEST_LIBS])


dnl======================
dnl check whether to build documentation - gnome-doc-utils
dnl======================
AC_ARG_ENABLE(
	[doc],
	AS_HELP_STRING(
		[--disable-doc],
		dnl Autoconf quadrigraphs '@<:@' = '[' and '@:>@' = ']'
		[disable building help documentation @<:@default=enabled@:>@]),
	[enable_doc=$enableval],
	[enable_doc=yes]
)

AC_MSG_CHECKING([whether help documentation should be built])
if test "x$enable_doc" = xyes; then
	AC_DEFINE([ENABLE_HELP_DOC], [1], [Define to 1 when help documentation is built])
	AC_MSG_RESULT([yes])
else
	AC_MSG_RESULT([no])
fi

if test "x$enable_doc" = xyes; then
	GNOME_DOC_INIT
else
	dnl Do not care if GDU is not found
	GNOME_DOC_INIT(,,[:])
fi

AM_CONDITIONAL([BUILD_HELP_DOC], [test "x$enable_doc" = xyes])

dnl GNOME 2 yelp needs scrollkeeper database updates to find installed GNOME help files.
dnl GNOME 3 yelp doesn't need scrollkeeper and its use is deprecated.  To avoid requiring
dnl deprecated scrollkeeper on GNOME 3, automatically disable scrollkeeper database
dnl updates when the command is not available.
dnl (See /usr/share/aclocal/gnome-doc-utils.m4 for the GNOME_DOC_INIT macro which has
dnl already parsed the --disable-scrollkeeper option and set enable_scrollkeeper and
dnl ENABLE_SK).
AC_CHECK_PROG([have_scrollkeeper_update], [scrollkeeper-update], yes, no)
AC_MSG_CHECKING([whether to enable scrollkeeper database update])
if test "$enable_scrollkeeper" = "yes" -a "$have_scrollkeeper_update" = "yes"; then
	AC_MSG_RESULT([yes])
else
	enable_scrollkeeper=no
	AM_CONDITIONAL([ENABLE_SK], false)
	AC_MSG_RESULT([no])
fi


dnl======================
dnl check whether to use native libparted dmraid support
dnl======================
AC_ARG_ENABLE(
	[libparted_dmraid],
	AS_HELP_STRING(
		[--enable-libparted-dmraid],
		[use native libparted /dev/mapper dmraid support @<:@default=disabled@:>@]),
	[enable_libparted_dmraid=$enableval],
	[enable_libparted_dmraid=no]
)

AC_MSG_CHECKING([whether to use native libparted /dev/mapper dmraid support])
if test "x$enable_libparted_dmraid" = xyes; then
	AC_DEFINE([USE_LIBPARTED_DMRAID], [1],
	          [Define to 1 to use native libparted /dev/mapper dmraid support])
	AC_MSG_RESULT([yes])
else
	AC_MSG_RESULT([no])
fi


dnl======================
dnl check whether to enable online resize support
dnl======================
AC_ARG_ENABLE(
	[online-resize],
	AS_HELP_STRING(
		[--enable-online-resize],
		[enable online resize support @<:@default=auto@:>@]),
	[enable_online_resize=$enableval],
	[enable_online_resize=$have_online_resize]
)

AC_MSG_CHECKING([whether online resize support is enabled])
if test "x$enable_online_resize" = xyes; then
	AC_DEFINE([ENABLE_ONLINE_RESIZE], [1], [Define to 1 if online resize is enabled])
	AC_MSG_RESULT([yes])
else
	AC_MSG_RESULT([no])
fi


dnl Check whether to explicitly grant root access to the display.
AC_ARG_ENABLE(
	[xhost-root],
	AS_HELP_STRING(
		[--enable-xhost-root],
		[enable explicitly granting root access to the display @<:@default=disabled@:>@]),
	[enable_xhost_root=$enableval],
	[enable_xhost_root=no]
)

AC_MSG_CHECKING([whether to explicitly grant root access to the display])
if test "x$enable_xhost_root" = 'xyes'; then
	AC_MSG_RESULT([yes])
else
	AC_MSG_RESULT([no])
fi
AC_SUBST([ENABLE_XHOST_ROOT], $enable_xhost_root)


AC_CONFIG_FILES([
Makefile
compose/Makefile
data/Makefile
data/icons/Makefile
doc/Makefile
help/Makefile
include/Makefile
lib/Makefile
lib/gtest/Makefile
src/Makefile
po/Makefile.in
tests/Makefile
])

AC_OUTPUT


dnl======================
dnl Summary
dnl======================

echo ""
echo "======================== Final configuration ==========================="
echo "                         Installing into prefix  :  $prefix"
echo ""
echo "                      Build help documentation?  :  $enable_doc"
echo "                  Update scrollkeeper database?  :  $enable_scrollkeeper"
echo ""
echo "           Use native libparted dmraid support?  :  $enable_libparted_dmraid"
echo ""
echo "   Explicitly grant root access to the display?  :  $enable_xhost_root"
echo ""
echo "       --- Features Based On Libparted Version ---"
echo "       Need delete old partitions before"
echo "              creating a loop table workaround?  :  $need_loop_delete_old_ptns_workaround"
echo "       Need partition table re-read workaround?  :  $need_pt_reread_workaround"
echo "     Supports large sector sizes (> 512 bytes)?  :  $support_large_sector_sizes"
echo "   Have old libparted file system resizing API?  :  $have_old_lp_fs_resize_api"
echo "   Have new libparted file system resizing LIB?  :  $have_new_lp_fs_resize_lib"
echo "                  Enable online resize support?  :  $enable_online_resize"
echo ""
echo " If all settings are OK, type make and then (as root) make install"
echo "========================================================================"