/*
 * kmp_version.h -- version number for this release
 * $Revision: 42982 $
 * $Date: 2014-02-12 10:11:02 -0600 (Wed, 12 Feb 2014) $
 */


//===----------------------------------------------------------------------===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is dual licensed under the MIT and the University of Illinois Open
// Source Licenses. See LICENSE.txt for details.
//
//===----------------------------------------------------------------------===//


#ifndef KMP_VERSION_H
#define KMP_VERSION_H

#ifdef __cplusplus
    extern "C" {
#endif // __cplusplus

#ifndef KMP_VERSION_MAJOR
    #error KMP_VERSION_MAJOR macro is not defined.
#endif
#define KMP_VERSION_MINOR       0
/*
    Using "magic" prefix in all the version strings is rather convenient to get static version info
    from binaries by using standard utilities "strings" and "grep", e. g.:
        $ strings libiomp5.so | grep "@(#)"
    gives clean list of all version strings in the library. Leading zero helps to keep version
    string separate from printable characters which may occurs just before version string.
*/
#define KMP_VERSION_MAGIC_STR   "\x00@(#) "
#define KMP_VERSION_MAGIC_LEN   6                // Length of KMP_VERSION_MAGIC_STR.
#define KMP_VERSION_PREF_STR    "Intel(R) OMP "
#define KMP_VERSION_PREFIX      KMP_VERSION_MAGIC_STR KMP_VERSION_PREF_STR

/* declare all the version string constants for KMP_VERSION env. variable */
extern int  const __kmp_version_major;
extern int  const __kmp_version_minor;
extern int  const __kmp_version_build;
extern int  const __kmp_openmp_version;
extern char const __kmp_copyright[];    // Old variable, kept for compatibility with ITC and ITP.
extern char const __kmp_version_copyright[];
extern char const __kmp_version_lib_ver[];
extern char const __kmp_version_lib_type[];
extern char const __kmp_version_link_type[];
extern char const __kmp_version_build_time[];
extern char const __kmp_version_target_env[];
extern char const __kmp_version_build_compiler[];
extern char const __kmp_version_alt_comp[];
extern char const __kmp_version_omp_api[];
// ??? extern char const __kmp_version_debug[];
extern char const __kmp_version_lock[];
extern char const __kmp_version_nested_stats_reporting[];
extern char const __kmp_version_ftnstdcall[];
extern char const __kmp_version_ftncdecl[];
extern char const __kmp_version_ftnextra[];

void __kmp_print_version_1( void );
void __kmp_print_version_2( void );

#ifdef __cplusplus
    } // extern "C"
#endif // __cplusplus

#endif /* KMP_VERSION_H */
