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}'])