summaryrefslogtreecommitdiff
path: root/src/third_party/scripts/timelib_get_sources.sh
blob: 084e9555dd8ac58a3c2df1b7488d4ae255110ac0 (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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#!/bin/bash

set -o verbose
set -o errexit

# This script downloads and imports timelib
# timelib does not use any autotools/cmake/config system to it is a simple import.

# This script is designed to run on Linux or Mac OS X
# Parsers make use of re2c, which needs to be installed and be version 0.15.3
# *only*. re2c 0.16 introduces an issues with clang which causes any date
# parser to hang.
#

VERSION=2021.05
NAME=timelib
TARBALL=$VERSION.tar.gz
TARBALL_DIR=$NAME-$VERSION
if grep -q Microsoft /proc/version; then
    TEMP_DIR=$(wslpath -u $(powershell.exe -Command "Get-ChildItem Env:TEMP | Get-Content | Write-Host"))
else
    TEMP_DIR="/tmp"
fi
TEMP_DIR=$(mktemp -d $TEMP_DIR/$NAME.XXXXXX)
DEST_DIR=`git rev-parse --show-toplevel`/src/third_party/$NAME-$VERSION

# Check prerequisites: re2c, wget
if ! [ -x "$(command -v re2c)" ]; then
    echo 'Error: re2c is not installed.' >&2
    exit 1
fi

RE2C_VERSION=`re2c --version`
if ! [ "re2c 0.15.3" == "$RE2C_VERSION" ]; then
    echo 'Error: re2c MUST be version 0.15.3.' >&2
    exit 1
fi

if ! [ -x "$(command -v wget)" ]; then
    echo 'Error: wget is not installed.' >&2
    exit 1
fi

if [ ! -f $TARBALL ]; then
    echo "Get tarball"
    wget https://github.com/derickr/timelib/archive/$TARBALL
fi

echo $TARBALL
tar -zxvf $TARBALL

rm -rf $TEMP_DIR
mv $TARBALL_DIR $TEMP_DIR
mkdir $DEST_DIR || true

cp -r $TEMP_DIR/* $DEST_DIR

cd $DEST_DIR

# Prune files
rm -rf $DEST_DIR/tests
rm $DEST_DIR/zones/old-tzcode-32-bit-output.tar.gz || true

# Create parsers
echo "Creating parsers"
make parse_date.c parse_iso_intervals.c

# Create SConscript file
cat <<EOF > SConscript
# This is a generated file, please do not modify. It is generated by
# timelib_get_sources.sh

Import('env')

env = env.Clone()

try:
    env.AppendUnique(CCFLAGS=[
        '-DHAVE_GETTIMEOFDAY',
        '-DHAVE_STRING_H',
    ])
    if env.TargetOSIs('windows'):
        env.AppendUnique(CCFLAGS=[
            '-DHAVE_IO_H',
            '-DHAVE_WINSOCK2_H',
        ])

        # C4996: '...': was declared deprecated
        env.Append(CCFLAGS=['/wd4996'])
    elif env.TargetOSIs('solaris'):
        env.AppendUnique(CCFLAGS=[
            '-DHAVE_DIRENT_H',
            '-DHAVE_STRINGS_H',
            '-DHAVE_UNISTD_H',
            '-D_POSIX_C_SOURCE=200112L',
        ])
    elif env.TargetOSIs('darwin'):
        env.AppendUnique(CCFLAGS=[
            '-DHAVE_DIRENT_H',
            '-DHAVE_SYS_TIME_H',
            '-DHAVE_UNISTD_H',
        ])
    else:
        env.AppendUnique(CCFLAGS=[
            '-DHAVE_DIRENT_H',
            '-DHAVE_SYS_TIME_H',
            '-DHAVE_UNISTD_H',
            '-D_GNU_SOURCE',
        ])
except ValueError:
    pass

env.Library(
    target='timelib',
    source=[
        'astro.c',
        'dow.c',
        'interval.c',
        'parse_date.c',
        'parse_iso_intervals.c',
        'parse_tz.c',
        'parse_posix.c',
        'parse_zoneinfo.c',
        'timelib.c',
        'tm2unixtime.c',
        'unixtime2tm.c',
    ],
    LIBDEPS_TAGS=[
        'init-no-global-side-effects',
    ],
)
EOF

echo "Done"