# install man if (UNIX) install (FILES nlopt.3 nlopt_minimize.3 nlopt_minimize_constrained.3 DESTINATION ${INSTALL_MAN_DIR}/man3) endif () # generate nlopt.f from nlopt.h enums if (NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/nlopt.f) file (WRITE ${CMAKE_CURRENT_BINARY_DIR}/nlopt.f "") file (STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/nlopt.h NLOPT_H_LINES REGEX " NLOPT_[A-Z0-9_]+") set (i 0) foreach (NLOPT_H_LINE ${NLOPT_H_LINES}) if (NOT NLOPT_H_LINE MATCHES "NLOPT_NUM_") string (REGEX REPLACE ".*NLOPT_([A-Z0-9_]+).*" "\\1" ENUM_STRING ${NLOPT_H_LINE}) string (REGEX REPLACE ".*NLOPT_[A-Z0-9_]+ = (-?[0-9]+).*" "\\1" ENUM_VAL ${NLOPT_H_LINE}) if (ENUM_VAL MATCHES "^-?[0-9]+$") set (i ${ENUM_VAL}) endif () set (ENUM_LINE " integer NLOPT_${ENUM_STRING}\n parameter (NLOPT_${ENUM_STRING}=${i})\n") file (APPEND ${CMAKE_CURRENT_BINARY_DIR}/nlopt.f "${ENUM_LINE}") # https://public.kitware.com/Bug/print_bug_page.php?bug_id=8996 if (i MATCHES "^-") math (EXPR i "1 ${i}") else () math (EXPR i "${i} + 1") endif () endif () endforeach () endif () # generate nlopt.hpp from nlopt-in.hpp if (NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/nlopt.hpp) file (WRITE ${CMAKE_CURRENT_BINARY_DIR}/nlopt.hpp "") file (STRINGS ${CMAKE_CURRENT_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 ${CMAKE_CURRENT_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_MAXTIME_REACHED") file (APPEND ${CMAKE_CURRENT_BINARY_DIR}/nlopt.hpp " };\n") endif () endforeach () endif () endforeach () endif ()