summaryrefslogtreecommitdiffstats
path: root/bin/genltanalyze
blob: 293c683d82c39fae43737266740cef37380dbfa3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#!/bin/sh
##
## 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://support.hdfgroup.org/ftp/HDF5/releases.
# If you do not have access to either file, you may request a copy from
# help@hdfgroup.org.
##
# regenerate hl/src/H5LTanalyze.c

# HDF5 currently uses the following versions of the bison flex:
BISON_VERSION="bison (GNU Bison) 2.7"
FLEX_VERSION="flex 2.5.37"

# If paths to bison flex are not specified by the user, assume tools are
# running on jam in /mnt/hdf/packages and set paths accordingly.
if test -z ${BISON}; then
  BISON=/usr/hdf/bin/bison
fi
if test -z ${FLEX}; then
  FLEX=/usr/hdf/bin/flex
fi

# Check version numbers of all bison flex against the "correct" versions
BI_VERS=`${BISON} --version 2>&1 | grep "^${BISON_VERSION}"`
if test -z "${BI_VERS}"; then
   echo "${BISON} version is not ${BISON_VERSION}"
   exit 1
fi
FL_VERS=`${FLEX} --version 2>&1 | grep "^${FLEX_VERSION}"`
if test -z "${FL_VERS}"; then
   echo "${FLEX} version is not ${FLEX_VERSION}"
   exit 1
fi

# Make sure that the tools are in the path.
BISON_DIR=`dirname ${BISON}`
FLEX_DIR=`dirname ${FLEX}`

# Main body
cd hl/src
echo "Generate hl/src/H5LTparse.c from hl/src/H5LTparse.y"
bison -pH5LTyy -o H5LTparse.c -d H5LTparse.y
echo "Generate hl/src/H5LTanalyze.c from hl/src/H5LTanalyze.l"
flex --nounistd -PH5LTyy -oH5LTanalyze.c H5LTanalyze.l

# fix H5LTparse.c to declare H5LTyyparse return type as an hid_t
# instead of int.  Currently the generated function H5LTyyparse is
# generated with a return value of type int, which is a mapping to the
# flex yyparse function.  The return value in the HL library should be
# an hid_t. 
# I propose to not use flex to generate this function, but for now I am 
# adding a perl command to find and replace this function declaration in
# H5LTparse.c.
perl -0777 -pi -e 's/int\nyyparse/hid_t\nyyparse/igs' H5LTparse.c
perl -0777 -pi -e 's/int H5LTyyparse/hid_t H5LTyyparse/igs' H5LTparse.c

# Add code that disables warnings in the flex/bison-generated code.
#
# Note that the GCC pragmas did not exist until gcc 4.2. Earlier versions
# will simply ignore them, but we want to avoid those warnings.
for f in H5LTparse.c H5LTanalyze.c
do
    echo '#if __GNUC__ >= 4 && __GNUC_MINOR__ >=2                           ' >> tmp.out
    echo '#pragma GCC diagnostic ignored "-Wconversion"                     ' >> tmp.out
    echo '#pragma GCC diagnostic ignored "-Wimplicit-function-declaration"  ' >> tmp.out
    echo '#pragma GCC diagnostic ignored "-Wlarger-than="                   ' >> tmp.out
    echo '#pragma GCC diagnostic ignored "-Wmissing-prototypes"             ' >> tmp.out
    echo '#pragma GCC diagnostic ignored "-Wnested-externs"                 ' >> tmp.out
    echo '#pragma GCC diagnostic ignored "-Wold-style-definition"           ' >> tmp.out
    echo '#pragma GCC diagnostic ignored "-Wsign-compare"                   ' >> tmp.out
    echo '#pragma GCC diagnostic ignored "-Wsign-conversion"                ' >> tmp.out
    echo '#pragma GCC diagnostic ignored "-Wstrict-prototypes"              ' >> tmp.out
    echo '#pragma GCC diagnostic ignored "-Wswitch-default"                 ' >> tmp.out
    echo '#pragma GCC diagnostic ignored "-Wunused-function"                ' >> tmp.out
    echo '#pragma GCC diagnostic ignored "-Wunused-macros"                  ' >> tmp.out
    echo '#pragma GCC diagnostic ignored "-Wunused-parameter"               ' >> tmp.out
    echo '#elif defined __SUNPRO_CC                                         ' >> tmp.out
    echo '#pragma disable_warn                                              ' >> tmp.out
    echo '#elif defined _MSC_VER                                            ' >> tmp.out
    echo '#pragma warning(push, 1)                                          ' >> tmp.out
    echo '#endif                                                            ' >> tmp.out

    cat $f >> tmp.out
    mv tmp.out $f
done

cd ../..

exit 0