Skip to content
This repository was archived by the owner on Mar 30, 2019. It is now read-only.

Commit d431ce0

Browse files
committed
Added BZip2 and XZ support.
1 parent a4be707 commit d431ce0

File tree

2 files changed

+132
-39
lines changed

2 files changed

+132
-39
lines changed

Makefile

+129-36
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,65 @@
11
#
22
# Useful targets:
3-
# - all - build everything
4-
# - iOS - build everything for iOS
5-
# - tvOS - build everything for tvOS
6-
# - watchOS - build everything for watchOS
7-
# - OpenSSL.framework-iOS - build OpenSSL.framework for iOS
8-
# - OpenSSL.framework-tvOS - build OpenSSL.framework for tvOS
3+
# - all - build everything
4+
# - iOS - build everything for iOS
5+
# - tvOS - build everything for tvOS
6+
# - watchOS - build everything for watchOS
7+
# - OpenSSL.framework-iOS - build OpenSSL.framework for iOS
8+
# - OpenSSL.framework-tvOS - build OpenSSL.framework for tvOS
99
# - OpenSSL.framework-watchOS - build OpenSSL.framework for watchOS
10-
# - Python.framework-iOS - build Python.framework for iOS
11-
# - Python.framework-tvOS - build Python.framework for tvOS
12-
# - Python.framework-watchOS - build Python.framework for watchOS
13-
# - Python-host - build host python
10+
# - BZip2-iOS - build BZip2 library for iOS
11+
# - BZip2-tvOS - build BZip2 library for tvOS
12+
# - BZip2-watchOS - build BZip2 library for watchOS
13+
# - XZ-iOS - build XZ library for iOS
14+
# - XZ-tvOS - build XZ library for tvOS
15+
# - XZ-watchOS - build XZ library for watchOS
16+
# - Python.framework-iOS - build Python.framework for iOS
17+
# - Python.framework-tvOS - build Python.framework for tvOS
18+
# - Python.framework-watchOS - build Python.framework for watchOS
19+
# - Python-host - build host python
1420

1521
# Current director
1622
PROJECT_DIR=$(shell pwd)
1723

18-
BUILD_NUMBER=4
24+
BUILD_NUMBER=5
1925

2026
# Version of packages that will be compiled by this meta-package
2127
PYTHON_VERSION=3.4.2
22-
PYTHON_VER= $(basename $(PYTHON_VERSION))
28+
PYTHON_VER= $(basename $(PYTHON_VERSION))
2329

2430
OPENSSL_VERSION_NUMBER=1.0.2
25-
OPENSSL_REVISION=e
31+
OPENSSL_REVISION=f
2632
OPENSSL_VERSION=$(OPENSSL_VERSION_NUMBER)$(OPENSSL_REVISION)
2733

34+
BZIP2_VERSION=1.0.6
35+
36+
XZ_VERSION=5.2.2
37+
2838
# Supported OS
29-
OS= iOS tvOS watchOS
39+
OS= iOS tvOS watchOS
3040

3141
# iOS targets
3242
TARGETS-iOS=iphonesimulator.x86_64 iphonesimulator.i386 iphoneos.armv7 iphoneos.armv7s iphoneos.arm64
3343
CFLAGS-iOS=-miphoneos-version-min=7.0
34-
CFLAGS-iphoneos.armv7= -fembed-bitcode
35-
CFLAGS-iphoneos.armv7s= -fembed-bitcode
36-
CFLAGS-iphoneos.arm64= -fembed-bitcode
44+
CFLAGS-iphoneos.armv7= -fembed-bitcode
45+
CFLAGS-iphoneos.armv7s= -fembed-bitcode
46+
CFLAGS-iphoneos.arm64= -fembed-bitcode
3747

3848
# tvOS targets
3949
TARGETS-tvOS=appletvsimulator.x86_64 appletvos.arm64
4050
CFLAGS-tvOS=-mtvos-version-min=9.0
41-
CFLAGS-appletvos.arm64= -fembed-bitcode
42-
PYTHON_CONFIGURE-tvOS= ac_cv_func_sigaltstack=no
51+
CFLAGS-appletvos.arm64= -fembed-bitcode
52+
PYTHON_CONFIGURE-tvOS= ac_cv_func_sigaltstack=no
4353

4454
# watchOS targets
4555
TARGETS-watchOS=watchsimulator.i386 watchos.armv7k
4656
CFLAGS-watchOS=-mwatchos-version-min=2.0
47-
CFLAGS-watchos.armv7k= -fembed-bitcode
57+
CFLAGS-watchos.armv7k= -fembed-bitcode
4858
PYTHON_CONFIGURE-watchOS=ac_cv_func_sigaltstack=no
4959

