Compiling 2.7.2 on OS/2

Hi All, I'm working on updating my port of Python 2.6.5 to v2.7.2 for the OS/2 platform. I have python.exe and python27.dll compiling find, but when starting to build sharedmods I'm getting the following error: running build running build_ext Traceback (most recent call last): File "./setup.py", line 2092, in <module> main() File "./setup.py", line 2087, in main 'Lib/smtpd.py'] File "U:/DEV/python-2.7.2/Lib/distutils/core.py", line 152, in setup dist.run_commands() File "U:/DEV/python-2.7.2/Lib/distutils/dist.py", line 953, in run_commands self.run_command(cmd) File "U:/DEV/python-2.7.2/Lib/distutils/dist.py", line 972, in run_command cmd_obj.run() File "U:/DEV/python-2.7.2/Lib/distutils/command/build.py", line 127, in run self.run_command(cmd_name) File "U:/DEV/python-2.7.2/Lib/distutils/cmd.py", line 326, in run_command self.distribution.run_command(command) File "U:/DEV/python-2.7.2/Lib/distutils/dist.py", line 972, in run_command cmd_obj.run() File "U:/DEV/python-2.7.2/Lib/distutils/command/build_ext.py", line 340, in run self.build_extensions() File "./setup.py", line 152, in build_extensions missing = self.detect_modules() File "./setup.py", line 1154, in detect_modules for arg in sysconfig.get_config_var("CONFIG_ARGS").split()] AttributeError: 'NoneType' object has no attribute 'split' make: *** [sharedmods] Error 1 Any suggestions? A google showed a similar error on AIX with no clear resolution. Thanks in advance, Paul

Hi Amaury, On 06/01/12 00:32, Amaury Forgeot d'Arc wrote:
It is - however adding os2 the the list of platforms to the ones to exclude gets me only a little further: It then bombs with: running build running build_ext Traceback (most recent call last): File "./setup.py", line 2092, in <module> main() File "./setup.py", line 2087, in main 'Lib/smtpd.py'] File "U:/DEV/python-2.7.2/Lib/distutils/core.py", line 152, in setup dist.run_commands() File "U:/DEV/python-2.7.2/Lib/distutils/dist.py", line 953, in run_commands self.run_command(cmd) File "U:/DEV/python-2.7.2/Lib/distutils/dist.py", line 972, in run_command cmd_obj.run() File "U:/DEV/python-2.7.2/Lib/distutils/command/build.py", line 127, in run self.run_command(cmd_name) File "U:/DEV/python-2.7.2/Lib/distutils/cmd.py", line 326, in run_command self.distribution.run_command(command) File "U:/DEV/python-2.7.2/Lib/distutils/dist.py", line 972, in run_command cmd_obj.run() File "U:/DEV/python-2.7.2/Lib/distutils/command/build_ext.py", line 340, in run self.build_extensions() File "./setup.py", line 152, in build_extensions missing = self.detect_modules() File "./setup.py", line 1368, in detect_modules if '--with-system-expat' in sysconfig.get_config_var("CONFIG_ARGS"): TypeError: argument of type 'NoneType' is not iterable make: *** [sharedmods] Error 1 Which again points to problems with sysconfig.get_config_var("CONFIG_ARGS"): Thanks, Paul

