Removes the ability to build h5perf and h5perf_serial in standalone mode (#1897)

This feature has been broken for some time and lacks a clear use case.
This commit is contained in:
Dana Robinson 2022-07-20 05:38:07 -07:00 committed by GitHub
parent 4461678fb5
commit 363e3ecef8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 36 additions and 1454 deletions

View File

@ -132,6 +132,21 @@ New Features
Tools:
------
- Building h5perf/h5perf_serial in "standalone mode" has been removed
Building h5perf separately from the library was added circa 2008
in HDF5 1.6.8. It's unclear what purpose this serves and the current
implementation is currently broken. The existing files require
H5private.h and the symbols we use to determine how the copied
platform-independence scheme should be used come from H5pubconf.h,
which may not match the compiler being used to build standalone h5perf.
Due to the maintenance overhead and lack of a clear use case, support
for building h5perf and h5perf_serial separately from the HDF5 library
has been removed.
(DER - 2022/07/15)
- The perf tool has been removed
The small `perf` tool didn't really do anything special and the name

View File

@ -14,17 +14,7 @@
#ifndef IO_TIMER
#define IO_TIMER
#include "hdf5.h"
#include <time.h>
#ifdef H5_HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#ifdef H5_HAVE_WIN32_API
#include <winsock2.h>
#endif
#include "H5private.h"
/* The different types of timers we can have */
typedef enum timer_type_ {
@ -64,25 +54,17 @@ typedef struct io_time_t {
struct timeval sys_timer[NUM_TIMERS];
} io_time_t;
/* External function declarations */
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#endif
#ifdef STANDALONE
io_time_t *io_time_new(clock_type t);
void io_time_destroy(io_time_t *pt);
io_time_t *io_time_set(io_time_t *pt, timer_type t, int start_stop);
double io_time_get(io_time_t *pt, timer_type t);
#else
H5TOOLS_DLL io_time_t *io_time_new(clock_type t);
H5TOOLS_DLL void io_time_destroy(io_time_t *pt);
H5TOOLS_DLL io_time_t *io_time_set(io_time_t *pt, timer_type t, int start_stop);
H5TOOLS_DLL double io_time_get(io_time_t *pt, timer_type t);
#endif
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif
#endif /* IO_TIMER */

View File

@ -80,11 +80,6 @@
#define PIO_MPI 0x2
#define PIO_HDF5 0x4
#ifdef STANDALONE
#define DBL_EPSILON 2.2204460492503131e-16
#define H5_DBL_ABS_EQUAL(X, Y) (fabs((X) - (Y)) < DBL_EPSILON)
#endif
/* report 0.0 in case t is zero too */
#define MB_PER_SEC(bytes, t) (H5_DBL_ABS_EQUAL((t), 0.0) ? 0.0 : ((((double)bytes) / ONE_MB) / (t)))
@ -220,10 +215,8 @@ main(int argc, char *argv[])
int exit_value = EXIT_SUCCESS;
struct options *opts = NULL;
#ifndef STANDALONE
/* Initialize h5tools lib */
h5tools_init();
#endif
output = stdout;

View File

@ -13,15 +13,10 @@
#ifndef PIO_PERF_H
#define PIO_PERF_H
#ifndef STANDALONE
#include "io_timer.h"
#include "H5private.h"
#include "h5tools.h"
#include "h5tools_utils.h"
#else
#include "io_timer.h"
#include "pio_standalone.h"
#endif
#ifdef H5_HAVE_PARALLEL
extern MPI_Info h5_io_info_g; /* MPI INFO object for IO */

View File

@ -190,10 +190,8 @@ main(int argc, char *argv[])
int exit_value = EXIT_SUCCESS;
struct options *opts = NULL;
#ifndef STANDALONE
/* Initialize h5tools lib */
h5tools_init();
#endif
output = stdout;

View File

@ -13,15 +13,10 @@
#ifndef SIO_PERF_H
#define SIO_PERF_H
#ifndef STANDALONE
#include "io_timer.h"
#include "H5private.h"
#include "h5tools.h"
#include "h5tools_utils.h"
#else
#include "io_timer.h"
#include "sio_standalone.h"
#endif
/* setup the dataset no fill option if this is v1.5 or more */
#if H5_VERS_MAJOR > 1 || H5_VERS_MINOR > 4

View File

@ -1,39 +1,9 @@
cmake_minimum_required (VERSION 3.12)
project (HDF5_TOOLS_TEST_PERFORM C)
# --------------------------------------------------------------------
# Add the executables
# --------------------------------------------------------------------
if (HDF5_BUILD_PERFORM_STANDALONE)
#-- Adding test for h5perf_serial_alone - io_timer.c includes
set (h5perf_serial_alone_SOURCES
${HDF5_TOOLS_DIR}/lib/io_timer.c
${HDF5_TOOLS_SRC_H5PERF_SOURCE_DIR}/sio_perf.c
${HDF5_TOOLS_SRC_H5PERF_SOURCE_DIR}/sio_engine.c
${HDF5_TOOLS_TEST_PERFORM_SOURCE_DIR}/sio_standalone.c
)
add_executable (h5perf_serial_alone ${h5perf_serial_alone_SOURCES})
target_include_directories (h5perf_serial_alone PRIVATE "${HDF5_SRC_DIR};${HDF5_SRC_BINARY_DIR};${HDF5_TOOLS_DIR}/lib;${HDF5_TOOLS_SRC_H5PERF_SOURCE_DIR};${HDF5_TOOLS_TEST_PERFORM_SOURCE_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
if (NOT BUILD_SHARED_LIBS)
TARGET_C_PROPERTIES (h5perf_serial_alone STATIC)
target_link_libraries (h5perf_serial_alone PRIVATE ${HDF5_LIB_TARGET} "$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_LIBRARIES}>")
else ()
TARGET_C_PROPERTIES (h5perf_serial_alone SHARED)
target_link_libraries (h5perf_serial_alone PRIVATE ${HDF5_LIBSH_TARGET} "$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_LIBRARIES}>")
endif ()
set_target_properties (h5perf_serial_alone PROPERTIES FOLDER perform)
set_property (TARGET h5perf_serial_alone APPEND PROPERTY COMPILE_DEFINITIONS STANDALONE)
#-----------------------------------------------------------------------------
# Add Target to clang-format
#-----------------------------------------------------------------------------
if (HDF5_ENABLE_FORMATTERS)
clang_format (HDF5_TOOLS_TEST_PERFORM_h5perf_serial_alone_FORMAT h5perf_serial_alone)
endif ()
endif ()
#-- Adding test for chunk
#-----------------------------------------------------------------------------
# chunk
#-----------------------------------------------------------------------------
set (chunk_SOURCES
${HDF5_TOOLS_TEST_PERFORM_SOURCE_DIR}/chunk.c
)
@ -48,14 +18,13 @@ else ()
endif ()
set_target_properties (chunk PROPERTIES FOLDER perform)
#-----------------------------------------------------------------------------
# Add Target to clang-format
#-----------------------------------------------------------------------------
if (HDF5_ENABLE_FORMATTERS)
clang_format (HDF5_TOOLS_TEST_PERFORM_chunk_FORMAT chunk)
endif ()
#-- Adding test for iopipe
#-----------------------------------------------------------------------------
# iopipe
#-----------------------------------------------------------------------------
set (iopipe_SOURCES
${HDF5_TOOLS_TEST_PERFORM_SOURCE_DIR}/iopipe.c
)
@ -70,14 +39,13 @@ else ()
endif ()
set_target_properties (iopipe PROPERTIES FOLDER perform)
#-----------------------------------------------------------------------------
# Add Target to clang-format
#-----------------------------------------------------------------------------
if (HDF5_ENABLE_FORMATTERS)
clang_format (HDF5_TOOLS_TEST_PERFORM_iopipe_FORMAT iopipe)
endif ()
#-- Adding test for chunk_cache
#-----------------------------------------------------------------------------
# chunk_cache
#-----------------------------------------------------------------------------
set (chunk_cache_SOURCES
${HDF5_TOOLS_TEST_PERFORM_SOURCE_DIR}/chunk_cache.c
)
@ -92,14 +60,13 @@ else ()
endif ()
set_target_properties (chunk_cache PROPERTIES FOLDER perform)
#-----------------------------------------------------------------------------
# Add Target to clang-format
#-----------------------------------------------------------------------------
if (HDF5_ENABLE_FORMATTERS)
clang_format (HDF5_TOOLS_TEST_PERFORM_chunk_cache_FORMAT chunk_cache)
endif ()
#-- Adding test for overhead
#-----------------------------------------------------------------------------
# overhead
#-----------------------------------------------------------------------------
set (overhead_SOURCES
${HDF5_TOOLS_TEST_PERFORM_SOURCE_DIR}/overhead.c
)
@ -114,14 +81,13 @@ else ()
endif ()
set_target_properties (overhead PROPERTIES FOLDER perform)
#-----------------------------------------------------------------------------
# Add Target to clang-format
#-----------------------------------------------------------------------------
if (HDF5_ENABLE_FORMATTERS)
clang_format (HDF5_TOOLS_TEST_PERFORM_overhead_FORMAT overhead)
endif ()
#-- Adding test for perf_meta
#-----------------------------------------------------------------------------
# perf_meta
#-----------------------------------------------------------------------------
set (perf_meta_SOURCES
${HDF5_TOOLS_TEST_PERFORM_SOURCE_DIR}/perf_meta.c
)
@ -136,14 +102,13 @@ else ()
endif ()
set_target_properties (perf_meta PROPERTIES FOLDER perform)
#-----------------------------------------------------------------------------
# Add Target to clang-format
#-----------------------------------------------------------------------------
if (HDF5_ENABLE_FORMATTERS)
clang_format (HDF5_TOOLS_TEST_PERFORM_perf_meta_FORMAT perf_meta)
endif ()
#-- Adding test for zip_perf
#-----------------------------------------------------------------------------
# zip_perf
#-----------------------------------------------------------------------------
set (zip_perf_SOURCES
${HDF5_TOOLS_TEST_PERFORM_SOURCE_DIR}/zip_perf.c
)
@ -158,45 +123,10 @@ else ()
endif ()
set_target_properties (zip_perf PROPERTIES FOLDER perform)
#-----------------------------------------------------------------------------
# Add Target to clang-format
#-----------------------------------------------------------------------------
if (HDF5_ENABLE_FORMATTERS)
clang_format (HDF5_TOOLS_TEST_PERFORM_zip_perf_FORMAT zip_perf)
endif ()
if (H5_HAVE_PARALLEL AND HDF5_TEST_PARALLEL)
if (HDF5_BUILD_PERFORM_STANDALONE)
#-- Adding test for h5perf
set (h5perf_alone_SOURCES
${HDF5_TOOLS_DIR}/lib/io_timer.c
${HDF5_TOOLS_SRC_H5PERF_SOURCE_DIR}/pio_perf.c
${HDF5_TOOLS_SRC_H5PERF_SOURCE_DIR}/pio_engine.c
${HDF5_TOOLS_TEST_PERFORM_SOURCE_DIR}/pio_standalone.c
)
add_executable (h5perf_alone ${h5perf_alone_SOURCES})
target_include_directories (h5perf_alone PRIVATE "${HDF5_SRC_DIR};${HDF5_SRC_BINARY_DIR};${HDF5_TOOLS_DIR}/lib;${HDF5_TOOLS_SRC_H5PERF_SOURCE_DIR};${HDF5_TOOLS_TEST_PERFORM_SOURCE_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
if (NOT BUILD_SHARED_LIBS)
TARGET_C_PROPERTIES (h5perf_alone STATIC)
target_link_libraries (h5perf_alone PRIVATE ${HDF5_LIB_TARGET} ${LINK_LIBS} "$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_LIBRARIES}>")
else ()
TARGET_C_PROPERTIES (h5perf_alone SHARED)
target_link_libraries (h5perf_alone PRIVATE ${HDF5_LIBSH_TARGET} ${LINK_LIBS} "$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_LIBRARIES}>")
endif ()
set_target_properties (h5perf_alone PROPERTIES FOLDER perform)
set_property (TARGET h5perf_alone
APPEND PROPERTY COMPILE_DEFINITIONS STANDALONE
)
#-----------------------------------------------------------------------------
# Add Target to clang-format
#-----------------------------------------------------------------------------
if (HDF5_ENABLE_FORMATTERS)
clang_format (HDF5_TOOLS_TEST_PERFORM_h5perf_alone_FORMAT h5perf_alone)
endif ()
endif ()
endif ()
if (HDF5_TEST_TOOLS)
include (CMakeTests.cmake)
endif ()

View File

@ -72,10 +72,6 @@ if (HDF5_TEST_SERIAL)
DEPENDS "PERFORM_h5perform-clearall-objects"
)
if (HDF5_BUILD_PERFORM_STANDALONE)
add_test (NAME PERFORM_h5perf_serial_alone COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5perf_serial_alone>)
endif ()
if (HDF5_ENABLE_USING_MEMCHECKER)
add_test (NAME PERFORM_chunk COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:chunk>)
else ()
@ -194,7 +190,4 @@ endif ()
if (H5_HAVE_PARALLEL AND HDF5_TEST_PARALLEL)
add_test (NAME MPI_TEST_PERFORM_h5perf COMMAND ${MPIEXEC_EXECUTABLE} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_MAX_NUMPROCS} ${MPIEXEC_PREFLAGS} $<TARGET_FILE:h5perf> ${MPIEXEC_POSTFLAGS})
if (HDF5_BUILD_PERFORM_STANDALONE)
add_test (NAME MPI_TEST_PERFORM_h5perf_alone COMMAND ${MPIEXEC_EXECUTABLE} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_MAX_NUMPROCS} ${MPIEXEC_PREFLAGS} $<TARGET_FILE:h5perf_alone> ${MPIEXEC_POSTFLAGS})
endif ()
endif ()

View File

@ -1,26 +0,0 @@
#! /bin/sh -x
#
# Copyright by The HDF Group.
# Copyright by the Board of Trustees of the University of Illinois.
# All rights reserved.
#
# This file is part of HDF5. The full HDF5 copyright notice, including
# terms governing use, modification, and redistribution, is contained in
# the COPYING file, which can be found at the root of the source code
# distribution tree, or in https://www.hdfgroup.org/licenses.
# If you do not have access to either file, you may request a copy from
# help@hdfgroup.org.
#
# Name: build_h5perf_alone.sh
#
# Puporse: Build the h5perf tool by standalone mode.
#
# Created: Albert Cheng, 2005/09/18
#
# Modification:
#
# Default to use h5pcc to build h5perf unless $H5CC is defined.
#
h5pcc=${H5CC:-h5pcc}
$h5pcc -DSTANDALONE pio_perf.c pio_engine.c pio_timer.c -o h5perf

View File

@ -1,26 +0,0 @@
#! /bin/sh -x
#
# Copyright by The HDF Group.
# Copyright by the Board of Trustees of the University of Illinois.
# All rights reserved.
#
# This file is part of HDF5. The full HDF5 copyright notice, including
# terms governing use, modification, and redistribution, is contained in
# the COPYING file, which can be found at the root of the source code
# distribution tree, or in https://www.hdfgroup.org/licenses.
# If you do not have access to either file, you may request a copy from
# help@hdfgroup.org.
#
# Name: build_h5perf_serial_alone.sh
#
# Puporse: Build the h5perf_serial tool by standalone mode.
#
# Created: Christian Chilan, 2008/09/02
#
# Modification:
#
# Default to use h5cc to build h5perf_serial unless $H5CC is defined.
#
h5cc=${H5CC:-h5cc}
$h5cc -DSTANDALONE sio_perf.c sio_engine.c sio_timer.c -o h5perf_serial

View File

@ -1,154 +0,0 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Copyright by The HDF Group. *
* All rights reserved. *
* *
* This file is part of HDF5. The full HDF5 copyright notice, including *
* terms governing use, modification, and redistribution, is contained in *
* the COPYING file, which can be found at the root of the source code *
* distribution tree, or in https://www.hdfgroup.org/licenses. *
* If you do not have access to either file, you may request a copy from *
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* This file contains the definition of functions required to build h5perf in
* STANDALONE mode.
* Created: Christian Chilan, 2005/5/18.
*/
#include "pio_perf.h"
/** From h5tools_utils.c **/
/* global variables */
int nCols = 80;
int
get_option(int argc, const char **argv, const char *opts, const struct h5_long_options *l_opts)
{
static int sp = 1; /* character index in current token */
int opt_opt = '?'; /* option character passed back to user */
if (sp == 1) {
/* check for more flag-like tokens */
if (H5_optind >= argc || argv[H5_optind][0] != '-' || argv[H5_optind][1] == '\0') {
return EOF;
}
else if (HDstrcmp(argv[H5_optind], "--") == 0) {
H5_optind++;
return EOF;
}
}
if (sp == 1 && argv[H5_optind][0] == '-' && argv[H5_optind][1] == '-') {
/* long command line option */
const char *arg = &argv[H5_optind][2];
int i;
for (i = 0; l_opts && l_opts[i].name; i++) {
size_t len = HDstrlen(l_opts[i].name);
if (HDstrncmp(arg, l_opts[i].name, len) == 0) {
/* we've found a matching long command line flag */
opt_opt = l_opts[i].shortval;
if (l_opts[i].has_arg != no_arg) {
if (arg[len] == '=') {
H5_optarg = &arg[len + 1];
}
else if (H5_optind < (argc - 1) && argv[H5_optind + 1][0] != '-') {
H5_optarg = argv[++H5_optind];
}
else if (l_opts[i].has_arg == require_arg) {
if (H5_opterr)
HDfprintf(stderr, "%s: option required for \"--%s\" flag\n", argv[0], arg);
opt_opt = '?';
}
}
else {
if (arg[len] == '=') {
if (H5_opterr)
HDfprintf(stderr, "%s: no option required for \"%s\" flag\n", argv[0], arg);
opt_opt = '?';
}
H5_optarg = NULL;
}
break;
}
}
if (l_opts[i].name == NULL) {
/* exhausted all of the l_opts we have and still didn't match */
if (H5_opterr)
HDfprintf(stderr, "%s: unknown option \"%s\"\n", argv[0], arg);
opt_opt = '?';
}
H5_optind++;
sp = 1;
}
else {
char *cp; /* pointer into current token */
/* short command line option */
opt_opt = argv[H5_optind][sp];
if (opt_opt == ':' || (cp = strchr(opts, opt_opt)) == 0) {
if (H5_opterr)
HDfprintf(stderr, "%s: unknown option \"%c\"\n", argv[0], opt_opt);
/* if no chars left in this token, move to next token */
if (argv[H5_optind][++sp] == '\0') {
H5_optind++;
sp = 1;
}
return '?';
}
if (*++cp == ':') {
/* if a value is expected, get it */
if (argv[H5_optind][sp + 1] != '\0') {
/* flag value is rest of current token */
H5_optarg = &argv[H5_optind++][sp + 1];
}
else if (++H5_optind >= argc) {
if (H5_opterr)
HDfprintf(stderr, "%s: value expected for option \"%c\"\n", argv[0], opt_opt);
opt_opt = '?';
}
else {
/* flag value is next token */
H5_optarg = argv[H5_optind++];
}
sp = 1;
}
else {
/* set up to look at next char in token, next time */
if (argv[H5_optind][++sp] == '\0') {
/* no more in current token, so setup next token */
H5_optind++;
sp = 1;
}
H5_optarg = NULL;
}
}
/* return the current flag character found */
return opt_opt;
}
void
print_version(const char *progname)
{
printf("%s: Version %u.%u.%u%s%s\n", progname, H5_VERS_MAJOR, H5_VERS_MINOR, H5_VERS_RELEASE,
H5_VERS_SUBRELEASE[0] ? "-" : "", H5_VERS_SUBRELEASE);
}

View File

@ -1,472 +0,0 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Copyright by The HDF Group. *
* All rights reserved. *
* *
* This file is part of HDF5. The full HDF5 copyright notice, including *
* terms governing use, modification, and redistribution, is contained in *
* the COPYING file, which can be found at the root of the source code *
* distribution tree, or in https://www.hdfgroup.org/licenses. *
* If you do not have access to either file, you may request a copy from *
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#ifndef PIO_STANDALONE_H
#define PIO_STANDALONE_H
/* Header file for building h5perf by standalone mode.
* Created: Christian Chilan, 2005/5/18.
*/
/** From H5private.h **/
#include "H5public.h" /* Include Public Definitions */
#include <assert.h>
#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
#include <float.h>
#include <limits.h>
#include <math.h>
#include <signal.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
* Redefine all the POSIX functions. We should never see a POSIX
* function (or any other non-HDF5 function) in the source!
*/
#define HDabort() abort()
#define HDabs(X) abs(X)
#ifdef H5_HAVE_WIN32_API
#define HDaccess(F, M) _access(F, M)
#define R_OK 4 /* Test for read permission. */
#define W_OK 2 /* Test for write permission. */
#define X_OK 1 /* Test for execute permission. */
#define F_OK 0 /* Test for existence. */
#else /* H5_HAVE_WIN32_API */
#define HDaccess(F, M) access(F, M)
#ifndef F_OK
#define F_OK 00
#define W_OK 02
#define R_OK 04
#endif
#endif /* H5_HAVE_WIN32_API */
#define HDacos(X) acos(X)
#ifdef H5_HAVE_ALARM
#define HDalarm(N) alarm(N)
#else /* H5_HAVE_ALARM */
#define HDalarm(N) (0)
#endif /* H5_HAVE_ALARM */
#define HDasctime(T) asctime(T)
#define HDasin(X) asin(X)
#define HDasprintf asprintf /*varargs*/
#define HDassert(X) assert(X)
#define HDatan(X) atan(X)
#define HDatan2(X, Y) atan2(X, Y)
#define HDatexit(F) atexit(F)
#define HDatof(S) atof(S)
#define HDatoi(S) atoi(S)
#define HDatol(S) atol(S)
#define HDbsearch(K, B, N, Z, F) bsearch(K, B, N, Z, F)
#define HDcalloc(N, Z) calloc(N, Z)
#define HDceil(X) ceil(X)
#define HDcfgetispeed(T) cfgetispeed(T)
#define HDcfgetospeed(T) cfgetospeed(T)
#define HDcfsetispeed(T, S) cfsetispeed(T, S)
#define HDcfsetospeed(T, S) cfsetospeed(T, S)
#define HDchdir(S) chdir(S)
#define HDchmod(S, M) chmod(S, M)
#define HDchown(S, O, G) chown(S, O, G)
#define HDclearerr(F) clearerr(F)
#define HDclock() clock()
#define HDclose(F) close(F)
#define HDclosedir(D) closedir(D)
#define HDcos(X) cos(X)
#define HDcosh(X) cosh(X)
#define HDcreat(S, M) creat(S, M)
#define HDctermid(S) ctermid(S)
#define HDctime(T) ctime(T)
#define HDcuserid(S) cuserid(S)
#define HDdifftime(X, Y) difftime(X, Y)
#define HDdiv(X, Y) div(X, Y)
#define HDdup(F) dup(F)
#define HDdup2(F, I) dup2(F, I)
#define HDexecv(S, AV) execv(S, AV)
#define HDexecve(S, AV, E) execve(S, AV, E)
#define HDexecvp(S, AV) execvp(S, AV)
#define HDexit(N) exit(N)
#define HD_exit(N) _exit(N)
#define HDexp(X) exp(X)
#define HDfabs(X) fabs(X)
#define HDfabsf(X) fabsf(X)
#define HDfabsl(X) fabsl(X)
#define HDfclose(F) fclose(F)
/* fcntl() variable arguments */
#define HDfdopen(N, S) fdopen(N, S)
#define HDfeof(F) feof(F)
#define HDferror(F) ferror(F)
#define HDfflush(F) fflush(F)
#define HDfgetc(F) fgetc(F)
#define HDfgetpos(F, P) fgetpos(F, P)
#define HDfgets(S, N, F) fgets(S, N, F)
#ifdef H5_HAVE_WIN32_API
#define HDfileno(F) _fileno(F)
#else /* H5_HAVE_WIN32_API */
#define HDfileno(F) fileno(F)
#endif /* H5_HAVE_WIN32_API */
#define HDfloor(X) floor(X)
#define HDfmod(X, Y) fmod(X, Y)
#define HDfopen(S, M) fopen(S, M)
#define HDfork() fork()
#define HDfpathconf(F, N) fpathconf(F, N)
#define HDfprintf fprintf
#define HDfputc(C, F) fputc(C, F)
#define HDfputs(S, F) fputs(S, F)
#define HDfread(M, Z, N, F) fread(M, Z, N, F)
#define HDfree(M) free(M)
#define HDfreopen(S, M, F) freopen(S, M, F)
#define HDfrexp(X, N) frexp(X, N)
#define HDfrexpf(X, N) frexpf(X, N)
#define HDfrexpl(X, N) frexpl(X, N)
/* fscanf() variable arguments */
#ifdef H5_HAVE_FSEEKO
#define HDfseek(F, O, W) fseeko(F, O, W)
#else
#define HDfseek(F, O, W) fseek(F, O, W)
#endif
#define HDfsetpos(F, P) fsetpos(F, P)
/* definitions related to the file stat utilities.
* Windows have its own function names.
* For Unix, if off_t is not 64bit big, try use the pseudo-standard
* xxx64 versions if available.
*/
#ifdef H5_HAVE_WIN32_API
#define HDfstat(F, B) _fstati64(F, B)
#define HDlstat(S, B) _lstati64(S, B)
#define HDstat(S, B) _stati64(S, B)
typedef struct _stati64 h5_stat_t;
typedef __int64 h5_stat_size_t;
#define HDoff_t __int64
#elif H5_SIZEOF_OFF_T != 8 && H5_SIZEOF_OFF64_T == 8 && defined(H5_HAVE_STAT64)
#define HDfstat(F, B) fstat64(F, B)
#define HDlstat(S, B) lstat64(S, B)
#define HDstat(S, B) stat64(S, B)
typedef struct stat64 h5_stat_t;
typedef off64_t h5_stat_size_t;
#define HDoff_t off64_t
#else
#define HDfstat(F, B) fstat(F, B)
#define HDlstat(S, B) lstat(S, B)
#define HDstat(S, B) stat(S, B)
typedef struct stat h5_stat_t;
typedef off_t h5_stat_size_t;
#define HDoff_t off_t
#endif
#define HDftell(F) ftell(F)
#define HDftruncate(F, L) ftruncate(F, L)
#define HDfwrite(M, Z, N, F) fwrite(M, Z, N, F)
#define HDgetc(F) getc(F)
#define HDgetchar() getchar()
#define HDgetcwd(S, Z) getcwd(S, Z)
#define HDgetegid() getegid()
#define HDgetenv(S) getenv(S)
#define HDgeteuid() geteuid()
#define HDgetgid() getgid()
#define HDgetgrgid(G) getgrgid(G)
#define HDgetgrnam(S) getgrnam(S)
#define HDgetgroups(Z, G) getgroups(Z, G)
#ifdef H5_HAVE_WIN32_API
#define HDgetlogin() Wgetlogin()
#else /* H5_HAVE_WIN32_API */
#define HDgetlogin() getlogin()
#endif /* H5_HAVE_WIN32_API */
#define HDgetpgrp() getpgrp()
#define HDgetpid() getpid()
#define HDgetppid() getppid()
#define HDgetpwnam(S) getpwnam(S)
#define HDgetpwuid(U) getpwuid(U)
#define HDgetrusage(X, S) getrusage(X, S)
/* Don't define a macro for gets() - it was removed in C11 */
#ifdef H5_HAVE_WIN32_API
H5_DLL int Wgettimeofday(struct timeval *tv, struct timezone *tz);
#define HDgettimeofday(V, Z) Wgettimeofday(V, Z)
#else /* H5_HAVE_WIN32_API */
#define HDgettimeofday(S, P) gettimeofday(S, P)
#endif /* H5_HAVE_WIN32_API */
#define HDgetuid() getuid()
#define HDgmtime(T) gmtime(T)
#define HDisalnum(C) isalnum((int)(C)) /*cast for solaris warning*/
#define HDisalpha(C) isalpha((int)(C)) /*cast for solaris warning*/
#define HDisatty(F) isatty(F)
#define HDiscntrl(C) iscntrl((int)(C)) /*cast for solaris warning*/
#define HDisdigit(C) isdigit((int)(C)) /*cast for solaris warning*/
#define HDisgraph(C) isgraph((int)(C)) /*cast for solaris warning*/
#define HDislower(C) islower((int)(C)) /*cast for solaris warning*/
#define HDisprint(C) isprint((int)(C)) /*cast for solaris warning*/
#define HDispunct(C) ispunct((int)(C)) /*cast for solaris warning*/
#define HDisspace(C) isspace((int)(C)) /*cast for solaris warning*/
#define HDisupper(C) isupper((int)(C)) /*cast for solaris warning*/
#define HDisxdigit(C) isxdigit((int)(C)) /*cast for solaris warning*/
#define HDkill(P, S) kill(P, S)
#define HDlabs(X) labs(X)
#define HDldexp(X, N) ldexp(X, N)
#define HDldiv(X, Y) ldiv(X, Y)
#define HDlink(OLD, NEW) link(OLD, NEW)
#define HDlocaleconv() localeconv()
#define HDlocaltime(T) localtime(T)
#define HDlog(X) log(X)
#define HDlog10(X) log10(X)
#define HDlongjmp(J, N) longjmp(J, N)
#ifdef H5_HAVE_WIN32_API
#define HDlseek(F, O, W) _lseeki64(F, O, W)
#else
#ifdef H5_HAVE_LSEEK64
#define HDlseek(F, O, W) lseek64(F, O, W)
#else
#define HDlseek(F, O, W) lseek(F, O, W)
#endif
#endif
#define HDmalloc(Z) malloc(Z)
#define HDposix_memalign(P, A, Z) posix_memalign(P, A, Z)
#define HDmblen(S, N) mblen(S, N)
#define HDmbstowcs(P, S, Z) mbstowcs(P, S, Z)
#define HDmbtowc(P, S, Z) mbtowc(P, S, Z)
#define HDmemchr(S, C, Z) memchr(S, C, Z)
#define HDmemcmp(X, Y, Z) memcmp(X, Y, Z)
/*
* The (char*) casts are required for the DEC when optimizations are turned
* on and the source and/or destination are not aligned.
*/
#define HDmemcpy(X, Y, Z) memcpy((char *)(X), (const char *)(Y), Z)
#define HDmemmove(X, Y, Z) memmove((char *)(X), (const char *)(Y), Z)
/*
* The (void*) cast just avoids a compiler warning in H5_HAVE_VISUAL_STUDIO
*/
#ifdef H5_HAVE_VISUAL_STUDIO
#define HDmemset(X, C, Z) memset((void *)(X), C, Z)
#else /* H5_HAVE_VISUAL_STUDIO */
#define HDmemset(X, C, Z) memset(X, C, Z)
#endif /* H5_HAVE_VISUAL_STUDIO */
#ifdef H5_HAVE_WIN32_API
#define HDmkdir(S, M) _mkdir(S)
#else /* H5_HAVE_WIN32_API */
#define HDmkdir(S, M) mkdir(S, M)
#endif /* H5_HAVE_WIN32_API */
#define HDmkfifo(S, M) mkfifo(S, M)
#define HDmktime(T) mktime(T)
#define HDmodf(X, Y) modf(X, Y)
#ifdef _O_BINARY
#define HDopen(S, F, M) open(S, F | _O_BINARY, M)
#else
#define HDopen(S, F, M) open(S, F, M)
#endif
#define HDopendir(S) opendir(S)
#define HDpathconf(S, N) pathconf(S, N)
#define HDpause() pause()
#define HDperror(S) perror(S)
#define HDpipe(F) pipe(F)
#define HDpow(X, Y) pow(X, Y)
/* printf() variable arguments */
#define HDprintf(...) HDfprintf(stdout, __VA_ARGS__)
#define HDputc(C, F) putc(C, F)
#define HDputchar(C) putchar(C)
#define HDputs(S) puts(S)
#define HDqsort(M, N, Z, F) qsort(M, N, Z, F)
#define HDraise(N) raise(N)
#ifdef H5_HAVE_RAND_R
#define HDrandom() HDrand()
H5_DLL int HDrand(void);
#elif H5_HAVE_RANDOM
#define HDrand() random()
#define HDrandom() random()
#else
#define HDrand() rand()
#define HDrandom() rand()
#endif
#define HDread(F, M, Z) read(F, M, Z)
#define HDreaddir(D) readdir(D)
#define HDrealloc(M, Z) realloc(M, Z)
#define HDremove(S) remove(S)
#define HDrename(OLD, NEW) rename(OLD, NEW)
#define HDrewind(F) rewind(F)
#define HDrewinddir(D) rewinddir(D)
#define HDrmdir(S) rmdir(S)
/* scanf() variable arguments */
#define HDsetbuf(F, S) setbuf(F, S)
#define HDsetgid(G) setgid(G)
#define HDsetjmp(J) setjmp(J)
#define HDsetlocale(N, S) setlocale(N, S)
#define HDsetpgid(P, PG) setpgid(P, PG)
#define HDsetsid() setsid()
#define HDsetuid(U) setuid(U)
/* Windows does not permit setting the buffer size to values
less than 2. */
#ifndef H5_HAVE_WIN32_API
#define HDsetvbuf(F, S, M, Z) setvbuf(F, S, M, Z)
#else
#define HDsetvbuf(F, S, M, Z) setvbuf(F, S, M, (Z > 1 ? Z : 2))
#endif
#define HDsigaddset(S, N) sigaddset(S, N)
#define HDsigdelset(S, N) sigdelset(S, N)
#define HDsigemptyset(S) sigemptyset(S)
#define HDsigfillset(S) sigfillset(S)
#define HDsigismember(S, N) sigismember(S, N)
#define HDsiglongjmp(J, N) siglongjmp(J, N)
#define HDsignal(N, F) signal(N, F)
#define HDsigpending(S) sigpending(S)
#define HDsigprocmask(H, S, O) sigprocmask(H, S, O)
#define HDsigsetjmp(J, N) sigsetjmp(J, N)
#define HDsigsuspend(S) sigsuspend(S)
#define HDsin(X) sin(X)
#define HDsinh(X) sinh(X)
#define HDsleep(N) sleep(N)
#define HDsnprintf snprintf /*varargs*/
#define HDsprintf sprintf /*varargs*/
#define HDsqrt(X) sqrt(X)
#ifdef H5_HAVE_RAND_R
H5_DLL void HDsrand(unsigned int seed);
#define HDsrandom(S) HDsrand(S)
#elif H5_HAVE_RANDOM
#define HDsrand(S) srandom(S)
#define HDsrandom(S) srandom(S)
#else
#define HDsrand(S) srand(S)
#define HDsrandom(S) srand(S)
#endif
#ifdef H5_HAVE_WIN32_API
#define HDstrcasecmp(A, B) _stricmp(A, B)
#else
#define HDstrcasecmp(X, Y) strcasecmp(X, Y)
#endif
#define HDstrcat(X, Y) strcat(X, Y)
#define HDstrchr(S, C) strchr(S, C)
#define HDstrcmp(X, Y) strcmp(X, Y)
#define HDstrcoll(X, Y) strcoll(X, Y)
#define HDstrcpy(X, Y) strcpy(X, Y)
#define HDstrcspn(X, Y) strcspn(X, Y)
#define HDstrerror(N) strerror(N)
#define HDstrftime(S, Z, F, T) strftime(S, Z, F, T)
#define HDstrlen(S) strlen(S)
#define HDstrncat(X, Y, Z) strncat(X, Y, Z)
#define HDstrncmp(X, Y, Z) strncmp(X, Y, Z)
#define HDstrncpy(X, Y, Z) strncpy(X, Y, Z)
#define HDstrpbrk(X, Y) strpbrk(X, Y)
#define HDstrrchr(S, C) strrchr(S, C)
#define HDstrspn(X, Y) strspn(X, Y)
#define HDstrstr(X, Y) strstr(X, Y)
#define HDstrtod(S, R) strtod(S, R)
#define HDstrtok(X, Y) strtok(X, Y)
#define HDstrtol(S, R, N) strtol(S, R, N)
H5_DLL int64_t HDstrtoll(const char *s, const char **rest, int base);
#define HDstrtoul(S, R, N) strtoul(S, R, N)
#ifdef H5_HAVE_WIN32_API
#define HDstrtoull(S, R, N) _strtoui64(S, R, N)
#else
#define HDstrtoull(S, R, N) strtoull(S, R, N)
#endif
#define HDstrxfrm(X, Y, Z) strxfrm(X, Y, Z)
#define HDsysconf(N) sysconf(N)
#define HDsystem(S) system(S)
#define HDtan(X) tan(X)
#define HDtanh(X) tanh(X)
#define HDtcdrain(F) tcdrain(F)
#define HDtcflow(F, A) tcflow(F, A)
#define HDtcflush(F, N) tcflush(F, N)
#define HDtcgetattr(F, T) tcgetattr(F, T)
#define HDtcgetpgrp(F) tcgetpgrp(F)
#define HDtcsendbreak(F, N) tcsendbreak(F, N)
#define HDtcsetattr(F, O, T) tcsetattr(F, O, T)
#define HDtcsetpgrp(F, N) tcsetpgrp(F, N)
#define HDtime(T) time(T)
#define HDtimes(T) times(T)
#define HDtmpfile() tmpfile()
#define HDtmpnam(S) tmpnam(S)
#define HDtolower(C) tolower(C)
#define HDtoupper(C) toupper(C)
#define HDttyname(F) ttyname(F)
#define HDtzset() tzset()
#define HDumask(N) umask(N)
#define HDuname(S) uname(S)
#define HDungetc(C, F) ungetc(C, F)
#ifdef H5_HAVE_WIN32_API
#define HDunlink(S) _unlink(S)
#else
#define HDunlink(S) unlink(S)
#endif
#define HDutime(S, T) utime(S, T)
#define HDva_arg(A, T) va_arg(A, T)
#define HDva_end(A) va_end(A)
#define HDva_start(A, P) va_start(A, P)
#define HDvasprintf(RET, FMT, A) vasprintf(RET, FMT, A)
#define HDvfprintf(F, FMT, A) vfprintf(F, FMT, A)
#define HDvprintf(FMT, A) vprintf(FMT, A)
#define HDvsprintf(S, FMT, A) vsprintf(S, FMT, A)
#define HDvsnprintf(S, N, FMT, A) vsnprintf(S, N, FMT, A)
#define HDwait(W) wait(W)
#define HDwaitpid(P, W, O) waitpid(P, W, O)
#define HDwcstombs(S, P, Z) wcstombs(S, P, Z)
#define HDwctomb(S, C) wctomb(S, C)
#define HDwrite(F, M, Z) write(F, M, Z)
/*
* And now for a couple non-Posix functions... Watch out for systems that
* define these in terms of macros.
*/
#ifdef H5_HAVE_WIN32_API
#define HDstrdup(S) _strdup(S)
#else /* H5_HAVE_WIN32_API */
#if !defined strdup && !defined H5_HAVE_STRDUP
extern char * strdup(const char *s);
#endif
#define HDstrdup(S) strdup(S)
#endif /* H5_HAVE_WIN32_API */
/*
* HDF Boolean type.
*/
#ifndef FALSE
#define FALSE false
#endif
#ifndef TRUE
#define TRUE true
#endif
/** From h5tools_utils.h **/
H5_DLLVAR int H5_opterr; /* getoption prints errors if this is on */
H5_DLLVAR int H5_optind; /* token pointer */
H5_DLLVAR const char *H5_optarg; /* flag argument (or value) */
enum h5_arg_level {
no_arg = 0, /* doesn't take an argument */
require_arg, /* requires an argument */
optional_arg /* argument is optional */
};
struct h5_long_options {
const char * name; /* Name of the long option */
enum h5_arg_level has_arg; /* Whether we should look for an arg */
char shortval; /* The shortname equivalent of long arg
* this gets returned from get_option
*/
};
extern int H5_get_option(int argc, const char *const *argv, const char *opt,
const struct h5_long_options *l_opt);
extern int nCols; /*max number of columns for outputting */
/* Definitions of useful routines */
extern void print_version(const char *progname);
#endif

View File

@ -1,154 +0,0 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Copyright by The HDF Group. *
* All rights reserved. *
* *
* This file is part of HDF5. The full HDF5 copyright notice, including *
* terms governing use, modification, and redistribution, is contained in *
* the COPYING file, which can be found at the root of the source code *
* distribution tree, or in https://www.hdfgroup.org/licenses. *
* If you do not have access to either file, you may request a copy from *
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* This file contains the definition of functions required to build h5perf in
* STANDALONE mode.
* Created: Christian Chilan, 2005/5/18.
*/
#include "sio_perf.h"
/** From h5tools_utils.c **/
/* global variables */
int nCols = 80;
int
get_option(int argc, const char **argv, const char *opts, const struct h5_long_options *l_opts)
{
static int sp = 1; /* character index in current token */
int opt_opt = '?'; /* option character passed back to user */
if (sp == 1) {
/* check for more flag-like tokens */
if (H5_optind >= argc || argv[H5_optind][0] != '-' || argv[H5_optind][1] == '\0') {
return EOF;
}
else if (HDstrcmp(argv[H5_optind], "--") == 0) {
H5_optind++;
return EOF;
}
}
if (sp == 1 && argv[H5_optind][0] == '-' && argv[H5_optind][1] == '-') {
/* long command line option */
const char *arg = &argv[H5_optind][2];
int i;
for (i = 0; l_opts && l_opts[i].name; i++) {
size_t len = HDstrlen(l_opts[i].name);
if (HDstrncmp(arg, l_opts[i].name, len) == 0) {
/* we've found a matching long command line flag */
opt_opt = l_opts[i].shortval;
if (l_opts[i].has_arg != no_arg) {
if (arg[len] == '=') {
H5_optarg = &arg[len + 1];
}
else if (H5_optind < (argc - 1) && argv[H5_optind + 1][0] != '-') {
H5_optarg = argv[++H5_optind];
}
else if (l_opts[i].has_arg == require_arg) {
if (H5_opterr)
HDfprintf(stderr, "%s: option required for \"--%s\" flag\n", argv[0], arg);
opt_opt = '?';
}
}
else {
if (arg[len] == '=') {
if (H5_opterr)
HDfprintf(stderr, "%s: no option required for \"%s\" flag\n", argv[0], arg);
opt_opt = '?';
}
H5_optarg = NULL;
}
break;
}
}
if (l_opts[i].name == NULL) {
/* exhausted all of the l_opts we have and still didn't match */
if (H5_opterr)
HDfprintf(stderr, "%s: unknown option \"%s\"\n", argv[0], arg);
opt_opt = '?';
}
H5_optind++;
sp = 1;
}
else {
char *cp; /* pointer into current token */
/* short command line option */
opt_opt = argv[H5_optind][sp];
if (opt_opt == ':' || (cp = strchr(opts, opt_opt)) == 0) {
if (H5_opterr)
HDfprintf(stderr, "%s: unknown option \"%c\"\n", argv[0], opt_opt);
/* if no chars left in this token, move to next token */
if (argv[H5_optind][++sp] == '\0') {
H5_optind++;
sp = 1;
}
return '?';
}
if (*++cp == ':') {
/* if a value is expected, get it */
if (argv[H5_optind][sp + 1] != '\0') {
/* flag value is rest of current token */
H5_optarg = &argv[H5_optind++][sp + 1];
}
else if (++H5_optind >= argc) {
if (H5_opterr)
HDfprintf(stderr, "%s: value expected for option \"%c\"\n", argv[0], opt_opt);
opt_opt = '?';
}
else {
/* flag value is next token */
H5_optarg = argv[H5_optind++];
}
sp = 1;
}
else {
/* set up to look at next char in token, next time */
if (argv[H5_optind][++sp] == '\0') {
/* no more in current token, so setup next token */
H5_optind++;
sp = 1;
}
H5_optarg = NULL;
}
}
/* return the current flag character found */
return opt_opt;
}
void
print_version(const char *progname)
{
printf("%s: Version %u.%u.%u%s%s\n", progname, H5_VERS_MAJOR, H5_VERS_MINOR, H5_VERS_RELEASE,
H5_VERS_SUBRELEASE[0] ? "-" : "", H5_VERS_SUBRELEASE);
}

View File

@ -1,487 +0,0 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Copyright by The HDF Group. *
* All rights reserved. *
* *
* This file is part of HDF5. The full HDF5 copyright notice, including *
* terms governing use, modification, and redistribution, is contained in *
* the COPYING file, which can be found at the root of the source code *
* distribution tree, or in https://www.hdfgroup.org/licenses. *
* If you do not have access to either file, you may request a copy from *
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#ifndef SIO_STANDALONE_H
#define SIO_STANDALONE_H
/* Header file for building h5perf by standalone mode.
* Created: Christian Chilan, 2005/5/18.
*/
/** From H5private.h **/
#include "H5public.h" /* Include Public Definitions */
#include <assert.h>
#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
#include <float.h>
#include <limits.h>
#include <math.h>
#include <signal.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* maximum of two, three, or four values */
#undef MAX
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
#define MAX2(a, b) MAX(a, b)
#define MAX3(a, b, c) MAX(a, MAX(b, c))
#define MAX4(a, b, c, d) MAX(MAX(a, b), MAX(c, d))
#define H5_FLT_ABS_EQUAL(X, Y) (HDfabsf((X) - (Y)) < FLT_EPSILON)
#define H5_DBL_ABS_EQUAL(X, Y) (HDfabs((X) - (Y)) < DBL_EPSILON)
#define H5_LDBL_ABS_EQUAL(X, Y) (HDfabsl((X) - (Y)) < LDBL_EPSILON)
#define H5_FLT_REL_EQUAL(X, Y, M) (HDfabsf(((Y) - (X)) / (X)) < (M))
#define H5_DBL_REL_EQUAL(X, Y, M) (HDfabs(((Y) - (X)) / (X)) < (M))
#define H5_LDBL_REL_EQUAL(X, Y, M) (HDfabsl(((Y) - (X)) / (X)) < (M))
/*
* Redefine all the POSIX functions. We should never see a POSIX
* function (or any other non-HDF5 function) in the source!
*/
#define HDabort() abort()
#define HDabs(X) abs(X)
#ifdef H5_HAVE_WIN32_API
#define HDaccess(F, M) _access(F, M)
#define R_OK 4 /* Test for read permission. */
#define W_OK 2 /* Test for write permission. */
#define X_OK 1 /* Test for execute permission. */
#define F_OK 0 /* Test for existence. */
#else /* H5_HAVE_WIN32_API */
#define HDaccess(F, M) access(F, M)
#ifndef F_OK
#define F_OK 00
#define W_OK 02
#define R_OK 04
#endif
#endif /* H5_HAVE_WIN32_API */
#define HDacos(X) acos(X)
#ifdef H5_HAVE_ALARM
#define HDalarm(N) alarm(N)
#else /* H5_HAVE_ALARM */
#define HDalarm(N) (0)
#endif /* H5_HAVE_ALARM */
#define HDasctime(T) asctime(T)
#define HDasin(X) asin(X)
#define HDasprintf asprintf /*varargs*/
#define HDassert(X) assert(X)
#define HDatan(X) atan(X)
#define HDatan2(X, Y) atan2(X, Y)
#define HDatexit(F) atexit(F)
#define HDatof(S) atof(S)
#define HDatoi(S) atoi(S)
#define HDatol(S) atol(S)
#define HDbsearch(K, B, N, Z, F) bsearch(K, B, N, Z, F)
#define HDcalloc(N, Z) calloc(N, Z)
#define HDceil(X) ceil(X)
#define HDcfgetispeed(T) cfgetispeed(T)
#define HDcfgetospeed(T) cfgetospeed(T)
#define HDcfsetispeed(T, S) cfsetispeed(T, S)
#define HDcfsetospeed(T, S) cfsetospeed(T, S)
#define HDchdir(S) chdir(S)
#define HDchmod(S, M) chmod(S, M)
#define HDchown(S, O, G) chown(S, O, G)
#define HDclearerr(F) clearerr(F)
#define HDclock() clock()
#define HDclose(F) close(F)
#define HDclosedir(D) closedir(D)
#define HDcos(X) cos(X)
#define HDcosh(X) cosh(X)
#define HDcreat(S, M) creat(S, M)
#define HDctermid(S) ctermid(S)
#define HDctime(T) ctime(T)
#define HDcuserid(S) cuserid(S)
#define HDdifftime(X, Y) difftime(X, Y)
#define HDdiv(X, Y) div(X, Y)
#define HDdup(F) dup(F)
#define HDdup2(F, I) dup2(F, I)
#define HDexecv(S, AV) execv(S, AV)
#define HDexecve(S, AV, E) execve(S, AV, E)
#define HDexecvp(S, AV) execvp(S, AV)
#define HDexit(N) exit(N)
#define HD_exit(N) _exit(N)
#define HDexp(X) exp(X)
#define HDfabs(X) fabs(X)
#define HDfabsf(X) fabsf(X)
#define HDfabsl(X) fabsl(X)
#define HDfclose(F) fclose(F)
/* fcntl() variable arguments */
#define HDfdopen(N, S) fdopen(N, S)
#define HDfeof(F) feof(F)
#define HDferror(F) ferror(F)
#define HDfflush(F) fflush(F)
#define HDfgetc(F) fgetc(F)
#define HDfgetpos(F, P) fgetpos(F, P)
#define HDfgets(S, N, F) fgets(S, N, F)
#ifdef H5_HAVE_WIN32_API
#define HDfileno(F) _fileno(F)
#else /* H5_HAVE_WIN32_API */
#define HDfileno(F) fileno(F)
#endif /* H5_HAVE_WIN32_API */
#define HDfloor(X) floor(X)
#define HDfmod(X, Y) fmod(X, Y)
#define HDfopen(S, M) fopen(S, M)
#define HDfork() fork()
#define HDfpathconf(F, N) fpathconf(F, N)
#define HDfprintf fprintf
#define HDfputc(C, F) fputc(C, F)
#define HDfputs(S, F) fputs(S, F)
#define HDfread(M, Z, N, F) fread(M, Z, N, F)
#define HDfree(M) free(M)
#define HDfreopen(S, M, F) freopen(S, M, F)
#define HDfrexp(X, N) frexp(X, N)
#define HDfrexpf(X, N) frexpf(X, N)
#define HDfrexpl(X, N) frexpl(X, N)
/* fscanf() variable arguments */
#ifdef H5_HAVE_FSEEKO
#define HDfseek(F, O, W) fseeko(F, O, W)
#else
#define HDfseek(F, O, W) fseek(F, O, W)
#endif
#define HDfsetpos(F, P) fsetpos(F, P)
/* definitions related to the file stat utilities.
* Windows have its own function names.
* For Unix, if off_t is not 64bit big, try use the pseudo-standard
* xxx64 versions if available.
*/
#ifdef H5_HAVE_WIN32_API
#define HDfstat(F, B) _fstati64(F, B)
#define HDlstat(S, B) _lstati64(S, B)
#define HDstat(S, B) _stati64(S, B)
typedef struct _stati64 h5_stat_t;
typedef __int64 h5_stat_size_t;
#define HDoff_t __int64
#elif H5_SIZEOF_OFF_T != 8 && H5_SIZEOF_OFF64_T == 8 && defined(H5_HAVE_STAT64)
#define HDfstat(F, B) fstat64(F, B)
#define HDlstat(S, B) lstat64(S, B)
#define HDstat(S, B) stat64(S, B)
typedef struct stat64 h5_stat_t;
typedef off64_t h5_stat_size_t;
#define HDoff_t off64_t
#else
#define HDfstat(F, B) fstat(F, B)
#define HDlstat(S, B) lstat(S, B)
#define HDstat(S, B) stat(S, B)
typedef struct stat h5_stat_t;
typedef off_t h5_stat_size_t;
#define HDoff_t off_t
#endif
#define HDftell(F) ftell(F)
#define HDftruncate(F, L) ftruncate(F, L)
#define HDfwrite(M, Z, N, F) fwrite(M, Z, N, F)
#define HDgetc(F) getc(F)
#define HDgetchar() getchar()
#define HDgetcwd(S, Z) getcwd(S, Z)
#define HDgetegid() getegid()
#define HDgetenv(S) getenv(S)
#define HDgeteuid() geteuid()
#define HDgetgid() getgid()
#define HDgetgrgid(G) getgrgid(G)
#define HDgetgrnam(S) getgrnam(S)
#define HDgetgroups(Z, G) getgroups(Z, G)
#ifdef H5_HAVE_WIN32_API
#define HDgetlogin() Wgetlogin()
#else /* H5_HAVE_WIN32_API */
#define HDgetlogin() getlogin()
#endif /* H5_HAVE_WIN32_API */
#define HDgetpgrp() getpgrp()
#define HDgetpid() getpid()
#define HDgetppid() getppid()
#define HDgetpwnam(S) getpwnam(S)
#define HDgetpwuid(U) getpwuid(U)
#define HDgetrusage(X, S) getrusage(X, S)
/* Don't define a macro for gets() - it was removed in C11 */
#ifdef H5_HAVE_WIN32_API
H5_DLL int Wgettimeofday(struct timeval *tv, struct timezone *tz);
#define HDgettimeofday(V, Z) Wgettimeofday(V, Z)
#else /* H5_HAVE_WIN32_API */
#define HDgettimeofday(S, P) gettimeofday(S, P)
#endif /* H5_HAVE_WIN32_API */
#define HDgetuid() getuid()
#define HDgmtime(T) gmtime(T)
#define HDisalnum(C) isalnum((int)(C)) /*cast for solaris warning*/
#define HDisalpha(C) isalpha((int)(C)) /*cast for solaris warning*/
#define HDisatty(F) isatty(F)
#define HDiscntrl(C) iscntrl((int)(C)) /*cast for solaris warning*/
#define HDisdigit(C) isdigit((int)(C)) /*cast for solaris warning*/
#define HDisgraph(C) isgraph((int)(C)) /*cast for solaris warning*/
#define HDislower(C) islower((int)(C)) /*cast for solaris warning*/
#define HDisprint(C) isprint((int)(C)) /*cast for solaris warning*/
#define HDispunct(C) ispunct((int)(C)) /*cast for solaris warning*/
#define HDisspace(C) isspace((int)(C)) /*cast for solaris warning*/
#define HDisupper(C) isupper((int)(C)) /*cast for solaris warning*/
#define HDisxdigit(C) isxdigit((int)(C)) /*cast for solaris warning*/
#define HDkill(P, S) kill(P, S)
#define HDlabs(X) labs(X)
#define HDldexp(X, N) ldexp(X, N)
#define HDldiv(X, Y) ldiv(X, Y)
#define HDlink(OLD, NEW) link(OLD, NEW)
#define HDlocaleconv() localeconv()
#define HDlocaltime(T) localtime(T)
#define HDlog(X) log(X)
#define HDlog10(X) log10(X)
#define HDlongjmp(J, N) longjmp(J, N)
#ifdef H5_HAVE_WIN32_API
#define HDlseek(F, O, W) _lseeki64(F, O, W)
#else
#ifdef H5_HAVE_LSEEK64
#define HDlseek(F, O, W) lseek64(F, O, W)
#else
#define HDlseek(F, O, W) lseek(F, O, W)
#endif
#endif
#define HDmalloc(Z) malloc(Z)
#define HDposix_memalign(P, A, Z) posix_memalign(P, A, Z)
#define HDmblen(S, N) mblen(S, N)
#define HDmbstowcs(P, S, Z) mbstowcs(P, S, Z)
#define HDmbtowc(P, S, Z) mbtowc(P, S, Z)
#define HDmemchr(S, C, Z) memchr(S, C, Z)
#define HDmemcmp(X, Y, Z) memcmp(X, Y, Z)
/*
* The (char*) casts are required for the DEC when optimizations are turned
* on and the source and/or destination are not aligned.
*/
#define HDmemcpy(X, Y, Z) memcpy((char *)(X), (const char *)(Y), Z)
#define HDmemmove(X, Y, Z) memmove((char *)(X), (const char *)(Y), Z)
/*
* The (void*) cast just avoids a compiler warning in H5_HAVE_VISUAL_STUDIO
*/
#ifdef H5_HAVE_VISUAL_STUDIO
#define HDmemset(X, C, Z) memset((void *)(X), C, Z)
#else /* H5_HAVE_VISUAL_STUDIO */
#define HDmemset(X, C, Z) memset(X, C, Z)
#endif /* H5_HAVE_VISUAL_STUDIO */
#ifdef H5_HAVE_WIN32_API
#define HDmkdir(S, M) _mkdir(S)
#else /* H5_HAVE_WIN32_API */
#define HDmkdir(S, M) mkdir(S, M)
#endif /* H5_HAVE_WIN32_API */
#define HDmkfifo(S, M) mkfifo(S, M)
#define HDmktime(T) mktime(T)
#define HDmodf(X, Y) modf(X, Y)
#ifdef _O_BINARY
#define HDopen(S, F, M) open(S, F | _O_BINARY, M)
#else
#define HDopen(S, F, M) open(S, F, M)
#endif
#define HDopendir(S) opendir(S)
#define HDpathconf(S, N) pathconf(S, N)
#define HDpause() pause()
#define HDperror(S) perror(S)
#define HDpipe(F) pipe(F)
#define HDpow(X, Y) pow(X, Y)
/* printf() variable arguments */
#define HDprintf(...) HDfprintf(stdout, __VA_ARGS__)
#define HDputc(C, F) putc(C, F)
#define HDputchar(C) putchar(C)
#define HDputs(S) puts(S)
#define HDqsort(M, N, Z, F) qsort(M, N, Z, F)
#define HDraise(N) raise(N)
#ifdef H5_HAVE_RAND_R
#define HDrandom() HDrand()
H5_DLL int HDrand(void);
#elif H5_HAVE_RANDOM
#define HDrand() random()
#define HDrandom() random()
#else
#define HDrand() rand()
#define HDrandom() rand()
#endif
#define HDread(F, M, Z) read(F, M, Z)
#define HDreaddir(D) readdir(D)
#define HDrealloc(M, Z) realloc(M, Z)
#define HDremove(S) remove(S)
#define HDrename(OLD, NEW) rename(OLD, NEW)
#define HDrewind(F) rewind(F)
#define HDrewinddir(D) rewinddir(D)
#define HDrmdir(S) rmdir(S)
/* scanf() variable arguments */
#define HDsetbuf(F, S) setbuf(F, S)
#define HDsetgid(G) setgid(G)
#define HDsetjmp(J) setjmp(J)
#define HDsetlocale(N, S) setlocale(N, S)
#define HDsetpgid(P, PG) setpgid(P, PG)
#define HDsetsid() setsid()
#define HDsetuid(U) setuid(U)
/* Windows does not permit setting the buffer size to values
less than 2. */
#ifndef H5_HAVE_WIN32_API
#define HDsetvbuf(F, S, M, Z) setvbuf(F, S, M, Z)
#else
#define HDsetvbuf(F, S, M, Z) setvbuf(F, S, M, (Z > 1 ? Z : 2))
#endif
#define HDsigaddset(S, N) sigaddset(S, N)
#define HDsigdelset(S, N) sigdelset(S, N)
#define HDsigemptyset(S) sigemptyset(S)
#define HDsigfillset(S) sigfillset(S)
#define HDsigismember(S, N) sigismember(S, N)
#define HDsiglongjmp(J, N) siglongjmp(J, N)
#define HDsignal(N, F) signal(N, F)
#define HDsigpending(S) sigpending(S)
#define HDsigprocmask(H, S, O) sigprocmask(H, S, O)
#define HDsigsetjmp(J, N) sigsetjmp(J, N)
#define HDsigsuspend(S) sigsuspend(S)
#define HDsin(X) sin(X)
#define HDsinh(X) sinh(X)
#define HDsleep(N) sleep(N)
#define HDsnprintf snprintf /*varargs*/
#define HDsprintf sprintf /*varargs*/
#define HDsqrt(X) sqrt(X)
#ifdef H5_HAVE_RAND_R
H5_DLL void HDsrand(unsigned int seed);
#define HDsrandom(S) HDsrand(S)
#elif H5_HAVE_RANDOM
#define HDsrand(S) srandom(S)
#define HDsrandom(S) srandom(S)
#else
#define HDsrand(S) srand(S)
#define HDsrandom(S) srand(S)
#endif
#ifdef H5_HAVE_WIN32_API
#define HDstrcasecmp(A, B) _stricmp(A, B)
#else
#define HDstrcasecmp(X, Y) strcasecmp(X, Y)
#endif
#define HDstrcat(X, Y) strcat(X, Y)
#define HDstrchr(S, C) strchr(S, C)
#define HDstrcmp(X, Y) strcmp(X, Y)
#define HDstrcoll(X, Y) strcoll(X, Y)
#define HDstrcpy(X, Y) strcpy(X, Y)
#define HDstrcspn(X, Y) strcspn(X, Y)
#define HDstrerror(N) strerror(N)
#define HDstrftime(S, Z, F, T) strftime(S, Z, F, T)
#define HDstrlen(S) strlen(S)
#define HDstrncat(X, Y, Z) strncat(X, Y, Z)
#define HDstrncmp(X, Y, Z) strncmp(X, Y, Z)
#define HDstrncpy(X, Y, Z) strncpy(X, Y, Z)
#define HDstrpbrk(X, Y) strpbrk(X, Y)
#define HDstrrchr(S, C) strrchr(S, C)
#define HDstrspn(X, Y) strspn(X, Y)
#define HDstrstr(X, Y) strstr(X, Y)
#define HDstrtod(S, R) strtod(S, R)
#define HDstrtok(X, Y) strtok(X, Y)
#define HDstrtol(S, R, N) strtol(S, R, N)
H5_DLL int64_t HDstrtoll(const char *s, const char **rest, int base);
#define HDstrtoul(S, R, N) strtoul(S, R, N)
#ifdef H5_HAVE_WIN32_API
#define HDstrtoull(S, R, N) _strtoui64(S, R, N)
#else
#define HDstrtoull(S, R, N) strtoull(S, R, N)
#endif
#define HDstrxfrm(X, Y, Z) strxfrm(X, Y, Z)
#define HDsysconf(N) sysconf(N)
#define HDsystem(S) system(S)
#define HDtan(X) tan(X)
#define HDtanh(X) tanh(X)
#define HDtcdrain(F) tcdrain(F)
#define HDtcflow(F, A) tcflow(F, A)
#define HDtcflush(F, N) tcflush(F, N)
#define HDtcgetattr(F, T) tcgetattr(F, T)
#define HDtcgetpgrp(F) tcgetpgrp(F)
#define HDtcsendbreak(F, N) tcsendbreak(F, N)
#define HDtcsetattr(F, O, T) tcsetattr(F, O, T)
#define HDtcsetpgrp(F, N) tcsetpgrp(F, N)
#define HDtime(T) time(T)
#define HDtimes(T) times(T)
#define HDtmpfile() tmpfile()
#define HDtmpnam(S) tmpnam(S)
#define HDtolower(C) tolower(C)
#define HDtoupper(C) toupper(C)
#define HDttyname(F) ttyname(F)
#define HDtzset() tzset()
#define HDumask(N) umask(N)
#define HDuname(S) uname(S)
#define HDungetc(C, F) ungetc(C, F)
#ifdef H5_HAVE_WIN32_API
#define HDunlink(S) _unlink(S)
#else
#define HDunlink(S) unlink(S)
#endif
#define HDutime(S, T) utime(S, T)
#define HDva_arg(A, T) va_arg(A, T)
#define HDva_end(A) va_end(A)
#define HDva_start(A, P) va_start(A, P)
#define HDvasprintf(RET, FMT, A) vasprintf(RET, FMT, A)
#define HDvfprintf(F, FMT, A) vfprintf(F, FMT, A)
#define HDvprintf(FMT, A) vprintf(FMT, A)
#define HDvsprintf(S, FMT, A) vsprintf(S, FMT, A)
#define HDvsnprintf(S, N, FMT, A) vsnprintf(S, N, FMT, A)
#define HDwait(W) wait(W)
#define HDwaitpid(P, W, O) waitpid(P, W, O)
#define HDwcstombs(S, P, Z) wcstombs(S, P, Z)
#define HDwctomb(S, C) wctomb(S, C)
#define HDwrite(F, M, Z) write(F, M, Z)
/*
* And now for a couple non-Posix functions... Watch out for systems that
* define these in terms of macros.
*/
#ifdef H5_HAVE_WIN32_API
#define HDstrdup(S) _strdup(S)
#else /* H5_HAVE_WIN32_API */
#if !defined strdup && !defined H5_HAVE_STRDUP
extern char * strdup(const char *s);
#endif
#define HDstrdup(S) strdup(S)
#endif /* H5_HAVE_WIN32_API */
/*
* HDF Boolean type.
*/
#ifndef FALSE
#define FALSE false
#endif
#ifndef TRUE
#define TRUE true
#endif
/** From h5tools_utils.h **/
H5_DLLVAR int H5_opterr; /* getoption prints errors if this is on */
H5_DLLVAR int H5_optind; /* token pointer */
H5_DLLVAR const char *H5_optarg; /* flag argument (or value) */
enum h5_arg_level {
no_arg = 0, /* doesn't take an argument */
require_arg, /* requires an argument */
optional_arg /* argument is optional */
};
struct h5_long_options {
const char * name; /* Name of the long option */
enum h5_arg_level has_arg; /* Whether we should look for an arg */
char shortval; /* The shortname equivalent of long arg
* this gets returned from get_option
*/
};
extern int H5_get_option(int argc, const char *const *argv, const char *opt,
const struct h5_long_options *l_opt);
extern int nCols; /*max number of columns for outputting */
/* Definitions of useful routines */
extern void print_version(const char *progname);
#endif