50-
# override machine for arm64
51-
MACHINE-arm64=aarch64
60+
# override machine types for arm64
61+
MACHINE_DETAILED-arm64=aarch64
62+
MACHINE_SIMPLE-arm64=arm
5263

5364
all: $(foreach os,$(OS),$(os))
5465

@@ -60,7 +71,7 @@ clean:
6071
distclean: clean
6172
rm -rf downloads
6273

63-
downloads: downloads/openssl-$(OPENSSL_VERSION).tgz downloads/Python-$(PYTHON_VERSION).tgz
74+
downloads: downloads/openssl-$(OPENSSL_VERSION).tgz downloads/bzip2-$(BZIP2_VERSION).tgz downloads/xz-$(XZ_VERSION).tgz downloads/Python-$(PYTHON_VERSION).tgz
6475

6576
###########################################################################
6677
# OpenSSL
@@ -80,6 +91,35 @@ downloads/openssl-$(OPENSSL_VERSION).tgz:
8091
-if [ ! -e downloads/openssl-$(OPENSSL_VERSION).tgz ]; then curl --fail -L http://openssl.org/source/openssl-$(OPENSSL_VERSION).tar.gz -o downloads/openssl-$(OPENSSL_VERSION).tgz; fi
8192
if [ ! -e downloads/openssl-$(OPENSSL_VERSION).tgz ]; then curl --fail -L http://openssl.org/source/old/$(OPENSSL_VERSION_NUMBER)/openssl-$(OPENSSL_VERSION).tar.gz -o downloads/openssl-$(OPENSSL_VERSION).tgz; fi
8293

94+
95+
###########################################################################
96+
# BZip2
97+
###########################################################################
98+
99+
# Clean the bzip2 project
100+
clean-bzip2:
101+
rm -rf build/*/bzip2-$(BZIP2_VERSION)-* \
102+
build/*/bzip2
103+
104+
# Download original OpenSSL source code archive.
105+
downloads/bzip2-$(BZIP2_VERSION).tgz:
106+
mkdir -p downloads
107+
if [ ! -e downloads/bzip2-$(BZIP2_VERSION).tgz ]; then curl --fail -L http://www.bzip.org/$(BZIP2_VERSION)/bzip2-$(BZIP2_VERSION).tar.gz -o downloads/bzip2-$(BZIP2_VERSION).tgz; fi
108+
109+
###########################################################################
110+
# XZ (LZMA)
111+
###########################################################################
112+
113+
# Clean the XZ project
114+
clean-xz:
115+
rm -rf build/*/xz-$(XZ_VERSION)-* \
116+
build/*/xz
117+
118+
# Download original OpenSSL source code archive.
119+
downloads/xz-$(XZ_VERSION).tgz:
120+
mkdir -p downloads
121+
if [ ! -e downloads/xz-$(XZ_VERSION).tgz ]; then curl --fail -L http://tukaani.org/xz/xz-$(XZ_VERSION).tar.gz -o downloads/xz-$(XZ_VERSION).tgz; fi
122+
83123
###########################################################################
84124
# Python
85125
###########################################################################
@@ -121,20 +161,28 @@ $(PYTHON_DIR-host)/dist/bin/python$(PYTHON_VER): $(PYTHON_DIR-host)/Makefile
121161
# - $2 - OS
122162
define build-target
123163
ARCH-$1= $$(subst .,,$$(suffix $1))
124-
ifdef MACHINE-$$(ARCH-$1)
125-
MACHINE-$1= $$(MACHINE-$$(ARCH-$1))
164+
ifdef MACHINE_DETAILED-$$(ARCH-$1)
165+
MACHINE_DETAILED-$1= $$(MACHINE_DETAILED-$$(ARCH-$1))
166+
else
167+
MACHINE_DETAILED-$1= $$(ARCH-$1)
168+
endif
169+
ifdef MACHINE_SIMPLE-$$(ARCH-$1)
170+
MACHINE_SIMPLE-$1= $$(MACHINE_SIMPLE-$$(ARCH-$1))
126171
else
127-
MACHINE-$1= $$(ARCH-$1)
172+
MACHINE_SIMPLE-$1= $$(ARCH-$1)
128173
endif
129-
SDK-$1= $$(basename $1)
174+
SDK-$1= $$(basename $1)
130175

131176
SDK_ROOT-$1= $$(shell xcrun --sdk $$(SDK-$1) --show-sdk-path)
132-
CC-$1= xcrun --sdk $$(SDK-$1) clang\
133-
-arch $$(ARCH-$1) --sysroot=$$(SDK_ROOT-$1) $$(CFLAGS-$2) $$(CFLAGS-$1)
177+
CC-$1= xcrun --sdk $$(SDK-$1) clang\
178+
-arch $$(ARCH-$1) --sysroot=$$(SDK_ROOT-$1) $$(CFLAGS-$2) $$(CFLAGS-$1)
179+
LDFLAGS-$1= -arch $$(ARCH-$1) -isysroot=$$(SDK_ROOT-$1)
134180

