--- /dev/null
+ifneq ($(filter 4.%,$(shell gcc -dumpversion)),)
+ GCC4=1
+endif
+
+LDFLAGS += -Wl,--warn-common
+
+CFLAGS := -g
+
+# Use pipes and not temp files.
+CFLAGS += -pipe
+# optimize even more
+CFLAGS += -O2
+# let the type char be unsigned by default
+CFLAGS += -funsigned-char
+CFLAGS += -fstrict-aliasing
+# turn on all common warnings
+CFLAGS += -Wall
+# turn on extra warnings
+CFLAGS += $(if $(GCC4),-Wextra,-W)
+# treat warnings as errors
+#CFLAGS += -Werror
+CFLAGS += -Wchar-subscripts
+# warn about undefined preprocessor identifiers
+CFLAGS += -Wundef
+# warn about local variable shadowing another local variable
+CFLAGS += -Wshadow
+# warn about casting of pointers to increased alignment requirements
+CFLAGS += -Wcast-align
+# make string constants const
+CFLAGS += -Wwrite-strings
+# warn about implicit conversions with side effects
+# fgets, calloc and friends take an int, not size_t...
+#CFLAGS += -Wconversion
+# warn about comparisons between signed and unsigned values
+CFLAGS += -Wsign-compare
+# warn about unused declared stuff
+CFLAGS += -Wunused
+# warn about variable use before initialization
+CFLAGS += -Wuninitialized
+# warn about variables which are initialized with themselves
+CFLAGS += -Winit-self
+# warn about pointer arithmetic on void* and function pointers
+CFLAGS += -Wpointer-arith
+# warn about multiple declarations
+CFLAGS += -Wredundant-decls
+# warn if the format string is not a string literal
+#CFLAGS += -Wformat-nonliteral
+# do not warn about zero-length formats.
+CFLAGS += -Wno-format-zero-length
+# missing prototypes
+CFLAGS += -Wmissing-prototypes
+# warn about functions without format attribute that should have one
+CFLAGS += -Wmissing-format-attribute
+