12
12
# LIBSSH2_OPENSSL - Where to find openssl
13
13
# LIBSSH2_PREFIX - Where to find libssh2
14
14
# LIBSSH2_VERSION=<Version> - Build the given version of libssh2
15
- # LIBGIT2_VERSION=<Versoin> - Build the given version of libgit2
15
+ # LIBGIT2_VERSION=<Version> - Build the given version of libgit2
16
+ # OPENSSL_VERSION=<Version> - Build the given version of OpenSSL
17
+ # (only needed for Mac universal on CI)
16
18
#
17
19
# Either use LIBSSH2_PREFIX, or LIBSSH2_VERSION, or none (if libssh2 is already
18
20
# in the path, or if you don't want to use it).
@@ -55,13 +57,24 @@ KERNEL=`uname -s`
55
57
BUILD_TYPE=${BUILD_TYPE:- Debug}
56
58
PYTHON=${PYTHON:- python3}
57
59
58
- PYTHON_TAG=$( $PYTHON build_tag.py)
60
+ if [ " $CIBUILDWHEEL " != " 1" ]; then
61
+ PYTHON_TAG=$( $PYTHON build_tag.py)
62
+ fi
63
+
59
64
PREFIX=" ${PREFIX:- $(pwd)/ ci/ $PYTHON_TAG } "
60
65
export LDFLAGS=" -Wl,-rpath,$PREFIX /lib"
61
66
62
- # Create a virtual environment
63
- $PYTHON -m venv $PREFIX
64
- cd ci
67
+ if [ " $CIBUILDWHEEL " = " 1" ]; then
68
+ rm -rf ci
69
+ mkdir ci || true
70
+ cd ci
71
+ if [ " $KERNEL " = " Linux" ]; then
72
+ yum install wget openssl-devel libssh2-devel zlib-devel -y
73
+ fi
74
+ else
75
+ # Create a virtual environment
76
+ $PYTHON -m venv $PREFIX
77
+ fi
65
78
66
79
# Install zlib
67
80
# XXX Build libgit2 with USE_BUNDLED_ZLIB instead?
@@ -76,17 +89,67 @@ if [ -n "$ZLIB_VERSION" ]; then
76
89
cd ..
77
90
fi
78
91
92
+ # Install openssl
93
+ if [ -n " $OPENSSL_VERSION " ]; then
94
+ if [ " $CIBUILDWHEEL " != " 1" ] || [ " $KERNEL " != " Darwin" ]; then
95
+ echo " OPENSSL_VERSION should only be set when building"
96
+ echo " macOS universal2 wheels on GitHub!"
97
+ echo " Please unset and try again"
98
+ exit 1
99
+ fi
100
+ FILENAME=openssl-$OPENSSL_VERSION
101
+ wget https://www.openssl.org/source/$FILENAME .tar.gz -N --no-check-certificate
102
+
103
+ tar xf $FILENAME .tar.gz
104
+ mv $FILENAME openssl-x86
105
+
106
+ tar xf $FILENAME .tar.gz
107
+ mv $FILENAME openssl-arm
108
+
109
+ cd openssl-x86
110
+ ./Configure darwin64-x86_64-cc shared
111
+ make
112
+ cd ../openssl-arm
113
+ ./Configure enable-rc5 zlib darwin64-arm64-cc no-asm
114
+ make
115
+ cd ..
116
+
117
+ mkdir openssl-universal
118
+
119
+ LIBSSL=$( basename openssl-x86/libssl.* .dylib)
120
+ lipo -create openssl-x86/libssl.* .dylib openssl-arm/libssl.* .dylib -output openssl-universal/$LIBSSL
121
+ LIBCRYPTO=$( basename openssl-x86/libcrypto.* .dylib)
122
+ lipo -create openssl-x86/libcrypto.* .dylib openssl-arm/libcrypto.* .dylib -output openssl-universal/$LIBCRYPTO
123
+ cd openssl-universal
124
+ install_name_tool -id " @rpath/$LIBSSL " $LIBSSL
125
+ install_name_tool -id " @rpath/$LIBCRYPTO " $LIBCRYPTO
126
+ OPENSSL_PREFIX=$( pwd)
127
+ cd ..
128
+ fi
129
+
79
130
# Install libssh2
80
131
if [ -n " $LIBSSH2_VERSION " ]; then
81
132
FILENAME=libssh2-$LIBSSH2_VERSION
82
133
wget https://www.libssh2.org/download/$FILENAME .tar.gz -N --no-check-certificate
83
134
tar xf $FILENAME .tar.gz
84
135
cd $FILENAME
85
- cmake . \
86
- -DCMAKE_INSTALL_PREFIX=$PREFIX \
87
- -DBUILD_SHARED_LIBS=ON \
88
- -DBUILD_EXAMPLES=OFF \
89
- -DBUILD_TESTING=OFF
136
+ if [ " $KERNEL " = " Darwin" ] && [ " $CIBUILDWHEEL " = " 1" ]; then
137
+ cmake . \
138
+ -DCMAKE_INSTALL_PREFIX=$PREFIX \
139
+ -DBUILD_SHARED_LIBS=ON \
140
+ -DBUILD_EXAMPLES=OFF \
141
+ -DCMAKE_OSX_ARCHITECTURES=" arm64;x86_64" \
142
+ -DOPENSSL_CRYPTO_LIBRARY=" ../openssl-universal/$LIBCRYPTO " \
143
+ -DOPENSSL_SSL_LIBRARY=" ../openssl-universal/$LIBSSL " \
144
+ -DOPENSSL_INCLUDE_DIR=" ../openssl-x86/include" \
145
+ -DBUILD_TESTING=OFF
146
+ else
147
+ cmake . \
148
+ -DCMAKE_INSTALL_PREFIX=$PREFIX \
149
+ -DBUILD_SHARED_LIBS=ON \
150
+ -DBUILD_EXAMPLES=OFF \
151
+ -DBUILD_TESTING=OFF
152
+ fi
90
153
cmake --build . --target install
91
154
cd ..
92
155
LIBSSH2_PREFIX=$PREFIX
@@ -98,18 +161,43 @@ if [ -n "$LIBGIT2_VERSION" ]; then
98
161
wget https://github.com/libgit2/libgit2/archive/refs/tags/v$LIBGIT2_VERSION .tar.gz -N -O $FILENAME .tar.gz
99
162
tar xf $FILENAME .tar.gz
100
163
cd $FILENAME
101
- CMAKE_PREFIX_PATH=$OPENSSL_PREFIX :$LIBSSH2_PREFIX cmake . \
102
- -DCMAKE_INSTALL_PREFIX=$PREFIX \
103
- -DBUILD_SHARED_LIBS=ON \
104
- -DBUILD_CLAR=OFF \
105
- -DCMAKE_BUILD_TYPE=$BUILD_TYPE
164
+ if [ " $KERNEL " = " Darwin" ] && [ " $CIBUILDWHEEL " = " 1" ]; then
165
+ CMAKE_PREFIX_PATH=$OPENSSL_PREFIX :$LIBSSH2_PREFIX cmake . \
166
+ -DBUILD_SHARED_LIBS=ON \
167
+ -DBUILD_CLAR=OFF \
168
+ -DCMAKE_OSX_ARCHITECTURES=" arm64;x86_64" \
169
+ -DOPENSSL_CRYPTO_LIBRARY=" ../openssl-universal/$LIBCRYPTO " \
170
+ -DOPENSSL_SSL_LIBRARY=" ../openssl-universal/$LIBSSL " \
171
+ -DOPENSSL_INCLUDE_DIR=" ../openssl-x86/include" \
172
+ -DCMAKE_BUILD_TYPE=$BUILD_TYPE
173
+ else
174
+ CMAKE_PREFIX_PATH=$OPENSSL_PREFIX :$LIBSSH2_PREFIX cmake . \
175
+ -DCMAKE_INSTALL_PREFIX=$PREFIX \
176
+ -DBUILD_SHARED_LIBS=ON \
177
+ -DBUILD_CLAR=OFF \
178
+ -DCMAKE_BUILD_TYPE=$BUILD_TYPE
179
+ fi
106
180
cmake --build . --target install
107
181
cd ..
108
182
export LIBGIT2=$PREFIX
109
183
fi
110
184
185
+ if [ " $CIBUILDWHEEL " = " 1" ]; then
186
+ # This is gross. auditwheel/delocate-wheel are not so good
187
+ # at finding libraries in random places, so we have to
188
+ # put them in the loader path.
189
+ if [ " $KERNEL " = " Darwin" ]; then
190
+ cp -r $OPENSSL_PREFIX /* .dylib /usr/local/lib
191
+ cp -r $LIBSSH2_PREFIX /lib/* .dylib /usr/local/lib
192
+ cp -r $FILENAME /* .dylib /usr/local/lib
193
+ else
194
+ cp -r $PREFIX /lib64/* .so* /usr/local/lib
195
+ fi
196
+ # we're done building dependencies, cibuildwheel action will take over
197
+ exit 0
198
+ fi
199
+
111
200
# Build pygit2
112
- cd ..
113
201
$PREFIX /bin/pip install -U pip wheel
114
202
if [ " $1 " = " wheel" ]; then
115
203
shift
0 commit comments