text: ############################################################################
  #
  #  Program: GDCM (Grassroots DICOM). A DICOM library
  #
  #  Copyright (c) 2006-2011 Mathieu Malaterre
  #  All rights reserved.
  #  See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details.
  #
  #     This software is distributed WITHOUT ANY WARRANTY; without even
  #     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
  #     PURPOSE.  See the above copyright notice for more information.
  #
  ############################################################################
  
  import gdcm
  import os,sys
  
  def TestKakadu(filename, kdu_expand):
    fn = gdcm.Filename(filename)
    testdir = fn.GetPath()
    testbasename = fn.GetName()
    ext = fn.GetExtension()
    #print ext
    #kakadu_path = '/home/mmalaterre/Software/Kakadu60'
    kakadu_path = os.path.dirname( kdu_expand )
    #kdu_expand = kakadu_path + '/kdu_expand'
    kdu_args = ' -quiet -i '
    output_dcm = testdir + '/kakadu/' + testbasename
    output_j2k = output_dcm + '.j2k'
    output_ppm = output_dcm + '.ppm' #
    output_raw = output_dcm + '.rawl' # FIXME: little endian only...
    kdu_expand += kdu_args + output_j2k + ' -o ' + output_raw
    # $ ./bin/gdcmraw -i .../TestImageChangeTransferSyntax2/012345.002.050.dcm -o toto.j2k
    executable_output_path = gdcm.GDCM_EXECUTABLE_OUTPUT_PATH
    gdcmraw = executable_output_path + '/gdcmraw'
    outputfilename = output_j2k
    gdcmraw_args = ' -i ' + filename + ' -o ' + outputfilename
    gdcmraw += gdcmraw_args
    #print gdcmraw
    ret = os.system( gdcmraw )
    #print "ret:",ret
    #print kdu_expand
    os.environ["LD_LIBRARY_PATH"]=kakadu_path
    ret = os.system( kdu_expand )
    # now need to skip the ppm header:
    dd_cmd = 'dd bs=15 skip=1 if=%s of = %s'%(output_ppm,output_raw)
    #print "ret:",ret
    md5 = gdcm.Testing.ComputeFileMD5( output_raw )
    # ok this is the md5 as computed after decompression using kdu_expand
    # let see if it match out previously (stored) md5:
    ref = gdcm.Testing.GetMD5FromFile(filename)
    #print ref
    retval = 0
    if ref != md5:
      img = gdcm.ImageReader()
      img.SetFileName( filename )
      img.Read()
      if img.GetImage().GetDimension(2) != 1:
        print("Test do not handle multiframes for now")
      elif img.GetImage().GetPixelFormat().GetSamplesPerPixel() != 1:
        print("Test do not handle RGB for now. kdu_expand expand as RRR GGG BBB by default")
      else:
        print("md5 are different: %s should be: %s for file %s"%(md5,ref,filename))
        print("raw file was: %s"%(output_raw))
        retval = 1
  
    return retval
  
  if __name__ == "__main__":
      success = 0
      #try:
      #  filename = os.sys.argv[1]
      #  success += TestKakadu( filename )
      #except:
      # loop over all files:
      #t = gdcm.Testing()
      #nfiles = t.GetNumberOfFileNames()
      #for i in range(0,nfiles):
      #  filename = t.GetFileName(i)
      #  success += TestKakadu( filename )
      d = gdcm.Directory()
      tempdir = gdcm.Testing.GetTempDirectory()
      j2ksubdir = 'TestImageChangeTransferSyntax2' # FIXME hardcoded !
      nfiles = d.Load( tempdir + '/' + j2ksubdir )
      # make sure the output dir for temporary j2k files exists:
      md = gdcm.System.MakeDirectory( tempdir + '/' + j2ksubdir + '/kakadu' );
      if not md:
        sys.exit(1)
      files = d.GetFilenames()
      for i in range(0,nfiles):
        filename = files[i]
        success += TestKakadu( filename, os.sys.argv[1] )
  
      # Test succeed ?
      sys.exit(success)
  