2 # run the configure script for a native Windows build
4 if [ -f ../configure.in ]; then
5 # we're in the windows directory, so we need to go up a level
9 if [ ! -f configure ]; then
16 ####### configure options:
17 # --help Show configure options and a short description
19 # --host=i686-w64-mingw32 Use the mingw cross-compiler to build a 'native' windows binary
20 # --enable-mingw32 Use mingw32 for a Windows GUI
21 # --enable-static-linking Use static linking instead of dynamic linking (and not have
22 # to put all the .DLLs in the path or the same dir as Privoxy)
23 # --disable-pcre2 Don't try to use the pcre2 library even if it's available
24 # --disable-pthread Use native threads instead of POSIX pthreads library
25 # --disable-dynamic-pcre Use the built-in, static pcre, even if libpcre is available
26 # --with-docbook=yes Enable docbook documentation creation
30 # note: configure.in line 155
31 # if test "X$CFLAGS" = "X "; then # if CFLAGS were unset (see above)
32 # In other words, if you set CFLAGS you need to include -O2 if you want optimization
33 # assume I'll set cflags below, so set O2 now
36 # start with initially empty flags
39 # start with initially empty flags
42 CFLAGS="${CFLAGS} -fdiagnostics-color=always"
43 # Have gcc diagnostics be in color even if stderr is not going to a terminal.
44 # It's nice having warnings in color even if I run a script that does
45 # 'make 2>&1 | tee log.make'
47 CFLAGS="${CFLAGS} -fstack-protector-strong -D_FORTIFY_SOURCE=2"
48 LDFLAGS="${LDFLAGS} -fstack-protector-strong"
49 # -fstack-protector-strong: enable stack checking.
50 # NOTE: need to specify when compiling _and_ linking
51 # stack-protector-strong: better balance between security and performance.
52 # This flag protects more kinds of vulnerable functions than -fstack-protector does,
53 # but not every function, providing better performance than -fstack-protector-all.
54 # see : https://en.wikipedia.org/wiki/Buffer_overflow_protection
55 # NOTE: needs static linking or the following in the path:
56 # /usr/i686-w64-mingw32/sys-root/mingw/bin/libssp-0.dll
58 # -D_FORTIFY_SOURCE: detect some buffer overflow errors
59 # ***>> requires compiler optimization level 1 or above <<***
60 # see : https://gcc.gnu.org/legacy-ml/gcc-patches/2004-09/msg02055.html
61 # The difference between -D_FORTIFY_SOURCE=1 and -D_FORTIFY_SOURCE=2 is e.g. for
62 # struct S { struct T { char buf[5]; int x; } t; char buf[20]; } var;
63 # With -D_FORTIFY_SOURCE=1,
64 # strcpy (&var.t.buf[1], "abcdefg");
65 # is not considered an overflow (object is whole VAR), while with -D_FORTIFY_SOURCE=2
66 # strcpy (&var.t.buf[1], "abcdefg");
67 # will be considered a buffer overflow.
69 ### CFLAGS="${CFLAGS} -march=native"
71 # Generate instructions for the machine type cpu-type. In contrast to -mtune=cpu-type, which merely tunes the
72 # generated code for the specified cpu-type, -march=cpu-type allows GCC to generate code that may not run at all on
73 # processors other than the one indicated.
74 # Specifying -march=cpu-type implies -mtune=cpu-type.
77 # This selects the CPU to generate code for at compilation time by determining the processor type of the compiling
78 # machine. Using -march=native enables all instruction subsets supported by the local machine (hence the result
79 # might not run on different machines). Using -mtune=native produces code optimized for the local machine under
80 # the constraints of the selected instruction set.
82 LDFLAGS="${LDFLAGS} -Wl,--nxcompat"
83 # https://en.wikipedia.org/wiki/Data_Execution_Prevention
84 # Enable DEP with -Wl,--nxcompat
85 # also called NX or nxcompat for "no execute" see: https://en.wikipedia.org/wiki/NX_bit
86 # $ peflags -v privoxy.exe
87 # privoxy.exe: coff(0x0106[+executable_image,+line_nums_stripped,+32bit_machine]) pe(0x0140[+dynamicbase,+nxcompat])
89 LDFLAGS="${LDFLAGS} -Wl,--dynamicbase,--export-all-symbols"
90 # https://en.wikipedia.org/wiki/Address_space_layout_randomization
91 # https://stackoverflow.com/questions/24283918/how-can-i-enable-aslr-dep-and-safeseh-on-an-exe-in-codeblocks-using-mingw
92 # ASLR with gcc has a problem: -Wl,--dynamicbase doesn't emit the necessary relocation table.
93 # As a workaround, you can pass -Wl,--dynamicbase,--export-all-symbols
94 # NOTE: you can't have both this and profiling (cflags='-pg') enabled!
96 CFLAGS="${CFLAGS} -Wall"
97 # see: http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
98 # -Wall doesn't actually turn on all warnings, so add -Wextra
99 # but then plenty too many complaints by
100 # -Wmissing-field-initializers
103 # -Wunused-but-set-parameter
104 # -Wunused-but-set-variable
105 CFLAGS="${CFLAGS} -Wextra -Wno-missing-field-initializers -Wno-sign-compare -Wno-type-limits"
106 CFLAGS="${CFLAGS} -Wno-unused-parameter -Wno-unused-but-set-variable"
108 #-no-# CFLAGS="${CFLAGS} -Wconversion"
109 # way too many warnings for things that don't look like a problem
111 #-no-# CFLAGS="${CFLAGS} -Werror"
112 # Turn all warnings into errors.
113 # Privoxy still has a few warnings that are not a problem
115 CFLAGS="${CFLAGS} -Wformat=2"
116 # -Wformat is enabled by -Wall.
117 # -Wformat=2 is equivalent to -Wformat -Wformat-nonliteral -Wformat-security -Wformat-y2k
118 # -Wformat-security : also warn about uses of format functions that represent possible security problems.
120 CFLAGS="${CFLAGS} -Wlogical-op"
121 # Warn about suspicious uses of logical operators in expressions.
123 CFLAGS="${CFLAGS} -Wshadow"
124 # Warn whenever a local variable or type declaration shadows
125 # another variable or whenever a built-in function is shadowed.
127 #-no-# CFLAGS="${CFLAGS} -Wwrite-strings"
128 # These warnings help you find at compile time code that can try to write
129 # into a string constant, but only if you have been very careful about
130 # using const in declarations and prototypes.
131 # >>> Otherwise, it is just a nuisance. <<< -- this, very much this
133 # why does the mingw library _not_ include .a files for libpcre?
134 # *sigh* build my own pcre so I can do static linking
135 # Get the 8.x PCRE library from
136 # https://sourceforge.net/projects/pcre/files/pcre/
137 # Get the 10.x PCRE2 library from
138 # https://github.com/PCRE2Project/pcre2/releases
144 if [ "$usepcre2" = "yes" ]; then
146 inc="/source/pcre2-10.42/src/"
148 lib="/source/pcre2-10.42/.libs"
149 # need libpcre2-8.a & libpcre2-posix.a
151 PCREOPT="--disable-pcre2"
152 inc="/source/pcre-8.45/"
153 lib="/source/pcre-8.45/.libs"
155 CPPFLAGS="${CPPFLAGS} -I${inc}"
156 LDFLAGS="${LDFLAGS} -L${lib}"
159 ## https://github.com/Mbed-TLS/mbedtls/releases/tag/v2.16.12
160 ## This is the last release of the 2.16 long-time support branch.
161 ## Users who want a long-time branch should move to mbedtls-2.28,
162 ## which is backward-compatible and will be supported for at least
164 # Get the 2.28.x mbedtls library from https://github.com/Mbed-TLS/mbedtls/tags
165 # Release Notes: https://github.com/Mbed-TLS/mbedtls/releases/tag/v2.28.4
166 inc="/source/mbedtls-2.28.4/include"
167 lib="/source/mbedtls-2.28.4/library"
169 MITMOPT="--with-mbedtls"
170 CPPFLAGS="${CPPFLAGS} -I${inc}"
171 LDFLAGS="${LDFLAGS} -L${lib}"
174 # Get the brotli library from https://github.com/google/brotli/releases
175 inc="/source/brotli-1.0.9/c/include"
176 lib="/source/brotli-1.0.9/.libs"
177 BROTLIOPT="--with-brotli"
178 CPPFLAGS="${CPPFLAGS} -I${inc}"
179 LDFLAGS="${LDFLAGS} -L${lib}"
182 echo "CFLAGS=${CFLAGS}"
183 echo "CPPFLAGS=${CPPFLAGS}"
184 echo "LDFLAGS=${LDFLAGS}"
186 # ./configure cross-compilation options:
187 # --build: the system on which the program will be built.
188 # --host: the system on which the generated program will run.
189 # --target: only used to build a cross-compiling toolchain.
191 ./configure --host=i686-w64-mingw32 --enable-mingw32 --enable-zlib \
192 --enable-extended-statistics \
194 --enable-pcre-host-patterns \
195 --enable-static-linking \
196 --enable-strptime-sanity-checks \