Skip to content

Commit 29faa7f

Browse files
authored
XCFrameworks case fix - + downloader script 3.2.1 (#383)
* openssl download variable * Downloader 3.2.1 * Attempt to fix XCframeworks issues for single platform and multiple binaries * downloader 3.2.2 - fix for commands if wget2 not installed * downloader 3.2.3 - fix curl if only one variable passed * osx install test wget2 * XCframework fix tvos
1 parent 8f1bbd9 commit 29faa7f

File tree

5 files changed

+152
-74
lines changed

5 files changed

+152
-74
lines changed

apothecary/apothecary

Lines changed: 8 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1425,6 +1425,8 @@ function cleanFormula() {
14251425

14261426
function frameworkFormula() {
14271427

1428+
echoStart " frameworkFormula [\"$1\"] for:[${TYPE}]"
1429+
14281430
export LIBS_DIR_REAL=$(realpath $LIBS_DIR)
14291431
XLIBSLOCAL="$APOTHECARY_DIR/../xout"
14301432
if [[ ! -e "$XLIBSLOCAL" ]]; then
@@ -1465,7 +1467,7 @@ function frameworkFormula() {
14651467
["SIMULATOR64_VISIONOS"]="SIMULATOR_VISIONOS"
14661468
)
14671469
# this gets a bit advanced bash so need Bash 4 - brew install bash if issues arrise... hectic problems
1468-
PLATFORM_TYPES=("ios" "osx" )
1470+
PLATFORM_TYPES=("ios" "osx" "tvos" )
14691471
declare -a merged_dirs=()
14701472
VERSION=""
14711473
LIB_NAME=""
@@ -1540,15 +1542,8 @@ function frameworkFormula() {
15401542
echo "path_found_in_array == true"
15411543
fi
15421544
else
1543-
PATH_MERGE=$LIBS_DIR_REAL/$1/lib/$CURRENT_TYPE/MERGE_${ARCH}/
1544-
MERGED_PATH="$LIBS_DIR_REAL/$1/lib/$CURRENT_TYPE/MERGE_${ARCH}/$(basename "$ARCH_FILE" .a).a"
1545-
mkdir -p "$PATH_MERGE"
1546-
echo "MERGED_PATH: $ARCH - $MERGED_PATH"
1547-
if ! command -v rsync &> /dev/null; then
1548-
rsync -av --include --delete '*/' --include '*.a' --exclude '*' "$DIR_PATH/" "$PATH_MERGE/"
1549-
else
1550-
cp -v "$DIR_PATH"/*.a "$PATH_MERGE"
1551-
fi
1545+
PATH_MERGE=$LIBS_DIR_REAL/$1/lib/$CURRENT_TYPE/${ARCH}/
1546+
MERGED_PATH="$LIBS_DIR_REAL/$1/lib/$CURRENT_TYPE/${ARCH}/$(basename "$ARCH_FILE" .a).a"
15521547
xcrun codesign --sign - $MERGED_PATH || true
15531548
if [[ "$num_archive_paths" -gt 1 ]]; then
15541549
for dir in "${merged_dirs[@]}"; do
@@ -1559,17 +1554,11 @@ function frameworkFormula() {
15591554
done
15601555
if [[ $path_found_in_array == false ]]; then
15611556
merged_dirs+=("$PATH_MERGE")
1562-
echo "path_found_in_array == false adding $PATH_MERGE"
1563-
else
1564-
echo "path_found_in_array == true"
15651557
fi
15661558
else
15671559
if [[ ! "$xcframework_flags" =~ "$MERGED_PATH" ]]; then
15681560
xcframework_flags+=" -library $MERGED_PATH"
15691561
xcframework_flags+=" -headers $LIBS_DIR_REAL/$1/include"
1570-
echo "xcframework_flags: adding -library $MERGED_PATH"
1571-
else
1572-
echo "xcframework_flags: not adding already in full flags: $xcframework_flags"
15731562
fi
15741563
fi
15751564
fi
@@ -1613,7 +1602,7 @@ function frameworkFormula() {
16131602

16141603

16151604

1616-
echoSuccess " flags: \"$1\" \"$xcframework_flags\" "
1605+
echoSuccess " flags: [\"$1\" \"$xcframework_flags\"]"
16171606
HERE_DIR=$(cd $(dirname "./"); pwd -P)
16181607
cd "${LIBS_DIR_REAL}/${1}/lib/${TYPE}/"
16191608
xcodebuild -create-xcframework $xcframework_flags -output $1.xcframework
@@ -1797,15 +1786,8 @@ function xframeworkFormula() {
17971786
echo "path_found_in_array == true"
17981787
fi
17991788
else
1800-
PATH_MERGE=$LIBS_DIR_REAL/$1/lib/$CURRENT_TYPE/MERGE_${ARCH}/
1801-
MERGED_PATH="$LIBS_DIR_REAL/$1/lib/$CURRENT_TYPE/MERGE_${ARCH}/$(basename "$ARCH_FILE" .a).a"
1802-
mkdir -p "$PATH_MERGE"
1803-
echo "MERGED_PATH: $ARCH - $MERGED_PATH"
1804-
if ! command -v rsync &> /dev/null; then
1805-
rsync -av --include --delete '*/' --include '*.a' --exclude '*' "$DIR_PATH/" "$PATH_MERGE/"
1806-
else
1807-
cp -v "$DIR_PATH"/*.a "$PATH_MERGE"
1808-
fi
1789+
PATH_MERGE=$LIBS_DIR_REAL/$1/lib/$CURRENT_TYPE/${ARCH}/
1790+
MERGED_PATH="$LIBS_DIR_REAL/$1/lib/$CURRENT_TYPE/${ARCH}/$(basename "$ARCH_FILE" .a).a"
18091791
xcrun codesign --sign - $MERGED_PATH || true
18101792
if [[ "$num_archive_paths" -gt 1 ]]; then
18111793
for dir in "${merged_dirs[@]}"; do
@@ -1816,17 +1798,11 @@ function xframeworkFormula() {
18161798
done
18171799
if [[ $path_found_in_array == false ]]; then
18181800
merged_dirs+=("$PATH_MERGE")
1819-
echo "path_found_in_array == false adding $PATH_MERGE"
1820-
else
1821-
echo "path_found_in_array == true"
18221801
fi
18231802
else
18241803
if [[ ! "$xcframework_flags" =~ "$MERGED_PATH" ]]; then
18251804
xcframework_flags+=" -library $MERGED_PATH"
18261805
xcframework_flags+=" -headers $LIBS_DIR_REAL/$1/include"
1827-
echo "xcframework_flags: adding -library $MERGED_PATH"
1828-
else
1829-
echo "xcframework_flags: not adding already in full flags: $xcframework_flags"
18301806
fi
18311807
fi
18321808
fi

apothecary/formulas/boost/boost.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
#
66
# uses a own build system
77

8-
FORMULA_TYPES=( "osx" )
8+
FORMULA_TYPES=( )
99

1010
# define the version
1111
VERSION=1.66.0

apothecary/formulas/openssl/openssl.sh

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -54,26 +54,26 @@ DEFS=" -DOPENSSL_NO_DEPRECATED=ON \
5454
function download() {
5555

5656
. "$DOWNLOADER_SCRIPT"
57-
FILENAME=openssl-$VER
57+
FILE_NAME=openssl-$VER
5858

59-
if ! [ -f $FILENAME ]; then
60-
downloader "${MIRROR}/source/${FILENAME}.tar.gz"
59+
if ! [ -f $FILE_NAME ]; then
60+
downloader "${MIRROR}/source/${FILE_NAME}.tar.gz"
6161
fi
6262

63-
if ! [ -f $FILENAME.sha1 ]; then
64-
downloader ${MIRROR}/source/$FILENAME.tar.gz.sha1
63+
if ! [ -f $FILE_NAME.sha1 ]; then
64+
downloader ${MIRROR}/source/$FILE_NAME.tar.gz.sha1
6565
fi
66-
CHECKSHA=$(shasum $FILENAME.tar.gz | awk '{print $1}')
67-
FILESUM=$(head -1 $FILENAME.tar.gz.sha1)
66+
CHECKSHA=$(shasum $FILE_NAME.tar.gz | awk '{print $1}')
67+
FILESUM=$(head -1 $FILE_NAME.tar.gz.sha1)
6868
if [[ " $CHECKSHA" != $FILESUM || $CHECKSHA != "$SHA1" ]] ; then
6969
echoError "SHA did not Verify: [$CHECKSHA] SHA on Record:[$SHA1] FILESUM=[$FILESUM]- Developer has not updated SHA or Man in the Middle Attack"
7070
exit
7171
else
72-
tar -xf "${FILENAME}.tar.gz"
72+
tar -xf "${FILE_NAME}.tar.gz"
7373
echo "SHA for Download Verified Successfully: [$CHECKSHA] SHA on Record:[$SHA1]"
74-
mv $FILENAME openssl_temp
75-
rm $FILENAME.tar.gz
76-
rm $FILENAME.tar.gz.sha1
74+
mv $FILE_NAME openssl_temp
75+
rm $FILE_NAME.tar.gz
76+
rm $FILE_NAME.tar.gz.sha1
7777
fi
7878
# Clone the openssl-cmake repository
7979
git clone --branch "3.3" --depth=1 $GIT_URL openssl_cmake_temp

scripts/downloader.sh

Lines changed: 131 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#!/bin/bash
2-
2+
VERSION=3.2.3
33
printDownloaderHelp(){
44
cat << EOF
55
@@ -26,26 +26,74 @@ validate_url(){
2626
fi
2727
}
2828

29+
#!/bin/bash
30+
31+
CHECK_RESULT=0
32+
check_remote_vs_local() {
33+
LOCAL_FILE="$1"
34+
REMOTE_URL="$2"
35+
36+
if [ ! -f "$LOCAL_FILE" ]; then
37+
echo " cURL [check_remote_vs_local] - LOCAL_FILE:[$LOCAL_FILE] not found. Download"
38+
CHECK_RESULT=0
39+
return
40+
else
41+
echo " cURL [check_remote_vs_local] - LOCAL_FILE:[$LOCAL_FILE] exists"
42+
fi
43+
44+
# Get local file size
45+
LocalSize=$(wc -c < "$LOCAL_FILE")
46+
47+
# Get remote file size
48+
RemoteSize=$(curl -sI -L --retry 20 "$REMOTE_URL" | awk '/Content-Length/ {print $2}' | tr -d '\r' | tail -n 1)
49+
50+
# Get remote file modification time
51+
modified=$(curl -L --retry 20 --silent --head "$REMOTE_URL" | awk '/^Last-Modified/{print $0}' | sed 's/^Last-Modified: //')
52+
remote_ctime=$(date --date="$modified" +%s)
53+
54+
# Get local file modification time
55+
local_ctime=$(stat -c %z "$LOCAL_FILE")
56+
local_ctime=$(date --date="$local_ctime" +%s)
57+
58+
# Check size
59+
if [ "$LocalSize" != "$RemoteSize" ]; then
60+
echo " File sizes differ. Run the cURL. LocalSize:[$LocalSize] RemoteSize:[$RemoteSize]"
61+
CHECK_RESULT=0
62+
return
63+
fi
64+
65+
# Check modification time
66+
if [ "$local_ctime" -lt "$remote_ctime" ]; then
67+
echo " Remote file is newer. Run the cURL. local_ctime[$local_ctime] remote_ctime:[$remote_ctime]"
68+
CHECK_RESULT=0
69+
return
70+
fi
71+
72+
echo " Files are the same. Do not run the cURL."
73+
CHECK_RESULT=1
74+
return
75+
}
76+
2977
downloader() {
30-
echo " [downloader] ... "
78+
echo " [openFrameworks downloader v${VERSION}] ... "
3179
if [ -z "$1" ]; then
3280
printDownloaderHelp
3381
exit 1
3482
fi
83+
ERROR_MSG=" Downloading failed: No Installed: wget2, curl or wget. Please install (via homebrew, winget, apt-get) and try again. "
3584
SILENT=0
3685
NO_SSL=0
3786
URLS=()
38-
3987
while [[ $# -gt 0 ]]; do
4088
key="$1"
4189
case $key in
4290
-s|--silent)
4391
SILENT=1
44-
shift # past argument
92+
shift
4593
;;
4694
-k|--no-ssl)
4795
NO_SSL=1
48-
shift # past argument
96+
shift
4997
;;
5098
-h|--help)
5199
printDownloaderHelp
@@ -56,46 +104,100 @@ downloader() {
56104
URLS+=("$1")
57105
else
58106
if [ $1 != "0" ]; then
59-
echo "Invalid URL: [$1]"
107+
echo " Invalid URL: [$1]"
60108
fi
61109
fi
62-
shift # past argument
110+
shift
63111
;;
64112
esac
65113
done
66-
114+
if command -v wget2 > /dev/null 2>&1; then
115+
WGET2_INSTALLED=1
116+
else
117+
WGET2_INSTALLED=0
118+
fi
119+
if command -v curl > /dev/null 2>&1; then
120+
CURL_INSTALLED=1
121+
else
122+
CURL_INSTALLED=0
123+
fi
124+
if command -v wget > /dev/null 2>&1; then
125+
WGET_INSTALLED=1
126+
else
127+
WGET_INSTALLED=0
128+
fi
129+
WGET2=1
130+
CURL=1
131+
WGET=1
67132
SSL_ARGS=""
68133
if [[ "$NO_SSL" == "1" ]]; then
69-
echo "no SSL == 1"
70-
if command -v wget2 > /dev/null 2>&1; then
134+
if [[ $WGET2 == 1 ]] && [[ $WGET2_INSTALLED == 0 ]]; then
71135
SSL_ARGS="--no-check-certificate"
72-
elif command -v curl > /dev/null 2>&1; then
136+
elif [[ $CURL == 1 ]] && [[ $CURL_INSTALLED == 0 ]]; then
73137
SSL_ARGS="--insecure"
74138
else
75139
SSL_ARGS="--no-check-certificate"
76140
fi
77-
echo " [Warning SSL Validation is Disabled with -k or --no-ssl]"
141+
echo " [WARNING SSL Validation is Disabled with -k or --no-ssl]"
78142
fi
79-
80-
for URL in "${URLS[@]}"; do
81-
DL_FILENAME=$(basename "$URL")
82-
echo "Downloading [$DL_FILENAME] @ [$URL]"
83-
if [[ "${SILENT}" == "1" ]]; then
84-
if command -v wget2 2>/dev/null; then
85-
wget2 -q $URL 2> /dev/null;
86-
elif command -v curl 2>/dev/null; then
87-
curl -L --parallel --retry 20 -s $SSL_ARGS -N -O $URL;
143+
URLS_TO_DOWNLOAD=""
144+
for ((i = 0; i < ${#URLS[@]}; i++)); do
145+
URL="${URLS[$i]}"
146+
FILENAME=$(basename "$URL")
147+
if [[ $WGET2 == 1 ]] && [[ $WGET2_INSTALLED == 1 ]]; then
148+
URLS_TO_DOWNLOAD+="${URL} "
149+
elif [[ $CURL == 1 ]] && [[ $CURL_INSTALLED == 1 ]]; then
150+
LOCAL_FILE=$FILENAME
151+
REMOTE_URL=$URL
152+
check_remote_vs_local "$LOCAL_FILE" "$REMOTE_URL"
153+
if [ $CHECK_RESULT -eq 0 ]; then
154+
URLS_TO_DOWNLOAD+="${URL} -o ${FILENAME} "
155+
if [ $((i + 1)) -lt ${#URLS[@]} ]; then
156+
URLS_TO_DOWNLOAD+="-k ";
157+
fi
88158
else
89-
wget -q $URL 2> /dev/null;
159+
echo " LOCAL_FILE:[${LOCAL_FILE}] is same as remote - skipping download"
160+
fi
161+
else
162+
URLS_TO_DOWNLOAD+="${URL} "
163+
fi
164+
done
165+
echo
166+
if [ -z "$URLS_TO_DOWNLOAD" ]; then
167+
echo " No URLS to download, continue"
168+
else
169+
if [[ "${SILENT}" == 1 ]]; then
170+
if [[ $WGET2 == 1 ]] && [[ $WGET2_INSTALLED == 1 ]]; then
171+
echo
172+
wget2 -nv --progress=bar -N -t20 $SSL_ARGS $URLS_TO_DOWNLOAD
173+
elif [[ $CURL == 1 ]] && [[ $CURL_INSTALLED == 1 ]]; then
174+
echo
175+
curl -L --retry 20 --progress-bar $SSL_ARGS ${URLS_TO_DOWNLOAD}
176+
elif [[ $WGET == 1 ]] && [[ $WGET_INSTALLED == 1 ]]; then
177+
echo
178+
wget -nv -N -t20 ${URLS_TO_DOWNLOAD}
179+
else
180+
echo $ERROR_MSG;
181+
exit 1;
90182
fi;
91183
else
92-
if command -v wget2 2>/dev/null; then
93-
wget2 --progress=bar $URL 2> /dev/null;
94-
elif command -v curl 2>/dev/null; then
95-
curl -L --parallel --retry 20 --progress-bar -N $SSL_ARGS -O $URL || echo $?;
96-
else
97-
wget --progress=bar $URL 2> /dev/null;
184+
if [[ $WGET2 == 1 ]] && [[ $WGET2_INSTALLED == 1 ]]; then
185+
echo " Downloading [wget2] urls:[$URLS_TO_DOWNLOAD]"
186+
echo
187+
wget2 -N -nv --progress=bar -t20 $SSL_ARGS ${URLS_TO_DOWNLOAD}
188+
elif [[ $CURL == 1 ]] && [[ $CURL_INSTALLED == 1 ]]; then
189+
echo " Downloading [cURL] urls:[$URLS_TO_DOWNLOAD]"
190+
echo
191+
curl -L --retry 20 --progress-bar $SSL_ARGS ${URLS_TO_DOWNLOAD}
192+
elif [[ $WGET == 1 ]] && [[ $WGET_INSTALLED == 1 ]]; then
193+
echo " Downloading [wget] [$FILENAME] urls:[$URLS_TO_DOWNLOAD]"
194+
echo
195+
wget -nv --progress=bar -N -t20 $SSL_ARGS $URLS_TO_DOWNLOAD
196+
else
197+
echo $ERROR_MSG;
198+
exit 1;
98199
fi
99200
fi
100-
done
201+
fi
202+
echo
101203
}

scripts/osx/install.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
brew update >/dev/null
33

44

5-
brew install cmake coreutils autoconf automake ccache gtk-doc brotli libtool wget fontconfig bash shfmt
5+
brew install cmake coreutils autoconf automake ccache gtk-doc brotli libtool wget fontconfig bash shfmt wget2 curl
66

77
# brew reinstall libtool
88

0 commit comments

Comments
 (0)