Bug 466

Summary: "./waf" without previous "./waf configure" breakage
Product: ns-3 Reporter: Rajib Bhattacharjea <raj.b>
Component: build systemAssignee: Gustavo J. A. M. Carneiro <gjcarneiro>
Status: RESOLVED FIXED    
Severity: normal CC: mathieu.lacage
Priority: P1    
Version: ns-3-dev   
Hardware: All   
OS: All   
Attachments: test waf

Description Rajib Bhattacharjea 2009-01-12 13:27:11 UTC
Using a fresh version of ns-3-dev, using just "./waf":

Reconfiguring the project
Checking for program g++                 : ok /usr/bin/g++ 
Checking for compiler version            : ok 4.0.1 
Checking for program cpp                 : ok /usr/bin/cpp 
Checking for program ar                  : ok /usr/bin/ar 
Checking for program ranlib              : ok /usr/bin/ranlib 
Checking for g++                         : ok  
Checking for program pkg-config          : ok /sw/bin/pkg-config 
Traceback (most recent call last):
  File "./waf", line 127, in ?
    Scripting.prepare(t, cwd, VERSION, wafdir)
  File "/Users/Raj/code.nsnam.org/ns-3-dev/.waf-1.5.2-e69116b0d3441cd20aea90dfddba6efd/wafadmin/Scripting.py", line 122, in prepare
    prepare_impl(t,cwd,ver,wafdir)
  File "/Users/Raj/code.nsnam.org/ns-3-dev/.waf-1.5.2-e69116b0d3441cd20aea90dfddba6efd/wafadmin/Scripting.py", line 115, in prepare_impl
    main()
  File "/Users/Raj/code.nsnam.org/ns-3-dev/.waf-1.5.2-e69116b0d3441cd20aea90dfddba6efd/wafadmin/Scripting.py", line 143, in main
    configure()
  File "/Users/Raj/code.nsnam.org/ns-3-dev/.waf-1.5.2-e69116b0d3441cd20aea90dfddba6efd/wafadmin/Scripting.py", line 40, in configure
    conf.sub_config('')
  File "/Users/Raj/code.nsnam.org/ns-3-dev/.waf-1.5.2-e69116b0d3441cd20aea90dfddba6efd/wafadmin/Configure.py", line 77, in sub_config
    ret=mod.configure(self)
  File "/Users/Raj/code.nsnam.org/ns-3-dev/wscript", line 199, in configure
    variant_env['INCLUDEDIR'] = os.path.join(variant_env['PREFIX'], 'include')
  File "/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/posixpath.py", line 62, in join
    elif path == '' or path.endswith('/'):
AttributeError: 'list' object has no attribute 'endswith'

