Soalris Port

Developers
Ian Baker
2003-12-22
2013-04-29
  • Ian Baker
    Ian Baker
    2003-12-22

    I have just checked in a port to Solaris.

    You will find this on the schemasoft branch.

    There is a module AAFSolarisSDK defined to check it out.

    The port has been tested on Solaris 8 but not yet on Solaris 9, so feedback on this platform would be appreciated

    Ian

     
    • GaryK
      GaryK
      2005-05-23

      Hi Ian,

      I am just getting started with AAF and wondered if you could answer a few questions about the Solaris port.

      The developer FAQ does not mention the Solaris port. Is the FAQ out-of-date or is Solaris not a supported platform?

      Does the Solaris port include the Structured Storage support or must I obtain this thru some other process?

      I would want to layer Java code on the COM interface. Is there anything like JCOM on Solaris that could be used, or must I build a JNI layer? Any suggestions you have would be appreciated.

      Thanks,
      Gary

       
      • Ian Baker
        Ian Baker
        2005-05-23

        Hi Gary,

        the easiest first - I have not used Java on Solaris at all so I cant advise - sorry.

        Solaris is a supported patform to some extent, I believe that it was not one of the platforms that was tested in the  run up to v1.1 (others may correct me  here) but I expect it to compile and work

        The Solaris port does include the structured storage, in the AAFSparcSolarisSDK\g++\sss-impl directory. It may not be reliable with files >2GB, but otheriwise is fine. (It is possible that it does work but as far as I'm aware has not been tested)

        Ian

         
        • Oliver Morgan
          Oliver Morgan
          2005-05-23

          Stuart built and tested the Solaris AAF SDK, it's available at http://prdownloads.sourceforge.net/aaf/AAF-runtime-libs-SparcSolaris-1.1.0.0.tar.gz?download

          The last recorded nightly build can be seen at
          http://aaf.sourceforge.net/build/

          but I believe it was built and tested since then
          and the module tests include >2GB

           
          • Yes - the V1.1.0 release was tested under Solaris and passed all tests including >2GB filesizes and UTF8 filenames.

            The only supported platform with caveats is the MIPS IRIX port.  The last information I have on the IRIX port is that the Structured Storage library in the V1.1.0 release does not pass the 2GB filesize test nor the UTF8 filenames test.

            In any case you can run the testsuite yourself, which only takes a few minutes, by running:
              make check

            - Stuart

             
            • Phil Tudor
              Phil Tudor
              2005-05-24

              Hi.

              For a list of the supported platforms, see ReleaseNotes.txt at the top level of the AAF-src release.

              They are as follows:
                MacOS 10.3 (gcc 3.3)
                Windows 2000 SP4 (Microsoft Visual C++ 6 SP5)
                Windows 2000 SP4 (Microsoft Visual C++ 7.1)
                Windows XP SP1 (Microsoft Visual C++ 7.1)
                Solaris 9 (gcc 3.3.3)
                x86-Linux: SuSE 9.2, Fedora Core 3, RedHat 9.0
                           (gcc 3.3.4, 3.4.2, 4.0.0, glibc 2.3, kernel 2.4 & 2.6)
                x86_64-Linux: SuSE 9.2 (gcc 3.3.4, glibc 2.3, kernel 2.6)
                Irix 6.5.23 (MIPSPro 7.3.1*, gcc 3.4.3 using libgsf)

              Using libgsf structured storage only:
                i386-FreeBSD 5.3
                i386-OpenBSD 3.6

              Solaris is fully functional - no caveats.

              Have fun.

              Phil

               
    • GaryK
      GaryK
      2005-06-21

      After building the Solaris port I ran InfoDumper against an AAF file and it failed with the following message:

      Assertion failed: /IsRegistered(), file ImplAAFTypeDefRecord.cpp, line 1236.

      I tried the same file against the Windows version and the same error happened. Can anyone shed some light on what might be the cause of this?

      Note: I noticed a difference in the InfoDumper output between the two versions. Where the Solaris version first processes a MasterMob, the Windows version processes a SourceMob. Is this difference to be expected?

      In both cases the failure occurs in the second MOB.

      Thanks,
      Gary

       
      • Jim Trainor
        Jim Trainor
        2005-06-21

        Can you post the file?

        Or send it out via email?

         
        • GaryK
          GaryK
          2005-06-21

          Hi Jim,

          Thanks for your quick response. I cannot send the file. I can tell you that it has extensions. I may be able to send the windows stack trace. I'll get back.

          Gary

           
        • GaryK
          GaryK
          2005-06-21

          Here is the stack trace of the failure from the Windows version:

               msvcr71d.dll!_NMSG_WRITE(int rterrnum=10)  Line 195    C
               msvcr71d.dll!abort()  Line 44 + 0x7    C
               msvcr71d.dll!_assert(const char * expr=0x00669b14, const char * filename=0x0066a9d0, unsigned int lineno=1236)  Line 306    C
          >    AAFCOAPI.dll!ImplAAFTypeDefRecord::NativeSize()  Line 1236 + 0x2b    C++
               AAFCOAPI.dll!ImplAAFTypeDef::internalSize()  Line 124    C++
               AAFCOAPI.dll!OMSSStoredObject::restore(OMDataVector & property={...}, unsigned int externalSize=32)  Line 1038 + 0xb    C++
               AAFCOAPI.dll!OMDataVector::restore(unsigned int externalSize=32)  Line 60    C++
               AAFCOAPI.dll!OMSSStoredObject::restore(OMPropertySet & properties={...})  Line 958    C++
               AAFCOAPI.dll!OMStorable::restoreContents()  Line 160 + 0x23    C++
               AAFCOAPI.dll!OMSSStoredObject::restoreObject(const OMStrongObjectReference & reference={...})  Line 919    C++
               AAFCOAPI.dll!OMStrongObjectReference::load()  Line 455 + 0x12    C++
               AAFCOAPI.dll!OMStrongObjectReference::getValue()  Line 362    C++
               AAFCOAPI.dll!OMStrongReferenceProperty<ImplAAFObject>::getValue(ImplAAFObject * & object=0x00000000)  Line 69 + 0xf    C++
               AAFCOAPI.dll!OMStrongReferenceProperty<ImplAAFObject>::getObject()  Line 383    C++
               AAFCOAPI.dll!ImplAAFTypeDefStrongObjRef::CreatePropertyValue(OMProperty * property=0x00d07cd0, ImplAAFPropertyValue * * ppPropertyValue=0x00d06a94)  Line 372 + 0xb    C++
               AAFCOAPI.dll!ImplAAFProperty::Initialize(ImplAAFPropertyDef * pPropDef=0x00cef680, OMProperty * pOmProp=0x00d07cd0)  Line 100 + 0x1a    C++
               AAFCOAPI.dll!ImplPropertyCollection::CreatePropertyInstance(ImplAAFPropertyDef * pPropDef=0x00cef680, OMProperty * pOmProp=0x00d07cd0, ImplAAFProperty * * ppProp=0x0012d19c)  Line 440 + 0x10    C++
               AAFCOAPI.dll!ImplPropertyCollection::SynchronizeProperty(ImplAAFObject * pObj=0x00d06d30, ImplAAFPropertyDef * pPropDef=0x00cef680)  Line 348 + 0x19    C++
               AAFCOAPI.dll!ImplPropertyCollection::Initialize(ImplAAFObject * pObj=0x00d06d30, OMPropertySet * pOMPropSet=0x00d06d34)  Line 391 + 0x15    C++
               AAFCOAPI.dll!ImplAAFObject::InitProperties()  Line 740 + 0x13    C++
               AAFCOAPI.dll!ImplAAFObject::GetProperties(ImplAAFEnumerator<ImplAAFProperty> * * ppEnum=0x0012d3d8)  Line 769 + 0x8    C++
               AAFCOAPI.dll!CAAFObject::GetProperties(IEnumAAFProperties * * ppEnum=0x0012d530)  Line 435 + 0x10    C++
               InfoDumper.exe!dumpObject(IAAFSmartPointer<IAAFObject> pContainer={...}, IAAFDictionary * pDict=0x002f63c8, _dumpFlags dumpFlags={...}, int indent=9, std::basic_ostream<char,std::char_traits<char> > & os={...})  Line 1497 + 0x41    C++
               InfoDumper.exe!dumpPropertyValue(IAAFSmartPointer<IAAFPropertyValue> pPVal={...}, IAAFDictionary * pDict=0x002f63c8, _dumpFlags dumpFlags={...}, bool showProps=true, int indent=8, std::basic_ostream<char,std::char_traits<char> > & os={...})  Line 1686 + 0x3d    C++
               InfoDumper.exe!dumpObject(IAAFSmartPointer<IAAFObject> pContainer={...}, IAAFDictionary * pDict=0x002f63c8, _dumpFlags dumpFlags={...}, int indent=7, std::basic_ostream<char,std::char_traits<char> > & os={...})  Line 1597 + 0x41    C++
               InfoDumper.exe!dumpPropertyValue(IAAFSmartPointer<IAAFPropertyValue> pPVal={...}, IAAFDictionary * pDict=0x002f63c8, _dumpFlags dumpFlags={...}, bool showProps=true, int indent=6, std::basic_ostream<char,std::char_traits<char> > & os={...})  Line 1686 + 0x3d    C++
               InfoDumper.exe!dumpObject(IAAFSmartPointer<IAAFObject> pContainer={...}, IAAFDictionary * pDict=0x002f63c8, _dumpFlags dumpFlags={...}, int indent=5, std::basic_ostream<char,std::char_traits<char> > & os={...})  Line 1597 + 0x41    C++
               InfoDumper.exe!dumpPropertyValue(IAAFSmartPointer<IAAFPropertyValue> pPVal={...}, IAAFDictionary * pDict=0x002f63c8, _dumpFlags dumpFlags={...}, bool showProps=true, int indent=4, std::basic_ostream<char,std::char_traits<char> > & os={...})  Line 1686 + 0x3d    C++
               InfoDumper.exe!dumpObject(IAAFSmartPointer<IAAFObject> pContainer={...}, IAAFDictionary * pDict=0x002f63c8, _dumpFlags dumpFlags={...}, int indent=3, std::basic_ostream<char,std::char_traits<char> > & os={...})  Line 1597 + 0x41    C++
               InfoDumper.exe!dumpPropertyValue(IAAFSmartPointer<IAAFPropertyValue> pPVal={...}, IAAFDictionary * pDict=0x002f63c8, _dumpFlags dumpFlags={...}, bool showProps=true, int indent=2, std::basic_ostream<char,std::char_traits<char> > & os={...})  Line 1686 + 0x3d    C++
               InfoDumper.exe!dumpPropertyValue(IAAFSmartPointer<IAAFPropertyValue> pPVal={...}, IAAFDictionary * pDict=0x002f63c8, _dumpFlags dumpFlags={...}, bool showProps=true, int indent=1, std::basic_ostream<char,std::char_traits<char> > & os={...})  Line 1941 + 0x44    C++
               InfoDumper.exe!dumpObject(IAAFSmartPointer<IAAFObject> pContainer={...}, IAAFDictionary * pDict=0x002f63c8, _dumpFlags dumpFlags={...}, int indent=0, std::basic_ostream<char,std::char_traits<char> > & os={...})  Line 1597 + 0x41    C++
               InfoDumper.exe!dumpMobsAndCS(IAAFSmartPointer<IAAFHeader> pHeader={...}, IAAFDictionary * pDict=0x002f63c8, _dumpFlags dumpFlags={...}, int indent=0, std::basic_ostream<char,std::char_traits<char> > & os={...})  Line 1386 + 0x3b    C++
               InfoDumper.exe!dumpFile(unsigned short * pwFileName=0x0012fc84, const char * name=0x002f5028, _dumpFlags dumpFlags={...}, std::basic_ostream<char,std::char_traits<char> > & os={...})  Line 2713 + 0x4b    C++
               InfoDumper.exe!main(int argc=3, char * * argv=0x002f4fa0)  Line 2932 + 0x26    C++
               InfoDumper.exe!mainCRTStartup()  Line 398 + 0x11    C
               KERNEL32.DLL!7c59893d()    

          - Gary

           
      • Oliver Morgan
        Oliver Morgan
        2005-06-21

        I experienced something very like this shortly after the rosebud branch was merged to main, and discovered that ImplAAFTypeDefVariableArry.cpp had lost a kludge. Please refere to the log for ImplAAFTypeDefVariableArry.cpp revision 1.63:

        Revision : 1.63
        Date : 2004/10/8 19:35:52
        Author : 'terabrit'
        State : 'Exp'
        Lines : +12 -2
        Branches :
            1.63.4
        Description :
        Reinstate code to allow not-yet-registered custom types

        So far as I can tell, this is still in place for V1.1.0 and on the HEAD. You might like to start off by checking your cvs state?

         
        • GaryK
          GaryK
          2005-06-21

          Thanks, Oliver. The file is up-to-date.

          Gary

           
          • Oliver Morgan
            Oliver Morgan
            2005-06-21

            Even though not the same, it does sound very like  the bug I had...mine was easy to trace because the problem crept in with V1.1, it had not been there with 1.0.2.

             
      • InfoDumper uses the IEnumAAFMobs interface to process the list of Mobs in an AAF file.  Experiment has shown that the order of Mobs returned through this enumerating interface on a little-endian platform (x86, x86_64) is the reverse of that on a big-endian platform (SPARC, PowerPC. MIPS).  So the order mobs are returned by this interface cannot be relied upon. Treat it as essentially random.

        It would be nice if InfoDumper always displayed the same order regardless of which platform wrote the file or is reading the file.  Perhaps someone will be willing to add a feature to InfoDumper to sort by, say, MobID?

         
        • GaryK
          GaryK
          2005-06-22

          Thanks, Stuart.

          Although I would prefer a consistent ordering between platforms, your reply strengthens my confidence in the Solaris port.

          - Gary