set(ASY_STATIC_BASE_FILES
       animate animation annotate babel bezulate binarytree bsp CAD colormap
       contour3 contour drawtree embed external feynman flowchart fontsize
       geometry graph3 graph graph_settings graph_splinetype grid3 interpolate
       labelpath3 labelpath lmfit map mapArray markers math metapost obj ode palette patterns
       plain_arcs plain_arrows plain plain_bounds plain_boxes plain_constants plain_debugger
       plain_filldraw plain_Label plain_margins plain_markers plain_paths plain_pens
       plain_picture plain_prethree plain_scaling plain_shipout plain_strings pstoedit rational rationalSimplex
       roundedpath simplex size10 size11 slide slopefield smoothcontour3 solids stats syzygy simplex2
       texcolors three_arrows three three_light three_margins three_surface three_tube tree
       trembling tube v3d x11colors
)

set(ASY_STATIC_SHADER_FILES
       blend compress count fragment screen sum1 sum2 sum2fast
       sum3 vertex zero
)

set(OTHER_STATIC_BASE_FILES nopapersize.ps)

# base dir
set(ASY_SOURCE_BASE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/base)
set(ASY_BUILD_BASE_DIR ${CMAKE_CURRENT_BINARY_DIR}/base)

file(MAKE_DIRECTORY ${ASY_BUILD_BASE_DIR})

# version.asy
configure_file(${ASY_RESOURCE_DIR}/versionTemplate.asy.in ${ASY_BUILD_BASE_DIR}/version.asy)
list(APPEND ASY_OUTPUT_BASE_FILES ${ASY_BUILD_BASE_DIR}/version.asy)

# copy base files to build dir
macro (copy_base_file_with_custom_output_name base_file_name output_file_name)
   add_custom_command(
           COMMAND ${CMAKE_COMMAND} -E copy
           ${ASY_SOURCE_BASE_DIR}/${base_file_name}
           ${ASY_BUILD_BASE_DIR}/${output_file_name}
           OUTPUT ${ASY_BUILD_BASE_DIR}/${output_file_name}
           MAIN_DEPENDENCY ${ASY_SOURCE_BASE_DIR}/${base_file_name}
   )

   list(APPEND ASY_OUTPUT_BASE_FILES ${ASY_BUILD_BASE_DIR}/${output_file_name})
endmacro()

macro (copy_base_file base_file_name)
   copy_base_file_with_custom_output_name(${base_file_name} ${base_file_name})
endmacro()

foreach(ASY_STATIC_BASE_FILE ${ASY_STATIC_BASE_FILES})
   copy_base_file(${ASY_STATIC_BASE_FILE}.asy)
endforeach ()

foreach(OTHER_STATIC_BASE_FILE ${OTHER_STATIC_BASE_FILES})
   copy_base_file(${OTHER_STATIC_BASE_FILE})
endforeach ()

file(MAKE_DIRECTORY ${ASY_BUILD_BASE_DIR}/shaders)
foreach(ASY_STATIC_SHADER_FILE ${ASY_STATIC_SHADER_FILES})
   copy_base_file(shaders/${ASY_STATIC_SHADER_FILE}.glsl)
endforeach ()

# generated csv files
foreach(csv_enum_file ${ASY_CSV_ENUM_FILES})
   add_custom_command(
           OUTPUT ${ASY_BUILD_BASE_DIR}/${csv_enum_file}.asy
           COMMAND ${PY3_INTERPRETER} ${ASY_SCRIPTS_DIR}/generate_enums.py
           --language asy
           --name ${csv_enum_file}
           --input ${ASY_RESOURCE_DIR}/${csv_enum_file}.csv
           --output ${ASY_BUILD_BASE_DIR}/${csv_enum_file}.asy
           MAIN_DEPENDENCY ${ASY_RESOURCE_DIR}/${csv_enum_file}.csv
   )

   list(APPEND ASY_OUTPUT_BASE_FILES ${ASY_BUILD_BASE_DIR}/${csv_enum_file}.asy)
endforeach ()

# asygl
file(MAKE_DIRECTORY ${ASY_BUILD_BASE_DIR}/webgl)
copy_base_file_with_custom_output_name(webgl/asygl-${ASY_GL_VERSION}.js webgl/asygl.js)