1 Star 0 Fork 0

hzcc/czmq

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
ci_build.sh 19.33 KB
一键复制 编辑 原始数据 按行查看 历史
Luca Boccassi 提交于 2020-06-28 13:23 . Problem: OBS build on sid fails
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540
#!/usr/bin/env bash
################################################################################
# THIS FILE IS 100% GENERATED BY ZPROJECT; DO NOT EDIT EXCEPT EXPERIMENTALLY #
# READ THE ZPROJECT/README.MD FOR INFORMATION ABOUT MAKING PERMANENT CHANGES. #
################################################################################
set -e
# Set this to enable verbose profiling
[ -n "${CI_TIME-}" ] || CI_TIME=""
case "$CI_TIME" in
[Yy][Ee][Ss]|[Oo][Nn]|[Tt][Rr][Uu][Ee])
CI_TIME="time -p " ;;
[Nn][Oo]|[Oo][Ff][Ff]|[Ff][Aa][Ll][Ss][Ee])
CI_TIME="" ;;
esac
configure_tracing() {
# Set this to enable verbose tracing
[ -n "${CI_TRACE-}" ] || CI_TRACE="no"
case "$CI_TRACE" in
[Nn][Oo]|[Oo][Ff][Ff]|[Ff][Aa][Ll][Ss][Ee])
set +x ;;
[Yy][Ee][Ss]|[Oo][Nn]|[Tt][Rr][Uu][Ee])
set -x ;;
esac
}
configure_tracing
fold_start() {
set +x
echo -e "travis_fold:start:$1\033[33;1m$2\033[0m"
configure_tracing
}
fold_start_plain() {
set +x
echo -e "travis_fold:start:$1"
configure_tracing
}
fold_end() {
set +x
echo -e "\ntravis_fold:end:$1\r"
configure_tracing
}
case $TRAVIS_OS_NAME in
windows)
export
choco install openjdk
export JAVA_HOME="C:\Program Files\OpenJDK\jdk-13.0.2"
export BUILD_PREFIX=$TEMP/ci_build
# Build will fail if processes are still running at the end of the script.
# Gradle by default starts a daemon so consequtive builds are faster.
# Therefore instruct gradle not to use its daemon.
export GRADLE_OPTS=-Dorg.gradle.daemon=false
cd ..
git clone --quiet --depth 1 https://github.com/zeromq/libzmq.git libzmq
cd libzmq
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=$BUILD_PREFIX -DCMAKE_PREFIX_PATH=$BUILD_PREFIX
cmake --build . --config Release --target install
cd ../..
if [ -d "libzmq/bindings/jni" ]; then
cd libzmq/bindings/jni
./gradlew publishToMavenLocal -PbuildPrefix=$BUILD_PREFIX --info
cd ../../..
fi
cd czmq
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=$BUILD_PREFIX -DCMAKE_PREFIX_PATH=$BUILD_PREFIX
cmake --build . --config Release --target install
ctest --build-config Release
cd ../..
cd czmq
cd bindings/jni
./gradlew build jar -PbuildPrefix=$BUILD_PREFIX -x test --info
./gradlew publishToMavenLocal -PbuildPrefix=$BUILD_PREFIX --info
exit 0
esac
case "$BUILD_TYPE" in
default|default-Werror|default-with-docs|valgrind|clang-format-check)
LANG=C
LC_ALL=C
export LANG LC_ALL
if [ -d "./tmp" ]; then
# Proto installation area for this project and its deps
rm -rf ./tmp
fi
mkdir -p tmp
if [ -d "./tmp-deps" ]; then
# Checkout/unpack and build area for dependencies
rm -rf ./tmp-deps
fi
mkdir -p tmp-deps
BUILD_PREFIX=$PWD/tmp
PATH="`echo "$PATH" | sed -e 's,^/usr/lib/ccache/?:,,' -e 's,:/usr/lib/ccache/?:,,' -e 's,:/usr/lib/ccache/?$,,' -e 's,^/usr/lib/ccache/?$,,'`"
CCACHE_PATH="$PATH"
CCACHE_DIR="${HOME}/.ccache"
# Use tools from prerequisites we might have built
PATH="${BUILD_PREFIX}/sbin:${BUILD_PREFIX}/bin:${PATH}"
export CCACHE_PATH CCACHE_DIR PATH
HAVE_CCACHE=no
if which ccache && ls -la /usr/lib/ccache ; then
HAVE_CCACHE=yes
fi
mkdir -p "${CCACHE_DIR}" || HAVE_CCACHE=no
if [ "$HAVE_CCACHE" = yes ] && [ -d "$CCACHE_DIR" ]; then
fold_start_plain ccache.before
echo "CCache stats before build:"
ccache -s || true
fold_end ccache.before
fi
CONFIG_OPTS=()
COMMON_CFLAGS=""
EXTRA_CFLAGS=""
EXTRA_CPPFLAGS=""
EXTRA_CXXFLAGS=""
is_gnucc() {
if [ -n "$1" ] && "$1" --version 2>&1 | grep 'Free Software Foundation' > /dev/null ; then true ; else false ; fi
}
COMPILER_FAMILY=""
if [ -n "$CC" -a -n "$CXX" ]; then
if is_gnucc "$CC" && is_gnucc "$CXX" ; then
COMPILER_FAMILY="GCC"
export CC CXX
fi
else
if is_gnucc "gcc" && is_gnucc "g++" ; then
# Autoconf would pick this by default
COMPILER_FAMILY="GCC"
[ -n "$CC" ] || CC=gcc
[ -n "$CXX" ] || CXX=g++
export CC CXX
elif is_gnucc "cc" && is_gnucc "c++" ; then
COMPILER_FAMILY="GCC"
[ -n "$CC" ] || CC=cc
[ -n "$CXX" ] || CXX=c++
export CC CXX
fi
fi
if [ -n "$CPP" ] ; then
[ -x "$CPP" ] && export CPP
else
if is_gnucc "cpp" ; then
CPP=cpp && export CPP
fi
fi
CONFIG_OPT_WERROR="--enable-Werror=no"
if [ "$BUILD_TYPE" == "default-Werror" ] ; then
case "${COMPILER_FAMILY}" in
GCC)
echo "NOTE: Enabling ${COMPILER_FAMILY} compiler pedantic error-checking flags for BUILD_TYPE='$BUILD_TYPE'" >&2
CONFIG_OPT_WERROR="--enable-Werror=yes"
CONFIG_OPTS+=("--enable-Werror=yes")
;;
*)
echo "WARNING: Current compiler is not GCC, might not enable pedantic error-checking flags for BUILD_TYPE='$BUILD_TYPE'" >&2
CONFIG_OPT_WERROR="--enable-Werror=auto"
;;
esac
fi
CONFIG_OPTS+=("CFLAGS=-I${BUILD_PREFIX}/include")
CONFIG_OPTS+=("CPPFLAGS=-I${BUILD_PREFIX}/include")
CONFIG_OPTS+=("CXXFLAGS=-I${BUILD_PREFIX}/include")
CONFIG_OPTS+=("LDFLAGS=-L${BUILD_PREFIX}/lib")
CONFIG_OPTS+=("PKG_CONFIG_PATH=${BUILD_PREFIX}/lib/pkgconfig")
CONFIG_OPTS+=("--prefix=${BUILD_PREFIX}")
if [ -z "${CI_CONFIG_QUIET-}" ] || [ "${CI_CONFIG_QUIET-}" = yes ] || [ "${CI_CONFIG_QUIET-}" = true ]; then
CONFIG_OPTS+=("--quiet")
fi
if [ "$HAVE_CCACHE" = yes ] && [ "${COMPILER_FAMILY}" = GCC ]; then
PATH="/usr/lib/ccache:$PATH"
export PATH
if [ -n "$CC" ] && [ -x "/usr/lib/ccache/`basename "$CC"`" ]; then
case "$CC" in
*ccache*) ;;
*/*) DIR_CC="`dirname "$CC"`" && [ -n "$DIR_CC" ] && DIR_CC="`cd "$DIR_CC" && pwd `" && [ -n "$DIR_CC" ] && [ -d "$DIR_CC" ] || DIR_CC=""
[ -z "$CCACHE_PATH" ] && CCACHE_PATH="$DIR_CC" || \
if echo "$CCACHE_PATH" | egrep '(^'"$DIR_CC"':.*|^'"$DIR_CC"'$|:'"$DIR_CC"':|:'"$DIR_CC"'$)' ; then
CCACHE_PATH="$DIR_CC:$CCACHE_PATH"
fi
;;
esac
CC="/usr/lib/ccache/`basename "$CC"`"
else
: # CC="ccache $CC"
fi
if [ -n "$CXX" ] && [ -x "/usr/lib/ccache/`basename "$CXX"`" ]; then
case "$CXX" in
*ccache*) ;;
*/*) DIR_CXX="`dirname "$CXX"`" && [ -n "$DIR_CXX" ] && DIR_CXX="`cd "$DIR_CXX" && pwd `" && [ -n "$DIR_CXX" ] && [ -d "$DIR_CXX" ] || DIR_CXX=""
[ -z "$CCACHE_PATH" ] && CCACHE_PATH="$DIR_CXX" || \
if echo "$CCACHE_PATH" | egrep '(^'"$DIR_CXX"':.*|^'"$DIR_CXX"'$|:'"$DIR_CXX"':|:'"$DIR_CXX"'$)' ; then
CCACHE_PATH="$DIR_CXX:$CCACHE_PATH"
fi
;;
esac
CXX="/usr/lib/ccache/`basename "$CXX"`"
else
: # CXX="ccache $CXX"
fi
if [ -n "$CPP" ] && [ -x "/usr/lib/ccache/`basename "$CPP"`" ]; then
case "$CPP" in
*ccache*) ;;
*/*) DIR_CPP="`dirname "$CPP"`" && [ -n "$DIR_CPP" ] && DIR_CPP="`cd "$DIR_CPP" && pwd `" && [ -n "$DIR_CPP" ] && [ -d "$DIR_CPP" ] || DIR_CPP=""
[ -z "$CCACHE_PATH" ] && CCACHE_PATH="$DIR_CPP" || \
if echo "$CCACHE_PATH" | egrep '(^'"$DIR_CPP"':.*|^'"$DIR_CPP"'$|:'"$DIR_CPP"':|:'"$DIR_CPP"'$)' ; then
CCACHE_PATH="$DIR_CPP:$CCACHE_PATH"
fi
;;
esac
CPP="/usr/lib/ccache/`basename "$CPP"`"
else
: # CPP="ccache $CPP"
fi
CONFIG_OPTS+=("CC=${CC}")
CONFIG_OPTS+=("CXX=${CXX}")
CONFIG_OPTS+=("CPP=${CPP}")
fi
CONFIG_OPTS_COMMON=$CONFIG_OPTS
CONFIG_OPTS+=("--with-docs=no")
# Clone and build dependencies, if not yet installed to Travis env as DEBs
# or MacOS packages; other OSes are not currently supported by Travis cloud
[ -z "$CI_TIME" ] || echo "`date`: Starting build of dependencies (if any)..."
# Start of recipe for dependency: libzmq
fold_start dependency.libzmq "Install dependency libzmq"
if ! ((command -v dpkg >/dev/null 2>&1 && dpkg -s libzmq3-dev >/dev/null 2>&1) || \
(command -v brew >/dev/null 2>&1 && brew ls --versions libzmq >/dev/null 2>&1)) \
; then
echo ""
BASE_PWD=${PWD}
echo "`date`: INFO: Building prerequisite 'libzmq' from Git repository..." >&2
cd ./tmp-deps
$CI_TIME git clone --quiet --depth 1 https://github.com/zeromq/libzmq.git libzmq
cd ./libzmq
CCACHE_BASEDIR=${PWD}
export CCACHE_BASEDIR
git --no-pager log --oneline -n1
if [ -e autogen.sh ]; then
$CI_TIME ./autogen.sh 2> /dev/null
fi
if [ -e buildconf ]; then
$CI_TIME ./buildconf 2> /dev/null
fi
if [ ! -e autogen.sh ] && [ ! -e buildconf ] && [ ! -e ./configure ] && [ -s ./configure.ac ]; then
$CI_TIME libtoolize --copy --force && \
$CI_TIME aclocal -I . && \
$CI_TIME autoheader && \
$CI_TIME automake --add-missing --copy && \
$CI_TIME autoconf || \
$CI_TIME autoreconf -fiv
fi
if [ -e ./configure ]; then
$CI_TIME ./configure "${CONFIG_OPTS[@]}"
else
mkdir build
cd build
$CI_TIME cmake .. -DCMAKE_INSTALL_PREFIX=$BUILD_PREFIX -DCMAKE_PREFIX_PATH=$BUILD_PREFIX
fi
if [ -e ./configure ]; then
$CI_TIME make -j4
$CI_TIME make install
else
$CI_TIME cmake --build . --config Release --target install
fi
cd "${BASE_PWD}"
fi
fold_end dependency.libzmq
# Start of recipe for dependency: uuid
fold_start dependency.uuid "Install dependency uuid"
if ! ((command -v dpkg >/dev/null 2>&1 && dpkg -s uuid-dev >/dev/null 2>&1) || \
(command -v brew >/dev/null 2>&1 && brew ls --versions uuid >/dev/null 2>&1)) \
; then
echo ""
echo "WARNING: Can not build prerequisite 'uuid'" >&2
echo "because neither tarball nor repository sources are known for it," >&2
echo "and it was not installed as a package; this may cause the test to fail!" >&2
else
CONFIG_OPTS+=("--with-uuid=yes")
fi
fold_end dependency.uuid
# Start of recipe for dependency: systemd
fold_start dependency.systemd "Install dependency systemd"
if ! ((command -v dpkg >/dev/null 2>&1 && dpkg -s libsystemd-dev >/dev/null 2>&1) || \
(command -v brew >/dev/null 2>&1 && brew ls --versions systemd >/dev/null 2>&1)) \
; then
echo ""
echo "WARNING: Can not build prerequisite 'systemd'" >&2
echo "because neither tarball nor repository sources are known for it," >&2
echo "and it was not installed as a package; this may cause the test to fail!" >&2
else
CONFIG_OPTS+=("--with-libsystemd=yes")
fi
fold_end dependency.systemd
# Start of recipe for dependency: lz4
fold_start dependency.lz4 "Install dependency lz4"
if ! ((command -v dpkg >/dev/null 2>&1 && dpkg -s liblz4-dev >/dev/null 2>&1) || \
(command -v brew >/dev/null 2>&1 && brew ls --versions lz4 >/dev/null 2>&1)) \
; then
echo ""
echo "WARNING: Can not build prerequisite 'lz4'" >&2
echo "because neither tarball nor repository sources are known for it," >&2
echo "and it was not installed as a package; this may cause the test to fail!" >&2
else
CONFIG_OPTS+=("--with-liblz4=yes")
fi
fold_end dependency.lz4
# Start of recipe for dependency: libcurl
fold_start dependency.libcurl "Install dependency libcurl"
if ! ((command -v dpkg >/dev/null 2>&1 && dpkg -s libcurl4-nss-dev >/dev/null 2>&1) || \
(command -v brew >/dev/null 2>&1 && brew ls --versions libcurl >/dev/null 2>&1)) \
; then
echo ""
BASE_PWD=${PWD}
echo "`date`: INFO: Building prerequisite 'libcurl' from Git repository..." >&2
cd ./tmp-deps
$CI_TIME git clone --quiet --depth 1 https://github.com/curl/curl.git libcurl
cd ./libcurl
CCACHE_BASEDIR=${PWD}
export CCACHE_BASEDIR
git --no-pager log --oneline -n1
if [ -e autogen.sh ]; then
$CI_TIME ./autogen.sh 2> /dev/null
fi
if [ -e buildconf ]; then
$CI_TIME ./buildconf 2> /dev/null
fi
if [ ! -e autogen.sh ] && [ ! -e buildconf ] && [ ! -e ./configure ] && [ -s ./configure.ac ]; then
$CI_TIME libtoolize --copy --force && \
$CI_TIME aclocal -I . && \
$CI_TIME autoheader && \
$CI_TIME automake --add-missing --copy && \
$CI_TIME autoconf || \
$CI_TIME autoreconf -fiv
fi
if [ -e ./configure ]; then
$CI_TIME ./configure "${CONFIG_OPTS[@]}"
else
mkdir build
cd build
$CI_TIME cmake .. -DCMAKE_INSTALL_PREFIX=$BUILD_PREFIX -DCMAKE_PREFIX_PATH=$BUILD_PREFIX
fi
if [ -e ./configure ]; then
$CI_TIME make -j4
$CI_TIME make install
else
$CI_TIME cmake --build . --config Release --target install
fi
cd "${BASE_PWD}"
CONFIG_OPTS+=("--with-libcurl=yes")
else
CONFIG_OPTS+=("--with-libcurl=yes")
fi
fold_end dependency.libcurl
# Start of recipe for dependency: nss
fold_start dependency.nss "Install dependency nss"
if ! ((command -v dpkg >/dev/null 2>&1 && dpkg -s libnss3-dev >/dev/null 2>&1) || \
(command -v brew >/dev/null 2>&1 && brew ls --versions nss >/dev/null 2>&1)) \
; then
echo ""
echo "WARNING: Can not build prerequisite 'nss'" >&2
echo "because neither tarball nor repository sources are known for it," >&2
echo "and it was not installed as a package; this may cause the test to fail!" >&2
else
CONFIG_OPTS+=("--with-nss=yes")
fi
fold_end dependency.nss
# Start of recipe for dependency: libmicrohttpd
fold_start dependency.libmicrohttpd "Install dependency libmicrohttpd"
if ! ((command -v dpkg >/dev/null 2>&1 && dpkg -s libmicrohttpd-dev >/dev/null 2>&1) || \
(command -v brew >/dev/null 2>&1 && brew ls --versions libmicrohttpd >/dev/null 2>&1)) \
; then
echo ""
BASE_PWD=${PWD}
echo "`date`: INFO: Building prerequisite 'libmicrohttpd' from tarball..." >&2
cd ./tmp-deps
$CI_TIME wget http://ftp.gnu.org/gnu/libmicrohttpd/libmicrohttpd-0.9.44.tar.gz
tar -xzf $(basename "http://ftp.gnu.org/gnu/libmicrohttpd/libmicrohttpd-0.9.44.tar.gz")
cd $(basename "http://ftp.gnu.org/gnu/libmicrohttpd/libmicrohttpd-0.9.44.tar.gz" .tar.gz) || exit $?
CCACHE_BASEDIR=${PWD}
export CCACHE_BASEDIR
if [ -e autogen.sh ]; then
$CI_TIME ./autogen.sh 2> /dev/null
fi
if [ -e buildconf ]; then
$CI_TIME ./buildconf 2> /dev/null
fi
if [ ! -e autogen.sh ] && [ ! -e buildconf ] && [ ! -e ./configure ] && [ -s ./configure.ac ]; then
$CI_TIME libtoolize --copy --force && \
$CI_TIME aclocal -I . && \
$CI_TIME autoheader && \
$CI_TIME automake --add-missing --copy && \
$CI_TIME autoconf || \
$CI_TIME autoreconf -fiv
fi
if [ -e ./configure ]; then
$CI_TIME ./configure "${CONFIG_OPTS[@]}"
else
mkdir build
cd build
$CI_TIME cmake .. -DCMAKE_INSTALL_PREFIX=$BUILD_PREFIX -DCMAKE_PREFIX_PATH=$BUILD_PREFIX
fi
if [ -e ./configure ]; then
$CI_TIME make -j4
$CI_TIME make install
else
$CI_TIME cmake --build . --config Release --target install
fi
cd "${BASE_PWD}"
CONFIG_OPTS+=("--with-libmicrohttpd=yes")
else
CONFIG_OPTS+=("--with-libmicrohttpd=yes")
fi
fold_end dependency.libmicrohttpd
# Build and check this project; note that zprojects always have an autogen.sh
fold_start build.draft "Build and check this project with DRAFT APIs"
echo ""
echo "`date`: INFO: Starting build of currently tested project with DRAFT APIs..."
CCACHE_BASEDIR=${PWD}
export CCACHE_BASEDIR
if [ "$BUILD_TYPE" = "default-with-docs" ]; then
CONFIG_OPTS=$CONFIG_OPTS_COMMON
CONFIG_OPTS+=("--with-docs=yes")
fi
if [ -n "$ADDRESS_SANITIZER" ] && [ "$ADDRESS_SANITIZER" == "enabled" ]; then
CONFIG_OPTS+=("--enable-address-sanitizer=yes")
fi
# Only use --enable-Werror on projects that are expected to have it
# (and it is not our duty to check prerequisite projects anyway)
CONFIG_OPTS+=("${CONFIG_OPT_WERROR}")
$CI_TIME ./autogen.sh 2> /dev/null
$CI_TIME ./configure --enable-drafts=yes "${CONFIG_OPTS[@]}"
case "$BUILD_TYPE" in
valgrind)
# Build and check this project
$CI_TIME make VERBOSE=1 memcheck && exit
echo "Re-running failed ($?) memcheck with greater verbosity" >&2
$CI_TIME make VERBOSE=1 memcheck-verbose
exit $?
;;
clang-format-check)
$CI_TIME make VERBOSE=1 clang-format-check-CI
exit $?
;;
esac
$CI_TIME make VERBOSE=1 all
echo "=== Are GitIgnores good after 'make all' with drafts?"
make check-gitignore
echo "==="
if [ "$CI_TEST_DISTCHECK" = false ]; then
make check
else
(
export DISTCHECK_CONFIGURE_FLAGS="--enable-drafts=yes ${CONFIG_OPTS[@]}" && \
$CI_TIME make VERBOSE=1 DISTCHECK_CONFIGURE_FLAGS="$DISTCHECK_CONFIGURE_FLAGS" distcheck || exit $?
)
fi
echo "=== Are GitIgnores good after 'make (dist)check' with drafts?"
make check-gitignore
echo "==="
fold_end build.draft
# Build and check this project without DRAFT APIs
fold_start build.stable "Build and check this project with STABLE APIs"
echo ""
echo "`date`: INFO: Starting build of currently tested project without DRAFT APIs..."
make distclean
git clean -f
git reset --hard HEAD
(
$CI_TIME ./autogen.sh 2> /dev/null
$CI_TIME ./configure --enable-drafts=no "${CONFIG_OPTS[@]}"
$CI_TIME make VERBOSE=1 all || exit $?
if [ "$CI_TEST_DISTCHECK" = false ]; then
make check
else
(
export DISTCHECK_CONFIGURE_FLAGS="--enable-drafts=no ${CONFIG_OPTS[@]}" && \
$CI_TIME make VERBOSE=1 DISTCHECK_CONFIGURE_FLAGS="$DISTCHECK_CONFIGURE_FLAGS" distcheck || exit $?
)
fi
) || exit 1
[ -z "$CI_TIME" ] || echo "`date`: Builds completed without fatal errors!"
echo "=== Are GitIgnores good after 'make (dist)check' without drafts?"
make check-gitignore
echo "==="
fold_end build.stable
if [ "$HAVE_CCACHE" = yes ]; then
fold_start_plain ccache.after
echo "CCache stats after build:"
ccache -s
fold_end ccache.after
fi
;;
bindings)
pushd "./bindings/${BINDING}" && ./ci_build.sh
;;
*)
pushd "./builds/${BUILD_TYPE}" && REPO_DIR="$(dirs -l +1)" ./ci_build.sh
;;
esac
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/hwang_zc/czmq.git
git@gitee.com:hwang_zc/czmq.git
hwang_zc
czmq
czmq
master

搜索帮助

D67c1975 1850385 1daf7b77 1850385