microbenchmark/0000755000176200001440000000000014666123452013247 5ustar liggesusersmicrobenchmark/tests/0000755000176200001440000000000014665675262014423 5ustar liggesusersmicrobenchmark/tests/doRUnit.R0000644000176200001440000000424514663136051016121 0ustar liggesusers## unit tests will not be done if RUnit is not available if(require("RUnit", quietly=TRUE)) { ## --- Setup --- R_CMD_CHECK <- Sys.getenv("RCMDCHECK") != "FALSE" pkg <- "microbenchmark" # <-- Change to package name! if (R_CMD_CHECK) { ## Path to unit tests for R CMD check ## PKG.Rcheck/tests/../PKG/unitTests path <- system.file(package=pkg, "unitTests") } else { ## Path to unit tests for standalone running under Makefile (not R CMD check) ## PKG/tests/../inst/unitTests path <- file.path(getwd(), "..", "inst", "unitTests") } cat("\nRunning unit tests\n") print(list(pkg=pkg, getwd=getwd(), pathToUnitTests=path)) library(package=pkg, character.only=TRUE) ## If desired, load the name space to allow testing of private functions ## if (is.element(pkg, loadedNamespaces())) ## attach(loadNamespace(pkg), name=paste("namespace", pkg, sep=":"), pos=3) ## ## or simply call PKG:::myPrivateFunction() in tests ## --- Testing --- ## Define tests testSuite <- defineTestSuite(name=paste(pkg, "unit testing"), dirs=path) ## Run tests <- runTestSuite(testSuite) ## Report to stdout cat("------------------- UNIT TEST SUMMARY ---------------------\n\n") printTextProtocol(tests, showDetails=FALSE) ## Report text files (only if not under R CMD check) if (!R_CMD_CHECK) { ## Default report name pathReport <- file.path(path, "report") printTextProtocol(tests, showDetails=FALSE, fileName=paste(pathReport, "Summary.txt", sep="")) printTextProtocol(tests, showDetails=TRUE, fileName=paste(pathReport, ".txt", sep="")) ## Report to HTML file printHTMLProtocol(tests, fileName=paste(pathReport, ".html", sep="")) } ## Return stop() to cause R CMD check stop in case of ## - failures i.e. FALSE to unit tests or ## - errors i.e. R errors tmp <- getErrors(tests) if(tmp$nFail > 0 | tmp$nErr > 0) { stop(paste("\n\nunit testing failed (#test failures: ", tmp$nFail, ", #R errors: ", tmp$nErr, ")\n\n", sep="")) } } else { warning("cannot run unit tests -- package RUnit is not available") } microbenchmark/MD50000644000176200001440000000447114666123452013565 0ustar liggesusers03058458d38e9302e9a239ba195748bf *DESCRIPTION b1b25761292a9a84f61599a0c1c8ddaf *LICENSE 78ca84c07a910f38b0aaaf55e216b024 *NAMESPACE 8ba621dbf7cd59bee8f864802628705d *R/autoplot.R 6225a8fe933614cf007e607c77a8cabd *R/boxplot.R 68a22e5fb9ee81db3089953b4efc824e *R/internal.R 3efd2f08bfc4074cc07ba35e520546a5 *R/microbenchmark.R 27390f641b680fcd9186a23a231581af *R/microtiming_precision.R 63ed59ad0dfcb5440121f43d9d15f08d *R/nanotime.R 1f62b9a966f146a1bf0c869c0f7efc19 *R/print.R 91f03d1fdf34286d9b350bc2bd518cc7 *R/rbind.R 8d9e658e800cb2c7e9d5d1f654b7584a *R/summary.R 3d5e67756d90c0f85560f52152a71629 *R/zzz.R 7ce5bcb3b919de728b57c7470cd90e01 *cleanup 882df51d6d73e6aad4757e93c33030a1 *configure 640fae933b12dc1062910ccf9db3afcd *configure.ac ad6ce6b7340f317aa382774a607d7fd5 *inst/unitTests/runit_test_regression.R 7bb0e497133c06294f8fd5c242eb8f47 *man/autoplot.microbenchmark.Rd c7b63c583592a8655de7005039f59f6d *man/boxplot.microbenchmark.Rd 1a8000fbfbbed000998e9a4ddcf9f2f0 *man/coalesce.Rd eb71d43ee7b32f46e04788847725a50f *man/convert_to_unit.Rd b393f661f1aa90475732dd754be2ab26 *man/determine_unit.Rd 10004b5dc6b86feee8f3f86d16f86a5b *man/find_prefix.Rd efbbb601faa4c1bd79721467ff03dd06 *man/get_nanotime.Rd 86b86ebdaba4b7595206a53ac3de1d57 *man/microbenchmark.Rd 94b4880ba510f936c6cc0504e549ed29 *man/microtiming_precision.Rd 181d63428a923e45dadf0f5b45923afb *man/print.microbenchmark.Rd a8dbc772b3d3968538a2cbfcdd664ff4 *man/summary.microbenchmark.Rd cc238fc9825e51fe69c9d3227970fff2 *src/Makevars.in d41d8cd98f00b204e9800998ecf8427e *src/Makevars.win abaa137a9d7e6c520cae644fd22e7095 *src/config.h.in 018adad7b569604a9a8b9451f5b4ec17 *src/do_nothing.c 8d8605b74d2c46206350c2ec5815ab56 *src/do_nothing.h c6feb67586e724e35dbeb9644b210b34 *src/init.c 7ceb654ec7249cf14194b7ca31e1a77a *src/nanotimer.c 9e627e09a7857d330f726ac2ec1de56e *src/nanotimer_clock_gettime.h 120af28861486d4317c67e264ece5838 *src/nanotimer_gettimeofday.h d2d402d5a597d2fe09a74076b2f4aed3 *src/nanotimer_macosx.h 709f73c4af4f42312ded40b703678388 *src/nanotimer_rtposix.h 667557e1ac14236cb518a47a56b6b6bf *src/nanotimer_windows.h 7c8d34cbe1c7a0e2783663e7ffb9327b *src/sexp_macros.h 0e0542c4aac55c7998b71c8a19633c00 *tests/doRUnit.R b4d0955b0317e090a5fe4007f00723a5 *tools/roxygenize 1533aa98e7bbc1f513dfa56c183a7a6f *tools/run-tests 4bead2dc52a0fdf30832c1477ceb1ee2 *tools/set-version microbenchmark/R/0000755000176200001440000000000014665676416013464 5ustar liggesusersmicrobenchmark/R/microbenchmark.R0000644000176200001440000002063014663136051016554 0ustar liggesusers#' Sub-millisecond accurate timing of expression evaluation. #' #' \code{microbenchmark} serves as a more accurate replacement of the #' often seen \code{system.time(replicate(1000, expr))} #' expression. It tries hard to accurately measure only the time it #' takes to evaluate \code{expr}. To achieved this, the #' sub-millisecond (supposedly nanosecond) accurate timing functions #' most modern operating systems provide are used. Additionally all #' evaluations of the expressions are done in C code to minimize any #' overhead. #' #' This function is only meant for micro-benchmarking small pieces of #' source code and to compare their relative performance #' characteristics. You should generally avoid benchmarking larger #' chunks of your code using this function. Instead, try using the R #' profiler to detect hot spots and consider rewriting them in C/C++ #' or FORTRAN. #' #' The \code{control} list can contain the following entries: #' \describe{ #' \item{order}{the order in which the expressions are evaluated. #' \dQuote{random} (the default) randomizes the execution order, #' \dQuote{inorder} executes each expression in order and #' \dQuote{block} executes all repetitions of each expression #' as one block.} #' \item{warmup}{the number of iterations to run the timing code before #' evaluating the expressions in \dots. These warm-up iterations are used #' to estimate the timing overhead as well as spinning up the processor #' from any sleep or idle states it might be in. The default value is 2.} #' } #' #' @note Depending on the underlying operating system, different #' methods are used for timing. On Windows the #' \code{QueryPerformanceCounter} interface is used to measure the #' time passed. For Linux the \code{clock_gettime} API is used and on #' Solaris the \code{gethrtime} function. Finally on MacOS X the, #' undocumented, \code{mach_absolute_time} function is used to avoid #' a dependency on the CoreServices Framework. #' #' Before evaluating each expression \code{times} times, the overhead #' of calling the timing functions and the C function call overhead #' are estimated. This estimated overhead is subtracted from each #' measured evaluation time. Should the resulting timing be negative, #' a warning is thrown and the respective value is replaced by #' \code{0}. If the timing is zero, a warning is raised. #' Should all evaluations result in one of the two error conditions described above, an error is raised. #' #' One platform on which the clock resolution is known to be too low to measure short runtimes with the required precision is #' Oracle\if{html}{\out{®}}\if{latex}{\out{\textregistered\ }}\if{text}{(R)} #' Solaris #' on some #' SPARC\if{html}{\out{®}}\if{latex}{\out{\textregistered\ }}\if{text}{(R)} #' hardware. #' Reports of other platforms with similar problems are welcome. #' Please contact the package maintainer. #' #' @param ... Expressions to benchmark. #' @param list List of unevaluated expressions to benchmark. #' @param times Number of times to evaluate each expression. #' @param check A function to check if the expressions are equal. By default \code{NULL} which omits the check. #' In addition to a function, a string can be supplied. #' The string \sQuote{equal} will compare all values using \code{\link{all.equal}}, \sQuote{equivalent} will compare all values using \code{\link{all.equal}} and check.attributes = FALSE, and \sQuote{identical} will compare all values using \code{\link{identical}}. #' @param control List of control arguments. See Details. #' @param unit Default unit used in \code{summary} and \code{print}. #' @param setup An unevaluated expression to be run (untimed) before each benchmark expression. #' #' @return Object of class \sQuote{microbenchmark}, a data frame with #' columns \code{expr} and \code{time}. \code{expr} contains the #' deparsed expression as passed to \code{microbenchmark} or the name #' of the argument if the expression was passed as a named #' argument. \code{time} is the measured execution time of the #' expression in nanoseconds. The order of the observations in the #' data frame is the order in which they were executed. #' #' @seealso \code{\link{print.microbenchmark}} to display and #' \code{\link{boxplot.microbenchmark}} or #' \code{\link{autoplot.microbenchmark}} to plot the results. #' #' @examples #' ## Measure the time it takes to dispatch a simple function call #' ## compared to simply evaluating the constant \code{NULL} #' f <- function() NULL #' res <- microbenchmark(NULL, f(), times=1000L) #' #' ## Print results: #' print(res) #' #' ## Plot results: #' boxplot(res) #' #' ## Pretty plot: #' if (requireNamespace("ggplot2")) { #' ggplot2::autoplot(res) #' } #' #' ## Example check usage #' my_check <- function(values) { #' all(sapply(values[-1], function(x) identical(values[[1]], x))) #' } #' #' f <- function(a, b) #' 2 + 2 #' #' a <- 2 #' ## Check passes #' microbenchmark(2 + 2, 2 + a, f(2, a), f(2, 2), check=my_check) #' \dontrun{ #' a <- 3 #' ## Check fails #' microbenchmark(2 + 2, 2 + a, f(2, a), f(2, 2), check=my_check) #' } #' ## Example setup usage #' set.seed(21) #' x <- rnorm(10) #' microbenchmark(x, rnorm(10), check=my_check, setup=set.seed(21)) #' ## Will fail without setup #' \dontrun{ #' microbenchmark(x, rnorm(10), check=my_check) #' } #' ## using check #' a <- 2 #' microbenchmark(2 + 2, 2 + a, sum(2, a), sum(2, 2), check='identical') #' microbenchmark(2 + 2, 2 + a, sum(2, a), sum(2, 2), check='equal') #' attr(a, 'abc') <- 123 #' microbenchmark(2 + 2, 2 + a, sum(2, a), sum(2, 2), check='equivalent') #' ## check='equal' will fail due to difference in attribute #' \dontrun{ #' microbenchmark(2 + 2, 2 + a, sum(2, a), sum(2, 2), check='equal') #' } #' @author Olaf Mersmann microbenchmark <- function(..., list=NULL, times=100L, unit=NULL, check=NULL, control=list(), setup=NULL) { stopifnot(times == as.integer(times)) if (!missing(unit) && !is.null(unit)) stopifnot(is.character(unit), length(unit) == 1L) unit <- determine_unit(unit = unit) control[["warmup"]] <- coalesce(control[["warmup"]], 2^18L) control[["order"]] <- coalesce(control[["order"]], "random") stopifnot(as.integer(control$warmup) == control$warmup) exprs <- c(as.list(match.call(expand.dots = FALSE)$`...`), list) nm <- names(exprs) exprnm <- sapply(exprs, function(e) paste(deparse(e), collapse=" ")) if (is.null(nm)) nm <- exprnm else nm[nm == ""] <- exprnm[nm == ""] names(exprs) <- nm env <- parent.frame() setup <- substitute(setup) if (!is.null(check)) { setupexpr <- as.expression(setup) checkexprs <- lapply(exprs, function(e) c(setupexpr, e)) ## Evaluate values in parent environment values <- lapply(checkexprs, eval, env) if (is.character(check) && isTRUE(check == 'equal')) { check <- function(values) { all(sapply(values[-1], function(x) isTRUE(all.equal(values[[1]], x)))) } } else if (is.character(check) && isTRUE(check == 'equivalent')) { check <- function(values) { all(sapply(values[-1], function(x) isTRUE(all.equal(values[[1]], x, check.attributes = F)))) } } else if (is.character(check) && isTRUE(check == 'identical')) { check <- function(values) { all(sapply(values[-1], function(x) identical(values[[1]], x))) } } ok <- check(values) if (!isTRUE(ok)) { stop("Input expressions are not equivalent.", call. = FALSE) } } ## GC first gc(FALSE) o <- if (control$order == "random") sample(rep(seq_along(exprs), times=times)) else if (control$order == "inorder") rep(seq_along(exprs), times=times) else if (control$order == "block") rep(seq_along(exprs), each=times) else stop("Unknown ordering. Must be one of 'random', 'inorder' or 'block'.") exprs <- exprs[o] if (anyDuplicated(nm) > 0) { duplicates <- nm[duplicated(nm)] stop("Expression names must be unique. Duplicate expression names: ", paste(duplicates, collapse = ", ")) } expr <- factor(nm[o], levels = nm) res <- .Call(do_microtiming, exprs, env, as.integer(control$warmup), setup, PACKAGE="microbenchmark") ## Sanity check. Fail as early as possible if the results are ## rubbish. if (all(is.na(res))) .all_na_stop() res <- data.frame(expr = expr, time=res) class(res) <- c("microbenchmark", class(res)) if (!is.null(unit)) attr(res, "unit") <- unit res } microbenchmark/R/internal.R0000644000176200001440000001620414663136051015406 0ustar liggesusers## Internal utility functions # Internal helper functions that returns a generic error if timings fail. .all_na_stop <- function() { msg <- "All measured timings are NA. This is bad! There are several causes for this. The most likely are * You are running under a hypervisor. This can do all sorts of things to the timing functions of your operating system. * You have frequency scaling turned on. Most modern CPUs can reduce their core frequency if they are not busy. microbenchmark tries hard to spin up the CPU before the actual timing, but there is no guarantee this works, so you are advised to disable this feature. Under Linux this can be done using the 'cpufreq' utilities. * You have a machine with many CPU cores and the timers provided by your operating system are not synchronized across cores. Your best bet is to peg your R process to a single core. On Linux systems, this can be achieved using the 'taskset' utility. * Your machine is super fast. If the difference between the estimated overhead and the actual execution time is zero (or possibly even negative), you will get this error. Sorry, you're out of luck, benchmark more complex code. If this problem persists for you, please contact me and I will try to resolve the issue with you." stop(msg, call.=FALSE) } #' Convert timings to different units. #' #' The following units of time are supported \describe{ #' \item{\dQuote{ns}}{Nanoseconds.} #' \item{\dQuote{us}}{Microseconds.} #' \item{\dQuote{ms}}{Milliseconds.} #' \item{\dQuote{s}}{Seconds.} #' \item{\dQuote{t}}{Appropriately prefixed time unit.} #' \item{\dQuote{hz}}{Hertz / evaluations per second.} #' \item{\dQuote{eps}}{Evaluations per second / Hertz.} #' \item{\dQuote{khz}}{Kilohertz / 1000s of evaluations per second.} #' \item{\dQuote{mhz}}{Megahertz / 1000000s of evaluations per second.} #' \item{\dQuote{f}}{Appropriately prefixed frequency unit.} #' } #' #' @param object A \code{microbenchmark} object. #' @param unit A unit of time. See details. #' #' @return A matrix containing the converted time values with an #' attribute \code{unit} which is a printable name of the unit of #' time. #' #' @author Olaf Mersmann #' #' @keywords internal convert_to_unit <- function(object, unit) { unit <- determine_unit(object, unit) x <- object$time switch (unit, t=unit <- sprintf ("%ss", find_prefix(x * 1e-9, minexp = -9, maxexp = 0, mu = FALSE)), f=unit <- sprintf ("%shz", find_prefix(1e9 / x, minexp = 0, maxexp = 6, mu = FALSE)) ) unit <- tolower(unit) switch (unit, ns ={attr(x, "unit") <- "nanoseconds" ; unclass(x )}, us ={attr(x, "unit") <- "microseconds" ; unclass(x / 1e3)}, ms ={attr(x, "unit") <- "milliseconds" ; unclass(x / 1e6)}, s ={attr(x, "unit") <- "seconds" ; unclass(x / 1e9)}, eps ={attr(x, "unit") <- "evaluations per second"; unclass(1e9 / x)}, hz ={attr(x, "unit") <- "hertz" ; unclass(1e9 / x)}, khz ={attr(x, "unit") <- "kilohertz" ; unclass(1e6 / x)}, mhz ={attr(x, "unit") <- "megahertz" ; unclass(1e3 / x)}, stop("Unknown unit '", unit, "'.") ) } #' Find SI prefix for unit #' #' @param x a numeric #' @param f function that produces the number from \code{x} that is used to #' determine the prefix, e.g. \code{\link[base]{min}} or #' \code{\link[stats]{median}}. #' @param minexp minimum (decimal) exponent to consider, #' e.g. -3 to suppress prefixes smaller than milli (m). #' @param maxexp maximum (decimal) exponent to consider, #' e.g. 3 to suppress prefixes larger than kilo (k). #' @param mu if \code{TRUE}, should a proper mu be used for micro, otherwise use #' u as ASCII-compatible replacement #' #' @return character with the SI prefix #' @author Claudia Beleites #' #' @keywords internal find_prefix <- function (x, f=min, minexp=-Inf, maxexp=Inf, mu=TRUE) { prefixes <- c ("y", "z", "a", "f", "p", "n", "u", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y") if (mu) prefixes [7] <- "\u03bc" if (is.numeric (minexp)) minexp <- floor (minexp / 3) if (is.numeric (minexp)) maxexp <- floor (maxexp / 3) e3 <- floor (log10 (f (x)) / 3) e3 <- max (e3, minexp, -8) # prefixes go from 10^-24 = 10^(3 * -8) e3 <- min (e3, maxexp, 8) # to 10^24 = 10^(3 * 8) prefixes [e3 + 9] # e3 of -8 => index 1 } #' Return first non null argument. #' #' This function is useful when processing complex arguments with multiple #' possible defaults based on other arguments that may or may not have been #' provided. #' #' @param ... List of values. #' @return First non null element in \code{...}. #' #' @author Olaf Mersmann #' #' @keywords internal coalesce <- function(...) { isnotnull <- function(x) !is.null(x) Find(isnotnull, list(...)) } #' Normalize timing units to one of the supported values #' #' We support the following units of time #' \describe{ #' \item{\dQuote{ns}, \dQuote{nanoseconds}}{} #' \item{\dQuote{us}, \dQuote{microseconds}}{} #' \item{\dQuote{ms}, \dQuote{milliseconds}}{} #' \item{\dQuote{s}, \dQuote{secs}, \dQuote{seconds}}{} #' \item{\dQuote{t}, \dQuote{time}}{Appropriately prefixed time unit.} #' \item{\dQuote{eps}}{Evaluations per second / Hertz.} #' \item{\dQuote{hz}}{Hertz / evaluations per second.} #' \item{\dQuote{khz}}{Kilohertz / 1000s of evaluations per second.} #' \item{\dQuote{mhz}}{Megahertz / 1000000s of evaluations per second.} #' \item{\dQuote{f}, \dQuote{frequency}}{Appropriately prefixed frequency unit.} #' } #' #' @param object A 'microbenchmark' object. #' @param unit A unit of time. See details. #' #' @return A matrix containing the converted time values with an #' attribute \code{unit} which is a printable name of the unit of #' time. #' #' @author Joshua M. Ulrich #' #' @keywords internal determine_unit <- function(object = NULL, unit = NULL) { # all supported unit values values <- c("nanoseconds", "ns", "microseconds", "us", "milliseconds", "ms", "seconds", "time", "auto", "frequency", "hz", "khz", "mhz", "eps", "relative") # Order of precedence: # 1) 'unit' argument # 2) 'unit' attribute on 'object' argument # 3) 'microbenchmark.unit' option object_unit <- attr(object, "unit") if (is.null(unit)) { if (is.null(object_unit)) { unit <- getOption("microbenchmark.unit", "auto") } else { unit <- object_unit } } else { # include support for 'secs' because it doesn't match 'seconds' unit <- if (unit == "secs") "seconds" else unit } unit <- tolower(unit) unit <- match.arg(unit, values) unit <- switch(unit, nanoseconds = , ns = "ns", microseconds = , us = "us", milliseconds = , ms = "ms", seconds = "s", auto = , time = "t", frequency = "f", hz = "hz", khz = "khz", mhz = "mhz", eps = "eps", relative = "relative") unit } microbenchmark/R/print.R0000644000176200001440000000414714663136051014731 0ustar liggesusers#' Print \code{microbenchmark} timings. #' #' @param x An object of class \code{microbenchmark}. #' @param unit What unit to print the timings in. Default value taken #' from to option \code{microbenchmark.unit} (see example). #' @param order If present, order results according to this column of the output. #' @param signif If present, limit the number of significant digits shown. #' @param ... Passed to \code{print.data.frame} #' #' @note The available units are nanoseconds (\code{"ns"}), microseconds #' (\code{"us"}), milliseconds (\code{"ms"}), seconds (\code{"s"}) #' and evaluations per seconds (\code{"eps"}) and relative runtime #' compared to the best median time (\code{"relative"}). #' #' @note If the \code{multcomp} package is available a statistical #' ranking is calculated and displayed in compact letter display from #' in the \code{cld} column. #' #' @seealso \code{\link{boxplot.microbenchmark}} and #' \code{\link{autoplot.microbenchmark}} for a plot methods. #' #' @examples #' a1 <- a2 <- a3 <- a4 <- numeric(0) #' #' res <- microbenchmark(a1 <- c(a1, 1), #' a2 <- append(a2, 1), #' a3[length(a3) + 1] <- 1, #' a4[[length(a4) + 1]] <- 1, #' times=100L) #' print(res) #' ## Change default unit to relative runtime #' options(microbenchmark.unit="relative") #' print(res) #' ## Change default unit to evaluations per second #' options(microbenchmark.unit="eps") #' print(res) #' #' @method print microbenchmark #' @author Olaf Mersmann print.microbenchmark <- function(x, unit, order, signif, ...) { if (missing(unit)) { unit <- NULL } unit <- determine_unit(x, unit) s <- summary(x, unit=unit) timing_cols <- c("min", "lq", "median", "uq", "max", "mean") if (!missing(signif)) { s[timing_cols] <- lapply(s[timing_cols], base::signif, signif) } cat("Unit: ", attr(s, "unit"), "\n", sep="") if (!missing(order)) { if (order %in% colnames(s)) { s <- s[order(s[[order]]), ] } else { warning("Cannot order results by", order, ".") } } print(s, ..., row.names=FALSE) invisible(x) } microbenchmark/R/rbind.R0000644000176200001440000000272014665675374014710 0ustar liggesusers#' @method rbind microbenchmark rbind.microbenchmark <- function(..., deparse.level = 1) { args <- list(...) is_mb <- sapply(args, inherits, "microbenchmark") if(!all(is_mb)) { stop("can only combine microbenchmark objects") } output <- args arg_names <- as.character(substitute(alist(...))[-1]) all_levels <- NULL for(i in seq_along(output)) { # expressions and levels for object 'i' i_expr <- output[[i]]$expr i_levels <- levels(i_expr) # all levels so far... all_levels <- c(all_levels, i_levels) # add object name to suffix for duplicated expressions has_dups <- utils::tail(duplicated(all_levels), -nlevels(i_expr)) if (any(has_dups)) { levels(output[[i]]$expr) <- paste(i_levels, arg_names[i], sep = ".") } } output <- do.call("rbind.data.frame", output) class(output) <- class(args[[1]]) return(output) } #arg_names <- names(args) # if called via do.call() #arg_symbols <- as.character(substitute(alist(...))[-1]) #if (is.null(arg_names)) { # arg_names <- arg_symbols #} #no_name <- arg_names == "" #arg_names[no_name] <- seq_along(arg_names)[no_name] #all_expr <- lapply(args, function(x) x$expr) #all_levels <- sapply(all_expr, levels) #is_dupe <- duplicated(all_levels) #positions <- rep(seq_along(args), times = sapply(all_expr, nlevels)) #unique_levels <- make.unique(all_levels) microbenchmark/R/zzz.R0000644000176200001440000000164414663136051014431 0ustar liggesusersregister_s3_method <- function(pkg, generic, class, fun = NULL) { stopifnot(is.character(pkg), length(pkg) == 1L) stopifnot(is.character(generic), length(generic) == 1L) stopifnot(is.character(class), length(class) == 1L) if (is.null(fun)) { fun <- get(paste0(generic, ".", class), envir = parent.frame()) } else { stopifnot(is.function(fun)) } if (isNamespaceLoaded(pkg)) { registerS3method(generic, class, fun, envir = asNamespace(pkg)) } # Always register hook in case package is later unloaded & reloaded setHook( packageEvent(pkg, "onLoad"), function(...) { registerS3method(generic, class, fun, envir = asNamespace(pkg)) } ) } .onLoad <- function(libname, pkgname) { if (getRversion() < "3.6.0") { register_s3_method("ggplot2", "autoplot", "microbenchmark") } invisible() } .onUnload <- function(libpath) { library.dynam.unload("microbenchmark", libpath) } microbenchmark/R/nanotime.R0000644000176200001440000000066314663136051015406 0ustar liggesusers#' Return the current value of the platform timer. #' #' The current value of the most accurate timer of the platform is #' returned. This can be used as a time stamp for logging or similar #' purposes. Please note that there is no common reference, that is, #' the timer value cannot be converted to a date and time value. #' #' @author Olaf Mersmann get_nanotime <- function() { .Call(do_get_nanotime, PACKAGE="microbenchmark") } microbenchmark/R/autoplot.R0000644000176200001440000000473114665676416015463 0ustar liggesusers#' Autoplot method for microbenchmark objects: Prettier graphs for #' microbenchmark using ggplot2 #' #' Uses ggplot2 to produce a more legible graph of microbenchmark timings. #' #' @param object A microbenchmark object. #' @param \dots Ignored. #' @param order Names of output column(s) to order the results. #' @param log If \code{TRUE} the time axis will be on log scale. #' @param unit The unit to use for graph labels. #' @param y_max The upper limit of the y axis, in the unit automatically #' chosen for the time axis (defaults to the maximum value). #' @return A ggplot2 object. #' #' @examples #' if (requireNamespace("ggplot2", quietly = TRUE)) { #' tm <- microbenchmark(rchisq(100, 0), #' rchisq(100, 1), #' rchisq(100, 2), #' rchisq(100, 3), #' rchisq(100, 5), times=1000L) #' ggplot2::autoplot(tm) #' #' # add a custom title #' ggplot2::autoplot(tm) + ggplot2::ggtitle("my timings") #' } #' @author Ari Friedman, Olaf Mersmann autoplot.microbenchmark <- function(object, ..., order=NULL, log=TRUE, unit=NULL, y_max=NULL) { if (!requireNamespace("ggplot2", quietly = TRUE)) stop("Missing package 'ggplot2'.") y_min <- 0 unit <- determine_unit(object, unit) object$ntime <- convert_to_unit(object, unit) if (is.null(y_max)) { y_max <- max(object$ntime) } if (!is.null(order)) { s <- summary(object) object_colnames <- colnames(s) order <- match.arg(order, object_colnames, several.ok=TRUE) new_order <- do.call("order", c(s[, order, drop=FALSE], decreasing=TRUE)) object$expr <- factor(object$expr, levels = levels(object$expr)[new_order]) } plt <- ggplot2::ggplot(object, ggplot2::aes_string(x="expr", y="ntime")) plt <- plt + ggplot2::stat_ydensity() plt <- plt + ggplot2::scale_x_discrete(name="") y_label <- sprintf("Time (%s) for neval = %d", attr(object$ntime, "unit"), nrow(object) / length(levels(object$expr))) if (log) { y_min <- if (min(object$time) == 0) 1 else min(object$ntime) plt <- plt + ggplot2::scale_y_log10(name=y_label) } else { plt <- plt + ggplot2::scale_y_continuous(name=y_label) } plt <- plt + ggplot2::coord_flip(ylim=c(y_min , y_max)) plt <- plt + ggplot2::ggtitle("microbenchmark timings") plt } microbenchmark/R/microtiming_precision.R0000644000176200001440000000150214663136051020161 0ustar liggesusers#' Estimate precision of timing routines. #' #' This function is currently experimental. Its main use is to judge #' the quality of the underlying timer implementation of the #' operating system. The function measures the overhead of timing a C #' function call \code{rounds} times and returns all non-zero timings #' observed. This can be used to judge the granularity and resolution #' of the timing subsystem. #' #' @param rounds Number of measurements used to estimate the precision. #' @param warmup Number of iterations used to warm up the CPU. #' @return A vector of observed non-zero timings. #' #' @author Olaf Mersmann microtiming_precision <- function(rounds=100L, warmup=2^18) { .Call(do_microtiming_precision, parent.frame(), as.integer(rounds), as.integer(warmup), PACKAGE="microbenchmark") } microbenchmark/R/summary.R0000644000176200001440000000520314663136051015264 0ustar liggesusers#' Summarize \code{microbenchmark} timings. #' #' @param object An object of class \code{microbenchmark}. #' #' @param unit What unit to print the timings in. If none is given, #' either the \code{unit} attribute of \code{object} or the option #' \code{microbenchmark.unit} is used and if neither is set #' \dQuote{t} is used. #' #' @param ... Ignored #' #' @param include_cld Calculate \code{cld} using \code{multcomp::glht()} #' and add it to the output. Set to \code{FALSE} if the calculation takes #' too long. #' #' @note The available units are nanoseconds (\code{"ns"}), #' microseconds (\code{"us"}), milliseconds (\code{"ms"}), seconds #' (\code{"s"}) and evaluations per seconds (\code{"eps"}) and #' relative runtime compared to the best median time #' (\code{"relative"}). #' #' @return A \code{data.frame} containing the aggregated results. #' #' @seealso \code{\link{print.microbenchmark}} #' @method summary microbenchmark summary.microbenchmark <- function(object, unit, ..., include_cld = TRUE) { ## Choose unit if not given based on unit attribute of object or ## global option. Default to 't' if none is set. if (missing(unit)) { unit <- NULL } unit <- determine_unit(object, unit) if (unit != "relative") object$time <- convert_to_unit(object, unit) res <- aggregate(time ~ expr, object, function(z) { tmp <- c(fivenum(z), mean(z), length(z)) tmp[c(1, 2, 6, 3, 4, 5, 7)] }) res <- cbind(res$expr, as.data.frame(res$time)) colnames(res) <- c("expr", "min", "lq", "mean", "median", "uq", "max", "neval") if (unit == "relative") { min <- res[which.min(res$median), , drop = FALSE] min$neval <- 1 # Ugly hack: Do not rescale neval res[-1] <- res[-1] / as.list(min[-1]) attr(res, "unit") <- "relative" } else { attr(res, "unit") <- attr(object$time, "unit") } if (isTRUE(include_cld) && requireNamespace("multcomp", quietly = TRUE) && nrow(res) > 1 && all(res["neval"] > 1)) { ## Try to calculate a statistically meaningful comparison. If it fails for ## any reason (f.e. the data might be constant), ignore the error. cld_time <- system.time({ tryCatch({ ops <- options(warn=-1) mdl <- lm(time ~ expr, object) comp <- multcomp::glht(mdl, multcomp::mcp(expr = "Tukey")) res$cld <- multcomp::cld(comp)$mcletters$monospacedLetters }, error=function(e) FALSE, finally=options(ops)) }) if (cld_time["elapsed"] > 5.0) { message("cld calculation took more than 5 seconds\n set", " include_cld = FALSE to skip the cld calculation") } } res } microbenchmark/R/boxplot.R0000644000176200001440000000332214663136051015256 0ustar liggesusers#' Boxplot of \code{microbenchmark} timings. #' #' @param x A \code{microbenchmark} object. #' @param unit Unit in which the results be plotted. #' @param log Should times be plotted on log scale? #' @param xlab X axis label. #' @param ylab Y axis label. #' @param horizontal Switch X and Y axes. #' @param main Plot title. #' @param ... Passed on to boxplot.formula. #' #' @method boxplot microbenchmark #' #' @author Olaf Mersmann boxplot.microbenchmark <- function(x, unit="t", log=TRUE, xlab, ylab, horizontal=FALSE, main="microbenchmark timings", ...) { x$time <- convert_to_unit(x, unit) timeunits <- c("ns", "us", "ms", "s", "t") frequnits <- c("hz", "khz", "mhz", "eps", "f") if (missing(xlab)) xlab <- "Expression" if (missing(ylab)) { ylab <- if (log) { if (unit %in% timeunits) paste("log(time) [", unit, "]", sep="") else if (unit %in% frequnits) paste("log(frequency) [", unit, "]", sep="") else paste("log(", unit, ")", sep="") } else { if (unit %in% timeunits) paste("time [", unit, "]", sep="") else if (unit %in% frequnits) paste("frequency [", unit, "]", sep="") else if (unit == "eps") "evaluations per second [Hz]" else unit } } if (log) { # min time cannot be 0 for log y-axis ylim <- pmax(1, range(x$time)) } else { ylim <- NULL } if (horizontal) { ll <- if (log) "x" else "" boxplot(time ~ expr, data=x, xlab=ylab, ylab=xlab, log=ll, ylim=ylim, horizontal=TRUE, main=main, ...) } else { ll <- if (log) "y" else "" boxplot(time ~ expr, data=x, xlab=xlab, ylab=ylab, log=ll, ylim=ylim, main=main, ...) } } microbenchmark/cleanup0000755000176200001440000000010114665711271014615 0ustar liggesusers#!/bin/sh rm config.log config.status src/config.h src/Makevars microbenchmark/src/0000755000176200001440000000000014665711271014037 5ustar liggesusersmicrobenchmark/src/config.h.in0000644000176200001440000000460714663136051016064 0ustar liggesusers/* src/config.h.in. Generated from configure.ac by autoheader. */ /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDIO_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* clockid_t to use with clock_gettime */ #undef MB_CLOCKID_T /* Define to 1 if you have the `clock_gettime` function. */ #undef MB_HAVE_CLOCK_GETTIME /* Define to 1 if you have the `gethrtime` function. */ #undef MB_HAVE_GETHRTIME /* Define to 1 if you have the `gettimeofday` function. */ #undef MB_HAVE_GETTIMEOFDAY /* Define to 1 if you have the `mach_absolute_time` function. */ #undef MB_HAVE_MACH_TIME /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if all of the C90 standard headers exist (not just the ones required in a freestanding environment). This macro is provided for backward compatibility; new code need not use it. */ #undef STDC_HEADERS /* Define for Solaris 2.5.1 so the uint64_t typedef from , , or is not used. If the typedef were allowed, the #define below would cause a syntax error. */ #undef _UINT64_T /* Enable FreeBSD-specific clockid */ #undef __BSD_VISIBLE /* Define to the type of an unsigned integer type of width exactly 64 bits if such a type exists and the standard includes do not define it. */ #undef uint64_t microbenchmark/src/Makevars.win0000644000176200001440000000000013274071563016313 0ustar liggesusersmicrobenchmark/src/nanotimer_windows.h0000644000176200001440000000044414663136051017753 0ustar liggesusers#include static nanotime_t get_nanotime(void) { LARGE_INTEGER time_var, frequency; QueryPerformanceCounter(&time_var); QueryPerformanceFrequency(&frequency); /* Convert to nanoseconds */ return (nanotime_t)(1.0e9 * time_var.QuadPart / frequency.QuadPart); } microbenchmark/src/init.c0000644000176200001440000000127114663136051015142 0ustar liggesusers#include #include #include // for NULL #include /* .Call calls */ extern SEXP do_get_nanotime(void); extern SEXP do_microtiming(SEXP, SEXP, SEXP, SEXP); extern SEXP do_microtiming_precision(SEXP, SEXP, SEXP); static const R_CallMethodDef CallEntries[] = { {"do_get_nanotime", (DL_FUNC) &do_get_nanotime, 0}, {"do_microtiming", (DL_FUNC) &do_microtiming, 4}, {"do_microtiming_precision", (DL_FUNC) &do_microtiming_precision, 3}, {NULL, NULL, 0} }; void R_init_microbenchmark(DllInfo *dll) { R_registerRoutines(dll, NULL, CallEntries, NULL, NULL); R_useDynamicSymbols(dll, FALSE); } microbenchmark/src/nanotimer_macosx.h0000644000176200001440000000200314663136051017544 0ustar liggesusers#include /* QA1398 [1] warns that this calculation may overflow uint64: * mach_absolute_time() * mach_timebase_info.numer / mach_timebase_info.denom * * The StackOverflow question [2] suggests that it's mainly a problem on * Power-PC Macs, since the numerator and denominator are both 1 on Intel * Macs. * * [1] https://developer.apple.com/library/content/qa/qa1398/_index.html * [2] https://stackoverflow.com/questions/23378063 */ static nanotime_t get_nanotime(void) { static uint64_t ratio = 0; if (ratio == 0) { mach_timebase_info_data_t info; mach_timebase_info(&info); if ((info.numer % info.denom) == 0) { ratio = info.numer / info.denom; } else { warning("less accurate nanosecond times to avoid potential integer overflows"); ratio = (uint64_t)((double)info.numer / info.denom); } } uint64_t time = mach_absolute_time(); /* Convert to nanoseconds */ return (nanotime_t)(time * ratio); } microbenchmark/src/Makevars.in0000644000176200001440000000044414663136051016135 0ustar liggesusersPKG_LIBS = @MB_LIBS@ ## ## Some compilers (in C99 mode) will not define _POSIX_C_SOURCE for ## us. In that case time.h does not define the required structures. So ## for the sake of easy installation, we manually set it if it is not ## set. ## PKG_CPPFLAGS = -D_POSIX_C_SOURCE=200112L @DEFS@ microbenchmark/src/nanotimer_gettimeofday.h0000644000176200001440000000052314663136051020740 0ustar liggesusers# include static const nanotime_t nanoseconds_in_second = 1000000000LL; static nanotime_t get_nanotime(void) { nanotime_t nt; struct timeval tv; if (gettimeofday(&tv, NULL)) { nt = tv.tv_sec * nanoseconds_in_second; nt += tv.tv_usec * 1000LL; } else { nt = 0; } return nt; } microbenchmark/src/do_nothing.c0000644000176200001440000000063114663136051016326 0ustar liggesusers#include "do_nothing.h" /* Do nothing but do it well. * * The purpose of this function is to have a callsite outside of the * nanotimer.c compilation unit which forces the compiler to emit a * call instruction instead of optimizing out the meaningless call. We * want the compiler to include the call to include the overhead in our * overhead estimation. */ int do_nothing(void) { return 42; } microbenchmark/src/nanotimer_rtposix.h0000644000176200001440000000114514663136051017770 0ustar liggesusers/* * Solaris does not define gethrtime if _POSIX_C_SOURCE is defined because * gethrtime() is an extension to the POSIX.1.2001 standard. According to [1] * we need to define __EXTENSIONS__ before including sys/time.h in order to * force the declaration of non-standard functions. * * [1] http://www.oracle.com/technetwork/articles/servers-storage-dev/standardheaderfiles-453865.html */ #if defined(sun) || defined(__sun) #define __EXTENSIONS__ #endif # include /* short an sweet! */ static nanotime_t get_nanotime(void) { hrtime_t hrtime = gethrtime(); return (nanotime_t)hrtime; } microbenchmark/src/sexp_macros.h0000644000176200001440000000336613274071563016541 0ustar liggesusers/* * sexp_macros.h - helper macros for SEXPs * * Collection of useful macros to handle S expressions. Most of these * are used to unpack arguments passed in via the .Call() or * .External() interface. * * Author: * Olaf Mersmann (OME) */ #if !defined(__SEXP_MACROS_H__) #define __SEXP_MACROS_H__ #include #include #define CHECK_ARG_IS_REAL_MATRIX(A) \ if (!isReal(A) || !isMatrix(A)) \ error("Argument '" #A "' is not a real matrix."); #define CHECK_ARG_IS_REAL_VECTOR(A) \ if (!isReal(A) || !isVector(A)) \ error("Argument '" #A "' is not a real vector."); #define CHECK_ARG_IS_INT_VECTOR(A) \ if (!isInteger(A) || !isVector(A)) \ error("Argument '" #A "' is not an integer vector."); /* * Unpack a real matrix stored in SEXP S. */ #define UNPACK_REAL_MATRIX(S, D, N, K) \ CHECK_ARG_IS_REAL_MATRIX(S); \ double *D = REAL(S); \ const R_len_t N = nrows(S); \ const R_len_t K = ncols(S); /* * Unpack a real vector stored in SEXP S. */ #define UNPACK_REAL_VECTOR(S, D, N) \ CHECK_ARG_IS_REAL_VECTOR(S); \ double *D = REAL(S); \ const R_len_t N = length(S); /* * Unpack a single real stored in SEXP S. */ #define UNPACK_REAL(S, D) \ CHECK_ARG_IS_REAL_VECTOR(S); \ double D = REAL(S)[0]; \ /* * Unpack an integer vector stored in SEXP S. */ #define UNPACK_INT_VECTOR(S, I, N) \ CHECK_ARG_IS_INT_VECTOR(S); \ int *I = INTEGER(S); \ const R_len_t N = length(S); /* * Unpack a single integer stored in SEXP S. */ #define UNPACK_INT(S, I) \ CHECK_ARG_IS_INT_VECTOR(S); \ int I = INTEGER(S)[0]; \ #endif microbenchmark/src/nanotimer.c0000644000176200001440000001132714663136051016176 0ustar liggesusers#include #include #include #include #include #include #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "sexp_macros.h" #include "do_nothing.h" typedef uint64_t nanotime_t; #if defined(WIN32) #include "nanotimer_windows.h" #elif defined(MB_HAVE_MACH_TIME) #include "nanotimer_macosx.h" #elif defined(MB_HAVE_CLOCK_GETTIME) && defined(MB_CLOCKID_T) #include "nanotimer_clock_gettime.h" #elif defined(MB_HAVE_GETHRTIME) #include "nanotimer_rtposix.h" #elif defined(MB_HAVE_GETTIMEOFDAY) #include "nanotimer_gettimeofday.h" #else /* ./configure should prevent this, but just in case... */ #error "Unsupported OS." #endif #if defined(__GNUC__) #define NOINLINE __attribute__((noinline)) #else #define NOINLINE #endif nanotime_t estimate_overhead(SEXP s_rho, int rounds) { int i, n_back_in_time = 0; int observed_overhead = FALSE; /* Estimate minimal overhead and warm up the machine ... */ nanotime_t start, end, overhead = UINT64_MAX; for (i = 0; i < rounds; ++i) { start = get_nanotime(); do_nothing(); end = get_nanotime(); const nanotime_t diff = end - start; if (start < end && diff < overhead) { observed_overhead = TRUE; overhead = diff; } else if (start > end) { n_back_in_time++; } } if (!observed_overhead) { warning("Could not measure overhead. Your clock might lack precision."); overhead = 0; } else if (UINT64_MAX == overhead) { error("Observed overhead too large."); } if (n_back_in_time > 0) { warning("Observed negative overhead in %i cases.", n_back_in_time); } return overhead; } SEXP do_microtiming_precision(SEXP s_rho, SEXP s_times, SEXP s_warmup) { UNPACK_INT(s_warmup, warmup); UNPACK_INT(s_times, times); int n = 0; nanotime_t overhead = estimate_overhead(s_rho, warmup); nanotime_t start, end; SEXP s_ret; PROTECT(s_ret = allocVector(REALSXP, times)); while (n < times) { start = get_nanotime(); end = get_nanotime(); if (start < end) { REAL(s_ret)[n] = end - start - overhead; n++; } } UNPROTECT(1); /* s_ret */ return s_ret; } SEXP do_get_nanotime(void) { return ScalarReal(get_nanotime() * 1.0); } SEXP do_microtiming(SEXP s_exprs, SEXP s_rho, SEXP s_warmup, SEXP s_setup) { nanotime_t start, end, overhead; int i, n_under_overhead = 0, n_start_end_equal = 0; R_len_t n_exprs = 0; SEXP s_ret, s_expr; double *ret; UNPACK_INT(s_warmup, warmup); /* Expressions */ n_exprs = LENGTH(s_exprs); /* Environment in which to evaluate */ if(!isEnvironment(s_rho)) error("'s_rho' should be an environment"); /* Return value: */ PROTECT(s_ret = allocVector(REALSXP, n_exprs)); ret = REAL(s_ret); /* Estimate minimal overhead and warm up the machine ... */ overhead = estimate_overhead(s_rho, warmup); /* Actual timing... */ for (i = 0; i < n_exprs; ++i) { s_expr = VECTOR_ELT(s_exprs, i); if (s_setup != R_NilValue) { eval(s_setup, s_rho); } start = get_nanotime(); eval(s_expr, s_rho); end = get_nanotime(); if (start < end) { const nanotime_t diff = end - start; if (diff < overhead) { ret[i] = 0.0; n_under_overhead++; } else { ret[i] = diff - overhead; } } else if (start == end) { ++n_start_end_equal; ret[i] = 0.0; } else { error("Measured negative execution time! Please investigate and/or " "contact the package author."); } /* Housekeeping */ R_CheckUserInterrupt(); /* R_gc(); */ } /* Issue waring if we observed some timings below the estimated * overhead. */ if (n_under_overhead > 0) { if (n_under_overhead == 1) { warning("Estimated overhead was greater than measured evaluation " "time in 1 run."); } else { warning("Estimated overhead was greater than measured evaluation " "time in %i runs.", n_under_overhead); } } if (n_start_end_equal > 0) { if (n_start_end_equal == 1) { warning("Could not measure a positive execution time for one " "evaluation."); } else { warning("Could not measure a positive execution time for %i " "evaluations.", n_start_end_equal); } } if (n_under_overhead + n_start_end_equal == n_exprs) { error("All timed evaluations were either smaller than the estimated " "overhead or zero. The most likely cause is a low resolution " "clock. Feel free to contact the package maintainer for debug " "the issue further."); } UNPROTECT(1); /* s_ret */ return s_ret; } microbenchmark/src/nanotimer_clock_gettime.h0000644000176200001440000000117114663136051021070 0ustar liggesusers#include static const nanotime_t nanoseconds_in_second = 1000000000LL; static nanotime_t get_nanotime(void) { struct timespec time_var; /* Possible other values we could have used are CLOCK_MONOTONIC, * which is takes longer to retrieve and CLOCK_PROCESS_CPUTIME_ID * which, if I understand it correctly, would require the R * process to be bound to one core. */ clock_gettime(MB_CLOCKID_T, &time_var); nanotime_t sec = time_var.tv_sec; nanotime_t nsec = time_var.tv_nsec; /* Combine both values to one nanoseconds value */ return (nanoseconds_in_second * sec) + nsec; } microbenchmark/src/do_nothing.h0000644000176200001440000000012714663136051016333 0ustar liggesusers#ifndef __DO_NOTHING_H__ #define __DO_NOTHING_H__ extern int do_nothing(void); #endif microbenchmark/NAMESPACE0000644000176200001440000000101414665674714014475 0ustar liggesusersS3method(boxplot,microbenchmark) S3method(print,microbenchmark) S3method(rbind,microbenchmark) S3method(summary,microbenchmark) if (getRversion() >= "3.6.0") { S3method(ggplot2::autoplot, microbenchmark) } export(get_nanotime) export(microbenchmark) export(microtiming_precision) importFrom(graphics,boxplot) importFrom(stats,aggregate) importFrom(stats,fivenum) importFrom(stats,lm) useDynLib(microbenchmark,do_get_nanotime) useDynLib(microbenchmark,do_microtiming) useDynLib(microbenchmark,do_microtiming_precision) microbenchmark/LICENSE0000644000176200001440000000026413274071563014255 0ustar liggesusersYEAR: 2010-2014 COPYRIGHT HOLDER: Olaf Mersmann YEAR: 2012 COPYRIGHT HOLDER: Ari Friedman YEAR: 2012 COPYRIGHT HOLDER: Rainer Hurling YEAR: 2011 COPYRIGHT HOLDER: Claudia Beleites microbenchmark/configure.ac0000644000176200001440000001034214663157227015541 0ustar liggesusers# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ([2.69]) AC_INIT([microbenchmark], [VERSION], [https://github.com/joshuaulrich/microbenchmark/issues]) : ${R_HOME=`R RHOME`} if test -z "${R_HOME}"; then echo "could not determine R_HOME" exit 1 fi CC=`"${R_HOME}/bin/R" CMD config CC` CFLAGS=`"${R_HOME}/bin/R" CMD config CFLAGS` CPPFLAGS=`"${R_HOME}/bin/R" CMD config CPPFLAGS` AC_CONFIG_SRCDIR([src/init.c]) AC_CONFIG_HEADERS([src/config.h]) AC_CONFIG_FILES([src/Makevars]) # Checks for programs. AC_PROG_CC # Checks for libraries. # Checks for header files. AC_CHECK_HEADERS([stdint.h stdlib.h sys/time.h]) # Checks for typedefs, structures, and compiler characteristics. ## nanotime_t is a 64-bit unsigned int AC_TYPE_UINT64_T # Checks for library functions. AC_FUNC_ERROR_AT_LINE mb_cv_have_timer="no" ## mach_absolute_time (macOS) if test "${mb_cv_have_timer}" = "no"; then AC_MSG_CHECKING(for mach_absolute_time) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include ]], [[ uint64_t time; mach_timebase_info_data_t info; time = mach_absolute_time(); mach_timebase_info(&info); time * (info.numer / info.denom); ]])],[mb_cv_have_timer="yes"],[]) AC_MSG_RESULT(${mb_cv_have_timer}) if test "${mb_cv_have_timer}" = "yes"; then AC_DEFINE_UNQUOTED([MB_HAVE_MACH_TIME], [1], [Define to 1 if you have the `mach_absolute_time` function.]) fi fi # clock_gettime if test "${mb_cv_have_timer}" = "no"; then # clock_gettime is included in glibc > 2.16, and librt before libs="${LIBS}" AC_SEARCH_LIBS(clock_gettime, rt) # we have clock_gettime, now check for best clockid_t if test "${ac_cv_search_clock_gettime}" != "no"; then AC_CACHE_CHECK([for best clockid_t to use with clock_gettime], mb_cv_clockid_t, [ for clockid in CLOCK_MONOTONIC_PRECISE CLOCK_MONOTONIC_RAW \ CLOCK_HIGHRES CLOCK_MONOTONIC; do AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include ]], [[ struct timespec ts; clock_gettime($clockid, &ts); ]])],[mb_cv_clockid_t="${clockid}"],[mb_cv_clockid_t="no"]) test "${mb_cv_clockid_t}" = "no" || break done ]) LIBS="${libs}" if test "${mb_cv_clockid_t}" = "no"; then AC_MSG_WARN(cannot find a monotonic clockid_t to use with clock_gettime; an alternative clock will be used) else AC_DEFINE([MB_HAVE_CLOCK_GETTIME], [1], [Define to 1 if you have the `clock_gettime` function.]) AC_DEFINE_UNQUOTED([MB_CLOCKID_T], [$mb_cv_clockid_t], [clockid_t to use with clock_gettime]) if test "${mb_cv_clockid_t}" = "CLOCK_MONOTONIC_PRECISE"; then # CLOCK_MONOTONIC_PRECISE is FreeBSD-specific that requires __BSD_VISIBLE to use AC_DEFINE([__BSD_VISIBLE], [1], [Enable FreeBSD-specific clockid]) fi if test "${ac_cv_search_clock_gettime}" != "none required"; then AC_SUBST(MB_LIBS, $ac_cv_search_clock_gettime) fi mb_cv_have_timer="yes" fi fi fi # gethrtime if test "${mb_cv_have_timer}" = "no"; then AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #if defined(sun) || defined(__sun) #define __EXTENSIONS__ #endif #include #include ]], [[ gethrtime(); ]])],[mb_cv_gethrtime="yes"],[mb_cv_gethrtime="no"]) if test "${mb_cv_gethrtime}" = "yes"; then AC_DEFINE_UNQUOTED([MB_HAVE_GETHRTIME], [1], [Define to 1 if you have the `gethrtime` function.]) mb_cv_have_timer="yes" fi fi # gettimeofday if test "${mb_cv_have_timer}" = "no"; then AC_MSG_WARN(cannot find a high-resolution timer. Falling back to system time, which is unreliable for benchmarks.) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include ]], [[ struct timeval tv; gettimeofday(&tv, NULL); ]])],[mb_cv_gettimeofday="yes"],[mb_cv_gettimeofday="no"]) if test "${mb_cv_func_gettimeofday}" = "yes"; then AC_DEFINE_UNQUOTED([MB_HAVE_GETTIMEOFDAY], [1], [Define to 1 if you have the `gettimeofday` function.]) mb_cv_have_timer="yes" fi fi # nothing if test "${mb_cv_have_timer}" = "no"; then AC_MSG_ERROR(cannot find a valid timing function.) fi AC_OUTPUT microbenchmark/inst/0000755000176200001440000000000014663136051014220 5ustar liggesusersmicrobenchmark/inst/unitTests/0000755000176200001440000000000014665675456016245 5ustar liggesusersmicrobenchmark/inst/unitTests/runit_test_regression.R0000644000176200001440000000772214665675456023040 0ustar liggesuserslibrary(microbenchmark) test.unit_is_object_errors <- function() { out <- try(microbenchmark(NULL, unit=a), silent = TRUE) checkTrue(inherits(out, "try-error")) } test.unit_f_is_valid <- function() { out <- try(microbenchmark(NULL, unit="f"), silent = TRUE) checkTrue(!inherits(out, "try-error")) } test.unit_is_int_errors <- function() { out <- try(microbenchmark(NULL, unit=4), silent = TRUE) checkTrue(inherits(out, "try-error")) } kest.unit_arg_errors_before_printing <- function() { out <- try(microbenchmark(NULL, unit="foo"), silent = TRUE) checkTrue(inherits(out, "try-error")) } test.unit_arg_valid_values <- function() { check <- function(x, u) { unit <- microbenchmark:::determine_unit checkIdentical(unit(unit = u), attr(x, "unit")) } test <- function() {} values <- c("nanoseconds", "ns", "microseconds", "us", "milliseconds", "ms", "seconds", "s", "secs", "time", "t", "frequency", "f", "hz", "khz", "mhz", "eps", "relative") for (u in values) { out <- microbenchmark(test(), unit = u, times = 1) check(out, u) } } test.unit_is_null_does_not_error <- function() { out <- try(print(microbenchmark(NULL, unit = NULL)), silent = TRUE) checkTrue(!inherits(out, "try-error")) } test.simple_timing <- function() { set.seed(21) out <- microbenchmark(rnorm(1e4)) checkTrue(all(out$time > 0)) } test.get_nanotime <- function() { nt <- get_nanotime() checkTrue(nt > 0) } test.microtiming_precision <- function() { mtp <- tryCatch(microtiming_precision(), warning = function(w) w, error = function(e) e) if (is(mtp, "warning") || is(mtp, "error")) { stop(mtp$message) } } test.setup_expression <- function() { set.seed(21) x <- rnorm(10) microbenchmark(y <- rnorm(10), x, setup = set.seed(21)) checkTrue(identical(x, y)) } test.setup_expression_check <- function() { my_check <- function(values) { v1 <- values[[1]] all(sapply(values[-1], function(x) identical(v1, x))) } set.seed(21) x <- rnorm(10) microbenchmark(rnorm(10), x, check = my_check, setup = set.seed(21)) } test.setup_expression_eval_env_check <- function() { my_check <- function(values) { v1 <- values[[1]] all(sapply(values[-1], function(x) identical(v1, x))) } set.seed(21) x <- rnorm(10) microbenchmark(rnorm(n), x, check = my_check, setup = {set.seed(21); n <- 10}) } test.setup_expression_eval_env <- function() { x <- rnorm(10) microbenchmark(y <- rnorm(n), x, setup = {n <- 10}) checkTrue(length(y) == 10L) } test.expression_eval_parent_frame <- function() { fx <- function() { 1:10 } fy <- function() { 1:10 } microbenchmark(x <- fx(), y <- fy()) checkTrue(identical(x, y)) } test.setup_expression_check_equal <- function() { set.seed(21) x <- rnorm(1e5) microbenchmark(rnorm(1e5), x, check = 'equal', setup = set.seed(21)) } test.setup_expression_check_equal_failure <- function() { set.seed(21) x <- rnorm(1e5) attr(x = x, 'abc') <- 123 # add attribute out <- try(microbenchmark(rnorm(1e5), x, check = 'equal', setup = set.seed(21)), silent = T) checkTrue(inherits(out, "try-error")) } test.setup_expression_check_equivalent <- function() { set.seed(21) x <- rnorm(1e5) attr(x = x, 'abc') <- 123 # add attribute microbenchmark(rnorm(1e5), x, check = 'equivalent', setup = set.seed(21)) } test.setup_expression_check_identical <- function() { set.seed(21) x <- rnorm(1e5) microbenchmark(rnorm(1e5), x, check = 'identical', setup = set.seed(21)) } test.setup_expression_check_identical_failure <- function() { set.seed(21) x <- rnorm(1e5) attr(x = x, 'abc') <- 123 # add attribute out <- try(microbenchmark(rnorm(1e5), x, check = 'equal', setup = set.seed(21)), silent = T) checkTrue(inherits(out, "try-error")) } test.print_returns_input <- function() { x <- microbenchmark( 5 + 6, 6 + 7, times = 2) identical(x, print(x)) } microbenchmark/tools/0000755000176200001440000000000013362062555014405 5ustar liggesusersmicrobenchmark/tools/set-version0000755000176200001440000000103713274071563016613 0ustar liggesusers#!/usr/bin/env Rscript get_version_from_git <- function() { tag <- system2("git", c("describe", "--tags", "--match", "v*"), stdout=TRUE, stderr=TRUE) is_clean <- system2("git", c("diff-index", "--quiet", tag)) == 0 tt <- sub("v", "", tag, fixed=TRUE) tt <- paste(strsplit(tt, "-")[[1]][1:2], collapse="-") if (!is_clean) tt <- sub("-.*", sprintf("-%i", as.integer(Sys.time())), tt) tt } desc <- read.dcf("pkg/DESCRIPTION") desc[,"Version"] <- get_version_from_git() write.dcf(desc, file="pkg/DESCRIPTION") microbenchmark/tools/roxygenize0000755000176200001440000000012113362062555016530 0ustar liggesusers#!/usr/bin/env Rscript library("methods") library("roxygen2") roxygenize("pkg") microbenchmark/tools/run-tests0000755000176200001440000000026013274071563016276 0ustar liggesusers#!/usr/bin/env Rscript ## -*- mode:r -*- library("methods") library("testthat") library("microbenchmark") test_dir(file.path(system.file(package="microbenchmark"), "tests")) microbenchmark/configure0000755000176200001440000042117714665711271015173 0ustar liggesusers#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71 for microbenchmark VERSION. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, # Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="as_nop=: if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else \$as_nop case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : else \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else $as_nop as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi fi if test "x$CONFIG_SHELL" != x then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and $0: https://github.com/joshuaulrich/microbenchmark/issues $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do $0: have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='microbenchmark' PACKAGE_TARNAME='microbenchmark' PACKAGE_VERSION='VERSION' PACKAGE_STRING='microbenchmark VERSION' PACKAGE_BUGREPORT='https://github.com/joshuaulrich/microbenchmark/issues' PACKAGE_URL='' ac_unique_file="src/init.c" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_STDIO_H # include #endif #ifdef HAVE_STDLIB_H # include #endif #ifdef HAVE_STRING_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_c_list= ac_subst_vars='LTLIBOBJS MB_LIBS LIBOBJS OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures microbenchmark VERSION to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/microbenchmark] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of microbenchmark VERSION:";; esac cat <<\_ACEOF Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF microbenchmark configure VERSION generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_find_uintX_t LINENO BITS VAR # ------------------------------------ # Finds an unsigned integer type with width BITS, setting cache variable VAR # accordingly. ac_fn_c_find_uintX_t () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5 printf %s "checking for uint$2_t... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. for ac_type in uint$2_t 'unsigned int' 'unsigned long int' \ 'unsigned long long int' 'unsigned short int' 'unsigned char'; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main (void) { static int test_array [1 - 2 * !((($ac_type) -1 >> ($2 / 2 - 1)) >> ($2 / 2 - 1) == 3)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : case $ac_type in #( uint$2_t) : eval "$3=yes" ;; #( *) : eval "$3=\$ac_type" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if eval test \"x\$"$3"\" = x"no" then : else $as_nop break fi done fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_find_uintX_t # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by microbenchmark $as_me VERSION, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in #( */*) : ;; #( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Does the compiler advertise C89 conformance? Do not test the value of __STDC__, because some compilers set it to 0 while being otherwise adequately conformant. */ #if !defined __STDC__ # error "Compiler does not advertise C89 conformance" #endif #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated as an "x". The following induces an error, until -std is added to get proper ANSI mode. Curiously \x00 != x always comes out true, for an array size at least. It is necessary to write \x00 == 0 to get something that is true only with -std. */ int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) '\''x'\'' int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' // Does the compiler advertise C99 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr. #define debug(...) dprintf (2, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK #error "your preprocessor is broken" #endif #if BIG_OK #else #error "your preprocessor is broken" #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case '\''s'\'': // string str = va_arg (args_copy, const char *); break; case '\''d'\'': // int number = va_arg (args_copy, int); break; case '\''f'\'': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[0] = argv[0][0]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || dynamic_array[ni.number - 1] != 543); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' // Does the compiler advertise C11 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu : ${R_HOME=`R RHOME`} if test -z "${R_HOME}"; then echo "could not determine R_HOME" exit 1 fi CC=`"${R_HOME}/bin/R" CMD config CC` CFLAGS=`"${R_HOME}/bin/R" CMD config CFLAGS` CPPFLAGS=`"${R_HOME}/bin/R" CMD config CPPFLAGS` ac_config_headers="$ac_config_headers src/config.h" ac_config_files="$ac_config_files src/Makevars" # Checks for programs. ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else $as_nop ac_file='' fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Checks for libraries. # Checks for header files. ac_header= ac_cache= for ac_item in $ac_header_c_list do if test $ac_cache; then ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then printf "%s\n" "#define $ac_item 1" >> confdefs.h fi ac_header= ac_cache= elif test $ac_header; then ac_cache=$ac_item else ac_header=$ac_item fi done if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes then : printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" if test "x$ac_cv_header_stdint_h" = xyes then : printf "%s\n" "#define HAVE_STDINT_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes then : printf "%s\n" "#define HAVE_STDLIB_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" "$ac_includes_default" if test "x$ac_cv_header_sys_time_h" = xyes then : printf "%s\n" "#define HAVE_SYS_TIME_H 1" >>confdefs.h fi # Checks for typedefs, structures, and compiler characteristics. ## nanotime_t is a 64-bit unsigned int ac_fn_c_find_uintX_t "$LINENO" "64" "ac_cv_c_uint64_t" case $ac_cv_c_uint64_t in #( no|yes) ;; #( *) printf "%s\n" "#define _UINT64_T 1" >>confdefs.h printf "%s\n" "#define uint64_t $ac_cv_c_uint64_t" >>confdefs.h ;; esac # Checks for library functions. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for error_at_line" >&5 printf %s "checking for error_at_line... " >&6; } if test ${ac_cv_lib_error_at_line+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { error_at_line (0, 0, "", 0, "an error occurred"); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_error_at_line=yes else $as_nop ac_cv_lib_error_at_line=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_error_at_line" >&5 printf "%s\n" "$ac_cv_lib_error_at_line" >&6; } if test $ac_cv_lib_error_at_line = no; then case " $LIBOBJS " in *" error.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS error.$ac_objext" ;; esac fi mb_cv_have_timer="no" ## mach_absolute_time (macOS) if test "${mb_cv_have_timer}" = "no"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mach_absolute_time" >&5 printf %s "checking for mach_absolute_time... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { uint64_t time; mach_timebase_info_data_t info; time = mach_absolute_time(); mach_timebase_info(&info); time * (info.numer / info.denom); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : mb_cv_have_timer="yes" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${mb_cv_have_timer}" >&5 printf "%s\n" "${mb_cv_have_timer}" >&6; } if test "${mb_cv_have_timer}" = "yes"; then printf "%s\n" "#define MB_HAVE_MACH_TIME 1" >>confdefs.h fi fi # clock_gettime if test "${mb_cv_have_timer}" = "no"; then # clock_gettime is included in glibc > 2.16, and librt before libs="${LIBS}" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5 printf %s "checking for library containing clock_gettime... " >&6; } if test ${ac_cv_search_clock_gettime+y} then : printf %s "(cached) " >&6 else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char clock_gettime (); int main (void) { return clock_gettime (); ; return 0; } _ACEOF for ac_lib in '' rt do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_clock_gettime=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_clock_gettime+y} then : break fi done if test ${ac_cv_search_clock_gettime+y} then : else $as_nop ac_cv_search_clock_gettime=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5 printf "%s\n" "$ac_cv_search_clock_gettime" >&6; } ac_res=$ac_cv_search_clock_gettime if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi # we have clock_gettime, now check for best clockid_t if test "${ac_cv_search_clock_gettime}" != "no"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for best clockid_t to use with clock_gettime" >&5 printf %s "checking for best clockid_t to use with clock_gettime... " >&6; } if test ${mb_cv_clockid_t+y} then : printf %s "(cached) " >&6 else $as_nop for clockid in CLOCK_MONOTONIC_PRECISE CLOCK_MONOTONIC_RAW \ CLOCK_HIGHRES CLOCK_MONOTONIC; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { struct timespec ts; clock_gettime($clockid, &ts); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : mb_cv_clockid_t="${clockid}" else $as_nop mb_cv_clockid_t="no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext test "${mb_cv_clockid_t}" = "no" || break done fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $mb_cv_clockid_t" >&5 printf "%s\n" "$mb_cv_clockid_t" >&6; } LIBS="${libs}" if test "${mb_cv_clockid_t}" = "no"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot find a monotonic clockid_t to use with clock_gettime; an alternative clock will be used" >&5 printf "%s\n" "$as_me: WARNING: cannot find a monotonic clockid_t to use with clock_gettime; an alternative clock will be used" >&2;} else printf "%s\n" "#define MB_HAVE_CLOCK_GETTIME 1" >>confdefs.h printf "%s\n" "#define MB_CLOCKID_T $mb_cv_clockid_t" >>confdefs.h if test "${mb_cv_clockid_t}" = "CLOCK_MONOTONIC_PRECISE"; then # CLOCK_MONOTONIC_PRECISE is FreeBSD-specific that requires __BSD_VISIBLE to use printf "%s\n" "#define __BSD_VISIBLE 1" >>confdefs.h fi if test "${ac_cv_search_clock_gettime}" != "none required"; then MB_LIBS=$ac_cv_search_clock_gettime fi mb_cv_have_timer="yes" fi fi fi # gethrtime if test "${mb_cv_have_timer}" = "no"; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined(sun) || defined(__sun) #define __EXTENSIONS__ #endif #include #include int main (void) { gethrtime(); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : mb_cv_gethrtime="yes" else $as_nop mb_cv_gethrtime="no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test "${mb_cv_gethrtime}" = "yes"; then printf "%s\n" "#define MB_HAVE_GETHRTIME 1" >>confdefs.h mb_cv_have_timer="yes" fi fi # gettimeofday if test "${mb_cv_have_timer}" = "no"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot find a high-resolution timer. Falling back to system time" >&5 printf "%s\n" "$as_me: WARNING: cannot find a high-resolution timer. Falling back to system time" >&2;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { struct timeval tv; gettimeofday(&tv, NULL); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : mb_cv_gettimeofday="yes" else $as_nop mb_cv_gettimeofday="no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test "${mb_cv_func_gettimeofday}" = "yes"; then printf "%s\n" "#define MB_HAVE_GETTIMEOFDAY 1" >>confdefs.h mb_cv_have_timer="yes" fi fi # nothing if test "${mb_cv_have_timer}" = "no"; then as_fn_error $? "cannot find a valid timing function." "$LINENO" 5 fi cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by microbenchmark $as_me VERSION, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Report bugs to ." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ microbenchmark config.status VERSION configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "src/config.h") CONFIG_HEADERS="$CONFIG_HEADERS src/config.h" ;; "src/Makevars") CONFIG_FILES="$CONFIG_FILES src/Makevars" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi microbenchmark/man/0000755000176200001440000000000014663136051014016 5ustar liggesusersmicrobenchmark/man/coalesce.Rd0000644000176200001440000000075313274411530016063 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/internal.R \name{coalesce} \alias{coalesce} \title{Return first non null argument.} \usage{ coalesce(...) } \arguments{ \item{...}{List of values.} } \value{ First non null element in \code{...}. } \description{ This function is useful when processing complex arguments with multiple possible defaults based on other arguments that may or may not have been provided. } \author{ Olaf Mersmann } \keyword{internal} microbenchmark/man/print.microbenchmark.Rd0000644000176200001440000000325513274411545020432 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/print.R \name{print.microbenchmark} \alias{print.microbenchmark} \title{Print \code{microbenchmark} timings.} \usage{ \method{print}{microbenchmark}(x, unit, order, signif, ...) } \arguments{ \item{x}{An object of class \code{microbenchmark}.} \item{unit}{What unit to print the timings in. Default value taken from to option \code{microbenchmark.unit} (see example).} \item{order}{If present, order results according to this column of the output.} \item{signif}{If present, limit the number of significant digits shown.} \item{...}{Passed to \code{print.data.frame}} } \description{ Print \code{microbenchmark} timings. } \note{ The available units are nanoseconds (\code{"ns"}), microseconds (\code{"us"}), milliseconds (\code{"ms"}), seconds (\code{"s"}) and evaluations per seconds (\code{"eps"}) and relative runtime compared to the best median time (\code{"relative"}). If the \code{multcomp} package is available a statistical ranking is calculated and displayed in compact letter display from in the \code{cld} column. } \examples{ a1 <- a2 <- a3 <- a4 <- numeric(0) res <- microbenchmark(a1 <- c(a1, 1), a2 <- append(a2, 1), a3[length(a3) + 1] <- 1, a4[[length(a4) + 1]] <- 1, times=100L) print(res) ## Change default unit to relative runtime options(microbenchmark.unit="relative") print(res) ## Change default unit to evaluations per second options(microbenchmark.unit="eps") print(res) } \seealso{ \code{\link{boxplot.microbenchmark}} and \code{\link{autoplot.microbenchmark}} for a plot methods. } \author{ Olaf Mersmann } microbenchmark/man/microbenchmark.Rd0000644000176200001440000001320414663136051017271 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/microbenchmark.R \name{microbenchmark} \alias{microbenchmark} \title{Sub-millisecond accurate timing of expression evaluation.} \usage{ microbenchmark( ..., list = NULL, times = 100L, unit = NULL, check = NULL, control = list(), setup = NULL ) } \arguments{ \item{...}{Expressions to benchmark.} \item{list}{List of unevaluated expressions to benchmark.} \item{times}{Number of times to evaluate each expression.} \item{unit}{Default unit used in \code{summary} and \code{print}.} \item{check}{A function to check if the expressions are equal. By default \code{NULL} which omits the check. In addition to a function, a string can be supplied. The string \sQuote{equal} will compare all values using \code{\link{all.equal}}, \sQuote{equivalent} will compare all values using \code{\link{all.equal}} and check.attributes = FALSE, and \sQuote{identical} will compare all values using \code{\link{identical}}.} \item{control}{List of control arguments. See Details.} \item{setup}{An unevaluated expression to be run (untimed) before each benchmark expression.} } \value{ Object of class \sQuote{microbenchmark}, a data frame with columns \code{expr} and \code{time}. \code{expr} contains the deparsed expression as passed to \code{microbenchmark} or the name of the argument if the expression was passed as a named argument. \code{time} is the measured execution time of the expression in nanoseconds. The order of the observations in the data frame is the order in which they were executed. } \description{ \code{microbenchmark} serves as a more accurate replacement of the often seen \code{system.time(replicate(1000, expr))} expression. It tries hard to accurately measure only the time it takes to evaluate \code{expr}. To achieved this, the sub-millisecond (supposedly nanosecond) accurate timing functions most modern operating systems provide are used. Additionally all evaluations of the expressions are done in C code to minimize any overhead. } \details{ This function is only meant for micro-benchmarking small pieces of source code and to compare their relative performance characteristics. You should generally avoid benchmarking larger chunks of your code using this function. Instead, try using the R profiler to detect hot spots and consider rewriting them in C/C++ or FORTRAN. The \code{control} list can contain the following entries: \describe{ \item{order}{the order in which the expressions are evaluated. \dQuote{random} (the default) randomizes the execution order, \dQuote{inorder} executes each expression in order and \dQuote{block} executes all repetitions of each expression as one block.} \item{warmup}{the number of iterations to run the timing code before evaluating the expressions in \dots. These warm-up iterations are used to estimate the timing overhead as well as spinning up the processor from any sleep or idle states it might be in. The default value is 2.} } } \note{ Depending on the underlying operating system, different methods are used for timing. On Windows the \code{QueryPerformanceCounter} interface is used to measure the time passed. For Linux the \code{clock_gettime} API is used and on Solaris the \code{gethrtime} function. Finally on MacOS X the, undocumented, \code{mach_absolute_time} function is used to avoid a dependency on the CoreServices Framework. Before evaluating each expression \code{times} times, the overhead of calling the timing functions and the C function call overhead are estimated. This estimated overhead is subtracted from each measured evaluation time. Should the resulting timing be negative, a warning is thrown and the respective value is replaced by \code{0}. If the timing is zero, a warning is raised. Should all evaluations result in one of the two error conditions described above, an error is raised. One platform on which the clock resolution is known to be too low to measure short runtimes with the required precision is Oracle\if{html}{\out{®}}\if{latex}{\out{\textregistered\ }}\if{text}{(R)} Solaris on some SPARC\if{html}{\out{®}}\if{latex}{\out{\textregistered\ }}\if{text}{(R)} hardware. Reports of other platforms with similar problems are welcome. Please contact the package maintainer. } \examples{ ## Measure the time it takes to dispatch a simple function call ## compared to simply evaluating the constant \code{NULL} f <- function() NULL res <- microbenchmark(NULL, f(), times=1000L) ## Print results: print(res) ## Plot results: boxplot(res) ## Pretty plot: if (requireNamespace("ggplot2")) { ggplot2::autoplot(res) } ## Example check usage my_check <- function(values) { all(sapply(values[-1], function(x) identical(values[[1]], x))) } f <- function(a, b) 2 + 2 a <- 2 ## Check passes microbenchmark(2 + 2, 2 + a, f(2, a), f(2, 2), check=my_check) \dontrun{ a <- 3 ## Check fails microbenchmark(2 + 2, 2 + a, f(2, a), f(2, 2), check=my_check) } ## Example setup usage set.seed(21) x <- rnorm(10) microbenchmark(x, rnorm(10), check=my_check, setup=set.seed(21)) ## Will fail without setup \dontrun{ microbenchmark(x, rnorm(10), check=my_check) } ## using check a <- 2 microbenchmark(2 + 2, 2 + a, sum(2, a), sum(2, 2), check='identical') microbenchmark(2 + 2, 2 + a, sum(2, a), sum(2, 2), check='equal') attr(a, 'abc') <- 123 microbenchmark(2 + 2, 2 + a, sum(2, a), sum(2, 2), check='equivalent') ## check='equal' will fail due to difference in attribute \dontrun{ microbenchmark(2 + 2, 2 + a, sum(2, a), sum(2, 2), check='equal') } } \seealso{ \code{\link{print.microbenchmark}} to display and \code{\link{boxplot.microbenchmark}} or \code{\link{autoplot.microbenchmark}} to plot the results. } \author{ Olaf Mersmann } microbenchmark/man/autoplot.microbenchmark.Rd0000644000176200001440000000242414665676430021155 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/autoplot.R \name{autoplot.microbenchmark} \alias{autoplot.microbenchmark} \title{Autoplot method for microbenchmark objects: Prettier graphs for microbenchmark using ggplot2} \usage{ autoplot.microbenchmark( object, ..., order = NULL, log = TRUE, unit = NULL, y_max = NULL ) } \arguments{ \item{object}{A microbenchmark object.} \item{\dots}{Ignored.} \item{order}{Names of output column(s) to order the results.} \item{log}{If \code{TRUE} the time axis will be on log scale.} \item{unit}{The unit to use for graph labels.} \item{y_max}{The upper limit of the y axis, in the unit automatically chosen for the time axis (defaults to the maximum value).} } \value{ A ggplot2 object. } \description{ Uses ggplot2 to produce a more legible graph of microbenchmark timings. } \examples{ if (requireNamespace("ggplot2", quietly = TRUE)) { tm <- microbenchmark(rchisq(100, 0), rchisq(100, 1), rchisq(100, 2), rchisq(100, 3), rchisq(100, 5), times=1000L) ggplot2::autoplot(tm) # add a custom title ggplot2::autoplot(tm) + ggplot2::ggtitle("my timings") } } \author{ Ari Friedman, Olaf Mersmann } microbenchmark/man/convert_to_unit.Rd0000644000176200001440000000204014663136051017522 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/internal.R \name{convert_to_unit} \alias{convert_to_unit} \title{Convert timings to different units.} \usage{ convert_to_unit(object, unit) } \arguments{ \item{object}{A \code{microbenchmark} object.} \item{unit}{A unit of time. See details.} } \value{ A matrix containing the converted time values with an attribute \code{unit} which is a printable name of the unit of time. } \description{ The following units of time are supported \describe{ \item{\dQuote{ns}}{Nanoseconds.} \item{\dQuote{us}}{Microseconds.} \item{\dQuote{ms}}{Milliseconds.} \item{\dQuote{s}}{Seconds.} \item{\dQuote{t}}{Appropriately prefixed time unit.} \item{\dQuote{hz}}{Hertz / evaluations per second.} \item{\dQuote{eps}}{Evaluations per second / Hertz.} \item{\dQuote{khz}}{Kilohertz / 1000s of evaluations per second.} \item{\dQuote{mhz}}{Megahertz / 1000000s of evaluations per second.} \item{\dQuote{f}}{Appropriately prefixed frequency unit.} } } \author{ Olaf Mersmann } \keyword{internal} microbenchmark/man/microtiming_precision.Rd0000644000176200001440000000153013274411545020701 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/microtiming_precision.R \name{microtiming_precision} \alias{microtiming_precision} \title{Estimate precision of timing routines.} \usage{ microtiming_precision(rounds = 100L, warmup = 2^18) } \arguments{ \item{rounds}{Number of measurements used to estimate the precision.} \item{warmup}{Number of iterations used to warm up the CPU.} } \value{ A vector of observed non-zero timings. } \description{ This function is currently experimental. Its main use is to judge the quality of the underlying timer implementation of the operating system. The function measures the overhead of timing a C function call \code{rounds} times and returns all non-zero timings observed. This can be used to judge the granularity and resolution of the timing subsystem. } \author{ Olaf Mersmann } microbenchmark/man/find_prefix.Rd0000644000176200001440000000156313274411545016610 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/internal.R \name{find_prefix} \alias{find_prefix} \title{Find SI prefix for unit} \usage{ find_prefix(x, f = min, minexp = -Inf, maxexp = Inf, mu = TRUE) } \arguments{ \item{x}{a numeric} \item{f}{function that produces the number from \code{x} that is used to determine the prefix, e.g. \code{\link[base]{min}} or \code{\link[stats]{median}}.} \item{minexp}{minimum (decimal) exponent to consider, e.g. -3 to suppress prefixes smaller than milli (m).} \item{maxexp}{maximum (decimal) exponent to consider, e.g. 3 to suppress prefixes larger than kilo (k).} \item{mu}{if \code{TRUE}, should a proper mu be used for micro, otherwise use u as ASCII-compatible replacement} } \value{ character with the SI prefix } \description{ Find SI prefix for unit } \author{ Claudia Beleites } \keyword{internal} microbenchmark/man/boxplot.microbenchmark.Rd0000644000176200001440000000137514663136051020765 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/boxplot.R \name{boxplot.microbenchmark} \alias{boxplot.microbenchmark} \title{Boxplot of \code{microbenchmark} timings.} \usage{ \method{boxplot}{microbenchmark}( x, unit = "t", log = TRUE, xlab, ylab, horizontal = FALSE, main = "microbenchmark timings", ... ) } \arguments{ \item{x}{A \code{microbenchmark} object.} \item{unit}{Unit in which the results be plotted.} \item{log}{Should times be plotted on log scale?} \item{xlab}{X axis label.} \item{ylab}{Y axis label.} \item{horizontal}{Switch X and Y axes.} \item{main}{Plot title.} \item{...}{Passed on to boxplot.formula.} } \description{ Boxplot of \code{microbenchmark} timings. } \author{ Olaf Mersmann } microbenchmark/man/determine_unit.Rd0000644000176200001440000000224614663136051017324 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/internal.R \name{determine_unit} \alias{determine_unit} \title{Normalize timing units to one of the supported values} \usage{ determine_unit(object = NULL, unit = NULL) } \arguments{ \item{object}{A 'microbenchmark' object.} \item{unit}{A unit of time. See details.} } \value{ A matrix containing the converted time values with an attribute \code{unit} which is a printable name of the unit of time. } \description{ We support the following units of time \describe{ \item{\dQuote{ns}, \dQuote{nanoseconds}}{} \item{\dQuote{us}, \dQuote{microseconds}}{} \item{\dQuote{ms}, \dQuote{milliseconds}}{} \item{\dQuote{s}, \dQuote{secs}, \dQuote{seconds}}{} \item{\dQuote{t}, \dQuote{time}}{Appropriately prefixed time unit.} \item{\dQuote{eps}}{Evaluations per second / Hertz.} \item{\dQuote{hz}}{Hertz / evaluations per second.} \item{\dQuote{khz}}{Kilohertz / 1000s of evaluations per second.} \item{\dQuote{mhz}}{Megahertz / 1000000s of evaluations per second.} \item{\dQuote{f}, \dQuote{frequency}}{Appropriately prefixed frequency unit.} } } \author{ Joshua M. Ulrich } \keyword{internal} microbenchmark/man/get_nanotime.Rd0000644000176200001440000000077613274411545016771 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/nanotime.R \name{get_nanotime} \alias{get_nanotime} \title{Return the current value of the platform timer.} \usage{ get_nanotime() } \description{ The current value of the most accurate timer of the platform is returned. This can be used as a time stamp for logging or similar purposes. Please note that there is no common reference, that is, the timer value cannot be converted to a date and time value. } \author{ Olaf Mersmann } microbenchmark/man/summary.microbenchmark.Rd0000644000176200001440000000220514663136051020764 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/summary.R \name{summary.microbenchmark} \alias{summary.microbenchmark} \title{Summarize \code{microbenchmark} timings.} \usage{ \method{summary}{microbenchmark}(object, unit, ..., include_cld = TRUE) } \arguments{ \item{object}{An object of class \code{microbenchmark}.} \item{unit}{What unit to print the timings in. If none is given, either the \code{unit} attribute of \code{object} or the option \code{microbenchmark.unit} is used and if neither is set \dQuote{t} is used.} \item{...}{Ignored} \item{include_cld}{Calculate \code{cld} using \code{multcomp::glht()} and add it to the output. Set to \code{FALSE} if the calculation takes too long.} } \value{ A \code{data.frame} containing the aggregated results. } \description{ Summarize \code{microbenchmark} timings. } \note{ The available units are nanoseconds (\code{"ns"}), microseconds (\code{"us"}), milliseconds (\code{"ms"}), seconds (\code{"s"}) and evaluations per seconds (\code{"eps"}) and relative runtime compared to the best median time (\code{"relative"}). } \seealso{ \code{\link{print.microbenchmark}} } microbenchmark/DESCRIPTION0000644000176200001440000000242514666123452014760 0ustar liggesusersPackage: microbenchmark Title: Accurate Timing Functions Description: Provides infrastructure to accurately measure and compare the execution time of R expressions. Authors@R: c(person("Olaf", "Mersmann", role=c("aut")), person("Claudia", "Beleites", role=c("ctb")), person("Rainer", "Hurling", role=c("ctb")), person("Ari", "Friedman", role=c("ctb")), person(given=c("Joshua","M."), family="Ulrich", role="cre", email="josh.m.ulrich@gmail.com")) URL: https://github.com/joshuaulrich/microbenchmark/ BugReports: https://github.com/joshuaulrich/microbenchmark/issues/ License: BSD_2_clause + file LICENSE Depends: R (>= 3.2.0) Imports: graphics, stats Suggests: ggplot2, multcomp, RUnit SystemRequirements: On a Unix-alike, one of the C functions mach_absolute_time (macOS), clock_gettime or gethrtime. If none of these is found, the obsolescent POSIX function gettimeofday will be tried. ByteCompile: yes Version: 1.5.0 NeedsCompilation: yes Packaged: 2024-09-03 22:50:33 UTC; josh Author: Olaf Mersmann [aut], Claudia Beleites [ctb], Rainer Hurling [ctb], Ari Friedman [ctb], Joshua M. Ulrich [cre] Maintainer: Joshua M. Ulrich Repository: CRAN Date/Publication: 2024-09-04 18:30:02 UTC