contrib/Makefile.python
author FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
Fri, 15 Aug 2014 20:28:51 +0900
changeset 22196 23fe278bde43
parent 20388 9fe578297b5c
child 23140 fbd79c2552a6
permissions -rw-r--r--
largefiles: keep largefiles from colliding with normal one during linear merge Before this patch, linear merging of modified or newly added largefile causes unexpected result, if (1) largefile collides with same name normal one in the target revision and (2) "local" largefile is chosen, even though branch merging between such revisions doesn't. Expected result of such linear merging is: (1) (not yet recorded) largefile is kept in the working directory (2) largefile is marked as (re-)"added" (3) colliding normal file is marked as "removed" But actual result is: (1) largefile in the working directory is unlinked (2) largefile is marked as "normal" (so treated as "missing") (3) the dirstate entry for colliding normal file is just dropped (1) is very serious, because there is no way to restore temporarily modified largefiles. (3) prevents the next commit from adding the manifest with correct "removal of (normal) file" information for newly created changeset. The root cause of this problem is putting "lfile" into "actions['r']" in linear-merging case. At liner merging, "actions['r']" causes: - unlinking "target file" in the working directory, but "lfile" as "target file" is also largefile itself in this case - dropping the dirstate entry for target file "actions['f']" (= "forget") does only the latter, and this is reason why this patch doesn't choose putting "lfile" into it instead of "actions['r']". This patch newly introduces action "lfmr" (LargeFiles: Mark as Removed) to mark colliding normal file as "removed" without unlinking it. This patch uses "hg debugdirstate" instead of "hg status" in test, because: - choosing "local largefile" hides "removed" status of "remote normal file" in "hg status" output, and - "hg status" for "large2" in this case has another problem fixed in the subsequent patch
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
20388
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
     1
PYTHONVER=2.7.6
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
     2
PYTHONNAME=python-
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
     3
PREFIX=$(HOME)/bin/prefix-$(PYTHONNAME)$(PYTHONVER)
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
     4
SYMLINKDIR=$(HOME)/bin
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
     5
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
     6
