On Jun 19, 2007, at 6:00 PM, Matthias Baas wrote:

Jean-Michel LEON-FOUN-LIN wrote:
I have checked and the file exists 
here: /opt/local/include/boost-1_34/boost/shared_ptr.hpp

So I have added the following line in my cpp_config.cfg in supportlib 
directory:

--------------------------------
CPPPATH += ["/opt/local/include/boost-1_34/boost"]
--------------------------------

You have to set this path one level higher, i.e.:
/opt/local/include/boost-1_34

The include files are included like "boost/shared_ptr.hpp" and not just 
"shared_ptr.hpp".

Thanks for answering.

I did as you said and scons builds libcore.a in the lib subdirectory.

when I launch the python setup script: I get an error with gcc:

-------------------------------------------

[bluemoon jeanmichel ~/Documents/Compilation/cgkit-2.0.0alpha7 06:11 PM] $ sudo python setup.py install
Password:
Updating version in the cgkitinfo module...
Version: 2.0.0alpha7 (Jun 19 2007, 18:13)
======================================================================
3DS importer:      disabled
VRML/X3D importer: disabled
OpenSceneGraph:    disabled
OGRE:              disabled
3DXWare:           disabled
Wintab:            disabled
Glove module:      disabled
======================================================================
Include paths (INC_DIRS):

  supportlib/include
  /System/Library/Frameworks/OpenGL.framework/Versions/A/Headers/

Library paths (LIB_DIRS):

  supportlib/lib
  /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries

Libraries to link with (LIBS):

  /opt/local/lib, boost_python, core, GL, GLU

Forcing compilation of py_wrapper.cpp
======================================================================
running install
running build
running build_py
creating build

/usr/bin/gcc-4.0 -fno-strict-aliasing -Wno-long-double -no-cpp-precomp -mno-fused-madd -fno-common -fno-common -dynamic -DNDEBUG -O3 -Wall -Wstrict-prototypes -Isupportlib/include -I/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers/ -I/opt/local/Library/Frameworks/Python.framework/Versions/2.4/include/python2.4 -c wrappers/py_wrapper.cpp -o build/temp.macosx-10.3-ppc-2.4/wrappers/py_wrapper.o
cc1plus: warning: command line option "-Wstrict-prototypes" is valid for C/ObjC but not for C++
wrappers/py_wrapper.cpp:5:28: error: boost/python.hpp: No such file or directory
In file included from wrappers/py_slot.h:12,
                 from wrappers/py_wrapper.cpp:10:
