| # =================================================================== |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| # =================================================================== |
| |
| # Generate a Windows DLL .def file from a list of headers. |
| function(SerfWindowsGenDef blacklist_ target_) |
| if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") |
| set(W "[a-zA-Z_0-9]") # Word characters pattern |
| set(base_func_rx_ "^((${W}+|\\*) )+\\*?(serf_[a-z]${W}*)\\(") |
| set(base_type_rx_ "^extern const serf_bucket_type_t (serf_[a-z_]*)") |
| set(func_search_rx_ "${base_func_rx_}") |
| set(type_search_rx_ "${base_type_rx_};") |
| set(func_name_rx_ "${base_func_rx_}.*$") |
| set(type_name_rx_ "${base_type_rx_}.*$") |
| |
| foreach(file_ ${ARGN}) |
| message(STATUS "Looking for exports in ${file_}") |
| file(STRINGS ${file_} funcs_ REGEX "${func_search_rx_}") |
| file(STRINGS ${file_} types_ REGEX "${type_search_rx_}") |
| foreach(sym_ ${funcs_}) |
| string(REGEX REPLACE "${func_name_rx_}" "\\3" def_ ${sym_}) |
| list(APPEND defs_ ${def_}) |
| endforeach() |
| foreach(sym_ ${types_}) |
| string(REGEX REPLACE "${type_name_rx_}" "\\1" def_ ${sym_}) |
| list(APPEND defs_ ${def_}) |
| endforeach() |
| endforeach() |
| |
| list(SORT defs_) |
| list(REMOVE_DUPLICATES defs_) |
| file(WRITE ${target_} "EXPORTS\n") |
| foreach(def_ ${defs_}) |
| list(FIND blacklist_ "${def_}" skip_) |
| if(skip_ LESS 0) |
| file(APPEND ${target_} "${def_}\n") |
| endif() |
| endforeach() |
| endif() |
| endfunction(SerfWindowsGenDef) |