view auto/lib/pcre/make @ 9155:35bb47f65cab

Upstream: fixed handling of Status headers without reason-phrase. Status header with an empty reason-phrase, such as "Status: 404 ", is valid per CGI specification, but looses the trailing space during parsing. Currently, this results in "HTTP/1.1 404" HTTP status line in the response, which violates HTTP specification due to missing trailing space. With this change, only the status code is used from such short Status header lines, so nginx will generate status line itself, with the space and appropriate reason phrase if available. Reported at: https://mailman.nginx.org/pipermail/nginx/2023-August/EX7G4JUUHJWJE5UOAZMO5UD6OJILCYGX.html
author Maxim Dounin <mdounin@mdounin.ru>
date Thu, 31 Aug 2023 22:59:17 +0300
parents 0b5f12d5c531
children
line wrap: on
line source


# Copyright (C) Igor Sysoev
# Copyright (C) Nginx, Inc.


if [ $PCRE_LIBRARY = PCRE2 ]; then

    # PCRE2

    if [ $NGX_CC_NAME = msvc ]; then

        # With PCRE2, it is not possible to compile all sources.
        # Since list of source files changes between versions, we
        # test files which might not be present.

        ngx_pcre_srcs="pcre2_auto_possess.c \
                       pcre2_chartables.c \
                       pcre2_compile.c \
                       pcre2_config.c \
                       pcre2_context.c \
                       pcre2_dfa_match.c \
                       pcre2_error.c \
                       pcre2_jit_compile.c \
                       pcre2_maketables.c \
                       pcre2_match.c \
                       pcre2_match_data.c \
                       pcre2_newline.c \
                       pcre2_ord2utf.c \
                       pcre2_pattern_info.c \
                       pcre2_string_utils.c \
                       pcre2_study.c \
                       pcre2_substitute.c \
                       pcre2_substring.c \
                       pcre2_tables.c \
                       pcre2_ucd.c \
                       pcre2_valid_utf.c \
                       pcre2_xclass.c"

        ngx_pcre_test="pcre2_convert.c \
                       pcre2_extuni.c \
                       pcre2_find_bracket.c \
                       pcre2_script_run.c \
                       pcre2_serialize.c"

        for ngx_src in $ngx_pcre_test
        do
            if [ -f $PCRE/src/$ngx_src ]; then
                ngx_pcre_srcs="$ngx_pcre_srcs $ngx_src"
            fi
        done

        ngx_pcre_objs=`echo $ngx_pcre_srcs \
            | sed -e "s#\([^ ]*\.\)c#\1$ngx_objext#g"`

        ngx_pcre_srcs=`echo $ngx_pcre_srcs \
            | sed -e "s/  *\([^ ][^ ]*\)/$ngx_regex_cont\1/g"`
        ngx_pcre_objs=`echo $ngx_pcre_objs \
            | sed -e "s/  *\([^ ][^ ]*\)/$ngx_regex_cont\1/g"`

        cat << END                                            >> $NGX_MAKEFILE

PCRE_CFLAGS =	-O2 -Ob1 -Oi -Gs $LIBC $CPU_OPT
PCRE_FLAGS =	-DHAVE_CONFIG_H -DPCRE2_STATIC -DPCRE2_CODE_UNIT_WIDTH=8 \\
		-DHAVE_MEMMOVE

PCRE_SRCS =	 $ngx_pcre_srcs
PCRE_OBJS =	 $ngx_pcre_objs

$PCRE/src/pcre2.h:
	cd $PCRE/src \\
	&& copy /y config.h.generic config.h \\
	&& copy /y pcre2.h.generic pcre2.h \\
	&& copy /y pcre2_chartables.c.dist pcre2_chartables.c

$PCRE/src/pcre2-8.lib:	$PCRE/src/pcre2.h $NGX_MAKEFILE
	cd $PCRE/src \\
	&& cl -nologo -c \$(PCRE_CFLAGS) -I . \$(PCRE_FLAGS) \$(PCRE_SRCS) \\
	&& link -lib -out:pcre2-8.lib -verbose:lib \$(PCRE_OBJS)

END

    else

        cat << END                                            >> $NGX_MAKEFILE

$PCRE/src/pcre2.h:	$PCRE/Makefile

$PCRE/Makefile:	$NGX_MAKEFILE
	cd $PCRE \\
	&& if [ -f Makefile ]; then \$(MAKE) distclean; fi \\
	&& CC="\$(CC)" CFLAGS="$PCRE_OPT" \\
	./configure --disable-shared $PCRE_CONF_OPT

$PCRE/.libs/libpcre2-8.a:	$PCRE/Makefile
	cd $PCRE \\
	&& \$(MAKE) libpcre2-8.la

END

    fi


else

    # PCRE

    case "$NGX_CC_NAME" in

        msvc)
            ngx_makefile=makefile.msvc
            ngx_opt="CPU_OPT=\"$CPU_OPT\" LIBC=$LIBC"
            ngx_pcre="PCRE=\"$PCRE\""
        ;;

        owc)
            ngx_makefile=makefile.owc
            ngx_opt="CPU_OPT=\"$CPU_OPT\""
            ngx_pcre=`echo PCRE=\"$PCRE\" | sed -e "s/\//$ngx_regex_dirsep/g"`
        ;;

        bcc)
            ngx_makefile=makefile.bcc
            ngx_opt="-DCPU_OPT=\"$CPU_OPT\""
            ngx_pcre=`echo \-DPCRE=\"$PCRE\" \
                | sed -e "s/\//$ngx_regex_dirsep/g"`
        ;;

        *)
            ngx_makefile=
        ;;

    esac


    if [ -n "$ngx_makefile" ]; then

        cat << END                                            >> $NGX_MAKEFILE

`echo "$PCRE/pcre.lib:	$PCRE/pcre.h $NGX_MAKEFILE"			\
	| sed -e "s/\//$ngx_regex_dirsep/g"`
	\$(MAKE) -f auto/lib/pcre/$ngx_makefile $ngx_pcre $ngx_opt

`echo "$PCRE/pcre.h:" | sed -e "s/\//$ngx_regex_dirsep/g"`
	\$(MAKE) -f auto/lib/pcre/$ngx_makefile $ngx_pcre pcre.h

END

    else

        cat << END                                            >> $NGX_MAKEFILE

$PCRE/pcre.h:	$PCRE/Makefile

$PCRE/Makefile:	$NGX_MAKEFILE
	cd $PCRE \\
	&& if [ -f Makefile ]; then \$(MAKE) distclean; fi \\
	&& CC="\$(CC)" CFLAGS="$PCRE_OPT" \\
	./configure --disable-shared $PCRE_CONF_OPT

$PCRE/.libs/libpcre.a:	$PCRE/Makefile
	cd $PCRE \\
	&& \$(MAKE) libpcre.la

END

    fi

fi