# Meson build options for LibAgar
# Matches the options available in BSDBuild (configure.in) and CMake (CMakeLists.txt)

# ============================================================================
# Libraries to build
# ============================================================================

option('gui', type: 'boolean', value: true,
  description: 'Build the Agar-GUI library (the Agar GUI system)')

option('au', type: 'boolean', value: true,
  description: 'Build the Agar-AU library (audio and sound toolkit)')

option('map', type: 'boolean', value: true,
  description: 'Build the Agar-MAP library (2D tile engine)')

option('math', type: 'boolean', value: true,
  description: 'Build the Agar-Math library (math library and advanced rendering)')

option('net', type: 'boolean', value: true,
  description: 'Build the Agar-Net library (network interface library)')

option('sg', type: 'boolean', value: true,
  description: 'Build the Agar-SG library (scene graph and 3D engine)')

option('sk', type: 'boolean', value: true,
  description: 'Build the Agar-SK library (sketch and constraint solver)')

option('vg', type: 'boolean', value: true,
  description: 'Build the Agar-VG library (simple 2D vector graphics)')

# ============================================================================
# Global Agar options
# ============================================================================

option('memory_model', type: 'combo',
  choices: ['auto', 'small', 'medium', 'large'],
  value: 'auto',
  description: 'Select Agar memory model (auto=detect from architecture)')

option('float', type: 'boolean', value: true,
  description: 'Floating-point support')

option('shared', type: 'boolean', value: true,
  description: 'Build shared libraries')

option('static', type: 'boolean', value: true,
  description: 'Build static libraries')

option('static_pic', type: 'boolean', value: false,
  description: 'Build static libraries with PIC (needed if linking static libs into shared libs)')

option('type_safety', type: 'boolean', value: false,
  description: 'Run-time type safety checks (implied by debug build)')

option('debug_surfaces', type: 'boolean', value: false,
  description: 'Trace AG_Surface operations (expensive)')

option('legacy', type: 'boolean', value: true,
  description: 'Enable deprecated interfaces')

option('threads', type: 'boolean', value: true,
  description: 'Thread safety and multithreading support')

option('warnings', type: 'boolean', value: false,
  description: 'Use suggested compiler warnings')

option('tests', type: 'boolean', value: false,
  description: 'Build test suite (auto-enabled in debug builds)')

option('attributes', type: 'boolean', value: true,
  description: 'Compiler attributes and annotations')

option('inline', type: 'boolean', value: true,
  description: 'Inline functions as appropriate')

option('nls', type: 'boolean', value: false,
  description: 'Enable internationalization and localization (NLS)')

# ============================================================================
# Options specific to CORE library
# ============================================================================

option('ansi_color', type: 'boolean', value: true,
  description: 'Produce colorized output')

option('dso', type: 'boolean', value: true,
  description: 'Dynamically loaded modules')

option('exec', type: 'boolean', value: true,
  description: 'The AG_Execute(3) interface')

option('event_loop', type: 'boolean', value: true,
  description: 'The standard AG_EventLoop(3)')

option('namespaces', type: 'boolean', value: true,
  description: 'Namespaces for object classes')

option('named_args', type: 'boolean', value: true,
  description: 'Named AG_Event arguments')

option('serialization', type: 'boolean', value: true,
  description: 'File I/O and serialization')

option('string', type: 'boolean', value: true,
  description: 'AG_Printf(3) formatting engine')

option('timers', type: 'boolean', value: true,
  description: 'The AG_Timer(3) interface')

option('unicode', type: 'boolean', value: true,
  description: 'Support for Unicode')

option('user', type: 'boolean', value: true,
  description: 'The AG_User(3) interface')

option('verbosity', type: 'boolean', value: true,
  description: 'Verbose error messages')

option('db4', type: 'boolean', value: false,
  description: 'AG_Db: Berkeley DB backend')

option('mysql', type: 'boolean', value: false,
  description: 'AG_Db: MySQL backend')

option('iconv', type: 'boolean', value: true,
  description: 'Character set conversion')

