| |
| # Copyright (C) Igor Sysoev |
| # Copyright (C) NGINX, Inc. |
| |
| . auto/deps |
| |
| echo "creating $NJS_MAKEFILE" |
| |
| mkdir -p $NJS_BUILD_DIR/src |
| mkdir -p $NJS_BUILD_DIR/external |
| mkdir -p $NJS_BUILD_DIR/$NJS_BUILD_DIR |
| mkdir -p $NJS_BUILD_DIR/test |
| |
| njs_modules_c=$NJS_BUILD_DIR/njs_modules.c |
| |
| NJS_LIB_SRCS="$NJS_LIB_SRCS $njs_modules_c" |
| |
| njs_incs=`echo $NJS_LIB_INCS \ |
| | sed -e "s# *\([^ ]*\)#$njs_regex_cont-I\1#g"` |
| njs_objs=`echo $NJS_LIB_SRCS \ |
| | sed -e "s# *\([^ ]*\.\)c#$NJS_BUILD_DIR/\1o$njs_regex_cont#g"` |
| |
| cat << END > $njs_modules_c |
| |
| #include <njs_main.h> |
| |
| END |
| |
| for mod in $NJS_LIB_MODULES |
| do |
| echo "extern njs_module_t $mod;" >> $njs_modules_c |
| done |
| |
| echo >> $njs_modules_c |
| echo 'njs_module_t *njs_modules[] = {' >> $njs_modules_c |
| |
| for mod in $NJS_LIB_MODULES |
| do |
| echo " &$mod," >> $njs_modules_c |
| done |
| |
| cat << END >> $njs_modules_c |
| NULL |
| }; |
| |
| END |
| |
| cat << END > $NJS_MAKEFILE |
| |
| # This file is auto-generated by configure |
| |
| NJS_CC = ${CC} |
| NJS_STATIC_LINK = ${AR} -r -c |
| NJS_LINK = ${CC} ${NJS_LD_OPT} |
| NJS_CFLAGS = ${NJS_CFLAGS} ${NJS_CC_OPT} ${CFLAGS} |
| |
| NJS_VER = $(grep NJS_VERSION src/njs.h | sed -e 's/.*"\(.*\)".*/\1/') |
| NJS_TYPES_VER = \$(NJS_VER) |
| |
| NPM = npm |
| |
| default: njs |
| |
| NJS_LIB_INCS = $njs_incs |
| NJS_LIB_OBJS = $njs_objs |
| |
| libnjs: $NJS_BUILD_DIR/libnjs.a |
| |
| $NJS_BUILD_DIR/libnjs.a: \\ |
| $NJS_BUILD_DIR/njs_auto_config.h \\ |
| \$(NJS_LIB_OBJS) |
| |
| \$(NJS_STATIC_LINK) $NJS_BUILD_DIR/libnjs.a \\ |
| \$(NJS_LIB_OBJS) |
| END |
| |
| # object files. |
| |
| for njs_src in $NJS_LIB_SRCS |
| do |
| njs_obj="${njs_src%.c}.o" |
| njs_dep="${njs_src%.c}.dep" |
| njs_dep_flags=`njs_gen_dep_flags $njs_dep $njs_obj` |
| njs_dep_post=`njs_gen_dep_post $njs_dep $njs_obj` |
| cat << END >> $NJS_MAKEFILE |
| |
| $NJS_BUILD_DIR/$njs_obj: $njs_src |
| \$(NJS_CC) -c \$(NJS_CFLAGS) $NJS_LIB_AUX_CFLAGS \\ |
| \$(NJS_LIB_INCS) -Injs \\ |
| -o $NJS_BUILD_DIR/$njs_obj \\ |
| $njs_dep_flags \\ |
| $njs_src |
| $njs_dep_post |
| |
| -include $NJS_BUILD_DIR/$njs_dep |
| |
| END |
| |
| done |
| |
| # njs cli. |
| |
| cat << END >> $NJS_MAKEFILE |
| |
| $NJS_BUILD_DIR/njs: \\ |
| $NJS_BUILD_DIR/libnjs.a \\ |
| src/njs_shell.c |
| \$(NJS_LINK) -o $NJS_BUILD_DIR/njs \$(NJS_CFLAGS) \\ |
| $NJS_LIB_AUX_CFLAGS \$(NJS_LIB_INCS) -Injs \\ |
| src/njs_shell.c \\ |
| $NJS_BUILD_DIR/libnjs.a \\ |
| $NJS_LD_OPT -lm $NJS_LIBS $NJS_LIB_AUX_LIBS $NJS_READLINE_LIB |
| |
| END |
| |
| # njs fuzzer. |
| |
| cat << END >> $NJS_MAKEFILE |
| |
| $NJS_BUILD_DIR/njs_process_script_fuzzer.o: \\ |
| src/njs_shell.c |
| \$(NJS_CC) -c \$(CFLAGS) $NJS_LIB_AUX_CFLAGS \\ |
| \$(NJS_LIB_INCS) -Injs \\ |
| -DNJS_FUZZER_TARGET \\ |
| -o $NJS_BUILD_DIR/njs_process_script_fuzzer.o \\ |
| src/njs_shell.c |
| |
| $NJS_BUILD_DIR/njs_process_script_fuzzer: \\ |
| $NJS_BUILD_DIR/libnjs.a \\ |
| $NJS_BUILD_DIR/njs_process_script_fuzzer.o |
| \$(CXX) \$(CXXFLAGS) -o $NJS_BUILD_DIR/njs_process_script_fuzzer \\ |
| $NJS_LIB_AUX_CFLAGS \$(NJS_LIB_INCS) -Injs \\ |
| \$(LIB_FUZZING_ENGINE) \\ |
| $NJS_BUILD_DIR/njs_process_script_fuzzer.o \\ |
| $NJS_BUILD_DIR/libnjs.a \\ |
| -lm $NJS_LIBS $NJS_LIB_AUX_LIBS |
| |
| END |
| |
| # lib tests. |
| |
| for njs_src in $NJS_LIB_TEST_SRCS |
| do |
| fname=$(basename $njs_src) |
| njs_dep="test/${fname%.c}.dep" |
| njs_bin="${fname%.c}" |
| njs_dep_flags=`njs_gen_dep_flags $njs_dep $fname` |
| njs_dep_post=`njs_gen_dep_post $njs_dep $fname` |
| cat << END >> $NJS_MAKEFILE |
| |
| $NJS_BUILD_DIR/$njs_bin: $njs_src \\ |
| $NJS_BUILD_DIR/libnjs.a |
| \$(NJS_LINK) -o $NJS_BUILD_DIR/$njs_bin \$(NJS_CFLAGS) \\ |
| \$(NJS_LIB_INCS) $njs_dep_flags \\ |
| $njs_src $NJS_BUILD_DIR/libnjs.a \\ |
| $njs_dep_post -lm $NJS_LD_OPT |
| |
| -include $NJS_BUILD_DIR/$njs_dep |
| |
| END |
| |
| done |
| |
| |
| # njs tests. |
| |
| njs_src="src/test/njs_externals_test.c" |
| fname=$(basename $njs_src) |
| njs_externals_obj="test/${fname%.c}.o" |
| njs_dep="test/${fname%.c}.dep" |
| njs_dep_flags=`njs_gen_dep_flags $njs_dep $njs_externals_obj` |
| njs_dep_post=`njs_gen_dep_post $njs_dep $njs_externals_obj` |
| |
| cat << END >> $NJS_MAKEFILE |
| |
| $NJS_BUILD_DIR/$njs_externals_obj: \\ |
| $njs_src |
| \$(NJS_CC) -c \$(NJS_CFLAGS) $NJS_LIB_AUX_CFLAGS \\ |
| \$(NJS_LIB_INCS) -Injs \\ |
| -o $NJS_BUILD_DIR/$njs_externals_obj \\ |
| $njs_dep_flags \\ |
| $njs_src |
| $njs_dep_post |
| |
| -include $NJS_BUILD_DIR/$njs_dep |
| |
| END |
| |
| for njs_src in $NJS_TEST_SRCS |
| do |
| fname=$(basename $njs_src) |
| njs_dep="test/${fname%.c}.dep" |
| njs_bin="${fname%.c}" |
| njs_dep_flags=`njs_gen_dep_flags $njs_dep $fname` |
| njs_dep_post=`njs_gen_dep_post $njs_dep $fname` |
| cat << END >> $NJS_MAKEFILE |
| |
| $NJS_BUILD_DIR/$njs_bin: $njs_src \\ |
| $NJS_BUILD_DIR/libnjs.a \\ |
| $NJS_BUILD_DIR/$njs_externals_obj |
| \$(NJS_LINK) -o $NJS_BUILD_DIR/$njs_bin \$(NJS_CFLAGS) \\ |
| $NJS_LIB_AUX_CFLAGS \$(NJS_LIB_INCS) \\ |
| $njs_dep_flags \\ |
| $NJS_BUILD_DIR/$njs_externals_obj \\ |
| -Injs $njs_src $NJS_BUILD_DIR/libnjs.a \\ |
| $NJS_LD_OPT -lm $NJS_LIBS $NJS_LIB_AUX_LIBS |
| $njs_dep_post |
| |
| -include $NJS_BUILD_DIR/$njs_dep |
| |
| END |
| |
| done |
| |
| # main targets. |
| |
| cat << END >> $NJS_MAKEFILE |
| |
| $NJS_BUILD_DIR/njs_auto_config.h: |
| @echo |
| @echo " Please run ./configure before make" |
| @echo |
| @exit 1 |
| |
| all: $NJS_BUILD_DIR/njs_auto_config.h \\ |
| njs ts test lib_test benchmark |
| |
| njs: $NJS_BUILD_DIR/njs_auto_config.h $NJS_BUILD_DIR/njs |
| njs_fuzzer: $NJS_BUILD_DIR/njs_auto_config.h \\ |
| $NJS_BUILD_DIR/njs_process_script_fuzzer |
| |
| lib_test: $NJS_BUILD_DIR/njs_auto_config.h \\ |
| $NJS_BUILD_DIR/random_unit_test \\ |
| $NJS_BUILD_DIR/rbtree_unit_test \\ |
| $NJS_BUILD_DIR/lvlhsh_unit_test \\ |
| $NJS_BUILD_DIR/unicode_unit_test |
| |
| $NJS_BUILD_DIR/random_unit_test |
| $NJS_BUILD_DIR/rbtree_unit_test |
| $NJS_BUILD_DIR/lvlhsh_unit_test |
| $NJS_BUILD_DIR/unicode_unit_test |
| |
| test262: njs |
| |
| test/test262 --binary=$NJS_BUILD_DIR/njs |
| |
| unit_test: $NJS_BUILD_DIR/njs_auto_config.h \\ |
| $NJS_BUILD_DIR/njs_unit_test |
| |
| $NJS_BUILD_DIR/njs_unit_test |
| |
| test: shell_test unit_test test262 |
| |
| benchmark: $NJS_BUILD_DIR/njs_auto_config.h \\ |
| $NJS_BUILD_DIR/njs_benchmark |
| |
| $NJS_BUILD_DIR/njs_benchmark |
| |
| dist: |
| rm -rf njs-\$(NJS_VER) \\ |
| && hg archive njs-\$(NJS_VER).tar.gz \\ |
| -p njs-\$(NJS_VER) \\ |
| -X ".hg*" \\ |
| && echo njs-\$(NJS_VER).tar.gz done |
| END |
| |
| njs_ts_deps=`echo $NJS_TS_SRCS \ |
| | sed -e "s# *\([^ ][^ ]*\)#\1$njs_regex_cont#g"` |
| |
| njs_test_ts_deps=`echo $NJS_TEST_TS_SRCS \ |
| | sed -e "s# *\([^ ][^ ]*\)#\1$njs_regex_cont#g"` |
| |
| cat << END >> $NJS_MAKEFILE |
| |
| $NJS_BUILD_DIR/ts/package.json: $njs_ts_deps |
| cp -fr ts $NJS_BUILD_DIR/ |
| cp LICENSE $NJS_BUILD_DIR/ts/ |
| sed 's/\("version":\s*\)"\([^"]\+\)"/\1"\$(NJS_TYPES_VER)"/' \\ |
| ts/package.json > $NJS_BUILD_DIR/ts/package.json |
| |
| $NJS_BUILD_DIR/ts/node_modules: $NJS_BUILD_DIR/ts/package.json |
| cd $NJS_BUILD_DIR/ts && \$(NPM) install |
| touch $NJS_BUILD_DIR/ts/node_modules |
| |
| $NJS_BUILD_DIR/njs-types-\$(NJS_TYPES_VER).tgz: $NJS_BUILD_DIR/ts/package.json |
| hg id -i > $NJS_BUILD_DIR/ts/COMMITHASH || true |
| cd $NJS_BUILD_DIR && \$(NPM) pack ./ts |
| |
| .PHONY: ts |
| ts: $NJS_BUILD_DIR/ts/package.json |
| |
| ts_lint: $NJS_BUILD_DIR/ts/node_modules |
| cd $NJS_BUILD_DIR/ts && \$(NPM) run lint |
| |
| $NJS_BUILD_DIR/test/ts/package.json: $njs_test_ts_deps |
| mkdir -p $NJS_BUILD_DIR/test |
| cp -fr test/ts $NJS_BUILD_DIR/test/ |
| |
| $NJS_BUILD_DIR/test/ts/node_modules: \\ |
| $NJS_BUILD_DIR/njs-types-\$(NJS_TYPES_VER).tgz \\ |
| $NJS_BUILD_DIR/test/ts/package.json |
| cd $NJS_BUILD_DIR/test/ts && \$(NPM) install \\ |
| --save-dev file:../../njs-types-\$(NJS_TYPES_VER).tgz |
| cd $NJS_BUILD_DIR/test/ts && \$(NPM) install |
| touch $NJS_BUILD_DIR/test/ts/node_modules |
| |
| ts_test: $NJS_BUILD_DIR/test/ts/node_modules |
| cd $NJS_BUILD_DIR/test/ts && \$(NPM) test |
| |
| ts_publish: ts_clean $NJS_BUILD_DIR/njs-types-\$(NJS_TYPES_VER).tgz |
| cd $NJS_BUILD_DIR/ && \$(NPM) publish njs-types-\$(NJS_TYPES_VER).tgz |
| |
| ts_clean: |
| rm -rf $NJS_BUILD_DIR/ts |
| END |
| |
| |
| # Makefile. |
| |
| cat << END > Makefile |
| |
| # This file is auto-generated by configure |
| |
| include $NJS_MAKEFILE |
| |
| .PHONY: clean |
| clean: |
| rm -rf $NJS_BUILD_DIR Makefile |
| |
| END |