On 1/5/2012 3:01 PM, Paul Smedley wrote:
[The earlier call was with "__CONFIG_ARGS", for whatever difference that makes.] It appears to be returning None instead of [] (or a populated list). In 3.2.2, at line 579 of sysconfig.py is def get_config_var(name): return get_config_vars().get(name) That defaults to None if name is not a key in the dict returned by get_config_vars(). My guess is that it always is and and the the value is always a list for tested win/*nix/mac systems. So either setup.py has the bug of assuming that there is always a list value for "CONFIG_ARGS" or sysconfig.py has the bug of not setting it for os2, perhaps because of a bug elsewhere. At line 440 of sysconfig.py is def get_config_var(*args): global _CONFIG_VARS if _CONFIG_VARS is None: _CONFIG_VARS = {} <code to populate _CONFIG_VARS, including> if os.name in ('nt', 'os2'): _init_non_posix(_CONFIG_VARS) if args: vals = [] for name in args: vals.append(_CONFIG_VARS.get(name)) return vals else: return _CONFIG_VARS At 456 is def _init_non_posix(vars): """Initialize the module as appropriate for NT""" # set basic install directories ... "CONFIG_ARGS" is not set explicitly for any system anywhere in the file, so I do not know how the call ever works. -- Terry Jan Reedy

Hi All, On 06/01/12 10:25, Terry Reedy wrote:
using _init_posix() for 'os2' instead of _init_non_posix is the fix for this. sysconfig.py also needs the following changes: --- \dev\Python-2.7.2-o\Lib\sysconfig.py 2012-01-06 19:27:14.000000000 +1030 +++ sysconfig.py 2012-01-07 19:03:00.000000000 +1030 @@ -46,7 +46,7 @@ 'scripts': '{base}/Scripts', 'data' : '{base}', }, - 'os2_home': { + 'os2_user': { 'stdlib': '{userbase}/lib/python{py_version_short}', 'platstdlib': '{userbase}/lib/python{py_version_short}', 'purelib': '{userbase}/lib/python{py_version_short}/site-packages', @@ -413,9 +413,9 @@ _CONFIG_VARS['platbase'] = _EXEC_PREFIX _CONFIG_VARS['projectbase'] = _PROJECT_BASE - if os.name in ('nt', 'os2'): + if os.name in ('nt'): _init_non_posix(_CONFIG_VARS) - if os.name == 'posix': + if os.name in ('posix', 'os2'): _init_posix(_CONFIG_VARS) # Setting 'userbase' is done below the call to the

Hi Amaury, On 06/01/12 00:32, Amaury Forgeot d'Arc wrote:
It is - however adding os2 the the list of platforms to the ones to exclude gets me only a little further: It then bombs with: running build running build_ext Traceback (most recent call last): File "./setup.py", line 2092, in <module> main() File "./setup.py", line 2087, in main 'Lib/smtpd.py'] File "U:/DEV/python-2.7.2/Lib/distutils/core.py", line 152, in setup dist.run_commands() File "U:/DEV/python-2.7.2/Lib/distutils/dist.py", line 953, in run_commands self.run_command(cmd) File "U:/DEV/python-2.7.2/Lib/distutils/dist.py", line 972, in run_command cmd_obj.run() File "U:/DEV/python-2.7.2/Lib/distutils/command/build.py", line 127, in run self.run_command(cmd_name) File "U:/DEV/python-2.7.2/Lib/distutils/cmd.py", line 326, in run_command self.distribution.run_command(command) File "U:/DEV/python-2.7.2/Lib/distutils/dist.py", line 972, in run_command cmd_obj.run() File "U:/DEV/python-2.7.2/Lib/distutils/command/build_ext.py", line 340, in run self.build_extensions() File "./setup.py", line 152, in build_extensions missing = self.detect_modules() File "./setup.py", line 1368, in detect_modules if '--with-system-expat' in sysconfig.get_config_var("CONFIG_ARGS"): TypeError: argument of type 'NoneType' is not iterable make: *** [sharedmods] Error 1 Which again points to problems with sysconfig.get_config_var("CONFIG_ARGS"): Thanks, Paul

On 1/5/2012 3:01 PM, Paul Smedley wrote:
[The earlier call was with "__CONFIG_ARGS", for whatever difference that makes.] It appears to be returning None instead of [] (or a populated list). In 3.2.2, at line 579 of sysconfig.py is def get_config_var(name): return get_config_vars().get(name) That defaults to None if name is not a key in the dict returned by get_config_vars(). My guess is that it always is and and the the value is always a list for tested win/*nix/mac systems. So either setup.py has the bug of assuming that there is always a list value for "CONFIG_ARGS" or sysconfig.py has the bug of not setting it for os2, perhaps because of a bug elsewhere. At line 440 of sysconfig.py is def get_config_var(*args): global _CONFIG_VARS if _CONFIG_VARS is None: _CONFIG_VARS = {} <code to populate _CONFIG_VARS, including> if os.name in ('nt', 'os2'): _init_non_posix(_CONFIG_VARS) if args: vals = [] for name in args: vals.append(_CONFIG_VARS.get(name)) return vals else: return _CONFIG_VARS At 456 is def _init_non_posix(vars): """Initialize the module as appropriate for NT""" # set basic install directories ... "CONFIG_ARGS" is not set explicitly for any system anywhere in the file, so I do not know how the call ever works. -- Terry Jan Reedy

Hi All, On 06/01/12 10:25, Terry Reedy wrote:
using _init_posix() for 'os2' instead of _init_non_posix is the fix for this. sysconfig.py also needs the following changes: --- \dev\Python-2.7.2-o\Lib\sysconfig.py 2012-01-06 19:27:14.000000000 +1030 +++ sysconfig.py 2012-01-07 19:03:00.000000000 +1030 @@ -46,7 +46,7 @@ 'scripts': '{base}/Scripts', 'data' : '{base}', }, - 'os2_home': { + 'os2_user': { 'stdlib': '{userbase}/lib/python{py_version_short}', 'platstdlib': '{userbase}/lib/python{py_version_short}', 'purelib': '{userbase}/lib/python{py_version_short}/site-packages', @@ -413,9 +413,9 @@ _CONFIG_VARS['platbase'] = _EXEC_PREFIX _CONFIG_VARS['projectbase'] = _PROJECT_BASE - if os.name in ('nt', 'os2'): + if os.name in ('nt'): _init_non_posix(_CONFIG_VARS) - if os.name == 'posix': + if os.name in ('posix', 'os2'): _init_posix(_CONFIG_VARS) # Setting 'userbase' is done below the call to the
participants (5)
-
Amaury Forgeot d'Arc
-
Paul Smedley
-
Steven D'Aprano
-
Terry Reedy
-
Victor Stinner