135-
OPENSSL_DIR-$1= build/$2/openssl-$(OPENSSL_VERSION)-$1
136-
PYTHON_DIR-$1= build/$2/Python-$(PYTHON_VERSION)-$1
137-
pyconfig.h-$1= pyconfig-$$(ARCH-$1).h
181+
OPENSSL_DIR-$1= build/$2/openssl-$(OPENSSL_VERSION)-$1
182+
BZIP2_DIR-$1= build/$2/bzip2-$(BZIP2_VERSION)-$1
183+
XZ_DIR-$1= build/$2/xz-$(XZ_VERSION)-$1
184+
PYTHON_DIR-$1= build/$2/Python-$(PYTHON_VERSION)-$1
185+
pyconfig.h-$1= pyconfig-$$(ARCH-$1).h
138186

139187
# Unpack OpenSSL
140188
$$(OPENSSL_DIR-$1)/Makefile: downloads/openssl-$(OPENSSL_VERSION).tgz
@@ -167,6 +215,37 @@ $$(OPENSSL_DIR-$1)/libssl.a $$(OPENSSL_DIR-$1)/libcrypto.a: $$(OPENSSL_DIR-$1)/M
167215
CROSS_SDK="$$(notdir $$(SDK_ROOT-$1))" \
168216
make all
169217

