# SPDX-FileCopyrightText: 2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later

set(INC
  PUBLIC ${CMAKE_CURRENT_BINARY_DIR}
  ../include
)

set(INC_SYS

)

# Part of the `blender` binary (sources for data-files are appended).
set(SRC

)

set(LIB
  PRIVATE bf::blenlib
)

# This section is maintained by the updating script, keep BEGIN/END comments.
# See: `make icons_geom` and the script `./release/datafiles/blender_icons_geom_update.py`.
set_property(GLOBAL PROPERTY ICON_GEOM_NAMES
  # BEGIN ICON_GEOM_NAMES
  brush.generic
  brush.gpencil_draw.erase
  brush.gpencil_draw.fill
  brush.paint_texture.clone
  brush.paint_texture.soften
  brush.paint_texture.smear
  brush.paint_texture.fill
  brush.paint_texture.mask
  brush.paint_vertex.average
  brush.paint_vertex.blur
  brush.paint_vertex.replace
  brush.paint_vertex.smear
  brush.paint_weight.average
  brush.paint_weight.blur
  brush.paint_weight.smear
  brush.particle.add
  brush.particle.comb
  brush.particle.cut
  brush.particle.length
  brush.particle.puff
  brush.particle.smooth
  brush.particle.weight
  brush.sculpt.displacement_eraser
  brush.sculpt.displacement_smear
  brush.sculpt.draw_face_sets
  brush.sculpt.mask
  brush.sculpt.paint
  brush.sculpt.simplify
  brush.uv_sculpt.grab
  brush.uv_sculpt.pinch
  brush.uv_sculpt.relax
  none
  ops.armature.bone.roll
  ops.armature.extrude_cursor
  ops.armature.extrude_move
  ops.curve.draw
  ops.curve.extrude_cursor
  ops.curve.extrude_move
  ops.curve.pen
  ops.curve.radius
  ops.curve.vertex_random
  ops.curves.sculpt_add
  ops.curves.sculpt_delete
  ops.curves.sculpt_density
  ops.generic.cursor
  ops.generic.select
  ops.generic.select_box
  ops.generic.select_circle
  ops.generic.select_lasso
  ops.generic.select_paint
  ops.gpencil.draw
  ops.gpencil.draw.eraser
  ops.gpencil.draw.line
  ops.gpencil.draw.poly
  ops.gpencil.edit_bend
  ops.gpencil.edit_mirror
  ops.gpencil.edit_shear
  ops.gpencil.edit_to_sphere
  ops.gpencil.extrude_move
  ops.gpencil.primitive_arc
  ops.gpencil.primitive_box
  ops.gpencil.primitive_circle
  ops.gpencil.primitive_curve
  ops.gpencil.primitive_line
  ops.gpencil.primitive_polyline
  ops.gpencil.radius
  ops.gpencil.sculpt_average
  ops.gpencil.sculpt_blur
  ops.gpencil.sculpt_clone
  ops.gpencil.sculpt_smear
  ops.gpencil.stroke_trim
  ops.gpencil.transform_fill
  ops.mesh.bevel
  ops.mesh.bisect
  ops.mesh.dupli_extrude_cursor
  ops.mesh.extrude_faces_move
  ops.mesh.extrude_manifold
  ops.mesh.extrude_region_move
  ops.mesh.extrude_region_shrink_fatten
  ops.mesh.inset
  ops.mesh.knife_tool
  ops.mesh.loopcut_slide
  ops.mesh.offset_edge_loops_slide
  ops.mesh.polybuild_hover
  ops.mesh.primitive_cone_add_gizmo
  ops.mesh.primitive_cube_add_gizmo
  ops.mesh.primitive_cylinder_add_gizmo
  ops.mesh.primitive_grid_add_gizmo
  ops.mesh.primitive_sphere_add_gizmo
  ops.mesh.primitive_torus_add_gizmo
  ops.mesh.rip
  ops.mesh.rip_edge
  ops.mesh.spin
  ops.mesh.vertices_smooth
  ops.node.links_cut
  ops.paint.eyedropper_add
  ops.paint.vertex_color_fill
  ops.paint.weight_fill
  ops.paint.weight_gradient
  ops.paint.weight_sample
  ops.paint.weight_sample_group
  ops.pose.breakdowner
  ops.pose.push
  ops.pose.relax
  ops.sculpt.border_face_set
  ops.sculpt.border_hide
  ops.sculpt.border_mask
  ops.sculpt.box_trim
  ops.sculpt.cloth_filter
  ops.sculpt.color_filter
  ops.sculpt.face_set_edit
  ops.sculpt.lasso_face_set
  ops.sculpt.lasso_hide
  ops.sculpt.lasso_mask
  ops.sculpt.lasso_trim
  ops.sculpt.line_face_set
  ops.sculpt.line_hide
  ops.sculpt.line_mask
  ops.sculpt.line_project
  ops.sculpt.line_trim
  ops.sculpt.mask_by_color
  ops.sculpt.mesh_filter
  ops.sculpt.polyline_face_set
  ops.sculpt.polyline_hide
  ops.sculpt.polyline_mask
  ops.sculpt.polyline_trim
  ops.sequencer.blade
  ops.sequencer.retime
  ops.transform.bone_envelope
  ops.transform.bone_size
  ops.transform.edge_slide
  ops.transform.push_pull
  ops.transform.resize.cage
  ops.transform.resize
  ops.transform.rotate
  ops.transform.shear
  ops.transform.shrink_fatten
  ops.transform.tilt
  ops.transform.tosphere
  ops.transform.transform
  ops.transform.translate
  ops.transform.vert_slide
  ops.transform.vertex_random
  ops.view3d.ruler
  # END ICON_GEOM_NAMES
)

