
add_executable(awali_module_compiler EXCLUDE_FROM_ALL module-compiler.cc)
target_link_libraries(awali_module_compiler awalidyn)


add_custom_target(world DEPENDS awalidyn)

set_property(GLOBAL PROPERTY TARGET_MESSAGES OFF)

foreach(MOD accessible are-equivalent automaton context derivation determinize eliminate eval factor factories graph history minimize output partial-id product proper quotient ratexp standard singleproduct transducer transpose)
  add_custom_target(module_${MOD})
endforeach()

foreach(WS b z q r c zmin zmax pmax f2 zz3 zz7 zz99)
  add_custom_target(${WS})
  add_dependencies(world ${WS})

  foreach(MOD accessible determinize factories  partial-id standard automaton
              history    proper      transpose  context    quotient output
              ratexp     factor      derivation eval       graph    singleproduct
              minimize  
  )

    add_custom_target(lal_char_${WS}-${MOD}
      COMMAND ./awali_module_compiler -d ${MOD} lal_char_${WS}
      VERBATIM
      DEPENDS awali_module_compiler awalidyn
    )

    add_dependencies(${WS} "lal_char_${WS}-${MOD}")
    add_dependencies(module_${MOD} "lal_char_${WS}-${MOD}")

  #   set_property(TARGET lal_char_${WS}-${MOD} PROPERTY TARGET_MESSAGES OFF)

    add_custom_target(lan-lal_char-_${WS}-${MOD}
      COMMAND ./awali_module_compiler -d ${MOD} "lan<lal_char>_${WS}"
      VERBATIM
      DEPENDS awali_module_compiler awalidyn
    )

    add_dependencies(${WS} lan-lal_char-_${WS}-${MOD})
    add_dependencies(module_${MOD} lan-lal_char-_${WS}-${MOD})

  endforeach(MOD)

  foreach(MOD are-equivalent product)
    add_custom_target(lal_char_${WS}_lal_char_${WS}-${MOD}
        COMMAND ./awali_module_compiler -d ${MOD} lal_char_${WS} lal_char_${WS}
        VERBATIM
        DEPENDS awali_module_compiler awalidyn
    )
    add_dependencies(${WS} lal_char_${WS}_lal_char_${WS}-${MOD})
    add_dependencies(module_${MOD} lal_char_${WS}_lal_char_${WS}-${MOD})
  endforeach(MOD)

  foreach(MOD context transducer automaton accessible transpose graph output)
    add_custom_target(lat-lan-lal_char-_lan-lal_char--_${WS}-${MOD}
      COMMAND ./awali_module_compiler -d "${MOD}" "lat<lan<lal_char>,lan<lal_char>>_${WS}"
      VERBATIM
      DEPENDS awali_module_compiler awalidyn
    )
    add_dependencies(${WS} lat-lan-lal_char-_lan-lal_char--_${WS}-${MOD})
    add_dependencies(module_${MOD} lat-lan-lal_char-_lan-lal_char--_${WS}-${MOD})
  endforeach(MOD)

  foreach(MOD context transducer automaton transpose graph output)
    add_custom_target(lat-lan-lal_char-_lal_char-_${WS}-${MOD}
      COMMAND ./awali_module_compiler -d "${MOD}" "lat<lan<lal_char>,lal_char>_${WS}"
      VERBATIM
      DEPENDS awali_module_compiler awalidyn
    )
    add_custom_target(lat-lal_char-_lan-lal_char--_${WS}-${MOD}
      COMMAND ./awali_module_compiler -d "${MOD}" "lat<lal_char,lan<lal_char>>_${WS}"
      VERBATIM
      DEPENDS awali_module_compiler awalidyn
    )
  endforeach(MOD)


  foreach(MOD compose)
    add_custom_target(lat-lan-lal_char-_lan-lal_char--_${WS}-${MOD}
      COMMAND ./awali_module_compiler -d "${MOD}" "lat<lan<lal_char>,lan<lal_char>>_${WS}" "lat<lan<lal_char>,lan<lal_char>>_${WS}"
      VERBATIM
      DEPENDS awali_module_compiler awalidyn
    )
  endforeach(MOD)

  foreach(MOD eliminate)
    add_custom_target(lao_${WS}-${MOD}
      COMMAND ./awali_module_compiler -d "${MOD}" "lao_${WS}"
      VERBATIM
      DEPENDS awali_module_compiler awalidyn
    )
  endforeach(MOD)
endforeach(WS)
