diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 16c4697..94b0964 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -250,8 +250,50 @@ stages: popd displayName: Test +- stage: Extra + dependsOn: [Test] + jobs: + + - job: 'Linux' + strategy: + matrix: + TinyCC: { + EXE: tcc, PACKAGES: tcc, VM_IMAGE: 'ubuntu-latest', + TOOLSET: cc, VERSION: "tcc~0.9.27", + B2_CONFIG: '"-std=c11" <-soname>-soname', + B2_ARGS: 'c' } + pool: + vmImage: $(VM_IMAGE) + continueOnError: 'true' + steps: + - bash: | + set -e + uname -a + ./tools/ci/linux-cxx-install.sh + displayName: 'Install CXX' + - bash: | + set -e + pushd ${HOME} + wget -nv https://github.com/bfgroup/b2/archive/main.tar.gz + tar -zxf main.tar.gz + cd b2-main + ./bootstrap.sh + sudo ./b2 install + popd + displayName: 'Install B2' + - bash: | + set -e + EXE_PATH=`which ${EXE}` + echo "using ${TOOLSET} : ${VERSION} : ${EXE_PATH} : ${B2_CONFIG} ;" > ${HOME}/user-config.jam + pushd test + b2 --verbose-test -a toolset=${TOOLSET} ${B2_ARGS} + b2 --debug-configuration -a toolset=${TOOLSET} ${B2_ARGS} + popd + displayName: Test + - stage: WebsiteUpdate displayName: 'Website Update' + dependsOn: [Test] condition: and(in(variables['Build.SourceBranch'], 'refs/heads/master', 'refs/heads/develop'), eq(variables['Build.Repository.Name'], 'grafikrobot/hash-predef')) jobs: diff --git a/test/build.jam b/test/build.jam index eb23b2e..ee99636 100644 --- a/test/build.jam +++ b/test/build.jam @@ -18,13 +18,22 @@ project using testing ; -test-suite predef-info : - [ run info_as_cpp.cpp : : : always_show_run_output ] +alias predef-info-c : [ run info_as_c.c : : : always_show_run_output ] - [ run info_as_objcpp.mm : : : always_show_run_output @objc ] - [ run info_as_objc.m : : : always_show_run_output @objc ] ; +alias predef-info-cpp : + [ run info_as_cpp.cpp : : : always_show_run_output ] + ; + +alias predef-info-objc : + [ run info_as_objcpp.mm : : : always_show_run_output ] + [ run info_as_objc.m : : : always_show_run_output ] + : @objc + ; + +alias predef-info : predef-info-c predef-info-cpp predef-info-objc ; + rule objc ( props * ) { if ! ( darwin in $(props) ) @@ -33,7 +42,7 @@ rule objc ( props * ) } } -test-suite predef : +alias predef : [ run version.cpp ] [ run make.cpp ] [ compile macos_endian.c : [ predef-require "BOOST_OS_MACOS" : cpp ] ] @@ -47,30 +56,50 @@ test-suite predef : [ compile platform_windows.cpp ] ; +local single_header_c ; +for local h in [ glob-tree-ex ../include/boost/predef : *.h ] +{ + local header_include = [ path.relative $(h) ../include ] ; + local header_src = [ regex.replace $(header_include:S=)_c.c "/" "_" ] ; + local header_target = $(header_src:B:S=) ; + .HEADER($(header_target)) = $(header_include) ; + make $(header_src) : : @gen_single_header_c_or_cpp ; + explicit $(header_src) ; + compile $(header_src) : on all : $(header_target) ; + explicit $(header_target) ; + single_header_c += $(header_target) ; +} + local single_header_cpp ; for local h in [ glob-tree-ex ../include/boost/predef : *.h ] { local header_include = [ path.relative $(h) ../include ] ; - local header_cpp = [ regex.replace $(header_include:S=.cpp) "/" "_" ] ; - .HEADER($(header_cpp:B:S=)) = $(header_include) ; - make $(header_cpp) : : @gen_single_header_cpp ; - explicit $(header_cpp) ; - compile $(header_cpp) : on all : $(header_cpp:B:S=) ; - explicit $(header_cpp:B:S=) ; - single_header_cpp += $(header_cpp:B:S=) ; + local header_src = [ regex.replace $(header_include:S=)_cpp.cpp "/" "_" ] ; + local header_target = $(header_src:B:S=) ; + .HEADER($(header_target)) = $(header_include) ; + make $(header_src) : : @gen_single_header_c_or_cpp ; + explicit $(header_src) ; + compile $(header_src) : on all : $(header_target) ; + explicit $(header_target) ; + single_header_cpp += $(header_target) ; } -test-suite predef-headers : $(single_header_cpp) ; +alias predef-headers-c : $(single_header_c) ; +alias predef-headers-cpp : $(single_header_cpp) ; +alias predef-headers : predef-headers-c predef-headers-cpp ; .file_touch_cmd = [ common.file-touch-command ] ; -rule gen_single_header_cpp ( target * : source * : properties * ) +rule gen_single_header_c_or_cpp ( target * : source * : properties * ) { - HEADER on $(target) = $(.HEADER($(target[1]:B))) ; + TEXT on $(target) = " +#include <$(.HEADER($(target[1]:B)))> +typedef char predef_single_header_test; +" ; } -actions gen_single_header_cpp +actions gen_single_header_c_or_cpp { - $(.file_touch_cmd) @($(<):<=":>=":O=F:E=#include <$(HEADER)>) + $(.file_touch_cmd) @($(<):<=":>=":O=F:E=$(TEXT)) } # Minimal testing done for predef for CI. Since @@ -83,8 +112,14 @@ alias full : predef predef-info ; # Extra's target. alias extra : predef-headers ; +# Language specific tests only. +alias c : predef-info-c predef-headers-c ; +alias cpp : predef-info-cpp predef-headers-cpp ; + alias all : predef predef-info predef-headers ; explicit minimal ; explicit extra ; explicit all ; +explicit c ; +explicit cpp ;