-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconfigure.win
More file actions
executable file
·153 lines (138 loc) · 3.73 KB
/
configure.win
File metadata and controls
executable file
·153 lines (138 loc) · 3.73 KB
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# Even when `cargo` is on `PATH`, `rustc` might not in some cases. This adds
# ~/.cargo/bin to PATH to address such cases. Note that is not always available
# (e.g. or on Ubuntu with Rust installed via APT).
if [ -d "${HOME}/.cargo/bin" ]; then
export PATH="${PATH}:${HOME}/.cargo/bin"
fi
CARGO_VERSION="$(cargo --version)"
if [ $? -ne 0 ]; then
echo "-------------- ERROR: CONFIGURATION FAILED --------------------"
echo ""
echo "The cargo command is not available. To install Rust, please refer"
echo "to the official instruction:"
echo ""
echo "https://www.rust-lang.org/tools/install"
echo ""
echo "---------------------------------------------------------------"
exit 1
fi
# There's a little chance that rustc is not available on PATH while cargo is.
# So, just ignore the error case.
RUSTC_VERSION="$(rustc --version || true)"
# Report the version of Rustc to comply with the CRAN policy
echo "using Rust package manager: '${CARGO_VERSION}'"
echo "using Rust compiler: '${RUSTC_VERSION}'"
# All configure.args passed from R CMD INSTALL
CONFIG_ARGS="$@"
# Uppercase package name for env vars
R_PACKAGE_NAME_UPPER=$(printf '%s' "$R_PACKAGE_NAME" | tr '[:lower:]' '[:upper:]')
# Initialize flags
HAS_FEATURES=0
HAS_PROFILE=0
HAS_TARGET=0
TARGET=""
INPUT_PROFILE=""
prev_arg=""
for arg in $CONFIG_ARGS; do
case "$arg" in
-F*)
HAS_FEATURES=1
prev_arg=""
;;
--features*)
HAS_FEATURES=1
prev_arg=""
;;
--profile=*)
HAS_PROFILE=1
INPUT_PROFILE="${arg#--profile=}"
prev_arg=""
;;
--profile*)
HAS_PROFILE=1
prev_arg="--profile"
continue
;;
--target=*)
HAS_TARGET=1
TARGET="${arg#--target=}"
prev_arg=""
;;
--target)
HAS_TARGET=1
prev_arg="--target" # mark that next arg is the value
continue
;;
--*)
prev_arg="" # reset
;;
*)
# if previous argument was --target or --profile, current arg is its value
if [ "$prev_arg" = "--target" ]; then
TARGET="$arg"
elif [ "$prev_arg" = "--profile" ]; then
INPUT_PROFILE="$arg"
fi
prev_arg="" # reset
;;
esac
done
# Handle target override
if [ -z "$TARGET" ]; then
TARGET="x86_64-pc-windows-gnu"
# Add target to CONFIG_ARGS for cargo
if [ "$HAS_TARGET" -eq 0 ]; then
# insert --target to the arguments
if [ -z "$CONFIG_ARGS" ]; then
CONFIG_ARGS="--target ${TARGET}"
else
CONFIG_ARGS="$CONFIG_ARGS --target ${TARGET}"
fi
fi
fi
# Handle profile override
if [ -z "$INPUT_PROFILE" ]; then
PROFILE_VAR="${R_PACKAGE_NAME_UPPER}_PROFILE"
eval "PROFILE=\${$PROFILE_VAR}"
if [ -z "$PROFILE" ]; then
if [ "${DEBUG}" = "true" ]; then
PROFILE=dev
else
PROFILE=release
fi
fi
# Add profile to CONFIG_ARGS for cargo
if [ "$HAS_PROFILE" -eq 0 ]; then
# insert --profile to the arguments
if [ -z "$CONFIG_ARGS" ]; then
CONFIG_ARGS="--profile $PROFILE"
else
CONFIG_ARGS="$CONFIG_ARGS --profile $PROFILE"
fi
fi
else
PROFILE="${INPUT_PROFILE}"
fi
# Handle features override
if [ "$HAS_FEATURES" -eq 0 ]; then
FEATURES_VAR="${R_PACKAGE_NAME_UPPER}_FEATURES"
eval "FEATURES=\${$FEATURES_VAR}"
# Add features to CONFIG_ARGS for cargo
if [ -n "$FEATURES" ]; then
if [ -z "$CONFIG_ARGS" ]; then
CONFIG_ARGS="--features $FEATURES"
else
CONFIG_ARGS="$CONFIG_ARGS --features $FEATURES"
fi
fi
fi
# Clean target directory when not in debug mode
if [ "${DEBUG}" != "true" ]; then
CLEAN_TARGET='$(TARGET_DIR)'
fi
sed \
-e "s/@TARGET@/${TARGET}/" \
-e "s/@PROFILE@/${PROFILE}/" \
-e "s/@CLEAN_TARGET@/${CLEAN_TARGET}/" \
-e "s/@CONFIGURE_ARGS@/${CONFIG_ARGS}/" \
src/Makevars.win.in > src/Makevars