nmi project AMWA


Rebuilding Derived headers on Windows

This page describes the procedure for running dodo on Windows using the Cygwin GNU tools.

It is also possible to build dodo with Visual Studio and the commercial MKS tools running AAF/dodo/makefile rather than AAF/dodo/GNUmakefile.

Required tools (all part of cygwin):

  • Gnu Make
  • C++ compiler
  • Perl
  • Bash Shell

If you add an extra interface file, you need to follow this procedure:

  1. if you don't already have it, checkout the dodoWin module from CVS, this should give you the dodo directory and the extra make files required.
  2. create your AAFmyInterface.dod macro file by editing a similar example
  3. generate a new UUID for your COM interface
  4. add your Implementation and Unit Test for your interface (you can use dodo to manually generate the basic files)
  5. add the AAFmyInterface to dodo/aafobjects.mk
  6. run GNUmakefile in the dodo directory by simply typing 'make'
  7. add the AAFmyInterface.dod macro file to CVS
  8. run the midl compiler ??
  9. add the new derived files to CVS ref-impl/src/com-api/: CAAFmyInterface.cpp CAAFmyInterface.h
  10. Rebuild the Mac and Win SDKs to copy ref-api headers to their sub-directories (Win build MakeSDK target, Mac run MakeSDK MPW script)
  11. CVS checkin all the affected derived files such as ref-impl/include/com-api AAF.idl, AAF.h, AAF_i.c

The following table shows the steps that the main Dodo makefile goes through to update the Derived files:


  • ../build/common.mk
    determines platform/environment
  • ../build/Pdefs-Win.mk
    used by common.mk after checking OS type
  • tool/GNUmakefile builds the DODO executable

Runs PERL script sync_copyright.pl to update the copyright text in macros/base.mac

  • dodotargets.mak creates a list of DODO targets using aafobjects.mk as the
    • input file and running GenTargets.sh on this to create targets.mk
    • NOTE: new Target *.dod files must be added manually to aafobjects.mk
  • dododepend.mak creates DODO dependency information in its output file
    • depend.mk, using aafobjects.mk as input and running in sequence
    • GenDepend.sh and then GenDepend2.sh on this file. depend.mk
    • included in maketargets.mak to provide the dependencies for the targets.
  • maketargets_gnu.mak where the bulk of the work is done (builds all the targets).
  • Creates all *.idl files using shell scripts:
    • GenAafPrivateIdl.sh
      • GenAafIdl.sh
    • GenPluginIdl.sh
      • Creates various headers (*.h) using shell scripts:
    • GenAafPrivateh.sh
      • GenAafh.sh
    • GenPluginh.sh
      • Creates various *_i.refh files using shell scripts:
    • GenAafPrivate_i.sh
      • GenAaf_i.sh
    • GenPlugin_i.sh
      • Creates AAFClassIds.impl file with GenClassIds.sh
      • Creates AAFClassIds.comh file with GenClassIds.sh
      • Creates AAFObjectTable.comh file with GenObjectTable.sh
      • Creates AAFObjectTable_i.refh file with GenObjectTable_i.sh
        • Creates CAAF*.h and CAAF*.cpp files for each corresponding input *.dod file
        • Uses the Microsoft IDL compiler to generate
        • ref-impl/include/com-api files (only available under Windows NT, it says)

Thanks to Dudley Beenham at Sony for tracing out this summary.