66#
77# uses a CMake build system
88
9- FORMULA_TYPES=(" vs" " osx" " ios" " xros" " tvos" " catos" )
9+ FORMULA_TYPES=(" vs" " osx" " ios" " xros" " tvos" " catos" " android " )
1010FORMULA_DEPENDS=(" openssl" " zlib" " brotli" )
1111
1212# Android to implementation 'com.android.ndk.thirdparty:curl:7.79.1-beta-1'
@@ -180,76 +180,130 @@ function build() {
180180
181181 elif [ " $TYPE " == " android" ]; then
182182
183- source $APOTHECARY_DIR /configure/android_configure.sh $ABI make
183+ source $APOTHECARY_DIR /configure/android_configure.sh $ABI cmake
184184
185- export OPENSSL_PATH=$OF_LIBS_OPENSSL_ABS_PATH /openssl
186- local BUILD_TO_DIR=$BUILD_DIR /curl/build/$TYPE /$ABI
187- export OPENSSL_LIBRARIES=$OPENSSL_PATH /lib/$TYPE /$ABI
185+ export OPENSSL_LIBRARIES=$OF_LIBS_OPENSSL_ABS_PATH /lib/$TYPE /$PLATFORM
186+ OPENSSL_ROOT=" $LIBS_ROOT /openssl/"
187+ OPENSSL_INCLUDE_DIR=" $LIBS_ROOT /openssl/include"
188+ OPENSSL_LIBRARY=" $LIBS_ROOT /openssl/lib/$TYPE /$PLATFORM /libssl.a"
189+ OPENSSL_LIBRARY_CRYPT=" $LIBS_ROOT /openssl/lib/$TYPE /$PLATFORM /libcrypto.a"
190+ USE_SECURE_TRANSPORT=OFF
191+ CURL_ENABLE_SSL=ON
192+ SSL_DEFS=" -DOPENSSL_ROOT_DIR=${OF_LIBS_OPENSSL_ABS_PATH} \
193+ -DOPENSSL_INCLUDE_DIR=${OF_LIBS_OPENSSL_ABS_PATH} /include \
194+ -DOPENSSL_CRYPTO_LIBRARY=${OPENSSL_LIBRARY_CRYPT} \
195+ -DOPENSSL_SSL_LIBRARY=${OPENSSL_LIBRARY} \
196+ -DOPENSSL_LIBRARIES=${OF_LIBS_OPENSSL_ABS_PATH} /lib/${TYPE} /${PLATFORM} /libssl.a;${OF_LIBS_OPENSSL_ABS_PATH} /lib/${TYPE} /${PLATFORM} /libcrypto.a"
188197
189- if [ " $ARCH " == " armv7" ]; then
190- export HOST=armv7a-linux-android
191- elif [ " $ARCH " == " arm64" ]; then
192- export HOST=aarch64-linux-android
193- elif [ " $ARCH " == " x86" ]; then
194- export HOST=x86-linux-android
195- elif [ " $ARCH " == " x86_64" ]; then
196- export HOST=x86_64-linux-android
197- fi
198+ ZLIB_ROOT=" $LIBS_ROOT /zlib/"
199+ ZLIB_INCLUDE_DIR=" $LIBS_ROOT /zlib/include"
200+ ZLIB_LIBRARY=" $LIBS_ROOT /zlib/lib/$TYPE /$PLATFORM /zlib.a"
198201
199- export NDK=$ANDROID_PLATFORM
200- export HOST_TAG=$HOST_PLATFORM
201- export MIN_SDK_VERSION=21
202- export SSL_DIR=$OPENSSL_LIBRARIES
203-
204- export OUTPUT_DIR=$OPENSSL_LIBRARIES
205- mkdir -p build
206- mkdir -p build/$TYPE
207- mkdir -p build/$TYPE /$ABI
208- # export DESTDIR="$BUILD_TO_DIR"
209-
210- export CFLAGS=" -std=c${C_STANDARD} "
211- export CXXFLAGS=" -D__ANDROID_MIN_SDK_VERSION__=${ANDROID_API} $MAKE_INCLUDES_CFLAGS -std=c++${CPP_STANDARD} "
212- # export LIBS="-L${OPENSSL_PATH}/lib/${TYPE}/${ABI}/libssl.a -L${OPENSSL_PATH}/lib/${TYPE}/${ABI}/libcrypto.a " # this dont work annoying
213- export LDFLAGS=" ${LIBS} -shared -stdlib=libc++ -L$DEEP_TOOLCHAIN_PATH -L$TOOLCHAIN /lib/gcc/$ANDROID_POSTFIX /4.9.x/ "
214-
215- cp $DEEP_TOOLCHAIN_PATH /crtbegin_dynamic.o $SYSROOT /usr/lib/crtbegin_dynamic.o
216- cp $DEEP_TOOLCHAIN_PATH /crtbegin_so.o $SYSROOT /usr/lib/crtbegin_so.o
217- cp $DEEP_TOOLCHAIN_PATH /crtend_android.o $SYSROOT /usr/lib/crtend_android.o
218- cp $DEEP_TOOLCHAIN_PATH /crtend_so.o $SYSROOT /usr/lib/crtend_so.o
219-
220- cp ${OPENSSL_PATH} /lib/${TYPE} /${ABI} /libssl.a ${OPENSSL_PATH} /lib/libssl.a # this works!
221- cp ${OPENSSL_PATH} /lib/${TYPE} /${ABI} /libcrypto.a ${OPENSSL_PATH} /lib/libcrypto.a
222-
223- echo " OPENSSL_PATH: $OPENSSL_PATH "
224-
225- PATH=" ${PATH} ;${OPENSSL_PATH} /lib/${TYPE} "
226-
227- ./configure \
228- --host=$HOST \
229- --with-openssl=$OPENSSL_PATH \
230- --with-pic \
231- --enable-static \
232- --disable-shared \
233- --disable-verbose \
234- --disable-threaded-resolver \
235- --enable-ipv6 \
236- --without-nghttp2 \
237- --without-libidn2 \
238- --disable-ldap \
239- --disable-ldaps \
240- --prefix=$BUILD_DIR /curl/build/$TYPE /$ABI
241-
242- # sed -i "s/#define HAVE_GETPWUID_R 1/\/\* #undef HAVE_GETPWUID_R \*\//g" lib/curl_config.h
243- make -j${PARALLEL_MAKE}
244- make install
202+ LIBBROTLI_ROOT=" $LIBS_ROOT /brotli/"
203+ LIBBROTLI_INCLUDE_DIR=" $LIBS_ROOT /brotli/include"
245204
246- rm $SYSROOT /usr/lib/crtbegin_dynamic.o
247- rm $SYSROOT /usr/lib/crtbegin_so.o
248- rm $SYSROOT /usr/lib/crtend_android.o
249- rm $SYSROOT /usr/lib/crtend_so.o
205+ LIBBROTLI_LIBRARY=" $LIBS_ROOT /brotli/lib/$TYPE /$PLATFORM /libbrotlicommon.a"
206+ LIBBROTLI_ENC_LIB=" $LIBS_ROOT /brotli/lib/$TYPE /$PLATFORM /libbrotlienc.a"
207+ LIBBROTLI_DEC_LIB=" $LIBS_ROOT /brotli/lib/$TYPE /$PLATFORM /libbrotlidec.a"
250208
251- rm ${OPENSSL_PATH} /lib/libssl.a
252- rm ${OPENSSL_PATH} /lib/libcrypto.a
209+ export PKG_CONFIG_PATH=" /usr/local/lib/pkgconfig:${PKG_CONFIG_PATH} :${OPENSSL_ROOT} /lib/$TYPE /$PLATFORM :${ZLIB_ROOT} /lib/$TYPE /$PLATFORM :${LIBBROTLI_ROOT} /lib/$TYPE /$PLATFORM "
210+
211+ echo " building curl $TYPE | $PLATFORM "
212+ echo " --------------------"
213+ mkdir -p " build_${TYPE} _${PLATFORM} "
214+ cd " build_${TYPE} _${PLATFORM} "
215+ rm -f CMakeCache.txt * .a * .o * .lib
216+ DEFINES=" -DLIBRARY_SUFFIX=${ARCH} \
217+ -DCMAKE_BUILD_TYPE=Release \
218+ -DCMAKE_C_STANDARD=${C_STANDARD} \
219+ -DCMAKE_CXX_STANDARD=${CPP_STANDARD} \
220+ -DCMAKE_CXX_STANDARD_REQUIRED=ON \
221+ -DCMAKE_CXX_EXTENSIONS=OFF \
222+ -DBUILD_SHARED_LIBS=OFF"
223+ cmake .. ${DEFINES} \
224+ -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR /toolchains/android.toolchain.cmake \
225+ -DANDROID_ABI=${ABI} \
226+ -DANDROID_API=${ANDROID_API} \
227+ -DANDROID_TOOLCHAIN=clang \
228+ -DANDROID_NDK_ROOT=$ANDROID_NDK_ROOT \
229+ -DENABLE_VISIBILITY=OFF \
230+ -DCMAKE_CXX_FLAGS=" -DUSE_PTHREADS=1 ${FLAG_RELEASE} -Wno-error=implicit-function-declaration" \
231+ -DCMAKE_C_FLAGS=" -DUSE_PTHREADS=1 ${FLAG_RELEASE} -Wno-error=implicit-function-declaration" \
232+ -DENABLE_STRICT_TRY_COMPILE=ON \
233+ -DHAVE_GETPASS_R=0 \
234+ -DCURL_USE_LIBSSH2=OFF \
235+ -DCURL_USE_LIBPSL=OFF \
236+ -DCMAKE_IGNORE_PATH=/opt/homebrew \
237+ -DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=ON \
238+ -DCURL_STATICLIB=ON \
239+ -DBUILD_STATIC_LIBS=ON \
240+ -DENABLE_UNICODE=ON \
241+ -DCMAKE_BUILD_TYPE=Release \
242+ -DCMAKE_INSTALL_PREFIX=Release \
243+ -DCMAKE_INCLUDE_OUTPUT_DIRECTORY=include \
244+ -DHAVE__FSEEKI64=OFF \
245+ -DCMAKE_INSTALL_INCLUDEDIR=include \
246+ -DCMAKE_USE_SYSTEM_CURL=OFF \
247+ -DENABLE_ARC=ON \
248+ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
249+ -DCMAKE_MINIMUM_REQUIRED_VERSION=3.22 \
250+ -DCURL_DISABLE_LDAP=ON \
251+ -DENABLE_VISIBILITY=OFF \
252+ ${SSL_DEFS} \
253+ -DCMAKE_PREFIX_PATH=" ${LIBS_ROOT} " \
254+ -DZLIB_ROOT=${ZLIB_ROOT} \
255+ -DZLIB_INCLUDE_DIR=${ZLIB_INCLUDE_DIR} \
256+ -DZLIB_INCLUDE_DIRS=${ZLIB_INCLUDE_DIR} \
257+ -DZLIB_LIBRARY=${ZLIB_LIBRARY} \
258+ -DZLIB_LIBRARIES=${ZLIB_LIBRARY} \
259+ -DENABLE_ARES=OFF \
260+ -DCMAKE_VERBOSE_MAKEFILE=${VERBOSE_MAKEFILE} \
261+ -DENABLE_UNIX_SOCKETS=OFF \
262+ -DHAVE_LIBSOCKET=OFF \
263+ -DCURL_ENABLE_SSL=${CURL_ENABLE_SSL} \
264+ -DUSE_SECURE_TRANSPORT=${USE_SECURE_TRANSPORT} \
265+ -DCURL_USE_SECTRANSP=${USE_SECURE_TRANSPORT} \
266+ -DUSE_NGHTTP2=OFF \
267+ -DCURL_DISABLE_POP3=ON \
268+ -DCURL_CA_FALLBACK=ON \
269+ -DCURL_DISABLE_IMAP=ON \
270+ -DENABLE_WEBSOCKETS=ON \
271+ -DENABLE_UNIX_SOCKETS=ON \
272+ -DCURL_BROTLI=ON \
273+ -DBROTLI_INCLUDE_DIRS=${LIBBROTLI_INCLUDE_DIR} \
274+ -DBROTLIDEC_LIBRARY=${LIBBROTLI_DEC_LIB} \
275+ -DBROTLICOMMON_LIBRARY=${LIBBROTLI_LIBRARY} \
276+ -DBROTLI_INCLUDE_DIR=${LIBBROTLI_INCLUDE_DIR} \
277+ -DBROTLI_LIBRARIES=" ${LIBBROTLI_LIBRARY} ;${LIBBROTLI_DEC_LIB} ;${LIBBROTLI_ENC_LIB} " \
278+ -DUSE_LIBIDN2=OFF \
279+ -DENABLE_VERBOSE=ON \
280+ -DENABLE_THREADED_RESOLVER=ON \
281+ -DENABLE_IPV6=ON
282+
283+ echo " --------- CMakeCache.txt Content ---------"
284+ cat CMakeCache.txt
285+ echo " ------------------------------------------"
286+
287+
288+ cmake --build . --config Release -j${PARALLEL_MAKE} --target install
289+
290+ cd " Release/lib/"
291+ # Rename with prefixes (including library origin to avoid duplicates)
292+ mkdir -p curl
293+ mv libcurl.a curl/libcurl.a
294+ cd curl
295+ ar -x libcurl.a
296+ for f in * .o; do mv " $f " " curl_${ARCH} _$f " ; done
297+ for obj in * .o; do
298+ if [ -z " $( nm " $obj " ) " ]; then
299+ echo " Removing empty object file: $obj "
300+ rm -f " $obj "
301+ fi
302+ done
303+ ar rcs " ../libcurl.a" curl_${ARCH} _* .o
304+ rm -rf curl
305+ cd ../..
306+ cd ..
253307
254308 elif [[ " $TYPE " =~ ^(osx| ios| tvos| xros| catos| watchos)$ ]]; then
255309
@@ -360,13 +414,10 @@ function build() {
360414 -DENABLE_THREADED_RESOLVER=ON \
361415 -DENABLE_IPV6=ON
362416 cmake --build . --config Release -j${PARALLEL_MAKE} --target install
363-
364- cd " Release/lib/"
365-
417+ cd " Release/lib/"
366418 # Rename with prefixes (including library origin to avoid duplicates)
367419 mkdir -p curl
368420 mv libcurl.a curl/libcurl.a
369-
370421 cd curl
371422 ar -x libcurl.a
372423 for f in * .o; do mv " $f " " curl_${ARCH} _$f " ; done
@@ -377,17 +428,11 @@ function build() {
377428 fi
378429 done
379430 ar rcs " ../libcurl.a" curl_${ARCH} _* .o
380-
381-
382-
383431 echo " Verifying libcurl.a.:"
384432 lipo -info " libcurl.a"
385-
386433 rm -rf curl
387434 cd ../..
388-
389435 cd ..
390-
391436 else
392437 echo " building other for $TYPE "
393438 if [ $CROSSCOMPILING -eq 1 ]; then
@@ -436,9 +481,10 @@ function copy() {
436481 cp -v " build_${TYPE} _${PLATFORM} /Release/lib/libcurl.a" $1 /lib/$TYPE /$PLATFORM /curl.a
437482 secure " $1 /lib/$TYPE /$PLATFORM /curl.a" " curl.pkl" " $VERSION " " $DEFINES " " $BUILD_ID " " $FORMULA_DEPENDS "
438483 elif [ " $TYPE " == " android" ]; then
439- mkdir -p $1 /lib/$TYPE /$ABI
440- cp -Rv build/$TYPE /$ABI /include/* $1 /include/curl/
441- cp -Rv build/$TYPE /$ABI /lib/libcurl.a $1 /lib/$TYPE /$PLATFORM /libcurl.a
484+ mkdir -p $1 /lib/$TYPE /$PLATFORM /
485+ cp -Rv " build_${TYPE} _${PLATFORM} /Release/include/" * $1 /include
486+ mkdir -p $1 /bin
487+ cp -Rv " build_${TYPE} _${PLATFORM} /Release/lib/libcurl.a" $1 /lib/$TYPE /$PLATFORM /libcurl.a
442488 secure " $1 /lib/$TYPE /$PLATFORM /libcurl.a" " curl.pkl" " $VERSION " " $DEFINES " " $BUILD_ID " " $FORMULA_DEPENDS "
443489 fi
444490 # copy license file
@@ -451,7 +497,7 @@ function copy() {
451497
452498# executed inside the lib src dir
453499function clean() {
454- if [[ " $TYPE " =~ ^(osx| ios| tvos| xros| catos| watchos| emscripten)$ ]]; then
500+ if [[ " $TYPE " =~ ^(osx| ios| tvos| xros| catos| watchos| emscripten| android )$ ]]; then
455501 if [ -d " build_${TYPE} _${PLATFORM} " ]; then
456502 rm -r build_${TYPE} _${PLATFORM}
457503 fi
0 commit comments