//---------------------------------------------------------------------------// // vim: ft=c ts=4 sw=4 et //---------------------------------------------------------------------------// // // Copyright (C) 2010, 2012 The University of Melbourne. // This file may only be copied under the terms of the GNU General // Public License - see the file COPYING in the Mercury distribution. // // File: mfiltercc.c // Author: wangp. // // This is a last ditch effort to filter out warning messages from the // C compiler that we cannot (yet) figure out how to silence in a better way. // // This program must *not* #include any of the header files in the runtime // directory. // //---------------------------------------------------------------------------// #include #include #define MAX_LINE_LENGTH 2000 static int drop_line(const char *line); int main(void) { char buf[MAX_LINE_LENGTH]; size_t len; int c; do { len = 0; c = getchar(); while (c != EOF) { buf[len++] = (char) c; if (c == '\n' || len >= sizeof(buf) - 1) { break; } c = getchar(); } if (len > 0) { buf[len] = '\0'; if (!drop_line(buf)) { printf("%s", buf); } } } while (c != EOF); return 0; } static int drop_line(const char *line) { // gcc 4.x produces the message (in English locales, with varying quotes): // foo.c:42: warning: 'mercury__foo__...' used but never defined // // gcc 4.6 onwards also add " [enabled by default]" const char *p; p = strstr(line, "mercury__"); if (p == NULL) { return 0; } return strstr(p, " used but never defined") != NULL; } //---------------------------------------------------------------------------//