2 # Copyright (C) 2006-2010 OpenWrt.org
4 # This is free software, licensed under the GNU General Public License v2.
5 # See /LICENSE for more information.
8 include $(TOPDIR)/rules.mk
14 PKG_SOURCE:=Python-$(PKG_VERSION).tar.bz2
15 PKG_SOURCE_URL:=http://www.python.org/ftp/python/$(PKG_VERSION)/
16 PKG_MD5SUM:=fee5408634a54e721a93531aba37f8c1
20 HOST_BUILD_PARALLEL:=1
22 PKG_BUILD_DIR:=$(BUILD_DIR)/Python-$(PKG_VERSION)
23 HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/Python-$(PKG_VERSION)
25 PKG_BUILD_DEPENDS:=python/host
27 include $(INCLUDE_DIR)/host-build.mk
28 include $(INCLUDE_DIR)/package.mk
29 -include $(if $(DUMP),,./files/python-package.mk)
31 define Package/python/Default
35 TITLE:=Python $(PYTHON_VERSION) programming language
36 URL:=http://www.python.org/
39 define Package/python/Default/description
40 Python is a dynamic object-oriented programming language that can be used
41 for many kinds of software development. It offers strong support for
42 integration with other languages and tools, comes with extensive standard
43 libraries, and can be learned in a few days. Many Python programmers
44 report substantial productivity gains and feel the language encourages
45 the development of higher quality, more maintainable code.
49 $(call Package/python/Default)
51 DEPENDS:=+libpthread +zlib +libffi +python-mini
54 define Package/python/description
55 $(call Package/python/Default/description)
57 This package contains the full Python install.
60 define Package/python-mini
61 $(call Package/python/Default)
63 DEPENDS:=+libpthread +zlib
66 define Package/python-mini/description
67 $(call Package/python/Default/description)
69 This package contains only a minimal Python install.
72 define Package/python-doc
73 $(call Package/python/Default)
74 TITLE:=Python interactive documentation
78 define Package/python-expat
79 $(call Package/python/Default)
80 TITLE:=Python support for expat
81 DEPENDS+=+python-mini +libexpat
84 define Package/python-gzip
85 $(call Package/python/Default)
86 TITLE:=Python support for gzip
90 define Package/python-openssl
91 $(call Package/python/Default)
92 TITLE:=Python support for OpenSSL
93 DEPENDS+=+python-mini +libopenssl
96 define Package/python-shutil
97 $(call Package/python/Default)
98 TITLE:=Python support for shutil
102 define Package/python-sqlite3
103 $(call Package/python/Default)
104 TITLE:=Python support for sqlite3
105 DEPENDS+=+python-mini +libsqlite3
108 define Package/python-gdbm
109 $(call Package/python/Default)
110 TITLE:=Python support for gdbm
111 DEPENDS+=+python-mini +libgdbm
114 PY_DISABLED_MODULES:= \
115 readline _curses _curses_panel _tkinter nis
118 $(TARGET_CONFIGURE_OPTS) \
119 PYTHON_DISABLE_MODULES="$(PY_DISABLED_MODULES)" \
120 PYTHON_MODULES_INCLUDE="$(STAGING_DIR)/usr/include" \
121 PYTHON_MODULES_LIB="$(STAGING_DIR)/usr/lib" \
122 DESTDIR="$(PKG_INSTALL_DIR)" \
124 CFLAGS="$(TARGET_CFLAGS) -fno-inline" \
125 LDFLAGS="$(TARGET_LDFLAGS)" \
127 HOSTPYTHON=./hostpython \
130 define Build/Configure
131 -$(MAKE) -C $(PKG_BUILD_DIR) distclean
132 (cd $(PKG_BUILD_DIR); autoreconf --force --install || exit 0)
133 # The python executable needs to stay in the rootdir since its location will
134 # be used to compute the path of the config files.
135 $(CP) $(STAGING_DIR_HOST)/bin/pgen $(PKG_BUILD_DIR)/hostpgen
136 $(CP) $(STAGING_DIR_HOST)/bin/python $(PKG_BUILD_DIR)/hostpython
137 $(call Build/Configure/Default, \
143 ac_cv_lib_readline_readline=no \
144 ac_cv_have_chflags=no \
145 ac_cv_have_lchflags=no \
146 ac_cv_py_format_size_t=no \
147 OPT="$(TARGET_CFLAGS)" \
151 define Build/InstallDev
152 $(INSTALL_DIR) $(2)/bin $(1)/usr/bin $(1)/usr/include $(1)/usr/lib
153 $(INSTALL_DIR) $(STAGING_DIR)/mk/
154 $(INSTALL_DATA) ./files/python-package.mk $(STAGING_DIR)/mk/
156 $(PKG_INSTALL_DIR)/usr/include/python$(PYTHON_VERSION) \
159 $(STAGING_DIR_HOST)/lib/python$(PYTHON_VERSION) \
160 $(PKG_BUILD_DIR)/libpython$(PYTHON_VERSION).a \
163 $(PKG_INSTALL_DIR)/usr/lib/python$(PYTHON_VERSION)/config \
164 $(1)/usr/lib/python$(PYTHON_VERSION)/
167 $(STAGING_DIR_HOST)/bin/python \
168 $(1)/usr/bin/hostpython
170 ln -sf ../../usr/bin/hostpython python$(PYTHON_VERSION); \
171 ln -sf python$(PYTHON_VERSION) python)
174 $(STAGING_DIR_HOST)/bin/python$(PYTHON_VERSION)-config \
176 $(SED) 's,^#!.*,#!/usr/bin/env python$(PYTHON_VERSION),g' $(2)/bin/python$(PYTHON_VERSION)-config
179 ln -sf python$(PYTHON_VERSION)-config python-config;)
182 define PyPackage/python/filespec
183 +|/usr/lib/python$(PYTHON_VERSION)
184 -|/usr/lib/python$(PYTHON_VERSION)/bsddb/test
185 -|/usr/lib/python$(PYTHON_VERSION)/config
186 +|/usr/lib/python$(PYTHON_VERSION)/config/Makefile
187 -|/usr/lib/python$(PYTHON_VERSION)/ctypes/test
188 -|/usr/lib/python$(PYTHON_VERSION)/distutils/command/wininst-*.exe
189 -|/usr/lib/python$(PYTHON_VERSION)/distutils/tests
190 -|/usr/lib/python$(PYTHON_VERSION)/email/test
191 -|/usr/lib/python$(PYTHON_VERSION)/idlelib
192 -|/usr/lib/python$(PYTHON_VERSION)/json/tests
193 -|/usr/lib/python$(PYTHON_VERSION)/lib-tk
194 -|/usr/lib/python$(PYTHON_VERSION)/sqlite3
195 -|/usr/lib/python$(PYTHON_VERSION)/test
196 -|/usr/lib/python$(PYTHON_VERSION)/lib2to3
197 -|/usr/lib/python$(PYTHON_VERSION)/lib-old
198 -|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/gdbm.so
199 -|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/_sqlite3.so
200 -|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/_ssl.so
201 -|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/pyexpat.so
202 -|/usr/lib/python$(PYTHON_VERSION)/pydoc_topics.py
203 -|/usr/lib/python$(PYTHON_VERSION)/pydoc.py
204 -|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/_ctypes_test.so
205 -|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/_testcapi.so
206 -|/usr/lib/python$(PYTHON_VERSION)/__future__.py
207 -|/usr/lib/python$(PYTHON_VERSION)/_abcoll.py
208 -|/usr/lib/python$(PYTHON_VERSION)/abc.py
209 -|/usr/lib/python$(PYTHON_VERSION)/codecs.py
210 -|/usr/lib/python$(PYTHON_VERSION)/compileall.py
211 -|/usr/lib/python$(PYTHON_VERSION)/ConfigParser.py
212 -|/usr/lib/python$(PYTHON_VERSION)/copy.py
213 -|/usr/lib/python$(PYTHON_VERSION)/copy_reg.py
214 -|/usr/lib/python$(PYTHON_VERSION)/dis.py
215 -|/usr/lib/python$(PYTHON_VERSION)/encodings
216 -|/usr/lib/python$(PYTHON_VERSION)/fnmatch.py
217 -|/usr/lib/python$(PYTHON_VERSION)/genericpath.py
218 -|/usr/lib/python$(PYTHON_VERSION)/getopt.py
219 -|/usr/lib/python$(PYTHON_VERSION)/glob.py
220 -|/usr/lib/python$(PYTHON_VERSION)/hashlib.py
221 -|/usr/lib/python$(PYTHON_VERSION)/inspect.py
222 -|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/array.so
223 -|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/binascii.so
224 -|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/cStringIO.so
225 -|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/fcntl.so
226 -|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/grp.so
227 -|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/itertools.so
228 -|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/math.so
229 -|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/_md5.so
230 -|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/operator.so
231 -|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/_random.so
232 -|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/select.so
233 -|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/_sha.so
234 -|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/_sha256.so
235 -|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/_sha512.so
236 -|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/_socket.so
237 -|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/strop.so
238 -|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/_struct.so
239 -|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/syslog.so
240 -|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/time.so
241 -|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/unicodedata.so
242 -|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/zlib.so
243 -|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/_weakref.so
244 -|/usr/lib/python$(PYTHON_VERSION)/linecache.py
245 -|/usr/lib/python$(PYTHON_VERSION)/md5.py
246 -|/usr/lib/python$(PYTHON_VERSION)/new.py
247 -|/usr/lib/python$(PYTHON_VERSION)/opcode.py
248 -|/usr/lib/python$(PYTHON_VERSION)/optparse.py
249 -|/usr/lib/python$(PYTHON_VERSION)/os.py
250 -|/usr/lib/python$(PYTHON_VERSION)/pickle.py
251 -|/usr/lib/python$(PYTHON_VERSION)/pickle.py
252 -|/usr/lib/python$(PYTHON_VERSION)/pkgutil.py
253 -|/usr/lib/python$(PYTHON_VERSION)/popen2.py
254 -|/usr/lib/python$(PYTHON_VERSION)/posixpath.py
255 -|/usr/lib/python$(PYTHON_VERSION)/py_compile.py
256 -|/usr/lib/python$(PYTHON_VERSION)/random.py
257 -|/usr/lib/python$(PYTHON_VERSION)/repr.py
258 -|/usr/lib/python$(PYTHON_VERSION)/re.py
259 -|/usr/lib/python$(PYTHON_VERSION)/sha.py
260 -|/usr/lib/python$(PYTHON_VERSION)/site.py
261 -|/usr/lib/python$(PYTHON_VERSION)/socket.py
262 -|/usr/lib/python$(PYTHON_VERSION)/sre_compile.py
263 -|/usr/lib/python$(PYTHON_VERSION)/sre_constants.py
264 -|/usr/lib/python$(PYTHON_VERSION)/sre_parse.py
265 -|/usr/lib/python$(PYTHON_VERSION)/sre.py
266 -|/usr/lib/python$(PYTHON_VERSION)/stat.py
267 -|/usr/lib/python$(PYTHON_VERSION)/StringIO.py
268 -|/usr/lib/python$(PYTHON_VERSION)/stringprep.py
269 -|/usr/lib/python$(PYTHON_VERSION)/string.py
270 -|/usr/lib/python$(PYTHON_VERSION)/struct.py
271 -|/usr/lib/python$(PYTHON_VERSION)/subprocess.py
272 -|/usr/lib/python$(PYTHON_VERSION)/tempfile.py
273 -|/usr/lib/python$(PYTHON_VERSION)/textwrap.py
274 -|/usr/lib/python$(PYTHON_VERSION)/tokenize.py
275 -|/usr/lib/python$(PYTHON_VERSION)/token.py
276 -|/usr/lib/python$(PYTHON_VERSION)/traceback.py
277 -|/usr/lib/python$(PYTHON_VERSION)/types.py
278 -|/usr/lib/python$(PYTHON_VERSION)/UserDict.py
279 -|/usr/lib/python$(PYTHON_VERSION)/warnings.py
280 -|/usr/lib/python$(PYTHON_VERSION)/weakref.py
283 define PyPackage/python-mini/filespec
284 +|/usr/bin/python$(PYTHON_VERSION)
285 +|/usr/lib/python$(PYTHON_VERSION)/__future__.py
286 +|/usr/lib/python$(PYTHON_VERSION)/_abcoll.py
287 +|/usr/lib/python$(PYTHON_VERSION)/abc.py
288 +|/usr/lib/python$(PYTHON_VERSION)/codecs.py
289 +|/usr/lib/python$(PYTHON_VERSION)/compileall.py
290 +|/usr/lib/python$(PYTHON_VERSION)/ConfigParser.py
291 +|/usr/lib/python$(PYTHON_VERSION)/copy.py
292 +|/usr/lib/python$(PYTHON_VERSION)/copy_reg.py
293 +|/usr/lib/python$(PYTHON_VERSION)/dis.py
294 +|/usr/lib/python$(PYTHON_VERSION)/encodings
295 +|/usr/lib/python$(PYTHON_VERSION)/fnmatch.py
296 +|/usr/lib/python$(PYTHON_VERSION)/genericpath.py
297 +|/usr/lib/python$(PYTHON_VERSION)/getopt.py
298 +|/usr/lib/python$(PYTHON_VERSION)/glob.py
299 +|/usr/lib/python$(PYTHON_VERSION)/hashlib.py
300 +|/usr/lib/python$(PYTHON_VERSION)/inspect.py
301 +|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/array.so
302 +|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/binascii.so
303 +|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/cStringIO.so
304 +|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/fcntl.so
305 +|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/grp.so
306 +|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/itertools.so
307 +|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/math.so
308 +|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/_md5.so
309 +|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/operator.so
310 +|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/_random.so
311 +|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/select.so
312 +|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/_sha.so
313 +|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/_sha256.so
314 +|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/_sha512.so
315 +|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/_socket.so
316 +|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/strop.so
317 +|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/_struct.so
318 +|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/syslog.so
319 +|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/time.so
320 +|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/unicodedata.so
321 +|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/zlib.so
322 +|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/_weakref.so
323 +|/usr/lib/python$(PYTHON_VERSION)/linecache.py
324 +|/usr/lib/python$(PYTHON_VERSION)/md5.py
325 +|/usr/lib/python$(PYTHON_VERSION)/new.py
326 +|/usr/lib/python$(PYTHON_VERSION)/opcode.py
327 +|/usr/lib/python$(PYTHON_VERSION)/optparse.py
328 +|/usr/lib/python$(PYTHON_VERSION)/os.py
329 +|/usr/lib/python$(PYTHON_VERSION)/pickle.py
330 +|/usr/lib/python$(PYTHON_VERSION)/pickle.py
331 +|/usr/lib/python$(PYTHON_VERSION)/pkgutil.py
332 +|/usr/lib/python$(PYTHON_VERSION)/popen2.py
333 +|/usr/lib/python$(PYTHON_VERSION)/posixpath.py
334 +|/usr/lib/python$(PYTHON_VERSION)/py_compile.py
335 +|/usr/lib/python$(PYTHON_VERSION)/random.py
336 +|/usr/lib/python$(PYTHON_VERSION)/repr.py
337 +|/usr/lib/python$(PYTHON_VERSION)/re.py
338 +|/usr/lib/python$(PYTHON_VERSION)/sha.py
339 +|/usr/lib/python$(PYTHON_VERSION)/site.py
340 +|/usr/lib/python$(PYTHON_VERSION)/socket.py
341 +|/usr/lib/python$(PYTHON_VERSION)/sre_compile.py
342 +|/usr/lib/python$(PYTHON_VERSION)/sre_constants.py
343 +|/usr/lib/python$(PYTHON_VERSION)/sre_parse.py
344 +|/usr/lib/python$(PYTHON_VERSION)/sre.py
345 +|/usr/lib/python$(PYTHON_VERSION)/stat.py
346 +|/usr/lib/python$(PYTHON_VERSION)/StringIO.py
347 +|/usr/lib/python$(PYTHON_VERSION)/stringprep.py
348 +|/usr/lib/python$(PYTHON_VERSION)/string.py
349 +|/usr/lib/python$(PYTHON_VERSION)/struct.py
350 +|/usr/lib/python$(PYTHON_VERSION)/subprocess.py
351 +|/usr/lib/python$(PYTHON_VERSION)/tempfile.py
352 +|/usr/lib/python$(PYTHON_VERSION)/textwrap.py
353 +|/usr/lib/python$(PYTHON_VERSION)/tokenize.py
354 +|/usr/lib/python$(PYTHON_VERSION)/token.py
355 +|/usr/lib/python$(PYTHON_VERSION)/traceback.py
356 +|/usr/lib/python$(PYTHON_VERSION)/types.py
357 +|/usr/lib/python$(PYTHON_VERSION)/UserDict.py
358 +|/usr/lib/python$(PYTHON_VERSION)/warnings.py
359 +|/usr/lib/python$(PYTHON_VERSION)/weakref.py
360 +|/usr/include/python$(PYTHON_VERSION)/pyconfig.h
363 define PyPackage/python-mini/install
364 ln -sf python$(PYTHON_VERSION) $(1)/usr/bin/python
367 define PyPackage/python-doc/filespec
368 +|/usr/lib/python$(PYTHON_VERSION)/pydoc_topics.py
369 +|/usr/lib/python$(PYTHON_VERSION)/pydoc.py
372 define PyPackage/python-expat/filespec
373 +|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/pyexpat.so
376 define PyPackage/python-gzip/filespec
377 +|/usr/lib/python$(PYTHON_VERSION)/gzip.py
380 define PyPackage/python-openssl/filespec
381 +|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/_ssl.so
384 define PyPackage/python-shutil/filespec
385 +|/usr/lib/python$(PYTHON_VERSION)/shutil.py
388 define PyPackage/python-sqlite3/filespec
389 +|/usr/lib/python$(PYTHON_VERSION)/sqlite3
390 +|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/_sqlite3.so
393 define PyPackage/python-gdbm/filespec
394 +|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/gdbm.so
397 define Host/Configure
398 -$(MAKE) -C $(HOST_BUILD_DIR) distclean
399 (cd $(HOST_BUILD_DIR); autoreconf --force --install || exit 0)
400 (cd $(HOST_BUILD_DIR); \
401 rm -rf config.cache; \
403 OPT="$(HOST_CFLAGS)" \
404 ./configure --without-cxx-main --without-threads --prefix=$(STAGING_DIR_HOST); \
409 $(MAKE) $(HOST_JOBS) -C $(HOST_BUILD_DIR) \
411 $(MAKE) $(HOST_JOBS) -C $(HOST_BUILD_DIR) \
412 HOSTPYTHON=$(HOST_BUILD_DIR)/python \
417 $(INSTALL_DIR) $(STAGING_DIR_HOST)/bin/
418 $(MAKE) -C $(HOST_BUILD_DIR) \
419 HOSTPYTHON=$(HOST_BUILD_DIR)/python \
421 $(INSTALL_BIN) $(HOST_BUILD_DIR)/Parser/pgen $(STAGING_DIR_HOST)/bin/
425 $(eval $(call HostBuild))
427 $(eval $(call PyPackage,python))
428 $(eval $(call PyPackage,python-mini))
429 $(eval $(call PyPackage,python-doc))
430 $(eval $(call PyPackage,python-expat))
431 $(eval $(call PyPackage,python-gzip))
432 $(eval $(call PyPackage,python-openssl))
433 $(eval $(call PyPackage,python-shutil))
434 $(eval $(call PyPackage,python-sqlite3))
435 $(eval $(call PyPackage,python-gdbm))
437 $(eval $(call BuildPackage,python))
438 $(eval $(call BuildPackage,python-mini))
439 $(eval $(call BuildPackage,python-doc))
440 $(eval $(call BuildPackage,python-expat))
441 $(eval $(call BuildPackage,python-gzip))
442 $(eval $(call BuildPackage,python-openssl))
443 $(eval $(call BuildPackage,python-shutil))
444 $(eval $(call BuildPackage,python-sqlite3))
445 $(eval $(call BuildPackage,python-gdbm))