help:
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
     7
	@echo
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
     8
	@echo 'Make a custom installation of a Python version'
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
     9
	@echo
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    10
	@echo 'Common make parameters:'
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    11
	@echo '  PYTHONVER=...    [$(PYTHONVER)]'
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    12
	@echo '  PREFIX=...       [$(PREFIX)]'
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    13
	@echo '  SYMLINKDIR=...   [$(SYMLINKDIR) creating $(PYTHONNAME)$(PYTHONVER)]'
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    14
	@echo
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    15
	@echo 'Common make targets:'
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    16
	@echo '  python    - install Python $$PYTHONVER in $$PREFIX'
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    17
	@echo '  symlink   - create a $$SYMLINKDIR/$(PYTHONNAME)$$PYTHONVER symlink'
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    18
	@echo
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    19
	@echo 'Example: create a temporary Python installation:'
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    20
	@echo '  $$ make -f Makefile.python python PYTHONVER=2.4 PREFIX=/tmp/p24'
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    21
	@echo '  $$ /tmp/p24/bin/python -V'
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    22
	@echo '  Python 2.4'
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    23
	@echo
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    24
	@echo 'Some external libraries are required for building Python: zlib bzip2 openssl.'
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    25
	@echo 'Make sure their development packages are installed systemwide.'
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    26
# fedora: yum install zlib-devel bzip2-devel openssl-devel
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    27
# debian: apt-get install zlib1g-dev libbz2-dev libssl-dev
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    28
	@echo
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    29
	@echo 'To build a nice collection of interesting Python versions:'
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    30
	@echo '  $$ for v in 2.{4{,.2,.3},5{,.6},6{,.1,.2,.9},7{,.6}}; do'
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    31
	@echo '    make -f Makefile.python symlink PYTHONVER=$$v || break; done'
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    32
	@echo 'To run a Mercurial test on all these Python versions:'
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    33
	@echo '  $$ for py in `cd ~/bin && ls $(PYTHONNAME)2.*`; do'
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    34
	@echo '    echo $$py; $$py run-tests.py test-http.t; echo; done'
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    35
	@echo
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    36
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    37
export LANGUAGE=C
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    38
export LC_ALL=C
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    39
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    40
python: $(PREFIX)/bin/python docutils
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    41
	printf 'import sys, zlib, bz2, docutils\nif sys.version_info >= (2,6):\n import ssl' | $(PREFIX)/bin/python
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    42
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    43
PYTHON_SRCDIR=Python-$(PYTHONVER)
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    44
PYTHON_SRCFILE=$(PYTHON_SRCDIR).tgz
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    45
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    46
$(PREFIX)/bin/python:
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    47
	[ -f $(PYTHON_SRCFILE) ] || wget http://www.python.org/ftp/python/$(PYTHONVER)/$(PYTHON_SRCFILE) || [ -f $(PYTHON_SRCFILE) ]
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    48
	rm -rf $(PYTHON_SRCDIR)
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    49
	tar xf $(PYTHON_SRCFILE)
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    50
	# Ubuntu disables SSLv2 the hard way, disable it on old Pythons too
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    51
	-sed -i 's,self.*SSLv2_method(),0;//\0,g' $(PYTHON_SRCDIR)/Modules/_ssl.c
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    52
	# Find multiarch system libraries on Ubuntu with Python 2.4.x
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    53
	# http://lipyrary.blogspot.dk/2011/05/how-to-compile-python-on-ubuntu-1104.html
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    54
	-sed -i "s|lib_dirs = .* \[|\0'/usr/lib/`dpkg-architecture -qDEB_HOST_MULTIARCH`',|g" $(PYTHON_SRCDIR)/setup.py
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    55
	# Find multiarch system libraries on Ubuntu and disable fortify error when setting argv
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    56
	LDFLAGS="-L/usr/lib/`dpkg-architecture -qDEB_HOST_MULTIARCH`"; \
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    57
	BASECFLAGS=-U_FORTIFY_SOURCE; \
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    58
	export LDFLAGS BASECFLAGS; \
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    59
	cd $(PYTHON_SRCDIR) && ./configure --prefix=$(PREFIX) && make all SVNVERSION=pwd && make install
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    60
	printf 'import sys, zlib, bz2\nif sys.version_info >= (2,6):\n import ssl' | $(PREFIX)/bin/python
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    61
	rm -rf $(PYTHON_SRCDIR)
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    62
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    63
DOCUTILSVER=0.11
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    64
DOCUTILS_SRCDIR=docutils-$(DOCUTILSVER)
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    65
DOCUTILS_SRCFILE=$(DOCUTILS_SRCDIR).tar.gz
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    66
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    67
docutils: $(PREFIX)/bin/python
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    68
	@$(PREFIX)/bin/python -c 'import docutils' || ( set -ex; \
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    69
	[ -f $(DOCUTILS_SRCFILE) ] || wget http://downloads.sourceforge.net/project/docutils/docutils/$(DOCUTILSVER)/$(DOCUTILS_SRCFILE) || [ -f $(DOCUTILS_SRCFILE) ]; \
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    70
	rm -rf $(DOCUTILS_SRCDIR); \
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    71
	tar xf $(DOCUTILS_SRCFILE); \
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    72
	cd $(DOCUTILS_SRCDIR) && $(PREFIX)/bin/python setup.py install --prefix=$(PREFIX); \
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    73
	$(PREFIX)/bin/python -c 'import docutils'; \
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    74
	rm -rf $(DOCUTILS_SRCDIR); )
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    75
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    76
symlink: python $(SYMLINKDIR)
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    77
	ln -sf $(PREFIX)/bin/python $(SYMLINKDIR)/$(PYTHONNAME)$(PYTHONVER)
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    78
9fe578297b5c contrib/Makefile.python: build local Python from source
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
    79
.PHONY: help python docutils symlink