mirror of
				https://github.com/panda3d/panda3d.git
				synced 2025-11-03 20:13:57 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			76 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
# Filename: AddFlexTarget.cmake
 | 
						|
# Description: This file defines the function add_flex_target which instructs
 | 
						|
#   cmake to use flex on an input .lxx file.  If flex is not available on
 | 
						|
#   the system, add_flex_target tries to use .prebuilt .cxx files instead.
 | 
						|
#
 | 
						|
# Usage:
 | 
						|
#   add_flex_target(output_cxx input_lxx [DEFINES output_h] [PREFIX prefix])
 | 
						|
#
 | 
						|
 | 
						|
# Define add_flex_target()
 | 
						|
function(add_flex_target output_cxx input_lxx)
 | 
						|
  set(arguments "")
 | 
						|
  set(outputs "${output_cxx}")
 | 
						|
  set(keyword "")
 | 
						|
 | 
						|
  # Parse the extra arguments to the function.
 | 
						|
  foreach(arg ${ARGN})
 | 
						|
    if(arg STREQUAL "DEFINES")
 | 
						|
      set(keyword "DEFINES")
 | 
						|
    elseif(arg STREQUAL "PREFIX")
 | 
						|
      set(keyword "PREFIX")
 | 
						|
    elseif(arg STREQUAL "CASE_INSENSITIVE")
 | 
						|
      set(arguments ${arguments} -i)
 | 
						|
 | 
						|
    elseif(keyword STREQUAL "PREFIX")
 | 
						|
      set(arguments ${arguments} -P "${arg}")
 | 
						|
    elseif(keyword STREQUAL "DEFINES")
 | 
						|
      set(arguments ${arguments} --header-file="${arg}")
 | 
						|
      list(APPEND outputs "${arg}")
 | 
						|
 | 
						|
    else()
 | 
						|
      message(SEND_ERROR "Unexpected argument ${arg} to add_flex_target")
 | 
						|
    endif()
 | 
						|
  endforeach()
 | 
						|
 | 
						|
  if(keyword STREQUAL arg AND NOT keyword STREQUAL "")
 | 
						|
    message(SEND_ERROR "Expected argument after ${keyword}")
 | 
						|
  endif()
 | 
						|
 | 
						|
  if(HAVE_FLEX)
 | 
						|
    get_source_file_property(input_lxx "${input_lxx}" LOCATION)
 | 
						|
 | 
						|
    # If we have flex, we can of course just run it.
 | 
						|
    add_custom_command(
 | 
						|
      OUTPUT ${outputs}
 | 
						|
      COMMAND ${FLEX_EXECUTABLE}
 | 
						|
        -o "${output_cxx}" ${arguments}
 | 
						|
        "${input_lxx}"
 | 
						|
      MAIN_DEPENDENCY "${input_lxx}"
 | 
						|
    )
 | 
						|
 | 
						|
  else()
 | 
						|
    # Look for prebuilt versions of the outputs.
 | 
						|
    set(commands "")
 | 
						|
    set(depends "")
 | 
						|
 | 
						|
    foreach(output ${outputs})
 | 
						|
      set(prebuilt_file "${output}.prebuilt")
 | 
						|
      get_filename_component(prebuilt_file "${prebuilt_file}" ABSOLUTE)
 | 
						|
 | 
						|
      if(NOT EXISTS "${prebuilt_file}")
 | 
						|
        message(SEND_ERROR "Flex was not found and ${prebuilt_file} does not exist!")
 | 
						|
      endif()
 | 
						|
 | 
						|
      list(APPEND depends "${prebuilt_file}")
 | 
						|
      set(commands ${commands} COMMAND ${CMAKE_COMMAND} -E copy ${prebuilt_file} ${output})
 | 
						|
    endforeach()
 | 
						|
 | 
						|
    add_custom_command(
 | 
						|
      OUTPUT ${outputs}
 | 
						|
      ${commands}
 | 
						|
      DEPENDS ${depends}
 | 
						|
    )
 | 
						|
  endif()
 | 
						|
endfunction(add_flex_target)
 |