data_to_c_simple(../../../../release/datafiles/bfont.pfb SRC)


if(WITH_BLENDER)
  # Blender only (not Cycles stand-alone).

  if(NOT WITH_HEADLESS)
    # Blender UI only.

    set(SVG_FILENAMES_NOEXT
      action
      action_slot
      action_tweak
      add
      aliased
      align_bottom
      align_center
      align_flush
      align_justify
      align_left
      align_middle
      align_right
      align_top
      anchor_bottom
      anchor_center
      anchor_left
      anchor_right
      anchor_top
      anim
      anim_data
      antialiased
      append_blend
      area_dock
      area_join
      area_join_down
      area_join_left
      area_join_up
      area_swap
      armature_data
      arrow_leftright
      asset_manager
      auto
      automerge_off
      automerge_on
      axis_front
      axis_side
      axis_top
      back
      blank1
      blender
      blender_logo_large
      boids
      bold
      bone_data
      bookmarks
      bordermove
      brushes_all
      brush_data
      camera_data
      camera_stereo
      cancel
      cancel_large
      center_only
      checkbox_dehlt
      checkbox_hlt
      checkmark
      clipuv_dehlt
      clipuv_hlt
      collapsemenu
      collection_new
      color
      color_blue
      color_green
      color_red
      community
      cone
      console
      constraint
      constraint_bone
      con_action
      con_armature
      con_camerasolver
      con_childof
      con_clampto
      con_distlimit
      con_floor
      con_followpath
      con_followtrack
      con_kinematic
      con_locktrack
      con_loclike
      con_loclimit
      con_objectsolver
      con_pivot
      con_rotlike
      con_rotlimit
      con_samevol
      con_shrinkwrap
      con_sizelike
      con_sizelimit
      con_splineik
      con_stretchto
      con_trackto
      con_transform
      con_transform_cache
      con_translike
      copydown
      copy_id
      cube
      current_file
      cursor
      curves
      curves_data
      curve_bezcircle
      curve_bezcurve
      curve_data
      curve_ncircle
      curve_ncurve
      curve_path
      decorate
      decorate_animate
      decorate_driver
      decorate_keyframe
      decorate_library_override
      decorate_linked
      decorate_locked
      decorate_override
      decorate_unlocked
      desktop
      disc
      disc_large
      disclosure_tri_down
      disclosure_tri_right
      disk_drive
      disk_drive_large
      documents
      dot
      downarrow_hlt
      driver
      driver_distance
      driver_rotational_difference
      driver_transform
      duplicate
      edgesel
      editmode_hlt
      empty_arrows
      empty_axis
      empty_data
      empty_single_arrow
      error
      experimental
      export
      external_drive
      external_drive_large
      eyedropper
      facesel
      face_corner
      face_maps
      fake_user_off
      fake_user_on
      fcurve
      fcurve_snapshot
      ff
      file
      file_large
      filebrowser
      file_3d
      file_alias
      file_archive
      file_backup
      file_blank
      file_blend
      file_cache
      file_folder
      file_folder_large
      file_font
      file_hidden
      file_image
      file_movie
      file_new
      file_parent
      file_parent_large
      file_refresh
      file_script
      file_sound
      file_text
      file_tick
      file_volume
      filter
      fixed_size
      folder_redirect
      fontpreview
      font_data
      force_boid
      force_charge
      force_curve
      force_drag
      force_fluidflow
      force_force
      force_harmonic
      force_lennardjones
      force_magnetic
      force_texture
      force_turbulence
      force_vortex
      force_wind
      forward
      frame_next
      frame_prev
      freeze
      fullscreen_enter
      fullscreen_exit
      fund
      geometry_nodes
      geometry_set
      ghost_disabled
      ghost_enabled
      gizmo
      gp_caps_flat
      gp_caps_round
      gp_multiframe_editing
      gp_only_selected
      gp_select_between_strokes
      gp_select_points
      gp_select_strokes
      graph
      greasepencil
      greasepencil_layer_group
      grid
      grip
      group
      group_bone
      group_uvs
      group_vcol
      group_vertex
      hand
      handle_aligned
      handle_auto
      handle_autoclamped
      handle_free
      handle_vector
      heart
      help
      hide_off
      hide_on
      holdout_off
      holdout_on
      home
      hook
      image
      image_alpha
      image_background
      image_data
      image_plane
      image_reference
      image_rgb
      image_rgb_alpha
      image_zdepth
      imgdisplay
      import
      indirect_only_off
      indirect_only_on
      info
      info_large
      internet
      internet_offline
      inversesquarecurve
      ipo_back
      ipo_bezier
      ipo_bounce
      ipo_circ
      ipo_constant
      ipo_cubic
      ipo_ease_in
      ipo_ease_in_out
      ipo_ease_out
      ipo_elastic
      ipo_expo
      ipo_linear
      ipo_quad
      ipo_quart
      ipo_quint
      ipo_sine
      italic
      keyframe
      keyframe_hlt
      keyingset
      key_backspace
      key_backspace_filled
      key_command
      key_command_filled
      key_control
      key_control_filled
      key_dehlt
      key_empty1
      key_empty1_filled
      key_empty2
      key_empty2_filled
      key_empty3
      key_empty3_filled
      key_hlt
      key_menu
      key_menu_filled
      key_option
      key_option_filled
      key_return
      key_return_filled
      key_ring
      key_ring_filled
      key_shift
      key_shift_filled
      key_tab
      key_tab_filled
      key_windows
      key_windows_filled
      lattice_data
      layer_active
      layer_used
      library_data_broken
      library_data_direct
      library_data_override
      light
      lightprobe_plane
      lightprobe_sphere
      lightprobe_volume
      light_area
      light_data
      light_hemi
      light_point
      light_spot
      light_sun
      lincurve
      linenumbers_off
      linenumbers_on
      line_data
      linked
      link_blend
      locked
      lockview_off
      lockview_on
      longdisplay
      loop_back
      loop_forwards
      marker
      marker_hlt
      matcloth
      matcube
      material
      material_data
      matfluid
      matplane
      matshaderball
      matsphere
      mat_sphere_sky
      memory
      menu_panel
      mesh_capsule
      mesh_circle
      mesh_cone
      mesh_cube
      mesh_cylinder
      mesh_data
      mesh_grid
      mesh_icosphere
      mesh_monkey
      mesh_plane
      mesh_torus
      mesh_uvsphere
      meta_ball
      meta_capsule
      meta_cube
      meta_data
      meta_ellipsoid
      meta_plane
      modifier
      modifier_data
      modifier_off
      modifier_on
      mod_armature
      mod_array
      mod_bevel
      mod_boolean
      mod_build
      mod_cast
      mod_cloth
      mod_curve
      mod_dash
      mod_data_transfer
      mod_decim
      mod_displace
      mod_dynamicpaint
      mod_edgesplit
      mod_envelope
      mod_explode
      mod_fluid
      mod_fluidsim
      mod_hue_saturation
      mod_instance
      mod_lattice
      mod_length
      mod_lineart
      mod_mask
      mod_meshdeform
      mod_mirror
      mod_multires
      mod_noise
      mod_normaledit
      mod_ocean
      mod_offset
      mod_opacity
      mod_outline
      mod_particles
      mod_particle_instance
      mod_physics
      mod_remesh
      mod_screw
      mod_shrinkwrap
      mod_simpledeform
      mod_simplify
      mod_skin
      mod_smooth
      mod_soft
      mod_solidify
      mod_subsurf
      mod_thickness
      mod_time
      mod_tint
      mod_triangulate
      mod_uvproject
      mod_vertex_weight
      mod_warp
      mod_wave
      mod_wireframe
      monkey
      mouse_lmb
      mouse_lmb_2x
      mouse_lmb_drag
      mouse_mmb
      mouse_mmb_drag
      mouse_mmb_scroll
      mouse_move
      mouse_rmb
      mouse_rmb_drag
      mute_ipo_off
      mute_ipo_on
      network_drive
      network_drive_large
      newfolder
      next_keyframe
      nla
      nla_pushdown
      nocurve
      node
      nodetree
      node_compositing
      node_corner
      node_insert_off
      node_insert_on
      node_material
      node_sel
      node_side
      node_texture
      node_top
      none
      normalize_fcurves
      normals_face
      normals_vertex
      normals_vertex_face
      object_data
      object_datamode
      object_hidden
      object_origin
      onionskin_off
      onionskin_on
      options
      orientation_cursor
      orientation_gimbal
      orientation_global
      orientation_local
      orientation_normal
      orientation_parent
      orientation_view
      orphan_data
      outliner
      outliner_collection
      outliner_data_armature
      outliner_data_camera
      outliner_data_curve
      outliner_data_curves
      outliner_data_empty
      outliner_data_font
      outliner_data_gp_layer
      outliner_data_greasepencil
      outliner_data_lattice
      outliner_data_light
      outliner_data_lightprobe
      outliner_data_mesh
      outliner_data_meta
      outliner_data_pointcloud
      outliner_data_speaker
      outliner_data_surface
      outliner_data_volume
      outliner_ob_armature
      outliner_ob_camera
      outliner_ob_curve
      outliner_ob_curves
      outliner_ob_empty
      outliner_ob_font
      outliner_ob_force_field
      outliner_ob_greasepencil
      outliner_ob_group_instance
      outliner_ob_image
      outliner_ob_lattice
      outliner_ob_light
      outliner_ob_lightprobe
      outliner_ob_mesh
      outliner_ob_meta
      outliner_ob_pointcloud
      outliner_ob_speaker
      outliner_ob_surface
      outliner_ob_volume
      output
      overlay
      package
      panel_close
      particlemode
      particles
      particle_data
      particle_path
      particle_point
      particle_tip
      pastedown
      pasteflipdown
      pasteflipup
      pause
      physics
      pinned
      pivot_active
      pivot_boundbox
      pivot_cursor
      pivot_individual
      pivot_median
      play
      play_reverse
      play_sound
      plugin
      plus
      pmarker
      pmarker_act
      pmarker_sel
      pointcloud_data
      pointcloud_point
      pose_hlt
      preferences
      preset
      preset_new
      preview_range
      prev_keyframe
      properties
      prop_con
      prop_off
      prop_on
      prop_projected
      question
      question_large
      quit
      radiobut_off
      radiobut_on
      rec
      record_off
      record_on
      recover_last
      remove
      renderlayers
      render_animation
      render_result
      render_still
      restrict_color_off
      restrict_color_on
      restrict_instanced_off
      restrict_instanced_on
      restrict_render_off
      restrict_render_on
      restrict_select_off
      restrict_select_on
      restrict_view_off
      restrict_view_on
      rew
      rightarrow
      rightarrow_thin
      rigid_body
      rigid_body_constraint
      rna
      rna_add
      rndcurve
      rootcurve
      scene
      scene_data
      screen_back
      script
      scriptplugins
      sculptmode_hlt
      select_difference
      select_extend
      select_intersect
      select_set
      select_subtract
      sequence
      seq_chroma_scope
      seq_histogram
      seq_luma_waveform
      seq_preview
      seq_sequencer
      seq_splitview
      seq_strip_duplicate
      seq_strip_meta
      settings
      shaderfx
      shading_bbox
      shading_rendered
      shading_solid
      shading_texture
      shading_wire
      shapekey_data
      sharpcurve
      shortdisplay
      small_caps
      smoothcurve
      snap_edge
      snap_face
      snap_face_center
      snap_face_nearest
      snap_grid
      snap_increment
      snap_midpoint
      snap_normal
      snap_off
      snap_on
      snap_peel_object
      snap_perpendicular
      snap_vertex
      snap_volume
      solo_off
      solo_on
      sortalpha
      sortbyext
      sortsize
      sorttime
      sort_asc
      sort_desc
      sound
      speaker
      sphere
      spherecurve
      split_horizontal
      split_vertical
      spreadsheet
      statusbar
      sticky_uvs_disable
      sticky_uvs_loc
      sticky_uvs_vert
      strands
      stroke
      stylus_pressure
      surface_data
      surface_ncircle
      surface_ncurve
      surface_ncylinder
      surface_nsphere
      surface_nsurface
      surface_ntorus
      syntax_off
      syntax_on
      system
      tag
      temp
      text
      texture
      texture_data
      three_dots
      time
      tool_settings
      topbar
      tpaint_hlt
      tracker
      tracker_data
      tracking
      tracking_backwards
      tracking_backwards_single
      tracking_clear_backwards
      tracking_clear_forwards
      tracking_forwards
      tracking_forwards_single
      tracking_refine_backwards
      tracking_refine_forwards
      transform_origins
      trash
      tria_down
      tria_down_bar
      tria_left
      tria_left_bar
      tria_right
      tria_right_bar
      tria_up
      tria_up_bar
      uglypackage
      underline
      unlinked
      unlocked
      unpinned
      url
      user
      uv
      uv_data
      uv_edgesel
      uv_facesel
      uv_islandsel
      uv_sync_select
      uv_vertexsel
      vertexsel
      view3d
      viewzoom
      view_camera
      view_camera_unselected
      view_locked
      view_ortho
      view_pan
      view_perspective
      view_unlocked
      view_zoom
      vis_sel_00
      vis_sel_01
      vis_sel_10
      vis_sel_11
      volume_data
      vpaint_hlt
      warning_large
      window
      wordwrap_off
      wordwrap_on
      workspace
      world
      world_data
      wpaint_hlt
      x
      xray
      zoom_all
      zoom_in
      zoom_out
      zoom_previous
      zoom_selected
    )
    set(SVG_CONTENTS_H)
    set(SVG_CONTENTS_C)
    foreach(svg ${SVG_FILENAMES_NOEXT})
      data_to_c_simple(../../../../release/datafiles/icons_svg/${svg}.svg SRC)
      string(TOUPPER ${svg} svg_name_upper)
      list(APPEND SVG_CONTENTS_H
        "extern const char datatoc_${svg}_svg[]\;\n"
      )
      list(APPEND SVG_CONTENTS_C
        "case ICON_${svg_name_upper}: return datatoc_${svg}_svg\;\n"
      )
    endforeach()
    unset(svg_name_upper)

    list(JOIN SVG_CONTENTS_C "" SVG_CONTENTS_C)
    list(JOIN SVG_CONTENTS_H "" SVG_CONTENTS_H)

    configure_file(
      "svg_icons.h.in"
      "${CMAKE_CURRENT_BINARY_DIR}/svg_icons.h"
      ESCAPE_QUOTES
      @ONLY
    )
    configure_file(
      "svg_icons.cc.in"
      "${CMAKE_CURRENT_BINARY_DIR}/svg_icons.cc"
      ESCAPE_QUOTES
      @ONLY
    )

    list(APPEND SRC ${CMAKE_CURRENT_BINARY_DIR}/svg_icons.h)
    list(APPEND SRC ${CMAKE_CURRENT_BINARY_DIR}/svg_icons.cc)
    # Blend files.
    data_to_c_simple(../../../../release/datafiles/preview.blend SRC)
    data_to_c_simple(../../../../release/datafiles/preview_grease_pencil.blend SRC)

    # Images.
    data_to_c_simple(../../../../release/datafiles/splash.png SRC)

    unset(SVG_CONTENTS_H)
    unset(SVG_CONTENTS_C)
    unset(SVG_FILENAMES_NOEXT)

  endif()

  data_to_c_simple(../../../../release/datafiles/startup.blend SRC)
endif()

unset(ICON_NAMES)

blender_add_lib(bf_editor_datafiles "${SRC}" "${INC}" "${INC_SYS}" "${LIB}")
add_library(bf::editor::datafiles ALIAS bf_editor_datafiles)
