github.com/blixtra/rkt@v0.8.1-0.20160204105720-ab0d1add1a43/configure.ac (about) 1 AC_PREREQ([2.63]) 2 AC_INIT([rkt], [0.16.0+git], [https://github.com/coreos/rkt/issues]) 3 4 AC_DEFUN([RKT_CHECK_PROG], 5 [AS_VAR_IF([$1], [], 6 [AC_CHECK_PROG($@)],[:])]) 7 8 AC_DEFUN([RKT_REQ_PROG], 9 [AS_VAR_IF([$1], [], 10 [AC_CHECK_PROG($@) 11 AS_VAR_IF([$1], [$3], [:], AC_MSG_ERROR([*** $2 not found]))], 12 [:])]) 13 14 AC_DEFUN([RKT_REQ_ABS_PROG], 15 [AS_VAR_IF([$1], [], 16 [AC_PATH_PROG($@) 17 AS_IF([test "x$]$1[" = 'x'], [AC_MSG_ERROR([*** $2 not found])])], 18 [:])]) 19 20 dnl We assume having bash in lots of places, so check it in the 21 dnl beginning. 22 RKT_REQ_ABS_PROG([BASH_SHELL], [bash]) 23 24 dnl this will be printed in configure summary and by rkt version 25 RKT_FEATURES="" 26 RKT_ADD_FEATURE() { 27 RKT_FEATURES=`echo "${RKT_FEATURES} $1" | sed -e 's/^ \+//'` 28 } 29 dnl if version ends with +git, append a short git-hash. 30 AS_IF([test `expr match 'AC_PACKAGE_VERSION' '.*+git$'` -gt 0], 31 dnl version has +git suffix, ignore errors (not a git repo) 32 [RKT_VERSION="AC_PACKAGE_VERSION`git rev-parse --short HEAD 2>/dev/null``git diff-index --quiet HEAD 2>/dev/null || echo -dirty`"], 33 dnl version has no +git suffix 34 [RKT_VERSION="AC_PACKAGE_VERSION"]) 35 36 AC_CANONICAL_HOST 37 AC_CANONICAL_BUILD 38 39 #### FLAGS 40 41 ## STAGE1 - detailed setup 42 43 AC_ARG_WITH(stage1-default-name, 44 [AS_HELP_STRING([--with-stage1-default-name], 45 [default name of stage1, default: 'coreos.com/rkt/stage1-${flavor}'])], 46 [RKT_STAGE1_DEFAULT_NAME="${withval}"], 47 [RKT_STAGE1_DEFAULT_NAME=auto]) 48 49 AC_ARG_WITH(stage1-default-version, 50 [AS_HELP_STRING([--with-stage1-default-version], 51 [default version of stage1, default: same as rkt version])], 52 [RKT_STAGE1_DEFAULT_VERSION="${withval}"], 53 [RKT_STAGE1_DEFAULT_VERSION=auto]) 54 55 ## STAGE1 - flavor setup 56 57 AC_ARG_WITH([stage1-default-flavor], 58 [AS_HELP_STRING([--with-stage1-default-flavor], 59 [stage1 flavor that will be loaded by default; has to be listed in --with-stage1-flavors, default: first from the stage1 flavors list])], 60 [RKT_STAGE1_DEFAULT_FLAVOR="${withval}"], 61 [RKT_STAGE1_DEFAULT_FLAVOR=auto]) 62 63 ## STAGE1 - common setup 64 65 AC_ARG_WITH([stage1-flavors], 66 [AS_HELP_STRING([--with-stage1-flavors], 67 [comma-separated list of stage1 flavors; choose from 'src', 'coreos', 'host', 'kvm', 'fly'; default: 'coreos,kvm,fly'])], 68 [RKT_STAGE1_FLAVORS="${withval}"], 69 [RKT_STAGE1_FLAVORS=auto]) 70 71 AC_ARG_WITH([stage1-flavors-version-override], 72 [AS_HELP_STRING([--with-stage1-flavors-version-override], 73 [override the version of stage1 with a custom one; it also changes the default stage1 version in flavor setup])], 74 [RKT_STAGE1_FLAVORS_VERSION_OVERRIDE="${withval}"], 75 [RKT_STAGE1_FLAVORS_VERSION_OVERRIDE=auto]) 76 77 AC_ARG_WITH(stage1-default-location, 78 [AS_HELP_STRING([--with-stage1-default-location], 79 [default location of stage1, default: none])], 80 [RKT_STAGE1_DEFAULT_LOCATION="${withval}"], 81 [RKT_STAGE1_DEFAULT_LOCATION=auto]) 82 83 AC_ARG_WITH(stage1-default-images-directory, 84 [AS_HELP_STRING([--with-stage1-default-images-directory], 85 [default directory for stage1 images, default: LIBDIR/rkt/stage1-images])], 86 [RKT_STAGE1_DEFAULT_IMAGES_DIR="${withval}"], 87 [RKT_STAGE1_DEFAULT_IMAGES_DIR=auto]) 88 89 # STAGE1 - systemd src and version for src flavor 90 91 AC_ARG_WITH([stage1-systemd-src], 92 [AS_HELP_STRING([--with-stage1-systemd-src], 93 [address to git repository of systemd, used in 'src' stage1 flavor (default: 'https://github.com/systemd/systemd.git')])], 94 [RKT_STAGE1_SYSTEMD_SRC="${withval}"], 95 [RKT_STAGE1_SYSTEMD_SRC='auto']) 96 97 AC_ARG_WITH([stage1-systemd-version], 98 [AS_HELP_STRING([--with-stage1-systemd-version], 99 [systemd version to build, used in 'src' stage1 flavor (default: 'v222', should be in format 'v<number>', like v222)])], 100 [RKT_STAGE1_SYSTEMD_VER="${withval}"], 101 [RKT_STAGE1_SYSTEMD_VER='auto']) 102 103 ## STAGE1 - path to coreos pxe and its systemd version for kvm and coreos flavors 104 105 AC_ARG_WITH([coreos-local-pxe-image-path], 106 [AS_HELP_STRING([--with-coreos-local-pxe-image-path], 107 [path to local CoreOS PXE image, used in 'coreos' and 'kvm' stage1 flavors (default: empty) (the GPG signature of this file will not be checked!)])], 108 [RKT_LOCAL_COREOS_PXE_IMAGE_PATH="${withval}"], 109 [RKT_LOCAL_COREOS_PXE_IMAGE_PATH=""]) 110 111 AC_ARG_WITH([coreos-local-pxe-image-systemd-version], 112 [AS_HELP_STRING([--with-coreos-local-pxe-image-systemd-version], 113 [version of systemd in local CoreOS PXE image, used in 'coreos' and 'kvm' stage1 flavors (should be in format 'v<number>', like v222)])], 114 [RKT_LOCAL_COREOS_PXE_IMAGE_SYSTEMD_VER="${withval}"], 115 [RKT_LOCAL_COREOS_PXE_IMAGE_SYSTEMD_VER=]) 116 117 ## Functional tests 118 119 AC_ARG_ENABLE([functional-tests], 120 [AS_HELP_STRING([--enable-functional-tests], 121 [enable functional tests on make check (linux only, uses sudo, default: 'no', use 'auto' to enable if possible, for host stage1 flavor systemd version 220 or higher on host is required)])], 122 [RKT_RUN_FUNCTIONAL_TESTS="${enableval}"], 123 [RKT_RUN_FUNCTIONAL_TESTS="no"]) 124 125 ## TPM 126 127 AC_ARG_ENABLE([tpm], 128 [AS_HELP_STRING([--enable-tpm], 129 [enable logging to TPM, use 'auto' to enable it if the required development files are found, default: 'yes'])], 130 [RKT_ENABLE_TPM="${enableval}"], 131 [RKT_ENABLE_TPM="yes"]) 132 133 ## insecure go 134 135 AC_ARG_ENABLE([insecure-go], 136 [AS_HELP_STRING([--enable-insecure-go], 137 [allow building rkt with go having known security issues, default: no])], 138 [RKT_INSECURE_GO="${enableval}"], 139 [RKT_INSECURE_GO="no"]) 140 141 #### CHECKING 142 143 ## STAGE1 - initial verification and setup 144 145 dnl There are two kinds of setup - flavor and detailed. A flavor setup 146 dnl is when we specify a default flavor. A detailed setup is when we 147 dnl specify a default name and version instead. 148 AS_IF([test "x${RKT_STAGE1_DEFAULT_FLAVOR}" != 'xauto' -a '(' "x${RKT_STAGE1_DEFAULT_NAME}" != 'xauto' -o "x${RKT_STAGE1_DEFAULT_VERSION}" != 'xauto' ')'], 149 dnl Passed both --with-stage1-default-flavor and 150 dnl --with-stage1-default-{name,version} - bail out, 151 dnl they are mutually exclusive. 152 [AC_MSG_ERROR([*** --with-stage1-default-flavor and --with-stage1-default-{name,version} flags are mutually exclusive; use either default flavor or specific default name and version])], 153 [test "x${RKT_STAGE1_DEFAULT_FLAVOR}" = 'xauto' -a "x${RKT_STAGE1_DEFAULT_NAME}" = 'xauto' -a "x${RKT_STAGE1_DEFAULT_VERSION}" = 'xauto'], 154 dnl Passed neither --with-stage1-default-flavor nor 155 dnl --with-stage1-default-{name,version} - default to 156 dnl flavor setup. 157 [RKT_STAGE1_SETUP_KIND=flavor], 158 [test "x${RKT_STAGE1_DEFAULT_FLAVOR}" != 'xauto'], 159 dnl Passed --with-stage1-default-flavor flag - default 160 dnl to flavor setup. 161 [RKT_STAGE1_SETUP_KIND=flavor], 162 [test "x${RKT_STAGE1_DEFAULT_NAME}" != 'xauto' -o "x${RKT_STAGE1_DEFAULT_VERSION}" != 'xauto'], 163 dnl Passed one or both from 164 dnl --with-stage1-default-{name,version} - default to 165 dnl detailed setup. 166 [RKT_STAGE1_SETUP_KIND=detailed]) 167 168 AS_CASE([${RKT_STAGE1_SETUP_KIND}], 169 [detailed], 170 dnl Detailed setup - do not build any flavor unless 171 dnl explicitly asked for it and make sure that both 172 dnl name and version were passed. 173 [AS_VAR_IF([RKT_STAGE1_FLAVORS],[auto], 174 [RKT_STAGE1_FLAVORS='']) 175 RKT_STAGE1_DEFAULT_FLAVOR='' 176 AS_IF([test "x${RKT_STAGE1_DEFAULT_NAME}" = 'xauto' -o "x${RKT_STAGE1_DEFAULT_VERSION}" = 'xauto'], 177 [AC_MSG_ERROR([*** Both --with-stage1-default-name and --with-stage1-default-version must be specified])])], 178 [flavor], 179 dnl The flavor setup - build coreos and kvm flavors 180 dnl and set the first flavor in the list as a 181 dnl default unless specified. 182 [AS_VAR_IF([RKT_STAGE1_FLAVORS],[auto], 183 [RKT_STAGE1_FLAVORS='coreos,kvm,fly']) 184 AS_VAR_IF([RKT_STAGE1_DEFAULT_FLAVOR],[auto], 185 [RKT_STAGE1_DEFAULT_FLAVOR=`AS_ECHO([${RKT_STAGE1_FLAVORS}]) | cut -d, -f1`]) 186 RKT_STAGE1_DEFAULT_NAME='' 187 RKT_STAGE1_DEFAULT_VERSION=''], 188 [AC_MSG_ERROR([*** Unknown setup kind, should not happen])]) 189 190 ## Stage1 flavor version override verification 191 192 AS_VAR_IF([RKT_STAGE1_FLAVORS_VERSION_OVERRIDE], [auto], 193 dnl no override, no checking 194 [RKT_STAGE1_FLAVORS_VERSION_OVERRIDE=''], 195 dnl check if we override the version, even if we build no flavors at all 196 [AS_VAR_IF([RKT_STAGE1_FLAVORS], [], 197 [AC_MSG_WARN([* overriding stage1 version, but no stage1 flavors are built])])]) 198 199 ## Stage1 default image directory 200 201 dnl Normally it is autoconf which sets prefix and exec_prefix 202 dnl variables to some default values if they were NONE, but that 203 dnl happens way too late, so we need to do it ourselves right now. 204 AS_VAR_IF([prefix],[NONE], 205 [prefix="${ac_default_prefix}"]) 206 AS_VAR_IF([exec_prefix],[NONE], 207 [exec_prefix="${prefix}"]) 208 AS_VAR_IF([RKT_STAGE1_DEFAULT_IMAGES_DIR],[auto], 209 dnl Calling eval makes sure that ${libdir} is expanded. 210 dnl autoconf defines it as '${eprefix}/lib' - note the 211 dnl single quotes, which make ${eprefix} to be not 212 dnl expanded. There is some rationale behind all this, but 213 dnl we need no features coming from unexpanded variables. 214 [eval RKT_STAGE1_DEFAULT_IMAGES_DIR="${libdir}/rkt/stage1-images"]) 215 AS_CASE([${RKT_STAGE1_DEFAULT_IMAGES_DIR}], 216 [/*], 217 dnl alright, the path is absolute 218 [:], 219 [AC_MSG_ERROR([*** path to the stage1 images directory must be absolute])]) 220 221 ## Built stage1 flavors verification 222 223 dnl a list of all flavors 224 RKT_STAGE1_ALL_FLAVORS=coreos,kvm,host,src,fly 225 226 dnl RKT_ITERATE_FLAVORS iterates all comma-separated flavors stored in 227 dnl $1 using an iterator variable $2 and executes body $3. 228 AC_DEFUN([RKT_ITERATE_FLAVORS], 229 [for $2 in `AS_ECHO(["$1"]) | tr ',' ' '` 230 do 231 : 232 $3 233 done]) 234 235 dnl RKT_IS_VALID_FLAVOR checks if $1 is a valid flavor, $2 is an 236 dnl additional string to an error message. 237 AC_DEFUN([RKT_IS_VALID_FLAVOR], 238 [AS_CASE([$1], 239 dnl Correct flavor, nothing to do. 240 [coreos|kvm|host|src|fly], 241 [], 242 dnl Bogus flavor, bail out. 243 [AC_MSG_ERROR([*** unknown stage1 flavor "$1" $2])])]) 244 245 dnl RKT_IF_HAS_FLAVOR checks if the comma-separated list of flavors in 246 dnl $1 contains any flavor in the comma-separated list of flavors in 247 dnl $2; if yes, executes $3, otherwise - $4. 248 AC_DEFUN([RKT_IF_HAS_FLAVOR], 249 [flavor_found=0 250 RKT_ITERATE_FLAVORS([$2],[flavor], 251 [AS_IF([AS_ECHO([",$1,"]) | grep --silent ",${flavor},"], 252 [flavor_found=1 253 break])]) 254 AS_IF([test ${flavor_found} -eq 1],[:;$3],[:;$4])]) 255 256 dnl Validate passed flavors to build - make sure that valid flavors 257 dnl were passed and each flavor was specified only once. Also, do some 258 dnl basic program checks for each requested flavor. 259 RKT_SPECIFIED_FLAVORS='' 260 RKT_ITERATE_FLAVORS([${RKT_STAGE1_FLAVORS}],[flavor], 261 [RKT_IS_VALID_FLAVOR([${flavor}],[in --with-stage1-flavors]) 262 RKT_IF_HAS_FLAVOR([${RKT_SPECIFIED_FLAVORS}],[${flavor}], 263 [AC_MSG_ERROR([*** "${flavor}" flavor specified twice in --with-stage1-flavors])]) 264 RKT_SPECIFIED_FLAVORS="${RKT_SPECIFIED_FLAVORS},${flavor}" 265 AS_CASE([${flavor}], 266 [src], 267 [RKT_REQ_PROG([INTLTOOLIZE],[intltoolize],[intltoolize]) 268 RKT_REQ_PROG([LIBTOOLIZE],[libtoolize],[libtoolize])], 269 [coreos], 270 [RKT_REQ_PROG([WGET],[wget],[wget]) 271 RKT_REQ_PROG([MKTEMP],[mktemp],[mktemp]) 272 RKT_REQ_PROG([MD5SUM],[md5sum],[md5sum]) 273 RKT_REQ_PROG([CPIO],[cpio],[cpio]) 274 RKT_REQ_PROG([GZIP],[gzip],[gzip]) 275 RKT_REQ_PROG([UNSQUASHFS],[unsquashfs],[unsquashfs]) 276 RKT_REQ_PROG([SORT],[sort],[sort])], 277 [kvm], 278 [AC_MSG_WARN([* kvm is an experimental stage1 implementation, some features are missing]) 279 RKT_REQ_PROG([PATCH],[patch],[patch]) 280 RKT_REQ_PROG([BC],[bc],[bc])], 281 [host], 282 [], 283 [fly], 284 [AC_MSG_WARN([* fly is an experimental stage1 implementation with almost no isolation and less features])], 285 [AC_MSG_ERROR([*** Unhandled flavor "${flavor}", should not happen])])]) 286 287 dnl Validate passed default flavor, it should be one of the built 288 dnl stage1 flavors 289 290 AS_VAR_IF([RKT_STAGE1_SETUP_KIND],['flavor'], 291 [RKT_IS_VALID_FLAVOR([${RKT_STAGE1_DEFAULT_FLAVOR}],[in --with-stage1-default-flavor]) 292 RKT_IF_HAS_FLAVOR([${RKT_STAGE1_FLAVORS}],[${RKT_STAGE1_DEFAULT_FLAVOR}], 293 dnl valid default flavor, alright 294 [], 295 dnl not a part of built flavors, bail out 296 [AC_MSG_ERROR([*** --with-stage1-default-flavor should use one of flavors from --with-stage1-flavors (${RKT_STAGE1_FLAVORS})])])]) 297 298 ## Options specific for src flavor 299 300 # Process systemd src repo and version for src flavor. 301 RKT_IF_HAS_FLAVOR([${RKT_STAGE1_FLAVORS}],[src], 302 dnl we are building src flavor 303 [AS_VAR_IF([RKT_STAGE1_SYSTEMD_SRC], [auto], 304 dnl systemd source not specified, use default 305 [RKT_STAGE1_SYSTEMD_SRC='https://github.com/systemd/systemd.git'], 306 dnl systemd source specified, use it 307 [:]) 308 AS_VAR_IF([RKT_STAGE1_SYSTEMD_VER], [auto], 309 dnl systemd version not specified, use default 310 [RKT_STAGE1_SYSTEMD_VER='v222'], 311 dnl systemd version specified, use it 312 [:])], 313 dnl we are not building src flavor 314 [AS_VAR_IF([RKT_STAGE1_SYSTEMD_SRC], [auto], 315 dnl systemd source not specified, alright, zero the value just in case 316 [RKT_STAGE1_SYSTEMD_SRC=''], 317 dnl systemd source specified, warn about it being ignored 318 [AC_MSG_WARN([* --with-stage1-systemd-src is ignored, src flavor is not built])]) 319 AS_VAR_IF([RKT_STAGE1_SYSTEMD_VER], [auto], 320 dnl systemd version not specified, alright, zero the value just in case 321 [RKT_STAGE1_SYSTEMD_VER=''], 322 dnl systemd version specified, warn about it being ignored 323 [AC_MSG_WARN([* --with-stage1-systemd-version is ignored, src flavor is not built])])]) 324 325 dnl Warn if version is HEAD, just use master. 326 AS_VAR_IF([RKT_STAGE1_SYSTEMD_VER], [HEAD], 327 [AC_MSG_WARN([* 'HEAD' is not a systemd version, setting it to 'master' instead]) 328 RKT_STAGE1_SYSTEMD_VER='master']) 329 330 ## Options specific to coreos/kvm flavors 331 332 # Process local CoreOS PXE image path and its systemd version for 333 # coreos/kvm flavors. 334 RKT_IF_HAS_FLAVOR([${RKT_STAGE1_FLAVORS}],[coreos,kvm], 335 dnl for kvm and coreos check if both pxe image path and 336 dnl systemd version are specified or neither 337 [AS_VAR_IF([RKT_LOCAL_COREOS_PXE_IMAGE_PATH], [], 338 dnl no local coreos pxe image path specified 339 [AS_VAR_IF([RKT_LOCAL_COREOS_PXE_IMAGE_SYSTEMD_VER],[], 340 dnl no version specified, alright, keep quiet 341 [:], 342 dnl version specified, warn about it being ignored 343 [AC_MSG_WARN([* --with-coreos-local-pxe-image-systemd-version is ignored, because --with-coreos-local-pxe-image-path was not specified]) 344 RKT_LOCAL_COREOS_PXE_IMAGE_SYSTEMD_VER='']) 345 dnl gpg is required for signature 346 dnl verification 347 RKT_REQ_PROG([GPG],[gpg],[gpg])], 348 dnl local coreos pxe image path specified 349 [AS_VAR_IF([RKT_LOCAL_COREOS_PXE_IMAGE_SYSTEMD_VER],[], 350 dnl no version specified, bail out, version is required 351 [AC_MSG_ERROR([*** No systemd version for local CoreOS PXE image specified, use --with-coreos-local-pxe-image-systemd-version])], 352 dnl version specified, alright, keep quiet 353 [:])])], 354 dnl for other flavors just warn if either is specified 355 [AS_VAR_IF([RKT_LOCAL_COREOS_PXE_IMAGE_PATH], [], 356 dnl empty value, alright 357 [:], 358 dnl not empty, warn about it, zero it just in case 359 [AC_MSG_WARN([* --with-coreos-local-pxe-image-path is ignored by ${RKT_STAGE1_DEFAULT_FLAVOR} stage1 flavor]) 360 RKT_LOCAL_COREOS_PXE_IMAGE_PATH='']) 361 AS_VAR_IF([RKT_LOCAL_COREOS_PXE_IMAGE_SYSTEMD_VER], [], 362 dnl empty value, alright 363 [:], 364 dnl not empty, warn about it, zero it just in case 365 [AC_MSG_WARN([* --with-coreos-local-pxe-image-systemd-version is ignored by ${RKT_STAGE1_DEFAULT_FLAVOR} stage1 flavor]) 366 RKT_LOCAL_COREOS_PXE_IMAGE_SYSTEMD_VER=''])]) 367 368 ## Setup default name, version, location and a filename in rkt dir, 369 ## take version override into account for flavored setup 370 371 # This will be set to something like stage1-coreos.aci, so rkt will 372 # know what to look for in the rkt directory if default stage1 image 373 # location is empty. 374 RKT_STAGE1_DEFAULT_IMAGE_FILENAME_IN_RKT_DIRECTORY='' 375 376 dnl Validate a default stage1 image location - check whether the 377 dnl location is either a URL with supported scheme (docker, https, 378 dnl http or file) or an absolute path. If it is the latter, get a 379 dnl filename which will be used by rkt to load the stage1 image file 380 dnl from the same directory if the image in the default location is 381 dnl absent. 382 AS_CASE([${RKT_STAGE1_DEFAULT_LOCATION}], 383 [auto], 384 dnl no location passed at all, nix it 385 [RKT_STAGE1_DEFAULT_LOCATION=''], 386 [docker://|https://|http://|file://], 387 dnl alright, a probably valid URL 388 [:], 389 [/*], 390 dnl alright, an absolute path, let's get a filename 391 [RKT_STAGE1_DEFAULT_IMAGE_FILENAME_IN_RKT_DIRECTORY=`basename ${RKT_STAGE1_DEFAULT_LOCATION}`], 392 dnl wrong default stage1 image location 393 [AC_MSG_ERROR([*** Default stage1 image path is neither a valid URL (with docker://, https://, http:// or file:// scheme) nor an absolute path])]) 394 395 AS_CASE([${RKT_STAGE1_SETUP_KIND}], 396 [detailed], 397 dnl detailed setup - not much to do, default name 398 dnl and version are already specified, warn if 399 dnl default location was not specified 400 [AS_VAR_IF([RKT_STAGE1_DEFAULT_LOCATION],[], 401 [AC_MSG_WARN([* It may be necessary to pass --stage1-{url,path,name,hash,from-dir} flag to run rkt])])], 402 [flavor], 403 dnl flavor setup - set the default name and version, 404 dnl set the location if not specified 405 [AS_CASE([${RKT_STAGE1_DEFAULT_FLAVOR}], 406 dnl for src flavor, we also append systemd version to stage1 name 407 [src], 408 [RKT_STAGE1_DEFAULT_NAME="coreos.com/rkt/stage1-${RKT_STAGE1_DEFAULT_FLAVOR}-${RKT_STAGE1_SYSTEMD_VER}"], 409 dnl other flavors get only flavor name 410 [RKT_STAGE1_DEFAULT_NAME="coreos.com/rkt/stage1-${RKT_STAGE1_DEFAULT_FLAVOR}"]) 411 AS_VAR_IF([RKT_STAGE1_FLAVORS_VERSION_OVERRIDE], [], 412 [RKT_STAGE1_DEFAULT_VERSION="${RKT_VERSION}"], 413 [RKT_STAGE1_DEFAULT_VERSION="${RKT_STAGE1_FLAVORS_VERSION_OVERRIDE}"]) 414 AS_VAR_IF([RKT_STAGE1_DEFAULT_LOCATION],[], 415 [RKT_STAGE1_DEFAULT_IMAGE_FILENAME_IN_RKT_DIRECTORY="stage1-${RKT_STAGE1_DEFAULT_FLAVOR}.aci"])], 416 [AC_MSG_ERROR([*** Unknown setup kind, should not happen])]) 417 418 ## Functional tests 419 420 dnl Check for gpg - required by functional tests. Note that this does 421 dnl not bail out here if it is not found. 422 RKT_CHECK_PROG([GPG],[gpg],[gpg]) 423 424 AS_IF([test "x${RKT_RUN_FUNCTIONAL_TESTS}" = 'xyes' -o "x${RKT_RUN_FUNCTIONAL_TESTS}" = 'xauto'], 425 [AC_MSG_CHECKING([whether functional tests can be run]) 426 rkt_functional_tests_msg='' 427 AS_CASE([${host}], 428 [*-*-linux*], 429 dnl we are on linux, checks can continue 430 [], 431 dnl non-linux host 432 [rkt_functional_tests_msg="functional tests are supported only under linux"]) 433 AS_VAR_IF([rkt_functional_tests_msg],[], 434 dnl we are on linux host; check if we have default 435 dnl flavor set 436 [AS_VAR_IF([RKT_STAGE1_SETUP_KIND],[flavor], 437 dnl we have flavor setup, checks can 438 dnl continue 439 [:], 440 [rkt_functional_tests_msg='Currently functional tests cannot be run on 3rd party stage1 images'])]) 441 AS_VAR_IF([rkt_functional_tests_msg],[], 442 dnl we have a default flavor, check some special 443 dnl prerequisites for host flavor 444 [AS_VAR_IF([RKT_STAGE1_DEFAULT_FLAVOR], [host], 445 dnl checking if we are running systemd as init, -.mount is a mount unit for /. 446 [AS_IF([systemctl 2>/dev/null | grep --silent -e '-\.mount'], 447 dnl systemd runs as init 448 [sdv=`systemctl --version | head -1 | sed -e 's/^systemd \(@<:@0-9@:>@*\)$/\1/'` 449 AS_IF([test ${sdv} -lt 220], 450 [rkt_functional_tests_msg="Cannot run functional tests with ${RKT_STAGE1_DEFAULT_FLAVOR} stage1 flavor - systemd version on host is lower than 220 (currently running ${sdv})"])], 451 dnl systemd is not an init 452 [rkt_functional_tests_msg="Cannot run functional tests with ${RKT_STAGE1_DEFAULT_FLAVOR} stage1 flavor - no systemd on host"])])]) 453 dnl gpg is required for functional tests 454 AS_VAR_IF([GPG],[gpg], 455 dnl gpg found, alright 456 [:], 457 dnl gpg not found, running functional tests is impossible 458 [rkt_functional_tests_msg="Cannot run functional tests - no gpg found"]) 459 AS_VAR_IF([rkt_functional_tests_msg], [], 460 dnl no message, tests can be run 461 [RKT_RUN_FUNCTIONAL_TESTS=yes 462 AC_MSG_RESULT([yes])], 463 dnl message available, tests will not be run 464 [AC_MSG_RESULT([no]) 465 AS_VAR_IF([RKT_RUN_FUNCTIONAL_TESTS], [auto], 466 dnl functional tests are optional, so only print an info 467 [RKT_RUN_FUNCTIONAL_TESTS=no 468 AC_MSG_NOTICE([${rkt_functional_tests_msg}])], 469 dnl functional tests are required, so bail out 470 [AC_MSG_ERROR([*** ${rkt_functional_tests_msg}])])])]) 471 472 473 ## Miscellaneous stuff 474 475 # cross_compiling is a standard autoconf variable. See the autoconf manual for 476 # details. 477 AS_VAR_IF([cross_compiling], [no], 478 dnl no crosscompilation 479 [GOARCH_FOR_BUILD=${GOARCH_FOR_BUILD:-${GOARCH}}], 480 dnl we do crosscompilation 481 [AC_MSG_CHECKING([build golang arch]) 482 AS_VAR_IF([GOARCH_FOR_BUILD], [], 483 [AS_CASE([${build_cpu}], 484 [x86_64], 485 [GOARCH_FOR_BUILD="amd64"], 486 [aarch64], 487 [GOARCH_FOR_BUILD="arm64"], 488 [powerpc], 489 [GOARCH_FOR_BUILD="ppc64"], 490 [AC_MSG_RESULT([unknown]); AC_MSG_ERROR([*** Unknown build cpu: ${build_cpu}. Set GOARCH_FOR_BUILD variable.])]) 491 AC_MSG_RESULT([${GOARCH_FOR_BUILD}])], 492 [AC_MSG_RESULT([user supplied ${GOARCH_FOR_BUILD}])])]) 493 494 AC_PROG_CC 495 496 AC_LANG_PUSH([C]) 497 498 # check for libc generally 499 AC_CHECK_LIB([c], [fork], 500 dnl libc is there 501 [:], 502 dnl libc is not there 503 [AC_MSG_ERROR([*** No libc found. Try to install glibc-devel or libc6-dev.])]) 504 505 # check for static libc 506 SAVE_LDFLAGS="$LDFLAGS" 507 LDFLAGS="-static $LDFLAGS" 508 AC_CHECK_LIB([c], [printf], 509 dnl static libc is there 510 [:], 511 dnl static libc is not there 512 [AC_MSG_ERROR([*** No static libc found. Try to install glibc-static or libc6-dev.])]) 513 LDFLAGS="$SAVE_LDFLAGS" 514 515 # check for setns syscall, drop it in 2020 (centos 6.7 support ends 516 # then). 517 518 AC_MSG_CHECKING([whether C library provides setns function]) 519 AC_LINK_IFELSE([AC_LANG_PROGRAM([[ 520 #define _GNU_SOURCE 521 #include <sched.h> 522 ]], [[(void)setns(0, 0);]])], 523 [AC_MSG_RESULT([yes])], 524 [AC_MSG_RESULT([no]) 525 AC_MSG_CHECKING([whether Linux kernel headers provide __NR_setns macro]) 526 AC_LINK_IFELSE([AC_LANG_PROGRAM([[ 527 #include <linux/unistd.h> 528 ]], [[(void)syscall(__NR_setns,0,0);]])], 529 [AC_MSG_RESULT([yes]) 530 RKT_DEFINES_FOR_ENTER=-DNO_SETNS_AVAILABLE], 531 [AC_MSG_RESULT([no]) 532 AC_MSG_ERROR([*** Neither setns function nor __NR_setns macro are available - either both glibc and kernel are too old or their development headers are not installed])])]) 533 534 AC_SUBST(RKT_DEFINES_FOR_ENTER) 535 536 # Check whether we can build TPM support code 537 AC_CHECK_HEADER(trousers/tss.h, [HAVE_TPM=yes], [HAVE_TPM=no], [AC_INCLUDES_DEFAULT]) 538 539 TPM_TAGS='' 540 AS_CASE([${RKT_ENABLE_TPM}], 541 [no], 542 dnl nothing to do 543 [:], 544 [auto], 545 [AS_VAR_IF([HAVE_TPM],[yes], 546 [TPM_TAGS=tpm 547 RKT_ENABLE_TPM=yes], 548 [RKT_ENABLE_TPM=no])], 549 [yes], 550 [AS_VAR_IF([HAVE_TPM],[no], 551 [AC_MSG_ERROR([*** TPM is enabled, but could not find required development files])]) 552 TPM_TAGS=tpm], 553 [AC_MSG_ERROR([*** Invalid value passed to --enable-tpm, should be either 'yes', 'no' or 'auto'])]) 554 AS_CASE([${RKT_ENABLE_TPM}], 555 [no], 556 [RKT_ADD_FEATURE '-TPM'], 557 [yes], 558 [RKT_ADD_FEATURE '+TPM']) 559 560 # Check whether we have libacl 561 AC_CHECK_HEADER(acl/libacl.h, [], [AC_MSG_ERROR([*** No development headers for libacl found. Try to install libacl-devel or libacl1-dev])], [AC_INCLUDES_DEFAULT]) 562 563 AC_LANG_POP([C]) 564 565 AC_PROG_INSTALL 566 RKT_REQ_PROG([FILE],[file],[file]) 567 RKT_REQ_PROG([GIT],[git],[git]) 568 RKT_REQ_PROG([GOBINARY],[go],[go]) 569 RKT_REQ_PROG([GOFMTBINARY],[gofmt],[gofmt]) 570 RKT_REQ_ABS_PROG([ABS_GO], [go]) 571 572 #### LINKER FLAGS 573 574 dnl Digits regexp class. Square brackets are used by m4 for quoting, 575 dnl so to get literal square brackets, m4 provides ugly @<:@ and @:>@ 576 dnl for [ and ]. 577 m4_define([DIGITS],[@<:@0-9@:>@]) 578 m4_define([CHARS],[@<:@a-z@:>@]) 579 580 dnl Detect go version. Go 1.4 support only "-X variable 'value'" 581 dnl format of assigning values to variables via linker flags. Go 1.5 582 dnl deprecates this format in favor of "-X 'variable=value'" 583 dnl format. Drop this ugliness when we drop support for Go 1.4. 584 dnl Successfully parse versions like "go1.5", "go1.5.3", "go1.6rc1" 585 GO_VERSION=`"${ABS_GO}" version | sed -e 's/^go version go\(DIGITS*\.DIGITS*CHARS*\(\.\)\{0,1\}DIGITS*\).*/\1/'` 586 GO_MAJOR=`echo "${GO_VERSION}" | grep -o '^DIGITS\+'` 587 GO_MINOR=`echo "${GO_VERSION}" | grep -o '^DIGITS\+\.DIGITS\+' | grep -o 'DIGITS\+$'` 588 GO_MAJOR_MINOR=`echo "${GO_MAJOR}.${GO_MINOR}"` 589 GO_MICRO=`echo "${GO_VERSION}" | grep -o '^DIGITS\+\.DIGITS\+\.DIGITS\+' | sed -e 's/^DIGITS*\.DIGITS*\.\(DIGITS*\).*/\1/'` 590 591 GO_BEST_MAJOR=1 592 GO_BEST_MINOR=5 593 GO_BEST_VERSION="${GO_BEST_MAJOR}.${GO_BEST_MINOR}" 594 AC_MSG_CHECKING([whether we have go ${GO_BEST_VERSION} or newer]) 595 AS_IF([test "${GO_MAJOR}" -gt "${GO_BEST_MAJOR}" || test "${GO_MAJOR}" -eq "${GO_BEST_MAJOR}" -a "${GO_MINOR}" -ge "${GO_BEST_MINOR}"], 596 [AC_MSG_RESULT([yes]) 597 RKT_XF() { 598 echo "-X '$1=$2'" 599 }], 600 [AC_MSG_RESULT([no]) 601 AC_MSG_CHECKING([whether we have go 1.4]) 602 AS_VAR_IF([GO_MAJOR_MINOR],[1.4], 603 [AC_MSG_RESULT([yes]) 604 RKT_XF() { 605 echo "-X $1 '$2'" 606 }], 607 [AC_MSG_ERROR([*** go is too old (${GO_VERSION})])])]) 608 609 AC_MSG_CHECKING([whether we have a go version without CVE-2015-8618]) 610 AS_IF([test "${GO_MAJOR}" -eq "1" -a "${GO_MINOR}" -eq "5" -a "${GO_MICRO}" -lt "3"], 611 [AC_MSG_RESULT([no]) 612 insecure_go_warning="go version is vulnerable to CVE-2015-8618 (${GO_VERSION})" 613 AS_VAR_IF([RKT_INSECURE_GO],[no], 614 [AC_MSG_ERROR([*** ${insecure_go_warning}])], 615 [AC_MSG_WARN([* ${insecure_go_warning}])])], 616 [AC_MSG_RESULT([yes])]) 617 618 RKT_STAGE1_DEFAULT_NAME_LDFLAGS=`RKT_XF main.buildDefaultStage1Name "${RKT_STAGE1_DEFAULT_NAME}"` 619 RKT_STAGE1_DEFAULT_VERSION_LDFLAGS=`RKT_XF main.buildDefaultStage1Version "${RKT_STAGE1_DEFAULT_VERSION}"` 620 RKT_STAGE1_DEFAULT_LOCATION_LDFLAGS=`RKT_XF main.buildDefaultStage1ImageLoc "${RKT_STAGE1_DEFAULT_LOCATION}"` 621 RKT_STAGE1_DEFAULT_IMAGE_FILENAME_LDFLAGS=`RKT_XF main.buildDefaultStage1ImageInRktDir "${RKT_STAGE1_DEFAULT_IMAGE_FILENAME_IN_RKT_DIRECTORY}"` 622 RKT_STAGE1_DEFAULT_IMAGES_DIRECTORY_LDFLAGS=`RKT_XF main.buildDefaultStage1ImagesDir "${RKT_STAGE1_DEFAULT_IMAGES_DIR}"` 623 RKT_VERSION_LDFLAGS=`RKT_XF github.com/coreos/rkt/version.Version "${RKT_VERSION}"` 624 RKT_FEATURES_LDFLAGS=`RKT_XF main.rktFeatures "${RKT_FEATURES}"` 625 626 #### SUBSTITUTIONS 627 628 AC_SUBST(RKT_VERSION) 629 AC_SUBST(RKT_STAGE1_FLAVORS_VERSION_OVERRIDE) 630 631 AC_SUBST(RKT_STAGE1_DEFAULT_NAME) 632 AC_SUBST(RKT_STAGE1_DEFAULT_VERSION) 633 634 AC_SUBST(RKT_STAGE1_ALL_FLAVORS) 635 AC_SUBST(RKT_STAGE1_FLAVORS) 636 AC_SUBST(RKT_STAGE1_DEFAULT_FLAVOR) 637 638 AC_SUBST(RKT_STAGE1_DEFAULT_LOCATION) 639 AC_SUBST(RKT_STAGE1_DEFAULT_IMAGES_DIR) 640 AC_SUBST(RKT_STAGE1_DEFAULT_IMAGE_FILENAME_IN_RKT_DIRECTORY) 641 642 AC_SUBST(RKT_STAGE1_SYSTEMD_SRC) 643 AC_SUBST(RKT_STAGE1_SYSTEMD_VER) 644 645 AC_SUBST(RKT_LOCAL_COREOS_PXE_IMAGE_PATH) 646 AC_SUBST(RKT_LOCAL_COREOS_PXE_IMAGE_SYSTEMD_VER) 647 648 AC_SUBST(RKT_RUN_FUNCTIONAL_TESTS) 649 650 AC_SUBST(GOARCH_FOR_BUILD) 651 652 AC_SUBST(RKT_STAGE1_DEFAULT_NAME_LDFLAGS) 653 AC_SUBST(RKT_STAGE1_DEFAULT_VERSION_LDFLAGS) 654 AC_SUBST(RKT_STAGE1_DEFAULT_LOCATION_LDFLAGS) 655 AC_SUBST(RKT_STAGE1_DEFAULT_IMAGE_FILENAME_LDFLAGS) 656 AC_SUBST(RKT_STAGE1_DEFAULT_IMAGES_DIRECTORY_LDFLAGS) 657 AC_SUBST(RKT_VERSION_LDFLAGS) 658 AC_SUBST(RKT_FEATURES_LDFLAGS) 659 660 AC_SUBST(TPM_TAGS) 661 662 #### FILE GENERATION AND REPORTING 663 664 AC_CONFIG_FILES([makelib/variables.mk]) 665 AC_OUTPUT 666 667 AC_MSG_RESULT([ 668 AC_PACKAGE_NAME ${RKT_VERSION} 669 670 stage1 setup 671 672 type: '${RKT_STAGE1_SETUP_KIND}' 673 default stage1 location: '${RKT_STAGE1_DEFAULT_LOCATION}' 674 default stage1 images directory: '${RKT_STAGE1_DEFAULT_IMAGES_DIR}']) 675 676 AS_CASE([${RKT_STAGE1_SETUP_KIND}], 677 [flavor], 678 [AC_MSG_RESULT([ 679 built stage1 flavors: '${RKT_STAGE1_FLAVORS}' 680 default stage1 flavor: '${RKT_STAGE1_DEFAULT_FLAVOR}' 681 implied default stage1 name: '${RKT_STAGE1_DEFAULT_NAME}']) 682 AS_VAR_IF([RKT_STAGE1_FLAVORS_VERSION_OVERRIDE], [], 683 [AC_MSG_RESULT([dnl 684 implied default stage1 version: '${RKT_STAGE1_DEFAULT_VERSION}'])], 685 [AC_MSG_RESULT([dnl 686 overridden default stage1 version: '${RKT_STAGE1_DEFAULT_VERSION}'])])], 687 [detailed], 688 [AC_MSG_RESULT([ 689 default stage1 name: '${RKT_STAGE1_DEFAULT_NAME}' 690 default stage1 version: '${RKT_STAGE1_DEFAULT_VERSION}'])], 691 [AC_MSG_ERROR([*** Unknown setup kind, should not happen])]) 692 693 RKT_IF_HAS_FLAVOR([${RKT_STAGE1_FLAVORS}], [coreos,kvm], 694 [AC_MSG_RESULT([ 695 coreos/kvm flavor specific build parameters 696 697 local CoreOS PXE image path: '${RKT_LOCAL_COREOS_PXE_IMAGE_PATH}' 698 local CoreOS PXE image systemd version: '${RKT_LOCAL_COREOS_PXE_IMAGE_SYSTEMD_VER}'])]) 699 700 RKT_IF_HAS_FLAVOR([${RKT_STAGE1_FLAVORS}], [src], 701 [AC_MSG_RESULT([ 702 src flavor specific build parameters 703 704 systemd git repo: '${RKT_STAGE1_SYSTEMD_SRC}' 705 systemd version: '${RKT_STAGE1_SYSTEMD_VER}'])]) 706 707 AC_MSG_RESULT([ 708 other build parameters 709 710 functional tests enabled: '${RKT_RUN_FUNCTIONAL_TESTS}' 711 features: '${RKT_FEATURES}' 712 go version: '${GO_VERSION}'])