# Inline function options
option('inline_byteswap', type: 'boolean', value: true,
  description: 'Inline endianness swaps')

option('inline_error', type: 'boolean', value: true,
  description: 'Inline malloc() wrappers')

option('inline_event', type: 'boolean', value: true,
  description: 'Inline event argument accessors')

option('inline_io', type: 'boolean', value: true,
  description: 'Inline serialization frontends')

option('inline_object', type: 'boolean', value: true,
  description: 'Inline some AG_Object calls')

option('inline_string', type: 'boolean', value: true,
  description: 'Inline some string functions')

option('inline_tbl', type: 'boolean', value: true,
  description: 'Inline some AG_Tbl functions')

option('inline_threads', type: 'boolean', value: true,
  description: 'Inline AG_Threads functions')

option('inline_variable', type: 'boolean', value: true,
  description: 'Inline some AG_Variable calls')

# ============================================================================
# Options specific to MATH library
# ============================================================================

option('math_precision', type: 'combo',
  choices: ['single', 'double', 'quad'],
  value: 'double',
  description: 'Precision of M_Real type')

option('altivec', type: 'boolean', value: true,
  description: 'AltiVec-optimized routines')

option('altivec_inline', type: 'boolean', value: false,
  description: 'Inline AltiVec functions (requires AltiVec CPU)')

option('sse', type: 'boolean', value: true,
  description: 'SSE-optimized routines')

option('sse_inline', type: 'boolean', value: false,
  description: 'Inline SSE functions (requires SSE CPU)')

option('sse2', type: 'boolean', value: true,
  description: 'SSE2 optimizations (when SSE is enabled)')

option('sse3', type: 'boolean', value: true,
  description: 'SSE3 optimizations (when SSE is enabled)')

# ============================================================================
# Options specific to NET library
# ============================================================================

option('web', type: 'boolean', value: false,
  description: 'HTTP/1.1 application server')

option('zlib', type: 'feature', value: 'auto',
  description: 'zlib compression library (for web support)')

# ============================================================================
# Options specific to GUI library
# ============================================================================

option('widgets', type: 'boolean', value: true,
  description: 'The standard widget library')

option('wm_hints', type: 'boolean', value: true,
  description: 'Interface with window managers')

option('freetype', type: 'boolean', value: true,
  description: 'Enable FreeType support (recommended)')

option('fontconfig', type: 'boolean', value: true,
  description: 'Enable Fontconfig support')

option('gl', type: 'boolean', value: true,
  description: 'OpenGL rendering support')

option('jpeg', type: 'boolean', value: true,
  description: 'Built-in JPEG image support')

option('png', type: 'boolean', value: true,
  description: 'Built-in PNG image support')

option('x11', type: 'boolean', value: true,
  description: 'Build with X windows support')

option('xinerama', type: 'boolean', value: true,
  description: 'Build with Xinerama support')

option('glx', type: 'boolean', value: true,
  description: 'Enable accelerated X driver')

option('sdl', type: 'boolean', value: false,
  description: 'Enable SDL 1.2 driver')

option('sdl2', type: 'boolean', value: true,
  description: 'Enable SDL 2.0 driver')

option('wgl', type: 'feature', value: 'auto',
  description: 'Enable MS Windows driver')

option('cocoa', type: 'feature', value: 'auto',
  description: 'Enable MacOS X Cocoa driver')

option('inline_surface', type: 'boolean', value: true,
  description: 'Inline pixel access routines')

option('inline_widget', type: 'boolean', value: true,
  description: 'Inline some AG_Widget functions')

# ============================================================================
# Options specific to AU library
# ============================================================================

option('sndfile', type: 'boolean', value: true,
  description: 'Enable sndfile support')

option('portaudio', type: 'boolean', value: true,
  description: 'Enable portaudio driver')

# ============================================================================
# Options specific to SG library
# ============================================================================

option('glu', type: 'boolean', value: true,
  description: 'OpenGL Utility Library (GLU)')

