if(NOT BUILD_PANDA)
  message(FATAL_ERROR "Cannot build direct without panda!  Please enable the BUILD_PANDA option.")
endif()

# Include source directories which have C++ components:
add_subdirectory(src/dcparse)
add_subdirectory(src/dcparser)
add_subdirectory(src/deadrec)
add_subdirectory(src/directbase)
#add_subdirectory(src/directd)
#add_subdirectory(src/directdServer)
add_subdirectory(src/distributed)
add_subdirectory(src/interval)
add_subdirectory(src/motiontrail)
add_subdirectory(src/showbase)

set(P3DIRECT_COMPONENTS
  p3dcparser p3deadrec
  p3interval p3motiontrail p3showbase
)
if(HAVE_PYTHON)
  list(APPEND P3DIRECT_COMPONENTS p3distributed)
endif()

set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "DirectDevel")
add_metalib(p3direct INIT init_libdirect direct.h COMPONENTS ${P3DIRECT_COMPONENTS})
unset(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME)
set_property(TARGET p3direct PROPERTY LINKER_LANGUAGE "CXX")

# Installation:
install(TARGETS p3direct
  EXPORT Direct COMPONENT Direct
  DESTINATION ${CMAKE_INSTALL_LIBDIR}
  RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
  ARCHIVE COMPONENT DirectDevel)

if(HAVE_PYTHON)
  # Now for the Python side of everything

  add_python_module(panda3d.direct
    p3dcparser p3deadrec p3distributed p3interval
    p3motiontrail p3showbase LINK p3direct IMPORT panda3d.core COMPONENT Direct)

  # Copy Python source files into the build directory
  install_python_package(direct SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/src" LIB COMPONENT Direct)

  # This bit is to generate the 'pandac' compatibility shim. It's deprecated now,
  # but in older versions of Panda3D, one would use
  # from pandac.PandaModules import *
  # instead of
  # from panda3d.FOO import *
  # Generate PandaModules:
  file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/pandac/PandaModules.py"
    "\"This module is deprecated.  Import from panda3d.core and other panda3d.* modules instead.\"

if __debug__:
    print(\"Warning: pandac.PandaModules is deprecated, import from panda3d.core instead\")\n")

  foreach(module ${ALL_INTERROGATE_MODULES})
    string(REGEX REPLACE "^.*\\." "" module_name "${module}")
    file(APPEND "${CMAKE_CURRENT_BINARY_DIR}/pandac/PandaModules.py" "
try:
    from ${module} import *
except ImportError as err:
    if not (\"No module named\" in str(err) and \"${module_name}\" in str(err)):
        raise
")
  endforeach()

  file(APPEND "${CMAKE_CURRENT_BINARY_DIR}/pandac/PandaModules.py"
    "from direct.showbase import DConfig

def get_config_showbase():
    return DConfig

def get_config_express():
    return DConfig

getConfigShowbase = get_config_showbase
getConfigExpress = get_config_express
")

  # Now install ourselves:
  install_python_package(pandac SOURCE "${CMAKE_CURRENT_BINARY_DIR}/pandac" LIB COMPONENT Direct)
endif()

# "Direct" component contains both the Python stuff and the non-Python stuff,
# because direct has a pretty solid dependency on Python.
export_targets(Direct NAMESPACE "Panda3D::Direct::" COMPONENT DirectDevel)
