summaryrefslogtreecommitdiff
blob: f1f74907eec238c8943098053c08c8ca34614ad8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
# Copyright 1999-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI="7"

MULTILIB_STRICT_DIRS=  # Dirty hack to bypass failing multilib-strict testing

PYVER_MAJOR="$(ver_cut 1)"
PYVER_MINOR="$(ver_cut 2)"
PYVER="${PYVER_MAJOR}.${PYVER_MINOR}"

DESCRIPTION="A really great language"
HOMEPAGE="https://www.python.org"
SRC_URI="https://www.python.org/ftp/python/${PV}/Python-${PV}.tgz"

SLOT="2.2"
LICENSE="PSF-2.2"
KEYWORDS="~amd64 ~sparc ~x86"
IUSE="build readline tk berkdb bootstrap"

DEPEND="
	>=sys-libs/zlib-1.1.3
	readline? ( >=sys-libs/readline-4.1 >=sys-libs/ncurses-5.2 )
	berkdb? ( >=sys-libs/db-3:* )
	tk? ( >=dev-lang/tk-8.0 )"
RDEPEND="$DEPEND"

# The dev-python/python-fchksum RDEPEND is needed to that this python provides
# the functionality expected from previous pythons.

S=${WORKDIR}/Python-${PV}

src_prepare() {
	# python's config seems to ignore CFLAGS
	export OPT=$CFLAGS

	# adjust makefile to install pydoc into ${D} correctly
	t=${S}/Makefile.pre.in
	cp $t $t.orig || die
	sed 's:install-platlib.*:& --install-scripts=$(BINDIR):' $t.orig > $t

	# adjust Setup to include the various modules we need
	cd "${S}"
	# turn **on** shared
	scmd="s:#\(\*shared\*\):\1:;"
	# adjust for USE readline
	if use readline; then
		scmd="$scmd  s:#\(readline .*\) -ltermcap:\1:;"
		scmd="$scmd  s:#\(_curses .*\) -lcurses -ltermcap:\1 -lncurses:;"
	fi
	# adjust for USE tk
	if use tk; then
		# Find the version of tcl/tk that has headers installed.
		# This will be the most recently merged, not necessarily the highest
		# version number.
		tclv=$(grep TCL_VER /usr/include/tcl.h | sed 's/^.*"\(.*\)".*/\1/')
		tkv=$( grep  TK_VER /usr/include/tk.h  | sed 's/^.*"\(.*\)".*/\1/')
		# adjust Setup to match
		scmd="$scmd  s:# \(_tkinter \):\1:;"
		scmd="$scmd  s:#\(\t-ltk[0-9.]* -ltcl[0-9.]*\):\t-ltk$tkv -ltcl$tclv:;"
		scmd="$scmd  s:#\(\t-L/usr/X11R6/lib\):\1:;"
		scmd="$scmd  s:#\(\t-lX11.*\):\1:;"
		scmd="$scmd  s:#\(\t-I/usr/X11R6/include\):\1:;"
	fi
	# adjust for USE berkdb
	if use berkdb; then
		# patch the dbmmodule to use db3's dbm compatibility code.  That way,
		# we're depending on db3 rather than old db1.
		t=Modules/dbmmodule.c
		cp $t $t.orig || die
		sed \
			-e '10,25d' \
			-e '26i\' \
			-e '#define DB_DBM_HSEARCH 1\' \
			-e 'static char *which_dbm = "BSD db";\' \
			-e '#include <db3/db.h>' \
			$t.orig > $t
		# now fix Setup
		scmd="$scmd  s:#dbm.*:dbm dbmmodule.c -I/usr/include/db3 -ldb-3.2:;"
	fi
	# no USE vars to switch off these adjustments:
	scmd="$scmd  s:#\(_locale .*\):\1:;"  # access to ISO C locale support
	scmd="$scmd  s:#\(syslog .*\):\1:;"   # syslog daemon interface
	scmd="$scmd  s:#\(zlib .*\):\1:;"	 # This require zlib 1.1.3 (or later).
	scmd="$scmd  s:#\(termios .*\):\1:;"  # Steen Lumholt's termios module
	scmd="$scmd  s:#\(resource .*\):\1:;" # Jeremy Hylton's rlimit interface
	sed "$scmd" Modules/Setup.dist > Modules/Setup

	eapply "${FILESDIR}"/${P}-readline.patch

	eapply_user
}

src_configure() {
	local myopts
	#if we are creating a new build image, we remove the dependency on g++
	if [ "`use build`" -a ! "`use bootstrap`" ]
	then
		myopts="--with-cxx=no"
	fi
	OPT="${CFLAGS} -fPIC" ./configure \
		--prefix=/usr \
		--without-libdb \
		--infodir='${prefix}'/share/info \
		--mandir='${prefix}'/share/man $myopts
	assert "Configure failed"
	# kill the -DHAVE_CONFIG_H flag
	mv Makefile Makefile.orig
	sed -e 's/-DHAVE_CONFIG_H//' Makefile.orig > Makefile
}

src_compile() {
	#emake || die "Parallel make failed"
	make || die "Parallel make failed"
}

src_install() {
	dodir /usr

	# Extra shot to workaround weird "Lib/plat-linux3" target error
	make install prefix="${D}"/usr || true
	make install prefix="${D}"/usr || die
	rm "${D}/usr/bin/python" || die
	dodoc README || die

	# install our own custom python-config
	### exeinto /usr/bin
	### newexe "${FILESDIR}"/python-config-${PYVER} python-config

	# seems like the build do not install Makefile.pre.in anymore
	insinto /usr/lib/python${PYVER}/config
	doins "${S}"/Makefile.pre.in || die

	# If USE tk lets install idle
	# Need to script the python version in the path
	if use tk; then
		dodir /usr/lib/python${PYVER}/tools
		mv "${S}/Tools/idle" "${D}/usr/lib/python${PYVER}/tools/" || die
		dosym /usr/lib/python${PYVER}/tools/idle/idle.py /usr/bin/idle.py || die
	fi

	mv "${D}"/usr/share/man/man1/python{,${PV}}.1 || die
	mv "${D}"/usr/bin/pydoc{,${PV}} || die
}