# The GCC-XML forwarding exectuable.
ADD_EXECUTABLE(gccxml
  gxSystemTools.cxx
  gxConfiguration.cxx
  gxDocumentation.cxx
  gxFlagsParser.cxx
  gxFront.cxx
)

TARGET_LINK_LIBRARIES(gccxml gxsys)

IF(UNIX)
  INSTALL_TARGETS(${GCCXML_INSTALL_ROOT}/bin gccxml)
ENDIF(UNIX)

# If we are inside a project that is building gccxml_cc1plus for us,
# add the dependency to build it first.
IF(GCCXML_NATIVE_CC1PLUS)
  ADD_DEPENDENCIES(gccxml gccxml_cc1plus)
ENDIF(GCCXML_NATIVE_CC1PLUS)

IF(NOT UNIX)
  # Use a dummy executable to enforce dependencies on generation
  # of patched compiler headers.  This is necessary to get around
  # dependency limitations on custom targets in CMake 1.6.  Later
  # cmakes do not have this limitation.
  ADD_EXECUTABLE(vcInstallPatch ${GCCXML_BINARY_DIR}/vcInstall_stamp.c)
  SET_SOURCE_FILES_PROPERTIES(${GCCXML_BINARY_DIR}/vcInstall_stamp.c
    PROPERTIES GENERATED 1)
  # Create the MSVC support directories.
  # This will just execute on every build because we don't know
  # what files and directories it may create.
  ADD_CUSTOM_COMMAND(TARGET vcInstallPatch
    SOURCE ${GCCXML_SOURCE_DIR}/VcInstall/vcPatch.readme.txt
    COMMAND ${GCCXML_VCINSTALL_EXE}
    ARGS ${GCCXML_SOURCE_DIR}/VcInstall ${GCCXML_ROOT}
         ${GCCXML_BINARY_DIR}/vcInstall_stamp.c
    OUTPUTS ${GCCXML_BINARY_DIR}/vcInstall_stamp.c
    DEPENDS ${GCCXML_VCINSTALL_EXE}
    ${GCCXML_SOURCE_DIR}/VcInstall/vc6Include.patch
    ${GCCXML_SOURCE_DIR}/VcInstall/vc7Include.patch
    ${GCCXML_SOURCE_DIR}/VcInstall/vc7PlatformSDK.patch
    ${GCCXML_SOURCE_DIR}/VcInstall/vc71Include.patch
    ${GCCXML_SOURCE_DIR}/VcInstall/vc71PlatformSDK.patch
    )

  ADD_DEPENDENCIES(gccxml vcInstallPatch)
ENDIF(NOT UNIX)

#-----------------------------------------------------------------------------
# Generate documentation.
SET(CMD_DIR ${GCCXML_EXECUTABLE_DIR}/${CMAKE_CFG_INTDIR})
IF(WIN32)
  SET(CMD_EXT ".exe")
ELSE(WIN32)
  SET(CMD_EXT "")
ENDIF(WIN32)
SET(CMD ${CMD_DIR}/gccxml${CMD_EXT})

MAKE_DIRECTORY(${GCCXML_EXECUTABLE_DIR}/doc)

ADD_CUSTOM_TARGET(documentation ALL DEPENDS
  ${GCCXML_EXECUTABLE_DIR}/doc/gccxml.1
  ${GCCXML_EXECUTABLE_DIR}/doc/gccxml.txt
  ${GCCXML_EXECUTABLE_DIR}/doc/gccxml.html
  ${GCCXML_EXECUTABLE_DIR}/doc/Copyright.txt)
ADD_DEPENDENCIES(documentation gccxml)

ADD_CUSTOM_COMMAND(OUTPUT ${GCCXML_EXECUTABLE_DIR}/doc/gccxml.1
  COMMAND ${CMD}
  ARGS --man > ${GCCXML_EXECUTABLE_DIR}/doc/gccxml.1
  DEPENDS ${CMD}
  )

ADD_CUSTOM_COMMAND(OUTPUT ${GCCXML_EXECUTABLE_DIR}/doc/gccxml.txt
  COMMAND ${CMD}
  ARGS --help > ${GCCXML_EXECUTABLE_DIR}/doc/gccxml.txt
  DEPENDS ${CMD}
  )

ADD_CUSTOM_COMMAND(OUTPUT ${GCCXML_EXECUTABLE_DIR}/doc/gccxml.html
  COMMAND ${CMD}
  ARGS --help-html > ${GCCXML_EXECUTABLE_DIR}/doc/gccxml.html
  DEPENDS ${CMD}
  )

ADD_CUSTOM_COMMAND(OUTPUT ${GCCXML_EXECUTABLE_DIR}/doc/Copyright.txt
  COMMAND ${CMD}
  ARGS --copyright > ${GCCXML_EXECUTABLE_DIR}/doc/Copyright.txt
  DEPENDS ${CMD}
  )

IF(UNIX)
  INSTALL_TARGETS(${GCCXML_INSTALL_ROOT}/bin gccxml)
  INSTALL_FILES(${GCCXML_INSTALL_ROOT}${GCCXML_MAN_DIR}/man1 FILES
    ${GCCXML_EXECUTABLE_DIR}/doc/gccxml.1)
  INSTALL_FILES(${GCCXML_INSTALL_ROOT}${GCCXML_DOC_DIR} FILES
    ${GCCXML_EXECUTABLE_DIR}/doc/gccxml.txt
    ${GCCXML_EXECUTABLE_DIR}/doc/gccxml.html
    ${GCCXML_EXECUTABLE_DIR}/doc/Copyright.txt)
ENDIF(UNIX)
