| Elliott Hughes | 0128fe4 | 2018-02-27 14:57:55 -0800 | [diff] [blame] | 1 | #!/usr/bin/env perl |
| Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 2 | #*************************************************************************** |
| 3 | # _ _ ____ _ |
| 4 | # Project ___| | | | _ \| | |
| 5 | # / __| | | | |_) | | |
| 6 | # | (__| |_| | _ <| |___ |
| 7 | # \___|\___/|_| \_\_____| |
| 8 | # |
| 9 | # Copyright (C) 2011, Daniel Stenberg, <daniel@haxx.se>, et al. |
| 10 | # |
| 11 | # This software is licensed as described in the file COPYING, which |
| 12 | # you should have received as part of this distribution. The terms |
| Alex Deymo | 8f1a214 | 2016-06-28 14:49:26 -0700 | [diff] [blame] | 13 | # are also available at https://curl.haxx.se/docs/copyright.html. |
| Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 14 | # |
| 15 | # You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| 16 | # copies of the Software, and permit persons to whom the Software is |
| 17 | # furnished to do so, under the terms of the COPYING file. |
| 18 | # |
| 19 | # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| 20 | # KIND, either express or implied. |
| 21 | # |
| 22 | ########################################################################### |
| 23 | # |
| 24 | # Experience has shown that the symbols-in-versions file is very useful to |
| 25 | # applications that want to build with a wide range of libcurl versions. |
| 26 | # It is however easy to get it wrong and the source gets a bit messy with all |
| 27 | # the fixed numerical comparisons. |
| 28 | # |
| 29 | # The point of this script is to provide an easy-to-use macro for libcurl- |
| 30 | # using applications to do preprocessor checks for specific libcurl defines, |
| 31 | # and yet make the code clearly show what the macro is used for. |
| 32 | # |
| 33 | # Run this script and generate libcurl-symbols.h and then use that header in |
| 34 | # a fashion similar to: |
| 35 | # |
| 36 | # #include "libcurl-symbols.h" |
| 37 | # |
| 38 | # #if LIBCURL_HAS(CURLOPT_MUTE) |
| 39 | # has mute |
| 40 | # #else |
| 41 | # no mute |
| 42 | # #endif |
| 43 | # |
| 44 | # |
| 45 | open F, "<symbols-in-versions"; |
| 46 | |
| 47 | sub str2num { |
| 48 | my ($str)=@_; |
| 49 | if($str =~ /([0-9]*)\.([0-9]*)\.*([0-9]*)/) { |
| 50 | return sprintf("0x%06x", $1<<16 | $2 << 8 | $3); |
| 51 | } |
| 52 | } |
| 53 | |
| 54 | print <<EOS |
| 55 | |
| 56 | #include <curl/curl.h> |
| 57 | |
| 58 | #define LIBCURL_HAS(x) \\ |
| 59 | (defined(x ## _FIRST) && (x ## _FIRST <= LIBCURL_VERSION_NUM) && \\ |
| 60 | (!defined(x ## _LAST) || ( x ## _LAST >= LIBCURL_VERSION_NUM))) |
| 61 | |
| 62 | EOS |
| 63 | ; |
| 64 | |
| 65 | while(<F>) { |
| 66 | if(/^(CURL[^ ]*)[ \t]*(.*)/) { |
| 67 | my ($sym, $vers)=($1, $2); |
| 68 | |
| 69 | my $intr; |
| 70 | my $rm; |
| 71 | my $dep; |
| 72 | |
| 73 | # is there removed info? |
| 74 | if($vers =~ /([\d.]+)[ \t-]+([\d.-]+)[ \t]+([\d.]+)/) { |
| 75 | ($intr, $dep, $rm)=($1, $2, $3); |
| 76 | } |
| 77 | # is it a dep-only line? |
| 78 | elsif($vers =~ /([\d.]+)[ \t-]+([\d.]+)/) { |
| 79 | ($intr, $dep)=($1, $2); |
| 80 | } |
| 81 | else { |
| 82 | $intr = $vers; |
| 83 | } |
| 84 | |
| 85 | my $inum = str2num($intr); |
| 86 | |
| 87 | print <<EOS |
| 88 | #define ${sym}_FIRST $inum /* Added in $intr */ |
| 89 | EOS |
| 90 | ; |
| 91 | my $irm = str2num($rm); |
| 92 | if($rm) { |
| 93 | print <<EOS |
| 94 | #define ${sym}_LAST $irm /* Last featured in $rm */ |
| 95 | EOS |
| 96 | ; |
| 97 | } |
| 98 | |
| 99 | } |
| 100 | } |