Missed attachment.
2017-05-21 22:23 GMT+03:00 Sorin Manole <sorin.v.man...@gmail.com>: > Hello, > > Would you be willing to accept a patch to support CXX and CXXFLAGS in > the nginx build logic? > This could be used to write C++ nginx module code. > I attached a partial implementation. Please confirm if this is the > correct approach. > > Thanks.
diff -r 2c4dbcd6f2e4 auto/cc/acc --- a/auto/cc/acc Mon Apr 24 14:17:13 2017 +0300 +++ b/auto/cc/acc Sun May 21 17:05:40 2017 +0100 @@ -8,6 +8,7 @@ # C89 mode CFLAGS="$CFLAGS -Ae" +CXXFLAGS="$CXXFLAGS -Ae" CC_TEST_FLAGS="-Ae" PCRE_OPT="$PCRE_OPT -Ae" diff -r 2c4dbcd6f2e4 auto/cc/bcc --- a/auto/cc/bcc Mon Apr 24 14:17:13 2017 +0300 +++ b/auto/cc/bcc Sun May 21 17:05:40 2017 +0100 @@ -8,7 +8,7 @@ # optimizations # maximize speed -CFLAGS="$CFLAGS -O2" +NGX_BCC_OPT="-O2" case $CPU in pentium) @@ -27,17 +27,19 @@ # __fastcall #CPU_OPT="$CPU_OPT -pr" -CFLAGS="$CFLAGS $CPU_OPT" +NGX_BCC_OPT="$NGX_BCC_OPT $CPU_OPT" # multithreaded -CFLAGS="$CFLAGS -tWM" +NGX_BCC_OPT="$NGX_BCC_OPT -tWM" # stop on warning -CFLAGS="$CFLAGS -w!" +NGX_BCC_OPT="$NGX_BCC_OPT -w!" # disable logo -CFLAGS="$CFLAGS -q" +NGX_BCC_OPT="$NGX_BCC_OPT -q" +CFLAGS="$CFLAGS $NGX_BCC_OPT" +CXXFLAGS="$CXXFLAGS $NGX_BCC_OPT" # precompiled headers CORE_DEPS="$CORE_DEPS $NGX_OBJS/ngx_config.csm" diff -r 2c4dbcd6f2e4 auto/cc/ccc --- a/auto/cc/ccc Mon Apr 24 14:17:13 2017 +0300 +++ b/auto/cc/ccc Sun May 21 17:05:40 2017 +0100 @@ -9,38 +9,41 @@ # warnings -CFLAGS="$CFLAGS -msg_enable level6 -msg_fatal level6" +NGX_CCC_OPT="-msg_enable level6 -msg_fatal level6" -CFLAGS="$CFLAGS -msg_disable unknownmacro" -CFLAGS="$CFLAGS -msg_disable unusedincl" -CFLAGS="$CFLAGS -msg_disable unnecincl" -CFLAGS="$CFLAGS -msg_disable nestincl" -CFLAGS="$CFLAGS -msg_disable strctpadding" -CFLAGS="$CFLAGS -msg_disable ansialiascast" -CFLAGS="$CFLAGS -msg_disable inlinestoclsmod" -CFLAGS="$CFLAGS -msg_disable cxxkeyword" -CFLAGS="$CFLAGS -msg_disable longlongsufx" -CFLAGS="$CFLAGS -msg_disable valuepres" +NGX_CCC_OPT="$NGX_CCC_OPT -msg_disable unknownmacro" +NGX_CCC_OPT="$NGX_CCC_OPT -msg_disable unusedincl" +NGX_CCC_OPT="$NGX_CCC_OPT -msg_disable unnecincl" +NGX_CCC_OPT="$NGX_CCC_OPT -msg_disable nestincl" +NGX_CCC_OPT="$NGX_CCC_OPT -msg_disable strctpadding" +NGX_CCC_OPT="$NGX_CCC_OPT -msg_disable ansialiascast" +NGX_CCC_OPT="$NGX_CCC_OPT -msg_disable inlinestoclsmod" +NGX_CCC_OPT="$NGX_CCC_OPT -msg_disable cxxkeyword" +NGX_CCC_OPT="$NGX_CCC_OPT -msg_disable longlongsufx" +NGX_CCC_OPT="$NGX_CCC_OPT -msg_disable valuepres" # STUB -CFLAGS="$CFLAGS -msg_disable truncintcast" -CFLAGS="$CFLAGS -msg_disable trunclongcast" +NGX_CCC_OPT="$NGX_CCC_OPT -msg_disable truncintcast" +NGX_CCC_OPT="$NGX_CCC_OPT -msg_disable trunclongcast" -CFLAGS="$CFLAGS -msg_disable truncintasn" -CFLAGS="$CFLAGS -msg_disable trunclongint" -CFLAGS="$CFLAGS -msg_disable intconcastsgn" -CFLAGS="$CFLAGS -msg_disable intconstsign" -CFLAGS="$CFLAGS -msg_disable switchlong" -CFLAGS="$CFLAGS -msg_disable subscrbounds2" +NGX_CCC_OPT="$NGX_CCC_OPT -msg_disable truncintasn" +NGX_CCC_OPT="$NGX_CCC_OPT -msg_disable trunclongint" +NGX_CCC_OPT="$NGX_CCC_OPT -msg_disable intconcastsgn" +NGX_CCC_OPT="$NGX_CCC_OPT -msg_disable intconstsign" +NGX_CCC_OPT="$NGX_CCC_OPT -msg_disable switchlong" +NGX_CCC_OPT="$NGX_CCC_OPT -msg_disable subscrbounds2" + +NGX_CCC_OPT="$NGX_CCC_OPT -msg_disable hexoctunsign" -CFLAGS="$CFLAGS -msg_disable hexoctunsign" +NGX_CCC_OPT="$NGX_CCC_OPT -msg_disable ignorecallval" +NGX_CCC_OPT="$NGX_CCC_OPT -msg_disable nonstandcast" +NGX_CCC_OPT="$NGX_CCC_OPT -msg_disable embedcomment" +NGX_CCC_OPT="$NGX_CCC_OPT -msg_disable unreachcode" +NGX_CCC_OPT="$NGX_CCC_OPT -msg_disable questcompare2" +NGX_CCC_OPT="$NGX_CCC_OPT -msg_disable unusedtop" +NGX_CCC_OPT="$NGX_CCC_OPT -msg_disable unrefdecl" -CFLAGS="$CFLAGS -msg_disable ignorecallval" -CFLAGS="$CFLAGS -msg_disable nonstandcast" -CFLAGS="$CFLAGS -msg_disable embedcomment" -CFLAGS="$CFLAGS -msg_disable unreachcode" -CFLAGS="$CFLAGS -msg_disable questcompare2" -CFLAGS="$CFLAGS -msg_disable unusedtop" -CFLAGS="$CFLAGS -msg_disable unrefdecl" +NGX_CCC_OPT="$NGX_CCC_OPT -msg_disable bitnotint" -CFLAGS="$CFLAGS -msg_disable bitnotint" +CFLAGS="$CFLAGS $NGX_CCC_OPT" +CXXFLAGS="$CXXFLAGS $NGX_CCC_OPT" diff -r 2c4dbcd6f2e4 auto/cc/clang --- a/auto/cc/clang Mon Apr 24 14:17:13 2017 +0300 +++ b/auto/cc/clang Sun May 21 17:05:40 2017 +0100 @@ -58,7 +58,7 @@ CC_AUX_FLAGS="$CC_AUX_FLAGS $CPU_OPT" -CFLAGS="$CFLAGS -pipe $CPU_OPT" +NGX_CLANG_OPT="$NGX_CLANG_OPT -pipe $CPU_OPT" if [ ".$PCRE_OPT" = "." ]; then PCRE_OPT="-O2 -pipe $CPU_OPT" @@ -75,23 +75,25 @@ # warnings -CFLAGS="$CFLAGS $NGX_CLANG_OPT -Wall -Wextra -Wpointer-arith" -CFLAGS="$CFLAGS -Wconditional-uninitialized" -#CFLAGS="$CFLAGS -Wmissing-prototypes" +NGX_CLANG_OPT="$NGX_CLANG_OPT -Wall -Wextra -Wpointer-arith" +NGX_CLANG_OPT="$NGX_CLANG_OPT -Wconditional-uninitialized" +#NGX_CLANG_OPT="$NGX_CLANG_OPT -Wmissing-prototypes" # we have a lot of unused function arguments -CFLAGS="$CFLAGS -Wno-unused-parameter" +NGX_CLANG_OPT="$NGX_CLANG_OPT -Wno-unused-parameter" # deprecated system OpenSSL library on OS X if [ "$NGX_SYSTEM" = "Darwin" ]; then - CFLAGS="$CFLAGS -Wno-deprecated-declarations" + NGX_CLANG_OPT="$NGX_CLANG_OPT -Wno-deprecated-declarations" fi # stop on warning -CFLAGS="$CFLAGS -Werror" +NGX_CLANG_OPT="$NGX_CLANG_OPT -Werror" # debug -CFLAGS="$CFLAGS -g" +NGX_CLANG_OPT="$NGX_CLANG_OPT -g" + +CFLAGS="$CFLAGS $NGX_CLANG_OPT" if [ ".$CPP" = "." ]; then CPP="$CC -E" diff -r 2c4dbcd6f2e4 auto/cc/conf --- a/auto/cc/conf Mon Apr 24 14:17:13 2017 +0300 +++ b/auto/cc/conf Sun May 21 17:05:40 2017 +0100 @@ -142,6 +142,7 @@ fi CFLAGS="$CFLAGS $NGX_CC_OPT" +CXXFLAGS="$CXXFLAGS $NGX_CXX_OPT" NGX_TEST_LD_OPT="$NGX_LD_OPT" if [ "$NGX_PLATFORM" != win32 ]; then diff -r 2c4dbcd6f2e4 auto/cc/gcc --- a/auto/cc/gcc Mon Apr 24 14:17:13 2017 +0300 +++ b/auto/cc/gcc Sun May 21 17:05:40 2017 +0100 @@ -40,7 +40,7 @@ sun4u | sun4v | sparc | sparc64 ) # "-mcpu=v9" enables the "casa" assembler instruction - CFLAGS="$CFLAGS -mcpu=v9" + NGX_GCC_OPT="-mcpu=v9" ;; esac @@ -48,11 +48,11 @@ # optimizations -#NGX_GCC_OPT="-O2" -#NGX_GCC_OPT="-Os" -NGX_GCC_OPT="-O" +#NGX_GCC_OPTIM="$NGX_GCC_OPTIM -O2" +#NGX_GCC_OPTIM="$NGX_GCC_OPTIM -Os" +NGX_GCC_OPTIM="$NGX_GCC_OPTIM -O" -#CFLAGS="$CFLAGS -fomit-frame-pointer" +#NGX_GCC_OPT="$NGX_GCC_OPT -fomit-frame-pointer" case $CPU in pentium) @@ -120,7 +120,7 @@ esac -CFLAGS="$CFLAGS $PIPE $CPU_OPT" +NGX_GCC_OPT="$NGX_GCC_OPT $PIPE $CPU_OPT" if [ ".$PCRE_OPT" = "." ]; then PCRE_OPT="-O2 -fomit-frame-pointer $PIPE $CPU_OPT" @@ -138,41 +138,41 @@ # warnings # -W requires at least -O -CFLAGS="$CFLAGS ${NGX_GCC_OPT:--O} -W" +NGX_GCC_OPT="$NGX_GCC_OPT ${NGX_GCC_OPTIM:--O} -W" -CFLAGS="$CFLAGS -Wall -Wpointer-arith" -#CFLAGS="$CFLAGS -Wconversion" -#CFLAGS="$CFLAGS -Winline" -#CFLAGS="$CFLAGS -Wmissing-prototypes" +NGX_GCC_OPT="$NGX_GCC_OPT -Wall -Wpointer-arith" +#NGX_GCC_OPT="$NGX_GCC_OPT -Wconversion" +#NGX_GCC_OPT="$NGX_GCC_OPT -Winline" +#NGX_GCC_OPT="$NGX_GCC_OPT -Wmissing-prototypes" case "$NGX_GCC_VER" in 2.*) # we have a lot of the unused function arguments - CFLAGS="$CFLAGS -Wno-unused" + NGX_GCC_OPT="$NGX_GCC_OPT -Wno-unused" ;; *) # we have a lot of the unused function arguments - CFLAGS="$CFLAGS -Wno-unused-parameter" + NGX_GCC_OPT="$NGX_GCC_OPT -Wno-unused-parameter" # 4.2.1 shows the warning in wrong places - #CFLAGS="$CFLAGS -Wunreachable-code" + #NGX_GCC_OPT="$NGX_GCC_OPT -Wunreachable-code" # deprecated system OpenSSL library on OS X if [ "$NGX_SYSTEM" = "Darwin" ]; then - CFLAGS="$CFLAGS -Wno-deprecated-declarations" + NGX_GCC_OPT="$NGX_GCC_OPT -Wno-deprecated-declarations" fi ;; esac # stop on warning -CFLAGS="$CFLAGS -Werror" +NGX_GCC_OPT="$NGX_GCC_OPT -Werror" # debug -CFLAGS="$CFLAGS -g" +NGX_GCC_OPT="$NGX_GCC_OPT -g" # DragonFly's gcc3 generates DWARF -#CFLAGS="$CFLAGS -g -gstabs" +#NGX_GCC_OPT="$NGX_GCC_OPT -g -gstabs" if [ ".$CPP" = "." ]; then CPP="$CC -E" diff -r 2c4dbcd6f2e4 auto/cc/icc --- a/auto/cc/icc Mon Apr 24 14:17:13 2017 +0300 +++ b/auto/cc/icc Sun May 21 17:05:40 2017 +0100 @@ -15,7 +15,7 @@ # optimizations -CFLAGS="$CFLAGS -O" +NGX_ICC_OPT="-O" CORE_LINK="$CORE_LINK -opt_report_file=$NGX_OBJS/opt_report_file" @@ -37,7 +37,7 @@ ;; esac -CFLAGS="$CFLAGS $CPU_OPT" +NGX_ICC_OPT="$NGX_ICC_OPT $CPU_OPT" if [ ".$PCRE_OPT" = "." ]; then PCRE_OPT="-O $CPU_OPT" @@ -50,60 +50,60 @@ # warnings -CFLAGS="$CFLAGS -w2" +NGX_ICC_OPT="$NGX_ICC_OPT -w2" # disable some warnings # invalid type conversion: "int" to "char *" -CFLAGS="$CFLAGS -wd171" +NGX_ICC_OPT="$NGX_ICC_OPT -wd171" # argument is incompatible with corresponding format string conversion -CFLAGS="$CFLAGS -wd181" +NGX_ICC_OPT="$NGX_ICC_OPT -wd181" # zero used for undefined preprocessing identifier -CFLAGS="$CFLAGS -wd193" +NGX_ICC_OPT="$NGX_ICC_OPT -wd193" # the format string ends before this argument -CFLAGS="$CFLAGS -wd268" +NGX_ICC_OPT="$NGX_ICC_OPT -wd268" # invalid format string conversion -CFLAGS="$CFLAGS -wd269" +NGX_ICC_OPT="$NGX_ICC_OPT -wd269" # conversion from "long long" to "size_t" may lose significant bits -CFLAGS="$CFLAGS -wd810" +NGX_ICC_OPT="$NGX_ICC_OPT -wd810" # parameter was never referenced -CFLAGS="$CFLAGS -wd869" +NGX_ICC_OPT="$NGX_ICC_OPT -wd869" # attribute "unused" is only allowed in a function definition, warning on pTHX_ -CFLAGS="$CFLAGS -wd1301" +NGX_ICC_OPT="$NGX_ICC_OPT -wd1301" # STUB # enumerated type mixed with another type -CFLAGS="$CFLAGS -wd188" +NGX_ICC_OPT="$NGX_ICC_OPT -wd188" # controlling expression is constant -CFLAGS="$CFLAGS -wd279" +NGX_ICC_OPT="$NGX_ICC_OPT -wd279" # operands are evaluated in unspecified order -CFLAGS="$CFLAGS -wd981" +NGX_ICC_OPT="$NGX_ICC_OPT -wd981" # external definition with no prior declaration -CFLAGS="$CFLAGS -wd1418" +NGX_ICC_OPT="$NGX_ICC_OPT -wd1418" # external declaration in primary source file -CFLAGS="$CFLAGS -wd1419" +NGX_ICC_OPT="$NGX_ICC_OPT -wd1419" case "$NGX_ICC_VER" in 9.*) # "cc" clobber ignored, warnings for Linux's htonl()/htons() - CFLAGS="$CFLAGS -wd1469" + NGX_ICC_OPT="$NGX_ICC_OPT -wd1469" # explicit conversion of a 64-bit integral type to a smaller # integral type - CFLAGS="$CFLAGS -wd1683" + NGX_ICC_OPT="$NGX_ICC_OPT -wd1683" # conversion from pointer to same-sized integral type, # warning on offsetof() - CFLAGS="$CFLAGS -wd1684" + NGX_ICC_OPT="$NGX_ICC_OPT -wd1684" # floating-point equality and inequality comparisons are unreliable, # warning on SvTRUE() - CFLAGS="$CFLAGS -wd1572" + NGX_ICC_OPT="$NGX_ICC_OPT -wd1572" ;; 8.*) # "cc" clobber ignored, warnings for Linux's htonl()/htons() - CFLAGS="$CFLAGS -wd1469" + NGX_ICC_OPT="$NGX_ICC_OPT -wd1469" # floating-point equality and inequality comparisons are unreliable, # warning on SvTRUE() - CFLAGS="$CFLAGS -wd1572" + NGX_ICC_OPT="$NGX_ICC_OPT -wd1572" ;; *) @@ -111,7 +111,10 @@ esac # stop on warning -CFLAGS="$CFLAGS -Werror" +NGX_ICC_OPT="$NGX_ICC_OPT -Werror" # debug -CFLAGS="$CFLAGS -g" +NGX_ICC_OPT="$NGX_ICC_OPT -g" + +CFLAGS="$CFLAGS $NGX_ICC_OPT" +CXXFLAGS="$CXXFLAGS $NGX_ICC_OPT" diff -r 2c4dbcd6f2e4 auto/make --- a/auto/make Mon Apr 24 14:17:13 2017 +0300 +++ b/auto/make Sun May 21 17:05:40 2017 +0100 @@ -21,9 +21,11 @@ cat << END > $NGX_MAKEFILE CC = $CC +CXX = $CXX CFLAGS = $CFLAGS -CPP = $CPP -LINK = $LINK +CXXFLAGS = $CXXFLAGS +CPP = $CPP +LINK = $LINK END @@ -384,8 +386,9 @@ ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) $ngx_use_pch \$(ALL_INCS)" - for ngx_src in $MISC_SRCS + for ngx_src in $NGX_MISC_SRCS do + ngx_src_is_cpp=`echo $ngx_src | grep -E "\.cpp$" | wc -l` ngx_src=`echo $ngx_src | sed -e "s/\//$ngx_regex_dirsep/g"` ngx_obj=`echo $ngx_src \ | sed -e "s#^\(.*\.\)cpp\\$#$ngx_objs_dir\1$ngx_objext#g" \ @@ -393,6 +396,12 @@ -e "s#^\(.*\.\)c\\$#$ngx_objs_dir\1$ngx_objext#g" \ -e "s#^\(.*\.\)S\\$#$ngx_objs_dir\1$ngx_objext#g"` + if [ "$ngx_src_is_cpp" -eq '1' ]; then + ngx_cc="\$(CXX) $ngx_compile_opt \$(CXXFLAGS) $ngx_use_pch \$(ALL_INCS)" + else + ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) $ngx_use_pch \$(ALL_INCS)" + fi; + cat << END >> $NGX_MAKEFILE $ngx_obj: \$(CORE_DEPS) $ngx_cont$ngx_src @@ -408,10 +417,10 @@ if test -n "$NGX_ADDON_SRCS"; then - ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) $ngx_use_pch \$(ALL_INCS)" - for ngx_src in $NGX_ADDON_SRCS do + ngx_src_is_cpp=`echo $ngx_src | grep -E "\.cpp$" | wc -l` + ngx_obj="addon/`basename \`dirname $ngx_src\``" ngx_obj=`echo $ngx_obj/\`basename $ngx_src\` \ @@ -424,6 +433,12 @@ -e "s#^\(.*\.\)S\\$#$ngx_objs_dir\1$ngx_objext#g"` ngx_src=`echo $ngx_src | sed -e "s/\//$ngx_regex_dirsep/g"` + if [ "$ngx_src_is_cpp" -eq '1' ]; then + ngx_cc="\$(CXX) $ngx_compile_opt \$(CXXFLAGS) $ngx_use_pch \$(ALL_INCS)" + else + ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) $ngx_use_pch \$(ALL_INCS)" + fi; + cat << END >> $NGX_MAKEFILE diff -r 2c4dbcd6f2e4 auto/options --- a/auto/options Mon Apr 24 14:17:13 2017 +0300 +++ b/auto/options Sun May 21 17:05:40 2017 +0100 @@ -23,6 +23,7 @@ NGX_DEBUG=NO NGX_CC_OPT= +NGX_CXX_OPT= NGX_LD_OPT= CPU=NO @@ -333,8 +334,10 @@ --with-compat) NGX_COMPAT=YES ;; --with-cc=*) CC="$value" ;; + --with-cxx=*) CXX="$value" ;; --with-cpp=*) CPP="$value" ;; --with-cc-opt=*) NGX_CC_OPT="$value" ;; + --with-cxx-opt=*) NGX_CXX_OPT="$value" ;; --with-ld-opt=*) NGX_LD_OPT="$value" ;; --with-cpu-opt=*) CPU="$value" ;; --with-debug) NGX_DEBUG=YES ;; @@ -541,8 +544,10 @@ --with-compat dynamic modules compatibility --with-cc=PATH set C compiler pathname + --with-cxx=PATH set C++ compiler pathname --with-cpp=PATH set C preprocessor pathname --with-cc-opt=OPTIONS set additional C compiler options + --with-cxx-opt=OPTIONS set additional C++ compiler options --with-ld-opt=OPTIONS set additional linker options --with-cpu-opt=CPU build for the specified CPU, valid values: pentium, pentiumpro, pentium3, pentium4,
_______________________________________________ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel