Bug 181721 - lang/python27 has no libintl support
Summary: lang/python27 has no libintl support
Status: Closed FIXED
Alias: None
Product: Ports & Packages
Classification: Unclassified
Component: Individual Port(s) (show other bugs)
Version: Latest
Hardware: Any Any
: Normal Affects Only Me
Assignee: Kubilay Kocak
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2013-09-01 11:50 UTC by Pawel Pekala
Modified: 2013-09-18 11:36 UTC (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Pawel Pekala freebsd_committer 2013-09-01 11:50:00 UTC
During configure phase python fails to find intl.h from gettext package:

checking libintl.h usability... no
checking libintl.h presence... no
checking for libintl.h... no

All translated applications using gettext.bindtextdomain() fails to do so
making sometimes translated text mangled or causing application to crash in
rare occasions.

This probably affects other python ports, I didn't check.
Comment 1 Pawel Pekala freebsd_committer 2013-09-01 12:48:30 UTC
Responsible Changed
From-To: freebsd-ports-bugs->pawel
Comment 2 Pawel Pekala freebsd_committer 2013-09-01 13:23:52 UTC
Responsible Changed
From-To: pawel->freebsd-ports-bugs

Taken by mistake
Comment 3 Pawel Pekala freebsd_committer 2013-09-01 14:11:51 UTC
Responsible Changed
From-To: freebsd-ports-bugs->freebsd-python

Over to maintainer
Comment 4 Kubilay Kocak freebsd_committer freebsd_triage 2013-09-01 15:29:34 UTC
Responsible Changed
From-To: freebsd-python->koobs

I'll take it. Preliminary patch sent to submitter with promising 
results.
Comment 5 dfilter service freebsd_committer 2013-09-08 15:05:28 UTC
Author: koobs
Date: Sun Sep  8 14:05:18 2013
New Revision: 326729
URL: http://svnweb.freebsd.org/changeset/ports/326729

Log:
  Resolve gettext (libintl) detection and linking in all Python ports
  
  Fix gettext (NLS) detection, includes and linking:
  - all: Use LDFLAGS and CPPFLAGS over CFLAGS for NLS option (with comment)
  - python26,27: Pass LIBS="-lintl" to CONFIGURE_ENV
  
  Workaround Pythons odd build mechanics causing duplicate args:
  - all: Remove CFLAGS from OPT= in CONFIGURE_ENV
  - python32,33: Remove CONFIGURE_* variables from Makefile.pre.in
  
  Other:
  - python32: Patch setup.py to pass OPT correctly to shared modules
  
  PR:		ports/181721
  Reported by:	pawel
  Reviewed by:	bapt mva sbz

Modified:
  head/lang/python26/Makefile
  head/lang/python27/Makefile
  head/lang/python31/Makefile
  head/lang/python32/Makefile
  head/lang/python32/files/patch-Makefile.pre.in
  head/lang/python32/files/patch-setup.py   (contents, props changed)
  head/lang/python33/Makefile
  head/lang/python33/files/patch-Makefile.pre.in

Modified: head/lang/python26/Makefile
==============================================================================
--- head/lang/python26/Makefile	Sun Sep  8 13:59:48 2013	(r326728)
+++ head/lang/python26/Makefile	Sun Sep  8 14:05:18 2013	(r326729)
@@ -3,7 +3,7 @@
 
 PORTNAME=	python26
 PORTVERSION=	2.6.8
-PORTREVISION=	6
+PORTREVISION=	7
 CATEGORIES=	lang python ipv6
 MASTER_SITES=	PYTHON
 MASTER_SITE_SUBDIR=	${PYTHON_MASTER_SITE_SUBDIR}
@@ -63,9 +63,12 @@ NLS_DESC=	Enable Gettext support for the
 
 .if ${PORT_OPTIONS:MNLS}
 USES+=		gettext
-# XXX do not set any LDFLAGS or CFLAGS - this causes pyexpat to fail building
-#LDFLAGS+=	"-L${LOCALBASE}/lib"
-#CFLAGS+=	"-I${LOCALBASE}/include"
+LDFLAGS+=	-L${LOCALBASE}/lib
+# We use CPPFLAGS over CFLAGS here due to -I ordering causing things like
+# elementtree and pyexpat to break with python27, or to silence preprocessor
+# complaints with python33
+CPPFLAGS+=	-I${LOCALBASE}/include
+CONFIGURE_ENV+=	LIBS="-lintl"
 .else
 CONFIGURE_ENV+=	ac_cv_lib_intl_textdomain=no ac_cv_header_libintl_h=no
 .endif
@@ -144,7 +147,7 @@ CONFIGURE_ARGS+=	--disable-ipv6
 CONFIGURE_ARGS+=	--with-fpectl
 .endif
 
-CONFIGURE_ENV+=	OPT="${CFLAGS} ${_PTH_CPPFLAGS}"
+CONFIGURE_ENV+=	OPT="${_PTH_CPPFLAGS}"
 
 pre-patch:
 	${CP} -r ${PATCH_WRKSRC}/Lib/plat-freebsd8 \

Modified: head/lang/python27/Makefile
==============================================================================
--- head/lang/python27/Makefile	Sun Sep  8 13:59:48 2013	(r326728)
+++ head/lang/python27/Makefile	Sun Sep  8 14:05:18 2013	(r326729)
@@ -3,7 +3,7 @@
 
 PORTNAME=	python27
 PORTVERSION=	2.7.5
-PORTREVISION=	2
+PORTREVISION=	3
 CATEGORIES=	lang python ipv6
 MASTER_SITES=	PYTHON
 MASTER_SITE_SUBDIR=	${PYTHON_MASTER_SITE_SUBDIR}
@@ -52,7 +52,7 @@ BINLINKS_SUB_PYTHON_VER=	${BINLINKS_SUB_
 OPTIONS_DEFINE=		THREADS SEM PTH PYMALLOC IPV6 FPECTL EXAMPLES NLS
 OPTIONS_DEFAULT=	THREADS UCS4 PYMALLOC IPV6
 
-OPTIONS_SINGLE=	UCS
+OPTIONS_SINGLE=		UCS
 OPTIONS_SINGLE_UCS=	UCS2 UCS4
 
 NLS_DESC=	Enable Gettext support for the locale module
@@ -61,9 +61,12 @@ NLS_DESC=	Enable Gettext support for the
 
 .if ${PORT_OPTIONS:MNLS}
 USES+=		gettext
-# XXX do not set any LDFLAGS or CFLAGS - this causes pyexpat to fail building
-#LDFLAGS+=	"-L${LOCALBASE}/lib"
-#CFLAGS+=	"-I${LOCALBASE}/include"
+LDFLAGS+=	-L${LOCALBASE}/lib
+# We use CPPFLAGS over CFLAGS here due to -I ordering causing things like
+# elementtree and pyexpat to break with python27, or to silence preprocessor
+# complaints with python33
+CPPFLAGS+=	-I${LOCALBASE}/include
+CONFIGURE_ENV+=	LIBS="-lintl"
 .else
 CONFIGURE_ENV+=	ac_cv_lib_intl_textdomain=no ac_cv_header_libintl_h=no
 .endif
@@ -147,7 +150,7 @@ CONFIGURE_ARGS+=	--disable-ipv6
 CONFIGURE_ARGS+=	--with-fpectl
 .endif
 
-CONFIGURE_ENV+=	OPT="${CFLAGS} ${_PTH_CPPFLAGS}"
+CONFIGURE_ENV+=	OPT="${_PTH_CPPFLAGS}"
 
 post-extract:
 # The distribution tarball for python 2.7 has permission bits for 'others'

Modified: head/lang/python31/Makefile
==============================================================================
--- head/lang/python31/Makefile	Sun Sep  8 13:59:48 2013	(r326728)
+++ head/lang/python31/Makefile	Sun Sep  8 14:05:18 2013	(r326729)
@@ -2,7 +2,7 @@
 
 PORTNAME=	python31
 PORTVERSION=	3.1.5
-PORTREVISION=	3
+PORTREVISION=	4
 CATEGORIES=	lang python ipv6
 MASTER_SITES=	PYTHON
 MASTER_SITE_SUBDIR=	${PYTHON_MASTER_SITE_SUBDIR}
@@ -19,7 +19,7 @@ WRKSRC=		${PYTHON_WRKSRC}/portbld.static
 PATCH_WRKSRC=	${PYTHON_WRKSRC}
 GNU_CONFIGURE=	yes
 CONFIGURE_SCRIPT=	../configure # must be relative
-CONFIGURE_ENV=	OPT="${CFLAGS}" SVNVERSION="echo freebsd"
+CONFIGURE_ENV=	OPT="" SVNVERSION="echo freebsd"
 MAKE_ENV=	VPATH="${PYTHON_WRKSRC}"
 USE_LDCONFIG=	yes
 INSTALL_TARGET=	altinstall
@@ -58,9 +58,11 @@ NLS_DESC=	Enable Gettext support for the
 
 .if ${PORT_OPTIONS:MNLS}
 USES+=		gettext
-# XXX do not set any LDFLAGS or CFLAGS - this causes pyexpat to fail building
-#LDFLAGS+=	"-L${LOCALBASE}/lib"
-#CFLAGS+=	"-I${LOCALBASE}/include"
+LDFLAGS+=	-L${LOCALBASE}/lib
+# We use CPPFLAGS over CFLAGS here due to -I ordering causing things like
+# elementtree and pyexpat to break with python27, or to silence preprocessor
+# complaints with python33
+CPPFLAGS+=	-I${LOCALBASE}/include
 .else
 CONFIGURE_ENV+=	ac_cv_lib_intl_textdomain=no ac_cv_header_libintl_h=no
 .endif

Modified: head/lang/python32/Makefile
==============================================================================
--- head/lang/python32/Makefile	Sun Sep  8 13:59:48 2013	(r326728)
+++ head/lang/python32/Makefile	Sun Sep  8 14:05:18 2013	(r326729)
@@ -2,7 +2,7 @@
 
 PORTNAME=	python32
 PORTVERSION=	3.2.5
-PORTREVISION=	2
+PORTREVISION=	3
 CATEGORIES=	lang python ipv6
 MASTER_SITES=	PYTHON
 MASTER_SITE_SUBDIR=	${PYTHON_MASTER_SITE_SUBDIR}
@@ -16,7 +16,7 @@ WRKSRC=		${PYTHON_WRKSRC}/portbld.static
 PATCH_WRKSRC=	${PYTHON_WRKSRC}
 GNU_CONFIGURE=	yes
 CONFIGURE_SCRIPT=	../configure # must be relative
-CONFIGURE_ENV=	OPT="${CFLAGS}" SVNVERSION="echo freebsd"
+CONFIGURE_ENV=	OPT="" SVNVERSION="echo freebsd"
 MAKE_ENV=	VPATH="${PYTHON_WRKSRC}"
 USE_LDCONFIG=	yes
 INSTALL_TARGET=	altinstall
@@ -56,9 +56,11 @@ NLS_DESC=	Enable Gettext support for the
 
 .if ${PORT_OPTIONS:MNLS}
 USES+=		gettext
-# XXX do not set any LDFLAGS or CFLAGS - this causes pyexpat to fail building
-#LDFLAGS+=	"-L${LOCALBASE}/lib"
-#CFLAGS+=	"-I${LOCALBASE}/include"
+LDFLAGS+=	-L${LOCALBASE}/lib
+# We use CPPFLAGS over CFLAGS here due to -I ordering causing things like
+# elementtree and pyexpat to break with python27, or to silence preprocessor
+# complaints with python33
+CPPFLAGS+=	-I${LOCALBASE}/include
 .else
 CONFIGURE_ENV+=	ac_cv_lib_intl_textdomain=no ac_cv_header_libintl_h=no
 .endif

Modified: head/lang/python32/files/patch-Makefile.pre.in
==============================================================================
--- head/lang/python32/files/patch-Makefile.pre.in	Sun Sep  8 13:59:48 2013	(r326728)
+++ head/lang/python32/files/patch-Makefile.pre.in	Sun Sep  8 14:05:18 2013	(r326729)
@@ -1,5 +1,30 @@
---- ./Makefile.pre.in.orig	2013-04-06 11:38:41.000000000 +0400
-+++ ./Makefile.pre.in	2013-04-08 17:48:45.000000000 +0400
+--- Makefile.pre.in.orig	2013-05-16 02:33:51.000000000 +1000
++++ Makefile.pre.in	2013-09-05 23:42:32.910025692 +1000
+@@ -70,18 +70,18 @@
+ OPT=		@OPT@
+ BASECFLAGS=	@BASECFLAGS@
+ BASECPPFLAGS=	@BASECPPFLAGS@
+-CONFIGURE_CFLAGS=	@CFLAGS@
+-CONFIGURE_CPPFLAGS=	@CPPFLAGS@
+-CONFIGURE_LDFLAGS=	@LDFLAGS@
++CFLAGS=	@CFLAGS@
++CPPFLAGS=	@CPPFLAGS@
++LDFLAGS=	@LDFLAGS@
+ # Avoid assigning CFLAGS, LDFLAGS, etc. so users can use them on the
+ # command line to append to these values without stomping the pre-set
+ # values.
+-PY_CFLAGS=	$(BASECFLAGS) $(OPT) $(CONFIGURE_CFLAGS) $(CFLAGS) $(EXTRA_CFLAGS)
++PY_CFLAGS=	$(BASECFLAGS) $(OPT) $(CFLAGS) $(EXTRA_CFLAGS)
+ # Both CPPFLAGS and LDFLAGS need to contain the shell's value for setup.py to
+ # be able to build extension modules using the directories specified in the
+ # environment variables
+-PY_CPPFLAGS=	$(BASECPPFLAGS) -I. -IInclude -I$(srcdir)/Include $(CONFIGURE_CPPFLAGS) $(CPPFLAGS)
+-PY_LDFLAGS=	$(CONFIGURE_LDFLAGS) $(LDFLAGS)
++PY_CPPFLAGS=	$(BASECPPFLAGS) -I. -IInclude -I$(srcdir)/Include $(CPPFLAGS)
++PY_LDFLAGS=	$(LDFLAGS)
+ NO_AS_NEEDED=	@NO_AS_NEEDED@
+ LDLAST=		@LDLAST@
+ SGI_ABI=	@SGI_ABI@
 @@ -277,21 +277,21 @@
  
  ##########################################################################

Modified: head/lang/python32/files/patch-setup.py
==============================================================================
--- head/lang/python32/files/patch-setup.py	Sun Sep  8 13:59:48 2013	(r326728)
+++ head/lang/python32/files/patch-setup.py	Sun Sep  8 14:05:18 2013	(r326729)
@@ -1,5 +1,5 @@
---- setup.py.orig	2011-02-26 04:56:47.906445474 +0800
-+++ setup.py	2011-02-26 04:56:49.969976034 +0800
+--- setup.py.orig	2013-05-16 02:33:58.000000000 +1000
++++ setup.py	2013-09-08 02:31:44.216199627 +1000
 @@ -21,7 +21,7 @@
  COMPILED_WITH_PYDEBUG = hasattr(sys, 'gettotalrefcount')
  
@@ -9,7 +9,18 @@
  
  # File which contains the directory for shared mods (for sys.path fixup
  # when running from the build dir, see Modules/getpath.c)
-@@ -585,7 +585,7 @@
+@@ -235,8 +235,8 @@
+         # unfortunately, distutils doesn't let us provide separate C and C++
+         # compilers
+         if compiler is not None:
+-            (ccshared,cflags) = sysconfig.get_config_vars('CCSHARED','CFLAGS')
+-            args['compiler_so'] = compiler + ' ' + ccshared + ' ' + cflags
++            (ccshared,opt,cflags) = sysconfig.get_config_vars('CCSHARED','OPT','CFLAGS')
++            args['compiler_so'] = compiler + ' ' + ccshared + ' ' + opt + ' ' + cflags
+         self.compiler.set_executables(**args)
+ 
+         # Not only do we write the builddir cookie, but we manually install
+@@ -629,7 +629,7 @@
          # use the same library for the readline and curses modules.
          if 'curses' in readline_termcap_library:
              curses_library = readline_termcap_library
@@ -18,7 +29,7 @@
              curses_library = 'ncursesw'
          elif self.compiler.find_library_file(lib_dirs, 'ncurses'):
              curses_library = 'ncurses'
-@@ -624,7 +624,7 @@
+@@ -668,7 +668,7 @@
                                                       'termcap'):
                  readline_libs.append('termcap')
              exts.append( Extension('readline', ['readline.c'],
@@ -27,7 +38,7 @@
                                     extra_link_args=readline_extra_link_args,
                                     libraries=readline_libs) )
          else:
-@@ -1139,12 +1139,13 @@
+@@ -1187,12 +1187,13 @@
          # provided by the ncurses library.
          panel_library = 'panel'
          if curses_library.startswith('ncurses'):
@@ -42,7 +53,7 @@
                                     libraries = curses_libs) )
          elif curses_library == 'curses' and platform != 'darwin':
                  # OSX has an old Berkeley curses, not good enough for
-@@ -1157,6 +1158,7 @@
+@@ -1205,6 +1206,7 @@
                  curses_libs = ['curses']
  
              exts.append( Extension('_curses', ['_cursesmodule.c'],
@@ -50,7 +61,7 @@
                                     libraries = curses_libs) )
          else:
              missing.append('_curses')
-@@ -1309,7 +1311,7 @@
+@@ -1373,7 +1375,7 @@
              macros = dict()
              libraries = []
  
@@ -59,7 +70,7 @@
              # FreeBSD's P1003.1b semaphore support is very experimental
              # and has many known problems. (as of June 2008)
              macros = dict()
-@@ -1352,8 +1354,7 @@
+@@ -1416,8 +1418,7 @@
          # End multiprocessing
  
          # Platform-specific libraries
@@ -69,7 +80,7 @@
              or platform.startswith("gnukfreebsd")):
              exts.append( Extension('ossaudiodev', ['ossaudiodev.c']) )
          else:
-@@ -1868,8 +1869,7 @@
+@@ -1935,8 +1936,7 @@
            # If you change the scripts installed here, you also need to
            # check the PyBuildScripts command above, and change the links
            # created by the bininstall target in Makefile.pre.in

Modified: head/lang/python33/Makefile
==============================================================================
--- head/lang/python33/Makefile	Sun Sep  8 13:59:48 2013	(r326728)
+++ head/lang/python33/Makefile	Sun Sep  8 14:05:18 2013	(r326729)
@@ -2,7 +2,7 @@
 
 PORTNAME=	python33
 PORTVERSION=	3.3.2
-PORTREVISION=	2
+PORTREVISION=	3
 CATEGORIES=	lang python ipv6
 MASTER_SITES=	PYTHON
 MASTER_SITE_SUBDIR=	${PYTHON_MASTER_SITE_SUBDIR}
@@ -16,7 +16,7 @@ WRKSRC=		${PYTHON_WRKSRC}/portbld.static
 PATCH_WRKSRC=	${PYTHON_WRKSRC}
 GNU_CONFIGURE=	yes
 CONFIGURE_SCRIPT=	../configure # must be relative
-CONFIGURE_ENV=	OPT="${CFLAGS}" SVNVERSION="echo freebsd"
+CONFIGURE_ENV=	OPT="" SVNVERSION="echo freebsd"
 MAKE_ENV=	VPATH="${PYTHON_WRKSRC}"
 USE_LDCONFIG=	yes
 INSTALL_TARGET=	altinstall
@@ -57,9 +57,11 @@ NLS_DESC=	Enable Gettext support for the
 
 .if ${PORT_OPTIONS:MNLS}
 USES+=		gettext
-# XXX do not set any LDFLAGS or CFLAGS - this causes pyexpat to fail building
-#LDFLAGS+=	"-L${LOCALBASE}/lib"
-#CFLAGS+=	"-I${LOCALBASE}/include"
+LDFLAGS+=	-L${LOCALBASE}/lib
+# We use CPPFLAGS over CFLAGS here due to -I ordering causing things like
+# elementtree and pyexpat to break with python27, or to silence preprocessor
+# complaints with python33
+CPPFLAGS+=	-I${LOCALBASE}/include
 .else
 CONFIGURE_ENV+=	ac_cv_lib_intl_textdomain=no ac_cv_header_libintl_h=no
 .endif

Modified: head/lang/python33/files/patch-Makefile.pre.in
==============================================================================
--- head/lang/python33/files/patch-Makefile.pre.in	Sun Sep  8 13:59:48 2013	(r326728)
+++ head/lang/python33/files/patch-Makefile.pre.in	Sun Sep  8 14:05:18 2013	(r326729)
@@ -1,5 +1,30 @@
---- ./Makefile.pre.in.orig	2013-04-06 11:41:48.000000000 +0400
-+++ ./Makefile.pre.in	2013-04-08 16:16:25.000000000 +0400
+--- Makefile.pre.in.orig	2013-05-16 02:32:57.000000000 +1000
++++ Makefile.pre.in	2013-09-05 23:48:22.439871947 +1000
+@@ -70,18 +70,18 @@
+ OPT=		@OPT@
+ BASECFLAGS=	@BASECFLAGS@
+ BASECPPFLAGS=	@BASECPPFLAGS@
+-CONFIGURE_CFLAGS=	@CFLAGS@
+-CONFIGURE_CPPFLAGS=	@CPPFLAGS@
+-CONFIGURE_LDFLAGS=	@LDFLAGS@
++CFLAGS=	@CFLAGS@
++CPPFLAGS=	@CPPFLAGS@
++LDFLAGS=	@LDFLAGS@
+ # Avoid assigning CFLAGS, LDFLAGS, etc. so users can use them on the
+ # command line to append to these values without stomping the pre-set
+ # values.
+-PY_CFLAGS=	$(BASECFLAGS) $(OPT) $(CONFIGURE_CFLAGS) $(CFLAGS) $(EXTRA_CFLAGS)
++PY_CFLAGS=	$(BASECFLAGS) $(OPT) $(CFLAGS) $(EXTRA_CFLAGS)
+ # Both CPPFLAGS and LDFLAGS need to contain the shell's value for setup.py to
+ # be able to build extension modules using the directories specified in the
+ # environment variables
+-PY_CPPFLAGS=	$(BASECPPFLAGS) -I. -IInclude -I$(srcdir)/Include $(CONFIGURE_CPPFLAGS) $(CPPFLAGS)
+-PY_LDFLAGS=	$(CONFIGURE_LDFLAGS) $(LDFLAGS)
++PY_CPPFLAGS=	$(BASECPPFLAGS) -I. -IInclude -I$(srcdir)/Include $(CPPFLAGS)
++PY_LDFLAGS=	$(LDFLAGS)
+ NO_AS_NEEDED=	@NO_AS_NEEDED@
+ LDLAST=		@LDLAST@
+ SGI_ABI=	@SGI_ABI@
 @@ -306,21 +306,21 @@
  
  ##########################################################################
_______________________________________________
svn-ports-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-ports-all
To unsubscribe, send any mail to "svn-ports-all-unsubscribe@freebsd.org"
Comment 6 Kubilay Kocak freebsd_committer freebsd_triage 2013-09-18 11:36:30 UTC
State Changed
From-To: open->closed

Committed, thanks for the report Pawel!