This is on Python 2.4.4 on OS X.
Comment 1 Gustavo J. A. M. Carneiro 2009-01-12 13:47:29 UTC
I removed the offending line, as it is actually not needed for anything.  Please check if it fixes the bug.
Comment 2 Rajib Bhattacharjea 2009-01-12 14:17:39 UTC
Fixes one issue, adds another (this time it shows up after checking for python, instead of after pkg-config

Checking for program python                             : ok /Library/Frameworks/Python.framework/Versions/Current/bin/python 
Traceback (most recent call last):
  File "./waf", line 127, in ?
    Scripting.prepare(t, cwd, VERSION, wafdir)
  File "/Users/Raj/code.nsnam.org/ns-3-dev/.waf-1.5.2-e69116b0d3441cd20aea90dfddba6efd/wafadmin/Scripting.py", line 122, in prepare
    prepare_impl(t,cwd,ver,wafdir)
  File "/Users/Raj/code.nsnam.org/ns-3-dev/.waf-1.5.2-e69116b0d3441cd20aea90dfddba6efd/wafadmin/Scripting.py", line 115, in prepare_impl
    main()
  File "/Users/Raj/code.nsnam.org/ns-3-dev/.waf-1.5.2-e69116b0d3441cd20aea90dfddba6efd/wafadmin/Scripting.py", line 143, in main
    configure()
  File "/Users/Raj/code.nsnam.org/ns-3-dev/.waf-1.5.2-e69116b0d3441cd20aea90dfddba6efd/wafadmin/Scripting.py", line 40, in configure
    conf.sub_config('')
  File "/Users/Raj/code.nsnam.org/ns-3-dev/.waf-1.5.2-e69116b0d3441cd20aea90dfddba6efd/wafadmin/Configure.py", line 77, in sub_config
    ret=mod.configure(self)
  File "/Users/Raj/code.nsnam.org/ns-3-dev/wscript", line 235, in configure
    conf.sub_config('bindings/python')
  File "/Users/Raj/code.nsnam.org/ns-3-dev/.waf-1.5.2-e69116b0d3441cd20aea90dfddba6efd/wafadmin/Configure.py", line 77, in sub_config
    ret=mod.configure(self)
  File "/Users/Raj/code.nsnam.org/ns-3-dev/bindings/python/wscript", line 130, in configure
    conf.check_python_version((2,3))
  File "/Users/Raj/code.nsnam.org/ns-3-dev/.waf-1.5.2-e69116b0d3441cd20aea90dfddba6efd/wafadmin/Tools/python.py", line 241, in check_python_version
    python_LIBDEST=os.path.join(conf.env['PREFIX'],"lib","python"+pyver)
  File "/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/posixpath.py", line 62, in join
    elif path == '' or path.endswith('/'):
AttributeError: 'list' object has no attribute 'endswith'


Comment 3 Gustavo J. A. M. Carneiro 2009-01-12 14:22:37 UTC
Grr! conf.env['PREFIX'] should return a string, not a list :|  And this doesn't happen on darwin-ppc regression host :(

Comment 4 Gustavo J. A. M. Carneiro 2009-01-12 14:29:45 UTC
Does the following command print anything?

   python -c "import os; print repr(os.environ['PREFIX'])"
Comment 5 Rajib Bhattacharjea 2009-01-12 14:34:21 UTC
python -c "import os; print repr(os.environ['PREFIX'])"
Traceback (most recent call last):
  File "<string>", line 1, in ?
  File "/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/UserDict.py", line 17, in __getitem__
    def __getitem__(self, key): return self.data[key]
KeyError: 'PREFIX'
Comment 6 Gustavo J. A. M. Carneiro 2009-01-12 14:56:50 UTC
Created attachment 349 [details]
test waf

Could you try this replacement waf, just to see what it prints?
Comment 7 Gustavo J. A. M. Carneiro 2009-01-12 15:05:09 UTC
Ah, I suspect all this is due to not running "./waf configure".  "./waf" may trigger an autoconfig, but there's a possible bug with that autoconfig...
Comment 8 Rajib Bhattacharjea 2009-01-12 15:27:05 UTC
Yes, I am using just "waf", not waf configure.  waf configure works just fine actually.
Comment 9 Rajib Bhattacharjea 2009-01-12 15:28:21 UTC
(In reply to comment #6)
> Created an attachment (id=349) [details]
> test waf
> 
> Could you try this replacement waf, just to see what it prints?
> 

This latest waf gives the same error:
Traceback (most recent call last):
  File "./waf", line 127, in ?
    Scripting.prepare(t, cwd, VERSION, wafdir)
  File "/Users/Raj/code.nsnam.org/ns-3-dev/.waf-1.5.2-4adb452c4913bedee081db758adc6276/wafadmin/Scripting.py", line 122, in prepare
    prepare_impl(t,cwd,ver,wafdir)
  File "/Users/Raj/code.nsnam.org/ns-3-dev/.waf-1.5.2-4adb452c4913bedee081db758adc6276/wafadmin/Scripting.py", line 115, in prepare_impl
    main()
  File "/Users/Raj/code.nsnam.org/ns-3-dev/.waf-1.5.2-4adb452c4913bedee081db758adc6276/wafadmin/Scripting.py", line 143, in main
    configure()
  File "/Users/Raj/code.nsnam.org/ns-3-dev/.waf-1.5.2-4adb452c4913bedee081db758adc6276/wafadmin/Scripting.py", line 40, in configure
    conf.sub_config('')
  File "/Users/Raj/code.nsnam.org/ns-3-dev/.waf-1.5.2-4adb452c4913bedee081db758adc6276/wafadmin/Configure.py", line 77, in sub_config
    ret=mod.configure(self)
  File "/Users/Raj/code.nsnam.org/ns-3-dev/wscript", line 235, in configure
    conf.sub_config('bindings/python')
  File "/Users/Raj/code.nsnam.org/ns-3-dev/.waf-1.5.2-4adb452c4913bedee081db758adc6276/wafadmin/Configure.py", line 77, in sub_config
    ret=mod.configure(self)
  File "/Users/Raj/code.nsnam.org/ns-3-dev/bindings/python/wscript", line 130, in configure
    conf.check_python_version((2,3))
  File "/Users/Raj/code.nsnam.org/ns-3-dev/.waf-1.5.2-4adb452c4913bedee081db758adc6276/wafadmin/Tools/python.py", line 241, in check_python_version
    python_LIBDEST=os.path.join(conf.env['PREFIX'],"lib","python"+pyver)
  File "/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/posixpath.py", line 62, in join
    elif path == '' or path.endswith('/'):
AttributeError: 'list' object has no attribute 'endswith'
Comment 10 Rajib Bhattacharjea 2009-01-12 15:29:32 UTC
./waf configure gave the following:

rajib-bhattacharjeas-computer:~/code.nsnam.org/ns-3-dev Raj$ ./waf configure
Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
Checking for program g++                 : ok /usr/bin/g++ 
Checking for compiler version            : ok 4.0.1 
Checking for program cpp                 : ok /usr/bin/cpp 
Checking for program ar                  : ok /usr/bin/ar 
Checking for program ranlib              : ok /usr/bin/ranlib 
Checking for g++                         : ok  
Checking for program pkg-config          : ok /sw/bin/pkg-config 
Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
Checking for -Wno-error=deprecated-declarations support : no 
Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
Checking for header stdlib.h                            : Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
ok 
Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
Checking for header signal.h                            : Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
ok 
Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
Checking for library rt                                 : Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
not found 
Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
Checking for header pthread.h                           : Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
ok 
Checking for high precision time implementation         : 128-bit integer 
Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
Checking for header stdint.h                            : Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
ok 
Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
Checking for header inttypes.h                          : Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
ok 
Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
Checking for header sys/inttypes.h                      : Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
not found 
Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
Checking for header linux/if_ether.h                    : Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
not found 
Package pango was not found in the pkg-config search path.
Perhaps you should add the directory containing `pango.pc'
to the PKG_CONFIG_PATH environment variable
Package 'pango', required by 'GDK', not found
Checking for pkg-config flags for GTK_CONFIG_STORE      : not found 
Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
Checking for library sqlite3                            : Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
ok 
Package goocanvas was not found in the pkg-config search path.
Perhaps you should add the directory containing `goocanvas.pc'
to the PKG_CONFIG_PATH environment variable
No package 'goocanvas' found
Checking for pkg-config flags for MOBILITY_VISUALIZER   : not found 
Checking for program python                             : ok /Library/Frameworks/Python.framework/Versions/Current/bin/python 
Checking for Python version >= 2.3                      : ok 2.4.4 
Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
Checking for library python2.4                          : Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
not found 
Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
Checking for library python2.4                          : Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
ok 
Checking for program python2.4-config                   : not found 
Checking for program python-config-2.4                  : not found 
Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
Checking for header Python.h                            : Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'
ok 
Checking for Python module pybindgen                    : not found 
pybindgen missing => no python bindings
Checking for program diff                               : ok /usr/bin/diff 
Checking for program sudo                               : ok /usr/bin/sudo 
Checking for program hg                                 : ok /Library/Frameworks/Python.framework/Versions/Current/bin/hg 
---- Summary of optional NS-3 features:
Threading Primitives          : enabled
Real Time Simulator           : enabled
Emulated Net Device           : not enabled (<linux/if_ether.h> include not detected)
GtkConfigStore                : not enabled (library 'gtk+-2.0 >= 2.12' not found)
SQlite stats data output      : enabled
Network Simulation Cradle     : not enabled (--with-nsc configure option not given)
Python Bindings               : not enabled (PyBindGen missing)
Options.options.prefix: '/usr/local/'
os.path.abspath(os.path.expanduser(Options.options.prefix)): '/usr/local'
self['PREFIX']: '/usr/local'

The issue is only with the so called autoconfig.
Comment 11 Gustavo J. A. M. Carneiro 2009-01-13 06:25:50 UTC
I can reproduce; not OSX specific.
Comment 12 Mathieu Lacage 2009-01-16 03:11:08 UTC
*** Bug 470 has been marked as a duplicate of this bug. ***