123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- #! /usr/bin/env awk
- #
- # Create reference tags and WIN32 initialization functions for tags.
- #
- # --------------------------------------------------------------------
- #
- # This file is part of the Sofia-SIP package
- #
- # Copyright (C) 2005 Nokia Corporation.
- #
- # Contact: Pekka Pessi <pekka.pessi@nokia.com>
- #
- # This library is free software; you can redistribute it and/or
- # modify it under the terms of the GNU Lesser General Public License
- # as published by the Free Software Foundation; either version 2.1 of
- # the License, or (at your option) any later version.
- #
- # This library is distributed in the hope that it will be useful, but
- # WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- # Lesser General Public License for more details.
- #
- # You should have received a copy of the GNU Lesser General Public
- # License along with this library; if not, write to the Free Software
- # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- # 02110-1301 USA
- #
- # --------------------------------------------------------------------
- #
- # Author: Pekka Pessi <Pekka.Pessi@nokia.com>
- #
- # Created: Tue Feb 26 14:11:25 2002 ppessi
- #
- BEGIN {
- DEFS = 0;
- HEADER = 1;
- }
- HEADER {
- HEADER = 0;
- if (OUTNAME != "") {
- fn = OUTNAME;
- } else {
- fn = FILENAME;
- }
- if (REF == "") {
- REF = fn;
- sub(/[.]c(at)?/, "_ref.c", REF);
- }
- if (NODLL) DLL = "/dev/null";
- if (DLL == "") {
- DLL = fn;
- sub(/[.]c(at)?/, "_dll.c", DLL);
- }
- base = fn;
- sub(/.*\//, "", base);
- printf("#ifdef _WIN32\n"\
- "/*\n" \
- " * PLEASE NOTE: \n" \
- " * \n" \
- " * This file is automatically generated by tag_dll.awk.\n"\
- " * It contains magic required by Win32 DLLs to initialize\n"\
- " * tag_typedef_t variables.\n"\
- " * \n"\
- " * Do not, repeat, do not edit this file. Edit '%s' instead.\n"\
- " * \n"\
- " */\n\n"\
- "#define EXPORT __declspec(dllexport)\n\n", base) > DLL;
- if (DLLREF) {
- print \
- "#include \"config.h\"\n\n" \
- "#include <sofia-sip/su_tag_class.h>\n\n" > DLL;
- }
- printf("/*\n" \
- " * PLEASE NOTE: \n" \
- " * \n" \
- " * This file is automatically generated by tag_dll.awk.\n"\
- " * It contains tag_typedef_t for tag references.\n"\
- " * \n"\
- " * Do not, repeat, do not edit this file. Edit '%s' instead.\n"\
- " * \n"\
- " */\n\n"\
- "#include \"config.h\"\n\n"\
- "#include <sofia-sip/su_tag_class.h>\n"\
- "\n"\
- "#if defined _WIN32 || defined HAVE_OPEN_C\n"\
- "#define EXPORT __declspec(dllexport)\n"\
- "#else\n"\
- "#define EXPORT\n"\
- "#endif\n\n",
- base) > REF;
- if (LIST) {
- print "#include <stddef.h>" >REF;
- }
- print "" > REF;
- }
- /^#define TAG_NAMESPACE/ {
- print "#undef TAG_NAMESPACE" > REF;
- print $0 > REF;
- print "" > REF;
- print "#undef TAG_NAMESPACE" > DLL;
- print $0 > DLL;
- print "" > DLL;
- }
- /SU_HAVE_EXPERIMENTAL/ {
- print $0 > REF;
- print $0 > DLL;
- }
- !DEFS && /^tag_typedef_t/ { DEFS = 1; }
- DEFS && /tag_typedef_t/ {
- tag = $2;
- typedefs[tag] = $0;
- if ($0 !~ /NSTAG_TYPEDEF/) {
- print "extern tag_typedef_t "tag";" > REF;
- print "EXPORT tag_typedef_t "tag"_ref;" > DLL;
- print "EXPORT tag_typedef_t "tag"_ref = \n REFTAG_TYPEDEF("tag");" > REF;
- }
- gsub(/ = .*$/, ";");
- }
- !DLLREF { print $0 > DLL; }
- END {
- if (LIST) {
- print "\nEXPORT tag_type_t " LIST "[] =\n{" > REF;
- print "\nEXPORT tag_type_t " LIST "[] =\n{" > DLL;
- for (tag in typedefs) {
- if (typedefs[tag] !~ /NSTAG_TYPEDEF/) {
- print " " tag "," > REF;
- print " " tag "," > DLL;
- }
- }
- print " NULL\n};" > REF;
- print " NULL\n};" > DLL;
- }
- printf("\n" \
- "#include <windows.h>\n"\
- "\n"\
- "BOOL WINAPI DllMain(HINSTANCE hInst, DWORD fwdReason, LPVOID fImpLoad)\n"\
- "{\n") > DLL;
- for (tag in typedefs) {
- def = typedefs[tag];
- if (!DLLREF) {
- sub(/^tag_typedef_t /, " tag_typedef_t _", def);
- print def > DLL;
- }
- else {
- print " extern tag_typedef_t "tag";" > DLL;
- }
- print " tag_typedef_t _"tag"_ref =\n REFTAG_TYPEDEF("tag");" > DLL;
- }
- print "" > DLL;
- for (tag in typedefs) {
- if (!DLLREF) {
- print " *(struct tag_type_s *)" tag " = *_" tag ";" > DLL;
- }
- print " *(struct tag_type_s *)" tag "_ref = *_" tag "_ref;" > DLL;
- }
- print "\n return TRUE;" > DLL;
- print "}" > DLL;
- print "\n#endif" > DLL;
- }
|