218+
# Unpack BZip2
219+
$$(BZIP2_DIR-$1)/Makefile: downloads/bzip2-$(BZIP2_VERSION).tgz
220+
# Unpack sources
221+
mkdir -p $$(BZIP2_DIR-$1)
222+
tar zxf downloads/bzip2-$(BZIP2_VERSION).tgz --strip-components 1 -C $$(BZIP2_DIR-$1)
223+
# Patch sources to use correct compiler
224+
sed -ie 's#CC=gcc#CC=$$(CC-$1)#' $$(BZIP2_DIR-$1)/Makefile
225+
# Patch sources to use correct install directory
226+
sed -ie 's#PREFIX=/usr/local#PREFIX=$(PROJECT_DIR)/build/$2/bzip2#' $$(BZIP2_DIR-$1)/Makefile
227+
228+
# Build BZip2
229+
$$(BZIP2_DIR-$1)/libbz2.a: $$(BZIP2_DIR-$1)/Makefile
230+
cd $$(BZIP2_DIR-$1) && make install
231+
232+
# Unpack XZ
233+
$$(XZ_DIR-$1)/Makefile: downloads/xz-$(XZ_VERSION).tgz
234+
# Unpack sources
235+
mkdir -p $$(XZ_DIR-$1)
236+
tar zxf downloads/xz-$(XZ_VERSION).tgz --strip-components 1 -C $$(XZ_DIR-$1)
237+
# Configure the build
238+
cd $$(XZ_DIR-$1) && ./configure \
239+
CC="$$(CC-$1)" \
240+
LDFLAGS="$$(LDFLAGS-$1)" \
241+
--disable-shared --enable-static \
242+
--host=$$(MACHINE_SIMPLE-$1)-apple-darwin \
243+
--prefix=$(PROJECT_DIR)/build/$2/xz
244+
245+
# Build XZ
246+
$$(XZ_DIR-$1)/src/liblzma/.libs/liblzma.a: $$(XZ_DIR-$1)/Makefile
247+
cd $$(XZ_DIR-$1) && make && make install
248+
170249
# Unpack Python
171250
$$(PYTHON_DIR-$1)/Makefile: downloads/Python-$(PYTHON_VERSION).tgz $(PYTHON_HOST)
172251
# Unpack target Python
@@ -178,14 +257,14 @@ $$(PYTHON_DIR-$1)/Makefile: downloads/Python-$(PYTHON_VERSION).tgz $(PYTHON_HOST
178257
# Configure target Python
179258
cd $$(PYTHON_DIR-$1) && PATH=$(PROJECT_DIR)/$(PYTHON_DIR-host)/dist/bin:$(PATH) ./configure \
180259
CC="$$(CC-$1)" LD="$$(CC-$1)" \
181-
--host=$$(MACHINE-$1)-apple-ios --build=x86_64-apple-darwin$(shell uname -r) \
260+
--host=$$(MACHINE_DETAILED-$1)-apple-ios --build=x86_64-apple-darwin$(shell uname -r) \
182261
--prefix=$(PROJECT_DIR)/$$(PYTHON_DIR-$1)/dist \
183262
--without-pymalloc --without-doc-strings --disable-ipv6 --without-ensurepip \
184263
ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no \
185264
$$(PYTHON_CONFIGURE-$2)
186265

187266
# Build Python
188-
$$(PYTHON_DIR-$1)/dist/lib/libpython$(PYTHON_VER).a: $$(PYTHON_DIR-$1)/Makefile build/$2/OpenSSL.framework
267+
$$(PYTHON_DIR-$1)/dist/lib/libpython$(PYTHON_VER).a: build/$2/OpenSSL.framework build/$2/bzip2/lib/libbz2.a build/$2/xz/lib/liblzma.a $$(PYTHON_DIR-$1)/Makefile
189268
# Build target Python
190269
cd $$(PYTHON_DIR-$1) && PATH=$(PROJECT_DIR)/$(PYTHON_DIR-host)/dist/bin:$(PATH) make all install
191270

@@ -195,7 +274,7 @@ build/$2/$$(pyconfig.h-$1): $$(PYTHON_DIR-$1)/dist/include/python$(PYTHON_VER)/p
195274
# Dump vars (for test)
196275
vars-$1:
197276
@echo "ARCH-$1: $$(ARCH-$1)"
198-
@echo "MACHINE-$1: $$(MACHINE-$1)"
277+
@echo "MACHINE_DETAILED-$1: $$(MACHINE_DETAILED-$1)"
199278
@echo "SDK-$1: $$(SDK-$1)"
200279
@echo "SDK_ROOT-$1: $$(SDK_ROOT-$1)"
201280
@echo "CC-$1: $$(CC-$1)"
@@ -216,7 +295,9 @@ endef
216295
define build
217296
$$(foreach target,$$(TARGETS-$1),$$(eval $$(call build-target,$$(target),$1)))
218297

219-
OPENSSL_FRAMEWORK-$1= build/$1/OpenSSL.framework
298+
OPENSSL_FRAMEWORK-$1= build/$1/OpenSSL.framework
299+
BZIP2_LIB-$1= build/$1/bzip2/lib/libbz2.a
300+
XZ_LIB-$1= build/$1/xz/lib/liblzma.a
220301
PYTHON_FRAMEWORK-$1= build/$1/Python.framework
221302
PYTHON_RESOURCES-$1= $$(PYTHON_FRAMEWORK-$1)/Versions/$(PYTHON_VER)/Resources
222303

@@ -256,6 +337,18 @@ build/$1/libcrypto.a: $$(foreach target,$$(TARGETS-$1),$$(OPENSSL_DIR-$$(target)
256337
mkdir -p build/$1
257338
xcrun lipo -create -output $$@ $$^
258339

340+
BZip2-$1: $$(BZIP2_LIB-$1)
341+
342+
build/$1/bzip2/lib/libbz2.a: $$(foreach target,$$(TARGETS-$1),$$(BZIP2_DIR-$$(target))/libbz2.a)
343+
mkdir -p build/$1/bzip2/lib
344+
xcrun lipo -create -o $$(BZIP2_LIB-$1) $$^
345+
346+
XZ-$1: $$(XZ_LIB-$1)
347+
348+
build/$1/xz/lib/liblzma.a: $$(foreach target,$$(TARGETS-$1),$$(XZ_DIR-$$(target))/src/liblzma/.libs/liblzma.a)
349+
mkdir -p build/$1/xz/lib
350+
xcrun lipo -create -o $$(XZ_LIB-$1) $$^
351+
259352
Python.framework-$1: $$(PYTHON_FRAMEWORK-$1)
260353

261354
# Build Python.framework

README.rst

+3-3
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,9 @@ This should:
6969
The build products will be in the `build` directory; the compiled frameworks
7070
will be in the `dist` directory.
7171

72-
.. _for iOS: https://github.com/pybee/Python-iOS-support/releases/download/3.4.2-b4/Python-3.4.2-iOS-support.b4.tar.gz
73-
.. _for tvOS: https://github.com/pybee/Python-iOS-support/releases/download/3.4.2-b4/Python-3.4.2-iOS-support.b4.tar.gz
74-
.. _for watchOS: https://github.com/pybee/Python-iOS-support/releases/download/3.4.2-b4/Python-3.4.2-iOS-support.b4.tar.gz
72+
.. _for iOS: https://github.com/pybee/Python-iOS-support/releases/download/3.4.2-b5/Python-3.4.2-iOS-support.b5.tar.gz
73+
.. _for tvOS: https://github.com/pybee/Python-iOS-support/releases/download/3.4.2-b5/Python-3.4.2-iOS-support.b5.tar.gz
74+
.. _for watchOS: https://github.com/pybee/Python-iOS-support/releases/download/3.4.2-b5/Python-3.4.2-iOS-support.b5.tar.gz
7575

7676
Acknowledgements
7777
----------------

0 commit comments

Comments
 (0)