www.delorie.com/gnu/docs/diffutils/diff_36.html   search  
Buy GNU books!

Comparing and Merging Files

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.6 Merging Files with If-then-else

You can use diff to merge two files of C source code. The output of diff in this format contains all the lines of both files. Lines common to both files are output just once; the differing parts are separated by the C preprocessor directives #ifdef name or #ifndef name, #else, and #endif. When compiling the output, you select which version to use by either defining or leaving undefined the macro name.

To merge two files, use diff with the `-D name' or `--ifdef=name' option. The argument name is the C preprocessor identifier to use in the #ifdef and #ifndef directives.

For example, if you change an instance of wait (&s) to waitpid (-1, &s, 0) and then merge the old and new files with the `--ifdef=HAVE_WAITPID' option, then the affected part of your code might look like this:

    do {
        if ((w = wait (&s)) < 0  &&  errno != EINTR)
#else /* HAVE_WAITPID */
        if ((w = waitpid (-1, &s, 0)) < 0  &&  errno != EINTR)
#endif /* HAVE_WAITPID */
            return w;
    } while (w != child);

You can specify formats for languages other than C by using line group formats and line formats, as described in the next sections.

2.6.1 Line Group Formats  Formats for general if-then-else line groups.
2.6.2 Line Formats  Formats for each line in a line group.
2.6.3 Detailed Description of If-then-else Format  A detailed description of if-then-else format.
2.6.4 An Example of If-then-else Format  Sample if-then-else format output.

  webmaster   donations   bookstore     delorie software   privacy  
  Copyright 2003   by The Free Software Foundation     Updated Jun 2003