| #CMAKE_ARGV0 = /path/to/cmake |
| #CMAKE_ARGV1 = -P |
| #CMAKE_ARGV2 = path/to/this/file |
| #CMAKE_ARGV3 = linker |
| #CMAKE_ARGV4 = output-name |
| #CMAKE_ARGV5...CMAKE_AGVN = OBJECTS |
| #CMAKE_ARGVN+1 = LIBS |
| #CMAKE_ARGVN+2...CMAKE_ARGVM libraries |
| |
| if(NOT CMAKE_ARGV3) |
| message(FATAL_ERROR "linker not set") |
| endif(NOT CMAKE_ARGV3) |
| |
| set(REACHED_LIBS FALSE) |
| set(REACHED_OBJ FALSE) |
| foreach(arg RANGE 5 ${CMAKE_ARGC}) |
| if(CMAKE_ARGV${arg} STREQUAL LIBS) |
| set(REACHED_LIBS TRUE) |
| set(REACHED_OBJ FALSE) |
| continue() |
| endif(CMAKE_ARGV${arg} STREQUAL LIBS) |
| |
| if(CMAKE_ARGV${arg} STREQUAL OBJ) |
| set(REACHED_LIBS FALSE) |
| set(REACHED_OBJ TRUE) |
| continue() |
| endif(CMAKE_ARGV${arg} STREQUAL OBJ) |
| |
| if(CMAKE_ARGC EQUAL arg) |
| continue() |
| endif(CMAKE_ARGC EQUAL arg) |
| |
| if(REACHED_LIBS) |
| list(APPEND LIBS "${CMAKE_ARGV${arg}}") |
| elseif(REACHED_OBJ AND NOT ALI) |
| string(REPLACE ".o" ".ali" ALI "${CMAKE_ARGV${arg}}") |
| else(REACHED_LIBS) |
| string(SUBSTRING "${CMAKE_ARGV${arg}}" 0 3 start) |
| |
| if(NOT start STREQUAL -aO) |
| list(APPEND FLAGS "${CMAKE_ARGV${arg}}") |
| endif(NOT start STREQUAL -aO) |
| endif(REACHED_LIBS) |
| endforeach(arg RANGE 5 ${CMAKE_ARGC}) |
| |
| execute_process(COMMAND ${CMAKE_ARGV3} link ${ALI} -o ${CMAKE_ARGV4} ${FLAGS} ${OTHER_OBJECTS} ${LIBS} |
| RESULT_VARIABLE RESULT |
| OUTPUT_VARIABLE dont_care |
| ERROR_VARIABLE ERROR) |
| |
| if(RESULT) |
| message(FATAL_ERROR ${RESULT} ${ERROR}) |
| endif(RESULT) |