github.com/stackdocker/rkt@v0.10.1-0.20151109095037-1aa827478248/configure.ac (about)

     1  AC_PREREQ([2.63])
     2  AC_INIT([rkt], [0.10.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 if version ends with +git, append a short git-hash.
    25  AS_IF([test `expr match 'AC_PACKAGE_VERSION' '.*+git$'` -gt 0],
    26        dnl version has +git suffix, ignore errors (not a git repo)
    27        [RKT_VERSION="AC_PACKAGE_VERSION`git rev-parse --short HEAD 2>/dev/null``git diff-index --quiet HEAD 2>/dev/null || echo -dirty`"],
    28        dnl version has no +git suffix
    29        [RKT_VERSION="AC_PACKAGE_VERSION"])
    30  
    31  AC_CANONICAL_HOST
    32  AC_CANONICAL_BUILD
    33  
    34  #### FLAGS
    35  
    36  ## STAGE1 - detailed setup
    37  
    38  AC_ARG_WITH(stage1-default-name,
    39              [AS_HELP_STRING([--with-stage1-default-name],
    40                              [default name of stage1, default: 'coreos.com/rkt/stage1-${flavor}'])],
    41              [RKT_STAGE1_DEFAULT_NAME="${withval}"],
    42              [RKT_STAGE1_DEFAULT_NAME=auto])
    43  
    44  AC_ARG_WITH(stage1-default-version,
    45              [AS_HELP_STRING([--with-stage1-default-version],
    46                              [default version of stage1, default: same as rkt version])],
    47              [RKT_STAGE1_DEFAULT_VERSION="${withval}"],
    48              [RKT_STAGE1_DEFAULT_VERSION=auto])
    49  
    50  ## STAGE1 - flavor setup
    51  
    52  AC_ARG_WITH([stage1-default-flavor],
    53              [AS_HELP_STRING([--with-stage1-default-flavor],
    54                              [stage1 flavor that will be loaded by default; has to be listed in --with-stage1-flavors, default: first from the stage1 flavors list])],
    55              [RKT_STAGE1_DEFAULT_FLAVOR="${withval}"],
    56              [RKT_STAGE1_DEFAULT_FLAVOR=auto])
    57  
    58  ## STAGE1 - common setup
    59  
    60  AC_ARG_WITH([stage1-flavors],
    61              [AS_HELP_STRING([--with-stage1-flavors],
    62                              [comma-separated list of stage1 flavors; choose from 'src', 'coreos', 'host', 'kvm'; default: 'coreos,kvm'])],
    63              [RKT_STAGE1_FLAVORS="${withval}"],
    64              [RKT_STAGE1_FLAVORS=auto])
    65  
    66  AC_ARG_WITH(stage1-default-location,
    67              [AS_HELP_STRING([--with-stage1-default-location],
    68                              [default location of stage1, default: none])],
    69              [RKT_STAGE1_DEFAULT_LOCATION="${withval}"],
    70              [RKT_STAGE1_DEFAULT_LOCATION=auto])
    71  
    72  # STAGE1 - systemd src and version for src flavor
    73  
    74  AC_ARG_WITH([stage1-systemd-src],
    75              [AS_HELP_STRING([--with-stage1-systemd-src],
    76                              [address to git repository of systemd, used in 'src' stage1 flavor (default: 'https://github.com/systemd/systemd.git')])],
    77              [RKT_STAGE1_SYSTEMD_SRC="${withval}"],
    78              [RKT_STAGE1_SYSTEMD_SRC='auto'])
    79  
    80  AC_ARG_WITH([stage1-systemd-version],
    81              [AS_HELP_STRING([--with-stage1-systemd-version],
    82                              [systemd version to build, used in 'src' stage1 flavor (default: 'v222', should be in format 'v<number>', like v222)])],
    83              [RKT_STAGE1_SYSTEMD_VER="${withval}"],
    84              [RKT_STAGE1_SYSTEMD_VER='auto'])
    85  
    86  ## STAGE1 - path to coreos pxe and its systemd version for kvm and coreos flavors
    87  
    88  AC_ARG_WITH([coreos-local-pxe-image-path],
    89              [AS_HELP_STRING([--with-coreos-local-pxe-image-path],
    90                              [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!)])],
    91              [RKT_LOCAL_COREOS_PXE_IMAGE_PATH="${withval}"],
    92              [RKT_LOCAL_COREOS_PXE_IMAGE_PATH=""])
    93  
    94  AC_ARG_WITH([coreos-local-pxe-image-systemd-version],
    95              [AS_HELP_STRING([--with-coreos-local-pxe-image-systemd-version],
    96                              [version of systemd in local CoreOS PXE image, used in 'coreos' and 'kvm' stage1 flavors (should be in format 'v<number>', like v222)])],
    97              [RKT_LOCAL_COREOS_PXE_IMAGE_SYSTEMD_VER="${withval}"],
    98              [RKT_LOCAL_COREOS_PXE_IMAGE_SYSTEMD_VER=])
    99  
   100  ## Functional tests
   101  
   102  AC_ARG_ENABLE([functional-tests],
   103                [AS_HELP_STRING([--enable-functional-tests],
   104                                [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)])],
   105                [RKT_RUN_FUNCTIONAL_TESTS="${enableval}"],
   106                [RKT_RUN_FUNCTIONAL_TESTS="no"])
   107  
   108  #### CHECKING
   109  
   110  ## STAGE1 - initial verification and setup
   111  
   112  dnl There are two kinds of setup - flavor and detailed. A flavor setup
   113  dnl is when we specify a default flavor. A detailed setup is when we
   114  dnl specify a default name and version instead.
   115  AS_IF([test "x${RKT_STAGE1_DEFAULT_FLAVOR}" != 'xauto' -a '(' "x${RKT_STAGE1_DEFAULT_NAME}" != 'xauto' -o "x${RKT_STAGE1_DEFAULT_VERSION}" != 'xauto' ')'],
   116                dnl Passed both --with-stage1-default-flavor and
   117                dnl --with-stage1-default-{name,version} - bail out,
   118                dnl they are conflicting.
   119                [AC_MSG_ERROR([*** --with-stage1-default-flavor and --with-stage1-default-{name,version} flags are conflicting; use either default flavor or specific default name and version])],
   120        [test "x${RKT_STAGE1_DEFAULT_FLAVOR}" = 'xauto' -a "x${RKT_STAGE1_DEFAULT_NAME}" = 'xauto' -a "x${RKT_STAGE1_DEFAULT_VERSION}" = 'xauto'],
   121                dnl Passed neither --with-stage1-default-flavor nor
   122                dnl --with-stage1-default-{name,version} - default to
   123                dnl flavor setup.
   124                [RKT_STAGE1_SETUP_KIND=flavor],
   125        [test "x${RKT_STAGE1_DEFAULT_FLAVOR}" != 'xauto'],
   126                dnl Passed --with-stage1-default-flavor flag - default
   127                dnl to flavor setup.
   128                [RKT_STAGE1_SETUP_KIND=flavor],
   129        [test "x${RKT_STAGE1_DEFAULT_NAME}" != 'xauto' -o "x${RKT_STAGE1_DEFAULT_VERSION}" != 'xauto'],
   130                dnl Passed one or both from
   131                dnl --with-stage1-default-{name,version} - default to
   132                dnl detailed setup.
   133                [RKT_STAGE1_SETUP_KIND=detailed])
   134  
   135  AS_CASE([${RKT_STAGE1_SETUP_KIND}],
   136          [detailed],
   137                    dnl Detailed setup - do not build any flavor unless
   138                    dnl explicitly asked for it and make sure that both
   139                    dnl name and version were passed.
   140                    [AS_VAR_IF([RKT_STAGE1_FLAVORS],[auto],
   141                               [RKT_STAGE1_FLAVORS=''])
   142                     RKT_STAGE1_DEFAULT_FLAVOR=''
   143                     AS_IF([test "x${RKT_STAGE1_DEFAULT_NAME}" = 'xauto' -o "x${RKT_STAGE1_DEFAULT_VERSION}" = 'xauto'],
   144                           [AC_MSG_ERROR([*** Both --with-stage1-default-name and --with-stage1-default-version must be specified])])],
   145          [flavor],
   146                    dnl The flavor setup - build coreos and kvm flavors
   147                    dnl and set the first flavor in the list as a
   148                    dnl default unless specified.
   149                    [AS_VAR_IF([RKT_STAGE1_FLAVORS],[auto],
   150                               [RKT_STAGE1_FLAVORS='coreos,kvm'])
   151                     AS_VAR_IF([RKT_STAGE1_DEFAULT_FLAVOR],[auto],
   152                               [RKT_STAGE1_DEFAULT_FLAVOR=`AS_ECHO([${RKT_STAGE1_FLAVORS}]) | cut -d, -f1`])
   153                     RKT_STAGE1_DEFAULT_NAME=''
   154                     RKT_STAGE1_DEFAULT_VERSION=''],
   155          [AC_MSG_ERROR([*** Unknown setup kind, should not happen])])
   156  
   157  ## Built stage1 flavors verification
   158  
   159  dnl a list of all flavors
   160  RKT_STAGE1_ALL_FLAVORS=coreos,kvm,host,src
   161  
   162  dnl RKT_ITERATE_FLAVORS iterates all comma-separated flavors stored in
   163  dnl $1 using an iterator variable $2 and executes body $3.
   164  AC_DEFUN([RKT_ITERATE_FLAVORS],
   165           [for $2 in `AS_ECHO(["$1"]) | tr ',' ' '`
   166            do
   167                :
   168                $3
   169            done])
   170  
   171  dnl RKT_IS_VALID_FLAVOR checks if $1 is a valid flavor, $2 is an
   172  dnl additional string to an error message.
   173  AC_DEFUN([RKT_IS_VALID_FLAVOR],
   174           [AS_CASE([$1],
   175                    dnl Correct flavor, nothing to do.
   176                    [coreos|kvm|host|src],
   177                            [],
   178                    dnl Bogus flavor, bail out.
   179                    [AC_MSG_ERROR([*** unknown stage1 flavor "$1" $2])])])
   180  
   181  dnl RKT_IF_HAS_FLAVOR checks if the comma-separated list of flavors in
   182  dnl $1 contains any flavor in the comma-separated list of flavors in
   183  dnl $2; if yes, executes $3, otherwise - $4.
   184  AC_DEFUN([RKT_IF_HAS_FLAVOR],
   185           [flavor_found=0
   186            RKT_ITERATE_FLAVORS([$2],[flavor],
   187                                [AS_IF([AS_ECHO([",$1,"]) | grep --silent ",${flavor},"],
   188                                       [flavor_found=1
   189                                        break])])
   190            AS_IF([test ${flavor_found} -eq 1],[:;$3],[:;$4])])
   191  
   192  dnl Validate passed flavors to build - make sure that valid flavors
   193  dnl were passed and each flavor was specified only once. Also, do some
   194  dnl basic program checks for each requested flavor.
   195  RKT_SPECIFIED_FLAVORS=''
   196  RKT_ITERATE_FLAVORS([${RKT_STAGE1_FLAVORS}],[flavor],
   197                      [RKT_IS_VALID_FLAVOR([${flavor}],[in --with-stage1-flavors])
   198                       RKT_IF_HAS_FLAVOR([${RKT_SPECIFIED_FLAVORS}],[${flavor}],
   199                                         [AC_MSG_ERROR([*** "${flavor}" flavor specified twice in --with-stage1-flavors])])
   200                       RKT_SPECIFIED_FLAVORS="${RKT_SPECIFIED_FLAVORS},${flavor}"
   201                       AS_CASE([${flavor}],
   202                               [src],
   203                                       [RKT_REQ_PROG([INTLTOOLIZE],[intltoolize],[intltoolize])
   204                                        RKT_REQ_PROG([LIBTOOLIZE],[libtoolize],[libtoolize])],
   205                               [coreos],
   206                                       [RKT_REQ_PROG([WGET],[wget],[wget])
   207                                        RKT_REQ_PROG([MKTEMP],[mktemp],[mktemp])
   208                                        RKT_REQ_PROG([MD5SUM],[md5sum],[md5sum])
   209                                        RKT_REQ_PROG([CPIO],[cpio],[cpio])
   210                                        RKT_REQ_PROG([GZIP],[gzip],[gzip])
   211                                        RKT_REQ_PROG([UNSQUASHFS],[unsquashfs],[unsquashfs])
   212                                        RKT_REQ_PROG([SORT],[sort],[sort])],
   213                               [kvm],
   214                                       [AC_MSG_WARN([* kvm is an experimental stage1 implementation, some features are missing])],
   215                               [host],
   216                                       [],
   217                               [AC_MSG_ERROR([*** Unhandled flavor "${flavor}", should not happen])])])
   218  
   219  dnl Validate passed default flavor, it should be one of the built
   220  dnl stage1 flavors
   221  
   222  AS_VAR_IF([RKT_STAGE1_SETUP_KIND],['flavor'],
   223            [RKT_IS_VALID_FLAVOR([${RKT_STAGE1_DEFAULT_FLAVOR}],[in --with-stage1-default-flavor])
   224             RKT_IF_HAS_FLAVOR([${RKT_STAGE1_FLAVORS}],[${RKT_STAGE1_DEFAULT_FLAVOR}],
   225                               dnl valid default flavor, alright
   226                               [],
   227                               dnl not a part of built flavors, bail out
   228                               [AC_MSG_ERROR([*** --with-stage1-default-flavor should use one of flavors from --with-stage1-flavors (${RKT_STAGE1_FLAVORS})])])])
   229  
   230  ## Options specific for src flavor
   231  
   232  # Process systemd src repo and version for src flavor.
   233  RKT_IF_HAS_FLAVOR([${RKT_STAGE1_FLAVORS}],[src],
   234                    dnl we are building src flavor
   235                    [AS_VAR_IF([RKT_STAGE1_SYSTEMD_SRC], [auto],
   236                               dnl systemd source not specified, use default
   237                               [RKT_STAGE1_SYSTEMD_SRC='https://github.com/systemd/systemd.git'],
   238                               dnl systemd source specified, use it
   239                               [:])
   240                     AS_VAR_IF([RKT_STAGE1_SYSTEMD_VER], [auto],
   241                               dnl systemd version not specified, use default
   242                               [RKT_STAGE1_SYSTEMD_VER='v222'],
   243                               dnl systemd version specified, use it
   244                               [:])],
   245                    dnl we are not building src flavor
   246                    [AS_VAR_IF([RKT_STAGE1_SYSTEMD_SRC], [auto],
   247                               dnl systemd source not specified, alright, zero the value just in case
   248                               [RKT_STAGE1_SYSTEMD_SRC=''],
   249                               dnl systemd source specified, warn about it being ignored
   250                               [AC_MSG_WARN([* --with-stage1-systemd-src is ignored, src flavor is not built])])
   251                     AS_VAR_IF([RKT_STAGE1_SYSTEMD_VER], [auto],
   252                               dnl systemd version not specified, alright, zero the value just in case
   253                               [RKT_STAGE1_SYSTEMD_VER=''],
   254                               dnl systemd version specified, warn about it being ignored
   255                               [AC_MSG_WARN([* --with-stage1-systemd-version is ignored, src flavor is not built])])])
   256  
   257  dnl Warn if version is HEAD, just use master.
   258  AS_VAR_IF([RKT_STAGE1_SYSTEMD_VER], [HEAD],
   259            [AC_MSG_WARN([* 'HEAD' is not a systemd version, setting it to 'master' instead])
   260             RKT_STAGE1_SYSTEMD_VER='master'])
   261  
   262  ## Options specific to coreos/kvm flavors
   263  
   264  # Process local CoreOS PXE image path and its systemd version for
   265  # coreos/kvm flavors.
   266  RKT_IF_HAS_FLAVOR([${RKT_STAGE1_FLAVORS}],[coreos,kvm],
   267                    dnl for kvm and coreos check if both pxe image path and
   268                    dnl systemd version are specified or neither
   269                    [AS_VAR_IF([RKT_LOCAL_COREOS_PXE_IMAGE_PATH], [],
   270                               dnl no local coreos pxe image path specified
   271                               [AS_VAR_IF([RKT_LOCAL_COREOS_PXE_IMAGE_SYSTEMD_VER],[],
   272                                          dnl no version specified, alright, keep quiet
   273                                          [:],
   274                                          dnl version specified, warn about it being ignored
   275                                          [AC_MSG_WARN([* --with-coreos-local-pxe-image-systemd-version is ignored, because --with-coreos-local-pxe-image-path was not specified])
   276                                           RKT_LOCAL_COREOS_PXE_IMAGE_SYSTEMD_VER=''])
   277                                dnl gpg is required for signature
   278                                dnl verification
   279                                RKT_REQ_PROG([GPG],[gpg],[gpg])],
   280                               dnl local coreos pxe image path specified
   281                               [AS_VAR_IF([RKT_LOCAL_COREOS_PXE_IMAGE_SYSTEMD_VER],[],
   282                                          dnl no version specified, bail out, version is required
   283                                          [AC_MSG_ERROR([*** No systemd version for local CoreOS PXE image specified, use --with-coreos-local-pxe-image-systemd-version])],
   284                                          dnl version specified, alright, keep quiet
   285                                          [:])])],
   286                    dnl for other flavors just warn if either is specified
   287                    [AS_VAR_IF([RKT_LOCAL_COREOS_PXE_IMAGE_PATH], [],
   288                               dnl empty value, alright
   289                               [:],
   290                               dnl not empty, warn about it, zero it just in case
   291                               [AC_MSG_WARN([* --with-coreos-local-pxe-image-path is ignored by ${RKT_STAGE1_DEFAULT_FLAVOR} stage1 flavor])
   292                                RKT_LOCAL_COREOS_PXE_IMAGE_PATH=''])
   293                     AS_VAR_IF([RKT_LOCAL_COREOS_PXE_IMAGE_SYSTEMD_VER], [],
   294                               dnl empty value, alright
   295                               [:],
   296                               dnl not empty, warn about it, zero it just in case
   297                               [AC_MSG_WARN([* --with-coreos-local-pxe-image-systemd-version is ignored by ${RKT_STAGE1_DEFAULT_FLAVOR} stage1 flavor])
   298                                RKT_LOCAL_COREOS_PXE_IMAGE_SYSTEMD_VER=''])])
   299  
   300  ## Setup default name, version and location
   301  
   302  AS_CASE([${RKT_STAGE1_SETUP_KIND}],
   303          [detailed],
   304                    dnl detailed setup - not much to do, default name
   305                    dnl and version are already specified, warn if
   306                    dnl default location was not specified
   307                    [AS_VAR_IF([RKT_STAGE1_DEFAULT_LOCATION],[auto],
   308                               [RKT_STAGE1_DEFAULT_LOCATION=''])
   309                     AC_MSG_WARN([* It may be necessary to pass --stage1-image flag to run rkt])],
   310          [flavor],
   311                    dnl flavor setup - set the default name and version,
   312                    dnl set the location if not specified
   313                    [AS_CASE([${RKT_STAGE1_DEFAULT_FLAVOR}],
   314                                     dnl for src flavor, we also append systemd version to stage1 name
   315                                     [src],
   316                                             [RKT_STAGE1_DEFAULT_NAME="coreos.com/rkt/stage1-${RKT_STAGE1_DEFAULT_FLAVOR}-${RKT_STAGE1_SYSTEMD_VER}"],
   317                                     dnl other flavors get only flavor name
   318                                     [RKT_STAGE1_DEFAULT_NAME="coreos.com/rkt/stage1-${RKT_STAGE1_DEFAULT_FLAVOR}"])
   319                     RKT_STAGE1_DEFAULT_VERSION="${RKT_VERSION}"
   320                     AS_VAR_IF([RKT_STAGE1_DEFAULT_LOCATION],[auto],
   321                               [RKT_STAGE1_DEFAULT_LOCATION="path/stage1-${RKT_STAGE1_DEFAULT_FLAVOR}.aci"])],
   322          [AC_MSG_ERROR([*** Unknown setup kind, should not happen])])
   323  
   324  ## Functional tests
   325  
   326  dnl Check for gpg - required by functional tests. Note that this does
   327  dnl not bail out here if it is not found.
   328  RKT_CHECK_PROG([GPG],[gpg],[gpg])
   329  
   330  AS_IF([test "x${RKT_RUN_FUNCTIONAL_TESTS}" = 'xyes' -o "x${RKT_RUN_FUNCTIONAL_TESTS}" = 'xauto'],
   331        [AC_MSG_CHECKING([whether functional tests can be run])
   332         rkt_functional_tests_msg=''
   333         AS_CASE([${host}],
   334                 [*-*-linux*],
   335                         dnl we are on linux, checks can continue
   336                         [],
   337                 dnl non-linux host
   338                 [rkt_functional_tests_msg="functional tests are supported only under linux"])
   339        AS_VAR_IF([rkt_functional_tests_msg],[],
   340                  dnl we are on linux host; check if we have default
   341                  dnl flavor set
   342                  [AS_VAR_IF([RKT_STAGE1_SETUP_KIND],[flavor],
   343                             dnl we have flavor setup, checks can
   344                             dnl continue
   345                             [:],
   346                             [rkt_functional_tests_msg='Currently functional tests cannot be run on 3rd party stage1 images'])])
   347        AS_VAR_IF([rkt_functional_tests_msg],[],
   348                  dnl we have a default flavor, check some special
   349                  dnl prerequisites for host flavor
   350                  [AS_VAR_IF([RKT_STAGE1_DEFAULT_FLAVOR], [host],
   351                             dnl checking if we are running systemd as init, -.mount is a mount unit for /.
   352                             [AS_IF([systemctl 2>/dev/null | grep --silent -e '-\.mount'],
   353                                    dnl systemd runs as init
   354                                    [sdv=`systemctl --version | head -1 | sed -e 's/^systemd \(@<:@0-9@:>@*\)$/\1/'`
   355                                     AS_IF([test ${sdv} -lt 220],
   356                                           [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})"])],
   357                                    dnl systemd is not an init
   358                                    [rkt_functional_tests_msg="Cannot run functional tests with ${RKT_STAGE1_DEFAULT_FLAVOR} stage1 flavor - no systemd on host"])])])
   359        dnl gpg is required for functional tests
   360        AS_VAR_IF([GPG],[gpg],
   361                  dnl gpg found, alright
   362                  [:],
   363                  dnl gpg not found, running functional tests is impossible
   364                  [rkt_functional_tests_msg="Cannot run functional tests - no gpg found"])
   365        AS_VAR_IF([rkt_functional_tests_msg], [],
   366                   dnl no message, tests can be run
   367                   [RKT_RUN_FUNCTIONAL_TESTS=yes
   368                    AC_MSG_RESULT([yes])],
   369                   dnl message available, tests will not be run
   370                   [AC_MSG_RESULT([no])
   371                    AS_VAR_IF([RKT_RUN_FUNCTIONAL_TESTS], [auto],
   372                              dnl functional tests are optional, so only print an info
   373                              [RKT_RUN_FUNCTIONAL_TESTS=no
   374                               AC_MSG_NOTICE([${rkt_functional_tests_msg}])],
   375                              dnl functional tests are required, so bail out
   376                              [AC_MSG_ERROR([*** ${rkt_functional_tests_msg}])])])])
   377  
   378  
   379  ## Miscellaneous stuff
   380  
   381  # cross_compiling is a standard autoconf variable.  See the autoconf manual for
   382  # details.
   383  AS_VAR_IF([cross_compiling], [no],
   384            dnl no crosscompilation
   385            [GOARCH_FOR_BUILD=${GOARCH_FOR_BUILD:-${GOARCH}}],
   386            dnl we do crosscompilation
   387            [AC_MSG_CHECKING([build golang arch])
   388             AS_VAR_IF([GOARCH_FOR_BUILD], [],
   389                       [AS_CASE([${build_cpu}],
   390                                [x86_64],
   391                                        [GOARCH_FOR_BUILD="amd64"],
   392                                [aarch64],
   393                                        [GOARCH_FOR_BUILD="arm64"],
   394                                [powerpc],
   395                                        [GOARCH_FOR_BUILD="ppc64"],
   396                                [AC_MSG_RESULT([unknown]); AC_MSG_ERROR([*** Unknown build cpu: ${build_cpu}.  Set GOARCH_FOR_BUILD variable.])])
   397                        AC_MSG_RESULT([${GOARCH_FOR_BUILD}])],
   398                       [AC_MSG_RESULT([user supplied ${GOARCH_FOR_BUILD}])])])
   399  
   400  AC_PROG_CC
   401  
   402  AC_LANG_PUSH([C])
   403  
   404  # check for libc generally
   405  AC_CHECK_LIB([c], [fork],
   406               dnl libc is there
   407               [:],
   408               dnl libc is not there
   409               [AC_MSG_ERROR([*** No libc found. Try to install glibc-devel or libc6-dev.])])
   410  
   411  # check for static libc
   412  SAVE_LDFLAGS="$LDFLAGS"
   413  LDFLAGS="-static $LDFLAGS"
   414  AC_CHECK_LIB([c], [printf],
   415               dnl static libc is there
   416               [:],
   417               dnl static libc is not there
   418               [AC_MSG_ERROR([*** No static libc found. Try to install glibc-static or libc6-dev.])])
   419  LDFLAGS="$SAVE_LDFLAGS"
   420  
   421  # check for setns syscall, drop it in 2020 (centos 6.7 support ends
   422  # then).
   423  
   424  AC_MSG_CHECKING([whether C library provides setns function])
   425  AC_LINK_IFELSE([AC_LANG_PROGRAM([[
   426                                    #define _GNU_SOURCE
   427                                    #include <sched.h>
   428                                  ]], [[(void)setns(0, 0);]])],
   429                 [AC_MSG_RESULT([yes])],
   430                 [AC_MSG_RESULT([no])
   431                  AC_MSG_CHECKING([whether Linux kernel headers provide __NR_setns macro])
   432                  AC_LINK_IFELSE([AC_LANG_PROGRAM([[
   433                                                    #include <linux/unistd.h>
   434                                                  ]], [[(void)syscall(__NR_setns,0,0);]])],
   435                                 [AC_MSG_RESULT([yes])
   436                                  RKT_DEFINES_FOR_ENTER=-DNO_SETNS_AVAILABLE],
   437                                 [AC_MSG_RESULT([no])
   438                                  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])])])
   439  
   440  AC_SUBST(RKT_DEFINES_FOR_ENTER)
   441  
   442  AC_LANG_POP([C])
   443  
   444  AC_PROG_INSTALL
   445  RKT_REQ_PROG([FILE],[file],[file])
   446  RKT_REQ_PROG([GIT],[git],[git])
   447  RKT_REQ_PROG([GOBINARY],[go],[go])
   448  RKT_REQ_PROG([GOFMTBINARY],[gofmt],[gofmt])
   449  RKT_REQ_ABS_PROG([ABS_GO], [go])
   450  
   451  #### LINKER FLAGS
   452  
   453  dnl Detect go version. Go 1.4 and earlier support only "-X variable
   454  dnl 'value'" format of assigning values to variables via linker
   455  dnl flags. Go 1.5 deprecates this format in favor of "-X
   456  dnl 'variable=value'" format. Drop this ugliness when we drop support
   457  dnl for Go older than 1.5.
   458  GO_VERSION=`$ABS_GO version | grep -o 'go@<:@@<:@:digit:@:>@@:>@\+\.@<:@@<:@:digit:@:>@@:>@\+' | grep -o '@<:@@<:@:digit:@:>@@:>@\+\.@<:@@<:@:digit:@:>@@:>@\+'`
   459  GO_MAJOR=`echo $GO_VERSION | grep -o '^@<:@@<:@:digit:@:>@@:>@\+'`
   460  GO_MINOR=`echo $GO_VERSION | grep -o '@<:@@<:@:digit:@:>@@:>@\+$'`
   461  
   462  AS_IF([test $GO_MAJOR -gt 1 -o $GO_MINOR -gt 4],
   463        dnl We have Go 1.5 or greater.
   464        [RKT_XF() {
   465             echo "-X '$1=$2'"
   466         }],
   467        dnl We have Go 1.4 or lesser.
   468        [RKT_XF() {
   469             echo "-X $1 '$2'"
   470         }])
   471  
   472  RKT_STAGE1_DEFAULT_NAME_LDFLAGS=`RKT_XF main.defaultStage1Name "${RKT_STAGE1_DEFAULT_NAME}"`
   473  RKT_STAGE1_DEFAULT_VERSION_LDFLAGS=`RKT_XF main.defaultStage1Version "${RKT_STAGE1_DEFAULT_VERSION}"`
   474  RKT_STAGE1_DEFAULT_LOCATION_LDFLAGS=`RKT_XF main.defaultStage1Image "${RKT_STAGE1_DEFAULT_LOCATION}"`
   475  RKT_VERSION_LDFLAGS=`RKT_XF github.com/coreos/rkt/version.Version "${RKT_VERSION}"`
   476  
   477  #### SUBSTITUTIONS
   478  
   479  AC_SUBST(RKT_VERSION)
   480  
   481  AC_SUBST(RKT_STAGE1_DEFAULT_NAME)
   482  AC_SUBST(RKT_STAGE1_DEFAULT_VERSION)
   483  
   484  AC_SUBST(RKT_STAGE1_ALL_FLAVORS)
   485  AC_SUBST(RKT_STAGE1_FLAVORS)
   486  AC_SUBST(RKT_STAGE1_DEFAULT_FLAVOR)
   487  
   488  AC_SUBST(RKT_STAGE1_DEFAULT_LOCATION)
   489  
   490  AC_SUBST(RKT_STAGE1_SYSTEMD_SRC)
   491  AC_SUBST(RKT_STAGE1_SYSTEMD_VER)
   492  
   493  AC_SUBST(RKT_LOCAL_COREOS_PXE_IMAGE_PATH)
   494  AC_SUBST(RKT_LOCAL_COREOS_PXE_IMAGE_SYSTEMD_VER)
   495  
   496  AC_SUBST(RKT_RUN_FUNCTIONAL_TESTS)
   497  
   498  AC_SUBST(GOARCH_FOR_BUILD)
   499  
   500  AC_SUBST(RKT_STAGE1_DEFAULT_NAME_LDFLAGS)
   501  AC_SUBST(RKT_STAGE1_DEFAULT_VERSION_LDFLAGS)
   502  AC_SUBST(RKT_STAGE1_DEFAULT_LOCATION_LDFLAGS)
   503  AC_SUBST(RKT_VERSION_LDFLAGS)
   504  
   505  #### FILE GENERATION AND REPORTING
   506  
   507  AC_CONFIG_FILES([makelib/variables.mk])
   508  AC_OUTPUT
   509  
   510  AC_MSG_RESULT([
   511          AC_PACKAGE_NAME ${RKT_VERSION}
   512  
   513          stage1 setup
   514  
   515          type:                                   '${RKT_STAGE1_SETUP_KIND}'
   516          default stage1 location:                '${RKT_STAGE1_DEFAULT_LOCATION}'])
   517  
   518  AS_CASE([${RKT_STAGE1_SETUP_KIND}],
   519          [flavor],
   520                  [AC_MSG_RESULT([
   521          built stage1 flavors:                   '${RKT_STAGE1_FLAVORS}'
   522          default stage1 flavor:                  '${RKT_STAGE1_DEFAULT_FLAVOR}'
   523          implied default stage1 name:            '${RKT_STAGE1_DEFAULT_NAME}'
   524          implied default stage1 version:         '${RKT_STAGE1_DEFAULT_VERSION}'])],
   525          [detailed],
   526                  [AC_MSG_RESULT([
   527          default stage1 name:                    '${RKT_STAGE1_DEFAULT_NAME}'
   528          default stage1 version:                 '${RKT_STAGE1_DEFAULT_VERSION}'])],
   529          [AC_MSG_ERROR([*** Unknown setup kind, should not happen])])
   530  
   531  RKT_IF_HAS_FLAVOR([${RKT_STAGE1_FLAVORS}], [coreos,kvm],
   532                    [AC_MSG_RESULT([
   533          coreos/kvm flavor specific build parameters
   534  
   535          local CoreOS PXE image path:            '${RKT_LOCAL_COREOS_PXE_IMAGE_PATH}'
   536          local CoreOS PXE image systemd version: '${RKT_LOCAL_COREOS_PXE_IMAGE_SYSTEMD_VER}'])])
   537  
   538  RKT_IF_HAS_FLAVOR([${RKT_STAGE1_FLAVORS}], [src],
   539                    [AC_MSG_RESULT([
   540          src flavor specific build parameters
   541  
   542          systemd git repo:                       '${RKT_STAGE1_SYSTEMD_SRC}'
   543          systemd version:                        '${RKT_STAGE1_SYSTEMD_VER}'])])
   544  
   545  AC_MSG_RESULT([
   546          other build parameters
   547  
   548          functional tests enabled:               '${RKT_RUN_FUNCTIONAL_TESTS}'
   549          go version:                             '${GO_VERSION}'])