supportlib/include/arrayslot.h:54:32: error: boost/shared_ptr.hpp: No such file or directory
supportlib/include/arrayslot.h:442: error: 'boost' has not been declared
supportlib/include/arrayslot.h:442: error: ISO C++ forbids declaration of 'shared_ptr' with no type
supportlib/include/arrayslot.h:442: error: expected ';' before '<' token
supportlib/include/arrayslot.h:447: error: 'boost' has not been declared
supportlib/include/arrayslot.h:447: error: 'shared_ptr' has not been declared
supportlib/include/arrayslot.h:447: error: expected ',' or '...' before '<' token
supportlib/include/arrayslot.h: In constructor 'support3d::ArraySlot<T>::ArraySlot(short int, int)':
supportlib/include/arrayslot.h:448: error: class 'support3d::ArraySlot<T>' does not have any field named 'constraint'
supportlib/include/arrayslot.h:448: error: 'aconstraint' was not declared in this scope
supportlib/include/arrayslot.h:451: error: 'constraint' was not declared in this scope
supportlib/include/arrayslot.h: In destructor 'virtual support3d::ArraySlot<T>::~ArraySlot()':
supportlib/include/arrayslot.h:458: error: 'constraint' was not declared in this scope
supportlib/include/arrayslot.h: In member function 'virtual bool support3d::ArraySlot<T>::isResizable(int, bool) const':
supportlib/include/arrayslot.h:503: error: 'constraint' was not declared in this scope
supportlib/include/arrayslot.h: In member function 'virtual void support3d::ArraySlot<T>::resize(int)':
supportlib/include/arrayslot.h:531: error: 'constraint' was not declared in this scope
supportlib/include/arrayslot.h: In member function 'virtual void support3d::ArraySlot<T>::setController(support3d::ISlot*)':
supportlib/include/arrayslot.h:843: error: 'constraint' was not declared in this scope
wrappers/py_exceptions.h: At global scope:
wrappers/py_exceptions.h:11: error: 'boost' has not been declared
wrappers/py_exceptions.h:11: error: expected namespace-name before ';' token
wrappers/py_exceptions.h:11: error: '<type error>' is not a namespace
wrappers/py_slot.h:20: error: 'boost' has not been declared
wrappers/py_slot.h:20: error: expected namespace-name before ';' token
wrappers/py_slot.h:20: error: '<type error>' is not a namespace
wrappers/py_slot.h:79: error: 'object' does not name a type
wrappers/py_slot.h:80: error: 'object' does not name a type
wrappers/py_slot.h:90: error: expected constructor, destructor, or type conversion before '_ArraySlotIterator'
wrappers/py_slot.h:123: error: ISO C++ forbids declaration of 'PyObject' with no type
wrappers/py_slot.h:123: error: expected ';' before '*' token
wrappers/py_slot.h:126: error: expected `)' before '*' token
wrappers/py_slot.h: In member function 'virtual void DependentWrapper::onValueChanged()':
wrappers/py_slot.h:138: error: 'call_method' was not declared in this scope
wrappers/py_slot.h:138: error: expected primary-expression before 'void'
wrappers/py_slot.h:138: error: expected `;' before 'void'
wrappers/py_slot.h: In member function 'virtual void DependentWrapper::onValueChanged(int, int)':
wrappers/py_slot.h:155: error: 'call_method' was not declared in this scope
wrappers/py_slot.h:155: error: expected primary-expression before 'void'
wrappers/py_slot.h:155: error: expected `;' before 'void'
wrappers/py_slot.h: In member function 'virtual void DependentWrapper::onResize(int)':
wrappers/py_slot.h:172: error: 'call_method' was not declared in this scope
wrappers/py_slot.h:172: error: expected primary-expression before 'void'
wrappers/py_slot.h:172: error: expected `;' before 'void'
wrappers/py_slot.h: In member function 'virtual bool DependentWrapper::queryResizeVeto(int)':
wrappers/py_slot.h:188: error: 'call_method' was not declared in this scope
wrappers/py_slot.h:188: error: expected primary-expression before 'bool'
wrappers/py_slot.h:188: error: expected ';' before 'bool'
wrappers/py_slot.h:188: error: expected unqualified-id before '>' token
wrappers/py_slot.h: At global scope:
wrappers/py_slot.h:210: error: ISO C++ forbids declaration of 'PyObject' with no type
wrappers/py_slot.h:210: error: expected ';' before '*' token
wrappers/py_slot.h:213: error: expected `)' before '*' token
wrappers/py_slot.h:218: error: expected `)' before '*' token
wrappers/py_slot.h:226: error: 'boost' has not been declared
wrappers/py_slot.h:226: error: 'str' does not name a type
wrappers/py_slot.h: In member function 'const T& SlotWrapper<T>::getValue()':
wrappers/py_slot.h:240: error: 'call_method' was not declared in this scope
wrappers/py_slot.h:240: error: expected primary-expression before '>' token
wrappers/py_slot.h:240: error: 'self' was not declared in this scope
wrappers/py_slot.h: In member function 'void SlotWrapper<T>::setValue(const T&)':
wrappers/py_slot.h:257: error: 'call_method' was not declared in this scope
wrappers/py_slot.h:257: error: expected primary-expression before 'void'
wrappers/py_slot.h:257: error: expected `;' before 'void'
wrappers/py_slot.h: In member function 'void SlotWrapper<T>::computeValue()':
wrappers/py_slot.h:289: error: 'call_method' was not declared in this scope
wrappers/py_slot.h:289: error: expected primary-expression before 'void'
wrappers/py_slot.h:289: error: expected `;' before 'void'
wrappers/py_slot.h: At global scope:
wrappers/py_slot.h:311: error: ISO C++ forbids declaration of 'PyObject' with no type
wrappers/py_slot.h:311: error: expected ';' before '*' token
wrappers/py_slot.h:314: error: expected `)' before '*' token
wrappers/py_slot.h:327: error: 'object' does not name a type
wrappers/py_slot.h:339: error: 'object' has not been declared
wrappers/py_slot.h:363: error: 'object' does not name a type
wrappers/py_slot.h:374: error: 'object' has not been declared
wrappers/py_slot.h:432: error: 'boost' has not been declared
wrappers/py_slot.h:432: error: 'str' does not name a type
wrappers/py_slot.h: In static member function 'static void ArraySlotWrapper<T>::__setitem__(support3d::ArraySlot<T>*, int, int)':
wrappers/py_slot.h:343: error: 'extract' was not declared in this scope
wrappers/py_slot.h:343: error: expected primary-expression before '>' token
wrappers/py_slot.h: In static member function 'static void ArraySlotWrapper<T>::setValues_py(support3d::ArraySlot<T>*, int, int)':
wrappers/py_slot.h:380: error: 'object' was not declared in this scope
wrappers/py_slot.h:380: error: expected `;' before 'py'
wrappers/py_slot.h:385: error: 'py' was not declared in this scope
wrappers/py_slot.h:385: error: request for member 'attr' in 'pyvalues', which is of non-class type 'int'
wrappers/py_slot.h:387: error: expected type-specifier before 'error_already_set'
wrappers/py_slot.h:387: error: expected `)' before '&' token
wrappers/py_slot.h:387: error: expected `{' before '&' token
wrappers/py_slot.h:387: error: expected primary-expression before ')' token
wrappers/py_slot.h:387: error: expected `;' before ')' token
wrappers/py_slot.h:401: error: 'extract' was not declared in this scope
wrappers/py_slot.h:401: error: expected primary-expression before '>' token
wrappers/py_slot.h:401: error: 'py' was not declared in this scope
wrappers/py_slot.h:404: error: expected type-specifier before 'error_already_set'
wrappers/py_slot.h:404: error: expected `)' before '&' token
wrappers/py_slot.h:404: error: expected `{' before '&' token
wrappers/py_slot.h:404: error: expected primary-expression before ')' token
wrappers/py_slot.h:404: error: expected `;' before ')' token
wrappers/py_slot.h:413: error: expected `}' at end of input
wrappers/py_slot.h:413: error: expected `}' at end of input
supportlib/include/geomobject.h: At global scope:
supportlib/include/geomobject.h:189: error: 'boost' has not been declared
supportlib/include/geomobject.h:189: error: ISO C++ forbids declaration of 'shared_ptr' with no type
supportlib/include/geomobject.h:189: error: 'shared_ptr' declared as a 'virtual' field
supportlib/include/geomobject.h:189: error: expected ';' before '<' token
supportlib/include/geomobject.h:192: error: expected `;' before 'virtual'
supportlib/include/worldobject.h:211: error: 'boost' has not been declared
supportlib/include/worldobject.h:211: error: 'shared_ptr' was not declared in this scope
supportlib/include/worldobject.h:211: error: template argument 2 is invalid
supportlib/include/worldobject.h:211: error: template argument 4 is invalid
supportlib/include/worldobject.h:211: error: expected unqualified-id before '>' token
supportlib/include/worldobject.h:212: error: 'boost' has not been declared
supportlib/include/worldobject.h:212: error: 'shared_ptr' was not declared in this scope
supportlib/include/worldobject.h:212: error: template argument 2 is invalid
supportlib/include/worldobject.h:212: error: template argument 4 is invalid
supportlib/include/worldobject.h:212: error: expected unqualified-id before '>' token
supportlib/include/worldobject.h:213: error: 'boost' has not been declared
supportlib/include/worldobject.h:213: error: 'shared_ptr' was not declared in this scope
supportlib/include/worldobject.h:213: error: template argument 2 is invalid
supportlib/include/worldobject.h:213: error: template argument 4 is invalid
supportlib/include/worldobject.h:213: error: expected unqualified-id before '>' token
supportlib/include/worldobject.h:217: error: 'boost' has not been declared
supportlib/include/worldobject.h:217: error: ISO C++ forbids declaration of 'shared_ptr' with no type
supportlib/include/worldobject.h:217: error: expected ';' before '<' token
supportlib/include/worldobject.h:220: error: 'boost' has not been declared
supportlib/include/worldobject.h:220: error: 'shared_ptr' was not declared in this scope
supportlib/include/worldobject.h:220: error: template argument 1 is invalid
supportlib/include/worldobject.h:220: error: template argument 2 is invalid
supportlib/include/worldobject.h:220: error: expected unqualified-id before '>' token
supportlib/include/worldobject.h:246: error: 'boost' has not been declared
supportlib/include/worldobject.h:246: error: ISO C++ forbids declaration of 'shared_ptr' with no type
supportlib/include/worldobject.h:246: error: expected ';' before '<' token
supportlib/include/worldobject.h:247: error: expected `;' before 'void'
supportlib/include/worldobject.h:247: error: 'boost' has not been declared
supportlib/include/worldobject.h:247: error: 'shared_ptr' has not been declared
supportlib/include/worldobject.h:247: error: expected ',' or '...' before '<' token
supportlib/include/worldobject.h:251: error: 'boost' has not been declared
supportlib/include/worldobject.h:251: error: ISO C++ forbids declaration of 'shared_ptr' with no type
supportlib/include/worldobject.h:251: error: expected ';' before '<' token
supportlib/include/worldobject.h:252: error: 'boost' has not been declared
supportlib/include/worldobject.h:252: error: 'shared_ptr' has not been declared
supportlib/include/worldobject.h:252: error: expected ',' or '...' before '<' token
supportlib/include/worldobject.h:264: error: 'boost' has not been declared
supportlib/include/worldobject.h:264: error: ISO C++ forbids declaration of 'shared_ptr' with no type
supportlib/include/worldobject.h:264: error: expected ';' before '<' token
supportlib/include/worldobject.h:265: error: 'boost' has not been declared
supportlib/include/worldobject.h:265: error: 'shared_ptr' has not been declared
supportlib/include/worldobject.h:265: error: expected ',' or '...' before '<' token
supportlib/include/worldobject.h:266: error: 'boost' has not been declared
supportlib/include/worldobject.h:266: error: 'shared_ptr' has not been declared
supportlib/include/worldobject.h:266: error: expected ',' or '...' before '<' token
supportlib/include/worldobject.h:272: error: 'ChildIterator' does not name a type
supportlib/include/worldobject.h:276: error: 'ChildIterator' does not name a type
supportlib/include/worldobject.h: In member function 'int support3d::WorldObject::lenChilds() const':
supportlib/include/worldobject.h:259: error: 'childs' was not declared in this scope
wrappers/py_wrapper.cpp: At global scope:
wrappers/py_wrapper.cpp:27: error: 'boost' has not been declared
wrappers/py_wrapper.cpp:27: error: expected namespace-name before ';' token
wrappers/py_wrapper.cpp:27: error: '<type error>' is not a namespace
wrappers/py_wrapper.cpp: In function 'void StopIterationTranslator(const StopIteration&)':
wrappers/py_wrapper.cpp:152: error: 'PyExc_StopIteration' was not declared in this scope
wrappers/py_wrapper.cpp:152: error: 'PyErr_SetString' was not declared in this scope
wrappers/py_wrapper.cpp: In function 'void MemoryErrorTranslator(const support3d::EMemoryError&)':
wrappers/py_wrapper.cpp:159: error: 'PyExc_MemoryError' was not declared in this scope
wrappers/py_wrapper.cpp:159: error: 'PyErr_SetString' was not declared in this scope
wrappers/py_wrapper.cpp: In function 'void IOErrorTranslator(const support3d::EIOError&)':
wrappers/py_wrapper.cpp:166: error: 'PyExc_IOError' was not declared in this scope
wrappers/py_wrapper.cpp:166: error: 'PyErr_SetString' was not declared in this scope
wrappers/py_wrapper.cpp: In function 'void RuntimeErrorTranslator(const support3d::ERuntimeError&)':
wrappers/py_wrapper.cpp:173: error: 'PyExc_RuntimeError' was not declared in this scope
wrappers/py_wrapper.cpp:173: error: 'PyErr_SetString' was not declared in this scope
wrappers/py_wrapper.cpp: In function 'void PyIndexErrorTranslator(const EPyIndexError&)':
wrappers/py_wrapper.cpp:180: error: 'PyExc_IndexError' was not declared in this scope
wrappers/py_wrapper.cpp:180: error: 'PyErr_SetString' was not declared in this scope
wrappers/py_wrapper.cpp: In function 'void IndexErrorTranslator(const support3d::EIndexError&)':
wrappers/py_wrapper.cpp:187: error: 'PyExc_IndexError' was not declared in this scope
wrappers/py_wrapper.cpp:187: error: 'PyErr_SetString' was not declared in this scope
wrappers/py_wrapper.cpp: In function 'void ZeroDivisionErrorTranslator(const support3d::EZeroDivisionError&)':
wrappers/py_wrapper.cpp:194: error: 'PyExc_ZeroDivisionError' was not declared in this scope
wrappers/py_wrapper.cpp:194: error: 'PyErr_SetString' was not declared in this scope
wrappers/py_wrapper.cpp: In function 'void ValueErrorTranslator(const support3d::EValueError&)':
wrappers/py_wrapper.cpp:201: error: 'PyExc_ValueError' was not declared in this scope
wrappers/py_wrapper.cpp:201: error: 'PyErr_SetString' was not declared in this scope
wrappers/py_wrapper.cpp: In function 'void KeyErrorTranslator(const support3d::EKeyError&)':
wrappers/py_wrapper.cpp:208: error: 'PyExc_KeyError' was not declared in this scope
wrappers/py_wrapper.cpp:208: error: 'PyErr_SetString' was not declared in this scope
wrappers/py_wrapper.cpp: In function 'void NotImplementedErrorTranslator(const support3d::ENotImplementedError&)':
wrappers/py_wrapper.cpp:215: error: 'PyExc_NotImplementedError' was not declared in this scope
wrappers/py_wrapper.cpp:215: error: 'PyErr_SetString' was not declared in this scope
wrappers/py_wrapper.cpp: In function 'void IncompatibleSlotTypesTranslator(const support3d::EIncompatibleSlotTypes&)':
wrappers/py_wrapper.cpp:227: error: 'PyExc_ValueError' was not declared in this scope
wrappers/py_wrapper.cpp:227: error: 'PyErr_SetString' was not declared in this scope
wrappers/py_wrapper.cpp: In function 'void NoInputConnectionsAllowedTypesTranslator(const support3d::ENoInputConnectionsAllowed&)':
wrappers/py_wrapper.cpp:238: error: 'PyExc_ValueError' was not declared in this scope
wrappers/py_wrapper.cpp:238: error: 'PyErr_SetString' was not declared in this scope
wrappers/py_wrapper.cpp: At global scope:
wrappers/py_wrapper.cpp:254: error: expected ';' before '(' token
wrappers/py_wrapper.cpp:282: error: expected `;' before 'static'
wrappers/py_wrapper.cpp:283: error: 'PyObject' has not been declared
wrappers/py_wrapper.cpp:284: error: 'boost' has not been declared
wrappers/py_wrapper.cpp:284: error: 'rvalue_from_python_stage1_data' has not been declared
wrappers/py_wrapper.cpp: In constructor 'vec3_from_sequence::vec3_from_sequence()':
wrappers/py_wrapper.cpp:248: error: 'boost' has not been declared
wrappers/py_wrapper.cpp:249: error: 'convertible' was not declared in this scope
wrappers/py_wrapper.cpp:251: error: 'boost' has not been declared
wrappers/py_wrapper.cpp:251: error: 'type_id' was not declared in this scope
wrappers/py_wrapper.cpp:251: error: expected primary-expression before '>' token
wrappers/py_wrapper.cpp:251: error: expected primary-expression before ')' token
wrappers/py_wrapper.cpp:251: error: 'push_back' was not declared in this scope
wrappers/py_wrapper.cpp: In static member function 'static void vec3_from_sequence::construct(int*, int*)':
wrappers/py_wrapper.cpp:287: error: 'PySequence_Size' was not declared in this scope
wrappers/py_wrapper.cpp:289: error: 'PyObject' was not declared in this scope
wrappers/py_wrapper.cpp:289: error: 'item' was not declared in this scope
wrappers/py_wrapper.cpp:289: error: 'PySequence_ITEM' was not declared in this scope
wrappers/py_wrapper.cpp:291: error: 'boost' has not been declared
wrappers/py_wrapper.cpp:291: error: 'throw_error_already_set' was not declared in this scope
wrappers/py_wrapper.cpp:292: error: 'PyFloat_AsDouble' was not declared in this scope
wrappers/py_wrapper.cpp:293: error: 'Py_DECREF' was not declared in this scope
wrappers/py_wrapper.cpp:294: error: 'PyErr_Occurred' was not declared in this scope
wrappers/py_wrapper.cpp:296: error: 'boost' has not been declared
wrappers/py_wrapper.cpp:296: error: 'throw_error_already_set' was not declared in this scope
wrappers/py_wrapper.cpp:301: error: 'boost' has not been declared
wrappers/py_wrapper.cpp:301: error: 'rvalue_from_python_storage' was not declared in this scope
wrappers/py_wrapper.cpp:301: error: expected primary-expression before '>' token
wrappers/py_wrapper.cpp:301: error: expected primary-expression before ')' token
wrappers/py_wrapper.cpp:302: error: expected `)' before 'data'
wrappers/py_wrapper.cpp:304: error: request for member 'convertible' in '* data', which is of non-class type 'int'
wrappers/py_wrapper.cpp: At global scope:
wrappers/py_wrapper.cpp:319: error: expected ';' before '(' token
wrappers/py_wrapper.cpp:347: error: expected `;' before 'static'
wrappers/py_wrapper.cpp:348: error: 'PyObject' has not been declared
wrappers/py_wrapper.cpp:349: error: 'boost' has not been declared
wrappers/py_wrapper.cpp:349: error: 'rvalue_from_python_stage1_data' has not been declared
wrappers/py_wrapper.cpp: In constructor 'vec4_from_sequence::vec4_from_sequence()':
wrappers/py_wrapper.cpp:313: error: 'boost' has not been declared
wrappers/py_wrapper.cpp:314: error: 'convertible' was not declared in this scope
wrappers/py_wrapper.cpp:316: error: 'boost' has not been declared
wrappers/py_wrapper.cpp:316: error: 'type_id' was not declared in this scope
wrappers/py_wrapper.cpp:316: error: expected primary-expression before '>' token
wrappers/py_wrapper.cpp:316: error: expected primary-expression before ')' token
wrappers/py_wrapper.cpp:316: error: 'push_back' was not declared in this scope
wrappers/py_wrapper.cpp: In static member function 'static void vec4_from_sequence::construct(int*, int*)':
wrappers/py_wrapper.cpp:352: error: 'PySequence_Size' was not declared in this scope
wrappers/py_wrapper.cpp:354: error: 'PyObject' was not declared in this scope
wrappers/py_wrapper.cpp:354: error: 'item' was not declared in this scope
wrappers/py_wrapper.cpp:354: error: 'PySequence_ITEM' was not declared in this scope
wrappers/py_wrapper.cpp:356: error: 'boost' has not been declared
wrappers/py_wrapper.cpp:356: error: 'throw_error_already_set' was not declared in this scope
wrappers/py_wrapper.cpp:357: error: 'PyFloat_AsDouble' was not declared in this scope
wrappers/py_wrapper.cpp:358: error: 'Py_DECREF' was not declared in this scope
wrappers/py_wrapper.cpp:359: error: 'PyErr_Occurred' was not declared in this scope
wrappers/py_wrapper.cpp:361: error: 'boost' has not been declared
wrappers/py_wrapper.cpp:361: error: 'throw_error_already_set' was not declared in this scope
wrappers/py_wrapper.cpp:366: error: 'boost' has not been declared
wrappers/py_wrapper.cpp:366: error: 'rvalue_from_python_storage' was not declared in this scope
wrappers/py_wrapper.cpp:366: error: expected primary-expression before '>' token
wrappers/py_wrapper.cpp:366: error: expected primary-expression before ')' token
wrappers/py_wrapper.cpp:367: error: expected `)' before 'data'
wrappers/py_wrapper.cpp:369: error: request for member 'convertible' in '* data', which is of non-class type 'int'
wrappers/py_wrapper.cpp: At global scope:
wrappers/py_wrapper.cpp:412: error: expected constructor, destructor, or type conversion before '(' token
error: command '/usr/bin/gcc-4.0' failed with exit status 1
[bluemoon jeanmichel ~/Documents/Compilation/cgkit-2.0.0alpha7 06:13 PM] $ 

I am no programmer at all. So I don't know what the problem is here.

Again any help would be appreciated.

Jean-Michel LEON-FOUN-LIN