1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
cmake_minimum_required (VERSION 3.5)
# generate nlopt.hpp from nlopt-in.hpp
file (WRITE ${CMAKE_CURRENT_BINARY_DIR}/nlopt.hpp "")
file (STRINGS ${API_SOURCE_DIR}/nlopt-in.hpp NLOPT_HPP_LINES)
foreach (NLOPT_HPP_LINE ${NLOPT_HPP_LINES})
list(LENGTH NLOPT_HPP_LINE line_len)
# handling trailing backlashes in "file (STRINGS" is a little tricky
if (line_len VERSION_LESS 8)
file (APPEND ${CMAKE_CURRENT_BINARY_DIR}/nlopt.hpp "${NLOPT_HPP_LINE}\n")
else ()
set (prev_inst FALSE)
foreach(NLOPT_HPP_SUBLINE ${NLOPT_HPP_LINE})
# test is we need to add the eaten semicolon
if (NLOPT_HPP_SUBLINE MATCHES "\\)$" OR NLOPT_HPP_SUBLINE MATCHES "return")
set (new_inst TRUE)
else ()
set (new_inst FALSE)
endif ()
if (NOT prev_inst)
file (APPEND ${CMAKE_CURRENT_BINARY_DIR}/nlopt.hpp "${NLOPT_HPP_SUBLINE}")
if (new_inst)
file (APPEND ${CMAKE_CURRENT_BINARY_DIR}/nlopt.hpp ";")
endif ()
list (FIND NLOPT_HPP_LINE "${NLOPT_HPP_SUBLINE}" index)
math (EXPR index "${index} + 1")
list (LENGTH NLOPT_HPP_LINE total)
if (NOT index STREQUAL total)
file (APPEND ${CMAKE_CURRENT_BINARY_DIR}/nlopt.hpp " \\")
endif ()
file (APPEND ${CMAKE_CURRENT_BINARY_DIR}/nlopt.hpp "\n")
endif ()
set (prev_inst ${new_inst})
endforeach ()
endif ()
if (NLOPT_HPP_LINE MATCHES "GEN_ENUMS_HERE")
file (APPEND ${CMAKE_CURRENT_BINARY_DIR}/nlopt.hpp " enum algorithm {\n")
file (STRINGS ${API_SOURCE_DIR}/nlopt.h NLOPT_H_LINES REGEX " NLOPT_[A-Z0-9_]+")
foreach (NLOPT_H_LINE ${NLOPT_H_LINES})
string (REGEX REPLACE "NLOPT_" "" ENUM_LINE ${NLOPT_H_LINE})
file (APPEND ${CMAKE_CURRENT_BINARY_DIR}/nlopt.hpp "${ENUM_LINE}\n")
if (NLOPT_H_LINE MATCHES "NLOPT_NUM_ALGORITHMS")
file (APPEND ${CMAKE_CURRENT_BINARY_DIR}/nlopt.hpp " };\n enum result {\n")
elseif (NLOPT_H_LINE MATCHES "NLOPT_NUM_RESULTS")
file (APPEND ${CMAKE_CURRENT_BINARY_DIR}/nlopt.hpp " };\n")
endif ()
endforeach ()
endif ()
endforeach ()
|