0a370c531a0f94bd5a7bb6f62df2032f9cc7230b
[feed/packages.git] / lang / python / files / python-package.mk
1 #
2 # Copyright (C) 2006-2015 OpenWrt.org
3 #
4 # This is free software, licensed under the GNU General Public License v2.
5 # See /LICENSE for more information.
6 #
7
8 PYTHON_VERSION:=2.7
9 PYTHON_VERSION_MICRO:=11
10
11 PYTHON_DIR:=$(STAGING_DIR)/usr
12 PYTHON_BIN_DIR:=$(PYTHON_DIR)/bin
13 PYTHON_INC_DIR:=$(PYTHON_DIR)/include/python$(PYTHON_VERSION)
14 PYTHON_LIB_DIR:=$(PYTHON_DIR)/lib/python$(PYTHON_VERSION)
15
16 PYTHON_PKG_DIR:=/usr/lib/python$(PYTHON_VERSION)/site-packages
17
18 PYTHON:=python$(PYTHON_VERSION)
19
20 HOST_PYTHON_LIB_DIR:=$(STAGING_DIR_HOST)/usr/lib/python$(PYTHON_VERSION)
21 HOST_PYTHON_BIN:=$(STAGING_DIR_HOST)/bin/python2
22
23 PYTHONPATH:=$(PYTHON_LIB_DIR):$(STAGING_DIR)/$(PYTHON_PKG_DIR):$(PKG_INSTALL_DIR)/$(PYTHON_PKG_DIR)
24
25 # These configure args are needed in detection of path to Python header files
26 # using autotools.
27 CONFIGURE_ARGS += \
28 _python_sysroot="$(STAGING_DIR)" \
29 _python_prefix="/usr" \
30 _python_exec_prefix="/usr"
31
32 PKG_USE_MIPS16:=0
33 # This is required in addition to PKG_USE_MIPS16:=0 because otherwise MIPS16
34 # flags are inherited from the Python base package (via sysconfig module)
35 ifdef CONFIG_USE_MIPS16
36 TARGET_CFLAGS += -mno-mips16 -mno-interlink-mips16
37 endif
38
39 define PyPackage
40
41 # Add default PyPackage filespec none defined
42 ifndef PyPackage/$(1)/filespec
43 define PyPackage/$(1)/filespec
44 +|$(PYTHON_PKG_DIR)
45 endef
46 endif
47
48 $(call shexport,PyPackage/$(1)/filespec)
49
50 define Package/$(1)/install
51 find $(PKG_INSTALL_DIR) -name "*\.pyc" -o -name "*\.pyo" | xargs rm -f
52 @echo "$$$$$$$$$$(call shvar,PyPackage/$(1)/filespec)" | ( \
53 IFS='|'; \
54 while read fop fspec fperm; do \
55 fop=`echo "$$$$$$$$fop" | tr -d ' \t\n'`; \
56 if [ "$$$$$$$$fop" = "+" ]; then \
57 if [ ! -e "$(PKG_INSTALL_DIR)$$$$$$$$fspec" ]; then \
58 echo "File not found '$(PKG_INSTALL_DIR)$$$$$$$$fspec'"; \
59 exit 1; \
60 fi; \
61 dpath=`dirname "$$$$$$$$fspec"`; \
62 if [ -n "$$$$$$$$fperm" ]; then \
63 dperm="-m$$$$$$$$fperm"; \
64 else \
65 dperm=`stat -c "%a" $(PKG_INSTALL_DIR)$$$$$$$$dpath`; \
66 fi; \
67 mkdir -p $$$$$$$$$dperm $$(1)$$$$$$$$dpath; \
68 echo "copying: '$$$$$$$$fspec'"; \
69 cp -fpR $(PKG_INSTALL_DIR)$$$$$$$$fspec $$(1)$$$$$$$$dpath/; \
70 if [ -n "$$$$$$$$fperm" ]; then \
71 chmod -R $$$$$$$$fperm $$(1)$$$$$$$$fspec; \
72 fi; \
73 elif [ "$$$$$$$$fop" = "-" ]; then \
74 echo "removing: '$$$$$$$$fspec'"; \
75 rm -fR $$(1)$$$$$$$$fspec; \
76 elif [ "$$$$$$$$fop" = "=" ]; then \
77 echo "setting permissions: '$$$$$$$$fperm' on '$$$$$$$$fspec'"; \
78 chmod -R $$$$$$$$fperm $$(1)$$$$$$$$fspec; \
79 fi; \
80 done; \
81 )
82 $(call PyPackage/$(1)/install,$$(1))
83 endef
84 endef
85
86 $(call include_mk, python-host.mk)
87
88 # $(1) => build subdir
89 # $(2) => additional arguments to setup.py
90 # $(3) => additional variables
91 define Build/Compile/PyMod
92 $(INSTALL_DIR) $(PKG_INSTALL_DIR)/$(PYTHON_PKG_DIR)
93 $(call HostPython, \
94 cd $(PKG_BUILD_DIR)/$(strip $(1)); \
95 CC="$(TARGET_CC)" \
96 CCSHARED="$(TARGET_CC) $(FPIC)" \
97 CXX="$(TARGET_CXX)" \
98 LD="$(TARGET_CC)" \
99 LDSHARED="$(TARGET_CC) -shared" \
100 CFLAGS="$(TARGET_CFLAGS)" \
101 CPPFLAGS="$(TARGET_CPPFLAGS) -I$(PYTHON_INC_DIR)" \
102 LDFLAGS="$(TARGET_LDFLAGS) -lpython$(PYTHON_VERSION)" \
103 _PYTHON_HOST_PLATFORM=linux2 \
104 __PYVENV_LAUNCHER__="/usr/bin/$(PYTHON)" \
105 $(3) \
106 , \
107 ./setup.py $(2) \
108 )
109 find $(PKG_INSTALL_DIR) -name "*\.pyc" -o -name "*\.pyo" | xargs rm -f
110 endef
111
112 define PyMod/Default
113 define Build/Compile
114 $$(call Build/Compile/PyMod,,install --prefix=/usr --root=$(PKG_INSTALL_DIR))
115 endef
116
117 define Package/$(PKG_NAME)/install
118 $(INSTALL_DIR) $$(1)$(PYTHON_PKG_DIR) $$(1)/usr/bin
119 if [ -d $(PKG_INSTALL_DIR)/usr/bin ]; then find $(PKG_INSTALL_DIR)/usr/bin -mindepth 1 -maxdepth 1 -type f -exec $(CP) \{\} $$(1)/usr/bin/ \; ; fi
120 find $(PKG_INSTALL_DIR)$(PYTHON_PKG_DIR) -mindepth 1 -maxdepth 1 \( -type f -o -type d \) -exec $(CP) \{\} $$(1)$(PYTHON_PKG_DIR)/ \;
121 endef
122
123 define Build/InstallDev
124 $(INSTALL_DIR) $$(1)/usr/bin $$(1)$(PYTHON_PKG_DIR)
125 if [ -d $(PKG_INSTALL_DIR)/usr/bin ]; then find $(PKG_INSTALL_DIR)/usr/bin -mindepth 1 -maxdepth 1 -type f -exec $(CP) \{\} $$(1)/usr/bin/ \; ; fi
126 find $(PKG_INSTALL_DIR)$(PYTHON_PKG_DIR) -mindepth 1 -maxdepth 1 \( -type f -o -type d \) -exec $(CP) \{\} $$(1)$(PYTHON_PKG_DIR)/ \;
127 endef
128 endef
129