# Sanitize and copy uclibc headers
(
-# We must cd, or else we'll prepend "${srcdir}" to filenames!
+# We must cd, or else we will prepend "${srcdir}" to filenames!
cd "${srcdir}" || exit 1
find . ! -name '.' -a ! -path '*/.*' | sed -e 's/^\.\///' -e '/^config\//d' \
-e '/^config$/d'
# Do not install libc-XXXX.h files
continue
fi
- # NB: unifdef exits with 1 if output is not
- # exactly the same as input. That's ok.
# Do not abort the script if unifdef "fails"!
# NB2: careful with sed command arguments, they contain tab character
"$top_builddir/extra/scripts/unifdef" \
-B \
-t \
+ -x 2 \
-f "$top_builddir/include/generated/unifdef_config.h" \
-U_LIBC \
-U__UCLIBC_GEN_LOCALE \
/*
- * Copyright (c) 2002 - 2013 Tony Finch <dot@dotat.at>
+ * Copyright (c) 2002 - 2014 Tony Finch <dot@dotat.at>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
static int exitmode; /* exit status mode */
static int exitstat; /* program exit status */
+static bool altered; /* was this file modified? */
static void addsym1(bool, bool, char *);
static void addsym2(bool, const char *, const char *);
err(2, "can't rename \"%s\" to \"%s\"", ofn, backname);
free(backname);
}
- if (replace(tempname, ofn) < 0)
+ /* leave file unmodified if unifdef made no changes */
+ if (!altered && backext == NULL) {
+ if (remove(tempname) < 0)
+ warn("can't remove \"%s\"", tempname);
+ } else if (replace(tempname, ofn) < 0)
err(2, "can't rename \"%s\" to \"%s\"", tempname, ofn);
free(tempname);
tempname = NULL;
{
snprintf(keyword, tline + sizeof(tline) - keyword,
"%s%s", replacement, newline);
+ altered = true;
print();
}
static void
} else {
if (lnblank && fputs(newline, output) == EOF)
closeio();
- exitstat = 1;
+ altered = true;
delcount += 1;
blankcount = 0;
}
zerosyms = true;
newline = NULL;
linenum = 0;
+ altered = false;
while (lineval != LT_EOF) {
lineval = parseline();
trans_table[ifstate[depth]][lineval]();
linenum, linetype_name[lineval],
ifstate_name[ifstate[depth]], depth);
}
+ exitstat |= altered;
}
/*
{
const char *cp;
- if (linestate == LS_START) {
- linenum++;
- if (fgets(tline, MAXLINE, input) == NULL) {
- if (ferror(input))
- err(2, "can't read %s", filename);
- else
- return (NULL);
- }
+ linenum++;
+ if (fgets(tline, MAXLINE, input) == NULL) {
+ if (ferror(input))
+ err(2, "can't read %s", filename);
+ else
+ return (NULL);
}
cp = skipcomment(tline);
if (linestate == LS_START && *cp == '#') {
static const char *
skipline(const char *cp)
{
- linestate = LS_DIRTY;
+ if (*cp != '\0')
+ linestate = LS_DIRTY;
while (*cp != '\0')
cp = skipcomment(cp + 1);
return (cp);
/* Avoid err.h since this are non-standard BSD extensions */
#define vwarnx(fmt, args) ({ fprintf(stderr, "unifdef: "); vfprintf(stderr, fmt, args); fprintf(stderr, "\n"); })
#define warnx(fmt, args...) fprintf(stderr, "unifdef: " fmt "\n", ## args)
+#define warn(fmt, args...) warnx(fmt ": %s", ## args, strerror(errno))
#define errx(exit_code, fmt, args...) ({ warnx(fmt, ## args); exit(exit_code); })
#define err(exit_code, fmt, args...) errx(exit_code, fmt ": %s", ## args, strerror(errno))