From 93e4b9b2080ef8519c4b6939cd79616ee08d6758 Mon Sep 17 00:00:00 2001 From: "Tom G. Christensen" Date: Mon, 20 Apr 2015 12:47:39 +0200 Subject: [PATCH] python27: new package, python 2.7.9 --- python27/build.sh | 98 +++++ python27/meta/ChangeLog | 4 + python27/meta/depend | 5 + python27/meta/pkgdef | 389 ++++++++++++++++++ python27/src/python-2.7.9-mmap-fcntl_h.patch | 12 + ....7.9-multiprocessing-without-urandom.patch | 34 ++ python27/src/python-2.7.9-tgcware.patch | 16 + 7 files changed, 558 insertions(+) create mode 100755 python27/build.sh create mode 100644 python27/meta/ChangeLog create mode 100644 python27/meta/depend create mode 100644 python27/meta/pkgdef create mode 100644 python27/src/python-2.7.9-mmap-fcntl_h.patch create mode 100644 python27/src/python-2.7.9-multiprocessing-without-urandom.patch create mode 100644 python27/src/python-2.7.9-tgcware.patch diff --git a/python27/build.sh b/python27/build.sh new file mode 100755 index 0000000..b490ca7 --- /dev/null +++ b/python27/build.sh @@ -0,0 +1,98 @@ +#!/bin/bash +# This is a buildpkg build.sh script +# build.sh helper functions +. ${BUILDPKG_SCRIPTS}/build.sh.functions +# +########################################################### +# Check the following 4 variables before running the script +topdir=python +version=2.7.9 +pkgver=1 +source[0]=https://www.python.org/ftp/python/2.7.9/Python-$version.tar.xz +# If there are no patches, simply comment this +patch[0]=python-2.7.9-mmap-fcntl_h.patch +patch[1]=python-2.7.9-tgcware.patch +patch[2]=python-2.7.9-multiprocessing-without-urandom.patch + +# Source function library +. ${BUILDPKG_SCRIPTS}/buildpkg.functions + +# Global settings +export CPPFLAGS="-I$prefix/include" +export LDFLAGS="-L$prefix/lib -R$prefix/lib" + +configure_args+=(--disable-ipv6 --with-system-expat --enable-shared) +make_check_target=test + +# Reduce e.g. 2.7.9 to 2.7 +pydotver=${version%.*} +dynload_dir=$_libdir/python${pydotver}/lib-dynload +site_packages=$_libdir/python${pydotver}/site-packages +pylibdir=$_libdir/python${pydotver} +topsrcdir=Python-${version} + +reg prep +prep() +{ + generic_prep + setdir source + echo "crypt cryptmodule.c" >> Modules/Setup.local + rm -f Tools/pynche/*.pyw + ${__gsed} -i '/INSTALL_SHARED/ s/555/755/' Makefile* +} + +reg build +build() +{ + generic_build +} + +reg check +check() +{ + generic_check +} + +reg install +install() +{ + generic_install DESTDIR + setdir source + # This borrows heavily from CentOS rpm packages + echo '#!/bin/sh' > ${stagedir}${prefix}/$_bindir/pynche${pydotver} + echo 'exec `python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(plat_specific = True))"`/pynche/pynche' >> ${stagedir}${prefix}/$_bindir/pynche${pydotver} + cp -pr Tools/pynche ${stagedir}${prefix}/$site_packages + ${__install} -p -m755 Tools/i18n/pygettext.py ${stagedir}${prefix}/$_bindir/pygettext${pydotver}.py + ${__install} -p -m755 Tools/i18n/msgfmt.py ${stagedir}${prefix}/$_bindir/msgfmt${pydotver}.py + ${__install} -p -m755 -d ${stagedir}${prefix}/$pylibdir/Tools/scripts + ${__install} -p -m755 Tools/README ${stagedir}${prefix}/$pylibdir/Tools + ${__install} -p -m755 Tools/scripts/*py ${stagedir}${prefix}/$pylibdir/Tools/scripts + ${__mv} ${stagedir}${prefix}/${_bindir}/2to3 ${stagedir}${prefix}/${_bindir}/2to3-${pydotver} + ${__mv} ${stagedir}${prefix}/${_bindir}/idle ${stagedir}${prefix}/${_bindir}/idle${pydotver} + ${__mv} ${stagedir}${prefix}/${_bindir}/pydoc ${stagedir}${prefix}/${_bindir}/pydoc${pydotver} + ${__mv} ${stagedir}${prefix}/${_bindir}/smtpd.py ${stagedir}${prefix}/${_bindir}/smtpd${pydotver}.py + ${__rm} -f ${stagedir}${prefix}/${_bindir}/python{,-config} + ${__rm} -f ${stagedir}${prefix}/${_bindir}/python2{,-config} + ${__rm} -f ${stagedir}${prefix}/${pylibdir}/LICENSE.txt + ${__rm} -f ${stagedir}${prefix}/${_mandir}/man1/python{,2}.1 + ${__rm} -f ${stagedir}${prefix}/${_libdir}/pkgconfig/python{,2}.pc + docs_for python27 LICENSE README + docs_for python27-libs LICENSE README +} + +reg pack +pack() +{ + generic_pack +} + +reg distclean +distclean() +{ + clean distclean +} + +################################################### +# No need to look below here +################################################### +build_sh $* diff --git a/python27/meta/ChangeLog b/python27/meta/ChangeLog new file mode 100644 index 0000000..b32bc4d --- /dev/null +++ b/python27/meta/ChangeLog @@ -0,0 +1,4 @@ +CHANGELOG +--------- +* Sat Mar 21 2015 Tom G. Christensen - 2.7.9-1 +- Initial package diff --git a/python27/meta/depend b/python27/meta/depend new file mode 100644 index 0000000..8bef906 --- /dev/null +++ b/python27/meta/depend @@ -0,0 +1,5 @@ +TGCpy27 python27-libs auto +TGCpy27to python27 auto +TGCpy27te python27 auto +TGCpy27tk python27 auto +TGCpy27d python27 auto diff --git a/python27/meta/pkgdef b/python27/meta/pkgdef new file mode 100644 index 0000000..2e54472 --- /dev/null +++ b/python27/meta/pkgdef @@ -0,0 +1,389 @@ +[python27] +pkgname="${pkgprefix}py27" +name="python27 - Programming language" +pkgcat="application" +pkgvendor="http://python.org" +pkgdesc="An interpreted, interactive, object-oriented programming language" +pkgver="$pkgver" +files(-,root,bin) +default_docs +$_bindir/pydoc${pydotver} +$_bindir/python${pydotver} +$_mandir/man1/python${pydotver}.1 + +[python27-libs] +pkgname="${pkgprefix}py27l" +name="python27-libs - Runtime libraries" +pkgcat="application" +pkgvendor="http://python.org" +pkgdesc="The python standard library and libpython dynamic library" +pkgver="$pkgver" +files(-,root,bin) +default_docs +$_libdir/libpython*.so.* +$site_packages/README +$pylibdir/BaseHTTPServer.* +$pylibdir/Bastion.* +$pylibdir/CGIHTTPServer.* +$pylibdir/ConfigParser.* +$pylibdir/Cookie.* +$pylibdir/DocXMLRPCServer.* +$pylibdir/HTMLParser.* +$pylibdir/MimeWriter.* +$pylibdir/Queue.* +$pylibdir/SimpleHTTPServer.* +$pylibdir/SimpleXMLRPCServer.* +$pylibdir/SocketServer.* +$pylibdir/StringIO.* +$pylibdir/UserDict.* +$pylibdir/UserList.* +$pylibdir/UserString.* +$pylibdir/_LWPCookieJar.* +$pylibdir/_MozillaCookieJar.* +$pylibdir/__future__.* +$pylibdir/__phello__.* +$pylibdir/_abcoll.* +$pylibdir/_osx_support.* +$pylibdir/_pyio.* +$pylibdir/_strptime.* +$pylibdir/_sysconfigdata.* +$pylibdir/_threading_local.* +$pylibdir/_weakrefset.* +$pylibdir/abc.* +$pylibdir/aifc.* +$pylibdir/antigravity.* +$pylibdir/anydbm.* +$pylibdir/argparse.* +$pylibdir/ast.* +$pylibdir/asynchat.* +$pylibdir/asyncore.* +$pylibdir/atexit.* +$pylibdir/audiodev.* +$pylibdir/base64.* +$pylibdir/bdb.* +$pylibdir/binhex.* +$pylibdir/bisect.* +$pylibdir/bsddb/*.* +$pylibdir/cProfile.* +$pylibdir/calendar.* +$pylibdir/cgi.* +$pylibdir/cgitb.* +$pylibdir/chunk.* +$pylibdir/cmd.* +$pylibdir/code.* +$pylibdir/codecs.* +$pylibdir/codeop.* +$pylibdir/collections.* +$pylibdir/colorsys.* +$pylibdir/commands.* +$pylibdir/compileall.* +$pylibdir/compiler/*.* +$pylibdir/config/Makefile +$pylibdir/contextlib.* +$pylibdir/cookielib.* +$pylibdir/copy.* +$pylibdir/copy_reg.* +$pylibdir/csv.* +$pylibdir/ctypes/*.* +$pylibdir/ctypes/macholib/* +$pylibdir/curses/*.* +$pylibdir/dbhash.* +$pylibdir/decimal.* +$pylibdir/difflib.* +$pylibdir/dircache.* +$pylibdir/dis.* +$pylibdir/distutils/README +$pylibdir/distutils/*.* +$pylibdir/distutils/command/*.* +$pylibdir/doctest.* +$pylibdir/dumbdbm.* +$pylibdir/dummy_thread.* +$pylibdir/dummy_threading.* +$pylibdir/email/*.* +$pylibdir/email/mime/*.* +$pylibdir/encodings/*.* +$pylibdir/ensurepip/*.* +$pylibdir/ensurepip/_bundled/*.* +$pylibdir/filecmp.* +$pylibdir/fileinput.* +$pylibdir/fnmatch.* +$pylibdir/formatter.* +$pylibdir/fpformat.* +$pylibdir/fractions.* +$pylibdir/ftplib.* +$pylibdir/functools.* +$pylibdir/genericpath.* +$pylibdir/getopt.* +$pylibdir/getpass.* +$pylibdir/gettext.* +$pylibdir/glob.* +$pylibdir/gzip.* +$pylibdir/hashlib.* +$pylibdir/heapq.* +$pylibdir/hmac.* +$pylibdir/hotshot/*.* +$pylibdir/htmlentitydefs.* +$pylibdir/htmllib.* +$pylibdir/httplib.* +$pylibdir/idlelib/ChangeLog +$pylibdir/idlelib/*.* +$pylibdir/idlelib/Icons/*.* +$pylibdir/idlelib/idle_test/*.* +$pylibdir/ihooks.* +$pylibdir/imaplib.* +$pylibdir/imghdr.* +$pylibdir/importlib/*.* +$pylibdir/imputil.* +$pylibdir/inspect.* +$pylibdir/io.* +$pylibdir/json/*.* +$pylibdir/keyword.* +$pylibdir/lib2to3/*.* +$pylibdir/lib2to3/pgen2/*.* +$pylibdir/lib2to3/fixes/*.* +$pylibdir/linecache.* +$pylibdir/locale.* +$pylibdir/logging/*.* +$pylibdir/macpath.* +$pylibdir/macurl2path.* +$pylibdir/mailbox.* +$pylibdir/mailcap.* +$pylibdir/markupbase.* +$pylibdir/md5.* +$pylibdir/mhlib.* +$pylibdir/mimetools.* +$pylibdir/mimetypes.* +$pylibdir/mimify.* +$pylibdir/modulefinder.* +$pylibdir/multifile.* +$pylibdir/multiprocessing/*.* +$pylibdir/multiprocessing/dummy/*.* +$pylibdir/mutex.* +$pylibdir/netrc.* +$pylibdir/new.* +$pylibdir/nntplib.* +$pylibdir/ntpath.* +$pylibdir/nturl2path.* +$pylibdir/numbers.* +$pylibdir/opcode.* +$pylibdir/optparse.* +$pylibdir/os.* +$pylibdir/os2emxpath.* +$pylibdir/pdb.* +$pylibdir/pickle.* +$pylibdir/pickletools.* +$pylibdir/pipes.* +$pylibdir/pkgutil.* +$pylibdir/plat-sunos5/* +$pylibdir/platform.* +$pylibdir/plistlib.* +$pylibdir/popen2.* +$pylibdir/poplib.* +$pylibdir/posixfile.* +$pylibdir/posixpath.* +$pylibdir/pprint.* +$pylibdir/profile.* +$pylibdir/pstats.* +$pylibdir/pty.* +$pylibdir/py_compile.* +$pylibdir/pyclbr.* +$pylibdir/pydoc.* +$pylibdir/pydoc_data/* +$pylibdir/quopri.* +$pylibdir/random.* +$pylibdir/re.* +$pylibdir/repr.* +$pylibdir/rexec.* +$pylibdir/rfc822.* +$pylibdir/rlcompleter.* +$pylibdir/robotparser.* +$pylibdir/runpy.* +$pylibdir/sched.* +$pylibdir/sets.* +$pylibdir/sgmllib.* +$pylibdir/sha.* +$pylibdir/shelve.* +$pylibdir/shlex.* +$pylibdir/shutil.* +$pylibdir/site.* +$pylibdir/smtpd.* +$pylibdir/smtplib.* +$pylibdir/sndhdr.* +$pylibdir/socket.* +$pylibdir/sqlite3/*.* +$pylibdir/sre.* +$pylibdir/sre_compile.* +$pylibdir/sre_constants.* +$pylibdir/sre_parse.* +$pylibdir/ssl.* +$pylibdir/stat.* +$pylibdir/statvfs.* +$pylibdir/string.* +$pylibdir/stringold.* +$pylibdir/stringprep.* +$pylibdir/struct.* +$pylibdir/subprocess.* +$pylibdir/sunau.* +$pylibdir/sunaudio.* +$pylibdir/symbol.* +$pylibdir/symtable.* +$pylibdir/sysconfig.* +$pylibdir/tabnanny.* +$pylibdir/tarfile.* +$pylibdir/telnetlib.* +$pylibdir/tempfile.* +$pylibdir/textwrap.* +$pylibdir/this.* +$pylibdir/threading.* +$pylibdir/timeit.* +$pylibdir/toaiff.* +$pylibdir/token.* +$pylibdir/tokenize.* +$pylibdir/trace.* +$pylibdir/traceback.* +$pylibdir/tty.* +$pylibdir/types.* +$pylibdir/unittest/*.* +$pylibdir/unittest/test/*.* +$pylibdir/urllib.* +$pylibdir/urllib2.* +$pylibdir/urlparse.* +$pylibdir/user.* +$pylibdir/uu.* +$pylibdir/uuid.* +$pylibdir/warnings.* +$pylibdir/wave.* +$pylibdir/weakref.* +$pylibdir/webbrowser.* +$pylibdir/whichdb.* +$pylibdir/wsgiref.* +$pylibdir/wsgiref/*.* +$pylibdir/xdrlib.* +$pylibdir/xml +$pylibdir/xmllib.* +$pylibdir/xmlrpclib.* +$pylibdir/zipfile.* +$dynload_dir/Python-${version}-py${pydotver}.egg-info +$dynload_dir/_bisect.so* +$dynload_dir/_codecs_cn.so* +$dynload_dir/_codecs_hk.so* +$dynload_dir/_codecs_iso2022.so* +$dynload_dir/_codecs_jp.so* +$dynload_dir/_codecs_kr.so* +$dynload_dir/_codecs_tw.so* +$dynload_dir/_collections.so* +$dynload_dir/_csv.so* +$dynload_dir/_ctypes.so* +$dynload_dir/_ctypes_test.so* +$dynload_dir/_curses_failed.so* +$dynload_dir/_curses_panel_failed.so* +$dynload_dir/_elementtree.so* +$dynload_dir/_functools.so* +$dynload_dir/_hashlib.so* +$dynload_dir/_heapq.so* +$dynload_dir/_hotshot.so* +$dynload_dir/_io.so* +$dynload_dir/_json.so* +$dynload_dir/_locale.so* +$dynload_dir/_lsprof.so* +$dynload_dir/_multibytecodec.so* +$dynload_dir/_multiprocessing.so* +$dynload_dir/_random.so* +$dynload_dir/_socket.so* +$dynload_dir/_sqlite3.so* +$dynload_dir/_ssl.so* +$dynload_dir/_struct.so* +$dynload_dir/_testcapi.so* +$dynload_dir/array.so* +$dynload_dir/audioop.so* +$dynload_dir/binascii.so* +$dynload_dir/bz2.so* +$dynload_dir/cPickle.so* +$dynload_dir/cStringIO.so* +$dynload_dir/cmath.so* +$dynload_dir/datetime.so* +$dynload_dir/dbm.so* +$dynload_dir/dl.so* +$dynload_dir/fcntl.so* +$dynload_dir/future_builtins.so* +$dynload_dir/grp.so* +$dynload_dir/imageop.so* +$dynload_dir/itertools.so* +$dynload_dir/math.so* +$dynload_dir/mmap.so* +$dynload_dir/nis.so* +$dynload_dir/operator.so* +$dynload_dir/parser.so* +$dynload_dir/pyexpat.so* +$dynload_dir/readline.so* +$dynload_dir/resource.so* +$dynload_dir/select.so* +$dynload_dir/spwd.so* +$dynload_dir/strop.so* +$dynload_dir/sunaudiodev.so* +$dynload_dir/syslog.so* +$dynload_dir/termios.so* +$dynload_dir/time.so* +$dynload_dir/unicodedata.so* +$dynload_dir/zlib.so* + +[python27-tools] +pkgname="${pkgprefix}py27to" +name="python27-tools - Development tools for Python" +pkgcat="application" +pkgvendor="http://python.org" +pkgdesc="A collection of development tools included with Python" +pkgver="$pkgver" +files(-,root,bin) +$_bindir/2to3-${pydotver} +$_bindir/idle${pydotver} +$_bindir/smtpd${pydotver}.py +$_bindir/pygettext${pydotver}.py +$_bindir/msgfmt${pydotver}.py +$_bindir/pynche${pydotver} +$pylibdir/Tools +$site_packages/pynche + +[python27-test] +pkgname="${pkgprefix}py27te" +name="python27-test - Test modules from the main python package" +pkgcat="application" +pkgvendor="http://python.org" +pkgdesc="Test modules that are rarely if ever needed in production" +pkgver="$pkgver" +files(-,root,bin) +$pylibdir/test +$pylibdir/bsddb/test +$pylibdir/ctypes/test +$pylibdir/email/test +$pylibdir/sqlite3/test +$pylibdir/distutils/tests +$pylibdir/json/tests +$pylibdir/lib2to3/tests + +[python27-devel] +pkgname="${pkgprefix}py27d" +name="python27-devel - Development support for Python" +pkgcat="application" +pkgvendor="http://python.org" +pkgdesc="Files needed for developing with Python" +pkgver="$pkgver" +files(-,root,bin) +$_bindir/python*config +$_includedir/python${pydotver} +$_libdir/pkgconfig/python-${pydotver}.pc +$pylibdir/config +$pylibdir/distutils +$_libdir/libpython*.so + +[python27-tkinter] +pkgname="${pkgprefix}py27tk" +name="python27-tkinter - Graphical User interface for Python" +pkgcat="application" +pkgvendor="http://python.org" +pkgdesc="A graphical user interface for the Python scripting language" +pkgver="$pkgver" +files(-,root,bin) +$dynload_dir/_tkinter.so +$pylibdir/lib-tk + diff --git a/python27/src/python-2.7.9-mmap-fcntl_h.patch b/python27/src/python-2.7.9-mmap-fcntl_h.patch new file mode 100644 index 0000000..cc1a2fe --- /dev/null +++ b/python27/src/python-2.7.9-mmap-fcntl_h.patch @@ -0,0 +1,12 @@ +--- Python-2.7.9/Modules/mmapmodule.c.fnctl 2014-12-10 16:59:55.000000000 +0100 ++++ Python-2.7.9/Modules/mmapmodule.c 2015-03-21 12:20:50.544882000 +0100 +@@ -23,9 +23,7 @@ + + #ifndef MS_WINDOWS + #define UNIX +-# ifdef __APPLE__ + # include +-# endif + #endif + + #ifdef MS_WINDOWS diff --git a/python27/src/python-2.7.9-multiprocessing-without-urandom.patch b/python27/src/python-2.7.9-multiprocessing-without-urandom.patch new file mode 100644 index 0000000..d0da51a --- /dev/null +++ b/python27/src/python-2.7.9-multiprocessing-without-urandom.patch @@ -0,0 +1,34 @@ +Patch based on http://bugs.python.org/issue6645 + +--- Python-2.7.9/Lib/multiprocessing/process.py.nourandom 2014-12-10 16:59:39.000000000 +0100 ++++ Python-2.7.9/Lib/multiprocessing/process.py 2015-04-20 08:20:38.663871000 +0200 +@@ -306,7 +306,12 @@ + self._popen = None + self._counter = itertools.count(1) + self._children = set() +- self._authkey = AuthenticationString(os.urandom(32)) ++ try: ++ self._authkey = AuthenticationString(os.urandom(32)) ++ except: ++ import random ++ bytes = [chr(random.randrange(256)) for i in range(32)] ++ self._authkey = AuthenticationString(bytes) + self._tempdir = None + + _current_process = _MainProcess() +--- Python-2.7.9/Lib/multiprocessing/connection.py.nourandom 2014-12-10 16:59:39.000000000 +0100 ++++ Python-2.7.9/Lib/multiprocessing/connection.py 2015-04-20 08:21:05.113976000 +0200 +@@ -412,7 +412,12 @@ + def deliver_challenge(connection, authkey): + import hmac + assert isinstance(authkey, bytes) +- message = os.urandom(MESSAGE_LENGTH) ++ try: ++ message = os.urandom(MESSAGE_LENGTH) ++ except: ++ import random ++ bytes = [chr(random.randrange(256)) for i in range(MESSAGE_LENGTH)] ++ self._authkey = AuthenticationString(bytes) + connection.send_bytes(CHALLENGE + message) + digest = hmac.new(authkey, message).digest() + response = connection.recv_bytes(256) # reject large message diff --git a/python27/src/python-2.7.9-tgcware.patch b/python27/src/python-2.7.9-tgcware.patch new file mode 100644 index 0000000..4373bb9 --- /dev/null +++ b/python27/src/python-2.7.9-tgcware.patch @@ -0,0 +1,16 @@ +--- Python-2.7.9/setup.py.tgcware 2014-12-10 17:00:01.000000000 +0100 ++++ Python-2.7.9/setup.py 2015-03-21 13:24:40.240267000 +0100 +@@ -438,10 +438,10 @@ + os.unlink(tmpfile) + + def detect_modules(self): +- # Ensure that /usr/local is always used ++ # Ensure that /usr/tgcware is always used + if not cross_compiling: +- add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib') +- add_dir_to_list(self.compiler.include_dirs, '/usr/local/include') ++ add_dir_to_list(self.compiler.library_dirs, '/usr/tgcware/lib') ++ add_dir_to_list(self.compiler.include_dirs, '/usr/tgcware/include') + if cross_compiling: + self.add_gcc_paths() + self.add_multiarch_paths()